异步fifo跨时钟域处理

异步fifo跨时钟域处理
异步fifo跨时钟域处理

异步FIFO结构及FPGA设计---跨时钟域设计

2008/12/17 17:17[未分类 ]

异步FIFO 结构及FPGA 设计

吴自信,张嗣忠. 单片机及嵌入式系统应用,2000

摘要:首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法; 在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和FPGA实现。

1、异步FIFO介绍

在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟。多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面, 异步FIFO得到了广泛的应用。

异步FIFO是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个高可靠性、高速的异步FIFO电路便成为一个难点。本文介绍解决这一问题的一种方法。

由图1可以看出:整个系统分为两个完全独立的时钟域--读时钟域和写时间域; FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址; 读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。

2、异步FIFO的设计难点

设计异步FIFO有两个难点:一是如何同步异步信号,使触发器不产生亚稳态; 二是如何正确地设计空、满以及几乎满等信号的控制电路。

下面阐述解决问题的具体方法。

2.1 亚稳态问题的解决

在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。图2所示为异步时钟和亚稳态,图中clka和clkb为异步时钟。

亚稳态必定会发生在异步FIFO中。图中在异步FIFO中,电路外部的输入和内部的时钟之间是毫无时间关系的,因此setup/hold冲突是必然的; 同在电路内部的两个没有关系的时钟域之间的信号传递,也必须会导致setup/hold冲突。

虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。

①对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。

②采用触发器来同步异步输入信号,如图3中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图3所示,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。

2.2 空/满标志的产生

空/满标志的产生FIFO的核心部分。如何正确设计此部分的逻辑,直接影响到FIFO的性能。

空/ 满标志产生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:

空标志< =(|写地址-读地址|< =预定值)AND(写地址超前读地址)

满标志< =(|写地址-读地址|< =预定值)AND(读地址超前写地址)

最直接的做法是,采用读写地址相比较来产生空满标志。如图4所示,当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。

图5 是另外一种常用的设计,比较器只对读写地址比较是否相等。在读写地址相等的时候有两种情况:满或者空。所以,附加了一个并行的区间判断逻辑来指示是空还是满。这个区间判断逻辑将整个地址空间分为几个部分,以指示读写地址的相对位置。这种做法提高了整个电路的速度,但是也有其缺点。主要是直接采用读写地址等于不等于的比较逻辑来进行空/满标志的判断,可以带来误判。

3、新颖的FIF0空/满标志控制逻辑

3.1 对读写地址的分析

由以上对FIFO的分析可以看出,由地址直接相减和将地址相互比较产生空/满标志都不可取。如何简单地进行直接比较,又不提高逻辑的复杂程度呢?对地址加延时可以做到这一点。设读地址为Rd_bin_addr,用读地址Rd_addr产生读地址的格雷码Rd_next_gray_addr,将Rd_next_gray_addr延一拍得到

Rd_gray_addr,再将Rd_gray_addr延一拍得到Rd_last_gray_addr。在绝对时间上,Rd_next_gray_addr、Rd_gray_addr、Rd_last_gray_addr这些地址先后关系,从大到小排列,并且相差一个地址,如图6所示。

图6 经过延时后格雷码之间的关系

写地址的格雷码的产生也与此类似,即:Wt_next_gray_addr、Wt_gray_addr、Wt_last_gray_addr。利用这6个格雷码进行比较,同时加上读写使能,就能方便而灵活地产生空/满标志。

以空标志Empty的产生为例,当读写格雷码地址相等或者FIFO内还剩下一个深度的字,并且正在不空的情况下执行读操作,这时Emptr标志应该置为有效(高电平有效)。

即EMPTY< =(Rd_gray_addr=Wt_gray_addr)and(Read_enable=1)或EMPTY< =(Rd_next_gray_addr=Wt_gray_addr)and(Read_enable=1) 同理可类推满标志的产生逻辑。

3.2 基于延时格雷码的FIFO标志产生逻辑

图7 是使用上述思想设计的地址产生和标志产生的逻辑。首先,在地址产生部分,将产生的格雷码地址加一级延时,利用其前一级地址与当前的读地址作比较。其次,在空/满标志有效的时候,采用了内部保护机制,不使读/写地址进一步增加而出现读写地址共同对一个存储单元操作的现象。

3.3 仿真信号波形

利用图7电路设计的思想构造了一个256×8的FIFO,用MODELSIM进行仿真。图8为系统中主要信号对读空情况的仿真波形。

图8 读空情况的仿真波形图

图8 中,WDATA为写数据,RDATA为读数据,WCLK为写时钟,RCLK为读时钟,REMPTY为空信号,AEMPTY的几乎空信号,RPTR为读地址WPTR为写地址,RGNEXT为下一位读地址格雷码,RBIN读地址二进制,RBNEXT为下一位读地址的二进制码。

