数字电路基础-门电路

2022-03-16
4 min read

门电路基础

门电路有 IEEE(电气与电子工程师协会) 和 IEC(国际电工协会)认定的两套与或非的图形符号, 其中一套是目前在国外教材和 EDA 软件中普遍使用的特定外形符号,另一套是矩形轮廓的符号,下文会混用两类符号。具体细节可以参考 wiki:逻辑门

常见门电路

缓冲器(Buffer)可以提供更大的电流,没有额外的逻辑信息。缓冲器使用三角形表示

德摩根等效符号

\[\begin{array}{ll} \neg(p \wedge q) \equiv(\neg p) \vee(\neg q) & (A \cap B)^C=A^C \cup B^C \\ \neg(p \vee q) \equiv(\neg p) \wedge(\neg q) & (A \cup B)^C=A^C \cap B^C \end{array} \]

根据德摩根定理,下面相关门电路符号逻辑上是等价的

TS / OD / TG&SW

三态输出门(简称 TS 门)除了有高电平和低电平(即逻辑 1 和逻辑 0)两种逻辑状态外,还有第三种状态——高阻状态(记为 Z),或称为禁止状态。在第三种状态下,三态门的输出端相当于悬空,其电压值可浮动在高低电平之间的任意数值上

三态输出很少用于 ASIC 和 FPGA。尽管多路复用器需要更多的芯片面积用于门电路和连线,但是,采用多路复用器通常能够比片上三态输出提供更好的性能。然而,三态输出和总线广泛应用于片外系统。在印制电路板上,三态输出和总线总是用于微处理器、存储器以及各种各样的协处理器和接口芯片之间的连接,包括定制的 ASIC 和 FPGA( AISC 和 FPGA 中通常会有一个或多个三态输出端口)

普通门电路的线与操作有短路风险,故有些场景下提供了漏极开路门(OD ⻔),使用 OD 门需要外接上拉电阻

TG&SW 门:

噪声容限

数字电路相比于模拟电路有着更高的可靠性,很大一部分原因在于数字状态的容限

门电路实现

MOS/CMOS

MOS 晶体管分为两种类型:n 沟道型和 p 沟道型,n 和 p 表示两个可控电阻端的半导体材料的类型。CMOS(Complementary Metal Oxide Semiconductor)中的 C 表示互补,一侧 MOS 的打开对应着另一侧 MOS 的关闭,CMOS 是德摩根定理的现实表现。CMOS 门电路的输出一共四种状态(NMOS 负责下拉、PMOS 负责上拉):

相比其他工艺,CMOS 逻辑电路一般只有动态功耗(\(C_{Load} f V_{D D}^{2}\)),因为所有 CMOS 实现的门是没有静态电流的(不考虑漏电流的情况下)。每一级的 CMOS 门都可以向下一级提供优质高低电平\(V_{DD} \ V_{SS} \))而且这个高低电平可以按照工艺和需求进行调整,所以 CMOS 芯片的可用电平范围更大。最简单的 CMOS 电路就是反相器,只需一个 NMOS 晶体管和一个 PMOS 晶体管。下图左侧是由 CMOS 管实现的反相器,右侧是传输门

使用 CMOS 工艺实现数字电路时因为反相逻辑门(比如 Nor、Nand 等)更容易实现且速度更快,所以反相逻辑门一般是 CMOS 工艺下的基本门电路,下图是与非门/或非门在 CMOS 工艺下的实现

其他常见门电路反而使用反相门实现(例如常见的 And、Or 会在NAnd和Nor后加一个反相器实现),故部分 CMOS 工艺下反相逻辑门比常规门更快,下图是 CMOS 工艺实现的与门,即在上图的与非基础上加了一个非门

利用 CMOS 的互补特性,可以非常方便的直接使用 MOS 管搭建逻辑电路,HDL 综合的时候一般使用标准门电路实现复合逻辑,如果综合器支持MOS管级综合,则可以减少MOS数量。当然 CMOS 工艺也有一定的缺点,其开关速度没有部分工艺下双极型电路快,且扇出功率也较低

二极管&其他

细节可参考这里,下面给出两个例子

逻辑电路还可以使用 TTL/ECL/Bi-CMOS 等工艺实现,这里不做详细介绍。双极型三极管构建的逻辑电路不能按照模拟电路中工作区的分析方法,要同时考虑放大区和饱和区。下图是双极型三极管 LTSpice 模拟结果,注意三极管 Q1 的集电极(R1)会随着 \(V_{in}\) 电压逐渐大于 \(V_2+ V_{PN}\) 而出现反向电流

数字电路

数字电路分为两大类:组合(combinational)电路与时序(sequential )电路。组合电路的输出只与输入有关, 其运算可由真值表(truth table)完全描述;时序电路的输出和当前的输入和过去的输入都有关系。简单来说组合电路没有记忆而时序电路有记忆。下面给出组合电路和对应的波形与 Python 模拟代码

def logic1(x, y, z):
    return (x*y) + ((not x)*(not y)*z)

print(logic1(True, True, False))  # 1
print(logic1(False, True, False)) # 0

真值表 & 逻辑式

数字电路的真值表是唯一的,\(n\) 个输入对应 \(2^n\) 个输出(可类比寻址),实现真值查询的电路有多种形式,比如逻辑电路、类似于 ROM 的 Look-up Table(LUT),LUT 是当代主流 FPGA 的基本单元

真值表可以直接转换为逻辑表达式并进行优化,下文会再次介绍相关概念。任何复杂的布尔逻辑都可以只使用与或非三种门电路实现,因为与或非门可以仅使用与非或者或非门,所以任何复杂的布尔逻辑都可以只使用与非或者或非一种门电路实现。与非或者或非构造与或非的解释见下节内容

与或非三种门电路都可以只使用与非或者或非门进行构造,所以只使用与非或者或非门就可以构造完备的数字电路。使用与非门构造其他电路的方式如下图所示,或非门构造其他电路的方式请参考这里。与门与或门的相互转换依赖的是德摩根定理,所以与非和或非门,都有一个非的逻辑