aboutsummaryrefslogtreecommitdiff
path: root/arch/v1/arch_vars.py
blob: c794a2903849b7f01b138f401a3c862ef712df68 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
class ArchVars:
    def __init__(self, args):
        self.inst_set = [
            (["noop"], " "),
            (["nop0"], "0"),
            (["nop1"], "1"),
            (["nop2"], "2"),
            (["nop3"], "3"),

            (["jmpb"], "("),
            (["jmpf"], ")"),
            (["adrb"], "["),
            (["adrf"], "]"),
            (["ifnz"], "?"),

            (["allb"], "{"),
            (["allf"], "}"),
            (["bswp"], "%"),
            (["bclr"], "|"),
            (["splt"], "$"),

            (["addn"], "+"),
            (["subn"], "-"),
            (["muln"], "*"),
            (["divn"], "/"),
            (["incn"], "^"),
            (["decn"], "v"),
            (["notn"], "!"),
            (["shfl"], "<"),
            (["shfr"], ">"),
            (["zero"], "z"),
            (["unit"], "u"),

            (["pshn"], "#"),
            (["popn"], "~"),

            (["load"], "."),
            (["wrte"], ":"),
            (["dupl"], "="),
            (["swap"], "x"),

            (["keya"], "a"),
            (["keyb"], "b"),
            (["keyc"], "c"),
            (["keyd"], "d"),
            (["keye"], "e"),
            (["keyf"], "f"),
            (["keyg"], "g"),
            (["keyh"], "h"),
            (["keyi"], "i"),
            (["keyj"], "j"),
            (["keyk"], "k"),
            (["keyl"], "l"),
            (["keym"], "m"),
            (["keyn"], "n"),
            (["keyo"], "o"),
            (["keyp"], "p"),

            (["loka"], "A"),
            (["lokb"], "B"),
            (["lokc"], "C"),
            (["lokd"], "D"),
            (["loke"], "E"),
            (["lokf"], "F"),
            (["lokg"], "G"),
            (["lokh"], "H"),
            (["loki"], "I"),
            (["lokj"], "J"),
            (["lokk"], "K"),
            (["lokl"], "L"),
            (["lokm"], "M"),
            (["lokn"], "N"),
            (["loko"], "O"),
            (["lokp"], "P"),
        ]

        self.core_fields = []
        self.core_data_fields = [
            ("uint64_t", "iexe", f"[{len(self.inst_set)}]"), # instruction execution counter
            ("uint64_t", "iwrt", f"[{len(self.inst_set)}]"), # instruction write counter

            ("uint64_t", "wmb0", ""), # writes within mb0 counter
            ("uint64_t", "wmb1", ""), # writes within mb1 counter
            ("uint64_t", "wdea", ""), # writes within dead code counter

            ("uint64_t", "weva", f"[{2 ** args.mvec_pow}]"), # write events array
        ]

        self.mvec_loop = False

        self.proc_fields = [
            ("uint64_t", "ip"),
            ("uint64_t", "sp"),
            ("uint64_t", "mb0a"),
            ("uint64_t", "mb0s"),
            ("uint64_t", "mb1a"),
            ("uint64_t", "mb1s"),
            ("uint64_t", "r0x"),
            ("uint64_t", "r1x"),
            ("uint64_t", "r2x"),
            ("uint64_t", "r3x"),
            ("uint64_t", "s0"),
            ("uint64_t", "s1"),
            ("uint64_t", "s2"),
            ("uint64_t", "s3"),
            ("uint64_t", "s4"),
            ("uint64_t", "s5"),
            ("uint64_t", "s6"),
            ("uint64_t", "s7"),
        ]

        self.plots = {
            "General": {
                "wevs": {
                    "table": "arch_general",
                    "type": "lines",
                    "cols": [f"{pref}_{i}" for pref in ["wmb0", "wmb1", "wdea"] for i in range(args.cores)],
                },
            },
            "Instructions": {
                f"ipop_{i}": {
                    "table": f"pop_{i}",
                    "type": "stack",
                    "cols": ["_".join(inst[0]) for inst in self.inst_set],
                } for i in range(args.cores)
            } | {
                f"iexe%_{i}": {
                    "table": f"exe_{i}",
                    "type": "stack_percent",
                    "cols": ["_".join(inst[0]) for inst in self.inst_set],
                } for i in range(args.cores)
            } | {
                f"iwrt%_{i}": {
                    "table": f"wrt_{i}",
                    "type": "stack_percent",
                    "cols": ["_".join(inst[0]) for inst in self.inst_set],
                } for i in range(args.cores)
            },
        }

        self.heatmaps = {
            "Events": {
                f"wev_{i}": {
                    "table": f"wev_{i}",
                } for i in range(args.cores)
            }
        }