Verilator and cocotb: find the bugs hiding in a real 8-bit core.
Part of the UofT ASIC Team education materials (uoftasic).
Course site: https://uoftasic.com/dd104/ · Education hub: https://edu.uoftasic.com/
An 8-bit processor, SimProc, ships with one test. That test passes on thirteen deliberately broken versions of the chip. This course is about the gap between "my tests pass" and "this design works".
Everything runs inside the team workbench image hpretl/iic-osic-tools:2026.04
(cocotb 2.0.1, Icarus Verilog 14.0, Verilator 5.046). Every lab package runs with make
alone, in a bare container, with no environment setup, and every one prints a verdict.
git clone https://github.com/uoftasic/dd104.git
cd dd104/labs/lab-01-the-adder-you-already-trust
make # ends on VERDICT: FAIL, on purposeOutside the noVNC desktop, the same thing directly:
docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" -w /work \
hpretl/iic-osic-tools:2026.04 --skip bash -c \
'cd /work/labs/lab-01-the-adder-you-already-trust && make'Setup, versions and the noVNC desktop: Getting started.
| Path | What it is |
|---|---|
labs/cocotb-intro/ |
cocotb on an 8-bit counter — make, make oldapi, make nothing |
labs/lab-01-the-adder-you-already-trust/ |
a testbench that cannot tell a good adder from a broken one |
labs/lab-02-the-only-test-this-chip-has/ |
make shuttle — 13 of 13 broken cores pass the shipped test |
labs/lab-03-three-blocks-before-the-processor/ |
unit-testing program_counter, register_file, ALU |
labs/lab-04-your-first-bug-hunt/ |
make new deals a mystery core; make verdict grades you |
labs/lab-05-every-answer-is-right/ |
two bugs invisible to architectural state |
labs/lab-06-capstone/ |
one suite that catches all thirteen, plus a bug report |
labs/common/ |
the shared harness, golden model, bug catalogue and verdict machinery |
labs/simproc/ |
the forked SimProc RTL, the thirteen bug variants, and their verification |
Reference solutions live in each package's solutions/. labs/common/bugs.py is the answer
key — reading it is the one thing that can make this course worthless to you.
The course site is plain Docsify from ./docs, no build step:
npx docsify-cli serve docs # → http://localhost:3000| Path | On Pages? | Purpose |
|---|---|---|
docs/ |
Yes | The course site |
docs/labs/ |
Yes | Lab writeups (theory, procedure, expected results) |
labs/ |
No | Runnable packages |
scripts/, notebooks/, data/, figures/ |
No | Repo scaffolding, unused by DD104 |
GitHub Pages: deploy from a branch, main, folder /docs. No Actions deploy step needed.
This repo was created from uoftasic/course-template;
TEMPLATE.md and scripts/init-template.py are that template's own bootstrap files and are
not part of the course.
See CONTRIBUTING.md.
MIT — Copyright UofT ASIC Team / uoftasic.
labs/simproc/ is a fork; see labs/simproc/FORKED-FROM and labs/simproc/LICENSE.upstream.