基于veriloghdl的异步FIFO设计设计98909354

上传人:痛*** 文档编号:74658869 上传时间:2022-04-14 格式:DOC 页数:38 大小:707.52KB
收藏 版权申诉 举报 下载
基于veriloghdl的异步FIFO设计设计98909354_第1页
第1页 / 共38页
基于veriloghdl的异步FIFO设计设计98909354_第2页
第2页 / 共38页
基于veriloghdl的异步FIFO设计设计98909354_第3页
第3页 / 共38页
资源描述:

《基于veriloghdl的异步FIFO设计设计98909354》由会员分享,可在线阅读,更多相关《基于veriloghdl的异步FIFO设计设计98909354(38页珍藏版)》请在装配图网上搜索。

1、陕西理工学院毕业设计题 目 基于verilog hdl的异步FIFO设计 毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业

2、设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了

3、解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时

4、)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论

5、文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订基于Verilog HDL的异步FIFO设计与实现摘 要在现代IC设计中,特别是在模块与外围芯片的通信设计中,多时钟域的情况不可避免。当数据从一个时钟域传递到另一个域,并且目标时钟域与源时钟域不相关时,这些域中的动作是不相关的,从而消除了同步操作的可能性,并使系统重复地进入亚稳定状态,造成系统时钟时序上的紊乱。为了有效的解决这个问题,我们采用一种异步FIFO(先进先 出)存储器来实现。本文提出一种新颖的异步FIFO设计方案,它通过先比较读写地址并结合象限检测法产生异步的空/满标志,再把异步的空/满标志同步到相应的时钟域。通

6、过仿真验证,该方法是稳定有效的。关键词:异步;FIFO;亚稳态;格雷码;结绳法Design and accomplish asynchronous FIFO based on Verilog HDLAbstract In modern IC design, particularly in the communications module and peripheral chip design, multiple clock domains of the inevitable. When data passes from one clock domain to another domain, a

7、nd the target clock domains are not associated with the source clock domain, these domains are not related movements, thus eliminating the possibility of simultaneous operation and allows the system to enter the sub-repeat steady-state, causing disorder on the system clock timing. In order to effect

8、ively solve this problem, we use a asynchronous FIFO (FIFO) memory to achieve. This paper proposes a novel asynchronous FIFO design, which compared reading and writing through the first address and generate an asynchronous combination of quadrant detection empty / full flag, then asynchronous empty

9、/ full flag synchronized to the corresponding clock domain. The simulation results that the method is stable and effective.Key Words: asynchronous; FIFO; metastable state; Gray code; tie knots France目 录1 引言11.1 FIFO研究意义11.2 生产需求状况11.3 存储器外发展状况21.4 FIFO设计技术简介41.4.1 基于信元的FIFO设计方法41.4.2 基于SRAM/DRAM的大容量

10、FIFO的设计与实现41.5 异步FIFO设计中存在的问题及解决办法51.5.1 亚稳态51.5.2 空/满指针的解决方法61.6 论文主要内容62 异步FIFO工作原理简介72.1 关于异步信号72.2 异步FIFO芯片简介82.3 FIFO的一些重要参数92.4 异步FIFO设计的难点102.4.1 异步FIFO设计难点概述102.4.1.1 解决FIFO的满/空技术方法概述和特点102.4.1.2 亚稳态问题的产生及解决102.5 FIFO的功能简介112.6 Modelsim仿真工具简介112.6.1 主要特点112.7 Verilog HDL语言的简介122.8 HDL语言122.8

11、.1 HDL与原理图输入法的关系132.8.2 HDL开发流程133 异步FIFO实现的技所涉及的技术及其解决方法143.1格雷码143.2结绳法144 异步FIFO具体实现方法164.1 亚稳态问题的解决方案164.1.1 问题的产生164.1.2 常见的解决方法164.1.2.1 格雷码编码法164.1.2.2 双触发器法174.1.2.3 结绳法174.2 基于异步比较FIFO逻辑标志的产生184.2.1 设计思想184.2.2 标志位的产生194.2.2.1 异步比较FI FO逻辑标志与时钟的同步194.2.2.2 保守的空/满标志214.2.2.3 半满、将近满、将近空的产生224.

