lattice DDR3-Controller

PS:断言是assert的翻译,就是这个信号拉高的意思。

信号描述

属性表

General Tab

General Tab包含配置目标存储器设备和IP核功能的属性。这些属性是不可动态变化的;他们只可以通过IP向导配置。要改变这些属性只能重新生成DDR3 SDRAM IP核。

Memory Device Setting Tab

Memory Device Setting Tab包含了配置目标存储器设备/模块的属性;Memory Device Setting页面的属性是动态的,这意味着重设这个页面的值可以使用LOAD_MR用户命令动态的更改IP向导里的值。

Memory Device Timing Tab

在这个Tab中显示的默认属性是Micron DDR3 1Gb-187E存储器模块的值。这些属性可以通过检查Manual Adjust属性来更改。将这个Tab中的属性值调整为符合目标应用存储器设备的Timing参数是很重要的。DDR3 SDRAM Controller IP Core在生成存储器命令是也会使用这些参数。

Memory Device Timing Tab会根据DDR3型号的不同自动更改参数,一般情况不要改。

用户接口位宽与存储器总线位宽   

在DDR3控制器中,当设置存储器时钟为400MHz,并且传动比为8:1时。存储器使用100MHz系统时钟(SCLK),DDR3 PHY模块中的I/O逻辑在400MHz的存储器时钟下工作。100MHz与400MHz的时钟比率,I/O口是双数据传输,所以用户端的数据总线宽度是存储器端的8倍。例如我存储器数据总线为32位,所以用户侧的数据总线就是256位。

DDR3控制器信号操作细则

SDRAM控制器IP核的本地接口由五个独立的功能组成。每个功能的相关本地接口信号如下表。

初始化控制

  在存储器控制器可以访问ddr3之前必须要初始化DDR3存储器设备。用户接口断言init_start_i信号,Controller开始给出存储器初始化序列。如下图

  一旦开始初始化,init_start_i信号需要保持高电平,知道初始化过程结束为止。初始化过程结束,Controller会输出一个周期高电平的init_done_o信号,表示核心已经完成初始化序列,存储器已经准备好被访问了。在sclk_o的上升沿采样到init_done_o信号为高电平时,init_start_i在用户端必须马上拉低。如果在下一个sclk_o上升沿采样到init_start_i还是高电平的话,Controller就会开始新一次的初始化序列。存储器只需要在系统重置之后进行一次初始化就好。

命令与地址

  初始化结束之后,控制器开始等待用户发出的设置或者访问存储器的命令。DDR3 SDRAM Controller IP核会发送一个周期的cmd_rdy_o信号来告诉用户逻辑,ddr3 SDRAM已经准备好接收命令了。在输入cmd_i命令时我们需要将cmd_valid_i信号拉高,这样当ip核采样到cmd_valid_i信号为高时,表示cmd_i是一个有效的用户命令。通常cmd_valid_i在系统时钟上升沿采样cmd_rdy_o信号为高时拉低(如下图)。Controller IP核接收addr_i地址输入还接收cmd_burst_cnt_i与ofly_burst_len_i信号。如果这时cmd_valid_i信号是低电平,cmd_i,addr_i是无效的。如果cmd_rdy_o是低电平,则cmd_i,addr_i,cmd_burst_cnt_i,ofly_burst_len_i和cmd_valid_i输入都会被IP核忽略。

   DDR3 SDRAM Controller IP核最多可以重复给定32次read/write命令。cmd_burst_cnt_i[4:0]输入用来设置给定命令的重复次数。IP核只允许命令突发函数访问当前页面中的内存地址。当核心到达当前页面的边界时,在命令突发模式下访问内存时,IP核要访问的下一个地址会是同一页的起始地址。这将导致覆盖内容或读取意外的数据。因此,在执行命令突发操作时,必须跟踪当前页面中可访问的地址范围。如果应用程序需要固定的命令突发大小,建议使用2、4、8、16或32个突发排列的列地址,以确保命令突发访问不跨越页面边界。

  md_burst_cnt_i[4:0]用于设置给定命令的重复次数,当值为00000时,Controller核重复执行32次write/read命令。当值为00001时代表只执行一次wirte/read命令,当cmd_burst_cnt_i的值大于00001时,命令队列就满了,cmd_rdy_o信号不会被拉高,IP核会自动的根据命令增加地址,直到突发命令周期完成。如下图

Burst写

Burst读

用户命令

WRITE

通过WRITE或WRITEA加上地址,然后断言cmd_valid_i信号来启动存储器写操作。在WRITE命令被接收后,当存储Controller IP准备好从用户逻辑接收写入存储器的数据时,控制器会断言datain_rdy_o信号。因为从接收一个写命令到datain_rdy_o信号被断言,这中间的时间是不固定的(输入写命令并生效后不会马上写入数据)。所以用户逻辑需要监控datain_rdy_o信号。一旦datain_rdy_o信号被断言,在datain_rdy_o被断言后的一个或者两个周期(这个可以在向导里面设置),有效的数据才会出现在写数据总线上。

这个就是延迟1个周期的。

WRITEA

WRITEA的处理方式与写命令相同,除了IP核心向内存发出一个带有自动预充电的写命令,而不仅仅是一个写命令。这将导致内存在完成写入操作后自动关闭当前行。

READ

当读命令被接收,Controller IP访问存储器地址读取数据,并将数据带回到用户接口。一旦可用的读数据在读数据总线read_data_o上,IP核会断言read_data_calid_o信号告诉用户,read_data_o上的读数据有效。

READA

READA的处理方式与READ命令相同,除了IP核心向内存发出一个自动预充电命令,而不是读取命令。这使得内存在完成读取操作后自动关闭当前行。

本地到内存的地址映射

在存储器一端,address(A),bank address(BA) and chip select(CS)用于存储器设备寻址的。可以从给定的数据表中获取此信息。下图显示了DDR3内存控制器IP核的本地到内存地址映射。

ADDR_WIDTH由COL_WIDTH(列地址位宽),ROW_WIDTH(列地址位宽)和BSIZE组成。BSIZE又是由BANK_WIDTH(bank大小),CS_WIDTH(片选宽度)。对于DDR3设备来说,bank的地址宽度永远是3当可选择的芯片数量为1,2,4时。芯片选择的宽度相应的变成0,1,2。下图是一个地址映射的示例。

模式寄存器编程

DDR3 Controller IP使用addr_i地址总线对这些寄存器进行编程。IP核接收cmd_i用户命令LOAD_MR(0110)来启动模式寄存器的编程。当LOAD_MR应用于cmd_i信号时,用户逻辑必须提供目标模式寄存器的信息和addr_i信号上的编程数据。当目标模式寄存器被编程时,存储器控制器核心也被配置为支持新的存储器设置。模式寄存器编程地址映射如下图。

编程数据需要16位的本地地址线。还需要三个位来选择如表2.7所示的目标寄存器。所有其他高位地址位在LOAD_MR命令期间都未使用。

3位定义配置哪一个寄存器。

模式配置寄存器对应位的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值