异步多时钟系统的同步设计

合集下载

异步时钟数据同步方法

异步时钟数据同步方法

异步时钟数据同步方法异步时钟数据同步是指在不同状态、速率或时钟域的两个电子设备之间传输数据时,确保数据的正确性和同步性。

因为不同的状态、速率或时钟域可能导致数据传输的不同步,容易引发数据错误或丢失。

为了解决这个问题,可以采用以下几种方法进行异步时钟数据同步。

1. 同步异步转换器(Synchronizer):同步异步转换器是常用的一种方法,它可以将两个不同时钟域的信号之间建立同步关系。

通常,一个同步异步转换器由两级触发器(Flip-flop)构成。

第一级触发器根据初始时钟域的时钟信号进行触发,而第二级触发器根据目标时钟域的时钟信号进行触发。

这样,可以确保在目标时钟域接收到正确同步的数据。

2. 异步FIFO(First-In-First-Out):异步FIFO是一种具有先进先出功能的存储器,可以在不同时钟域之间传输和同步数据。

异步FIFO通常包括读指针和写指针,用于控制数据的读写和同步。

读指针和写指针的控制逻辑可以根据不同时钟域的时钟信号进行同步,保证数据的正确传输。

3.异步协议:异步协议是一种用于处理异步时钟数据传输的特殊协议。

异步协议通常包括一些额外的控制信号和状态机,用于保证数据的正确传输和同步。

异步协议可以根据不同时钟域的时钟信号进行同步,并且可以在传输数据之前进行握手、校验和错误处理。

4.异步握手协议:异步握手协议是一种用于在异步时钟数据传输中进行数据同步的协议。

异步握手协议通常包括一些额外的控制信号和状态机,用于确保数据的正确传输和同步。

异步握手协议可以根据不同时钟域的时钟信号进行同步,并且可以在传输数据之前进行握手、确认和错误处理。

5.异步串行通信接口:异步串行通信接口是一种用于在不同时钟域之间进行数据传输的接口。

异步串行通信接口通常包括一些特殊的编码和解码技术,用于确保在不同时钟域之间传输的数据的正确性和同步性。

异步串行通信接口可以根据不同时钟域的时钟信号进行同步,并且可以在传输数据之前进行握手、校验和错误处理。

FPGA异步时钟设计中的同步策略

FPGA异步时钟设计中的同步策略
维普资讯
经 验 交流
Te hnc l mmu ia in c ia Co nc t s o
‘ 自动化技 术与应 用'06 20 年第 2 卷第 1 5 期
FG P A异 步 时钟 设 计 中 的 同 步 策 略
廖 艳 。王 广君 。高 杨
武汉 40 7 ) 304 ( 中国地质大学 信息工程学 院 ,湖北

维普资讯 http:பைடு நூலகம்/
‘ 动 技 应 ) o年 5 第1 自 化 术与 用 2 6 第2卷 期 o
经 验 交 流
T c nc l m mu i in e h ia Co nc o s at
间 内发 生 变 化 , 时 b dt 既 不 是 逻 辑 … ’也 不 是 逻 辑 … ’ 此 a就 1, 0,
2 异 步设 计 中的亚 稳态
触发器是 F G P A设计 中最 常用 的基本器 件 。触发 器工作 过 程 中存在 数据 的建立(e p和保 持 (o ) st ) u hl 时间 。对 于使 用上 升 d 沿触发 的触发器来 说 , 建立时 间就是在 时钟上 升沿到来之前 , 触 发器数据端数 据保 持稳 定的最小时间 。而保持时 间是 时钟上 升
个 时间参 数内 , 入 信号 在时 钟 的上 升沿 是 不允 许发 生 变化 输
信号 dt a 经过一个锁存器 的输 出数据 为 a a —dt 时钟 b— 。用
收稿 日期 :05 8 9 20 —0 —2
c【 l 进行采样 的时候 , I 如果 a 吐正好在 b e —d l 8t 一hl k的 e 叩 o d时

要 :P A异步 时钟设计 中如何 避免亚稳态的产生是一个必须考虑 的问题 。本文介 绍了 F G FG P A异步时钟设 计 中容易产生 的亚稳 态现象及其可能造成 的危 害, 同时根据实践经验 给出了解决 这些 问题 的几种同步策略 。

异步FIFO设计

异步FIFO设计

异步FIFO设计同晓荣【摘要】为了解决数字系统中多个时钟不协调的问题,采用可编程逻辑器件为平台设计了一款异步先进先出的数据缓存器,通过使用格雷码编码方式使得亚稳态发生的概率降到最低,最后使用Verilog HDL硬件描述语言在QuartusⅡ软件中仿真验证.%In the digital system there is a plurality of clocks which are not harmonious. An asynchronous FIFO isdesigned in the programmable logic devices. Because the gray code is used, the probability of occurrence of metastabilityis the minimum. Finally the Verilog HDL hardware description language is used and simulated in the Quartus IIsoftware.【期刊名称】《河南科学》【年(卷),期】2012(030)001【总页数】3页(P97-99)【关键词】异步;先进先出;亚稳态;格雷码【作者】同晓荣【作者单位】渭南师范学院数学与信息科学学院,陕西渭南714000【正文语种】中文【中图分类】TP391.8随着微电子工艺的飞速发展,数字系统设计规模也在不断扩大,为了设计的需要,一个系统中往往含有多个时钟.由于不同的时钟之间,时钟频率不相关,使得数据从一个时钟域传递到另一个域时,系统重复地进入亚稳定状态.特别是在高速数据采集系统中,模数转换时钟频率和微型计算机不是同一个时钟频率时,很容易造成采样的过程中采样出错.因此如何设计异步时钟之间的接口电路,是实现异步时钟之间的数据传输的一个关键问题.而解决这个问题的方案是采用异步先进先出的数据缓存器(FIFO).因此异步FIFO在高速数据采集方面具有广泛应用.FIFO是一种先进先出的数据缓冲器,与普通的数据存储器的区别是没有外部读写地址线.这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序地读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址.FIFO分为同步FIFO和异步FIFO.同步FIFO是指读时钟和写时钟为同一个时钟.在时钟沿来临时同时发生读写操作.异步FIFO是指读写时钟不一致,读写时钟是互相独立的.这里主要介绍一种异步FIFO的设计.异步FIFO系统分为读时钟域和写时钟域两个完全独立的时钟域;异步FIFO的存储器是一块双端口RAM,允许同时进行读写操作.在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟域部分由读地址产生逻辑产生读控制信号和读地址[1-10].设计异步FIFO系统有两个难点,一是怎样降低亚稳态的发生概率,二是怎样产生空/满标志.亚稳态是指,如果触发器的建立时间/保持时间不满足要求时,可能产生亚稳态,在这个亚稳定期间,触发器可能输出未知电平,经过决断时间之后输出端Q端将稳定到0或1上,但是究竟是0还是1,是随机的,与输入没有必然的关系.即触发器输出端Q在有效时钟边沿到来之后比较长的一段时间处于不确定的状态,在这段时间里输出端Q端可能输出毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值.在异步的FIFO的实现中,采用可编程逻辑器件FPGA作为开发平台,使用Verilog HDL硬件描述语言,它具有设计灵活、可操作性强等特点.异步FIFO系统具有四个模块,分别为双向端口RAM模块、写控制模块、读控制模块、空/满标志位产生逻辑模块.生成的顶层设计图如图1所示.双端口RAM在普通的随机数据存储器的基础上改进而来,双端口RAM模块有六个端口,分别为读出数据端、写入数据端、读数据端地址、写入数据端地址、读出时钟和写入使能端.双端口RAM在FPGA中的顶层设计图如图2所示.为了降低亚稳态发生概率,对地址采用格雷码编码方式,由于格雷码在相邻的两个码元之间只由一位变换,这就避免计数器与时钟同步的时候发生亚稳态现象.为了保证数据正确的写入或读出,而不发生溢出或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作,在空的状态下不能进行读操作.而判断FIFO的空/满状态的具体做法是将FIFO地址分成4部分,每部分分别用高两位的最高有效位(MSB),用 00、01、11、10 决定 FIFO 是否为将满或空.如果写指针的高两位MSB小于读指针的高两位MSB则FIFO为“几乎满”,若写指针的高两位MSB大于读指针的高两位MSB则FIFO为“几乎空”.空/满标志位产生逻辑模块在FPGA中的顶层设计图如图3所示.2.2.1 满标志实现满标志是表示FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出.生成的顶层设计图如图4所示.2.2.2 空标志实现空标志是表示FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出.生成的顶层设计图如图5所示.在Altera公司的FPGA仿真平台QuartusⅡ软件中进行相关仿真,得到的时序图如图6所示,得到的RTL如图7所示.文章在介绍了FIFO的基本概念和工作原理的基础上,分析了亚稳态的产生原因,结合异步FIFO实现的设计难点.设计了一款异步FIFO,并在FPGA开发平台实现,仿真结果表明,格雷码降低了亚稳态出现的概率.【相关文献】[1]谢文华,高文华.FPGA异步FIFO设计中的问题与解决办法[J].单片机与嵌入式系统应用,2009(8):33-35.[2]雷海卫,刘俊.FPGA 中软 FIFO 设计和实现[J].微计算机信息,2008,24(2):207-209.[3]周敏.高速异步 FIFO 的设计和实现[J].计算机工程与科学,2009,31(2):85-87.[4]徐海铭,程月东,刘荣林,等.高速异步 FIFO 设计[J].电子与封装,2009,9(6):14-16.[5]栗永强.基于 FPGA 的高速 FIFO 电路设计[J].电子产品世界,2010,17(4):46-48.[6]于祥凤,刘学斌,胡炳樑,等.基于FPGA的高速数据存储系统中FIFO控制的设计[J].核电子学与探测技术,2010,30(1):59-62.[7]罗先哲,张仁喆,付大鹏.基于FPGA的高速异步FIFO存储器的设计与实现[J].中国科技信息,2009(2):90-94.[8]肖静娴,戴亚文.基于 FPGA 的异步 FIFO 缓存设计[J].电子测量技术,2009,32(11):92-94.[9]庾志衡,叶俊明,邓迪文.基于FPGA与DDR2、SDRAM的大容量异步FIFO缓存设计[J].微型机与应用,2011,30(4):34-36.[10]彭莉,秦建业,付宇卓.异步FIFO 的设计与验证[J].计算机工程与应用,2005,41(3):98-101.。

