六年级数学基于FPGA的高速异步FIFO设计

上传人:无*** 文档编号:66933525 上传时间:2022-03-29 格式:DOC 页数:32 大小:1.24MB
返回 下载 相关 举报
六年级数学基于FPGA的高速异步FIFO设计_第1页
第1页 / 共32页
六年级数学基于FPGA的高速异步FIFO设计_第2页
第2页 / 共32页
六年级数学基于FPGA的高速异步FIFO设计_第3页
第3页 / 共32页
点击查看更多>>
资源描述
西南科技大学城市学院本科生毕业论文 IV 基于FPGA的高速异步FIFO设计摘 要:异步FIFO作为一种先进先出通用存储器器件,它的应用非常广泛。它不仅可以应用于现代国防的不同领域,还可应用于如多机系统、数据采集和图像处理等其它领域中,可以说几乎所有的涉及到芯片数据处理的软件,都要用到FIFO。其应用前景非常广阔本文所设计的异步FIFO主要采用了三种不同的方案来进行设计,第一种采用了充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法,这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性;第二种设计方案也是采用了格雷码,但是在设计时进行了MSB的比较来判断空/满标志位的判断;最后一种方案主要是应用于高频信号中,要求是FIFO内部高速系统的工作频率是外部的2倍以上,这样虽然提高了对高速FIFO中“高速”的含义要求,但是在现在的一半高速数字系统都是很容易满足的并采用了实验室自带的libero8.5开发环境来对Actel FPGA 进行进行设计和仿真,选择了A3P250的芯片,100VQFP封装。关键词:异步FIFO;FPGA;格雷码;亚稳态;Verilog HDLBased on FPGA design of high speed asynchronous FIFO buffer Abstract:Asynchronous FIFO first out as an advanced general memory devices, its application is very extensive. It not only can be used in different areas of modern national defense, can also be used in such a machine system, data acquisition and image processing in other fields, the application prospect are very wideThis paper designed mainly includes the asynchronous fifo data paths reg_file and control module fifo_ctl two parts. Reg_file module is as FIFO memory; And fifl_ctl is literacy control section, FIFO as empty full signal or is produced by pointer, reading and writing Verilog HDL hardware description language on the design. In the design adopted a similar shift with reg code for reading and writing address coding code so as to avoid the burr generation; With two level register string answered the synchronizer to signal synchronously, with maximum limit reducing metastability possible. And used the laboratory to bring to libero8.5 development environment for Actel FPGA design and simulation, chose A3P250 chip, 100VQFP encapsulation.Key words:Asynchronous FIFO;FPGA;Gray yards;Verilog HDL.目录第1章 绪论11.1 概述11.1.1什么是FIFO?11.1.2什么情况下用FIFO?11.1.3 FIFO的一些重要参数11.1.4FIFO的分类21.1.5FIFO设计的难点21.2 国内外的状况31.2.1 国外高速异步FIFO状况31.2.2 国内高速异步FIFO状况41.3 课题目的51.4 研究内容5第2章 仿真软件和芯片的选取和介绍62.1 A3P250芯片的介绍62.1.1 概述62.1.2 A3P250的特性62.2 仿真软件libero8.5的介绍8第3章 系统的总体设计及方案103.1 高速异步FIFO系统原理和组成103.2 系统各种方案选择123.2.1 采用检测+计数123.2.2采用格雷码比较MSB位163.2.3 省略满信号的一种方法18第4章 软硬件调试204.1 采用检测+计数器仿真204.2采用格雷码比较MSB仿真214.3 省略满标志位仿真图21结论23致 谢24参考文献25附录1:26西南科技大学城市学院本科生毕业论文第1章 绪论1.1 概述先进先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。 1.1.1什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 1.1.2什么情况下用FIFO? FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 1.1.3 FIFO的一些重要参数 FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它指的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。 读指针:指向下一个读出地址。读完后自动加1。 写指针:指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。 1.1.4FIFO的分类 根据FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。 1.1.5FIFO设计的难点 FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生溢出或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。由于同步FIFO几乎很少用到,这里只描述异步FIFO的空/满标志产生问题。 在用到触发器的设计中,不可避免的会遇到亚稳态的问题(关于亚稳态这里不作介绍,可查看相关资料)。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只有一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象。但是格雷码有个缺点就是只能定义2n的深度,而不能像二进制码那样随意的定义FIFO的深度,因为格雷码必须循环一个2n,否则就不能保证两个相邻码元之间相差一位的条件,因此也就不是真正的各雷码了。第二就是使用冗余的触发器,假设一个触发器发生亚稳态的概率为P,那么两个及联的触发器发生亚稳态的概率就为P的平方。但这回导致延时的增加。亚稳态的发生会使得FIFO出现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就导致写入或读出的地址错误。由于考虑延时的作用,空/满标志的产生并不一定出现在FIFO真的空/满时才出现。可能FIFO还未空/满时就出现了空/满标志。这并没有什么不好,只要保证FIFO不出现overflow or underflow 就OK了。 随着信息技术的飞跃发展,特别在九十年代以后,美国在南斯拉夫战争和两次海湾战争中成功的运用了电子战、信息战,以及近年来我国在航天航空事业方面的高速发展,使我国开始重视和发展信息技术,这就对高速、大容量、高可靠性的静态存储器需求越来越多。同时对军用的数据存储器的设计也提出了更高的要求。目前军用计算机传输数据的最快方式DMA方式的传输速率最大也只在5Mbs以下。对于几十Mbs的超高速采样速率,上一次数据还没有被计算机读取,下一次的采集过程就结束了,因此采用传统的计算机传输处理数据的方法,显然会造成数据的丢失与混乱。所以对于快速采集,慢速处理的系统必然要用到缓存。异步FIFO是一种先进先出电路, 它一般作为速率匹配数据缓冲器,能在快速的处理器和很慢的外设之间实现速率的匹配。并且它在远程通信、图像处理、大容量存储系统、数字信号处理,以及打印系统中十分有用,随着FIFO芯片在容量、宽度、速度方面的扩展,芯片的应用前景将会越来越广阔。近年来,随着存储器在容量、性能方面的进一步发展,FIFO存储设备得到了越来越广泛的应用。目前我国许多涉及国家安危的重点型号上所用存储器,几乎完全依靠进口。虽然国内有一些研究所和厂商也开发了FIFO电路,但目前还没有形成系列化,远远不能满足军事需求。我国航天武器装备过分依赖进口的情况对国防建设危害巨大。本项目研制的芯片将在已有及未来的武器型号上有着广阔的应用前景。在本项目研制的基础上,进行系列化、模块化,逐步形成我国的武器装备采用国产存储器的局面。市场上国外存储器种类虽然很多,但为了防止国外的完全封锁和禁运,尽快研制出用于空间卫星及高新武器的国产高性能异步FIFO,对于加强国防建设,发展空间技术有着重大意义。1.2 国内外的状况1.2.1 国外高速异步FIFO状况20世纪80年代早期,那时候对FIFO存储器的需求在容量和速度上的要求都很低。所以FIFO芯片是基于移位寄存器的中规模逻辑器件。串行的移位寄存器作为存储单元,组合逻辑电路构成输入输出控制部分。数据在这种FIFO芯片中的流程是在输入输出控制时钟的作用下从第一个寄存器到第N个寄存器(N是FIFO2 异步FIFO的设计与实现芯片的容量),然后再被读出,从结构来看,一个数据从写入到读出需要经过N个移位周期的延迟。如果这种FIFO芯片的容量N很大,那么这种延迟也将很长。所以基于移位寄存器的FIFO芯片在容量上不能做得很大,其速度也不可能很快。新型FIFO芯片采用基于RAM方式的结构,这种FIFO芯片由大规模集成电路构成。内部存储单元采用一个双端口RAM,具有两套数据线输入和输出。独立的读写地址指针在读写时钟的控制下顺序地从存储单元读写数据,类似一个环形指针从第一个存储单元开始到最后一个存储单元,然后又回到第一个存储单元。控制比较部分给出RAM的空或满的状态指示,甚至还有中间指示。由于采用RAM结构,数据从输入到读出的延迟将大大缩小。这种FIFO芯片能在存储深度和宽度上得到很大发展。新型大规模集成电路技术的日趋先进,使得较大容量的FIFO芯片成为可能。目前,为了使容量得到更大提高,存储单元采用动态RAM代替静态RAM,并将刷新电路集成在芯片内,且内部仲裁单元决定器件的输入、读出及自动刷新操作。由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,速度越来越快。美国IDT公司已推出运行速度高达225MHz,电压低至25伏,可在业界各种配置下实现高达9Mbit密度的业界最大数据流量的FIFO系列。Cypress Semiconductor公司的BEAST型的高性能FIFO存储器,具有80位宽(CY7C480XV25) ,它的带宽高达300bps,可以在工作频率200MHz下:Honeywell公司提供一种做在SOI上的FIFO存储器,它采用抗辐射CMOS工艺(刚CMOS IV),即采用专门的设计版图和抗辐射加固工艺,主要应用于军事系统和高辐射的空间环境中;最新的产品是IDT公司的多队列FIFO存储器系列,它集成了高速的队列逻辑和嵌入式的FIFO存储器核来构成块结构。数据写入和读出速度可达到200MHz,存储时间只有36ns,通过最多八个器件的连接可以实现容量深度扩展和队列扩展。从第一个单片FIFO缓冲存储器的研制成功至今,已有双极型、CMOS型等不同规格型号的FIFO存储器及FIFO存储器模块供选择使用。作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。1.2.2 国内高速异步FIFO状况在国内大部分集成到具体芯片中,单独做FIFO的很少。国内有一些研究所和厂商也开发了FIFO电路,但目前还远远不能满足军事需求。国内外设计FIFO时,通常有两种方法,一是利用可编程逻辑器件构造FIFO(如Xilinx公司),二是利用Verilog等硬件描述语言。对FIFO的功能结构进行描述。在大多数的EDA软件中,对EDA等硬件语言的编译都是通过综合器来完成的,综合器将Verilog的描述转变成物理可形成的电路的格式,由于FIFO是一种RAM的结构,在大多数参考资料中对FIFO的描述都是建立在数组存取的基础上,然而遗憾的是,综合器对数组的综合一般是将其转变成寄存器的结构。因此综合后的结构会非常庞大,在设计大容量的FIFO时,会浪费大量的面积,甚至无法集成。1.3 课题目的随着数字电子系统设计规模的扩大,一些实际应用系统中往往含有多个时钟,数据不可避免地要在不同的时钟域之间传递。如何在异步时钟之间传输数据,是数据传输中一个至关重要的问题,而采用FIFO正是解决这一问题的有效方法。异步FIFO是一种在电子系统中得到广泛应用的器件,多数情况下它都是以一个独立芯片的方式在系统中应用。本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性。本研究课题的目的是在学校FPGA试验室现有的设备基础上,应用雷格码的方式,解决在高速异步FIFO系统中常遇到的毛刺和亚稳态的问题,改善原有系统的性能,综合训练专业知识的实践应用能力。1.4 研究内容本设计采用Actel公司ProASIC系列A3P250FPGA芯片,来设计一个高速FIFO 缓存。研究的主要内容如下:掌握Verilog HDL语言的编程特点;熟悉Actel公司的libero软件;掌握高速FIFO工作原理;软件设计一个高速FIFO程序。;解决FIFO中存在的亚稳态、空/满信号标志的问题;最终硬件调试。第2章 仿真软件和芯片的选取和介绍2.1 A3P250芯片的介绍2.1.1 概述本设计采用的是actel公司proASIC系列的A3P250芯片,它传承了该系列的优势特点,单芯片和低功耗的解决方案、上电即行、高度的安全性和可靠性在封装上,A3P250有132-QFN和100-VQFP两种,支持最大81个用户IO,为各种应用场合提出简捷、合理的解决方案。2.1.2 A3P250的特性A3P250是Actel的ProaASIC3系列中的成员之一,有250K个系统门,采用100VQFP封装,方便用户焊接。A3P250连接的引脚中需要特别注意的是时钟、复位、电源和下载口等信号线,时钟和复位需要连接到全局引脚上(带有G字样标示的IO),例如:第13引脚和第60引脚;电源需要有3.3V和1.5V两组,分别连接在Vcci和Vcc的引脚上;下载口包括TDO、TMS、TCK、TRST、VJTAG等,其中VJTAG、需要提供3.3V电压,其他引脚对应连接到下载器接口即可。 图1 A30250芯片封装图2.1.2.1 容量 250K个系统门;2.1.2.2 可编程flash技术 130nm、7层金属(6层铜)、基于flash的CMOS工 艺; 支持上电即行; 单芯片解决方案; 断电时保留可编程的设计。2.1.2.3 高性能、低功耗 350MHZ的系统性能; 3.3V的内核电压可实现低功耗; 低电阻的Flash开关。2.1.2.4 高安全性 7层金属物理层保护;Flashlock加密技术,保障设计的安全。2.2 仿真软件libero8.5的介绍学校FPGA实验室所使用的libero开发软件是一个非常人性化的开发环境,整个界面以流程图的方式指明了开发的步骤,它集合了众多第三方先进的EDA工具,包括mentor公司提供的仿真工具modesim、synplicity、公司提供的综合工具synplify,还有synapticad公司提供的波形激励生成工具waveformer lite. 图 2 libero8.5软件界面 图3实验室所有的FPGA实验平台学校使用了FPGA实验平台的功能非常齐全,不仅仅包含了液晶显示、串口通信、步进电机、交通灯等的相关实验,甚至于单片机的部分实验也可以在该平台上进行。 第3章 系统的总体设计及方案3.1 高速异步FIFO系统原理和组成FIFO有很多种结构,包括波浪型(ripple)FIFO,移位寄存器型以及其他一些我们并不关心的结构类型。我们将集中讨论包含 RAM 存储器的结构类型。其结构如图 1 所示。 图 4 FIFO基本原理图通过分析,我们看到图中有一个具有独立的读端口和独立的写端口的 RAM存储器。这样选择是为了分析方便。如果是一个单端口的存储器,还应包含一个仲裁器保证同一时刻只能进行一项操作(读或写 ),我们选择双口 RAM(无需真正的双口 RAM,因为我们只是希望有一个简单的相互独立的读写端口)是因为这些实例非常接近实际情况。读、写端口拥有又两个计数器产生的宽度为log2(array_size)的互相独立的读、写地址。数据宽度是一个非常重要的参数将在在稍后的结构选择时予以介绍,而现在我们不必过分的关心它。为了一致,我们称这些计数器为“读指针” (read pointer)和“写指针”(write pointer)。写指针指向下一个将要写入的位置,读指针指向下一个将要读取的位置。每次写操作使写指针加1,读操作使读指针加 1。 我们看到最下面的模块为“状态”(stauts) 模块。这个模块的任务实给 FIFO提供“空”(empty)和“满” (full)信号。这些信号告诉外部电路 FIFO 已经达到了临界条件:如果出现“满”信号,那么 FIFO为写操作的临界状态,如果出现“空”信号,则 FIFO为读操作的临界状态。写操作的临界状态(“full is active”)表示 FIFO 已经没有空间来存储更多的数据,读操作的临界表示 FIFO 没有更多数据可以读出。status模块还可告诉FIFO中“满”或“空”位置的数值。这是由指针的算术运算来完成了。 实际的“满”或“空”位置计算并不是为FIFO自身提供的。它是作为一个报告机构给外部电路用的。但是,“满”和“空”信号在 FIFO 中却扮演着非常重要的角色,它为了能实现读与写操作各自的独立运行而阻塞性的管理数据的存取。这种阻塞性管理的重要性不是将数据复写(或重读) ,而是指针位置可以控制整个 FIFO,并且使读、写操作改变着指针数值。如果我们不阻止指针在临界状态下改变状态,FIFO 还能都一边“吃”着数据一边“产生”数据,这简直是不可能的。 进一步分析:DPRAM 若能够寄存读出的信号,这意味着存储器的输出数据已被寄存。如果这样的话,读指针将不得不设计成“read 并加 1 ”,也就是说在FIFO输出数据有效之前,必须提供一个明确的读信号。另一方面,如果DPRAM没有寄存输出,一旦写入有效数据就可以读出;先读数据,然后使指针加1。这器的方案将影响到从 FIFO读出数据和实现空/满计算的逻辑。由于简化的缘故,我们仅论述 DPRAM 没有提供索锁存输出的情况。同理,将其推广到寄存输出的 DPRAM并不是很复杂。 从功能上看,FIFO 工作原理如下所述:复位时,读、写指针均为 0。这是FIFO的空状态,空标志为高电平,(我们用高电平表示空标志)此时满标志为低电平。当 FIFO出现空标志时,不允许读操作,只能允许写操作。写操作写入到位置0,并使写指针加1。此时,空标志变为低电平。假设没有发生读操作而且随后的一段时间 FIFO中只有写操作。一定时间后,写指针的值等于 array_size-1。这就意味着在存储器中,要写入数据的最后一个位置就是下一个位置。在这种情况下,写操作将写指针变为0,并将输出满标志。 注意,在这种情况下,写指针和读指针是相等的,但是FIFO已满,而不是空。这意味着“满”或“空”的决定并不是仅仅基于指针的值,而是基于引起指针值相等的操作。如果指针值相等的原因是复位或者读操作,FIFO 认为是空;如果原因是写操作,那么FIFO认为是满。 现在,假设我们开始一系列的读操作,每次读操作都将增加读指针的值,直到读指针的位置等于 array_size-1。在该点,从这个位置读出的FIFO输出总线上的数据是有效的。随后的逻辑读取这些数据并提供一个读信号 (在一个时钟周期内有效)。这将导致读指针再次等于写指针(在两个指针走完存储器一圈后)。然而,由于这次相等是由于一个读操作,将会输出空标志。 因此,我们将得到如下的空标志:写操作无条件的清除空标志。 Read pointer=(array_size-1) , 读操作置空标志。 以及如下的满标志:读操作无条件的清除满标志, Write pointer= (array_size-1), 写操作置满标志。 然而,这是一个特殊的例子,由于一般情况下,读操作在FIFO不是空的情况下就开始了(读操作逻辑不需要等待 FIFO 变满),因此这些条件不得不修改来存储读指针和写指针的每一个值。 有这样一个想法,那就是我们可以将存储器组织成一个环形列表。因此,如果写指针与读指针差值大于 1 或更多,就进行读操作,FIFO 为空,这种工作方式对于用无符号(n-bit)结构来描述的临界状态非常适合。同样的,如果读指针与写指针的差值大于 1,就进行写操作,直到 FIFO为满。 这将带来如下的条件: 写操作无条件的清除空标志。 write_pointer=(read_pointer+1),读操作置空。 读操作无条件的清除满标志, read_pointer= (write_pointer+1),写操作置满。 注意,读操作和写操作同时都在使其指针增加,但不改变空标志和满标志的状态。在空或满的临界状态同时读操作和写操作都是不允许的。 3.2 系统各种方案选择 3.2.1 采用检测+计数3.2.1.1 亚稳态的问题 在含有触发器的电路中往往会出现亚稳态问题。所谓的亚稳态是指触发器无法再某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于震荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。简单来讲,在数字系统中,每一时刻系统的每一个寄存器都会有一个稳定的状态1或者0.此时,寄存器的输出电压在下级门电路的噪声容限范围内。而当系统的某一个寄存器当前输出的电压值既可能被系统认为是1也可能被认为是0的视乎,既输出的电压处在下级门电路的噪声范围外的时候,这种状态即为亚稳态。 亚稳态通常发生在跨时钟域传递数据的系统中。图3(a)是一个跨时钟域传递数据的情况,前级寄存器工作于时钟CLK1,后级寄存器工作于CLK2。当前一级的数据正在改变的时候,下一级电路进行读数据即可产生亚稳态。图3(b)即为(a)中寄存器直接传递数据时亚稳态发生的时序原理。由图(b)可以看出,当CLK1上升沿来临后不久便是CLK2上升沿是,此时前级寄存器的输出信号Q0正在变化,下级寄存器对其读出的数据Q1既可能是1,也可能是0,既亚稳态。(a) 分别工作于两个不同时钟的寄 (b)寄存器工作时亚稳态发生的 存器直接传递数据图 时序原理 图5 亚稳态发生原理图 亚稳态会使异步FIFO的读写地址发生错误,产生误读或者误写。为此异步FIFO设计中亚稳态问题也是一个比较重要的问题。亚稳态不可能完全消除,只能使其出现的概率降到最低。主要有2种方法来降低亚稳态出现的概率:采用触发器冗余方式。即采用多个触发器级联的方式,使本来出现概率为P的亚稳态,其出现概率降低到P2,但这种方式会导致延时增加。使用格雷码。格雷码的相临码元之间只有一位发生变化,这就大大地降低了亚稳态出现的概率。本文采用格雷码方式。下表列出了从0到15的十进制、二进制、格雷码之间的转换关系。表1 十进制、二进制和格雷码之间的转换关系 十进制数 自然二进制数 格雷码0000000001000100012001000113001100104010001105010101116011001017011101008100011009100111011010101111111011111012110010101311011011141110100115111110003.2.1.2 空满标志位的判断为保证数据的正确写入和读出,不发生写满和读空操作,怎样判断空满标志位的产生就成为异步FIFO设计的核心问题。异步FIFO是环形存储的,当读写地址指针相等时,意味着空标志位或者满标志位的产生。但是却不能确定是写满还是读空状态。为解决这一问题,本文将转换为格雷码后的读写地址指针分别经过检测和计数器。每当读写指针遍历一圈(当读写地址指针指向双端口RAM的最后一个地址)时,写计数i加1,读计数j加1。这样写满状态和读空状态的判断就需要同时满足两个条件。下面分别给出写满和读空状态的判断。写满状态的判别:当读地址指针等于写地址指针,并且ij时,产生满标志。读空状态的判别:当写地址指针等于读地址指针,并且i=j时,产生空标志。由于空满标志位产生的结构图对称,故本文只给出满标志位产生的结构图,如图4所示。其中,主数i为写地址指针遍历的圈数,计数j为读地址指针遍历的圈数。 图6 满标志位的结构图从图4中可看出,地址指针转换为格雷码后,经过检测和计数环节,将读写地址和读写指针遍历的圈数分别送入比较器进行比较,从而准确地产生满标志位。3.1.2.3 FPGA内部软件异步FIFO设计 本设计采用的是actel公司proASIC系列的A3P250芯片,它传承了该系列的优势特点,单芯片和低功耗的解决方案、上电即行、高度的安全性和可靠性采用了100-VQFP封装,支持最大81个用户IO,为各种应用场合提出简捷、合理的解决方案。本文采用 VHDL语言对双端口RAM的读写操作进行编程,实现FPGA内部软FIFO的设计。部分读写双端口RAM和空满标志位的判断源程序如下: / 写程序 If (wrclkevent and wrclk =1) then If (wren = 1and in_full=0)then Datebuffer(wraddr)=indata;/读程序If(rdclkevent and rdclk=1)then If(rden=1and in_empty=0)then Outdata=databuffer(rdaddr);/满标志位的判断If(rst=0)then In_fullj) then In_full=1; Else In_full=0;/空标志位的判断If(rst=0)then In_empty =1;Else if(rdclkevent and rdclk=1)then If(wraddr=rdaddr and i=j)then In_empty=1; Else In_empty=0; 3.2.2采用格雷码比较MSB位要准确的判断FIFO的空满,可以采用以下算法:建立一个深度为2N,指针宽度为N+1的FIFO。此时格雷码为N+1位。为了方便比较,最好把格雷码转换成二进制码再进行比较,当写地址和读地震的MSB位不相同,其它位相同的时候表示为满,禁止写入数据,而如果写地址和读地址完全相同则表示为空,禁止读出数据。使用格雷码进行计数,可以使得每次计数后只有一位发生变化,显然这样可以减少亚稳态出现的概率。因此,写地址和读地址均要从二进制码转换为格雷码再进行技术。而判断空满标志的时候,需要比较MSB位,所以保留二进制码的最高位以及格雷码的低N位。格雷码计数器的VHDL流程图如下图所示。二进制码先进行计数,然后转换成格雷码,并保留MSB方便判断空满标志。 图 7 格雷码计数器流程图最终总体的FIFO设计如图所示。写地址和读地址通过格雷计数器计数,然后比较写地址和读地址指针,判断空/满标志,结合读写时钟和使能信号决定是否读写。 图8 FIFO总体VHDL模块设计3.2.3 省略满信号的一种方法对于高频系统,几乎不可能产生满信号,我们就可以利用功耗低、可在线编程、可重构性和灵活的逻辑编程控制功能特征,为解决常规对整个模块工作频率的制约问题,针对不可能生满信号的高频系统,利用FPGA功耗低可在线编程可重性和灵活的逻辑编程控制功能特征,提出了一种在FPGA 内现高速异步FIFO的方法,其主要思想是通过省略满信号生模块和多余的存储器位深来简化常规的FIFO 模块,而只留空信号产生模块,从而提高整个模块的工作频率图4是所设计的FPGA 高速FIFO 模块图图中的RAM即个(或 个)并联工作于CLK2的寄存器,其输入数据总线传输的数据工作于CLK1 其下的两个T触发器,即一个异门和一个D触发器组成了空信号产生逻辑当 rst 复位信号端出现高电平时,T触发器和T触发器的出全部复位0,此时异步异或逻辑输出端asyc_empt_l 输出(空信号有效,不可读状态),T触发器的控制输入为 0,因在以后的CLK2上升沿上(内部高速系统对FIFO口的无效操作)T触发器不会翻转直到CLK1的上升沿(外部低速系对FIFO口的写操作)到来时,T 触发器翻转,此时异步异或逻辑门输出变为1(空信号无效,即FIFO非空,可读 图9 高速FIFO模块图状态),在下一个 CLK2上升沿(内部高速系统对FIFO口的有效读操作)到来时,T触发器翻转,asyc_empt_l恢复低电平(空信号有效),等待下一个CLK1 (外部低速系统对FIFO的写操作)的到来表1是空信号产生的真值表。表2 高速FIFO空信号产生真值表T(CLK1)T(CLK2)Asyc_empt_1 状态000 空011 满1 10 空101 满图7中存储器的数据端工作在外部时钟频率CLK1,而寄存器工作在内部高速时钟频率 CLK2,因此, 8 位并行寄存器的输出端很有可能会输出错误数据,但是当空信号被拉高时(内部高速系统对 FIFO 的有效读操作),即为外部系统写操作刚结束时,此时寄存器输入数据总线上的数据一定是稳定的,因而寄存器输出端的数据一定是正确的。第4章 软硬件调试 4.1 采用检测+计数器仿真如果系统的读时钟频率大于写时钟频率,就有可能出现读空的情况;如果系统的写时钟频率大于读时钟频率,就可能出现写满的情况。在实际系统中,一般都设置写时钟频率大于读时钟频率,故本文只考虑后一种情况。本系统采用学校FPGA实验室的libero8.5对系统进行仿真,由于系统深度较大,所以设定仿真时间为100 s。我们通过仿真图可以看到,当系统刚上电时,双端口RAM中暂时没有数据,此时的系统处于读空状态,empty变为高电平,full保持低电平,如图3所示。此时不执行读操作,而随着RAM中数据的不断写入,系统渐渐进入写满状态,此时full变为高电平,而empty变为低电平,此时程序不执行写操作,如图8所示。 图10 系统上电后的读空状态 图11 系统上电后的写满状态图此方法根据异步FIFO设计的难点和要点,提出了具体的解决方案。在空满标志位产生条件的判断上提出了“检测+计数器”的新思路,使系统设计方便实用,并采用格雷码方式降低了亚稳态出现的概率。通过验证,这种方法在有效判断空满标志位方面有很大的优势。4.2采用格雷码比较MSB仿真图10是格雷码计数器的仿真图。显然,随着每个时钟的上升沿二进制码都进行一次计数,同时把二进制码转换为格雷码,并保留MSB位。这样的计数器不但可以减少亚稳态出现的概率,而且也方便了空/满标志的判断。 图12 格雷码计数器仿真图下图为整体仿真波形,受截图限制,图中给出的是系统为空的情况。 图13 整体系统仿真图4.3 省略满标志位仿真图图12是高速 FIFO 模块的仿真结果由图可以看出每出现一次 CLK1 上升沿(每对 FIFO 进行一次写操作)异步空信号asy_empt_1 便出现一次正脉冲(空信号无效,内部高速系统读有效信号)而且,由仿真结果中可以看到,产生的异步空信号asy_empt_1 时宽时窄,这是因为该信号由异步逻辑产生,信号宽度取决于两个时钟(CLK1 和 CLK2)上升沿相距的距离:距离最宽为一个CLK2周期,最窄为图 7中 T 触发器到异或门输出的延时 因此,当信号宽度小于后级输入门的建立时间时便很有可能会引起后级的读写错误 为此在异步空信号后端加一级D 触发器,将异步的空信号输入到 D 触发器锁存起来,保存一个 CLK2 时钟周期以后再拉低,便使得空信号的信号宽度始终为一CLK2 时钟周期,从而保证后级的读写正确,如图12中 empt_1 信号的仿真结果所示 图14 高速FIFO仿真波形图但是代价是提高了但是这样做的代价是提高了对高速 FIFO 中 高速 含义的要求由以上分析可以知道,不带同步D触发器的高速FIFO能正常工作的要求是内部高速系统的工作频率是外部的2倍以上,这在一般的高速数字系统(如视频处理系统)很容易满足 在加上同步D触发器以后为使该高速 FIFO 模块正常工作,其内部高速系统的时钟频率必须是外部的3倍以上,这个要求在高速处理的系统中也是不难达到的。当后级系统与高速FIFO集成于同一 FPGA 内的情况时,则必须在FIFO 输出端用输出有效使能信号(即空信号)来标示输出信号的有效 若后级系统在FPGA外部时,则可以将空信号连接到FPGA的输出三态口的控制端,将输出数据总线连接到外部输出端口,从而使得当信号输出无效时,FIFO在FPGA的输出引脚状态为三态,当FIFO 输出引脚出现数据时,即为有效的输出信号图13是该高速FIFO 模块综合结果的关键路径图,从图中可以看出,该关键路径由高速FIFO 内部产生异步空信号的异步异或逻辑产生,即整个关键路径只经历一个异或逻辑门因此,该关键路径延时不会很长,系统的工作频率可以达到很高。 图15 高速FIFO的时序综合关键路径图结论本文对于异步FIFO的设计的主要难点,比较了三种常见方式来解决亚稳态和空/满标志的判断问题。第一种方案在空满标志位产生条件的判断上提出了“检测+计数器”的新思路使系统设计方便实用,并采用格雷码方式降低了亚稳态出现的概率。通过验证,这种方法在有效判断空满标志位方面有很大的优势;第二种方案采用格雷码替换二进制码进行计数并进行空满信号的判断的方案,并且给出了主要的VHDL代码,用仿真结果进行了验证。按照以上思想所设计的异步FIFO在实践电路中经常使用。实践证明可以解决大多数异步FIFO电路常见的错误,同时增加了系统的可靠性和灵活性;第三种方案的代价是提高了但是这样做的代价是提高了对高速 FIFO 中 高速 含义的要求由以上分析可以知道,不带同步D触发器的高速FIFO能正常工作的要求是内部高速系统的工作频率是外部的2倍以上,这在一般的高速数字系统(如视频处理系统)很容易满足 在加上同步D触发器以后为使该高速 FIFO 模块正常工作,其内部高速系统的时钟频率必须是外部的3倍以上,这使得FIFO不可能出现“写满”的状态,从而省略了常规FIFO口中的“满”信号控制位。并用一排并联的寄存器代替双口RAM存储器,省略了存储器寻址指针同时分别采用一个T触发器一个T触发器和一个异或门产生空信号,通过一个D触发器将异步的空信号同步,从而使FIFO内寄存器间的逻辑延迟大大减少,在FPGA内成功实现了高速 FIFO目前该方法已用于而所设计的 基于FPGA图像采集预处理系统中,大大提高了整个系统的工作速度,提高了效率。致 谢本设计是在赵宝康老师的的悉心指导下完成的。从选题、研究、实验,一直到论文的最后完成,其中任何一点成绩的取得都离不开赵老师的关怀和点拨。赵老师亲切和善的教学态度、深厚渊博的知识体系、耿直真诚的个性和严谨认真的科研作风都给我留下了十分深刻的印象。他平易近人的生活作风、渊博的学识,以及严谨的治学态度都是我们学习的榜样。在此致以真诚的感谢。感谢赵老师对我的教导与培养。借此机会,我也感谢大学四年期间所有指导过我的老师,感谢他们对我无私的教诲和帮助,这都会使我终生受益。特别感谢多年以来一直关爱和支持着我的父母,他们的无私奉献是我永远难以报答的。最后,向所有关心和帮助过我的人表示谢意。参考文献1 XILINX. Synthesizable H igh Per formance SDRAM Con2troller EB/ OL . http: / / www. xilinx. com, 2000.2Nebhrajani V A.Asynchronous FIFO Architectures Part 1EB/OL.(2007-11-14).http: /Asynch1.pdf.3 Nebhrajani V A.Asynchronous FIFO Architectures Part 2EB/OL.(2007 -11 -14).http: /async_fifo2.pdf.4 Cummings C E, Alfke P. Simulat ion and Synthesis T ech2niques for As ynchr on ou s FIFO Des ign with As ynchron ou sPoint er Comparisons Z . SNUG, 2002.5 熊红兵,陈琦.基于FPGA 的异步FIFO 设计与实现J.微计算机信息,2006,22(6-2):216-218.6 于海,樊晓桠.基于FPGA 异步FIFO 的研究与实现J.微电子学与计算机,2007,24(3):210-213.7 杨军,孔兵,宋克俭,等.基于FPGA 的高速异步FIFO 存储器设计J.云南大学学报:自然科学版,2007,29(6):560-565.8 Rabaey J M. 数字集成电路设计透视M . 北京: 清华大学出版社, l999.9 汪东, 马剑武, 陈书明. 基于Gray 码的异步FIFO 接口技术及其应用 J . 计算机工程与科学, 2005, 27( 11) : 582 60.10 John F W. 数字设计原理与实践M. 北京:机械工业出版社, 200311 候伯亨, 顾新. VHDL硬件描述语言与电路设计M. 西安:西安电子科技大学出版社, 199712 夏宇闻.Verilog数字系统设计教程.北京航空航天大学出版社.2008.13 雷海卫, 刘俊. FPGA中软FIFO的设计与实现J. 微计算机信息, 2008,24(2):207-20914林志煌, 解梅. 一种简易SDRAM 控制器的设计方法 J .现代电子技术, 2008, 31( 16) : 18220.15 陈明义, 夏海旻, 周建国. 高速大容量FIFO 的设计 J . 电子科技, 2008, 21( 6) : 123.16 周昆正. 基于FPGA 的SDRAM 控制器设计 J . 现代电子技术, 2003, 26( 13) : 63265, 77.附录1:library IEEE, STD; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity status is port (reset : in std_logic; clk : in std_logic; fifo_wr : in std_logic; fifo_rd : in std_logic; valid_rd : out std_logic; valid_wr : out std_logic; rd_ptr : out std_logic_vector(4 downto 0); wr_ptr : out std_logic_vector(4 downto 0); empty : out std_logic; full : out std_logic ); end status; architecture status_A of status is signal rd_ptr_s : std_logic_vector(4 downto 0); signal wr_ptr_s : std_logic_vector(4 downto 0); signal valid_rd_s : std_logic; signal valid_wr_s : std_logic; begin empty_P : process(clk, reset) begin if (reset = 1) then empty = 1; elsif (clkevent and clk = 1) then if (fifo_wr = 1 and fifo_rd = 1) then - do nothing null; elsif (fifo_wr = 1) then - write unconditionally clears empty empty = 0; elsif (fifo_rd = 1 and (wr_ptr_s = rd_ptr_s + 1) then -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!