FPGA之组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念
组合逻辑电路与时序逻辑电路
数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑;另一类叫做时序逻辑电路,简称时序电路或时序逻辑。
如果数字电路满足任意时刻的输出仅仅取决于该时刻的输入,那么该数字电路为组合逻辑电路。相反,如果数字电路任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态,那么该数字电路为时序逻辑电路。例如,下图中只由一个与门组成的电路就是一个组合逻辑电路。


对于上图所示数字电路,假设寄存器中目前保存的值是逻辑1,而此时输入端B没有从逻辑0到逻辑1的跳变(B相当于寄存器的时钟信号),设此时B为逻辑0,那么如果输入端A为逻辑1,则C输出逻辑1;但是如果过了一段时间后,A变为0,且随后B的上升沿到来,那么寄存器中保持的值变为逻辑0,那么在这之后,若令输入端A为逻辑1,B为逻辑0,则由于寄存器中保存着逻辑0值,所以C输出逻辑0。对比前后两种情况,A、B两端的输入都是逻辑1,但是C的输出却不同。由此可见,该数字电路的输出并不完全由输入决定,因此它是一个时序逻辑电路。
同步逻辑电路与异步逻辑电路
基于FPGA的设计几乎都是时序逻辑电路,极少会有设计纯组合逻辑电路的情况。记忆性赋予时序逻辑电路更多的功能和更丰富的表达,因此,时序逻辑电路在FPGA的设计中占有非常重要的地位。对于时序逻辑,按信号间关系来看,又可分为同步时序逻辑和异步时序逻辑,简称同步逻辑和异步逻辑。
时序逻辑电路中最关键的就是驱动各个记忆元素(例如寄存器、RAM甚至锁存器等)进行记忆动作的时钟信号。通常,我们认为只被一个时钟信号驱动的设计叫做同步时序逻辑。这是因为所有记忆元素都在被同一个时钟信号驱动,那么它们的输出都会同时变化,所以它们对数字电路的影响是同步的。例如下图:

不过这个定义还有些狭隘,广义的同步时序逻辑概念中,允许数字电路中有多个时钟存在,但是这些时钟之间应该有着固定的因果关系,又或者它们所驱动的记忆单元在电路上是完全隔离的。对于第一种情况:如果多个时钟信号之间有固定的因果关系的话,那么即使它们对电路的影响不是完全同时的,但可以根据时钟之间的因果关系推断出这种时间上的固定误差,从而电路状态的变化也是完全可预期的,因此可以认为是同步。例如

如果多个时钟驱动的记忆单元之间完全是隔离的,那么其实它们就是多个同步时序逻辑电路的简单集合体,因此也是同步的。例如:

那么从广义同步时序逻辑电路的概念出发,凡是不符合的即属于异步时序逻辑电路。不过这样的定义显得太过偷懒,那么这里总结一下异步时序逻辑的特点,给出异步时序逻辑电路的概念:如果时序逻辑电路存在至少一个这样的组合逻辑功能块——它的输入、输出端口不全来自或导入一个时钟或若干个具有因果关系的时钟所驱动的记忆元素,那么该电路为异步时序逻辑电路。例如,下图组合逻辑(一根连线也是组合逻辑,可看成缓冲门)的输入由clk1时钟驱动的寄存器提供,输出却给了clk2驱动的寄存器。



喜欢本文的同学欢迎收藏点赞多多留言 ,本文原发于【FPGA hdl】