由图8可以看出,由于读时钟高于写时钟,读地址逐渐赶上写地址,其中由AEMPTY信号指示读地址和写地址的接近程度。当这个信号足够长而被触发器捕捉到时,真正的空信号REMPTY有效。

4、电路优点的分析

由图7可见,该电路最大的瓶颈为二进制到格雷码和比较器的延时之和。由于这两个组合逻辑的延时都很小,因此该电路的速度很高。经测试,在Xilinx的FPGA 中,时钟频率可达140MHz。另外,由于将异步的满信号加了一级锁存,从而输出了可靠而稳定的标志。

5、总结

在实际工作中,分别用图4、图5与图7中所示的逻辑实现了一个256×8的FIFO。综合工具为SYNPLIFY7.0,由Foundation Series 3.3i布局布线后烧入Xilinx公司的WirtexEV100ECS144。三者的性能指标比较见表1。

表1 三种不同设计的比较

由表1可知,图7所示的异步FIFO的电路速度高,面积小,从而降低了功耗,提高了系统的稳定性。

基于异步FIFO实现不同时钟域间数据传递的设计

基于异步FIFO实现不同时钟域间数据传递的设计 [2006-12-1813:31:00|By:夏虫] 推荐 摘要:数据流在不同时钟域间的传递一直是集成电路芯片设计中的一个重点问题。本文通过采用异步FIFO的方式给出了这个问题的一种解决方法,并采用Verilog硬件描述语言通过前仿真和逻辑综合完成设计。 关键词:异步FIFO;时钟域;Verilog 引言 当今集成电路设计的主导思想之一就是设计同步化,即对所有时钟控制器件(如触发器、RAM等)都采用同一个时钟来控制。但在实际的应用系统中,实现完全同步化的设计非常困难,很多情况下不可避免地要完成数据在不同时钟域间的传递(如高速模块和低速模块之间的数据交换)。这时,如何保持系统的稳定,顺利完成数据的传输就成为一个重要的问题,这也是异步电路设计中最为棘手的问题。通常的做法是采用对每位信号加同步器或增加握手信号来解决这一问题,但这样会增加系统的复杂度且影响传输速度。本文的做法是在两个时钟域的交界处设计一个异步FIFO,通过它来实现数据流的传输。由发送时钟域将数据写入,接收时钟域将数据取出,在数据传输的同时实现了数据的缓存,因此是一种较理想的方法。 不同时钟域间数据传递的 问题及其解决方法 不同时钟域间数据传递的最重要问题就是亚稳态问题。当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败。亚稳态是在两时钟敏感沿靠得很近、第二级时钟敏感沿到来时其输入数据不稳时发生,可将其视为仅仅是第二级触发器输入信号不稳定所导致的结果。只要使输入信号稳定,就能解决亚稳态问题。 针对如上所述亚稳态的特点,可设计一个同步器来保证数据的稳定传输以解决这个问题。其原理在于使信号在新的时钟域中先稳定下来再进入相关的逻辑,以保证信号与新的时钟同步。本设计在时钟域的接口处就采用此法。 异步FIFO模块设计及实现 异步FIFO结构设计 本文所设计的异步FIFO采用循环队列方式,由独立的两个时钟Iclk和Oclk来控制读、写指针。模块结构如图1所示。 输入端口:输入端时钟Iclk,输出端时钟Oclk,8位并行输入数据Din,复位信号Rst_。 输出端口:8位并行输出数据Dout,FIFO写满信号Full,FIFO读空信号Empty。信号后缀:i—由输入时钟域控制、o—由输出时钟域控制、g—GRAY码、b—二进制自然码。

