OR-1 dataflow CPU sketch
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]