Part 4 · FSM & Control · Senior Prep

FSM & Control

Controller/datapath split, Moore/Mealy, encoding, multi-cycle control, UART TX, and memory-controller FSMs — rtl/fsm/<topic>.

What this section covers

Finite-state machines orchestrate datapaths over multiple cycles. This section covers split controller/datapath style, encoding trade-offs, and real protocols (UART, memory).

Topics in this section

  1. Controller/datapath split — two-process FSM style

  2. Moore vs Mealy — output timing and encoding

  3. State encoding — binary, one-hot, Gray

  4. Multi-cycle sequencers — latency vs control complexity

  5. UART TX — bit-serial walkthrough

  6. Memory controller — bursts, arbitration, timing

FSM + datapath

diagram
inputs ──► [STATE REG] ──► control signals ──► datapath
                │                      │
            next-state logic          ALU / mux / mem

Key takeaways

  • Separate sequential state update from combinational next-state/output logic.

  • One-hot encodes fast but wide — encoding affects area and timing.

  • Multi-cycle FSMs need explicit idle/busy and backpressure hooks.

Related topics


Deep dive

This lesson deepens FSM & Control within fsm. Senior reviewers expect you to connect mechanism to controller/datapath, encoding, and multi-cycle protocols — not just define terms.

Start from the spec invariant: what must always be true each cycle? Write it as a Boolean relation, timing budget, or protocol rule before coding. That invariant becomes your reference model, assertion, or waveform check.

At tape-out quality, every block needs a sign-off story: illegal states handled, outputs defined every state. Treat this lesson as building one paragraph of that story for your project documentation.

Architecture and signal flow

diagram
FSM & CONTROL

  inputs ──► [fsm] ──► mechanism ──► outputs
                │                │
           fsm     verify in sim + lint

Worked example (Verilog/SystemVerilog)

Synthesizable pattern for this topic — simulate locally and compare against your reference.

verilog
// fsm/fsm: FSM & Control
module example;
  logic clk, rst_n;
  initial begin
    clk = 0; forever #5 clk = ~clk;
  end
endmodule

Step-by-step design procedure

  1. Write the spec invariant (truth table, timing, or protocol rule).

  2. Sketch block diagram — inputs, outputs, clock/reset domains.

  3. Code the minimal correct version (no optimizations yet).

  4. Run self-checking TB with corners: min, max, reset, idle.

  5. Lint and review: width, latch, clock, CDC if applicable.

  6. Iterate for timing/area only after functionally proven.

Timing and resource trade-offs

diagram
METRIC          TYPICAL LEVER
Logic levels      algebra / pipelining
Register count    retiming / sharing
Wire fanout       duplication / pipeline
Power             clock gating / operand isolation
Debug visibility  status flags / SVA / waveform probes

Debug checklist

  • Compare DUT vs reference on every stimulus vector

  • Capture first cycle of mismatch — not last

  • Log seed and plusargs for random regressions

  • Check reset release and clock alignment in TB

  • If waveform is ambiguous, add temporary assertions

Interview angle

Moore vs Mealy for timing-critical outputs?

diagram
MODEL ANSWER SKELETON
1. MECHANISM — one-sentence technical truth
2. MOTIVATION — why this structure vs alternatives
3. WHEN TO USE / SKIP — scope and assumptions
4. PITFALL — common junior mistake
5. EXAMPLE — Verilog or waveform scenario

Practice exercise

Extend the worked example for "FSM & Control": add one corner case, write a self-checking test, and document one intentional pitfall you avoided. Timebox: 30–45 minutes.

Common pitfalls

  • Skipping reference model — passes wrong together with DUT.

  • Optimizing before correct — ECO cost goes up 10×.

  • Ignoring tool warnings — lint/CDC/STA warnings are technical debt.

  • Undocumented clock/reset domain — integration surprises.


Extended design scenario

Scenario for FSM & Control : UART TX baud error — measure bit period in TB vs spec.

Scenario resolution outline

  1. Reproduce with minimal TB — one stimulus, one check.

  2. Isolate failing cone (logic, FSM state, or bus beat).

  3. Fix root cause — not symptom — in RTL or TB alignment.

  4. Add regression test that fails without the fix.

  5. Document invariant in comment or SVA for permanence.

Additional simulation pattern

verilog
// FSM state trace gold file
// cycle,state_q,outputs — compare each transition

Synthesis and sign-off notes

  • Elaborate clean — no OOM from unconstrained generate

  • Constraints cover all clocks and I/O delays

  • Cross-check RTL parameters vs integration top

  • Attach sim log + seed to code review

Lab exercise (45–60 min)

Implement or extend the worked example for "FSM & Control". Add two new test vectors that target different branches. Write a one-paragraph sign-off note covering function, corners, and what you would still verify in SoC context.

Further reading in this course

diagram
Next topics in Part: follow nav_order in sidebar.
Cross-part: timing ↔ sequential, CDC ↔ senior interview,
combinational ↔ foundations number systems.