介绍下用MIG生成的DDR2SDRAM控制器_第1页
介绍下用MIG生成的DDR2SDRAM控制器_第2页
介绍下用MIG生成的DDR2SDRAM控制器_第3页
介绍下用MIG生成的DDR2SDRAM控制器_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、frastructuremodule产生控制器工作的时钟和复位信号,时钟信号由内部的DCM(时钟管理单元)对外部输入的时钟倍频产生,模块还包含一个延迟校准监视器,用来校准读数据选通脉冲(DQS)对读数据(DQ)的延迟,使读数据选通脉冲边沿正确对齐DQ有效窗口的中间位置,以便正确锁存读数据。Data_Pathmodule负责传输数据,在写操作时将写数据传送给DDR2SDRAM;在读操作时将DDR2发送过来的数据寄存并同步到系统时钟去。Controllermodule负责DDR2SDRAM的上电初始化,在初始化后接收用户的指令并将其译码产生读写和相关的控制信号,此外控制器也为其他模块提供控制信号以

3、辅助这些模块完成其功能。控制器所有的输入/输出信号都在IOBsmodule中被接收或者发送,而所有地址和控制信号在IOB中都用触发器打一拍后再被送出,以最大限度的满足DDR2SDRAM的建立和保持时间。用户接口信号信号名称力向描述reset_inI系统复位user_input_data31:0I写数据,DQS的上升沿传送写数据的高16位,DQS的下降沿传送写数据的低16位user_data_mask3:0I写数据的数据屏蔽位,高2位负责上升沿数据的屏蔽,低2位负责卜.降沿数据的屏蔽user_output_data31:0O读出数据user_data_validI为1时代表读出数据有效user_

4、input_address22:0I行列地址,行地址在身位,列地址在低位user_bank_address1:0IDDR2SDRAM的bank地址user_command_reg3:0IDDR2控制器的命令寄存器user_cmd_ackI为0代表允许用户发出命令init_valI为1代表初始化操作已完成burst_doneO为1时终止突发操作rst_dqs_div_inI在读操作日被置0,由控制器自动产生,用户无需输入rst_dqs_div_outO在外部与rst_dqs_div_in连接系统上电后,用户发出初始化命令,控制器负责对DDR2进行寄存器的配置及其他初始化操作,待初始化完成后,控制

5、器置init_val为1,然后用户就可以继续对DDR2SDRAM进行读写等操作。用户命令user_command_reg3:0描述0000空操作0010初始化命令0100写命令0110读命令其他保留在写DDR2的过程中,用户将写命令、要写入的数据和目的地址通过用户接口传送给控制器,如图所示。写命令在与系统时钟有180。相位差的clk180时钟的上升沿发送,控制器在clk180的上升沿置user_cmd_ack为1,通知用户写命令已收到。当突发长度(BL)为4时,每个目的地址对应4个写数据,每个时钟对应2个(32位)的写数据。要终止突发写操作,需要将burst_done信号在最后一个地址发出后置

6、1,并保证两个时钟周期有效,控制器在检测到burst_done有效后将终止写操作,并发出写后自动预充电命令对当前工作行进行预充电。预充电结束后,控制器将usr_cmd_ack置0,告知用户可以继续对DDR2进行读写操作。在tDDR2的过程中,用户将读命令和目的地址通过用户接口传送给控制器,如图所示。读命令在时钟clk180的上升沿发送,控制器接收到读命令后置user_cmd_ack为1,通知用户读命令已收到。控制器在采集到读数据后,置user_data_valid信号为1,告知用户读取。要终止突发读操作,具体操作与终止突发写操作同,在此就不再赘述。需要注意的是rst_dqs_div_in(输入

7、信号)和rst_dqs_div_out(输出信号)是参考设计额外引出的一根外部环回信号,rst_dqs_div_out由控制器产生,经外部走线延迟后送给rst_dqs_div_in,走线长度是DQS和CK走线长度之和,用以补偿DQS和CK在PCB走线时所带来的延迟。5月31日使用ISE的MIG工具实现DDR次存条的控制断断续续搞了半年的DDR2控制,最近总算可以肯定地说,卓见成效。于是决定静下心来好好的纪录下一些心得。先总体的讲一下大概的要点:1:ddr2的硬件要求很高,针对由MIG生成的congtroller,所对应的管脚要经过初级程序验证,若随意分配会导致以后的约束不能通过。2:user_

8、data_valid信号相当关键,时刻注意它的波形。3:由于涉及上升沿和下降沿同时读取数据,对时钟的稳定性要求很高。4:dqs_delay这个信号是用来读取数据所用的。 该信号不稳定则读到的数据有偏差。 值得注意的是, 若用ISE来综合的话,针对dqs_delay的程序被完全被优化,导致程序不能稳定运行。对于这个问题有两种解决方法:1,用高频时钟对该信号进行延时;2,通过synplify综合工具来综合。5:由于我所用的是2GByte的内存条,所以还有一个关键问题。就是它同时有8组dqs信号,每一组的数据必须单独调试,每一组的dqs_delay都存在差异。这是一个令人头大的事。暂时先列出这些我遇

9、到过的关键问题。等接下来有力气慢慢补全。第一步:根据所用芯片的参数,用ISE9.2及以上版本生成控制DDR2的IP核;生成IP核后,到相应的同名目录下找到相应的VHDL文件,这些VHDL文件将是进行各种类型操作的原始材料,所有进一步的操作将通过修改相应的文件来实现。值得一提,用该种方式产生的文件只是对应对单独芯片的控制,若需要对多个芯片多个module的控制,需要另外增加相应的控制信号。第二步:明确所用存储芯片的数量及结构。这边举一个2G的DDR2的例子,共由16块DDR2的芯片组成,分为两组,每组由8块芯片并联而成,使数据宽度变为64位,而相应的两组module则由两根片选信号线CS1,CS2来控制。单个芯片主要参数为:地址线14位(列地址为0-9,行地址为0-13);bank3位(共8个bank)。第三步:假设这里要实现的目的是对2个G的存储器存满后,顺序读出。则对生成的IP核的修改,主要如下:A:把用于仿真的testbench的文件可以搬过来,用于产生命令控制信号,及产生相应地址。B:增加数据宽度。增加数据宽度后,相应的DQS信号变成8个,这里容易产生新的问题。原程序在使用DQS时,对应的dqs_delay子程序被完全综合掉了,所以需要另外自己做一个产生时延的程不,产生新的dqs_d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论