12、2.2.4 FIFO异步空/满信号的同步234.3 仿真验证和综合235 总结245.1 异步FIFO设计的总结245.2 设计方法的不足之处24附录一25参考文献30第 8 页 共 38 页1 引言1.1 FIFO研究意义随着计算机、多媒体和数据通信技术的高速发展,数字图像、语音等数据传输技术近年来得到了极大的重视和长足的发展,并取得了广泛的应用。如何保障这些语音、图像等数据传输的准确性、及时性?如何高效率高速度地传输这些数据?这些都是当今信息领域的科研人员所必须回答和解决的问题。而往往在这些数据传输系统中,又会遇到不同系统接口间数据的传输。通常在两个相连接的不同电路系统之间,因为每个系统的

13、数据传输速度不同,在系统的接口部分就会出现数据输入速度和输出速度不同,也就是会发生数据传输速率不匹配的问题。这种情况往往会让传输的数据产生复写或丢失,降低数据的传输速率,同时也因为数据复写、丢失和无效数据的读入,将会产生数据出错,因此需要在不同系统的接口处设计数据传输单元来实现数据的高速高效传输。在现代的系统设计中,为了提高系统的性能,设计者对数据的传输率、数据的传输量,对系统各部分之间的接口部分不同的数据输入和接收传输率的匹配有越来越高的要求,而 FIFO存储器以其合理的价格、使用的方便灵活性以及上述的对速度匹配的应用而成为解决这类问题的理想途径,因此FIFO 存储器在计算机、多媒体和数据通

14、信领域都有着广泛的应用,因此对FIFO的研究与设计应用具有理论上和实际应用上的双重意义。 在现在的设计中,FIFO的设计方法主要有两种。一种是在FPGA中基于信元的FIFO设计方法,另一种是基于SDRAM/DRAM的大容量的FIFO的设计方法。1.2 生产需求状况3FPGA(现场可编程逻辑器件)产品的应用领域已经从原来的通信扩展到消费电子、汽车电子、工业控制、测试测量等广泛的领域。而应用的变化也使FPGA产品近几年的演进趋势越来越明显:一方面,FPGA供应商致力于采用当前最先进的工艺来提升产品的性能,降低产品的成本;另一方面,越来越多的通用IP(知识产权)或客户定制IP被引入FPGA中,以满足

15、客户产品快速上市的要求。此外,FPGA企业都在大力降低产品的功耗,满足业界越来越苛刻的低功耗需求。在FPGA设计中,FIFO(先进先出队列)的设计是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。电子产品的更新速度很快,品种也在也逐渐增多,所以缓存对于电子产品的工作速度来说是相当重要的,这也就使得FIFO的应用更加广泛。所以FIFO的研发在一定意义上已经尽量的满足了市场对产品的高速度的要求。1.3 存储器的发展状况FIFO,简单的说就是一种存储器。下面简单介绍一下存储器的发展状况。(1)汞延迟线汞延迟线是基于汞在室温时是液体,同时又是导体,每比特数据用

16、机械波的波峰机械波从汞柱的一端开始,一定厚度的熔融态金属汞通过一振动膜片沿着纵向从一端传到另一端,这样就得名“汞延迟线”。在管的另一端,一传感器得到每一比特的信息,并反馈到起点。设想是汞获取并延迟这些数据,这样它们便能存储了。这个过程是机械和电子的奇妙结合。缺点是由于环境条件的限制,这种存储器方式会受各种环境因素影响而不精确。 1950年,世界上第一台具有存储程序功能的计算机EDVAC由冯.诺依曼博士领导设计。它的主要特点是采用二进制,使用汞延迟线作存储器,指令和程序可存入计算机中。 1951年3月,由ENIAC的主要设计者莫克利和埃克特设计的第一台通用自动计算机UNIVAC-I交付使用。它不

17、仅能作科学计算,而且能作数据处理。 (2) 磁带UNIVAC-I第一次采用磁带机作外存储器,首先用奇偶校验方法和双重运算线路来提高系统的可靠性,并最先进行了自动编程的试验。 磁带是所有存储媒体中单位存储信息成本最低、容量最大、标准化程度最高的常用存储介质之一。它互换性好、易于保存,近年来,由于采用了具有高纠错能力的编码技术和即写即读的通道技术,大大提高了磁带存储的可靠性和读写速度。根据读写磁带的工作原理可分为螺旋扫描技术、线性记录(数据流)技术、DLT技术以及比较先进的LTO技术。 根据读写磁带的工作原理,磁带机可以分为六种规格。其中两种采用螺旋扫描读写方式的是面向工作组级的DAT(4mm)磁

