介绍下用MIG生成的DDR2 SDRAM控制器 下载本文

内容发布更新时间 : 2024/6/16 2:12:00星期一 下面是文章的全部内容请认真阅读。

MIG2.0是Xilinx内嵌在ISE中用来生成各种IP核的软件工具,可以用它来直接生成DDR2控制器设计模块,模块包含可自由修改的HDL源代码和约束文件。用户可以在MIG的GUI图形界面根据所选的存储器件选择对应模板、总线宽度和速度级别,并设置CAS延迟、突发长度、引脚分配等关键参数。如果所选器件与MIG所列模板不相符,可在代码生成后灵活修改这些代码。

DDR2 SDRAM控制器参考设计主要包含四个模块:Infrastructure module(基础模块)、Data_Path module(数据通道模块)、Controller module(控制模块)和IOBs module(输入输出接口模块)。

Infrastructure module产生控制器工作的时钟和复位信号,时钟信号由内部的DCM(时钟管理单元)对外部输入的时钟倍频产生,模块还包含一个延迟校准监视器,用来校准读数据选通脉冲(DQS)对读数据(DQ)的延迟,使读数据选通脉冲边沿正确对齐DQ有效窗口的中间位置,以便正确锁存读数据。

Data_Path module负责传输数据,在写操作时将写数据传送给DDR2 SDRAM;在读操作时将DDR2发送过来的数据寄存并同步到系统时钟去。

Controller module负责DDR2 SDRAM的上电初始化,在初始化后接收用户的指令并将其译码产生读写和相关的控制信号,此外控制器也为其他模块提供控制信号以辅助这些模块完成其功能。

控制器所有的输入/输出信号都在IOBs module中被接收或者发送,而所有地址和控制信号在IOB中都用触发器打一拍后再被送出,以最大限度的满足DDR2 SDRAM的建立和保持时间。

用户接口信号

信号名称 reset_in user_input_data[31:0] 方向 I I 描述 系统复位 写数据,DQS的上升沿传送写数据的高16位,DQS的下降沿传送写数据的低16位 user_data_mask[3:0] I 写数据的数据屏蔽位,高2位负责上升沿数据的屏蔽,低2位负责下降沿数据的屏蔽 user_output_data[31:0] user_data_valid user_input_address[22:0] user_bank_address[1:0] O I I I 读出数据 为‘1’时代表读出数据有效 行列地址,行地址在高位,列地址在低位 DDR2 SDRAM的bank地址 user_command_reg[3:0] user_cmd_ack init_val burst_done rst_dqs_div_in I I I O I DDR2控制器的命令寄存器 为‘0’代表允许用户发出命令 为‘1’代表初始化操作已完成 为‘1’时终止突发操作 在读操作时被置‘0’,由控制器自动产生,用户无需输入 rst_dqs_div_out

O 在外部与rst_dqs_div_in连接 系统上电后,用户发出初始化命令,控制器负责对DDR2进行寄存器的配置及其他初始化操作,待初始化完成后,控制器置init_val为‘1’,然后用户就可以继续对DDR2 SDRAM进行读写等操作。

用户命令

user_command_reg[3:0] 0000 0010 0100 0110 其他 描述 空操作 初始化命令 写命令 读命令 保留 在写DDR2的过程中,用户将写命令、要写入的数据和目的地址通过用户接口传送给控制器,如图所示。写命令在与系统时钟有180°相位差的clk180时钟的上升沿发送,控制器在clk180的上升沿置user_cmd_ack为‘1’,通知用户写命令已收到。当突发长度(BL)为4时,每个目的地址对应4个写数据,每个时钟对应2个(32位)的写数据。要终止突发写操作,需要将burst_done信号在最后一个地址发出后置‘1’,并保证两个时钟周期有效,控制器在检测到burst_done有效后将终止写操作,并发出写后自动预充电命令对当前工作行进行预充电。预充电结束后,控制器将usr_cmd_ack置‘0’,告知用户可以继续对DDR2进行读写操作。

在读DDR2的过程中,用户将读命令和目的地址通过用户接口传送给控制器,如图所示。读命令在时钟clk180的上升沿发送,控制器接收到读命令后置user_cmd_ack为‘1’,通知用户读命令已收到。控制器在采集到读数据后,置user_data_valid信号为‘1’,告知用户读取。要终止突发读操作,具体操作与终止突发写操作同,在此就不再赘述。

需要注意的是rst_dqs_div_in(输入信号)和rst_dqs_div_out(输出信号)是参考设计额

外引出的一根外部环回信号,rst_dqs_div_out由控制器产生,经外部走线延迟后送给rst_dqs_div_in,走线长度是DQS和CK走线长度之和,用以补偿DQS和CK在PCB走线时所带来的延迟。