Control Unit

Control Unit

Overview

The Control Unit is a core component of the CPU that decodes instructions and coordinates all components within the CPU by generating appropriate control signals. In this lesson, we'll learn about the role of the control unit, two implementation approaches (hardwired and microprogrammed control), and the structure of microinstructions.

Difficulty: ⭐⭐⭐

Prerequisites: CPU Architecture Basics, Logic Circuits, State Machines


Table of Contents

  1. Role of the Control Unit
  2. Hardwired Control
  3. Microprogrammed Control
  4. Control Signal Generation
  5. Microinstructions
  6. Practice Problems

1. Role of the Control Unit

1.1 Basic Functions of the Control Unit

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Role of Control Unit                             β”‚
β”‚                                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                    Inputs                                    β”‚    β”‚
β”‚  β”‚                                                             β”‚    β”‚
β”‚  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚    β”‚
β”‚  β”‚    β”‚Instruction  β”‚    β”‚   Clock     β”‚    β”‚  Status     β”‚   β”‚    β”‚
β”‚  β”‚    β”‚  IR (Opcode,β”‚    β”‚             β”‚    β”‚  Signals    β”‚   β”‚    β”‚
β”‚  β”‚    β”‚   Funct)    β”‚    β”‚             β”‚    β”‚  (Flags,    β”‚   β”‚    β”‚
β”‚  β”‚    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜    β”‚   Ready)    β”‚   β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚              β”‚                  β”‚                  β”‚                 β”‚
β”‚              β–Ό                  β–Ό                  β–Ό                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                      Control Unit                            β”‚    β”‚
β”‚  β”‚                                                             β”‚    β”‚
β”‚  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚    β”‚
β”‚  β”‚    β”‚       Control Logic / Microprogram             β”‚      β”‚    β”‚
β”‚  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚              β”‚                  β”‚                  β”‚                 β”‚
β”‚              β–Ό                  β–Ό                  β–Ό                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                Outputs - Control Signals                     β”‚    β”‚
β”‚  β”‚                                                             β”‚    β”‚
β”‚  β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚    β”‚
β”‚  β”‚    β”‚ RegWriteβ”‚ β”‚ ALUOp   β”‚ β”‚ MemRead β”‚ β”‚ MemWrite        β”‚ β”‚    β”‚
β”‚  β”‚    β”‚ ALUSrc  β”‚ β”‚ Branch  β”‚ β”‚ MemtoRegβ”‚ β”‚ PCSrc           β”‚ β”‚    β”‚
β”‚  β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1.2 Main Tasks of the Control Unit

Task Description
Instruction Decoding Analyze opcode and function fields in IR to identify instruction type
Timing Generation Determine execution sequence and timing for each operation
Control Signal Generation Output signals to control each component in the datapath
State Management Track current execution state and determine next state
Exception Handling Detect and handle exceptional situations like interrupts and errors

1.3 Control Signals and Datapath

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               Relationship between Control Signals and Datapath           β”‚
β”‚                                                                           β”‚
β”‚                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                               β”‚
β”‚                          β”‚  Control Unit  β”‚                               β”‚
β”‚                          β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                               β”‚
β”‚                                  β”‚                                        β”‚
β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚           β”‚                      β”‚                      β”‚                 β”‚
β”‚           β–Ό                      β–Ό                      β–Ό                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
β”‚  β”‚Register Control β”‚  β”‚   ALU Control   β”‚  β”‚  Memory Control β”‚           β”‚
β”‚  β”‚                 β”‚  β”‚                 β”‚  β”‚                 β”‚           β”‚
β”‚  β”‚  - RegWrite     β”‚  β”‚  - ALUOp        β”‚  β”‚  - MemRead      β”‚           β”‚
β”‚  β”‚  - RegDst       β”‚  β”‚  - ALUSrc       β”‚  β”‚  - MemWrite     β”‚           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
β”‚           β”‚                    β”‚                    β”‚                     β”‚
β”‚           β–Ό                    β–Ό                    β–Ό                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚
β”‚  β”‚                       Datapath                               β”‚         β”‚
β”‚  β”‚                                                             β”‚         β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚         β”‚
β”‚  β”‚  β”‚ Register │────►│   ALU    │────►│     Memory       β”‚    β”‚         β”‚
β”‚  β”‚  β”‚   File   β”‚     β”‚          β”‚     β”‚                  β”‚    β”‚         β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚         β”‚
β”‚  β”‚       β–²                                     β”‚              β”‚         β”‚
β”‚  β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚         β”‚
β”‚  β”‚                    (Write Back)                            β”‚         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚
β”‚                                                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Hardwired Control

2.1 Hardwired Control Concept

