DDR3的简述,IP核的建立和时序

DDR(Double Date Rate SDRAM)是双倍速率同步动态随机存储器,双倍速率的含义是在时钟的上升沿和下降沿采样,这样就把采样时钟频率提高了一倍。

介绍几个名词:

1.逻辑Bank: 它是组成DDR3的存储单元,每个逻辑Bank结构都类似一个带有行列寻址能力的二维存储表格,在逻辑Bank中,先指定一个行(Row),再指定一个列,可以准确地定位到所找寻的存储位置,这个也是DDR3寻址的基本原理。当前DDR3基本上是8个Bank设计,Bank地址线,BA0-BA2,2^3=8.
也有16Bank的。

2.突发:
突发(Burst)是指在同一行相邻的存储单元连续进行数据访问,连续访问的时钟周期数就是突发长度(Burst lengths,BL)进行突发传输时,只要指定起始列地址与突发长度,DDR3就会依次地自动对后续相应的存储单元进行读/写访问。

3.ZQ对齐:
通过片上校准引擎来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。

4.行激活命令:
在对DDR3的某一个Bank内数据进行读/写访问前,首先必须将该Bank中数据所在的行激活,一旦激活,则该行将保持激活状态直到发送预充电命令到DDR3。发送行激活命令时,Bank地址与相应的行地址同时发出;行激活命令发送后,随后发送列地址寻址命令与具体的读写操作命令。从行有效到读/写命令发出之间的时间间隔被定义为tRCD。

5.读写命令:
DDR3执行完Bank的行激活命令之后,可以发送读写命令对该行进行读写操作,如果允许进行预充电的话,读写命令结束时会自动对该行进行自动预充操作,否则该行将一直处于行激活状态,控制逻辑可继续对该行进行读写操作。在发送读命令时,向DDR3提交完列地址,会触发数据传输,但从存储单元到 I/O还有时间间隔CL。

6.预充电:数据读取完成之后,为了释放DDR3内读出放大器的空间,以供同位置Bank内的其他行寻址及传输数据,DDR3执行预充电命令来关闭当前的工作行。
预充电之后要过一段时间才允许发送行激活命令操作新的工作行,这个时间称为TRP。

下面介绍与之前版本工具兼容的传统接口信号格式的MIG核。

用户只需在 MIG 的 GUI 图形界面选择对应的芯片型号, 总线宽度和速度级别, 并设置 CAS 延迟、 突发长度、 引脚分配等参数, 即可生成 DDR3 SDRAM 控制 器, 包括 HDL代码和 UCF 约束文件。
在这里插入图片描述

1:几组DDR3,就选择几。
2:如果勾上,就选择的是AXI格式的MIG核。不勾是传统的接口信号格式。
在这里插入图片描述

选择DDR3 SDRAM。
在这里插入图片描述

本页是选择DDR3 控制器的参数。需要注意的是如果你的DDR3是颗粒类型,需要点击component,进行命名和对应参数的配置,如TRCD等等。具体参考颗粒手册。
在这里插入图片描述

在这里插入图片描述

● 此处的输入时钟最好选择200MHz,选择其他时钟需要给MIG核供两个时钟,选择200MHz可以节省时钟资源。

在这里插入图片描述

● System Clock :这个时钟就是上一页的输入时钟,根据需求选择。
●reference clock: 最好选择使用系统时钟。
在这里插入图片描述
在这里插入图片描述
引脚约束,按照格式写好ucf,就可以导入进去,然后点击valid。
在这里插入图片描述
约束系统时钟的管脚,需要注意的是,给mig核供的系统时钟,可以不是这个引脚时钟,也可以是其他时钟,如时钟核产生的200MHz。

然后mig就建立完成了。

接口信号说明:

手册《UG586》P83有的用户接口信号说明,P158有读写时序说明。

下面通过一次读写数据,简述关键信号:

IP核正常启动以后会把init_calib_complete信号拉高,此后才能借助时钟信号ui_clk开始给予逻辑控制。

进行数据写入时需要一直判断app_rdy的电平,为高表明IP核可以接收控制命令,需要一直判断app_wdf_rdy电平,为高表示IP核可以接收写入数据。

此后用户拉高app_en,给予:

a. 控制命令app_cmd[2:0] ;

b. 地址app_addr[ADDR_WIDTH–1:0] ;

c. 数据app_wdf_data[APP_DATA_WIDTH–1:0];

d. 数据屏蔽app_wdf_mask[APP_MASK_WIDTH–1:0];

e. 数据使能app_wdf_wren、app_wdf_end ;

来写入一次数据。

其中:

a. 信号app_en是app_cmd和app_addr的使能信号。

b.控制信号app_cmd[2:0]有两种状态,写命令:3’b000,读命令:3’b001。

c.地址信号宽度ADDR_WIDTH为硬件rank + bank +
row + column的值,在配置IP核时,选择DDR器件以后可以看到bank 、row 和column的值,一般单排DDR的rank值为1’b1,占1bit的宽度。例如rank=1,bank=3,row=16,column=10,则ADDR_WIDTH=1+3+16+10=30。因为是突发读写,DDR3的突发长度为8,给予一个地址信号后,读写会在从这个地址开始的8个地址上进行读写操作。

d.数据宽度APP_DATA_WIDTH与突发长度有关,如硬件上的数据位DQ有16bits,则数据信号app_wdf_data的宽度为16bits*8 = 128bits。

e.数据屏蔽信号app_wdf_mask用于屏蔽不想进行读写的数据位,置1屏蔽。由硬件架构,每8bits的DQ信号有1bit的屏蔽位DQM。接上面的例子:

APP_MASK_WIDTH = APP_DATA_WIDTH / 8 = 128 / 8 = 16

f.进行写数据的同时要拉高app_wdf_wren和app_wdf_end 作为使能。

DDR3工作时序

在这里插入图片描述

只有当 app_en = 1 和 app_rdy = 1, app_cmd 和 app_addr 才能写入成功。
当 app_ cmd = 3’b000 时, 当前为写操作; 当 app_ cmd = 3’b001 时, 当前为读操作。

写命令和写数据最多可以延时两个时钟周期。还有一种背靠背的时序,背靠背没有最大延时限制。

在这里插入图片描述
在这里插入图片描述

进行数据读取时,需要一直判断app_rdy电平,为高表明IP核可以接收控制命令。同时给予控制信号app_cmd和地址信号app_addr,然后一直判断app_rd_data_valid的电平,为高表明有数据传回,需要在当前时钟周期内从app_rd_data接收。上图可以看出,命令的发出和数据的返回,有数个时钟的延迟。

猜你喜欢

转载自blog.csdn.net/qq_39921762/article/details/88095653