Design Examples

In this course, digital design concepts and SystemVerilog features will be introduced through examples of gradually increasing complexity, inspired by real digital systems, as follows:

#

Design

Files

RTL

TB

Results

1

1-bit Full Adder

link

link

link

link

2

N-bit Ripple Carry Adder

link

link

link

link

3

ALU

link

link

link

link

4

Up Counter

link

link

link

link

5

Binary Reduction Tree

link

link

link

link

6

AXI-Stream Parallel to Serial Converter

link

link

link

link

7

Down Counter (Chainable)

link

link

link

link

8

UART RX

link

link

link

link

9

UART TX

link

link

link

link

10

UART Echo (RX + TX) System

link

link

link

link

11

FIR Filter [Naive RTL]

link

link

link

link

12

System: 100-tap FIR Filter via UART [Python filter]

link

link

link

link

Waveforms and ASAP7 GDS

For each design our GitHub Actions flow runs

  1. Simulation using Verilator, generating VCD, converted to SVG,

  2. OpenROAD RTL2GDS2 flow using ASAP7 7nm, a realistic PDK for academic use,

collects their outputs and displays them here.

To reproduce this on your machine, check out our docker setup.

1. 1-bit Full Adder

Run results

Layout Reports

full_adder routing full_adder placement full_adder worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

2. N-bit Ripple Carry Adder

Run results

Layout Reports

n_adder routing n_adder placement n_adder worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

3. ALU

Run results

Layout Reports

alu routing alu placement alu worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

4. Up Counter

Run results

Layout Reports

up_counter routing up_counter placement up_counter worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

5. Binary Reduction Tree

Run results

Layout Reports

reduction_tree_min routing reduction_tree_min placement reduction_tree_min worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

6. AXI-Stream Parallel to Serial Converter

Run results

Layout Reports

parallel_to_serial routing parallel_to_serial placement parallel_to_serial worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

7. Down Counter (Chainable)

Run results

Layout Reports

down_counter routing down_counter placement down_counter worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

8. UART RX

Run results

Layout Reports

uart_rx routing uart_rx placement uart_rx worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

9. UART TX

Run results

Layout Reports

uart_tx routing uart_tx placement uart_tx worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

10. UART Echo (RX + TX) System

Run results

Layout Reports

uart_echo routing uart_echo placement uart_echo worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

11. FIR Filter [Naive RTL]

Run results

Layout Reports

fir_filter routing fir_filter placement fir_filter worst path

Routing, Placement, Worst path

Waveform (0-10 ns)

12. System: 100-tap FIR Filter via UART [Python filter]

Run results

Layout Reports

sys_fir_filter routing sys_fir_filter placement sys_fir_filter worst path

Routing, Placement, Worst path

Waveform (0-10 ns)