Hardwired control implements control logic directly using combinational and sequential logic circuits.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Hardwired Control Unit                           β”‚
β”‚                                                                     β”‚
β”‚    IR [31:26]        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    (Opcode)   ──────►│                                         β”‚   β”‚
β”‚                      β”‚     Combinational Logic                 β”‚   β”‚
β”‚    IR [5:0]          β”‚                                         β”‚   β”‚
β”‚    (Funct)    ──────►│                                         │──► Control Signals
β”‚                      β”‚     - Decoders                          β”‚   β”‚
β”‚    Status Flags      β”‚     - Logic Gates (AND, OR)             β”‚   β”‚
β”‚    (Flags)    ──────►│     - Multiplexers                      β”‚   β”‚
β”‚                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                    β–²                               β”‚
β”‚                                    β”‚                               β”‚
β”‚                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚                      β”‚                           β”‚                 β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚    β”‚                  Timing/Sequencer                       β”‚    β”‚
β”‚    β”‚       (State Registers, Counters, Decoders)            β”‚    β”‚
β”‚    β”‚                                                         β”‚    β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚    β”‚
β”‚    β”‚    β”‚ State  │───►│ State  │───►│ Timing β”‚              β”‚    β”‚
β”‚    β”‚    β”‚Registerβ”‚    β”‚Decoder β”‚    β”‚ Signalsβ”‚              β”‚    β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                      β–²                                             β”‚
β”‚    Clock β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                             β”‚
β”‚                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.2 MIPS Single-Cycle Control Unit

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              MIPS Single-Cycle Control (Simplified)                  β”‚
β”‚                                                                     β”‚
β”‚    Opcode [5:0]                                                     β”‚
β”‚        β”‚                                                            β”‚
β”‚        β–Ό                                                            β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚                      Main Decoder                          β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚  Opcode  β”‚ RegDst β”‚ ALUSrc β”‚ MemtoReg β”‚ RegWrite β”‚ ...    β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ R-type   β”‚   1    β”‚   0    β”‚    0     β”‚    1     β”‚        β”‚   β”‚
β”‚    β”‚ (000000) β”‚        β”‚        β”‚          β”‚          β”‚        β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚   lw     β”‚   0    β”‚   1    β”‚    1     β”‚    1     β”‚        β”‚   β”‚
β”‚    β”‚ (100011) β”‚        β”‚        β”‚          β”‚          β”‚        β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚   sw     β”‚   x    β”‚   1    β”‚    x     β”‚    0     β”‚        β”‚   β”‚
β”‚    β”‚ (101011) β”‚        β”‚        β”‚          β”‚          β”‚        β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚   beq    β”‚   x    β”‚   0    β”‚    x     β”‚    0     β”‚        β”‚   β”‚
β”‚    β”‚ (000100) β”‚        β”‚        β”‚          β”‚          β”‚        β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.3 ALU Control Unit

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        ALU Control Unit                              β”‚
β”‚                                                                     β”‚
β”‚    ALUOp (2-bit)      Funct (6-bit)                                 β”‚
β”‚        β”‚                  β”‚                                         β”‚
β”‚        β”‚                  β”‚                                         β”‚
β”‚        β–Ό                  β–Ό                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚    β”‚            ALU Control Unit              β”‚                    β”‚
β”‚    β”‚                                          β”‚                    β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                    β”‚
β”‚    β”‚    β”‚ ALUOp  β”‚ Funct  β”‚ ALU Operation  β”‚ β”‚                    β”‚
β”‚    β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚                    β”‚
β”‚    β”‚    β”‚  00    β”‚xxxxxx  β”‚ Add (lw/sw)    β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  01    β”‚xxxxxx  β”‚ Sub (beq)      β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  10    β”‚100000  β”‚ Add            β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  10    β”‚100010  β”‚ Sub            β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  10    β”‚100100  β”‚ And            β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  10    β”‚100101  β”‚ Or             β”‚ β”‚                    β”‚
β”‚    β”‚    β”‚  10    β”‚101010  β”‚ Slt            β”‚ β”‚                    β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                    β”‚                                                β”‚
β”‚                    β–Ό                                                β”‚
β”‚            ALU Control (4-bit)                                      β”‚
β”‚                                                                     β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚    β”‚  ALU Control β”‚     Operation      β”‚                   β”‚       β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                   β”‚       β”‚
β”‚    β”‚     0000     β”‚       AND          β”‚                   β”‚       β”‚
β”‚    β”‚     0001     β”‚       OR           β”‚                   β”‚       β”‚
β”‚    β”‚     0010     β”‚       Add          β”‚                   β”‚       β”‚
β”‚    β”‚     0110     β”‚       Sub          β”‚                   β”‚       β”‚
β”‚    β”‚     0111     β”‚       Slt          β”‚                   β”‚       β”‚
β”‚    β”‚     1100     β”‚       NOR          β”‚                   β”‚       β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚       β”‚
β”‚                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.4 Multi-Cycle Hardwired Control

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Multi-Cycle Control: Finite State Machine (FSM)           β”‚
β”‚                                                                     β”‚
β”‚                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                               β”‚
β”‚                     β”Œβ”€β”€β”€β–Ίβ”‚  State 0 │◄────────────────┐             β”‚
β”‚                     β”‚    β”‚  (IF)    β”‚                 β”‚             β”‚
β”‚                     β”‚    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                 β”‚             β”‚
β”‚                     β”‚         β”‚                       β”‚             β”‚
β”‚                     β”‚         β–Ό                       β”‚             β”‚
β”‚                     β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚             β”‚
β”‚                     β”‚    β”‚  State 1 β”‚                 β”‚             β”‚
β”‚                     β”‚    β”‚  (ID)    β”‚                 β”‚             β”‚
β”‚                     β”‚    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                 β”‚             β”‚
β”‚                     β”‚         β”‚                       β”‚             β”‚
β”‚            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€             β”‚
β”‚            β”‚                  β”‚         β”‚             β”‚             β”‚
β”‚            β–Ό                  β–Ό         β–Ό             β”‚             β”‚
β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚             β”‚
β”‚       β”‚  State 2 β”‚      β”‚  State 6 β”‚ β”‚  State 8 β”‚    β”‚             β”‚
β”‚       β”‚ (MemAddr)β”‚      β”‚  (R-EX)  β”‚ β”‚  (BEQ)   β”‚β”€β”€β”€β”€β”˜             β”‚
β”‚       β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
β”‚            β”‚                 β”‚                                       β”‚
β”‚       β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”            β”‚                                       β”‚
β”‚       β”‚         β”‚            β”‚                                       β”‚
β”‚       β–Ό         β–Ό            β–Ό                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             β”‚
β”‚  β”‚  State 3 β”‚ β”‚  State 5 β”‚ β”‚  State 7 β”‚                             β”‚
β”‚  β”‚ (MemRead)β”‚ β”‚(MemWrite)β”‚ β”‚  (R-WB)  β”‚                             β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                             β”‚
β”‚       β”‚            β”‚            β”‚                                    β”‚
β”‚       β–Ό            β”‚            β”‚                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚            β”‚                                    β”‚
β”‚  β”‚  State 4 β”‚      β”‚            β”‚                                    β”‚
β”‚  β”‚  (LW-WB) β”‚      β”‚            β”‚                                    β”‚
β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β”‚            β”‚                                    β”‚
β”‚       β”‚            β”‚            β”‚                                    β”‚
β”‚       └────────────┴────────────┴──────────────────────►(State 0)   β”‚
β”‚                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.5 Control Signals by State

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Control Signal Table by State                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ State β”‚PCWriteβ”‚IRWriteβ”‚RegWriteβ”‚ALUSrcAβ”‚ALUSrcBβ”‚ALUOp β”‚MemReadβ”‚Description β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   0   β”‚   1   β”‚   1   β”‚   0   β”‚   0   β”‚  01   β”‚  00   β”‚   1   β”‚ IF         β”‚
β”‚  (IF) β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚Instr Fetch β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   1   β”‚   0   β”‚   0   β”‚   0   β”‚   0   β”‚  11   β”‚  00   β”‚   0   β”‚ ID         β”‚
β”‚  (ID) β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚Instr Decodeβ”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   2   β”‚   0   β”‚   0   β”‚   0   β”‚   1   β”‚  10   β”‚  00   β”‚   0   β”‚ MemAddr    β”‚
β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚Addr Calc   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   3   β”‚   0   β”‚   0   β”‚   0   β”‚   0   β”‚  00   β”‚  00   β”‚   1   β”‚ MemRead    β”‚
β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚Memory Read β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   4   β”‚   0   β”‚   0   β”‚   1   β”‚   0   β”‚  00   β”‚  00   β”‚   0   β”‚ LW WB      β”‚
β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚Load Write  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   6   β”‚   0   β”‚   0   β”‚   0   β”‚   1   β”‚  00   β”‚  10   β”‚   0   β”‚ R-type EX  β”‚
β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚R-type Exec β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   7   β”‚   0   β”‚   0   β”‚   1   β”‚   0   β”‚  00   β”‚  00   β”‚   0   β”‚ R-type WB  β”‚
β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚       β”‚R-type Writeβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.6 Advantages and Disadvantages of Hardwired Control

