FPGA——sdram控制器1

简介

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

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

sdram引脚端口

在这里插入图片描述

信号名端口说明
sdr_clksdram时钟
sdr_ckesdram时钟使能
sdr_cs_nsdram片选
sdr_ras_nsdram行选通
sdr_cas_nsdram列选通
sdr_we_nsdram写使能
[12:0]sdr_aa[12:0]sdram行地址;a[9:0]sdram列地址
[1:0]sdr_basdrambank地址
[15:0]sdr_dqsdram数据
sdr_dqmsdram掩码

初始化

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

初始化操作时序

在这里插入图片描述

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

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

在这里插入图片描述
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)

在这里插入图片描述

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

写操作(BL=4)

写操作时,预充电不能与写操作同时进行,必须在tWR之后才能发出预充电命令,以确保数据可靠的写入
在这里插入图片描述

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

sdram刷新操作

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值