图灵完备
- 简述
- 结构
- 一、基本逻辑电路
- 1、低电平
- 2、高电平
- 3、非门
- 4、与门
- 5、三路与门
- 6、或门
- 7、三路或门
- 8、与非门
- 9、或非门
- 10、异或门
- 11、同或门
- 二、算数运算&&存储器
- 1、二进制速算
- 2、成对的麻烦
简述
这周就要学习计算机组成原理了,为了学起来不那么吃力,我很早以前就下好了这款游戏——图灵完备。
现在已经玩了一段时间了,涉及的内容是数字逻辑里面的,整体上难度不太大,随着游戏的深入,涉及的内容会更加全面,而查找的内容可能也更广泛一些。
后来想了想还是打算在这里记录一下吧,从根本的原理上去讲解,以及之前所学的知识如何在这款游戏里去应用。当然,讲解的话肯定需要学latex,而学习latex正好也满足manim的需求,所以说也正合适。
不定期更新,尽量能完美解决这个游戏的所有问题,但由于一边游玩一边写文稿一边学习相关内容,比较耗费时间,所以不知道什么时候会完结,下面就开始吧。
结构
整体上的结构划分以游戏内给的结构为主,然后整体中部分讲解则遵循从左到右,从下到上的顺序讲解把,难度不一定统一,但是整体上也大差不差。
一、基本逻辑电路
这里是最基本的了,我也不按照游戏的进度来,直接将此前涉及到的各个门的真值表给出来吧。由于使用manim中的latex编写表格,其中的中文字符无法写出来,由于还没有深入研究,下面的输出就用op(output)来代表吧,然后输入就用对应的字符ABCD这种来表示吧。另外,下面的排序是无序的,对应实现的门在游戏中已经激活了,所以整体上看看就行。
1、低电平
可以看到,不论输入1还是0,输出总是0。
2、高电平
可以看到,不论输入1还是0,输出总是1。
效果图:
注:不一定是最简的。图中AND是与门,N是非门。
3、非门
输入结果跟输出结果正好相反。
效果图:
注:NAND是与非门
4、与门
效果图:
注:NAND是与非门
5、三路与门
6、或门
注:NAND是与非门
7、三路或门
8、与非门
9、或非门
10、异或门
注:上述肯定不是最优解法,很早之前弄的了,当时的思想应该是胡乱弄的。
11、同或门
二、算数运算&&存储器
1、二进制速算
这里的二进制速算,我以为直接运算二进制,后来发现不是,而是将其转换到了十进制,整体上难度不是很大。
2、成对的麻烦
题目
输入及预期输出
像这种问题,如果单纯地来思考的话,肯定比较困难,而此时就涉及到了数字逻辑中的基础部分,我们来分析一下题目,以及结合数字逻辑知识如何解决。
首先,这里有4个输入,我们按照二进制顺序方式,可以将输入4-1分别用字母ABCD来表示,下面我列出了输入输出的真值表。
先说明一下,为什么从输入4-1为ABCD而不是正向的输入1-4为ABCD。我上面说的采取排序方式是按照二进制顺序方式,这种方式是书上一般的排序方式,也就是我上面真值表从上到下的排序方式。而游戏中,按照输入4-1的方式读取输入的话,从左到右,刚好满足二进制顺序方式,所以为了统一,尤其是真值表与游戏输入对应的原则,我们还是简单地改变一下看输入的方向就可以了。
没看懂我说的也没关系,通俗一些讲,就是真值表中ABCD分别对应游戏中的输入4、输入3、输入2、输入1。
画出来真值表后,我们可以根据其中输出的0、1的数量,选择少的那部分来描述出最简电路。这里的输出0的数量最少,那我们就从这个为切入点来进行对应运算。
下面我给出上面真值表对应的最大项和最小项。
注:上面表格还是那个问题,无法显示中文,最大项、最小项用max、min代替。另外,斜线也无法显示,所以空着的地方表示无。
从上面的表格中可以看出来,最大项跟最小项本身是互补的,我们可以将最大项、最小项分别化成最简的,也是有两种表示方式(与或、或与),所以对于这类问题,总会用两种最简的方法解决。如果按照一开始的二进制排序方式规定的话,对于最小项来说,从上到下依次为 m 0 m_0 m0-> m 15 m_{15} m15。我们何时选取最小项?看上面图的话可以看到输出为1时选取对应的最小项,而输出为0时选取对应的最大项。
最小项表示方式: ∑ m ( 3 , 5 , 6 , 7 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , ) \sum m(3,5,6,7,9,10,11,12,13,14,15,) ∑m(3,5,6,7,9,10,11,12,13,14,15,)
最大项表示方式: ∏ M ( 0 , 1 , 2 , 4 , 8 ) \prod M(0,1,2,4,8) ∏M(0,1,2,4,8)
当然,按照上述方法判断最小项没有错,做题也没问题,但是从本质上来说,最大项的判断方法并不对。找最大项的方法其实同样也是需要找输出为1的。但是呢,找最大项需要将输入取反。输入取反之后,其对应的输出也就取反了。所以,此时的真值表跟上面的相比就从上到下反过来了。为了方便理解,我下面再贴张图。
结合上图来看,我们ABCD取反后找输出为1的最大项,其实跟一开始不取反,找输出为0的为最大项,结果上是一样的,但为什么要说本质呢?因为之后做题的话,解析可能会详解,但是如果本质理解错了,可能解析看不太明白。所以迅速做题的话,按照我一开始的方法就好,但本质要清楚。我们再来看看书上对于真值表找最小项、最大项是怎么说的。
最小项: 下标 i i i的取值规则是:按照变量将最小项中的原变量用1表示,反变量用0表示,由此得到一个二进制数,与该二进制数对应的十进制数即为下标 i i i的值。例如3变量A,B,C构成最小项 A B ‾ C A\overline{B}C ABC可以用 m 5 m_5 m5来表示。
最大项: 下标 i i i的取值规则是:按照变量顺序将最大项中的原变量用0表示,反变量用1表示,由此得到一个二进制数,与该二进制数对应的十进制数即下标 i i i的值,例如,3变量A,B,C构成的最大项 A ‾ + B + C ‾ \overline{A}+B+\overline{C} A+B+C可用 M 5 M_5 M5表示。
好的,明白了上面内容,我们再继续。为了方便解题,我们用项数少的来解,也就是用最大项。找到最大项之后,其实就已经找到结果了。也就是:
o p = ( A ‾ + B ‾ + C ‾ + D ‾ ) ∙ ( A ‾ + B ‾ + C ‾ + D ) ∙ ( A ‾ + B ‾ + C + D ‾ ) ∙ ( A ‾ + B + C ‾ + D ‾ ) ∙ ( A + B ‾ + C ‾ + D ‾ ) op=(\overline{A}+\overline{B}+\overline{C}+\overline{D})\bullet(\overline{A}+\overline{B}+\overline{C}+D)\bullet(\overline{A}+\overline{B}+C+\overline{D})\bullet(\overline{A}+B+\overline{C}+\overline{D})\bullet(A+\overline{B}+\overline{C}+\overline{D}) op=(A+B+C+D)∙(A+B+C+D)∙(A+B+C+D)∙(A+B+C+D)∙(A+B+C+D)
注:如果按照一上来输出为0的到的最大项,千万不要忘了对输入去反再读取。如果按照上面输出为1得到的最大项,直接读取对应项就行!!!
然后我们按照这个规则进行电路连接就好了,肯定可以的。
话是这么说,可是这并不是最简电路。所以为了得到最简电路,接下来我们需要对输出结果进行化简。怎么化简呢?仍然选择书中的卡诺图化简法。当然可以直接化简,不过我对应公式都忘了,所以还是用通俗的卡诺图化简法来解决吧,这在考试中会考的。
由于这是一个四项输入的,所以我们需要一个4x4的表格。将输入ABCD拆分为AB、CD两个部分。AB占据上表头,CD占据左表头。AB的四个表头从左到右依次为00,01,11,10,CD的左表头从上到下依次为00,01,11,10。注意这俩并不是按照二进制排序的。如果看不懂的话,可以比照我下面的图来对照一下。
注:还是那个问题,AB、CD中间的斜线显示不出来,凑活看看吧。
卡诺图化简我是纯靠“感觉”来的,下面分享一下我的“感觉”。这种“感觉”最好还是做几道题目,总结一下,要不然可能会有错误。
卡诺图最大项化简需要好几次取反,而最小项化简不用取反。我们先用最小项讲解一下,然后再用最大项做。
哎,早知道用manim生成图像的时候标注好图几了,现在找图还不好描述找哪个图。现在先凑活看一下吧,后续的内容会标注好图几的。
从上面真值表找到对应的最小项,然后将对应的最小项放到卡诺图中,存在的就标1,由此就得到了下面的图。
接下来就是画圈了,可以看到,项数越多,相对而言画圈就越难画,所以还是选择项数少的来做。先说一下画圈的规则。
1、圈的1的数量为2n个,比如全3个的话就不行。
2、圈尽可能少而大。
3、圈中至少有一个未被圈的1。
4、卡诺图是封闭的。
基于上述规则,我们来圈一下。我用manim可以圈,不过,卡诺图是连续的,所以我们将内部4x4网格拿出来,将其想象成一个球,所以还存在特殊的画图方式,不过我不清楚我会不会用manim画出来。这个题目没受影响,我们直接画就好了。查找了一下,manim竟然有table类,我还苦苦地用latex在manim中写。
又去学manim的table。ai了好一会,还是不行,等抽空专门学学吧。