实验二 运算器设计
一、实验学时
课堂2学时,课后2学时
二、实验目的
1) 熟悉Logisim软件的使用方法。
2) 掌握四位全加器电路实现方法。
3) 掌握八位全加器设计。
三、实验要求
1) 做好实验预习,复习基本数字逻辑电路的原理,掌握实验元器件的功能特性。
2) 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。
3) 写出实验报告。
四、实验内容
四位并行加法器电路图如下:
1、请按照给定的电路图在logisim下实现4位2进制全加器仿真电路,并进行功能验证。
2、请在完成第一步的基础上,构建包括溢出、符号、归零、进位等检测功能的四位二进制运算器,具体功能如下示意图所示,请完成Logisim仿真电路搭建及功能验证。
3、利用两个四位二进制运算器,分别实现八位串行加法器、八位并行加法器。
4、用自己学号最后两位数字转化为二进制作为输入,测试两个八位加法器功能。记录各输出端结果。
五、实验步骤
5.1 四位并行加法器(并行进位)
并行加法器中的串行进位中,由于进位是逐位形成的,每一级的进位直接依赖于前一级的进位,这就是串行进位的表达方式。而为了提高并行加法器的运算速度,必须解决进位传递的问题。让各级进位传递同时形成。
在串行进位中,引入了两个中间变量P和G。
为了方便计算C,两个中间变量P和G。代表进位传递函数和产生函数,即
利用这两个变量再加上C0就可以计算出任意的Cn+1如
而在并行进位中,为了让各级进位传递同时形成,可以将各级公式变化成如下:
由公式可知,四位加法器的各位进位输出信号只跟产生函数Gi和进位传递函数Pi和最低进位C0可以算出。而Gi和Pi又由上面的公式可知只需要本位的Ai和Bi进行与运算和异或运算就可以算出,这样就保证了Gi和Pi可以同时生成,Ci也是同时生成的,就实现了并行进位的四位并行加法器。
首先根据P和G的公式,可以用Logisim画出最基础的所有四位Pi和Gi如图5-1-1所示。
其中用到了Logisim中的隧道和分离器。其中隧道支持相同位数的数的传输,但是可以不需要导线,实现"隔空传输"。在本实验中使用隧道主要是为了显示将输入输出放在一起,这样验算结果比较方便。
而分离器主要是为了将一个多位的输入或输出分成固定的位数发送出去,比如本实验中A和B的输入都是四位,将这四位分别分成A0~3和B0~3传输到对应的器件中。隧道传输如图5-1-2所示。这样就可以将四位的A和B隔空输入到加法器中。
接着根据C1~4的公式,将P和G逐个相连,就能够完成四位并行加法器如图5-1-3所示。
其中,为了方便判断将输入和输出通过隧道分别传输,放在了加法器的右方方便测试。
接着直接在Logisim中进行测试,首先输入设置为C0=0,A=0011,B=1010,相加结果为1101,无进位,即C4为0,结果正确。如图5-1-4所示。
接着加入C0=1的情况,表示初始带有进位,A=1001,B=1110,相加为0111加一个进位,然后再加上C0=1,最终结果为S=1000,进位C4=1,结果正确,四位并行加法器构建成功。如图5-1-5所示。
5.2 四位二进制运算器
四位二进制运算器主要在上一题中的加法器的基础上包含了溢出、符号、归零、进位等检测功能。
溢出(OF):采用最高有效位的进位判断,两正数相加,最高有效位有进位,符号位无进位,表示运算结果发生溢出。两负数相加,最高有效位无进位,符号位有进位,表示结果发生溢出,因此溢出的逻辑表达式为:
在加法器中,通过将C3和C4取异或操作即可得到溢出。如图5-2-1所示。
符号(SF):符号位即最高位,直接连接S3即可,如图5-2-2所示。
归零(ZF):使用与操作来判断C4以及S0~3是否全为0,这样就可以判断结果是否为0。如图5-2-3所示。
进位(CF):即C4,直接连着C4就行了。
四位二进制运算器如图5-2-4所示。
接着进行测试,A=0111,B=0101,C0=0结果为S=1100,C4=0。如图5-2-5所示。
由于1100最高位为1,值为负数,因此SF=1。
由于1100不为0,因此ZF=0。
由于AB为两个正数,相加为负数,所以发生了溢出,因此OF=1。
由于C4=0,所以CF=0。
测试表示四位二进制运算器构建成功。
5.3 八位串行进位加法器
由于并行加法器中串行进位指的是
表示每一位Ci+1都依赖于前一位的进位,因此可以将两个四位并行加法器,以组间串行的方式来进行,这样就能构建出八位串行进位加法器。
利用logisim中的打包功能,将之前做的四位二进制运算器打包成小块,如图5-3-1所示。
右边表示C0表示上一位的进位,上面两个的左边表示C4表示下一位的进位,右边表示S最终的4位结果。下面两个表示A和B的各四位输入,左边四个分别为四个标志位,这里没有用到。
首先使用分离器将AB各分割成两个四位,前四位输入到第一个四位加法器中,表示低位运算,后四位输入到第二个四位加法器中,表示高位运算。接着将C4,即前四位的进位当做后四位的初始进位,这样就能得到后四位的结果以及C8,如图5-3-2所示。
接着对结果进行测试,如A=01011111,B=10110011,C0=0,运算结果为S=00010010,C8=1,如图5-3-3所示,运算正确。
5.4 八位并行进位加法器
在5.1中已经对并行进位的思想进行了分析,在四位加法器中,由于
为了让两个四位加法器形成组间并行的进位链,可以引入G*和P*,将C4中的公式进行变化,使得只剩下G*、P*和C0即:
这样就变成了5.1中的
这种形式,类似的C8也可以只用G*、P*和C0来表示即
就类似于四位并行加法器的原理一样,将两个四位并行加法器以并行进位的方式连接起来,如图5-4-1所示。
对该加法器进行测试,如A=11110011,B=01001010,C0=0,运算结果为S=00111101,C8=1,如图5-4-1所示,运算正确。
5.5 学号测试
学号为20212501305,后两位为0和5,换算为八位二进制为A=00000000,B=00000101,C0=0,运算结果应为S=00000101,C8=0。如图5-5-1所示,八位串行加法器测试正确。
八位并行加法器测试学号如图5-5-2所示。
六、实验小结(包括问题和解决办法、心得体会、意见与建议等)
6.1 问题和解决方法
问题1:在写八位并行加法器的时候,不知道该如何实现两个四位加法器组合成八位并行加法器。
解决方法:通过翻看书上74页的内容,我了解了SN74181的一些基本功能和实现,而在SN74181的ALU结构制作过程中,我得知了可以创建一个小组进位产生函数G*和小组进位传递函数P*,通过G*和P*作为并行进位链的输入,就能产生多个组间进位信号,这样就能够将4位扩充为16位的并行进位加法器,参考这种模式,我完成了将4位加法器扩充为8位并行进位加法器的方法。
问题2:在写加法器的时候,我觉得传统的输入输出方式太复杂了,首先测试的时候就很麻烦,而书上画的结构,A0和B0在一起,A1和B1在一起,这样输A和B的时候都很麻烦。
解决方法:通过对logisim进行摸索,我发现了一个叫做分离器的装置,能够将一个多位的输入,分成几位来输入到部件中,这样我可以直接创建一个4位的A和4位的B,不需要将A的各位分散开来输入,变得更加方便了。
问题3:在解决完第二个问题以后,我又发现,使用分离器以后,虽然输入变得方便,但是观感上很难看,因为A和B中间饶了很多线,而我测试的时候,看完A和B还得拉到上面很远去看S,很麻烦。
解决方法:找到了一个叫做隧道的东西,通过隧道可以将输入输出和部件完全分开,还不影响输入输出的正常流通,可以隔空传送信号,很方便,将输入输出放到部件旁边以后,测试的时候不需要看部件内部细节,只需要看输入输出结果就行。
6.2 心得体会
计算机组成原理这门课,最初感觉就是比较枯燥,在课堂上有大量的概念和知识学习,但是在学到这一章的时候,我才第一次接触到真正的计算机底层部分的内容,在写这次加法器之前,在课堂上,我学习加法器的知识,对并行加法器串行进位和并行进位都有了了解,在做这次实验的时候,也轻松地就做出了四位并行加法器,但是在将四位并行加法器组合成八位串行进位加法器和八位并行进位加法器的时候,我才发现自己学习的不足,后来我才发现,这些内容穿插在SN74181的内部结构中,而老师在讲课的时候我并没有注意到这个SN74181使用到了并行进位的并行加法器结构,将四位加法器组合成十六位加法器的逻辑原理,我到现在才真正理解,在反复翻阅课本中相关内容的时候,我才对这种并行进位的优化思想得到了深刻认识。这也让我意识到,对于一些知识,不是在书本上看懂就表示会了,还是要在实验中进行实践操作,真正自己去做出这些东西,才能说明自己已经掌握了,我认为这也是我们这门课要开设实践课程的目的。