异步信号同步方法

异步信号同步方法

异步信号同步器设计(2)时间:2011-09-19 14:59 作者:赵信来源:网站投稿三、异步电路中同步的三种方法如果使用GALS设计电路,那么就需要将异步信号进行同步处理,那么同步处理最大的问题就是如何消除亚稳态,本章将主要介绍四种同步方法。

3.1 电平同步器只要在采到异步信号等待足够长的时间,处在亚稳态的触发器就会恢复到一个有效地电平上,这个延时通常通过在采到异步信号的触发器后面再加入一级触发器来实现,也就是说异步信号只有在经过目的时钟域的两级触发器采样后才会对目的时钟域的后续电路起作用。

这样的双触发器构成的异步信号采样逻辑被称为电平同步器。

这些策略不能够消除亚稳态,只是减小亚稳态。

同步使用的两个触发器,这两个触发器之间只要满足hold的要求即可。

注意,如果两个以上的关联信号,需要使用特别的方法,不能使用该方法。

该方法电路如下所示:图4 电平同步器值得注意的是如果第一级触发器进入亚稳态状态,而恢复到稳定电平需要的时间很大,那么第二级触发器很可能采到的数据也是亚稳态状态。

但是事实上实际电路的极小噪声和环境的变化都会是触发器脱离亚稳态状态,所以经过两级触发器同步的后,信号出现亚稳态的可能性就会减小到可以忽略的地步。

如果对性能要求比较高的系统,可以增加同步触发器的级数,来获取更好的稳定性,但是代价是付出更多的同步延时。

这种方法要求两个触发器足够近,时钟的偏斜比较小,且两个触发器之间要满足hold要求。

3.2 脉冲同步器脉冲同步器如下图所示:图5 脉冲同步器波形如下:图6 脉冲同步器波形这种方法的功能是将一个时钟域的单时钟周期信号转换为另一个时钟域的单周期信号,这种方法的局限是两个脉冲之间必须有最小的时间间隔,如果两个脉冲离的太近,那么在同步时钟域的两个脉冲就可能相邻,导致在同步时钟域的信号可能大于一个时钟时钟周期。

如果两个脉冲信号非常近,那么同步器将检测不到任何一个脉冲,一般要求两个脉冲的时间间隔大于两个接受时钟周期。

关于FPGA设计中多时钟域和异步信号处理有关的问题

关于FPGA设计中多时钟域和异步信号处理有关的问题

有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。

换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口。

虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。

FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。

本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。

这里以及后面章节提到的时钟域,是指一组逻辑,这组逻辑中的所有同步单元(触发器、同步RAM块以及流水乘法器等)都使用同一个网络作为时钟。

假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域。

假如设计有两个输入时钟,如图1所示,一个时钟给接口1使用,另一给接口2使用,那么我们说这个设计中有两个时钟域。

图1:双时钟域设计平时我们在设计中遇到的门控时钟、衍生时钟以及事件驱动的触发器都可归为时钟域类别。

如图2所示,通过一个简单门控时钟创建了一个新的时钟域。

我们知道,这类时钟控制在FPGA设计中并不被推崇(可以使用时钟使能替代时钟门控),然而它却非常有利于我们理解时钟域这一概念。

本章我们将着重详细讨论以下主题:•两个不同时钟域之间传输信号。

•亚稳态的产生以及对设计的可靠性的影响•通过相位控制避免亚稳态•在时钟域之间传输单个信号,将信号打两拍•使用FIFO在时钟域之间传输多位数据•使用分区同步器模块提高设计的组织架构•处理ASIC验证原型里的门控时钟•建立一个单时钟模块•自动门控移除图2:通过门控时钟创建的时钟域一、跨时钟域设计中包含多时钟域,首先要解决的是在不同时钟域之间传输信号的问题。

信号跨时钟域传输将会是一个大问题,原因如下:1、信号跨时钟域传输产生的故障总是不太容易复现。

同步复位和异步复位的比较:多时钟系统中复位的处理方法

同步复位和异步复位的比较:多时钟系统中复位的处理方法

同步复位和异步复位的比较3:多时钟系统中复位的处理方法这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟当然也可以是非同源了去驱动系统的不同部分;那么在这样的多时钟系统中,复位键怎么设置它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要;下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动;当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系;coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放;而分级的顺序可由各个“reset synchronizer”的级联方式决定;可以先复位前级,再复位后级,也可以反过来;反正方式很灵活,需要根据实际需要而定;由于图片上传问题,我只能用程序表示了,大家凑或看吧,哈哈例子:三级复位系统,系统中的时钟分别为1M,2M,11M:第一级Reset_Sychronizer程序:module Reset_Synchronizeroutput reg rst_n,input clk, asyncrst_n;reg rff1;always posedge clk , negedge asyncrst_n beginif asyncrst_n {rst_n,rff1} <= 2'b0;else {rst_n,rff1} <= {rff1,1'b1};endendmodule第2,3级的Reset_Sychronizer程序:module Reset_Synchronizer2output reg rst_n,input clk, asyncrst_n, d;reg rff1;always posedge clk , negedge asyncrst_n beginif asyncrst_n {rst_n,rff1} <= 2'b0;else {rst_n,rff1} <= {rff1,d};endendmodule顶层模块的源程序:`include ""`include ""module AsynRstTree_Transinput Clk1M,Clk2M,Clk11M,SysRst_ n,output SysRst1M_n,SysRst2M_n,SysRst11M_n;Reset_Synchronizer Rst1M.clkClk1M,. asyncrst_n SysRst_n,.rst_nSysRst1M_n;Reset_Synchronizer2 Rst2M.clkClk2M,.d SysRst1M_n,.asyncrst_nSysRst_n,.rst_nSysRst2M_n;Reset_Synchronizer2 Rst11M.clkClk11M,.d SysRst2M_n,. asyncrst_nSysRst_n,.rst_nSysRst11M_n;endmodule最后,我要说明一下,这两种方法我都试过,复位都很稳定,但并没有明显看出孰优孰劣;不知个人高人是怎么在实际系统中用的,帮忙指点一下呀;哈哈。

