OR-1 dataflow CPU sketch
1from dataclasses import dataclass
2from typing import Optional
3
4from cm_inst import FrameOp, MemOp, Port
5
6
7@dataclass(frozen=True)
8class Token:
9 target: int
10
11
12@dataclass(frozen=True)
13class PEToken(Token):
14 pass
15
16
17@dataclass(frozen=True)
18class CMToken(PEToken):
19 offset: int
20 act_id: int
21 data: int
22
23
24@dataclass(frozen=True)
25class DyadToken(CMToken):
26 port: Port
27
28
29@dataclass(frozen=True)
30class MonadToken(CMToken):
31 inline: bool
32
33
34@dataclass(frozen=True)
35class PELocalWriteToken(PEToken):
36 act_id: int
37 region: int
38 slot: int
39 data: int
40 is_dest: bool
41
42
43@dataclass(frozen=True)
44class FrameControlToken(PEToken):
45 act_id: int
46 op: FrameOp
47 payload: int
48
49
50@dataclass(frozen=True)
51class SMToken(Token):
52 addr: int
53 op: MemOp
54 flags: Optional[int]
55 data: Optional[int]
56 ret: Optional[CMToken]