福建键seo排名,seo优化多久能上排名,wordpress 图片站,策划方案网站一、亚稳态概述#xff1a;
1.1 触发器 在讲解亚稳态前#xff0c;先介绍一下亚稳态的源头 —— 触发器。 1.1.1 基本概念 在数字电路里#xff0c;触发器#xff08;Flip - Flop#xff09;是一种存储元件#xff0c;常用于同步电路中存储二进制数据。 它是由逻辑门
1.1 触发器 在讲解亚稳态前先介绍一下亚稳态的源头 —— 触发器。 1.1.1 基本概念 在数字电路里触发器Flip - Flop是一种存储元件常用于同步电路中存储二进制数据。 它是由逻辑门如与门、或门、非门构成的时序电路能够根据时钟信号的变化来存储和改变其输出状态。 触发器分为D 触发器Data Flip-Flop、T 触发器Toggle Flip-Flop、JK 触发器和SR 触发器Set-Reset Flip-Flop。触发器特点有① 双稳态如0和1② 时钟控制③存储作用。最后触发器还有建立时间Setup Time和保持时间Hold Time是两个关键时序参数它们对于触发器正确采样输入信号至关重要亚稳态的产生和这两个参数密切相关。 1.1.2 建立时间Setup Time和 保持时间Hold Time 建立时间指的是在时钟信号有效沿如上升沿或下降沿到来之前输入信号必须保持稳定不变的最小时间间隔。通俗来讲触发器收到时钟有效沿之前需要采集信号采集信号需要一定的时间在这段时间内必须保证输入信号稳定不变这个时间就是建立时间。比如假设一个触发器的建立时间是 2ns时钟信号上升沿触发。那么在时钟上升沿到来前的 2ns 内输入信号就不能发生变化必须保持稳定否则触发器可能无法正确采样到输入信号的值。 保持时间是指在时钟信号有效沿到来之后输入信号必须继续保持稳定不变的最小时间间隔。通俗来讲触发器收到时钟有效沿后需要锁存信号锁存信号也需要一定的时间在这段时间内同样要保证输入信号稳定不变这个时间就是保持时间。比如若触发器的保持时间为 1ns当时钟上升沿到来后输入信号在接下来的 1ns 内要保持不变这样触发器才能正确存储输入信号的值。
图示如下 建立时间在时钟有效沿之前图中上升沿有效保持时间在时钟有效沿之后建立时间和保持时间内都必须保证输入信号稳定不变。
1.2 亚稳态 亚稳态是数字电路中一种特殊的状态当触发器的输入信号在其建立时间 setup time 和保持时间 hold time 窗口内发生变化时触发器的输出就可能进入亚稳态。在亚稳态期间触发器的输出电压会在高低电平之间震荡无法稳定在逻辑 0 或者逻辑 1 上且这种状态可能会持续一段时间直到触发器受内部噪声等因素影响最终稳定到逻辑 0 或 1。这容易造成整体信号的严重失真。 二、亚稳态产生的原因 2.1 时域交叉 在数字系统中不同的模块可能工作在不同的时钟域下。当一个信号从一个时钟域传递到另一个时钟域时如果接收时钟域的触发器采样该信号的时刻正好处于信号发生变化的时间段内就可能违反触发器在建立时间和保持时间内输入信号必须稳定要求从而导致亚稳态。 比如在脉冲计数器的应用中待计数的脉冲信号输入信号可能来自外部设备其变化时间与系统内部的时钟没有同步当使用内部时钟对这个输入信号进行采样时就容易出现亚稳态问题在这个应用中就会导致计数值偏离理论值、计数值波动大等问题。 2.2 高频时钟影响 时钟频率越高时钟周期就越短。这意味着相同的周期中触发器的采样窗口越来越多那么窗口时间内输入信号发生变化的概率就变高了即输入信号在时钟信号上升沿附近变化时 更有可能进入触发器的建立和保持时间窗口进而引发亚稳态。
三、亚稳态的危害 亚稳态的危害主要体现在它可能导致系统误判信号状态。由于亚稳态输出会在高低电平之间震荡后续电路可能会将这种不稳定的输出当作有效信号进行处理从而引发逻辑错误。
四、解决亚稳态的常用方法 1构建多级同步器将多个D触发器级联构成同步器当异步信号进入同步器后会依次通过多个触发器每经过一个触发器亚稳态的恢复概率就会增加。通常使用两级同步器就能在很大程度上降低亚稳态带来的影响。 2异步FIFO异步 FIFO 主要由写时钟域、读时钟域、双端口 RAM 以及读写指针组成。写时钟域负责将数据写入 FIFO读时钟域负责从 FIFO 中读取数据。为了避免读写冲突需要使用格雷码来表示读写指针并且通过同步器将指针信号跨时钟域传递以此判断 FIFO 的空满状态。 3格雷码编码普通二进制码在计数过程中可能会有多位同时发生变化这在跨时钟域传输时容易导致错误。而格雷码每次计数变化只有一位改变在跨时钟域传输时更加稳定因此可以将普通二进制转化为格雷码进行传输。
下面展示在用verilog语言编写同步器解决亚稳态的代码
reg photon_signal_sync1;
reg photon_signal_sync2;always (posedge clk_400m or negedge rst_n) beginif (!rst_n) beginphoton_signal_sync1 1b0;photon_signal_sync2 1b0;end else beginphoton_signal_sync1 photon_signal;photon_signal_sync2 photon_signal_sync1;end
end
用reg定义寄存器变量并在内部时钟的触发下进行赋值传递来模拟D触发器的级联以此构成同步器。