基于FPGA的跨时钟域信号处理——亚稳态(V3-FPGA学院)

(V3-FPGA学院教你学习FPGA)

基于FPGA的跨时钟域信号处理——亚稳态

基于FPGA的跨时钟域信号处理——亚稳态

什么是亚稳态?

所有数字器件(例如FPGA)的信号传输都会有一定的时序要求,从而保证每 个寄存器将捕获的输入信号正确输出。为了确保可靠的操作,输入寄存器的信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变。而该寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco)。如果数据信号的变化违反了Tsu后者Th的要求,那么寄存器的输出就会处于亚稳态。此时,寄器的输出会在高电平1和低电平0之间盘旋一段时间,这也意味着寄存器的输出达到一个稳定的高或者低电平的状态所需要的时间会大于Tco。

在同步系统中,输入信号总是能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号的传输上。由于数据信号可能在任何时间到达异步时钟域的目的寄存器,所以设计者无法保证满足Tsu和Th的要求。然而,并非所有违反寄存器的Tsu或Th要求的信号会导致输出亚稳态。某个寄存器进入了亚稳态后重新回到稳定状态的时间取决于器件的制造工艺及工作环境。在大多数情况下,寄存器将会快速的返回稳定状态。

寄存器在时钟沿采样数据信号好比一个球从小山的一侧抛到另一侧。如图1所示,小山的两侧代表数据的稳定状态——旧的数据值或者新的数据值;山顶代表亚稳态。如果球被抛到山顶上,它可能会停在山顶上,但实际上它只要稍微有些动静就会滚落到山底。在一定时间内,球滚的越远,它达到稳定状态的时间也就越短。

如果数据信号的变化发生在时钟沿的某段时间之后(Th),就好像球跌落到了小山的“old data value”一侧,输出信号仍然保持时钟变化前的值不变。如果数据信号的变化发生在时钟沿的某段时间(Tsu)之前,并且持续到时钟沿之后的某段时间(Th)都不再变化,那就好像球跌落到了小山的“new data value”一侧,输出数据达到稳定状态的时间为Tco。然而,当一个寄存器的输入数据违反了Tsu或者Th,就像球被抛到了山顶。如果球在山顶停留的越久,那么它到达山底的时间也就越长,这就相应的延长了从时钟变化到输出数据达到稳定状态的时间(Tco)。

图2很好的阐释了亚稳态信号。在时钟变化的同时,寄存器的输入数据信号 也处于从低电平到高电平的变化状态,这就违反了寄存器的Tsu要求。图中的输

出信号从低电平变化到亚稳态,即盘旋于高低电平之间的一个状态。信号输出A最终达到输入信号的新状态值1,信号输出B却返回了输入信号的旧状态值0。在这两种情况下,信号输出变化稳定在固定的1或者0状态的时间远超过了寄存器的固有Tco。

如果输出信号在下一个寄存器捕获数据前(下一个时钟锁存沿的Tsu时间前) 处于一个稳定的有效状态,那么亚稳态信号不会对该系统照成影响。但是如果亚稳态信号在下一个寄存器捕获数据时仍然盘旋于高或者低电平之间,那将会对系统的后续电路产生影响。继续讨论球和小山的比喻,当球到达山底的时间(处于稳定的逻辑值0或1)超过了扣除寄存器Tco以外的余量时间,那问题就随着而来。

同步寄存器

当信号变化处于一个不相关的电路或者以不时钟域,它在被使用前就需要先 被同步到新的时钟域中。新的时钟域中的第一个寄存器将扮演同步寄存器的角色。

为了尽可能减少异步信号传输中由于亚稳态引发的问题,设计者通常在目的 时钟域中使用一串连续的寄存器(同步寄存器链或者同步装置)将信号同步到新的时钟域中。这些寄存器有额外的时间用于信号在被使用前从亚稳态达到稳定值。同步寄存器到寄存器路径的时序余量,也就是亚稳态信号达到稳定的最大时间,也被认为是亚稳态持续时间。

同步寄存器链,或者同步装置,被定义为一串达到以下要求的连续寄存器:

■链中的寄存器都由相同的时钟或者相位相关的时钟触发;

■链中的第一个寄存器由不相关时钟域或者是异步的时钟来触发;

■每个寄存器的扇出值都为1,链中的最后一个寄存器可以例外。

同步寄存器链的长度就是达到以上要求的同步时钟域的寄存器数量,图3是一个两级的同步寄存器链,

传输在不相关时钟域的信号,都有可能在相对于捕获寄存器时钟沿的任何 时间点变化。因此,设计者无法预测信号变化的顺序或者说信号两次变化间经过了几个锁存时钟周期。例如,一条异步总线的各个数据信号可能在不同的时钟沿变化,结果接收到的数据值可能是错误的。

