Files

23 lines
7.9 KiB
JSON

{
"$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1",
"card": {"id": "mpabi-inf-rv32i-asm-01-number-systems", "series": "rv32i-asm", "series_title": "ASM · RV32I From Blinker to RISC-V", "number": "01", "count": "09", "slug": "number-systems", "title": "L01 · Number Systems and Storage", "topic": "Systemy pozycyjne, rozszerzenia, przesunięcia i zapis little-endian", "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": "d132962b-7deb-5605-8567-d5d35f688230", "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 · RV32I", "standard": "ISO 7200", "prepared_by": "M. Pabiszczak", "prepared_on": "21.07.2026", "checked_by": "testy automatyczne", "approved_by": "—", "url": "http://localhost:8080", "repository_url": "https://gitea.local/edu-inf/lab-rv32i-asm-number-systems", "revision": "1", "issued_on": "21.07.2026", "series": "RV32I-ASM-01", "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ń łączy wartość z reprezentacją bitową, rozróżnia rozszerzenie znaku od zerowego i wyjaśnia zapis 32-bitowego słowa w pamięci little-endian.", "scope_title": "Zakres tasków", "scope_table": {"headers": ["Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version"], "rows": [{"chapter": "1", "task": "Task01", "idea_tex": "wartość, bin, hex i wagi", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "1", "task": "Task02", "idea_tex": "sign extension i shifts", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}, {"chapter": "1", "task": "Task03", "idea_tex": "little-endian storage", "priority": "obowiązkowe", "status": "ready", "version": "v00.01"}]}},
"learning_effects": {"RV01.EN01": {"text": "Uczeń analizuje równoważne zapisy wartości oraz znaczenie bitu znaku.", "label": "Reprezentacja", "bloom_level": "Analiza", "assessment_criteria": ["RV01.KW01"]}, "RV01.EK01": {"text": "Uczeń implementuje rozszerzenia, przesunięcia i zapis słowa w pamięci.", "label": "Storage semantics", "bloom_level": "Zastosowanie", "assessment_criteria": ["RV01.KW01"]}},
"assessment_criteria": {"RV01.KW01": {"text": "Wartość 173, wyniki dla 0x80 i kolejność bajtów słowa 0x12345678 są potwierdzone niezależnym modelem i self-checking RTL.", "learning_effects": ["RV01.EN01", "RV01.EK01"]}},
"educational_requirements": {"RV01.WE01": {"text": "Podstawy kodowania liczb i pamięci dla RV32I.", "label": "Bits and storage", "learning_effects": ["RV01.EN01", "RV01.EK01"], "learning_tree": {"schema": "we-learning-tree.v1", "policy": "Najpierw przewidywanie wartości, potem pomiar w modelu i RTL; VCD jest dowodem przebiegu, nie dekoracją.", "ogolne": [{"tree_id": "RV01.WE01.OG.IP.01", "effect_ref": "RV01.EN01", "display": "EN IP RV01.01", "text": "Uczeń analizuje bity i system pozycyjny.", "kw": [{"criterion_ref": "RV01.KW01", "display": "KW IP RV01.01", "text": "Odtwarza wartość z wag bitów."}]}], "zawodowe": [{"tree_id": "RV01.WE01.TECH.I4.01", "effect_ref": "RV01.EK01", "display": "EK INF04 RV01.01", "text": "Uczeń implementuje semantykę danych RV32I.", "kw": [{"criterion_ref": "RV01.KW01", "display": "KW INF04 RV01.01", "text": "Weryfikuje extension, shifts i endian."}]}]}}},
"sections": [
{"title": "Task01 · Wartość i reprezentacja", "content_kind": "prose", "content_tex": "Rozłóż 173 na wagi bitów. Potwierdź, że 10101101 w bazie 2 i AD w bazie 16 opisują dokładnie te same osiem bitów.", "educational_requirement_refs": ["RV01.WE01"], "learning_effect_refs": ["RV01.EN01", "RV01.EK01"], "assessment_criterion_refs": ["RV01.KW01"], "area_tree_refs": ["RV01.WE01.OG.IP.01", "RV01.WE01.TECH.I4.01"], "steps": [{"id": "T01-POSITION", "title": "Potwierdź binary=10101101, hex=AD i weighted=173.", "tree_refs": ["RV01.WE01.OG.IP.01"]}], "assets": [{"path": "assets/number-storage.png", "html_path": "assets/number-storage.svg", "caption": "Reprezentacja zachowuje wartość; endian określa kolejność bajtów w pamięci.", "label": "fig:number-storage", "alt": "Diagram wartości, bitów, hex i bajtów little-endian.", "kind": "diagram", "width": 0.72}]},
{"title": "Task02 · Rozszerzenia i przesunięcia", "content_kind": "prose", "content_tex": "Dla bajtu 0x80 porównaj zero extension z sign extension oraz logical shift right z arithmetic shift right. Wypełnienie zerem i bitem znaku daje różne liczby.", "educational_requirement_refs": ["RV01.WE01"], "learning_effect_refs": ["RV01.EN01", "RV01.EK01"], "assessment_criterion_refs": ["RV01.KW01"], "area_tree_refs": ["RV01.WE01.OG.IP.01", "RV01.WE01.TECH.I4.01"], "steps": [{"id": "T02-EXTEND", "title": "Zmierz zext=128, sext=-128, lsr1=64 i asr1=-64.", "tree_refs": ["RV01.WE01.TECH.I4.01"]}]},
{"title": "Task03 · Słowo w pamięci", "content_kind": "prose", "content_tex": "Zapisz 0x12345678 pod adresem 0 w pamięci bajtowej. Little-endian umieszcza bajty 78,56,34,12 pod rosnącymi adresami; odczyt słowa musi odtworzyć wartość.", "educational_requirement_refs": ["RV01.WE01"], "learning_effect_refs": ["RV01.EN01", "RV01.EK01"], "assessment_criterion_refs": ["RV01.KW01"], "area_tree_refs": ["RV01.WE01.OG.IP.01", "RV01.WE01.TECH.I4.01"], "steps": [{"id": "T03-STORAGE", "title": "Potwierdź bytes=78,56,34,12, roundtrip=1 i zapisz VCD.", "tree_refs": ["RV01.WE01.TECH.I4.01"]}]}
],
"tasks": {"task01": {"prompt_tex": "Przelicz 173 między bazami i wagami.", "criterion": "value=173 binary=10101101 hex=AD weighted=173", "assessment_criterion_ref": "RV01.KW01"}, "task02": {"prompt_tex": "Porównaj rozszerzenia i przesunięcia 0x80.", "criterion": "zext=128 sext=-128 lsr1=64 asr1=-64", "assessment_criterion_ref": "RV01.KW01"}, "task03": {"prompt_tex": "Zapisz słowo little-endian i odczytaj je ponownie.", "criterion": "bytes=78,56,34,12 endian=little roundtrip=1", "assessment_criterion_ref": "RV01.KW01"}},
"tasks_order": ["task01", "task02", "task03"], "mission": "Zbudować precyzyjny język bitów, liczb i pamięci przed dekodowaniem RV32I.", "objectives": ["Przeliczysz zapis binarny i hex.", "Wyjaśnisz sign extension i shifts.", "Odtworzysz słowo z bajtów little-endian."],
"agenda": [{"time": "0--20 min", "work": "Bazy i wagi."}, {"time": "20--40 min", "work": "Extension i shifts."}, {"time": "40--65 min", "work": "Pamięć i VCD."}],
"tech_stack": {"software": [{"name": "Python", "use": "niezależny model"}, {"name": "SystemVerilog + Verilator", "use": "self-checking RTL i VCD"}, {"name": "stemctl", "use": "profile native-amd64 i hazard3-sim"}], "hardware": [{"name": "Brak", "use": "karta przygotowawcza"}]},
"container_test": {"title": "Dwa niezależne wykonania", "commands": ["stemctl test native-amd64 rv32i-asm L01 1", "stemctl test hazard3-sim rv32i-asm L01 2", "stemctl debug hazard3-sim rv32i-asm L01 3"], "pass_condition": "Zgodne komunikaty PASS oraz niepusty VCD Task03."},
"safety_rules": [{"title": "Nie mieszaj wartości z zapisem", "body": "Baza zmienia notację, nie przechowywaną wartość."}, {"title": "Jawna szerokość", "body": "Każde rozszerzenie i przesunięcie ma określoną szerokość oraz signedness."}],
"hardware_procedure": [{"step": "1", "action": "Przewiduj.", "condition": "Zapisz bity i liczby przed testem."}, {"step": "2", "action": "Zmierz dwoma modelami.", "condition": "Model i RTL są zgodne."}, {"step": "3", "action": "Zachowaj dowód.", "condition": "PASS i VCD wskazują te same wartości."}], "references": []
}