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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

窊大的计算机学院的学弟学妹们,你们师哥呕心沥血的一个月,终于把计算机最棘手的一门实验搞定了---微程序设计以下是我汗水的结晶,现传在网上,供你们借鉴,用到此文档的童靴,赶紧的膜拜感激吧!
真羡慕你们可以有这么慷慨的学长,处处为你们着想。

你说我的学长学姐们怎么就没有人传一份呢?
O(∩_∩)O哈哈~
姓名: [请输入姓名]
联系电话: [请输入联系电话]
目录
1 课程设计的目的和要求 (1)
1.1课程设计目的 (1)
1.2 课程设计的要求 (1)
2 实验设备 (1)
3 实验分析 (1)
3.1 指令译码电路分析 (1)
3.2 微地址形成分析 (2)
3.3 时序电路分析 (4)
3.4 运算器单元分析 (6)
3.5 寄存器单元分析 (7)
3.6 微控器电路分析 (8)
3.7 设计内容分析 (10)
4 实验设计 (11)
4.1 微程序控制电路 (11)
4.2 微指令格式 (13)
4.3 指令功能类别 (13)
4.4 微程序流程总框架 (14)
5 微程序详细设计 (16)
5.1 微程序流程框架 (16)
5.2 控制台流程 (17)
5.3 每条指令的详细设计 (19)
6 机器指令程序 (25)
6.1 程序流程图 (25)
6.2 程序助记符形式 (26)
6.3 机器指令程序 (26)
6.4 程序的CPI (27)
7 实验步骤 (28)
7.1线路连接图 (28)
7.2 程序微代码表 (29)
心得体会 (31)
参考文献 (32)
1 课程设计的目的和要求
1.1课程设计目的
在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本模型计算机。

通过一个完整的8位指令系统结构(ISA)的设计和实现,加深对计算机组成原理课程内容的理解,建立起整机系统的概念,掌握计算机设计的基本方法,培养学生科学的工作作风和分析、解决实际问题的工作能力。

1.2 课程设计的要求
要求综合运用计算机组成原理、数字逻辑和汇编语言等相关课程的知识,理解和熟悉计算机系统的组成原理,掌握计算机主要功能部件的工作原理和设计方法,掌握指令系统结构设计的一般方法,掌握并运用微程序设计(Microprogramming)思想,在设计过程中能够发现、分析和解决各种问题,自行设计自己的指令系统结构(ISA),并编写相应的微程序,具体上机调试掌握整机概念。

2 实验设备
TDN-CM++计算机组成原理实验教学系统一台,排线若干。

本课程设计采用TDN-CM++计算机组成原理实验系统,具备支持开放式实验教学方法的结构特点。

实验系统采用部件单元式结构,包括运算器、存储器、控制器、信号及时序控制、内总线、外总线、外围接口及输入输出设备、大规模可编程逻辑器件等计算机功能部件的单元电路,用户可使用排线连接方式或计算机电子自动逻辑设计方式,根据自己所设计的模型计算机结构方案,来构造出不同结构及复杂程度的原理性计算机。

3 实验分析
3.1 指令译码电路分析
指令译码电路如图3.1所示
图3.1 指令译码电路图
根据指令译码电路得到以下公式:
()()()144244
*1**2***4S E IP T IPT T S W A P =++ ()()()254344
*1**2***4S E IP T IPT T S W B P =++ ()364*1*S E I P T = ()474
*1*S E I P T =
()()54
*3*c z S E F F P T =+
P(1)、P(2)、P(3)、P(4)为低电平有效,在T4脉冲到来之前,T4为0,当T4脉冲到来时,T4为1;因此,在 T4脉冲到来之前,有上述公式可知,SE1SE5都为1,SE6默认为1。

3.2 微地址形成分析
3.2.1 p(1)译码
14SE I = 25SE I = 36SE I = 47SE I = 51S E =,结果见表3-1。

表 3-1 p(1)译码
机器指令(I7-I6) SE4 SE3 SE2 SE1 µ3 µ2 µ1 µ0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0
1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
3.2.2 p(2)译码
12
SE I =
23
SE I =
31
S E =
41
SE =
51
S E =
结果见表3-2。

