FPGA——初识SDRAM
SDRAM(Synchronous Dynamic Random Access Memory)
SDRAM,同步动态随机存储器。同步,工作时钟和fpga系统时钟一致。动态,SDRAM利用电容的存储电荷的特性,但是存储的电荷会慢慢释放,所以SDRAM需要不断的刷新给电容充电。随机,SDRAM不是固定存储的,我们可以把SDRAM当作一个存储阵列。我们可以通过行地址和列地址准确的定位到每一个存储单元,可以指定地址读写。
一、SDRAM存储容量和速度等级
以镁光4Megx16x4Banks 的SDRAM芯片为例
4Meg :单个bank的存储单元数(行列地址乘以列地址数)行地址位宽13,列地址位宽9。2的十三次方乘以2的九次方等于 4194304
16:每个存储单元的比特数(位宽)
4banks:bank个数
总容量:4meg * 16 4 = 419430416*4
clock frequency SDRAM能工作的最高时钟频率。
tRCD写入激活命令到开始读写数据所需要的最少等待时间。这里SDRAM的工作时钟,所以等待周期为2。
tRP表示预充电的等待时间,等待周期为2.
tCL为列选通潜伏期,读指令写入到第一个数据有效输出所需的等待时间
上图中的tRP、tRCD、tCL每个厂家或者不同的SDRAM芯片都不同,可通过配套的书册手册查找。
二、SDRAM的引脚和操作命令
1、
CLK:系统时钟
CKE:时钟使能信号,高电平有效,低电平时 能屏蔽系统时钟,冻结当前的操作。
CS#:片选信号,低电平有效。高电平时屏蔽使能输出端口,除了clk,cke,dqm。
RAS:行选同步信号,低电平时,地址端口A12到A0会输入行地址。
CAS:列选同步信号,低电平时,地址端口输入的列地址。
WE:使能信号,低电平时,能够写操作和预充电。
DQM:数据掩码信号,高电平时,下一个时钟数据总线会出现高阻态。16位的sdram,DQM分为DQM_h,DQM_l,分别控制高八位和第八位。如果全1,则16位全是高阻态。
20 BA0:bank地址
21 BA1:bank地址
A12——A0:地址端口
DQ15——DQ0:数据端口(可输入输出)
2、SDRAM初始化
在对SDRAM进行正常的操作之前,SDRAM必须被初始化(预充电,自动刷新,寄存器配置)。
(1)当SDRAM的 VDD和VDDQ上电,并且时钟稳定后,SDRAM自先得延迟等待100us,在这个等待期间,对于SDRAM只能赋给禁止命令(INHIBIT)或者空操作(NOP)命令。
(2)100us的延时之后,需要对SDRAM首先执行一次预充电命令,所有的BANK都必须被预充电,以使器件所有的BANK 都处于空闲状态。(A10为高电平)。
(3)进入空闲状态后,至少需要执行两个周期的自动刷新命令,自动刷新命令元完成以后,就可以对SDRAM进行加载模式寄存器了,因为模式寄存器上电后处于未知的状态,因此在执行任何的操作命令之前必须加载模式寄存器,在需要的时候,在模式加载完成后可以执行两次自动刷新命令。
上时序图中的tRP、tRFC、tMRD每个厂家或者不同的SDRAM芯片都不同,可通过配套的书册手册查找。
3、配置寄存器模式
通过SDRAM地址总线配置寄存器模式
A2,A1,A0:突发长度配置
A3:突发类型设置,低电平顺序突发,高电平隔行突发
A4,A5,A6:列选通潜伏期,读命令到到数据出现的时钟周期
A7,A8:工作模式,用户只开放普通模式
A9:写突发模式,低电平读写都采用突发方式,高电平读是突发,写只能写入一个数据
A10,A11,A12:保留位,全部置0
4、自动刷新
SDRAM通过刷新操作来保证数据的可靠性。SDRAM的刷新操作是周期性的,目前国际公认的标准是存储电容的保存期上限是64ms,也就是每一行的刷新的循环周期最大是64ms,所以刷新间隔就等于行数/64ms,以字长为13的行地址,64ms/8192,也就是刷新最大间隔等于7812.5ns。
刷新命令分为两种,一种是自刷新(self refresh),一种自动刷新(auto refresh)。自动刷新需要执行自动刷新操作指令,在此之前需要执行预充电操作。而自刷新是当CKE为低电平时,写入刷新指令,只有当CKE重新拉高时,才会退出自刷新。
5、写操作,整页突发
采用整页突发,页突发长度数值上等于SDRAM一行包含的存储单元个数,可以使用突发终止指令来实现其他长度的写突发操作。当初始化完成且写使能有效时,开始写入写操作指令,同时 BA0-BA1、A0-A12 分别写入 L-Bank 地址、行地址,激活特定 L-Bank 的特定行,激活指令写入后,等待 tRCD时间,此过程中操作命令保持为空操作命令。tRCD等待时间结束后,写入写数据指令,同时 A0-A8 写入待数据的列首地址,读数据指令写入同时,由 DQ 开始写入数据,在最后一个数据写入后的下一个时钟写入突发终止指令。
6、读操作
当初始化完成且读使能有效,发送激活指令到 SDRAM,同时 BA0-BA1、A0-A12 分别写入 L-Bank 地址、行地址,激活特定 L-Bank 的特定行,激活指令写入后,等待 tRCD时间,此过程中操作命令保持为空操作命令。tRCD等待时间结束后,写入读数据指令,同时 A0-A8 写入数据读取首地址,读数据指令写入后,随机跳转到潜伏状态,等待潜伏期结束,DQ 开始输出读取数据,设读取数据个数为 N,自读指令写入周期的下个时钟周期开始计数,N 个时钟周期后,写入突发停止指令,终止数据读操作。
FPGA——初识SDRAM
SDRAM(Synchronous Dynamic Random Access Memory)
SDRAM,同步动态随机存储器。同步,工作时钟和fpga系统时钟一致。动态,SDRAM利用电容的存储电荷的特性,但是存储的电荷会慢慢释放,所以SDRAM需要不断的刷新给电容充电。随机,SDRAM不是固定存储的,我们可以把SDRAM当作一个存储阵列。我们可以通过行地址和列地址准确的定位到每一个存储单元,可以指定地址读写。
一、SDRAM存储容量和速度等级
以镁光4Megx16x4Banks 的SDRAM芯片为例
4Meg :单个bank的存储单元数(行列地址乘以列地址数)行地址位宽13,列地址位宽9。2的十三次方乘以2的九次方等于 4194304
16:每个存储单元的比特数(位宽)
4banks:bank个数
总容量:4meg * 16 4 = 419430416*4
clock frequency SDRAM能工作的最高时钟频率。
tRCD写入激活命令到开始读写数据所需要的最少等待时间。这里SDRAM的工作时钟,所以等待周期为2。
tRP表示预充电的等待时间,等待周期为2.
tCL为列选通潜伏期,读指令写入到第一个数据有效输出所需的等待时间
上图中的tRP、tRCD、tCL每个厂家或者不同的SDRAM芯片都不同,可通过配套的书册手册查找。
二、SDRAM的引脚和操作命令
1、
CLK:系统时钟
CKE:时钟使能信号,高电平有效,低电平时 能屏蔽系统时钟,冻结当前的操作。
CS#:片选信号,低电平有效。高电平时屏蔽使能输出端口,除了clk,cke,dqm。
RAS:行选同步信号,低电平时,地址端口A12到A0会输入行地址。
CAS:列选同步信号,低电平时,地址端口输入的列地址。
WE:使能信号,低电平时,能够写操作和预充电。
DQM:数据掩码信号,高电平时,下一个时钟数据总线会出现高阻态。16位的sdram,DQM分为DQM_h,DQM_l,分别控制高八位和第八位。如果全1,则16位全是高阻态。
20 BA0:bank地址
21 BA1:bank地址
A12——A0:地址端口
DQ15——DQ0:数据端口(可输入输出)
2、SDRAM初始化
在对SDRAM进行正常的操作之前,SDRAM必须被初始化(预充电,自动刷新,寄存器配置)。
(1)当SDRAM的 VDD和VDDQ上电,并且时钟稳定后,SDRAM自先得延迟等待100us,在这个等待期间,对于SDRAM只能赋给禁止命令(INHIBIT)或者空操作(NOP)命令。
(2)100us的延时之后,需要对SDRAM首先执行一次预充电命令,所有的BANK都必须被预充电,以使器件所有的BANK 都处于空闲状态。(A10为高电平)。
(3)进入空闲状态后,至少需要执行两个周期的自动刷新命令,自动刷新命令元完成以后,就可以对SDRAM进行加载模式寄存器了,因为模式寄存器上电后处于未知的状态,因此在执行任何的操作命令之前必须加载模式寄存器,在需要的时候,在模式加载完成后可以执行两次自动刷新命令。
上时序图中的tRP、tRFC、tMRD每个厂家或者不同的SDRAM芯片都不同,可通过配套的书册手册查找。
3、配置寄存器模式
通过SDRAM地址总线配置寄存器模式
A2,A1,A0:突发长度配置
A3:突发类型设置,低电平顺序突发,高电平隔行突发
A4,A5,A6:列选通潜伏期,读命令到到数据出现的时钟周期
A7,A8:工作模式,用户只开放普通模式
A9:写突发模式,低电平读写都采用突发方式,高电平读是突发,写只能写入一个数据
A10,A11,A12:保留位,全部置0
4、自动刷新
SDRAM通过刷新操作来保证数据的可靠性。SDRAM的刷新操作是周期性的,目前国际公认的标准是存储电容的保存期上限是64ms,也就是每一行的刷新的循环周期最大是64ms,所以刷新间隔就等于行数/64ms,以字长为13的行地址,64ms/8192,也就是刷新最大间隔等于7812.5ns。
刷新命令分为两种,一种是自刷新(self refresh),一种自动刷新(auto refresh)。自动刷新需要执行自动刷新操作指令,在此之前需要执行预充电操作。而自刷新是当CKE为低电平时,写入刷新指令,只有当CKE重新拉高时,才会退出自刷新。
5、写操作,整页突发
采用整页突发,页突发长度数值上等于SDRAM一行包含的存储单元个数,可以使用突发终止指令来实现其他长度的写突发操作。当初始化完成且写使能有效时,开始写入写操作指令,同时 BA0-BA1、A0-A12 分别写入 L-Bank 地址、行地址,激活特定 L-Bank 的特定行,激活指令写入后,等待 tRCD时间,此过程中操作命令保持为空操作命令。tRCD等待时间结束后,写入写数据指令,同时 A0-A8 写入待数据的列首地址,读数据指令写入同时,由 DQ 开始写入数据,在最后一个数据写入后的下一个时钟写入突发终止指令。
6、读操作
当初始化完成且读使能有效,发送激活指令到 SDRAM,同时 BA0-BA1、A0-A12 分别写入 L-Bank 地址、行地址,激活特定 L-Bank 的特定行,激活指令写入后,等待 tRCD时间,此过程中操作命令保持为空操作命令。tRCD等待时间结束后,写入读数据指令,同时 A0-A8 写入数据读取首地址,读数据指令写入后,随机跳转到潜伏状态,等待潜伏期结束,DQ 开始输出读取数据,设读取数据个数为 N,自读指令写入周期的下个时钟周期开始计数,N 个时钟周期后,写入突发停止指令,终止数据读操作。
发布评论