jQuery中的Ajax几种请求方法

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到). 1. load( url, [data], [callback] ) :载入远程HTML 文件代码并插入至DOM 中。 url (String) : 请求的HTML页的URL地址。 data (Map) : (可选参数) 发送至服务器的key/value 数据。 callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。 这个方法默认使用GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的HTML 文档,DOM 中将仅插入筛选出的HTML 代码。语法形如"url #some > selector"。 这个方法可以很方便的动态加载一些HTML文件,例如表单。 示例代码: $(".ajax.load").load("[url]https://www.360docs.net/doc/bc4505534.html,/QLeelulu/archive/2008/03/30/1130270.html[/url] .post", function (responseText, textStatus, XMLHttpRequest){ this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0] //alert(responseText);//请求返回的内容 //alert(textStatus);//请求状态:success,error //alert(XMLHttpRequest);//XMLHttpRequest对象 }); 这里将显示结果。 注:不知道为什么URL写绝对路径在FF下会出错,知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。还有get()和post()示例都是跨域调用的,发现传上来后没办法获取结果,所以把运行按钮去掉了。 2. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data (Map) : (可选) 要发送给服务器的数据,以Key/value 的键值对形式表示,会做为QueryString附加到请求URL中。 callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。 这是一个简单的GET 请求功能以取代复杂$.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用$.ajax。示例代码: $.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){ //返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等. this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图

跨时钟域处理

快时钟域信号到慢时钟域有可能的情况是: 快时钟域信号宽度比慢时钟信号周期窄,导致漏采。 解决的方法有: 1.将快时钟域信号延长,至少有慢时钟周期的一到两个周期宽 2.使用反馈的方法,快时钟域信号有效直到慢时钟域有反馈信号,表示已经正确采样此信 号,然后快时钟域信号无效。

通过反馈的方式很安全,但是从上图可以看出来延时是非常大的。慢时钟采快时钟信号,然后反馈信号再由快时钟采。 以上是简单的单个信号同步器的基本方法。 多个信号跨时钟域 多个控制信号跨时钟域仅仅通过简单的同步器同步有可能是不安全的。 简单举例,b_load和b_en同步至a_clk时钟域,如果这两个信号有一个小的skew,将导致在a_clk时钟域中两个信号并不是在同一时刻起作用,与在b_clk中的逻辑关系不同。解决的方法应该比较简单,就是将b_load和b_en信号在b_clk时钟域中合并成一个信号,然后同步至a_clk中。 如果遇到不能合并的情况,如译码信号。如下图

如果Bdec[0]、bdec[1]间存在skew将导致同步至a_clk中后译码错误,出现误码。在这种情况下,建议加入另一个控制信号,确保bdec[0]、bec[1]稳定时采。例如在bdec[0]、bec[1]稳定输出后一到两个周期b_clk域输出一个en信号,通知a_clk域此时可以采bdec[0]、bec[1]信号。这样可确保正确采样。 数据路径同步 对数据进行跨时钟域处理时,如果采用控制信号同步的方式进行处理的话,将是非常浩大的工程,而且是不安全的。 简单来说,数据同步有两种常见的方式: 1.握手方式 2.FIFO 简要说下握手方式,无非就是a_clk域中首先将data_valid信号有效,同时数据保持不变,然后等待b_clk中反馈回采样结束的信号,然后data_valid信号无效,数据变化。如有数据需要同步则重复上述过程。握手方式传输效率低,比较适用于数据传输不是很频繁的,数据量不大的情况。 FIFO则适合数据量大的情况,FIFO两端可同时进行读/写操作,效率较高。而且如果控制信号比较多,也可采用fifo方式进行同步,将控制信息与数据打包,写入FIFO,在另一端读取,解码,取得数据和控制信息。

FPGA与SoC芯片设计中五步法CDC跨时钟域检查方法学

Advanced Verification White Paper Five Steps to Quality CDC Verification Ping Yeung Ph.D. Mentor Graphics

CDC synchronizers are used to reduce the probability of metastable signals. Taking unpredictable metastable sig- nals and creating predictable behavior, they prevent metastable values from reaching the receiving clock domain.Metastability Effects Even when proper CDC synchronizers are used for all clock-domain crossings and all CDC protocols are cor-rectly implemented, metastability inevitably leads to unpredictable cycle-level timing [4, 5]. Traditional RTL simulation does not model metastability, therefore, it cannot be used to find functional problems that may arise when metastability manifests in hardware. We are going to show two scenarios in which the cycle-level timing of RTL simulation differs from the cycle-level timing of the actual hardware in the presence of metastability.In Figure 3, the incoming CDC signal, cdc_d , violates the register setup time. Although it is sampled correctly in RTL simulation, the register is metastable and the output settles to 0. As a result, the hardware transition is delayed by one cycle. Figure 2: A two-register CDC synchronizer. Figure 4: Hold time violation: hardware transition is advanced by one cycle. Figure 3: Setup time violation: hardware transition is delayed by one cycle.

微电子一些面试问题资料讲解学习

亚稳态 Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time不够,数据同样不能被打入触发器。 建立时间(Setup Time)和保持时间(Hold time)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现亚稳态(metastability)的情况。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。 在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态

(Metastability)。 一些关于微电子方面的笔试题(zz) 1.FPGA和ASIC的概念,他们的区别。(未知) FPGA是可编程ASIC。 ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。与门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点. 2.建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time不够,数据同样不能被打入触发器。 建立时间是指在时钟边沿前,数据信号需要保持不变的时

解决js跨域问题

JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON)。AJAX和JSONP在jQuery中的调用方式看起来极为相像,千万不要被这种现象迷惑,它们本质上有很大不同。AJAX是通过XMLHttpRequest对象获取非页面内容,而JSONP是动态的添加