搭建适合自己的DDR3仿真平台

 

 

之前调试DDR都是下载板子直接观测ChipScope验证。最近需要搭建自己的DDR仿真平台。尝试在IP核里的sim文件为基础,修改添加适合自己的仿真平台。具体过程如下。

按照硬件对应的片子生成DDR3 IP,去掉IPcore,添加生成的RTL代码

搭建适合自己的DDR3仿真平台_第1张图片

搭建适合自己的DDR3仿真平台_第2张图片

 

以下主要利用IP核生成的仿真文件搭建适合自己的仿真平台。

  • 添加文件到工程

DDR3生成的仿真文件夹在“...\ipcore_dir\IP_DDR3\example_design\sim”里文件如下:搭建适合自己的DDR3仿真平台_第3张图片

这里主要用到的文件为3个.V和一个.vh。

将这3个.V和一个.vh复制到自己的工程源文件夹(“...\sim”)里,如下图:

搭建适合自己的DDR3仿真平台_第4张图片

添加这4个文件到工程中:

搭建适合自己的DDR3仿真平台_第5张图片

  • 修改sim_tb_top.v文件

注意这两个信号SIM_BYPASS_INIT_CAL和SIMULATION这两个信号,在sim_tb_top.v文件里定义为:

parameter SIMULATION            = "TRUE";

parameter SIM_BYPASS_INIT_CAL    = "FAST";

 适用于仿真模式,在implementation时应该是

parameter SIMULATION            = "FALSE";
parameter SIM_BYPASS_INIT_CAL    = "OFF";

修改1:屏蔽P84到P106

搭建适合自己的DDR3仿真平台_第6张图片

修改2:由于我在内部额外添加了DCM,外部输入时钟为100MHz,实际输入给你DDR3的时钟为200MHz,所以将CLKIN_PERIOD改为10000,但是这个定义不用传到下一层。这里只为了方便仿真激励的产生。DDR3的CLKIN_PERIOD还是使用内部默认定义,没有修改。

搭建适合自己的DDR3仿真平台_第7张图片

搭建适合自己的DDR3仿真平台_第8张图片

修改3:屏蔽掉自带的仿真实例化模块:example_top,改为自己的DDR3模块

搭建适合自己的DDR3仿真平台_第9张图片

搭建适合自己的DDR3仿真平台_第10张图片

自己生成的DDR3模块添加了测试接口tirg0,trig1,start,Frame_Length等信号。时钟接口由单端改为差分。自己的DDR3模块包括一个DCM,一个用户封装的fifo接口,还有DDR3核源文件。

搭建适合自己的DDR3仿真平台_第11张图片

***同时要注意在实例化DDR3.v时,以下6个信号必须给定,这写信号会影响仿真,不影响实际下板子运行。

搭建适合自己的DDR3仿真平台_第12张图片

我最开始自认为这几个信号没有用到,就直接没有声明,导致仿真时DDR3在初始化完成后只写了25个地址的数据后,DDR3_CS_N信号就为2’bX,造成后续写失败。如下图:

搭建适合自己的DDR3仿真平台_第13张图片

修改4:屏蔽两个系统函数$finish,以便让仿真继续持续运行。

搭建适合自己的DDR3仿真平台_第14张图片

  • 添加ddr3_model_parameters.vh文件到仿真软件目录下:C:\questasim_10.0b\verilog_src\ovm-2.1.1\src。不然仿真可能会出现找不到这个.vh文件。

搭建适合自己的DDR3仿真平台_第15张图片

在ISE里打开sim软件,添加需要观测的信号,运行仿真。

搭建适合自己的DDR3仿真平台_第16张图片

 

搭建适合自己的DDR3仿真平台_第17张图片

至此,自己的仿真平台搭建完成。

ddr3_model.v模型文件里默认定义的地址位宽是15。如果想仿真更多的地址空间,需要修改ddr3_model.v里的MEM_BITS定义。

    // Size Parameters
P184    parameter MEM_BITS         =      15; // Set this parameter to control how many write data bursts can be stored in memory.  The default is 2^10=1024.

 

 

你可能感兴趣的:(工作记录)