1: Decode.
A=0
B=0
C=0
AMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
BMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
CMUX=0 (код регистра-приёмника берётся из регистра микрокоманд (MIR))
RD=0
WR=0
ALU=AND
COND=DECODE
JUMP ADDR=*
//В процессоре при исполнении команды DECODE блокируется запись в блок регистров, поэтому команда АЛУ не играет роли.
Или может происходить следующее: Rg0=and(Rg0, Rg0), т.е. фактически значение в регистре Rg0 не изменяется.
…
1792: JIMM 1794; temp0=ADD(rs1, rs2).
A=*
B=*
//коды регистров источников берутся из регистра команд, из полей rs1 и rs2 соответственно.
C=temp0
AMUX=1 (код регистра-источника берётся из регистра команд (IR))
BMUX=1 (код регистра-источника берётся из регистра команд (IR))
CMUX=0 (код регистра-приёмника берётся из регистра микрокоманд (MIR))
RD=0
WR=0
ALU=ADD
COND=JIMM
// если выставлен бит непосредственного значения (IR[13]=1), то микропрограмма перейдет по адресу, указанному в поле JUMP ADDR.
JUMP ADDR=1794
1793: rd=AND(temp0, temp0); MemRD; JUMP 2047.
A=temp0
B= temp0
C=*
AMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
BMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
CMUX=1 (код регистра-приёмника берётся из регистра команд (IR))
RD=1
WR=0
ALU=AND
//Здесь как и по адресу микрокоманд 0, результат операции АЛУ не влияет на то, что запишется в регистр rd, т.к. выставлено поле RD (т.е. RD=1) в регистре микрокоманд (MIR). Это значение (RD) пойдет на управляющий вход мультиплексора C Bus, который при 1 определит: что в блок регистров следует данные записывать из памяти, а не из АЛУ.
COND=JUMP
//безусловный переход по адресу, указанному в поле JUMP ADDR.
JUMP ADDR=2047
1794: temp0=SGNEXT(IR).
//Т.к. бит непосредственного значения выставлен, то в процессоре ARC предусмотрена команда извлечения из регистра команд 13-ти битного значения.
A=IR
B=*
C=temp0
AMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
BMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
CMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
RD=0
WR=0
ALU=SGNEXT
COND=NEXT
//адрес следующей команды равен (текущий+1)
JUMP ADDR=*
1795: temp0=ADD(rs1, temp0); JUMP 1793.
A=*
//номер регистра берётся из поля rs1 регистра команд (IR)
B= temp0
C=temp0
AMUX=1 (код регистра-источника берётся из регистра команд (IR))
BMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
CMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
RD=0
WR=0
ALU=ADD
COND=JUMP
JUMP ADDR=1793
…
2047: PC=INC(PC); JUMP 0.
A=PC
B= *
C= PC
AMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
BMUX=0 (код регистра-источника берётся из регистра микрокоманд (MIR))
CMUX=0 (код регистра-приёмника берётся из регистра микрокоманд (MIR))
RD=0
WR=0
ALU=INC
COND=JUMP
JUMP ADDR=0