💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
因为分析时理想化了输出特性曲线,认为0到1的翻转瞬间完成“突变”,但实际上变化有一个过程。高于VH才算1,低于VL才算0,中间的既不是1也不是0。如果输入信号刚好在寄存器不能判断的区间,那么输出就不能判断是0还是1,即亚稳态。(边沿采样边沿,数据不满足建立时间or保持时间)。 MTBFmean time between failure 平均故障间隔时间:从问题出现并导致故障的两个事件的之间的平均时间。越高越稳定。 不考虑器件本身的影响,对同一个触发器,数据变化频率越小,采样时钟越低,MTBF越大。 减少亚稳态的方法: 1.2级同步器 2.降低频率 3.避免变化过快或频繁的信号进行跨时钟域采样 4.采用更快的触发器(需要的建立时间和保持时间更短) 两级同步器无法避免亚稳态传播的情况: 两级同步器能够起作用的原因是:亚稳态在第二个周期最终会稳定下来,如果: 1.暂稳态维持时间不止一个周期,在下一个时钟上升沿的建立时间之前没有稳定,则第二级的触发器也会进入亚稳态。这种情况的概率是:1/MTBF 2.第一级亚稳态在下一个时钟上升沿之前稳定但是稳定为错误的值(比如要传递1,结果稳定为0),则亚稳态虽然不会传播下去但是引起了采样错误。 采用同步器的另外一个要求: 需要跨时钟域的信号,需要是源时钟域的寄存器输出,中间不能有组合逻辑。 组合逻辑毛刺变化太快,减小MTBF,这会增加亚稳态出现的概率 异步fifo: 介绍fifo可以从几个block下手,双端口RAM(随机存取存储器),写逻辑负责产生写信号和地址,读逻辑负责产生读信号和地址,地址比较负责产生空满标志。 空满判断:在写时钟域的地址比较用于产生写满信号,在读时钟域的地址比较用于产生读空信号。 地址传递要将二进制转换为格雷码进行传递,因为格雷码相邻两个只有一位发生变化能够避免亚稳态的传播。 二进制转格雷码:将二进制数向右移动一位再与原来的二进制数按位异或 格雷码转二进制码:最简单是使用loop的形式。 for(i=0,i<格雷码位数,i=i--) bin\[i\] = ^(gray\[格雷码位数,i\]) ![](https://img.kancloud.cn/5b/de/5bdea846a8659a218229d4e5d7d1f66f_555x128.png) 地址的比较:通常fifo为了防止读写溢出,一般都会增加一个额外的MSB,为了判断地址是否经过回卷。 通过比较地址判断空满,如果是二进制地址,地址每一位都相同表示读空;如果最高位不同,低3位相同表示写满。 如果是格雷码地址,格雷码地址发生回卷后,最高两位恰好是不回卷的反;根据这个特点,如果地址的每一位都相同表示读空,如果读地址的最高两位取反后和写地址相同表示写满。 ![](https://img.kancloud.cn/b8/7b/b87b73f0db00faa9dca61dbfae3c0ed3_926x624.png)  将空和将满:实质上是更加保守的空信号和满信号。当读写地址之间的间隔小于等于某一个间隔值就产生将空将满信号。 此时要注意格雷码地址不能用于计算间隔,所以要将格雷码转换成二进制码。 **写地址减去读地址**的差值小于等于间隔就表示将空。读时钟域产生将空信号。 对于将满信号,最高位相同,**低3位读地址减去写地址**再加上fifo深度 小于等于间隔产生将满信号          最高位不同,低3位读地址减去写地址 小于等于间隔产生将满信号