實驗目的:
一、Example Design
每當我們例化了一個IP而不知道怎么使用時,優先打開官方示例example design
選中IP核,右鍵“OPEN IP in Example Design”,我這里是灰色的,那是因為我已經打開過了。

Example design就不講了,主要有個數據產生模塊,反正我們也用不上,我們只需要用里面的仿真模型。
不打開example design也行,直接打開example的仿真文件sim_tb_top:
代碼太多了太長了我們直接往下翻到1011行:Memory Models instantiations
將ddr3_model例化部分復制到我們的tb文件里,參數找到對應的數字給替換掉:

二、添加仿真文件
兩個仿真文件添加到工程:
目錄 : ..\sources_1\ip\mig_7series_0\mig_7series_0\example_design\sim
文件1 : ddr3_model.sv
文件2 : ddr3_model_parameters.vh
然后添加為我們的工程仿真文件。

三、Testbench的編寫
添加激勵,例化我們的設計ddr_test模塊,例化第一節所說的ddr_model。
module tb_ddr_test();
reg sys_clk ;
reg sys_rst ;
reg [127:0] data_in ;
reg vld_in ;
reg sof_in ;
reg eof_in ;
reg [5:0] cnt ;
wire [127:0] data_out ;
wire vld_out ;
wire [14:0] ddr3_addr ;
wire [2:0] ddr3_ba ;
wire ddr3_cas_n ;
wire [0:0] ddr3_ck_n ;
wire [0:0] ddr3_ck_p ;
wire [0:0] ddr3_cke ;
wire ddr3_ras_n ;
wire ddr3_reset_n ;
wire ddr3_we_n ;
wire [15:0] ddr3_dq ;
wire [1:0] ddr3_dqs_n ;
wire [1:0] ddr3_dqs_p ;
wire init_calib_complete ;
wire [0:0] ddr3_cs_n ;
wire [1:0] ddr3_dm ;
wire [0:0] ddr3_odt ;
initial
begin
sys_clk = 0;
sys_rst = 1;
#100
sys_rst = 0;
end
always #2.5 sys_clk = ~sys_clk; //200Mhz
//用計數器來產生data_in
always @(posedge sys_clk or negedge init_calib_complete)begin
if(init_calib_complete == 1'b0)
cnt else if(&cnt)
cnt else
cnt end
always @(posedge sys_clk or negedge init_calib_complete)begin
if(init_calib_complete == 1'b0)begin
data_in sof_in eof_in vld_in end
else begin
data_in sof_in eof_in vld_in if(cnt > 'd10 && cnt data_in vld_in end
if(cnt == 'd11)
sof_in if(cnt == 'd60)
eof_in end
end
ddr_test u_ddr_test(
.sys_clk (sys_clk ),
.sys_rst (sys_rst ),
.data_in (data_in ),
.vld_in (vld_in ),
.sof_in (sof_in ),
.eof_in (eof_in ),
.data_out (data_out ),
.vld_out (vld_out ),
.ddr3_addr (ddr3_addr ),
.ddr3_ba (ddr3_ba ),
.ddr3_cas_n (ddr3_cas_n ),
.ddr3_ck_n (ddr3_ck_n ),
.ddr3_ck_p (ddr3_ck_p ),
.ddr3_cke (ddr3_cke ),
.ddr3_ras_n (ddr3_ras_n ),
.ddr3_reset_n (ddr3_reset_n ),
.ddr3_we_n (ddr3_we_n ),
.ddr3_dq (ddr3_dq ),
.ddr3_dqs_n (ddr3_dqs_n ),
.ddr3_dqs_p (ddr3_dqs_p ),
.init_calib_complete (init_calib_complete),
.ddr3_cs_n (ddr3_cs_n ),
.ddr3_dm (ddr3_dm ),
.ddr3_odt (ddr3_odt )
);
ddr3_model u_comp_ddr3(
.rst_n (ddr3_reset_n ),
.ck (ddr3_ck_p ),
.ck_n (ddr3_ck_n ),
.cke (ddr3_cke ),
.cs_n (ddr3_cs_n ),
.ras_n (ddr3_ras_n ),
.cas_n (ddr3_cas_n ),
.we_n (ddr3_we_n ),
.dm_tdqs (ddr3_dm ),
.ba (ddr3_ba ),
.addr (ddr3_addr ),
.dq (ddr3_dq ),
.dqs (ddr3_dqs_p ),
.dqs_n (ddr3_dqs_n ),
.tdqs_n (),
.odt (ddr3_odt )
);
endmodule
OK,干凈清爽!
開始仿真!
DDR仿真建議用modelsim哦,因為速度快!
想要知道怎么用腳本進行仿真?安排!
【FPGA】老鳥的姿勢學起來,用腳本進行modelsim仿真
審核編輯:湯梓紅
-
DDR3
+關注
關注
2文章
283瀏覽量
42994
發布評論請先 登錄
TPS51116 完整的DDR、DDR2、DDR3、DDR3L、LPDDR3 和 DDR4 電源解決方案同步降壓控制器數據手冊

TPS51216-EP 增強型產品 完整的 DDR2、DDR3 和 DDR3L 內存電源解決方案 同步降壓控制器數據手冊

DDR3 SDRAM配置教程

燦芯半導體推出DDR3/4和LPDDR3/4 Combo IP
三大內存原廠或將于2025年停產DDR3/DDR4
基于Xilinx ZYNQ7000 FPGA嵌入式開發實戰指南
DDR3、DDR4、DDR5的性能對比
如何選擇DDR內存條 DDR3與DDR4內存區別
【米爾-Xilinx XC7A100T FPGA開發板試用】+01.開箱(zmj)
Xilinx 7系列FPGA PCIe Gen3的應用接口及特性

評論