异步fifo设计及时序约束设置

异步fifo设计及时序约束设置

一、前言跨时钟域的同步处理,使用异步FIFO是常用的方式之一,对于异步FIFO的设计,网上的大部分资料来源于《Simulation and Synthesis Techniques for Asynchronous FIFO Design》一文其异步FIFO的结构如下图所示本文不是介绍上图描述的设计。

我从基本的数字电路时序开始,介绍异步FIFO的相关问题。

最后介绍如何用时序约束保证设计的正确性二、数字电路时序对于数字电路来讲,我们的信号在时钟边沿发生变化,Dat1信号是一种理想情况,而Dat2是实际情况,其特点是一、相对时钟边沿有延时二、信号变化有一段时间(电平转换时间),在这段时间就是亚稳态在亚稳态期间进行数据采样,不能获得稳定的值。

数字电路中经过时序约束,在T1产生的信号,在T2一定稳定(否则就是不满足时序),所以对于只有一个时钟的数字电路来说,它在T1和T2都能获得稳定的信号(T1时刻的值为0、T2时刻的值为1)三、跨时钟域时序问题对于异步时钟而言(相位不同),对于CLK1产生的信号,CLK2有可能在任意时刻进行数据采样在FIFO的设计中,将会产生2种信号,一种是数据本身(用Data表示),另外一种是指示数据是否有效(用valid表示),注意(valid不一定是一个比特的寄存器,可以是由FIFO中的读写指针产生而来,例如fifo的full或empty状态)异步FIFO的问题在于,如果CLK2在时钟T2进行采样,那么有可能得到valid有效,而数据无效的情况。

这样在CLK2采样取得的设计就是错误的数据。

四、处理异步FIFO的valid和data(理论基础)我们假设valid为低电平表示没有数据,高电平为有数据,解决的办法就是,当CLK对valid进行采样时,即使valid处于亚稳态期间,数据信号也是稳定的如上图所以,在T1时刻进行上升沿采样,虽然valid是一个亚稳态状态,但是此时Data 是一个稳定的值,如果在T1时刻采样的valid为1,那么可以得到稳定的Data信号,如果在T1时刻采样的valid为0,那么控制逻辑认为在T1无法获得数据,从而在下一个时钟获取注意:T2时刻是在下降沿进行采样,而此时的Data信号也是稳定的五、如何实现为了让valid和Data处于上面的状态,我们可以对valid进行延时处理,即使用时钟对其进行采样,必须使用2个寄存器依次采样,才能保证至少有一个时钟的延时valid1是CLK2对valid进行采样产生的,如果采样的时机不好,那么valid1相对valid只有一点点延时,valid2是CLK2对valid1的采样,这样valid2相对于valid至少有CLK2一个周期的延时,也就满足了第二节的条件。

基于多时钟域的异步FIFO设计

基于多时钟域的异步FIFO设计

基于多时钟域的异步FIFO设计摘要:在大规模集成电路设计中,一个系统包含了很多不相关的时钟信号,当其目标域时钟与源域时钟不同时,如何在这些不同域之间传递数据成为了一个重要问题。

为了解决这个问题,我们可以用一种异步FIFO(先进先出)存储器来实现。

本文介绍了一种利用格雷码指针实现在多时钟域传递数据的FIFO设计。

关键词:FIFO,多时钟域,异步,格雷码,亚稳态,同步装置1、引言随着计算机、多媒体和数据通信技术的高速发展,数字图像、语音等数据传输技术近年来得到了极大的重视和长足的发展,并得到了广泛的应用。

如何保障这些语音、图像等数据传输的准确性、及时性?如何高效率、高速度地传输这些数据?这些都是当今信息领域的科研人员所必须解决的问题。

而往往在这些数据传输系统中,又会遇到不同系统接口间数据传输的问题。

通常在两个相连接的不同电路系统之间,因为每个系统的数据传输速度不同,在系统的接口部分就会出现数据输入速度和输出速度不同,也就是会发生数据传输速率不匹配的问题。

这种情况往往会让传输的数据产生复写或者丢失,降低数据的传输速率,同时也因为数据复写、丢失和无效数据的读入,将会产生数据出错,因此需要在不同系统的接口处设计数据传输单元来实现数据的高速高效传输。

在现代的系统设计中,为了提高系统的性能,设计者对数据的传输率、数据的传输量,对系统各部分之间的接口部分不同的数据输入和接收传输率的匹配有越来越高的要求,而FIFO存储器以其合理的价格、使用的方便灵活性以及上述的对速度匹配的应用而成为解决这类问题的理想途径,因此FIFO存储器在计算机、多媒体和数据通信领域都有着广泛的应用,因此对FIFO 的研究与设计应用具有理论上和实际应用上的双重意义。

2、FIFO的功能描述FIFO 是数据传输系统中极其重要的一环,特别是在两个处在不同时钟域的系统接口部分,FIFO 的合理设计,不但能使接口处数据传输的输入输出速率进行有效的匹配,不使数据发生复写、丢失和读入无效数据的情况,而且还会有效地提高系统中数据的传输效率,FIFO 存储器主要分为基于移位寄存器型和基于RAM 型,而RAM 型又有单口RAM和双口RAM 之分,目前来说,用的较为广泛的是基于双端口RAM的FIFO。

基于FPGA的异步FIFO设计与实现

基于FPGA的异步FIFO设计与实现