18、带机和面向部门级的8mm磁带机,另外四种则是选用数据流存储技术设计的设备,它们分别是采用单磁头读写方式、磁带宽度为1/4英寸、面向低端应用的Travan和DC系列,以及采用多磁头读写方式、磁带宽度均为1/2英寸、面向高端应用的DLT和IBM的3480/3490/3590系列等。(3) 磁鼓1953年,第一台磁鼓应用于IBM 701,它是作为内存储器使用的。磁鼓是利用铝鼓筒表面涂覆的磁性材料来存储数据的。鼓筒旋转速度很高,因此存取速度快。它采用饱和磁记录,从固定式磁头发展到浮动式磁头,从采用磁胶发展到采用电镀的连续磁介质。这些都为后来的磁盘存储器打下了基础。 磁鼓最大的缺点是利用率不高, 一个大

19、圆柱体只有表面一层用于存储,而磁盘的两面都利用来存储,显然利用率要高得多。 因此,当磁盘出现后,磁鼓就被淘汰了。 (4) 磁芯美国物理学家王安1950年提出了利用磁性材料制造存储器的思想。福雷斯特则将这一思想变成了现实。为了实现磁芯存储,福雷斯特需要一种物质,这种物质应该有一个非常明确的磁化阈值。他找到在新泽西生产电视机用铁氧体变换器的一家公司的德国老陶瓷专家,利用熔化铁矿和氧化物获取了特定的磁性质。 对磁化有明确阈值是设计的关键。最先获得这些专利许可证的是IBM,IBM最终获得了在北美防卫军事基地安装“旋风”的商业合同。更重要的是,自20世纪50年代以来,所有大型和中型计算机也采用了这一系统

20、。磁芯存储从20世纪50年代、60年代,直至70年代初,一直是计算机主存的标准方式。 (5)磁盘世界第一台硬盘存储器是由IBM公司在1956年发明的,其型号为IBM 350 RAMAC(Random Access Method of Accounting and Control)。这套系统的总容量只有5MB,共使用了50个直径为24英寸的磁盘。1968年,IBM公司提出“温彻斯特/Winchester”技术,其要点是将高速旋转的磁盘、磁头及其寻道机构等全部密封在一个无尘的封闭体中,形成一个头盘组合件(HDA),与外界环境隔绝,避免了灰尘的污染,并采用小型化轻浮力的磁头浮动块,盘片表面涂润滑剂,

21、实行接触起停,这是现代绝大多数硬盘的原型。1979年,IBM发明了薄膜磁头,进一步减轻了磁头重量,使更快的存取速度、更高的存储密度成为可能。20世纪80年代末期,IBM公司又对磁盘技术作出一项重大贡献,发明了MR(Magneto Resistive)磁阻磁头,这种磁头在读取数据时对信号变化相当敏感,使得盘片的存储密度比以往提高了数十倍。1991年,IBM生产的3.5英寸硬盘使用了MR磁头,使硬盘的容量首次达到了1GB,从此,硬盘容量开始进入了GB数量级。 另一种磁盘存储设备是软盘,从早期的8英寸软盘、5.25英寸软盘到3.5英寸软盘,主要为数据交换和小容量备份之用。其中,3.5英寸1.44MB

22、软盘占据计算机的标准配置地位近20年之久,之后出现过24MB、100MB、200MB的高密度过渡性软盘和软驱产品。 (6)光盘光盘主要分为只读型光盘和读写型光盘。只读型指光盘上的内容是固定的,不能写入、修改,只能读取其中的内容。读写型则允许人们对光盘内容进行修改,可以抹去原来的内容,写入新的内容。用于微型计算机的光盘主要有CD-ROM、CD-R/W和DVD-ROM等几种。(7) 纳米存储纳米是一种长度单位,符号为nm。1纳米=1毫微米,约为10个原子的长度。假设一根头发的直径为0.05毫米,把它径向平均剖成5万根,每根的厚度即约为1纳米。与纳米存储有关的主要进展有如下内容。 1998年,美国明

