计算机组成原理课程设计

更新时间:2024-07-01 07:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机组成原理课程设计报告

班级:08计算机 0803 班 姓名: 陈祥 学号: 20082908 完成时间: 2011.1.3

一、课程设计目的

1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系; 2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;

3.培养综合实践及独立分析、解决问题的能力。

二、课程设计的任务

针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。

三、 课程设计使用的设备(环境) 1.硬件

? COP2000实验仪 ? PC机 2.软件

? COP2000仿真软件

四、课程设计的具体内容(步骤)

1.详细了解并掌握COP 2000模型机的微程序控制器原理,通过综合实验来实现

1.该模型机指令系统的特点:

从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指

令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADD A, R?和ADD A, @R?都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。因此,指令系统的指令格式是定长操作码的,操作码为6位。

1)双字长的指令格式如下: A OP R? 举例: 助记符 ADD A, MM ADD A, #II MOV A, MM 机器码1 000110xx 000111xx 011110xx 机器码2 MM II MM

2)单字长的指令格式如下: OP R? 举例:

助记符 ADD A, R? OR A, R? MOV R?, A 机器码1 000100xx 011000xx 100000xx 机器码2

2.该模型机微指令系统的特点(包括其微指令格式的说明等): 该模型机微指令系统的微指令格式是水平型微指令,微指令的字长为24

位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。操作控制字段的每一位对应一个微操作,采用字段直接译码的方式对系统进行控制。微指令的具体格式如下: XRD EMRD EMEN EINT MAREN ELP OUTEN STEN RRD RWR CN FEN X2 X1 X0 WEN AEN S2 EMWR PCOE IREN MAROE S1 S0 举例:微指令CBFFFF:取指令

1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2。计算机中实现乘法和除法的原理 (1)无符号乘法

①实例演示(即,列4位乘法具体例子演算的算式):

×

1

1 0

0 1 0 1 0 0 0

1 1 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 被乘数 乘数 位积 位积 位积 位积 结果

移位相加

②硬件原理框图: 右移 左移 CY ALU ST A W 被乘数 R0 乘数 R1 4 R2 开始

中间结果清0 乘数右移一位 移出位为1?

Yes

中间结果加被乘数 No

被乘数左移一位 移位次数为4

Yes

保存中间结果

结束

(2)无符号除法

①实例演示(即,列4位除法具体例子演算的算式): 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 除数右移一位

1 0 0 0 0 1 1 1 0 1 1 0 1 0 0 0 数右移一位

0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 除数右移一位

0 0 0 1 1 1 1 1 0 0 0 1 1 0 1 0 数右移一位

0 0 0 0 0 1 0 1

③算法流程图:

No

------商 ------被除数

------不够减,商上0,------做差后的被除数 ------够减,商上1,除------做差后的被除数 ------不够减,商上0,------做差后的被除数 ------够减,商上1,除------移位4次后,余数

②硬件原理框图:

商 左移

R2

右移

CY ALU ST A W R0 R1 被除数

③算法流程图:

开始

商清0

除数左移四位

被除数与除数比较

Yes

CY=0

No 除数右移一位

商左移一位

被除数减除数 No

CY=0

Yes

商+1 No

移位次数为4 除数 溢出 Yes 保存结果

结束

3.对应于以上算法如何分配使用COP2000实验仪中的硬件 (初步分配,设计完成后再将准确的使用情况填写在此处) 1)乘法程序的硬件分配: 硬件名称 R0 R1 R2 R3 A W PC EM IR ST MAR 硬件名称 R0 R1 R2 R3 A W PC EM IR ST MAR 在乘法算法中的功能 1用来存放被乘数2保存乘积结果 用来存放乘数 未使用 用做计数器,来控制程序循环次数 1、存放中间结果2、用来存放操作数参加ALU的运算 用来存放操作数参加ALU的运算 程序计数器 内存(存放程序) 指令寄存器 堆栈寄存器,可以用来暂存寄存器A的值 地址寄存器 在除法运算中的功能 用来存放被除数 用来存放除数 用来存放商 1用作计数器,控制循环的次数2保存余数 1、存放中间数据2、用来存放操作数参加ALU的运算 用来存放操作数参加ALU的运算 程序计数器 内存(存放程序) 指令寄存器 堆栈寄存器,可以用来暂存寄存器A的值 地址寄存器 2)除法程序的硬件分配 4.在COP2000集成开发环境下设计全新的指令/微指令系统 设计结果如表所示(可按需要增删表项) (1) 新的指令集

