FPGA跨时钟域亚稳态研究
- 格式:doc
- 大小:31.50 KB
- 文档页数:5
(整理)FPGA中的亚稳态毛刺异步FIFO.1亚稳态1.1亚稳态的定义亚稳态是指触发器无法在某个规定时间段内达到一个确定的状态。
当一个触发器进入亚稳态时,该触发器的输出何时能稳定以及会稳定在哪个状态都不能确定。
在达到稳定之前的时间,触发器输出一些中间电平或者处于震荡状态,并且这种无用的输出电平可以沿着信号通路上级联的触发器传播下去。
1.2亚稳态的产生机制如果触发器的setup time、hold time不满足,就可能产生亚稳态,此时触发器的输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,这段时间称为决断时间(resolution time)。
经过resolution time 之后Q端将稳定到0或者1,但究竟是0还是1和输入没有关系。
图1是一个处于亚稳态的寄存器的输出的例子。
1.3亚稳态的危害与避免亚稳态会导致逻辑误判,如果发生亚稳态的部位对系统的稳定至关重要同时缺少防错机制,则可能导致系统崩溃(逻辑挂死)。
逻辑误判可以通过特殊设计减轻危害,例如异步fifo的gray设计。
比发生部位本身的逻辑误判更严重的是亚稳态传递。
亚稳态传递会扩大故障面,让问题变得复杂。
在完全同步的设计中,CAD工具可以方便的分析每一个触发器的建立保持时间。
理论上一个时序完全收敛的纯同步设计不会有亚稳态问题。
和有赖于时序分析的完备性,例如所使用的timing mode与实际芯片及其工作条件的吻合度,实际时钟抖动、偏斜与预期是否一致等。
扩大时序裕量可以降低亚稳态发生的概率。
当前一个数字芯片上往往有多个时钟域,时钟域之间的异步设计是必不可少的。
只要系统中存在异步设计,则亚稳态无法避免,但我们可以尽量限制亚稳态的影响范围并通过特殊的逻辑设计容忍可能的逻辑误判。
1.3.1缩小亚稳态的影响范围a.“将异步输出寄存器的扇出限制为1”如图2所示,让异步输出寄存器的扇出为1相当于减少了异步路径的条数。
若异步信号有多个输出,则可能因为路径延迟和时钟偏斜导致有的寄存器采到有效值,有的寄存器进入不确定的状态,如图2和图3所示。
1. 应用背景1.1 亚稳态发生原因在FPGA系统中,如果数据传输中不满足触发器的T su和T h不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。
这段时间称为决断时间(resolution time)。
经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。
1.2 亚稳态发生场合只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。
1.3 亚稳态危害由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。
在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。
在复位电路中产生亚稳态可能会导致复位失败。
怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。
2. 理论分析2.1 信号传输中的亚稳态在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。
亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。
它们发生的原因如下:(1)在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求;(2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求;当数据在目的寄存器Tsu-Th时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。
浅谈XLINX FPGA设计中跨时钟域的同步设计问题摘要本文介绍了FPGA设计中的同步设计原则并对FPG A设计中的触发器亚稳态问题进行了阐述本文通过具体的设计实例论证了跨时钟域同步处理的必要性并介绍了一种实现跨时钟域同步处理的方法和其具体电路关键字同步设计异步设计触发器亚稳态时序稳定一同步设计的原则尽量使用同步电路避免使用异步电路这句话是电路设计的几个原则之一同异步设计相比同步设计设计出来的电路更稳定可靠在XILINX FPGA设计中时常有设计人员遇到如下类似的问题设计的电路升级困难可移植性差也就是说一些原本工作正常的电路移植到高端的FPGA中就根本工作不起来了设计的电路一致性差同一电路设计每次布线后工作的结果不同设计的电路时序仿真正常但实际电路上却工作不起来设计的电路极易受毛刺的干扰通常这些类似的问题都于电路的异步设计有关二亚稳态图1 触发器的亚稳态示意图对于触发器当时钟沿到来时其输入要求是稳定的这时其输出也是稳定的但假如时钟沿到来时其输入也正在变化即翻转这时触发器会瞬时进入亚稳态通常触发器对输入信号都有一个建立时间的要求也即setup时间当这一建立时间得不到满足时触发器也会进入瞬时亚稳态如图1通常触发器即使进入亚稳态也会很快进入稳态但其输出值是不定的这有可能对使我们设计的FPGA模块尤其是哪些有复杂状态机的模块产生错误的逻辑对于亚稳态问题我们还应明白亚稳态问题并非指输出结果数据的不确定性而是指输出变化的时序不确定性遵循同步设计的原则有助于解决亚稳态问题使我们设计出稳定可靠的电路模块对于单时钟系统我们可以很方便地设计出稳定易于设计及仿真的同步单一时钟系统但在电信和数据通讯领域中我们设计的系统中往往具有多个时钟往往需要将数据或时序由一个时钟域传到另一个时钟域这类设计的难点在于实现不同时钟域之间数据和时序变化的稳定可靠地传递采用经验证的设计技术可以实现跨时钟域的同步设计进而设计出可靠工作的电路三跨时钟域的异步设计案例本人曾经设计过如下几个模块这些模块中的几个子模块分别工作在各自的时钟域中但在他们之间有着数据和时序的传递在设计这些模块的初始时并没有考虑到跨时钟域时序和数据传递的特殊性使得在系统上使用这些模块时出现过一些较为棘手的问题现把它们列举出来供大家研究模块一名称:芯片配置模块模块功能从平行口接收从PC 机下传的命令和参数产生相应的控制时序完成单板上芯片的配置模块结构框图图2 同步处理前芯片配置模块结构框图各子模块简介模块A 实现同PC 的平行接口PC 机控制程序通过操作并行口各个引脚把各个参数信息如数据地址信息传递到参数控制总线上并且发出相应的命令如start, write 等命令启动下层模块模块B 是一个状态机clk 是状态机的主时钟模块B 根据模块A 传来的命令启动相应的状态机完成从参数传递总线上获取参数信息或产生相应的配置时序完成芯片的正确配置在上图中模块A 中各寄存器都受控于并行口各引脚的状态它们在并行口引脚中stroble 引脚的上跳沿发生状态的迁移可以说stroble 引脚是模块A 的主时钟信号由上分析得模块A 和模块B 分属于两不同的时钟域时钟域A 和时钟域B中时钟域A 的主时钟为stroble, 时钟域B 的主时钟为clk 两时钟域的主时钟stroble 和clk 是不相关的它们之间的信号就为跨时钟域A 和时钟域B 之间的信号线其中write 信号线,start 信号线及回馈握手信号线用于实现控制时序的传递而参数传递总线用于实现数据的传递在如上的设计中没有对跨时钟域的时序控制线进行同步处理在系统使用此模块时出现如下的问题Parrel port with PCPC机上芯片配置命令并不能总是成功的启动模块B 中相应的状态机也即PC机上芯片配置命令并不能总是成功地实现芯片的正确配置芯片配置时序的不稳定性故障的偶然性故障的不可重复性模块二名称:突发调制器模块模块功能完成数据的突发调制模块结构框图图3 同步处理前突发调制器模块框图各子模块简介模块A 为突发调制器主控模块它的主时钟为CLKA它利用CLKA定时产生周期的Send_data信号去启动模块B中的状态机模块B为突发调制器时序控制模块它的主时钟是从专用调制器芯片送来的TXBITCLK时钟信号模块B根据模块A的触发信号启动相应的状态机产生相应的调制器控制时序专用调制芯片中的DPLL(数字锁相环)根据相应的设置参数以CLKB为参考时钟产生TXBITCLK时钟信号上图中R1R2为跳接电阻通过R1R2不同的焊剂方式可以改变CLKB时钟信号的时钟源在如上的设计中没有对跨时钟域的时序控制进行同步处理在系统使用此模块时出现如下的问题在R1短接R2断开情况下CLKA时钟信号和CLKB时钟信号共用一个时钟源晶体A,上述模块工作正常稳定在R1断开R2短接情况下CLKA 时钟信号的时钟源为晶体A CLKB 时钟信号的时钟源为晶体B 晶体A 和B 是两个独立不相关的晶体这时模块A 和模块B 工作于不同的时钟域(时钟域A 和时钟域B) 它们之间的信号就为跨时钟域A 和时钟域B 之间的信号线Send_data 信号和回馈握手信号线用于实现两时钟域之间控制时序的传递此时上述模块工作很不稳定模块B 中的状态机经常进入一种未知状态不能产生正确的调制器控制时序四 跨时钟域的同步设计的方法经对上述案例仔细地仿真和深入分析后笔者发现作成上述两模块工作不稳定的主要原因是没有按照同步设计的原则对跨时钟域的时序控制信号进行同步处理可以有好几种电路用于实现跨时钟域的时序控制信号的同步处理下面的电路模块Asy_syc 可以用于跨时钟域时序控制信号的同步处理Asy_inSyc_clkSyc_outTime periphery图4 Asy_syc 电路原理图上述电路的时序仿真图如下:图5 Asy_syc 时序仿真图由时序仿真图可以看出主时钟Syc_clk 的异步输入信号Asy_in 经该电路后输出同步于主时钟Syc_clk 的Syc_out 信号, 从而实现了异步信号的同步处理按照同步设计原则利用Asy_syc 模块对上述模块二(突发调制器模块)中跨时钟域的信号线Send_data 进行同步处理同步处理模块示意图如图6经实际电路验证得: 同步处理后突发调制器模块运行可靠稳定同样按同样的处理方式对上述模块一(芯片配置模块) 中跨时钟域的信号线进行同步处理经实际电路验证得: 同步处理后,芯片配置模块模块运行可靠稳定图6 同步处理后突发调制器模块框图五总结同步处理模块Asy_syc是一个很好的模块笔者用它和其它的简单模块实现了如下的功能:1. 上沿同步2. 脉冲同步3. 异步系统同步解决了好多Xilinx FPGA设计中棘手的问题参考资料XILINX FUNDATION3.1 TRAINING跨越异步时钟边界传输数据的解决方案 Peter Alfke。
高速数据的跨时钟域处理方法及验证侯宏录;齐晶晶【摘要】In order to solve the image acquisition and mismatch transmission rate in high speed image acquisition system,the internal storage resources of FPGA is used and the principles of asynchronous FIFO is introduced to analyze the meta-stable state and full/empty signal to achieve asynchronous FIFO using Verilog HDL and QuartusII tools macro module.The results show that the cross clock domain of high speed data transmission is achieved,when the write clock is 82 MHz and the read clock is 50 MHz.%为了解决高速相机数据采集和处理速率的不匹配问题,利用现场可编程逻辑门阵列内部存储资源,研究了高速、大容量异步 FIFO 的工作原理,提出了异步 FIFO 工作中的亚稳态和空/满标识问题,采用 Verilog HDL 编写时序代码和 QuartusII 工具宏模块定制两种方法实现异步 FIFO.研究结果表明:当写入时钟为82 MHz,异步 FIFO 可实现的读出时钟为50 MHz,实现了高速数据采集和传输系统的跨时钟域处理.【期刊名称】《西安工业大学学报》【年(卷),期】2015(000)006【总页数】7页(P434-440)【关键词】异步 FIFO;现场可编程逻辑门阵列;跨时钟域;数据传输【作者】侯宏录;齐晶晶【作者单位】西安工业大学光电工程学院,西安 710021;西安工业大学光电工程学院,西安 710021【正文语种】中文【中图分类】TM615随着微电子技术和图像传感器技术的发展,高速视频采集技术已经广泛应用于航天航空、医学图像分析、现代工业自动化生产、道路交通和科学研究中.高速视频采集系统能够记录肉眼无法分辨的过程,在后期回放过时,将高速过程清晰地展现出来,为数字图像处理、分析和目标识别等提供了依据.高速图像采集和处理系统中包含多个时钟,数据在不同时钟域传输的周期和相位完全独立,因此必须对采集到的数据进行跨时钟域处理才能保证数据的传输无丢失[1].对于不同时钟域间的数据传输,文献[2]提出了一种基于符号化模型检验工具SMV的异步先进先出队列(First Input First Output,FIFO)的模型验证方法,利用SMV对该系统模型和系统属性进行了验证,有效解决跨时钟域信号传输产生的亚稳态问题;文献[3]提出了一种在FPGA内实现高速异步FIFO的方法;文献[4]利用异步FIFO实现现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)与数字信号处理器(Digital Signal Processor,DSP)进行数据通信的方案,该方案具有传输速度快、稳定可靠和实现方便的优点;文献[5]主要针对多时钟域下的片上网络的数据同步进行了研究,分析了多时钟域下片上网络跨时钟域数据传输时的亚稳态问题.FPGA内部资源丰富,通常可根据需要将FPGA内部M9K存储器模块配置成单端口、简单双端口、真双端口随机存取存储器(Random Access Memory,RAM)、FIFO缓冲器及只读存储器(Read Only Memory,ROM)[6].利用FPGA 片内存储资源实现的异步FIFO是一种快速有效的解决方案,FPGA内部FIFO比外部FIFO芯片更能提高系统稳定性.本文为了实现高速视频采集和传输系统中数据的跨时钟域处理,提出了基于FPGA 的异步FIFO设计方案.该方案通过两种方式实现:①利用Verilog硬件描述语言(Hardware Description Language,HDL)来实现异步FIFO;②利用QuartusII工具中的宏模块调用实现异步FIFO.通过在高速视频采集和传输系统中的实验,验证了两种方法的正确性.1 异步FIFO工作原理异步FIFO是一种先进先出存储器,先进入的数据先读出,读时钟和写时钟互相独立[7].异步FIFO有两套数据线,可在一端进行写操作的同时在另一端进行读操作,在数据顺序传输的同时实现数据的缓存.1.1 异步FIFO结构异步FIFO包括写时钟域和读时钟域,异步FIFO的核心是由双端口RAM组成的存储单元.访问FIFO时不需要地址线,只需要数据线和读写控制信号线.在写时钟域,写端口对应写数据信号和写控制信号,写入的数据存储在双端口RAM中;在读时钟域,读端口对应读数据信号和控制信号,数据从双端口RAM中读出并送入下一级[8].异步FIFO最重要的控制信号Full(满)、Empty(空)、Almost Full(将满)、Almost Empty(将空)由写地址和读地址相互比较生成.异步FIFO存储器内部结构如图1所示.确定异步FIFO的空/满状态需要二进制读指针和写指针的比较.FIFO中的读写指针值随着读写操作的进行不断累加,当计数器满后返回并继续从0开始循环.图1 异步FIFO存储器内部结构Fig.1 The internal structure of asynchronous FIFO memory1.2 亚稳态的处理亚稳态是指触发器无法在规定时间内达到确定状态.当触发器进入亚稳态时,无法预测输出电平,也无法预测何时输出稳定在正确的电平上.在亚稳态期间,触发器输出中间电平或者振荡状态,输出电平沿信号通道上的各个触发器级联式传播下去.在数字电路中,为了保证每个寄存器的输入信号正确,所有器件的信号传输都有一定的时序要求,输入寄存器的信号必须在时钟沿的寄存器建立时间(Tsu)之前保持稳定,并且持续到时钟沿的寄存器保持时间(Th)之后改变,信号从寄存器的输入到输出需要经过一定的延迟(Tco).此时,系统的每一个寄存器都有一个稳定的状态1或者0,且寄存器的输出电压在下级门电路的噪声容限范围内[9].而如果信号的变化不在Tsu和Th的要求内,寄存器的输出会处在高电平1和低电平0之间,寄存器的输出达到高或者低的稳定状态时需要的时间大于Tco,即输出的电压处在下级门电路的噪声容限范围外时,则寄存器输出处于亚稳态.亚稳态通常发生在跨时钟域传递数据的系统中,由于数据信号可能在任何时间到达异步时钟域的目的寄存器,从而无法保证满足Tsu和Th的要求.图2所示为跨时钟域传输数据中的异步时钟,前级寄存器的工作时钟为clka,后级寄存器的工作时钟为clkb.当前一级的输入数据发生改变时,后一级电路在读数据的同时可能产生亚稳态.亚稳态不能够完全消除,只能使其出现的概率降低.由于二进制计数器从一个时钟域到另外一个时钟域同步计数时可能出现计数器的多位同时翻转,经过同步器后的数值产生多种结果,格雷码计数器每次累加操作后只有一个比特发生翻转,因此在进行时钟域转换时,不会出现其他不确定值,以便正确比较读写指针,准确产生空满信号.因此,采用格雷码可有效减少亚稳态的发生.本文在通过Verilog HDL实现异步FIFO时采用格雷码来降低亚稳态的出现概率.图2 异步时钟Fig.2 Asynchronous clock1.3 空/满标志异步FIFO中最重要的控制信号由读写指针相互比较生成.为了保证数据在FIFO中正确写入和读出,避免写满和读空的产生,判读空/满标志位的产生成为异步FIFO设计的关键.为解决上述问题,对指针进行附加位比较.为读写指针最高位增加一位附加位,当读指针读完存储器中的存储单元后,会向附加位进一,除附加位外的所有位均为零,写指针亦然.若读写地址指针的最高位不同而其余位相同时,表明写地址比读地址多产生了一个循环,即FIFO存储器为满.若读写地址指针所有位都相同时,表明读写地址指针循环次数相等,即FIFO存储器此时状态为空.综上所述,读写地址指针有n位地址空间,其中低n-1位用来存放FIFO的读写地址.2 异步FIFO的实现FPGA内部资源丰富,为了简化系统结构,通常可根据需要来配置FPGA内部存储资源.本设计中采用两种方法通过FPGA内部块RAM来实现异步FIFO,用于解决图像采集和处理两个模块不同时钟域的数据传输,异步FIFO缓存图像采集模块传输过来的图像数据,用于下级FPGA控制器按照数据传输格式读取数据,同时将像素数据作跨时钟域处理,系统采集到的图像数据由采集系统82MHz时钟控制写入异步FIFO,图像数据经异步FIFO缓存后,由图像处理模块从异步FIFO中读出.2.1 Verilog HDL实现异步FIFO本设计中,数据采集的分辨率为1 280×1 024,每个像素点包含RGB各8位的数据,一行传输的图像数据为1 280个24位的图像数据.异步FIFO接口信号说明见表1~2.表1 Verilog HDL实现的异步FIFO输入信号Tab.1 The input signal of asynchronous FIFO implemented by Verilog HDL信号名 wr_clk wr_rst wr_en data[23:0] rd_clk rd_rst方向输入输入输入输入输入输入位宽/位 1 1 1 24 1 1信号说明写时钟,数据采集的时钟82MHz写复位,高有效写使能,高有效,数据采集的输出写数据,数据采集的输出读时钟,50MHz读复位,高有效表2 Verilog HDL实现的异步FIFO输出信号Tab.2 The output signal of asynchronous FIFO implemented by Verilog HDL信号名 rd_en dout[23:0] aempty empty afull full方向输入输出输出输出输出输出位宽/位 1 24 1 1 1 1信号说明读使能,高有效读数据,数据从FIFO 输出将空标识信号空标识信号将满标识信号满标识信号结合上文对异步FIFO设计中的关键问题分析,给出Verilog HDL设计中二进制转格雷码及满信号产生的关键代码为二进制转格雷码类似可写出空标志位产生模块.2.2 QuartusII生成异步FIFO在EDA设计时可直接调用QuartusII软件中内置的宏模块来简化设计过程.本文使用Quartus II中MegaWizard宏模块向导定制FIFO,FPGA器件选择CycloneIV,定制FIFO时需要设置FIFO的数据宽度、深度和类型等参数.FIFO类型选择异步,数据宽度选择24位,深度选择1 024,即定制1 280个位宽24位存储深度1 024的缓存单元.利用宏模块定制的异步FIFO生成的信号见表3~4.表3 QuartusII生成的异步FIFO输入信号Tab.3 The input signal of asynchronous FIFO implemented by QuartusII信号名 wrclk wrreq data[23:0] rdclk rdreq wrfull方向输入输入输入输入输入输出位宽/位 1 1 24 1 1 1信号说明写时钟,数据采集的时钟82MHz写请求,高有效写数据,数据采集的输出读时钟,50MHz读请求,高有效FIFO满信号,高电平有效表4 QuartusII生成的异步FIFO输出信号Tab.4 The output signal of asynchronous FIFO implemented by QuartusII信号名 wrempty wrusedw [9:0] q[23:0] rdfull rdempty rdusedw[9:0]方向输出输出输出输出输出输出位宽/位 1 10 24 1 1 10信号说明FIFO空信号,高电平有效FIFO中字节数,与写时钟同步读数据,数据从FIFO输出FIFO满信号,高电平有效FIFO空信号,高电平有效FIFO中字节数,与读时钟同步当写请求wrreq为高电平时,在写时钟wrclk的上升沿,将24位的像素数据data[23:0]在82 MHz时钟周期下写入FIFO的写指针的指向单元,同时写指针加1,写指针指向下一个要写入的数据单元,直到wrreq为低电平或wrfull为高电平时停止写入数据,已写入的数据按行存储.当读请求rdreq为高电平时,在读时钟rd_clk的上升沿,将24位像素数据q[23:0]在50MHz时钟周期下从读指针指向单元读出,同时读指针加1,读指针指向下一个数据单元,直到rdreq为低电平或rdfull为高电平时停止数据读出.3 异步FIFO性能测试结果及分析高速视频采集系统结构如图3所示,为了测试本文设计的异步FIFO是否满足要求,首先对设计进行了仿真验证,再将验证后的异步FIFO应用到高速视频采集系统中,通过观察系统显示结果,判断设计出的异步FIFO适合本系统.图3 系统结构框图Fig.3 The system structure diagram3.1 逻辑代码仿真验证使用Verilog HDL编写测试脚本和测试用例,调用第三方软件ModelSim进行仿真验证如图4所示,得到FIFO中的信号输出波形图.图中显示异步FIFO的写入时钟wr_clk频率高于读出时钟rd_clk频率,当写使能wr_en信号为高时,数据在写时钟的上升沿写入RAM.在读出时钟rd_clk的上升沿,当读使能rd_en 信号为高时,数据在读时钟的上升沿由RAM中读出.当将满标识信号afull有效时,在时钟信号的下一个上升沿停止写操作,写满wr_full信号有效.当将空标识信号aempty有效时,在时钟信号的下一个上升沿停止读操作,读空rd_full信号有效.图4 异步FIFO仿真验证Fig.4 The simulation and verification of asynchronous FIFO3.2 系统性能测试本设计应用于高速视频采集和传输系统,采集系统输出8路视频数据,数据经过设计的异步FIFO后,传输给FPGA控制板,最后在FPGA控制下图像数据以60Hz的刷新频率显示在液晶显示器上.采集系统用到的时钟为82MHz,即FIFO的写入时钟应为82MHz.用示波器跟踪数据写入FIFO时的时钟得到波形如图5所示,波形显示为82MHz.图5 异步FIFO写入时钟Fig.5 The write clock of asynchronous FIFOFPGA控制板的时钟为50MHz,即FIFO的读出时钟应为50MHz.用示波器跟踪数据从FIFO中读出的时钟得到波形如图6所示,波形显示为50MHz.图6 异步FIFO读出时钟Fig.6 The read clock of asynchronous FIFO采用Verilog HDL时序代码和QuartusII工具宏模块定制两种方法实现的异步FIFO经过仿真验证后,在Altera公司Cyclone IV系列的FPGA芯片EP4CGX150DF31上进行实验验证,在满足高速视频采集系统技术指标的前提下,对静态目标进行实时采集,将采集到的图像经过异步FIFO缓存后,通过液晶显示屏观察显示效果.利用高速视频采集系统拍摄室外行驶的汽车,采集到的图像经异步FIFO做跨时钟域处理后,通过液晶显示器显示,得到4帧连续的图像,如图7所示.由图7可以看出,高速相机采集到的图像数据经过异步FIFO缓存后,在显示器上按照从左向右,从上到下的方式扫描显示出来,与异步FIFO先进先出的工作原理一致.表明本文设计的异步FIFO切实可行.图7 跨时钟域处理后的图像Fig.7 The image processing of the cross clock domain3.3 测试结果分析通过对采集到的高速数据进行跨时钟域处理,从液晶显示器显示的画面可知:异步FIFO性能达到了技术指标要求,但在调试过程中画面出现抖动,经过分析发现在数据写入异步FIFO的过程中同步信号未严格对齐;采集到的高速数据经异步FIFO做跨时钟域处理时,未对采集的曝光进行调整,曝光时间太短,图像显示过暗;本文设计的异步FIFO带有空/满标志位,导致信号通路延时对整个系统工作频率产生制约,为了避免上述问题,可在异步FIFO设计中省略“满”信号,只保留“空”信号产生模块.4 结论1)本文基于高速视频采集和传输系统,提出了异步FIFO储器解决跨时钟域传输数据的解决方案.在分析异步FIFO工作原理的基础上,结合FPGA内部存储资源,采用两种方法实现异步FIFO的设计,分别是Verilog HDL编写逻辑代码实现的异步FIFO和Quartus II中MegaWizard宏模块向导定制的异步FIFO.2)采用Verilog HDL编写时序代码实现的异步FIFO将二进制的指针改为格雷码,有效减少了数据缓存过程中亚稳态,并在空/满信号产生的同时避免了写满和读空的产生.本文设计的异步FIFO具有良好的通用性和可移植性.通过Quartus II中MegaWizard宏模块向导定制的异步FIFO快速有效,在结构相对复杂的系统中可大大简化系统结构.3)对文中设计的异步FIFO,通过实验验证,解决了高速数据采集和传输系统的前后数据传输速率不匹配问题,满足预期设计目标,为后续的研究工作奠定基础.【相关文献】[1]卢博,王军.异步FIFO在DSP图像采集系统中的应用[J].单片机与嵌入式系统应用,2015,32(1):57.LU Bo,WANG Jun.Application of Asynchronous FIFO in DSP Image Acquisition System[J].Micro-controllers and Embedded Systems,2015,32(1):57.(in Chinese)[2]刘彬.异步FIFO的设计与形式化验证[D].长沙:国防科技大学,2011.LIU Bin.Design and Formal Verification of Asynchronous FIFO[D].Changsha:National University of Defense Technology,2011.(in Chinese)[3]黄忠朝,赵于前.一种实现高速异步FIFO的FPGA方法[J].计算机工程与应用,2010,46(3):13.HUANG Zhong-chao,ZHAO Yu-qian.Implementation Method of High Speed Asynchronous FIFO U-sing FPGA[J].Computer Engineering and Applications,2010,46(3):13.(in Chinese)[4]胡波,李鹏.异步FIFO在FPGA与DSP通信中的运用[J].电子科技,2011,24(3):53.HU Bo,LI Peng.Application of Asynchronous FIFO in Communication Between FPGA and DSP[J].Electronic Science and Technology,2011,24(3):53.(in Chinese)[5]赵文晗.多时钟域下片上网络同步研究[D].成都:电子科技大学,2013.ZHAO Wen-han.Research on Synchronous Multi-Clock-Domain Network-on-Chip[D].Chengdu:University of Electronic Science and Technology of China,2013.(in Chinese)[6]施华钧.高效异步FIFO的设计实现[D].长沙:湖南大学,2013.SHI Hua-jun.Design and Implementation of Efficient Asynchronous FIFO[D].Changsha:Hunan University,2013.(in Chinese)[7]向厚振,张志杰,王鹏.基于FPGA视频和图像处理系统的 FIFO 缓存技术[J].电视技术,2012,36(9):41.XIANG Hou-zhen,ZHANG Zhi-jie,WANG Peng.FIFO Cache Technology in Video and Image Processing System Based on FPGA[J].Video Engineering,2012,36(9):41.(in Chinese)[8]庾志衡,叶俊明,邓迪文.基于FPGA与DDR2SDRAM的大容量异步FIFO缓存设计[J].微型机与应用,2011,30(4):34.YU Zhi-heng,YE Jun-ming,DENG Di-wen.ADesign of High Speed and Deep Asynchronous FIFO Based on FPGA and DDR2SDRAM [J].Microcomputer &Its Applications,2011,30(4):34.(in Chinese)[9]司岚山.一种高速大容量异步FIFO存储器的设计[D].无锡:江南大学,2013.SI Lan-shan.Design of High Speed and Large Capacity Asynchronous FIFO Memory[D].Wuxi:Jiangnan University,2013.(in Chinese)。
有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。
换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口。
虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。
FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。
本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。
这里以及后面章节提到的时钟域,是指一组逻辑,这组逻辑中的所有同步单元(触发器、同步RAM块以及流水乘法器等)都使用同一个网络作为时钟。
假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域。
假如设计有两个输入时钟,如图1所示,一个时钟给接口1使用,另一给接口2使用,那么我们说这个设计中有两个时钟域。
图1:双时钟域设计平时我们在设计中遇到的门控时钟、衍生时钟以及事件驱动的触发器都可归为时钟域类别。
如图2所示,通过一个简单门控时钟创建了一个新的时钟域。
我们知道,这类时钟控制在FPGA设计中并不被推崇(可以使用时钟使能替代时钟门控),然而它却非常有利于我们理解时钟域这一概念。
本章我们将着重详细讨论以下主题:•两个不同时钟域之间传输信号。
•亚稳态的产生以及对设计的可靠性的影响•通过相位控制避免亚稳态•在时钟域之间传输单个信号,将信号打两拍•使用FIFO在时钟域之间传输多位数据•使用分区同步器模块提高设计的组织架构•处理ASIC验证原型里的门控时钟•建立一个单时钟模块•自动门控移除图2:通过门控时钟创建的时钟域一、跨时钟域设计中包含多时钟域,首先要解决的是在不同时钟域之间传输信号的问题。
信号跨时钟域传输将会是一个大问题,原因如下:1、信号跨时钟域传输产生的故障总是不太容易复现。
第一章绪论 1第一章绪论1.1 论文产生的背景对于研发人员来说,可靠性是必须保证的设计目标之一。
为了验证系统的可靠性,产品在出厂前都会进行大量的整机测试,包括常温测试、高低温测试直到最终的外场测试,这些测试需要耗费大量的人力和物力。
对于开发人员来说,通常这个阶段出现的问题也是最头疼的,因为其中很多属于偶发性故障,难以复现。
比如芯片上电初始化配置经常失败,或者正常运行的系统突然发生复位,或者网口突然发生阻塞,或者常温下的通过的指标,在进行高低温实验的时候出现了恶化。
整机测试不同于平时研发的单板测试,测试手段受到很多限制。
比如由于单板装入了机壳,就不能使用JTAG口进行实时监测,也不能使用示波器排查。
但是如果在开发初期,设计者能够对系统的各个环节进行认真的评估,充分考虑了可靠性问题,那么在面对测试阶段层出不穷的故障时便能轻松一些。
关于可靠性问题,几乎所有的研究资料都推荐使用同步设计解决,因为同步设计可以保证时钟触发沿避开输入数据发生变化的区域,这也就避免了不稳定采样。
的确,实际中复杂逻辑电路均采用同步设计,FPGA厂家也只对客户的同步设计给予技术支持。
但是同步设计并非不需要考虑异步问题,因为绝大多数的设计都需要与外界通信,比如某项目中的FPGA的外围设备包括CPLD、CPU、DSP 和大量的射频芯片,这些外围器件的工作时钟与FPGA的工作时钟没有任何关系。
因此,每次FPGA与这些外围设备通信都面临着失败的风险,如何降低通信故障率是设计中的一个难点。
本文将围绕异步信号对同步系统的影响进行详细的理论分析,从数字电路的结构出发讨论亚稳态发生的根源,并结合FPGA实际设计经验介绍几种解决方法。
1.2 发展历史输入数据与采样时钟发生沿打沿(marginal trigger)的情况,双稳态电路不能在规定的时间(由厂家定义)进入稳态的现象称为亚稳态。
一旦双稳态电路进入亚稳态,那么在亚稳态停留的时间将不可预知。
在这段时间里,双稳态电路输出的电压处于非法的逻辑电平区间,具体的电压值无法预测,输出还可能发生振荡。
异步时钟域的亚稳态问题和同步器(Z)Metastability in the asynchronous clocks and Synchronizer摘要:相较纯粹的单一时钟的同步电路设计,设计人员更多遇到的是多时钟域的异步电路设计。
因此,异步电路设计在数字电路设计中的重要性不言而喻。
本文主要就异步设计中涉及到的亚稳态问题,作简要介绍,并提出常用的解决办法——即同步器的使用。
关键词:异步电路设计、亚稳态、同步器。
Abstract: Compared with the pure one-clock synchronous designs,the designers more often deal with the multi-clock asychronous designs. Therefore, asynchron ous circuit design is very important in the field of digital circuit design. This paper briefly describes the problematic metastability in the asynchronous design s and presents a regular solution——synchronizer.Key words: Asynchronous circuit design, Metastability, Synchronizer.毫无疑问,单一时钟域的电路设计是数字电路中最基本的技能,其时序分析(T iming Analysis)也是最简单的。
与之相对,在多时钟域中跨时钟域传输信号易出现亚稳态,加上自动时序分析工具对异步信号处理的力不从心,这些都使得多时钟域的异步设计和分析较为困难。
不幸的是,现实世界是异步的。
如我们常常看见的键盘输入、磁盘文件传输、UART(通用异步收发器)等等,都是异步时序的事例。
跨时钟域问题处理在FPGA设计中,不太可能只⽤到⼀个时钟。
因此跨时钟域的信号处理问题是我们需要经常⾯对的。
跨时钟域信号如果不处理的话会导致2个问题:(1) 若⾼频率时钟区域输出⼀个脉冲信号给低频率时钟区域,则该脉冲很有可能⽆法被采样到,⽰意图如下,clk2根本采样不到pulse,但是从原理上来说,低频时钟是⽆法完全去采样⾼频信号的,这⾥⾯⼀定会丢失信息。
这是⽆法避免的。
(2) 亚稳态问题在说明亚稳态之前,我们需要先了解什么是建⽴时间和保持时间建⽴时间:在时钟沿到来前,被采样信号应该提前⼀段时间就进⼊稳定状态,这个时间称为建⽴时间保持时间:在时钟沿到来后,被采样的信号应该保持稳定⼀段时间,这个时间称为保持时间⽽亚稳态就是建⽴时间和保持时间不满⾜导致的。
如下图所⽰,就是建⽴时间不满⾜,造成dout是个不确定值,即亚稳态。
很多新⼈以为亚稳态仅仅是逻辑上的障碍,其实亚稳态是实实在在的电路上的问题。
模拟电路中,三极管主要⼯作在其放⼤区间,⽽在数字电路却是要⼯作在截⾄态。
亚稳态⾮常类似模拟电路中的放⼤态,这个状态将使得器件的输出电流被放⼤,如果这个状态被传递,那么将导致更多的电路处在放⼤电路的⼯作状态中,这将引起巨⼤的电流和功耗,甚⾄烧毁芯⽚,所以,跨时钟域是⼀定会出现亚稳态的,但是我们必须要把亚稳态控制在⼀个很⼩的范围内。
这就是为什么要在其后⾯再⽤⼀个寄存器的原因。
它的功能就是把亚稳态仅仅限制在那⼀个寄存器的⼩区域。
亚稳态会造成严重的后果。
就像将军发命令⼀样,若其发出的是⼀个亚稳态的命令,⼠兵A可能判定这个命令为进攻,⼠兵B可能判定这个命令为撤退,这将引起极⼤的混乱。
解决⽅案:1,握⼿操作(⾼频信号要进⼊低频时钟域)针对问题1中所描述的情况,即快时钟域传递⼀个脉冲信号到慢时钟域,慢时钟域很有可能采样不到该脉冲。
这时就需要采⽤握⼿操作来解决了。
⾸先,快时钟域应该将脉冲信号转换为⼀个持续信号,慢时钟域采样到该持续信号后,返回⼀个反馈信号,告知块时钟域将持续信号拉低。
FPGA跨时钟域亚稳态研究【摘要】在FPGA电路设计中,一个系统可能包含了很多跨时钟域的时钟信号,当其目标域时钟与源域时钟不同时,如何在这些不同域之间传递数据成为了一个重要问题。
特别是在中心模块与外围电路芯片的通信设计中,容易导致亚稳态的跨时钟域就不可避免。
针对FPGA设计中的亚稳态问题,本文给出了一系列行之有效的解决方法,很好地抑制亚稳态,提高系统可靠性。
【关键词】亚稳态;建立时间;保持时间;异步FIFO;握手协议1.引言在FPGA同步时序电路设计中,即所有时钟寄存器的时钟共享一个时钟,可以有效地消除亚稳态。
然而,许多实际应用要求在同一个可编程逻辑器件内采用多个时钟,且核心模块与外设的通信设计也涉及跨时钟域的数据传递。
跨时钟的异步时序电路含有的多个时钟源,它们存在频率和相位的差异,当它们用作寄存器的输入时钟时,就可能违背建立时间和保持时间的要求,出现亚稳态[1-5]。
亚稳态问题是跨时钟域异步数据传输过程面临的主要问题。
在FPGA设计中,每种触发器都有时序要求。
“建立时间”(Setup time)是指在时钟沿到来之前,触发器输入信号必须保持稳定的时间。
”保持时间”(Hold time)则是指在时钟沿之后,信号必须保持稳定的时间。
这些指标通常比较保守,以应对不同的PVT(工艺、电压、温度)环境下时序各有差异的情况。
如果一个设计满足了这些时序要求,则触发器出现错误的可能性可以忽略不计。
亚稳态是当信号在跨时钟的异步电路中或是无关的时钟域之间传输时导致数字系统失效的一种现象。
为了使触发器能够正确捕获并输出数据,FPGA的信号传输数据信号都会有一定的时序要求,为了确保可靠的操作,输入寄存器的数据信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变。
寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco)。
如果数据信号的变化违反了Tsu和Th的要求,那么寄存器的输出就会处于亚稳态[6]。
此时,寄存器的输出会在高电平1和低电平0之间盘旋一段时间,这也意味着寄存器的输出达到一个稳定的高或者低电平的状态所需要的时间会大于Tco。
随着跨时钟域设计的愈发常见和复杂化,只要系统中存在跨时钟域,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。
前者要靠同步来实现,而后者根据不同的设计应用有不同的处理办法。
2.FPGA设计中的亚稳态2.1 亚稳态在FPGA设计中,数据信号在不同时钟域间传递,最容易产生亚稳态,即触发器无法在时序要求的规定时间段内达到一个可确认的状态。
数据信号在传输过程中触发器的建立时间或保持时间不满足时序要求,即信号在稳定前的状态,一般是由于时序余量不够,使得电路的输入电平无法上升或下降到所需逻辑电平1或0。
2.2 亚稳态分析跨时钟异步输入信号可以在任何时间点翻转,它与下级同步采样信号没有必然联系。
此外,在数据翻转前,设计者无法预知该被采样信号的时钟沿或翻转顺序,也就不能保证信号满足建立时间。
无法保证稳定的采样,给跨时钟域的FPGA 设计带来难题。
跨时钟域的转换的核心就是要保证下级时钟对上级时钟数据的采样的Tsu 和Th时间。
如果触发器的Tsu时间或Th时间不能满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后较长时间处于不确定状态,在这段时间内Q端产生毛刺并不断振荡,最终固定在某一个值,这个值不一定等于原来数据输入端口D的数值,这短时间称为判决时间(Resolution time),经过Resolution time之后Q端经稳定到0或1上,但究竟是0还是1,是随机的。
与输入没有必然的联系。
如图1所示,时钟CLK_A在上升沿时采样数据DATAIN,数据信号data是时钟CLK_A同步产生的,输入信号data对下一级的触发器的时钟CLK_B是跨时钟的异步信号,由于data的变化与CLK_B时钟域时钟的采样边沿太接近,未满足采样建立时间,造成的亚稳态周期。
输出DATAOUT传递到后面的组合逻辑会产生不定状态,若在进入下一级采样前还没有进入稳定状态,就会导致系统混乱。
亚稳态的危害主要是破坏系统的稳定性。
由于输出在稳定前可能有毛刺、振荡、固定的某一电压值,因此亚稳态将导致逻辑误判,严重的情况输出0~1之间的电压值还会使下一级产生亚稳态,即亚稳态的传播。
逻辑误判导致功能性错误,而亚稳态传播则扩大故障面。
另外,在亚稳态下,电源干扰、环境噪声、工作温度等细微的扰动都可能导致更恶劣的状态不稳定,这时系统的传输延迟增大,状态输出错误。
3.FPGA跨时钟解决方案FPGA设计中,要减少亚稳态导致的错误并使系统对产生的错误不敏感,就要正确定义和处理FPGA内部与外部时钟之间的接口。
对于异步或无关时钟域间传输的信号,在FPGA本地时钟域使用该信号前,必须对其进行同步。
同步器的功能是采样异步输入信号,使产生的输出信号满足同步系统对建立时间和保持时间的要求,从而抑制亚稳态对电路的影响。
在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输,这些复杂的情况,就需要应用握手协议和异步FIFO的手段来处理这些情况。
因此处理跨时钟域常用的方法有两级触发器同步法、握手协议和异步FIFO法3种。
3.1 两级寄存器同步法为了避免进入亚稳态,通常采用的方法是使用两级寄存器,即一个信号要进入另外一个时钟域之前用另一时钟域的时候进行两次寄存,在图2中,左边为异步的输入端,经过两级触发器采样,在右边的输出与时钟CLK_B同步,而且该输出基本不存在亚稳态。
其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK时钟周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。
理论上如果再添加一级寄存器,是同步采样达3级。
则末级输出为亚稳态的概率几乎为0。
因此使用两级寄存器采样可以有效地减少亚稳态继续传播的概率。
使用图2所示两级寄存器采样不仅能降低亚稳态的概率。
但是并不能保证第二级的输出的稳定电平就是正确的电平。
前面说过经过Resolution time之后寄存器输出电平是一个不正确定的稳态值。
也就是说这种处理方法不能排除采样错误的产生。
这时就要求所设计的系统对采样错误有一定的容忍度。
有些应用本身就对采样错误不敏感,有些系统对错误采样比较敏感,可以采用一些纠错编码手段完成错误的纠正。
3.2 握手协议握手协议是实现总线数据跨时钟域通信的一种有效方法,它能在避免亚稳态传播的同时正确地捕获总线数据。
握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应。
使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req、ack)分别使用脉冲检测方法进行同步。
在具体实现中,首先,电路A声明它的请求信号,即先把数据放入总线,随后发送有效的请求req信号给电路B。
然后,电路B检测到有效的req信号后锁存数据总线,声明它的响应信号,即回送一个有效的ack信号表示读取完成应答。
当电路A检测到电路B回应的响应信号有效后,中止自己的请求信号,即撤销当前的req信号。
最后,当电路B检测到电路A的信号req撤销后也相应撤销ack信号,此时完成一次正常握手通信。
此后,可以继续开始下一次握手通信,如此循环。
该方式能够使接收到的数据稳定可靠,有效的避免了亚稳态的出现,以上所述的通信流程如图3所示。
信号跨越一个时钟域要花两个时钟周期的时间,信号在跨越多个时钟域前被电路寄存。
全部的时间序列是:A时钟域中最多五个周期加上B时钟域最多六个周期。
握手有效的避免了亚稳态的出现,因为通过检测请求与响应信号,每个电路都清楚地知道对方的状态。
但控制信号握手检测会消耗通信双方较多的时间,完成所有交互的整个过程要花费很多时钟周期。
3.3 异步FIFO异步FIFO[7-8]是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个跨时钟异步时钟之间的数据传输。
使用一个异步FIFO在两个时钟域的交界处通信,通过它来实现数据流的传输。
由发送时钟域将数据写入,接收时钟域将数据取出,在数据传输的同时实现了数据的缓存,因此是一种较理想的方法。
由图4可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。
在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。
在空/满标志产生部分,由读写地址相互比较产生空/满标志。
不同时钟域间数据传递的问题及其解决方法不同时钟域间数据传递的最重要问题就是亚稳态问题。
当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。
此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败,同样会产生亚稳态。
但是通过设计改进可以将其发生的概率降低到一个可以接受的程度。
在FIFO设计中,FIFO指针逻辑使用了格雷码,代替指针使用的二进制码。
格雷码在每一次计数增减时只改变其中的一位。
你可以在格雷码总线上使用同步器,因为每一次总线改变时只有一根信号线有变化,于是就消除了格雷码总线各位通过不同同步器时的竞争情况,降低了亚稳态的产生,在异步FIFO设计中,通过提高空/满标志产生逻辑的可靠性,能够很好地抑制亚稳态,进一步的降低了亚稳态的产生。
4.结语在FPGA跨时钟域设计中,亚稳态与设计可靠性有着密切的联系。
本文探讨分析了跨时钟域亚稳态的产生机制及FPGA设计中亚稳态问题的解决方法,提出的这些方法行之有效。
传输在不相关时钟域的信号,都有可能在相对于捕获寄存器时钟沿的任何时间点变化。
因此,设计者无法预测信号变化的顺序或者说信号两次变化间经过了几个锁存时钟周期。
设计者必须考虑到电路的这些情况,在实际应用中,设计者可根据具体的实际情况而使用异步FIFO传输信号或者使用握手信号进行控制。
一般情况下两级寄存器同步适合步时钟域之间单信号传输;当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信;总线数据同步、高速数据传输、数据在跨越时钟域时需要存储容量大的缓冲时则可以采用异步FIFO。
这些措施能够有效解决FPGA设计中跨时钟域的亚稳态问题,能实现数据跨越时钟域的安全传递。
参考文献[1]夏字闻.Verilog数字系统设计教程(2版)[M].北京:北京航空航天大学出版社,2008.[2]魏堃.跨时钟域信号同步技术研究[D].西安:西安电子科技大学,2009.[3]Michelle Lange.Automated CDC verification protects complex electronic hardware from metastability failures.Mentor Graphics Corporation.Aug.2008.[4]孟宪元,译.高级FPGA设计结构、实现和优化[M].北京:机械工业出版社,2009.[5]徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(2):171-172.[6]吴小蕻.跨时钟域若干问题的研究-同步与亚稳态[D].合肥:中国科学技术大学,2008.[7]杨青山,蔡敏.基于多时钟域的异步FIFO设设计[J].中国集成电路,2007(9):36-39.[8]于海,樊晓桠.基于FPGA异步FIFO的研究与实现[J].微电子学与计算,2007.。