23、尼苏达大学和普林斯顿大学制备成功量子磁盘,这种磁盘是由磁性纳米棒组成的纳米阵列体系。一个量子磁盘相当于我们现在的10万100万个磁盘,而能源消耗却降低了1万倍。 1988年,法国人首先发现了巨磁电阻效应,到1997年,采用巨磁电阻原理的纳米结构器件已在美国问世,它在磁存储、磁记忆和计算机读写磁头等方面均有广阔的应用前景。 2002年9月,美国威斯康星州大学的科研小组宣布,他们在室温条件下通过操纵单个原子,研制出原子级的硅记忆材料,其存储信息的密度是目前光盘的100万倍。这是纳米存储材料技术研究的一大进展。1.4 FIFO设计技术简介1.4.1 基于信元的FIFO设计方法2设计者通常在FPGA上

24、实现FIFO(先进先出寄存器)的时候,都会使用由芯片提供商所提供的FIFO。但是,由于其通用性使得其针对性变差,某些情况下会变得不方便或者将增加硬件成本。此时,需要进行自行FIFO设计。有一种基于信元的FIFO设计方法以供设计者在适当的时候选用。这种方法也适合于不定长包的处理。以ATM的设计为例,在ATM的相关设计中,设计者则更多希望一个FIFO对外给出的信息是“现在FIFO中还剩下几个信元”。要实现这一功能通常有两种方法:(1)调用厂商提供的以操作粒度为基本单元的通用FIFO,然后在这个FIFO的外面再加上一个“套子”。这个套子里面设计一些计数器,根据计数内容对外提供相应的信息。(2)设计操

25、作粒度为信元的定制FIFO。这样对外直接提供设计者最希望得到的信息,即FIFO中还有多少个信元。设定FIFO最多可以存放4个信元。基本单元为字节,因此RAM的数据宽度为8位,一个信元的长度为53字节。把RAM分成4个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内的字节地址,这样组合成8位读写地址。读写双方的信息交换是互相通知对方还有多少个信元在FIFO中。读写双方都拥有自己的记分牌(Scoreboard),这个记分牌可以由一个四位的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候,记分牌的相应的寄存器被设置为1,否则为0。读出方读出一个信元,修改自己记

26、分牌的动作叫做清位。写入方写入一个完整信元,修改自己记分牌的动作叫置位。从逻辑上说,只需要读出方把自己的记分牌的信息(清位信息)传送给写入方,同时写入方把自己的记分牌的信息(置位信息)传送给读出方就可以了,即只要构成两条逻辑通道就可以满足需求。但是,在硬件上的实现却要比这种只从逻辑上的思考要复杂。由于读写双方有可能处在不同的时钟域,所以当读写双方交换信息的时候就需要处理信号采样的亚稳态情况。1.4.2 基于SRAM/DRAM的大容量FIFO的设计与实现2许多系统都需要大容量FIFO作为缓存,但是由于成本和容量限制,常采用多个FIFO芯片级联扩展,这往往导致系统结构复杂,成本高。静态随机存取存储

27、器SRAM(Static Random Access Memory)是一种非常重要的易失性存储器,它的速度非常快,并且能在快速读取和刷新时保持数据完整性。SRAM器件采用Hynix公司的HY64UD16322A。HY64UD16322A是高速、超低功耗32 Mbit SRAM,内部具有2 097 152个16 bit字容量。采用了CMOS制造工艺、TTL电平接口以及三态输出,具有较大的输入电压和温度范围。同时HY64UD16322A支持DPD(Deep Power Down)模式,保证其在待机模式下功耗进一步降低。系统采用CPLD作为总控制器件。根据FIFO的特点,需要将SRAM按地址存储用程

28、序控制成先进先出的结构。这里采用指针算法来实现这种结构设计:设置两个指针变量StartPos和EndPos。分别作为进入数据头尾指针。当有新数据写入时,数据从上一次存储最后位置的下一个位置开始存入一个数据,EndPos就自动加1,保持与最后数据位置同步。当EndPos超过整个RAM的最大容量(RAM_SIZE)时,就需要循环返回,从0x000位置存放,一直到EndPos与StartPos重合。这时可以认为RAM已经存满。同理,读出数据时。起始位置StartPos自动加1。当StartPos超过整个RAM的最大容量时,就从0x000位置读取。一直到StartPos与EndPos重合,这时可以认为

