热度 13| |||
图1. D触发器symbol
为了便于理解给出了D触发器的symbol,时序图和比较简单的静态CMOS D触发器原理图
时序逻辑电路中重要的几个参数:
t-su : 建立时间,D的数据需要在建立时间前到达
t-hold: 保持时间,D在该段时间应保持稳定
Tc-q : 时钟到输出的延时,时钟到CLK→Q路径延迟
结合CMOS结构可以对上述三个时间有更好的理解:
图2. D触发器简单时序图
图3. D触发器简单的CMOS结构-时钟上升沿敏感
根据原理图对三个时间进一步理解:该电路工作原理,CLK = 0,T1开,数据经D传输至两个反相器进行缓存,等到CLK=1;T2开,数据经过反相器 I3,I4后输出至 Q。所以上升沿敏感其实传输的数据是CLK= 0 时的数据。因此需要被传输的数据应该在上升沿来到前稳定,即建立时间。保持时间需要从传输门进行考虑,CMOS结构并不是突变,MOS在输入变化时有一段时间不稳定,为了I1,I2处数据发生突变,所以数据需要稳定一段时间。Tc-q很好理解,路劲延迟。
结合上述分析,进行一个简单的实验。
实验内容,4位二进制计数器,计数器计数到10将valid拉高一个时钟,实验中有两个valid,一个valid_w,一个valid_r,具体不同见源代码:
module timing_test(clk,rst,valid_w,valid_r);仿真结果如图4:
图4 实验仿真结果
可以看到valid_w,是在cnt = 10时拉高,而valid_r是在cnt = 11时拉高,如何理解呢?结合图5的RTL图可以做一个很好的解释。
图5 实验RTL图当时钟上升沿到的时候
计数加一需要在建立时间时才能被触发器采样,同时需要一段延迟才能数稳定。考虑当前时钟cnt=9;当下个时钟到来时,cnt触发器和valid_r触发器同时对clk上升沿敏感,D也同时采样,经过前面对时序的分析也可以知道,D采的是上升沿到来前的值所以valid_r采到的是cnt=9,在RTL_ROM中的比对结果,所以需要下个时钟才能获得cnt=10,在RTL_ROM中的比对结果。当然上升沿这个时刻valid_w也是0,但经过一小段传输延迟后valid_w变为0了,这里仿真结果在逻辑上是正确的,在大自然下应该会有一定的延迟。