表3-2 p(2)译码
I3 I2 SE1 SE2 µ1 µ0 0 0 0 1 1
1 1
1 1 1 0 0 1 0 0
0 0 0 1 1 0 1 1
3.2.3 p(3)译码
11
SE =
21
SE =
31
S E =
41
SE =
5C Z
S E F F =+,结果见表3-3。

表 3-3 p(3)译码
FC FZ SE5 µ4 0 0
1
0 1 1 0 1 1
0 0 0
1 1 1
3.2.4 p(4)译码
1A SE SW = 2B SE SW = 31S E = 41SE = 51S E =,结果见表3-4。

表 3-4 p(4)译码
SWA SWB SE1 SE2 µ1 µ0 0 0 0 1 1 0 1
1
1 1 1 0 0 1 0 0
0 0 0 1 1 0 1 1
3.3 时序电路分析
时序电路单元位于装置的左上部,其电路由四部分构成:消抖电路(KK2)、时序控制(TS1、TS2、TS3、TS4)、时钟信号源(φ)、拨动二进制开关组(STOP 、STEP )。

用户只需将φ信号与信号源的输出插孔相连,然后按动START (KK1)微动开关,根据STOP 及STEP 的状态,T1~T4将输出有规则的方波信号。

各时钟脉冲T1T4所对应的选通信号以及功能说明,具体如图3-5所示。

图3-5 时钟脉冲
时钟脉冲选通信号功能说明
T1CLKO微地址锁存器时钟信号,完成对微指令的写操
作。

T2CLK微指令输出锁存器及后续地址输出锁存器信
号,完成对微指令的读操作。

T3LDAR对地址寄存器进行写
LDIR对指令寄存器进行写
WE对存储器进行读写操作,将数据在七段码显示
器上进行显示。

T4LDDR1/LDDR2将数据锁存到DR1/DR2
299-B将数据打入到移位寄存器以及进行移位
AR将进位结果写入到进位寄存器中
LDR0/LDR1/LDR2将数据写入到寄存器R0/R1/R2
LDPC将地址写入到PC或进行计数
执行指令译码
P(1)/P(2)/P(3)/P(4)
FC/FZ/SWA/SWB
表3-6时钟脉冲的作用
①单拍脉冲及消抖电路
在实验中KK2一般用来作为单拍脉冲信号发生器;START已将其输出接入时序电路中的START处,作为时序电路的启动开关。

②时序控制电路、拨动开关组
STEP(单步)、STOP(停机)分别是来自实验台上部的两个二进制开关STEP、STOP 的模拟信号。

启动是来自实验台“STATE UNIT”单元的一个微动开关START的按键信号。

当STOP开关置为RUN状态,STEP开关置为EXEC时,按下START,时序信号TS1~TS4将周而复始的发送出去。

若STEP开关置为STEP状态时,按下START,机器处于单步运行状态,即此时只发送一个CPU周期的时序信号就停机。

利用单步方式,每次只产生一条微指令,因而可以观察微指令的代码与当前微指令的执行结果。

另外,当机器连续运行时,如果使STOP开关置STOP,也会使机器停机,或将CLR开关置为零,也可使时序清零。

③信号源
此单元位于“STATE UNIT”左侧,标有“SIGNAL UNIT”,可先调节W1,使H23端输出用户期望的某一频率的波形信号,信号的频率在30Hz-300Hz;然后,再调节W2使H23端输出特定占空比的信号,供实验时选择使用。

3.4 运算器单元分析
运算器单元位于实验线路板左部,它包括运算器单元(ALU UNIT)和寄存器堆单元(REG UNIT)。

运算器单元由以下部分构成:两片74LS181构成了并-串型8位ALU;两个8位寄存器DR1和DR2作为暂存工作寄存器,保存参数或中间运算结果;ALU的输出三态门74LS245通过排针连到数据总线上;一片8位的移位寄存器74LS299可通过排针连到数据总线上;由GAL和74LS74锁存器组成进位标志控制电路和为零标志控制电路;进位标志和为零标志指示灯。

寄存器堆单元由三片8位寄存器R0、R1、R2组成,它们用来保存操作数及中间运算结果等,三个寄存器的输入已连至BUS总线,输出共用一个RJ1引出,待用排线连至总线。

