成功在板子上实现了ddr2读写,记录下过程
首先使用MIG向导来产生DDR2模块。我采用的时钟是150Mhz单端时钟,采用了镁光的256M内存。原来直接用的金士顿的内存,一直都调不通,后来发现对于不同颗粒的内存需要在芯片选择时选自定义,然后手动输入各个时序参数,还要保证管脚的一致性。感觉到硬件的兼容性真是和电脑差的远啊。自己就偷懒直接找了个镁光的条子插上去了。在向导中,其他的选项一般都默认,不同的是选择不用DCM时钟。注意在选取IO bank时要选择自己用到的bank,不然会出错。产生好DDR2核后,用自己板子的IO约束文件,把核再更新一下,使DDR2满足自己板子的约束。DDR2核就完成了。
之后在example文件夹中,利用create_ise.bat产生ISE工程文件。打开工程,开始对文件进行修改。主要是两部分,时钟的加入和复位信号处理。时钟DDR2核在我们的设置下默认需要150M,150M 90°,75M,200M,4路时钟。200M是提供给idelay模块的。我采用一个pll将输入晶振倍频输出200MHz,另一个pll由输入晶振时钟产生150M,150M 90°,75M三路时钟信号,供给ddr2驱动控制部分,其locked输出就作为系统中的DCM locked输入。我采用低电平的按钮输出作为reset信号,在程序中相应的加入0.1s延时去抖动模块,输出作为pll的reset信号端。这些程序都加载在ddr2_infrastructure文件中,作为整个模块的对外接口处理。
还需要将系统的initial、error信号连在两个LED上显示程序的正常运行与否。最后,修改clk、reset、led等的管脚约束。这样一个DDR2控制模块就成功了,下载在板子上,两个灯在reset无效后熄灭,程序OK!
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。