23 lines
8.7 KiB
JSON
23 lines
8.7 KiB
JSON
{
|
||
"$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1",
|
||
"card": {"id": "mpabi-inf-rv32i-asm-02-fpga-bringup", "series": "rv32i-asm", "series_title": "ASM · RV32I From Blinker to RISC-V", "number": "02", "count": "09", "slug": "fpga-bringup", "title": "L02 · FPGA Bring-up and Programming", "topic": "Kontrakt płytki, symulacja, programowanie i fizyczny dowód", "project": "From Blinker to RISC-V", "subject": "Informatyka", "level": "Rok 1 · RV32I", "revision_date": "2026-07-21T00:00:00+02:00", "status": "Gotowa do wykonania", "version": "v00.01", "uuid": "31e9c2ad-f597-51ab-af6a-e550c3533f32", "author": "M. Pabiszczak", "year": "2026"},
|
||
"generated": {"tex": "doc/generated/main.tex", "html": "web/index.html", "html_css": "web/style.css", "react_app": true, "html_tree_inspector": false}, "template": "templates/karta-klasyczna.json",
|
||
"title_block": {"category": "KARTA PRACY · INFORMATYKA · FPGA", "standard": "ISO 7200", "prepared_by": "M. Pabiszczak", "prepared_on": "21.07.2026", "checked_by": "testy automatyczne + bramka sprzętowa", "approved_by": "—", "url": "http://localhost:8080", "repository_url": "https://gitea.local/edu-inf/lab-rv32i-asm-fpga-bringup", "revision": "1", "issued_on": "21.07.2026", "series": "RV32I-ASM-02", "document_type": "karta pracy", "tool": "card-layouts", "sheet": "1 / 1", "show_qr": false, "show_repository_qr": false, "height_cm": 3, "repeat_on_every_page": true, "replace_front_matter": true},
|
||
"front_page_scope": {"title": "Cel karty", "content_tex": "Uczeń przygotowuje jawny kontrakt płytki, weryfikuje top-level w symulacji i przechodzi uporządkowany preflight programowania. Automatyczny PASS nie jest dowodem działania fizycznego FPGA.", "scope_title": "Zakres tasków", "scope_table": {"headers": ["Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version"], "rows": [{"chapter": "2", "task": "Task01", "idea_tex": "piny i active-low", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "2", "task": "Task02", "idea_tex": "reset i blinker RTL", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "2", "task": "Task03", "idea_tex": "ordered programming gate", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}]}},
|
||
"learning_effects": {"RV02.EN01": {"text": "Uczeń analizuje granicę między symulacją, bitstreamem, programatorem i obserwacją sprzętu.", "label": "Bring-up evidence", "bloom_level": "Analiza", "assessment_criteria": ["RV02.KW01"]}, "RV02.EK01": {"text": "Uczeń przygotowuje top-level i uporządkowany workflow konfiguracji FPGA.", "label": "FPGA preflight", "bloom_level": "Zastosowanie", "assessment_criteria": ["RV02.KW01"]}},
|
||
"assessment_criteria": {"RV02.KW01": {"text": "Polaryzacja, reset, krawędzie LED i kolejność cable–id–configure–observe są potwierdzone, a wynik modelu raportuje hardware_observed=0 i claim=preflight-only.", "learning_effects": ["RV02.EN01", "RV02.EK01"]}},
|
||
"educational_requirements": {"RV02.WE01": {"text": "Bezpieczny i audytowalny FPGA bring-up.", "label": "Board to observation", "learning_effects": ["RV02.EN01", "RV02.EK01"], "learning_tree": {"schema": "we-learning-tree.v1", "policy": "Nie zgadujemy płytki ani pinów. Model i symulacja mogą zaliczyć preflight, lecz tylko log programatora i obserwacja na wskazanej płytce stanowią dowód fizyczny.", "ogolne": [{"tree_id": "RV02.WE01.OG.IP.01", "effect_ref": "RV02.EN01", "display": "EN IP RV02.01", "text": "Uczeń ocenia siłę dowodów bring-up.", "kw": [{"criterion_ref": "RV02.KW01", "display": "KW IP RV02.01", "text": "Rozróżnia VCD od obserwacji fizycznej."}]}], "zawodowe": [{"tree_id": "RV02.WE01.TECH.I4.01", "effect_ref": "RV02.EK01", "display": "EK INF04 RV02.01", "text": "Uczeń przygotowuje kontrakt i kolejność programowania.", "kw": [{"criterion_ref": "RV02.KW01", "display": "KW INF04 RV02.01", "text": "Nie omija identyfikacji urządzenia."}]}]}}},
|
||
"sections": [
|
||
{"title": "Task01 · Kontrakt płytki i polaryzacja", "content_kind": "prose", "content_tex": "Wypełnij board/board-contract.yaml dla konkretnego stanowiska. Potwierdź active-low reset, button i LED; wartości \\texttt{SET\\_*} są blokadą przeciw przypadkowemu użyciu obcych pinów.", "educational_requirement_refs": ["RV02.WE01"], "learning_effect_refs": ["RV02.EN01", "RV02.EK01"], "assessment_criterion_refs": ["RV02.KW01"], "area_tree_refs": ["RV02.WE01.OG.IP.01", "RV02.WE01.TECH.I4.01"], "steps": [{"id": "T01-PINS", "title": "Potwierdź pin_contract=generic i jawne polaryzacje.", "tree_refs": ["RV02.WE01.TECH.I4.01"]}], "assets": [{"path": "assets/bringup-gate.png", "html_path": "assets/bringup-gate.svg", "caption": "Symulacja kończy automatyczny preflight; fizyczny dowód wymaga rzeczywistej płytki.", "label": "fig:bringup-gate", "alt": "Diagram kolejnych bramek FPGA bring-up.", "kind": "diagram", "width": 0.72}]},
|
||
{"title": "Task02 · Top-level blinker", "content_kind": "prose", "content_tex": "Zasymuluj znany reset i dzielnik. LED musi zmienić stan w taktach 4, 8, 12 i 16. VCD dowodzi zachowania RTL, ale nie poprawności constraintów ani połączeń płytki.", "educational_requirement_refs": ["RV02.WE01"], "learning_effect_refs": ["RV02.EN01", "RV02.EK01"], "assessment_criterion_refs": ["RV02.KW01"], "area_tree_refs": ["RV02.WE01.OG.IP.01", "RV02.WE01.TECH.I4.01"], "steps": [{"id": "T02-BLINK", "title": "Zmierz reset_known=1, cztery krawędzie i zapisz VCD.", "tree_refs": ["RV02.WE01.TECH.I4.01"]}]},
|
||
{"title": "Task03 · Bramka programowania", "content_kind": "prose", "content_tex": "Przejdź kolejno przez cable, device ID, configure i observe. Model blokuje pominięcie etapu, lecz jego PASS zawsze kończy się \\texttt{hardware\\_observed=0} oraz \\texttt{claim=preflight-only}. Fizyczny wynik wpisz osobno.", "educational_requirement_refs": ["RV02.WE01"], "learning_effect_refs": ["RV02.EN01", "RV02.EK01"], "assessment_criterion_refs": ["RV02.KW01"], "area_tree_refs": ["RV02.WE01.OG.IP.01", "RV02.WE01.TECH.I4.01"], "steps": [{"id": "T03-GATE", "title": "Potwierdź kolejność i brak fałszywego hardware claim.", "tree_refs": ["RV02.WE01.OG.IP.01"]}]}
|
||
],
|
||
"tasks": {"task01": {"prompt_tex": "Zweryfikuj polaryzację interfejsu płytki.", "criterion": "reset_active=1 button_active=1 led_n=0 pin_contract=generic", "assessment_criterion_ref": "RV02.KW01"}, "task02": {"prompt_tex": "Zweryfikuj reset i blinker.", "criterion": "reset_known=1 led_edges=4,8,12,16 divider=4", "assessment_criterion_ref": "RV02.KW01"}, "task03": {"prompt_tex": "Przejdź uporządkowany model programowania.", "criterion": "order=cable,id,configure,observe hardware_observed=0 claim=preflight-only", "assessment_criterion_ref": "RV02.KW01"}},
|
||
"tasks_order": ["task01", "task02", "task03"], "mission": "Przygotować bezpieczny, nieudawany workflow od board contract do obserwacji LED.", "objectives": ["Zdefiniujesz płytkę i polaryzacje.", "Zweryfikujesz blinker przed syntezą.", "Oddzielisz preflight od fizycznego dowodu."],
|
||
"agenda": [{"time": "0--20 min", "work": "Kontrakt i piny."}, {"time": "20--40 min", "work": "Symulacja top-level."}, {"time": "40--70 min", "work": "Programowanie i formularz dowodowy."}],
|
||
"tech_stack": {"software": [{"name": "SystemVerilog + Verilator", "use": "preflight RTL i VCD"}, {"name": "Board-specific FPGA toolchain", "use": "realny bitstream po uzupełnieniu kontraktu"}, {"name": "stemctl", "use": "profile native-amd64 i hazard3-sim"}], "hardware": [{"name": "Płytka określona przez board-contract.yaml", "use": "fizyczna bramka poza automatycznym modelem"}]},
|
||
"container_test": {"title": "Automatyczny preflight", "commands": ["stemctl test native-amd64 rv32i-asm L02 1", "stemctl debug hazard3-sim rv32i-asm L02 2", "stemctl test hazard3-sim rv32i-asm L02 3"], "pass_condition": "Trzy PASS, VCD oraz jawne hardware_observed=0; ten wynik nie jest dowodem fizycznego FPGA."},
|
||
"safety_rules": [{"title": "Nie zgaduj pinów", "body": "Nie uruchamiaj syntezy ani programowania z wartościami SET_* w board-contract.yaml."}, {"title": "Identyfikuj przed konfiguracją", "body": "Odczytany device ID musi odpowiadać fpga_part kontraktu."}, {"title": "Nie zawyżaj dowodu", "body": "Symulacja, model workflow i plik VCD nie zastępują logu programatora oraz obserwacji LED."}],
|
||
"hardware_procedure": [{"step": "1", "action": "Uzupełnij board contract.", "condition": "Znane board ID, part, clock, piny i toolchain."}, {"step": "2", "action": "Zbuduj i zahashuj bitstream.", "condition": "Build zakończony, SHA-256 zapisany."}, {"step": "3", "action": "Wykryj i skonfiguruj FPGA.", "condition": "Device ID zgodny, programator exit 0."}, {"step": "4", "action": "Zmierz LED.", "condition": "Obserwator, czas i okres zapisane w evidence."}], "references": []
|
||
}
|