表3-7 算术逻辑运算单元功能表
S3 S2 S1 S0
M=0(算术运算)
M=1(逻辑
运算) Cn=1(无进位) Cn=0(有进位)
0 0 0 0F=A F=A加1F=A
0 0 0 1 F=A+B F=(A+B)加1F=A B
+
0 0 1 0 F=A+B F=(A+B)加1F=A B 0 0 1 1 F=0减1F=0F=0 0 1 0 0 F=A加A B F=A加A B加1F=A B 0 1 0 1 F=A B加(A+B)F=A B加(A+B)加1F=B
0 1 1 0 F=A减B减1F=A减B F=A B

0 1 1 1
F=A B 减1 F=A B F=A B 1 0 0 0 F=A+AB F=A+AB 加1 F=A B + 1 0 0 1 F=A+B F=A+B 加1 F=A B ⊕ 1 0 1 0
F=AB 加( A+B )
F=AB 加( A+B )加1
F=B
1 0 1 1 F=AB 减1 F=AB F=AB 1 1 0 0 F=A 加A F=A 加A 加1 F=1 1 1 0 1 F=A 加(A+B) F=A 加(A+B)加1 F=A+B 1 1 1 0
F=A 加(A+B )
F=A 加(A+B )加1
F=A+B
1 1 1 1
F=A 减1 F=A 减1 F=A
3.5 寄存器单元分析
寄存器译码电路如图1.3所示。

图 3.2 寄存器译码电路图
从以上译码电路可以看出,寄存器的输入与输出由片选段和I0I3(指令的低四位)决定。

寄存器输入和输出的具体分析如下:
(1)寄存器输入选通信号与片选段、指令低四位的关系如表3-8所示。

表3-8 寄存器输入信号选通表LDRi I1 I0 信号选通
0(有效) 0 0 LDR0
0 1 LDR1
1 0 LDR
2 1 1 无信号
1(无效)××无信号
(2)寄存器输出选通信号与片选段、指令低四位的关系如表3-9所示。

表 3-9 寄存器输出信号选通表
片选段 I3 I2 I1 I0 信号选通
RD-B有效(0)×× 0 0 R0-B ×× 0 1 R1-B ×× 1 0 R2-B ×× 1 1 无信号
RS-B有效(0) 0 0 ×× R0-B
0 1 ×× R1-B
1 0 ×× R2-B 1 1 ××无信号
RI-B有效(0)×××× R2-B
3.6 微控器电路分析
本系统的微控器单元主要由编程部分和核心微控器部分组成。

编程部分是通过编程开关的相应状态选择及由CLK、CLK0引入的节拍脉冲的控制来完成将预先定义好的机器指令对应的微代码程序写入到2816控制存贮器中,并可以对控制存贮器中的机器代码程序进行校验。

该系统具有本机现场直接编程功能,且由于选用2816E2PROM芯片为控制存贮器,所以具备掉电保护功能。

核心微控器主要完成接收机器指令译码器送来的代码,使控制转向相应机器指令对应的首条微代码程序,对该条机器指令的功能进行解释或执行的工作。

更具体地讲,就是通过接收CPU指令译码器发来的信号,找到本条机器指令对应的首条微代码的微地址入口,再通过由CLK引入的时序节拍脉冲的控制,逐条读出微代码。

实验板上的微控器单元中的24位显示灯(MD1—MD24)显示的状态即为读出的微指令。

然后,其中几位再经过译码,一并产生实验板所需的相应控制信号,将它们加到数据通路中相应的控制位,可对该条机器指令的功能进行解释和执行。

指令解释到最后,再继续接收下一条微代码对应的微地址入口,这样周而复始,即可实现机器指令程序的运行。

核心微控器同样是根据24位显示灯所显示的相应控制位,再经部分译码产生的二进制信号来实现机器指令程序顺序、分支、循环运行的,所以,有效地定义24位微代码对系统的设计至关重要。

①核心微控器单元
通过编程开关的不同状态,可进行微代码的编程、校验、运行在单元电路原理图中:
•微地址显示灯显示的是后续微地址,而24位显示灯显示的是后续地址的二进制控制位。

•CLK0为微地址锁存器(U24)的时钟信号,实验板中已接至“W/R UNIT”单元中的T1中。

•2816单元的片选信号(CS)在手动状态下一直为“0”,而在和PC联机状态下,受89C51控制。

