Skip to content

Latest commit

 

History

History
236 lines (192 loc) · 8.01 KB

微指令设计.md

File metadata and controls

236 lines (192 loc) · 8.01 KB

微指令文档

基本参数

位宽:16
寄存器数:4+4+4=12
真寄存器:AX、BX、CX、DX、PC、MAR、MDR、IR、sp_A、sp_B、sp_C、imm
伪寄存器:acc、sh、se、cmp、RAM
形式寄存器:R1、R2、R3

部件说明

控制单元 CU

子部件:CM、uPC)
输入:指令译码器【微地址】、立即数标志
输出:控制信号(上升沿之后才有效)、形式寄存器号
CLK:正向

寄存器使能器 FINDER

根据寄存器号,找到寄存器。根据CU给定的形式寄存器,施加控制信号

子部件:74138、寄存器

输入:形式寄存器号、实际寄存器号

输出:寄存器控制信号

指令译码器 DECODER

翻译并拆解IR中的指令。取指完成后一直有效。

子部件:???

输入:IR

输出:微地址(uAddr)、立即数标志、实际寄存器号

普通寄存器 REGISTER

输入:DataBus

输出:DataBus

控制(来自寄存器使能器):r(i), w(i)

CLK:反向

MAR

输入:DataBus
输出:主存

主存接口 RAM

约定存取基本单位为一个字(16bit)

输入:MAR、DataBus
输出:DataBus

计算单元ALU

输入:sp_A、sp_B
输出:DataBus
控制:r(acc)、ALU(..)

比较单元CMP

输入:sp_A、sp_B
输出:DataBus
控制:r(cmp)、CMP(..)

位移单元SH

输入:sp_A、sp_B
输出:DataBus
控制:r(sh)、SH(..)

选择单元SE

输入:sp_A、sp_B、sp_C
输出:DataBus
控制:r(se)、SE(..)

指令集与格式 IS

基于MIPS16的缩减版本,以下操作数均视为无符号数,立即数全部认为是低6位。

寻址格式+地址标记占3位 000~110 表示寄存器 111 表示立即数,立即数在PC指令的下一个地址中,且无论是几地址指令,最多使用一个立即数,目的寄存器不可以是立即数

指令列表

指令名称 15..9 8..6 5..3 2..0 含义
sllv 0A R1 R2 R3 R1<= R2 << R3 shift left logic
srlv 0D R1 R2 R3 R1<= R2 >> R3 v=val
sltu 10 R1 R2 R3 R1<= (R2 < R3 ? 1 : 0) ?less?
addu 13 R1 R2 R3 R1<= R2 + R3 u=unsigned
subu 16 R1 R2 R3 R1<= R2 - R3
and 19 R1 R2 R3 R1<= R2 & R3
or 1C R1 R2 R3 R1<= R2 | R3
xor 1F R1 R2 R3 R1<= R2 ^ R3
nxor 22 R1 R2 R3 R1<= ~(R2^R3) not XOR
jz 25 100 R2 R3 PC<= (R2 ? PC : R3) jump zero
ld 29 R1 100 R3 R1<= [R3] load
str 2C 100 R2 R3 [R2]<= R3 store
mov 30 R1 100 R3 R1 <= R3
halt 7F 111 111 111 stop 停机

等效指令

指令名称 示例 等效形式
nop NOP sllv R1,R1,0
mov MOV AX,BX sllv AX,BX,0
cmp CMP AX,BX,CX nxor AX,BX,CX 在非0意义下等价

微指令动作表

假设RAM按字寻址

微地址 功能 IS指令 节拍 动作 字节码
00 取指 / 1 r(PC); w(MAR)
01 取指 / 2 r(PC); w(sp_A)
02 取指 / 3 ALU(A+1); r(acc); w(PC)
03 取指 / 4 r(RAM); w(IR); jmp(i)
05 取立即数 / 5 r(PC); w(MAR)
05 取立即数 / 6 r(PC); w(sp_A)
06 取立即数 / 7 ALU(A+1); r(acc); w(PC)
07 取立即数 / 8 r(RAM); w(imm); jmp(f)
0A sllv 1 r[R3]; w(sp_A)
0B sllv 2 r[R2]; w(sp_B)
0C sllv 3 SH(l); r(sh); w[R1]; jmp(0)
0D srlv 1 r[R3]; w(sp_A)
0E srlv 2 r[R2]; w(sp_B)
0F srlv 3 SH(r); r(sh); w[R1]; jmp(0)
10 sltu 1 r[R3]; w(sp_B)
11 sltu 2 r[R2]; w(sp_A)
12 sltu 3 CMP(A<B); r(cmp); w[R1]; jmp(0)
13 addu 1 r[R3]; w(sp_B)
14 addu 2 r[R2]; w(sp_A)
15 addu 3 ALU(A+B); r(acc); w[R1]; jmp(0)
16 subu 1 r[R3]; w(sp_B)
17 subu 2 r[R2]; w(sp_A)
18 subu 3 ALU(A-B); r(acc); w[R1]; jmp(0)
19 and 1 r[R3]; w(sp_B)
1A and 2 r[R2]; w(sp_A)
1B and 3 ALU(A&B); r(acc); w[R1]; jmp(0)
1C or 1 r[R3]; w(sp_B)
1D or 2 r[R2]; w(sp_A)
1E or 3 ALU(A|B); r(acc); w[R1]; jmp(0)
1F xor 1 r[R3]; w(sp_B)
20 xor 2 r[R2]; w(sp_A)
21 xor 3 ALU(A^B); r(acc); w[R1]; jmp(0)
22 xnor 1 r[R3]; w(sp_B)
23 xnor 2 r[R2]; w(sp_A)
24 xnor 3 ALU(A xnor B); r(acc); w[R1]; jmp(0)
25 jz 1 r[R2]; w(sp_C)
26 jz 2 r[R3]; w(sp_A)
27 jz 3 r(PC); w(sp_B)
28 jz 4 SE(0); r(se); w(PC); jmp(0)
29 ld 1 r[R3]; w(MAR)
2A ld 2
2B ld 3 r(RAM); w[R1]; jmp(0)
2C str 1 r[R2]; w(MAR)
2D str 2 r[R3]; w(RAM);
2E str 3 jmp(0)
30 mov 1 r[R3]; w[R1]
N/A halt N/A N/A

微总线号

动作 备注
r[..]+r(..) 0..3 寄存器
w[..]+w(..) 4..7 寄存器
ALU(..) 8..13 74181
SH(..) 16..17 01左移00右移
CMP(..) 18..19 01小于10等于11小等
SE(..) 20..21 00:0跳A,1跳B
jmp(..) 22..23 00不跳01条件10强跳11清零
G / 停机

寄存器号r w [..] (..)

下表中对应位=1表示激活

寄存器 备注
0 [R1] 形式寄存器
1 [R2] 形式寄存器
2 [R3] 形式寄存器
3 PC
4 MAR
5 MDR
6 IR
7 sp_A
8 sp_B
9 sp_C
A imm
B acc
C cmp
D sh
E se
F RAM

ALU控制信号

示例程序

  MOV AX, .ad1
  LD  BX, AX
  ADD BX, BX, AX
  MOV CX, 0
.loop
  ADD AX, AX, 1
  LD  DX, AX
  ADD CX, CX, DX
  CMP DX, AX, BX
  JZ  DX, .loop
  STR .ad2, CX
  HALT
.ad1
5
1
3
5
6
8
.ad2