摘 要:介绍了sdram的特点和工作原理,提出了一种基于fpga的sdram控制器的设计方法,使用该方法实现的控制器可非常方便地对sdram进行控制。
关键词:sdram;控制器;verilog;状态机
引言
--- 在基于fpga的图象采集显示系统中,常常需要用到大容量、高速度的存储器。而在各种随机存储器件中,sdram的价格低、体积小、速度快、容量大,是比较理想的器件。但sdram的控制逻辑比较复杂,对时序要求也十分严格,使用很不方便,这就要求有一个专门的控制器,使系统用户能很方便地操作sdram。为此,本文提出了一种基于fpga的sdram控制器的设计方法,并用verilog给于实现,仿真结果表明通过该方法设计实现的控制器可以在fpga芯片内组成如图1所示的sdram接口,从而使得系统用户对sdram的操作非常方便。
sdram简介
--- sdram器件的管脚分为控制信号、地址和数据三类。通常一个sdram中包含几个bank,每个bank的存储单元是按行和列寻址的。由于这种特殊的存储结构,sdram有以下几个工作特性。
● sdram的初始化
--- sdram在上电100~200μs后,必须由一个初始化进程来配置sdram的模式寄存器,模式寄存器的值决定着sdram的工作模式。
● 访问存储单元
--- 为减少i/o引脚数量,sdram复用地址线,所以在读写sdram时,先由active命令激活要读写的bank,并锁存行地址,然后在读写指令有效时锁存列地址。一旦bank被激活后只有执行一次预充命令后才能再次激活同一bank。
● 刷新和预充
--- sdram的存储单元可以理解为一个电容,总是倾向于放电,因此必须有定时的刷新周期以避免数据丢失。刷新周期可由(最小刷新周期÷时钟周期)计算获得。对bank预充电或者关闭已激活的bank,可预充特定bank也可同时作用于所有bank,a10、ba0和ba1用于选择bank。
● 操作控制
--- sdram的具体控制命令由一些专用控制引脚和地址线辅助完成。cs、ras、cas和wr在时钟上升沿的状态决定具体操作动作,地址线和bank选择控制线在部分操作动作中作为辅助参数输入。由于特殊的存储结构,sdram操作指令比较多,不像sram一样只有简单的读写。
sdram控制器的设计实现
● 总体设计框图和外部接口信号
图1
--- sdram控制器与外部的接口示意图由图1给出,控制器右端接口信号均为直接与sdram对应管脚相连的信号,此处不做介绍。控制器左端的接口信号为与fpga相连的系统控制接口信号,其中,clk133为系统时钟信号,reset_n为复位信号,addr为系统给出的sdram地址信号,dain是系统用于写入sdram的数据信号,fpga_rd和fpga_wr为系统读、写请求信号(1为有效,0为无效),sdram_free是sdram的空闲状态标示信号(0为空闲,1为忙碌),fdata_enable是控制器给系统的数据收发指示信号(为0时,无法对sdram进行数据收发;为1时,若是系统读操作,则系统此时可从daout接收sdram的数据,若是写操作,则系统此时可以通过dain发送数据给sdram)。
图2
--- sdram控制器的结构组成如图2所示,包括系统控制接口模块、cmd命令解析模块、命令响应模块、数据通路模块共四个模块。系统控制接口模块用于接收系统的控制信号,进而产生不同的cmd命令组合;cmd命令解析模块用于接收cmd命令并解码成操作指令;命令响应模块用于接收操作指令并产生sdram的操作动作;数据通路模块则用于控制数据的有效输入输出。
--- sdram控制器设计的状态机实现原理如图3所示,包含了9个状态,其中从precharge到mode set为sdram上电后的初始化过程,其余状态为sdram的正常读写及刷新操作过程。
图3
● 各模块的设计
--- (1) 系统控制接口模块
--- 该模块内含了初始化机制和系统指令分析机制。初始化机制不仅要完成对sdram的初始化配置,还要完成对控制器的初始化配置,使控制器与外部sdram的工作模式一致。其过程如下:由计数器控制在系统上电200μs左右后,先进行sdram的初始化配置工作,由一个precharge all bank指令完成对所有bank的预充,接着是多个refresh指令,然后是模式配置指令load_mode,完成sdram的工作模式设置。之后进行控制器的初始化配置工作,先发出指令load_reg1给控制器载入模式字,再发出load_reg2指令载入控制器的刷新计数器值,完成控制器初始化配置。
--- 上述初始化过程结束后,系统指令分析机制才可接收并分析系统的读写信号和地址信息,以及从下个模块反馈回来的cmdack信号,并产生对应的cmd命令和saddr地址信息给cmd命令解析模块。通过程序设置,实现了根据初始化配置的参数来确定在读写到特定时刻发出precharge或者refresh的cmd指令,从而简化了系统的控制。而每当收到cmdack为1时,表示cmd指令已经发出并有效,此时就要发出nop命令(cmd=000)。要说明的是,saddr是分时复用的,在初始化载入模式时,saddr用以传输用户自己定义的模式字内容;而在正常的读写期间,saddr作为地址线传输sdram所需的行、列和块地址。此外,系统指令分析机制会根据控制器对sdram的操作处于什么样的状态,而反馈sdram_free和fdata_enable信号给系统用户。详细的cmd指令说明见表1。
--- (2) cmd命令解析模块
--- 该模块对cmd指令进行判断,其结果就是输出相应的操作指令信号给命令响应模块。例如,cmd为001时,则会输出do_read信号为1,cmd为010时,则会输出do_write信号为1,在同一时刻,只会输出一种有效的的操作指令。
--- --- 此外,该模块内含用以预设某些模式参数的模式寄存器,主要包括三类:第一类是sdram模式控制寄存器,在load_mode指令时,将该寄存器的值送入sdram的模式寄存器中,以控制sdram的工作模式。第二类是sdram控制器的参数寄存器(load_reg1),使得sdram控制器的工作方式与外部的sdram器件的工作方式匹配。第三类是sdram的刷新周期控制寄存器,该寄存器预设用户定义的自动刷新计数值,用于sdram的刷新周期预设。上述三类寄存器的预设值都是系统控制接口模块在初始化时通过saddr传送给来的。
--- (3) 命令响应模块
--- 该模块的作用是根据从cmd命令解析模块得到的操作指令,做出符合sdram读写规范的操作动作,来进行用户期望的操作;给出数据选通信号oe,来控制数据通路模块(写操作时oe为1,读操作时oe为0)。此外,该模块把系统非复用的地址addr处理为sdram复用的地址,分时送给sa、ba。程序中地址复用方法为:
--- assign raddr = addr[rowstart + rowsize -1:rowstart] //raddr为行地址
--- assign caddr = addr[colstart + colsize -1:colstart] //caddr为列地址
--- assign baddr= addr[bankstart +`banksize -1:bankstart]//baddr为bank地址
--- (rowstart、colstart、bankstart分别为行、列、块在addr中的起始位)
--- 在程序中,writea和reada的cmd指令实际隐含了active命令,所以该模块在收到do_write或do_read指令后,会先进行激活动作,经过初始化配置规定的cas延迟时间之后再进行读写动作。例如初始化时,模式字规定cas=2,burst length=page,则从命令接口模块收到do_write=1后,会先做出激活动作并给出行地址(发出ras_n=0,cas_n=1,we_n=1,sa=raddr),过2个时钟延迟后,再做出写动作并给出列地址(发出ras_n=1,cas_n=0,we_n=0,sa=caddr)。
--- 此外,收到各类操作指令后,该模块会反馈给cmd命令解析模块cmdack信号为1,并最终反馈到系统控制接口模块的cmdack信号为1,如果没有收到任何操作指令,则cmdack=0,cmdack信号为0。
--- (4) 数据通路模块
--- 该模块受oe信号的控制,使数据的进出和相应的操作指令在时序上同步。oe为1时,数据可由dq脚写入sdram,oe为0时,数据可从sdram的dq脚读出。
--- 控制器的使用及仿真时序
--- 根据系统设计对sdram读写要求的不同,对控制器进行简单的参数修改(主要是初始化时模式内容字的设置),即可使对sdram的控制符合自己的要求。该控制器使得系统对sdram的操作非常简单。以写操作为例,初始化结束后,只要sdram空闲,系统就会收到sdram_free有效信号,此时可以发出fpga_wr指令,同时给出addr地址信息,在收到反馈的fdata_enable有效后,系统将数据通过dain写到sdram中去,即完成写操作,系统无须关心sdram的刷新和预充。仿真时序图如图4、图5和图6所示,在写和读时序中,cas=2,burst length=page,dc表示无关(don't care)。
图4
图5
图6
仿真结果表明,该控制器可以使得系统对sdram的控制非常简单、方便。
结束语
--- 在实际应用中,使用altera公司的cyclone fpga器件进行设计,设计输入采用verilog来完成,实现了上述的sdram控制器接口电路。此外,由于采用了参数化设计思想,对特定容量的sdram的特定工作模式而言,只要根据其器件参数进行设定,该控制器就可以适用特定sdram的特定工作模式,具有一定的通用性。
你知道什么是铁基板吗
SIMV薄膜表面瑕疵在线检测设备的原理、参数及特点
模拟信号有哪些常见参数?放大器的功能有哪些?
紫光同芯又双叒叕荣获中国芯“优秀技术创新产品”奖
为什么机器人需要5G技术
使用Verilog实现基于FPGA的SDRAM控制器
【笔记】单片机的“身份证号码”实现的三种方式
Magic Leap和微软正在推销的MR又是什么?
如何构筑家庭听音室,环境与校声
学eda技术必看的8本书_eda技术方面的书籍推荐
智能制造面临怎样的挑战
诺基亚P1:侧边指纹识别 下月发布
诺基亚8、iPhone8什么时候上市?诺基亚8或将全面屏进行到底,成iphone 8最强势对手
盛思锐推出了一款微型SCD40二氧化碳和温湿度传感器
电竞俱乐部GK获近千万元天使轮融资,网友:人家这才叫打游戏!
AD5770R:分辨率低噪音可编电流输出的数模转换器
重庆万亿雄芯,全面揭秘 | GSIE 2024深耕不止!
爱立信:将4G技术演进冠以“4.5G”之名,这只是一种市场营销的手段
风向风速仪在农业生产中的作用是什么
家用太阳能板储能电池的相关知识