导航菜单

基于FPGA的页快速命中的SDRAM控制器的设计

陈瑞斌1,唐惠玲1,徐虎2,李敏1,彭云建3,侯红兵4

(1.广东工业大学,广东广州510006;2.广州航海学院,广东广州510725;

3.华南理工大学自动化科学与工程学院,广东广州510640;

4.惠州市仲恺高新技术投资控股有限公司,广东惠州516006)

摘要:深入探讨SDRAM的工作原理和工作时序,通过SDRAM三种常用寻址方式的对比,设计一种基于FPGA的页快速命中寻址的16位SDRAM控制器。软件仿真、硬件测试及实物调试结果表明:该控制器能极大地缩短寻址时间,并具有良好的实时性、高效性和模块重用性;同时也节省了FPGA的内部资源,缩短了研发周期。

教育期刊网 http://www.jyqkw.com
关键词 :页快速命中;FPGA;SDRAM控制器;寻址方式

中图分类号:TN919.3?34 文献标识码:A 文章编号:1004?373X(2015)13?0063?04

收稿日期:2014?11?14

基金项目:2011年广州市越秀区科技攻关项目(2011?GX?025);2011年广东省现代信息服务业发展专项资金项目资助(GDEID2011IS061);广东省教育部产学研结合项目(2010B090400204)

0 引言随着现代通信及实时图像处理的发展,大容量、高速度的储存器越来越显得重要。SDRAM即同步动态随机存贮器[1],由于价格低廉及储存量大的优点,被广泛地应用于高速数据采集、处理的领域。但本身也具备一定缺点,如控制复杂,对时序要求高,无一不对应用推广有着反效果。FPGA即现场可编程门阵列,以并行运算为主,在速度和性能上是MCU无法比拟的。本文针对其复杂的逻辑控制、严格的时序要求,利用页快速命中寻址方式,设计出一种能有效消除行寻址到列寻址之间间隔(tRCD)所带来延迟的通用SDRAM控制器,并利用ALTERA公司的FPGA 芯片EP2C35F484C8N[2] 和三星公司的SDRAM芯片K4S641632K[3]作为硬件平台,对该SDRAM控制器进行了实物调试与验证。

1 SDRAM 的工作方式和时序分析

1.1 SDRAM的内部结构

SDRAM的内部是一个存储阵列。阵列就像一个表格,检索方式与表格一样,首先指定一个行,然后再指定一个列,就能精确地找到指定的单元格,这就是内存芯片寻址的基本原理[4]。对于内存、单元格就是列存储单元,也是SDRAM的基本存储单元,则这个表格就是逻辑Bank(Logical Bank,L_Bank)。相应地,指定行的操作就是行寻址或行有效;指定列的操作是列寻址,列寻址时都伴随着读或写命令,故又称为列读取或列写入操作。

1.2 SDRAM的工作时序分析

SDRAM的效率体现在内存寻址的速度;而SDRAM的基本工作是写入和读取数据,但在执行这些工作时,并不是每一时刻都处于数据传输状态。由于非数据传输时产生了各种延迟与潜伏期,导致SDRAM 的效率没有达到百分之百。以读取操作为例,主要影响SDRAM工作效率的参数[5]有:行有效命令与列读/写命令的间隔(tRCD);列读取命令发出到第一批数据输出的间隔(tCL);预充电有效周期(tRP)。

图1 为典型的SDRAM 读取操作时序,通过行有效来打开相应的工作行,之后发送列读取命令在已打开的行中选择某一列进行读取。经过tCL 延迟后,依次读取选中的对应突发长度[6]的列单元数据,最后依靠预充电来关闭工作行。在关闭工作行的同时,其对应行的列单元数据将被锁存起来。

当反复进行读取操作时,从上一次数据读取的结束到本次数据读取的开始,其间历经了预充电、行有效和列读取命令三个执行流程,总耗费时间为:

T = tRCD + tCL + tRP (1)

因此,根据SDRAM的读取时间和寻址方式的不同,SDRAM的寻址方式可分为以下三种方式:

1.2.1 页命中寻址方式[7]

页命中的工作行和L_Bank 是空闲的,也就是说该L_Bank 的所有行是关闭的,此时可直接发送行有效命令。页命中寻址方式的时间为:

T1 = tRCD + tCL (2)

1.2.2 页错失寻址方式[7]

页错失寻址方式即上一次工作行没有关闭,并且本次读取的工作行需要换行。这种现象也称为寻址冲突,需要通过预充电来关闭上一次的工作行,再执行新一行的行有效命令,因此这种寻址方式所用的时间为:

T2 = tRCD + tCL + tRP (3)

1.2.3 页快速命中寻址方式[7]

页快速命中亦称为背靠背(Back To Back)寻址,即要寻址的行正好是前一个操作的工作行,此时可直接发送列读/写命令。这种寻址方式的时间仅为:

T3 = tCL (4)

可见,三种寻址方式中寻址时间最短的是页快速命中寻址方式。为了提高SDRAM 的工作效率,本文设计一种基于FPGA 的页快速命中SDRAM 控制器,使SDRAM的寻址方式始终为页快速命中寻址方式。

2 基于FPGA 的页快速命中SDRAM 控制器的设计

2.1 SDRAM控制器在FPGA上的具体方案

SDRAM 控制器的RTL 层视图如图2 所示,其主要分为3 个模块:锁相环模块(PLL),初始化模块(sdram_Init)和数据读/写模块(sdram_wr_data)。3个模块共同组成SDRAM控制器的底层驱动,相应的输入/输出端口主要分为两类:一类是FPGA 内部控制接口,包括控制类型的复位信号(areset),SDRAM 使能信号(sd_active)与读/写控制信号(rw),数据通信类型的地址信号(address),写入数据信号(indata)和读取数据信号(outdata);另一类是SDRAM 控制接口,与外部SDRAM芯片K4S641632K引脚相连,包括了起数据通信作用的双向通信数据口(SDRAM_DATA)和SDRAM 命令输出的信号行有效(RAS_N)、列有效(CAS_N)等。

2.1.1 PLL模块

系统的输入时钟为50 MHz,而SDRAM 芯片和SDRAM控制器的工作时钟频率设定为100 MHz。需要通过调用FPGA的内部IP核[8]锁相环模块(PLL)来实现SDRAM和SDRAM控制器的工作频率和时钟相移。

2.1.2 sdram_init模块

初始化模块(sdram_init)的作用是实现SDRAM 芯片的初始化和SDRAM控制指令输出。主要由两个有限状态机[9]实现,一个是初始化状态机,另一个是工作状态机。初始化状态机属于摩尔型状态机,即输出的SDRAM控制命令信号仅随着状态的更改而变化。当完成初始化后,SDRAM控制器进入工作状态;工作状态机根据页快速命中的工作方式,在输入地址和当前工作状态的共同作用下,输出SDRAM 的控制命令和地址。上电复位后,两个状态机同时进入复位状态,直至PLL输出时钟稳定为止。当PLL 稳定后,sdram_init模块首先进入初始化状态机,状态机如图3所示。初始化时先后经历了200 μs的稳定期,所有L?Bank的预充电,8个周期自动刷新,模式寄存器的设置(MRS)。当初始化进入结束状态时,初始化状态机结束,模块进入工作状态机。

工作状态机主要由空闲、行有效、读取、写入和自动刷新5个状态组成。默认状态为空闲,优先判断是否需要进入自动刷新状态。通过判断SDRAM 使能信号(sd_active)决定是否需要进入行有效状态,读/写控制信号(rw)选择进入读取还是写入状态。K4S641632K需要在64 ms 内完成8 192 个自动刷新周期,即每7.8 μs 进入自动刷新状态1次。

2.1.3 sdram_wr_data模块

数据读/写模块(sdram_wr_data)负责SDRAM 控制器的16位数据传输。主要端口有写入数据信号(indata)、读取数据信号(outdata)、SDRAM 双向通信数据口(SDRAM_DATA)、读取有效信号(read_valid)和写入有效信号(write_valid)。其中indata 和outdata 属于SDRAM 控制器FPGA内部使用接口,与SDRAM 上层驱动连接;read_valid 和write_valid 属于数据传输辅助端口,与内部模块sdram_init 相连;Sdram_Data 是SDRAM控制器的底层双通道数据接口,直接与外部的SDRAM芯片的数据端口相连。

2.2 SDRAM控制器的Modelsim仿真

本设计是基于Quartusii 9.1环境下通过编写Verilog语言的testbench文件,并利用第三方软件modelsim协助下的波形仿真。如图4 所示,SDRAM 控制器处于连续写工作状态,每个列写入命令都伴随着4个16位位宽的数据。由于仿真的目的在于验证输出命令与数据的正确性,故写入数据信号(data)采用每工作周期自增1的连续数据。在突发长度期间,输出命令主要为空命令(NOP),即行有效(RAS)、列有效(CAS)、地址线(A)和L_Bank地址线(BA)都输出高;空命令实际就是无操作,等待下一次操作命令的到来,仿真时序处于行有效范围内且尚未自动刷新,故无需发送行有效命令。

