latch/ff的电路结构及setup/hold/tpd、clkWidht/recovery/remove
1.与非门latch结构
1.1基本latch
用verilog描述如下:这个代码应该是可综合的,但是需要其他逻辑保证 s | r !=0
always @(*) beginif (s=0)q = 1;if (r=0)q = 0;
end
//s | r == 0是非法状态
修改一下代码如下:
always @(*) beginif (s=0)q = 1;else if (r=0)q = 0;
end
这种是代码中常用的组合逻辑没有else分支,电路如下:
1.2带clk/En的latch
有时也叫做电平触发的flip-flop。
1.3 D-latch
带clk的SR电平触发器的一个变种是D latch,而D latch是icg中常用的latch,代码及结构如下:
如上图右图
always @(*) beginif (clk=0)En_latch = En & TE;
end
2.主从触发器flip-flop
单latch会在clk有效期间 Q输出一直随D(SR)翻转,如果需要在一个CLK周期内,Q输出只变化一次就可以采用两个latch级联,主触发器在CLK=1是锁存输入,从触发器在CLK=0时,将主触发器的输出capture,并输出。
2.1 脉冲触发器
2.1.1 主从SR触发器
下图给出的是clk下降沿脉冲SR触发器
凡是SR latch/flip-flop总要求S和R不能同时有效,否则会出现不定态。解决办法有两种,JK接法和D-FF接法
另外主触发器在CLK==1期间输出Qm会一直随S/R变化,从触发器只会capture clk下降沿到来前Qm的状态。所以S/R的输入要被从触发器capture,就需要SR的最后变化在经过G7/8和G5/G6的传输延迟到达G3、G4的clk'上升沿(clk的下降沿)时已经稳定,而这个SR在主触发器的传输延迟就是setup的根源,后续会详细介绍。
如果S&R!=1,则Q/Q'的输出只与clk下降沿前一刻的SR状态有关。
2.1.2 主从JK触发器
由于Q和Q'的反馈,即使J&K==1,G7和G8输出不会同时为0。所以不会出现不定态。但是
J&K == 1时 下一拍clk下降沿到来,输出Q会取反。也就是J&K==1时,Q在不停的翻转,在很多场景下并不好用。
另外由于Q和Q'的反馈,当Q==0时,J=0,K=1并不起作用,此时Q输出不变;当Q==1时,J=1,K=0也不起作用,此时Q输出不变。换句话说,最终输出的Q和Q'并不只是和clk下降沿前的J和K的输入有关,是和整个CLK==1的高脉冲期间的整个J和K以及Q和Q'的状态有关。
2.2 DFF(边沿触发器)
为了提高可靠性,增强抗干扰能力,希望触发器的次态仅取决于CLK的下降沿(或上升沿) 到来时的输入信号状态,与在此前、此后输入的状态没有关系,我们可以采用两级D-latch级联的方式构成DFF。当然DFF也是分为主从触发器的。
2.2.1 主从D触发器
上面两种电路都是D触发器的电路图。
相比SR触发器,DFF没有输入约束,且没有保持状态
相比JK触发器,DFF的输出只与变化沿前的D(满足setup的D输入)有关
2.2.2 维持阻塞DFF
2.2.3 3个latch构成的DFF
3.latch/FF/边沿/脉冲
3.1 latch/FF
对于latch和flip-flop的区分,目前有些混乱,有的以是否有CLK信号为区分,有的以使能期间输入输出是否透明来区分("透明"表示使能期间输入变化会直接反映到输出)
按照是否有时钟信号来区分,带clk的latch被称作电平触发的触发器,而带en的latch就不叫触发器
D-latch又被称为电平触发的D触发器
用透明性来区分,电平触发器在CLK==1(0)期间,输入直接反应到输出,应该叫做latch
JK触发器也不是完全不透明的。
所以不要纠结这个划分。我更倾向于把具有主从结构或边沿触发特性的叫做触发器。
3.2脉冲/边沿触发
边沿触发的定义比较清晰,触发器的次态仅取决于CLK的下降沿(或上升沿) 到来时的输入信号状态【不包含当前状态Q】,与在此前、此后输入的状态没有关系。
脉冲触发的脉冲指的并不是边沿脉冲,而是CLK==1/0的脉冲电平期间。脉冲触发在CLK有效期间的输入和当前输出状态都可以影响输出次态。
DFF显然是边沿触发
SR触发器因为存在同时为0的保持状态和同时为1的不定态,所以不能认为是边沿触发。
JK触发器因为反馈的存在,输出还和当前状态Q有关,所以不能认为是边沿触发
另外无论DFF还是SR/JK触发器,它们的主触发器在clk有效电平都会发生多次改变,这个和FF是边沿触发还是脉冲触发没关系。
DFF的保持和SR触发器的保持不一样,DFF要完成保持功能 是通过把DFF的Q返回给D,然后用有个mux信号选择输入信号d还是Q给port D
4.从FF电路分析setup/hold/Tpd/clkWidth/recovery/removel
4.1 setup/hold/Tpd/clkWidth的来源
以上升沿有效维持-阻塞DFF为例:
T_setup:时钟信号在门G3,G4输入端,激励信号D经过G2加在G4输入端,经过G2,G1加在G3输入端→激励信号至少比CP信号提前2个门电路延时才保证CP脉冲到来时稳定(建立时间需要>=2个门电路延时时间)
T_hold:CP脉冲到来后,G3,G4输出在一个门电路延时后改变,其输出将反馈至G1,G2维持后,激励信号可撤消(保持时间至少1个门电路延时时间);
T_pd:G3,G4输出在一个门电路延时后送到G5,G6输入,经1个门延时后输出(传输延时需要>=2个门电路延时时间)
CLK_width:保证G3~G6组成的同步RS触发器稳定翻转,CP高电平维持时间>=触发器传输延时(2个门电路延时);在CP=0期间,必须等激励输入稳定才可进行下一次触发(>=触发器建立时间)。综上,CP脉冲周期>=4个门电路延时
以上升沿触发主从DFF为例:
1.要保证主触发器的Q端稳定输出,要求G1/2输出至少保持一个G3/4延迟,才能建立正反馈
2.要保证主触发器的Q端稳定输出不晚于从触发器的G5/6clk上升沿到达时刻t0
设D在t1,t2之间保持不变,CLK在t3时刻低电平跳变到高电平,t4为G3/4稳定时刻则:
t1+G9
t3+G11
T_setup:D端要保证在CLK上升沿之前,被G1、G2稳定采样,需要G9+G2的延迟
T_hold:由于要G3/4稳定输出,需要保证G1/2的输入至少保持G3/G4的延迟时间,那么CLK下降沿到来之后,且此时G1/2的()