设计者必须考虑到电路的这些情况,而使用双时钟FIFO(DCFIFO)传输信号或者使用握手信号进行控制。FIFO使用同步装置处理来自不同时钟域的控制信号,数据的读写使用两套独立的总线。此外,如果异步信号作为两个时钟域的握手逻辑,这些控制信号就需要用于指示何时数据信号可以被接收时钟域锁存。如此一来,就可以利用同步寄存器确保亚稳态不会影响控制信号的传输,从而保证数据在使用前有充足的时间等待亚稳态达到稳定。

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家

时间: 2024-12-22 04:11:04

基于FPGA的跨时钟域信号处理——亚稳态(V3-FPGA学院)的相关文章

跨时钟域信号处理——专用握手信号

在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同频不同相. 图1是一个跨时钟域的异步通信实例,发送域和接收域的时钟分别是clk_a和clk_b.这两个时钟频率不同,并且存在一定的相位差.对于接收时钟域而言,来自发送时钟域的信号data_a2b有可能在任何时刻变化. 图1 跨时钟域通信 对于上述的异步时钟域通信,设计者需要做特殊的处理以确保数据可靠

跨时钟域信号处理

1.什么是跨时钟域? 如图所示: 缺点:数据传输不可靠 2.如何实现信号传输稳定? 设计最基本的思想就是同步. 看两篇文章:<(多图) 跨越鸿沟:同步世界中的异步信号>.<cpu与fpga跨时钟域数据交换的实现问题>

FPGA中亚稳态相关问题及跨时钟域处理

前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系. 触发器由于物理工艺原因,数据并不是理想化的只要触发沿时刻不变即可.触发器有固定的建立时间,保持时间. 建立时间:在时钟有效沿到来前数据需要稳定的时间. 保持时间:在时钟有效沿之后数据还需要保持不变的时间.

FPGA中信号的跨时钟域处理模板(一)

在做项目的时,我们经常会使用到多个时钟.每一个时钟在FPGA内部都会形成一个时钟域,如果一个时钟域中要用到另外一个时钟域的信号,也就形成了跨时钟域的操作,这时候要格外小心. 一.实际使用背景       假设在项目中需要在clk_b时钟域中用到用到来自clk_a中的信号.那么此信号就需要从clk_a时钟域跨越到clk_b中因此我们要建立一个同步计数器,该设计器从clk_a 中获取信号,然后再clk_b中创建一个新的信号.并从作为输出.模型如下: 在此设计中.我们假设输入的信号与clk_a和clk

FPGA中信号的跨时钟域处理模板(三)

一.背景  如果clk_a时钟域中的某个任务需要在clk_b时钟域中来完成.则可以采用以下设计:通过框图可知人任务的跨时钟域的处理相当于两个买冲刺你好的跨时钟域的处理.在两个标志信号跨时钟域完成后,在此期间相关任务的跨时钟域. 这只是其中的一种方法. 二.模板 模块 TaskAck_CrossDomain( 输入 clkA, 输入 TaskStart_clkA, 输出 TaskBusy_clkA,TaskDone_clkA, 输入 clkB, 输出 TaskStart_clkB,TaskBusy

柯西恒等式 FPGA中信号的跨时钟域处理模板(四)

要将数据总线(2位或更多位宽度)从一个时钟域移到另一个时钟域,我们有几种处理方法.一下有几种方法可以采取. 1.格雷码:如果数据总线是单调计数器(即仅递增或递减),我们可以将其转换为格雷码,该格雷码具有跨时钟域的能力(在某些定时条件下)   2.数据冻结:如果数据总线是非单调的,则使用标志向其他域发出信号以捕获值(在源时钟域中冻结该值). 3.数据突发:如果数据总线具有许多需要跨越时钟域的连续值,请使用异步FIFO,在其中您从源时钟域中推送值,并从另一个域中读取值. 一.第3种方法为例    

数字IC学习之五(综合、SVA以及跨时钟域设计)

我们来说说综合,通常意义上的综合指的是,将RTL风格的描述转化为逻辑网标,通俗点说,就是把你的代码转化成真实的电路,我们以EDA工具Design Compiler为例来说说如何进行综合,对于综合我推荐的资料为<Design Compiler User Guide>(synopsys)(书1),<Optimization Reference Manual>(synopsys)(书2),<高级ASIC芯片综合>(书3),<专用集成电路设计实用教程>(虞)(书4)

cdc跨时钟域处理-结绳握手法

参考文档 https://blog.csdn.net/u011412586/article/details/10009761 前言 对于信号需要跨时钟域处理而言,最重要的就是确保数据能稳定的传送到采样时钟域. 普通的cdc处理方法需要关注时钟域速度的异同,即分慢时钟域到快时钟域.快时钟域到慢时钟域.相位关系等问题,会让人瞬间爆炸. 那么,是否有一种相对稳定,又无需关注传送时钟域和接收时钟域两者时钟速度.相位关系的数据传递方式呢? 这里仿真验证握手结绳法,自己想的,不知道跟结绳法是不是一致的...

跨时钟域设计【一】——Slow to fast clock domain

跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HDL设计.     // Trigger Cross Domain Design, Slow to fast clock domain  module Trig_ CrossDomain _S2F (      input clkB,      input rst_n,      input Trig