Intro to Digital Design - An End-to-End Approach¶
This is a five-week course, with 30 hours of lectures. We expect the following prior knowledge:
Converting a number between decimal, binary and hexadecimal representations material to refresh
Basic knowledge of logical operations (AND, OR, NAND, XOR) and truth tables material to refresh
Familiarity with any programming language (Python, C, etc.)
Why take this course?
This course is meant to give you a first taste of the art and craft of digital design. Along the way, you will experience the joy of designing real digital circuits and the challenge of making them work.
It is the first step in your journey towards more advanced courses at the university, bigger projects, and eventually the many career paths in one of today’s most exciting and in-demand areas of technology.
Interactive 3D preview unavailable in this browser. Open the GLB file directly.
Learning Outcomes¶
The following will be taught through examples (listed here) of increasing complexity, inspired by real digital systems.
Digital Design Concepts¶
Decomposing boolean functions into gates
Combinational and sequential elements
Finite-state machines
AXI-Stream protocol - ready/valid handshake
UART protocol - make your circuit talk to your PC
Setup time, hold time, critical path, retiming
SystemVerilog for Design¶
Parametrization, hierarchical design
always_ff,always_comb,logicgenerate for,if,case,function, packed arrays3-process coding style for FSMs
Wrapping SystemVerilog in old Verilog
SystemVerilog for Verification¶
Basic testbenches,
function,task, queuesRandomizing with constraints
Transactional testbenches: simple driver/monitor, basic OOP
Keywords & Features of SystemVerilog Avoided in this Course
reg, wire, assign, always, unpacked arrays
SystemVerilog/Verilog is one of the most complex languages ever, with a lot of historical baggage and countless footguns. To avoid wasting our limited time debating those, we will avoid the above. However, I will create a page here explaining each of their uses in detail for the sake of completeness.
Final Projects¶
FIR Filter on FPGA to extract bass/treble from your favorite song
A worked example gradually built through our lectures and discussions.
We will NOT teach the mathematics of calculating the filter coefficients. Here is our Python file to generate them. We will teach you how such filters work and how to implement them as a circuit.
You can listen to the audio before and after applying our 4-bit-quantized, 100-tap low-pass filter (see filter characteristics) with a cutoff of 250 Hz here:
| Original music | Bass only (250 Hz cutoff) |
A fully-parallel neural network accelerator on FPGA to classify handwritten numbers
You will gradually build this as a series of guided assignments.
Week 2: Simple fixed-point quantization and ReLU
Week 3: Adder Tree, Vector Multiply-Adder
Week 4: Fully-parallel dense layer, neural network, AXI-Stream
Week 5: Full system on FPGA with UART RX & TX, plus Python serial to send/receive inputs/outputs
Course Material¶
Repository: github.com/abarajithan11/digital-design
Our designs:
Pages¶
External Links