第2章
Digital Logic Design and Computer Organization with Computer Architecture for Security
组合电路:小型设计
2.1 简介
第1章中简单介绍了组合电路以及它们在数字系统中的应用。在这一章里,我们将涉及小的组合电路设计方法,但这些方法与设计大的组合电路用到的方法有所不同。而且,当我们手动进行最小化设计时,我们将会限制输入引脚的个数为4个,对于一些输入个数虽然超出了4但不是很大的情况(比如5个或6个),我们也会使用最小化软件进行最小化设计。对比而言,大的组合电路需要有更多的输入引脚,可以使用小的电路模块实现。关于大的组合电路设计的方法将会在第3章进行介绍。
小的组合电路中输入和输出之间的关系由真值表确定,而真值表是由描述的设计问题决定的。例如一个两位无符号数的乘法器,如图2-1中的框图所示,一个两位无符号的数A = a1a0被一个两位无符号的数B = b1b0乘,得到一个4位的无符号数P = p3p2p1p0。在这个图中,大写和小写字母分别用于表示多位的和一位的输入/输出。另外,画线箭头表示了多位的输入输出(图2-1a所示)。而且,多位的输入输出也可以用粗线箭头表示(如图2-1b所示)。
表2-1表示了无符号乘法器的真值表。例如真值表中所示,由A = 3 = (11)2和B = 2 = (10)2得到的结果是P = 6 = (0110)2。每一个p3到p0的输出值都标识了一个由4位输入a1、a0、b1和b0对应的逻辑功能。
真值表包含了使一个输出位(比如p0)为0的所有的输入逻辑情况,也包含了使一个输出位为1的所有的输入逻辑情况。如果一个输出位始终为0或始终为1,那么这个位不表示输入所对应的逻辑功能,应当在真值表中删去。真值表的行数由电路的输入引脚个数决定。如果是3个输入端(每个端口值为0或1),就应当有8种可能的组合方式,或者说在真值表中应当有8行;如果是4个输入端,就应当有16行,如表2-1所示。通常情况下,如果有n个输入端,真值表中应当会有2n行。在硬件上,真值表会有两种实现方式:
整个真值表可以存储在查找表(LUT)中,例如,表2-1可以存储在深度为16条、宽度为4位的存储器中。
一个最小的逻辑电路是由每一个与输入所对应的输出决定的。
查找表的优势在于不需要更多的设计步骤,真值表被原样存储在集成芯片内部的存储器模块中。然而,查找表的缺点却是双重的:
所有的0和1的输出值都要被保存,这样将使用更多的硬件资源。
查找表是典型的慢输出,因为它需要较长的时间去读本身的内容。
相反,一个最小的逻辑电路实现了使输出为1或者说使输出为0的输入逻辑电路。它使用更少的逻辑门、更少的输入门还有更少的连接线路,因此占用更少的硬件资源。
另一方面,存储在LUT中的真值表可以应用于可配置集成电路,例如现场可编程门陈列(FPGA)。FPGA芯片中每一个查找表模块都可以用不同的真值表进行更新,去实现一个不同的组合逻辑。
在这章中的其他部分,我们将涉及如何将一个真值表转换为和它等效的逻辑表达,这种逻辑表达会在NAND或者NOR电路上实现。手工和算法的逻辑最小化技巧、最小化软件的使用、Verilog硬件描述语言电路的描述,以及电路设计中使用的计算机辅助设计(CAD)工具,我们将举例进行讨论。这一章还提出了电路时序和潜在的时序风险。其他的门电路,比如标准门电路和三态缓冲,也都进行了讨论。这里面覆盖了很多应用,包括互连体系结构中用到的模块设计。本章中还包含了一些标准的小的组合电路模块的设计实例。
信号命名标准
回忆一下,一个信号是指电路的输入或输出为1或0。同样,每一个信号名都有一个极性指示符,该极性指示符定义了信号值1或者0在电路中的含义。信号极性定义如下:
高电平有效信号极性——当信号被称为高电平有效时,逻辑1表示活跃、有效或使能状态;逻辑0代表不活跃、无效或禁止状态。通常我们用不带前缀或者后缀符号的信号名称来标识一个高电平有效信号(例如x)。
低电平有效信号极性——当信号被称为低电平有效时,逻辑0表示活跃、有效或使能状态;逻辑1代表不活跃、无效或禁止状态。通常我们用带前缀或者后缀符号的信号名称来标识一个低电平有效信号。例如,_x、x′、/x或者x#都可以用来表示低电平有效信号。
除非另作说明,我们一律采取下划线(_)前缀,例如_x或者_X分别定义了一个低电平信号和多个低电平信号。
?例2-1? 画出一位反相器的框图并在适当的地方标出其输入和输出信号。电路的输入为一位数据和标记为_c的低电平控制信号。当_c为不活跃(无效、禁止)时,电路的输出为与输入相比较没有改变的一位数据;当_c为活跃(有效、使能)时,电路的输出为输入的反相。反相电路没有对输入的数据进行标记说明,方便起见,我们将输入数据和电路输出分别标记为x和y。
解:图2-2为有一位输入x、输出y和低电平控制信号_c的反相电路框图。表2-2为一位反相器的真值表。因为_c为低电平信号,所以当_c = 0(活跃)时,y = ,当_c = 1(不活跃)时,y = x。