1、(word完整版)计算机组成原理课程设计实验报告书计算机组成原理课程设计报告班级: 姓名: 学号:完成时间: 一、课程设计目的1在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3培养综合实践及独立分析、解决问题的能力。二、课程设计的任务针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现
2、乘法和除法的程序进行设计的验证.三、 课程设计使用的设备(环境)1硬件 COP2000实验仪 PC机2软件 COP2000仿真软件四、课程设计的具体内容(步骤)1详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现 该模型机指令系统的特点: 1) 指令系统特点与设计 模型机的指令码为8位,根据指令类型的不同,可以有0到2个操作数。指令码的最低两位用来选择R0R3寄存器,在微程序控制方式中,用指令码做为微地址来寻址微程序存储器,找到执行该指令的微程序。而在组合逻辑控制方式中,按时序用指令码产生相应的控制位。在本模型机中,一条指令最多分四个状态周期,一个状态周期为一个时钟脉冲
3、,每个状态周期产生不同的控制逻辑,实现模型机的各种功能。模型机有24位控制位以控制寄存器的输入、输出,选择运算器的运算功能,存储器的读写。 指令系统包括以下七类:算术运算指令 逻辑运算指令数据传输指令跳转指令ADD A, R? ADD A, R? ADD A, MM ADD A, #II ADDC A, R? ADDC A, R? ADDC A, MM ADDC A, #II SUB A, R? SUB A, R? SUB A, MM SUB A, #II SUBC A, R? SUBC A, R? SUBC A, MM SUBC A, II AND A, R? AND A, R? AND A
4、, MM AND A, #II OR A, R? OR A, R? OR A, MM OR A, II CPL A MOV A, R? MOV A, R? MOV A, MM MOV A, II MOV R?, A MOV R?, A MOV MM, A MOV R?, II JC MM JZ MM JMP MM CALL MM RET 移位指令中断返回指令输入/输出指令RR A RL A RRC A RLC A RETI READ MM WRITE MM IN OUT 2)模型机寻址方式 模型机的寻址方式指令举例说明累加器寻址操作数累加器A。 例如“CPL A”是将累加器A的值取反,还有些是
5、隐含寻址累加器A; 例如“OUT是将累加器A的值输出到输出端口寄存器OUT。 寄存器寻址参与运算的数据在R0-R3的寄存器中。 例如“ADD A,R0”是将寄存器R0的值加上累加器A的值,再存入累加器A中 寄存器间接寻址参与运算的数据在寄存器EM中,数据的地址在寄存器R0R3中。 例如“MOV A,R1”是将寄存器R1的值作为地址,把存储器EM中该地址的内容送入累加器A中。 存储器直接寻址将存储器EM中,数据的地址为指令的操作数。 例如“AND A,40H”40H单元的数据与累加器A的值作逻辑与运算,结果存入累加器A。 立即数寻址参与运算的数据位指令的操作数。 例如“SUB A,10H从累加器
6、A中减去立即数10H,结果存入累加器A。 3)指令格式助记符 机器码1 机器码2 指令说明 _FATCH- 000000xx 实验机占用,不可修改.复位后,所有寄存器清0,首 先执行 _FATCH_ 指令取指 ADD A, R? 000100xx 将寄存器R?的值加入累加器A中 该模型机微指令系统的特点(包括其微指令格式的说明等):微指令格式 助记符 状态 微地址 微程序 数据输出 数据打入 地址输出 运算器 移位控制 PC PC _FATCH_ T0 00 CBFFFF 指令寄存器IR PC输出 A输出 写入 +1 01 FFFFFF A输出 +1 02 FFFFFF A输出 +1 03 F
7、FFFFF A输出 +1 2) 微指令设置说明 控制信号 含义 XRD: 外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。 EMWR: 程序存储器 EM 写信号。 EMRD: 程序存储器 EM 读信号。 PCOE: 将程序计数器 PC 的值送到地址总线 ABUS 上. EMEN: 将程序存储器 EM 与数据总线 DBUS 接通,由 EMWR 和 EMRD 决定是将 DBUS 数据写到 EM 中,还是从 EM 读出数据送到 DBUS。 IREN 将程序存储器 EM 读出的数据打入指令寄存器 IR 和微指令计数器 uPC。 EINT: 中断返回时清除中断响应和中断请求标志,便于
8、下次中断。 ELP: PC 打入允许,与指令寄存器的 IR3、IR2 位结合,控制程序跳转。 MAREN:将数据总线 DBUS 上数据打入地址寄存器 MAR。 MAROE: 将地址寄存器 MAR 的值送到地址总线 ABUS 上。 OUTEN: 将数据总线 DBUS 上数据送到输出端口寄存器 OUT 里。 STEN: 将数据总线 DBUS 上数据存入堆栈寄存器 ST 中。 RRD: 读寄存器组 R0R3,寄存器 R?的选择由指令的最低两位决定. RWR: 写寄存器组 R0-R3,寄存器 R?的选择由指令的最低两位决定。 CN: 决定运算器是否带进位移位,CN=1 带进位,CN=0 不带进位。 F
9、EN: 将标志位存入 ALU 内部的标志寄存器。 X2 X1 X0: X2、X1、X0 三位组合来译码选择将数据送到 DBUS 上的寄存器。 WEN: 将数据总线 DBUS 的值打入工作寄存器 W 中. AEN: 将数据总线 DBUS 的值打入累加器 A 中。 S2 S1 S0 S2、S1、S0 三位组合决定 ALU 做何种运算。 X2 X1 X0与S2 S1 S0的具体对应操作如表所示:X2 X1 X0 被选中寄存器 S2 S1 S0 运算 000IN000A+W001IA001AW010ST010A OR W011PC011A AND W100 D100A+W+Cy101R101A-WCy
10、110L110NOT A111无111A2。计算机中实现乘法和除法的原理(1)无符号乘法实例演示(即,列4位乘法具体例子演算的算式):被乘数为1001(二进制),即为十进制的9;乘数为0110(二进制),即为十进制的6。那么,可以通过笔算得到:10010110=00110110即十进制运算结果为:96=54 无符号乘法的实例演示如图1所示: 1 0 0 1 ;被乘数 0 1 1 0 ;乘数 0 0 0 0 ;初始值(零) 0 0 0 0 (0) ;乘数最低位为0,部分积加0,被乘数左移一;位,乘数右移一位。 0 0 0 0 ;部分积 1 0 0 1 (1) ;乘数最低位为1,部分积加被乘数,被
11、乘数左;移一位,乘数右移一位. 1 0 0 1 0 ;部分积 1 0 0 1 (1) ;乘数最低位为1,部分积加被乘数,被乘数左;移一位,乘数右移一位。 1 1 0 1 1 0 ;部分积 0 0 0 0 (0) ;乘数最低位为0,部分积加0,被乘数左移一;位,乘数右移一位。 (0) 0 1 1 0 1 1 0 ;计算完毕,结果为00110110 即:10010110=00110110硬件原理框图: 算法流程图:在模型机上实现无符号数乘法运算时,采用“加法移位”的重复运算方法.因此,无符号乘法的算法流初始化被乘数及乘数初始化部分积开始计算部分积乘数末位为1?结束被乘数左移一位(不带进位)乘数右移
12、一位(不带进位)输出结果(R0)乘数为0?YNYN程图如图所示. (2)无符号除法 实例演示(即,列4 位除法具体例子演算的算式): 被除数为01000011(二进制),即为十进制的67;除数为0110(二进制),即为十进 制的6.那么,可以通过笔算得到:010000110110=10110001即十进制运算结果为:676=111无符号除法的实例演示如图4所示 1 0 1 10 1 1 0 0 1 0 0 0 0 1 1 ;被除数 0 1 1 0 ;除数 0 1 0 0 0 0 1 1 0 ;被除数左移一位,比较,够减0 1 1 0 ;相减,商上10 0 1 0 0 1 1 00 0 1 0
13、0 1 1 0 0 ;余数左移一位,比较,不够减0 1 1 0 ;商上0 0 1 0 0 1 1 0 0 0 ;余数左移一位,比较,够减0 1 1 0 ;相减,商上1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 ;余数左移一位,比较,够减 0 1 1 0 ;相减,商上1 0 0 0 1 硬件原理框图:ALUAWR1R2被除数除数DLR标志位CR2(商)R3(计数器)初始化:被除数左移算法流程图:初始化被除数及除数计数器初始化被除数左移开始做减法YN商0余数为负?商1计算结束?YN计算结束?YN输出结果结束计算余数3对应于以上算法如何分配使用COP2000实验仪中的硬件(
14、1)乘法硬件分配情况表 硬件名称实现算法功能描述寄存器R0计算时用来存放中间结果和最后的积。 寄存器R1 初始化时,用来存放被乘数; 在程序执行的过程中,用来存放向左移位后的被乘数。 寄存器R2 初始化时,用来存放乘数; 在程序执行的过程中,用来存放向右移位后的乘数。 累加器A传递中间数据。 寄存器W传递中间数据。 左移门L实现左移操作。 直通门D用来控制ALU的执行结果是否输出到数据总线。右移门R实现右移操作程序计数器PC 控制程序按顺序正常执行; 当执行转移指令时,从数据线接收要跳转的地址,使程序能够按需要自动执行。 当要从EM中读取数据时,由PC提供地址。 存储器EM存储指令和数据。 微
15、程序计数器PC向微程序存储器M提供相应微指令的地址。 微程序存储器M存储相应指令的微指令。 (2)除法硬件分配情况表 硬件名称实现算法功能描述寄存器R0在程序执行过程中,用来保存当前算得的商. 寄存器R1初始化时,用来存放被除数. 寄存器R2初始化时,用来存放除数,和被右移的除数。 寄存器R3当作计数器使用,用来控制程序是否结束. 累加器A传递中间运行数据。 寄存器W传递中间运行数据。 左移门L实现左移操作。 直通门D用来控制ALU的执行结果是否输出到数据总线。 右移门R实现右移操纵。 程序计数器PC 控制程序按顺序正常执行; 当执行转移指令时,从数据线接收要跳转的地址,使程序能够按需要自动执
16、行。 当要从EM中读取数据时,由PC提供地址。存储器EM存储指令和数据。微程序计数器PC向微程序存储器M提供相应微指令的地址. 微程序存储器M存储相应指令的微指令。 4在COP2000集成开发环境下设计全新的指令/微指令系统 设计结果如表所示(可按需要增删表项) (1) 新的指令集 (设计两个不同指令集要分别列表)新的指令集(乘法和除法) 助记符机器码1 机器码2 指令说明_FATCH_000000xx0003实验机占用,不可修改。复位后,所有寄存器清0首先执行 _FATCH_ 指令取指MOV R? ,#II000001xx04-07II将立即数II送入寄存器R中. MOV A, R?0000
17、10xx080B将寄存器R中的数据送入累加器A中。 MOV R?, A000011xx0C-0F将A累加器中的数据送入寄存器R中. SUB A, R?000100xx1013带进位减法语句,结果保存在累加器A中 OR A, #II000110xx181BII逻辑或指令,影响标志位。 TEST R?000111xx1C-1F判断当前寄存器中内容是否为0,影响标志位RL R?001000xx20-23逻辑左移SHL R?001001xx24-27逻辑左移SHR R?001010xx28-2B算术右移RR R?001011xx2C2F逻辑右移ENDD001100xx3033程序结束。 ADD R?,
18、 A001101xx3437不带进位加法指令,结果保存在R中. JMP MM001111xx3C-3FMM实现无条件跳转 JC MM010000xx4043MM带进位跳转 JZ MM010001xx4447MM带零判断跳转 (2)新的微指令集 助记符 状态 微地址 微程序 数据输出 数据打入 地址输出 运算器 移位控制PC PC _FATCH_T000CBFFFF指令寄存器IRPC输出A输出写入+101FFFFFFA输出+102FFFFFFA输出+103FFFFFFA输出+1MOV R?, #IIT104C7FBFF存储器EM寄存器R?PC输出A输出+1+1T005CBFFFF指令寄存器IRP
19、C输出A输出写入+106FFFFFFA输出+107FFFFFFA输出+1MOV A, R?T108FFF7F7寄存器值R?寄存器AA输出+1T009CBFFFF指令寄存器IRPC输出A输出写入+10AFFFFFFA输出+10BFFFFFFA输出+1MOV R?, AT10CFFFB9FALU直通寄存器R?A输出+1T00DCBFFFF指令寄存器IRPC输出A输出写入+10EFFFFFFA输出+10FFFFFFFA输出+1SUB A, R?T210FFF7EF寄存器值R?寄存器WA输出+1T111FFFE91ALU直通寄存器A,标志位C,Z减运算+1T012CBFFFF指令寄存器IRPC输出A输
20、出写入+113FFFFFFA输出+1UNDEF14FFFFFFA输出+115FFFFFFA输出+116FFFFFFA输出+117FFFFFFA输出+1OR A, IIT218C7FFEF存储器值EM寄存器WPC输出A输出+1+1T119FFFE92ALU直通寄存器A 标志位C,Z或运算+1T01ACBFFFF指令寄存器IRPC输出A输出写入+11BFFFFFFA输出+1TEST R?T31CFFF7F7寄存器值R?寄存器AA输出+1T21DFFF7EF寄存器值R?寄存器WA输出+1T11EFFFE92ALU直通寄存器A 标志位C,Z或运算+1T01FCBFFFF指令寄存器IRPC输出A输出写入
21、+1RL R?T220FFF7F7寄存器值R?A输出+1T121FFF9DFALU左移寄存器R?A输出左移+1T022CBFFFF指令寄存器IRPC输出A输出写入+123FFFFFFA输出+1SHL R?T224FFF7F7寄存器值R?A输出+1T125FFF8DFALU左移寄存器R? 标志位C,ZA输出左移+1T026CBFFFF指令寄存器IRPC输出A输出写入+127FFFFFFA输出+1SHR R?T228FFF7F7寄存器值R?A输出+1T129FFFABFALU右移寄存器R? 标志位C,ZA输出带进位右移+1T02ACBFFFF指令寄存器IRPC输出A输出写入+12BFFFFFFA输
22、出+1RR R?T22CFFF7F7寄存器值R?FF7F7xx 0 0 0 0 0 0 0 1寄存器AA输出+1T12DFFF9BFALU右移寄存器R?A输出右移+1T02ECBFFFF指令寄存器IRPC输出A输出写入+12FFFFFFFA输出+1ENDDT030CBFFFF指令寄存器IRPC输出A输出写入+131FFFFFFA输出+132FFFFFFA输出+133FFFFFFA输出+1ADD R?, AT334FFF7EF寄存器值R?寄存器WA输出+1T235FFFE90ALU直通寄存器A 标志位C,Z加运算+1T136FFFB9FALU直通寄存器R?A输出+1T037CBFFFF指令寄存器
23、IRPC输出A输出写入+1UNDEF38FFFFFFA输出+139FFFFFFA输出+13AFFFFFFA输出+13BFFFFFFA输出+1JMP MM T13CC6FFFF存储器值EM寄存器PCPC输出A输出+1写入T03DCBFFFF指令寄存器IRPC输出A输出写入+13EFFFFFFA输出+13FFFFFFFA输出+1JC MMT140C6FFFF存储器值EM寄存器PCPC输出A输出+1写入T041CBFFFF指令寄存器IRPC输出A输出写入+142FFFFFFA输出+143FFFFFFA输出+1JZ MM T144C6FFFF存储器值EM寄存器PCPC输出A输出+1写入T045CBFF
24、FF指令寄存器IRPC输出A输出写入+146FFFFFFA输出+147FFFFFFA输出+15用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序 (1)乘法4位乘法的汇编语言程序清单:MOV R1,#07HMOV R0,05HMOV R2,00HB1:TEST R0 JZ OVER SHR R0 JC B2B3:SHL R1 JMP B1B2:MOV A,R1 ADD R2,A JMP B3OVER:ENDD(2)除法(选作) 4位除法的汇编语言程序清单:MOV R1,#43HMOV R2,#06HMOV R3,#04HMOV R0,01HRL R2RL R2RL R2RL
25、R2 D:RL R1 MOV A,R1 SUB A,R2 JC B1 OR A,#01H MOV R1,AB1:MOV A,R3 SUB A,R0 JZ OVER MOV R3,A JMP DOVER:ENDD6上述程序的运行情况(跟踪结果) 按下表填写描述以上各程序运行情况的内容。按每个程序一张表进行. 乘法跟踪表格(截图)除法跟踪表格(截图)7设计结果说明1)在编写汇编程序时,算法流程图主要选用的是比较成熟的算法,避免出现不必要的错误。但还是在编写除法的时候出现了错误,主要体现在被除数除数做减法后,够减不够减还有商1商0的问题上。经过仔细研究与讨论后改正了一些逻辑错误,找到了正确答案.2)
26、在编写指令特别是微指令的时候,在跳转方面遇到了一些问题,没有考虑到微地址对跳转也会有影响。3)另一方面就是在做ALU运算时,应该注意操作数应该打进哪里,避免不必要的丢失数据。比如说都打进了累加器A,或者都打进了W。五、本次课程设计的总结体会(不少于200字)通过本次课程设计,我完全掌握了指令/微指令系统的设计方法,即利用另一套指令/微指令系统来实现指令的流水工作。可以在现有的指令系统上进行扩充,加上一些自己设计的指令,还可以重新设计一套完全不同的指令/微指令系统。本次实验我就是完全自己设计了一套指令系统,实现的乘法和除法运算,并设计成流水指令。理解了一些提高计算机软硬件性能和部件性能的一些可行途径,了解了计算机系统中软硬件的划分和相互配合关系,初步从计算机体系结构的角度提高了系统性能的主体思路,能够站在相对以前更高的角度来分析和解决平时学习和实践中遇到的问题。通过本次课程设计,增加了对计算机硬件系统知识的了解,同时使我对计算机硬件这一类的学科产生了浓厚的兴趣。 本次实验让我深刻体会到了计算机CPU内部的数据处理过程,使我对计算机的理解更深了一步。通过指令系统的编写与对COP2000实验机的学习,我对计算机硬件结构的理解也更加全面,对指令,微指令,微操作实现的硬件设计有了一定掌握。相信一定会为我以后的学习起到重要的作用。教育资料