跳转到主要内容

FPGA小课堂-使用DDR4控制器实现多通道数据读写(3)

在上一节中了解了DDR4 IP核的接口信号,这一节主要讲述如何建立DDR4的仿真模型。

  1.添加空白的仿真文件,选择SystemVerilog类型,如图1所示。

Image
添加空白的仿真文件,选择SystemVerilog类型

2.把ddr_top模块例化到ddr_top_tb仿真模块中,因为我们要产生100MHz的时钟作为激励,所以把时钟尺度改为1ps/1ps,这样更方便使用整数产生时钟。如图2所示。

Image
使用整数产生时钟

3.接下来我们右键点击ddr4 ip核,打开示例工程Example Design,这是vivado自带的ddr4例化仿真测试工程。如图3所示。

Image
vivado自带的ddr4例化仿真测试工程

  4.打开示例工程,双击imports文件,如图4所示。

Image
打开示例工程,双击imports文件

5.选择图5中的蓝色文件,右键点击复制,这些文件是ddr4的仿真模型和接口信号等配置信息。

Image
蓝色文件,右键点击复制

6.在原工程的仿真目录下创建import文件,用来存放刚刚复制的ddr4的仿真模型和一些头文件。建立的文件位置如图6所示。将选中的文件复制到创建的import文件中。

Image
在原工程的仿真目录下创建import文件

  7.将选中的文件复制到创建的import文件中。如图7所示。

Image
将选中的文件复制到创建的import文件中

8.添加仿真文件,选中import文件下的所有文件并添加。如图8所示。

Image
添加仿真文件,选中import文件下的所有文件并添加

9.添加仿真文件后,需要将其中几种文件类型更改为Verilog Header。更改后如图9所示。

Image
添加仿真文件后,需要将其中几种文件类型更改为Verilog Header

按照图10所示更改文件类型。

Image
按照图10所示更改文件类型

10.在仿真文件中添加ddr4仿真模型在示例工程中,我们通过DQ_WIDTH=8可以找到ddr4仿真模型的例化接口。接下来回到我们自己创建的工程中,打开仿真顶层模块,

   (1)将arch_package模块引用到仿真文件中:import arch_package::*;

   (2)我们把interface.sv模块中的接口引用进来并声明IDDR4[0:1]:

DDR4_if #(.CONFIGURED_DQ_BITS(16)) iDDR4[0:1]();

   (3)再将ddr4_model模块例化进来:

Image
再将ddr4_model模块例化进来

(4)

Image
封装模块

  (5)model_enable为使能信号。

  (6)DQ突发长度为16,但我们在ddr4中的数据位宽为32位,所以需要将ddr4_model模块例化2次,并且可以通过interface.sv模块可以看到ddr4仿真模型的接口,这样就可以将ddr4 ip核的接口与ddr4仿真模型的接口相连。仿真模块代码:

Image
仿真模块代码1
Image
仿真模块代码2
Image
仿真模块代码4
Image
仿真模块代码5
Image
仿真模块代码6

使用simulation仿真,配置正确的情况下c0_init_calib_complate信号拉高后表示初始化成功。如图11所示

Image
simulation仿真

文章来源:威视锐科技