基于FPGA的异步FIFO设计与实现王伟国;张振东【摘要】随着现代数字电路系统密度和规模的不断扩大,一个系统中通常会包含多个时钟,因此不同时钟之间的数据传输成为亟待解决的问题.而一种可靠易行的解决方案就是异步FIFO.异步FIFO需要非常严格的多时钟技术,难以作出正确的设计合成和分析.本文提出了一种利用格雷码作为读写地址计数器的异步FIFO的设计方法,有效的避免了数据在不同时钟时间传输时遇到的亚稳态问题.并给出了综合仿真结果.%With the expanding of the density and scale of modern digital circuitry,a system will contain multiple clock.Therefore,the transfer of data between different clock becomes a serious problem needs to be solved.A reliable and feasible solution is asynchronous FIFO.Asynchronous FIFO require very strict clock technology,it is difficult to make the correct design of synthesis and analysis.This paper presents a design method of asynchronous FIFO which based on read/write counter in terms of gray code.This method effectively avoid the metastable state in the data transmission between different clock and given a comprehensive simulation results.【期刊名称】《聊城大学学报(自然科学版)》【年(卷),期】2012(025)003【总页数】6页(P79-84)【关键词】多时钟;异步fifo;verilog;HDL;格雷码【作者】王伟国;张振东【作者单位】中国科学院长春光学精密机械与物理研究所,吉林长春130033;中国科学院长春光学精密机械与物理研究所,吉林长春130033/中国科学院研究生院,北京100039【正文语种】中文【中图分类】TN4330 引言随着现代数字电路系统的实时数据处理能力的不断提高,逻辑电路的复杂程度和内核处理器的运算速度也快速增长,在使得一些复杂算法得以实现的同时也加剧了快速CPU与慢速外设之间的冲突.异步FIFO大量数据缓存的能力成功的解决了这一问题,但专用的高速异步FIFO芯片价格昂贵,且容量受限,随着现场可编程逻辑器件容量和速度的不断提高,利用现场可编程逻辑器件设计异步FIFO成为可行的方法.本文首先讨论了异步FIFO设计中经常出现的亚稳态问题和二进制计数器多位同时改变的问题,并给出解决办法,然后讨论了两种格雷码计数器的形式并作出比较,最后给出一种以格雷码为读写地址计数器的异步FIFO的设计方法和在设计异步FIFO时必须要注意的细节.1 多时钟电路中的亚稳态问题在一个时序电路中,合理的建立时间和保持时间是触发器正常工作的前提条件.对于下降沿触发的触发器而言,下降沿触发之前输入数据持续的最短时间是建立时间(setup time),下降沿触发之后输入数据持续的最短时间是保持时间(hold time).当电路时序不能满足setup time/hold time的要求时,系统时序就会出现混乱.在异步时序电路中,不同时钟之间是不存在任何关系的,必然会产生建立时间和保持时间冲突.解决系统时序问题常用双锁存器法如下图1所示,即在不同时钟之间传输数据时连续锁存两次.但是这种方法只是保证了电平的稳定,而在实际的系统中还需要FIFO作为不同时钟之间传输多位数据的接口.图1 避免亚稳态出现的双锁存器法2 异步FIFO指针对于同步FIFO来说,使用一个计数器计算读出和写入到FIFO缓存器中的数据量,计数器在只有写没读是递增,只读没写是递减,既读又写和没读也没写时保持不变.当计数器到达设定值时FIFO满信号置位,为零时空信号置位.在异步FIFO中,由于这种计算数据个数增减的计数器会被两个不同的时钟控制,因此这种计数器不能使用.所以,为了决定FIFO“空”和“满”状态,读指针和写指针必须相互比较.设计FIFO最主要的困难是生成FIFO指针和找到一个决定FIFO“空”和“满”状态的可靠方法.在FIFO设计中,读指针和写指针总是指向下一个要读和写的地址空间.当读或写操作完成后指针自动递增,当FIFO是空时读指针和写指针相等,当FIFO满时读指针和写指针也是相等.一种解决的方法是增加一个多余的MSB位来区分两种状态,当写指针递增超过地址范围时,写指针会递增MSB位,其他位清零,读指针同样也是.当读指针和写指针的MSB位不同时,意味着写指针比读指针多走了一圈,当MSB位相同时意味着走的圈数相等(如图2所示)图2 增加多余MSB后区分FIFO空和FIFO满的方法示意图当FIFO存储缓冲区需要(n-1)位地址时,地址指针用n位,当指针相等(包括MSB位)时空标志置位,当指针低(n-1)位相等且MSB位不等时满标志置位.2.1 二进制FIFO指针的情况二进制地址计数量会有多个位同时变化,因此在把二进制量在不同时钟域之间同步时会出现问题.一个解决的方法是取样并把周期计数量寄存在一个保持寄存器中,并发出一个ready信号,新时钟域收到信号并发出确认信号,这样变化的计数量就安全的传送到新时钟域.用这种方法不会产生上溢和下溢,因为当读指针递增到与写指针相等时,空信号置位,取样的写指针不反映当前写指针的值,而是小于当前值,故永远不能产生下溢,满信号也是如此.最常用的解决方法是用格雷码计数器,格雷码在每个时钟只有一位变换可以极大的减少在同步计数时错误的发生.3 格雷码计数器设计格雷码计数器的方法有很多,这里介绍二种简单直接的方法.下面详细介绍两种方法.3.1 格雷码计数器中的问题为了更好的理解把n-bit计数器转换成(n-1)-bit计数器时出现的问题,先考虑一下一个双重4-bit和3-bit格雷码计数器的例子如图3.图3 4-bit格雷码计数器示例及转换成3-bit格雷码时出现的问题在4-bit计数器中除了MSB位其余位关于中间对称,我们把2nd MSB位反相后,上半部分与下半部分的LSBs便相等.但是经过反相操作后整体便不是格雷码了,例如15(1100)到0(0000)的转变过程有两个bits变化,在下面的第一种格雷码计数器中会有解决方法.3.2 第一种格雷码计数器图4是第一种计数器的框图并是双重格雷码计数器中两个bits同时跳变的解决方法.其中假设输出寄存器的值是格雷码(ptr),此格雷码被输出到格雷码到二进制的转换器中,然后通过一个有条件递增的加法器并输出下一个格雷码值(gnext),连接到输出寄存器的输入端,如框图上半部分所示.(n-1)-bit格雷码简单地通过n-bit格雷码的2个MSBs的异或操作产生,(n-2)个LSBs不变.图4 第一种格雷码计数器示意图及其如何避免了两位同时跳变问题3.3 第二种格雷码计数器此种风格的格雷计数器(如图5所示)用了两组寄存器避免了把格雷码转换成二进制数的步骤.而且第二组寄存器也可以直接用来寻址FIFO存储器.n-bit格雷码指针仍然需要同步到不同的时钟域中.二进制指针可以更容易的通过计算产生“几乎满”和“几乎空”信号.因此在本论文的设计中用此种风格的格雷码计数器.图5 第二种格雷码计数器工作示意图4 总体设计及“空”和“满”信号的产生总体设计如图6所示,本设计方案共有四个模块,双口RAM模块,读控制模块,写控制模块,格雷码同步模块.写控制模块主要是当写使能信号有效且写满信号无效时产生写地址并实行地址递增功能,读控制模块实现相似功能,双口RAM模块用来使缓冲数据其读写动作可同时进行.4.1 “空”和“满”信号的产生“空”信号的产生比较简单,只需同步到读时钟域的写地址格雷码与n-bit的读指针的格雷码完全相等即可代码如下图6 异步FIFO总体设计框图及其信号说明但是,“满”信号的产生就没那么容易,简单地用n-bit格雷码作比较判断“满”信号是不可靠的.因为格雷码除了MSB位外是对称的如图3所示.在图3中假如写指针和读指针都指向地址7,此时写指针递增一次后,写指针指向地址8,读指针和写指针相比较,除了MSB位不同外其余各位均相等,满信号此时有效,但这是不符合实际情况的,错误的.这也是为什么在图4中应用双重n-bit格雷码计数器的一个原因.正确判断满信号的条件是:读写指针的n-bit格雷码的前两个MSBs都不相等,其余的写指针和同步读针相等.代码如下4.2 不同时钟速度因为异步FIFO被两个不同的时钟控制,很明显两个时钟运行在不同的速度下.当把较快的时钟同步到较慢的时钟时,会有一些计数值被跳过.当被同步的格雷码递增两次只被取样一次时也不会出现亚稳态问题,因为亚稳态出现在同步时钟上升沿附近有多位同时跳变时,而在两个同步时钟沿之间有格雷码跳变两次,第一次跳变距离同步时钟条边沿较远,只有第二次跳变在同步时钟沿附近,故不会产生亚稳态.当较快的格雷码计数器在较慢时钟沿之间递增多于一次,不会出现已经溢出却没有检测到的现象,因为同步到写时钟域的读指针滞后于当前的读指针,而写指针只会小于或等于同步读指针,故不会出现溢出.5 设计仿真及总结本设计采用Xilinx公司Spartan3A系列的XC3S1400A,封装时PG484,速度是-4,仿真器是ISE Simulator(VHDL/Verilog),硬件描述语言是Verilog,开发工具是ISE.最后对电路进行时序分析,结果为该FIFO运行速度可达到90.63MHz.wclk、rclk时钟周期分别为:75MHz、80MHz.先向FIFO中写入18个数据,当第16个数据被读入后wfull立即被置位如下图7.图7 写满仿真结果同时向FIFO中写入和读出数据,由于wptr要经过两个读周期才能同步到读时钟域,故在waddr递增后的第二个rclk的上升沿rempty才清零如下图8所示.本文对异步FIFO的结构和重要时序问题给予了详细的阐述,并得到了可靠的仿真结果.在高速数据采集系统中,采用高性能FPGA作为数据预处理和高速异步FIFO 作为数据采集缓存的应用都十分广泛.把FIFO集成在FPGA中简化了电路设计的复杂程度,增加了电路的集成化程度和可靠性,是未来高速数据采集系统的重要发展方向.图8 同时写入读出时的仿真结果参考文献【相关文献】[1] Clifford E.Cummings,Synthesis and Scrip ting Techniques for De signing Multi-Asynchronous Clock Designs[A].SNUG-2001,2001(3):2-8.[2]吴自信,张嗣忠.异步FIFO结构及FPGA设计[J].单片机及嵌入式系统应用,2000,22(3):1.[3]赵雅兴.FPGA原理、设计与应用[M].天津:天津大学出版社,1999.[4]夏宇闻.数字系统设计-Verilog实现[M].北京:高等教育出版社,2006.[5]王金明.Verilog HDL程序设计教程[M].北京:人民邮电出版社,2004.。

实验三 含异步清零和同步时钟使能的加法计数器设

实验三 含异步清零和同步时钟使能的加法计数器设

含异步清零和同步时钟使能的加法计数器设计(1)实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

