我班算是几乎最后一个做实验的班级了,报告参考了一些朋友提供的数据加上一些自己的主观拙见,本人水平有限加之制作仓促难免有错误,望大家批评指正。
这一步 只是为了模拟一下输入的步骤 也可以直接文件导入
eg:向332211M(00H) 数据的写入操作 操作思路:分为中低高三路进行编程
输入:以下演示同上方低八位相同 但是一些小细节需要注意:被编辑的单元在三路都被修改之后控存单元CU会自动加一
校验输入:
对字段进行平行操作
转储->在sample中选择文件
1、阅读实验指导书,然后回答问题。
(1) 微指令字长共 24 位,控制位顺序如表 4-1-1:
其中 MA5…MA0 为 6 位的( 后续微地址),A、B、C 为三个(为三个译码字段 ),分别由三个控制位译码出多位。C 字段中的 P<1>为(为测试字位 )。其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的( 微地址入口),从而实现完成对指令的识别,并实现微程序的分支。本系统上的 指令译码原理如图 4-1-3 所示,图中 I7…I2 为指令寄存器的第 7…2 位输出,SE5…SE0 为微控器单元微地址锁存器的强置端输出,指令译码逻辑在控制器单元的INS_DEC 中实现。
个人感觉译码方式是直接译码,经过译码器的翻译编程控制信号
(2)本实验安排了四条机器指令,分别为 ADD(0000 0000)、IN(0010 0000)、 OUT(0011 0000)和 HLT(0101 0000)。 括号中为各指令的二进制代码,指令格式如下,请补充说明部分。
实验中机器指令由 CON 单元的二进制开关手动给出,其余单元的控制信号均由微程序控制器自动产生,为此可以设计出相应的数据通路图,
首先将指令输入,可以手动也可以导入文件,这里建议直接导入文件比较方便,按照指导书 的操作进行,可以选择单步或者单拍个人感觉单拍的效果比较好。
如上方流程图所示,首先 刷新电路 初始化 IR初始化为00 经过译码之后为30,单步运行是通过按ST按钮来形成的。
这里译码的原理大家可以简单查阅资料和查看电路来了解:这里就是进行了一个强转,将转换成MAR的01 进行一个分支判断,类似于一个for循环 ,此时需要等待用户输入指令,这里的指令在上方已经显示比如30是一个存数指令,每一条微指令执行完之后都会把下地址传送给CMAR,除了停机指令,下地址都是01回到循环判断的地方,在IN单元输入加数(如23H)要转换为二进制
IN输入位置
译码的过程是一个电路屏蔽强转的过程。
查看sample文件可以找到微程序存储和主存储的对应关系
//***** 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 **//
(一)本机运行
1、按照实验指导书的步骤完成操作,并填写表格。
表4-1 程序运行过程
机器指令 |
机器 指令码 |
微指令 |
||||||||
地址 |
下地址 |
高五位 |
S3-S0 |
A 字段 |
B 字段 |
C 字 段 |
MA5-MA0 |
|||
IN |
0010 0000 |
00 |
000001 |
00000 |
0000 |
000 |
000 |
000 |
000001 |
|
01 |
110100 |
00000 |
0000 |
111 |
000 |
001 |
110000 |
|||
32 |
000001 |
00011 |
0000 |
011 |
000 |
000 |
000001 |
|||
ADD |
0000 0000 |
01 |
110000 |
00000 |
0000 |
111 |
000 |
001 |
110000 |
|
30 |
000100 |
00000 |
0000 |
001 |
010 |
000 |
000100 |
|||
04 |
000101 |
00000 |
0000 |
010 |
010 |
000 |
000101 |
|||
05 |
000001 |
00000 |
1001 |
011 |
001 |
000 |
000001 |
|||
OUT |
0011 0000 |
01 |
110011 |
00000 |
0000 |
111 |
000 |
001 |
110000 |
|
33 |
0000001 |
00101 |
0000 |
000 |
010 |
000 |
000001 |
|||
HLT |
0101 0000 |
01 |
110101 |
00000 |
0000 |
111 |
000 |
001 |
110000 |
|
35 |
110101 |
00000 |
0000 |
000 |
000 |
000 |
110101 |
通过IN单元输入的值为(00100011 ),运行结束后,通过OUT单元输出的值为( 01000110)
写出连续执行四条机器指令(IN-ADD-OUT-HLT)程序的每条微指令的下地址执行顺序
000000→000001→(000000)→(000001)→(110000)→000001→(110010)→000001→(000001)→000001→(110000)
直接看时序图和数据流图:T3时刻上升沿送入OUT单位 受时钟信号、WR信号、IOM信号、R0_B信号影响。
(1) 掌握一个简单 CPU 的组成原理。
(2) 在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机。
(3) 为其定义五条机器指令,编写相应的微程序,并上机调试掌握整机概念。
(1)实验4-2在4-1微程序控制器实验的基础上增加了三个部件,一是(PC ),另一个是( AR ),还有就是 (MEM),因而在微指令中应增加相应的控制位,其微指令格式 如表4-2-1所示:
表 4-2-1 微指令格式
A字段增加101 控制LOAD信号,用来控制主存 和110 控制LDAR信号 控制地址寄存器AR
B字段增加110 控制 PC_B信号 控制PC输出
C字段增加101 控制LDPC信号 控制PC输入
实验先选择响应的模型机并且导入数据,可以在查看->指令查看指令的地址,不断点击ST观察程序运行中的数据流情况,首先PC的值默认是00 然后+1,配合上方的流程图分析指令和数据以及机器是怎么配合的。
按照实验指导书的步骤完成操作,并填写表格。
表4-1 程序运行过程
机器指令 |
MEM地址 |
机器 指令码 |
微指令 |
|||||||
地址 |
下地址 |
高五位 |
S3-S0 |
A字段 |
B 字段 |
C 字 段 |
MA5-MA0 |
|||
IN |
00 |
20 |
00 |
000001 |
00000 |
0000 |
000 |
000 |
000 |
000001 |
01 |
000011 |
00000 |
0000 |
110 |
000 |
101 |
000011 |
|||
03 |
110010 |
00010 |
0000 |
111 |
000 |
001 |
110000 |
|||
32 |
000001 |
00011 |
0000 |
011 |
000 |
000 |
000001 |
|||
ADD |
01 |
00 |
01 |
000011 |
00000 |
0000 |
110 |
000 |
101 |
000011 |
03 |
110000 |
00010 |
0000 |
111 |
000 |
001 |
110000 |
|||
30 |
000100 |
00000 |
0000 |
001 |
010 |
000 |
000100 |
|||
04 |
000101 |
00000 |
0000 |
010 |
010 |
000 |
000101 |
|||
05 |
000001 |
00000 |
1001 |
011 |
001 |
000 |
000001 |
|||
OUT |
02 |
30 |
01 |
000011 |
00000 |
0000 |
110 |
000 |
101 |
000011 |
03 |
110011 |
00010 |
0000 |
111 |
000 |
001 |
110000 |
|||
33 |
000001 |
00101 |
0000 |
000 |
010 |
000 |
000001 |
|||
JMP addr |
03 04 |
E0 00 |
01 |
000011 |
00000 |
0000 |
110 |
000 |
101 |
000011 |
03 |
111100 |
00010 |
0000 |
111 |
000 |
001 |
110000 |
|||
3C |
011101 |
00000 |
0000 |
110 |
110 |
101 |
011101 |
|||
1D |
000001 |
00000 |
0000 |
101 |
000 |
101 |
000001 |
|||
HLT |
05 |
50 |
01 |
000011 |
00000 |
0000 |
110 |
000 |
101 |
000011 |
03 |
110101 |
00010 |
0000 |
111 |
000 |
001 |
110000 |
|||
35 |
110101 |
00000 |
0000 |
000 |
000 |
000 |
110101 |
通过IN单元输入的值为(00100011 ),运行结束后,通过OUT单元输出的值为(01000110 )
.00000000 00100000 ; START: IN R0 从 IN 单元读入数据送 R0
00000001 00000000 ; ADD R0,R0 R0 和自身相加,结果送 R0
00000010 00110000 ; OUT R0 R0 的值送 OUT 单元显示
00000011 11100000 ; JMP START 跳转至 00H 地址
00000100 00000000 ;
00000101 01010000 ; HLT
计算机组成原理实验之微程序控制器实验_weixin_34279579的博客-CSDN博客
(1条消息) 计算机组成原理实验:微程序控制实验_微程序控制器实验_海轰Pro的博客-CSDN博客
计算机组成原理 微程序控制器实验_Long_UP-DevPress官方社区 (csdn.net)