【计算机组成原理实验】实验一 运算部件实验_加法器及计算机性能指标
实验指导书原文:
1.3、实验步骤
1、先连接USB线,也是电源。(切记:不能带电插拔USB,否则会损坏实验设备)
2、打开QuartusàtoolsàprogrammeràAddFile,将adder8.sof(在C盘的“计算机组织与结构源码”文件夹里面,不清楚问老师)下载到FPGA中。
3、在实验台上通过模式开关选择REGSEL=0、M[2:0]=“上(1)、上(1)、上(1)”、FDSEL=0。
4、除了模式选择开关外,请把其它所有开关初始状态全部置为0。
1.4、观察实验现象并记录相应数据
本实验实现8位数相加I+II=sum(CarryOut)。
输入输出的规则对应如下:
- 输入的8位操作数I7~I0对应开关SD15~SD8;
- 输入的8位操作数II7~II0对应开关SD7~SD0;
- 最低位进位Cin对应开关SA0;
- 和sum7~sum0对用灯A7~A0,最高位进位CarryOut对应等A8。
如(00000000)+(11111111)=(11111111),CarryOut=0。
- 波动开关SD15~SD8输入8位操作数I(I7~I0)00000000,SD7~SD0输入8位操作数II(II7~II0)11111111,SA0输入Cin();
- 观察和sum(灯A7~A0),CarryOut(灯A8)。同理实验表1. 3中的数据,并把sum和CarryOut记录到表1.3对应的表格里(此处是第1张表,二进制记录,记录机器算的结果),并手工计算(要求熟练掌握原码、反码、补码算法,负数的表示和计算方法),校验机器计算的结果是否正确?
表1.3 8位加法器实验(注意操作数全都是补码)
对上面表格的数据进行分析,分两种情况(请熟练手工计算):
- 一是如果把上面数据看成是有符号数,结果是多少?请在表格里面把输入操作数和结果以十进制(方便计算,直观感受)表示出来(另画一张类似的表格,此处是第2张表,十进制记录,记录手工计算结果);注意计算机里面负数的表示方法及补码运算方法。
- 二是如果把上面数据看成无符号数,结果又是多少?请在表格里面把输入操作数和结果以十进制表示出来(另外一张类似的表格另画一张类似的表格,此处是第3张表,十进制记录,记录手工计算结果)。
注意分析:特别是有符号数运算的时候,怎样看待CarryOut的结果,CarryOut=1就是真溢出?怎样判断真假溢出?请分析并记录,然后写在报告里面。
1.5、计算机性能指标
1、查阅资料,掌握计算机性能指标有哪些?
2、根据计算机性能指标选择性价比高的计算机。
分别为要求价格在3000、5000、8000左右的客户选择购买性价比高的计算机。
3、平常购买计算机除了上面提到的性能指标外,我们通常还会考虑哪些因素?
1.7、思考题
1、根据8位数据位加法器原理,考虑16、32、64位数据位的加法是怎样完成的?
实操注意
我们学校的硬件长这样:
区域1对应的就是实验步骤1.3,选择REGSEL=0、M[2:0]=“上(1)、上(1)、上(1)”、FDSEL=0都在这里进行。
区域2对应的就是实验步骤1.4,8位二进制数相加的结果,左边8个事一个数,右边8个是另一个数。我标的2这个数的正上方(框内)就是SA0,结果就是加1,模拟的是全加器的进位提示(但是笔者没学懂全加器也不知道是啥意思)。
区域3对应的就是显示结果。最上一排是最终结果,同实验报告书
左边只需要看A8,如果亮了表示进位;右边的8个数就是相加得出的结果。
其他区域尚未探索,我目前也不知道是什么。
实验报告
实验结果
表 1
操作数I | 操作数II | Cin | Sum | CarryOut |
1011 1111 | 0100 1111 | 0 | 0000 1110 | 1 |
1010 1010 | 1010 1010 | 1 | 0101 0101 | 1 |
1111 0000 | 0000 1111 | 0 | 1111 1111 | 0 |
1111 1111 | 1111 1111 | 1 | 1111 1111 | 1 |
根据计算得出:
表 2
操作数I | 操作数II | Cin | Sum | CarryOut | 是否溢出 |
1011 1111(-65) | 0100 1111(79) | 0 | 0000 1110(14) | 1 | 无 |
1010 1010(-86) | 1010 1010(-86) | 1 | 0101 0101(85) | 1 | 有 |
1111 0000(-16) | 0000 1111(15) | 0 | 1111 1111(-1) | 0 | 无 |
1111 1111(-1) | 1111 1111(-1) | 1 | 1111 1111(-1) | 1 | 无 |
根据计算得出:
表 3
操作数I | 操作数II | Cin | Sum | CarryOut | 是否溢出 |
1011 1111(191) | 0100 1111(79) | 0 | 0000 1110(14) | 1 | 有 |
1010 1010(170) | 1010 1010(170) | 1 | 0101 0101(85) | 1 | 有 |
1111 0000(240) | 0000 1111(15) | 0 | 1111 1111(255) | 0 | 无 |
1111 1111(255) | 1111 1111(255) | 1 | 1111 1111(255) | 1 | 有 |
思考题
分析:特别是有符号数运算的时候,怎样看待CarryOut的结果,CarryOut=1就是真溢出?怎样判断真假溢出?请分析并记录,然后写在报告里面。
答:在有符号数加法中,CarryOut=1并不代表一定发生了溢出。
因为CarryOut仅仅表示最高位(符号位)产生了进位或借位,而有符号数溢出的本质是结果符号异常,具体来说,有符号加法真假溢出的判断标准是,如果两个操作数符号相同(都为正,或都为负),但结果符号与它们不同,那么发生了真正的溢出;如果两个操作数符号不同,不管结果怎样,都不会发生有符号溢出。
因此判断溢出要看符号位的变化,而不是单纯看CarryOut。
思考题:根据8位数据位加法器原理,考虑16、32、64位数据位的加法是怎样完成的?
答:8位加法器原理推广到更高位(16位、32位、64位)加法的方法:
高位加法器是由低位加法器级联组成的。
具体方法是:低位的CarryOut作为高一位加法器的CarryIn输入,逐级传递,形成进位链。
每一级加法器只负责自己的8位、16位或32位数据块,Carry信号负责在各块之间传递。
比如:
16位加法 = 两个8位加法器级联(低8位+高8位,Carry连接)
32位加法 = 四个8位加法器级联
64位加法 = 八个8位加法器级联
为了提高速度,现代处理器中还会用快速进位技术,提前预测进位,从而并行运算,减少加法延迟。
简要流程:
低位部分加法,得到Sum低位和CarryOut。
高位部分加法,把低位CarryOut作为高位的CarryIn。
依此类推,最终得到全位宽Sum和最高位的CarryOut。