|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Microprogramming-Overview (microcontroller, VESP-micro-level datapath) Machine Layer of Vesp
Micro Layer of Vesp
Microcontroller of Vesp Microprogramming Datapath
Microinstruction formats Microinstruction
bits 0,1 Micro-operation
type 00 Data
transfer 01 Branch 10 I/O 11 ROM
Transfer Data transfer microinstruction format: 1st row indicates the bit position, 2nd row specifies the field definitions
Branch microinstruction format: 1st row indicates the bit position, 2nd row specifies the field definitions
Microprogrammed I/O: 1st row indicates the bit position, 2nd row specifies the field definitions
Microstore Transfer: 1st row indicates the bit position, 2nd row specifies the field definitions
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}
Vesp's microcontroller serves as a mechanism to implement data transfers, branch statements, I/O operations in Vesp and
ROM transfers for loading constants in microprograms.
Microprogramming-Continued
(Microcontroller-or Microsequencer)
int microsequencer(void)-Microprogram version
{
while(1)
{
/* Step 1: Read the next microinstruction into MIR */
vesp_micro.MAR = vesp_micro.PC; vesp_micro.PC = vesp_micro.PC + 1;
vesp_micro.MIR = vesp_micro.MEMORY[vesp_micro.MAR];
/*
Step 2: Decode and execute the microinstruction
*/
switch(vesp_micro.MIR & 0xC0000000)
{
case 0x00000000: /* µ-operation */
break;
case 0x40000000: /* Branch microinstruction */
case 0x80000000: /* Input/Output */
}
/* Microcode for fetch
Microcode for MAR = PC (0000 => OBUS = ABUS)
00 010 ---- 0000 0100 ---- ------------
Microcode for PC = PC+1 (0001 => OBUS = ABUS + BBUS)
00 010 011 0001 0010 ---- ------------
Microcode for read (000 => read = 1)
10 000 --- ---- ---- ---- ------------
Microcode for IR = MDR (010 => OBUS = BBUS)
00 --- 011 0010 0010 ---- ------------
Microcode for return
01 --- --- ---- ---- 0111 ------------
*/