(2)实验原理:实验程序为例4-22;实验原理参考4.4节(计数器设计),设计流程参考第5章。

【例4-22】设计一个带有异步复位和同步时钟使能的十进制加法计数器。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT(CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : 0UT STD_LOGIC);END ENTITY CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS (CLK,RST,EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST=‘1’ THEN CQI:=(OTHERS =>‘0’);--计数器异步复位ELSIF C LK’E VENT AND CLK=‘1’ THEN --检测时钟上升沿IF EN=‘1’ THEN --检测是否允许计数(同步他能) IF CQI<9 THEN CQI:=CQI+1; --允许计数,检测是否小于9ELSE CQI := (OTHERS => ‘0’); --大于9,计数值清零END IF;END IF;END IF;IF CQI=9 THEN COUT<=‘1’; --计数大于9,输出进位信号ELSE COUT<=‘0’;END IF;CQ<=CQI; --将计数值向端口输出END PROCESS;END ARCHITECTURE behav;(3)实验内容1:在Quartus II 上对例4-22进行编辑、编译、综合、适配、仿真。

FIFO设计

FIFO设计

• 4) FULL信号控制进程 • 如何判断FULL信号为‘1’;
• 1、当前没有读/写数据有效信号,FIFO数 据已满 • 2、当前没有读有效信号,有写有效信号, 而且FIFO还差一个就满了。
• 4) FULL信号控制进程

Process(clk,reset) begin if reset='1' then full_mid<='1'; elsif rising_edge(clk) then if (rd_enable='0' and (fifo_cnt(8 downto 1) = "11111111") and ((fifo_cnt(0)='1') or (wr_enable='1'))) then full_mid<='1'; else full_mid<='0'; end if; end if; end process;
同步FIFO的操作
1、 同步FIFO的操作 当FIFO不满且wr_en有效时,向FIFO写数据,并 置写使能wr_enable有效; 当FIFO不空且rd_en有效时,从FIFO从读出数据 并置读使能rd_enable有效; 当FIFO满且wr_en有效时,置写使能wr_enable
无效且作废此次写操作; 当FIFO空且rd_en有效时,置读使能rd_enable 无效且作废此次读操作。
异步FIFO的设计
• 异步FIFO的数据读、写受不同时钟的控制; • 异步FIFO的空、满状态不能依靠计数的方 式进行,因为读、写均需要对计数器进行 操作; • 如何判断异步FIFO的空、满情形?如何操 作?

异步FIFO的设计与实现

异步FIFO的设计与实现

摘要随着数字系统规模的不断增大,单时钟域设计会极大地限制数字系统性能,现代数字系统为了提升性能,常采用多时钟域的设计。

跨时钟域的信号在传输时会遇到亚稳态现象,如何保持系统稳定地传输数据是多时钟域系统设计者重点关注的问题,在跨时钟域传递数据的系统中,常采用异步FIFO(First In First Out,先进先出队列)口来缓冲传输的数据,以克服亚稳态产生的错误,保证数据的正确传输。

常规的异步FIFO 设计采用先同步读写指针后比较产生空/满标志和用先比较读写指针产生空/满标志,再同步到相应时钟域的方法,但由于常规异步FIFO 模块中的RAM 存储器读写寻址指针常采用格雷码计数器以及“空满”控制逻辑的存在,工作频率低,面积大,将使通过这两个模块的信号通路延时对整个模块的工作频率造成制约。

本文提出了一种新型异步FIFO 的设计方法,该方法省略“了满”信号产生模块和多余的存储器位深来简化常规的FIFO 模块,而只保留“空”信号产生模块,避免使用大量的同步寄存器,减少了面积空间。

FPGA 验证的结果表明,改进后的异步 FIFO 性能有了显著的提高。

关键词:现场可编程门阵列(FPGA )亚稳态空/满标志产高速FIFOABSTRACTWith the increasing of digital system size, a single clock domain design will greatly limit the digital system performance. To enhance the performance of modern digital systems, multiple clock domain design is conventionally adopted. While being transmitted, Cross-clock domain signals will come across the phenomenon of metastability, hence it will be a major concern for the multi -clock domain system designers to probe how to maintain the system stability and to have data transmission conducted smoothly. As to the bus system data transmission in the system where the two data interface clocks don’t match, one of super and effective solutions is to use asynchronous FIFO buffer memory. How To solve the key and difficult issue that metastability and how to generate empty and full flag correctly in asynchronous FIFO design. Traditional FIFO design often synchronizes write/read address first, then compares them to generate empty/full signals or empty / full flag first compare the read and write pointer, and then synchronized to the clock domain, This design takes on too much area and can only work at a low frequency,this will allow the signaling pathways of these two modules delay caused by constraints of the operating frequency of the entire module. A new method of asynchronous FIFO is proposed to overcome these problems,omit the "full" signal generator module and redundant memory bit depth to simplify the conventional FIFO module, leaving only the "empty" signal generation module,avoid the use of a large number of synchronization registers, reducing the area of space. FPGA verification results show that the asynchronous FIFO improved performance has been significantly improved.Keywords: Field Programmable Gate Array (FPGA); Metastable; Mmpty / Full Flag production; High-speed FIFO目录摘要 (I)ABSTRACT (II)第一章绪论 (1)1.1研究背景和意义 (1)1.2研究现状 (1)1.3本文的主要工作 (3)1.4论文结构 (3)第二章跨时钟域设计的挑战与实现方法 (4)2.1跨时钟域设计的挑战 (4)2.1.1亚稳态问题 (4)2.1.2亚稳态产生的原因 (5)2.1.3亚稳态的危害 (5)2.2 跨时钟域的实现方法 (6)2.2.1同步器 (6)2.2.2握手机制 (9)第三章开发环境 (11)3.1硬件平台 (11)3.2软件平台 (11)第四章异步FIFO的设计与实现 (13)4.1异步FIFO (13)4.1.1异步FIFO工作原理 (13)4.1.2异步FIFO设计的难点 (14)4.2常见异步 FIFO 的设计 (16)4.2.1 读写地址产生逻辑 (18)4.2.2空/满标志的产生及代码的实现 (19)4.3.3改进的异步 FIFO 设计方法分析 (22)4.4高速异步FIFO的设计与实现 (23)4.4.1常见FIFO模块分析 (23)4.4.2高速异步FIFO 设计 (25)第五章结论 (28)第六章参考文献 (29)致谢 (30)附录高速异步FIFO设计仿真分析 (31)附1. 设计工作流程 (31)附.1.1 设计输入 (31)附.1.2 设计编译 (35)附.1.3 设计仿真 (36)第一章绪论1.1研究背景和意义作为21 世纪最重要的科学领域之一,超级计算机是体现科技竞争力和综合国力的重要标志。

verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波))

verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波))

Verilog基本电路设计(包括:时钟域同步、无缝切换、异步FIFO、去抖滤波))Verilog基本电路设计共包括四部分:单bit跨时钟域同步时钟无缝切换异步FIFO去抖滤波Verilog基本电路设计之一: 单bit跨时钟域同步(帖子链接:/thread-605419-1-1.html)看到坛子里不少朋友,对于基本数字电路存在这样那样的疑惑,本人决定开贴,介绍数字电路最常见的模块单元,希望给初学者带来帮助,也欢迎大佬们前来拍砖。

如果想要做数字设计,下面这些电路是一定会碰到的,也是所有大型IP,SOC设计必不可少的基础,主要包括异步信号的同步处理,同步FIFO,异步FIFO,时钟无缝切换,信号滤波debounce等等,后面会根据大家反馈情况再介绍新电路。

首先介绍异步信号的跨时钟域同步问题。

一般分为单bit的控制信号同步,以及多bit的数据信号同步。

多bit的信号同步会使用异步FIFO完成,而单bit的信号同步,又是时钟无缝切换电路以及异步FIFO电路的设计基础,这里先介绍单bit信号同步处理。

clka域下的信号signal_a,向异步的clkb域传递时,会产生亚稳态问题。

所有的亚稳态,归根结底就是setup/hold时间不满足导致。

