OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 117|回复: 2

[XILINX] 基于MIG _IP核的DDR3读写模型自行搭建仿真平台

[复制链接]

18

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1866
金钱
1866
注册时间
2017-10-8
在线时间
227 小时
发表于 2025-3-18 11:46:08 | 显示全部楼层 |阅读模式
本帖最后由 天耀中华 于 2025-3-19 19:43 编辑

基于MIG _IP核的DDR3读写模型功能仿真
3、在该文件夹下将ddr3_model.v和ddr3_model_parameter.vh,拷贝到DDR3的sim仿真文件夹下,并添加到ViVado中

4、编写调试代码,注意,由于本工程使用了位宽深度为32的DDR,而Xilinx官方自带的模型只有16位,因此在仿真文件中需要例化2个DDR3_model ,仿真代码可参考第三步骤下同文件夹内的sim_tb_top.v文件中 “// Memory Models instantiations”该区域之下的代码。本例的仿真代码如下:
  1. <span style="background-color: rgb(255, 255, 255);">参考链接:</span><a href="https://blog.csdn.net/qq_58077870/article/details/136394023" target="_blank">vivado/MIGip核仿真过程中init_calib_complete信号无法拉高问题_migip核的init-CSDN博客</a><span style="background-color: rgb(255, 255, 255);">   </span>
复制代码
注意:在调试的时候,面临了DDR3模型的ddr3_reset_n一直未低,经分析对比发现,是MMCM时钟分频模块产生的时钟必须在MIG ip核的clk_ref_i和sys_ref_i的范围内,本例选择了200MHZ.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1866
金钱
1866
注册时间
2017-10-8
在线时间
227 小时
 楼主| 发表于 2025-3-18 11:46:46 | 显示全部楼层
仿真代码内容是:`timescale 1ps/100fs
//`define  clock_period 20
module tp_top_ddr3_rw;
parameter DQ_WIDTH     = 32;
parameter MEMORY_WIDTH = 16;
localparam NUM_COMP    = DQ_WIDTH/MEMORY_WIDTH;
parameter  clk_period  = 10000;

reg               sys_clk          ;   //系统时钟,50MHz
reg               sys_rst_n        ;   //复位,低有效        
// DDR3 IO接口                     ;
wire              ddr3_reset_n     ;
wire             [0:0] ddr3_ck_p_sdram  ;
wire             [0:0] ddr3_ck_n_sdram  ;
wire             [0:0] ddr3_cke_sdram   ;
wire             [0:0] ddr3_cs_n_sdram  ;
wire                   ddr3_ras_n_sdram ;
wire                   ddr3_cas_n_sdram ;
wire                   ddr3_we_n_sdram  ;
wire             [3:0] ddr3_dm_sdram    ;
wire             [2:0] ddr3_ba_sdram    ;
wire             [13:0]ddr3_addr_sdram  ;
wire             [31:0]ddr3_dq_sdram    ;
wire             [3:0] ddr3_dqs_p_sdram ;
wire             [3:0] ddr3_dqs_n_sdram ;

wire              ddr3_odt_sdram;

//用户
wire  [1:0]      led  ;                   //led灯

//复位信号
initial begin
        sys_rst_n = 1'b0;
        #200000
        sys_rst_n = 1'b1;
end

//时钟信号
initial sys_clk=1'b0;

always  sys_clk =#(clk_period) ~sys_clk;

top_ddr3_rw u_top_ddr3_rw(
    .sys_clk         (sys_clk)    ,   //系统时钟,50MHz
    .sys_rst_n       (sys_rst_n)    ,   //复位,低有效        

    .ddr3_dq         (ddr3_dq_sdram)    ,   //ddr3 数据
    .ddr3_dqs_n      (ddr3_dqs_n_sdram)    ,   //ddr3 dqs负
    .ddr3_dqs_p      (ddr3_dqs_p_sdram)    ,   //ddr3 dqs正  
    .ddr3_addr       (ddr3_addr_sdram)    ,   //ddr3 地址   
    .ddr3_ba         (ddr3_ba_sdram)    ,   //ddr3 banck 选择
    .ddr3_ras_n      (ddr3_ras_n_sdram)    ,   //ddr3 行选择
    .ddr3_cas_n      (ddr3_cas_n_sdram)    ,   //ddr3 列选择
    .ddr3_we_n       (ddr3_we_n_sdram)    ,   //ddr3 读写选择
    .ddr3_reset_n    (ddr3_reset_n)    ,   //ddr3 复位
    .ddr3_ck_p       (ddr3_ck_p_sdram)    ,   //ddr3 时钟正
    .ddr3_ck_n       (ddr3_ck_n_sdram)    ,   //ddr3 时钟负
    .ddr3_cke        (ddr3_cke_sdram)    ,   //ddr3 时钟使能
    .ddr3_cs_n       (ddr3_cs_n_sdram)    ,   //ddr3 片选
    .ddr3_dm         (ddr3_dm_sdram)    ,   //ddr3_dm
    .ddr3_odt        (ddr3_odt_sdram)    ,   //ddr3_odt      

    .led             (led)        //led灯
    );               




genvar i;
generate
    for (i = 0; i < NUM_COMP; i = i + 1) begin: gen_mem
      ddr3_model u_comp_ddr3
        (
         .rst_n   (ddr3_reset_n    ),
         .ck      (ddr3_ck_p_sdram ),
         .ck_n    (ddr3_ck_n_sdram ),
         .cke     (ddr3_cke_sdram  ),
         .cs_n    (ddr3_cs_n_sdram ),
         .ras_n   (ddr3_ras_n_sdram),
         .cas_n   (ddr3_cas_n_sdram),
         .we_n    (ddr3_we_n_sdram ),
         .dm_tdqs (ddr3_dm_sdram[(2*(i+1)-1)2*i)]),
         .ba      (ddr3_ba_sdram   ),
         .addr    (ddr3_addr_sdram ),
         .dq      (ddr3_dq_sdram[16*(i+1)-1:16*(i)]),
         .dqs     (ddr3_dqs_p_sdram[(2*(i+1)-1)2*i)]),
         .dqs_n   (ddr3_dqs_n_sdram[(2*(i+1)-1)2*i)]),
         .tdqs_n  (),
         .odt     (ddr3_odt_sdram)

         );
    end
endgenerate
endmodule

回复 支持 反对

使用道具 举报

18

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1866
金钱
1866
注册时间
2017-10-8
在线时间
227 小时
 楼主| 发表于 2025-3-19 11:40:51 | 显示全部楼层
本帖最后由 天耀中华 于 2025-3-19 13:57 编辑

在综合过程中出现问题:https://blog.csdn.net/qq_41544116/article/details/131692895因为VCO频率不对的参考链接2:VIVADO报错[DRC PDRC-34] 解决办法及思路-CSDN博客

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-2 02:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表