一、设计目的
1、掌握一个简单CPU的组成原理。
2、在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
3、掌握微程序控制器设计。
二、设计任务与要求
设计任务:
用所学知识,设计并构造一台简单模型机。验证指导书所给出的五条指令的模型机实验。在此基础上,新设计五条机器指令。画出指令流程图,编写相应的微程序和机器语言调试程序,并上机调试通过。掌握整机概念。
设计要求:
1.验证实验测试通过。接线完成。形成调试程序和微程序文本文件。联机写入和校验,并联机执行。为后边设计打下基础。
2.设计LDI指令并测试通过。包括指令格式、代码。指令流程图。微程序。调试程序。主要成果形成TEST1.TXT文件。
3.设计ADD指令并测试通过。要求同上。
4.设计AND指令并测试通过。同上。
5.设计 RL指令并测试通过。同上。
6.设计LAD指令并测试通过。同上。
1、设计思路
第一步:按照机器指令的功能设计微程序指令流程图
第二步:按照微指令来设计微程序
第三步:将微程序写入后联机运行
2、使用的I/O设备
二进制数码开关,作为输入设备(IN),两位十六进制LED数码管,作为输出设备(OUT)。
3、使用的功能模块
CPU 由运算器(ALU)、微程序控制器(MC)、通用寄存器(R0),指令寄存器(IR)、程序计 数器(PC)和地址寄存器(AR)组成。
4、功能模块的作用
(1)ALU作用:处理各种算术运算和逻辑运算。
(2)微程序控制器作用:基本任务是完成当前指令的翻译和执行。
(3)通用寄存器作用:可用于传送和暂存数据,也可参与算数逻辑运算并保存运算结果。
(4)程序计数器作用:用于存放下一条指令所在单元的地址的地方。
(5)地址寄存器作用:在移位脉冲作用下,存储在集萃器中的数据能逐位向左或向右的功能,可用来寄存数码,实现数据的串行——并行的转换、数值的运算及数据处理等功能。
1、包括五条指令的验证:IN(输入)、ADD(二进制加法)、OUT(输出)、JUMP(无条件转移)、HLT(停机)。
其中JUMP为双字节指令,其余均为单字节指令,其中********为addr所对应的二进制地址码。
2、根据要求设计微程序流程图。
其微指令格式如表5-1-1:
根据要求得到以下程序。
地址 内容 助记符 说明
00000000 00100000 ; START: IN R0 从IN单元读入数据送至R0
00000001 00000000 ; ADD R0,R0 RO与自身相加送至R0
00000010 00110000 ; OUT R0 R0值送至OUT单元显示
00000011 11100000 ; JMP START 跳转至00H地址
00000100 00000000 ;
00000101 01010000 ; HLT 停机
(1)采用联机写入校验:微程序和机器程序得以指定的格式写入到以 TXT 为后缀的文件中,微程序和机器程序的格式如下:
机器指令格式说明: $P XX XX
$P : 机器指令代码
XX : 十六进制地址
XX : 机器指令标志
微指令格式说明: $M XX XXXXXX
$M :微指令代码
XX:十六进制地址
XXXXXX:微指令标志
(2)TEST0.txt文件:
; //*************************************** //
; // //
; // CPU 与简单模型机实验指令文件 //
; // //
; // By TangDu CO.,LTD //
; // //
; //*************************************** //
; //****** Start Of Main Memory Data ****** //
$P 00 20 ; START: IN R0 从 IN 单元读入数据送 R0
$P 01 00 ; ADD R0,R0 R0 和自身相加,结果送 R0
$P 02 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 03 E0 ; JMP START 跳转至 00H 地址
$P 04 00 ;
$P 05 50 ; HLT 停机
; //******* End Of Main Memory Data ******* //
; //**** Start Of MicroController Data **** //
$M 00 000001 ; NOP
$M 01 006D43 ; PC->AR,PC 加 1
$M 03 107070 ; MEM->IR, P<1>
$M 04 002405 ; R0->B
$M 05 04B201 ; A 加 B->R0
$M 1D 105141 ; MEM->PC
$M 30 001404 ; R0->A
$M 32 183001 ; IN->R0
$M 33 280401 ; R0->OUT
$M 35 000035 ; NOP
$M 3C 006D5D ; PC->AR,PC 加 1
; //** End Of MicroController Data **//
选择联机软件的“【转储】—【装载】”功能,在打开文件对话框中选择上面所保存的文件TEST0.txt, 软件自动将机器程序和微程序写入指定单元。
选择联机软件的“【转储】—【刷新指令区】”可以读出下位机所有的机器指令和微指令, 并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失 败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标 左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框, 输入 6 位数据并回车,编辑框消失,并以红色显示写入的数据。
(3)运行程序方法:联机运行
将时序与操作台单元的开关 KK1 和 KK3 置为‘运行’档,进入软件界面,选择菜单命令 “【实验】—【简单模型机】”,打开简单模型机数据通路图。
按动CON单元的总清按钮CLR,然后通过软件运行程序,选择相应的功能命令,即可联机 运行、监控、调试程序,当模型机执行完JMP指令后,检查OUT单元显示的数是否为IN单元值的2倍。在数据通路图和微程序流中观测指令的执行过程,并观测软件中地址总线、数据总线以及微指令显示和下位机是否一致。
序号 |
助记符 |
机器指令代码 |
十六进制代码 |
功能说明 |
0 |
ADD R0,im |
00000000 |
00H |
R0<-(R0) + im |
1 |
AND R0,im |
00010000 |
10H |
R0<-(R0) ∧ im |
2 |
IN R0, K |
00100000 |
20H |
R0<- IN |
3 |
OUT L0,R0 |
00110000 |
30H |
OUT<-L0 |
4 |
MOV R0,[R0] |
01000000 |
40H |
R0<- [R0] |
5 |
HLT |
01010000 |
50H |
暂停 |
6 |
LDI R0, im |
01100000 |
60H |
R0<- im |
7 |
INC R0 |
01110000 |
70H |
R0<-(R0) + 1 |
8 |
SUB R0,im |
10000000 |
80H |
R0<-(R0) - im |
9 |
OR R0,im |
10010000 |
90H |
R0<-(R0)∨ im |
10 |
RR R0, 1 |
10100000 |
A0H |
R0<-将(R0)右移1位 |
11 |
RL R0, 1 |
10110000 |
B0H |
R0<-将(R0)左移1位 |
12 |
LAD R0, addr |
11000000 |
C0H |
R0<-[addr] |
13 |
STA addr, R0 |
11010000 |
D0H |
ADDR<-(R0) |
14 |
JMP addr |
11100000 |
E0H |
PC<-E |
15 |
BZC |
11110000 |
F0H |
|
注释:im为立即数。addr为直接地址。从而相应的指令变为双字节指令。 |
2、指令流程图设计
3、微程序设计
ADD:
地址 |
十六进制 |
高五位 |
S3-S0 |
A字段 |
B字段 |
C字段 |
MA5-MA0 |
06 |
006D47 |
00000 |
0000 |
110 |
110 |
101 |
000111 |
07 |
102008 |
00010 |
0000 |
010 |
000 |
000 |
001000 |
08 |
04B201 |
00000 |
1001 |
011 |
001 |
000 |
000001 |
31 |
001406 |
00000 |
0000 |
001 |
010 |
000 |
000110 |
LDI:
地址 |
十六进制 |
高五位 |
S3-S0 |
A字段 |
B字段 |
C字段 |
MA5-MA0 |
09 |
103001 |
00010 |
0000 |
011 |
000 |
000 |
000001 |
3C |
006D5D |
00000 |
0000 |
110 |
110 |
101 |
011101 |
AND:
地址 |
十六进制 |
高五位 |
S3-S0 |
A字段 |
B字段 |
C字段 |
MA5-MA0 |
07 |
006D08 |
00000 |
0000 |
110 |
110 |
100 |
001000 |
08 |
102009 |
00010 |
0000 |
010 |
000 |
000 |
001001 |
09 |
013201 |
00000 |
0010 |
011 |
001 |
000 |
000001 |
31 |
001407 |
00000 |
0000 |
001 |
010 |
000 |
000111 |
RL:
地址 |
十六进制 |
高五位 |
S3-S0 |
A字段 |
B字段 |
C字段 |
MA5-MA0 |
06 |
03B201 |
00000 |
0111 |
011 |
001 |
000 |
000001 |
3B |
001406 |
00000 |
0000 |
001 |
010 |
000 |
000110 |
LAD:
地址 |
十六进制 |
高五位 |
S3-S0 |
A字段 |
B字段 |
C字段 |
MA5-MA0 |
08 |
106009 |
00010 |
0000 |
110 |
000 |
000 |
001001 |
09 |
103001 |
00010 |
0000 |
011 |
000 |
000 |
000001 |
3C |
006D48 |
00000 |
0000 |
110 |
110 |
101 |
001000 |
4、调试程序设计
; //*************************************** //
; // //
; // CPU 与简单模型机实验指令文件 //
; // //
; // By TangDu CO.,LTD //
; // //
; //*************************************** //
; //****** Start Of Main Memory Data ****** //
$P 00 20 ; START: IN R0 从 IN 单元读入数据送 R0
$P 01 00 ; ADD R0,R0 R0 和自身相加,结果送 R0
$P 02 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 03 E0 ; JMP START 跳转至 00H 地址
$P 04 00 ;
$P 05 50 ; HLT 停机
; //******* End Of Main Memory Data ******* //
; //**** Start Of MicroController Data **** //
$M 00 000001 ; NOP
$M 01 006D43 ; PC->AR,PC 加 1
$M 03 107070 ; MEM->IR, P<1>
$M 04 002405 ; R0->B
$M 05 04B201 ; A 加 B->R0
$M 1D 105141 ; MEM->PC
$M 30 001404 ; R0->A
$M 32 183001 ; IN->R0
$M 33 280401 ; R0->OUT
$M 35 000035 ; NOP
$M 3C 006D5D ; PC->AR,PC 加 1
; //** End Of MicroController Data **//
$P 00 20 ; START: IN R0 从 IN 单元读入数据送 R0
$P 01 00 ; ADD R0,R0 R0 和自身相加,结果送 R0
$P 02 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 03 E0 ; JMP START 跳转至 00H 地址
$P 04 00 ;
$P 05 50 ; HLT 停机
$M 06 006D47 ;
$M 07 102008 ;
$M 08 04B201 ;
$M 31 001406 ; R0->A
$P 00 60 ; LDI
$P 01 33 ;
$P 02 00 ; ADD R0,R0 R0 和自身相加,结果送 R0
$P 03 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 04 E0 ; JMP START
$P 05 00 ;
$P 06 03 ;
$P 07 50 ; HLT 停机
$M 09 103001 ; MEM->R0
$M 3C 006D5D ; PC->AR,PC 加 1
$P 00 20 ; IN
$P 01 10 ; AND
$P 02 F0 ;
$P 03 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 04 E0 ; JMP START 跳转至 00H 地址
$P 05 00 ;
$P 06 50 ; HLT 停机
$M 07 006D08 ; PC->AR PC+1
$M 08 102009 ; MEM->B
$M 09 013201 ; A与B
$M 31 001407 ; R0->A
$P 00 20 ; START: IN R0 从 IN 单元读入数据送 R0
$P 01 B0 ; RL
$P 02 00 ; ADD R0,R0 R0 和自身相加,结果送 R0
$P 03 30 ; OUT R0 R0 的值送 OUT 单元显示
$P 04 E0 ; JMP START 跳转至 00H 地址
$P 05 00 ;
$P 06 50 ; HLT 停机
$M 06 03B201 ;R0->A
$M 3B 001406 ;A左移->R0
$P 00 C0 ; LAD
$P 01 37 ;
$P 02 30 ; JMP START 跳转至 00H 地址
$P 03 40 ;
$P 04 50 ; HLT 停机
$M 00 000001 ; NOP
$M 08 106009 ; MEM->AR
$M 09 103001 ; MEM->R0
$M 3C 006D48 ; PC->AR,PC 加 1
9、参考文献
[1]白中英、戴志涛主编.《计算机组成原理》.第五版 科学出版社