29、RAM已经读空。在这两个过程当中,CPLD需要对地址线进行控制。不难发现,写数据的时候Address与EndPos一致,读数据的时候Address与StartPos一致。1.5 异步FIFO设计中存在的问题及解决办法11.5.1 亚稳态对于亚稳态的解决方法主要有三种:1:对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。2:采用两极触发器来同步异步输入信号。信号同步的目的是防止新时钟域中第一级触发器的亚稳态信号对下级逻

30、辑造成影响。两级寄存器的同步化处理单元由两个触发器串联而成,中问没有其它组合电路。这种设计可以保证后面的触发器获得前一个触发器输出时,前一个触发器已退出了亚稳态,并且输出已稳定。但是,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。3:在信号从快时钟域向慢时钟域过渡时,如果信号变化太快,慢时钟将可能无法对该信号进行正确采样,即采样失败。所以在使用双锁存器法时,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器对其进行正确的采样。 对上述问题,一般采用“结绳法”的设计方法,将慢时钟周期信号通过分频的方式将其周期增长,经过双锁存采样以后再使其恢复原来的时钟周期。即用“结

31、绳”将信号延长,用“同步”实现双latch采样,用“解绳”还原为原来的时钟,保证另一个时钟域也可以正确采样,而接收方用相反的流程送回响应信号。1.5.2 空/满指针的解决方法空/满标志产生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:空标志=(|写地址-读地址|=预定值)AND(写地址超前读地址)满标志=(|写地址-读地址|=预定值)AND(

32、读地址超前写地址)最直接的做法是,采用读写地址相比较来产生空满标志。当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。 1.6论文主要内容第一章引言。简单介绍了所研究题目的发展状况,以及它的研究有意义。第二章FIFO工作原理简介。通过简单的与原理图介绍了异步FIFO的实现框图以及设计的相关技术和简要工作原理。第三章FIFO的实现方法及技术。分析了异步FIFO的参数和设计的难点。第四章异步FIFO实现及主要方法。通过第二章第三章对异步FIFO具体介绍

33、,在这张内容中,重点描述了异步FIFO的实现方法。第五章总结。对异步FIFO的设计方法作了简要的总结,简述了设计方法的不足之处,以及应采取的措施。 2 异步FIFO工作原理简介2.1关于异步信号9在许多情况下,数据在跨越时钟域时需要“堆积”起来,因此使用单个保持寄存器无法完成工作。例如一种情况是某个传输电路猝发式发送数据,接收电路来不及采样。另一种情况是接收电路采样速度超出传输电路发送数据的速度,但采样的数据宽度不够。这些情况就要使用 FIFO 了。基本上,人们使用 FIFO 有两个目的:速度匹配或数据宽度匹配。在速度匹配时,FIFO 较快的端口处理猝发的数据传输,而较慢的端口则维持恒定的数据

34、流。但是,虽然访问方式和速度不同,但进出 FIFO 的平均数据速率必须是相同的,否则 FIFO 就会出现上溢(oveRFlow)或下溢(underflow)问题。与单寄存器设计相同,FIFO 将数据保存在寄存器或存储器中,同时同步状态信号,判断何时可以把数据写入 FIFO 或从 FIFO 中读出。在速度匹配应用中,每个端口(读或写)的时钟不同。FIFO 中的寄存器使用写端口时钟,就像保持寄存器使用电路时钟来改变寄存器内容一样。信号同步发生在指针逻辑中,而且比握手信号要复杂得多。现在指针逻辑的设计有多种方法。第一种方法是将读、写选通进行同步,同时在各个时钟域使用计数器来跟踪 FIFO 中可用的项

35、。计数器反映出可用于读写的 FIFO 项目号,计数器也与相应的端口同步。读计数器跟踪包含有效数据的项数,而写计数器则跟踪可以存储数据的项数。当对指针逻辑进行复位时,由于没有数据可读,读计数器从零起始。写计数器则从 FIFO 中项的总数开始计数,即所有项均可用来存储数据。读选通信号累减读计数器,并与写时钟域同步,因为它同时也累加写计数器。写选通信号则累减写计数器,并与读时钟域同步,因为它同时也累加读计数器。这种设计需要单时钟宽度脉冲以及用于读、写选通的脉冲同步器,因为当一个电平信号从一个时钟域跨越到另一个更快的时钟域时,在较快时钟域中它能在更多的时钟周期中保持有效。由于只要读或写信号是有效的,每