•MK1—MK24为微控器的微代码输入二进制开关。

•MJ19为微地址输入端,微控器实验中在编程和校验状态时,我们可通过它来人为的确定微地址单元并完成读、写操作。

CLK为微代码输出锁存器(U30、U31、U32)及后续的微地址输出锁存器的信号引出端,实验板中已将CLK接至“W/R UNIT”单元中的T2。

CLR为清零信号的引出端,实验板中已接至“SWITCH UNIT”单元中最右边的CLR开关上,所以此二进制开关为CLR专用。

SE1—SE6端挂接到CPU的指令译码器的输出端,通过译码器确定
相应机器指令的微代码入口处,也可人为手动模拟CPU的指令译码器的输出,达到同一目的。

②编程器单元
在该实验电路中设有一编程开关,它具有三种状态:PROM(编程)、READ(校验)、RUN(运行)。

•处于编程状态时,微地址锁存器(U24)读有效,微代码输入三态门(U18、U19、U20)打开,后续微地址三态门(U29)关闭,同时2816写有效,读无效。

此时若启动时序电路,即可将微代码写入相应的微地址中,并在相应的显示灯上显示•处于校验状态时,微地址锁存器读有效,微代码输入三态门关闭,后续微地址三态门关闭,同时2816读有效,写无效。

此时若启动时序电路,即可将相应的微地址中的微代码读出,并在显示灯上显示。

•处于运行状态时,微地址锁存器关闭,微代码输入三态门关闭,后续微地址三态门打开,同时2816读有效,写无效。

此时若启动时序电路,即从微地址显示灯显示的地址向下运行。

3.7 设计内容分析
本系统的指令风格为寄存器-寄存器风格,即每条指令中参与运算的数据均来自寄存器。

本系统的数据类型为无符号整型数据,占8-bit,大小范围为0到255。

本系统的存储器为2K×8bit的6116存储器,但实际使用为256字节,划分为四分之一是存储数据,四分之三存储指令,如图3-3所示:
数据
C0H
代码
00H
图3-3存储器的划分
1.本系统使用的寻址方式为:直接寻址,立即数寻址,寄存器寻址。

2.本系统为CISC风格的指令系统,即每条指令的字节数是不确定的,有单字节长的,有双字节长的。

3.本系统的指令功能类别包括:算术/逻辑运算类的(Add,Or),存储器访问的(LB,SB),寄存器操作(MOVE),程序流控制(Beq,Blt,Jump),输入/输出,空操作及停止指令等。

4 实验设计
4.1 微程序控制电路
微程序控制器的组成如图4-1,其中控制存储器采用3片2816的E2PROM,具有掉电保护功能,微命令寄存器18位,用两片8D触发器(74273)和一片4D(74175)触发器组成。

微地址寄存器6位,用三片正沿触发的双D触发器(7474)组成,它们带有清“0”端和
时刻打入微地址寄存器的内容即为下一条微指令地预置端。

在不判别测试的情况下,T
2
址。

当T
时刻进行测试判别时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触
4
发器置为“1”状态,完成地址修改。

在该实验电路中设有一个编程开关(位于实验板右上方),它具有三种状态:PROM (编程)、READ(校验)、RUN(运行)。

当处于“编程状态”时,实验者可根据微地址和微指令格式将微指令二进制代码写入到控制存储器2816中。

当处于“校验状态”时,可以对写入控制存储器中的二进制代码进行验证,从而可以判断写入的二进制代码是否正确。

当处于“运行状态”时,只要给出微程序的入口微地址,则可根据微程序流程图自动执行微程序。

图中微地址寄存器输出端增加了一组三态门,目的是隔离触发器的输出,增加抗干扰能力,并用来驱动微地址显示灯。









1

