SDRAM调试遇到的问题小结 -- Quartus II & Verilog HDL

总结:对Quartus II 工具使用不足。不能有效的使用SignalTap II ,导致大量时间浪费,学习效率非常低下。

之前对示波器的使用很欠缺,也导致任务停滞不前。

今天解决的问题:SDRAM突发写/读,突发长度为8的时候,读出的数据顺序有问题。后来在徐老师、文老师的帮助下,借助SignalTap II 工具,很清晰的找到问题所在。

error: 程序中sdram_data是与SDRAM芯片数据总线相接口的双向信号。而用于点亮LED的数据室sys_data_out,

sys_data_out <= sdram_data,这样就比sdram_data慢了一个时钟。而用于将sys_data_out赋值给data_check_0...data_check8的always模块中,对于这个赋值又是在if语句中完成的。if的条件是(sdram_rd_ack && (!sys_dout_rdy)),实际上就读早了。通过sdram_rd_ack_r<=sdram_rd_ack,并且条件改为 (sdram_rd_ack_r && (!sys_dout_rdy)) ,就能正确的从第一个数据开始读出了。但是还有一个问题,sys_dout_rdy是一个多余的条件,并且它将最后一个数据给截掉了。

所以最终修改后的部分代码为:

/

if(sdram_rd_ack_r ) begin
if(cnt_clk==9'd1) data_check1 <= sys_data_out;
if(cnt_clk==9'd2) data_check2 <= sys_data_out;
if(cnt_clk==9'd3) data_check3 <= sys_data_out;

if(cnt_clk==9'd4) data_check4 <= sys_data_out;
if(cnt_clk==9'd5) data_check5 <= sys_data_out;
if(cnt_clk==9'd6) data_check6 <= sys_data_out;
if(cnt_clk==9'd7) data_check7 <= sys_data_out;
if(cnt_clk==9'd8) data_check8 <= sys_data_out;

end

/

这反映了,我写的代码质量很差,if条件交织在一起是很混乱的,容易产生错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值