用于图像压缩系统的SDRAM控制器设计

2018-01-18 07:11吴聪睿张忠伟张学全
电子设计工程 2018年1期
关键词:预充电寄存器时序

吴聪睿 ,张忠伟 ,张学全

(1.中国科学院大学北京100190;2.中国科学院国家空间科学中心北京100190)

在基于FPGA的图像压缩系统中,由于图像压缩核的图像接收速率与处理速率的不同,需要对图像数据执行缓存操作,这就需要设计高速率、高容量的缓存器。目前构成缓存的存储芯片主要有FLASH、FIFO、SRAM、SDRAM等,对这几种缓存芯片的性能进行比较,由于SDRAM存储容量大、读写速率高、价格低、体积小,所以SDRAM是理想的缓存器件[1-3]。但是由于SDRAM结构设计的特点,导致其工作机制特殊,控制逻辑复杂,时序要求较高,使用起来有一定难度。虽然有一些专用芯片提供SDRAM控制功能,可是其可控制性和灵活性不足,不能满足特殊需求[4-5],所以本文结合实际应用,设计了一种基于FPGA的SDRAM控制器方案,以满足图像压缩系统的使用需求。

1 SDRAM控制操作与时序

1.1 SDRAM芯片结构

文中采用ELPIDA公司EDS5116ABTA芯片,存储容量是256 Mbit,数据位宽16位,最大工作时钟为143 MHz,自动刷新周期要求为8 192(周期)/64 ms。图1为该款SDRAM的结构图。在上图结构中,SDRAM是由内部的4个BANK构成,每个BANK有8 192行,每行各有8 192 bit数据位,称之为“一页”,按照需求每个存储单元为16 bit位深,则每行有512列。SDRAM芯片的主要引脚如下:1)A0~A12:复用地址选择线,A0~A12是行地址选择线,A0~A9是列地址选择线;2)BA0~BA1:BANK 地址选择线;3)DQ0~DQ7:双向数据端口;4)CLK:系统时钟输入端口;5)CKE:时钟信号使能端口;6)CS:片选信号端口;7)CAS:列地址选通脉冲控制;8)RAS:行地址选通脉冲控制;9)DQ:数据掩码端口;10)WE:读写使能控制端口。

相比其他存储器件,SDRAM特点如下:

图1 SDRAM结构图

1)为防止SDRAM中的数据丢失,需要定时执行刷新操作。

2)SDRAM在上电工作时,需要首先进行配置模式寄存器操作,该操作规定了工作参数以决定当前SDRAM工作模式,包括突发长度(BURST LENGTH),列地址选通脉冲时间延时(CAS LATENCY),操作模式(OPERATING MODE)等[6]。

3)SDRAM端口使用灵活。控制命令由控制端口(CS、CAS、RAS、WE)产生,通过这些端口的时钟上升沿状态决定控制命令。SDRAM行地址线与列地址线复用,取决于当前控制命令的不同,按照先行激活后列选取的顺序完成一次读或写操作[7]。

1.2 控制

SDRAM的所有操作同步于系统时钟,根据时钟上升沿的控制端口和地址端口状态,可产生多种输入命令[8]:1)模式寄存器设置(MSR);2)预充电所选BANK(PRE)3)行激活(ACT);4)突发读指令,突发写指令;5)带自动预充电的突发读/写指令;6)自我刷新(SELF);7)自动刷新(REF)8)突发终止(BST);9)空操作(NOP)。

图2 SDRAM控制器状态机

根据SDRAM控制器的功能设计其状态机如图2,共包含10个状态,分为两个子部分,上电初始化部分和正常工作部分。上电初始化包括从上电到配置模式寄存器4个状态机;正常工作包括空闲状态、行激活状态、突发读、突发写、预充电等6个状态机。

1.3 SDRAM时序逻辑

1.3.1 SDRAM初始化与自动刷新

首先,SDRAM在所有引脚同时加电后,需要等待200μs进行上电初始化的稳定过程;然后发出预充电命令(PRECHIARGE),等待tRP时间完成对所有逻辑BANK的预充电操作;然后发出至少8个自动刷新命令(AUTO REFRESH),相邻的两个自动刷新命令需要时间间隔tRP;最后,发出模式寄存器设置命令(LOAD MODE REGISTER)配置工作模式,此阶段需要tMRD时间[9]。

初始化完成后,SDRAM处于空闲(IDLE)状态,为了防止数据掉电丢失,在SDRAM工作时需要定时对SDRAM执行自动刷新操作,其要求是需要每64 ms对所有BANK内的所有行完成一轮刷新操作,所以每行数据的刷新间隔为64 ms/8 192=7.812 5 μs,因此在SDRAM工作状态下,每隔最多7.812 5 μs需要发出一个自动刷新指令[10]。时序图如图3所示。

