Micron的网站上可以下载到DDR2的仿真模型,开始以为直接连上就好,但事实上问题很多。
1.DDR2模型配置
DDR2仿真模型文件很多,其本身就是一个可以运行的仿真模块。我们不需要那么多文件,需要用到的文件是:
Ddr2.v是内存颗粒的仿真文件,ddr2_module.v是内存模组(内存条)的仿真文件,ddr2_model_parameters.vh是参数配置文件。
首先看ddr2_module.v的接口定义:
发现少了什么?
对,是dm(Data mask),先把它加上,类型是input,宽度是【8:0】:
再看ddr2.v的接口定义:
其中dm_rdqs就是dm接口,它在ddr2_module.v中连接的是dqs【17:9】,如图:
Dqs的类型是inout,dm的类型是output,如果不改掉的话,在顶层的tb里是联不通的。所以这里吧dqs【9..17】改为dm[0..8],如图:
最后看ddr2_parameters.vh,这里面存储了DDR2的各种参数,需要改的是最下面的内容:
BA_BITS是BA的位宽,在DDR2 SODIMM中,BA的宽度是2,要改掉。否则仿真时会出错。
DEBUG是Debug message的开关,打开关掉都可以,但是打开的话会严重拖慢仿真速度,这里关掉就好了。修改结果如图:
在modelsim中编译DDR2模块时,我是用的命令为:
vlog-novopt +define+SODIMM +define+x16 +define+sg37E../ddr2/ddr2_module.v ../ddr2/ddr2.v
具体含义可以参照ddr2模块中的readme.txt。
到此为止,DDR2模块的修改就完成了。
2.EDK模块的配置
如何在EDK中生成仿真模型及EDK库的配置在网上有较多说明,此处跳过。
这里要修改mhs文件,在system.mhs中,找到描述mpmc的段落,在段中加入
########################################
#Simulation
########################################
PARAMETER C_SKIP_SIM_INIT_DELAY =1
这句的含义是跳过DDR2的启动时间,加快仿真速度。
3.结果演示
将DDR2和EDK连接的过程不再赘述,下面直接给出modelsim的仿真结果:
DDR2完成启动居然花了73us,若是不加C_SKIP_SIM_INIT_DELAY可能要300-400u!
DDR2的仿真可对电脑要求不低啊!