Advantages Disadvantages
Fast speed (only propagation delay) High design complexity
Can be optimized Difficult to modify/extend
Area efficient (for simple instruction sets) Difficult to debug
Suitable for RISC processors Requires circuit redesign for new instructions

3. Microprogrammed Control

3.1 Microprogrammed Control Concept

Microprogrammed control stores control signals as a microprogram (firmware) and generates control signals by sequentially executing them.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Microprogrammed Control Unit                           β”‚
β”‚                                                                         β”‚
β”‚    IR (Opcode)                                                          β”‚
β”‚        β”‚                                                                β”‚
β”‚        β–Ό                                                                β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                β”‚
β”‚    β”‚   Mapping ROM    β”‚                                                β”‚
β”‚    β”‚ (Address Mapping)β”‚                                                β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                β”‚
β”‚             β”‚ Start Address                                             β”‚
β”‚             β–Ό                                                           β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚    β”‚                                                            β”‚      β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                        β”‚      β”‚
β”‚    β”‚    β”‚  MicroPC    │◄─────────────────────────────┐         β”‚      β”‚
β”‚    β”‚    β”‚ (Micro      β”‚                              β”‚         β”‚      β”‚
β”‚    β”‚    β”‚  Program    β”‚                              β”‚         β”‚      β”‚
β”‚    β”‚    β”‚  Counter)   β”‚                              β”‚         β”‚      β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                              β”‚         β”‚      β”‚
β”‚    β”‚           β”‚                                      β”‚         β”‚      β”‚
β”‚    β”‚           β–Ό                                      β”‚         β”‚      β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚      Control Store (ROM)           β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚   (Microprogram Storage)           β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚                                    β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚   Address   Microinstruction       β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚   0x00    [Control Signals | Next] β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚   0x01    [Control Signals | Next] β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚   0x02    [Control Signals | Next] β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β”‚    ...                             β”‚      β”‚         β”‚      β”‚
β”‚    β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚         β”‚      β”‚
β”‚    β”‚                    β”‚                            β”‚         β”‚      β”‚
β”‚    β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚         β”‚      β”‚
β”‚    β”‚    β”‚                               β”‚           β”‚         β”‚      β”‚
β”‚    β”‚    β–Ό                               β–Ό           β”‚         β”‚      β”‚
β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚         β”‚      β”‚
β”‚    β”‚  β”‚  Control    β”‚           β”‚   Sequencer    β”‚β”€β”€β”˜         β”‚      β”‚
β”‚    β”‚  β”‚  Signals    β”‚           β”‚ (Next Address) β”‚            β”‚      β”‚
β”‚    β”‚  β”‚  (Output)   β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚      β”‚
β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                         β”‚      β”‚
β”‚    β”‚                                                            β”‚      β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 Control Store Structure

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Control Store (ROM)                               β”‚
β”‚                                                                         β”‚
β”‚   Address   Microinstruction (e.g., 32-bit)                             β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚      β”‚ ALU β”‚Reg β”‚Mem β”‚Mem β”‚ALU β”‚Reg β”‚PC  β”‚ IR β”‚Nextβ”‚Sequence  β”‚   β”‚
β”‚    β”‚ Addr β”‚ Op  β”‚Dst β”‚Readβ”‚Wrt β”‚Src β”‚Wrt β”‚Src β”‚Wrt β”‚Addrβ”‚ Control  β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ 0x00 β”‚ 00  β”‚ x  β”‚ 1  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ 1  β”‚0x01β”‚ SEQ      β”‚   β”‚
β”‚    β”‚      β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚(Sequential)β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ 0x01 β”‚ 00  β”‚ x  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ x  β”‚ 0  β”‚DISPβ”‚ DISPATCH β”‚   β”‚
β”‚    β”‚      β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚ (Branch) β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ 0x02 β”‚ 00  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ 1  β”‚ 0  β”‚ x  β”‚ 0  β”‚0x03β”‚ SEQ      β”‚   β”‚
β”‚    β”‚      β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚ (lw/sw)  β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ 0x03 β”‚ xx  β”‚ x  β”‚ 1  β”‚ 0  β”‚ x  β”‚ 0  β”‚ x  β”‚ 0  β”‚0x04β”‚ SEQ      β”‚   β”‚
β”‚    β”‚      β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚ (lw mem) β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ 0x04 β”‚ xx  β”‚ 0  β”‚ 0  β”‚ 0  β”‚ x  β”‚ 1  β”‚ x  β”‚ 0  β”‚0x00β”‚ FETCH    β”‚   β”‚
β”‚    β”‚      β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚ (lw wb)  β”‚   β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚    β”‚ ...  β”‚     β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚    β”‚          β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.3 Sequencer Operation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         Sequencer                                        β”‚
β”‚                                                                         β”‚
β”‚   Determines next address based on sequence control field of current    β”‚
β”‚   microinstruction                                                      β”‚
β”‚                                                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚    β”‚ Sequence Controlβ”‚        Next Address Determination        β”‚       β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       β”‚
β”‚    β”‚    SEQ          β”‚  MicroPC ← MicroPC + 1                 β”‚       β”‚
β”‚    β”‚ (Sequential)    β”‚  Proceed to next microinstruction      β”‚       β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       β”‚
β”‚    β”‚   BRANCH        β”‚  MicroPC ← Next address field          β”‚       β”‚
β”‚    β”‚   (Branch)      β”‚  Jump to specified address             β”‚       β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       β”‚
β”‚    β”‚   DISPATCH      β”‚  MicroPC ← Mapping ROM[IR.Opcode]      β”‚       β”‚
β”‚    β”‚   (Dispatch)    β”‚  Branch to routine based on instr type β”‚       β”‚
β”‚    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€       β”‚
β”‚    β”‚   FETCH         β”‚  MicroPC ← 0 (Return to IF state)      β”‚       β”‚
β”‚    β”‚   (Fetch)       β”‚  Start next instruction fetch          β”‚       β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                                                                         β”‚
β”‚    Next address selection via MUX:                                      β”‚
β”‚                                                                         β”‚
β”‚    MicroPC+1 β”€β”€β”€β”€β–Ίβ”Œβ”€β”€β”€β”€β”€β”€β”€β”                                            β”‚
β”‚    Branch Addr ──►│  MUX  │────► Next MicroPC                          β”‚
β”‚    Dispatch Addr─►│       β”‚                                            β”‚
β”‚    0 (Fetch) β”€β”€β”€β”€β–Ίβ””β”€β”€β”€β”€β”€β”€β”€β”˜                                            β”‚
β”‚                      β–²                                                  β”‚
β”‚                      β”‚                                                  β”‚
β”‚              Sequence Control Signal                                    β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.4 Advantages and Disadvantages of Microprogrammed Control

