当前位置:首页 > 嵌入式 > 嵌入式硬件

摘 要: 为了满足高速实时数据采集系统对所采集海量数据进行缓存的要求,通过研究FIFO的基本工作原理,利用FPGA和DDR2 SDRAM设计了一种高速大容量异步FIFO。使用Xilinx提供的存储器接口生成器(MIG)实现FPGA与DDR2的存储器接口,并结合片上FIFO和相应的控制模块完成FIFO的基本框架结构。详细介绍了各个组成模块的功能和原理,并设计了专门的测试模块。
关键词: 高速大容量异步FIFO; MIG; FPGA; DDR2 SDRAM

 异步FIFO作为数据缓存被广泛应用于高速实时数据采集、不同时钟域之间的高性能数据传输以及多机处理等系统中[1]。如在视频系统中用于视频信号转换、视频分割和画中画电视[2]。在高速传感信号实时检测处理系统中用于数据缓存等。随着微电子技术的发展,FIFO芯片也在向着高速、大容量、小体积、低成本的方向发展。特别是Xilinx FPGA 提供的FIFO IP核已经能够达到500 MHz的速率和4 MB的容量。这些都为FIFO的实际工程应用提供了广阔的空间。但是在某些价格敏感、要求海量数据缓存的高速系统中,出于价格和性能方面的考虑,大容量异步FIFO芯片并非这类设计的最佳选择。FPGA具有工作速度高、可配置性强、灵活性好等突出优点,使用Xilinx FPGA 提供的免费MIG IP核可以很容易实现FPGA与外部存储器之间的接口,而DDR2 SDRAM具有单位空间存储容量大、高数据带宽、价格便宜等优点。因此根据FIFO的基本原理,通过采用Xilinx FPGA器件和Micron公司的256MB DDR2 SDRAM MT4HTF3264HY-667设计并实现了一种异步FIFO。该FIFO具有价格相对便宜、高数据带宽、容量大、数据位宽可以根据需要进行相应灵活配置等特点,具有较高的工程实用价值。
1 大容量异步FIFO系统方案设计
设计主要由两块片上FIFO、两块数据位宽转换模块、FIFO控制器、DDR2 SDRAM控制器、时钟模块和外部的DDR2 SDRAM构成[3]。其整体结构框图如图1所示。

基本工作机理是当WR_EN有效为高电平,输入数据DIN[N:0]在WR_CLK的上升沿触发下经过“数据位宽转换模块1”之后输出位宽为128 bit的数据写入到位宽为128 bit,深度为2 K的“片上FIFO1”中。当FIFO控制器检测到“片上FIFO1”快满时,开始读取其中的数据,按照地址顺序递增的方式通过DDR2 SDRAM控制器写入到DDR2 SDRAM中,直到“片上FIFO1”被取空。当FIFO控制器检测到“片上FIFO2”快空时,通过DDR2 SDRAM控制器按照地址顺序递增读取DDR2 SDRAM中的数据,写入到“片上FIFO2”中,直到“片上FIFO2”被写满为止。DDR2 SDRAM只有一组地址总线,而在该项设计中需要对DDR2 SDRAM进行独立的读写操作。为此,在FIFO控制器中定义了两组地址总线用于分别记录读写操作地址,当FIFO控制器处于写DDR2 SDRAM状态时,选通写地址总线(wr_addr)与DDR2 SDRAM的地址总线(ddr2_addr)互联。当FIFO控制器处于读DDR2 SDRAM状态时,选通读地址总线(rd_addr)与DDR2 SDRAM的地址总线(ddr2_addr)互联。另外为了保证读数据有效,在FIFO控制器中设计有相应的限制语句,只有当读地址(rd_addr)小于写地址(wr_addr)时,才允许读DDR2 SDRAM中的数据。“片上FIFO2”的空满标志信号作为所设计的FIFO的空满标志信号。从外部看,该设计是一个具有标准接口的大容量异步FIFO,而不用关心其内部操作。而且只需要对数据转换模块中的相关参数进行简单的改动,便可以改变该大容量异步FIFO的位宽(THE WIDTH)。
2 高速大容量异步FIFO设计
如图1所示,设计主要集中在FPGA部分,包括数据位宽转换模块、FIFO控制器、时钟模块、DDR2 SDRAM控制器设计以及片上FIFO的定制。
2.1 DDR2 SDRAM控制器设计
存储器控制器需要对包括存储器控制状态机在内的所有构建模块加以集成。控制器状态机必须按正确顺序发出命令,同时还要考虑存储器器件的时序要求。而且存储器控制器状态机因存储器架构(DDR、DDR2、QDRII、RLDRAM等)、组数(BANK)、数据总线宽度、存储器器件的宽度和深度、组和行存取算法等变量的不同而异。因此,创建存储器控制器是一项极其复杂、精细的任务。
使用MIG(Memory Interface Generation)软件工具[4]可以生成一个完整的设计,减少了设计人员的工作量,简化了系统设计。设计人员通过在MIG GUI中设置系统和存储器参数,整个过程不用一分钟,MIG工具即可生成存储控制器有关的RTL和UCF文件。MIG设计流程如图2所示。

设计采用Xilinx提供的免费IP核 MIG2.3来设计DDR2 SDRAM控制器。所用FPGA为Virtex-5 FPGA XC5vlx110T。控制器原理框图如图3所示。

