(整理)基于恢复余数法定点原码一位除法器的设计课程设计报告
- 格式:doc
- 大小:548.50 KB
- 文档页数:26
定点源码一位乘法器的设计内容结论篇一:设计一个定点源码一位乘法器可以帮助我们更好地理解计算机内部如何进行乘法运算。
本文将介绍一个定点源码一位乘法器的设计方案,包括其基本结构和实现方式,结论是这种乘法器在计算机内部可以实现,并且具有高效的性能。
首先来看乘法器的基本原理。
乘法是将两个数相乘得到的结果存储在两个数的对应位上,然后根据乘积的二进制表示将结果进行位运算得到最终的答案。
对于一位乘法器,其基本操作如下:1. 读取两个数,并将它们存储在一个临时变量中。
2. 对两个数进行位运算,将乘积的对应位设置为1,其他位设置为0。
3. 将结果存储回原来的两倍位置。
下面我们来具体实现一个一位乘法器。
首先,我们需要选择一种编程语言来实现乘法器。
由于一位乘法器只涉及两个数的不同位,因此选择C语言作为实现语言。
接下来,我们需要设计一个乘法器的数据结构。
对于一位乘法器,我们只需要将乘积的二进制表示存储在一个数组中,而不需要存储中间结果。
因此,我们可以使用一个二进制数组来实现一位乘法器。
接下来,我们来实现乘法器的代码。
首先,我们初始化两个数组,一个用于存储乘积的二进制表示,另一个用于存储中间结果。
然后,我们使用位运算来实现乘法操作。
具体地,我们按照以下步骤进行操作:1. 读取两个数。
2. 对两个数进行位运算。
3. 将乘积的对应位设置为1,其他位设置为0。
4. 将结果存储回原来的两倍位置。
下面是完整的代码实现:```c#include <stdio.h>#include <stdlib.h>#define MAX_INT 32767// 乘法器数据结构typedef struct {int value;int bit[2];} 乘积;// 初始化乘积void init_积(乘积*积) {积->value = 0;for (int i = 0; i < 2; i++) {积->bit[i] = 0;}}// 读取两个数int read_nums(乘积*积, int num1, int num2) { 乘积 temp;init_积(&temp);int carry = 0;for (int i = 0; i < 8; i++) {int bit = (num2 >> i) & 1;temp.bit[i] = bit;if (bit) {carry++;}}temp.value = carry ? (temp.value + num1) : num1;return temp.value;}// 位运算void bit_Ops(乘积*积, int num1, int num2, int bit) { if (bit) {积->bit[2 * bit - 1] = num2 & 1;}}// 打印结果void print_result(乘积*积, int num1, int num2) {for (int i = 0; i < 2; i++) {printf("%d ",积->bit[i]);}printf("");}int main() {乘积积1,积2;int num1, num2;printf("请输入两个整数:");scanf("%d%d", &num1, &num2);printf("请输入第一个整数:");scanf("%d", &积1.value);printf("请输入第二个整数:");scanf("%d", &积2.value);printf("请输入第一个整数的位数: ");scanf("%d", &积1.bit[0]);printf("请输入第二个整数的位数: ");scanf("%d", &积2.bit[0]);printf("计算结果为:");printf("%d", read_nums(积1, num1, num2));printf("计算结果的位数:");printf("%d ",积1.bit[2 *积1.bit[0] - 1]);printf(" ");printf("计算结果的进位:");printf("%d ",积2.bit[2 *积2.bit[0] - 1]);printf(" ");return 0;}```根据上面的代码,我们可以得到一位乘法器的基本结构。
****************课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:恢复余数法定点原码一位除法器的设计院(系):*************专业:*************班级:*************学号:*************姓名:*************指导教师:*************完成日期:*************目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3设计环境 (3)第2章详细设计方案 (4)2.1顶层方案图的设计与实现 (4)2.1.1创建顶层图形设计文件 (4)2.1.2器件的选择与引脚锁定 (5)2.1.3 编译、综合、适配 (6)2.2功能模块的设计与实现 (6)2.2.1寄存器模块的设计与实现 (6)2.2.2数据选择器模块的设计与实现 (8)2.2.3补码器模块的设计与实现 (12)2.2.4加法器模块的设计与实现 (13)2.2.5移位寄存器模块的设计与实现 (15)2.3仿真调试 (18)第3章编程下载与硬件测试 (20)3.1编程下载 (20)3.2硬件测试及结果分析 (20)参考文献 (22)附录(电路原理图) (23)第1章总体设计方案1.1 设计原理定点原码一位除法器的原理是根据人工进行二进制除法的规则:判断被除数与除数的大小,若被除数小,则上商0,并在余数最低位补0,再用余数和右移一位的除数比,若够除,则上商1,否则上商0。
然后继续重复上述步骤,直到除尽(即余数为0)或已得到的商的位数满足精度要求为止。
上述计算方法要求加法器的位数为除数位数的两倍。
但分析后,会发现右移除数,可以通过左移被除数(余数)来代替,左移出界的被除数(余数)的高位都是无用的0,对运算不会产生任何影响。
另外,上商0还是1是计算者用观察比较的办法确定的,而计算机只能用做减法判断结果的符号为负还是为正来确定。
当差为负时,上商为0,同时还应把除数再加到差上去,恢复余数为原来的正值之后再将其左移一位。
原码一位乘法器设计实验报告一位乘法器设计实验报告本次实验的目的是设计一个1位乘法器,使用VHDL语言在FPGA平台上进行编程,以模拟数字系统中常用的数字乘法操作。
(1)实验介绍本次实验采用FPGA对1位乘法器进行设计,通过综合语言VHDL对1位乘法器进行编程,实现乘法操作,考核我们所学习到的技能,及其在数字电路中的运用。
(2)原理1位乘法器(One-bit Multiplier)主要包括一个数据输入端A,输入一位A;B输入端,输入一位B;两个控制端,乘法指令和正负指令;产生和端为Cout,乘法结果输出端为Dout。
1位乘法器的功能是:如果A、B都为0时,整个乘法器保持空闲,如果A>0或者 B>0,就会开始乘法运算,Cout为A与B的AND运算结果,Dout=A*B,即当B=1时,Dout=A;当B=0时,Dout=0。
(3)实验流程(1)设计多位乘法器的功能模块,完成模块之间的接口描述;(2)设计1位乘法器的VHDL代码,其中包括输入、输出、控制部分;(3)利用Xilinx ISE 14.6完成编译,查看综合错误情况;(4)绘制电路图,添加模块;(5)进行仿真测试,将模块内各部分功能输入实际值,验证运算正确性;(6)在DE2开发板上运行代码,上传新的程序,查看实际运行情况,确认乘法器可以正确工作;(7)验证结果,完成整个乘法器的设计。
(4)实验结果本次实验通过编写VHDL语言,绘制电路图,仿真测试,烧写程序等步骤,设计出一位乘法器,实现了正确乘法运算功能,实验结果如下图所示:此外,实验中使用的FPGA开发板的硬件设计采用Cyclone ll,有良好的性能和可编程性,在编程和复杂数字电路处理领域有很强的优势。
(5)总结本次实验通过实验,熟悉了1位乘法器的结构及其工作原理,掌握综合语言VHDL和FPGA编程技术,掌握了数字电路设计。
最后,本次实验完成了乘法器的设计,检验结果满足预期,获得有意义的实验教训,实现了实验目标。
课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位除法器的设计(系):业: 级: 号: 名:指导教师:完成日期:第1章总体设计方案1.1设计原理1.2设计环境第2章详细设计方案2.1顶层方案图的设计与实现.......2.1.1创建顶层图形设计文件........2.1.2器件的选择与引脚锁定........2.2功能模块的设计与实现.........2.2.1选择移位模块的设计与实现.2.2.2余数选择器模块的设计与实现2.2.3控制器模块的设计与实现... 2.3仿真调试...................... 第3章编程下载与硬件测试.......... . (4) (4) (4) (6) (6) (9)..10 .11.133.1编程下载..........3.2硬件测试及结果分析参考文献............... 13 13 14第1章总体设计方案1.1 设计原理定点原码一位除法的计算有恢复余数和加减交替两种算法,商的符号为除数与被除数两符号位的异或值,数值则为两数绝对值相除后的结果。
此设计方案仅采用恢复余数法进行设计。
恢复余数定点原码一位除法器实现的功能如表 1.1所示,设计的电路应实现表1.1中给定的功能。
设:X=X0 X1……X nY=Y0 Y1……Y nX0 X1,丫0丫1分别为符号位,K为两符号位的异或值X/Y=K*|X|/|Y||X|/|Y|利用恢复余数法求的,在计算机中,商只能用做减法判结果的符号为正还是为负来确定。
当差为负时,上商为0,同时还应该把除数再加到差上去,恢复余数为原来的正值之后再左移一位。
若减得的差为0或为正值时,就没有恢复余数的操作,上商为1,余数左移一位。
其计算过程如下:例:已知:X=0.0100丫=0.1000求:X/Y表1.1恢复余数定点原码一位除法器功能表恢复余数定点原码一位除法器的整体设计包含两输入寄存器模块,一个加法运算模块,一个余数移位模块,一个商移位模块和一个由触发器和计数器构成的控制模块,移位模块采用Verilog设计输入方式,其余采用原理图设计输入方式。
沈阳航空工业学院课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:4401102学号:200403011034姓名:蔡丽娇指导教师:刘泽显完成日期:2006年12月31日沈阳航空工业学院课程设计报告目录第1章总体设计方案 (1)1.1 设计原理 (1)1.2 设计思路 (1)1.3 设计环境 (2)第二章详细设计方案 (3)2.1顶层方案图的设计与实现 (3)2.1.1创建顶层图形设计文件 (3)2.1.2器件的选择与引脚锁定 (3)2.2 功能模块的设计与实现 (5)2.2.1 8位移位电路 (5)2.2.2 部分积寄存器 (7)2.2.3 乘数寄存器 (7)2.2.4 二路选择器 (8)2.2.5 计数器 (9)2.2.6 结果输出器 (11)2.3 仿真调试 (13)第3章编程下载与硬件测试 (14)3.1 编程下载 (14)3.2 硬件测试及结果分析 (14)参考文献 (15)附录(电路原理图) (16)第1章总体设计方案1.1 设计原理定点原码一位乘法器的设计主要是基于原码一位乘法的计算过成。
设计内容主要是实现输入被乘数和乘数经电路得出结果。
设计思想是:以乘数的最低位作为乘法判断位,若判断位为1,则在前次部分积(初始部分积为0)上加上被乘数,然后连同乘数一起右移一位;若判断位为0,则在前次部分积上加0,然后连同乘数一起右移一位。
重复此判断过程,直到运算n次为止(n为乘数数值部分的长度)。
1.2 设计思路原码一位乘法器主要包括ALU﹑部分积寄存器﹑乘数移位寄存器﹑被乘数寄存器和移位电路五大部分。
这五大部分就作为底层设计,其中乘数移位寄存器需要保留移出的最低位,它的最高位要接收部分积移出的最低位这两部分采用V erilog语言进行设计,顶层的乘法器采用原理图设计输入方式。
原码一位乘的数值运算中不需要考虑符号位的情况,符号位于数值位分开处理。
定点原码一位乘法器的设计定点原码乘法器是一种基本的数字运算电路,用于实现两个定点原码数的乘法运算。
在设计定点原码乘法器时,需要考虑两个关键方面:乘法运算的算法和乘法运算电路的实现。
一、乘法运算的算法设计:1.符号位的处理:定点原码乘法器需要考虑乘法运算的符号位。
根据乘法运算的规则,当两个数的符号位不同时,乘积的符号位为负;当两个数的符号位相同时,乘积的符号位为正。
因此,在乘法运算时,首先需要对两个乘数的符号位进行判断和处理。
2.乘法运算的主体部分:乘法运算的主体部分是通过将两个乘数的每一位进行相乘,并将结果相加得到乘积的每一位。
一般来说,乘法运算可以采用移位和加法的方式来实现。
a.移位操作:在乘法运算中,需要将乘数的每一位与被乘数的每一位相乘,并将结果相加。
因此,首先需要将乘数的每一位与被乘数的每一位相乘,移位操作可以实现该过程。
b.加法操作:乘法运算中,需要将乘数的每一位与被乘数的每一位相乘,得到中间的结果,然后将中间结果相加,得到最终的乘积。
这一步骤可以通过加法器电路来实现。
二、乘法运算电路的实现设计:在设计定点原码乘法器的电路时,需要考虑各个功能模块的实现:1.符号位处理电路:由于定点原码乘法器需要考虑两个乘数的符号位,因此需要设计一个符号位处理电路。
该电路可以根据两个乘数的符号位来判断乘积的符号位,并给出相应的控制信号。
2.移位操作电路:移位操作电路用于实现乘数的每一位与被乘数的每一位相乘。
可以采用多路选择器和移位寄存器来实现。
多路选择器用于选择当前操作的两个数位,移位寄存器用于保存被乘数的每一位。
3.加法器电路:加法器电路用于将乘数的每一位与移位操作电路中移位后的结果相加。
可以采用并行加法器来实现,通过级联多个全加器,实现两个二进制数的加法运算。
4.乘积结果输出电路:乘积结果输出电路用于将最终的乘积输出。
可以通过选择器来选择最后一位的结果,并将结果输出到寄存器中,供后续电路使用。
设计定点原码乘法器的步骤如下:1.分析乘法运算的算法,确定各个功能模块的需求和输入输出信号。
沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点补码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:84010101学号:2008040101002姓名:边爽指导教师:曹一鹏完成日期:2011年1月14日沈阳航空航天大学课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (2)1.3设计环境 (4)第2章详细设计方案 (5)2.1顶层方案图的设计与实现 (5)2.1.1创建顶层图形设计文件 (5)2.1.2器件的选择与引脚锁定 (6)2.1.3编译、综合、适配 (7)2.2功能模块的设计与实现 (7)2.2.1 取补模块的设计与实现 (7)2.2.2选择器模块的设计与实现 (9)2.2.3 乘数补码移位寄存器模块的设计与实现 (12)2.2.4 部分积移位寄存器模块的设计与实现 (14)2.2.5加法器模块的设计与实现 (16)2.3仿真调试 (16)第3章编程下载与硬件测试 (19)3.1编程下载 (19)3.2硬件测试及结果分析 (19)参考文献 (22)附录(电路原理图) (23)第1章 总体设计方案1.1 设计原理由于机器都采用补码做加减运算,所以设计补码乘法器能避免码制转换,提高机器效率。
在计算两个补码相乘时,可以通过Booth 算法来实现定点补码一位乘的功能。
布斯(Booth)算法采用相加和相减的操作计算补码数据的乘积,Booth 算法对乘数从低位开始判断,根据后两个数据位的情况决定进行加法、减法还是仅仅进行移位操作。
补码一位乘法的运算规则:(1) 被乘数一般取双符号位参加运算。
(2) 乘数可取单符号位以决定最后一步是否需要校正,即是否加补][X -。
(3) 乘数末位增设附加位1+n y ,且初值为0。
部分积补][0Z 初始值为0。
(4) 被乘数[x]补乘以对应的相邻两位乘数(n n y y -+1)之差值,再与前部分积累加,然后右移一位(乘2-1),形成该步的部分积累加和。
课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点补码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:*****学号:*****姓名:*****指导教师:*****完成日期:2006年12月31日沈阳航空工业学院课程设计报告目录第1章总体设计方案 (2)1.1补码乘法器设计原理 (2)1.2设计思路 (4)1.3设计环境 (5)第2章详细设计方案 (5)2.1补码乘法器电路图的设计与实现 (6)2.1.1 补码乘法器设计 (6)2.1.2 器件的选择与引脚锁定 (8)2.1.3 编译、综合、适配 (8)2.2功能模块的设计与实现 (9)2.2.1 两输入三选一选择器模块的设计与实现 (9)2.2.2 半加器模块的设计与实现 ........................................... 错误!未定义书签。
2.3仿真调试 (10)第3章编程下载与硬件测试 (12)3.1编程下载 (12)3.2硬件测试及结果分析 (12)参考文献 (14)第1章总体设计方案1.1 补码乘法器设计原理原码乘法的主要问题是符号位不能参加运算,单独用一个异或门产生乘积的符号位,故自然提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。
布斯(Booth)算法,它采用相加和相减的操作计算补码数据的乘积,Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。
Booth算法操作表示判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。
判断被乘数中的最低位以及右边的位(辅助位0),如果为00,则只进行移位操作;之后在判断移位之后的最后两位,如果为01,则进行加法操作并进行移位操作;如果最后两位为10,则进行减法操作并移位,这个减法操作相当于减去2x的值;判断最后的差值,如为1,则部分积加[X]补;如为0,则不分积加0;如为-1,则部分积加[-X]补,最后一次不移位。
****************课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:恢复余数法定点原码一位除法器的设计院(系):*************专业:*************班级:*************学号:*************姓名:*************指导教师:*************完成日期:**************************课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3设计环境 (3)第2章详细设计方案 (4)2.1顶层方案图的设计与实现 (4)2.1.1创建顶层图形设计文件 (4)2.1.2器件的选择与引脚锁定 (5)2.1.3 编译、综合、适配 (6)2.2功能模块的设计与实现 (6)2.2.1寄存器模块的设计与实现 (6)2.2.2数据选择器模块的设计与实现 (8)2.2.3补码器模块的设计与实现 (12)2.2.4加法器模块的设计与实现 (13)2.2.5移位寄存器模块的设计与实现 (15)2.3仿真调试 (18)第3章编程下载与硬件测试 (20)3.1编程下载 (20)3.2硬件测试及结果分析 (20)参考文献 (22)附录(电路原理图) (23)第1章总体设计方案1.1 设计原理定点原码一位除法器的原理是根据人工进行二进制除法的规则:判断被除数与除数的大小,若被除数小,则上商0,并在余数最低位补0,再用余数和右移一位的除数比,若够除,则上商1,否则上商0。
然后继续重复上述步骤,直到除尽(即余数为0)或已得到的商的位数满足精度要求为止。
上述计算方法要求加法器的位数为除数位数的两倍。
但分析后,会发现右移除数,可以通过左移被除数(余数)来代替,左移出界的被除数(余数)的高位都是无用的0,对运算不会产生任何影响。
另外,上商0还是1是计算者用观察比较的办法确定的,而计算机只能用做减法判断结果的符号为负还是为正来确定。
沈阳航空航天大学课程设计报告目录学术诚信声明 ................................................................................. 错误!未定义书签。
第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3设计环境 (2)第2章详细设计方案 (3)2.1顶层方案图的设计与实现 (3)2.1.1创建顶层图形设计文件 (3)2.1.2器件的选择与引脚锁定 (4)2.1.3编译、综合、适配 (5)2.2功能模块的设计与实现 (6)2.2.1 输入模块的设计与实现 (6)2.2.移位模块的设计与实现 (7)2.2.3加法器模块的设计与实现 (9)2.2.4 相反补码模块的设计与实现 (10)2.3仿真调试 (11)第3章编程下载与硬件测试 (13)3.1编程下载 (13)3.2硬件测试及结果分析 (13)参考文献 (15)附录(电路原理图) (16)第1章 总体设计方案1.1 设计原理减交替法的实现是当某一次求得的差值(余数Ri )为负时,不恢复它,继续求下一位的商,但用加上除数(+[—Y]补)的办法来取代(-Y )的操作,其他操作依然不变。
(1)当余数为正时,商上“1”,求下一位商的办法是余数左移一位,再减去除数;(2)当余数为负数时,商上“0”,求下一位商的办法是余数左移一位,再加上除数。
(3)这种方法不用恢复余数,但若最后一次上商为“0”,而又需要得到正确的余数,则在这最后一次仍需恢复余数。
1.2 设计思路课程设计的要求为:(1)采用定点原码一位除法器由一个除数寄存模块,一个被除数寄存模块,一个加法模块,一个移位模块,一个移位模块、一个商寄存模块,采用逻辑电路设计输入方式。
(2)定点原码一位除法器的顶层采用原理图设计输入方式。
课程设计的思路为:(1)由于是不恢复余数法,所以需要修正余数为负的情况,所以原理图如图1.2:被除数加法器求补器除数加法器商寄存器余数寄存器图1.2 不恢复余数法一位除法器设计总框图1.3 设计环境(1)硬件环境•伟福COP2000型计算机组成原理实验仪COP2000计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成实验平台上有寄存器组R0-R3、运算单元、累加器A、暂存器B、直通/左移/右移单元、地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20个按键、字符式LCD、RS232口。
计算机组成原理第七讲(除法-原码恢复余数法)(科大罗克露)定点除法运算:若干余数与除数加减,移位。
例:0.10110 ÷0.11111--------->商为:0.10110 余数为: 0.10110 x 2-5实现除法关键:比较余数,除数绝对值大小,以决定上商。
恢复余数。
1.原码恢复余数法算法:比较两数大小可用减法试探。
2 X 余数-除数=新余数(为正,够减,商为1;为负,不够减,商为0,恢复原余数) 实例:X= -0.10110 Y=0.11111 求X/Y,给出商数Q和余数R。
设置寄存器:A:被除数,余数B:除数C:商初值:A=|X|=00.10110;B=|Y|=00.11111;-B=11.00001; C=|Q|=0.00000分步运算过程:步骤判断条件操作A=00.10110(看作余数r0)C=0.00000(Cn=0最末位)符号位SA <----- 01.01100A= 乘2r0(左移一位)A=01.011001 -B + 11.000010 r1 = 00.01101 (符号位为0,表示够减,商为1)C=0.00001--->Q12<------ 00.11010 A=乘2r1(左移一位) A=00.11010-B +11.000011 r2' = 11.11011 (符号位1,表示不够减,商为0)C=0.00010--->Q23. +B + 00.11111 (不够减,恢复余数)恢复余数r2 = 00.110104 <--------- 01.10100 A=乘2r2 (左移一位) A=00.11010-B +11.000010 r3 = 00.10101(符号位为0,表示够减,商为1) C=0.00101--->Q3 5. <----- 01.01010 A=乘2r3 (左移一位) A=01.01010-B + 11.000010 r4 = 00.01011 (符号位为0,表示够减,商为1) C=0.01011--->Q4 6 <----- 00.10110 A=乘2r4 (左移一位) A=00.10110-B + 11.000011 r5 = 11.10111 (符号位为1,表示不够减,商为0) C=0.10110--->Q5 7 +B00.11111恢复余数r6 = 00.10110Q=-0.10110R= 0.10110 x 2-5;(余数同被除数符号)X/Y = -0.10110 + 0.10110 x 2-5/0.11111结果X/Y就等于商Q加上余数R再除以除数Y;运算规则说明:1.A,B双符号位,X,Y绝对值,|X|小于|Y|。
沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位除法器的设计院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:姜鹏指导教师:周大海日10月01年2014完成日期:目录第1章总体设计方案11.1设计原理11.2设计思路41.3设计环境4第2章详细设计方案32.1总体方案的设计与实现62.1.1总体方案的逻辑图62.1.2计算算法总流程图72.2功能模块的设计与实现62.2.1 操作数预处理模块的设计与实现72.2.2 上商置0模块的设计与实现92.2.3 上商置1模块的设计与实现92.2.4 商符运算模块的设计与实现10第3章测试结果123.1程序仿真123.2仿真测试错误!未定义书签。
3.2.1 仿真测试一——两个正数除法运算123.2.2 仿真测试二——一个正数一个负数除法运算163.2.3 仿真测试三——两个负数除法运算18参考文献12附录(源程序清单)22第1章总体设计方案1.1 设计原理原码一位除,即两个原码数相除,商的符号位运算为除数和被除数的符号异或值。
这里采用的算法为恢复余数法,而且除数和被除数规定为4位。
实验的数据从实验箱的开关输入,而且运算的结果在OUT寄存器中显示出来。
整个过程通过汇编语言编写实现。
恢复余数法定点原码一位除法器工作原理大致如下:设:X=XXXXXXXX04273615Y=YYYYYYYY03716254其中高四位XXXX和YYYY为符号位,低四位XXXX和024*********YYYY 为数据位。
则:0231X/Y=K*|X|/|Y|其中,|X|和|Y|为X和Y的绝对值,K为X和Y的符号位的异或值。
|X|/|Y|利用恢复余数法求的,商根据余数的符号是正或负来判断。
当为负时,上商为0,同时还应该把除数再加到差上去,恢复余数为原来的正值之后再左移一位。
若差为0或为正值时,就没有恢复余数的操作,上商为1,余数左移一位。
沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位除法器的设计院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:完成日期:2011年01月14日沈阳航空航天大学课程设计报告目录第1章总体设计方案 (2)1.1设计原理 (2)1.2设计思路 (2)1.3设计环境 (2)第2章详细设计方案 (4)2.1总体方案的设计与实现 (4)2.1.1总体方案的逻辑图 (4)2.1.2算法流程图 (5)2.2功能模块的设计与实现 (6)2.2.1 模块的设计与实现 (6)第3章验证测试 (9)3.1验证测试 (9)参考文献 (10)第1章总体设计方案1.1设计原理原码一位除,即两个原码数相除,商的符号为除数和被除数的符号异或值。
采用汇编语言实现定点原码一位除法器,算法为恢复余数法,除数为4位。
利用恢复余数的方法来进行运算。
1.2设计思路算法为恢复余数法,先用被除数减去除数,如果结果为正数商1,然后左移,如果是负数商0然后加上Y的补,继续运算。
本题目是要求4位所以到结果是4位时结束运算。
实验开始时将实验数据从实验箱的开关输入到R0,R1,R2三个寄存器中,R0为被除数,R1为除数,R2为商。
运算过程采用恢复余数法。
主要判断被除数减去除数的商值。
如果为负,商0然后加除数然后左移。
如果商值为正商1,左移。
数据都存放在寄存器中,最后结果在OUT寄存器中显示。
1.3设计环境COP2000 模型机包括了一个标准CPU 所具备所有部件,这些部件包括:运算器ALU、累加器A、工作寄存器W、左移门L、直通门D、右移门R、寄存器组R0-R3、程序计数器PC、地址寄存器MAR、堆栈寄存器ST、中断向量寄存器IA、输入端口IN、输出端口寄存器OUT、程序存储器EM、指令寄存器IR、微程序计数器uPC、微程序存储器uM,以及中断控制电路、跳转控制电路。
其中运算器和中断控制电路以及跳转控制电路用CPLD 来实现,其它电路都是用离散的数字电路组成。
沈阳航空航天大学课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位除法器的设计院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:姜鹏指导教师:周大海完成日期:2014年01月10日目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (4)1.3设计环境 (4)第2章详细设计方案 (3)2.1总体方案的设计与实现 (6)2.1.1总体方案的逻辑图 (6)2.1.2计算算法总流程图 (7)2.2功能模块的设计与实现 (6)2.2.1 操作数预处理模块的设计与实现 (7)2.2.2 上商置0模块的设计与实现 (9)2.2.3 上商置1模块的设计与实现 (9)2.2.4 商符运算模块的设计与实现 (10)第3章测试结果 (11)3.1程序仿真 (11)3.2仿真测试 ............................................................................ 错误!未定义书签。
3.2.1 仿真测试一——两个正数除法运算 (12)3.2.2 仿真测试二——一个正数一个负数除法运算 (16)3.2.3 仿真测试三——两个负数除法运算 (18)参考文献 (11)附录(源程序清单) (20)第1章总体设计方案1.1 设计原理原码一位除,即两个原码数相除,商的符号位运算为除数和被除数的符号异或值。
这里采用的算法为恢复余数法,而且除数和被除数规定为4位。
实验的数据从试验箱的开关输入,而且运算的结果在OUT寄存器中显示出来。
整个过程通过汇编语言编写实现。
恢复余数法定点原码一位除法器工作原理大致如下:设:X=X7X6X5X4X3X2X1X0Y=Y7Y6Y5Y4Y3Y2Y1Y0其中高四位X7X6X5X4和Y7Y6Y5Y4为符号位,低四位X3X2X1X0和Y3Y2Y1Y0为数据位。
则:X/Y=K*|X|/|Y|其中,|X|和|Y|为X和Y的绝对值,K为X和Y的符号位的异或值。
|X|/|Y|利用恢复余数法求的,商根据余数的符号是正或负来判断。
当为负时,上商为0,同时还应该把除数再加到差上去,恢复余数为原来的正值之后再左移一位。
若差为0或为正值时,就没有恢复余数的操作,上商为1,余数左移一位。
下面通过一道例题详细理解恢复余数法定点原码一位除法器的工作原理。
详细过程如表1.1所示。
例:已知:X= -0.1011Y= -0.1101求:[X/Y]原解:由X= 0.1011, Y= -0.1101得[X]=1.1011,X*=0.1011原[Y]原=1.1101,Y*=0.1101,[-Y*]补=1.0011下面表1.1列出了商值得整个求解过程。
表1.1恢复余数定点原码一位除法器功能表故:商值为0.1101商的符号位为:X0⊕Y0=1⊕1=0所以[X/Y]原=0.1101由此例可见,共左移4次,上商5次,第一次上的商在商的整数位上,这对小数除法而言可用它作溢出判断。
即当该位为“1”时,表示此除法溢出,不能进行,应由程序进行处理;当为“0”时,说明除法合法,可以进行。
1.2 设计思路基于恢复余数法的定点原码一位除法器的设计主要包含如下4个部分:①求X* 和Y*:即去掉除数和被除数的符号位,运算过程中把除数和被除数都按照正数进行运算。
只需要将除数和被除数都和“0FH(00001111)”进行“与”运算即可;②上商1,减去余数:用被除数减去除数,如果运算结果大于0(符号位为0),则上商1,将运算结果左移一位,同时商值也左移一位,下步操作为减掉除数;③上商0,恢复余数:用被除数减去除数,如果运算结果小于0(符号位为1),则上商0,马上加上除数也就是恢复余数至上一步状态,再将运算结果和商值分别左移1位;④商值的符号位运算:在最原始状态下输入得到的被除数和除数分别保存在两个内存中,在上述三步运算过程完全结束后,再从内存中读出最原始的除数和被除数进行符号位异或运算,运算结果在与商值进行相应运算即可得到最终运算结果。
1.3设计环境伟福COP2000实验箱,用汇编语言编程实现定点原码一位除法器COP2000 计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成。
实验平台上有寄存器组R0-R3、运算单元、累加器A、暂存器W、直通/左移/右移单元、地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20 个按键、字符式LCD、RS232 口。
COP2000集成调试软件(即仿真测试软件)共分为6部分:(1)主菜单区实现实验仪的各项功能的菜单,包括[文件][编辑][汇编][运行][帮助]五大项,各项线面做详细介绍。
(2)快捷图标区快速实现各项功能按键(3)源程序/机器码区在此区域有源程序窗口,反汇编窗口,EM程序代码窗口。
源程序用于输入,显示,编辑汇编源程序:反汇编窗口显示程序编译后的机器码及反汇编的程序;EM程序代码窗口用数据方式机器码。
(4)机构图/逻辑波形区结构图能结构化显示模型机的各部件,以及运行时数据走向寄存器值;逻辑波形图能显示模型机运行时所有信号的程序。
(5)微程序/跟踪区微程序表格用来显示程序运行时微程序的时序,及每个时钟脉冲各控制位的状态,跟踪表用来记录显示程序及微程序执行的轨迹,指令系统可以帮助你设计新的指令系统。
(6)寄存器状态区用来显示程序执行时各内部寄存器的值。
图1.1 COP2000计算机组成原理试验系统模拟软件界面示意图第2章详细设计方案2.1 总体方案的设计与实现定点原码一位除,算法为恢复余数法,当余数为负时,需加上除数,将其恢复城原来的余数。
商值的确定是通过比较被除数和除数绝对值的大小,即”X”-”Y”实现的,而计算机内只设加法器,所以需要将”X”-”Y”操作变为|X|补+|Y|补得操作。
2.1.1总体方案的逻辑图图2.1 定点原码一位除法器整体设计框图如上逻辑框图2.1中所示,R0、R1、R2均是8位的寄存器。
R1中保存的是被除数。
R2中保存的是除数。
R3中保存的为商,另外R4寄存器可以作为计时器用来控制左移的次数。
左移运算就是除法运算过程中逐位运算的过程,右移运算主要是在符号位运算过程中获取除数和被除数符号位所用,最终结果在OUT中输出。
2.1.2计算算法总流程图图2.2 定点原码一位除法器计算算法过程流程图算法流程图如图2.2所示。
除法开始前,R2寄存器被清0,准备接收商,被除数的原码放在R0寄存器中,除数的原码放在R1寄存器中,计数器R3中存放需要移位的次数。
除法开始后,首先判断除数是否为0,若除数为0则进行处理,若不为0,则用被除数减去除数,若运算结果大于0,商上1。
若结果小于0,商上0。
然后被除数左移一位,计数器减1。
当计数器R3内容为0时,运算结束。
2.2 功能模块的设计与实现主要模块包括:操作数预处理模块、上商置0模块、上商置1模块、商符运算模块四大模块。
2.2.1 操作数预处理模块的设计与实现2.2.1.1功能描述操作数预处理模块的主要功能是对操作数的初始化及预处理。
具体包括下面两个方面的处理:1、将输入的除数和被除数保存在某个内存中备份,备份的原始数据以便将来进行符号位的运算。
2、求输入的除数和被除数的数据位,也就是将除数和被除数全部转化为正数进行后面的计算,具体做法就是将除数和被除数分别与“00001111(0FH)”进行“与”运算,保证运算过程中的初始数据均为正数。
2.2.1.2流程图图2.3 操作数预处理模块流程图2.2.2 上商置0模块的设计与实现2.2.2.1功能描述上商置0模块中要进行恢复余数,原码一位除法器恢复余数法进行计算,区别于加减交替算法。
当余数为负时,将商的最后一位添0,这时,需要进行恢复,余数加上[Y*]补,再将得到的余数和商同时左移一位,然后余数再加上[—Y*]补存到R2上,再判断余数的正负,如果余数为负时,循环进行上商置0的操作,否则,进行上商置1的操作。
2.2.2.2流程图图2.4 上商置0模块流程图2.2.3 上商置1模块的设计与实现2.2.3.1功能描述上商置1的算法比较简单,不存在不同的算法,原码一位除法都是相同的计算。
当余数为正时上商置1,这时,再将得到的余数和商同时向左移一位,然后余数加上[—Y*]补存到R2上,在判断余数的正负。
如果余数为正时,循环进行上商置1的操作,否则,进行上商置0的操作。
2.2.3.2流程图图2.5 上商置1模块流程图2.2.4 商符运算模块的设计与实现2.2.4.1功能描述商的符号计算原码一位除法和原码一位乘法一样都是单独处理的,商符由两数的符号位进行异或运算求得,商值是由两数绝对值相除求得。
将9FH和9EH 地址的除数X和被除数Y分别右移四位,得到X1和Y1再将两数进行相加运算,得到一个值是Z,然后判断Z的最低位是否为零,如果为零,则商的符号为正,否则商的符号为负。
2.2.4.2 流程图图2.6 商符运算模块流程图第三章测试结果3.1程序仿真将事先编好的汇编程序输入到列表里,保存将格式改写成.ASM,再进行仿真,仿真可以一步一步进行仿真,你可以看到每步执行过程中,寄存器R0~R3和累加器A的变化,根据变化可以知道每步执行是否正确,直到最后输出OUT和R2。
3.2仿真测试3.2.1 仿真测试一——两个正数除法运算当X=0.1011B,Y=0.1101B时的仿真结果如下图所示。
已知X=0.1011B,Y=0.1101B,根据原码一位除法恢复余数法进行计算可得出商为0.1101,再将X 和Y的符号位进行异或可得出商的符号为正,所以最终商为0.1101,余数为0.0111。
仿真过程图如下所示:图3.1 仿真测试一数据初始化图如图3.1所示。
R0、R1、R2和R3 4个寄存器中分别初始化存入原始数据被除数0BH、除数0DH、商值00H和计数器初始值04H。
图3.2 仿真测试一数据备份图如图3.2所示,将原始数据被除数和除数存入内存中备份,以便将来做商符计算时使用,图中MAR中显示的地址为除数0DH存入的地址9E。
图3.3 仿真测试一数据预处理图如图3.3所示,将原始数据被除数和除数进行去符号处理使之均变为正数进行运算,这里由于初始数据本身就是正数,所以R0和R1寄存器中数据不变。
图3.4 仿真测试一上商0仿真图当被除数与除数的差值为负时,进行上商0模块,恢复余数至0BH,并进行左移运算变为16H,再进行减除数运算,运算结果为09H,同时计数器减1,如图3.4中R0寄存器和R3寄存器所示。
图3.5 仿真测试一上商0仿真图当被除数与除数的差值为正时,进行上商1模块,左移一位再减去除数,同时计数器减1,如图3.5中R0寄存器和R3寄存器所示,R2寄存器中上商1并左移一位变为02H。