(设计两个不同指令集要分别列表) 助记符 _FATCH_ 机器码1 机器码2 指令说明 实验机占用,不可修改。复位后,所有寄存器清0,首先执行 _FATCH_ 指令取指 MOV R?,#II 000001XX II 将立即数II送到寄存器R?中 000000XX

MOV R?,A MOV A,R? AND A,#II 000010XX 000011xx 000100xx II II MM MM II II 将累加器A的值送到寄存器R?中 将寄存器R?的值送入累加器A中 将立即数与累加器A中的数相与 将立即数与寄存器R?中的数相与 寄存器R?带进位右移 寄存器R?带进位左移 若进位标志置1,跳转到MM地址 若零标志置1,跳转到MM地址 将寄存器R?中的数与立即数相加 将累加器与寄存器R?相加,结果存入累加器 将寄存器R?中的值与立即数相减 将累加器与寄存器R?的值相减,结果存入累加器 AND R?,#II 000101xx SHR R? SHL R? JC MM JZ MM ADD R?,#II ADD A,R? 000110xx 000111xx 001000xx 001001xx 001010xx 001011xx SUB R?,#II 001100xx SUB A,R? 001101xx CMP A,R? JMP MM PUSH A POP A SHRN R? SHLN R? 001110xx 001111xx 010000xx 010001xx 010010xx 010011xx MM 累加器与寄存器R?的值比较,结果影响进位、零标志 无条件跳转到MM处 将累加器中的值暂存 将暂存结果送回到累加器A中 寄存器R?不带进位右移 寄存器R?不带进位左移

(2) 新的微指令集

