EDN China > 技术文章 > 微处理器与DSP > CPU/GPU > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) SDRAM控制器的设备与VHDL实现

来源:中电网 / 作者:田 丰 邓建国 李 巍 贾治华?? 2006年07月12日 ?? 收藏0

?????? DATAIN为写入数据端口,64bit位宽。

?????? DATAOUT为读出数据端口,64bit位宽。

?????? RD_OE为读出数据使能端口,当其为1时,表示从下一个时钟起,数据将依次出现在DATAOUT口上。

?????? WR_OE为写入数据使能端口,当其为1时,写入数据应该依次出现在DATAIN口上。

?????? CMD[2:0]为命令输入端口,分别表示读、写内存等待操作。其中,CMD=“000”表示无

操作,内存条交给控制器管理,定其完成刷新工作;REFRESH命令由外部逻辑指定特刷新的内存芯片信号,组号由ADDR的低位给出;LOAD_MODE命令执行内存条工作寄存器初始化工作,初始化值由DATAIN的低13位决定,内存芯片组号同样由ADDR的低位给出;同理,ADDR的低位也决定了预充电操作所对应的内存芯片组号。

?????? CMDACK为命令应答端口,表示命令已经被执行,使外部逻辑可以向控制器发出下一个动作。

?????? 4.2 状态机

?????? 图3是SDRAM控制器的状态转移图。状态图中的各个状态内均包含一系列的子状态转移(对SDRAM内存条发出连续命令),每个子状态完成一个功能操作。初始化操作包括前面介绍的内存条初始化全过程,工作寄存器的默认值在VHDL程序中指定。以后可以通过LOAD_MODE命令改变内存条的工作模式。初始化结束后,内存条进入Idel状态,刷新计数器开始工作,控制器开始响应外部逻辑的操作请求。

??????? 刷新计数器操作是一个独立的进程(process)。刷新计数器的初值由内存芯片要求、内存条个数和控制器工作频率共同决定。例如,在本次设计中,所采用的MT48LC32M8A2内存芯片要求在64ms内夏至少刷新8196次。而MIT16LSDT6464A型内存条共有两组内存芯片,也就是要求在64ms内要发出8196×2条自刷新(AUTO REFRESH)指令。系统工作时钟为46.66MHz,因此控制单条MIT16LSDT6464A时,刷新计数器初值至多为(64ms/8196/2)×6、、46.66MHz,即182。开始工作后,每当刷新计数器值减为0,便依次向内存芯片组发出刷新命令,保证SDRAM中的数据不丢失。刷新请求是内存请求;读和写操作是外部请求。在Idel状态中有请求仲裁逻辑,当内部和外部请求同时出现时,优先保证内部请求,状态转移至刷新操作。当刷新操作结束时,重新返回Idel状态,开始响应外部请求。响应外部请求后,应答信号CMDBAK出现正脉冲。它通知外部逻辑,请求已经被响应,可以撤销请求。在刷新操作状态中,也有许数器计数,其大小等于控制器管理的内存芯片信号。记录并判断此次刷新操作所对应的内存芯片的组号,产生相应的片选信号。

SDRAM 写时序图


?????? 响应读、写请求后,状态从Idel转移到读、写状态。同时读、写地址和写入的数据锁存至控制器。控制器由读写地址解析出CS信号、页地址、行地址、列地址。向内存条发出一系列命令(ACTIVE,READ / WRITE with AUTO PRECHARGE),完成读写操作,为了简化,此控制器向SDRAM发出的都是带有AUTO PRECHARGE的读、写指令,然后由SDRAM内部逻辑自动在读、写过程末期发出PRECHARGE指令(在发READ/WRITE指令时,地址线A10赋值1,打开AUTO PRECHARGE功能)。图4和图5分别是利用该控制器完成读、写操作的时序图。读操作的CAS延迟为两个时钟。


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

SDRAM? 控制器? VHDL?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