数电和Verilog-组合逻辑和时序逻辑

A.10 组合逻辑和时序逻辑电路

数字逻辑电路中分为两种逻辑电路结构,分别是组合逻辑和时序逻辑,如下图所示:

数电和Verilog-组合逻辑和时序逻辑_第1张图片

时序逻辑电路由时钟clk来进行控制,像心跳一样一拍一拍的通过上升沿或下降沿来进行数据的同步和寄存,而组合逻辑则是一些逻辑运算,比如与、或、非、异或等运算,根据运算的复杂度,其组合逻辑电路的路径延迟就不同,但需要满足时序逻辑电路的建立时间和保持时间。

一般两组触发器之间就是组合逻辑电路,图上的运算过程大致是:

data_in数据输入进来,然后通过寄存器寄存,然后经过一段组合逻辑进行运算,最后再通过一组寄存器寄存并输出data_out,而这个数字电路的整体都是由一个时钟clk来进行同步的,相当于根据clk的跳变来完成电路信号的处理和传输,因此可以说这个电路是基于clk的时钟进行同步工作的。

组合逻辑

由与、或、非门组成的网络。

输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路。也就是说,当输入信号中的任何一个发生变化时,输出都有可能会根据其变化而变化,但与电路目前所处的状态没有任何关系。

output = f(input a,b,c,...,d);

可以把组合逻辑电路抽象成一个函数,这个函数的输入端有a,b,c,…,d等电平输入端,然后经过与、或、非等基本数字逻辑运算,再经过一定的电路输出的延迟(理想的前端仿真环境下延迟为0)之后,输出运算结果。

常见的组合逻辑电路有:多路器、数据通路开关、加法器、乘法器等。

时序逻辑

由多个触发器和多个组合逻辑块组成的网络。

输出不只是当前输入的逻辑电平的函数,还与电路目前所处的状态有关的逻辑电路。

output = f(input a,b,c,...,d,clk,q)

同样,这里可以把时序逻辑电路抽象成一个函数,这个函数的输入端除了有a,b,c,…,d等电平输入端以外,还有时钟输入端clk以及上一个寄存器输出的状态q有关,在时钟clk的边沿跳变下,进行运算。也就是说,下个状态的输出与上个状态有关系。

常见的时序逻辑电路有:计数器、复杂的数据流动控制逻辑、运算控制逻辑、指令分析和操作控制逻辑。

小结

一般我们说的时序逻辑电路指的是基于时钟同步的时序逻辑,这里的同步时序逻辑电路指的是基于统一的时钟域控制,再简单说,一个模块中的所有的寄存器时钟输入端口都接入同一个时钟上。

而异步时序逻辑电路的时钟触发输入端口会接入到各种信号上,任何一个信号变化都可能导致寄存器被触发。因此,当设计复杂的数字逻辑系统时难以理解。

另外组合逻辑的延迟所带来的时序上的竞争冒险导致难以控制寄存器触发的时机,从而难以保证流片后逻辑功能的正确性。

而基于统一的时钟域控制的同步时序逻辑电路,则几乎没有上述问题,也容易控制的多,因此使得设计复杂的数字逻辑系统成为可能。

本章后续内容的说明

下节课开始,我们会开始通过几个典型的组合和时序逻辑电路的实例,结合之前讲过的语法基础,带大家简单、迅速、完整的走一遍设计和简单验证的流程,从而让大家加深理解,提升本章基础内容的学习效果。

公众号:程序员Marshall

你可能感兴趣的