Memory Interface Generator (MIG 7 Series)是 Xilinx 为 7 系列器件提供的 Memory 控制器 IP,使用该 IP 可以很方便地进行 DDR3 的读写操作。本文主要记录 Xilinx DDR3 MIG IP 的仿真过程,包括 IP 配置和 DDR3 读写仿真两部分内容。
目录
1 MIG IP 配置
在 Vivado 开发平台 IP Catelog 中,输入 mig,然后选择 Memory Interface Generator (MIG 7 Series),打开 IP 向导。
Component Name 可自行定义,这里填写 ddr3_controller。
Memory 类型选 DDR3 SDRAM。
时钟周期根据 FPGA 速度等级,和速率要求进行选择。这里选了 2500 ps,对应频率为 400MHz。
Input Clock 是 MIG 内部 PLL 所需要的输入时钟,板卡带了 100M 外部晶振,因此这里选 10000ps(100MHz).
Memory 地址排序选 BANK -> ROW -> COLUMN.
System Clock 其实是前面的 Input Clock,这里用了外部时钟信号,所以选 Single-Ended;Reference Clock 是 FPGA PLL 生成的时钟(频率为 200MHz),这里配置为 No Buffer。
根据硬件原理图,分配 DDR3 管脚。
2 DDR3 读写仿真
IP 配置完成后,右键点击 ddr3_controller IP,选择 “Open IP Example Design... ”,在弹出的窗口中选择参考工程路径,确认后等待打开参考工程。
在仿真之前,需要确认仿真器。在 Setting -> Simulation 中,选择 Target simulator 为想要的仿真器,这里选择 Modelsim Simulator。
确定仿真器之后,点击左侧 Flow Navigator 的 Run Simulation,等待片刻,就会打开 Modelsim 并编译设计文件。
修改 xsim.tcl 文件,将 traffic_gen 文件替换为用户设计文件,仿真自己编写的模块。
#Copyright 1991-2017 Mentor Graphics Corporation
#
#All Rights Reserved.
#
#THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF
#MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
# Simulation script
onbreak {resume}
# create library
if [file exists work] {
file delete -force work
}
vlib work
vmap work ./work
# Compile MIG IP design files
vlog -incr "./src/ddr3_controller/rtl/clocking/*.v"
vlog -incr "./src/ddr3_controller/rtl/controller/*.v"
vlog -incr "./src/ddr3_controller/rtl/ecc/*.v"
vlog -incr "./src/ddr3_controller/rtl/ip_top/*.v"
vlog -incr "./src/ddr3_controller/rtl/phy/*.v"
vlog -incr "./src/ddr3_controller/rtl/ui/*.v"
vcom "./src/ddr3_controller/rtl/phy/*.vhd"
vcom "./src/ddr3_controller/rtl/ddr3_controller_mig_sim.vhd"
vcom "./src/ddr3_controller/rtl/ddr3_controller.vhd"
vlog -incr "./src/ddr3_controller/ddr3/glbl.v"
vlog -incr "./src/ddr3_controller/ddr3/wiredly.v"
vlog -sv +define+x2Gb +define+sg125 +define+x16 "./src/ddr3_controller/ddr3/ddr3_model.sv"
# Compile user design files
# ...
# Start simulation
vsim -voptargs=+acc +notimingchecks work.ddr_scheduler_tb -L unisims_ver -L secureip -t 1fs glbl
ddr_scheduler 设计了 2 个写通道和 2 个读通道,读/写通道命令按照优先级分别写入 wr_cmd fifo 和 rd_cmd fifo。
从 pstate 的状态跳转可以看出,写命令优先级高于读命令。