如何在可综合Verilog/VHDL中实现DDR SDRAM控制器(禁用Xilinx MIG核)
手动实现DDR SDRAM控制器(无MIG核)的设计进展与踩坑记录
我最近在完成课程作业,需要实现一款DDR SDRAM控制器,而且明确要求不能使用Xilinx MIG核。经过好几轮设计尝试后,目前确定的方案是基于100MHz系统时钟做同步开发:通过计数器生成分频后的clock信号,直接输出到DDR SDRAM的IO引脚。
这里必须提一个关键的设计原则——我清楚绝对不能把这个分频出来的clock用作内部进程时钟,所以专门设计了逻辑来捕获该clock信号的上升沿选通信号,用这个选通信号来同步后续的控制逻辑,核心控制全程还是挂在100MHz系统时钟上运行。
关于这种分频时钟方案,我总结了几个需要重点注意的细节:
- 亚稳态规避:捕获
clock上升沿时,一定要用两级寄存器打拍处理,避免跨时钟域带来的亚稳态问题,否则选通信号很容易出现毛刺或错误触发 - 相位稳定性:计数器生成的分频时钟必须和系统时钟保持稳定的相位关系,否则DDR端的数据采样会出现时序不满足的情况,设计计数器时要提前规划好分频系数和相位偏移
- 时序约束强化:手动输出的DDR时钟信号需要单独做针对性的时序约束,确保和数据信号的建立/保持时间完全符合DDR SDRAM的规格书要求,这部分比使用MIG核要繁琐得多,得反复核对器件手册
目前这个方案还在调试优化阶段,后续如果有新的问题或经验,我也会及时补充。
内容的提问来源于stack exchange,提问作者nichollsg
相关产品推荐
相关产品推荐

