1、基于veriloghdl的异步FIFO设计毕业设计题 目 基于verilog hdl的异步FIFO设计 学生姓名 薛博阳 学号 1113014175 所在学院 物理与电信工程学院 专业班级 电子1105 指导教师 吴燕 _ _ _矚慫润厲钐瘗睞枥庑赖。完成地点 博远楼实验室 年 月 日基于Verilog HDL的异步FIFO设计与实现摘 要在现代IC设计中,特别是在模块与外围芯片的通信设计中,多时钟域的情况不可避免。当数据从一个时钟域传递到另一个域,并且目标时钟域与源时钟域不相关时,这些域中的动作是不相关的,从而消除了同步操作的可能性,并使系统重复地进入亚稳定状态,造成系统时钟时序上的紊乱。为
2、了有效的解决这个问题,我们采用一种异步FIFO(先进先 出)存储器来实现。本文提出一种新颖的异步FIFO设计方案,它通过先比较读写地址并结合象限检测法产生异步的空/满标志,再把异步的空/满标志同步到相应的时钟域。通过仿真验证,该方法是稳定有效的。聞創沟燴鐺險爱氇谴净。关键词:异步;FIFO;亚稳态;格雷码;结绳法Design and accomplish asynchronous FIFO based on Verilog HDL残骛楼諍锩瀨濟溆塹籟。Abstract In modern IC design, particularly in the communications module
3、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 associated with the source clock domain, these domains are not related movements, thus eliminating the possibility of simultaneous oper
4、ation 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 asynchronous FIFO (FIFO) memory to achieve. This paper proposes a novel asynchronous FIFO design, which compared reading and writing thr
5、ough the first address and generate an asynchronous combination of quadrant detection empty / full flag, then asynchronous empty / full flag synchronized to the corresponding clock domain. The simulation results that the method is stable and effective.酽锕极額閉镇桧猪訣锥。Key Words: asynchronous; FIFO; metast
6、able state; Gray code; tie knots France彈贸摄尔霁毙攬砖卤庑。1 引言1.1 FIFO研究意义随着计算机、多媒体和数据通信技术的高速发展,数字图像、语音等数据传输技术近年来得到了极大的重视和长足的发展,并取得了广泛的应用。如何保障这些语音、图像等数据传输的准确性、及时性?如何高效率高速度地传输这些数据?这些都是当今信息领域的科研人员所必须回答和解决的问题。而往往在这些数据传输系统中,又会遇到不同系统接口间数据的传输。通常在两个相连接的不同电路系统之间,因为每个系统的数据传输速度不同,在系统的接口部分就会出现数据输入速度和输出速度不同,也就是会发生数据传输速
7、率不匹配的问题。这种情况往往会让传输的数据产生复写或丢失,降低数据的传输速率,同时也因为数据复写、丢失和无效数据的读入,将会产生数据出错,因此需要在不同系统的接口处设计数据传输单元来实现数据的高速高效传输。在现代的系统设计中,为了提高系统的性能,设计者对数据的传输率、数据的传输量,对系统各部分之间的接口部分不同的数据输入和接收传输率的匹配有越来越高的要求,而 FIFO存储器以其合理的价格、使用的方便灵活性以及上述的对速度匹配的应用而成为解决这类问题的理想途径,因此FIFO 存储器在计算机、多媒体和数据通信领域都有着广泛的应用,因此对FIFO的研究与设计应用具有理论上和实际应用上的双重意义。詩叁
8、撻訥烬忧毀厉鋨骜。 在现在的设计中,FIFO的设计方法主要有两种。一种是在FPGA中基于信元的FIFO设计方法,另一种是基于SDRAM/DRAM的大容量的FIFO的设计方法。则鯤愜韋瘓賈晖园栋泷。1.2 生产需求状况3FPGA(现场可编程逻辑器件)产品的应用领域已经从原来的通信扩展到消费电子、汽车电子、工业控制、测试测量等广泛的领域。而应用的变化也使FPGA产品近几年的演进趋势越来越明显:一方面,FPGA供应商致力于采用当前最先进的工艺来提升产品的性能,降低产品的成本;另一方面,越来越多的通用IP(知识产权)或客户定制IP被引入FPGA中,以满足客户产品快速上市的要求。此外,FPGA企业都在大
9、力降低产品的功耗,满足业界越来越苛刻的低功耗需求。在FPGA设计中,FIFO(先进先出队列)的设计是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。电子产品的更新速度很快,品种也在也逐渐增多,所以缓存对于电子产品的工作速度来说是相当重要的,这也就使得FIFO的应用更加广泛。所以FIFO的研发在一定意义上已经尽量的满足了市场对产品的高速度的要求。胀鏝彈奥秘孫戶孪钇賻。1.3 存储器的发展状况FIFO,简单的说就是一种存储器。下面简单介绍一下存储器的发展状况。(1)汞延迟线汞延迟线是基于汞在室温时是液体,同时又是导体,每比特数据用机械波的波峰机械波从汞柱的
10、一端开始,一定厚度的熔融态金属汞通过一振动膜片沿着纵向从一端传到另一端,这样就得名“汞延迟线”。在管的另一端,一传感器得到每一比特的信息,并反馈到起点。设想是汞获取并延迟这些数据,这样它们便能存储了。这个过程是机械和电子的奇妙结合。缺点是由于环境条件的限制,这种存储器方式会受各种环境因素影响而不精确。 1950年,世界上第一台具有存储程序功能的计算机EDVAC由冯.诺依曼博士领导设计。它的主要特点是采用二进制,使用汞延迟线作存储器,指令和程序可存入计算机中。 1951年3月,由ENIAC的主要设计者莫克利和埃克特设计的第一台通用自动计算机UNIVAC-I交付使用。它不仅能作科学计算,而且能作数
11、据处理。 (2) 磁带鳃躋峽祷紉诵帮废掃減。UNIVAC-I第一次采用磁带机作外存储器,首先用奇偶校验方法和双重运算线路来提高系统的可靠性,并最先进行了自动编程的试验。 磁带是所有存储媒体中单位存储信息成本最低、容量最大、标准化程度最高的常用存储介质之一。它互换性好、易于保存,近年来,由于采用了具有高纠错能力的编码技术和即写即读的通道技术,大大提高了磁带存储的可靠性和读写速度。根据读写磁带的工作原理可分为螺旋扫描技术、线性记录(数据流)技术、DLT技术以及比较先进的LTO技术。 根据读写磁带的工作原理,磁带机可以分为六种规格。其中两种采用螺旋扫描读写方式的是面向工作组级的DAT(4mm)磁带机
12、和面向部门级的8mm磁带机,另外四种则是选用数据流存储技术设计的设备,它们分别是采用单磁头读写方式、磁带宽度为1/4英寸、面向低端应用的Travan和DC系列,以及采用多磁头读写方式、磁带宽度均为1/2英寸、面向高端应用的DLT和IBM的3480/3490/3590系列等。稟虛嬪赈维哜妝扩踴粜。(3) 磁鼓1953年,第一台磁鼓应用于IBM 701,它是作为内存储器使用的。磁鼓是利用铝鼓筒表面涂覆的磁性材料来存储数据的。鼓筒旋转速度很高,因此存取速度快。它采用饱和磁记录,从固定式磁头发展到浮动式磁头,从采用磁胶发展到采用电镀的连续磁介质。这些都为后来的磁盘存储器打下了基础。 磁鼓最大的缺点是利
13、用率不高, 一个大圆柱体只有表面一层用于存储,而磁盘的两面都利用来存储,显然利用率要高得多。 因此,当磁盘出现后,磁鼓就被淘汰了。 (4) 磁芯陽簍埡鲑罷規呜旧岿錟。美国物理学家王安1950年提出了利用磁性材料制造存储器的思想。福雷斯特则将这一思想变成了现实。为了实现磁芯存储,福雷斯特需要一种物质,这种物质应该有一个非常明确的磁化阈值。他找到在新泽西生产电视机用铁氧体变换器的一家公司的德国老陶瓷专家,利用熔化铁矿和氧化物获取了特定的磁性质。 对磁化有明确阈值是设计的关键。最先获得这些专利许可证的是IBM,IBM最终获得了在北美防卫军事基地安装“旋风”的商业合同。更重要的是,自20世纪50年代以
14、来,所有大型和中型计算机也采用了这一系统。磁芯存储从20世纪50年代、60年代,直至70年代初,一直是计算机主存的标准方式。 (5)磁盘沩氣嘮戇苌鑿鑿槠谔應。世界第一台硬盘存储器是由IBM公司在1956年发明的,其型号为IBM 350 RAMAC(Random Access Method of Accounting and Control)。这套系统的总容量只有5MB,共使用了50个直径为24英寸的磁盘。1968年,IBM公司提出“温彻斯特/Winchester”技术,其要点是将高速旋转的磁盘、磁头及其寻道机构等全部密封在一个无尘的封闭体中,形成一个头盘组合件(HDA),与外界环境隔绝,避免了
15、灰尘的污染,并采用小型化轻浮力的磁头浮动块,盘片表面涂润滑剂,实行接触起停,这是现代绝大多数硬盘的原型。1979年,IBM发明了薄膜磁头,进一步减轻了磁头重量,使更快的存取速度、更高的存储密度成为可能。20世纪80年代末期,IBM公司又对磁盘技术作出一项重大贡献,发明了MR(Magneto Resistive)磁阻磁头,这种磁头在读取数据时对信号变化相当敏感,使得盘片的存储密度比以往提高了数十倍。1991年,IBM生产的3.5英寸硬盘使用了MR磁头,使硬盘的容量首次达到了1GB,从此,硬盘容量开始进入了GB数量级。钡嵐縣緱虜荣产涛團蔺。 另一种磁盘存储设备是软盘,从早期的8英寸软盘、5.25英
16、寸软盘到3.5英寸软盘,主要为数据交换和小容量备份之用。其中,3.5英寸1.44MB软盘占据计算机的标准配置地位近20年之久,之后出现过24MB、100MB、200MB的高密度过渡性软盘和软驱产品。 懨俠劑鈍触乐鹇烬觶騮。(6)光盘光盘主要分为只读型光盘和读写型光盘。只读型指光盘上的内容是固定的,不能写入、修改,只能读取其中的内容。读写型则允许人们对光盘内容进行修改,可以抹去原来的内容,写入新的内容。用于微型计算机的光盘主要有CD-ROM、CD-R/W和DVD-ROM等几种。謾饱兗争詣繚鮐癞别瀘。(7) 纳米存储纳米是一种长度单位,符号为nm。1纳米=1毫微米,约为10个原子的长度。假设一根头
17、发的直径为0.05毫米,把它径向平均剖成5万根,每根的厚度即约为1纳米。与纳米存储有关的主要进展有如下内容。 1998年,美国明尼苏达大学和普林斯顿大学制备成功量子磁盘,这种磁盘是由磁性纳米棒组成的纳米阵列体系。一个量子磁盘相当于我们现在的10万100万个磁盘,而能源消耗却降低了1万倍。 1988年,法国人首先发现了巨磁电阻效应,到1997年,采用巨磁电阻原理的纳米结构器件已在美国问世,它在磁存储、磁记忆和计算机读写磁头等方面均有广阔的应用前景。 2002年9月,美国威斯康星州大学的科研小组宣布,他们在室温条件下通过操纵单个原子,研制出原子级的硅记忆材料,其存储信息的密度是目前光盘的100万倍
18、。这是纳米存储材料技术研究的一大进展。呙铉們欤谦鸪饺竞荡赚。1.4 FIFO设计技术简介1.4.1 基于信元的FIFO设计方法2设计者通常在FPGA上实现FIFO(先进先出寄存器)的时候,都会使用由芯片提供商所提供的FIFO。但是,由于其通用性使得其针对性变差,某些情况下会变得不方便或者将增加硬件成本。此时,需要进行自行FIFO设计。有一种基于信元的FIFO设计方法以供设计者在适当的时候选用。这种方法也适合于不定长包的处理。莹谐龌蕲賞组靄绉嚴减。以ATM的设计为例,在ATM的相关设计中,设计者则更多希望一个FIFO对外给出的信息是“现在FIFO中还剩下几个信元”。要实现这一功能通常有两种方法:
19、麸肃鹏镟轿騍镣缚縟糶。(1)调用厂商提供的以操作粒度为基本单元的通用FIFO,然后在这个FIFO的外面再加上一个“套子”。这个套子里面设计一些计数器,根据计数内容对外提供相应的信息。納畴鳗吶鄖禎銣腻鰲锬。(2)设计操作粒度为信元的定制FIFO。这样对外直接提供设计者最希望得到的信息,即FIFO中还有多少个信元。设定FIFO最多可以存放4个信元。基本单元为字节,因此RAM的数据宽度为8位,一个信元的长度为53字节。風撵鲔貓铁频钙蓟纠庙。把RAM分成4个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内的字节地址,这样组合成8位读写地址。读写双方的信息交换是互相通知对方还有多少个信元在F
20、IFO中。读写双方都拥有自己的记分牌(Scoreboard),这个记分牌可以由一个四位的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候,记分牌的相应的寄存器被设置为1,否则为0。读出方读出一个信元,修改自己记分牌的动作叫做清位。写入方写入一个完整信元,修改自己记分牌的动作叫置位。灭嗳骇諗鋅猎輛觏馊藹。从逻辑上说,只需要读出方把自己的记分牌的信息(清位信息)传送给写入方,同时写入方把自己的记分牌的信息(置位信息)传送给读出方就可以了,即只要构成两条逻辑通道就可以满足需求。但是,在硬件上的实现却要比这种只从逻辑上的思考要复杂。由于读写双方有可能处在不同的时钟域,所以当
21、读写双方交换信息的时候就需要处理信号采样的亚稳态情况。铹鸝饷飾镡閌赀诨癱骝。1.4.2 基于SRAM/DRAM的大容量FIFO的设计与实现2许多系统都需要大容量FIFO作为缓存,但是由于成本和容量限制,常采用多个FIFO芯片级联扩展,这往往导致系统结构复杂,成本高。攙閿频嵘陣澇諗谴隴泸。静态随机存取存储器SRAM(Static Random Access Memory)是一种非常重要的易失性存储器,它的速度非常快,并且能在快速读取和刷新时保持数据完整性。SRAM器件采用Hynix公司的HY64UD16322A。HY64UD16322A是高速、超低功耗32 Mbit SRAM,内部具有2 097
22、 152个16 bit字容量。采用了CMOS制造工艺、TTL电平接口以及三态输出,具有较大的输入电压和温度范围。同时HY64UD16322A支持DPD(Deep Power Down)模式,保证其在待机模式下功耗进一步降低。趕輾雏纨颗锊讨跃满賺。系统采用CPLD作为总控制器件。根据FIFO的特点,需要将SRAM按地址存储用程序控制成先进先出的结构。这里采用指针算法来实现这种结构设计:设置两个指针变量StartPos和EndPos。分别作为进入数据头尾指针。当有新数据写入时,数据从上一次存储最后位置的下一个位置开始存入一个数据,EndPos就自动加1,保持与最后数据位置同步。当EndPos超过整
23、个RAM的最大容量(RAM_SIZE)时,就需要循环返回,从0x000位置存放,一直到EndPos与StartPos重合。这时可以认为RAM已经存满。同理,读出数据时。起始位置StartPos自动加1。当StartPos超过整个RAM的最大容量时,就从0x000位置读取。一直到StartPos与EndPos重合,这时可以认为RAM已经读空。在这两个过程当中,CPLD需要对地址线进行控制。不难发现,写数据的时候Address与EndPos一致,读数据的时候Address与StartPos一致。夹覡闾辁駁档驀迁锬減。1.5 异步FIFO设计中存在的问题及解决办法11.5.1 亚稳态对于亚稳态的解决
24、方法主要有三种:1:对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。视絀镘鸸鲚鐘脑钧欖粝。2:采用两极触发器来同步异步输入信号。信号同步的目的是防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响。两级寄存器的同步化处理单元由两个触发器串联而成,中问没有其它组合电路。这种设计可以保证后面的触发器获得前一个触发器输出时,前一个触发器已退出了亚稳态,并且输出已稳定。但是,这种方法同时带来了对输入信号的一级延时,需要在
25、设计时钟的时候加以注意。偽澀锟攢鴛擋緬铹鈞錠。3:在信号从快时钟域向慢时钟域过渡时,如果信号变化太快,慢时钟将可能无法对该信号进行正确采样,即采样失败。所以在使用双锁存器法时,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器对其进行正确的采样。 对上述问题,一般采用“结绳法”的设计方法,将慢时钟周期信号通过分频的方式将其周期增长,经过双锁存采样以后再使其恢复原来的时钟周期。即用“结绳”将信号延长,用“同步”实现双latch采样,用“解绳”还原为原来的时钟,保证另一个时钟域也可以正确采样,而接收方用相反的流程送回响应信号。緦徑铫膾龋轿级镗挢廟。1.5.2 空/满指针的解决方法空/满标志产
26、生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:騅憑钶銘侥张礫阵轸蔼。空标志=(|写地址-读地址|=预定值)AND(写地址超前读地址)满标志=(|写地址-读地址|=预定值)AND(读地址超前写地址)最直接的做法是,采用读写地址相比较来产生空满标志。当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的
27、一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。 疠骐錾农剎貯狱颢幗騮。1.6论文主要内容第一章引言。简单介绍了所研究题目的发展状况,以及它的研究有意义。第二章FIFO工作原理简介。通过简单的与原理图介绍了异步FIFO的实现框图以及设计的相关技术和简要工作原理。镞锊过润启婭澗骆讕瀘。第三章FIFO的实现方法及技术。分析了异步FIFO的参数和设计的难点。第四章异步FIFO实现及主要方法。通过第二章第三章对异步FIFO具体介绍,在这张内容中,重点描述了异步FIFO的实现方法。榿贰轲誊壟该槛鲻垲赛。第五章总结。对异步FIFO的设计方法作了简要的总
28、结,简述了设计方法的不足之处,以及应采取的措施。 2 异步FIFO工作原理简介2.1关于异步信号9在许多情况下,数据在跨越时钟域时需要“堆积”起来,因此使用单个保持寄存器无法完成工作。例如一种情况是某个传输电路猝发式发送数据,接收电路来不及采样。另一种情况是接收电路采样速度超出传输电路发送数据的速度,但采样的数据宽度不够。这些情况就要使用 FIFO 了。基本上,人们使用 FIFO 有两个目的:速度匹配或数据宽度匹配。在速度匹配时,FIFO 较快的端口处理猝发的数据传输,而较慢的端口则维持恒定的数据流。但是,虽然访问方式和速度不同,但进出 FIFO 的平均数据速率必须是相同的,否则 FIFO 就
29、会出现上溢(oveRFlow)或下溢(underflow)问题。与单寄存器设计相同,FIFO 将数据保存在寄存器或存储器中,同时同步状态信号,判断何时可以把数据写入 FIFO 或从 FIFO 中读出。在速度匹配应用中,每个端口(读或写)的时钟不同。FIFO 中的寄存器使用写端口时钟,就像保持寄存器使用电路时钟来改变寄存器内容一样。信号同步发生在指针逻辑中,而且比握手信号要复杂得多。现在指针逻辑的设计有多种方法。第一种方法是将读、写选通进行同步,同时在各个时钟域使用计数器来跟踪 FIFO 中可用的项。计数器反映出可用于读写的 FIFO 项目号,计数器也与相应的端口同步。读计数器跟踪包含有效数据的
30、项数,而写计数器则跟踪可以存储数据的项数。当对指针逻辑进行复位时,由于没有数据可读,读计数器从零起始。写计数器则从 FIFO 中项的总数开始计数,即所有项均可用来存储数据。读选通信号累减读计数器,并与写时钟域同步,因为它同时也累加写计数器。写选通信号则累减写计数器,并与读时钟域同步,因为它同时也累加读计数器。这种设计需要单时钟宽度脉冲以及用于读、写选通的脉冲同步器,因为当一个电平信号从一个时钟域跨越到另一个更快的时钟域时,在较快时钟域中它能在更多的时钟周期中保持有效。由于只要读或写信号是有效的,每个计数器就会发生变化,因此较快的时钟域就检测到更多的读、写,超出较慢时钟域实际发生的数量。脉冲同步
31、器可以将一个时钟域的时钟宽度脉冲转换为新时钟域的时钟宽度脉冲,每个脉冲都表示一次 FIFO 的读或写。邁茑赚陉宾呗擷鹪讼凑。这种 FIFO 状态技术对读、写状态都不太有利。当 FIFO 中所有项均充满时,写端口状态指示为满,并在读选通触发后继续指示 FIFO 满,因为同步过程会使选通信号延迟送给写计数器。读端口为空时也会出现这种情况,因为同步过程会使写选通信号延迟到达读计数器。嵝硖贪塒廩袞悯倉華糲。这种设计的另一种考虑是及时检测全满/全空状态。如果 FIFO 还有一项可用,并且有写选通触发,则 FIFO 必须立即置为全满状态。这样才能提前一个时钟给出全满标志,使 FIFO 有足够时间防止下一个
32、数据写入而产生溢出。对 FIFO 的读端口也是这样。这种情况下,如果 FIFO 里只有一个数,并且有读选通触发,则必须置全空状态,以给读电路足够的时间防止读空 FIFO。该栎谖碼戆沖巋鳧薩锭。这种指针逻辑限制电路在每个时钟周期中访问 FIFO,即使在慢速时钟域中也是这样。这一功能的优点在于访问 FIFO 的电路至少有一个时钟周期来评估 FIFO 的状态。FIFO 可以将所有项都填满数据,而不会出现数据被覆盖或全空无数据可读的情况。这种设计的另一个优点是每一端都可以读其相应的计数器,来判断 FIFO 中还有多少项可用。人们可以将这种 FIFO设计用在进行多次数据读/写的电路中,而不会造成上溢或下溢的情况。这种设计的不足之处是由计数器来判断状态,而不是直接比较读、写指针。对大型 FIFO 来说,这些计数器也很大。而且,由于使用脉冲同步时,来自较快时钟域的读、写脉冲在较慢时钟域的脉冲间至少必须有两个时
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1