OR-1 dataflow CPU sketch
at main 126 lines 2.0 kB view raw
1from __future__ import annotations 2 3from dataclasses import dataclass 4from typing import Callable 5 6from cm_inst import ALUOp, MemOp 7from sm_mod import Presence 8from tokens import Token 9 10 11@dataclass(frozen=True) 12class TokenReceived: 13 time: float 14 component: str 15 token: Token 16 17 18@dataclass(frozen=True) 19class Matched: 20 time: float 21 component: str 22 left: int 23 right: int 24 act_id: int 25 offset: int 26 frame_id: int 27 28 29@dataclass(frozen=True) 30class Executed: 31 time: float 32 component: str 33 op: ALUOp | MemOp 34 result: int 35 bool_out: bool 36 37 38@dataclass(frozen=True) 39class Emitted: 40 time: float 41 component: str 42 token: Token 43 44 45@dataclass(frozen=True) 46class IRAMWritten: 47 time: float 48 component: str 49 offset: int 50 count: int 51 52 53@dataclass(frozen=True) 54class CellWritten: 55 time: float 56 component: str 57 addr: int 58 old_pres: Presence 59 new_pres: Presence 60 61 62@dataclass(frozen=True) 63class DeferredRead: 64 time: float 65 component: str 66 addr: int 67 68 69@dataclass(frozen=True) 70class DeferredSatisfied: 71 time: float 72 component: str 73 addr: int 74 data: int 75 76 77@dataclass(frozen=True) 78class ResultSent: 79 time: float 80 component: str 81 token: Token 82 83 84@dataclass(frozen=True) 85class FrameAllocated: 86 time: float 87 component: str 88 act_id: int 89 frame_id: int 90 lane: int 91 92 93@dataclass(frozen=True) 94class FrameFreed: 95 time: float 96 component: str 97 act_id: int 98 frame_id: int 99 lane: int 100 frame_freed: bool 101 102 103@dataclass(frozen=True) 104class FrameSlotWritten: 105 time: float 106 component: str 107 frame_id: int 108 slot: int 109 value: int | None 110 111 112@dataclass(frozen=True) 113class TokenRejected: 114 time: float 115 component: str 116 token: Token 117 reason: str 118 119 120SimEvent = ( 121 TokenReceived | Matched | Executed | Emitted | IRAMWritten 122 | CellWritten | DeferredRead | DeferredSatisfied | ResultSent 123 | FrameAllocated | FrameFreed | FrameSlotWritten | TokenRejected 124) 125 126EventCallback = Callable[[SimEvent], None]