我想用51单片机通过fpga和sram通信,向里连读,连写数据。下面是我写的部分程序与仿真图,其中ok为写一次的标志,
if((mcu_wr_ns^mcu_rd_ns)&ok)
case(wr_rd_nums)
default:begin
sram_addr_temp_m<=mcu_io;
wr_rd_nums<=two;
ok<=0;
end
two:begin
sram_addr_temp_l<=mcu_io;
wr_rd_nums<=three;
ok<=0;
end
three:begin
if(!mcu_rd_ns)
mcu_data_temp<=sram_io[15:8];
else
sram_data_temp_m<=mcu_io;
sram_addr<={sram_addr_temp_m,sram_addr_temp_l};
wr_rd_nums<=four;
ok<=0;
end
four:begin
if(!mcu_rd_ns)
begin
mcu_data_temp<=sram_io[7:0];
wr_rd_nums<=one;
end
else
begin
sram_we_ns<=0;
sram_data_temp_l<=mcu_io;
wr_rd_nums<=wr_rd_nums+2'b01; ok<=0;
end
问题是其中的sram_we_ns始终为高,还有sram_add的值也不对,但是four:状态下的ok是好而we却不对。
这就需要你的调试技巧了,我给你提几点建议:
1,在每个状态前面加一个时钟同步信号,可以减小竞争与冒险。
2.像你这样的程序,在状态机的调试的时候,输出一个状态机量,在仿真的时候看看状态机的状态有没有问题。
3.多看一些有代表性的程序,这样写的程序读起来,写起来稳定性好。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |