计算机组成原理实验之基于复杂模型机两个8位二进制数乘法的实现
八位二进制乘法器
八位二进制乘法器——八位二进制乘法器学院: 信息科学与技术学院班级: 计0805-2学号:姓名: 雄鹰*** 指导老师:完成时间:2010年7月11日目录1 课题综述2.1 分析问题 2.2 结构框图 2.3原理图3.1上机调试及排错过程 3.2 波形文件 3.3 VHDL文本 4 上机结果分析 5 总结6 致谢7 参考资料课题二:八位二进制乘法器1 课题综述选择这个课题与我以前做过二进制乘法电路有关,思想源于此,但那次是用组合逻辑电路实现的且是两位二进制乘法,很受局限,由此想扩展它。
实现二进制乘法器的电路有多种方法,一种是由组合逻辑电路(与、或、非门)构成的乘法器,速度快但占用PLD的资源比较多,难以实现多位乘法;另一种是基于PLD器件外接ROM九九表的乘法器,但无法构成片上系统,不是很适用。
这一次我是采用八位二进制乘法的硬件算法,不同于前面两种乘法器电路,是由一个加法器和移位寄存器构成的时序逻辑方式的八位硬件乘法器。
2.1 分析问题硬件乘法器的乘法原理是通过逐项移位相加的方法来实现。
在计算过程中,先观察乘数的每一位,从最低位开始,若最低位是1,则被乘数被复制到下面,否则复制为全零,复制下来的数值较前一个数值左移一位。
最后,将复制的数值相加,它们的和就是乘积。
两个n位二进制数相乘的结果最多可以有2n位的二进制数。
根据上面这个乘法的过程,可以得出三点:, 只对两个二进制数进行相加运算,并用寄存器不断地累加部分积;, 将累加的部分积左移,但复制的被乘数不左移;, 乘数的对应位若为0时,对累加的部分积不产生影响。
2.2 结构框图 S0d[7…0]被乘数b[7…0]乘数n为数ST1A[15..0]0 S2S1Z=1输出 n n-11B0A A+dA右移 S2 0 1n=0图12.3原理图图 2在上图中:d为被乘数输入,b为乘数输入,ST为启动信号,A[15..0]输出端口为乘积。
当ST为一时乘法器运算开始,累加寄存器A清零。
基于复杂模型机两个8位二进制数乘法的实现
评语: 课中检查完成的题号及题数:成绩: 自评分: 90实验报告实验名称:基于复杂模型机两个8位二进制数乘法的实现日期:本人信息班级:学号:姓名:同组同学信息班级:学号:姓名:一、实验目的:1. 综合运用计算机组成原理知识;2. 设计并实现完整的计算机功能;3. 掌握判断条件的使用;二、实验内容:1. 熟悉复杂机的原理指令系统和程序流程2. 利用上述模型机通过编写程序实现两个8位二进制数的乘法运算。
三、项目要求及分析:项目要求:利用复杂模型机通过编写程序实现两个8位二进制数的乘法运算。
分析:在计算机中乘法是通过加法和移位实现的。
我们决定采用原码一位乘实现相关操作。
采用一个寄存器R0存放部分和,R1一个寄存器存放乘数和部分和的低位;R2另一个寄存器存放执行操作的次数。
然后,利用指令系统和运算器实现求和及移位操作,每次执行后循环次数自减一,当循环次数为零时结束操作并将计算结果输出。
四、具体实现:1. 画出算法流程图部分和输入至R0,成熟输入R1,循环次数输入R2R1Λ01H去的乘数的最低位最低位为1NOYesR0+Y—>0取最低位:R0Λ01—>3,然后R3又环移R3将R0的最低位转移至最高位将R1右移一位,然后R1ORR3实现将部分和的最低位移至乘数的最高位将循环次数自减1NO循环次数为0YES将运算结果输出至out单元并停机2.根据算法实现,若需修改指令系统,画出修改后的微程序流程图将微程序流程图中的3B进行拓展RD->ARS->BA右移B位3.二进制代码表二进制数微代码表地址十六进制表示高五位S3-S0 A字段B字段C字段UA5-UA000 00 00 01 00000 0000 000 000 000 00000101 00 6D 43 00000 0000 110 110 101 00001103 10 70 70 00010 0000 111 000 001 11000004 00 24 05 00000 0000 010 010 000 00010105 04 B2 01 00000 1001 011 001 000 00000106 00 24 07 00000 0000 010 010 000 00011107 01 32 01 00000 0010 011 001 000 00000108 10 60 09 00010 0000 110 000 000 00100109 18 30 01 00011 0000 011 000 000 0000010A 10 60 10 00010 0000 110 000 000 010000 0B 00 00 01 00000 0000 000 000 000 000001 0C 10 30 01 00010 0000 011 000 000 000001 0D 20 06 01 00100 0000 000 011 000 000001 0E 00 53 41 00000 0000 101 001 101 000001 0F 00 00 CB 00000 0000 000 000 011 00101110 28 04 01 00101 0000 000 010 000 00000111 10 30 01 00010 0000 011 000 000 00000112 06 B2 01 00000 1101 011 001 000 00000113 00 24 14 00000 0000 010 010 000 01010014 05 B2 01 00000 1011 011 001 000 00000115 00 24 16 00000 0000 010 010 000 01011016 01 B2 01 00000 0011 011 001 000 00000117 00 24 18 00000 0000 010 010 000 01100018 04 32 01 00000 1000 011 001 000 000001 1B 00 53 41 00000 0000 101 001 101 000001 1C 10 10 1D 00010 0000 001 000 000 011101 1D 10 60 8C 00010 0000 110 000 010 001100 1E 10 60 1F 00010 0000 110 000 000 011111 1F 10 10 20 00010 0000 001 000 000 100000 20 10 60 8C 00010 0000 110 000 010 00110028 10 10 29 00010 0000 001 000 000 10100129 00 28 2A 00000 0000 010 100 000 101010 2A 04 E2 2B 00000 1001 110 001 000 101011 2B 04 92 8C 00000 1001 001 001 010 001100 2C 10 10 2D 00010 0000 001 000 000 101101 2D 00 2C 2E 00000 0000 010 110 000 101110 2E 04 E2 2F 00000 1001 110 001 000 101111 2F 04 92 8C 00000 1001 001 001 010 00110030 00 16 04 00000 0000 001 011 000 00010031 00 16 06 00000 0000 001 011 000 00011032 00 6D 48 00000 0000 110 110 101 00100033 00 6D 4A 00000 0000 110 110 101 00101034 00 34 01 00000 0000 011 010 000 00000135 00 00 35 00000 0000 000 000 000 11010136 00 6D 51 00000 0000 110 110 101 01000137 00 16 12 00000 0000 001 011 000 01001038 00 16 13 00000 0000 001 011 000 01001139 00 16 15 00000 0000 001 011 000 010101 3A 00 16 17 00000 0000 001 011 000 010111 3B 00 00 01 00000 0000 000 000 000 000001 3C 00 6D 5C 00000 0000 110 110 101 011100 3D 00 6D 5E 00000 0000 110 110 101 0111103E 00 6D 68 00000 0000 110 110 101 101000 3F 00 6D 6C 00000 0000 110 110 101 101100 地址十六进制表示高五位S3-S0 A字段B字段C字段UA5-UA04. 编写微程序;机器指令$P 00 60;IN R0 00H 初始部分和$P 01 00$P 02 21;IN R1 手动输入乘数$P 03 00$P 04 62;IN R2 循环次数$P 05 08$P 06 23;IN R3 手动输入被乘数$P 07 00$P 08 D3;STA,R3->MEM$P 09 00$P 0A 63;IN R3 01H(提取最低位)$P 0B 01$P 0C D3;STA,R3->MEM$P 0D 01$P 0E C3;LAD,MEM->R3$P 0F 01$P 10 17;R1与R3->R3 LOOP START$P 11 F0;BZC,FZ=0,E->PC$P 12 16$P 13 C3;LAD,MEM->R3$P 14 00$P 15 0D;R0+R3->R0$P 16 C3;LAD,MEM->R3$P 17 01$P 18 17;R1与R3->R3$P 19 AF;R3循环右移R3位->R3;$P 1A D3;STA,R3->MEM$P 1B 02$P 1C C3;LAD,MEM->R3$P 1D 01$P 1E BD;R1右移R3位->R1$P 1F C3;LAD,MEM->R3$P 20 02$P 21 9D;R1 OR R3->R1$P 22 C3;LAD,MEM->R3$P 23 01;$P 24 BC;R0右移R3位->R0 $P 25 8E;R2-1->R2;$P 26 F0;BZC R2$P 27 30$P 28 E0;JMP LOOP$P 29 10$P 30 30;OUT 40H$P 31 40$P 32 50;HALT;微指令$M 00 000001$M 01 006D43$M 03 107070$M 04 002405$M 05 04B201$M 06 002407$M 07 013201$M 08 106009$M 09 183001$M 0A 106010$M 0B 000001$M 0C 103001$M 0D 200601$M 0E 005341$M 0F 0000CB$M 10 280401$M 11 103001$M 12 06B201$M 13 002414$M 14 05B201$M 15 002416$M 16 01B201$M 17 002418$M 18 043201$M 1B 005341$M 1C 10101D$M 1D 10608C$M 1E 10601F$M 1F 101020$M 20 10608C$M 21 002422$M 22 02B201$M 28 101029$M 29 00282A$M 2A 04E22B$M 2B 04928C$M 2C 10102D$M 2D 002C2E$M 2E 04E22F$M 2F 04928C$M 30 001604$M 31 001606$M 32 006D48$M 33 006D4A$M 34 003401$M 35 000035$M 36 006D51$M 37 001612$M 38 001613$M 39 001615$M 3A 001617$M 3B 001621$M 3C 006D5C$M 3D 006D5E$M 3E 006D68$M 3F 006D6C;//** End Of MicroController Data **//5. 编写机器指令验证联机装入调试:输入1111 和1100得到结果为:10110100五、调试运行结果:10110100六、所遇问题及解决方法:1原先的指令系统中不存在右移操作,首先对原指令系统的保留操作进行了修改2 将部分和的最低位移至乘数的最高位,我们进行了多步操作和想与相或操作进行了实现。
8位2进制乘法器电路设计.docx
8位二进制乘法电路选题目的:学会使用quarter 软件设计电路及仿真,实现8位二进制乘法电路。
设计目的:学习应用移位相加原理设计8位乘法器实现方案:由于其原理是利用8位二进制乘法采用移位相加的方法。
即用乘数的 各位数码,从低位开始依次与被乘数相乘,毎相乘一次得到的积称为部分积,将 第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的 部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结 果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0 )和乘数(N7N6N5N4N3N2N1N0)分别为 11010101 和 10010011,其计算过程如下:N0与被乘数相乘的部分积,部分积右移一位 N1与被乘数相乘的部分积两个部分积Z 和,部分积Z 和右移一位 N2与被乘数相乘的部分积与前面部分积之和相加,部分积之和右移一 N4与被乘数相乘的部分积N7与被乘数相乘的部分积 与前面部分积Z 和相加 右移一位得到最后的积设计过程:从逻辑图及其乘法操作时序图图(示例中的相乘数为9FH 和FDH )上可以清楚地看出此乘法器的工作原理。
逻辑波形图中, START 信号的上跳沿及其高电平有两个功能,即16位寄存器清零和 被乘数A[7..O]向移位寄存器SREG8B 加载;它的低电平则作为乘法 使能信号。
CLK 为乘法时钟信号。
当被乘数被加载于8位右移寄存 器SREG8B 后,110 10 10 1 X 1 0 0 1 0 0 1 1110 10 10 1 110 10 10 1 + 110 10 10 1 10 0 1111111 10 0 1111111 + 000000000 10 0 1111111 0 10 0 1111111 + 000000000 10 10 10 01 10 10 0 10 0随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
复杂模型机实验实验报告(共9篇)
复杂模型机实验实验报告(共9篇)_复杂模型机实验报告计算机组成原理实验报告实验题目:一台模型计算机的总体设计之复杂模型机设计实验目的:(1)在掌握部件单元电路实验的基础上,进一步将其组成系统,构造一台复杂模型计算机,建立一台基本完整的整机。
(2)为其定义至少五条机器指令,并编写相应的微程序,通过联机调试,观察计算机执行指令:从取指令、指令译码、执行指令等过程中数据通路内数据的流动情况,进一步掌握整机概念。
实验设备TDN-CM+教学实验系统一套、微型计算机一台、排线若干。
实验原理:(1)数据格式及指令系统:①数据格式模型机规定数据采用定点整数补码表示,字长为8位,其格式如下:其中,第7位为符号位,数值表示范围是-27 ≤X≤27-1 ②指令格式模型机设计4大类指令共16条,其中包括算术逻辑指令、I/O 指令、访问及转移指令和停机指令。
A.算术逻辑指令设计九条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:其中,OP-CODE为操作码,RS为源寄存器,RD为目标寄存器,并规定:九条算术逻辑指令的助记符、功能和具体格式见表5.2-1。
B.访问及转移指令:模型机设计两条访问指令,即存数(STA)、取数(LDA),两条转移指令,即无条件转移(JMP)、结果为零或有进位转移(BZC),指令格式如下:其中,OP-CODE为操作码,RD为目的寄存器地址(LDA、STA 指令使用)。
D为位移量(正负均可),M为寻址模式,其定义如下:本模型机规定变址寄存器RI指定为寄存器R2。
C.I/O指令:输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:其中,addr=01时,选中“INPUT DEVICE”中的开关组作为输入设备,addr=10时,选中“OUTPUT DEVICE”中的数码块作为输出设备。
D.停机指令:停机指令格式如下:HALT指令,用于实现停机操作。
③指令系统:本模型机共有16条基本指令,其中算术逻辑指令七条,移位指令两条,访问内存指令和程序控制指令四条,输入/输出指令两条,其它指令一条。
《计算机组成原理》课程设计_两个数的乘法运算
《计算机组成原理》课程设计报告课程设计题目:两个数的乘法运算小组成员:….完成日期:第十一周模型机设计实验一、实验目的综合运用所学计算机原理知识,设计并实现较为完整的模型计算机。
其功能为:输入两个数,进行两个正数(二进制4位)的乘法运算,输出结果。
二、实验内容编写程序,运行程序,观察并记录运行结果。
三、实验仪器1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱一台2、排线若干3、PC机一台四、预备知识1、数据格式8位,其格式如下:其中第7位为符号位,数值表示范围是:-1≤X<127。
2、指令格式模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问存储器、转移指令和停机指令。
(1)算术逻辑指令规定:算术逻辑指令的名称、功能和具体格式见表2—3。
(2)访存指令及转移指令模型机设计2条访存指令,即存数(STA)、取数(LAD),2条转移指令,即无条件转移(负均可)本模型机规定变址寄存器RI指定为寄存器R2。
(3)I/O指令其中,在IN 指令中,addr=01,选中“输入”中的开关组作为输入设备,在OUT指令中,addr=10时,表示选中“输出单元”中的数码块作为输出设备。
(4)停机指令HALT指令,机器码为60H,用于实现停机操作。
3、指令系统复杂模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。
表2-3列出了各条指令的格式、汇编符号、指令功能。
我们依然采用复杂模型机指令系统中的部分指令。
五、实验的机器指令程序如下:地址内容助记符说明00 14 IN R0 ; 作计数器用,00000001→R001 15 IN R1 ; 输入X的值,0000xxxx→R102 05 STA R1 ; X→22H03 2204 15 IN R2 ; 输入Y→R2,0000xxxx→R205 06 STA R2 ; R2→23H06 2307 42 CLR R2 ; R2清零08 06 STA R2 ; 存入结果R2→24H09 240A 02 LAD R2 ; 提取[23H]→R20B 230C 6A RRC R2,R2 ; R2带进位右循环一位→R2 0D 06 STA R2 ; 循环结果→23H0E 230F 02 LAD R2 ; 提取结果S,[24H]→R210 2411 0C BZC [15H] ; 有进位跳转到15H12 1513 08 JMP [18H] ; 无条件跳转到[18H]14 1815 01 LAD R1 ; 提取X→R116 2217 56 ADC R1,R2 ; R1+R2→R218 6A RRC R2,R2 ; R2带进位右循环一位→R219 06 STA R2 ; 循环结果→24H1A 241B70 RLC R0,R0 ; R0带进位左循环一位→R0 1C 0C BZC [20H] ; 有进位跳转到20H1D 201E 08 JMP [0AH] ; 无条件跳转到[0AH]1F 0A20 2A OUT R2 ; 输出R2中的结果21 60 HATL ; 停机22 XX23 XX24 XX六、程序机器指令和微程序以上程序的机器指令如下:$P0014 $P0115 $P0205 $P0322$P0416 $P0506 $P0623 $P0772$P0806 $P0924 $P0A02 $P0B23$P0C6A $P0D06 $P0E23 $P0F02$P1024 $P110C $P1215 $P1308$P1418 $P1501 $P1622 $P1756$P186A $P1906 $P1A24 $P1B70$P1C0C $P1D20 $P1E08 $P1F0A$P202A $P2160微程序如下$M00018108 $M0101ED82 $M0200C050$M0300A004 $M0400E098 $M0501B406$M06959B41 $M07298838 $M0801ED8A$M0901ED8C $M0A00A01E $M0B018001$M0C00201F $M0D019801 $M0E19880F$M0F019801 $M1001ED83 $M11001001$M12030401 $M13018016 $M143D9A01$M1501A205 $M16318207 $M1731820E$M18009001 $M19028401 $M1A05DB81$M1B0180DC $M1C018001 $M1D05DB8D$M1E070A08 $M1F068A09七、复杂模型机的数据通路框图WE图2-7复杂模型机数据通路框图八、复杂模型机实验接线图接到指令单元接到开关单元九、复杂模型机实验流程图十、课程设计总结1、成员总结体会…2、遇到的问题和解决的方法等1)寄存器不够用。
(VHDL)8位二进制乘法电路程序
8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为和,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8位加法器,进行操作数的加法运算。
③1位乘法器模块:完成8位与1位的乘法运算。
④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
按照上述算法,可以得到下图所示之框图和简单流程图。
图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。
这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。
(1)8位移位寄存器reg_8的设计(A )电路框图(B- 3 -8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out 输出。
8位乘法器设计
EDA大作业基于VHDL的8位乘法器设计1.乘法器原理8位乘法器可用移位和加法来实现,两个8位数相乘,总共需要执行8次加法运算和8次移位运算,由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如下图所示。
用寄存器R0存放部分积;R0存放乘数Y,并且最低位Yn作判断为;R0和R1都具有右移功能并且是连通的;寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。
8位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行设计,各个功能模块作用介绍如下:1)右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移,本设计采用的一个8位寄存器,能存放8位二进制代码,需用8个触发器来构成,它可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
2)加法器:本设计用到一个8位加法器,主要进行操作数的加法运算。
3)乘1模块:主要实现8位与1位的乘法运算。
4)锁存器:它所实现的功能是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。
本次设计采用16位锁存器,同时也是一个右移寄存器,在时钟信号作用下,进行输入值的移位与锁存。
2.乘法器设计流程本设计采用移位和加法来实现两个8位二进制数相乘。
由乘数的末尾值来确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。
例如被乘数为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类推,循环8次,总共需要进行8次相加和8次移位操作,最终得出乘积结果。
计算机组成原理实验之基于复杂模型机两个8位二进制数乘法的实现
计算机组成原理实验之基于复杂模型机两个8位二进制数乘法的实现本文将讨论计算机组成原理实验中基于复杂模型机实现两个8位二进制数乘法的方法和过程。
首先,我们需要了解什么是复杂模型机。
复杂模型机是一种指令集较为丰富的模型机,它可以对各种计算机组成原理相关的知识进行实验,包括数据传输、算术运算、控制逻辑等。
通过使用复杂模型机,我们可以更加直观地理解计算机的工作方式。
在该实验中,我们需要实现两个8位二进制数的乘法。
具体步骤如下:1.首先,我们需要设计一个乘法单元,该单元可以将两个8位的二进制数进行乘法运算,并输出结果。
乘法单元可以采用循环加法的方法实现,即将其中一个乘数逐位与另一个乘数相乘,并将结果累加。
在循环中,需要使用一个累加器来存储运算结果。
2.在乘法单元的设计中,我们需要考虑进位和溢出情况。
当两个二进制数相乘得到的结果超过8位时,我们需要保留最低的8位,并且判断是否有进位。
当运算结果超过8位时,我们需要对结果进行截断,并输出进位信息。
3.实现乘法单元时,还需要考虑符号位的处理。
由于本实验中我们只考虑无符号二进制数的乘法,因此我们可以忽略符号位的处理。
4. 实验中可以使用硬件描述语言(如VHDL或Verilog)进行乘法单元的设计和仿真。
利用仿真工具,我们可以对设计的乘法单元进行测试和调试,确保其功能正确。
5.在设计和实现完乘法单元后,我们可以将其集成到复杂模型机的指令集中。
具体实现方式可以根据复杂模型机的架构和指令集设计进行调整。
通过以上步骤,我们可以实现两个8位二进制数乘法的功能。
在实验中,我们可以通过提供不同的测试用例来验证乘法功能的正确性,并观察乘法单元的输出结果是否符合预期。
此外,我们还可以将乘法单元与其他指令进行组合,进一步实现复杂的运算和应用,以加深对计算机组成原理的理解。
总结起来,基于复杂模型机实现两个8位二进制数乘法的实验需要进行乘法单元的设计和实现,并将其集成到复杂模型机的指令集中。
ASIC系统设计实验报告八位乘法器
八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。
由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。
随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。
本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。
1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。
本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。
图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。
下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。
由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。
)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。
(VHDL)8位二进制乘法器电路程序
8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8位加法器,进行操作数的加法运算。
③1位乘法器模块:完成8位与1位的乘法运算。
④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
按照上述算法,可以得到下图所示之框图和简单流程图。
图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。
这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。
(1)8位移位寄存器reg_8的设计(A )电路框图(B8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out 输出。
EDA--八位二进制乘法器
EDA课设:选题名称:八位二进制乘法电路(一)设计要求:分拍输入两个八位二进制数字,并四个数码管显示当前输入数字的十进制形式,通过使能端的控制,分拍输出这两位二进制数字的乘积并通过四个数码管显示成十进制。
(二)基本算法:8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
按照这种算法,可以得到下图所示之框图和简单流程图。
图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。
A和Y中的数据在加法器中相加后送入A中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。
由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为 1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。
运算时首先将累加器A 清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。
将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。
第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置……这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。
移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。
当计数器计得8个数时,发出一个信号,使电路停止操作,并输出运算结果(流程图是按减法计数器设计的,也可使用加法计数器)。
(VHDL)8位二进制乘法电路程序
8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次<由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数<M7M6M5M4M3M2M1M0)和乘数<N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8位加法器,进行操作数的加法运算。
③1位乘法器模块:完成8位与1位的乘法运算。
④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
按照上述算法,可以得到下图所示之框图和简单流程图。
图中8位移位寄存器reg_8存放乘数a ,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。
这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。
<A)电路框图<B)简单流程图8位移位寄存器是在时钟<r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0>传送给r8_out输出。
8位乘法器实验报告
6.2 8位乘法器的设计1.实验目的(1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。
(2)熟悉GW48-CK EDA实验开发系统的基本使用方法。
(3)学习VHDL基本逻辑电路的综合设计。
2.实验内容设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。
此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。
3.实验条件(1)开发设备:Lattice ispEXPERT。
(2)实验设备:GW48-CK EDA实验开发系统。
(3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。
4.实验设计1)系统的原理框图2)VHDL源程序(1)选通与门模块的源程序ANDARITH.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;(2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK,CLR)ISBEGINIF CLR='1' THEN R16S<="0000000000000000"; ELSIF CLK'EVENT AND CLK= '1' THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ARCHITECTURE ART;(3)8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK, LOAD)ISBEGINIF CLK'EVENT AND CLK='1'THENIF LOAD='1'THEN REG8B<=DIN;ELSE REG8B(6 DOWNTO 0)<=REG8B(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;(4)乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC; ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF START='1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF CNT4B<8 THENCNT4B <=CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START='0' THENIF CNT4B<8 THENCLKOUT <=CLK;ARIEND<='0';ELSE CLKOUT<='0';ARIEND<='1';END IF;ELSE CLKOUT<=CLK;ARIEND<='0';END IF;END PROCESS;END ARCHITECTURE ART;(5)8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8)),B=>S5(7 DOWNTO 0),S=>S6(7 DOWNTO 0),COUT=>S6(8); U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.系统仿真文件当ATRRT为高电平时,将16位寄存器清零,当START为低电平时,在CLK为1时进行乘法运算,通过8次移位和加法操作,运算进行8个CLK为1的时钟,之后得到输出结果,且ARIEND为1,乘法运算结束。
计算机组成原理实验指导书-8位算术逻辑运算实验
从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印8位算术逻辑运算实验一、实验目的1、掌握算术逻辑运算器单元ALU(74LS181)的工作原理。
2、掌握简单运算器的数据传送通路组成原理。
3、验证算术逻辑运算功能发生器74LSl8l的组合功能。
4、按给定数据,完成实验指导书中的算术/逻辑运算。
二、实验内容1、实验原理实验中所用的运算器数据通路如图1.1所示。
其中运算器由两片74LS181以并/串形成8位字长的ALU构成。
运算器的输出经过一个三态门74LS245 (U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUSl~6中的任一个相连,内部数据总线通过LZDO~LZD7显示灯显示;运算器的两个数据输入端分别由二个锁存器74LS273(U29、U30)锁存,两个锁存器的输入并联后连至插座ALUBUS,实验时通过8芯排线连至外部数据总线EXD0~D7插座EXJl~EXJ3中的任一个;参与运算的数据来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,通过数据开关输入的数据由LD0~LD7显示。
图1.1中算术逻辑运算功能发生器74LS18l(U3l、U32)的功能控制信号S3、S2、Sl、S0、CN、M并行相连后连至SJ2插座,实验时通过6芯排线连至6位功能开关插座UJ2,以手动方式用二进制开关S3、S2、S1、S0、CN、M来模拟74LSl8l(U31、U32)的功能控制信号S3、S2、S1、S0、CN、M;其它电平控制信号LDDRl、LDDR2、ALUB’、SWB’以手动方式用二进制开关LDDRl、LDDR2、ALUB、SWB 来模拟,这几个信号有自动和手动两种方式产生,通过跳线器切换,其中ALUB’、SWB’为低电平有效,LDDRl、LDDR2为高电平有效。
8位二进制乘法器设计报告
EDA课程设计报告------8位二进制乘法器设计班级:学号:姓名:目录一.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••二.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器各功能模块VHDL描述及仿真图形••3.4 八位乘法器顶层模块VHDL设计及下载验证••心得体会••参考文献••一、八位乘法器的设计要求与设计思路1.1实验目的学习并掌握应用8位二进制乘法器的原理、设计、分析和测试方法1.2实验内容利用移位相加原理设计一个8位二进制乘法器。
1.3实验要求用VHDL编写代码,下载验证,并用8段数码管显示乘数和乘积。
二、八位乘法器的综合设计2.1 八位乘法器功能通过调节实验板,输入8位二进制的A和B,八位乘法器能实现其乘积,并在数码管上面显示出来其结果。
2.2乘法器设计方案该乘法器是有由8 位加法器构成的以时序方式设计的8 位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下图(a)下面分解8 位乘法器的层次结构,分为以下4 个模块:①右移寄存器模块:这是一个8 位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8 位加法器,进行操作数的加法运算。
③1 位乘法器模块:完成8 位与1 位的乘法运算。
④锁存器模块:这是一个16 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
8位二进制乘法器
8位二进制乘EDA实验法器学号:********[2013.12.15] 班级:021151姓名:***指导老师:***一.设计要求8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加,直到所有的部分积都被加过一次。
例如:11010101和10010011相乘,计算过程如下:二.设计方法按照这种算法,可以得到下图所示之框图和简单流程图。
按照这种算法,可以得到下图所示之框图和简单流程图。
图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。
A和Y中的数据在加法器中相加后送入A 中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。
由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。
运算时首先将累加器A清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。
将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。
第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置。
这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。
移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。
计算机组成原理实验指导书-8位算术逻辑运算实验
从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印8位算术逻辑运算实验一、实验目的1、掌握算术逻辑运算器单元ALU(74LS181)的工作原理。
2、掌握简单运算器的数据传送通路组成原理。
3、验证算术逻辑运算功能发生器74LSl8l的组合功能。
4、按给定数据,完成实验指导书中的算术/逻辑运算。
二、实验内容1、实验原理实验中所用的运算器数据通路如图1.1所示。
其中运算器由两片74LS181以并/串形成8位字长的ALU构成。
运算器的输出经过一个三态门74LS245 (U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUSl~6中的任一个相连,内部数据总线通过LZDO~LZD7显示灯显示;运算器的两个数据输入端分别由二个锁存器74LS273(U29、U30)锁存,两个锁存器的输入并联后连至插座ALUBUS,实验时通过8芯排线连至外部数据总线EXD0~D7插座EXJl~EXJ3中的任一个;参与运算的数据来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,通过数据开关输入的数据由LD0~LD7显示。
图1.1中算术逻辑运算功能发生器74LS18l(U3l、U32)的功能控制信号S3、S2、Sl、S0、CN、M并行相连后连至SJ2插座,实验时通过6芯排线连至6位功能开关插座UJ2,以手动方式用二进制开关S3、S2、S1、S0、CN、M来模拟74LSl8l(U31、U32)的功能控制信号S3、S2、S1、S0、CN、M;其它电平控制信号LDDRl、LDDR2、ALUB’、SWB’以手动方式用二进制开关LDDRl、LDDR2、ALUB、SWB 来模拟,这几个信号有自动和手动两种方式产生,通过跳线器切换,其中ALUB’、SWB’为低电平有效,LDDRl、LDDR2为高电平有效。
计算机组成原理实验报告-运算器的模拟和编程实现
计算机组成原理实验报告-运算器的模拟和编程实现实验内容:二、实验内容运用一种编程语言如下功能:1、从键盘输入一个带符号的十进制定点整数(-127 ~+127之间)2、从屏幕上分别显示其原码、补码、移码形式(8位带符号二进制形式)3、从键盘输入两个带符号十进制定点整数X和Y(-127 ~+127之间),屏幕上输出[X]原和[Y]和[X*Y]原。
要求画出程序的流程图三、思考1、计算机中数据是如何表示的?为什么数据要-127~+127 区间?2、原码一位乘的原理?3、先行进位的原理?实验步骤与预习:预习:计算机中的数据按表现形式可分为数字数据和模拟数据。
1、数字数据,如各种统计或量测数据。
数字数据在某个区间内是离散的值。
2、模拟数据,由连续函数组成,是指在某个区间连续变化的物理量,又可以分为图形数据(如点、线、面)、符号数据、文字数据和图像数据等,如声音的大小和温度的变化等。
数据的表现形式还不能完全表达其内容,需要经过解释,数据和关于数据的解释是不可分的。
原码一位乘的原理?在定点计算机中,两个原码表示的bai数相乘的运算规则是:乘du积zhi的符号位由两数的符号按异或运而乘积的数值部分则是两个正数相乘之积。
设n位被乘数和乘数用定点小数表示:被乘数[x]原= xf .x0 x1 x2 …xn乘数[y]原= yf .y0 y1 y2 …yn 则乘积[ z ]原= ( xf⊕yf ) . (0. x0 x1 x2 …xn)(0 . y1 y2 …yn)式中,xf为被乘数符号,yf为乘数符号。
乘积符号的运算法则是:同号相乘为正,异号相乘为负。
由于被乘数和乘数和符号组合只有(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。
数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其更为简单一些:从乘法y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“下全0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩:自评分:必填实验报告基于复杂模型机两个8位二进制数乘法的日期:实验名称:实现班级:学号:姓名:班级:学号:姓名:一、实验目的:1.综合运用所学计算机组成原理知识,设计并完成较为完整的计算机2.掌握原码一位乘实现的控制流程和硬件配置二、实验内容:利用复杂模型机编写程序实现两个8位二进制的乘法运算三、项目要求及分析:本程序要求编写程序实现两个8位二进制的乘法运算并将结果输出。
两数相乘,可视为加法和移位两种运算,因为在模型机中规定字长全部用来表示数据,数值全为正,故不需要考虑符号,因此在设计编写时需要考虑的问题有:(1)乘数、被乘数以及每次加法移位运算后的临时数据存放位置;(2)在做加法运算时,如何取出乘数的末位以确定临时数据与0相加或与被乘数相加;(3)加法运算时,若两数相加产生溢出,如何判断溢出;(4)移位运算时,如何控制乘数与临时数据的右移位。
这里,需要考虑如何实现:a).对于乘数,右移后将被乘数的末位移至乘数的高位;b).对于临时数据,右移后若先前相加时产生溢出,则将被乘数高位补1,若无溢出,则高位补0;(5)如何控制程序的结束。
对于问题(1),将临时数据存放在R0寄存器,乘数存放在R1寄存器,因为被乘数不一定每次都参与运算,因此存放在主存内,需要时调入寄存器R2中。
问题(2)中,将乘数与01相与结果再减1,若末位为0,则产生借位,FC=1,P<4>测试时直接进行下步的移位运算;若末位为1,则不产生借位,FC=0,P<4>测试时进行临时数据与被乘数相加,再进入下步的移位运算。
判断溢出的目的是为了在下步移位运算时确定临时数据的高位补1或是不0,因此问题(3)的判断方法可类似问题(2),将进位信息存入寄存器R2中后减1,再次存入R2。
若进位为0,则产生借位,FC=1;若进位为1,则不产生借位,FC=0。
问题(4)先进行乘数的移位,将乘数与(FE)十六进制相与,从而将乘数末位变为0,再将临时数据与(01)十六进制相与,取出临时数据的末位,最后将两个相与的结果相或后右环移,就实现临时数据的末位移至乘数的高位的运算。
进行临时数据的移位时,将临时数据与(FE)十六进制相与,从而将临时数据末位变为0,然后结果右环移,根据问题(3)溢出判断的结果选择与(80)十六进制或与(00)十六进制相或,就实现临时数据的移位。
问题(5)中,因为两个8位二进制数的乘法需要移位运算8次,故可设一个计数器,八次运算后结束程序。
四、具体实现:1、画出算法流程图2.根据算法实现,若需修改指令系统,画出修改后的微程序流程图红色为改动过的微程序代码3.编写微程序红色为改动过的微程序代码$M 00 000001 ; NOP$M 01 006D43 ; PC->AR, PC加1 $M 03 107070 ; MEM->IR, P<1> $M 04 002405 ; RS->B$M 05 04B201 ; A加B->RD $M 06 002407 ; RS->B$M 07 013201 ; A与B->RD $M 08 106009 ; MEM->AR$M 09 183001 ; IO->RD$M 0A 106010 ; MEM->AR$M 0B 000001 ; NOP$M 0C 103001 ; MEM->RD$M 0D 200601 ; RD->MEM$M 0E 005341 ; A->PC$M 0F 0000CB ; NOP, P<3>$M 10 280401 ; RS->IO$M 11 103001 ; MEM->RD$M 12 063201 ; A-1->RD$M 13 002414 ; RS->B$M 14 05B201 ; A减B->RD $M 15 002416 ; RS->B$M 16 01B201 ; A或B->RD $M 17 002418 ; RS->B$M 18 02B201 ; A循环右移->RD $M 1B 005341 ; A->PC$M 1C 10101D ; MEM->A$M 1D 10608C ; MEM->AR, P<2> $M 1E 10601F ; MEM->AR$M 1F 101020 ; MEM->A$M 20 10608C ; MEM->AR, P<2> $M 28 101029 ; MEM->A$M 29 00282A ; RI->B$M 2A 04E22B ; A加B->AR $M 2B 04928C ; A加B->A, P<2> $M 2C 10102D ; MEM->A$M 2D 002C2E ; PC->B$M 2E 04E22F ; A加B->AR$M 2F 04928C ; A加B->A, P<2> $M 30 001604 ; RD->A$M 31 001606 ; RD->A$M 32 006D48 ; PC->AR, PC加1 $M 33 006D4A ; PC->AR, PC加1 $M 34 003401 ; RS->RD$M 35 000035 ; NOP$M 36 006D51 ; PC->AR, PC加1 $M 37 001612 ; RD->A$M 38 001613 ; RD->A$M 39 001615 ; RD->A$M 3A 001617 ; RD->A$M 3C 006D5C ; PC->AR, PC加1$M 3D 006D5E ; PC->AR, PC加1$M 3E 006D68 ; PC->AR, PC加1$M 3F 006D6C ; PC->AR, PC加14. 编写机器指令验证$P 00 20 ; START: IN R0,00H 从IN单元读入被乘数$P 01 00 ;$P 02 D0 ; STA 00 60H,R0 存入主存#60$P 03 60 ;$P 04 20 ; IN R0,#00H 从IN单元读入乘数$P 05 00 ;$P 06 D0 ; STA 00 61H,R0 存入主存#61$P 07 61 ;$P 08 60 ; LDI R0,08H 计数值08$P 09 08 ;$P 0A D0 ;STA 00 62H,RO 将计数值存入主存$P 0B 62 ;$P 0C 60 ;LDI R0,00H 载入初始和00$P 0D 00 ;$P 0E C1 ;LAD 00 61H,R1 读乘数到R1$P 0F 61 ;$P 10 C2 ;LAD 00 60H,R2 读乘数到R2$P 11 60 ;$P 12 63 ;LDI R3,01H 载入校验数01 $P 13 01 ;$P 14 17 ;AND R3,R1 取乘数的最低位$P 15 73 ;DEC R3 R3自减1$P 16 F0 ;BZC 00 21H 最低位为0则跳转$P 17 21 ;$P 18 08 ;ADD R0,R2 相加$P 19 F0 ;BZC 00 1FH 溢出则跳转$P 1A 1F ;$P 1B 62 ;LDI R2 01H R2作为溢出标志,不溢出为1 $P 1C 01 ;$P 1D E0 ;JMP 00 21$P 1E 21 ;$P 1F 62 ;LDI R2 00H 溢出置0$P 20 00 ;$P 21 63 ;LDI R3 00H 移位位数$P 22 00 ;$P 23 AD ;RR R1,R3 R1右移0位$P 24 AC ;RR R0,R3 R0右移0位$P 25 F0 ;BZC 00 2CH R0移出的是1则跳转$P 26 2C ;$P 27 63 ;LDI R3,01111111B 载入屏蔽字$P 28 7F ;$P 29 1D ;AND R1,R3 给R1最高位置0$P 2A E0 ;JMP 00,2F$P 2B 2F ;$P 2C 63 ;LDI R3 B 载入屏蔽字$P 2D 80 ;$P 2E 9D ;OR R1,R3 给R1最高位置1$P 30 F0 ;BZC 00 37H 18步有溢出则跳转$P 31 37 ;$P 32 63 ;LDI R3,01111111 置入屏蔽字$P 33 7F ;$P 34 1C ;AND R0,R3 给R0高位置0$P 35 E0 ;JMP 00,3AH$P 36 3A ;$P 37 63 ;LDI R3, 置入屏蔽字$P 38 80 ;$P 39 9C ;OR R0,R3 给R0高位置1$P 3A C2 ;LAD 62H,R2 取计数值$P 3B 62 ;$P 3C 72 ;DEC R2 计数值自减1$P 3D D2 ;STA 62H,R2 存计数值$P 3E 62 ;$P 3F 63 ;LDI R3,01H 载入检验数$P 40 01 ;$P 41 8E ;SUB R2,R3 判断是否循环8次$P 42 F0 ;BZC 00 46H 执行到第八次时00-01有借位,跳转$P 43 46 ;$P 44 E0 ;JMP 00 10H 返回继续循环$P 45 10 ;$P 46 D1 ;STA 64H,R1 低位存入主存#64H$P 47 64 ;$P 48 D0 ;STA 65H,R0 高位存入主存#65H$P 49 65 ;$P 4B 40 ;$P 4C 30 ;OUT 40H,R0 显示高位$P 4D 40 ;$P 4E 50 ;HLT 停机联机装入调试五、调试运行结果:03030009⨯=H H H⨯=01FFH FFH FE H六、所遇问题及解决方法:设计中的主要问题就是上述问题分析时遇到的问题,这些问题的解决花费了很长一段时间。
此外,在测试时,由于一些数据在运算过程中出现临时数据移位时使得临时数据全为0,或者乘数移位时出现全为0,此时FZ=1,P<4>测试时与FC=1一样进行同样处理,导致最终结果错误。
对于这个问题,在分析过程中发现,只需将溢出和临时数据移位时判断条件全部改为FC=1,然后将FZ的线拔掉就可以避免。
七、实验总结:1.模型机的设计是一个新的知识,在编写时遇到了很多问题与难处,因此我们在编写时不断查阅课本,加深理解。
2.复杂模型机的调试是一个极其繁琐的过程,这就要求我们编写是要细心认真,调试出现问题时要耐心检查。