课程实验报告课程名称:组成原理专业班级:IS1201学号:U2101214720姓名:任宇豪指导教师:秦磊华报告日期:2014.4.27计算机科学与技术学院目录原创性声明 (1)1 实验内容 (2)2 实验目的 (2)3 实验设备 (2)4 实验设计方案和电路 (2)4.1 实验总体方案 (2)4.2 各模块的分析说明 (3)4.2.1 运算部分 (3)4.2.2 溢出检测部分 (4)4.2.3锁存信息部分 (4)4.3总电路 (5)5 电路检测 (6)5.1 基本功能检测 (6)6 遇到的问题与解决方法 (6)7 感想和建议 (7)8 思考题 (7)原创性声明本人郑重声明:所呈交的报告是本人在老师同学和的指导下独立进行实验所取得的成果.,除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的内容。
本人完全意识到本声明的法律效应,后果由本人承担。
学生签字:1 实验内容自己设计一个以74LSl81运算器芯片为核心的电路,能够实现多种运算,并能使用历史结果数据进行累计运算,运算结果可以使用灯和数码管来显示。
在功能方面要求支持有符号数和无符号数运算、支持补码加/减运算以及支持有符号数溢出检测等;在数据来源方面包括一个累加器和一组开关。
通过手动操作,首先能够通过运算数据存入累加器中,再选择不同的运算控制信号,实现不同功能的运算,最后将结果存入到累加器中。
设计八位二进制加减运算器,分别进行有符号和无符号运算的溢出检测。
该运算器能够实现有符号与无符号数的加减法运算,同时还具备有符号与无符号数运算的溢出检测。
2 实验目的●掌握ALU的工作原理与基本设计方法●熟悉算术逻辑运算单元74181的逻辑功能与基本使用方法●熟悉运算器的数据通路●理解溢出检测的概念和溢出检测的方法●锻炼分析和解决实际问题的能力3 实验设备JZXY-II型计算机组成原理实验仪1台74LS181 2片,用作运算器来做有符号以及无符号数的加减法;74LS373 3片,用作锁存器,将运算结果存在373里面以供下次使用;74LS86 1片,用于做有符号和无符号数运算的溢出检测,其中在有符号数中也用来取参与运算的减数或加数的符号位;74LS32 1片,用于做有符号数的溢出检测;74LS08 1片,用于有符号数的溢出检测;74LS04 1片,用于无符号数的溢出检测以及有符号数的溢出检测;4 实验设计方案和电路4.1 实验总体方案图4.1 总体方案图计算部分:只有一个个输入端,输入的数先保存到锁存器中已做被加(减)数,然后在次输入一个数,由两个181芯片完成加减运算或者逻辑运算,同时为了实现循环计算,181芯片还与保存运算结果的锁存器373相连,同时运算结果也保存在373中,以便循环计算所需。
锁存信息:由3个373芯片构成,用来保存被加(减)数,以及运算结果的值。
溢出检测部分:1、有符号数的溢出检测,在做加运算时只需取出参与运算的被加数的符号位用x表示,加数的符号位用y表示,以及结果的符号位s,做xys非或上 x非y非s运算即可;做减法运算时因为在参与运算时减数的符号位已经发生改变,所以在取y的时候不能直接取输入端的符号位y,同时做减法运算时Co非=1,所以用来作为参考为,取得的减数参与运算时的符号位为Co非异或y,所以综上所述,在实际操作中,不管加减法运算所需的参与运算的加减数的符号位为Co非异或上y。
2、无符号溢出检测:做加法时,结果的最高位进位为1 则表示有益出,做减法时,结果的最高位为0则表示溢出,同时用Co非作为参照,那么做(Co非异或上Cn+8非)的非就是无符号运算的溢出检测。
4.2 各模块的分析说明4.2.1 运算部分电路见图4.21 将两块74LS181芯片连接,图中U2作为8位二进制的低4位,U1作为8位二进制的高四位,将低四位的⎺C n+4接到高四位的⎺Cn,U1和U2共用M、S0、S1、S2、S3A0~A7,B0~B7端输入的为补码,进行加法运算时,M=0,⎺Cn =1, S3=1, S2=0, S1=0, S0=1;进行减法运算时,M=0, ⎺Cn=0, S3=0, S2=1, So4.21 运算部分电路图4.2.2 溢出检测部分(1)有符号检测根据操作数和运算结果的符号位是否一致进行检测。
显然,只有两个符号相同的数相加时才可能产生溢出,因此,可根据操作数和运算结果的符号位是否一致进行检测。
设X7,Y7为参加运算数的符号位,S7为结果的符号位,V为溢出标志位,当V取1时表示发生溢出。
根据操作数和运算结果的符号位是否一致实现溢出检测的逻辑表达式如下:V=X7 Y7 S7+ X7 Y7 S7图4.22 有符号溢出检测电路图(2)无符号检测当无符号计算加法时,8位产生进位则溢出,U1中⎺C n+4=0,此时U2中⎺Co=0计算减法时,8位无进位产生溢出,U1中⎺C n+4=1,此时U2中⎺Co=1为溢出标志位,由于无符号加法时最高位有进位则溢出,无符号减法时最高位无进位则溢出,实现溢出检测的逻辑表达式如下:V=⎺C n+4⊕⎺Co的非。
图4.23 无符号溢出检测电路图4.2.3锁存信息部分使用三块74LS373芯片,一片控制运算部分结果8位存储和传递,另外两片分别控制加数(被加数手动输入,都输入74LS181)的高四位和第四位。
图4.24 锁存器电路图4.3总电路图4.3 总电路图5 电路检测5.1 基本功能检测置于无符号运算态。
(1)直传10到AC。
其操作过程是:先将数据开关拨为10,再设置好181的一个适当的运算方式(S3=1,S2=0,S1=1,S0=0,M=1),然后存入暂存器,最后存入AC。
实验结果:显示结果的灯输出:0000 1010。
(2)直传5到送AC。
实验结果:会看到AC的内容由0000 1010直接变成0000 0101。
(3)AC算术加1100,得结果,送回AC。
实验结果:AC内容为0001 0001(4)用181的求反功能将AC求反(S3=0,S2=0,S1=0,S0=0,M=1),得结果。
送回AC。
实验结果:AC内容为1110 1110(5)AC算术减(S3=0,S2=1,S1=1,S0=0,M=0, Cn=1)0100 1111,得结果,送回AC。
实验结果:AC内容为1001 11115.2 溢出检测溢出检测灯2个,一个表示无符号溢出灯,一个表示有符号溢出灯。
红色表示有溢出。
(1)送1010 0110到AC,送1011 0101到数据开关,将181置为算术加,得结果0101 1011,观察结果:无符号数运算时有溢出,补码运算时也有溢出。
(2)送0101 0110到AC,送0110 0010到数据开关,得结果1011 1000,观察结果无符号数运算时无溢出,补码运算时有溢出。
(3)送0000 0011到AC,送0000 0010到数据开关,将181置为算术加,得结果0000 0101,观察结果无符号运算时无溢出,补码运算事无溢出。
(4)送0011 1100到AC,送1111 0010将181置为算术减,得结果0010 1110,观察结果无符号运算时有溢出,补码运算是无溢出。
6 遇到的问题与解决方法1、遇到的问题:对373的操作不了解,不会用373来锁存数据,对数据在运算器里的传递不了解,导致实验结果与预期不符合,最后通过上网查阅资料,以及对老师同学的询问使得问题最终得到解决。
2、遇到的问题:对181输出的最高位进位误解为是Cn+8,导致实验结果与预期不符,最后还是在与同学的讨论中发现输出的实际上是Cn+8非,最后才使得问题得到解决。
3、遇到的问题:对有符号的减法运算的溢出检测,在取参与运算的减数的符号位时,一开始由于对181的工作原理理解的不透彻,所以在取符号位的时候出错,导致实验结果与预期不符,最后在仔细看书以及同学的帮助最终弄明白了,写出逻辑运算表达式,以Co非参照标志设计出了正确的去符号位的电路来。
7 感想和建议(1)做实验前很有必要彻底了解实验的具体内容是什么,不能像我这次一样,只当是去做一个181实现加减法运算以及实现溢出检测的实验就可以了,但实际去了才知道需要实现循环运算的运算器,而且需要373做锁存器,这个在我去的时候根本没学关于373的东西,去了才慢慢上网查问同学,效率很低!!!(2)做实验是一部分一部分做、能够很好的提高实验效率。
先做运算器部分,实现了运算的基本功能后再做加入373锁存的循环计算,做好之后再做有符号数的溢出检测,最后再做无符号数的溢出检测,这样做不仅提高了效率而且还能很好的纠错。
(3)在实践中,每根导线的检测很必要,这个我在做的时候没用一根导线我就会先测试一次,虽然导线会坏的概率很小,但是还是被我测出了几根导线有问题,芯片倒是没发现什么问题,这些硬件设施的完善是我们这次实验能够成功的基本保障。
(4)改进:2个74LS373就可以实现电路的功能。
可以用1个74LS373存储和传输8位二进制的高四位和第四位。
8 思考题题:为什么要给运算器增加溢出检测电路?答:一个变量的存储容量是有限的,如果超过这个限度,就会溢出。
不同的是,数据溢出后是做了模运算,结果在一个封闭的空间。
当运算的结果产生溢出,机器处理的结果就是做模运算后错误的结果,溢出检测电路能检测结果是否正确。
而且程序员在设计程序时,如果他没有考虑到溢出问题,但是他实际给出的数据出现了溢出情况,那后果无疑是很严重的,所以才需要在硬件上将运算的溢出问题解决,以方便软件工程师,将软件工程师的快乐建立在硬件工程师的“痛苦”之上。
参考书目[1]秦磊华吴非莫正坤.计算机组成原理(第1版)。