#!/usr/bin/env python3 """Independent golden models for L03; no RTL implementation is imported.""" import sys def task01() -> None: counter = 0 previous = 0 pulses = 0 consecutive = 0 for _ in range(16): enable = int(counter == 3) counter = 0 if enable else counter + 1 pulses += enable consecutive += int(enable and previous) previous = enable assert (pulses, consecutive, counter) == (4, 0, 0) print("PASS task01 pulses=4 consecutive=0 final_count=0") def task02() -> None: sequence = [] counter = 0 for _ in range(16): counter = (counter + 1) & 0xF sequence.append((counter >> 2) & 1) edges = [index + 1 for index in range(16) if sequence[index] != (sequence[index - 1] if index else 0)] assert edges == [4, 8, 12, 16] print("PASS task02 led_edges=4,8,12,16 period=8") def task03() -> None: pattern = [0x1, 0x2, 0x4, 0x8, 0x8, 0x4, 0x2, 0x1] observed = [pattern[index & 7] for index in range(10)] assert observed == [1, 2, 4, 8, 8, 4, 2, 1, 1, 2] print("PASS task03 pattern=1,2,4,8,8,4,2,1 wrap=1,2") TASKS = { "task01_clock_enable": task01, "task02_counter_blinker": task02, "task03_pattern_rom": task03, } if len(sys.argv) != 2 or sys.argv[1] not in TASKS: raise SystemExit(f"usage: {sys.argv[0]} {'|'.join(TASKS)}") TASKS[sys.argv[1]]()