一、设计目的
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:
- 3.将每条微指令代码化将程序流程图按照指令格式转化成相应的“二进制代码表”
- 4.从 IN 单元读入数据送 R0 R0和自身相加,结果送R0 R0的值送OUT单元显示
根据要求得到以下程序。
地址 内容 助记符 说明
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 停机
- 5.具体操作步骤
(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倍。在数据通路图和微程序流中观测指令的执行过程,并观测软件中地址总线、数据总线以及微指令显示和下位机是否一致。
- 功能设计
- 1.机器指令功能说明(ADD+LDI+AND+RL+LAD)
序号 | 助记符 | 机器指令代码 | 十六进制代码 | 功能说明 |
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、调试程序设计
- 最终联机程序清单
- 1.验证
; //*************************************** //
; // //
; // 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 **//
- 2.ADD
$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
- 3.LDI
$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
- 4.AND
$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
- 5.RL
$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
- 6.LAD
$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
八、调试过程
1.验证
2.ADD
- 3.AND
- 4.LDI
- 5.RL
- 6.LAD
9、参考文献
[1]白中英、戴志涛主编.《计算机组成原理》.第五版 科学出版社