feat(L03): add blinker and synchronous logic card

This commit is contained in:
user
2026-07-21 16:47:33 +02:00
commit 0a130e4eae
42 changed files with 7514 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
# L03 · Blinker and Synchronous Logic
Trzecia karta serii **ASM · RV32I From Blinker to RISC-V** prowadzi od
pojedynczego impulsu taktującego do deterministycznego wzorca LED. Uczeń nie
używa opóźnień `#` w projektowanym RTL: stan zmienia się wyłącznie na zboczu
zegara, a czas wynika z licznika.
## Rezultat
Po karcie uczeń potrafi:
- odróżnić logikę kombinacyjną od rejestru aktualizowanego na `posedge`;
- zbudować synchroniczny reset i impuls `clock_enable` trwający jeden takt;
- wyprowadzić okres wybranego bitu licznika;
- użyć indeksu fazy do odczytu stałego wzorca LED;
- wykazać przebiegiem, że reset, przepełnienie i zawijanie ROM-u są
deterministyczne.
## Taski
| Task | Cel mierzalny | Oczekiwany dowód |
| --- | --- | --- |
| `task01_clock_enable` | impuls co cztery zbocza, nigdy przez dwa kolejne takty | `pulses=4`, `consecutive=0` |
| `task02_counter_blinker` | LED równy bitowi 2 czterobitowego licznika | krawędzie LED przy licznikach 4, 8, 12 i 0 |
| `task03_pattern_rom` | osiem faz wzorca `01,02,04,08,08,04,02,01` | poprawna sekwencja i zawinięcie 7 → 0 |
## Praca wyłącznie przez stemctl
```bash
stemctl card use rv32i-asm L03
stemctl tasks list
stemctl test native-amd64 rv32i-asm L03 1
stemctl test hazard3-sim rv32i-asm L03 1
stemctl debug hazard3-sim rv32i-asm L03 2
```
Profil `native-amd64` uruchamia niezależny model referencyjny. Profil
`hazard3-sim` dostarcza Verilatora i wykonuje właściwy, syntezowalny RTL.
Nazwa technicznego targetu `hazard3-baremetal` wynika z istniejącego kontraktu
środowiska; w tej karcie obraz jest używany jako warsztat RTL, zanim w L04L09
powstanie rdzeń wykonujący RV32I.
Akcja `debug` zapisuje deterministyczny plik VCD w `.stem/artifacts` i wypisuje
ścieżkę artefaktu. Sprzętowy bitstream i piny płytki należą do bramki L02;
L03 nie zgaduje nieznanego modelu FPGA.
## Reguła zaliczenia
Najpierw wpisz przewidywanie do [answers/blinker-evidence.md](answers/blinker-evidence.md),
potem uruchom pomiar. PASS wymaga jednocześnie:
1. zgodności modelu referencyjnego;
2. zakończenia self-checking testbencha bez `$fatal`;
3. oczekiwanej sekwencji sygnałów;
4. braku impulsu `enable` w dwóch kolejnych taktach;
5. wskazania dokładnej ścieżki VCD dla Task02 lub Task03.
Opis mechanicznego przebiegu lekcji znajduje się w
[lesson-flow.yaml](lesson-flow.yaml).