zoukankan      html  css  js  c++  java
  • 组合逻辑的Glitch与时序逻辑的亚稳态

    竞争(Race):一个门的输入有两个及以上的变量发生变化时,由于各个输入的组合路径的延时不同,使得在门级输入的状态改变非同时。

    冒险或险象(Hazard):竞争的结果,如毛刺Glitch。

    相邻信号间的串扰也可能产生毛刺Glitch。

    组合逻辑的冒险是过渡性的,它不会使得稳态值偏离正常值。根据严格的metal delay和gate delay可以计算出Glitch的出现时间和宽度。

    组合逻辑很容易带来毛刺,当信号作用在FF的reset,clear,clock,gate端时,会造成严重的后果。

    措施:使用Gray编码,保证一个时刻只有一个bit发生变化;

             采用寄存器采样;(将异步电路转换为同步电路);

             改变电路结构,加入冗余的电路来消除险象;如(加入delay cell进行滤波,再相与输出)

             后端加入滤波电容;

    寄存器的输入端对毛刺并不敏感,只有当毛刺出现在时钟沿并且影响到数据的建立时间和保持时间,才会导致寄存器输出出错。

    glitch的危害,在组合逻辑中大面积传播。

    (由于毛刺一般时间很短,多为皮秒级,发生错误的机会不大)

    在clock switch中如何保证Glitch-Free

    由于select信号与clock0和clock1可能完全无关,clock0与clock1也可能完全无关,所以在下图的电路中很容易出现Glitch

     

    一种Glitch-free的设计电路:(必须是加入clock,之后再进行Latch互锁)

    加入两个negative_edge的FF来相互互锁,在FF0和FF1的下降沿都还没到来,select已经改变时,FF输出信号与select信号相与

    必然都为0,在第一个FF触发后,FF0或FF1中的某一个工作一拍。

    1)由两级FF,且后一级是negative FF,保证拉长的clock段是clock=0的段,同时最终切换的clock一定是一个完整的clock 高电平部分。

    2)由互锁,保证只有在当前clock,已经接受到enable之后,另一个clock才能开始准备切换,保证当前clock,有完整沿。

    3)一个上升沿,一个下降沿,保证切换时间最小。

    总之,正确的切换到另一clock的时间会被拉长,拉长的部分是低电平。

    在clock0和clock1完全异步的情况下,做两级寄存器同步处理。

    亚稳态:在时序逻辑不满足setup/hold/revovery/removal时。

    触发器输出端从一个不确定的状态到一个随机值的过程,可能会经过震荡,这段时间叫做决断时间(resolution time)

    两个异步信号之间出现亚稳态的概率由MTBF(Mean Time Between Failures)来表示,一级的register以年为单位。二级的register以万年为单位。

    亚稳态造成的危害:

    1)时序逻辑存在一个时间tMET来保证亚稳态不能传播到下一级的寄存器。

    2)在不同的寄存器load中,造成值不同。原因是不同寄存器的MTBF可能不同。

    怎么处理亚稳态:

    1)通过同步寄存器链,来进行同步。不能同步频率很高的信号(输入保持至少三个时钟,来保证第二级寄存器能输出正确的值),                                

    且可能带来一个clock的错的值,需要依靠协议来保证电路的正确性。

    2)异步FIFO

  • 相关阅读:
    链接Oracle数据库
    Spring boot Mybatis
    Spring Boot 部署
    javaEE应用组件
    maven项目搭建步骤
    Spring Boot中Redis的使用
    Struts2 Hello,Wold
    使用JSON
    Spring中Quartz的配置
    Guice示例
  • 原文地址:https://www.cnblogs.com/-9-8/p/5409862.html
Copyright © 2011-2022 走看看