毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc

上传人:laozhun 文档编号:4149780 上传时间:2023-04-07 格式:DOC 页数:35 大小:708.50KB
返回 下载 相关 举报
毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc_第1页
第1页 / 共35页
毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc_第2页
第2页 / 共35页
毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc_第3页
第3页 / 共35页
毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc_第4页
第4页 / 共35页
毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于Verilog HDL的异步FIFO设计与实现.doc(35页珍藏版)》请在三一办公上搜索。

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

2、结绳法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, and the target clock domains are not

3、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 effectively solve this problem, we use a a

4、synchronous 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 / full flag synchronized to the corr

5、esponding 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的大容量FIFO的设计与实现41.5 异步FIFO设计中存在的问题及解决办法51

6、.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.1 HDL与原理图输入法的关系132.8.2 HDL开发流程133 异

7、步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.2.2.4 FIFO异步空/满信号的同步234.3 仿真验证和综合235

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

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

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

11、功耗需求。在FPGA设计中,FIFO(先进先出队列)的设计是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。电子产品的更新速度很快,品种也在也逐渐增多,所以缓存对于电子产品的工作速度来说是相当重要的,这也就使得FIFO的应用更加广泛。所以FIFO的研发在一定意义上已经尽量的满足了市场对产品的高速度的要求。1.3 存储器的发展状况FIFO,简单的说就是一种存储器。下面简单介绍一下存储器的发展状况。(1)汞延迟线汞延迟线是基于汞在室温时是液体,同时又是导体,每比特数据用机械波的波峰机械波从汞柱的一端开始,一定厚度的熔融态金属汞通过一振动膜片沿着纵向从一端传

12、到另一端,这样就得名“汞延迟线”。在管的另一端,一传感器得到每一比特的信息,并反馈到起点。设想是汞获取并延迟这些数据,这样它们便能存储了。这个过程是机械和电子的奇妙结合。缺点是由于环境条件的限制,这种存储器方式会受各种环境因素影响而不精确。 1950年,世界上第一台具有存储程序功能的计算机EDVAC由冯.诺依曼博士领导设计。它的主要特点是采用二进制,使用汞延迟线作存储器,指令和程序可存入计算机中。 1951年3月,由ENIAC的主要设计者莫克利和埃克特设计的第一台通用自动计算机UNIVAC-I交付使用。它不仅能作科学计算,而且能作数据处理。 (2) 磁带UNIVAC-I第一次采用磁带机作外存储

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

14、单磁头读写方式、磁带宽度为1/4英寸、面向低端应用的Travan和DC系列,以及采用多磁头读写方式、磁带宽度均为1/2英寸、面向高端应用的DLT和IBM的3480/3490/3590系列等。(3) 磁鼓1953年,第一台磁鼓应用于IBM 701,它是作为内存储器使用的。磁鼓是利用铝鼓筒表面涂覆的磁性材料来存储数据的。鼓筒旋转速度很高,因此存取速度快。它采用饱和磁记录,从固定式磁头发展到浮动式磁头,从采用磁胶发展到采用电镀的连续磁介质。这些都为后来的磁盘存储器打下了基础。 磁鼓最大的缺点是利用率不高, 一个大圆柱体只有表面一层用于存储,而磁盘的两面都利用来存储,显然利用率要高得多。 因此,当磁盘

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

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

17、磁头重量,使更快的存取速度、更高的存储密度成为可能。20世纪80年代末期,IBM公司又对磁盘技术作出一项重大贡献,发明了MR(Magneto Resistive)磁阻磁头,这种磁头在读取数据时对信号变化相当敏感,使得盘片的存储密度比以往提高了数十倍。1991年,IBM生产的3.5英寸硬盘使用了MR磁头,使硬盘的容量首次达到了1GB,从此,硬盘容量开始进入了GB数量级。 另一种磁盘存储设备是软盘,从早期的8英寸软盘、5.25英寸软盘到3.5英寸软盘,主要为数据交换和小容量备份之用。其中,3.5英寸1.44MB软盘占据计算机的标准配置地位近20年之久,之后出现过24MB、100MB、200MB的高

18、密度过渡性软盘和软驱产品。 (6)光盘光盘主要分为只读型光盘和读写型光盘。只读型指光盘上的内容是固定的,不能写入、修改,只能读取其中的内容。读写型则允许人们对光盘内容进行修改,可以抹去原来的内容,写入新的内容。用于微型计算机的光盘主要有CD-ROM、CD-R/W和DVD-ROM等几种。(7) 纳米存储纳米是一种长度单位,符号为nm。1纳米=1毫微米,约为10个原子的长度。假设一根头发的直径为0.05毫米,把它径向平均剖成5万根,每根的厚度即约为1纳米。与纳米存储有关的主要进展有如下内容。 1998年,美国明尼苏达大学和普林斯顿大学制备成功量子磁盘,这种磁盘是由磁性纳米棒组成的纳米阵列体系。一个

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

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

21、个信元。设定FIFO最多可以存放4个信元。基本单元为字节,因此RAM的数据宽度为8位,一个信元的长度为53字节。把RAM分成4个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内的字节地址,这样组合成8位读写地址。读写双方的信息交换是互相通知对方还有多少个信元在FIFO中。读写双方都拥有自己的记分牌(Scoreboard),这个记分牌可以由一个四位的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候,记分牌的相应的寄存器被设置为1,否则为0。读出方读出一个信元,修改自己记分牌的动作叫做清位。写入方写入一个完整信元,修改自己记分牌的动作叫置位。从逻辑上说,只需

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

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