助记符 状态 _FATCH_ T0 微地址 00 微程序 数据输出 CBFFFFF 数据打入 地址 运 移位 输出 算器 控制 uPC PC 指令寄存器IR PC输 01 FFFFFF A输出 02 FFFFFF A输出 03 FFFFFF A输出 MOV R?,#II T1 04 E7FBFF 存储器EM 寄存器R? PC出 T0 05 CBFFFF 指令寄存器 PC出 06 FFFFFF 输输A输出 A输出 A输出 07 FFFFFF A输出 MOV R?,A T1 08 FFFB9F ALU直通 寄存器R? A输出 T0 09 CBFFFF 指令寄存器IR PC输A输 写+1 +1 +1 写入 +1 +1 +1 +1 +1 +1 +1 A输 写入 +1 出 出 出 0A 出 A输出 入 +1 0B A输出 +1 MOV A,R? T1 OC FFF7F7 寄存器值R? 寄存器A A输出 T0 OD CBFFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 0E FFFFFF +1 0F FFFFFF A输出 +1 AND A,#II T2 10 C&7FFEF 存储器值EM 寄存器W PC出 输A输出 与运算 +1 +1 T1 11 FFFE93 ALU直通 寄存器A标志位C、Z +1 T0 12 CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 13 FFFFFF +1 AND R?,#II T3 14 C7FFEF 存储器EM 寄存器W PC出 输A输出 A输出 +1 +1 T2 15 FFF7F7 寄存器值R? 寄存器A +1 T1 16 FFFA9B ALU直通 寄存器R?标志位C、Z 与运算 输A输出 A输出 +1 T0 17 CBFFFF 指令寄存器IR PC出 +1 +1 SHR R? T3 18 FFEF9F ALU直通 堆栈寄存器ST +1 T2 19 FFF7F7 寄存器值R? 寄存器A A输出 +1 T1 1A FFFABF ALU右移 寄存器R?标志位C、Z A输出 带进位右移 +1 T0 1B CBFF57 堆栈寄存器ST 寄存器A指令寄存器IR PC出 输A输出 A输出 写入 +1 SHL R? T3 1C FFEF9F AlU直通 推展寄存器ST +1 T2 1D FFF7F7 寄存器值R? 寄存器A A输出 +1 T1 1E FFFADF ALU左移 寄存器R?标志位C、Z A输出 带进位左移 +1 T0 1F CBFF57 堆栈寄存器ST 寄存器A指令寄存器IR 寄存器PC PC出 PC出 输A输出 写入 +1 JC MM T1 20 C6FFFF 存储器值EM 输A输出 +1 +1 T0 21 CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 22 FFFFFF +1 23 FFFFFF A输出 +1 JZ MM T1 24 C6FFFF 存储器值EM 寄存器PC PC出 输A输出 +1 +1 T0 25 CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 26 FFFFFF +1 27 FFFFFF A输出 +1 ADD R?,#II T3 28 FFF7F7 寄存器值R? 寄存器A A输出 +1 T2 29 C7FFEF 存储器值EM 寄存器W PC出 输A输出 加运算 +1 +1 T1 2A FFFA98 ALU直通 寄存器R?标志位C、Z +1 T0 2B CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 ADD A,R? T2 2C FFF7EF 寄存器值R? 寄存器W +1 T1 2D FFFE90 ALU直通 寄存器R?标志位C、Z 加运算 输A输出 A输出 +1 T0 2E CBFFFF 指令寄存器IR PC出 写入 +1 2F FFFFFF +1 SUB R?,#II T3 30 FFF7F7 寄存器值R? 寄存器A A输出 +1 T2 31 C7FFEF 存储器值EM 寄存器W PC出 输A输出 减运算 +1 +1 T1 32 FFFA99 ALU直通 寄存器R?标志位C、Z +1 T0 33 CBFFFF 指令寄存器IR PC出 输A输出 A输 写入 +1 SUB A,R? T2 34 FFF7EF 寄存器值寄存器W +1 R? T1 35 FFFE91 ALU直通 寄存器A标志位C、Z T0 36 CBFFFF 指令寄存器IR PC出 37 FFFFFF 输 出 减运算 A输出 A输出 写入 +1 +1 +1 CMP A,R? T3 38 FFF7EF 寄存器值R? 寄存器W A输出 +1 T2 39 FFEF9F ALU直通 堆栈寄存器ST A输出 +1 T1 3A FFFE91 ALU直通 寄存器A标志位C、Z 减运算 +1 T0 3B CBFF57 堆栈寄存器 寄存器A指令寄存器IR PC出 PC出 输A输出 +1 +1 JMP MM T1 3C C6FFFF 存储器EM 寄存器PC 输A输出 +1 +1 T0 3D CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 3E FFFFFF +1 3F FFFFFF A输出 +1 PUSH A T1 40 FFEF9F ALU直通 堆栈寄存器ST A输出 +1 T0 41 CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 42 FFFFFF +1 43 FFFFFF A输出 +1 POP A T1 44 FFFF57 堆栈寄存器ST 寄存器A A输出 +1 T0 45 CBFFFF 指令寄存器IR PC出 输A输出 A输出 写入 +1 46 FFFFF +1 47 FFFFF A输出 +1 SHRN R? T3 48 FFEF9F ALU直通 堆栈寄存器ST A输出 +1 T2 49 FFF7F7 寄存器值R? 寄存器A A输出 +1 T1 4A FFF9BF ALU右移 寄存器R? A输出 右移 +1 T0 4B CBFF57 堆栈寄存器ST 寄存器A指令寄存器IR PC出 输A输出 A输出 写入 +1 SHLN R? T3 4C FFEF9F ALU直通 堆栈寄存器ST +1 T2 4D FFF7F7 寄存器值R? 寄存器A A输出 +1 T1 4E FFF9DF ALU左移 寄存器R? A输出 左移 +1 T0 4F CBFF57 堆栈寄存器 寄存器A指令寄存器IR PC出 输A输出 写入 +1 5.用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序

(1)乘法

4位乘法的算法流程图与汇编语言程序清单: 1)流程图如下:

开始

被乘数送入R0 乘数送入R1 将4送入R3作计数送 寄存器A清0 R1带进位右移 CF=1?

NO

YES ADD A,R0 R0不带进位左移 NO

暂存A SUB R3,#01H 恢复A ZF=1? YES MOV R0,A保存结果 结束

