1、计算机组成原理课程设计报告班级: 姓名: 学号:完成时间: 一、课程设计目的1在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3培养综合实践及独立分析、解决问题的能力。二、课程设计的任务针对 COP2000 实验仪,从详细了解该模型机的指令/ 微指令系统入手,以实现乘法和除法运算功能为应用目标,在 COP2000 的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。三、 课
2、程设计使用的设备(环境)1硬件 COP2000 实验仪 PC 机2软件 COP2000 仿真软件四、课程设计的具体内容(步骤)1详细了解并掌握 COP 2000 模型机的微程序控制器原理,通过综合实验来实现 该模型机指令系统的特点: 1) 指令系统特点与设计 模型机的指令码为 8 位,根据指令类型的不同,可以有 0 到 2 个操作数。指令码的最低两位用来选择 R0-R3 寄存器,在微程序控制方式中,用指令码做为微地址来寻址微程序存储器,找到执行该指令的微程序。而在组合逻辑控制方式中,按时序用指令码产生相应的控制位。在本模型机中,一条指令最多分四个状态周期,一个状态周期为一个时钟脉冲,每个状态周
3、期产生不同的控制逻辑,实现模型机的各种功能。模型机有 24 位控制位以控制寄存器的输入、输出,选择运算器的运算功能,存储器的读写。 指令系统包括以下七类:算术运算指令 逻辑运算指令 数据传输指令 跳转指令AND A, R? AND A, R? AND A, 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
4、移位指令 中断返回指令 输入/输出指令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 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 中,数据的地址在寄存器 R0-R3 中。 例如“MOV A,R1”是将寄存器 R1 的值作为地址,把存储器 EM 中该地址的内容送入累加器 A 中。 存储器直接寻址将存储器 EM 中,数据的地址为指令的操作数。 例如“AND A,40H”40H 单元的数据与累加器 A 的值作逻辑与运算,结果存入累加器 A。立即
6、数寻址参与运算的数据位指令的操作数。 例如“SUB A,#10H”从累加器 A 中减去立即数 10H,结果存入累加器 A。 3)指令格式助记符 机器码 1 机器码 2 指令说明 _FATCH- 000000xx 实验机占用,不可修改。复位后,所有寄存器清 0,首 先执行 _FATCH_ 指令取指 ADD A, R? 000100xx 将寄存器 R?的值加入累加器 A 中 该模型机微指令系统的特点(包括其微指令格式的说明等):微指令格式 助记符 状态 微地址 微程序 数据输出 数据打入 地址输出 运算器 移位控制 PC PC _FATCH_ T0 00 CBFFFF 指令寄存器 IR PC输出
7、A 输出 写入 +1 01 FFFFFF A 输出 +1 02 FFFFFF A 输出 +1 03 FFFFFF A 输出 +1 2) 微指令设置说明 控制信号 含义 XRD: 外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。 EMWR: 程序存储器 EM 写信号。 EMRD: 程序存储器 EM 读信号。 PCOE: 将程序计数器 PC 的值送到地址总线 ABUS 上。 EMEN: 将程序存储器 EM 与数据总线 DBUS 接通,由 EMWR 和 EMRD 决定是将 DBUS 数据写到 EM 中,还是从 EM 读出数据送到 DBUS。 IREN 将程序存储器 EM 读出的数
8、据打入指令寄存器 IR 和微指令计数器 uPC。 EINT: 中断返回时清除中断响应和中断请求标志,便于下次中断。 ELP: PC 打入允许,与指令寄存器的 IR3、IR2 位结合,控制程序跳转。 MAREN: 将数据总线 DBUS 上数据打入地址寄存器 MAR。 MAROE: 将地址寄存器 MAR 的值送到地址总线 ABUS 上。 OUTEN: 将数据总线 DBUS 上数据送到输出端口寄存器 OUT 里。 STEN: 将数据总线 DBUS 上数据存入堆栈寄存器 ST 中。 RRD: 读寄存器组 R0-R3,寄存器 R?的选择由指令的最低两位决定。RWR: 写寄存器组 R0-R3,寄存器 R?
9、的选择由指令的最低两位决定。CN: 决定运算器是否带进位移位,CN=1 带进位,CN=0 不带进位。FEN: 将标志位存入 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 运算 000 IN 000 A+W001 IA 0
10、01 A-W010 ST 010 A OR W011 PC 011 A AND W100 D 100 A+W+Cy101 R 101 A-W-Cy110 L 110 NOT A111 无 111 A2.计算机中实现乘法和除法的原理(1)无符号乘法实例演示(即,列 4 位乘法具体例子演算的算式):被乘数为 1001(二进制) ,即为十进制的 9;乘数为 0110(二进制) ,即为十进制的6。那么,可以通过笔算得到:10010110=00110110即十进制运算结果为:96=54无符号乘法的实例演示如图 1 所示:1 0 0 1 ;被乘数 0 1 1 0 ;乘数0 0 0 0 ;初始值(零) 0
11、0 0 0 (0) ;乘数最低位为 0,部分积加 0,被乘数左移一;位,乘数右移一位。 0 0 0 0 ;部分积 1 0 0 1 (1) ;乘数最低位为 1,部分积加被乘数,被乘数左;移一位,乘数右移一位。 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硬件原理框图:算法流程图:在模型
12、机上实现无符号数乘法运算时,采用“加法移位”的重复运算方法。因此,无符号乘法的算法流程图如图所示。初始化被乘数及乘数初始化部分积开始计算部分积乘数末位为1?结束被乘数左移一位(不带进位)乘数右移一位(不带进位)输出结果(R 0)乘数为 0? YNYN(2)无符号除法 实例演示(即,列 4 位除法具体例子演算的算式):被除数为 01000011(二进制) ,即为十进制的 67;除数为 0110(二进制) ,即为十进 制的 6。那么,可以通过笔算得到:010000110110=10110001即十进制运算结果为:676=111无符号除法的实例演示如图 4 所示1 0 1 10 1 1 0 0 1
13、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 0 1 1 0 0 ;余数左移一位,比较,不够减0 1 1 0 ;商上 00 1 0 0 1 1 0 0 0 ;余数左移一位,比较,够减0 1 1 0 ;相减,商上 10 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 ;余数左移一位,比较,够减0 1 1 0 ;相减,商上 10 0 0 1 硬件原理框图:ALUA WR1R2被除数 除数DL R标志位 CR2(商)R3(计数器)初始化
14、:被除数左移算法流程图:初始化被除数及除数计数器初始化被除数左移开始做减法YN商 0余数为负?商 1计算结束?YN计算结束?YN输出结果结束计算余数3对应于以上算法如何分配使用 COP2000 实验仪中的硬件(1)乘法硬件分配情况表 硬件名称 实现算法功能描述寄存器 R0 计算时用来存放中间结果和最后的积。 寄存器 R1 初始化时,用来存放被乘数; 在程序执行的过程中,用来存放向左移位后的被乘数。 寄存器 R2 初始化时,用来存放乘数; 在程序执行的过程中,用来存放向右移位后的乘数。 累加器 A 传递中间数据。 寄存器 W 传递中间数据。 左移门 L 实现左移操作。 直通门 D 用来控制 AL
15、U 的执行结果是否输出到数据总线。右移门 R 实现右移操作程序计数器 PC 控制程序按顺序正常执行; 当执行转移指令时,从数据线接收要跳转的地址,使程序能够按需要自动执行。 当要从 EM 中读取数据时,由 PC 提供地址。存储器 EM 存储指令和数据。 微程序计数器 PC 向微程序存储器 M 提供相应微指令的地址。 微程序存储器 M 存储相应指令的微指令。 (2)除法硬件分配情况表 硬件名称 实现算法功能描述寄存器 R0 在程序执行过程中,用来保存当前算得的商。 寄存器 R1 初始化时,用来存放被除数。 寄存器 R2 初始化时,用来存放除数,和被右移的除数。 寄存器 R3 当作计数器使用,用来
16、控制程序是否结束。 累加器 A 传递中间运行数据。 寄存器 W 传递中间运行数据。 左移门 L 实现左移操作。 直通门 D 用来控制 ALU 的执行结果是否输出到数据总线。 右移门 R 实现右移操纵。 程序计数器 PC 控制程序按顺序正常执行; 当执行转移指令时,从数据线接收要跳转的地址,使程序能够按需要自动执行。 当要从 EM 中读取数据时,由 PC 提供地址。存储器 EM 存储指令和数据。微程序计数器 PC 向微程序存储器 M 提供相应微指令的地址。 微程序存储器 M 存储相应指令的微指令。 4在 COP2000 集成开发环境下设计全新的指令/微指令系统 设计结果如表所示(可按需要增删表项
17、) (1) 新的指令集 (设计两个不同指令集要分别列表)新的指令集(乘法和除法) 助记符 机器码 1 机器码 2 指令说明_FATCH_000000xx00-03实验机占用,不可修改。复位后,所有寄存器清 0 首先执行 _FATCH_ 指令取指MOV R? ,#II 000001xx04-07II 将立即数 II 送入寄存器 R 中。 MOV A, R? 000010xx08-0B将寄存器 R 中的数据送入累加器 A 中。 MOV R?, A 000011xx0C-0F将 A 累加器中的数据送入寄存器 R 中。 SUB A, R? 000100xx10-13带进位减法语句,结果保存在累加器 A
18、 中 OR A, #II 000110xx18-1BII 逻辑或指令,影响标志位。 TEST R? 000111xx1C-1F判断当前寄存器中内容是否为 0,影响标志位RL R? 001000xx20-23逻辑左移SHL R? 001001xx24-27逻辑左移SHR R? 001010xx28-2B算术右移RR R? 001011xx2C-2F逻辑右移ENDD 001100xx30-33程序结束。 ADD R?, A 001101xx34-37不带进位加法指令,结果保存在 R 中。 JMP MM 001111xx3C-3FMM 实现无条件跳转 JC MM 010000xx40-43MM 带进
19、位跳转 JZ MM 010001xx44-47MM 带零判断跳转 (2)新的微指令集 助记符 状态 微地址 微程序 数据输出 数据打入 地址输出 运算器 移位控制PC PC _FATCH_ T0 00 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +101 FFFFFF A 输出 +102 FFFFFF A 输出 +103 FFFFFF A 输出 +1MOV R?, #II T1 04 C7FBFF存储器EM寄存器 R? PC 输出A 输出 +1 +1T0 05 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +106 FFFFFF A 输出 +107 FFFFFF A 输出 +
20、1MOV A, R? T1 08 FFF7F7 寄存器值R?寄存器 A A 输出 +1T0 09 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +10A FFFFFF A 输出 +10B FFFFFF A 输出 +1MOV R?, A T1 0C FFFB9F ALU 直通寄存器 R? A 输出 +1T0 0D CBFFFF指令寄存器 IRPC 输出A 输出 写入 +10E FFFFFF A 输出 +10F FFFFFF A 输出 +1SUB A, R? T2 10 FFF7EF 寄存器值R?寄存器 W A 输出 +1T1 11 FFFE91 ALU 直通寄存器A,标志位C,Z减运算
21、+1T0 12 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +113 FFFFFF A 输出 +1UNDEF 14 FFFFFF A 输出 +115 FFFFFF A 输出 +116 FFFFFF A 输出 +117 FFFFFF A 输出 +1OR A, #II T2 18 C7FFEF存储器值EM寄存器 W PC 输出A 输出 +1 +1T1 19 FFFE92 ALU 直通寄存器 A 标志位或运算 +1C,ZT0 1A CBFFFF指令寄存器 IRPC 输出A 输出 写入 +11B FFFFFF A 输出 +1TEST R? T3 1C FFF7F7 寄存器值R?寄存器 A A
22、 输出 +1T2 1D FFF7EF 寄存器值R?寄存器 W A 输出 +1T1 1E FFFE92 ALU 直通寄存器 A 标志位C,Z或运算 +1T0 1F CBFFFF指令寄存器 IRPC 输出A 输出 写入 +1RL R? T2 20 FFF7F7 寄存器值R?A 输出 +1T1 21 FFF9DFALU 左移寄存器 R? A 输出 左移+1T0 22 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +123 FFFFFF A 输出 +1SHL R? T2 24 FFF7F7 寄存器值R?A 输出 +1T1 25 FFF8DFALU 左移寄存器 R? 标志位C,ZA 输出 左移+
23、1T0 26 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +127 FFFFFF A 输出 +1SHR R? T2 28 FFF7F7 寄存器值R?A 输出 +1T1 29 FFFABFALU 右移寄存器 R? 标志位C,ZA 输出 带进位右移+1T0 2A CBFFFF指令寄存器 IRPC 输出A 输出 写入 +12B FFFFFF A 输出 +1RR R? T2 2C FFF7F7 寄存器值R?寄存器 A A 输出 +1T1 2D FFF9BF ALU 右移寄存器 R? A 输出 右移+1T0 2E CBFFFF指令寄存器 IRPC 输出A 输出 写入 +12F FFFFFF A
24、 输出 +1ENDD T0 30 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +131 FFFFFF A 输出 +132 FFFFFF A 输出 +133 FFFFFF A 输出 +1ADD R?, A T3 34 FFF7EF 寄存器值R?寄存器 W A 输出 +1T2 35 FFFE90 ALU 直通寄存器 A 标志位C,Z加运算 +1T1 36 FFFB9F ALU 直通寄存器 R? A 输出 +1T0 37 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +1UNDEF 38 FFFFFF A 输出 +139 FFFFFF A 输出 +13A FFFFFF A 输出 +
25、13B FFFFFF A 输出 +1JMP MM T1 3C C6FFFF 存储器值EM寄存器 PC PC 输出A 输出 +1 写入T0 3D CBFFFF指令寄存器 IRPC 输出A 输出 写入 +13E FFFFFF A 输出 +13F FFFFFF A 输出 +1JC MM T1 40 C6FFFF 存储器值EM寄存器 PC PC 输出A 输出 +1 写入T0 41 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +142 FFFFFF A 输出 +143 FFFFFF A 输出 +1JZ MM T1 44 C6FFFF 存储器值EM寄存器 PC PC 输出A 输出 +1 写入T0
26、 45 CBFFFF指令寄存器 IRPC 输出A 输出 写入 +146 FFFFFF A 输出 +147 FFFFFF A 输出 +15用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序 (1)乘法4 位乘法的汇编语言程序清单:MOV R1,#07HMOV R0,#05HMOV R2,#00HB1:TEST R0JZ OVERSHR R0JC B2B3:SHL R1JMP B1B2:MOV A,R1ADD R2,AJMP B3OVER:ENDD(2)除法(选作) 4 位除法的汇编语言程序清单:MOV R1,#43HMOV R2,#06HMOV R3,#04HMOV R0,#0
27、1HRL R2RL R2RL R2RL R2 D:RL R1MOV A,R1SUB A,R2JC B1OR A,#01HMOV R1,AB1:MOV A,R3SUB A,R0JZ OVERMOV R3,AJMP DOVER:ENDD6上述程序的运行情况(跟踪结果) 按下表填写描述以上各程序运行情况的内容。按每个程序一张表进行。 乘法跟踪表格(截图)除法跟踪表格(截图)7设计结果说明1)在编写汇编程序时,算法流程图主要选用的是比较成熟的算法,避免出现不必要的错误。但还是在编写除法的时候出现了错误,主要体现在被除数除数做减法后,够减不够减还有商 1 商 0 的问题上。经过仔细研究与讨论后改正了一些
28、逻辑错误,找到了正确答案。2)在编写指令特别是微指令的时候,在跳转方面遇到了一些问题,没有考虑到微地址对跳转也会有影响。3)另一方面就是在做 ALU 运算时,应该注意操作数应该打进哪里,避免不必要的丢失数据。比如说都打进了累加器 A,或者都打进了 W。五、本次课程设计的总结体会(不少于 200 字)通过本次课程设计,我完全掌握了指令/微指令系统的设计方法,即利用另一套指令/微指令系统来实现指令的流水工作。可以在现有的指令系统上进行扩充,加上一些自己设计的指令,还可以重新设计一套完全不同的指令/微指令系统。本次实验我就是完全自己设计了一套指令系统,实现的乘法和除法运算,并设计成流水指令。理解了一些提高计算机软硬件性能和部件性能的一些可行途径,了解了计算机系统中软硬件的划分和相互配合关系,初步从计算机体系结构的角度提高了系统性能的主体思路,能够站在相对以前更高的角度来分析和解决平时学习和实践中遇到的问题。通过本次课程设计,增加了对计算机硬件系统知识的了解,同时使我对计算机硬件这一类的学科产生了浓厚的兴趣。本次实验让我深刻体会到了计算机 CPU 内部的数据处理过程,使我对计算机的理解更深了一步。通过指令系统的编写与对 COP2000 实验机的学习,我对计算机硬件结构的理解也更加全面,对指令,微指令,微操作实现的硬件设计有了一定掌握。相信一定会为我以后的学习起到重要的作用。