Advantages Disadvantages
Flexible design (only ROM needs modification) Slower than hardwired
Easy to implement complex instructions ROM access delay
Easy to debug Additional hardware (Control Store) needed
Suitable for CISC processors Increased power consumption
Microcode can be updated Increased area

3.5 Real-World Examples

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Microcode Usage in Real Processors                          β”‚
β”‚                                                                         β”‚
β”‚    Intel x86 family:                                                    β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚  - Implements complex CISC instructions with microcode        β”‚   β”‚
β”‚    β”‚  - Simple instructions handled quickly with hardwired logic   β”‚   β”‚
β”‚    β”‚  - Microcode updates for security patches (e.g., Spectre/    β”‚   β”‚
β”‚    β”‚    Meltdown)                                                  β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                         β”‚
β”‚    AMD processors:                                                      β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚  - Similarly handles complex instructions with microcode      β”‚   β”‚
β”‚    β”‚  - Microcode updates via BIOS/UEFI                            β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                         β”‚
β”‚    Hybrid approach (most modern processors):                            β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚    β”‚  - Frequently used instructions: Hardwired (fast)             β”‚   β”‚
β”‚    β”‚  - Complex instructions: Microcode (flexibility)              β”‚   β”‚
β”‚    β”‚  - Example: x86 ADD is hardwired, REP MOVS is microcode       β”‚   β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. Control Signal Generation

