aboutsummaryrefslogtreecommitdiff
path: root/test/chisel3/Tile.fir
blob: eeec18ee7ce8b0ae764dc1907abd4be60297bbc0 (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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
; RUN: firrtl -i %s -o %s.flo -X flo -p c | tee %s.out | FileCheck %s
;CHECK: Done!

circuit Tile : 
  module ALU : 
    input B : UInt<32>
    output out : UInt<32>
    output sum : UInt<32>
    input A : UInt<32>
    input alu_op : UInt<4>
    
    node shamt = bits(B, 4, 0)
    node T_1554 = add-wrap(A, B)
    node T_1555 = sub-wrap(A, B)
    node T_1556 = convert(A)
    node T_1557 = dshr(T_1556, shamt)
    node T_1558 = as-UInt(T_1557)
    node T_1559 = dshr(A, shamt)
    node T_1560 = dshl(A, shamt)
    node T_1561 = bits(T_1560, 31, 0)
    node T_1562 = convert(A)
    node T_1563 = convert(B)
    node T_1564 = lt(T_1562, T_1563)
    node T_1565 = as-UInt(T_1564)
    node T_1566 = lt(A, B)
    node T_1567 = as-UInt(T_1566)
    node T_1568 = bit-and(A, B)
    node T_1569 = bit-or(A, B)
    node T_1570 = bit-xor(A, B)
    node T_1571 = eq(UInt<4>(10), alu_op)
    node T_1572 = mux(T_1571, A, B)
    node T_1573 = eq(UInt<4>(4), alu_op)
    node T_1574 = mux(T_1573, T_1570, T_1572)
    node T_1575 = eq(UInt<4>(3), alu_op)
    node T_1576 = mux(T_1575, T_1569, T_1574)
    node T_1577 = eq(UInt<4>(2), alu_op)
    node T_1578 = mux(T_1577, T_1568, T_1576)
    node T_1579 = eq(UInt<4>(7), alu_op)
    node T_1580 = mux(T_1579, T_1567, T_1578)
    node T_1581 = eq(UInt<4>(5), alu_op)
    node T_1582 = mux(T_1581, T_1565, T_1580)
    node T_1583 = eq(UInt<4>(6), alu_op)
    node T_1584 = mux(T_1583, T_1561, T_1582)
    node T_1585 = eq(UInt<4>(8), alu_op)
    node T_1586 = mux(T_1585, T_1559, T_1584)
    node T_1587 = eq(UInt<4>(9), alu_op)
    node T_1588 = mux(T_1587, T_1558, T_1586)
    node T_1589 = eq(UInt<4>(1), alu_op)
    node T_1590 = mux(T_1589, T_1555, T_1588)
    node T_1591 = eq(UInt<4>(0), alu_op)
    node oot = mux(T_1591, T_1554, T_1590)
    node T_1592 = bits(oot, 31, 0)
    out := T_1592
    node T_1593 = bit(alu_op, 0)
    node T_1594 = sub-wrap(UInt<1>(0), B)
    node T_1595 = mux(T_1593, T_1594, B)
    node T_1596 = add-wrap(A, T_1595)
    sum := T_1596
  module BrCond : 
    input br_type : UInt<3>
    input rs1 : UInt<32>
    input rs2 : UInt<32>
    output taken : UInt<1>
    
    node eq = eq(rs1, rs2)
    node neq = bit-not(eq)
    node T_1597 = convert(rs1)
    node T_1598 = convert(rs2)
    node lt = lt(T_1597, T_1598)
    node ge = bit-not(lt)
    node ltu = lt(rs1, rs2)
    node geu = bit-not(ltu)
    node T_1599 = eq(br_type, UInt<3>(2))
    node T_1600 = bit-and(T_1599, eq)
    node T_1601 = eq(br_type, UInt<3>(6))
    node T_1602 = bit-and(T_1601, neq)
    node T_1603 = bit-or(T_1600, T_1602)
    node T_1604 = eq(br_type, UInt<3>(1))
    node T_1605 = bit-and(T_1604, lt)
    node T_1606 = bit-or(T_1603, T_1605)
    node T_1607 = eq(br_type, UInt<3>(5))
    node T_1608 = bit-and(T_1607, ge)
    node T_1609 = bit-or(T_1606, T_1608)
    node T_1610 = eq(br_type, UInt<3>(0))
    node T_1611 = bit-and(T_1610, ltu)
    node T_1612 = bit-or(T_1609, T_1611)
    node T_1613 = eq(br_type, UInt<3>(4))
    node T_1614 = bit-and(T_1613, geu)
    node T_1615 = bit-or(T_1612, T_1614)
    taken := T_1615
  module RegFile : 
    input raddr1 : UInt<5>
    input raddr2 : UInt<5>
    output rdata1 : UInt<32>
    output rdata2 : UInt<32>
    input wen : UInt<1>
    input waddr : UInt<5>
    input wdata : UInt<32>
    
    mem regs : UInt<32>[32]
    node T_1616 = eq(raddr1, UInt<1>(0))
    node T_1617 = bit-not(T_1616)
    accessor T_1618 = regs[raddr1]
    node T_1619 = mux(T_1617, T_1618, UInt<1>(0))
    rdata1 := T_1619
    node T_1620 = eq(raddr2, UInt<1>(0))
    node T_1621 = bit-not(T_1620)
    accessor T_1622 = regs[raddr2]
    node T_1623 = mux(T_1621, T_1622, UInt<1>(0))
    rdata2 := T_1623
    node T_1624 = eq(waddr, UInt<1>(0))
    node T_1625 = bit-not(T_1624)
    node T_1626 = bit-and(wen, T_1625)
    when T_1626 : 
      accessor T_1627 = regs[waddr]
      T_1627 := wdata
  module ImmGenWire : 
    output out : UInt<32>
    input inst : UInt<32>
    input sel : UInt<3>
    
    node T_1628 = bits(inst, 31, 20)
    node Iimm = convert(T_1628)
    node T_1629 = bits(inst, 31, 25)
    node T_1630 = bits(inst, 11, 7)
    node T_1631 = cat(T_1629, T_1630)
    node Simm = convert(T_1631)
    node T_1632 = bit(inst, 31)
    node T_1633 = bit(inst, 7)
    node T_1634 = bits(inst, 30, 25)
    node T_1635 = bits(inst, 11, 8)
    node T_1636 = cat(T_1632, T_1633)
    node T_1637 = cat(T_1635, UInt<1>(0))
    node T_1638 = cat(T_1634, T_1637)
    node T_1639 = cat(T_1636, T_1638)
    node Bimm = convert(T_1639)
    node T_1640 = bits(inst, 31, 12)
    node T_1641 = cat(T_1640, UInt<12>(0))
    node Uimm = convert(T_1641)
    node T_1642 = bit(inst, 31)
    node T_1643 = bits(inst, 19, 12)
    node T_1644 = bit(inst, 20)
    node T_1645 = bits(inst, 30, 25)
    node T_1646 = bits(inst, 24, 21)
    node T_1647 = cat(T_1643, T_1644)
    node T_1648 = cat(T_1642, T_1647)
    node T_1649 = cat(T_1646, UInt<1>(0))
    node T_1650 = cat(T_1645, T_1649)
    node T_1651 = cat(T_1648, T_1650)
    node Jimm = convert(T_1651)
    node T_1652 = bits(inst, 19, 15)
    node T_1653 = pad(T_1652, 32)
    node Zimm = convert(T_1653)
    node T_1654 = eq(UInt<3>(3), sel)
    node T_1655 = mux(T_1654, Jimm, Zimm)
    node T_1656 = eq(UInt<3>(2), sel)
    node T_1657 = mux(T_1656, Uimm, T_1655)
    node T_1658 = eq(UInt<3>(4), sel)
    node T_1659 = mux(T_1658, Bimm, T_1657)
    node T_1660 = eq(UInt<3>(1), sel)
    node T_1661 = mux(T_1660, Simm, T_1659)
    node T_1662 = eq(UInt<3>(0), sel)
    node T_1663 = mux(T_1662, Iimm, T_1661)
    node T_1664 = as-UInt(T_1663)
    out := T_1664
  module CSR : 
    output host : {status : UInt<32>, flip hid : UInt<1>, tohost : UInt<32>}
    input cmd : UInt<2>
    input src : UInt<32>
    output data : UInt<32>
    input addr : UInt<12>
    
    reg reg_tohost : UInt<32>
    on-reset reg_tohost := UInt<32>(0)
    reg reg_status : UInt<32>
    on-reset reg_status := UInt<32>(0)
    host.tohost := reg_tohost
    host.status := reg_status
    node T_1665 = eq(UInt<12>(1291), addr)
    node T_1666 = mux(T_1665, host.hid, UInt<1>(0))
    node T_1667 = eq(UInt<12>(1290), addr)
    node T_1668 = mux(T_1667, reg_status, T_1666)
    node T_1669 = eq(UInt<12>(1310), addr)
    node T_1670 = mux(T_1669, reg_tohost, T_1668)
    data := T_1670
    node T_1671 = eq(cmd, UInt<2>(1))
    when T_1671 : 
      node T_1672 = eq(addr, UInt<12>(1310))
      when T_1672 : reg_tohost := src
      node T_1673 = eq(addr, UInt<12>(1290))
      when T_1673 : reg_status := src
    node T_1674 = eq(cmd, UInt<2>(2))
    node T_1675 = neq(src, UInt<1>(0))
    node T_1676 = bit-and(T_1674, T_1675)
    when T_1676 : 
      node T_1677 = eq(addr, UInt<12>(1310))
      when T_1677 : 
        node T_1678 = dshl(UInt<1>(1), src)
        node T_1679 = bit-or(data, T_1678)
        reg_tohost := T_1679
      node T_1680 = eq(addr, UInt<12>(1290))
      when T_1680 : 
        node T_1681 = dshl(UInt<1>(1), src)
        node T_1682 = bit-or(data, T_1681)
        reg_status := T_1682
    node T_1683 = eq(cmd, UInt<2>(3))
    node T_1684 = neq(src, UInt<1>(0))
    node T_1685 = bit-and(T_1683, T_1684)
    when T_1685 : 
      node T_1686 = eq(addr, UInt<12>(1310))
      when T_1686 : 
        node T_1687 = dshl(UInt<1>(0), src)
        node T_1688 = bit-and(data, T_1687)
        reg_tohost := T_1688
      node T_1689 = eq(addr, UInt<12>(1290))
      when T_1689 : 
        node T_1690 = dshl(UInt<1>(0), src)
        node T_1691 = bit-and(data, T_1690)
        reg_status := T_1691
  module Datapath : 
    output host : {status : UInt<32>, flip hid : UInt<1>, tohost : UInt<32>}
    input stall : UInt<1>
    output icache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    output dcache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    input ctrl : {flip inst : UInt<32>, flip stall : UInt<1>, inst_re : UInt<1>, inst_type : UInt<1>, pc_sel : UInt<1>, A_sel : UInt<1>, B_sel : UInt<1>, imm_sel : UInt<3>, alu_op : UInt<4>, br_type : UInt<3>, data_re : UInt<1>, st_type : UInt<2>, ld_type : UInt<3>, wb_sel : UInt<2>, wb_en : UInt<1>, csr_cmd : UInt<2>}
    
    inst alu of ALU
    inst brCond of BrCond
    inst regFile of RegFile
    inst immGen of ImmGenWire
    reg fe_inst : UInt<32>
    on-reset fe_inst := UInt<32>(0)
    reg fe_pc : UInt
    reg ew_inst : UInt<32>
    on-reset ew_inst := UInt<32>(0)
    reg ew_pc : UInt
    reg ew_alu : UInt
    node T_1692 = sub-wrap(UInt<14>(8192), UInt<32>(4))
    reg pc : UInt<32>
    on-reset pc := T_1692
    node T_1693 = eq(ctrl.pc_sel, UInt<1>(1))
    node T_1694 = bit-or(T_1693, brCond.taken)
    node T_1695 = add-wrap(pc, UInt<3>(4))
    node iaddr = mux(T_1694, alu.sum, T_1695)
    node T_1696 = eq(ctrl.inst_type, UInt<1>(1))
    node T_1697 = bit-or(T_1696, brCond.taken)
    node inst = mux(T_1697, UInt<32>(19), icache.dout)
    icache.we := UInt<1>(0)
    icache.din := UInt<1>(0)
    icache.addr := iaddr
    icache.re := ctrl.inst_re
    node T_1698 = eq(dcache.we, UInt<1>(0))
    node T_1699 = bit-not(T_1698)
    node T_1700 = bit-not(T_1699)
    node T_1701 = bit-and(icache.re, T_1700)
    node T_1702 = mux(T_1701, iaddr, pc)
    pc := T_1702
    node T_1703 = bit-not(stall)
    when T_1703 : 
      fe_pc := pc
      fe_inst := inst
    ctrl.inst := fe_inst
    ctrl.stall := stall
    node rd_addr = bits(fe_inst, 11, 7)
    node rs1_addr = bits(fe_inst, 19, 15)
    node rs2_addr = bits(fe_inst, 24, 20)
    regFile.raddr1 := rs1_addr
    regFile.raddr2 := rs2_addr
    immGen.inst := fe_inst
    immGen.sel := ctrl.imm_sel
    node T_1704 = eq(rs1_addr, UInt<1>(0))
    node rs1NotZero = bit-not(T_1704)
    node T_1705 = eq(rs2_addr, UInt<1>(0))
    node rs2NotZero = bit-not(T_1705)
    node T_1706 = eq(ctrl.wb_sel, UInt<2>(0))
    node alutype = bit-and(ctrl.wb_en, T_1706)
    node ex_rd_addr = bits(ew_inst, 11, 7)
    node T_1707 = bit-and(alutype, rs1NotZero)
    node T_1708 = eq(rs1_addr, ex_rd_addr)
    node T_1709 = bit-and(T_1707, T_1708)
    node rs1 = mux(T_1709, ew_alu, regFile.rdata1)
    node T_1710 = bit-and(alutype, rs2NotZero)
    node T_1711 = eq(rs2_addr, ex_rd_addr)
    node T_1712 = bit-and(T_1710, T_1711)
    node rs2 = mux(T_1712, ew_alu, regFile.rdata2)
    node T_1713 = eq(ctrl.A_sel, UInt<1>(0))
    node T_1714 = mux(T_1713, rs1, fe_pc)
    alu.A := T_1714
    node T_1715 = eq(ctrl.B_sel, UInt<1>(0))
    node T_1716 = mux(T_1715, rs2, immGen.out)
    alu.B := T_1716
    alu.alu_op := ctrl.alu_op
    brCond.rs1 := rs1
    brCond.rs2 := rs2
    brCond.br_type := ctrl.br_type
    node T_1717 = bit(alu.sum, 1)
    node T_1718 = dshl(T_1717, UInt<3>(4))
    node T_1719 = bit(alu.sum, 0)
    node T_1720 = dshl(T_1719, UInt<2>(3))
    node woffset = bit-or(T_1718, T_1720)
    dcache.re := ctrl.data_re
    node T_1721 = mux(stall, ew_alu, alu.sum)
    dcache.addr := T_1721
    node T_1722 = bits(alu.sum, 1, 0)
    node T_1723 = dshl(UInt<2>(3), T_1722)
    node T_1724 = bits(T_1723, 3, 0)
    node T_1725 = bits(alu.sum, 1, 0)
    node T_1726 = dshl(UInt<1>(1), T_1725)
    node T_1727 = bits(T_1726, 3, 0)
    node T_1728 = eq(UInt<2>(2), ctrl.st_type)
    node T_1729 = mux(T_1728, T_1727, UInt<4>(0))
    node T_1730 = eq(UInt<2>(1), ctrl.st_type)
    node T_1731 = mux(T_1730, T_1724, T_1729)
    node T_1732 = eq(UInt<2>(0), ctrl.st_type)
    node T_1733 = mux(T_1732, UInt<4>(15), T_1731)
    node T_1734 = mux(stall, UInt<4>(0), T_1733)
    dcache.we := T_1734
    node T_1735 = dshl(rs2, woffset)
    node T_1736 = bits(T_1735, 31, 0)
    dcache.din := T_1736
    node T_1737 = bit-not(stall)
    when T_1737 : 
      ew_pc := fe_pc
      ew_inst := fe_inst
      ew_alu := alu.out
    node T_1738 = bit(ew_alu, 1)
    node T_1739 = dshl(T_1738, UInt<3>(4))
    node T_1740 = bit(ew_alu, 0)
    node T_1741 = dshl(T_1740, UInt<2>(3))
    node loffset = bit-or(T_1739, T_1741)
    node lshift = dshr(dcache.dout, loffset)
    node T_1742 = bits(lshift, 15, 0)
    node T_1743 = convert(T_1742)
    node T_1744 = pad(T_1743, 32)
    node T_1745 = as-UInt(T_1744)
    node T_1746 = bits(lshift, 7, 0)
    node T_1747 = convert(T_1746)
    node T_1748 = pad(T_1747, 32)
    node T_1749 = as-UInt(T_1748)
    node T_1750 = bits(lshift, 15, 0)
    node T_1751 = bits(lshift, 7, 0)
    node T_1752 = eq(UInt<3>(4), ctrl.ld_type)
    node T_1753 = mux(T_1752, T_1751, dcache.dout)
    node T_1754 = eq(UInt<3>(3), ctrl.ld_type)
    node T_1755 = mux(T_1754, T_1750, T_1753)
    node T_1756 = eq(UInt<3>(2), ctrl.ld_type)
    node T_1757 = mux(T_1756, T_1749, T_1755)
    node T_1758 = eq(UInt<3>(1), ctrl.ld_type)
    node load = mux(T_1758, T_1745, T_1757)
    inst csr of CSR
    host := csr.host
    csr.src := ew_alu
    node T_1759 = bits(ew_inst, 31, 20)
    csr.addr := T_1759
    csr.cmd := ctrl.csr_cmd
    node T_1760 = add-wrap(ew_pc, UInt<3>(4))
    node T_1761 = eq(UInt<2>(3), ctrl.wb_sel)
    node T_1762 = mux(T_1761, csr.data, ew_alu)
    node T_1763 = eq(UInt<2>(2), ctrl.wb_sel)
    node T_1764 = mux(T_1763, T_1760, T_1762)
    node T_1765 = eq(UInt<2>(1), ctrl.wb_sel)
    node regWrite = mux(T_1765, load, T_1764)
    regFile.wen := ctrl.wb_en
    regFile.waddr := ex_rd_addr
    regFile.wdata := regWrite
  module Control : 
    output ctrl : {flip inst : UInt<32>, flip stall : UInt<1>, inst_re : UInt<1>, inst_type : UInt<1>, pc_sel : UInt<1>, A_sel : UInt<1>, B_sel : UInt<1>, imm_sel : UInt<3>, alu_op : UInt<4>, br_type : UInt<3>, data_re : UInt<1>, st_type : UInt<2>, ld_type : UInt<3>, wb_sel : UInt<2>, wb_en : UInt<1>, csr_cmd : UInt<2>}
    
    node T_1766 = bit-and(UInt<7>(127), ctrl.inst)
    node T_1767 = eq(T_1766, UInt<6>(55))
    node T_1768 = bit-and(UInt<7>(127), ctrl.inst)
    node T_1769 = eq(T_1768, UInt<5>(23))
    node T_1770 = bit-and(UInt<7>(127), ctrl.inst)
    node T_1771 = eq(T_1770, UInt<7>(111))
    node T_1772 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1773 = eq(T_1772, UInt<7>(103))
    node T_1774 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1775 = eq(T_1774, UInt<7>(99))
    node T_1776 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1777 = eq(T_1776, UInt<13>(4195))
    node T_1778 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1779 = eq(T_1778, UInt<15>(16483))
    node T_1780 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1781 = eq(T_1780, UInt<15>(20579))
    node T_1782 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1783 = eq(T_1782, UInt<15>(24675))
    node T_1784 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1785 = eq(T_1784, UInt<15>(28771))
    node T_1786 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1787 = eq(T_1786, UInt<2>(3))
    node T_1788 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1789 = eq(T_1788, UInt<13>(4099))
    node T_1790 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1791 = eq(T_1790, UInt<14>(8195))
    node T_1792 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1793 = eq(T_1792, UInt<15>(16387))
    node T_1794 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1795 = eq(T_1794, UInt<15>(20483))
    node T_1796 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1797 = eq(T_1796, UInt<6>(35))
    node T_1798 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1799 = eq(T_1798, UInt<13>(4131))
    node T_1800 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1801 = eq(T_1800, UInt<14>(8227))
    node T_1802 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1803 = eq(T_1802, UInt<5>(19))
    node T_1804 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1805 = eq(T_1804, UInt<14>(8211))
    node T_1806 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1807 = eq(T_1806, UInt<14>(12307))
    node T_1808 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1809 = eq(T_1808, UInt<15>(16403))
    node T_1810 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1811 = eq(T_1810, UInt<15>(24595))
    node T_1812 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1813 = eq(T_1812, UInt<15>(28691))
    node T_1814 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1815 = eq(T_1814, UInt<13>(4115))
    node T_1816 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1817 = eq(T_1816, UInt<15>(20499))
    node T_1818 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1819 = eq(T_1818, UInt<31>(1073762323))
    node T_1820 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1821 = eq(T_1820, UInt<6>(51))
    node T_1822 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1823 = eq(T_1822, UInt<31>(1073741875))
    node T_1824 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1825 = eq(T_1824, UInt<13>(4147))
    node T_1826 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1827 = eq(T_1826, UInt<14>(8243))
    node T_1828 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1829 = eq(T_1828, UInt<14>(12339))
    node T_1830 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1831 = eq(T_1830, UInt<15>(16435))
    node T_1832 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1833 = eq(T_1832, UInt<15>(20531))
    node T_1834 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1835 = eq(T_1834, UInt<31>(1073762355))
    node T_1836 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1837 = eq(T_1836, UInt<15>(24627))
    node T_1838 = bit-and(UInt<32>(4261441663), ctrl.inst)
    node T_1839 = eq(T_1838, UInt<15>(28723))
    node T_1840 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1841 = eq(T_1840, UInt<13>(4211))
    node T_1842 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1843 = eq(T_1842, UInt<14>(8307))
    node T_1844 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1845 = eq(T_1844, UInt<14>(12403))
    node T_1846 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1847 = eq(T_1846, UInt<15>(20595))
    node T_1848 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1849 = eq(T_1848, UInt<15>(24691))
    node T_1850 = bit-and(UInt<15>(28799), ctrl.inst)
    node T_1851 = eq(T_1850, UInt<15>(28787))
    node T_1852 = mux(T_1851, UInt<1>(0), UInt<1>(0))
    node T_1853 = mux(T_1849, UInt<1>(0), T_1852)
    node T_1854 = mux(T_1847, UInt<1>(0), T_1853)
    node T_1855 = mux(T_1845, UInt<1>(0), T_1854)
    node T_1856 = mux(T_1843, UInt<1>(0), T_1855)
    node T_1857 = mux(T_1841, UInt<1>(0), T_1856)
    node T_1858 = mux(T_1839, UInt<1>(0), T_1857)
    node T_1859 = mux(T_1837, UInt<1>(0), T_1858)
    node T_1860 = mux(T_1835, UInt<1>(0), T_1859)
    node T_1861 = mux(T_1833, UInt<1>(0), T_1860)
    node T_1862 = mux(T_1831, UInt<1>(0), T_1861)
    node T_1863 = mux(T_1829, UInt<1>(0), T_1862)
    node T_1864 = mux(T_1827, UInt<1>(0), T_1863)
    node T_1865 = mux(T_1825, UInt<1>(0), T_1864)
    node T_1866 = mux(T_1823, UInt<1>(0), T_1865)
    node T_1867 = mux(T_1821, UInt<1>(0), T_1866)
    node T_1868 = mux(T_1819, UInt<1>(0), T_1867)
    node T_1869 = mux(T_1817, UInt<1>(0), T_1868)
    node T_1870 = mux(T_1815, UInt<1>(0), T_1869)
    node T_1871 = mux(T_1813, UInt<1>(0), T_1870)
    node T_1872 = mux(T_1811, UInt<1>(0), T_1871)
    node T_1873 = mux(T_1809, UInt<1>(0), T_1872)
    node T_1874 = mux(T_1807, UInt<1>(0), T_1873)
    node T_1875 = mux(T_1805, UInt<1>(0), T_1874)
    node T_1876 = mux(T_1803, UInt<1>(0), T_1875)
    node T_1877 = mux(T_1801, UInt<1>(0), T_1876)
    node T_1878 = mux(T_1799, UInt<1>(0), T_1877)
    node T_1879 = mux(T_1797, UInt<1>(0), T_1878)
    node T_1880 = mux(T_1795, UInt<1>(0), T_1879)
    node T_1881 = mux(T_1793, UInt<1>(0), T_1880)
    node T_1882 = mux(T_1791, UInt<1>(0), T_1881)
    node T_1883 = mux(T_1789, UInt<1>(0), T_1882)
    node T_1884 = mux(T_1787, UInt<1>(0), T_1883)
    node T_1885 = mux(T_1785, UInt<1>(0), T_1884)
    node T_1886 = mux(T_1783, UInt<1>(0), T_1885)
    node T_1887 = mux(T_1781, UInt<1>(0), T_1886)
    node T_1888 = mux(T_1779, UInt<1>(0), T_1887)
    node T_1889 = mux(T_1777, UInt<1>(0), T_1888)
    node T_1890 = mux(T_1775, UInt<1>(0), T_1889)
    node T_1891 = mux(T_1773, UInt<1>(1), T_1890)
    node T_1892 = mux(T_1771, UInt<1>(1), T_1891)
    node T_1893 = mux(T_1769, UInt<1>(0), T_1892)
    node T_1894 = mux(T_1767, UInt<1>(0), T_1893)
    node T_1895 = mux(T_1851, UInt<1>(1), UInt<1>(1))
    node T_1896 = mux(T_1849, UInt<1>(1), T_1895)
    node T_1897 = mux(T_1847, UInt<1>(1), T_1896)
    node T_1898 = mux(T_1845, UInt<1>(0), T_1897)
    node T_1899 = mux(T_1843, UInt<1>(0), T_1898)
    node T_1900 = mux(T_1841, UInt<1>(0), T_1899)
    node T_1901 = mux(T_1839, UInt<1>(0), T_1900)
    node T_1902 = mux(T_1837, UInt<1>(0), T_1901)
    node T_1903 = mux(T_1835, UInt<1>(0), T_1902)
    node T_1904 = mux(T_1833, UInt<1>(0), T_1903)
    node T_1905 = mux(T_1831, UInt<1>(0), T_1904)
    node T_1906 = mux(T_1829, UInt<1>(0), T_1905)
    node T_1907 = mux(T_1827, UInt<1>(0), T_1906)
    node T_1908 = mux(T_1825, UInt<1>(0), T_1907)
    node T_1909 = mux(T_1823, UInt<1>(0), T_1908)
    node T_1910 = mux(T_1821, UInt<1>(0), T_1909)
    node T_1911 = mux(T_1819, UInt<1>(0), T_1910)
    node T_1912 = mux(T_1817, UInt<1>(0), T_1911)
    node T_1913 = mux(T_1815, UInt<1>(0), T_1912)
    node T_1914 = mux(T_1813, UInt<1>(0), T_1913)
    node T_1915 = mux(T_1811, UInt<1>(0), T_1914)
    node T_1916 = mux(T_1809, UInt<1>(0), T_1915)
    node T_1917 = mux(T_1807, UInt<1>(0), T_1916)
    node T_1918 = mux(T_1805, UInt<1>(0), T_1917)
    node T_1919 = mux(T_1803, UInt<1>(0), T_1918)
    node T_1920 = mux(T_1801, UInt<1>(0), T_1919)
    node T_1921 = mux(T_1799, UInt<1>(0), T_1920)
    node T_1922 = mux(T_1797, UInt<1>(0), T_1921)
    node T_1923 = mux(T_1795, UInt<1>(0), T_1922)
    node T_1924 = mux(T_1793, UInt<1>(0), T_1923)
    node T_1925 = mux(T_1791, UInt<1>(0), T_1924)
    node T_1926 = mux(T_1789, UInt<1>(0), T_1925)
    node T_1927 = mux(T_1787, UInt<1>(0), T_1926)
    node T_1928 = mux(T_1785, UInt<1>(1), T_1927)
    node T_1929 = mux(T_1783, UInt<1>(1), T_1928)
    node T_1930 = mux(T_1781, UInt<1>(1), T_1929)
    node T_1931 = mux(T_1779, UInt<1>(1), T_1930)
    node T_1932 = mux(T_1777, UInt<1>(1), T_1931)
    node T_1933 = mux(T_1775, UInt<1>(1), T_1932)
    node T_1934 = mux(T_1773, UInt<1>(0), T_1933)
    node T_1935 = mux(T_1771, UInt<1>(1), T_1934)
    node T_1936 = mux(T_1769, UInt<1>(1), T_1935)
    node T_1937 = mux(T_1767, UInt<1>(1), T_1936)
    node T_1938 = mux(T_1851, UInt<1>(1), UInt<1>(0))
    node T_1939 = mux(T_1849, UInt<1>(1), T_1938)
    node T_1940 = mux(T_1847, UInt<1>(1), T_1939)
    node T_1941 = mux(T_1845, UInt<1>(0), T_1940)
    node T_1942 = mux(T_1843, UInt<1>(0), T_1941)
    node T_1943 = mux(T_1841, UInt<1>(0), T_1942)
    node T_1944 = mux(T_1839, UInt<1>(0), T_1943)
    node T_1945 = mux(T_1837, UInt<1>(0), T_1944)
    node T_1946 = mux(T_1835, UInt<1>(0), T_1945)
    node T_1947 = mux(T_1833, UInt<1>(0), T_1946)
    node T_1948 = mux(T_1831, UInt<1>(0), T_1947)
    node T_1949 = mux(T_1829, UInt<1>(0), T_1948)
    node T_1950 = mux(T_1827, UInt<1>(0), T_1949)
    node T_1951 = mux(T_1825, UInt<1>(0), T_1950)
    node T_1952 = mux(T_1823, UInt<1>(0), T_1951)
    node T_1953 = mux(T_1821, UInt<1>(0), T_1952)
    node T_1954 = mux(T_1819, UInt<1>(1), T_1953)
    node T_1955 = mux(T_1817, UInt<1>(1), T_1954)
    node T_1956 = mux(T_1815, UInt<1>(1), T_1955)
    node T_1957 = mux(T_1813, UInt<1>(1), T_1956)
    node T_1958 = mux(T_1811, UInt<1>(1), T_1957)
    node T_1959 = mux(T_1809, UInt<1>(1), T_1958)
    node T_1960 = mux(T_1807, UInt<1>(1), T_1959)
    node T_1961 = mux(T_1805, UInt<1>(1), T_1960)
    node T_1962 = mux(T_1803, UInt<1>(1), T_1961)
    node T_1963 = mux(T_1801, UInt<1>(1), T_1962)
    node T_1964 = mux(T_1799, UInt<1>(1), T_1963)
    node T_1965 = mux(T_1797, UInt<1>(1), T_1964)
    node T_1966 = mux(T_1795, UInt<1>(1), T_1965)
    node T_1967 = mux(T_1793, UInt<1>(1), T_1966)
    node T_1968 = mux(T_1791, UInt<1>(1), T_1967)
    node T_1969 = mux(T_1789, UInt<1>(1), T_1968)
    node T_1970 = mux(T_1787, UInt<1>(1), T_1969)
    node T_1971 = mux(T_1785, UInt<1>(1), T_1970)
    node T_1972 = mux(T_1783, UInt<1>(1), T_1971)
    node T_1973 = mux(T_1781, UInt<1>(1), T_1972)
    node T_1974 = mux(T_1779, UInt<1>(1), T_1973)
    node T_1975 = mux(T_1777, UInt<1>(1), T_1974)
    node T_1976 = mux(T_1775, UInt<1>(1), T_1975)
    node T_1977 = mux(T_1773, UInt<1>(1), T_1976)
    node T_1978 = mux(T_1771, UInt<1>(1), T_1977)
    node T_1979 = mux(T_1769, UInt<1>(1), T_1978)
    node T_1980 = mux(T_1767, UInt<1>(1), T_1979)
    node T_1981 = mux(T_1851, UInt<3>(5), UInt<3>(7))
    node T_1982 = mux(T_1849, UInt<3>(5), T_1981)
    node T_1983 = mux(T_1847, UInt<3>(5), T_1982)
    node T_1984 = mux(T_1845, UInt<3>(5), T_1983)
    node T_1985 = mux(T_1843, UInt<3>(5), T_1984)
    node T_1986 = mux(T_1841, UInt<3>(5), T_1985)
    node T_1987 = mux(T_1839, UInt<3>(7), T_1986)
    node T_1988 = mux(T_1837, UInt<3>(7), T_1987)
    node T_1989 = mux(T_1835, UInt<3>(7), T_1988)
    node T_1990 = mux(T_1833, UInt<3>(7), T_1989)
    node T_1991 = mux(T_1831, UInt<3>(7), T_1990)
    node T_1992 = mux(T_1829, UInt<3>(7), T_1991)
    node T_1993 = mux(T_1827, UInt<3>(7), T_1992)
    node T_1994 = mux(T_1825, UInt<3>(7), T_1993)
    node T_1995 = mux(T_1823, UInt<3>(7), T_1994)
    node T_1996 = mux(T_1821, UInt<3>(7), T_1995)
    node T_1997 = mux(T_1819, UInt<3>(0), T_1996)
    node T_1998 = mux(T_1817, UInt<3>(0), T_1997)
    node T_1999 = mux(T_1815, UInt<3>(0), T_1998)
    node T_2000 = mux(T_1813, UInt<3>(0), T_1999)
    node T_2001 = mux(T_1811, UInt<3>(0), T_2000)
    node T_2002 = mux(T_1809, UInt<3>(0), T_2001)
    node T_2003 = mux(T_1807, UInt<3>(0), T_2002)
    node T_2004 = mux(T_1805, UInt<3>(0), T_2003)
    node T_2005 = mux(T_1803, UInt<3>(0), T_2004)
    node T_2006 = mux(T_1801, UInt<3>(1), T_2005)
    node T_2007 = mux(T_1799, UInt<3>(1), T_2006)
    node T_2008 = mux(T_1797, UInt<3>(1), T_2007)
    node T_2009 = mux(T_1795, UInt<3>(0), T_2008)
    node T_2010 = mux(T_1793, UInt<3>(0), T_2009)
    node T_2011 = mux(T_1791, UInt<3>(0), T_2010)
    node T_2012 = mux(T_1789, UInt<3>(0), T_2011)
    node T_2013 = mux(T_1787, UInt<3>(0), T_2012)
    node T_2014 = mux(T_1785, UInt<3>(4), T_2013)
    node T_2015 = mux(T_1783, UInt<3>(4), T_2014)
    node T_2016 = mux(T_1781, UInt<3>(4), T_2015)
    node T_2017 = mux(T_1779, UInt<3>(4), T_2016)
    node T_2018 = mux(T_1777, UInt<3>(4), T_2017)
    node T_2019 = mux(T_1775, UInt<3>(4), T_2018)
    node T_2020 = mux(T_1773, UInt<3>(0), T_2019)
    node T_2021 = mux(T_1771, UInt<3>(3), T_2020)
    node T_2022 = mux(T_1769, UInt<3>(2), T_2021)
    node T_2023 = mux(T_1767, UInt<3>(2), T_2022)
    node T_2024 = mux(T_1851, UInt<4>(11), UInt<4>(15))
    node T_2025 = mux(T_1849, UInt<4>(11), T_2024)
    node T_2026 = mux(T_1847, UInt<4>(11), T_2025)
    node T_2027 = mux(T_1845, UInt<4>(10), T_2026)
    node T_2028 = mux(T_1843, UInt<4>(10), T_2027)
    node T_2029 = mux(T_1841, UInt<4>(10), T_2028)
    node T_2030 = mux(T_1839, UInt<4>(2), T_2029)
    node T_2031 = mux(T_1837, UInt<4>(3), T_2030)
    node T_2032 = mux(T_1835, UInt<4>(9), T_2031)
    node T_2033 = mux(T_1833, UInt<4>(8), T_2032)
    node T_2034 = mux(T_1831, UInt<4>(4), T_2033)
    node T_2035 = mux(T_1829, UInt<4>(7), T_2034)
    node T_2036 = mux(T_1827, UInt<4>(5), T_2035)
    node T_2037 = mux(T_1825, UInt<4>(6), T_2036)
    node T_2038 = mux(T_1823, UInt<4>(1), T_2037)
    node T_2039 = mux(T_1821, UInt<4>(0), T_2038)
    node T_2040 = mux(T_1819, UInt<4>(9), T_2039)
    node T_2041 = mux(T_1817, UInt<4>(8), T_2040)
    node T_2042 = mux(T_1815, UInt<4>(6), T_2041)
    node T_2043 = mux(T_1813, UInt<4>(2), T_2042)
    node T_2044 = mux(T_1811, UInt<4>(3), T_2043)
    node T_2045 = mux(T_1809, UInt<4>(4), T_2044)
    node T_2046 = mux(T_1807, UInt<4>(7), T_2045)
    node T_2047 = mux(T_1805, UInt<4>(5), T_2046)
    node T_2048 = mux(T_1803, UInt<4>(0), T_2047)
    node T_2049 = mux(T_1801, UInt<4>(0), T_2048)
    node T_2050 = mux(T_1799, UInt<4>(0), T_2049)
    node T_2051 = mux(T_1797, UInt<4>(0), T_2050)
    node T_2052 = mux(T_1795, UInt<4>(0), T_2051)
    node T_2053 = mux(T_1793, UInt<4>(0), T_2052)
    node T_2054 = mux(T_1791, UInt<4>(0), T_2053)
    node T_2055 = mux(T_1789, UInt<4>(0), T_2054)
    node T_2056 = mux(T_1787, UInt<4>(0), T_2055)
    node T_2057 = mux(T_1785, UInt<4>(0), T_2056)
    node T_2058 = mux(T_1783, UInt<4>(0), T_2057)
    node T_2059 = mux(T_1781, UInt<4>(0), T_2058)
    node T_2060 = mux(T_1779, UInt<4>(0), T_2059)
    node T_2061 = mux(T_1777, UInt<4>(0), T_2060)
    node T_2062 = mux(T_1775, UInt<4>(0), T_2061)
    node T_2063 = mux(T_1773, UInt<4>(0), T_2062)
    node T_2064 = mux(T_1771, UInt<4>(0), T_2063)
    node T_2065 = mux(T_1769, UInt<4>(0), T_2064)
    node T_2066 = mux(T_1767, UInt<4>(11), T_2065)
    node T_2067 = mux(T_1851, UInt<3>(7), UInt<3>(7))
    node T_2068 = mux(T_1849, UInt<3>(7), T_2067)
    node T_2069 = mux(T_1847, UInt<3>(7), T_2068)
    node T_2070 = mux(T_1845, UInt<3>(7), T_2069)
    node T_2071 = mux(T_1843, UInt<3>(7), T_2070)
    node T_2072 = mux(T_1841, UInt<3>(7), T_2071)
    node T_2073 = mux(T_1839, UInt<3>(7), T_2072)
    node T_2074 = mux(T_1837, UInt<3>(7), T_2073)
    node T_2075 = mux(T_1835, UInt<3>(7), T_2074)
    node T_2076 = mux(T_1833, UInt<3>(7), T_2075)
    node T_2077 = mux(T_1831, UInt<3>(7), T_2076)
    node T_2078 = mux(T_1829, UInt<3>(7), T_2077)
    node T_2079 = mux(T_1827, UInt<3>(7), T_2078)
    node T_2080 = mux(T_1825, UInt<3>(7), T_2079)
    node T_2081 = mux(T_1823, UInt<3>(7), T_2080)
    node T_2082 = mux(T_1821, UInt<3>(7), T_2081)
    node T_2083 = mux(T_1819, UInt<3>(7), T_2082)
    node T_2084 = mux(T_1817, UInt<3>(7), T_2083)
    node T_2085 = mux(T_1815, UInt<3>(7), T_2084)
    node T_2086 = mux(T_1813, UInt<3>(7), T_2085)
    node T_2087 = mux(T_1811, UInt<3>(7), T_2086)
    node T_2088 = mux(T_1809, UInt<3>(7), T_2087)
    node T_2089 = mux(T_1807, UInt<3>(7), T_2088)
    node T_2090 = mux(T_1805, UInt<3>(7), T_2089)
    node T_2091 = mux(T_1803, UInt<3>(7), T_2090)
    node T_2092 = mux(T_1801, UInt<3>(7), T_2091)
    node T_2093 = mux(T_1799, UInt<3>(7), T_2092)
    node T_2094 = mux(T_1797, UInt<3>(7), T_2093)
    node T_2095 = mux(T_1795, UInt<3>(7), T_2094)
    node T_2096 = mux(T_1793, UInt<3>(7), T_2095)
    node T_2097 = mux(T_1791, UInt<3>(7), T_2096)
    node T_2098 = mux(T_1789, UInt<3>(7), T_2097)
    node T_2099 = mux(T_1787, UInt<3>(7), T_2098)
    node T_2100 = mux(T_1785, UInt<3>(4), T_2099)
    node T_2101 = mux(T_1783, UInt<3>(0), T_2100)
    node T_2102 = mux(T_1781, UInt<3>(5), T_2101)
    node T_2103 = mux(T_1779, UInt<3>(1), T_2102)
    node T_2104 = mux(T_1777, UInt<3>(6), T_2103)
    node T_2105 = mux(T_1775, UInt<3>(2), T_2104)
    node T_2106 = mux(T_1773, UInt<3>(7), T_2105)
    node T_2107 = mux(T_1771, UInt<3>(7), T_2106)
    node T_2108 = mux(T_1769, UInt<3>(7), T_2107)
    node T_2109 = mux(T_1767, UInt<3>(7), T_2108)
    node T_2110 = mux(T_1851, UInt<1>(0), UInt<1>(0))
    node T_2111 = mux(T_1849, UInt<1>(0), T_2110)
    node T_2112 = mux(T_1847, UInt<1>(0), T_2111)
    node T_2113 = mux(T_1845, UInt<1>(0), T_2112)
    node T_2114 = mux(T_1843, UInt<1>(0), T_2113)
    node T_2115 = mux(T_1841, UInt<1>(0), T_2114)
    node T_2116 = mux(T_1839, UInt<1>(0), T_2115)
    node T_2117 = mux(T_1837, UInt<1>(0), T_2116)
    node T_2118 = mux(T_1835, UInt<1>(0), T_2117)
    node T_2119 = mux(T_1833, UInt<1>(0), T_2118)
    node T_2120 = mux(T_1831, UInt<1>(0), T_2119)
    node T_2121 = mux(T_1829, UInt<1>(0), T_2120)
    node T_2122 = mux(T_1827, UInt<1>(0), T_2121)
    node T_2123 = mux(T_1825, UInt<1>(0), T_2122)
    node T_2124 = mux(T_1823, UInt<1>(0), T_2123)
    node T_2125 = mux(T_1821, UInt<1>(0), T_2124)
    node T_2126 = mux(T_1819, UInt<1>(0), T_2125)
    node T_2127 = mux(T_1817, UInt<1>(0), T_2126)
    node T_2128 = mux(T_1815, UInt<1>(0), T_2127)
    node T_2129 = mux(T_1813, UInt<1>(0), T_2128)
    node T_2130 = mux(T_1811, UInt<1>(0), T_2129)
    node T_2131 = mux(T_1809, UInt<1>(0), T_2130)
    node T_2132 = mux(T_1807, UInt<1>(0), T_2131)
    node T_2133 = mux(T_1805, UInt<1>(0), T_2132)
    node T_2134 = mux(T_1803, UInt<1>(0), T_2133)
    node T_2135 = mux(T_1801, UInt<1>(0), T_2134)
    node T_2136 = mux(T_1799, UInt<1>(0), T_2135)
    node T_2137 = mux(T_1797, UInt<1>(0), T_2136)
    node T_2138 = mux(T_1795, UInt<1>(0), T_2137)
    node T_2139 = mux(T_1793, UInt<1>(0), T_2138)
    node T_2140 = mux(T_1791, UInt<1>(0), T_2139)
    node T_2141 = mux(T_1789, UInt<1>(0), T_2140)
    node T_2142 = mux(T_1787, UInt<1>(0), T_2141)
    node T_2143 = mux(T_1785, UInt<1>(0), T_2142)
    node T_2144 = mux(T_1783, UInt<1>(0), T_2143)
    node T_2145 = mux(T_1781, UInt<1>(0), T_2144)
    node T_2146 = mux(T_1779, UInt<1>(0), T_2145)
    node T_2147 = mux(T_1777, UInt<1>(0), T_2146)
    node T_2148 = mux(T_1775, UInt<1>(0), T_2147)
    node T_2149 = mux(T_1773, UInt<1>(1), T_2148)
    node T_2150 = mux(T_1771, UInt<1>(1), T_2149)
    node T_2151 = mux(T_1769, UInt<1>(0), T_2150)
    node T_2152 = mux(T_1767, UInt<1>(0), T_2151)
    node T_2153 = mux(T_1851, UInt<2>(3), UInt<2>(3))
    node T_2154 = mux(T_1849, UInt<2>(3), T_2153)
    node T_2155 = mux(T_1847, UInt<2>(3), T_2154)
    node T_2156 = mux(T_1845, UInt<2>(3), T_2155)
    node T_2157 = mux(T_1843, UInt<2>(3), T_2156)
    node T_2158 = mux(T_1841, UInt<2>(3), T_2157)
    node T_2159 = mux(T_1839, UInt<2>(3), T_2158)
    node T_2160 = mux(T_1837, UInt<2>(3), T_2159)
    node T_2161 = mux(T_1835, UInt<2>(3), T_2160)
    node T_2162 = mux(T_1833, UInt<2>(3), T_2161)
    node T_2163 = mux(T_1831, UInt<2>(3), T_2162)
    node T_2164 = mux(T_1829, UInt<2>(3), T_2163)
    node T_2165 = mux(T_1827, UInt<2>(3), T_2164)
    node T_2166 = mux(T_1825, UInt<2>(3), T_2165)
    node T_2167 = mux(T_1823, UInt<2>(3), T_2166)
    node T_2168 = mux(T_1821, UInt<2>(3), T_2167)
    node T_2169 = mux(T_1819, UInt<2>(3), T_2168)
    node T_2170 = mux(T_1817, UInt<2>(3), T_2169)
    node T_2171 = mux(T_1815, UInt<2>(3), T_2170)
    node T_2172 = mux(T_1813, UInt<2>(3), T_2171)
    node T_2173 = mux(T_1811, UInt<2>(3), T_2172)
    node T_2174 = mux(T_1809, UInt<2>(3), T_2173)
    node T_2175 = mux(T_1807, UInt<2>(3), T_2174)
    node T_2176 = mux(T_1805, UInt<2>(3), T_2175)
    node T_2177 = mux(T_1803, UInt<2>(3), T_2176)
    node T_2178 = mux(T_1801, UInt<2>(0), T_2177)
    node T_2179 = mux(T_1799, UInt<2>(1), T_2178)
    node T_2180 = mux(T_1797, UInt<2>(2), T_2179)
    node T_2181 = mux(T_1795, UInt<2>(3), T_2180)
    node T_2182 = mux(T_1793, UInt<2>(3), T_2181)
    node T_2183 = mux(T_1791, UInt<2>(3), T_2182)
    node T_2184 = mux(T_1789, UInt<2>(3), T_2183)
    node T_2185 = mux(T_1787, UInt<2>(3), T_2184)
    node T_2186 = mux(T_1785, UInt<2>(3), T_2185)
    node T_2187 = mux(T_1783, UInt<2>(3), T_2186)
    node T_2188 = mux(T_1781, UInt<2>(3), T_2187)
    node T_2189 = mux(T_1779, UInt<2>(3), T_2188)
    node T_2190 = mux(T_1777, UInt<2>(3), T_2189)
    node T_2191 = mux(T_1775, UInt<2>(3), T_2190)
    node T_2192 = mux(T_1773, UInt<2>(3), T_2191)
    node T_2193 = mux(T_1771, UInt<2>(3), T_2192)
    node T_2194 = mux(T_1769, UInt<2>(3), T_2193)
    node T_2195 = mux(T_1767, UInt<2>(3), T_2194)
    node T_2196 = mux(T_1851, UInt<3>(7), UInt<3>(7))
    node T_2197 = mux(T_1849, UInt<3>(7), T_2196)
    node T_2198 = mux(T_1847, UInt<3>(7), T_2197)
    node T_2199 = mux(T_1845, UInt<3>(7), T_2198)
    node T_2200 = mux(T_1843, UInt<3>(7), T_2199)
    node T_2201 = mux(T_1841, UInt<3>(7), T_2200)
    node T_2202 = mux(T_1839, UInt<3>(7), T_2201)
    node T_2203 = mux(T_1837, UInt<3>(7), T_2202)
    node T_2204 = mux(T_1835, UInt<3>(7), T_2203)
    node T_2205 = mux(T_1833, UInt<3>(7), T_2204)
    node T_2206 = mux(T_1831, UInt<3>(7), T_2205)
    node T_2207 = mux(T_1829, UInt<3>(7), T_2206)
    node T_2208 = mux(T_1827, UInt<3>(7), T_2207)
    node T_2209 = mux(T_1825, UInt<3>(7), T_2208)
    node T_2210 = mux(T_1823, UInt<3>(7), T_2209)
    node T_2211 = mux(T_1821, UInt<3>(7), T_2210)
    node T_2212 = mux(T_1819, UInt<3>(7), T_2211)
    node T_2213 = mux(T_1817, UInt<3>(7), T_2212)
    node T_2214 = mux(T_1815, UInt<3>(7), T_2213)
    node T_2215 = mux(T_1813, UInt<3>(7), T_2214)
    node T_2216 = mux(T_1811, UInt<3>(7), T_2215)
    node T_2217 = mux(T_1809, UInt<3>(7), T_2216)
    node T_2218 = mux(T_1807, UInt<3>(7), T_2217)
    node T_2219 = mux(T_1805, UInt<3>(7), T_2218)
    node T_2220 = mux(T_1803, UInt<3>(7), T_2219)
    node T_2221 = mux(T_1801, UInt<3>(7), T_2220)
    node T_2222 = mux(T_1799, UInt<3>(7), T_2221)
    node T_2223 = mux(T_1797, UInt<3>(7), T_2222)
    node T_2224 = mux(T_1795, UInt<3>(3), T_2223)
    node T_2225 = mux(T_1793, UInt<3>(4), T_2224)
    node T_2226 = mux(T_1791, UInt<3>(0), T_2225)
    node T_2227 = mux(T_1789, UInt<3>(1), T_2226)
    node T_2228 = mux(T_1787, UInt<3>(2), T_2227)
    node T_2229 = mux(T_1785, UInt<3>(7), T_2228)
    node T_2230 = mux(T_1783, UInt<3>(7), T_2229)
    node T_2231 = mux(T_1781, UInt<3>(7), T_2230)
    node T_2232 = mux(T_1779, UInt<3>(7), T_2231)
    node T_2233 = mux(T_1777, UInt<3>(7), T_2232)
    node T_2234 = mux(T_1775, UInt<3>(7), T_2233)
    node T_2235 = mux(T_1773, UInt<3>(7), T_2234)
    node T_2236 = mux(T_1771, UInt<3>(7), T_2235)
    node T_2237 = mux(T_1769, UInt<3>(7), T_2236)
    node T_2238 = mux(T_1767, UInt<3>(7), T_2237)
    node T_2239 = mux(T_1851, UInt<2>(3), UInt<2>(0))
    node T_2240 = mux(T_1849, UInt<2>(3), T_2239)
    node T_2241 = mux(T_1847, UInt<2>(3), T_2240)
    node T_2242 = mux(T_1845, UInt<2>(3), T_2241)
    node T_2243 = mux(T_1843, UInt<2>(3), T_2242)
    node T_2244 = mux(T_1841, UInt<2>(3), T_2243)
    node T_2245 = mux(T_1839, UInt<2>(0), T_2244)
    node T_2246 = mux(T_1837, UInt<2>(0), T_2245)
    node T_2247 = mux(T_1835, UInt<2>(0), T_2246)
    node T_2248 = mux(T_1833, UInt<2>(0), T_2247)
    node T_2249 = mux(T_1831, UInt<2>(0), T_2248)
    node T_2250 = mux(T_1829, UInt<2>(0), T_2249)
    node T_2251 = mux(T_1827, UInt<2>(0), T_2250)
    node T_2252 = mux(T_1825, UInt<2>(0), T_2251)
    node T_2253 = mux(T_1823, UInt<2>(0), T_2252)
    node T_2254 = mux(T_1821, UInt<2>(0), T_2253)
    node T_2255 = mux(T_1819, UInt<2>(0), T_2254)
    node T_2256 = mux(T_1817, UInt<2>(0), T_2255)
    node T_2257 = mux(T_1815, UInt<2>(0), T_2256)
    node T_2258 = mux(T_1813, UInt<2>(0), T_2257)
    node T_2259 = mux(T_1811, UInt<2>(0), T_2258)
    node T_2260 = mux(T_1809, UInt<2>(0), T_2259)
    node T_2261 = mux(T_1807, UInt<2>(0), T_2260)
    node T_2262 = mux(T_1805, UInt<2>(0), T_2261)
    node T_2263 = mux(T_1803, UInt<2>(0), T_2262)
    node T_2264 = mux(T_1801, UInt<2>(0), T_2263)
    node T_2265 = mux(T_1799, UInt<2>(0), T_2264)
    node T_2266 = mux(T_1797, UInt<2>(0), T_2265)
    node T_2267 = mux(T_1795, UInt<2>(1), T_2266)
    node T_2268 = mux(T_1793, UInt<2>(1), T_2267)
    node T_2269 = mux(T_1791, UInt<2>(1), T_2268)
    node T_2270 = mux(T_1789, UInt<2>(1), T_2269)
    node T_2271 = mux(T_1787, UInt<2>(1), T_2270)
    node T_2272 = mux(T_1785, UInt<2>(0), T_2271)
    node T_2273 = mux(T_1783, UInt<2>(0), T_2272)
    node T_2274 = mux(T_1781, UInt<2>(0), T_2273)
    node T_2275 = mux(T_1779, UInt<2>(0), T_2274)
    node T_2276 = mux(T_1777, UInt<2>(0), T_2275)
    node T_2277 = mux(T_1775, UInt<2>(0), T_2276)
    node T_2278 = mux(T_1773, UInt<2>(2), T_2277)
    node T_2279 = mux(T_1771, UInt<2>(2), T_2278)
    node T_2280 = mux(T_1769, UInt<2>(0), T_2279)
    node T_2281 = mux(T_1767, UInt<2>(0), T_2280)
    node T_2282 = mux(T_1851, UInt<1>(0), UInt<1>(0))
    node T_2283 = mux(T_1849, UInt<1>(0), T_2282)
    node T_2284 = mux(T_1847, UInt<1>(0), T_2283)
    node T_2285 = mux(T_1845, UInt<1>(0), T_2284)
    node T_2286 = mux(T_1843, UInt<1>(0), T_2285)
    node T_2287 = mux(T_1841, UInt<1>(0), T_2286)
    node T_2288 = mux(T_1839, UInt<1>(1), T_2287)
    node T_2289 = mux(T_1837, UInt<1>(1), T_2288)
    node T_2290 = mux(T_1835, UInt<1>(1), T_2289)
    node T_2291 = mux(T_1833, UInt<1>(1), T_2290)
    node T_2292 = mux(T_1831, UInt<1>(1), T_2291)
    node T_2293 = mux(T_1829, UInt<1>(1), T_2292)
    node T_2294 = mux(T_1827, UInt<1>(1), T_2293)
    node T_2295 = mux(T_1825, UInt<1>(1), T_2294)
    node T_2296 = mux(T_1823, UInt<1>(1), T_2295)
    node T_2297 = mux(T_1821, UInt<1>(1), T_2296)
    node T_2298 = mux(T_1819, UInt<1>(1), T_2297)
    node T_2299 = mux(T_1817, UInt<1>(1), T_2298)
    node T_2300 = mux(T_1815, UInt<1>(1), T_2299)
    node T_2301 = mux(T_1813, UInt<1>(1), T_2300)
    node T_2302 = mux(T_1811, UInt<1>(1), T_2301)
    node T_2303 = mux(T_1809, UInt<1>(1), T_2302)
    node T_2304 = mux(T_1807, UInt<1>(1), T_2303)
    node T_2305 = mux(T_1805, UInt<1>(1), T_2304)
    node T_2306 = mux(T_1803, UInt<1>(1), T_2305)
    node T_2307 = mux(T_1801, UInt<1>(0), T_2306)
    node T_2308 = mux(T_1799, UInt<1>(0), T_2307)
    node T_2309 = mux(T_1797, UInt<1>(0), T_2308)
    node T_2310 = mux(T_1795, UInt<1>(1), T_2309)
    node T_2311 = mux(T_1793, UInt<1>(1), T_2310)
    node T_2312 = mux(T_1791, UInt<1>(1), T_2311)
    node T_2313 = mux(T_1789, UInt<1>(1), T_2312)
    node T_2314 = mux(T_1787, UInt<1>(1), T_2313)
    node T_2315 = mux(T_1785, UInt<1>(0), T_2314)
    node T_2316 = mux(T_1783, UInt<1>(0), T_2315)
    node T_2317 = mux(T_1781, UInt<1>(0), T_2316)
    node T_2318 = mux(T_1779, UInt<1>(0), T_2317)
    node T_2319 = mux(T_1777, UInt<1>(0), T_2318)
    node T_2320 = mux(T_1775, UInt<1>(0), T_2319)
    node T_2321 = mux(T_1773, UInt<1>(1), T_2320)
    node T_2322 = mux(T_1771, UInt<1>(1), T_2321)
    node T_2323 = mux(T_1769, UInt<1>(1), T_2322)
    node T_2324 = mux(T_1767, UInt<1>(1), T_2323)
    node T_2325 = mux(T_1851, UInt<2>(3), UInt<2>(0))
    node T_2326 = mux(T_1849, UInt<2>(2), T_2325)
    node T_2327 = mux(T_1847, UInt<2>(1), T_2326)
    node T_2328 = mux(T_1845, UInt<2>(3), T_2327)
    node T_2329 = mux(T_1843, UInt<2>(2), T_2328)
    node T_2330 = mux(T_1841, UInt<2>(1), T_2329)
    node T_2331 = mux(T_1839, UInt<2>(0), T_2330)
    node T_2332 = mux(T_1837, UInt<2>(0), T_2331)
    node T_2333 = mux(T_1835, UInt<2>(0), T_2332)
    node T_2334 = mux(T_1833, UInt<2>(0), T_2333)
    node T_2335 = mux(T_1831, UInt<2>(0), T_2334)
    node T_2336 = mux(T_1829, UInt<2>(0), T_2335)
    node T_2337 = mux(T_1827, UInt<2>(0), T_2336)
    node T_2338 = mux(T_1825, UInt<2>(0), T_2337)
    node T_2339 = mux(T_1823, UInt<2>(0), T_2338)
    node T_2340 = mux(T_1821, UInt<2>(0), T_2339)
    node T_2341 = mux(T_1819, UInt<2>(0), T_2340)
    node T_2342 = mux(T_1817, UInt<2>(0), T_2341)
    node T_2343 = mux(T_1815, UInt<2>(0), T_2342)
    node T_2344 = mux(T_1813, UInt<2>(0), T_2343)
    node T_2345 = mux(T_1811, UInt<2>(0), T_2344)
    node T_2346 = mux(T_1809, UInt<2>(0), T_2345)
    node T_2347 = mux(T_1807, UInt<2>(0), T_2346)
    node T_2348 = mux(T_1805, UInt<2>(0), T_2347)
    node T_2349 = mux(T_1803, UInt<2>(0), T_2348)
    node T_2350 = mux(T_1801, UInt<2>(0), T_2349)
    node T_2351 = mux(T_1799, UInt<2>(0), T_2350)
    node T_2352 = mux(T_1797, UInt<2>(0), T_2351)
    node T_2353 = mux(T_1795, UInt<2>(0), T_2352)
    node T_2354 = mux(T_1793, UInt<2>(0), T_2353)
    node T_2355 = mux(T_1791, UInt<2>(0), T_2354)
    node T_2356 = mux(T_1789, UInt<2>(0), T_2355)
    node T_2357 = mux(T_1787, UInt<2>(0), T_2356)
    node T_2358 = mux(T_1785, UInt<2>(0), T_2357)
    node T_2359 = mux(T_1783, UInt<2>(0), T_2358)
    node T_2360 = mux(T_1781, UInt<2>(0), T_2359)
    node T_2361 = mux(T_1779, UInt<2>(0), T_2360)
    node T_2362 = mux(T_1777, UInt<2>(0), T_2361)
    node T_2363 = mux(T_1775, UInt<2>(0), T_2362)
    node T_2364 = mux(T_1773, UInt<2>(0), T_2363)
    node T_2365 = mux(T_1771, UInt<2>(0), T_2364)
    node T_2366 = mux(T_1769, UInt<2>(0), T_2365)
    node T_2367 = mux(T_1767, UInt<2>(0), T_2366)
    node rs1_addr = bits(ctrl.inst, 19, 15)
    node rs2_addr = bits(ctrl.inst, 24, 20)
    reg st_type : UInt<2>
    reg ld_type : UInt<3>
    reg wb_sel : UInt<2>
    node T_2368 = bit(T_2324, 0)
    reg wb_en : UInt<1>
    reg csr_cmd : UInt<2>
    ctrl.pc_sel := T_1894
    node T_2369 = bit-not(ctrl.stall)
    node T_2370 = bit-not(ctrl.data_re)
    node T_2371 = bit-and(T_2369, T_2370)
    ctrl.inst_re := T_2371
    node T_2372 = neq(T_2238, UInt<3>(7))
    node T_2373 = bit(T_2152, 0)
    node T_2374 = bit-or(T_2372, T_2373)
    node T_2375 = mux(T_2374, UInt<1>(1), UInt<1>(0))
    ctrl.inst_type := T_2375
    ctrl.A_sel := T_1937
    ctrl.B_sel := T_1980
    ctrl.imm_sel := T_2023
    ctrl.alu_op := T_2066
    ctrl.br_type := T_2109
    ctrl.st_type := T_2195
    node T_2376 = bit-not(ctrl.stall)
    when T_2376 : 
      st_type := ctrl.st_type
      ld_type := T_2238
      wb_sel := T_2281
      node T_2377 = bit(T_2324, 0)
      wb_en := T_2377
      csr_cmd := T_2367
    node T_2378 = neq(ctrl.ld_type, UInt<3>(7))
    node T_2379 = neq(T_2238, UInt<3>(7))
    node T_2380 = mux(ctrl.stall, T_2378, T_2379)
    ctrl.data_re := T_2380
    ctrl.ld_type := ld_type
    ctrl.wb_en := wb_en
    ctrl.wb_sel := wb_sel
    ctrl.csr_cmd := csr_cmd
  module Core : 
    output host : {status : UInt<32>, flip hid : UInt<1>, tohost : UInt<32>}
    input stall : UInt<1>
    output icache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    output dcache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    
    inst dpath of Datapath
    inst ctrl of Control
    host := dpath.host
    icache := dpath.icache
    dcache := dpath.dcache
    dpath.ctrl := ctrl.ctrl
    dpath.stall := stall
  module Queue : 
    output count : UInt<3>
    input enq : {valid : UInt<1>, flip ready : UInt<1>, bits : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}}
    output deq : {valid : UInt<1>, flip ready : UInt<1>, bits : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}}
    
    mem ram : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}[4]
    reg T_2381 : UInt<2>
    on-reset T_2381 := UInt<2>(0)
    reg T_2382 : UInt<2>
    on-reset T_2382 := UInt<2>(0)
    reg maybe_full : UInt<1>
    on-reset maybe_full := UInt<1>(0)
    node ptr_match = eq(T_2381, T_2382)
    node T_2383 = bit-not(maybe_full)
    node empty = bit-and(ptr_match, T_2383)
    node full = bit-and(ptr_match, maybe_full)
    node maybe_flow = bit-and(UInt<1>(0), empty)
    node do_flow = bit-and(maybe_flow, deq.ready)
    node T_2384 = bit-and(enq.ready, enq.valid)
    node T_2385 = bit-not(do_flow)
    node do_enq = bit-and(T_2384, T_2385)
    node T_2386 = bit-and(deq.ready, deq.valid)
    node T_2387 = bit-not(do_flow)
    node do_deq = bit-and(T_2386, T_2387)
    when do_enq : 
      accessor T_2388 = ram[T_2381]
      T_2388 := enq.bits
      node T_2389 = eq(T_2381, UInt<2>(3))
      node T_2390 = bit-and(UInt<1>(0), T_2389)
      node T_2391 = add-wrap(T_2381, UInt<1>(1))
      node T_2392 = mux(T_2390, UInt<1>(0), T_2391)
      T_2381 := T_2392
    when do_deq : 
      node T_2393 = eq(T_2382, UInt<2>(3))
      node T_2394 = bit-and(UInt<1>(0), T_2393)
      node T_2395 = add-wrap(T_2382, UInt<1>(1))
      node T_2396 = mux(T_2394, UInt<1>(0), T_2395)
      T_2382 := T_2396
    node T_2397 = neq(do_enq, do_deq)
    when T_2397 : maybe_full := do_enq
    node T_2398 = bit-not(empty)
    node T_2399 = bit-and(UInt<1>(0), enq.valid)
    node T_2400 = bit-or(T_2398, T_2399)
    deq.valid := T_2400
    node T_2401 = bit-not(full)
    node T_2402 = bit-and(UInt<1>(0), deq.ready)
    node T_2403 = bit-or(T_2401, T_2402)
    enq.ready := T_2403
    accessor T_2404 = ram[T_2382]
    wire T_2405 : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}
    node T_2406 = mux(maybe_flow, enq.bits.mask, T_2404.mask)
    T_2405.mask := T_2406
    node T_2407 = mux(maybe_flow, enq.bits.tag, T_2404.tag)
    T_2405.tag := T_2407
    node T_2408 = mux(maybe_flow, enq.bits.rw, T_2404.rw)
    T_2405.rw := T_2408
    node T_2409 = mux(maybe_flow, enq.bits.addr, T_2404.addr)
    T_2405.addr := T_2409
    deq.bits := T_2405
    node ptr_diff = sub-wrap(T_2381, T_2382)
    node T_2410 = bit-and(maybe_full, ptr_match)
    node T_2411 = cat(T_2410, ptr_diff)
    count := T_2411
  module Queue_1490 : 
    output count : UInt<3>
    input enq : {valid : UInt<1>, flip ready : UInt<1>, bits : {data : UInt<32>}}
    output deq : {valid : UInt<1>, flip ready : UInt<1>, bits : {data : UInt<32>}}
    
    mem ram : {data : UInt<32>}[4]
    reg T_2412 : UInt<2>
    on-reset T_2412 := UInt<2>(0)
    reg T_2413 : UInt<2>
    on-reset T_2413 := UInt<2>(0)
    reg maybe_full : UInt<1>
    on-reset maybe_full := UInt<1>(0)
    node ptr_match = eq(T_2412, T_2413)
    node T_2414 = bit-not(maybe_full)
    node empty = bit-and(ptr_match, T_2414)
    node full = bit-and(ptr_match, maybe_full)
    node maybe_flow = bit-and(UInt<1>(0), empty)
    node do_flow = bit-and(maybe_flow, deq.ready)
    node T_2415 = bit-and(enq.ready, enq.valid)
    node T_2416 = bit-not(do_flow)
    node do_enq = bit-and(T_2415, T_2416)
    node T_2417 = bit-and(deq.ready, deq.valid)
    node T_2418 = bit-not(do_flow)
    node do_deq = bit-and(T_2417, T_2418)
    when do_enq : 
      accessor T_2419 = ram[T_2412]
      T_2419 := enq.bits
      node T_2420 = eq(T_2412, UInt<2>(3))
      node T_2421 = bit-and(UInt<1>(0), T_2420)
      node T_2422 = add-wrap(T_2412, UInt<1>(1))
      node T_2423 = mux(T_2421, UInt<1>(0), T_2422)
      T_2412 := T_2423
    when do_deq : 
      node T_2424 = eq(T_2413, UInt<2>(3))
      node T_2425 = bit-and(UInt<1>(0), T_2424)
      node T_2426 = add-wrap(T_2413, UInt<1>(1))
      node T_2427 = mux(T_2425, UInt<1>(0), T_2426)
      T_2413 := T_2427
    node T_2428 = neq(do_enq, do_deq)
    when T_2428 : maybe_full := do_enq
    node T_2429 = bit-not(empty)
    node T_2430 = bit-and(UInt<1>(0), enq.valid)
    node T_2431 = bit-or(T_2429, T_2430)
    deq.valid := T_2431
    node T_2432 = bit-not(full)
    node T_2433 = bit-and(UInt<1>(0), deq.ready)
    node T_2434 = bit-or(T_2432, T_2433)
    enq.ready := T_2434
    accessor T_2435 = ram[T_2413]
    wire T_2436 : {data : UInt<32>}
    node T_2437 = mux(maybe_flow, enq.bits.data, T_2435.data)
    T_2436.data := T_2437
    deq.bits := T_2436
    node ptr_diff = sub-wrap(T_2412, T_2413)
    node T_2438 = bit-and(maybe_full, ptr_match)
    node T_2439 = cat(T_2438, ptr_diff)
    count := T_2439
  module Memory : 
    output memory : {req_cmd : {valid : UInt<1>, flip ready : UInt<1>, bits : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}}, req_data : {valid : UInt<1>, flip ready : UInt<1>, bits : {data : UInt<32>}}, flip resp : {valid : UInt<1>, flip ready : UInt<1>, bits : {tag : UInt<5>, data : UInt<32>}}}
    output stall : UInt<1>
    input icache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    input dcache : {re : UInt<1>, flip dout : UInt<32>, we : UInt<4>, addr : UInt<32>, din : UInt<32>}
    
    inst memReqCmdQueue of Queue
    inst memReqDataQueue of Queue_1490
    reg state : UInt<1>
    on-reset state := UInt<1>(0)
    reg tag : UInt<5>
    on-reset tag := UInt<5>(0)
    node T_2440 = eq(state, UInt<1>(0))
    node T_2441 = bit-or(icache.re, dcache.re)
    node T_2442 = eq(dcache.we, UInt<1>(0))
    node T_2443 = bit-not(T_2442)
    node T_2444 = bit-or(T_2441, T_2443)
    node cpuReq = bit-and(T_2440, T_2444)
    node T_2445 = bits(icache.addr, 31, 2)
    node iaddr = cat(T_2445, UInt<2>(0))
    node T_2446 = bits(dcache.addr, 31, 2)
    node daddr = cat(T_2446, UInt<2>(0))
    reg idata : UInt
    reg ddata : UInt
    reg ire : UInt<1>
    reg dre : UInt<1>
    icache.dout := idata
    dcache.dout := ddata
    memory.req_cmd := memReqCmdQueue.deq
    memory.req_data := memReqDataQueue.deq
    memory.resp.ready := UInt<1>(0)
    node T_2447 = eq(state, UInt<1>(1))
    node T_2448 = bit-not(memReqCmdQueue.enq.ready)
    node T_2449 = bit-or(T_2447, T_2448)
    node T_2450 = bit-not(memReqDataQueue.enq.ready)
    node T_2451 = bit-or(T_2449, T_2450)
    stall := T_2451
    node T_2452 = eq(dcache.we, UInt<1>(0))
    node T_2453 = bit-not(T_2452)
    memReqCmdQueue.enq.bits.rw := T_2453
    memReqCmdQueue.enq.bits.tag := tag
    node T_2454 = eq(dcache.we, UInt<1>(0))
    node T_2455 = bit-not(T_2454)
    node T_2456 = bit-not(icache.re)
    node T_2457 = bit-or(T_2455, T_2456)
    node T_2458 = mux(T_2457, daddr, iaddr)
    memReqCmdQueue.enq.bits.addr := T_2458
    memReqCmdQueue.enq.bits.mask := dcache.we
    node T_2459 = bit-and(memReqDataQueue.enq.ready, cpuReq)
    memReqCmdQueue.enq.valid := T_2459
    memReqDataQueue.enq.bits.data := dcache.din
    node T_2460 = bit-and(memReqCmdQueue.enq.ready, cpuReq)
    node T_2461 = eq(dcache.we, UInt<1>(0))
    node T_2462 = bit-not(T_2461)
    node T_2463 = bit-and(T_2460, T_2462)
    memReqDataQueue.enq.valid := T_2463
    node T_2464 = eq(UInt<1>(0), state)
    when T_2464 : 
      node T_2465 = bit-or(icache.re, dcache.re)
      node T_2466 = eq(dcache.we, UInt<1>(0))
      node T_2467 = bit-not(T_2466)
      node T_2468 = bit-not(T_2467)
      node T_2469 = bit-and(T_2465, T_2468)
      node T_2470 = bit-and(T_2469, memReqCmdQueue.enq.ready)
      when T_2470 : 
        ire := icache.re
        dre := dcache.re
        state := UInt<1>(1)
    node T_2471 = eq(UInt<1>(1), state)
    when T_2471 : 
      memory.resp.ready := UInt<1>(1)
      node T_2472 = eq(memory.resp.bits.tag, tag)
      node T_2473 = bit-and(memory.resp.valid, T_2472)
      when T_2473 : 
        state := UInt<1>(0)
        node T_2474 = add-wrap(tag, UInt<1>(1))
        tag := T_2474
        memory.resp.ready := UInt<1>(0)
        when ire : idata := memory.resp.bits.data
        when dre : ddata := memory.resp.bits.data
  module Tile : 
    output htif : {host : {status : UInt<32>, flip hid : UInt<1>, tohost : UInt<32>}}
    output memory : {req_cmd : {valid : UInt<1>, flip ready : UInt<1>, bits : {mask : UInt<4>, tag : UInt<5>, rw : UInt<1>, addr : UInt<32>}}, req_data : {valid : UInt<1>, flip ready : UInt<1>, bits : {data : UInt<32>}}, flip resp : {valid : UInt<1>, flip ready : UInt<1>, bits : {tag : UInt<5>, data : UInt<32>}}}
    
    inst core of Core
    inst memmod of Memory
    htif.host := core.host
    memory := memmod.memory
    core.stall := memmod.stall
    memmod.icache := core.icache
    memmod.dcache := core.dcache