RTL Design/FSM & Datapath

FSM & Datapath Design

Master the fundamentals of finite state machines and datapath design for efficient RTL implementation.

🎯 Core Concepts

Finite State Machines (FSM)

Beginner

Understanding state machines and their implementation in RTL design.

Key Topics:

  • Moore vs Mealy machines
  • State encoding techniques
  • One-hot vs binary encoding
  • State transition diagrams
  • FSM implementation patterns

Code Example:

// Simple FSM example
typedef enum logic [1:0] {
  IDLE = 2'b00,
  ACTIVE = 2'b01,
  DONE = 2'b10
} state_t;

state_t current_state, next_state;

always_ff @(posedge clk or negedge rst_n) begin
  if (!rst_n)
    current_state <= IDLE;
  else
    current_state <= next_state;
end

Datapath Design

Intermediate

Designing efficient data processing units and arithmetic circuits.

Key Topics:

  • Arithmetic units (ALU design)
  • Multiplexers and data routing
  • Pipeline stages
  • Resource sharing
  • Dataflow optimization

Code Example:

// ALU datapath example
module alu #(parameter WIDTH = 32) (
  input  logic [WIDTH-1:0] a, b,
  input  logic [2:0] opcode,
  output logic [WIDTH-1:0] result,
  output logic zero, overflow
);

always_comb begin
  case (opcode)
    3'b000: result = a + b;
    3'b001: result = a - b;
    3'b010: result = a & b;
    3'b011: result = a | b;
    default: result = '0;
  endcase
end

Control Logic Design

Advanced

Implementing control units that coordinate datapath operations.

Key Topics:

  • Control unit architecture
  • Microcode vs hardwired control
  • Pipeline control
  • Hazard detection and resolution
  • Control signal generation

Code Example:

// Control unit example
module control_unit (
  input  logic [5:0] opcode,
  input  logic zero, overflow,
  output logic reg_write, mem_read,
  output logic mem_write, branch,
  output logic [2:0] alu_op
);

always_comb begin
  // Default values
  {reg_write, mem_read, mem_write, branch} = 4'b0000;
  alu_op = 3'b000;
  
  case (opcode)
    6'b000000: begin // R-type
      reg_write = 1'b1;
      alu_op = 3'b010;
    end
    // ... more cases
  endcase
end

🏗️ Common Design Patterns

Pipelined Processor

High Complexity

5-stage RISC processor with hazard handling

Files:

cpu.svdatapath.svcontrol.svhazard_unit.sv

FIFO Buffer

Medium Complexity

Synchronous FIFO with configurable depth

Files:

fifo.svfifo_tb.sv

AXI4 Interface

High Complexity

AXI4 master and slave implementation

Files:

axi4_master.svaxi4_slave.svaxi4_pkg.sv

Cache Controller

High Complexity

Direct-mapped cache with write-back policy

Files:

cache.svcache_controller.svtag_array.sv

📚 Interactive Tutorials

Beginner

Building Your First FSM

Step-by-step guide to implementing a traffic light controller

⏱️ 30 mins
Intermediate

Datapath Optimization Techniques

Learn resource sharing and pipeline techniques

⏱️ 45 mins
Advanced

Advanced Control Logic

Implementing complex control units with error handling

⏱️ 60 mins

Ready to Build Complex FSMs and Datapaths?

Practice with real-world examples and advance to more complex control logic designs.