图图4-1 微控制器实验原理图
4.2 微指令格式
微指令格式如表4-1所示:
2 42
3
2
2
2
1
2
1
9
1
8
1
7
1
6
15
14 13
12
11 10
9
8 7
654321
S 3S
2
S
1
S
M
C
n
W
E
A
9
A
8
A B C
μ
A5
μ
A4
μ
A3
μ
A2
μ
A1
μ
A0 A字段B字段C字段
4.3 指令功能类别
表4-2 指令功能分类表指令功
能类别
指令名称助记符指令说明寻址方式
算术/逻辑运算ADD ADD
Ri,Ri,Rj
Ri←
Ri+Rj
寄存器寻址
OR OR
Ri,Ri,20
Ri←
Ri|Rj
寄存器寻址
ADDI ADDI
Ri,Ri,Rj
Ri←
Ri+Immediate
立即数寻址LB LB rd ←直接寻址
15 14 13 选择
0 0 0
0 0 1 LDRi 0 1 0 LDDR1
0 1 1 LDDR2
1 0 0 LDIR 1 0 1 LOAD 1 1 0 LDAR
9 8 7 选择
0 0 0
0 0 1 P(1)
0 1 0 P(2)
0 1 1 P(3)
1 0 0 P(4)
1 0 1 AR
1 1 0 LDPC 1
2 11 10 选择
0 0 0
0 0 1 RS-B
0 1 0 RD-B
0 1 1 RI-B
1 0 0 299-B
1 0 1 ALU-B
1 1 0 PC-B
存储器访问
rd,[addrA] [addrA]
MOVE MOVE Ri Rj Rj←Ri 寄存器寻址SB SB
rs,[addrA]
[addrA]
←rs
直接寻址
程序流控制NOP NOP 空操作
HALT HALT 停机
JUMP JUMP[addrA
]
跳转到
[addrA]
直接寻址
BLT BLT
Ri,Rj,[addrA]
If(Ri<Rj
) PC ←[addA]
else PC
←PC+1
寄存器寻址
BEQ BNE
Ri,Rj,[addrA]
If(Ri!=R
j) PC ←
[addA]
else PC
←PC+1
寄存器寻址
输入/输出IN IN rd Ri ←SW 直接寻址OUT OUT[addrA] LED ←Ri 寄存器寻址
4.4 微程序流程总框架4.4.1微程序流程框架
图4-2微程序流程图
4.4.2 控制台的流程图
图4-3控制台流程图
上述三条控制台指令用两个开关SWB 、SWA 的状态来设置,其定义如下:
SWB SW A 控制台指令 0 0 1
0 1 1
读内存(KRD ) 写内存(KWE ) 启动程序(RP )
表4-3控制台状态设置
5 微程序详细设计
5.1 微程序流程框架
IN OUT BLT LB SB MOVE ADD OR EBQ JUMP HALT NOP CLE ADDI
表5-1 微程序总框架
p (1)
上表4-4是整个指令系统的指令,包括输入输出,流程控制,存储器访问,算术逻辑运算单元等总计十四条指令。

5.2 控制台流程
5.2.1 控制台公操作
表5-2控制台工操作
控制台中的公操作是所有微指令运行的起始端,通过p(4)与SWA,SWB的共同作用选择分支。

控制台操作为P(4)测试,它以控制台开关SWB、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。

当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用一个微地址单元随意填写。

5.2.2 KWE(01)
表5-3 KWE(01)
存储器写操作(KWE):拨动总清开关CLR后,控制台开关SWB、SWA为“01”时,按START微动开关,可对RAM进行连续手动写入。

5.2.3 KRD(00)
表5-4 KRD(00)
存储器读操作(KRD):拨动总清开关CLR后,控制台开关SWB、SWA为“00”时,按START微动开关,可对RAM连续手动读操作。

5.2.4 RP(11)
表5-5 RP(11)
启动程序:拨动总清开关CLR后,控制台开关SWB、SWA置为“11”时,按START 微动开关,即可转入到第01号“取址”微指令,启动程序运行。

5.2.5 数据通路
部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。

这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。

根据上述要求设计数据通路如图所示:
图5-1 数据通路框图
时序M EM (6116)
O U TPU T
IN PU
T
A LU (74181)W /R
LED -B
C E
W /R SW -B
B U S 地址总线
数据总线
W /R A LU -B
LO A D
PC -B
299-B
T4
74299
D R 2(74273)
D R 1(74273)A R (74273)
PC (74161)微控器IR (74273)
R 2(74374)
R 1(74374)R 0(74374)R 2-B R 1-B R 0-B S 3
S 2
S 1S 0M
C N
L D D R 1
T 4
L D D R 2
T 4
L D P C
T 4
L D A R T 3
Y 0
Y 1
Y 2
L D IR
T 3
L D R 2T 4
L D R 1T 4
L D R 0T 4
5.3 每条指令的详细设计
5.3.1 公操作
表5-6 公操作
指令描述:根据PC 从存储器中取出相应指令,放入指令寄存器里。