在同一个时钟域下的信号,综合以及布线工具可以在data路径或者clock路径上插入buffer使得每一个DFF的setup/hold时间都满足;但是当signal_a在clkb域下使用时,由于clka与clkb异步,它们的相位关系不确定,那么在clkb的时钟沿到来时,无法确定signal_a此时是否处于稳定无变化状态,也即setup/hold时间无法确定,从而产生亚稳态。

这种异步信号在前后端流程里面是无法做时序分析的,也就是静态时序分析里常说的false_path。

消除亚稳态,就是采用多级DFF来采样来自另一个时钟域的信号,级数越多,同步过来的信号越稳定。

对于频率很高的设计,建议至少用三级DFF,而两级DFF同步则是所有异步信号处理的最基本要求。

最新-一种异步FIFO的设计方法 精品

最新-一种异步FIFO的设计方法 精品

一种异步FIFO的设计方法摘要使用同步源自不同时钟域的数据是在数字设计中经常使用的方法,设计功能正确的会遇到很多问题,探讨了两种不同的异步的设计思路。

两种思路都能够实现功能正确的。

关键词异步握手同步二进制格雷码本文所研究的,从硬件的观点来看,就是一块数据内存。

它有两个端口,一个用来写数据,就是将数据存入;另一个用来读数据,也就是将数据从当中取出。

与操作相关的有两个指针,写指针指向要写的内存部分,读指针指向要读的内存部分。

控制器通过外部的读写信号控制这两个指针移动,并由此产生空信号或满信号。

对于异步而言,数据是由某一个时钟域的控制信号写入,而由另一个时钟域的控制信号将数据读出。

也就是说,读写指针的变化动作是由不同的时钟产生的。

因此,对空或满的判断是跨时钟域的。

如何根据异步的指针信号对的满状态或空状态进行正确的判断是本文研究的重点。

此外,设计过程中的一些细节问题也将在文中涉及到。

1指针以及满空信号的产生为了更好地说明问题,先探讨一下同步指针移动以及满空信号的产生过程。

对于同步,读写指针都指向一个内存的初始位置,每进行一次读写操作,相应的指针就递增一次,指向下一个内存位置。

当指针移动到了内存的最后一个位置时,它又重新跳回初始位置。

在非满或非空的情况下,这个过程将随着读写控制信号的变化一直进行下去。

如果处于空的状态,下一个读动作将会导致向下溢出,一个无效的数据被读人;同样,对于一个满了的,进行写动作将会导致向上溢出,一个有用的数据被新写入的数据覆盖。

这两种情况都属于误动作,因此需要设置满和空两个信号,对满信号置位表示处于满状态,对满信号复位表示非满,还有空间可以写入数据;对空信号置位表示处于空状态,对空信号复位表示非空,还有有效的数据可以读出。

当读指针和写指针相等也就是指向同一个内存位置的时候,可能处于满或空两种状态。

可以通过不同的方法判断或区分究竟是处于满状态还是空状态,也就是究竟是写指针从后赶上了读指针,还是读指针从后赶上了写指针。

异步时钟域的亚稳态问题和同步器

异步时钟域的亚稳态问题和同步器