2)汇编语言程序清单如下: MOV R0,#0FH ---被乘数在R0中 MOV R1,#0FH ---乘数在R1中 MOV R3,#04H AND A,#00H LOOP1:

SHR R1 JC NEXT1 JMP LOOP2 NEXT1:ADD A,R0 LOOP2:SHLN R0 PUSH A

SUB R3,#01H POP A

JZ NEXT2 JMP LOOP1 NEXT2:MOV R0,A END

--乘积结果在R0中

(2)除法

4位除法的算法流程图与汇编语言程序清单: 1)算法流程图如下

开始 被除数送入R0中 YES

除数送入R1中 计数值4送入R3中 R2清0用来保存商 R1左移4位 MOV A,R0 CMP A,R1 CF=1? YES R1右移 R2(商)左移 CMP A,R1

CF=1? NO SUB A,R1 暂存A R2(商)+1 恢复A 暂存A R3减1 恢复A NO ZF=1? YES MOV R3,A NO

结束

2)汇编语言程序清单如下: MOV R0,#87H ---被除数在R0中 MOV R1,#0DH ---除数在R1中 MOV R3,#04H AND R2,#00H ---商在R2中 SHLN R1 SHLN R1 SHLN R1 SHLN R1 MOV A,R0 CMP A,R1 JC NEXT1 JMP QUIT NEXT1:

SHRN R1 SHLN R2 CMP A,R1 JC NEXT2 SUB A,R1 PUSH A

ADD R2,#01H POP A NEXT2:PUSH A

SUB R3,#01H POP A JZ QUIT JMP NEXT1 QUIT:MOV R3,A ---余数保存在R3中 END

6.上述程序的运行情况(跟踪结果)

按下表填写描述以上各程序运行情况的内容。按每个程序一张表进行。 1)乘法程序运行的过程

汇 编 指 令 MOV R0,#0F MOV R1,#0F MOV R3,#04 AND A,#00 程序机器地址 码 00 02 04 06 040F 050F 0704 1000 19 指令说明 立即数0F送入R0中 立即数0F送入R1中 立即数04送入R3中 将寄存器A清0 微程序 E7FBFF CBFFFF E7FBFF CBFFFF E7FBFF CBFFFF C7FFEF FFFE93 CBFFFF FFEF9F FFF7F7 FFFABF CBFF57 C6FFFF CBFFFF PC ?PC +1 +1 +1 +1 +1 +1 +1 +1 +1 写入 +1 +1 写入 +1 写入 +1 写入 +1 +1 写入 +1 +1 +1 写入 +1 写入 运行时寄存器或存储器的值 R0:0F R1:0F R3:04 EM:00 W:00 ST:00 A:0F R:07 A:00 SHR R1 08 寄存器R1带进位右移 JC 0D

09 200D CF=1跳转到0D

2)除法程序运行的过程

7.设计结果说明

调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?请在此做具体说明。

答:出现了问题。

1)之前由于设计了ADD R?,#II和SUB R?,#II、SHL R?、SHR R?等这类指令,而这两些指令在执行过都需要先将立即数或者寄存器中的数保存到寄存器A中,再进行运算,运算完后再送回寄存器,这必然会改变寄存器A的值,也就是说如果运行这类指令就会改变累加器A的值,然而在设计乘法和除法的程序中都需要用到寄存器A来暂存一些中间数据,从而得不到正确的运行结果。

重新调整:

①为了尽量的减少这类指令改变寄存器A的情况,在最大范围内将这些指令设计成不改变其他寄存器的指令。

如原来的右移指令SHR R?的微指令设计成:

T2:FFF7F7 将寄存器R?中的值送入到寄存器A中 T1:FFFABF 带进位右移,结果送入R?中 T0:CBFFFF 取指令

重新设计SHR R?微指令:

T3:FFEF9F 将寄存器A的值送入到堆栈寄存器ST中 T2: FFF7F7 将寄存器R?中的值送入到寄存器A中 T1:FFFABF 带进位右移,结果送入R?中

T0: CBFF57 将堆栈寄存器ST的值送回到寄存器A中,并取指令 其他的类似指令对应的微指令也同上设计。