36、个计数器就会发生变化,因此较快的时钟域就检测到更多的读、写,超出较慢时钟域实际发生的数量。脉冲同步器可以将一个时钟域的时钟宽度脉冲转换为新时钟域的时钟宽度脉冲,每个脉冲都表示一次 FIFO 的读或写。这种 FIFO 状态技术对读、写状态都不太有利。当 FIFO 中所有项均充满时,写端口状态指示为满,并在读选通触发后继续指示 FIFO 满,因为同步过程会使选通信号延迟送给写计数器。读端口为空时也会出现这种情况,因为同步过程会使写选通信号延迟到达读计数器。这种设计的另一种考虑是及时检测全满/全空状态。如果 FIFO 还有一项可用,并且有写选通触发,则 FIFO 必须立即置为全满状态。这样才能提前一

37、个时钟给出全满标志,使 FIFO 有足够时间防止下一个数据写入而产生溢出。对 FIFO 的读端口也是这样。这种情况下,如果 FIFO 里只有一个数,并且有读选通触发,则必须置全空状态,以给读电路足够的时间防止读空 FIFO。这种指针逻辑限制电路在每个时钟周期中访问 FIFO,即使在慢速时钟域中也是这样。这一功能的优点在于访问 FIFO 的电路至少有一个时钟周期来评估 FIFO 的状态。FIFO 可以将所有项都填满数据,而不会出现数据被覆盖或全空无数据可读的情况。这种设计的另一个优点是每一端都可以读其相应的计数器,来判断 FIFO 中还有多少项可用。人们可以将这种 FIFO设计用在进行多次数据读

38、/写的电路中,而不会造成上溢或下溢的情况。这种设计的不足之处是由计数器来判断状态,而不是直接比较读、写指针。对大型 FIFO 来说,这些计数器也很大。而且,由于使用脉冲同步时,来自较快时钟域的读、写脉冲在较慢时钟域的脉冲间至少必须有两个时钟周期,因此平均数据速率为最低时钟频率的一半。解决这些问题的一种方法是采用直接指针比较法。在这种 FIFO 设计中,读、写指针的比较决定了 FIFO 的状态。异步设计中的指针比较更富有挑战性,因为每个指针位于不同的时钟域中,对信号总线的同步要求在同步握手信号期间总线不发生改变。将这种技术用于指针同步的 FIFO 设计可能会很慢。要解决这个问题,FIFO 指针逻

39、辑使用了格雷码,代替指针使用的二进制码。格雷码如表 2-1所示,在每一次计数增减时只改变其中的一位。可以在格雷码总线上使用同步器,因为每一次总线改变时只有一根信号线有变化,于是就消除了格雷码总线各位通过不同同步器时的竞争情况。这种设计的指针为格雷码计数器。使用二进制指针时需要将其变换成格雷码后的同步指针,而使用变换逻辑会违反对同步信号的限制,即同步的信号在跨越时钟域前要来自触发器。Decimal0123456789101112131415Binary01101110010111011110001001101010111100110111101111Gray0111101101111011001

40、1001101111111101010101110011000表2-1 格雷码与十进制,二进制的转换关系表2.2 异步FIFO芯片简介3FIFO芯片是一种具有存储功能的高速逻辑芯片,可在高速数字系统中用作数据缓存。FIFO通常利用双口RAM和读写地址产生模块来实现其功能。FIFO的接口信号包括异步写时钟(wr-clk)和读时钟(rd-clk)、与写时钟同步的写有效(wren)和写数据(wr-data)、与读时钟同步的读有效(rden)和读数据(rd-data)。写地址产生模块一般还根据读地址和写地址来产生FIFO的满标志。读地址产生模块一般根据读地址和写地址的差来产生FIFO的空标志。为了实现

41、正确的读写和避免FIFO的上溢或下溢,通常还应给出与读时钟和写时钟同步的FIFO的空标志(empty)和满标志(full),以禁止读写操作。写地址产生模块通常根据写时钟和写有效信号来产生递增的写地址,而读地址产生模块则根据读时钟和读有效信号来产生递增的读地址。FIFO一般在操作时,首先在写时钟wr clk的上升沿且当wren有效时,将wrdata写入双口RAM中写地址对应的位置中,然后将读地址对应的双口RAM中的数据输出到读数据总线上,这样就可实现先进先出功能。读写操作一般会自动访问存储器中连续的存储单元。从FIFO中读出的数据顺序与写入的顺序相同,而地址的顺序则在内部已经预先定义好,因此,对

