数字电路一些常见问题及解答(有些来自网络)

1 同步电路和异步电路的区别

同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。比如D触发器,当上升延到来时,寄存器把D端的电平传到Q输出端

异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险

2 Setup time and Holdup time

建立时间是指触发器的时钟信号上升沿到来之前,数据稳定不变的时间,输入信号应提前时钟上升沿T时间到达芯片,这个T就是建立时间-Setup Time,如不满足建立时间,这个数据就不能在这一时钟打入触发器。

保持时间是指触发器的时钟信号上升沿到来之后,数据稳定不变的时间,如果保持时间不够,数据同样不能在这一时钟打入触发器。

建立时间+保持时间=时钟周期

数字电路一些常见问题及解答(有些来自网络)

T>Tco+Tdelay+Tsetup,上图来自网络 

这个不等式非常重要 下面我具体解释下:T为时钟周期 Tco为触发器的输出延迟 Tdelay为组合电路的延迟 Tsetup为建立时间

这就是建立时间需要满足的条件 同样 这个不等式也说明了设计的频率的最大值,这点是最重要的

有了建立时间 保持时间自然可以得出

3 数字逻辑中的竞争和冒险,及其解决方法

当一个门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同组合逻辑路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果若导致冒险(Hazard)发生(例如毛刺(glitch)),并造成错误的后果,那么就称这种竞争为临界竞争。若竞争的结果没有导致冒险发生,或虽有冒险发生,但不影响系统的工作,那么就称这种竞争为非临界竞争。组合逻辑电路的险象仅在信号状态改变的时刻出现毛刺(glitch),这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。

(1) 通过改变设计,破坏毛刺产生的条件,减少毛刺发生。例如,数字电路设计中,常常采用Gray Code计数器取代普通计数器,因为Gray Code 计数器的输出每次只有一位跳变,消除了竞争冒险发生的条件,避免了毛刺的产生。

(2) 毛刺并不是对所有的输入都有危害,例如:D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,因此可以说D触发器的D输入端对毛刺不敏感。因此,在系统中尽可能采用同步电路,因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且满足数据的建立和保持时间,就不会对系统造成危害。(由于毛刺一般都很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)

3以上方法可以大大减少毛刺,但它并不能完全消除毛刺,有时,我们必须手工修改电路来去除毛刺。我们通常使用"采样"的方法。一般说来,冒险出现在信号发生电平转换的时刻,也就是说在输出信号的建立时间内会发生冒险,而在输出信号的保持时间内是不会有毛刺信号出现的。如果在输出信号的保持时间内对其进行"采样",就可以消除毛刺信号的影响。

方法一:在输出信号的保持时间内,用一定宽度的高电平脉冲与输出信号做逻辑"与"运算,由此获取输出信号的电平值。

方法二:利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。

4如何解决亚稳态

亚稳态是指触发器无法在某一个规定的时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联方式传播下去。
(1)亚稳态发生的原因

在同步系统中,如果触发器的setup time / hold time不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。

(2)亚稳态的危害

由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。

(2)亚稳态的解决方法

只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者要*同步来实现,而后者根据不同的设计应用有不同的处理办法

前者经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。注意,这里说的是“基本”,也就是无法“根除”,那么如果第二个触发器Q出现了亚稳态会有什么后果呢?后果的严重程度是有你的设计决定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短暂的异常之后可以恢复正常工作,例如设计异步FIFO时使用格雷码计数器当读写地址的指针就是处于这方面的考虑。如果设计上没有考虑如何降低系统对亚稳态的敏感程度,那么一旦出现亚稳态,系统可能就崩溃了