组合逻辑硬件建模设计(一)逻辑门
一个高效的RTL工程是在最佳设计约束下工作,并使用最少数量的逻辑门。--By suisuisi
组合逻辑和时序逻辑是数字电路重要组成部分,接下来将分为2~3篇文章介绍组合逻辑设计。
组合逻辑简介
组合逻辑通过逻辑门实现,在组合逻辑中,输出是当前输入的函数。设计者的目标是使用最少数量的逻辑门或逻辑单元来实现逻辑。最小化技术有K-映射(K-map)、布尔代数(Boolean algebra)、香农展开定理(Shannon’s expansion theorems)和超平面(hyper planes)。设计师的思维过程应该是这样的:
设计应具有较小面积密度的最佳性能。面积最小化技术在组合逻辑或函数的设计中具有重要作用。在目前的情况下,使用硬件描述语言Verilog描述设计功能越来越复杂。接下来的部分重点介绍如何使用Verilog RTL来描述组合设计
非或反逻辑
非逻辑也称为反逻辑。示例2.1中显示了可合成RTL。NOT逻辑的真值表如表2.1所示。综合后的NOT逻辑如图2.1所示,NOT逻辑门的输入端口命名为“a_in”,输出为“y_out”
示例2.1非逻辑的可合成Verilog代码
a_in | y_out |
---|---|
0 | 1 |
1 | 0 |
表2.1 NOT逻辑的真值表
图2.1 综合后非逻辑
两个输入或(OR)逻辑
当其中一个输入为逻辑“1”时,OR逻辑将输出生成为逻辑“1”,可综合RTL如示例2.2所示。OR逻辑的真值表如表2.2所示。综合OR逻辑如图2.2所示,或逻辑门的输入端口命名为“a_in”,“b_in”,输出端口命名为“y_out”。
示例2.2两个输入或逻辑的可合成Verilog代码。
在描述设计功能时注意:确保灵敏度列表中列出了所有输入端口。灵敏度列表中缺少所需信号将导致仿真和综合不匹配,这将在后面讨论
a_in | b_in | y_out |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
表2.2两个输入或逻辑的真值表
图2.2综合两个输入OR逻辑
双输入或非逻辑
NOR逻辑是or逻辑的对立面或”取反”。示例2.3中显示了可综合RTL。NOR逻辑的真值表如表2.3所示。NOR逻辑是泛逻辑门,反AND是NOR,这就是德摩根斯定理(德·摩根定律在数理逻辑的定理推演中,在计算机的逻辑设计中以及数学的集合运算中都起着重要的作用。他的发现影响了乔治·布尔从事的逻辑问题代数解法的研究。这巩固了德摩根作为该规律的发现者的地位,尽管亚里士多德也曾注意到类似现象,且这也为古希腊与中世纪的逻辑学家熟知。该定律也被称作反演律。)。
综合NOR逻辑如图2.3所示,NOR逻辑门的输入端口命名为“a_in”,“b_in”,输出端口命名为“y_out”
示例2.3 NOR逻辑的可合成Verilog代码| a_in | b_in | y_out| | :--------- | :--: | -----------: | |0 |0 |1| |0 |1 |0| |1 |0 |0| |1 |1 |0|表2.3双输入NOR逻辑的真值表
图2.3综合的两个输入NOR逻辑
两个输入与AND逻辑
当两个输入“a”、“b”都是逻辑“1”时,AND logic生成一个逻辑“1”,输出示例2.4中显示了可综合RTL。AND逻辑的真值表如表2.4所示。
示例2.4两个输入AND逻辑的可综合Verilog代码。注:与AND门可视为一系列两个开关,并在可编程逻辑器件(PLD)中用作实现所需逻辑的元件之一。可编程AND平面可以使用AND逻辑门作为具有可编程输入功能的主要元件来创建
a_in | b_in | y_out |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
表2.4两个输入AND逻辑的真值表
图2.4综合两个输入AND逻辑
综合后的两个输入AND逻辑如图2.4所示,AND逻辑门的输入端口命名为“a_in”,“b_in”,输出端口命名为“y_out”。
两输入NAND逻辑
NAND逻辑与AND逻辑相反或互补。示例2.5中显示了可合成RTL。NAND逻辑的真值表如表2.5所示。
示例2.5两输入NAND逻辑的综合Verilog RTL。注:NAND逻辑也被视为通用逻辑。使用NAND逻辑,可以实现所有可能的逻辑功能。NAND逻辑用于实现锁存器或触发器等存储元件,也用于实现组合功能。根据DeMorgan定理,冒泡OR相当于两输入逻辑的NAND
a_in | b_in | y_out |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
表2.5真值表
图2.5综合后两输入NAND逻辑
综合后的NAND逻辑如图2.5所示,NAND逻辑门的输入端口命名为“a_in”,“b_in”,输出端口命名为“y_out”
双输入异或XOR逻辑
两个输入XOR称为异或逻辑,当两个输入不相等时,生成逻辑“1”输出。示例2.6中显示了可合成RTL。异或逻辑的真值表如表2.6所示。
综合的双输入异或逻辑如图2.6所示;异或逻辑门的输入端口命名为“a_in”、“b_in”,输出端口命名为“y_out”
如果库中没有XOR单元,则使用AND-OR-Invert或使用最少数量的NAND门来实现XOR逻辑。
示例2.6双输入异或XOR逻辑的可合成Verilog代码。注:异或门可以使用两个输入与非门实现。实现两个输入异或门所需的两个输入与非门的数量等于4。异或门用于实现加法和减法等算术运算
a_in | b_in | y_out |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
表2.6双输入异或逻辑的真值表
图2.6综合双输入异或逻辑
双输入XNOR逻辑
两个输入XNOR称为异或逻辑,当两个输入相等时,生成逻辑“1”输出。XNOR与XOR逻辑相反或互补。XNOR的可综合RTL如示例2.7所示。XNOR逻辑的真值表如表2.7所示。
综合的XNOR逻辑如图2.7所示,XNOR逻辑门的输入端口s命名为“a_in”,“b_in”,输出为“y_out”。
如果库中没有XNOR单元,则使用AND-OR-Invert或使用最少数量的NAND或NOR门来实现XNOR逻辑。实现2输入XNOR门至少需要5个2输入NAND门。
示例2.7 XNOR逻辑的可综合Verilog代码
a_in | b_in | y_out |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
表2.7XNOR逻辑数据的真值表
图2.7综合后XNOR逻辑
三态逻辑
三态有三种逻辑状态,即逻辑“0”、逻辑“1”和高阻抗“z”。可合成RTL如示例2.8所示。三态缓冲逻辑的真值表如表2.8所示。合成三态逻辑如图2.8所示,三态非逻辑的输入端口命名为“data_in”,启用输入命名为“enable”,输出命名为“data_out”
示例2.8三态逻辑的可综合Verilog代码。注意:在开发RTL时,避免使用三态逻辑。三态是很难测试的。建议使用多路复用器来开发带有enable的逻辑,而不是三态逻辑
使可能 enable | 数据输入 data_in | 数据输出 data_out |
---|---|---|
1 | 0000 | 0000 |
1 | 1111 | 1111 |
0 | xxxx | zzzz |
表2.8三态逻辑数据的真值表
图2.8综合后三态非逻辑