随着现代科学技术的高速发展,在工业生产和科学研究上,如卫星通信、高速图像处理等领域,普遍存在对数据进行高速大容量、实时性强和高带宽的处理要求[1,2]。高速数据采集系统作为各个系统中比较核心的部分,对数据处理的速度、实时性、稳定性以及功耗等要求都越来越高。
目前,在能够同时满足高带宽和大容量要求的存储器方案中,比较成熟的有DDR,DDR2,DDR3等,其中DDR3 具有更高的带宽和更低的功耗,因此成为高速实时数据存储系统设计中的首选方案[3]。由于DDR3 内存不能够直接识别处理器的访问请求,所以有必要通过设计一款控制器去控制DDR3的正常读写操作。
Virtex-7 系列FPGA 与Virtex-6 系列FPGA 相比,系统性能提高了一倍,功耗降低了一半,存储器带宽提升了2 倍,并且内有独特的IP核mig_v1. 7,可用来解决使用DDR3 存储器时的一些复杂问题。因此本文在介绍DDR3 的工作原理的基础上,结合IP 核MIG_v1. 7,给出了一种利用Verilog-HDL 语言设计DDR3-SDRAM 控制器用户接口的方法,并且提出了一种在高速图像数据采集系统中DDR3 存储器的应用方案,同时在Virtex-7 系列的FPGA 上实现。
1 DDR3-SDRAM 的技术特点
本文采用的DDR3-SDRAM 为Micron 公司的MT8JTF12864HZ-1G6G1 内存条。该DDR3 内存条的存储空间为1 GB,由8 片容量为128 MB 的内存芯片构成。每个芯片的数据位宽为8 位,行地址线复用14 根,列地址线复用10 根,Bank 数量为8 个,因此每个内存芯片的容量为16 384 × 1 024 × 8 × 8,即128 MB。8 片组成在一起就构成了MT8JTF12864HZ-1G6G1 的64 位数据位宽,容量为1 GB。
DDR3 的控制命令信号主要有芯片选择信号CS、行地址选择信号RAS、列地址选择信号CAS 和WE 写使能信号,DDR3 的各种操作指令实质上都是通过这四个信号的组合决定的,如表1 所示。其中H 表示高电平,L 表示低电平。
表1 DDR3-SDRAM 的操作指令
DDR3 的Mode Register 有四个,分别为MR0、MR1、MR2 和MR3,当四个控制命令信号均为低电平时,即可通过Bank 选择位对模式寄存器进行选择; Refresh 操作分为Auto Refresh 与Self Refresh 两种,其中不论是何种Refresh 方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作;DDR3 在进行读写操作时,内存会给出一个与数据同步的DQS 信号,用来在一个时钟周期内准确地区分出每个传输周期,提高了接收方接收数据的准确度。
与上一代存储器件相比,DDR3 的内存模式有了很大的改进: 逻辑Bank 数量由DDR2 的4 个增加为8 个; 突发长度增加为8 bit,任何突发中断操作都将在DDR3 内存中予以禁止,且不予支持; 取而代之的是更为灵活的突发传输控制; 其核心工作电压由DDR2 的1. 8 V 降至1. 5 V[4],能够在达到高带宽的同时,大幅度的降低其功耗; DDR3 采用FLY_BY 总线,参考电压分离,增加了ZQ 校准功能,从而大大的提高了存储信号的完整性; 并且DDR3 为绿色封装,不含任何有害物质,减少了对空气的污染。
2 DDR3-SDRAM控制器用户接口的设计
DDR3 控制器的设计采用了Xilinx 推出的IP 核MIG_v1. 7 + 用户接口模块的设计方法,其中本次设计主要是对用户接口模块进行阐述。图1 为DDR3控制器的总体实现方案。
图1 DDR3 控制器的总体实现方案
2. 1 用户接口模块的设计
用户接口模块为整个DDR3 控制器系统的核心模块,其中主要包括写数据通路和读数据通路两个部分,图2 为DDR3 控制器的用户接口设计的实现方案。
图2 DDR3 控制器的用户接口设计
在写数据通路的输入端,addr _ rdy、wr _ rdy 和init_done 为DDR3 IP 核反馈给写数据控制模块的信号, init_done 为高电平时指DDR3 已经完成初始化操作,addr_rdy 为高电平时表示DDR3 准备好接收写数据地址和写数据命令,wr_rdy 为高电平时表示DDR3 准备好接收写数据; wr_cmd 为写数据命令信号。在写数据通路的输出端,cmd_en 为输入到DDR3 IP 核的命令和地址的使能信号,wr_en 和wr_end 为输入到DDR3 IP 核的写数据控制信号,跟有效写数据信号对齐。
在用户接口的设计中采用back_to_back 的读写设计模式,将addr_rdy、cmd_en、cmd 和addr 作为地址总线,将wr_rdy、wr_en、wr_end 和wr_data 作为数据总线,两条总线是相互独立的,两个反馈信号addr_rdy 和wr_rdy 也是相对独立的。在写数据开始的时候,要保证地址总线提前数据总线一个周期使能,在addr_rdy 和wr_rdy 没有反压的理想情况下,写数据要比写地址和写命令推迟一个周期发出,当addr_rdy 和wr_rdy 有反压时,写数据和写地址可以不满足相差一个周期被发出的。
读数据通路与写数据通路的设计原理相似,其中rd_valid 为读数据有效信号, rd_data 为读数据信号。在读数据通路中将addr_rdy、cmd_en、cmd 和addr 作为地址总线,rd_valid 和rd_data 作为读数据总线。
2. 2 用户接口的时钟模块设计
从外界输入200 MHz 的延迟参考时钟、200MHz 的差分输入时钟,这些输入信号经过时钟和系统复位模块后能够生成整个DDR3 控制器和DDR3工作的全部时钟,包括用户接口的工作时钟、DDR3 IP 核的工作时钟和DDR3 读写数据的时钟等。这种设计方法,具有简化控制器的设计结构,便于对时钟进行管理的优点[5]。图3 为时钟模块的实现模型。
图3 时钟和系统复位模块
3 DDR3-SDRAM控制器用户接口的仿真
DDR3-SDRAM 的工作必须按照一定的规则进行,必须符合相应的状态机转换要求,图4 给出了DDR3 存储器工作的状态机,该状态机描述了DDR3各个状态的转换以及转换时所涉及的一些命令。DDR3 控制器的设计实质上是围绕着该状态机的进行设计的,以确保内存模块上的每个DDR3 都能正常的进行工作。
图4 DDR3 存储器的状态机
3. 1 用户接口设计模块的Chipscope 仿真结果分析
在本次设计中,硬件仿真采用将含有此用户接口模块的控制器下载到Virtex-7 系列FPGA 上,通过Chipscope 在线实时地观察用户接口内部的信号。和图6 中addr 每隔一个时钟周期加1 的现象。
3. 2 用户接口设计模块的Modelsim 仿真结果分析
在本次设计中,软件仿真采用ISE 14. 3 与Modelsim10.0a 相结合的方法。
图5 为在理想情况下,用户接口的输入信号addr_rdy 和wr_rdy 在无反压时候的内部信号观测图,在此状态下,cmd_en 比wr_en 和wr_end 提前一个周期被拉高,有效地址与相应的有效数据之间一直保持着一个周期的时间延迟。图6 为用户接口在addr_rdy 和wr_rdy 信号有反压情况下的内部信号观测图,在此状态下,初始时刻cmd_en 比wr_en 和wr_end 提前一个周期被拉高,有效地址与相应的有效数据之间相差一个周期的时间延迟,但是随着addr_rdy 和wr_rdy 被拉低之后,有效地址与相应的有效数据之间不再满足相差一个周期的时间延迟。因为在本次设计中采用的是back-to-back 模式,地址总线与数据总线相互独立,所以即使有效地址与相应的有效数据之间不再满足相差一个周期的时间延迟,也不会影响数据的传输。在此模式下,数据与地址的传输比较灵活,控制起来比较方便,也有效的避免了数据的丢失。
图5 addr_rdy 信号和wr_rdy 信号无反压的内部信号观测图
图6 addr_rdy 信号和wr_rdy 信号有反压的内部信号观测图
图7 写数据的Modelsim 仿真图
由于DDR3 采用的突发传输长度BL = 8,读写地址值以8 为单位连续增加,这样addr 的低3 位将一直为0,所以在利用Chipscope 对地址进行观测时,是从addr 的第4 位开始观测的,即出现图5。
由于此次设计采用的内存核心频率为200MHz,又因为采用的DDR3 的内存总线位数为64位,DDR3 一次可以预读取8 位,根据内存带宽= 内存核心频率× 内存总线位数× 倍增系数,所以在不考虑刷新和激活等操作所占用的带宽下,DDR3 的内存带宽可以达到12. 5 GB,传输速率可达到1 600MB /s。在如此快的传输速率下,利用Chipscope 难以观测由DDR3 控制器写入到DDR3 内部的数据。所以在本次设计中,采用在ISE14. 3 里面对DDR3控制器的工程添加DDR3 模型,利用Modelsim 对DDR3 控制器和DDR3 模型进行联合仿真的方法对由控制器写入到DDR3 内部的数据进行观测。
从图7 中可以看出,在一个时钟周期内dq 的同步信号qds_n 和dqs_p 变化了8 次,也就是说,在一个时钟周期内写数据以64 bit 为单位被写入了8次。由用户接口传输过来的数据经过DDR3 IP 核之后,能够准确的被写入到DDR3 里面。当进行读数据的时候,也是以64 bit 为单位,在一个时钟周期内读8 个64 bit 的数据。
3. 3 DDR3 控制器用户接口在高速图像数据采集系统中的应用
含有该用户接口的DDR3 控制器已经成功的被应用到某高速图像数据采集系统中,图8 为该高速图像数据采集系统采集到的图片。
图8 高速图像数据采集结果图
该图像采集系统设置CMOS 相机工作在采用8bit 位宽的双通道模式下,帧频为250 帧/s,其分辨率为2 040 × 1 024。采集系统将接收到的图像数据经过DDR3 缓存之后,通过千兆以太网接口传输至PC 机,再将写入PC 机内的数据以图片的形式显示出来。图8 为采集系统连续采集到的两帧图片,从图中可以看出两帧图片的时间间隔为4 ms,满足帧数要求,并且图像清晰完整,达到了预期的标准。
4 结论
本次设计的硬件平台为Xilinx 公司的Virtex-7 FPGA VC707 评估套件。7 系列的FPGA 具有比6系列和5 系列的FPGA 尺寸小、成本低、高性价比和大容量以及超高端连接带宽等优点。
该内存控制器的用户接口设计能够对DDR3 内存模块进行很好的管理,同时完成用户发送的各种请求,并且最大限度的提高了访问内存的速度和带宽,避免了数据的丢失,并成功的应用到某高速图像采集系统中。在此用户接口的基础上设计的内存控制器能够与市场上大多数主流内存进行兼容,可移植性强,大大降低了开发成本。