目录
快速理解flip-flop
在之前的文章当中我们讲到两种触发方式:边沿触发、电平触发。
在检测边沿信号时候,要怎么才能检测到一个边沿的变化方向呢?我们不妨把关注放在边沿变化的前后,如果是上升沿,那么就是从低电平到高电平;反之,如果是下降沿,就是从高电平到低电平。我们不需要去检测电平变化的一瞬间,那太快了,我们可以检测边沿变化前后的状态,来判断边沿变化的方向。事实上,flip-flop(触发器)就是通过两个latch来实现的,为了辅助理解,可以参考下图。
上图所示是latch的原理,只有一道门
上图所示是flip-flop原理图,通过两道门检测实现
D flip-flop D触发器
D触发器和D锁存器符号图
左边是D触发器,相比右边的D锁存器,多了一个三角,这个是边沿触发的意思,只有上升沿可以识别通过。
下图展示D触发器和D锁存器的时序区别:
D latch时序变化原理:当clk信号拉高时候,Q(latch)随着D变化,由于物理限制,会存在一定的延迟,标注在途中的delay。在图片右端的粉色标注中可以看到,clk信号为0时,即使D信号变化,Q也不会随之变化。
D flip-flop时序变化原理:当clk信号为上升沿的时候,采集对应时刻的D信号状态,赋值给Q(flop),图中粉色字迹标注,在clk的第二个上升沿的位置,D位于高电平,Q(flop)变为高电平。
用D latch是可以实现D -ff(flip-flop)的,如下图电路所示:
当clk为0的时候,L1中信号通行,L2关闭,D信号传递到N1;
当clk为1的时候,L2中信号通行,L1关闭,N1信号传递到Q;
SR flip-flop SR触发器
门控SR锁存器(gated SR latch)电路结构,真值表如下所示:
module gated_sr_latch (
input S,R,En,
output Q,Qn
);
wire S1,R;
and(S1,En,S);
and(R1,En,R);
nor(Qn,S1,Q); //输出,输入,输入 门电路的例化固定顺序
nor(Q,R1,Qn);
endmodule
En(clk) | S | R | Qnext | 作用 |
0 | x | x | Q | 保持 |
1 | 0 | 0 | Q | 保持 |
1 | 0 | 1 | 0 | Reset |
1 | 1 | 0 | 1 | Set |
1 | 1 | 1 | x | 非法状态 |
通过电路图和真值表可以看出,在En使能信号(clk有时候会用时钟信号作为使能信号)为1时,正常工作,属于电平触发。如果我们想要用边沿触发,就需要完成两次电平检测,叫做SR Flip-Flop,如下所示:
module sr_ff (
input clk,S,R,
output Q,Qn,
output Master_Q,Master_Qn,
output clkn // for slave
);
not(clkn,clk);
gated_sr_latch master( //直接例化了上面定义的module gated_sr_latch
.S(S),.R(R),.EN(clk),
.Q(Master_Q),.Qn(Master_Qn)
);
gated_sr_latch slave(
.S(Master_Q),.R(Master_Qn),.EN(clkn),
.Q(Q),.Qn(Qn)
);
endmodule
当Clk为1,Master工作;Clk为0,Slave工作。
S | R | Q(t+1) | Qn(t+1) | 作用 |
0 | 0 | Q | Qn | 保持 |
0 | 1 | 0 | 1 | Reset |
1 | 0 | 1 | 0 | Set |
1 | 1 | ? | ? | undefined |
所以检测到的clk信号应该是从高电平变为低电平(下降沿,因为是1→0),用vivado可以写一个简单的testbench测试,得到波形图:
在45ns的时候,R拉高,这时候可以看到MQ(Master Q)并没有变化;
直到50ns时,clk信号拉高,Master SR 才工作,MQ拉低,MQn拉高;
在60ns时,Q和Qn才开始变化,因为clkn此时才拉高(Slave SR的时钟信号是clk信号经过反相器,为了方便引用命名为clkn)。
用于测试的vivado工程文件会在附件中给出。
JK flip-flop JK触发器
与上一篇文章中我们提到JK和SR的区别其实就在于两个信号都为1的时候,SR处于非法状态,但是JK处于toggle反转状态,Q会一直翻转。
J | K | Q(t+1) | Qn(t+1) | 功能 |
0 | 0 | Q | Qn | 保持 |
0 | 1 | 0 | 1 | Reset |
1 | 0 | 1 | 0 | Set |
1 | 1 | Qn | Q | Toggle |
由于内部原理已经在上一篇讲述,就不再赘述,与SR-ff的主要区别就是在Master之前还有两个与门,这是J=1,K=1时可以toggle的关键。
!!!注意:本文都以高有效触发器为例讲解,举例来说,在SR当中,S为1是Set,但是在低有效触发器当中,S为0才是Set。其实内部的结构变化也很简单,只需要把与非换成或非即可。