24、os和EndPos。分别作为进入数据头尾指针。当有新数据写入时,数据从上一次存储最后位置的下一个位置开始存入一个数据,EndPos就自动加1,保持与最后数据位置同步。当EndPos超过整个RAM的最大容量(RAM_SIZE)时,就需要循环返回,从0x000位置存放,一直到EndPos与StartPos重合。这时可以认为RAM已经存满。同理,读出数据时。起始位置StartPos自动加1。当StartPos超过整个RAM的最大容量时,就从0x000位置读取。一直到StartPos与EndPos重合,这时可以认为RAM已经读空。在这两个过程当中,CPLD需要对地址线进行控制。不难发现,写数据的时候A

25、ddress与EndPos一致,读数据的时候Address与StartPos一致。1.5 异步FIFO设计中存在的问题及解决办法11.5.1 亚稳态对于亚稳态的解决方法主要有三种:1:对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。2:采用两极触发器来同步异步输入信号。信号同步的目的是防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响。两级寄存器的同步化处理单元由两个触发器串联而成,中问没有其它组合电路。这种设

26、计可以保证后面的触发器获得前一个触发器输出时,前一个触发器已退出了亚稳态,并且输出已稳定。但是,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。3:在信号从快时钟域向慢时钟域过渡时,如果信号变化太快,慢时钟将可能无法对该信号进行正确采样,即采样失败。所以在使用双锁存器法时,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器对其进行正确的采样。 对上述问题,一般采用“结绳法”的设计方法,将慢时钟周期信号通过分频的方式将其周期增长,经过双锁存采样以后再使其恢复原来的时钟周期。即用“结绳”将信号延长,用“同步”实现双latch采样,用“解绳”还原为原来的时钟,保证另一个时

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

28、一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。 1.6论文主要内容第一章引言。简单介绍了所研究题目的发展状况,以及它的研究有意义。第二章FIFO工作原理简介。通过简单的与原理图介绍了异步FIFO的实现框图以及设计的相关技术和简要工作原理。第三章FIFO的实现方法及技术。分析了异步FIFO的参数和设计的难点。第四章异步FIFO实现及主要方法。通过第二章第三章对异步FIFO具体介绍,在这张内容中,重点描述了异步FIFO的实现方法。第五章总结。对异步FIFO的设计方法作

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

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

31、有效数据的项数,而写计数器则跟踪可以存储数据的项数。当对指针逻辑进行复位时,由于没有数据可读,读计数器从零起始。写计数器则从 FIFO 中项的总数开始计数,即所有项均可用来存储数据。读选通信号累减读计数器,并与写时钟域同步,因为它同时也累加写计数器。写选通信号则累减写计数器,并与读时钟域同步,因为它同时也累加读计数器。这种设计需要单时钟宽度脉冲以及用于读、写选通的脉冲同步器,因为当一个电平信号从一个时钟域跨越到另一个更快的时钟域时,在较快时钟域中它能在更多的时钟周期中保持有效。由于只要读或写信号是有效的,每个计数器就会发生变化,因此较快的时钟域就检测到更多的读、写,超出较慢时钟域实际发生的数量

32、。脉冲同步器可以将一个时钟域的时钟宽度脉冲转换为新时钟域的时钟宽度脉冲,每个脉冲都表示一次 FIFO 的读或写。这种 FIFO 状态技术对读、写状态都不太有利。当 FIFO 中所有项均充满时,写端口状态指示为满,并在读选通触发后继续指示 FIFO 满,因为同步过程会使选通信号延迟送给写计数器。读端口为空时也会出现这种情况,因为同步过程会使写选通信号延迟到达读计数器。这种设计的另一种考虑是及时检测全满/全空状态。如果 FIFO 还有一项可用,并且有写选通触发,则 FIFO 必须立即置为全满状态。这样才能提前一个时钟给出全满标志,使 FIFO 有足够时间防止下一个数据写入而产生溢出。对 FIFO

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

34、直接比较读、写指针。对大型 FIFO 来说,这些计数器也很大。而且,由于使用脉冲同步时,来自较快时钟域的读、写脉冲在较慢时钟域的脉冲间至少必须有两个时钟周期,因此平均数据速率为最低时钟频率的一半。解决这些问题的一种方法是采用直接指针比较法。在这种 FIFO 设计中,读、写指针的比较决定了 FIFO 的状态。异步设计中的指针比较更富有挑战性,因为每个指针位于不同的时钟域中,对信号总线的同步要求在同步握手信号期间总线不发生改变。将这种技术用于指针同步的 FIFO 设计可能会很慢。要解决这个问题,FIFO 指针逻辑使用了格雷码,代替指针使用的二进制码。格雷码如表 2-1所示,在每一次计数增减时只改变

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

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

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

38、这些结构上的特点使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,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深

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

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

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

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

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

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

45、针的双口RAM构成。本文所描述的是零导向传输结构的FIFO。FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作,它主要有几方面的功能:(1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;(2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;(3)允许系统进行DMA (Direct Memory Access,直接存储器存取)操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正

46、确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。2.6 Modelsim仿真工具简介5Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。2.6.1主要

47、特点(1)RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;(2)单内核VHDL和Verilog混合仿真;(3)源代码模版和助手,项目管理;(4) 集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能:a:和Tcl/Tk接口,C调试; b:SystemC的直接支持,和HDL任意混合 c:支持SystemVerilog的设计功能; d:对系统级描述语言的最全面支持,SystemVerilog, SystemC, PSL; e:ASIC Sign off。ModelSim分几种不同的版本:SE、PE、LE和OEM,其中SE是最高级的版本,而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的仿真速度问题,以Xilinx公司提供的OEM版本Mo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号