图3 SDRAM控制器初始化时序

1.3.2 SDRAM突发读操作

SDRAM处于空闲(IDLE)状态下,可发出一系列指令组合完成对SDRAM的读写操作,这些指令需要在控制端口和地址线的配合下共同完成[11]。先分析突发读操作的时序,首先发出行激活(ACTIVE)指令,由BANK地址(BA0,BA1)和行地址(A0~A12)共同选定需要读写的行进行激活。行激活命令发出后需要等待tRCD时间(RAS to CAS DELAY),才能发出读指令与列地址。经过tCL(CAS LATENCY)个时钟周期后,读出的数据出现在数据总线DQ上,读出数据的多少由BL(BURST LENGTH)决定,一般为1、2、4、8或全页突发模式。突发读操作的读命令操作完成后,需要发出预充电命令,以关闭当前激活的行,等待tRP时间后(预充电到行激活间隔),再执行下一个操作。SDRAM控制器突发读的时序如图4所示。

图4 SDRAM控制器突发读时序

1.3.3 SDRAM突发写操作

相比较于SDRAM控制器读操作的时序,其突发写操作的时序稍有不同。当检测到突发写命令时,首先执行行激活指令以激活指定BANK的指定行,等待tRCD时间后,从地址线读取列起始地址,同时将数据写到数据总线DQ上,执行BL个周期的写操作后,延迟tWR时间(tWR为写操作延时,将数据写入所用时间)需发出预充电命令,以关闭当前激活的行,等待tRP时间后可执行下一个操作[12]。SDRAM控制器突发写的时序如图5所示。

2 SDRAM控制器系统设计

SDRAM控制器的系统模块设计如图6所示。图中控制器左侧的端口信号与FPGA的系统控制接口相连,用以对控制器发出读写等控制命令、地址信息与数据信息等;控制器右侧与SDRAM芯片对应端口相连,用于控制SDRAM工作;图中控制器内部为各系统各个模块结构,包括系统接口模块(Sys_interface)、命令模块(Command)、控制接口模块(Ctrl_interface)与数据选通模块(Data_path)。各个模块功能如下:系统接口模块用于接收FPGA系统传递的操作信号,并将其转换为控制命令(CMD命令码);命令模块用于解析CMD命令,并解码成为相应的SDRAM控制指令;控制接口模块用于解析SDRAM控制指令,转化为SDRAM能够识别的端口电平组合;数据选通模块用于控制数据线的选通情况,完成有效的输入输出功能。

图5 SDRAM控制器突发写时序

图6 SDRAM控制器系统结构图

2.1 系统接口模块

系统接口模块(Sys_interface)包含SDRAM与控制器的上电初始化功能,使两者处于相同的工作模式下。其控制流程如下:检测到上电后,首先启动Count_200计数器执行200 μs的计数操作以等待器件的稳定;之后执行初始化配置操作:发出PRECHARGE_ALL指令预充电所有BANK,然后执行2组自动刷新指令;最后发出配置模式寄存器指令,以配置SDRAM的工作模式。由于上电后SDRAM工作模式是不定的,所以应当在使用之前配置模式寄存器[9]。之后通过地址线[A0:A10]发送模式寄存器配置数据。

完成以上配置后,系统指令分析机制才可以接收并分析系统的读写信号和地址信息,以及命令模块的反馈信号CMD_ACK,产生对应的CMD命令码和ADDR地址信息并传递给命令模块[13]。此外该模块同时将当前SDRAM的工作状态反馈给系统用户,标明当前SDRAM占用情况。

2.2 命令模块

命令模块(Command)将解析系统接口模块传来的CMD命令码,并输出相应的SDRAM作指令。例如,当CMD命令码为3’b000时,则输出NOP指令,表示执行空操作;当CMD命令码为3’b001时,输出READA指令。表示执行自动预充电读操作。命令模块同一时刻只能允许一个命令码和对应操作指令有效[14]。

2.3 控制接口模块

控制接口模块(Ctrl_interface)用来处理将命令模块解析出来的CMD命令码,根据不同CMD命令码做出相应的端口电平变化操作,以控制SDRAM完成特定功能。例如,若当前操作命令为行激活(ACTIVE)操 作 ,则 令 SDRAM_CKE=1,SDRAM_CS_N=0,SDRAM_RAS_N=0,SDRAM_CAS_N=1,SDRAM_WE=1_N,同时通过SDRAM_BA和SDRAM_SA选定要激活的BANK地址与行地址,如此SDRAM器件根据其引脚特性便激活指定行,应当注意的是,在此例的行激活命令中,SDRAM_DQ与SDRAM_DQM的端口电平取值对操作没有影响,只有在读出写入时数据位才有效[15]。此外控制接口模块也发出数据使能控制信号DATA_EN对数据选通模块进行控制。