42、FIFO芯片的操作不需要额外的地址信息。另外,FIFO芯片还能提供对读写指针的复位功能。这些结构上的特点使FIFO的应用大大简化了电路的复杂程度,提高了系统的可靠性和稳定性。2.3 FIFO的一些重要参数7FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深

43、度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。 满标志:FIFO已满或将要

44、满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。读指针:指向下一个读出地址。读完后自动加1。写指针:指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。2.4 异步FIFO设计的难点9 2.4.1 异步FIFO设

45、计难点概述 计异步FIFO有两个难点:一是如何正确地设计空、满指针以及几乎满等信号的控制电路;二是如何同步异步信号,使触发器不产生亚稳态。2.4.1.1 解决FIFO的满/空技术方法概述和特点怎样判断FIFO的空/满状态?为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。由于同步FIFO几乎很少用到,这里只描述异步FIFO的空/满标志产生问题。空/满标志产生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。

46、在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:空标志=(|写地址-读地址|=预定值)AND(写地址超前读地址)满标志=(|写地址-读地址|=预定值)AND(读地址超前写地址)最直接的做法是,采用读写地址相比较来产生空满标志。当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。2.4.1.2 亚稳态问

47、题的产生及解决在用到触发器的设计中,不可避免的会遇到亚稳态的问题。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只由一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象。但是格雷码有个缺点就是只能定义2n的深度,而不能像二进制码那样随意的定义FIFO的深度,因为格雷码必须循环一个2n,否则就不能保证两个相邻码元之间相差一位的条件,因此也就不是真正的格雷码了。第二就是使用冗余的触发器,假设一个触发器发生亚稳态的概率为P,那么两个及联的触发器发生亚稳态的概率就为P

48、的平方。但这会导致延时的增加。亚稳态的发生会使得FIFO出现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就导致写入或读出的地址错误。由于考虑延时的作用,空/满标志的产生并不一定出现在FIFO真的空/满时才出现。可能FIFO还未空/满时就出现了空/满标志。这并没有什么不好,只要保证FIFO不出现overflow或underflow 就足够了。2.5 异步FIFO的功能简介9FIFO(First In First Out)存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结

