零基础学FPGA设计:理解硬件编程思想
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 布尔代数

1.2.1 布尔和几个基本运算规则

数字逻辑的状态只有两种,而要处理这两种状态的数学基础就是接下来要讨论的逻辑代数。逻辑代数是分析和设计逻辑电路的数学基础。由于逻辑代数是由乔治·布尔(George·Boole,1815—1864)在1854年出版的《思维规律的研究》中提出的,为纪念布尔对逻辑代数做出的巨大贡献,逻辑代数又称为布尔代数。

布尔代数规定参与逻辑运算的变量称为逻辑变量,每个变量的取值非0即1。前面已经讲过,0、1不表示数的大小,也不表示具体的数值,只代表两种不同的逻辑状态。

布尔代数的基本运算规则有以下几条:

(1)所有可能出现的数只有0和1两个。

(2)基本运算只有“与”“或”“非”三种。

(3)“非”的运算符号用上画线“-”或右上角一撇(如A')表示,定义为:0=1,1=0。

(4)“或”的运算符号用“+”表示,定义为:0+0=0,0+1=1,1+1=1。

(5)“与”的运算符号用“·”表示,定义为:0·0=0,0·1=0,1·1=1。

布尔代数如此简单,却是整个逻辑电路设计的基础。世界上很多看似复杂的事物,其基本原理都十分简单。比如冯·诺依曼(von Neumann)提出的现代计算机体系结构的原则只有短短的几条。

虽然布尔代数的基本运算规则只有几条,但其完备的数学逻辑要远比呈现出的这几条规则复杂得多。布尔代数是数学发展过程中的产物,有兴趣的读者可以阅读《古今数学思想》和《什么是数学》等著作以了解更多的细节内容。

接下来我们就根据前面介绍的基本运算规则推导出一些常用的布尔代数法则。

1.2.2 常用的布尔代数法则

为便于描述,先定义变量AB等,这些变量只可能取值0或1。

1)几种简单的逻辑运算

与0和1的简单运算:A·0=0;A·1=AA+0=AA+1=1。

互补运算:A+A'=1

异或运算(用符号⊕表示)定义:当两个变量不同时,运算结果为1;当两个变量相同时,运算结果为0。AB=AB'+ABA⊕0=AA⊕1=A'。

同或运算(用符号⊙表示)定义:当两个变量相同时,运算结果为1;当两个变量不同时,运算结果为0。AB=AB+AB';A⊙0=A';A⊙1=A

交换律:A+B=B+A

结合律:(A+B)+C=A+(B+C

分配律:AB+C)=A B+A C

重叠律:A+A=A

双重否定律:A·A'=0

以上的所有规则,总结起来可以表述为:只要与0相与(或相乘)都为0;只要与1相或(或相加)都为1;0取反为1;1取反为0。

2)狄摩根定律

利用狄摩根(De Morgan)定律可以将“积之和”形式的电路转换为“和之积”形式的电路,或反之。

该定律的第一种形式说明了多项之和的补为:(A+B+C+…)'=ABC'…。当只有两个变量时,关系形式简化为:(A+B)'=AB'。

狄摩根定律的第二种形式说明了多项之积的补为:(A·B·C…)'=A'+B'+C'+…。

3)布尔代数化简定理

所谓布尔代数化简,是指将逻辑表达式中的冗余项去掉,得到逻辑表达式的最小项。通过化简,在设计特定功能的逻辑电路时,就可以用最小的逻辑运算实现所需的功能。为了消除逻辑电路中的某种不稳定现象,在设计电路时有时会人为增加一些冗余项。

布尔代数化简定理的基本依据仍然可由前面介绍的几条基本运算规则推导得出。有兴趣的读者可以自行推导。为便于阅读,我们将化简定理的积与和两种形式分别以列表方式给出,如表1-2所示。

表1-2 布尔代数化简定理

用表1-2中的公式对逻辑电路进行化简不够直观,因此在电子技术课堂上通常会讲解卡诺图化简方法。虽然卡诺图是一个很好的工具,但当变量较多时,画图实现化简的方法仍然十分烦琐。本书不打算过多地讨论逻辑函数的化简方法,因为在FPGA设计过程中,逻辑函数化简的问题在功能强大的FPGA设计软件面前根本就不值一提,工程师几乎不用关注化简问题。尽管如此,作为FPGA工程师,了解逻辑函数化简的概念,对理解逻辑电路的设计过程及思想仍然具有十分重要的作用。