图7 初始化与加载模式寄存器仿真波形

图8 突发读与突发写仿真波形

2.4 数据选通模块

此模块接收接口控制模块发出的DATA_EN信号,控制数据的读出或是写入。当信号DATA_EN=1,数据线DQ写使能,允许数据写入SDRAM;当信号DATA_EN=0,数据线DQ读使能,允许读出SDRAM中的数据。通过DATA_EN与数据选通模块的控制,能够使数据的读出、写入操作在操作指令上达到时序同步[16]。

3 系统仿真与验证

本文采用硬件描述语言Verilog HDL对系统进行设计输入,使用ISE14.6作为系统编译工具,建立了SDRAM控制器的RTL级(寄存器传输级)模型,并使用第三方工具Modelsim10.1c进行仿真验证。经过ISE14.6综合后,得到其资源占用率为4%;仿真采用32 MHz时钟作为SDRAM控制器工作时钟,低于其最大工作时钟143 MHz,所以满足其实时性要求。

下面为SDRAM控制器仿真波形图。图7为初始化波形,图8为突发写和突发读波形。

从图7、图8可看出,在初始化过程中,控制器先后执行了等待200 μs初始化稳定过程、预充电操作、2个自刷新周期操作和模式寄存器设置操作。在突发写过程中,先后执行了行激活、行列有效延时、写操作(突发长度为8)。在突发读过程中,先后执行了行激活、行列有效延时、读操作(突发长度为8)。系统的仿真结果与预期时序相符合,端口的电平变化与状态转换均有效工作,正确的完成了SDRAM控制器的控制功能。

4 结论

本文提出的用于图像压缩系统的精简SDRAM控制器针对其应用场景做了精简处理,采用典型精简状态机进行控制,并且控制其资源占用情况,具有高效性、高稳定性和通用性,满足星载平台图像处理系统的要求,为以后遥测图像的采集、处理和传输提供了技术支持。

[1]黄云翔.DDR3 SDRAM控制器的设计和验证[D].广州:华南理工大学,2012.

[2]李圣.DDR2 SDRAM控制器的研究与实现[D].西安:西安电子科技大学,2011.

[3]钟观水.基于FPGA的高速数据采集系统设计[D].南京:南京大学,2013.

[4]赵乐.基于FPGA的高速实时数据采集存储系统的设计[D].武汉:武汉理工大学,2012.

[5]陈雨,陈科,安涛.高速图像处理系统中DDR2-SDRAM接口的设计[J].现代电子技术,2011,34(12):104-107.

[6]徐永刚.基于FPGA与DDR2-SDRAM的高速数据缓冲器的设计与实现[D].南京:南京邮电大学,2012.

[7]司孝平.基于SDRAM的FPGA实时图像采集系统的设计[J].西南大学学报自然科学版,2011,33(1):128-132.

[8]张刚,贾建超,赵龙.基于FPGA的DDR3 SDRAM控制器设计及实现[J].电子科技,2014,27(1):70-73.

[9]侯宏录,张文芳.基于FPGA的SDRAM控制器设计方案[J].兵工自动化,2012,31(2):57-60.

[10]仵宗钦,王晓曼,刘鹏,等.基于FPGA的SDRAM控制器设计与实现[J].电子与封装,2014(10):20-24.

[11]孟晓东.基于FPGA的DDR3控制器设计与验证[D].长沙:国防科学技术大学,2012.

[12]高群福,陈星,程越.基于FPGA的DDR SDRAM控制器设计与实现[J].电子测量技术,2011,34(8):56-59.

[13]朱文斌,刘春平,黄振.基于FPGA的高可靠性SDRAM控制器设计与实现[J].电讯技术,2011,51(10):113-116.

[14]武震,郎维燕.基于FPGA的SDRAM控制器的设计与实现[J].北华航天工业学院学报,2012,22(5):10-13.

[15]邓耀华,刘桂雄,吴黎明.高速SDRAM控制器的嵌入式设计[J].计算机工程,2010,36(16):216-218.

[16]王艳春,祖静,崔春生.基于FPGA的SDRAM的控制器实现与性能分析[J].电子测试,2010(12):44-46.

猜你喜欢
预充电寄存器时序
动力电池预充设计及温升特性研究
基于Sentinel-2时序NDVI的麦冬识别研究
电动汽车预充电保护设计
电动汽车分级预充电回路及预充电阻选型匹配方法研究
Lite寄存器模型的设计与实现
基于FPGA 的时序信号光纤传输系统
分簇结构向量寄存器分配策略研究*
一种毫米波放大器时序直流电源的设计
基于变频器的新型预充电电路的研究
DPBUS时序及其设定方法