49、构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,是由具有读和写地址指针的双口RAM构成。本文所描述的是零导向传输结构的FIFO。FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作,它主要有几方面的功能:(1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;(2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;(3)允许系统进行DMA (Direct Memory Access,直接存储器存取)操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同

50、时完成数据的存储工作。FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。2.6 Quartus仿真工具简介5 Quartus是Altera公司提供的FPGA/CPLD开发集成环 境,Altera是世界上最大可编程逻辑器件的供应商之一。Quartus界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Quartus上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的

51、设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。2.6.1主要特点一、开放的界面Quartus支持与Cadence,Exemplarlogic,MentorGraphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。 二、与结构无关Quartus系统的核心Complier支持Altera公司所有可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。三、完全集成化Quartus的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。2.7 Verilog HDL语言的简介1 Verilog HDL就是在用用

52、最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE(美国电气及电

53、子工程师学会)标准,即IEEE Standard 1364-1995. Verilog HDL的最大特点就是易学易用,VHDL与Verilog HDL的关系就像汇编语言与C语言的关系一样,如果有,VHDL编程基础,并同时具备c语言的编程经验,就可以在一个较短的时间内很快的学习和掌握Verilog HDL语言。由于HDL语言本身是专门面向硬件与系统设计的,这样的学习可以同时获得设计实际电路的经验。2.8 HDL语言4随着EDA技术的发展,使用硬件语言设计PLD/FPGA成为一种趋势。目前最主要的硬件描述语言是VHDL和Verilog HDL。VHDL发展的较早,语法严格,而Verilog HDL

54、是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。从EDA技术的发展上看,已出现用于CPLD/FPGA设计的硬件C语言编译软件,虽然还不成熟,应用极少,但它有可能会成为继VHDL和Verilog之后,设计大规模CPLD/FPGA的又一种手段。2.8.1 HDL与原理图输入法的关系HDL和传统的原理图输入方法的关系就好比是高级语言和汇编语言的关系。HDL的可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好,效率高,比较直观,但设计大规模CPLD

55、/FPGA时显得很烦琐,移植性差。在真正的PLD/FPGA设计中,通常建议采用原理图和HDL结合的方法来设计,适合用原理图的地方就用原理图,适合用HDL的地方就用HDL,并没有强制的规定。2.8.2 HDL开发流程用VHDL/Verilog HDL语言开发PLD/FPGA的完整流程为:(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。本设计采用verilog hdl。(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进

56、行时序仿真)。(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。(4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。(5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫后仿真)。(6)编程下载:确认仿真无误后,将文件下载到芯片中通常以上过程可以都在PLD/FPGA厂家提供的开发工具(如MAXPLUSII,Foundation,ISE)中完成,但许多集成的PLD开发软件只支持VHDL/Verilog的子

57、集,可能造成少数语法不能编译,如果采用专用HDL工具分开执行,效果会更好,否则这么多出售专用HDL开发工具的公司就没有存在的理由了。 注意:本设计只做到模拟波形图的阶段。3 异步FIFO实现的技所涉及的技术及其解决方法异步FIFO的设计主要处理两个关键性的问题。一是空/满信号的控制,二是同步异步信号,避免亚稳态的产生。 3.1格雷码6(英文:Gray Code, Grey Code,又称作格雷码,二进制循环码)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了

58、随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于风向的转角位移量数字量的转换中,当风向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可

59、靠,即可减少出错的可能性。但格雷码不是权重码,每一位码没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取。解码的方法是用0和采集来的4位格雷码的最高位(第4位)异或,结果保留到4位,再将异或的值和下一位(第3位)相异或,结果保留到3位,再将相异或的值和下一位(第2位)异或,结果保留到2位,依次异或,直到最低位,依次异或转换后的值(二进制数)就是格雷码转换后自然码的值。 异或:异或则是按位“异或”,相同为“0”,相异为“1”。例:10011000 异或 01100001 结果:11111001。举例:如果采集器器采到了格雷

60、码1010,就要将它变为自然二进制。0与第四位 1 进行异或结果为1,上面结果1与第三位0异或结果为1,上面结果1与第二位异或结果为0,上面结果0与第一位0异或结果为 0因此最终结果为1100。这就是二进制码即十进制12。 3.2结绳法6 印加帝国的领地,是环绕库斯科城的一方地域,那里现在大部分属于秘鲁,还有一部分属于厄瓜多尔和智利。虽然印加人那时还没有一个数学记数系统或一种语言书写法,但他们用结绳的方法,管理着他们长达两千英里的帝国。结绳法是利用一种十进的位置系统在绳子上打结。在干绳中最远的一行一个结代表1,次远的一个结代表10,如此等等。在使用双锁存器法时,应该使原始信号保持足够长的时间,

61、以便另一个时钟域的锁存器对其进行正确的采样。对这一问题,一般采用“结绳法”的设计方法,将慢时钟周期信号通过分频的方式将其周期增长,经过双锁存采样以后再使其恢复原来的时钟周期。即用“结绳”将信号延长,用“同步”实现双latch采样,用“解绳”还原为原来的时钟,保证另一个时钟域也可以正确采样,而接收方用相反的流程送回响应信号。4 异步FIFO具体实现方法4.1 亚稳态问题的解决方案84.1.1问题的产生在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平,这个过程称为亚稳

62、态,如图4-1所示。图中clka和clkb即为异步时钟,亚稳态必定会发生在异步时钟电路中。在图4-1的异步电路中,电路外部的输入和内部的时钟之间是毫无时间关系的,因此setup/hold冲突是必然的;同在电路内部的两个没有关系的时钟域之间的信号传递,也必然会导致setup/hold冲突。亚稳态虽然是不可避免的,但采用下面的计方法可以将其发生的概率降低到一个可以接受的程度。图4-1 异步时钟和亚稳态4.1.2 常见的解决方法104.1.2.1格雷码编码法写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对于多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,因此采用格雷码可以很好地节约功耗,有效地减少亚稳态的产生,特别是在地址位比较多的情况下可以更好地解决亚稳态的问题。格雷码是对二进制地址输出进行转换,下面是四位代码之间转换的逻辑表达式:B码转G码的逻辑表达式:G码转B码的逻辑表达式:B4=G4 G4=B4B3=B4G3G3=B4B3B2=B3G2

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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