5.3.2 IN 指令
表5-7 IN 指令
指令描述:从SWITCH UNIT中输入数据存入寄存器Ri中。

5.3.3 ADD指令
表5-8 ADD指令
指令描述:将俩数相加结果保存在Ri中。

5.3.4 SB指令
表5-9 SB命令
指令描述:吧寄存器中的数据放到对应的存储器单元。

5.3.5 JUMP指令
表5-10 JUMP指令
指令描述:跳转到给定的地址。

5.3.6 ADDI 指令
表5-11 ADDI指令
指令描述:将数据和寄存器中的数据相加并放在Ri中。

5.3.7 LB指令
表5-12 LB指令
指令描述:从主存中取出对应地址的数据放到相应的寄存器中。

5.3.8 OUT 指令
表5-13 OUT指令
指令描述:将寄存器中的值显示到LED中。

5.3.9 NOP指令
表5-14 NOP指令指令描述:空操作。

5.3.10 HALT指令
表5-15 HALT指令指令描述:形成死循环从而使程序终止。

5.3.11 MOVE指令
表5-16 MOVE指令指令描述:把一个寄存器中的数据打到一个寄存器中。

5.3.12 BEQ指令
表5-17 BEQ指令
指令描述:判断DR1与DR2是否相等,决定是否跳转。

5.3.13 CLEAR指令
指令描述:对进位位CY进行清零操作。

5.3.14 BLT指令
表5-18 BLT指令
指令描述:判断DR1是否小于DR2,若小于则跳转,否则顺序执行。

5.3.15 OR指令
表5-19 OR指令
指令描述:将DR1+DR2的值存在Ri中。

6 机器指令程序
6.1 程序流程图
图6-1测试程序流程图
YES
NO
开始
输入和的初始值Ri 并显示
将上限Rj 存储到
内存中
输入运算上限值Rj 并显示
输入运算下限值Rk 并显示
取出上限Rj ,Ri=Ri+Rk,并显示
Rj==Rk
Rk=1+Rk 显示Rk
显示上限Rj 和结
果Ri
输入运算下限值Rk 并显示
空操作 停机
本实验要求实现如图6-1的程序流程:
此测试程序功能为求从1到要求数字的累加和,输入第一个数字为初始值0,第二个数字为要求的数值,第三个数值为累加的的下限,最后结果输出累加之和。

6.2 程序助记符形式
表6-1程序指令说明
标号助记符指令说明
IN R0 #输入和的初始值到R0
OUT RO #显示R0
IN R1 #输入求和的值到R1
OUT R1 #显示R1
SB R1 C0H #存储R1到存储器C0H 单元
IN R2 #输入计数的初始值到R2
OUT R2 #显示R2
L1 LB R1 C0H #循环开始将C0H中的值取到R中
ADD R0, R0, R2 #和与计数相加放到R0中
OUT R0 #显示求和结果
BEQ R1, R2, L2 #判断计数是否到需求值跳转
ADDI R2,R2, 1 #计数值加1
OUT R2 #显示R2
JUMP L1 #跳回到L1
L2 LB R1 C0H #跳出循环,取出要求值到R1
OUT R1 #显示R1
OUT R0 #显示R0
NOP #空操作
HALT #程序终止
6.3 机器指令程序
相应机器指令程序如下:
地址(二进制)内容(二进制)助记符说明
0000 0000 0001 0000 IN 输入和的初始值到R0
0000 0001 0010 0000 OUT 显示R0
0000 0010 0001 0001 IN 输入要求的值到R1
0000 0011 0010 0100 OUT 显示R1
0000 0100 0101 0100 SB 存储R1
0000 0101 1101 0000 存储地址
0000 0110 0001 0010 IN 输入计数值到R2 0000 0111 0010 1000 OUT 显示R2
0000 1000 0100 0001 LB 取出存储器中的数据到R1 0000 1001 1100 0000 存储器地址 0000 1010 0111 1000 ADD 和与计数值相加 0000 1011 0010 0000 OUT 输出求和结果
0000 1100 1001 10O1 BEQ 判断计数与要求值是否相等 0000 1101 0001 0011 相等跳转的地址 0000 1110 1110 0010 ADDI 计数值增加 0000 1111 0000 0001 增加的数值为1 0001 0000 0010 1000 OUT 输出增加后的值 0001 0001 1010 0000 JUMP 跳转 0001 0010 0000 1000 跳转到的地址
0001 0011 0100 0001 LB 取出存储器中的数据到R1 0001 0100 1100 0000 存储器地址 0001 0101 0010 0100 OUT 显示R1 0001 0110 0010 0000 OUT 显示求和结果R0 0001 0111 1100 0000 NOP 空操作 0001 1000 1101 0000 HALT 停止程序 6.4 程序的CPI
CPI 分析根据指令设计,各指令周期数如下:
IN:3 ADD:5 SB:5 LB:5 OUT:3 JUMP:4 BEQ:10/9 MOV :3 NOP:3 HALT:3 BLT:10/9 ADDI:6 OR:5 CLEAR:4
根据上述指令周期数,可以计算CPI 如下:
(1)静态CPI :在计算静态CPI 时,将BEQ 指令当作两条指令计算,周期数分别为10和9。

