已知:
输入延时:T(in_delay)=1ns
Inverter的延时:T(inv_max)=1ns T(inv_min)=0.5ns
Buffer的延时:T(buf_max)=2ns T(buf_min)=1ns
NAND2的延时:T(nan_max)=1.8ns T(nan_min)=0.9ns
NOR2的延时:T(nor_max)=2ns T(nor_min)=1ns
D 触发器的传输时间:T(cq_max)=4ns T(cq_min)=1ns
建立时间:T(setup)=3ns 保持时间:T(hold)=1ns
求解:
1.电路是否有时钟违例?如果有该如何修改?
2.电路的最高时钟频率是多少
解答:
解答这个题啊,我认为我们不需要关注里面都是什么器件,主要关注里面的延时就可以了,因此先标注延时信息在上面。
在这个时序电路里无非就是建立时间违例和保持时间违例两种,而建立时间裕量中是包含时钟的,因此我们可以断定此时不会是建立时间违例因为时钟周期还不确定,因此如果有违例一定是保持时间违例。
时钟偏斜Tskew = Tclk2 - Tclk1 Tclk2表示时钟到达目的寄存器的时间;Tclk1表示时钟到达起始触发器的时间
建立时间裕量=T+Tskew-Tsu-Tco-Tdata
保持时间裕量=-Tskew+Tco+Tdata-Th
那么我们来计算下F1的最小保持时间裕量:Tdata为从F2的Q到F1的D,此时目的寄存器为F1
hold time stack(F1) =Tdata+Tco--Tskew-Th=0.9+1-2-1=-1.1ns
可以看到F1的保持时间已经违例。
那么再计算下F2的最小保持时间裕量: Tdata为从F1的Q到F2的D,此时目的寄存器为F2
hold time stack(F2) =Tdata+Tco--Tskew-Th= 1.5+1-(-1)-1=2.5ns
不错在违例情况。
因此可以得出结论:F1的保持时间违例
那么如何修改呢?增加F1-NAND2-F2之间的延时就可以了。因此可以在F1-NAND2-F2之间加入两个反相器和一个延时Buffer,使得
hold time stack(F1) = (Tcq+Tcom)min-(△T)max-Thold=(0.9+1+1)+1-(2)-1=0.9ns
2.要计算最快时钟频率当然要先找关键路径
首先看下面这条看上去比较长的路径:
T+Tskew>=Tco+Tsu+Tdata Tskew=Tclk2-Tclk1=-1~-2
T= Tco+Tsu+Tdata-Tskew=4+3+3-(-2)=12ns fmax=1/T=1/12ns=83.3MHz