1、知识点
SDRAM提供了多种数据读取方式,诸如单个读、页突发读(突发长度1、2、4、8、全页)等。本文目前只对全页突发的模式做一个讲解与仿真。
各信号说明如下:
CK:工作时钟,具体时钟频率视不同的芯片而不同
CKE:时钟使能,在整个突发读过程中都需要拉高(实际上除了在休眠模式拉低,其他操作全需要拉高)
COMMAND:SDRAM命令,由4根线拼接而成,分别是CS#(片选信号),RAS#(行选通信号),CAS#(列选通信号),WE#(写使能信号),通过这4根命令线,再结合SDRAM的地址、输入输出数据等,就可以对SDRAM进行各种命令操作
DQM/DQML,DQMU:数据掩码,通过数据掩码可以实现对输入或输出数据的某一位进行“掩埋”,也就是使某一位失效
A[9:0],A[12:11]:数据地址线,同时也可用来设置模式寄存器
A10:数据地址线,同时也可以用来使能一些具体操作,比如控制自动预充电使能、使能预充电bank数量
BA[1:0]:bank地址
DQ数据:数据总线,突发读过程中需要根据时序获取数据总线上SDRAM输出的数据
通过对时序图的分析可以总结出初始化过程如下:
1.发送激活指令,同时在bank总线输出想要写入数据的bank地址,在地址总线输出写入数据的行地址,所以该操作也称之为 “ 行激活 ”
2.发送激活指令后需要等待一定的时间,即tRCD,在此期间同样需要发送NOP空指令(发送空指令是为了防止对SDRAM进行误操作)
3.等待结束后发送读指令,在地址总线输出要读取数据的列首地址,然后等待潜伏期(CL,CAS latency)个时钟周期
4.潜伏期结束后,数据总线开始输出数据,此后每个周期均有数据输出,直到向SDRAM发送突发终止指令,结束这次突发读取,由此可实现突发长度的控制(不能超过一行数据的最大数,即2*9=512个数据)
(注:本次不带有自动预充电过程即不需要以下操作:
5.发送预充电指令对所有BANK进行预充电操作,A10拉高即是选中所有BANK
6.进行预充电操作后需要等待一定的时间,即tRP,在此期间同样需要发送NOP空指令(发送空指令是为了防止对SDRAM进行误操作)
7.tRP时间结束后,一次突发写操作完成)
2、设计
信号名称 | 位宽 | 描述 | 信号名称 | 位宽 | 描述 |
sys_clk | 1 | 时钟信号100M | rd_cmd | 4 | 4位SDRAM命令,组成{CS#,RAS#,CAS#,WE#} |
sys_rst_n | 1 | 复位信号,低电平有效 | rd_ba | 2 | 2位BANK地址,共4个BANK |
init_end | 1 | 初始化完成信号,只有完成初始化后才能进行读操作 | rd_addr | 13 | 13位SDRAM地址 |
rd_data | 16 | 从SDRAM读取到的数据 | rd_ack | 1 | 读操作响应信号,表示该模块对SDRAM进行了读操作 |
rd_burst_len | 10 |