FPGA——sdram控制器1

简介

SDRAM:
Synchronous Dynamic Random Access Memory
同步动态随机存储器

优点:
	空间存储量大
	读写速度快
	价格相对便宜
缺点:
	控制逻辑复杂

sdram引脚端口

FPGA——sdram控制器1_第1张图片

信号名 端口说明
sdr_clk sdram时钟
sdr_cke sdram时钟使能
sdr_cs_n sdram片选
sdr_ras_n sdram行选通
sdr_cas_n sdram列选通
sdr_we_n sdram写使能
[12:0]sdr_a a[12:0]sdram行地址;a[9:0]sdram列地址
[1:0]sdr_ba sdrambank地址
[15:0]sdr_dq sdram数据
sdr_dqm sdram掩码

初始化

sdram芯片上电之后需要一个初始化的过程,才能进行读/写/刷新操作。

初始化操作时序

FPGA——sdram控制器1_第2张图片

1.上电之后等待至少200us
2.所有bank预充电
3.至少8次刷新操作
4.模式寄存器设置

模式寄存器设置(MRS,Mode Register Set)

FPGA——sdram控制器1_第3张图片
sdr_a[2:0]:突发长度(BL)
突发是指在同一行中相邻的存储单元连续进行数据传输的方式,
连续传输所涉及到的存储单元(列)的数量就是突发长度(BL)
全页突发:一次写一整行数据
sdr_a[3]:突发传输方式
sdr_a[6:4]:CAS潜伏期(CL)
sdr_a[9:7]:操作模式
sdr_a[12:10]:保留,参数没有用到
sdr_ba[1:0]:保留,参数没有用到

sdram读写操作

预充电
在对sdram的某一存储地址进行读写操着结束后,如果要对同一L-bank的另一行进行寻址,就要将原来的有效行关掉,重新发送行/列地址
L-bank关闭现有工作行,准备打开新行的操作就是预充电
预充电命令发出之后,等待tRP时间后才能发送行激活命令打开新行
行激活
无论是读操作还是写操作,都要先激活sdram中的一行,使之处于有效状态
cmd={sdr_cs_n,sdr_ras_n,sdr_cas_n,sdr_we_n}

当cmd=0011(激活命令)时,sdr_a上加载行地址,sdr_ba上加载bank地址

列读写
行地址激活之后,对列地址进行寻址。读写命令是与列寻址信号同时发出的

cmd=0101(读命令)或cmd=0100(写命令)时,sdr_a[10]是否允许自动预充电,sdr_a[9:0]列地址,sdr_ba[1:0]bank地址

行激活与列读写之间有一个时间间隔tRCD

读操作(CL=2,BL=4)

FPGA——sdram控制器1_第4张图片

1.行激活
2.tRCD间隔后,发读命令
3.CL(潜伏期)周期后数据输出

写操作(BL=4)

写操作时,预充电不能与写操作同时进行,必须在tWR之后才能发出预充电命令,以确保数据可靠的写入
FPGA——sdram控制器1_第5张图片

1.行激活
2.tRCD间隔后,发写命令,将需要写入的数据放入数据线上
3.为了保证数据能够可靠的写入sdram中,都要留出足够的写入/校正时间(tWR),这个操作叫写回

sdram刷新操作

SDRAM存储单元是硅片电容,电容记忆电荷能力大约64ms,即需要在64ms之前对电容进行充放电,而充放电的过程通过“刷新操作”完成。
自动刷新
sdram内部有一个行地址生成器(刷新计数器),用来生成自动刷新行地址
每次刷新操作需要的时间为tRC,在自动刷新指令发出后需要等等待tRC才能发送其他命令
SDRAM每次只刷新一行,为保证SDRAM正常工作,需要把64ms分成2^13等分,即每一行刷新需要64 / 2^13ms
刷新命令发送间隔时间最大值为7.8125us

你可能感兴趣的:(FPGA)