4375.516
2
*92*1064*52*45*3=+++++==
nCounts Instructio s ClockCycle CPI
(2)动态CPI 的计算不同于静态CPI 的地方在于,执行的程序计算任务不同,则结果不同,也就是执行循环的次数不同,以下计算是以求5的“阶加”为例。

05.544
202
===
nCounts Instructio s ClockCycle CPI
分析动态CPI ,平均CPI 为5.4375,因此当运行循环次数越多的指令时,即被乘数越大,整个程序的CPI 越接近5.4375。

7 实验步骤
7.1线路连接图
B U S U N I T B 7B 0
W /R U N I T
T 4
T 3T 2T 1W E
B 7
B 0B 7B 0
B 7B 0
S 3
C N L
D D R 1L D D R 2A L U -B
A L U U N I T
A U J 3
R J 1
R E G U N I T
L D A R
L O A D P C -B
L D P C A D D R E S S U N I T
D 7
D 0
A D 7A D 0
W /R
D 7
D 0C E
M A I N M E M M 24
M 19L D D R 1L D D R 2A L U -B L D A R L O A D P C -B L D P C
M 18
T S 4T S 3T S 2T S 1
S T A T E U N I T H 23
S I G N A L U N I T
S E 6
S E 1P (1)P (3)S E 6S E 1P (1)P (4)S W B
S W A
I 7
I 2S W A S W B S W I T C H U N I T
I 7
I 2L O G U N I T
L D I R
L D I R
I N S U N I T
A 8A 9
M 16
M 17M I C R O -C O N T R O L L E R
D 7
D 0
D 7
D 0D 7D 0
E X U N I T
Y 0Y 1Y 2
I N P U T D E V I C E
S W J 3S W -B
L E D -B
W /R
O U T P U T D E V I C E
W /R
E X T B U S
A D J 6
299-B
299-B B 7
B 0A U J 1
A R A R
C Y Z I
F C F Z
R
0-B
R
2-B
R
1-B
L
D
R
L
D
R
1
L
D
R
2
L O G U N I T
R 0-B
R
1-B
R
2-B
L
D
R
L
D
R
1
L
D
R
2
P (2)P (3)P (4)P (4)
L D R i R D -B L D R i R D -B R S -B R S -B R I -B R I -B
I 3I 0I 3
I 0A 0
A 7














































