第二章 逻辑代数基础
2.1 逻辑代数中的几个概念
1.逻辑状态
在一定条件下,十五的某种性质只表现为两种互不相容的状态,两种状态必出现且仅出现一种,一种状态使另一种状态的反状态。我们可以用符号0和1来表示这两种状态(称谓逻辑状态)。
注意:这里的0和1都不是数,不表示数的大小,只是表示状态的符号。通常称为0状态(0-state)和1状态(1-state)。
0状态一般表示逻辑条件的假或无效;1状态一般表示逻辑条件的真或有效。
2.逻辑变量
我们将未予确定的逻辑状态称为逻辑变量。逻辑变量反应逻辑状态的变化,逻辑变量仅能取值“0”或“1”。“0”和“1”成为逻辑常量。
3.逻辑电平
与现实实际不同,真适量使连续的、不确定的变量,我们需要对其进行离散化(也就是这门课叫“数字逻辑与数字系统”,简称“数电”的原因)。
就是说,这里的概念具体也没啥用,所以我们就不多赘述~
4.正、负逻辑规定(约定)
理论上,这个也没啥用。
本质上就是规定逻辑电平与逻辑状态间的关系,这一过程也成为逻辑化过程。(这个过程似乎我们的课程仿真中不太强调,所以大概也就不用多说)
确定了逻辑规定之后,各种物理量就转化成了逻辑状态含义,因而可用逻辑变量去表示,进而可以利用各种数学或逻辑的方法对电子电路进行分析或表达。
5.逻辑代数
利用代数运算将逻辑变量间的因果关系以及依据这些关系的一些逻辑推理表达出来,这种代数形式称之为逻辑代数。定义为:
逻辑代数是一个由逻辑变量集,常量0和1及与、或、非三种运算符所构成的代数系统。
6.逻辑函数
设某一逻辑网络的输入逻辑变量为
A
1
,
A
2
,
⋅
⋅
⋅
,
A
n
A_1,A_2,···,A_n
A1,A2,⋅⋅⋅,An,输出逻辑变量为
F
F
F,则当
A
1
,
A
2
,
⋅
⋅
⋅
,
A
n
A_1,A_2,···,A_n
A1,A2,⋅⋅⋅,An取值确定后,
F
F
F的取值就唯一地确定下来了,则称
F
F
F是
A
1
,
A
2
,
⋅
⋅
⋅
,
A
n
A_1,A_2,···,A_n
A1,A2,⋅⋅⋅,An的逻辑函数,记为
F
=
f
(
A
1
,
A
2
,
⋅
⋅
⋅
,
A
n
)
F=f(A_1,A_2,···,A_n)
F=f(A1,A2,⋅⋅⋅,An)
逻辑函数仅能表达事物的某些主要性质,并不能反映事务的全部特性。另外,逻辑函数也可以座位另一个逻辑网络的逻辑变量。(我的理解是,可以把这个
f
(
A
1
,
A
2
,
⋅
⋅
⋅
,
A
n
)
f(A_1,A_2,···,A_n)
f(A1,A2,⋅⋅⋅,An)当成一个新的变量,看成“0”或者“1”,直接代入某个表达式中。)
(可以插入一张图试试看~) [回去再研究吧,这玩意有点离谱,难度较高~]
7.逻辑函数的表示方法
逻辑函数有三种表示方法,即逻辑表达式、真值表和卡诺图。
(1)真值表是啥,大家都是明白的,其实就是枚举法,全部列出来,完备地展示所有可能取值(感觉这个办法比概率论的方法还要傻~)
(2)逻辑表达式,这玩意学过离散,应该都能理解吧,这个初次使用markdown,不太会导入图片,这个就不放一些示例图片了哈。
算了,还是尝试一下吧:
F
=
a
⋅
b
F=a·b
F=a⋅b
其中“·”是“与”运算符号。
2.2 逻辑代数的基本运算
基本运算只有三种,即与运算、或运算及非运算,其运算规则学过离散都应该知道的~
2.2.1 与运算(逻辑乘)
数字逻辑中,把与运算记作乘法,用“·”代替,也可以直接省略,其实没啥好讲的,这下面几个小点也是这样,都很容易就能理解。
2.2.2 或运算(逻辑加)
同上,即用“+”代替,但不能省略这个“+”号。
2.2.3 非运算(逻辑非)
同上,这个一般是在某个逻辑变量正上方加一横,如
A
A
A 的非运算结果为
A
‾
\overline{A}
A。
2.3 逻辑代数的基本定理及规则
2.3.1 逻辑代数的基本公理
这些个公理,感觉用处很大,但是我背不下来,所以,我也不知道写上来的作用在哪,要不就不写了~理论上,还是学过离散就都会了……哈哈哈哈哈
2.3.2逻辑代数的基本定理
书上说,依据上述公理,可以导出下面的这些定理,但是其实我也不是很会推导……
就简单列一下吧:
吸收定理I:
(
a
)
A
+
A
⋅
B
=
A
(
b
)
A
⋅
(
A
+
B
)
=
A
(a)A+A·B=A (b)A·(A+B)=A
(a)A+A⋅B=A (b)A⋅(A+B)=A
吸收定理II:
(
a
)
A
+
A
‾
⋅
B
=
A
+
B
(
b
)
A
⋅
(
A
‾
+
B
=
A
⋅
B
)
(a)A+\overline{A}·B=A+B (b)A·(\overline{A}+B=A·B)
(a)A+A⋅B=A+B (b)A⋅(A+B=A⋅B)
吸收定理III:
(
a
)
A
⋅
B
+
A
⋅
B
‾
=
A
(
b
)
(
A
+
B
)
⋅
(
A
+
B
‾
)
=
A
(a)A·B+A·\overline{B}=A (b)(A+B)·(A+\overline{B})=A
(a)A⋅B+A⋅B=A (b)(A+B)⋅(A+B)=A
结合定理:
(
a
)
A
+
(
B
+
C
)
=
(
A
+
B
)
+
C
(
b
)
A
⋅
(
B
+
C
)
=
(
A
⋅
B
)
⋅
C
(a)A+(B+C)=(A+B)+C (b)A·(B+C)=(A·B)·C
(a)A+(B+C)=(A+B)+C (b)A⋅(B+C)=(A⋅B)⋅C
反演定理(摩根定理——Morgan定理)
这个就不写了哈,每节课都提到这个,德摩根,摩根,俺也不知道到底叫他啥~
多余项定理:
(
a
)
A
⋅
B
+
A
‾
⋅
C
+
B
⋅
C
=
A
⋅
B
+
A
‾
⋅
C
(
b
)
(
A
+
B
)
⋅
(
A
‾
+
C
)
⋅
(
B
+
C
)
=
(
A
+
B
)
⋅
(
A
‾
+
C
)
(a)A·B+\overline{A}·C+B·C=A·B+\overline{A}·C\\ (b)(A+B)·(\overline{A}+C)·(B+C)=(A+B)·(\overline{A}+C)
(a)A⋅B+A⋅C+B⋅C=A⋅B+A⋅C(b)(A+B)⋅(A+C)⋅(B+C)=(A+B)⋅(A+C)
2.3.3 逻辑代数的基本规则
强调的是三个重要的运算规则:代入规则、反演规则和对偶规则。
-
代入规则
指逻辑函数中所有逻辑变量的位置均可代之以一个逻辑函数。即已知 f ( x 1 , x 2 , ⋅ ⋅ ⋅ , x i , ⋅ ⋅ ⋅ , x n ) = g ( x 1 , x 2 , ⋅ ⋅ ⋅ , x i , ⋅ ⋅ ⋅ , x n ) f(x_1,x_2,···,x_i,···,x_n)=g(x_1,x_2,···,x_i,···,x_n) f(x1,x2,⋅⋅⋅,xi,⋅⋅⋅,xn)=g(x1,x2,⋅⋅⋅,xi,⋅⋅⋅,xn),用函数h替换上述 x i x_i xi,有
f ( x 1 , x 2 , ⋅ ⋅ ⋅ , h , ⋅ ⋅ ⋅ , x n ) = g ( x 1 , x 2 , ⋅ ⋅ ⋅ , h , ⋅ ⋅ ⋅ , x n ) f(x_1,x_2,···,h,···,x_n)=g(x_1,x_2,···,h,···,x_n) f(x1,x2,⋅⋅⋅,h,⋅⋅⋅,xn)=g(x1,x2,⋅⋅⋅,h,⋅⋅⋅,xn) -
反演规则(香农定理——Shannon定理)
从原函数求反函数的过程称之为反演。具体来说,是将该函数的所有变量求反,并将函数中的“0”变成“1”,“1”变成“0”;运算符“+”变成“·”,“·”变成“+”。从而有:
f ‾ ( x 1 , x 2 , ⋅ ⋅ ⋅ , x n , 0 , 1 , + , ⋅ ) = f ( x 1 ‾ , x 2 ‾ , ⋅ ⋅ ⋅ , x n ‾ , 1 , 0 , ⋅ , + ) \overline{f}(x_1,x_2,···,x_n,0,1,+,·)=f(\overline{x_1},\overline{x_2},···,\overline{x_n},1,0,·,+) f(x1,x2,⋅⋅⋅,xn,0,1,+,⋅)=f(x1,x2,⋅⋅⋅,xn,1,0,⋅,+) -
对偶规则
对偶函数的定义是:设有逻辑函数 F ( x 1 , x 2 , ⋅ ⋅ ⋅ , x n , 0 , 1 , + , ⋅ ) F(x_1,x_2,···,x_n,0,1,+,·) F(x1,x2,⋅⋅⋅,xn,0,1,+,⋅),若把函数中的“0”变为“1”,“1”变成“0”,“+”变成“·”,“·”变成“+”,而变量保持不变,则所得函数 F ′ F' F′成为原函数 F F F的对偶函数,即 F ′ = F ( x 1 , x 2 , ⋅ ⋅ ⋅ , x n , 1 , 0 , ⋅ , + ) F'=F(x_1,x_2,···,x_n,1,0,·,+) F′=F(x1,x2,⋅⋅⋅,xn,1,0,⋅,+)
2.4 逻辑函数的性质
2.4.1 复合逻辑
这个我觉得没啥可说的,直接给个逻辑表达式,再给个真值表吧,差不多了应该~
1.与非逻辑(NAND)
F
=
A
B
C
‾
F=\overline{ABC}
F=ABC
2.或非逻辑(NOR)
F
=
A
+
B
+
C
‾
F=\overline{A+B+C}
F=A+B+C
3.与或非逻辑(AOI)
F
=
A
B
+
C
D
+
E
F
‾
F=\overline{AB+CD+EF}
F=AB+CD+EF
(变量太多,不太方便画真值表啦~)
4.异或逻辑(XOR)
F
=
A
B
‾
+
A
‾
B
=
A
⨁
B
F=A\overline{B}+\overline{A}B\\=A\bigoplus B
F=AB+AB=A⨁B
异或因为比较常用,所以我们再给出几个常用等式:
A
⨁
A
=
0
A
⨁
A
‾
=
1
A
⨁
0
=
A
A
⨁
1
=
A
‾
A\bigoplus A=0 A\bigoplus \overline{A}=1 A\bigoplus 0=A A\bigoplus 1=\overline{A}
A⨁A=0 A⨁A=1 A⨁0=A A⨁1=A
2.4.2 逻辑函数的基本表达式
就是说,同一个含义(逻辑命题)的逻辑函数可以有多种形式,由于其真值表完全相同,所以他们实质上是等价的。
一般常用的式子就是“与或式”、“或与式”等。
2.4.3 逻辑函数的标准形式
这里书上的逻辑比较离谱,我觉得得按照我的观点来:
首先,按照离散的观点,我们会有“最小项”和“最大项”,简而言之,小项就是与或式中的每一个或的部分,大项就是或与式中每一个与的部分,那么这两个概念加上“最”,是个啥概念呢,为了保持规范哈,我们要求加上“最”就是这一项得包含所有出现的逻辑变量,(准确表达应该是)每一项中出现且仅出现该函数中出现的所有变量的原变量形式或反变量形式。
接下来,我们为了给这些纷繁复杂的变量形式一些简化,决定利用一些常用符号来进行描述,这个常用符号我们选用
m
i
m_i
mi表示最小项,用
M
i
M_i
Mi表示最大项:
这里的规定是,对于最小项而言,出现的原变量我们记作1,反变量记作0,则会发现一个很神奇的地方,上述符号
m
i
m_i
mi中的下标i,就是这个最小项的二进制展开所代表的十进制数~同理哈,对于最大项,我们把出现的原变量记作0,反变量记作1,所以我们会很容易也很显然地发现以下几个性质:
1.
∑
i
=
0
2
n
−
1
m
i
=
1
2.
∏
i
=
0
2
n
−
1
M
i
=
0
3.
m
i
⋅
m
j
=
0
(
i
≠
j
)
M
i
+
M
j
=
1
(
i
≠
j
)
4.
m
i
‾
=
M
i
M
i
‾
=
m
i
1.\sum_{i=0}^{2^n-1}{m_i}=1\\ 2.\prod_{i=0}^{2^n-1}{M_i}=0\\ 3.m_i·m_j=0(i\neq j) M_i+M_j=1(i\neq j)\\ 4.\overline{m_i}=M_i \overline{M_i}=m_i
1.i=0∑2n−1mi=12.i=0∏2n−1Mi=03.mi⋅mj=0(i=j) Mi+Mj=1(i=j)4.mi=Mi Mi=mi
好的,既然上面的规定大家都理解了,那么下面我们给出一种标准形式的规定:
1.函数的最小项标准式(也成为积之和表达式,或与或表达式)
这个标准就是,表达式中的每一个与项均为最小项,并给出一种简化的记录方式:
F
(
A
,
B
,
C
)
=
m
7
+
m
5
+
m
3
+
m
2
=
∑
m
3
(
2
,
3
,
5
,
7
)
F(A,B,C)=m_7+m_5+m_3+m_2=\sum m^3(2,3,5,7)
F(A,B,C)=m7+m5+m3+m2=∑m3(2,3,5,7)
2.函数的最大项标准式
和上面的最小项标准式一致,这里不多赘述(主要是打字有点累~),给出个类似的公式吧。
F
(
A
,
B
,
C
)
=
M
0
M
2
M
5
=
∏
M
3
(
0
,
2
,
5
)
F(A,B,C)=M_0M_2M_5=\prod M^3(0,2,5)
F(A,B,C)=M0M2M5=∏M3(0,2,5)
3.相互转化
同样,这里只给出一个示例公式,因为这个似乎不是很难,所以就看看公式理解一下吧~相信你!!
F
=
∑
m
3
(
0
,
2
,
3
)
=
∏
M
3
(
1
,
4
,
5
,
6
,
7
)
F=\sum m^3(0,2,3)=\prod M^3(1,4,5,6,7)
F=∑m3(0,2,3)=∏M3(1,4,5,6,7)
2.5 逻辑函数的化简
化简方法有好多,主要式两大种,一个叫“代数法化简”,一个叫“卡诺图化简”。
2.5.1 代数法化简
理论上说,这个就是利用前面的那些公理和推论进行化简的,本质上和离散的内容是一致的,但是问题在于,可能这个没有标准形式,所以每个人化简的结果可能都不一样,而且你懂的,纯数学的东西,对脑子的要求很高,我觉得不是很容易~ 所以说,上述这些原因就导致这个方法的化简真的“简”,所以我就不说这个方法了~ 相信你的离散老师!!(柯炜也还行,时间一长会好起来的~)
2.5.2卡诺图法
说实话,这个方法应该是很重要、非常重要、异常重要的!!但是!!!因为他重要,所以你会明白这个很难……很难就导致我其实也不太会……但是!!既然上面的代数法我都没写,那卡诺图的方法就不得不写一写了~
一、卡诺图的构成
这个方法式从真值表引申出来的,我觉得卡诺这个人真的有问题,天天不为社会主义事业做贡献,就知道搞一堆什么数学和物理,真的不是很让人喜欢……
卡诺图要注意其排列的方式,下面给出几个标准的卡诺图排列形式:
会发现,卡诺图里面的排列是按照格雷码的特点排列的,也就是说,相邻的两个小格子之间只有一个数位在变动。
卡诺图的特点就不说了哈,反正这辈子也不会有人问你“这个图是不是卡诺图啊~”这样的问题的,所以我的建议是别管!!会画会看就行!
二、逻辑函数在卡诺图上的表示
给出方法:
NO.1 将给定的逻辑函数化为最小项标准式,
NO.2 按照变量数画出相应的卡诺图
NO.3 在对应的最小项标准是种各最小项的小方格内标以“1”,所有标1的小方格的合成区域就表示该函数。
这本质上只是一个基础,所以我们不多深究,这里也给出一个书上的例题,聪明的你相信一看就会明白这个方法的具体运用~
三、用卡诺图化简逻辑函数的基本原理(重中之重)
我们先给出几个重要的定义和概念:
1.“相邻”的判断
(1)相邻最小项指两个最小项种只有一个变量不同,其余变量均相同
(2)卡诺图上小方格相邻,是指对那个最小项相邻。在卡诺图上,每个小方格具有n个相邻的小方格。包括有共同边界的小方格(几何相邻)、同一幅卡诺图中分别处于行(或列)两端的两个小方格以及在相邻两幅卡诺图中处于相同位置的两个小方格(相重相邻)
2.画卡诺圈的规则(重中之重之重)
*任何
2
n
2^n
2n个
i
≤
n
i\leq n
i≤n标1的相邻小方格均可画在一个卡诺圈内;
*任何
2
i
2^i
2i个标1的非相邻消防额则不能画入一个卡诺圈内,至少需要画在两个圈内。
好的,上面的概念都还挺简单,下面可以说是一团乱麻……因此,我不想按照书上的标准来说了,下面是我的理解:
蕴涵项 其实就是最小项,在卡诺图中表现为,可以画出一个卡诺圈;一般情况下,在数学中我们面对一个范围,习惯性地会去找它的边界,也就是最大最小,或者能够描述其特征的一些值,比如说极大极小。同理,我们在这里也要找到一个“极大”的概念,称之为“极大圈”,其含义就是不被其他圈所完全覆盖的圈。那么我们接着由表及里,在这个圈的范围内,有一部分的方格只被这一个大圈所包含,我们认为这种方格很专一,啊不是,就是很不错~ 所以把这种方格成为“实质最小项”,为了表彰这种专一的精神,我们给包含这种方格的极大圈也赋予一个好名字“必要质蕴涵”,之所以叫“必要”,就是说这个圈是少不了的,只要少了这个圈,那就一定会有专一的小方格被丢在圈外~
好的,我觉得上面这一段已经把该说的一些概念说完了,那么下面是一个化简的最根本的原理,“卡诺图上的最小覆盖”,这玩意,顾名思义,我们呢要挑选数量最少的“极大圈”,让他们把卡诺图上所有标1的方格全部覆盖,这就是最小覆盖,那么也很显然,这个最小覆盖所写出来的逻辑表达式就是最简的表达式。
但是书上并没有说明白一个问题,这个最小覆盖是怎么个找法,我来进行归纳一下:
*卡诺图化简的结果不是唯一的!
*按照找最小覆盖的逻辑,我们要找的目标是 化简最后的表达式,项数最少,其他都不管~
好了,重中之重结束了,我寻思,我是明白了~
2.5.3 利用无关项化简函数表达式
我觉着,书上讲得还是很不行,还得用我的理解来说。
首先,什么是“无关项”,定义给的是这样的:当函数输出与某些输入组合无关时,这些输入组合就称为无关项。你看这讲得多尴尬,多晦涩难懂,是吧,所以还是听我的
→
\rightarrow
→无关项就是指那些无论这个值是1还是0都对函数输出值没有直接影响的那些项。
虽然从理论上说,这个无关项并不只是取值对结果无影响的项,还应该包括这些项并不会出现在正常的操作之中,但是我认为,这个小点理解就行,问题不大。
那么带有无关项的卡诺图化简和不带无关项的卡诺图化简有啥区别吗,有滴,肯定是有滴~
修改过程如下:
1.画覆盖1的极大圈时,要把“d”包含在内,画出尽可能大的圈,这样可以减少“极大圈”的变量数。(这么想,反正无关项对结果影响也不大,所以纳不纳入极大圈都对结果无影响,我们又得找到最少的极大圈,那为啥不画进去呢~)
2.虽然要尽量找到最大的极大圈,但是不能圈出只有“d”的极大圈。
3.与之前约定的一样,不能圈任何标0的单元
2.5.4 输入无反变量的函数的化简
这个讨论是从现实实际的经济角度来考虑的,就是说,很多电路都需要有原变量和反变量同时出现的情况,在各种集成电路之中,这样多的非门会产生很多不必要的经济开销。于是我们呢考虑一种方法来降低“单纯非门”的使用,其主要处理措施是“共享非门”。
对于与或式来说,共享的门是与非门,化简的出发点是最简与或式。
方法一:替代尾因子法
啥意思嘞,就是把每个与项的原变量部分成为“头因子”,反变量部分称为“尾因子”,并且有如下特征:把头因子的任何一个变量放入任一个尾因子中,与项不变。(这好像是利用公理来解释的,什么吸收率好像是)
给出一个例子:
A
B
C
D
E
‾
=
A
B
A
C
‾
⋅
D
E
‾
=
A
B
⋅
B
C
‾
⋅
D
E
‾
=
A
B
⋅
A
B
C
‾
⋅
D
E
‾
=
A
B
A
B
C
‾
A
D
E
‾
=
A
B
A
B
C
‾
⋅
A
B
D
E
‾
AB\overline{CDE}=AB\overline{AC}·\overline{DE}=AB·\overline{BC}·\overline{DE}=AB·\overline{ABC}·\overline{DE}\\=AB\overline{ABC}\overline{ADE}=AB\overline{ABC}·\overline{ABDE}
ABCDE=ABAC⋅DE=AB⋅BC⋅DE=AB⋅ABC⋅DE=ABABCADE=ABABC⋅ABDE
这个细节有点多,而且感觉也不是很能用得到,就不多写了,看书吧要不,这就一个小点~(给个书的链接p62页中下部分)
方法二:禁止逻辑法
原理:任何函数利用不属于它的最小项之非乘之,其逻辑功能不变。(看不明白吧,没事我也看不明白~)看看下面的解释:
F
=
F
⋅
m
i
‾
,
m
i
不在
F
中
F=F·\overline{m_i}, \text m_i不在F中
F=F⋅mi, mi不在F中
这个也看不明白,没事,一样的,我也还没明白呢。
再看一个例题:
F
1
=
m
1
+
m
3
+
m
5
+
m
7
G
=
F
1
⋅
(
m
5
+
m
7
‾
)
=
(
m
1
+
m
3
+
m
5
+
m
7
)
⋅
(
m
5
+
m
7
‾
)
=
(
m
1
+
m
3
)
(
m
5
+
m
7
‾
)
=
m
1
+
m
3
\begin{aligned} F_1&=m_1+m_3+m_5+m_7 \\ G&=F_1·(\overline{m_5+m_7})\\ &=(m_1+m_3+m_5+m_7)·(\overline{m_5+m_7})\\ &=(m_1+m_3)(\overline{m_5+m_7})\\ &=m_1+m_3 \end{aligned}
F1G=m1+m3+m5+m7=F1⋅(m5+m7)=(m1+m3+m5+m7)⋅(m5+m7)=(m1+m3)(m5+m7)=m1+m3
是不是差不多快明白了,没错,我也快了,所以我们来总结一下,这个方法叫作“禁止逻辑法”,意思就是我们把
m
5
+
m
7
m_5+m_7
m5+m7作为禁止项,
G
G
G是
F
i
F_i
Fi被
m
5
+
m
7
‾
\overline{m_5+m_7}
m5+m7禁止后的函数。
我寻思,这个方法并不理解是干什么用的,但是好像可以在后期根据电路实际情况对表达式和电路进行下一步化简(比如说在设计电路的时候没有意识到某几项对电路输出结果没有影响,但在后期测试中发现了这个情况,于是可以用这样的禁止逻辑法把这几项无关项消掉~并重新对设计电路进行改善)
这应该还有一个第三点的,但是我觉得没必要,这不是重点,而且似乎也没啥实际应用的价值,所以,不看了!
2.5.5 多输出函数的化简
你看这个标题,标星了,咱们跳过~
附录及相关引用
暂无,markdown的引用技巧还不是很熟悉,等我再研究研究
后记2
改用markdown感觉公式是好用一些了,确实也学到了一些东西,感觉自我提升很好,但是图片实在是不好导入,还得继续学习。除此之外还有个小问题,这个总结(也可以叫作文章)的文风有点难以把控,哈哈哈哈,不知道是我在自己总结还是为了真的有个读者,写作的时间也是断断续续,所以可能文风并不统一,这一点下一篇文章要好好思考一下再落笔!
CSDN真是个好东西,这个图片插入要比离线版好用多了!!(没收广告费哈~)