4.1 Main Control Signals List

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         Main Control Signals                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Control Signalβ”‚                    Function                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   RegDst     β”‚ Select write register (rt=0, rd=1)                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   RegWrite   β”‚ Enable writing to register file                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   ALUSrc     β”‚ Select second ALU input (Register=0, Immediate=1)        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   ALUOp      β”‚ Specify ALU operation (00=add, 01=sub, 10=R-type)        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   MemRead    β”‚ Enable memory read                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   MemWrite   β”‚ Enable memory write                                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   MemtoReg   β”‚ Select data to write to register (ALU=0, Memory=1)       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   PCSrc      β”‚ Select PC value (PC+4=0, Branch target=1)                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Branch     β”‚ Is conditional branch instruction                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Jump       β”‚ Is unconditional jump instruction                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.2 Control Signal Values by Instruction

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Control Signal Truth Table by Instruction                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚Instructionβ”‚RegDst β”‚ALUSrc  β”‚MemtoRegβ”‚RegWriteβ”‚MemReadβ”‚MemWriteβ”‚Branch  β”‚ALUOp   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ R-type   β”‚   1   β”‚   0    β”‚   0   β”‚   1   β”‚   0    β”‚    0    β”‚   0    β”‚  10    β”‚
β”‚ (add,sub)β”‚       β”‚        β”‚       β”‚       β”‚        β”‚         β”‚        β”‚        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   lw     β”‚   0   β”‚   1    β”‚   1   β”‚   1   β”‚   1    β”‚    0    β”‚   0    β”‚  00    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   sw     β”‚   x   β”‚   1    β”‚   x   β”‚   0   β”‚   0    β”‚    1    β”‚   0    β”‚  00    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   beq    β”‚   x   β”‚   0    β”‚   x   β”‚   0   β”‚   0    β”‚    0    β”‚   1    β”‚  01    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  addi    β”‚   0   β”‚   1    β”‚   0   β”‚   1   β”‚   0    β”‚    0    β”‚   0    β”‚  00    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    j     β”‚   x   β”‚   x    β”‚   x   β”‚   0   β”‚   0    β”‚    0    β”‚   x    β”‚  xx    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

x = don't care (any value is acceptable)