其中时钟&复位模块(Infrastructure)用于生成控制器所需要的各类时钟和复位信号,它的输入时钟可根据用户需求选择单端或差分时钟信号输入。延时控制单元(Idelay_ctrl)用于同步校准设计中的延时单元以减少功耗。状态控制单元(Ctrl)是控制器中的最关键单元,它生成DDR2 存储器接口和用户接口所必需的所有控制信号。物理层控制单元(Phy_top)是设计的物理层接口的顶层模块,它封装了FPGA 与 DDR2 SDRAM的物理接口信号。用户接口单元(Usr_top)作为设计中的用户接口,用于接收和存储用户数据、命令和地址信息。最终将复杂的DDR2 SDRAM访问操作封装成简单的读写两种操作。设计采用的Micron DDR2 SDRAM SODIMM MT4HTF3264HY-667容量为256MB、带宽5.3 GB/S、数据位宽64 bit、含10位列地址线、13位行地址线和2位BANK地址线。上述MIG控制器右侧信号端口用于连接DDR2 SDRAM物理引脚,右侧信号端口用于连接输入时钟和来自FIFO控制器的数据和控制信号线。这些端口类型和位宽刚好与所选定的MT4HTF3264HY-667相匹配。
2.2 片上FIFO设计
所设计的FIFO数据输入/输出端与外界的数据传输、FPGA与DDR2 SDRAM间的通信分别属于不同的时钟域,设计中通过采用两块小容量片上FIFO[5]作为缓冲来实现他们之间的跨时钟域数据传输。根据所选定DDR2 SDRAM的性能参数,两块片上FIFO的数据位宽设置为128 bit,深度1 kHz。
2.3 FIFO控制器设计
FIFO控制器用于控制两块片上FIFO与DDR2 SDRAM之间的数据通信,其状态转移图如图4所示。由于DDR2 SDRAM具有很高的数据带宽,MT4HTF3264-667的带宽为5.3 GB/S。远大于FIFO1输入/输出端的数据带宽。所以FIFO控制器根据两块片上FIFO的数据量状况,对DDR2 SDRAM总线进行分时复用。

该状态机工作过程为:
(1)系统上电或复位后,状态机进入空闲状态(idle),在该状态下输入端片上FIFO1读使能信号(rd_en_wrfifo)、输出端片上FIFO2写使能信号(wr_en_rdfifo),DDR2 SDRAM控制器的用户地址FIFO使能信号(app_af_wren),用户数据FIFO使能信号(app_wdf_wren)均无效。
(2)在空闲状态下,当检测到输入端片上FIFO1几乎满,并且DDR2 SDRAM控制器初始化完毕,控制器发送写DDR2 SDRAM命令(cmd =3’b000)。将读到的数据直接写入DDR2 SDRAM由于DDR2 SDRAM控制器突发长度为4,地址总线按4累加。当检测到片上FIFO1被取空时,回到空闲状态。
(3)在空闲状态,当检测到输出端片上FIFO2几乎空,并且没有检测到输入端片上FIFO1几乎满时,开始读DDR2 SDRAM中的数据,并将读出的数据写入到输出端片上FIFO2。待FIFO2写满后,回到空闲状态。
2.4 时钟模块设计
控制器所需要的系统时钟(sys_clk)和200 MHz时钟(idly_clk_200)由外部33 MHz时钟信号通过FPGA的全局时钟网络后,分别输入到两个定制好的DCM后输出生成。
2.5 数据位宽转换模块设计
该模块用于匹配N位的输入/输出数据位宽和两个片上FIFO的128 bit数据位宽,实现所设计的大容量异步FIFO位宽可配置功能。输入端数据位宽转换模块的基本工作机理是将在WR_CLK时钟作用下连续输入的128/N个数据按先后顺序由高到低组成128 bit数据输出到片上FIFO1的数据输入端口,同时生成一个时钟上升沿作为FIFO1的写时钟,将该128 bit宽数据写入到片上FIFO1中。输出端数据位宽转换模块将从片上FIFO2读到的128 bit宽数据是由高到低依次拆分为128/N个N位宽数据,并且在RD_CLK上升沿先后输出这些数据。当这些数据输出完毕后,该模块输出一个上升沿脉冲作为输出端片上FIFO2的读时钟信号,读取下一个128 bit宽的数据。
3 实验测试
为了测试系统的性能,设计了专门的测试系统对所设计的FIFO进行测试,如图5所示。

基本工作机理是,在FPGA内部定制一块存有4KB已知数据的嵌入式ROM。该ROM在时钟CLK和循环地址计数器的作用下输出数据流,该数据流经过待验证的FIFO缓存后,通过串口发送到上位机上显示。通过比较上位机接收到的数据与ROM中存储的数据是否一致,便可以判断系统设计是否正确。
分别对不同位宽的FIFO,通过改变ROM的时钟CLK模拟生成FIFO的高低速率输入数据流,进行反复的实验测试,结果表明上位机上接收到的数据与ROM中存储的数据是一致的。
参考文献
[1] 金明,罗飞路,朱霞飞.FIFO芯片在高速系统中的应用[J].电子技术应用,1998,24(3):61-62.
[2] 郭照南,李儒峰.FIFO 芯片AL422B在视频系统中的应用[J].湖南工程学院学报, 2002,12(1):37-38.
[3] 徐欣,周舟,李楠,等.基于DDR2 SDRAM的高速大容量异步FIFO的设计与实现[J].中国测试,2009,35(6):34-37.
[4] Memory interface solutions user guide. http:///support/documentation/ip_documentation/ug086.pdf.
[5] LogiCORE? IP FIFO Generator v6.2. http:///support/documentation/ip_documentation/fifo_generator_ug175.pdf.

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