微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > SDRAM控制器的设计与VHDL实现

SDRAM控制器的设计与VHDL实现

时间:06-05 来源:互联网 点击:

3 初始化操作

SDRAM在上电以后必须对其进行初始化操作,具体操作如下:

(1)系统在上电后要等待100~200μs。在等待时间到了以后至少执行一条空操作或者指令禁止操作。
(2)对所有芯片执行PRECHARGE命令,完成预充电。
(3)向每组内存芯片发出两条AUTO REFRESH命令,使SDRAM 芯片内部的刷新计数器可以进入正常运行状态。
(4)执行LOAD MODE REGISTER命令,完成对SDRAM工作模式的设定。

完成以上步骤后,SDRAM进入正常工作状态,等待控制器对其进行读、写和刷新等操作。

4 SDRAM控制器设计

4.1 功能说明

在以SDRAM作为缓存的系统中,使用可编程器件对其进行控制具有很强的灵活性。为了使设计具有模块化和可重复使用的优点,设计了一个简化的SDRAM接口电路。这样就屏蔽掉了SDRAM操作的复杂性,而其它逻辑模块可通过接口电路对SDRAM进行访问。此外,由于整个SDRAM控制器用VHDL语言编写,只要对其进行简单的修改就可以满足不同的需求,具有很强的灵活性。

参照图2,SDRAM控制器完成的主要功能是对CMD[2:0]的命令字和ADDR端的地址进行解析,产生相应的SDRAM的控制时序。


CLK为输入的工作时钟端口。

ADDR为输入地址端口。控制器将其解析为对应的片选、页以及行、列地址。以一条MIT16LSDT6464A内存条为例,其大小为512Mbyte(229 byte)。数据位宽为64bit(8byte),则地址线ADDR应为26根。可以这样映射地址:ADDR[25]对应内存芯片组号;ADDR[24:23]对应页号;ADDR[22:10]对应行号;ADDR[9:0]对应列号。

DATAIN为写入数据端口,64bit位宽。
DATAOUT为读出数据端口,64bit位宽。

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

CMD[2:0]为命令输入端口,分别表示读、写内存等操作,具体编码见表3。其中,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)×46.66MHz,即182。开始工作后,每当刷新计数器值减为0,便依次向内存芯片组发出刷新命令,保证SDRAM中的数据不丢失。刷新请求是内部请求;读和写操作是外部请求。在Idel状态中有请求仲裁逻辑,当内部和外部请求同时出现时,优先保证内部请求,状态转移至刷新操作。当刷新操作结束时,重新返回Idel状态,开始响应外部请求。响应外部请求后,应答信号CMDBAK出现正脉冲。它通知外部逻辑,请求已经被响应,可以撤销请求。在刷新操作状态中,也有计数器计数,其大小等于控制器管理的内存芯片组号。记录并判断此次刷新操作所对应的内存芯片的组号,产生相应的片选信号。

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

该SDRAM控制器在中频数据海量存储系统中已得到应用。数据接收逻辑将接收到的中频采样数据整理后(拼接成64bit),通过SDRAM控制器存入SDRAM阵列。存满后,数据输出逻辑将中频数据通过SDRAM控制器从内存条中取出,传输至上位机。其VHDL代码在ATERA公司的FPGA——EP1C6Q240中通过了QuartusII的仿真、综合和布局、布线。占用499个logic cell,消耗了8%的逻辑资源。留有丰富的资源可提供给其它逻辑单元使用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top