4.3 Control Signal Generation Logic Circuit

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Control Signal Generation Logic Circuit                   β”‚
β”‚                                                                         β”‚
β”‚    Opcode [5:0]                                                         β”‚
β”‚       β”‚                                                                 β”‚
β”‚       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚       β”‚                                                             β”‚   β”‚
β”‚       β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚       β”‚   β”‚                    Decoder                           β”‚   β”‚   β”‚
β”‚       β”‚   β”‚                                                     β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   Opcode    R-type  lw   sw   beq   addi   j       β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   000000  ─────►                                    β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   100011  ─────────►                                β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   101011  ──────────────►                           β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   000100  ───────────────────►                      β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   001000  ────────────────────────►                 β”‚   β”‚   β”‚
β”‚       β”‚   β”‚   000010  ─────────────────────────────►            β”‚   β”‚   β”‚
β”‚       β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚       β”‚           β”‚       β”‚      β”‚      β”‚       β”‚       β”‚           β”‚   β”‚
β”‚       β”‚           β–Ό       β–Ό      β–Ό      β–Ό       β–Ό       β–Ό           β”‚   β”‚
β”‚       β”‚                                                             β”‚   β”‚
β”‚       β”‚   RegDst  = R-type                                          β”‚   β”‚
β”‚       β”‚   ALUSrc  = lw | sw | addi                                  β”‚   β”‚
β”‚       β”‚   MemtoReg = lw                                             β”‚   β”‚
β”‚       β”‚   RegWrite = R-type | lw | addi                             β”‚   β”‚
β”‚       β”‚   MemRead  = lw                                             β”‚   β”‚
β”‚       β”‚   MemWrite = sw                                             β”‚   β”‚
β”‚       β”‚   Branch   = beq                                            β”‚   β”‚
β”‚       β”‚   ALUOp[1] = R-type                                         β”‚   β”‚
β”‚       β”‚   ALUOp[0] = beq                                            β”‚   β”‚
β”‚       β”‚   Jump     = j                                              β”‚   β”‚
β”‚       β”‚                                                             β”‚   β”‚
β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.4 Timing Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               LW Instruction Execution Timing (Single-Cycle)             β”‚
β”‚                                                                         β”‚
β”‚   CLK    ────┐     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€          β”‚
β”‚              β”‚     β”‚                             β”‚     β”‚               β”‚
β”‚              β””β”€β”€β”€β”€β”€β”˜                             β””β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                                                                         β”‚
β”‚   PC     ════β•ͺ═════════════════════════════════════════β•ͺ═══            β”‚
β”‚          0x04β”‚                                         β”‚0x08           β”‚
β”‚                                                                         β”‚
β”‚   IR     ────β•ͺ═════════════════════════════════════════β•ͺ───            β”‚
β”‚              β”‚          lw $t0, 4($s0)                 β”‚               β”‚
β”‚                                                                         β”‚
β”‚   RegRead ───────────────────────────────────────────────────          β”‚
β”‚              β”‚    β–Ό Read $s0 value                                     β”‚
β”‚                                                                         β”‚
β”‚   ALU    ────────────────────────────────────────────────────          β”‚
β”‚                      β”‚    β–Ό Calculate $s0 + 4                          β”‚
β”‚                                                                         β”‚
β”‚   MemRead ───────────────────────────────────────────────────          β”‚
β”‚                              β”‚    β–Ό Read Memory[$s0+4]                 β”‚
β”‚                                                                         β”‚
β”‚   RegWrite ──────────────────────────────────────────────────          β”‚
β”‚                                      β”‚    β–Ό Write to $t0               β”‚
β”‚                                                                         β”‚
β”‚          β”œβ”€β”€β”€IF───┼───ID───┼───EX───┼───MEM──┼───WB────                β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5. Microinstructions

