DDR3 接口分析

2020-07-20 16:05:02 浏览数 (1)

1.认识顶层文件example_top.v

打开顶层文件example_top.v

下图为各种参数设定,有bank、column、rank等参数设置(其实你不用动他们,这些都是之前选好的,不记得自己选了什么?乖乖!不如再翻翻DDR3 IP 核配置?)

下图为DDR的各种接口;

column和row地址是在ddr3_addr里面复用的,column一般是10bit宽度,row一般是14-16bit宽度;

ddr3_ba是选bank的,一般是3bit宽度,对应8个bank;

下图为各种参数配置,相互之间的关系换算等(作为设计者不要管他)

下图为各种wire定义(你有兴趣研究码?我是没兴趣!)

下图为DDR3例化实体

只需要改动下面几个参数(具体后边介绍):

.app_addr (app_addr),

.app_cmd (app_cmd),

.app_en (app_en),

.app_wdf_data (app_wdf_data),

.app_wdf_end (app_wdf_end),

.app_wdf_wren (app_wdf_wren),

下图为Traffic gen实例化和traffic gen相关参数(对设计没用,不管他)

以上就是example_top.v工程的顶层文件内容,在整个设计中,需要你改动的就只有example_top.v,而且只有以下几个port;

.app_addr (app_addr),

.app_cmd (app_cmd),

.app_en (app_en),

.app_wdf_data (app_wdf_data),

.app_wdf_end (app_wdf_end),

.app_wdf_wren (app_wdf_wren),

2.用户接口管脚

app_addr 操作地址,按照结构从高位到低位是 rank bank row column

app_cmd 操作命令,其实你只需要用到3‘b000(写入命令)和3’b001(读出命令)

app_en 操作地址app_addr的使能,只有使能拉高时,app_addr才有效

app_wdf_data 写入数据接口

app_wdf_end 实际中和app_wdf_wren一样(app_wdf_end=app_wdf_wren即可)

app_wdf_wren 写入数据接口app_wdf_wren的使能,拉高时,app_wdf_data才有效

以上6个信号就是需要你通过编写程序的用户接口信号;

3.DDR3时序分析

写数据时序图

app_rdy :在app_rdy拉高的时候拉高app_en,地址app_addr才有效;

app_wdf_rdy:在app_wdf_rdy拉高的时候拉高app_wdf_wren,写入数据app_wdf_data才有效;

所以写入数据是两系统:一是地址,二是数据

  • 地址内容是app_addr,它在app_rdy(DDR控制)和app_en(设计者自己控制)同时拉高的时候才有效;
  • 数据内容是app_wdf_data,它在app_wdf_rdy(DDR控制)和app_wdf_wren(设计者自己控制)同时拉高时才有效;

这两套系统在时序上对齐,就可以成功将数据写入DDR;

其实,两系统不对齐也是ok的,如下图,1是严格对齐,2和3说明早写入和晚写入也是ok的;具体可以参考:DDR3读写数据

读数据时序图

app_rd_data:读数据

app_rd_data_valid读数据使能

同样,在app_rdy和app_en拉高的时候才有效;

END

0 人点赞