②对于ADD R?,#II和SUB R?,#II这两条指令,由于一条指令周期中机器周期(最多4个)的限制,所对应的微指令无法在T3-T0中完成所需操作,于是又增加了两条指令PUSH A和POP A,在执行以上ADD R?,#II和SUB R?,#II这两条指令之前需先执行PUSH A将寄存器A的值保存,在执行完后立即用POP A恢复A的值。

通过以上的方法就解决了上述问题。 在本人设计的指令系统中,W寄存器的值是不受保护的,不能用来暂存数据。

A寄存器如果暂存数据,在遇到ADD R?,#II和SUB R?,#II时需要执行PUSH A(之后)POP A指令来保护数据,而寄存器R?都是受保护的,可以用来保存数据。

2)对移位指令的设计。

在设计移位指令时,之前是设计的SHR R?和SHL R?都是采用带进位的,在实验过程中发现这种带进位的方式为循环进位,如果CF=1,在执行SHR R?指令时,CF的1会先移入到R?的高位,然后R?的低位会移入到CF中。如果只想采用汇编中的逻辑移位指令,将移出位移入到CF中,对已寄存器移入0。发现上述自己设计的指令无法实现。

重新设计:扩充指令系统,添加移位指令SHRN R?和SHLN R?,不带进位。

五、本次课程设计的总结体会(不少于200字)

主要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。

答:通过本次的计算机组成原理课程设计:

1)加深了对指令系统、微指令系统的理解。

自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序;

在设计指令的过程中遇到的问题:条件转移指令和非条件转移指令得操作码如何设计,让他们和硬件相对应?

解决的方法:通过观察具体的硬件电路,发现在ELP为低电平好的前提下,要使PCOE为低电平,无条件转移需要使IR3位1,JC转移需要IR2为0,IR3为0,JZ转移需要IR2为1,IR3为0,下面是对应转移指令设计的操作码:JMP R?001111xx JC R?001000xx JZ R?001001xx

2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念 通过微程序控制器的设计,进一步了解了控制器如何控制各个部件的协同工作,通过有时序的读取一系列的微指令,产生对应于各个部件的控制信号,使各个部件产生微操作,解释执行指令和程序。虽然这次微程序控制器的设计与计算机组成原理课本中关于控制器的设计不太相同,在这次微指令设计中微指令格式并没有顺序控制字段,完全采用指令的操作码来获得下一条微指令的地址,原因在于每条指令的指令周期固定为四个机器周期,操作码与微地址之间有简单的对应关系,因此设计起来比较简单。但也在很大的程度上帮助我们加深了对控制器工作原理的理解,建立起整机系统的概念。

3) 培养了综合实践及独立分析、解决问题的能力。

(以上红色字内容为由设计者完成并填写)

1)加深了对指令系统、微指令系统的理解。

自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序;

在设计指令的过程中遇到的问题:条件转移指令和非条件转移指令得操作码如何设计,让他们和硬件相对应?

解决的方法:通过观察具体的硬件电路,发现在ELP为低电平好的前提下,要使PCOE为低电平,无条件转移需要使IR3位1,JC转移需要IR2为0,IR3为0,JZ转移需要IR2为1,IR3为0,下面是对应转移指令设计的操作码:JMP R?001111xx JC R?001000xx JZ R?001001xx

2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念 通过微程序控制器的设计,进一步了解了控制器如何控制各个部件的协同工作,通过有时序的读取一系列的微指令,产生对应于各个部件的控制信号,使各个部件产生微操作,解释执行指令和程序。虽然这次微程序控制器的设计与计算机组成原理课本中关于控制器的设计不太相同,在这次微指令设计中微指令格式并没有顺序控制字段,完全采用指令的操作码来获得下一条微指令的地址,原因在于每条指令的指令周期固定为四个机器周期,操作码与微地址之间有简单的对应关系,因此设计起来比较简单。但也在很大的程度上帮助我们加深了对控制器工作原理的理解,建立起整机系统的概念。

3) 培养了综合实践及独立分析、解决问题的能力。

(以上红色字内容为由设计者完成并填写)

本文来源:https://www.bwwdw.com/article/5zc.html

Top