微程序控制器

计算机组成实验

Posted by Pele on May 24, 2022

2.5 微程序控制器实验原理

微程序控制器的基本任务就是完成当前指令的翻译和执行, 既将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作

硬件组成

截屏2022-05-24 19.17.00

  • 控制存储器: 采用三片2816的EEPROM组成
  • 微命令寄存器: 18位, 包括P字段和控制字段
  • 微地址寄存器: 6位 T2时刻下一条微指令的地址写入微地址寄存器(不进行判别测试时)
  • ALU: Arithmetic logic unit
  • MAR: Micro address register
  • IR: Instruction register
  • MCR: Micro command register
  • NMA: Next micro address

微指令格式

微程序

$M 00 000001 ;NOP
$M 01 007070 ;CON(INS) -> IR,P<1>
$M 04 002405 ;R0->B
$M 05 04B201 ;A add B -> R0
$M 30 001404 ;RO->A
$M 32 183001 ;IN->R0
$M 33 280401 ;R0->OUT
$M 35 000035 ;NOP

运行流程

T2节拍 下一条微指令的地址存入 微地址寄存器

T3,T4节拍 执行T2产生的控制信号, 如果测试位有效, 则要根据机器指令及当前微地址寄存器中的内容进行译码, 实现微程序的分支

  1. CLR按扭清除MAR KK2置为单步

  2. 置IN单元为 00100011(23), MC单元的NMA == 000001(NOP)时, 置CON单元SD27~SD20 为 IN指令 00100000

    • 按动ST 开始执行微指令000001(H),这里有一个P<1>标记,说明需要执行P<1>散转下址,从CON单元输入INS

      • image-20220524200925424

      • CON输入 00100000

        • 当前指令为070707 MA5~MA0 = 110000

        • I7I6=00
        • SE5 = MA5 = 1
        • SE4 = MA4 = 1
        • SE3 = I7
        • SE2 = I6
        • SE1 = I5
        • SE0 = I4
      • 经过P<1>得到的微地址为 110010(六位二进制)

    • 地址32对应的指令为 18 30 01

      • RD=1 IOM=1 从IN单元读入 00100011 到R0 ?? IN -> R0

        读写控制器逻辑可以让CPU能控制MEM和I/O设备的读写。当RD=1,IOM=1时,CPU对I/O设备进行读操作,RD=1,IOM=0时,对MEM进行读操作。T3=1,IOM=0,WR=1时对MEM单元进行写操作;T3=1,IOM=1,WR=1时,对I/O设备进行写操作。

      • MC/NMA=000001
      • 至此IN指令执行完成
  3. 回到地址01, 等待CON单元输入S27~S20

    • CON单元置00000000 进入P<1>散转下址
      • 当前指令为007070 MA5~MA0 = 110000
      • I7I6=00
      • SE5=MA5=1
      • SE4=MA4=1
      • SE3=I7=0
      • SE2=I6=0
      • SE1=I5=0
      • SE0=I4=0
    • 经过P<1>得到的微地址为110000(30)

    • 地址30 的指令为 001404

      • A字段 001 LDA
      • B字段 010 RO_B
      • R0 -> A
    • NMA=000100

    • 地址04 的指令为00 24 05

      • A字段 010 LDB
      • B字段 010 RO_B
      • R0 -> B
    • NMA=000101

    • 地址05 的指令为04B201

      • A字段 011 LDRO
      • B字段 001ALU_B
      • R0 <- A+B

      image-20220524211849381

  4. 回到地址01,等待CON单元输入S27~S20

    • CON单元置00110000

    • P<1>得到 011011 33

    • 地址35 的指令为 280401

      • WR=1 IOM=1 写入OUT单元

      • A字段 000

      • B字段 010 RO_B

        NMA 000001