# 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 L04–L09 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).