2.3 SDRAM控制器的硬件测试与验证

为了进一步验证SDRAM 控制器的实用性和准确性,实物验证时添加了通信模块uart,并且把FPGA 与PC 机相连,通过软件串口调试助手进行收发验证。由于SDRAM 工作时,输入与输出部分的工作时钟一般与SDRAM异步。故此,在输入与输出部分需要设置16位异步FIFO[10]作为输入和输出缓存器。SDRAM控制器的实物验证方案图如图5所示,主要包括输入缓存器FIFOin,SDRAM控制器SDRAM_CONTROLLER,SDRAM逻辑控制器SDRAM_LOGIC,输出缓存器FIFOout 和串口通信模块UART。

逻辑控制器SDRAM_LOGIC实现了SDRAM工作时的逻辑状态跳转。如图6所示,SDRAM_LOGIC 默认状态为逻辑空闲,当输入FIFOin写满或写入结束时,逻辑状态由逻辑空闲状态跳转到逻辑写状态。在所有数据写入SDRAM 后,逻辑状态将从逻辑写状态跳转到逻辑读状态,相应地读出数据,并与原来写入的数据比较来验证SDRAM控制器的正确性。

图7为串口调试助手的验证图,通过串口调试助手发送一连串的数据到FPGA 开发板上,uart模块把接收的数据传输到SDRAM 控制模块上,控制模块通过页快速命中寻址方式把数据依次写入到SDRAM芯片上。写入结束后,SDRAM 控制器又把数据从SDRAM 芯片上依次读取并传输到UART模块,并通过UART把数据发送回串口调试助手。最后对比串口调试助手的写入数据与读出数据可知SDRAM控制器能精准地完成数据在SDRAM芯片上的写入与读出。

3 结论

本文采用FPGA 芯片EP2C35F484C8N 实现了基于页快速命中的SDRAM 控制器,并利用串口通信验证了该控制器的可靠性。双端口输入/输出缓存器FIFO 使其适应于异步时钟下的数据交换。相对于页命中和页错失寻址,页快速命中更加合理、有效、快速地实现了SDRAM 的写入和读取操作。同时结合了FPGA 的高速、并行等优势,使SDRAM 控制器具有良好的实时性、高效率和模块重用性。

教育期刊网 http://www.jyqkw.com
参考文献

[1] 张林,何春.高速SDRAM 控制器设计的FPGA 实现[J].电子科技大学学报,2008,37(z1):109?112.

[2] Altera Corporation. EP2C35F484C8 datasheet [EB/OL]. [2008?02?18]. http://www.altera.com.cn/literature/hb/cyc2/cyc2_cii5v1_01.pdf.

[3] Samsung Electronics. K4S641632K specification [R]. [S.l.]:Samsung Electronics,2006.

[4] 杨映辉.基于FPGA 的SDRAM 控制器设计及应用[D].兰州:兰州大学,2007.

[5] 武文杰,刘浩.基于FPGA 的SDRAM 控制器设计[J].电子工程师,2005,30(10):23?27.

[6] 程方敏,黄启俊.基于FPGA的高速SDRAM控制器的视频应用[J].电子技术,2009,36(7):22?24.

[7] 赵效民.高手进阶:终极内存技术指南[EB/OL].[2002?12?17].http://wenku.baidu.com/link?url=HukJk977h3XyB3gRcKe8JxT?PFva2PjYQ3z2_Y0d15npo_3SaKiV_bB3TwQ49FaKN2Y3HdpE?4mqBbg49CbuTs89nt7gCWqKVfv0F05VqHohe.

[8] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.

[9] MINNS P,ELLIOTT I. FSM?based digital design using verilogHDL [M]. New York:Wiley Blackwell,2008.

[10] 于海,樊晓桠.基于FPGA异步FIFO的研究与实现[J].微电子学与计算机,2007,24(3):210?216.

作者简介:陈瑞斌(1989—),男,工程硕士。主要研究方向为基于FPGA的图像处理。

唐惠玲(1975—),女,硕士,副教授。主要研究方向为LCD/OLED的故障检测。

徐虎(1989—),男,湖南岳阳人,工学硕士,助理实验师。主要研究方向为自动控制、自动检测技术、电子技术应用(嵌入式、单片机开发、模/数电电路开发)。

下载文本