异步时钟域的亚稳态问题和同步器(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(通用异步收发器)等等,都是异步时序的事例。

跨时钟域信号同步的IP解决方案

跨时钟域信号同步的IP解决方案

跨时钟域信号同步的IP解决方案为了确保拥有多个异步时钟域的系统级芯片(Soc)能够可靠运行,设计人员必须使这些跨越了多个域的时钟和数据信号保持同步。

尽管这并不属于新提出的要求,但随着多时钟域的越来越常见和复杂化,使得这一要求具备了新的重要意义。

大规模集成加上对性能的严格要求以及频率调节都导致在许多不同频率下发生了很多时钟域跨越现象-就像一场数字化的―完美风暴‖。

跨时钟域(CDC)问题会以许多种形式出现,其评估难度相当高。

幸好,Synopsys DesignWare库产品提供了许多卓越的CDC解决方案,这些方案应用简便,设计人员只需掌握在何时以及何处应用它们即可。

本文解释了在时钟和数据信号从一个时钟域跨越到另一个时钟域时所发生的许多类型的同步问题。

在任何情况下,本文所包含的问题都涉及到相互异步的时钟域。

随着每一个问题的提出,本文将概述一个或多个DesignWare解决方案。

这些主题和解决方案包括:• 基本同步— DW_sync• 临时事件同步— DW_pulse_sync, DW_pulseack_sync• 简单数据传输同步— DW_data_sync, DW_data_sync_na, DW_data_sync_1c• 数据流同步— DW_fifo_s2_sf, DW_fifo_2c_df, DW_stream_sync• 复位排序— DW_reset_sync• 相关时钟系统数据同步— DW_data_qsync_hl, DW_data_qsync_lh基本同步问题当来自一个时钟系统的信号将用作另一个与其不同步的时钟系统的输入时,就需要对信号进行同步以达成。

而不进行同步就无法达成时序收敛。

图1所示为采用一个单寄存器来同步至目的时钟域的异步输入。

伴随这种方法会出现的一个问题是,当一个触发器的数据输入处于逻辑0至逻辑1之间的过渡过程当中时,发给这个触发器时钟信号时有可能产生亚稳态现象。

亚稳态现象也有可能发生在触发器的建立时间或保持时间出现违反现象时。

异步FIFO设计

异步FIFO设计

【转】/s/blog_6592e7700100x68n.html异步FIFO是一种先进先出电路,用在需要实时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。

异步FIFO与同步FIFO最大的不同在于异步FIFO读写时钟不同,通常异步FIFO用来做数据的时钟域转换,FIFO设计中难度最大的地方在FIFO的空满标识的产生,对同步FIFO来说,由于读写指针的增加时钟频率相同,因此读写指针可以直接进行比较产生出空满标志,而异步FIFO某由于读写两端时钟频率不同,读写指针需要进行时钟域转换后才能进行比较,也就是读时钟域的读地址要先转到写时钟域,然后与写时钟域的写地址进行比较,而实际这种比较时存在一定风险的。

异步FIFO设计一般的结构有:双口存储器、读地址产生逻辑、写地址产生逻辑、空/满标志产生逻辑四部分构成。

图1是一种常用的异步FIFO设计方案,其中,读地址(rptr)和空标志(rempty)由读时钟(rclk)产生,而写地址(wptr)和满标志(wfull)由写时钟(wclk)产生。

把写地址与读地址相互比较以产生空/满标志。

由于读写地址的变化由不同的时钟产生,所以对FIFO 空或满的判断是跨时钟域的。

如何避免异步传输带来的亚稳态以及正确地产生空/满标志是设计异步FIFO的难点。

图1在设计时,需要弄清楚以下几个方面:1.首先确定输入输出接口,异步FIFO在一个时钟域中进行写数据操作,而在另一个时钟域中进行读数据操作,所以在写数据模块,需要有写数据wdata,写时钟wclk,写复位wrst_n,写请求wreq,写满标志wfull;在读数据模块,需要有读数据rdata,读时钟rclk,读复位rrst_n,读请求rreq,读空标志rempty。

其中rdata,rempty,wfull为输出信号,其余为输入信号。

其FIFO用来存储16*8数据(数据宽为8,数据深度为16)的顶层模块如下://异步FIFO缓存16*8数据,即数据宽度为8,深度为16//module yibufifo(rdata,rempty,rrep,rclk,rrst_n,wdata,wfull,wrep,wclk,wrst_n);input wclk,wrep,wrst_n;input rclk,rrep,rrst_n;input[7:0]wdata;output[7:0]rdata;output rempty,wfull;wire wclk,wrep,wrst_n;wire rclk,rrep,rrst_n;wire [7:0]wdata;wire [7:0]rdata;wire [3:0]wptr,rptr;wire [3:0]waddr,raddr;wire aempty_n,afull_n;ram i1(.wdata(wdata),//读写存储模块.rdata(rdata),.waddr(wptr),//地址与指针同步.raddr(rptr),//.wrep(wrep),.wclk(wclk));async_cmp i2(.aempty_n(aempty_n),//异步比较读写指针产生异步空满标志.afull_n(afull_n),.wptr(wptr),.rptr(rptr),.wrst_n(wrst_n));rptr_empty2 i3(.rempty(rempty),//根据rclk产生读指针rptr和空标志rempty.rptr(rptr),.aempty_n(aempty_n),.rrep(rrep),.rclk(rclk),.rrst_n(rrst_n));wptr_full2 i4(.wfull(wfull),//根据wclk产生写指针wptr和满标志wfull.wptr(wptr),.afull_n(afull_n),.wrep(wrep),.wclk(wclk),.wrst_n(wrst_n));endmodule顶层模块图:其中2.1 读写地址产生逻辑(本设计中读写地址与读写指针同步)读写地址线一般有多位,如果在不同的时钟域内直接同步二进制码的地址指针,则有可能产生亚稳态。

基于异步FIFO的多时钟域同步技术研究

基于异步FIFO的多时钟域同步技术研究
亚稳 态 的影 响就 显 得 尤 为重 要 . 般 在单 时 钟 域 一
刻 , t= 0一时刻 , 定 信 号 的取 值 为 0 t = 0 在 规 ; + 时 刻 , 定信 号 的取 值 为 1 显 然 , 规 , 亚稳 态 的数
据定 义 回避 了上述 问题 , 是 在 同步 电路设 计 中 , 但
0 引言
在现 代 I 、 SC 以及 F G CAI P A设 计 中 , 多 软 许
必须考 虑 上述 问题 。 为此 首先介 绍 两个概 念 :
建 立 时问 : 发器 在 时钟上 升沿 到来 之前 , 触 输
人 数据 必须 保持 不变 的时 间.
件 程序 可 以 帮助 工 程 师 建 立 几 百万 门 的 电路 , 但
第2 2卷 第 5期
Vo . 2 No 5 12 .
四川 文理 学院 学报
Se u n Un v r i fArsa d S in eJ u n l ih a i e st o t n ce c o r a y
21 0 2年 9月
Se 2 2 p. 01
基 于 异 步 FF IO的 多时 钟 域 同步 技术 研 究
3 7
21 0 2年第 5期
朱华伟 , 税奇 军: 基于异步 FF IO的 多时钟域 同步技 术研 究

方面, 集成 电路的集成度越来越高 , 其内部各模
为 了消 除亚稳 态 , 常 需要 将 异 步 时 钟 域 交 互 的 通 信 号在 本地 时钟 域 用 两 级触 发器 同步 , 样 又 会 这 有 很多 时钟周 期 浪费 在 系统 的 “ 手 ” , 而 降 握 中 从 低 传输 速率 .
的异 步 FF I O同步器 设计 方法 .

异步FIFO设计中遇到和解决的问题

异步FIFO设计中遇到和解决的问题

随着数字电子系统设计规模的扩大,一些实际应用系统中往往含有多个时钟,数据不可避免地要在不同的时钟域之间传递。

如何在异步时钟之间传输数据,是数据传输中一个至关重要的问题,而采用FIFO正是解决这一问题的有效方法。

异步FIFO是一种在电子系统中得到广泛应用的器件,多数情况下它都是以一个独立芯片的方式在系统中应用。

本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。

这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性。

双端口RAM存储器具有独立的读写端口。

如果用一个单端口RAM存储器实现异步FIFO,还应该包含一个仲裁器来保证同一时刻只能有一种操作(读或写操作)。

本文选择的双端口RAM并不一定是真正的双端口,只要有独立的读写端口即可。

读写控制逻辑由加法计数器构成,实现读写地址的自动加1功能。

空/满标志位的产生逻辑给系统提供空(empty)和满(full)信号。

2 异步FIFO设计中的问题与解决办法2.1 亚稳态问题在含有触发器的电路中往往会出现亚稳态问题。

亚稳态会使异步FIFO的读写地址发生错误,产生误读或者误写。

为此异步FIFO设计中亚稳态问题也是一个比较重要的问题。

亚稳态不可能完全消除,只能使其出现的概率降到最低。

主要有2种方法来降低亚稳态出现的概率:①采用触发器冗余方式。

即采用多个触发器级联的方式,使本来出现概率为P的亚稳态,其出现概率降低到P2,但这种方式会导致延时增加。

②使用格雷码。

格雷码的相临码元之间只有一位发生变化,这就大大地降低了亚稳态出现的概率。

本文采用格雷码方式。

2.2 空/满标志位的判断为保证数据的正确写入和读出,不发生写满和读空操作,怎样判断空/满标志位的产生就成为异步FIFO设计的核心问题。

异步FIFO是环形存储的,当读写地址指针相等时,意味着空标志位或者满标志位的产生。

但是却不能确定是写满还是读空状态。

为解决这一问题,本文将转换为格雷码后的读写地址指针分别经过检测和计数器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时钟域之间的数据传输用得最多的是 ¦©¦¯ Œ用一 个双口 ² ¡- 来存储数据 " 其中一个端口由发送端控 制 Œ其时钟作为写时钟 Œ将数据写入存储器 Œ另一个端 口由接收端控制 Œ其时钟作为读时钟 Œ将存储器中的数 据取出来 " 有两个信号用于指示 ¦©¦¯ 的状态 š是空 ! 满还是部分满 " 还有两个信号常用于指示 ¦©¦¯ 是近 满还来近空 " 从理论上来说 Œ用一个时钟把数据放入 一块共享存储空间而用另一个时钟来取 Œ看起来很理 想 Œ但实则并非易事 Œ其难点在于产生精确的 / 满 0和 / 空 0标志 " 在判断 ¦©¦¯ 是满还是空时 Œ要对写和读 指针进行一些运算 " 问题在于这两个指针是在两个不 同的时钟域内产生的 Œ在对它们进行运算之前必须进 行同步处理 " 3 . 3 FIFO 指针的实现方式
图 6 调整控制信号的次序
2 . 3 两个经过编码的控制信号穿越时钟域 图 —所示为两个经过编码的控制信号实现时钟域
的穿越 " 如果这两个经过编码的信号在被采样时有轻 微的抖动 Œ将会在新的时钟域中造成一个时钟周期的 解码输出错误 "
图 8 使能信号经过整形
图 7 经过编码的控制信号穿越两个时钟域
一种解决方案如图 ˜所示 " 发送一个 ÅÎÁÂÌÅ信号
图 3 控制信号穿越两个时钟域 # 34#
图 5 顺序控制信号在时钟域之间的传递
第 “‘卷第 •期
谢修祥 Œ等 š异步多时钟系统的同步设计技术
# 基本电子电路 #
这种情况下的解决方案是 š只发送 ‘个控制信号 给新的时钟域 Œ并且在该时钟域中产生第 ’个有相移 ˆ要求 ‰的顺序控制信号 " 调整控制信号后的次序见 图 –"
作为 / 准备标志 0给新的时钟域 " 发送端时钟域必须 在使解码输入有效之后的 ‘个周期产生此 ÅÎÁÂÌÅ信 号 Œ且在使解码输入无效之前的 ‘个周期移走该信号 " 如前所述 ŒÅÎÁÂÌÅ信号的有效期必须大于接收时钟域 的 ‘个时钟周期 " 在最坏的情况下 Œ在接收时钟域中 Œ ÅÎÁÂÌÅ信号或者与编码输入信号同时被采样 Œ或者与 其同时被置为无效 " 在最好的情况下 ŒÅÎÁÂÌÅ信号有 效比编码输入信号有效晚 ‘个接收时钟周期 Œ且比它 无效之前 ‘个周期变为无效 " 这种办法能确保编码输 入信号在被使能之前是有效的 "
关键词 š多时钟系统 Œ亚稳态 Œ控制信号同步技术 Œ数据同步技术 Œ格雷码计数器 Œ ¦©¦¯ 中图分类号 š´®—™
0引 言
随着数字系统的规模越来越大 !复杂程度越来越 高 Œ’个或多个时钟域在设计中的应用越来越多 " 在 多时钟域中 Œ不可避免地会遇到控制信号的交互和数 据的相互传递 Œ由于各时钟的频率和相位不同 Œ在进行 电路设计时 Œ必须充分考虑时序对功能的影响 Œ表面上 看起来没有问题的电路可能会因为忽视了时序的重要 性而实际上并不能真正达到设计的功能 Œ造成多时钟 域之间的同步失败 " 同步问题中最有可能出现的就是 亚稳态的产生和传播 " 本文将对同步设计中必须考虑 的因素进行分析 Œ并分别讨论了控制信号的同步和数 据通路的同步 Œ提出了常见问题的解决方案 "
图 4 控制信号在穿越时钟之前进行合并
2. 2 两个有次序要求的控制信号穿越时钟域 如图 •所示 Œ在短的流水线设计中 Œ两个控制信号
ÁÅΑ 和 ÁÅÎ’Œ用于为顺序数据的传递提供 ÅÎÁÂÌÅ信 号 " 在第 ‘个时钟域 ŒÁÅΑ可能会在 ÁÅÎ’变为有效之 前产生一个很短的中断 Œ而第 ’个时钟域有可能正好 在这个很短的时隙中对 ÁÅΑ和 ÁÅÎ’进行采样 Œ这样 将会在第 ’个时钟域的使能控制链中造成一个时钟周 期的空隙 Œ使 Á’的输出信号被第 ’个寄存器丢失 "
1 亚稳态
根据文献 »‘½Œ亚稳态定义为 š当用一个时钟对变 化的信号进行采样时 Œ事件发生的次序决定其输出 " 事件之间的时间间隔越短 Œ判断哪一个先到所花的时 间越长 " 当两个事件发生的时间相当接近时 Œ判断过 程所花的时间将会超过允许的时间 Œ此时将会造成同 步失败 "
每个寄存器都有其建立和保持时间 Œ或者说寄存 器的输入数据在其上升沿之前和之后不允许发生变 化 " 当数据源的时序不满足接收时钟域中的寄存器的 建立 •保持时间时 Œ就会出现亚稳态 Œ此时寄存器就会 处于 / 浮空 0状态 Œ其输出电压在高电平达不到逻辑 / ‘0 Œ在低电平达不到逻辑 / •0 Œ在这段时间内触发器 的 ± 端会出现毛刺 !振荡 Œ或固定在某一电压值 Œ而不 一定等于数据输入端 ¤ 的值 " 这段时间称为决断时 间 ˆÒÅÓÏÌÕÔÉÏÎ ÔÉÍʼn" 经过决断时间后 Œ± 端将稳定到 •或 ‘上 Œ但是究竟是 •还是 ‘Œ则是随机的 Œ与输入没
如图 ‘所示 Œ当在一个时钟域中产生的信号在被 另一个时钟域的时钟采样时过于靠近其上升沿 Œ会造 成同步失败 " 同步失败是因为输出在其采样点上处于 亚稳态所形成的 Œ而且这种亚稳态可能向后传播 Œ造成 后级出现逻辑错误 "
图 1 亚稳态的产生过程
在接收时钟域使用两级寄存器 Œ即所谓同步器 Œ能 有效地消除亚稳态 Œ如图 ’所示 "
3 数据通路的同步技术
数据在时钟域之间的传递是多个随机变化的控制 信号在时钟域之间传递的一种实例 " 这种情况下 Œ用 同步器来处理同步问题往往不能收到满意的效果 Œ因 为多位数据的变化将会使同步器的采样错误率大大增 加 " 常用的数据同步方法有两种 š一种是用握手信号 › 另一种是用 ¦©¦¯ Œ一个时钟域存数据 Œ另一个时钟域 取数据 "
图 2 亚稳态的消除方法
# 33#
# 基本电子电路 #
电子工程师
’•••年 •月
接收时钟域的第 ‘个寄存器对发送时钟域的输出 信号进行采样 Œ此时该寄存器的输出处于亚稳态 Œ又经 过一个 ˆ接收 ‰时钟周期后 Œ第 ’个寄存器对第 ‘个寄 存器的输出进行采样 Œ此时其输出已经变为稳定 " 从 理论上来说 Œ有可能第 ‘个寄存器的输出在被第 ’个 寄存器采样时仍然处于亚稳态 Œ这样会使第 ’个寄存 器的输出也变为亚稳态 " 也就是说 Œ用这种电路仍然 可能造成同步失败 Œ这时就要考虑其 - ´¢¦ˆ平均故障 间隔时间 ‰" 亚稳态发生的概率与时钟频率无关 Œ但 - ´¢¦则与时钟频率有很大的关系 " 时钟频率越高 Œ - ´¢¦会相 应 地 降 低 " 因 此 Œ适 当 降 低 频 率 能 延 长
收稿日期 š ’••”2‘’2‘•› 修回日期 š ’•••2•“2‘•"
有必然的关系 " 亚稳态是寄存器的一个固有特性 " 正 常采样也会有一个亚稳态时间 " 当建立保持时间满足 时 Œ寄存器在经历采样 !亚稳态后 Œ进入一个正确的状 态 " 如果建立保持时间不满足 Œ那么寄存器会有一个 相当长的亚稳态时间 Œ最后随机进但在新的时钟域中实现同步将会带来很多问题 " 更好 的方法是用两个格雷码计数器来传递 ¦©¦¯ 指针 " 格
# 36#
雷码计数器每次只改变 ‘个计数位 " 如果同步时钟在 格雷码计数器的过渡过程中采样 Œ其结果只可能是新 值或是旧值 Œ因为每次只有 ‘位发生了变化 " 格雷码 计数器用一个寄存器来保存格雷码 Œ寄存器的输出值 反馈给一个格雷码 2二进制转换器 Œ二进制值每加 ‘增 长一次 Œ新的二进制值传给一个二进制 2格雷码转换 器 Œ其输出作为格雷码寄存器的输入 "
- ´¢¦"
2 控制信号的同步技术
在进行多时钟系统的设计时 Œ人们常犯的一个错 误是 Œ在多个控制信号穿越一个时钟域到达另一个时 钟域时 Œ往往忽视了控制信号次序的重要性 " 此时 Œ用 同步器来实现对控制信号的同步并不是一个好办法 " 如果控制信号的次序很关键 Œ必须对此引起重视 " 2 . 1 两个有同步要求的控制信号同时穿越时钟域
一个 n位的格雷码 Œ要转换为等值的二进制码 Œ二 进制码的第 •位等于所有格雷码各位 ˆ从 •到 n • ‘‰ 的异或 Œ第 ‘位等于格雷码的第 ‘位到第 n • ‘位的异 或 Œ如此类推 " 二进制码的最高位和格雷码的最高位 相等 " 一个 ”位的格雷码到二进制的转换如下 š
ÂÉλ•½ • ÇÒÁÙ»“½C ÇÒÁÙ»’½C ÇÒÁÙ»‘½C ÇÒÁÙ»•½ ÂÉλ‘½ • ÇÒÁÙ»“½C ÇÒÁÙ»’½C ÇÒÁÙ»‘½ ÂÉλ’½ • ÇÒÁÙ»“½C ÇÒÁÙ»’½ ÂÉλ“½ • ÇÒÁÙ»“½
第 “‘卷第 •期 ’•••年 •月
电子工程师 ¥¬¥£ ´² ¯ ®©£ ¥®§©®¥¥²
¶ ÏÌŽ“‘ ®ÏŽ• - ÁÙ ’•••
异步多时钟系统的同步设计技术
谢修祥 Œ王广生
ˆ北京工业大学电子信息与控制工程学院 Œ北京市 ‘•••’’‰
=摘 要 > 对多时钟系统的同步问题进行了讨论 Œ提出了亚稳态的概念及其产生机理和危害 ›叙 述了控制信号和数据通路在多时钟域之间的传递 ›讨论了控制信号的输出次序对同步技术的不同要 求 ›重点论述了常用的数据通路同步技术 ) ) ) 用 ¦©¦¯ 实现同步的原理及其实现思路 "
n位二进制转换到格雷码时 Œ格雷码的第 •位等 于二进制码的第 •位和第 ‘位的异或 Œ第 ‘位等于二 进制码的第 ‘位和第 ’位的异或 Œ如此类推 Œ二者的最 高位相等 " ”位二进制码到格雷码的转换如下 š
ÇÒÁÙ»•½ • ÂÉλ‘½C ÂÉλ•½ ÇÒÁÙ»‘½ • ÂÉλ’½C ÂÉλ‘½ ÇÒÁÙ»’½ • ÂÉλ“½C ÂÉλ’½
相关文档
最新文档