CRAFT cycle · 2.5 hours · Tue 6/16 · The most Assemble-heavy day in the course
HDL for Digital System Design · UCF ECE · Barcelona Summer 2026
| Phase | Time | Activity |
|---|---|---|
| 🌍 Contextualize | 10 min | Metro visit share-out · integration vs module-by-module |
| ⚠️ Reframe | 15 min | "Compiles" ≠ "done" · the four-gate ship checklist |
| 🛠 Assemble | 90 min | Project build · 3 checkpoints · pair-debug |
| 🛡 Fortify | 30 min | PPA snapshot · AI TB run · hardware-on-board sanity |
| 🔗 Transfer | 5 min | Demo rehearsal prep · what to bring Thursday |
▸ Phase 1 of 5 · ~10 min
Yesterday's visit · today's discipline
Each pair: one sentence on which Metro observation changed your project plan. Quick — we're moving to Assemble fast today.
▸ Phase 2 of 5 · ~15 min
Synthesis is the beginning · not the end
It compiled. The sim showed something on the waveform. I'm done.
Synthesizes clean. Self-checking TB passes. Fmax meets target. Fits the FPGA. Works on real silicon. AI-generated TB hits every input combo.
| Gate | Tool | Pass criterion |
|---|---|---|
| 1. Functional | iverilog + self-checking TB | All scripted cases PASS · 0 unexpected output |
| 2. Code quality | review against conventions | r_/w_/i_/o_ prefixes · parameterized · readable |
| 3. PPA | yosys stat + nextpnr | LUTs/FFs reported · Fmax recorded · fits the iCE40 |
| 4. Hardware | Go Board | The thing it's supposed to do, on real silicon |
| 5. AI TB | Claude/GPT + audit | Prompt + raw output + corrections + coverage note |
▸ Phase 3 of 5 · ~90 min · Build · three checkpoints
Heads down · structured but yours
yosys stat · placed by nextpnr. Numbers in your README. Fmax recorded. If you're here, you're on the demo rubric green path.Hardware deploy (gate 4) can slip to Wednesday morning — but only if gates 1–3 clear today.
// 1. Sketch ports + parameters first — no logic yet
module my_project_core #(
parameter WIDTH = 8,
parameter CLKS_PER_BIT = 217
)(
input wire clk, rst,
input wire [WIDTH-1:0] data_in,
input wire start,
output reg [WIDTH-1:0] result,
output reg done
);
// 2. Name your states next (FSMs only) — localparam, 3-block style
localparam IDLE = 2'd0, BUSY = 2'd1, DONE_S = 2'd2;
reg [1:0] state, nstate;
// 3. THEN logic — the 3 always blocks from Day 7
always @(posedge clk) /* state register */ ;
always @(*) /* next-state + output logic */ ;
endmodule
Skeleton first. Logic second. Self-checking testbench third (Day 5+6 pattern: apply → wait → !== compare → PASS/FAIL). This is the order that lets you compile early and often.
Prompt template: "Generate a self-checking Icarus-compatible testbench for the module below. Cover: nominal flow, reset mid-operation, back-to-back starts, max-WIDTH inputs, illegal opcodes if any. Use $urandom_range(). Print a PASS/FAIL summary at the end. Module: <paste your ports + brief spec>."
$dumpfile · stimulus that never crosses module's actual boundary cases.prompt.txt + tb_ai_raw.v + tb_ai_fixed.v + corrections.md. This is the AI portfolio deliverable.$display beats debugger 80% of the time.▸ Phase 4 of 5 · ~30 min · PPA · AI audit · hardware
Numbers + evidence · the demo-day rubric
$ yosys -p "read_verilog *.sv; synth_ice40 -top my_project_core; stat" 2> ppa.log
$ grep -E "(Number of cells|SB_LUT4|SB_DFF)" ppa.log
$ nextpnr-ice40 --hx1k --json out.json --pcf go_board.pcf \
--asc out.asc --freq 25 2> pnr.log
$ grep "Max frequency" pnr.log
Paste the numbers into your README:
| Metric | Value | Target / note |
|---|---|---|
| LUTs (SB_LUT4) | ___ | iCE40-HX1K has 1280 |
| FFs (SB_DFF) | ___ | iCE40-HX1K has 1280 |
| Fmax | ___ MHz | ≥25 MHz for Go Board clock |
| Utilization | ___ % | <80% recommended |
rst_n at a non-trivial cycle?start the cycle after done?corrections.md: "The AI's TB missed X. I added Y to cover it. Re-running surfaced Z." — that paragraph is the AI portfolio deliverable.
make · iceprog out.bin · the board takes the bitstreamIf hardware deploy slips past today, that's OK — you have Wednesday morning. What you cannot skip: gates 1, 2, 3, 5 by end-of-class today.
▸ Phase 5 of 5 · ~5 min · Demo prep · ¡a por ello!
Tomorrow · listen · Thursday · ship
| Wed AM 6/17 | 🎓 RISC-V guest lecture — David Castells Rufas (UAB) · come with 2 prepared questions |
| Wed PM 6/17 | Open lab · finish anything from today's checklist that slipped · rehearse your 5-min demo |
| Thu 6/18 | 🎤 Demos — 5-min live + 2-min Q&A · then course wrap & AI portfolio share-out |
| Fri 6/19 | Departure / free day · final reflection due 5pm |
| Segment | Time | What to say |
|---|---|---|
| Context | 1 min | What does it do? Why does it matter? (Metro-flavored hook OK.) |
| Live demo | 1–2 min | The thing working on the Go Board · backup video ready |
| Testbench | 1 min | One waveform · your self-checking TB catching a bug-injected variant |
| Trade-off | 1 min | One architectural decision · "I chose X over Y because…" |
| PPA + AI | 30 s | LUTs · FFs · Fmax · one AI TB correction |
| Lessons | 30 s | One surprise · one thing you'd change |
Rehearsal out loud beats rehearsal in your head. Record a phone video, watch it back once, fix the worst 30 seconds.
🔗 Build day closed · ¡vamos!
Tomorrow you hear how RISC-V cores get built using the same primitives you just wired together. Thursday you stand up and show what you made. The hardest day of the course is the day you commit to all of it.