计算机组成原理课程设计报告
班级:计算机 0701 班
姓名:
学号:
完成时间: 2009 年 12 月 20 日
一、课程设计目的
1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程
序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;
2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机
系统的概念;
3.培养综合实践及独立分析、解决问题的能力。
二、课程设计的任务
针对 COP2000 实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除
法运算功能为应用目标,在 COP2000 的集成开发环境下,设计全新的指令系统并编写对应
的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、 课程设计使用的设备(环境)
1.硬件
COP2000 实验仪
PC 机
2.软件
COP2000 仿真软件
四、课程设计的具体内容(步骤)
1.详细了解并掌握 COP 2000 模型机的微程序控制器原理,通过综合实验来实现
该模型机指令系统的特点:
COP2000 模型机指令的最低两位(IR0 和 IR1)用来寻址 R0~R3 四个寄存器;IR2
和 IR3 与 ELP 微控制信号,Cy 和 Z 两个程序状态信号配合,控制 PC 的置数即程序
的转移。各种转移的条件判断逻辑如下所示:
PC 置数逻辑
当 ELP=1 时,不允许 PC 被预置
当 ELP=0 时
当 IR3=1 时,无论 Cy 和 Z 什么状态,PC 被预置
当 IR3=0 时
若 IR2=0,则当 Cy=1 时 PC 被预置
若 IR2=1,则当 Z=1 时 PC 被预置
(1)模型机的寻址方式分五种:累加器寻址 、寄存器寻址、寄存器间接寻址、存储器
直接寻址、立即数寻址;
(2)模型机有一些缺省的指令集,分几大类: 算术运算指令、逻辑运算指令、移位指
令、数据传输指令、跳转指令、中断返回指令、输入/输出指令。
(3)模型机的指令集有:
算术运算指令:ADD A, R?
ADD A@R?
ADD
A, MM ADD
A, #II
逻辑运算指令: AND A, R? AND A, @R? AND A, MM AND
SUB
A, R?
SUB A, @R?
ADDC A, R? ADDC A, @R? ADDC A, MM ADDC A, #II
A, #II
SUB
A, MM SUB
A, #II
SUBC A, R? SUBC A, @R? SUBC A, MM SUBC
A, #II OR
A
A, R? MOV A, @R? MOV
A, #II
R?, A MOV @R?, A MOV MM, A MOV R?, #II
A, MM MOV
A, @R? OR
A, MM OR
A, #II CPL
A, R? OR
数据传输指令:MOV
MOV
输入/输出指令: READ MM WRITE MM IN
跳转指令:
移位指令:
中断返回指令:RETI
JC MM JZ MM JMP MM CALL MM RET
RR
A RRC
A NOP
A RLC
A RL
OUT
该模型机微指令系统的特点(包括其微指令格式的说明等):
COP2000 模型机的微指令字长为 24 位,全部为操作控制部分,不含顺序控制字段。
微指令编码采用直接表示法,微地址形成采用计数器方式。微指令格式为水平型微指令。
模型机有 24 位控制位以控制寄存器的输入、输出,选择运算器的运算功能,存储器的读写。
24 位控制位作用分别如下:
XRD : 外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。
EMWR: 程序存储器EM写信号。
EMRD: 程序存储器EM读信号。
PCOE: 将程序计数器PC的值送到地址总线ABUS上。
EMEN: 将程序存储器EM 与数据总线DBUS接通,由EMWR和EMRD决定是将DBUS数
据写到EM中,还是从EM读出数据送到DBUS。
IREN: 将程序存储器EM读出的数据打入指令寄存器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?的选择由指令的最低两位决定。
CN: 决定运算器是否带进位移位,CN=1带进位,CN=0不带进位。
FEN: 将标志位存入ALU内部的标志寄存器。
X2、X1、X0 三位组合来译码选择将数据送到 DBUS 上的寄存器。
X2 X1 X0 输出寄存器
0
0
0
0
1
IN_OE
0
1
IA_OE
0 ST_OE
1 PC_OE
0 D_OE
0
0
1
1
0
外部输入门
中断向量
堆栈寄存器
PC 寄存器
直通门
1
1
1
0
1
1
1 R_OE
0 L_OE
1 没有输出
右移门
左移门
WEN: 将数据总线 DBUS 的值打入工作寄存器 W 中。
AEN: 将数据总线 DBUS 的值打入累加器 A 中。
S2、S1、S0 三位组合决定 ALU 做何种运算。
加
减
或
与
S2 S1 S0 功能
0 A+W
0
1 A-W
0
0
0 A|W
1 A&W
0
0 A+W+C 带进位加
1
1 A-W-C
1
带进位减
1
0 ~A
A 取反
输出 A
1 A
1
0
0
1
1
0
0
1
1
2。计算机中实现乘法和除法的原理
(1)无符号乘法
1 例演示:
例:1101*1011
1 1 0 1
1 0 1 1
1 1 0 1
1 1 0 1 0
1 0 0 1 1 1
0 0 0 0 0 0 0
0 1 0 0 1 1 1
1 1 0 1 0 0 0
1 0 0 0 1 1 1 1
1
1
0
1
乘数 x
1011
被乘数 y
1101
11010
110100
1101000
0101
0010
0001
0000
说明
x 右移一位
y 左移一位
x 右移一位
y 左移一位
x 右移一位
y 左移一位
x 右移一位
y 左移一位
基本思想:乘数右移一位若标志位 C 得 1,中间结果加被乘数后被乘数左移一位乘数右
移一位,若标志位 C 得 0,中间结果不变被乘数左移一位,采用相同方法循环四次 。
②硬件原理框图:
简要说明:被乘数保存在寄存器 R0 中,乘数保存在 R1 中,循环次数保存在 R2 中,
中间数和计算结果保存在 R3 中。每次计算乘数右移一位,若移出的是 1 则加被乘数,并且
每运行一次被乘数左移一位,计数器减一,直至计数器的值为零。
③算法流程图:
开始
给 R0,R1,
R2, R3 赋值
R1 左移一位
C=1
y
R3+R1R3
R0 左移
R2 减一
y
R2=0
?
y
结束
n
n
(2)无符号除法
①实例演示:
例:10010101(x)/1101(y)
1 0 0 1 0 1 0 1
0 1 1 0 1 0 0 0
0 0 1 0 1 1 0 1
0 0 1 1 0 1 0 0
0 0 1 0 1 1 0 1
0 0 0 1 1 0 1 0
0 0 0 1 0 0 1 1
0 0 0 0 1 1 0 1
0 0 0 0 0 1 1 0
商
1
10
101
1011
除数
01101000
00110100
00011010
00001101
运算次数
1
2
3
4
基本思想:先把除数左移三位,与被除数作比较,若大于被除数,则商左移一位后
加 1;否则商左移一位。每次运算后除数右移一位,采用相同方法循环四次。
除法的设计思想和恢复余数法相类似,但是在设计指令和微指令时被除数减除数的
结果先存入累加器 R 中,然后判断标志寄存器 C 的值——如果被除数大于除数就把 A 的值
存回被除数的寄存器中,否则不用做任何变动,即不用恢复余数。
②硬件原理框图:
简要说明:被除数保存在寄存器 R0 中,除数保存在 R1 中,商保存在 R2 中,循环次
数保存在 R3 中。运算结束后,余数保存在 R0 中。运算开始时除数左移三位。以后每运算
一次,计数器减一除数右移一位,商左移一位,并且若被除数大于除数商加 1。
③算法流程图:
开始
给 R0,R1,
R2,R3 赋值
R1 左移三位
R2 左移一位
R0-R1=A
C=1
n
A->R0
R2+1R2
R1 右移一位
R3-1R3
R2=0
?
y
结束
y
n
注:R0 存放被除数,R1 存放除数,R2 存放商,R3 存放循环次数,运算结束后 R0
中存放余数。
3.对应于以上算法如何分配使用 COP2000 实验仪中的硬件
乘法时:寄存器 R0 中保存被乘数,R1 中保存乘数,R2 中保存循环次数,R3 中保存中间数
和最后的计算结果。
除法时:R0 存放被除数,R1 存放除数,R2 存放商,R3 存放循环次数,运算结束后 R0 中
存放余数。
4.在 COP2000 集成开发环境下设计全新的指令/微指令系统
(1) 新的指令集
助记符 机器码 1
000000xx
_FATCH
_
00-03
000001xx
LD
04-07
R?,#II
RRC R?
000010xx
08-0B
000101xx
14-17
000111xx
1C-1F
001000xx
20-23
001001xx
24-27
RLC
R?
ADD
R?,A
SUB A,
#II
LD
A,R?
LD R?,A 001010xx
SUB R?,
#II
JC
MM
JZ
MM
JMP
MM
SHR R?
SHL
R?
28-2B
001011xx
2C-2F
001100xx
30-33
001101xx
34-37
001111xx
3C-3F
010000xx
40-43
010001xx
44-47
机器码 2
指令说明
II
II
II
MM
MM
MM
把一个立即数存入寄存器中
寄存器的内容带进位右移
寄存器的内容带进位左移
寄存器的内容与累加器的内容相加,结果存
入寄存器中
寄存器的内容和一个立即数减,结果存入原
寄存器中
把寄存器的内容放进累加器中
把累加器的内容放入寄存器中
寄存器的内容与一个立即数减,结果放进寄
存器
条件转移指令,标志位 C 为 1 时,跳转
条件转移指令,标志位 z 为 1 时,跳转
无条件转移指令
寄存器的内容不带进位右移
寄存器的内容不带进位左移
ADD
R?, #II
010010xx
48-4B
II
寄存器内容与立即数相加
SUB A,
R?
010011xx
4C-4F
累加器内容与寄存器减
(2) 新的微指令集
助记符 状态 微地址 微程序 数据输出 数据打入 地址输出 运算器 移位控制 PC
-FATCH
PC 输出 A 输出
CBFFFF
T0
->00
PC
写入 +1
指 令 寄 存
器 IR
R?,
T1
LD
#II
T0
04
05
C7FBFF 存 储 器 值
寄存器 R? PC 输出 A 输出
+1
+1
EM
CBFFFF
指 令 寄 存
器 IR
PC 输出 A 输出
写入 +1
RRC R?
T3
->08
FFF7F7 寄 存 器 值
寄存器 A
A 输出
+1
T2
T1
T0
RLC R?
T3
T2
T1
T0
ADD R?,A
T3
T2
T1
T0
T2
T1
T0
T1
SUB
A,#II
LD
09
0A
0B
14
15
16
17
1C
1D
1E
1F
20
21
22
24
R?
FFFEB7
ALU 右移
寄 存 器 A
标志位 C Z
A 输出 带进位右
+1
移
FFFB9F
ALU 直通
寄存器 R?
A 输出
CBFFFF
指 令 寄 存
器 IR
PC 输出 A 输出
+1
写入 +1
FFF7F7 寄 存 器 值
寄存器 A
A 输出
+1
R?
FFFCD7
ALU 左移
寄 存 器 A
标志位 C Z
A 输出 带进位左
写入 +1
移
FFFB9F
ALU 直通
寄存器 R?
A 输出
CBFFFF
指 令 寄 存
器 IR
PC 输出 A 输出
FFF7EF 寄 存 器 值
寄存器 W
R?
FFFE90
ALU 直通
寄 存 器 A
标志位 C Z
FFFB9F
ALU 直通
寄存器 R?
CBFFFF
指 令 寄 存
器 IR
EM
FFFE91
ALU 直通
CBFFFF
寄 存 器 A
标志位 C Z
指 令 寄 存
器 IR
A 输出
加运算
A 输出
减运算
+1
写入 +1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
PC 输出 A 输出
写入 +1
C7FFEF 存 贮 器 值
寄存器 W
PC 输出 A 输出
PC 输出 A 输出
写入 +1
FFF7F7 寄 存 器 值 寄存器 A
A 输出
+1
+1