Part 1 · Foundations · Senior Prep
RTL Foundations
Digital logic, number systems, Verilog and SystemVerilog essentials, and simulation testbench basics — the foundation every RTL engineer needs before combinational and sequential design.
What this section covers
Before you pipeline a datapath or close timing on an FSM, you need crisp fluency in logic algebra , bit-level arithmetic , and synthesizable HDL style . This section builds that base so later parts — combinational blocks, sequential pipes, CDC — land on solid ground.
Each topic is a rich hub plus 7–8 sub-lessons with theory, ASCII diagrams and charts, runnable Verilog/SystemVerilog examples, takeaways, pitfalls, and cross-links.
Topics in this section
Digital Logic — Boolean algebra, De Morgan, truth tables, K-maps, implementation trade-offs.
Number Systems — binary/hex, two's complement, extension, overflow.
Verilog Core — modules, assign vs always, blocking vs non-blocking.
Operators & Types — width rules, concat, reductions, parameters.
SystemVerilog RTL — logic, always_ff/comb, enums, interfaces.
Simulation & TB — clock/reset, self-checking, debug patterns.
RTL learning stack (this section = bottom layer)
RTL DESIGN STACK — foundations support everything above
Part 9 Senior / interview
Part 8 Advanced (generate, lint, SVA, formal)
Part 7 Memory & buses
Part 6 Reset & CDC
Part 5 Timing & clocking
Part 4 FSM & control
Part 3 Sequential design
Part 2 Combinational design
─────────────────────────────
Part 1 FOUNDATIONS ← you are hereKey takeaways
Foundations are not 'review' — width, signedness, and latch inference bite senior engineers daily.
Work topics in order; revisit number systems when you hit arithmetic and pipelining.
All Part 1 topics use hub + sub-lesson nesting under rtl/foundations/<topic>.
Related topics
Deep dive
This lesson deepens RTL Foundations within foundations. Senior reviewers expect you to connect mechanism to HDL fluency, width, and simulation habits — 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: lint clean, self-checking TB, width documented. Treat this lesson as building one paragraph of that story for your project documentation.
Architecture and signal flow
RTL FOUNDATIONS
inputs ──► [foundations] ──► mechanism ──► outputs
│ │
foundations verify in sim + lintWorked example (Verilog/SystemVerilog)
Synthesizable pattern for this topic — simulate locally and compare against your reference.
// foundations/foundations: RTL Foundations
module example;
logic clk, rst_n;
initial begin
clk = 0; forever #5 clk = ~clk;
end
endmoduleStep-by-step design procedure
Write the spec invariant (truth table, timing, or protocol rule).
Sketch block diagram — inputs, outputs, clock/reset domains.
Code the minimal correct version (no optimizations yet).
Run self-checking TB with corners: min, max, reset, idle.
Lint and review: width, latch, clock, CDC if applicable.
Iterate for timing/area only after functionally proven.
Timing and resource trade-offs
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 probesDebug 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
Explain blocking vs non-blocking with a flop example.
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 scenarioPractice exercise
Extend the worked example for "RTL Foundations": 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 RTL Foundations : You inherit a module with mixed blocking/non-blocking assigns. List every signal, classify comb vs seq, rewrite with always_comb/ff.
Scenario resolution outline
Reproduce with minimal TB — one stimulus, one check.
Isolate failing cone (logic, FSM state, or bus beat).
Fix root cause — not symptom — in RTL or TB alignment.
Add regression test that fails without the fix.
Document invariant in comment or SVA for permanence.
Additional simulation pattern
// Corner-case TB fragment
initial begin
for (int i = 0; i < 256; i++) begin
drive(i[7:0]);
@(posedge clk);
check(ref(i[7:0]), dut_out);
end
endSynthesis 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 "RTL Foundations". 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
Next topics in Part: follow nav_order in sidebar.
Cross-part: timing ↔ sequential, CDC ↔ senior interview,
combinational ↔ foundations number systems.