cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
huhanqian
Visitor
Visitor
230 Views
Registered: ‎08-11-2020

DDR3控制器MIG IP核接口中app_en信号的问题

各位专家大佬们,麻烦大家帮我看下我对于DDR3的MIG核仿真,代码中我的app_en信号是用组合逻辑的形式放在了状态机下(用assign形式结果也一样),写操作时仿真没发现问题,但读操作时app_rdy信号偶尔会异常拉低一段时间。

我的app_en信号由app_en_reg && app_rdy (&& app_wdf_rdy)控制,app_en_reg由状态机时序逻辑产生。我也尝试过去掉app_en_reg,将其替换成时序逻辑状态机中其他信号进行控制,两种方式结果相同。

MIG核我的配置是写入256位,突发长度为8的模式。写入数据位宽为16位,每16个周期存入一次。开始时我向地址0,8,16,24等地址依次写入2048个数据,然后状态机达到某一状态(中间几个状态有其他数据写入操作)时依次读取这2048个数据做处理后再存入。现读出第0个地址的数据是正确的,但第1个地址读出的数据很随机,并不是我存入的。仿真时给第0个地址读命令和读地址时app_rdy一直为高,所以没出现如图app_en的异常跳变,数据正常,但从给出第一个地址和命令开始就出现图中跳变。

如图所示,我向地址8写入的数据为00a1009e009e...,但读出的数据为00000080000000c...,明显不相互对应

我的情况和论坛中另一篇帖子相似:https://forums.xilinx.com/t5/%E4%BA%92%E8%BF%9E/DDR3%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E4%B8%ADapp-rdy%E4%BF%A1%E5%8F%B7%E7%9A%84%E9%97%AE%E9%A2%98/m-p/1156438#M1908

但是这篇帖子中并未给出具体解决方案,仿真时app_rdy拉低时确实会滞后ui_clk100ps,导致app_en出现异常跳变。据链接中贴子回复所说这种异常跳变不会影响具体读出的数据,在理论上我也十分认同他的说法,但实际仿真过程中出现的此种情况又无法解释,app_addr和app_cmd早在app_rdy拉高前一周期就已给出,不应存在亚稳态导致读地址错误的问题。

另外我认为即使仿真出现此类问题可能是由于异常跳变导致的,那么上板之后LUT和寄存器间有了具体延时时间,app_en应该绝不会受到这种异常跳变的影响(因为只持续了100ps,ui_clk对其采样应该不满足建立时间,所以应该不会出现此类跳变),但上板之后读出的数据还是第一个正确,后面的错乱。

对此问题我已实在想不出办法解决,请各位专家大佬帮忙解答,十分感谢!!!

 

sim_2.png
sim_1.png
0 Kudos
2 Replies
huhanqian
Visitor
Visitor
169 Views
Registered: ‎08-11-2020

别沉啊,有没有大佬可以回复一下呀,我这种非背靠背读为什么会出这种错呢

0 Kudos
rkhatri
Moderator
Moderator
80 Views
Registered: ‎01-10-2019

Hi @huhanqian ,

https://forums.xilinx.com/t5/Announcements/Did-you-know-that-we-have-a-Chinese-Language-Forums/td-p/1172814

Thanks,
Rahul Khatri
---------------------------------------------------------------------------------
Please Kudo or Accept as a solution, If this Post helped you.
---------------------------------------------------------------------------------
0 Kudos