Verilog
Build a working foundation in Verilog — modeling, simulation, and synthesizable RTL.
This is the foundation course for any aspiring RTL designer or verification engineer. You will learn to write synthesizable Verilog the way it is written in production — not the textbook way.
Who this is for
- Final-year B.Tech / M.Tech students in ECE, EEE, CSE
- Working engineers transitioning into VLSI
- Anyone preparing for RTL design or DV interviews
Prerequisites
- Basic digital electronics (gates, flip-flops, combinational vs sequential)
- Comfort with any one programming language
Syllabus
Week 1 — Verilog basics
Lexical conventions, data types, vectors, parameters, simulation vs synthesis.
Week 2 — Combinational logic
assign, always @*, case statements, priority vs parallel, common bugs.
Week 3 — Sequential logic
Flip-flops, latches (and why we avoid them), reset strategies, clock domains.
Week 4 — Finite State Machines
Mealy vs Moore, one-hot vs binary encoding, state-machine refactoring.
Week 5 — Pipelining and timing
Pipeline stages, hazards, retiming, clock-gating awareness.
Week 6 — Memories and arbitration
Single/dual-port RAMs, FIFOs, round-robin and priority arbiters.
Week 7 — Synthesis & coding guidelines
Reading synthesis reports, common coding pitfalls, lint checks.
Week 8 — Capstone project
Design a small IP block (UART, SPI master, or a 4-port arbiter) and run it through a simulation flow.
Sample code
A simple synthesizable 2-state FSM:
module simple_fsm (
input logic clk,
input logic rst_n,
input logic start,
output logic busy
);
typedef enum logic [0:0] { IDLE, RUN } state_t;
state_t state, next_state;
always_ff @(posedge clk or negedge rst_n) begin
if (!rst_n) state <= IDLE;
else state <= next_state;
end
always_comb begin
next_state = state;
unique case (state)
IDLE: if (start) next_state = RUN;
RUN : if (!start) next_state = IDLE;
endcase
end
assign busy = (state == RUN);
endmoduleWhat you'll build
- 4-bit ALU with overflow detection
- Synchronous FIFO with full/empty flags
- UART transmitter at configurable baud rate
- Round-robin arbiter with grant hold
Next steps after this course
- SystemVerilog — for verification or advanced RTL
- Digital Electronics — to firm up foundations
- AMBA Protocols — to start working with bus interfaces