tec-2000 教学机的指令格式
DESCRIPTION
TEC-2000 教学机的指令格式. 8 位 4 位 4 位. 目的寄存器. 源寄存器. 操 作 码. I/O 端 口 地 址. 相对转移指令的偏移量. 直接数 / 内存地址 / 指令中变址偏移量. 单字指令 仅用一个指令字, 第一个指令字 分为三个部分。 最高 8 位是操作码。从这个意义上讲 , 教学机的基本指令是固定长度的操作码结构 , 最多支持 256 条基本指令。 - PowerPoint PPT PresentationTRANSCRIPT
单字指令仅用一个指令字,第一个指令字分为三个部分。 最高 8 位是操作码。从这个意义上讲 , 教学机的基本指令是固定长度的操作码结构 , 最多支持 256 条基本指令。 最低的 8 位有多种用法:给出 1 或 2 个寄存器的编号,或入 / 出端口的地址,或用于给出相对转移指令的偏移量。
双字指令要用两个指令字 , 第二个指令字的内容可能是立即数、一个直接地址或一个变址位移量。
操 作 码 目的寄存器 源寄存器 I/O 端 口 地 址 相对转移指令的偏移量
直接数 / 内存地址 / 指令中变址偏移量
8 位 4 位 4 位 TEC-2000 TEC-2000 教学机的指令格式教学机的指令格式
TEC-2000 16 位机基本指令系统指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明00000000 DRSR ADD DR , SR 2 **** A DR←DR+SR00000001 DRSR SUB DR , SR 2 **** A DR←DR-SR00000010 DRSR AND DR , SR 2 **** A DR←DR and S
R 00000011 DRSR CMP DR , SR 2 **** A DR-SR00000100 DRSR XOR DR , SR 2 * • • • A DR←DR xor S
R 00000101 DRSR TEST DR , SR 2 * *** A DR and SR 00000110 DRSR OR DR , SR 2 * • • • A DR←DR or SR 00000111 DRSR MVRR DR, SR 2 • • • • A DR←SR00001000 DR0000 DEC DR 1 **** A DR←DR-100001001 DR0000 INC DR 1 **** A DR←DR+100001010 DR0000 SHL DR 1 * • • • A DR,C←DR*2 00001011 DR0000 SHR DR 1 * • • • A DR,C←DR /201000001 OFFSET JR ADR 1 • • • • A 无条件跳转 01000100 OFFSET JRC ADR 1 • • • • A C=1 时跳转01000101 OFFSET JRNC ADR 1 • • • • A C=0 时跳转01000110 OFFSET JRZ ADR 1 • • • • A Z=1 时跳转01000111 OFFSET JRNZ ADR 1 • • • • A Z=0 时跳转
TEC-2000 16 位机基本指令系统
指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明10000000 0000000 JMPA ADR 1 • • • • B 无条件跳到 AD
R ADR ( 16 位)10000001 DRSR LDRR DR , [SR] 2 • • • • B DR←[SR]
10000010 I/O PORT IN I/O PORT 1 • • • • B R0←[I/O PORT]
10000011 DRSR STRR [DR] , SR 2 • • • • B [DR]←SR
10000100 00000000 PSHF 0 • • • • B FLAG 入栈10000101 0000SR PUSH SR 1 • • • • B SR 入栈10000110 I/O PORT OUT I/O PORT 1 • • • • B [I/O PORT]←R
0
10000111 DR POP DR 1 • • • • B 出栈到 DR
00001000 DR0000 MVRD DR, DATA 2 • • • • B DR←DATA
DATA ( 16 位)10001100 00000000 POPF 1 * *** B FLAG← 出栈10001111 00000000 RET 1 • • • • B 子程序返回11001110 00000000 CALA ADR 1 • • • • D 调用子程序 ADR ( 16 位)
指令执行步骤概述 划分与设计指令执行步骤,是控制器部件重要的教学内容,这一设计要依据指令的格式和功能、控制器部件的组成、被控制对象运行方式以及它们彼此之间的连接关系等多个方面的实际情况共同决定,就是说,它解决的是信息随着时间在这些部件之间的流动关系,与指令系统、计算机整机和它的各个部件都有关系,因此也就比较难以全面理解与掌握。
下面分成两个步骤,从 3 个角度来介绍上述内容。
1. 准备性知识:指令执行步骤简介;教学计算机组成框图。
2. 典型指令执行步骤介绍: ( 1 )指令执行步骤简单的文字描述; ( 2 )指令执行步骤与信息流动的时间空间对应关系; ( 3 )教学计算机的典型指令执行步骤,和每一步骤中对各个部件的控制作用。
每条指令的执行步骤— 读取指令
指令地址 ( 在程序计数器 PC 中 ) 送入主存地址寄存器读主存,读出内容送入指令寄存器 IR
— 分析指令— 按指令规定内容执行指令
不同指令的操作步骤数, 和具体操作内容差异很大 ,
— 检查有无中断请求若有,则响应中断并转中断处理若无,则转入下一条指令的执行过程
形成下一条指令地
址R_R 类型指令读写内存类型指令输入输出类型指令其他类型指令
可能执行 一次或多次
可以复合
是一次读内存操作 公共操作
公共操作
是每一条指令的特定操作
TEC-2000 教学机系统的组成
计算机
终端
PC 机
微程序/ 硬连线控制器
运算器
(16 位 )
主存储器( 16 位)
按键 室开关 指示灯
串行接
口
中断实验
接口实验
内存扩展实验
电 源+5V
( 1 )指令执行步骤与信息流动图示部分
典型指令的执行过程举例:2000 0001 ADD r0, r1 ; 加法指令2001 0790 MOV r9, r0 ; 传送指令2002 E709 STRA [2007] , r9 ; 写内存指令 , 这是一条双字指令 ,
2007 ; 第二个字中的 2007 是直接地址2004 1280 IN 80 ; 读串行口数据到 R0 低 8 位2005 44FA JRC, 800 ; C 为 1 转移到 2000, 否则顺序执
行2006 8F00 RET ; 子程序返回指令
2007 其他一些指令与这里的几条指令有相当多的共同特性,属于同一组的指令的执行步骤非常类似。
读取指令 ① AR PC ② 读主存, IR 读出内容 PC PC + 1 执行指令 ③ ALU R0 ALU R1 执行 + R0 ALU ,记忆结果特征结束,判中断
指令执行步骤简单的文字描述加法指令 ADD R0 , R1
形成下条指令地
址
寄存器内容传送指令MOV R9 , R0
读取指令 ① AR PC ② 读主存, IR 读出内容 PC PC + 1 执行指令 ③ ALU 0 ALU R0 执行 + R9 ALU结束,判中断
形成下条指令地
址
写寄存器内容到主存MOV [2007] , R9
读取指令 ① AR PC ② 读主存, IR 读出内容 PC PC + 1
执行指令 ③ AR PC , PC PC+ 1 ④ 读主存, AR 读出内容
⑤ 写主存 , 总线 ALU , ALU 0 , ALU R9 , +结束,判中断
(地址 807 存在指令的第二个字中)
(注)
形成下条指令地
址
输入指令 IN 80
形成下条指令地
址
读取指令 ① AR PC ② 读主存, IR 读出内容 PC PC + 1
执行指令 ③ AR I/O Port
④ 读外设, ALU 读出数据 ALU 0 执行 + R0 ALU结束,判中断
形成下条指令地
址
相对转移指令 JR C, 800
读取指令 ① AR PC (注) ② 读主存, IR 读出内容 PC PC + 1
执行指令 ③ 若 c = 1 则: ALU IP
ALU offset ( IR 低字节) 二者相加,结果送 PC
否则,顺序执行结束,判中断
形成下条指令地
址
子程序返回指令 RET
读取指令 ① AR PC
② 读主存, IR 读出内容 PC PC + 1
执行指令 ③ AR SP
SP SP + 1
④ 读主存 , PC 读出内容
结束,判中断
形成下条指令地
址
程序计数器
运算器 控制器
控制信号产生部件
用于运算器
输入设备 输出设备
主存储器
控制总线
0001
78BD
0790
CZVS
接口
.
PC
ARIR
数据总线
地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
2000
E7092007128044FA8F00
2000
2007
3041
主振 脉冲
程序 计数器
运算器 控制器
控制信号产生部件
用于运算器
输入 / 出设备主存储器
控制总线
CZVS
接口
.
PCAR
IR
数据总线地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
30412000
2000
2001
0001
4275
4275
AR PC
读内存, IR 读出内容R0 R0 + R1
PC PC+1
+
ADD R0,R10001
78BD
07902000
E7092007128044FA8F00
2007
程序 计数器
运算器 控制器
控制信号产生部件
用于运算器
输入 / 出设备主存储器
控制总线
CZVS
接口
.
PCAR
IR
数据总线地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
47252001
2001
2002
0790
4275
4275
AR PC
读内存, IR 读出内容R9 R0 + 0
PC PC+1
0+
MOV R9, R00001
78BD
07902000
E7092007128044FA8F00
2007
78BD
程序计数器
运算器 控制器
控制信号产生部件
用于运算器
输入设备
主存储器
控制总线
0 401
CZVS
接口
.
PC
ARIR
数据总线地址总线
ALU
乘商寄存器
66881234
R9 4275
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
3041802
E709
2003
20032007
2004
0
ARPC , PC PC+1读内存, IR 读出内容
读内存, AR 读出内容ARPC , PC PC+1
写内存 , 数据总线 R9+0
4725
+
MOV [2007], R90001
4275
07902000
E7092007128044FA8F00
2007
程序 计数器
运算器 控制器
控制信号产生部件
用于运算器
输入 / 出设备主存储器
控制总线
CZVS
接口
.
PC
ARIR
数据总线地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
30412004
2004
2005
1280
A
ARPC
读内存, IR 读出内容
读设备, R0 读出内容
PC PC+1
80
ARI/O port
IN 8000010790
2000
E7092007128044FA8F00
2007 4275
程 序计数器
运算器 控制器
控制信号产生部件
用于运算器
输入 / 出设备主存储器
控制总线
CZVS
接口
.
PC
ARIR
数据总线地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
A2005
2005
2006
44FA
IP , ARPC
若 C=1, 则 PCIP+offset读内存, IR 读出内容PC PC+1
否则 顺序执行
2005 2000 2006
JR C, 8000001
4275
07902000
E7092007128044FA8F00
2007
程序 计数器
运算器 控制器
控制信号产生部件
用于运算器
输入 / 出设备
控制总线
CZVS
接口
.
PC
ARIR
数据总线地址总线
ALU
乘商寄存器
66881234
R9
操作数地址
操作码
寄存器组
地址寄存器
指令寄存器
节拍发生器
主振 脉冲
A2006
2006
FF0
8F00
IP , ARPC
读内存, IR 读出内容PC PC+1
读内存 ,PCMEM
2007
RET
ARSP
FF0
FF1
SP SP+1
A00
堆栈 FF0 单元存 A00
0001
4275
07902000
E7092007128044FA8F00
2007
PC 0
AR PCPCPC+1
IR(AR)
/MAP
寄存器之间运算与传送
读、写内存AR 地址
AR 地址
读、写内存 或 I/O 接口
读、写内存 PC 地址
( 2 ) 16 位机的基本指令、扩展指令执行流程图
A组
B组
C组
D组
/Reset
B 、 C 、 D组
微程序控制器方案
PC 0
AR PCPCPC+1
IR(AR)
寄存器之间运算与传送
读、写内存AR 地址
AR 地址
读、写内存 或 I/O 接口
读、写内存 PC 地址
( 2 ) 16 位机的基本指令、扩展指令执行流程图
A 组B组
C组
D组
/Reset
B 、 C 、 D组
硬连线控制器方案
二、控制器的功能与组成
1. 控制器的功能 : 控制执行指令 控制各部件协调运行,即为各部件提供控制信号。
2. 控制器的组成: 程序计数器 指令寄存器 指令步骤标记线路 提供控制信号的部件
分类 : 微程序的控制器 硬布线的控制器
1. 控制器的功能计算机的功能是执行程序
程序是依次排列起来的指令代码
控制器的功能就在于 : 正确地分步完成每一条指令规定的功能 , 正确且自动地连续执行指令 ;
再进一步说,就是向计算机各功能部件提供 协调运行每一个步骤所需要的控制信号。
指令的执行过程 冯 . 诺依曼 结构的计算机 即存储程序的计算机,设置内存,存放
程序和数据,在程序运行之前存入。
执行程序: 正确从程序首地址开始; 正确分步执行每一条指令, 并形成下条待执行指令的地址; 正确并自动地连续执行指令, 直到程序的最后一条指令。
每条指令的执行步骤— 读取指令
指令地址送入主存地址寄存器读主存,读出内容送入指定的寄存器
— 分析指令— 按指令规定内容执行指令
不同指令的操作步骤数, 和具体操作内容差异很大 ,
— 检查有无中断请求若有,则响应中断并转中断处理若无,则转入下一条指令的执行过程
形成下一条指令地
址R_R 类型指令读写内存类型指令输入输出类型指令其他类型指令
可能执行 一次或多次
是一次读内存操作
公共操作
公共操作
是每一条指令的特定操作
2. 控制器的组成① 程序计数器 PC :存放指令地址,有 +1 或接收新值功能。
② 指令寄存器 IR :存放指令内容:操作码与操作数地址。
主脉冲源与启停控制线路,按需要给出主脉冲信号。
③ 指令执行步骤标记线路: 指明每条指令的执行步骤。
④控制信号记忆或产生线路:给出计算机各功能部件部件协同运行所需要的控制信号。
运算器部件 主存储器部件总线及输入 / 输出接口 ( 输入 / 输出设备 )
控制器部件
各部件包括
也包括
设计中的难点,在于解决对运算器、控制器的控制
TEC-2000 教学机系统的组成
计算机
终端
PC 机
微程序控制器
运算器(8 / 16 位 )
主存储器( 8 / 16
位)按键 开关 指示灯
串行接
口
接口实验
中断实验
内存扩展实验
电 源+5V
硬布线控制器
条件码
微指令下地址部件
微指令地址映射部件
晶振
启停控制
节拍发生器
时序 控制信号形成部件
移位信号进位信号
状态位触发器
8位运算器部件
8 位 运算器 部件
8位内存储器部件
8位内存储器部件
高位地址寄存器
程序计数器
指令寄存器8 8位 位
微指令寄存器
控制存储器
2片译码器
( )在运算器芯片内
3片译码器电平转换线路时钟分频线路
扩展实验串行接口芯片
串行接口I ntel 8251芯片
中断实验线路
+5V直流电源
其他通用
I / O 接口
扩展实验
低位地址寄存器
CK
IR
PC
转移地址 +1
送地址寄存器
Cout
移位信号
Cin
移位信号
/OE
C Z V S SSTCy ZrOv F
移位信号
SCI SSHCi n
移位信号
几个寄存器的接收允许
送内部总线的选择控制
I / O内存与 片选信号及读写命令 /送入 出设备
移位信号
Ci n
8 I B位内部总线来自八位开关 来自八位开关
片选
读写命令/ OE
8位数据总线
高位地址总线
8位数据总线
3 5
48
8低 位地址总线
送译码电路
并行数据
/入 出
C_/D
I/O
读写命令
片选
片选
读写命令
/ OE
/ OE( )接地
8 I B位内部总线
/串行入 出
时钟信号
CLK
DC23~20 DC13~10
/MIO REQ /WE
A3~A0 B3~B0 I8~I0
SST2~SST0 SCI1~SCI0SSH1~SSH0
/OE内存
3位地址I / O端口高位地址
3 4
3 ( )个无锁按键 中断源
/INT
/OE
{下地址字段
控制命 令字段
. . . . . . . . .
. . . . . .
INTS
INTP
Reset
3
SCC
16
寄存器
当前微指令地址
/CC
2
/串行入 出
2
.
ARL
ARH
/OE
CLK
3-3 图 TEC-2000总体框图
时序控制
信号
形成部件
译码
IR PC
输出
设备
输入
设备主
存运算器部件
节拍
启停
地址寄存器械
数据总线
地址总线控制总线
….
控制条件
控制器信号
主振 硬连线方案的控制器
PC 0
AR PCPCPC+1
IR(AR)
寄存器之间运算与传送
读、写内存AR 地址
AR 地址
读、写内存 或 I/O 接口
读、写内存 PC 地址
( 2 ) 16 位机的基本指令、扩展指令执行流程图
A组
B组
C组
D组
/Reset
B 、 C 、 D组
(3) 控制器应提供的控制信号Y15~Y0 用 16 个指示灯显示结果
D15~D0
RAM15
Q15
RAM0
Q0
CinCyF=0OverF15
运 算 器 部 件(4 片 Am2901)
A3~0 B3~0I8~6 用 16 个数据开关提供输入数据
CZVS
SSH
SST SCI
I5~3 I2~0
SCI SSH A 口 B 口I8~6 I5~3 I2~0 SST 通过 24 位微型开关 提供控制信号
各用四个指示灯显示状
态
Gal20V8
Gal20V8
对运算器的控制24 位控制信号,同 24 位微型开关内容, A4~A0 , B4~B0 , I8~I6 , I5~I3 , I2~I0
SST2~0 , SSH1~0 , SCI1~0
寄存器分配: R4 : SP R5 : PC
约定用法: R0 : I/O 指令约定使用,也是通用累加器
读写主存储器或 I/O 接口 从学习指令执行步骤考虑,理解对主存储器读写的控制,分成两步: 1. 传送主存地址,以选择被读写的存储单元; 2. 给出读写命令, 读操作时,把读出数据保存起来, 写操作时,还要给出写入的数据。
从学习指令执行步骤考虑,理解对接口电路读写的控制,分成两步: 1. 传送 IO 端口地址,以选择被读写的芯片; 2. 给出读写命令, 读操作时,把读出数据保存起来, 写操作时,还要给出写入的数据。
对内存和 I/O 接口的读写 /MIO ( 0 :有内存或串口读写, 1 :无) REQ ( 0 :读写内存, 1 :读写串行
口) /WE ( 0 :写操作, 1 :读操作)
0 0 0 写内存0 0 1 读内存
0 1 0 写串口
0 1 1 读串口1 XX 无内存和串口的读写操作
对总线的控制 总线是用于连接计算机各个功能部件的线路和连接线,通常由具有三态输出功能的器件构成,以便用分时地方式,在不同时刻把不同的数据发送到总线上,任何时刻仅能有一个数据发送到总线上; 总线上的数据可以被送到需要接收数据的部件或者线路,多个线路可以同时接收同一个来源数据。 计算机中总要使用 3 种类型的总线: 数据总线,地址总线,控制总线
对内部总线和特定寄存器的控制选择送内部总线的信息来源
DC12~0 信号名称 注释 000 /SWTOIB 来自开关
001 /RTOIB ALU 的输出
010 /ETOIB 符号扩展 16 位
011 /FTOIB 状态 位输出
100 /STOIB 符号扩展 8 位
101 /INTVH 中断向量的
110 /INTVL 高、低 8 位
110 NC 不用
控制指定寄存器接收信息DC22~0 信号名称 注释 000 NC 不用
001 /RIR 指令寄存器
010 /GARL 地址寄存器低位
011 /GARH 地址寄存器高位
100 /INTR 取原中断优先级
101 /INTN 置新中断优先级
110 /EI 开中断
110 /DI 关中断
硬连线(组合逻辑)控制器
1. 组合逻辑控制器的组成和运行原理
2. 组合逻辑控制器的设计过程与技术 ( 1 ) 指令系统与指令编码设计 ( 2 ) 控制器应提供的控制信号 ( 3 ) 指令执行步骤划分和功能确定 ( 4 ) 节拍发生器( TIMING )设计与实现 ( 5 ) 时序控制信号产生部件的设计与实现
1. 组合逻辑控制器的组成与运行原理
在讲解过微程序的控制器之后,再来讨论组合逻辑控制器的组成和运行原理就变得容易了 , 因为二者有很多共同点。 它们都用于控制指令的执行过程 , 并且使用几乎相同的执行步骤和几乎完全相同的控制信号,来完成对控制器之外的其他各功能部件的控制作用,因此可以简化对这些内容设计原理和方法的论述。
两种控制器实质性的差别,表现在处理指令各执行步骤的接续关系的方案和给出时序控制信号的办法完全不同,从而造成控制器的具体组成和运行原理、运行性能上的一些差异。比较它们的逻辑图可看出两种控制器组成的主要差异: 微程序控制器中的控存变成这里的时序信号产生部件,还取消了微指令寄存器;原来的下地址部件变成了这里的节拍发生器;原来的微地址映射部件变成这里的操作码译码器;一些信号连接关系也有某些变化。
组合逻辑控制器的组成与运行原理 ( 1 )组合逻辑控制器用节拍发生器( Timing ,几个触发器构成的时序逻辑电路)不同的状态 组合来区分一条指令不同的执行步骤,指令执行步骤的接续是通过变换节拍发生器的状态 组合完成的,不同于微程序控制器中通过下地址部件给出不同的微指令地址来实现。这里用节拍发生器取代了原来的下地址部件。
( 2 )组合逻辑控制器是通过由 “与—或” 两级逻辑关系构成的时序控制信号产生部件来直接给出全部的时序控制信号。送到第一级各“与门”的输入信号是指令操作码和节拍发生器的节拍状态 ( 可能还有控制条件 ) ,每个与门产生一个与项输出,相关的与项输出信号送到第二级的 “或门” ,每个或门输出的就是一个时序控制信号。全部的时序控制信号由许多个 “与—或”逻辑门给出。与用控制存储器存放全部控制信号的微程序控制方案不同,这里用时序控制信号产生部件取代了原来的控制存储器,还取消了那里的微指令寄存器线路,把控制信号直接送到被控制的部件。
时序控制
信号
形成部件
译码
OP IR PC
输 出
设 备
输 入
设 备
主存储器
部件
运算器 部件
启停
地址寄存器
数据总线
地址总线控制总线
….
控制条件
主振组合逻辑控制器的组成和运行原理
节拍发生
器
程序计数器
指令寄存器
插针组合逻辑应短接
插针组合逻辑应短接
GAL1 GAL2 GAL3 GAL5 GAL7
GAL6
TimingDRV 244 IRHDRV 244
MACH
IRH 377 START/HALT GAL
TIMING GAL
Step Reset /Start
CK2 CK
送 ALU等部件
送两片中断GAL
和地址寄存器
15 21 22
2 3 4 5 6 7 8 9
Reset10
1
CK111
IBH7~IBH0
18 17 14 13 8 7 4 3
IRH7~IRH0
19 16 15 12 9 6 5 2
T4~T0
OC_/M1416 17 18 19 20
2 4 6 8 11T4~T0
18 16 14 12 9
IRH7~IRH02 4 6 8 11 13 15 17
IRH7~4IRH3~018 16 14 129 7 5 3
/WE
6~11 14 231~5 1~5 6~11 14 23
REQ
1~5 6~11 14 23 1~5 6~11 14 23
/MIOI2~0
16 17 18 20~22
I8 ~ I3
16~18 20~22 15~18
2~5
15 16 21 22
3-4 16图 位组合逻辑控制器线路逻辑图
131313/OE/OE
1313/OE
SST SCI SSH
16~22
DC2 DC115~22
A3~A0
I8~I3/MIO REQ /WE I2~I0
B3~B0SST SCI SSH
DC2 DC1
MACH_ON
LinkNewIns
IRL7~IRL4
NewIns MicroP
Start Clk
/OE/OE
IRL3~IRL0
GAL410~7 10~7
19~22
1~5 6~11 14 23
..
2 4 5 6 7
5个控制开关及其它有关控制信号
14
1~10SwitchCtrl GAL22 /GAL_OE
某些控制信号
1516 18~21
/INT 23
17
ZC
T4~T0
..
2~5
15 16 21 22
这些短路子组合逻辑应将每排左边两个短接
......
..................
D7~D0
Q7~Q0 CLK
1A1~A4 2A1
1Y1~Y4 2Y1
1A1~A4 2A1~2A4
1Y1~Y4 2Y1~2Y4
/OE1
节拍信息
指令信息
/GIRIRLDRV 244
IRL 377
2 4 6 8 11 13 15 17
IRL7~IRL0
IBL7~IBL0
18 17 14 13 8 7 4 3
19 16 15 12 9 6 5 2
18 16 14 12 9 7 5 31A1~1A4 2A1~2A4
1Y1~1Y4 2Y1~2Y4
Q7~Q0
D7~D011 CK1
/OE /GIR1
G1G2
1
19/ETOIB
CLK
教学机的组合逻辑控制器
8 或 16 位的指令寄存器,
1 片 100引脚的 MACH ,5 片 8 输出引脚的 GAL ,二者互斥运行,构成时序控制信号形成部件,提供35 位的控制信号。
2 片 GAL 与 GAL3 共同提供运算器 A 、 B 口信号。
节拍发生器 (1 片 GAL) ,产生 4 位节拍状态 信号。
2 片 GAL 用于启动、停止等控制电路。GAL1~GAL7 公用于组合和微程序两种控制器。
2. TEC-2000 16 位机指令与执行流程设计 TEC-2000 是原有型号的基础上,经过较大的改进与完善重新设计的,分为 16 位和 8 位字长的两种型号。
16 位机与 8 位机,从其指令格式、指令系统和运行的软件来看,是完全不同的两种机型,但是从整体硬件组成和使用的器件来看,又有相当多的类似之处。再从设计与实现的基本原理来看,二者同样有许多类似或相同之处,例如各自对组合逻辑和微程序两种控制器使用几乎完全相同的执行步骤。
关于 16 位机组合逻辑控制器设计过程中,可以直接跳过对指令执行步骤的划分和功能确定,对使用的控制信号的选择等内容的详细讨论,直接引用微程序控制器的设计结果即可;针对两种控制器的区别,重点讲解节拍发生器的设计与实现,时序控制信号产生部件的设计与实现,并强调设计中有关的原理性知识,顺便提到一些实现中对所用电路的选择原则。
PC 0
AR PCPCPC+1
IR(AR)
寄存器之间运算与传送
读、写内存 AR 地址
AR 地址
读、写内存 或 I/O 接口
读、写内存 PC 地址
16 位机的基本指令、扩展指令执行流程图(组合 逻辑方案)
A组
B组
C组
D组
/Reset
B 、 C 、 D组
1000
0000
0010
0011
0110 0100
0111 0101
0→ PC、关中断
PC→ AR PC+1→ PC、
MEM→ I R
/ MAP
12151719
131416181A1C2024
DR+SR→ DR0405060708090A0B0C0D0E0F1011
DR-SR→ DRDR and SR→ DR
DR xor SR→ DRDR-SR
DR or SR→ DR
DR and SRSR→ DR
DR+1→ DRDR-1→ DRSHL DRSHR DR判断是否转移
PC+OFFSET→ PC
SP-1→ SP AR、SP→ AR SP+1→ SP、
DR→ ARSR→ AR
PC→ AR PC+1→ PC、PC→ AR PC+1→ PC、PC→ AR PC+1→ PC、SP→ AR SP+1→ SP、
PORT→ AR R0→ I OI O→ R0
FLAG→ MEMMEM→ FLAG
MEM→ DRSR→ MEM
MEM→ QMEM→ PC
SP-1→ SP AR、
PC→ MEM Q→PC、
转移
不转移
, RESET加电启动 按 按钮
00
01
02
03
30
STR→ Q、判中断
31
PC→ AR PC+1→ PC、
伪中断处理,空操作
3A
无中断
1B1D1E
1F23
21
22
有中断
A组
B D、 组
D组
B组
7-4 16图 位机微程序基本指令流程框图
加电启动时,执行 0PC
接下来的两步,完成取指操作
按指令具体功能 ,
再分别用 1 、 2 、3 、 4 步完成不同指令组的中各条指令的执行过程
最后检查中断请求信号,有请求时则响应中断,否则开始下一条指令的执行过程
1000
0000
0010 0011
0110 0100
0101
0111
指
令
操
作
码
指令操作码
指
令
操
作
码
16 位机组合逻辑控制器的指令执行流程设计
XXXX
XXXX
XXXX
指
令
操
作
码
(1) 节拍发生器的设计原理 TEC-2000 16 位机实现了 29 条指令,使用了 8 个节拍(不含响应中断的步骤),为此,节拍发生器至少要使用 4 位触发器,可以产生最多 24 个节拍; 使用 4 个触发器(分别命名为 T3 T2 T1 T0 )不同的状态 组合来区分每一个节拍,例如,用 T3 T2 T1 T0 =1000 来标识最顶上一行的那个节拍,如此等等,正象前页一图所示。如何为每个节拍分配 4 个触发器的状态 组合,需要遵循的原则是:尽量做到从当前节拍切换到下一个节拍时,只有一个触发器的状态发生变化,办不到时,也要尽量使状态发生 变化的触发器数目最少。此外,还要考虑有利于对写出的节拍发生器的逻辑表达式的逻辑化简。前一页给出的设计结果已经较好地体现了上述设计要求。 接下来的工作是按上图给出的设计结果,写出设计与实现这一节拍发生器的线路所依据的逻辑表达式。
节拍发生器的设计原理 按照节拍状态 转换图(有限状态 图)的结果,设计这一节拍发生器的逻辑线路的首要任务,是写出该节拍发生器线路的逻辑表达式。具体要求是写出反映每一个触发器的完整的状态 转换序列的逻辑表达式。在该表达式中:( 1 )用一个与项表示在一个节拍中该触发器取值为 1 的一种状态 ,参加与运算的元素是: 进到本节拍的前一个节拍的 4 个触发器的取值状态 (用 Ti 和 /Ti 分别表示该触发器的 1 状态 和 0 状态 ); 从前一个节拍得以进到本节拍的限制条件(可能没有),如指令组(用代表该指令组的表达式表示)或具体的一条指令(用相应指令的操作码表示)等。( 2 )再把所有节拍中该触发器取值为 1 的情形用或项表示在一个表达式中。下面看实际的例子。
PC 0
AR PCPCPC+1
IR(AR)
寄存器之间运算与传送
读、写内存AR 地址
AR 地址读、写内存或 I/O 接口
读、写内存 PC 地址
16 位机的基本指令、扩展指令执行流程图
A 组 B 组
C 组 D 组
/Reset
B C D 组
1000
0000
0010
0011
0110 0100
0111 0101
T3 := C-M# * /Reset
T2 := C-M#*Reset*/T3*/T2*T1*/T0*IR15 + C-M#*Reset*/T3*T2*T1*/T0 + C-M#*Reset*/T3*T2*T1*T0 + C-M#*Reset*/T3*T2*/T1*/T0 * IR15*IR14*IR11
T1 := C-M#*Reset*/T3*/T2*/T1*/T0 + C-M#*Reset*/T3*/T2*T1*/T0 + C-M#*Reset*/T3*T2*T1*/T0 * IR15*IR14*/IR11 + C-M#*Reset*/T3*T2*/T1*/T0 * IR15*IR14*IR11
T0 := C-M#*Reset*/T3*/T2*T1*/T0*/IR15 + C-M#*Reset*/T3*T2*T1*T0 + C-M#*Reset*/T3*T2*T1*/T0 * IR15*IR14*/IR11 + C-M#*Reset*/T3*T2*/T1*/T0 * IR15*IR14*IR11
T3 T2 T1 T0
用 VHDL 语言描述节拍发生器的状态 转换 --the state changes at the rising edge of the clocklibrary ieee;use ieee.std_logic_1164.all;
entity state_mac is port ( CP, RESET: in std_logic; IR: in std_logic_vector (15 downto 0); state_out: out std_logic_vecto r(3 downto 0) );end entity state_mac;
architecture performance of state_mac isbegin process (CP, RESET) is variable state: std_logic_vector(3 downto 0) := "ZZZZ"; begin if (RESET = '0') then state := "1000"; ELSE If cp’event and cp=’1’ then case state is when "1000" => state:= "0000"; when "0000" => state:= "0010"; when "0010" => if (IR(15 downto 14)="00" or IR(15 downto 14)="01") then state := "0011"; --Instuctions Group A else state := "0110"; --Instructions Group BCD end if; when "0011" =>state := "0000"; when "0110" => if (IR(15 downto 14)="11" AND IR(11)='0') then state := "0111"; --Instructions Group C else state := "0100"; --Instructions Group BD end if;
when "0100" => if IR(15 downto 14)="11" then state := "0111"; --Instruction Group D else state := "0000"; -- Group B end if; when "0111" =>state := "0101"; when "0101" => state := "0000"; --memory reading or writing when others =>state := state; end case; end if; end if; state_out <= state; end process;end architecture performance;
(2) 时序控制信号形成部件的设计与实现
时序控制信号形成部件用于提供计算机各功能部件运行所要求的每一位控制信号。设计与实现的过程是: 1. 设计指令执行流程表; 2. 按流程表写出每一位控制信号的逻辑表达式;
用一个与项表示一位控制信号在流程表的一个横行中为 1 的情形; 用一个或项汇总这位控制信号在流程表中所有横行中为 1 的全部情形; 按前两步方法依次写出每一个控制信号的逻辑表达式,若可能,适当化减。
3. 编译得到的逻辑表达式,并写入现场可编程芯片中 4. 对设计结果进行调试、改错,直到全部正确。 5. 把新设计的指令与原有指令用在同一程序中并运行,检查设计结果的正确性。
下址 CI3~0 SCC3~0 MRW I2~0 SA I8~6 SB I5~3 B 口 A 口 SST SCISSH DC2 DC1
0000 无 100 001 2 0 5 5 0 4 3 0
0010 关 001 000 1 0 0 0 0 0 1 0
00 2 0 100 000 1 0 0 0 0 0 0 0
0011 00000000 100 001 3 0 DR SR 1 0 0 0
0011 00000111 100 100 3 0 DR SR 0 0 0 0
0110 10000010 100 111 1 0 0 0 0 0 3 2
0100 10000010 011 111 3 0 0 0 0 0 0 0
0110 11001110 100 011 2 0 5 5 0 4 3 0
0100 11001110 001 111 0 0 0 0 0 0 0 0
0111 11001110 100 011 3 1 4 0 0 0 3 0
0101 11001110 000 010 2 0 5 5 0 0 0 1
指令执行流程表举例 ADD DR, SR MVRR DR, SR IN IO-PORT CALA ADR
节拍 指令操作码
按流程表写出每一位控制信号的逻辑表达式 : 用一个与项表示一位控制信号在流程表的一个横行中为 1 的情形; 用一个或项汇总这位控制信号在流程表中所有横行中为 1 的全部情形; 按前两步方法依次写出每一个控制信号的逻辑表达式 , 若可能适当化简。例如: MRW 字段中的 : R = /T3*T2*/T1*/T0*IR15*/IR14*/IR13*/IR12*/IR11*/IR10*IR9*/IR8
I2~I0 字段中的 : I2 = /T3*/T2*T1* T0*/IR15*/IR14*/IR13*/IR12*/IR11* IR10*IR9* IR8 + /T3* T2* T1*/T0* IR15*/IR14*/IR13*/IR12*/IR11*/IR10*IR9*/IR8 + /T3* T2*/T1*/T0* IR15*/IR14*/IR13*/IR12*/IR11*/IR10*IR9*/IR8 + /T3* T2*/T1*/T0* IR15*/IR14*/IR13*/IR12*/IR11*/IR10*IR9*/IR8 /I0 = /T3*/T2*T1*/T0 + /T3*/T2*T1* T0*/IR15*/IR14*/IR13*/IR12*/IR11* IR10*IR9* IR8
+ /T3*T2*/T1* T0* IR15* IR14*/IR13*/IR12* IR11* IR10*IR9*/IR8 3. 编译得到的逻辑表达式,并写入现场可编程芯片中
4. 把新设计的指令与原有指令用在同一程序中并运行,检查 设计结果的正确性。 5. 对设计结果进行调试、改错,直到全部正确 ;
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY decode IS PORT ( IR: IN STD_LOGIC_VECTOR (15 DOWNTO 0); STATE: IN STD_LOGIC_VECTOR (3 DOWNTO 0); FLAG: IN STD_LOGIC_VECTOR (3 DOWNTO 0); MIO: OUT STD_LOGIC; REQ: OUT STD_LOGIC; WE: OUT STD_LOGIC; ADDR_A: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); ADDR_B: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SCI: OUT STD_LOGIC_VECTOR(1 DOWNTO 0); SSH: OUT STD_LOGIC_VECTOR(1 DOWNTO 0); I: OUT STD_LOGIC_VECTOR(8 DOWNTO 0); SST: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); DC1: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); DC2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END;
ARCHITECTURE behav OF decode IS SIGNAL C,Z: STD_LOGIC; SIGNAL CON: STD_LOGIC_VECTOR(33 DOWNTO 0); SIGNAL OP: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DR,SR: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN C<=FLAG(3); Z<=FLAG(2); PROCESS (IR,STATE,C,Z) BEGIN OP<=IR (15 DOWNTO 8); DR<=IR (7 DOWNTO 4); SR<=IR (3 DOWNTO 0);
CASE STATE IS WHEN "1000" => CON<="1000101010100000110010010000000111"; --0→ PC WHEN "0000" => CON<="1000101010101000100000110000001011"; --PC→AR WHEN "0010" => CON<="0010000000000000010000000000000001"; --MEM→IR
WHEN "0011" => CASE OP IS -- 执行 A 组指令 WHEN "00000000" => CON<="100"&SR&DR&"00000110000010010000000"; --ADD WHEN "00000001" => CON<="100"&SR&DR&"00000110010010010000000"; --SUB WHEN "00000010" => CON<="100"&SR&DR&"00000111000010010000000"; --AND ………….. WHEN "01000001" => CON<="1000101010100000110001010000100000"; --JR WHEN "01000100" => CON<="1000101010100000"&C&"10001010000100000"; --JRC WHEN "01000101" => CON<="1000101010100000"& NOT C&"10001010000100000"; --JRNC …………..
WHEN "0110" => CASE OP IS -- 执行 B 、 C 、 D 组指令(传送地址) WHEN "10000000" => CON<="1000101010101000100000110000000011"; --JMPA WHEN "10000001" => CON<="100"&SR&"000000000010001000000000011"; --LDRR WHEN "10000010" => CON<="1000000000000000010001110000100011"; --IN ……….. WHEN "10000011" => WHEN OTHERS=>NULL;END CASE;
WHEN "0100" => CASE OP IS -- 执行 B 、 D 组指令(读写操作) WHEN "10000000" => CON<="0010000010100000110001110000000000"; --JMPA WHEN "10000001" => CON<="0010000"&DR&"00000110001110000000000"; --LDRR WHEN "10000010" => CON<="0110000000000000110001110000000000"; --IN ………..END CASE;
WHEN "0101" => CASE OP IS -- 执行 D 组指令(读写操作) WHEN "11001110" => CON<="0000101010100000100000100000010000"; --CALA WHEN OTHERS=>NULL; END CASE; WHEN OTHERS=>NULL;END CASE;
MIO<=CON (33); REQ<=CON (32); WE<=CON (31); ADDR_A<=CON (30 DOWNTO 27); ADDR_B<=CON (26 DOWNTO 23); SCI<=CON (22 DOWNTO 21); SSH<=CON (20 DOWNTO 19); SST<=CON (9 DOWNTO 7); I<=CON (18 DOWNTO 10); DC1<=CON (6 DOWNTO 4); DC2<=CON (3 DOWNTO 0); END PROCESS;END;