5.1 Microinstruction Format

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Microinstruction Format                              β”‚
β”‚                                                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚    β”‚              Horizontal Microinstruction                        β”‚  β”‚
β”‚    β”‚                                                                β”‚  β”‚
β”‚    β”‚  β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚    β”‚  β”‚ALU β”‚Reg β”‚Reg β”‚Mem β”‚Mem β”‚ALU β”‚ALU β”‚PC  β”‚ IR β”‚Seq β”‚ Next   β”‚ β”‚  β”‚
β”‚    β”‚  β”‚Op  β”‚Dst β”‚Wrt β”‚Rd  β”‚Wrt β”‚SrcAβ”‚SrcBβ”‚Wrt β”‚Wrt β”‚Ctl β”‚ Addr   β”‚ β”‚  β”‚
β”‚    β”‚  β”‚4bitβ”‚1bitβ”‚1bitβ”‚1bitβ”‚1bitβ”‚1bitβ”‚2bitβ”‚1bitβ”‚1bitβ”‚2bitβ”‚ 6bit   β”‚ β”‚  β”‚
β”‚    β”‚  β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚    β”‚                                                                β”‚  β”‚
β”‚    β”‚  Features: All control signals explicitly encoded             β”‚  β”‚
β”‚    β”‚       - Fast decoding                                         β”‚  β”‚
β”‚    β”‚       - Wide bit width (requires more ROM)                    β”‚  β”‚
β”‚    β”‚       - Parallel operations possible                          β”‚  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚    β”‚              Vertical Microinstruction                          β”‚  β”‚
β”‚    β”‚                                                                β”‚  β”‚
β”‚    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚    β”‚  β”‚  Operation β”‚  Source    β”‚Destination β”‚  Next Address    β”‚  β”‚  β”‚
β”‚    β”‚  β”‚   (op)     β”‚  (src)     β”‚   (dst)    β”‚                  β”‚  β”‚  β”‚
β”‚    β”‚  β”‚   4bit     β”‚   4bit     β”‚   4bit     β”‚     6bit         β”‚  β”‚  β”‚
β”‚    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚    β”‚                                                                β”‚  β”‚
β”‚    β”‚  Features: Control signals represented in encoded format      β”‚  β”‚
β”‚    β”‚       - Narrow bit width (less ROM)                           β”‚  β”‚
β”‚    β”‚       - Additional decoding required (slower)                 β”‚  β”‚
β”‚    β”‚       - One operation at a time                               β”‚  β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.2 Microinstruction Example (LW Instruction)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 LW $t0, offset($s0) Microprogram                         β”‚
β”‚                                                                         β”‚
β”‚   Address   Microinstruction                   Description              β”‚
β”‚   ────────────────────────────────────────────────────────────────      β”‚
β”‚                                                                         β”‚
β”‚   0x00:  PCWrite=1, IRWrite=1, ALUSrcA=0,     // Instruction Fetch(IF) β”‚
β”‚          ALUSrcB=01, ALUOp=00, MemRead=1,                               β”‚
β”‚          NextAddr=0x01, SeqCtl=SEQ                                      β”‚
β”‚                                                                         β”‚
β”‚   0x01:  ALUSrcA=0, ALUSrcB=11, ALUOp=00,     // Instruction Decode(ID)β”‚
β”‚          NextAddr=DISPATCH, SeqCtl=DISPATCH                             β”‚
β”‚                                                                         β”‚
β”‚   --- lw instruction dispatch β†’                                         β”‚
β”‚                                                                         β”‚
β”‚   0x10:  ALUSrcA=1, ALUSrcB=10, ALUOp=00      // Address calculation   β”‚
β”‚          NextAddr=0x11, SeqCtl=SEQ            // A = $s0 + offset      β”‚
β”‚                                                                         β”‚
β”‚   0x11:  MemRead=1                             // Memory read           β”‚
β”‚          NextAddr=0x12, SeqCtl=SEQ            // MDR ← Mem[A]          β”‚
β”‚                                                                         β”‚
β”‚   0x12:  RegDst=0, RegWrite=1, MemtoReg=1     // Write Back (WB)       β”‚
β”‚          NextAddr=0x00, SeqCtl=FETCH          // $t0 ← MDR             β”‚
β”‚                                                                         β”‚
β”‚   Micro-operation sequence:                                             β”‚
β”‚   1. MAR ← PC; IR ← Mem[MAR]; PC ← PC + 4                              β”‚
β”‚   2. A ← Regs[$s0]                                                      β”‚
β”‚   3. ALUOut ← A + sign_extend(offset)                                  β”‚
β”‚   4. MDR ← Mem[ALUOut]                                                 β”‚
β”‚   5. Regs[$t0] ← MDR                                                   β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.3 Microinstruction Sequencing

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Microinstruction Sequencing Example                    β”‚
β”‚                                                                         β”‚
β”‚    Start                                                                β”‚
β”‚      β”‚                                                                  β”‚
β”‚      β–Ό                                                                  β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”                                                          β”‚
β”‚    β”‚ 0x00   β”‚  IF: Instruction fetch                                   β”‚
β”‚    β”‚ (IF)   β”‚  MAR←PC, IR←Mem[MAR], PC←PC+4                            β”‚
β”‚    β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                                                          β”‚
β”‚        β”‚ SEQ                                                           β”‚
β”‚        β–Ό                                                                β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”                                                          β”‚
β”‚    β”‚ 0x01   β”‚  ID: Instruction decode, register read                   β”‚
β”‚    β”‚ (ID)   β”‚  A←Regs[rs], B←Regs[rt]                                  β”‚
β”‚    β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                                                          β”‚
β”‚        β”‚ DISPATCH (based on opcode)                                    β”‚
β”‚        β”‚                                                                β”‚
β”‚   β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚   β”‚         β”‚            β”‚            β”‚            β”‚                   β”‚
β”‚   β–Ό         β–Ό            β–Ό            β–Ό            β–Ό                   β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚ β”‚ 0x10 β”‚ β”‚ 0x20 β”‚    β”‚ 0x30 β”‚    β”‚ 0x40 β”‚    β”‚ 0x50 β”‚                 β”‚
β”‚ β”‚ lw   β”‚ β”‚ sw   β”‚    β”‚R-typeβ”‚    β”‚ beq  β”‚    β”‚  j   β”‚                 β”‚
β”‚ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜    β””β”€β”€β”¬β”€β”€β”€β”˜    β””β”€β”€β”¬β”€β”€β”€β”˜    β””β”€β”€β”¬β”€β”€β”€β”˜                 β”‚
β”‚    β”‚        β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚    β–Ό        β–Ό           β–Ό           β”‚           β”‚                      β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”      β”‚           β”‚                      β”‚
β”‚ β”‚ 0x11 β”‚ β”‚ 0x21 β”‚    β”‚ 0x31 β”‚      β”‚           β”‚                      β”‚
β”‚ β”‚MemRd β”‚ β”‚MemWr β”‚    β”‚ R-WB β”‚      β”‚           β”‚                      β”‚
β”‚ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜    β””β”€β”€β”¬β”€β”€β”€β”˜      β”‚           β”‚                      β”‚
β”‚    β”‚        β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚    β–Ό        β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”    β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚ β”‚ 0x12 β”‚    β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚ β”‚ LW-WBβ”‚    β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚ β””β”€β”€β”¬β”€β”€β”€β”˜    β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚    β”‚        β”‚           β”‚           β”‚           β”‚                      β”‚
β”‚    └────────┴───────────┴───────────┴───────────┴───►(Return to 0x00) β”‚
β”‚                          FETCH                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.4 Horizontal vs Vertical Microinstruction Comparison

Feature Horizontal Vertical
Bit Width Wide (50-100 bits) Narrow (16-32 bits)
Decoding Not needed/minimal Additional decoding required
Speed Fast Slow
Parallelism High (simultaneous control) Low (sequential)
ROM Size Large Small
Flexibility High Medium

