1. 应用背景 1.1 亚稳态发生原因 在FPGA 系统中,如果数据传输中不满足触发器的Tsu 和Th 不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(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 时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。如图 3.1 所示。 图 3.1 亚稳态产生示意图 由图可知,当产生亚稳态后 Tco 时间后会有 Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0” 或者“1” ,这个是随机的。因此,会对后续电路判断造成影响。 2.2 复位电路的亚稳态 2.2.1 异步复位电路 在复位电路设计中,复位信号基本都是异步的,常用异步复位电路 Verilog 描述如下: always @(posedge clk or negedge rst_n) begin if(!rst_n...