描述
当DDR2 / DDR3内核集成到设计中时,如果断言sys_rst,则phy_init_done信号不会为低。
解
phy_init_done具有同步重置功能。
如果断言sys_rst,则sys_rst之后phy_init_done不会低,因为MMCM由于sys_rst而被重置。
由于没有时钟,phy_init_done将保持高电平,直到MMCM再次输出时钟。
如果在逻辑中使用phy_init_done并在此时发送读/写命令,则该命令将被忽略。
有两种方法可以解决此问题:
解决方案1:
将dfi_init_complete更改为异步重置。
在phy_init.v中,找到以下代码:
永远@(posedge clk)如果(rst)开始init_complete_r <= #TCQ 1’b0;init_complete_r1 <= #TCQ 1’b0;init_complete_r2 <= #TCQ 1’b0;dfi_init_complete <= #TCQ 1’b0;结束其他开始if(init_state_r == INIT_DONE)init_complete_r <= #TCQ 1’b1;init_complete_r1 <= #TCQ init_complete_r;init_complete_r2 <= #TCQ init_complete_r1;dfi_init_complete <= #TCQ init_complete_r2;结束
将rst更改为异步信号:
永远@(posedge clk或posedge rst)如果(rst)开始init_complete_r <= #TCQ 1’b0;init_complete_r1 <= #TCQ 1’b0;init_complete_r2 <= #TCQ 1’b0;dfi_init_complete <= #TCQ 1’b0;结束其他开始if(init_state_r == INIT_DONE)init_complete_r <= #TCQ 1’b1;init_complete_r1 <= #TCQ init_complete_r;init_complete_r2 <= #TCQ init_complete_r1;dfi_init_complete <= #TCQ init_complete_r2;结束
解决方案2:
不要重置MMCM,并始终保持时钟切换。
在infrastructure.v中,找到MMCM的RST端口并将其连接到1’b0。
没有回复内容