Φ
图7-1实验接线图
7.2 程序微代码表
微地址S3 S2 S1 S0 M CN WE A9 A8 A字段B字段C字段后续地址
00 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
01 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1
02 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1
03 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1
04 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 0 0 1 0
05 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 0 0 1 1
06 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 1
07 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0
10 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 1 0
11 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0
12 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0
13 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
14 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
15 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1
16 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1
17 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1
20 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 0 0 1 0
21 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 0
22 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 1
23 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
24 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
25 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 1 1 0
26 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1
27 0 0 0 0 0 1 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0
30 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1
31 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 1 0
32 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
33 0 0 0 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0
34 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 1 1 1 0 1
35 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 1 1 1 0
36 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 1 1
37 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0
40 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1
41 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1
42 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1 1 1
43 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 0 0 1 0
44 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 0 1 0 1
45 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1
46 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1
47 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1
50 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1
51 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 0
52 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1
53 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 0 1 1 0 0
54 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1
55 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 1 0 0 1
56 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 1 0 0 1
57 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1
60 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1
61 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 0
62 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1
63 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1
64 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 0 1 1 0 0 1
表7-1微代码表
实验步骤如下:
①单步运行程序
A.使编程开关处于“RUN”状态,STEP为“STEP”状态,STOP为“RUN”状态。

B.拨动总清开关CLR(0→1),微地址清零,PC计数器清零,程序首地址为00H。

C.单步运行一条微指令,每按动一次START键,即单步运行一条微指令。

对照微程序流程图,观察微地址显示灯是否和流程一致。

D.当运行结束后,可检查存数单元(0B)中的结果是否和理论值一致。

②连续运行程序
A.使“STATE UNIT”中的STEP开关置于“EXEC”状态,STOP开关置为“RUN”状态。

B.拨动CLR开关,清微地址及PC计数器,按动START,系统连续运行程序,稍后将STOP拨至“STOP”时,系统停机。

C.停机后,可检查存数单元(0B)结果是否正确。

若联机运行程序时,进入DEBUG调试界面,总清开关CLR(0→1)清零后,程序首地址为00H,按相应功能键即可联机运行、调试程序
心得体会
通过这次的计算机组成原理的课程设计,我对计算机内部元件的工作原理有了进一步的了解与认识。

许多在课堂上没有听懂,没有学会的知识在课程设计的过程中暴露无遗,不过积极的方面是通过课程设计,我把这些知识上的明显漏洞给补上了。

我对机器指令及微指令的的编码方法不了解,对计算机各部件的组成和工作原理也不是很理解。

为了弄清楚这些问题,我又把课本拿出来重新学习相关的章节。

虽然理论知识很重要,但是像我们这种工学类的课程,更重要的还是实践。

理论联系实际,才能更好的掌握所学的知识。

在机房上机的时候也遇到了一些问题,不过在请教了同学和老师之后,这些问题也都一个个迎刃而解。

这次的课程设计题目是基本模型机的设计与实现,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本模型计算机。

并为其定义五条机器指令,并编写相应的微程序,具体上机调试掌握整机概念。

以前都只是在使用计算机,对它内部的部件组成和构造不是特别的清楚,在课程设计的最初阶段,我没有急于进行具体的设计,而是先理清思路,明确自己要做的工作是什么,如何来实现基本模型机的相关功能。

这些前期的准备工作虽然用去了我很多的时间,但是最后的结果证明,我这样的方法是正确的。

课程设计就像是一个系统工程,内容多而复杂,必须先在整体上进行宏观的把握,然后再具体的进行实施。

如果开始的方向就不对,那后面的改进就会很麻烦。

温故了这个学期所学的相关知识,心里也更加有信心。

后面的相关设计参照课程设计任务书的内容进行了相应的改变,并顺利的在计算机上得到了实现。

将实验设备通过串口连接计算机,通过联机软件将机器指令程序和编写的微指令程序存入主存中,并运行此段程序,通过联机软件显示和观察该段程序的运行,验证编写的指令和微指令的执行情况是否符合设计要求。

这样的测试方法我还是第一次使用,感觉很新鲜。

计算机组成原理更倾向于计算机底层部件的应用,而不像我们平时都在使用的那些界面友好交互性很强的软件,所以有些错误不是很容易发现,只能通过自己耐心的反复调试来解决。

这中间也请教了同学和老师,他们对我的帮助都很大。

通过这次课程设计,我的收获很多。

课程设计不仅巩固我的理论知识,将理论和实践结合起来,锻炼了我的动手能力,也让我认识到自己的不足之处,争取以后能克服这些缺点,更进一步提高自己各个方面的能力。

参考文献
[1]Patterson,David A.& John L.Hennessy. 计算机组织与设计硬件/软件接
口(英文版,第四版) [M]. 北京:机械工业出版社,1999.
[2]《计算机组成原理实验指导书》。

相关文档
最新文档