收藏 分销(赏)

Altera提供的sdram-ip-core应用小节.doc

上传人:仙人****88 文档编号:8743418 上传时间:2025-02-28 格式:DOC 页数:7 大小:233KB 下载积分:10 金币
下载 相关 举报
Altera提供的sdram-ip-core应用小节.doc_第1页
第1页 / 共7页
Altera提供的sdram-ip-core应用小节.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
Altera提供的sdram ip core应用小节 1.SDRAM是一种高速高容量同步动态存储器。其原理介绍参考sdram原理和时序.pdf 2.SDRAM时序控制 SDRAM的正常操作包括:初始化(initialize),寄存器定义(register definition),激活(active),读(read),写(write),预充电(precharge),自动预充电(auto precharge),自发停止命令(Burst Terminate),自动刷新(auto refresh),自我刷新(self refresh),空操作(NOP)。 2.1 初始化(initialize) SDRAM上电后必须按一种确定的方式初始化。一旦SDRAM上的电压加至Vdd并且时钟稳定后,SDRAM需要有100us的时间不接受除NOP以外的任何命令。当100us过后,应该对SDRAM发出预充电(precharge)命令,使得SDRAM所有bank预充电,这样bank都进入idle状态。之后,要使SDRAM连续执行两个auto refresh 周期。当这两个周期完毕之后,就可以对SDRAM的模式寄存器(mode regester)进行操作。 2.2 寄存器定义(register definition) 模式寄存器(mode regester)用来决定SDRAM用何种工作模式工作。模式寄存器(mode regester)定义了 :何种读写模式(burst 或 fullpage),burst长度(burst length),CAS延时。 从下图看出,模式寄存器(mode regester)的M0-M2位定义了burst长度,M3定义了burst的类型(连续的或交叉存取的),M4-M6位定义了CAS延时。M7和M8定义工作模式。M9定义写burst模式。 0000000000001000100111 2.3 激活命令(active) reada,writea 激活命令用来打开某一特定bank的一row,BA0和BA1上的值选择了某个bank,地址线A0-A11的值对应着某一row。被激活的row在未接到precharge命令之前会保持原状态。如果需要切换bank地址进行操作,就必须在两个命令之间插入precharge命令。 2.4 读(read)和写(whrit)操作 读命令是在激活的一row上开始一个burst或fullpage读或写操作。BA 0 BA1上的值选择了bank,A0-A9 (x4), A0-A8 (x8), or A0-A7 (x16)选择了起始column地址。A10的值决定了是否选择autoprecharge模式。在模式寄存器中已经设置了读或写的工作方式。 2.5 预充电(precharge) 预充电命令用来使激活的row关闭。A10决定是只关闭一个bank或着全部的bank。在切换地址时,如果需要有bank的变动,需要在读写之前插入precharge命令。 2.6 自动预充电(auto precharge) fullpage mode不支持autoprecharge,A10=0 A10为1时, 除了在 burst工作模式下,在读或写结束后都会进行一次自动预充电。 2.7 自发停止命令(Burst Terminate) 自发停止命令用于在一个连续的读或写命令中插入,提前结束这一串的数据的读或写。 2.7 自动刷新(auto refresh)和自我刷新(self refresh) 每过15.6us就refresh一次1行 一共212 故15.6us×4096=64ms 为保持SDRAM上的数据不丢失,必须定时刷新,刷新计数器决定了刷新的时间间隔,刷新计数器要保证每个单元都能按一定周期刷新。SDRAM提供两种类型的刷新模式:自动刷新和自我刷新。自动刷新在正常操作中进行,但不持久,因此需要定时进行刷新,这样就会占用系统资源,降低系统性能。而自刷新模式无需系统时钟就能保持数据不丢失。两种模式相比,自动刷新实现较为简单,而自刷新功耗更小。 2.8 SDRAM操作指令 指令对应于RAS_N,CAS_N,WE_N  接口部件控制命令表 3 ALTERA提供的通用SDRAM控制器的结构 这是总体示意图,左边是用户操作端,右边则与SDRAM相连。 该通用控制器由3部分组成,分别是:commend,control_interface,str_data_path。主要功能是将外部提供的read write precharge等命令转化为SDRAM理解的RAS_N,CAS_N,WE_N指令。 1:control_interface 功能:从CMD[2:0]接收外部指令,ADDR[21:0]接受地址,REF_ACK接收refresh的反馈信号。CM_ACK接收命令结束信号反馈。本模块将CMD编码信号转化为逐个的单个信号,将lode mode中的控制信息也存入寄存器。再传给下一级commend模块。 2:commend 功能:将上一级control_interface模块初步翻译过的单个控制命令翻译成RAS_N,CAS_N,WE_N组合的指令。并且将控制信息中的延时信息体现出来。OE是用来使能str_data_path模块中数据是否可以出现在数据线上的。只有当写有效时才会令其使能。 特别指出的是如果外部输入的控制命令是read/write,则本模块将此命令转化为两步,先输出一个 RAS_N,CAS_N,WE_N组合的active 命令,再输出一个RAS_N,CAS_N,WE_N组合的 read/write命令。 3:str_data_path 功能:控制有效数据出现在数据线上,有OE提供使能。外部数据由此进入,SDRAM的数据也由此读出。 该通用控制器具有极大的开放性,即没有归定死某个读写流程。但需要在外部加一个适合应用环境的状态控制模块来配合使用。该控制模块可以有使用者自由设计,只要读写时序正确,就可以正常使用SDRAM。相对于一些专用的控制器而言,其开放性还体现在模式控制的重新设定。比如在fullpage和burst方式间的切换,只要在100us的NOP命令之后重新做一次初始化命令即可。 4 功能时序操作 FULLPAGE 方式下SDRAM控制步骤: 一 初始化: 对SDRAM IP左端依次输入 10个clk的 nop命令(CMD<=3'b000),10个clk的precharge命令(CMD<=3'b100),20个clk的refresh命令,10个clk的precharge命令(CMD<=3'b011)。 接下来写控制字: 1 装载SDRAM模式寄存器-------确定控制信息 CMD<=3'b101; ADDR<=`ASIZE'b0000000000001000100111; 2 装载REG2--------------------------选择fresh周期 CMD<=3'b111; ADDR<=1000; 3 装载REG1--------------------------确定控制信息 CMD<=3'b110; ADDR<=`ASIZE'b0000000000000101111100; 3者之间相隔10个CLK即可; 二 写操作 再执行完上述操作后,输入如下命令: CMD<=3'b010;--------------输入写命令 ADDR<=22'b0000000000000000000000;--------------输入写地址 执行写命令时我们设定一个计数器counter。 在计数器counter=0时发出写命令,则在counter=5时写的数据是第一个有效数据,是可以读出来的。接着从5到260 共256个数据均为有效写数据。在第一个写有效信号发出后,要把发出NOP命令CMD<=3'b000。在数据接受完之前,counter=259时发出precharge命令CMD<=3'b100。维持prcharge的时间要延续 7个clk。 二 读操作 输入如下命令并启用计数器counter: CMD<=3'b001;--------------输入读命令 ADDR<=22'b00000000000000000000000;--------------输入读地址 在计数器counter=0时发出读命令,并发出地址信号,保持5个相同输出。8时读到第一个有效数据。在counter=5时CMD<=3'b000发出nop命令。这时都有数据读出。 263时读出最后一个数据。但是必须在计数器counter=259时发出precharge命令。 ***Fullpage模式下注意事项: 1.refresh操作,full page的refresh的命令要靠你自己来发,这确实是一个英明的决策,因为只有把这个控制权交给你,你才会在既保证数据不会丢失的情况下,也能保证刷新的完成,给出refresh命令以后必须要注意一点就是 后面必须给出一段空操作的延时,或者是读操作,要不然数据就会丢哦! 2.关于precharge 和burst terminate 有一个小小的分歧。结束full page 读写操作用的是precharge的命令,如果在没有给出正确的refresh操作情况下, 其实实际中解析出来的却是burst terminate的波形,要再发一次precharge 才能真正的产生precharge 的波形。在refresh操作正确的情况下可产生正确的precharge波形。 3.如果验证sdram是不是读写正常,最好是一次大量写入很多page的数据,然后再一次读出很多行,这样才能找到问题,如果是写一行就读出来,可能不容易发现问题的,就像3上面提到的刷新,很可能会被写一行读一行的操作给掩盖掉! BURST8方式下SDRAM控制步骤: 一 初始化: 对SDRAM IP左端依次输入 10个clk的 nop命令(CMD<=3'b000),10个clk的precharge命令(CMD<=3'b100),20个clk的refresh命令(CMD<=3'b011),10个clk的precharge命令。 接下来写控制字: 1 装载SDRAM模式寄存器-------确定控制信息 CMD<=3'b101; ADDR<=`ASIZE'b0000000000000000110011;; 2 装载REG2--------------------------选择fresh周期 CMD<=3'b111; ADDR<=1000; 3 装载REG1--------------------------确定控制信息 CMD<=3'b110; ADDR<=`ASIZE'b0000000001000001111111; 3者之间相隔10个CLK即可; 二 写操作 再执行完上述操作后,输入如下命令: CMD<=3'b010;--------------输入写命令 ADDR<=22'b0000000000000000000000;--------------输入写地址 执行写命令时我们设定一个计数器counter。 在计数器counter=0时发出写命令,则在counter=5时写的数据是第一个有效数据,是可以读出来的。接着从5到32 共8个数据均为有效写数据。在第一个写有效信号发出后,要把发出NOP命令CMD<=3'b000。在数据接受完之前,counter=31时发出precharge命令CMD<=3'b100。维持prcharge的时间要延续 7个clk。 二 读操作 输入如下命令并启用计数器counter: CMD<=3'b010;--------------输入写命令 ADDR<=22'b00000000000000000000000;--------------输入写地址 在计数器counter=0时发出写命令,并发出地址信号,保持5个相同输出。8时读到第一个有效数据。在counter=5时CMD<=3'b000发出nop命令。这时都有数据读出。 263时读出最后一个数据。但是必须在计数器counter=10时发出precharge命令。 注:write read命令发出后要发出nop命令(否则读出的数据是写数据的最后几位)。Precharg的时间点要恰好(影响到最后几位的数据正常写入读出)。Precharg的时间要够长(不够长的话,bank不能正常关闭,下一次读写虽然换了地址,但是还是会读写上一次的地址)。 另外: 1.CAS是行地址有效时的延迟,RAS是列地址有效时的延迟,BURST LENGTH(1,2,4,5 and full page)是SDRAM读写时的方式。1就是送一个列地址,读写1个数据;2就是送一个列地址,读写2个数据,依次类推。 2. BANK的选择不一定依次,根据你的需要而定。想用哪个BANK,就用哪个。 3.地址复用的何实现靠送给SDRAM的指令来实现,在行地址锁存期间送行地址,在列地址锁存期间送列地址。 4.AP(A10,第10根地址线)在不同状态下要求不同状态,不矛盾,靠不同的状态来区分。 5.有关de1上的sdram采用的是64M(4*1M*16bit),A2V64S40CTP。其具体资料参见A2V64S40CTP.pdf
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服