竞争(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