5.5 Nanoprogramming

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       Nanoprogramming                                    β”‚
β”‚                                                                         β”‚
β”‚   Uses two-level control storage to optimize Control Store size         β”‚
β”‚                                                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚    β”‚                                                                 β”‚ β”‚
β”‚    β”‚   MicroPC β”€β”€β”€β–Ίβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚ β”‚
β”‚    β”‚               β”‚   Control Store     β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚   (Micro ROM)       β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚                     β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚   β”‚NanoPCβ”‚NextAddrβ”‚ │──► Sequence Control      β”‚ β”‚
β”‚    β”‚               β”‚   β””β”€β”€β”¬β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                          β”‚ β”‚
β”‚    β”‚               β””β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚ β”‚
β”‚    β”‚                      β”‚                                          β”‚ β”‚
β”‚    β”‚                      β–Ό                                          β”‚ β”‚
β”‚    β”‚               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚ β”‚
β”‚    β”‚               β”‚   Nano Store        β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚   (Nano ROM)        β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚                     β”‚                          β”‚ β”‚
β”‚    β”‚               β”‚ Actual control      │──► Control Signal Output β”‚ β”‚
β”‚    β”‚               β”‚ signal encoding     β”‚                          β”‚ β”‚
β”‚    β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚ β”‚
β”‚    β”‚                                                                 β”‚ β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                         β”‚
β”‚    Advantage: Save ROM by sharing repeated control signal patterns      β”‚
β”‚    Disadvantage: Additional access delay                                β”‚
β”‚                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. Practice Problems

Basic Problems

  1. Explain three main roles of the control unit.

  2. Compare the differences between hardwired control and microprogrammed control.

  3. Explain the role of the following control signals:

  4. (a) RegWrite
  5. (b) ALUSrc
  6. (c) MemtoReg

Control Signal Analysis Problems

  1. Determine the value of each control signal when executing the following MIPS instruction:

ADD $t0, $t1, $t2

  • RegDst = ?
  • ALUSrc = ?
  • MemtoReg = ?
  • RegWrite = ?
  • MemRead = ?
  • MemWrite = ?
  • Branch = ?
  • ALUOp = ?

  • Determine all control signals for the SW $t0, 100($s0) instruction.

Microprogram Problems

  1. Explain the role of the sequencer in microprogrammed control.

  2. Compare the advantages and disadvantages of horizontal and vertical microinstructions.

  3. Write the microinstruction sequence for the BEQ $t0, $t1, label instruction.

Advanced Problems

  1. Explain which control method (hardwired/microprogrammed) is more suitable for the following situations:
  2. (a) Designing a simple RISC processor
  3. (b) Designing a complex CISC processor
  4. (c) When microcode updates are needed

  5. List all states that the lw instruction goes through in a multi-cycle CPU FSM (Finite State Machine), and explain the control signals activated in each state.

Answers 1. Main roles of the control unit: - Instruction decoding: Analyze IR opcode to identify instruction type - Timing generation: Determine execution sequence and timing for each operation - Control signal generation: Output signals to control each component in datapath 2. Comparison: - Hardwired: Implemented directly with logic circuits, fast but difficult to modify - Microprogrammed: Executes program stored in ROM, flexible but slower 3. Control signal roles: - (a) RegWrite: Enable writing data to register file - (b) ALUSrc: Select second ALU input source (0=register, 1=immediate) - (c) MemtoReg: Select data to write to register (0=ALU, 1=memory) 4. ADD instruction control signals: - RegDst = 1 (use rd) - ALUSrc = 0 (register) - MemtoReg = 0 (ALU result) - RegWrite = 1 - MemRead = 0 - MemWrite = 0 - Branch = 0 - ALUOp = 10 (R-type) 5. SW instruction control signals: - RegDst = x (don't care) - ALUSrc = 1 (immediate 100) - MemtoReg = x - RegWrite = 0 - MemRead = 0 - MemWrite = 1 - Branch = 0 - ALUOp = 00 (add) 6. Sequencer role: - Interprets sequence control field of current microinstruction - Determines next microinstruction address (sequential, branch, dispatch, fetch) - Updates MicroPC value 7. Horizontal vs Vertical: - Horizontal: Fast execution, parallel control possible, wide bit width, large ROM - Vertical: Narrow bit width, small ROM, additional decoding required, slower 8. BEQ microinstructions: - IF: MAR←PC, IR←Mem[MAR], PC←PC+4 - ID: A←Regs[$t0], B←Regs[$t1], ALUOut←PC+(offset<<2) - EX: if (A==B) PC←ALUOut β†’ 0x00 (return to IF) 9. - (a) RISC: Hardwired (instructions are simple and speed is important) - (b) CISC: Microprogrammed (easy to implement complex instructions) - (c) Updates needed: Microprogrammed (only ROM needs modification) 10. lw instruction states: - State 0 (IF): MemRead=1, IRWrite=1, PCWrite=1 - State 1 (ID): (register read) - State 2 (MemAddr): ALUSrcA=1, ALUSrcB=10, ALUOp=00 - State 3 (MemRead): MemRead=1 - State 4 (LW-WB): RegDst=0, MemtoReg=1, RegWrite=1

Next Steps


References

  • Computer Organization and Design (Patterson & Hennessy)
  • Computer Architecture: A Quantitative Approach (Hennessy & Patterson)
  • MIPS Control Unit Implementation
  • Digital Design and Computer Architecture (Harris & Harris)
to navigate between lessons