Predictor hash check

This commit is contained in:
waleed-lm 2020-10-05 10:34:05 +05:00
parent b90d9e6739
commit 01fe318c28
25 changed files with 25064 additions and 24816 deletions

View File

@ -3,10 +3,15 @@
"class":"firrtl.transforms.CombinationalPath", "class":"firrtl.transforms.CombinationalPath",
"sink":"~EL2_IC_TAG|EL2_IC_TAG>io_test", "sink":"~EL2_IC_TAG|EL2_IC_TAG>io_test",
"sources":[ "sources":[
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_wr_en",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_way",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_rw_addr",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_addr",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_wr_en", "~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_wr_en",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_tag_array", "~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_tag_array",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_wr_data", "~EL2_IC_TAG|EL2_IC_TAG>io_ic_rd_en",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_rw_addr" "~EL2_IC_TAG|EL2_IC_TAG>io_clk_override",
"~EL2_IC_TAG|EL2_IC_TAG>io_ic_debug_rd_en"
] ]
}, },
{ {

View File

@ -42,295 +42,295 @@ circuit EL2_IC_TAG :
node _T_18 = mux(UInt<1>("h00"), UInt<13>("h01fff"), UInt<13>("h00")) @[Bitwise.scala 72:12] node _T_18 = mux(UInt<1>("h00"), UInt<13>("h01fff"), UInt<13>("h00")) @[Bitwise.scala 72:12]
node _T_19 = bits(io.ic_rw_addr, 28, 10) @[el2_ifu_ic_mem.scala 84:89] node _T_19 = bits(io.ic_rw_addr, 28, 10) @[el2_ifu_ic_mem.scala 84:89]
node _T_20 = cat(_T_18, _T_19) @[Cat.scala 29:58] node _T_20 = cat(_T_18, _T_19) @[Cat.scala 29:58]
wire _T_21 : UInt<1>[18] @[el2_lib.scala 235:18] wire _T_21 : UInt<1>[18] @[el2_lib.scala 236:18]
wire _T_22 : UInt<1>[18] @[el2_lib.scala 236:18] wire _T_22 : UInt<1>[18] @[el2_lib.scala 237:18]
wire _T_23 : UInt<1>[18] @[el2_lib.scala 237:18] wire _T_23 : UInt<1>[18] @[el2_lib.scala 238:18]
wire _T_24 : UInt<1>[15] @[el2_lib.scala 238:18] wire _T_24 : UInt<1>[15] @[el2_lib.scala 239:18]
wire _T_25 : UInt<1>[15] @[el2_lib.scala 239:18] wire _T_25 : UInt<1>[15] @[el2_lib.scala 240:18]
wire _T_26 : UInt<1>[6] @[el2_lib.scala 240:18] wire _T_26 : UInt<1>[6] @[el2_lib.scala 241:18]
node _T_27 = bits(_T_20, 0, 0) @[el2_lib.scala 247:36] node _T_27 = bits(_T_20, 0, 0) @[el2_lib.scala 248:36]
_T_22[0] <= _T_27 @[el2_lib.scala 247:30] _T_22[0] <= _T_27 @[el2_lib.scala 248:30]
node _T_28 = bits(_T_20, 0, 0) @[el2_lib.scala 248:36] node _T_28 = bits(_T_20, 0, 0) @[el2_lib.scala 249:36]
_T_23[0] <= _T_28 @[el2_lib.scala 248:30] _T_23[0] <= _T_28 @[el2_lib.scala 249:30]
node _T_29 = bits(_T_20, 0, 0) @[el2_lib.scala 251:36] node _T_29 = bits(_T_20, 0, 0) @[el2_lib.scala 252:36]
_T_26[0] <= _T_29 @[el2_lib.scala 251:30] _T_26[0] <= _T_29 @[el2_lib.scala 252:30]
node _T_30 = bits(_T_20, 1, 1) @[el2_lib.scala 246:36] node _T_30 = bits(_T_20, 1, 1) @[el2_lib.scala 247:36]
_T_21[0] <= _T_30 @[el2_lib.scala 246:30] _T_21[0] <= _T_30 @[el2_lib.scala 247:30]
node _T_31 = bits(_T_20, 1, 1) @[el2_lib.scala 248:36] node _T_31 = bits(_T_20, 1, 1) @[el2_lib.scala 249:36]
_T_23[1] <= _T_31 @[el2_lib.scala 248:30] _T_23[1] <= _T_31 @[el2_lib.scala 249:30]
node _T_32 = bits(_T_20, 1, 1) @[el2_lib.scala 251:36] node _T_32 = bits(_T_20, 1, 1) @[el2_lib.scala 252:36]
_T_26[1] <= _T_32 @[el2_lib.scala 251:30] _T_26[1] <= _T_32 @[el2_lib.scala 252:30]
node _T_33 = bits(_T_20, 2, 2) @[el2_lib.scala 248:36] node _T_33 = bits(_T_20, 2, 2) @[el2_lib.scala 249:36]
_T_23[2] <= _T_33 @[el2_lib.scala 248:30] _T_23[2] <= _T_33 @[el2_lib.scala 249:30]
node _T_34 = bits(_T_20, 2, 2) @[el2_lib.scala 251:36] node _T_34 = bits(_T_20, 2, 2) @[el2_lib.scala 252:36]
_T_26[2] <= _T_34 @[el2_lib.scala 251:30] _T_26[2] <= _T_34 @[el2_lib.scala 252:30]
node _T_35 = bits(_T_20, 3, 3) @[el2_lib.scala 246:36] node _T_35 = bits(_T_20, 3, 3) @[el2_lib.scala 247:36]
_T_21[1] <= _T_35 @[el2_lib.scala 246:30] _T_21[1] <= _T_35 @[el2_lib.scala 247:30]
node _T_36 = bits(_T_20, 3, 3) @[el2_lib.scala 247:36] node _T_36 = bits(_T_20, 3, 3) @[el2_lib.scala 248:36]
_T_22[1] <= _T_36 @[el2_lib.scala 247:30] _T_22[1] <= _T_36 @[el2_lib.scala 248:30]
node _T_37 = bits(_T_20, 3, 3) @[el2_lib.scala 251:36] node _T_37 = bits(_T_20, 3, 3) @[el2_lib.scala 252:36]
_T_26[3] <= _T_37 @[el2_lib.scala 251:30] _T_26[3] <= _T_37 @[el2_lib.scala 252:30]
node _T_38 = bits(_T_20, 4, 4) @[el2_lib.scala 247:36] node _T_38 = bits(_T_20, 4, 4) @[el2_lib.scala 248:36]
_T_22[2] <= _T_38 @[el2_lib.scala 247:30] _T_22[2] <= _T_38 @[el2_lib.scala 248:30]
node _T_39 = bits(_T_20, 4, 4) @[el2_lib.scala 251:36] node _T_39 = bits(_T_20, 4, 4) @[el2_lib.scala 252:36]
_T_26[4] <= _T_39 @[el2_lib.scala 251:30] _T_26[4] <= _T_39 @[el2_lib.scala 252:30]
node _T_40 = bits(_T_20, 5, 5) @[el2_lib.scala 246:36] node _T_40 = bits(_T_20, 5, 5) @[el2_lib.scala 247:36]
_T_21[2] <= _T_40 @[el2_lib.scala 246:30] _T_21[2] <= _T_40 @[el2_lib.scala 247:30]
node _T_41 = bits(_T_20, 5, 5) @[el2_lib.scala 251:36] node _T_41 = bits(_T_20, 5, 5) @[el2_lib.scala 252:36]
_T_26[5] <= _T_41 @[el2_lib.scala 251:30] _T_26[5] <= _T_41 @[el2_lib.scala 252:30]
node _T_42 = bits(_T_20, 6, 6) @[el2_lib.scala 246:36] node _T_42 = bits(_T_20, 6, 6) @[el2_lib.scala 247:36]
_T_21[3] <= _T_42 @[el2_lib.scala 246:30] _T_21[3] <= _T_42 @[el2_lib.scala 247:30]
node _T_43 = bits(_T_20, 6, 6) @[el2_lib.scala 247:36] node _T_43 = bits(_T_20, 6, 6) @[el2_lib.scala 248:36]
_T_22[3] <= _T_43 @[el2_lib.scala 247:30] _T_22[3] <= _T_43 @[el2_lib.scala 248:30]
node _T_44 = bits(_T_20, 6, 6) @[el2_lib.scala 248:36] node _T_44 = bits(_T_20, 6, 6) @[el2_lib.scala 249:36]
_T_23[3] <= _T_44 @[el2_lib.scala 248:30] _T_23[3] <= _T_44 @[el2_lib.scala 249:30]
node _T_45 = bits(_T_20, 6, 6) @[el2_lib.scala 249:36] node _T_45 = bits(_T_20, 6, 6) @[el2_lib.scala 250:36]
_T_24[0] <= _T_45 @[el2_lib.scala 249:30] _T_24[0] <= _T_45 @[el2_lib.scala 250:30]
node _T_46 = bits(_T_20, 6, 6) @[el2_lib.scala 250:36] node _T_46 = bits(_T_20, 6, 6) @[el2_lib.scala 251:36]
_T_25[0] <= _T_46 @[el2_lib.scala 250:30] _T_25[0] <= _T_46 @[el2_lib.scala 251:30]
node _T_47 = bits(_T_20, 7, 7) @[el2_lib.scala 247:36] node _T_47 = bits(_T_20, 7, 7) @[el2_lib.scala 248:36]
_T_22[4] <= _T_47 @[el2_lib.scala 247:30] _T_22[4] <= _T_47 @[el2_lib.scala 248:30]
node _T_48 = bits(_T_20, 7, 7) @[el2_lib.scala 248:36] node _T_48 = bits(_T_20, 7, 7) @[el2_lib.scala 249:36]
_T_23[4] <= _T_48 @[el2_lib.scala 248:30] _T_23[4] <= _T_48 @[el2_lib.scala 249:30]
node _T_49 = bits(_T_20, 7, 7) @[el2_lib.scala 249:36] node _T_49 = bits(_T_20, 7, 7) @[el2_lib.scala 250:36]
_T_24[1] <= _T_49 @[el2_lib.scala 249:30] _T_24[1] <= _T_49 @[el2_lib.scala 250:30]
node _T_50 = bits(_T_20, 7, 7) @[el2_lib.scala 250:36] node _T_50 = bits(_T_20, 7, 7) @[el2_lib.scala 251:36]
_T_25[1] <= _T_50 @[el2_lib.scala 250:30] _T_25[1] <= _T_50 @[el2_lib.scala 251:30]
node _T_51 = bits(_T_20, 8, 8) @[el2_lib.scala 246:36] node _T_51 = bits(_T_20, 8, 8) @[el2_lib.scala 247:36]
_T_21[4] <= _T_51 @[el2_lib.scala 246:30] _T_21[4] <= _T_51 @[el2_lib.scala 247:30]
node _T_52 = bits(_T_20, 8, 8) @[el2_lib.scala 248:36] node _T_52 = bits(_T_20, 8, 8) @[el2_lib.scala 249:36]
_T_23[5] <= _T_52 @[el2_lib.scala 248:30] _T_23[5] <= _T_52 @[el2_lib.scala 249:30]
node _T_53 = bits(_T_20, 8, 8) @[el2_lib.scala 249:36] node _T_53 = bits(_T_20, 8, 8) @[el2_lib.scala 250:36]
_T_24[2] <= _T_53 @[el2_lib.scala 249:30] _T_24[2] <= _T_53 @[el2_lib.scala 250:30]
node _T_54 = bits(_T_20, 8, 8) @[el2_lib.scala 250:36] node _T_54 = bits(_T_20, 8, 8) @[el2_lib.scala 251:36]
_T_25[2] <= _T_54 @[el2_lib.scala 250:30] _T_25[2] <= _T_54 @[el2_lib.scala 251:30]
node _T_55 = bits(_T_20, 9, 9) @[el2_lib.scala 248:36] node _T_55 = bits(_T_20, 9, 9) @[el2_lib.scala 249:36]
_T_23[6] <= _T_55 @[el2_lib.scala 248:30] _T_23[6] <= _T_55 @[el2_lib.scala 249:30]
node _T_56 = bits(_T_20, 9, 9) @[el2_lib.scala 249:36] node _T_56 = bits(_T_20, 9, 9) @[el2_lib.scala 250:36]
_T_24[3] <= _T_56 @[el2_lib.scala 249:30] _T_24[3] <= _T_56 @[el2_lib.scala 250:30]
node _T_57 = bits(_T_20, 9, 9) @[el2_lib.scala 250:36] node _T_57 = bits(_T_20, 9, 9) @[el2_lib.scala 251:36]
_T_25[3] <= _T_57 @[el2_lib.scala 250:30] _T_25[3] <= _T_57 @[el2_lib.scala 251:30]
node _T_58 = bits(_T_20, 10, 10) @[el2_lib.scala 246:36] node _T_58 = bits(_T_20, 10, 10) @[el2_lib.scala 247:36]
_T_21[5] <= _T_58 @[el2_lib.scala 246:30] _T_21[5] <= _T_58 @[el2_lib.scala 247:30]
node _T_59 = bits(_T_20, 10, 10) @[el2_lib.scala 247:36] node _T_59 = bits(_T_20, 10, 10) @[el2_lib.scala 248:36]
_T_22[5] <= _T_59 @[el2_lib.scala 247:30] _T_22[5] <= _T_59 @[el2_lib.scala 248:30]
node _T_60 = bits(_T_20, 10, 10) @[el2_lib.scala 249:36] node _T_60 = bits(_T_20, 10, 10) @[el2_lib.scala 250:36]
_T_24[4] <= _T_60 @[el2_lib.scala 249:30] _T_24[4] <= _T_60 @[el2_lib.scala 250:30]
node _T_61 = bits(_T_20, 10, 10) @[el2_lib.scala 250:36] node _T_61 = bits(_T_20, 10, 10) @[el2_lib.scala 251:36]
_T_25[4] <= _T_61 @[el2_lib.scala 250:30] _T_25[4] <= _T_61 @[el2_lib.scala 251:30]
node _T_62 = bits(_T_20, 11, 11) @[el2_lib.scala 247:36] node _T_62 = bits(_T_20, 11, 11) @[el2_lib.scala 248:36]
_T_22[6] <= _T_62 @[el2_lib.scala 247:30] _T_22[6] <= _T_62 @[el2_lib.scala 248:30]
node _T_63 = bits(_T_20, 11, 11) @[el2_lib.scala 249:36] node _T_63 = bits(_T_20, 11, 11) @[el2_lib.scala 250:36]
_T_24[5] <= _T_63 @[el2_lib.scala 249:30] _T_24[5] <= _T_63 @[el2_lib.scala 250:30]
node _T_64 = bits(_T_20, 11, 11) @[el2_lib.scala 250:36] node _T_64 = bits(_T_20, 11, 11) @[el2_lib.scala 251:36]
_T_25[5] <= _T_64 @[el2_lib.scala 250:30] _T_25[5] <= _T_64 @[el2_lib.scala 251:30]
node _T_65 = bits(_T_20, 12, 12) @[el2_lib.scala 246:36] node _T_65 = bits(_T_20, 12, 12) @[el2_lib.scala 247:36]
_T_21[6] <= _T_65 @[el2_lib.scala 246:30] _T_21[6] <= _T_65 @[el2_lib.scala 247:30]
node _T_66 = bits(_T_20, 12, 12) @[el2_lib.scala 249:36] node _T_66 = bits(_T_20, 12, 12) @[el2_lib.scala 250:36]
_T_24[6] <= _T_66 @[el2_lib.scala 249:30] _T_24[6] <= _T_66 @[el2_lib.scala 250:30]
node _T_67 = bits(_T_20, 12, 12) @[el2_lib.scala 250:36] node _T_67 = bits(_T_20, 12, 12) @[el2_lib.scala 251:36]
_T_25[6] <= _T_67 @[el2_lib.scala 250:30] _T_25[6] <= _T_67 @[el2_lib.scala 251:30]
node _T_68 = bits(_T_20, 13, 13) @[el2_lib.scala 249:36] node _T_68 = bits(_T_20, 13, 13) @[el2_lib.scala 250:36]
_T_24[7] <= _T_68 @[el2_lib.scala 249:30] _T_24[7] <= _T_68 @[el2_lib.scala 250:30]
node _T_69 = bits(_T_20, 13, 13) @[el2_lib.scala 250:36] node _T_69 = bits(_T_20, 13, 13) @[el2_lib.scala 251:36]
_T_25[7] <= _T_69 @[el2_lib.scala 250:30] _T_25[7] <= _T_69 @[el2_lib.scala 251:30]
node _T_70 = bits(_T_20, 14, 14) @[el2_lib.scala 246:36] node _T_70 = bits(_T_20, 14, 14) @[el2_lib.scala 247:36]
_T_21[7] <= _T_70 @[el2_lib.scala 246:30] _T_21[7] <= _T_70 @[el2_lib.scala 247:30]
node _T_71 = bits(_T_20, 14, 14) @[el2_lib.scala 247:36] node _T_71 = bits(_T_20, 14, 14) @[el2_lib.scala 248:36]
_T_22[7] <= _T_71 @[el2_lib.scala 247:30] _T_22[7] <= _T_71 @[el2_lib.scala 248:30]
node _T_72 = bits(_T_20, 14, 14) @[el2_lib.scala 248:36] node _T_72 = bits(_T_20, 14, 14) @[el2_lib.scala 249:36]
_T_23[7] <= _T_72 @[el2_lib.scala 248:30] _T_23[7] <= _T_72 @[el2_lib.scala 249:30]
node _T_73 = bits(_T_20, 14, 14) @[el2_lib.scala 250:36] node _T_73 = bits(_T_20, 14, 14) @[el2_lib.scala 251:36]
_T_25[8] <= _T_73 @[el2_lib.scala 250:30] _T_25[8] <= _T_73 @[el2_lib.scala 251:30]
node _T_74 = bits(_T_20, 15, 15) @[el2_lib.scala 247:36] node _T_74 = bits(_T_20, 15, 15) @[el2_lib.scala 248:36]
_T_22[8] <= _T_74 @[el2_lib.scala 247:30] _T_22[8] <= _T_74 @[el2_lib.scala 248:30]
node _T_75 = bits(_T_20, 15, 15) @[el2_lib.scala 248:36] node _T_75 = bits(_T_20, 15, 15) @[el2_lib.scala 249:36]
_T_23[8] <= _T_75 @[el2_lib.scala 248:30] _T_23[8] <= _T_75 @[el2_lib.scala 249:30]
node _T_76 = bits(_T_20, 15, 15) @[el2_lib.scala 250:36] node _T_76 = bits(_T_20, 15, 15) @[el2_lib.scala 251:36]
_T_25[9] <= _T_76 @[el2_lib.scala 250:30] _T_25[9] <= _T_76 @[el2_lib.scala 251:30]
node _T_77 = bits(_T_20, 16, 16) @[el2_lib.scala 246:36] node _T_77 = bits(_T_20, 16, 16) @[el2_lib.scala 247:36]
_T_21[8] <= _T_77 @[el2_lib.scala 246:30] _T_21[8] <= _T_77 @[el2_lib.scala 247:30]
node _T_78 = bits(_T_20, 16, 16) @[el2_lib.scala 248:36] node _T_78 = bits(_T_20, 16, 16) @[el2_lib.scala 249:36]
_T_23[9] <= _T_78 @[el2_lib.scala 248:30] _T_23[9] <= _T_78 @[el2_lib.scala 249:30]
node _T_79 = bits(_T_20, 16, 16) @[el2_lib.scala 250:36] node _T_79 = bits(_T_20, 16, 16) @[el2_lib.scala 251:36]
_T_25[10] <= _T_79 @[el2_lib.scala 250:30] _T_25[10] <= _T_79 @[el2_lib.scala 251:30]
node _T_80 = bits(_T_20, 17, 17) @[el2_lib.scala 248:36] node _T_80 = bits(_T_20, 17, 17) @[el2_lib.scala 249:36]
_T_23[10] <= _T_80 @[el2_lib.scala 248:30] _T_23[10] <= _T_80 @[el2_lib.scala 249:30]
node _T_81 = bits(_T_20, 17, 17) @[el2_lib.scala 250:36] node _T_81 = bits(_T_20, 17, 17) @[el2_lib.scala 251:36]
_T_25[11] <= _T_81 @[el2_lib.scala 250:30] _T_25[11] <= _T_81 @[el2_lib.scala 251:30]
node _T_82 = bits(_T_20, 18, 18) @[el2_lib.scala 246:36] node _T_82 = bits(_T_20, 18, 18) @[el2_lib.scala 247:36]
_T_21[9] <= _T_82 @[el2_lib.scala 246:30] _T_21[9] <= _T_82 @[el2_lib.scala 247:30]
node _T_83 = bits(_T_20, 18, 18) @[el2_lib.scala 247:36] node _T_83 = bits(_T_20, 18, 18) @[el2_lib.scala 248:36]
_T_22[9] <= _T_83 @[el2_lib.scala 247:30] _T_22[9] <= _T_83 @[el2_lib.scala 248:30]
node _T_84 = bits(_T_20, 18, 18) @[el2_lib.scala 250:36] node _T_84 = bits(_T_20, 18, 18) @[el2_lib.scala 251:36]
_T_25[12] <= _T_84 @[el2_lib.scala 250:30] _T_25[12] <= _T_84 @[el2_lib.scala 251:30]
node _T_85 = bits(_T_20, 19, 19) @[el2_lib.scala 247:36] node _T_85 = bits(_T_20, 19, 19) @[el2_lib.scala 248:36]
_T_22[10] <= _T_85 @[el2_lib.scala 247:30] _T_22[10] <= _T_85 @[el2_lib.scala 248:30]
node _T_86 = bits(_T_20, 19, 19) @[el2_lib.scala 250:36] node _T_86 = bits(_T_20, 19, 19) @[el2_lib.scala 251:36]
_T_25[13] <= _T_86 @[el2_lib.scala 250:30] _T_25[13] <= _T_86 @[el2_lib.scala 251:30]
node _T_87 = bits(_T_20, 20, 20) @[el2_lib.scala 246:36] node _T_87 = bits(_T_20, 20, 20) @[el2_lib.scala 247:36]
_T_21[10] <= _T_87 @[el2_lib.scala 246:30] _T_21[10] <= _T_87 @[el2_lib.scala 247:30]
node _T_88 = bits(_T_20, 20, 20) @[el2_lib.scala 250:36] node _T_88 = bits(_T_20, 20, 20) @[el2_lib.scala 251:36]
_T_25[14] <= _T_88 @[el2_lib.scala 250:30] _T_25[14] <= _T_88 @[el2_lib.scala 251:30]
node _T_89 = bits(_T_20, 21, 21) @[el2_lib.scala 246:36] node _T_89 = bits(_T_20, 21, 21) @[el2_lib.scala 247:36]
_T_21[11] <= _T_89 @[el2_lib.scala 246:30] _T_21[11] <= _T_89 @[el2_lib.scala 247:30]
node _T_90 = bits(_T_20, 21, 21) @[el2_lib.scala 247:36] node _T_90 = bits(_T_20, 21, 21) @[el2_lib.scala 248:36]
_T_22[11] <= _T_90 @[el2_lib.scala 247:30] _T_22[11] <= _T_90 @[el2_lib.scala 248:30]
node _T_91 = bits(_T_20, 21, 21) @[el2_lib.scala 248:36] node _T_91 = bits(_T_20, 21, 21) @[el2_lib.scala 249:36]
_T_23[11] <= _T_91 @[el2_lib.scala 248:30] _T_23[11] <= _T_91 @[el2_lib.scala 249:30]
node _T_92 = bits(_T_20, 21, 21) @[el2_lib.scala 249:36] node _T_92 = bits(_T_20, 21, 21) @[el2_lib.scala 250:36]
_T_24[8] <= _T_92 @[el2_lib.scala 249:30] _T_24[8] <= _T_92 @[el2_lib.scala 250:30]
node _T_93 = bits(_T_20, 22, 22) @[el2_lib.scala 247:36] node _T_93 = bits(_T_20, 22, 22) @[el2_lib.scala 248:36]
_T_22[12] <= _T_93 @[el2_lib.scala 247:30] _T_22[12] <= _T_93 @[el2_lib.scala 248:30]
node _T_94 = bits(_T_20, 22, 22) @[el2_lib.scala 248:36] node _T_94 = bits(_T_20, 22, 22) @[el2_lib.scala 249:36]
_T_23[12] <= _T_94 @[el2_lib.scala 248:30] _T_23[12] <= _T_94 @[el2_lib.scala 249:30]
node _T_95 = bits(_T_20, 22, 22) @[el2_lib.scala 249:36] node _T_95 = bits(_T_20, 22, 22) @[el2_lib.scala 250:36]
_T_24[9] <= _T_95 @[el2_lib.scala 249:30] _T_24[9] <= _T_95 @[el2_lib.scala 250:30]
node _T_96 = bits(_T_20, 23, 23) @[el2_lib.scala 246:36] node _T_96 = bits(_T_20, 23, 23) @[el2_lib.scala 247:36]
_T_21[12] <= _T_96 @[el2_lib.scala 246:30] _T_21[12] <= _T_96 @[el2_lib.scala 247:30]
node _T_97 = bits(_T_20, 23, 23) @[el2_lib.scala 248:36] node _T_97 = bits(_T_20, 23, 23) @[el2_lib.scala 249:36]
_T_23[13] <= _T_97 @[el2_lib.scala 248:30] _T_23[13] <= _T_97 @[el2_lib.scala 249:30]
node _T_98 = bits(_T_20, 23, 23) @[el2_lib.scala 249:36] node _T_98 = bits(_T_20, 23, 23) @[el2_lib.scala 250:36]
_T_24[10] <= _T_98 @[el2_lib.scala 249:30] _T_24[10] <= _T_98 @[el2_lib.scala 250:30]
node _T_99 = bits(_T_20, 24, 24) @[el2_lib.scala 248:36] node _T_99 = bits(_T_20, 24, 24) @[el2_lib.scala 249:36]
_T_23[14] <= _T_99 @[el2_lib.scala 248:30] _T_23[14] <= _T_99 @[el2_lib.scala 249:30]
node _T_100 = bits(_T_20, 24, 24) @[el2_lib.scala 249:36] node _T_100 = bits(_T_20, 24, 24) @[el2_lib.scala 250:36]
_T_24[11] <= _T_100 @[el2_lib.scala 249:30] _T_24[11] <= _T_100 @[el2_lib.scala 250:30]
node _T_101 = bits(_T_20, 25, 25) @[el2_lib.scala 246:36] node _T_101 = bits(_T_20, 25, 25) @[el2_lib.scala 247:36]
_T_21[13] <= _T_101 @[el2_lib.scala 246:30] _T_21[13] <= _T_101 @[el2_lib.scala 247:30]
node _T_102 = bits(_T_20, 25, 25) @[el2_lib.scala 247:36] node _T_102 = bits(_T_20, 25, 25) @[el2_lib.scala 248:36]
_T_22[13] <= _T_102 @[el2_lib.scala 247:30] _T_22[13] <= _T_102 @[el2_lib.scala 248:30]
node _T_103 = bits(_T_20, 25, 25) @[el2_lib.scala 249:36] node _T_103 = bits(_T_20, 25, 25) @[el2_lib.scala 250:36]
_T_24[12] <= _T_103 @[el2_lib.scala 249:30] _T_24[12] <= _T_103 @[el2_lib.scala 250:30]
node _T_104 = bits(_T_20, 26, 26) @[el2_lib.scala 247:36] node _T_104 = bits(_T_20, 26, 26) @[el2_lib.scala 248:36]
_T_22[14] <= _T_104 @[el2_lib.scala 247:30] _T_22[14] <= _T_104 @[el2_lib.scala 248:30]
node _T_105 = bits(_T_20, 26, 26) @[el2_lib.scala 249:36] node _T_105 = bits(_T_20, 26, 26) @[el2_lib.scala 250:36]
_T_24[13] <= _T_105 @[el2_lib.scala 249:30] _T_24[13] <= _T_105 @[el2_lib.scala 250:30]
node _T_106 = bits(_T_20, 27, 27) @[el2_lib.scala 246:36] node _T_106 = bits(_T_20, 27, 27) @[el2_lib.scala 247:36]
_T_21[14] <= _T_106 @[el2_lib.scala 246:30] _T_21[14] <= _T_106 @[el2_lib.scala 247:30]
node _T_107 = bits(_T_20, 27, 27) @[el2_lib.scala 249:36] node _T_107 = bits(_T_20, 27, 27) @[el2_lib.scala 250:36]
_T_24[14] <= _T_107 @[el2_lib.scala 249:30] _T_24[14] <= _T_107 @[el2_lib.scala 250:30]
node _T_108 = bits(_T_20, 28, 28) @[el2_lib.scala 246:36] node _T_108 = bits(_T_20, 28, 28) @[el2_lib.scala 247:36]
_T_21[15] <= _T_108 @[el2_lib.scala 246:30] _T_21[15] <= _T_108 @[el2_lib.scala 247:30]
node _T_109 = bits(_T_20, 28, 28) @[el2_lib.scala 247:36] node _T_109 = bits(_T_20, 28, 28) @[el2_lib.scala 248:36]
_T_22[15] <= _T_109 @[el2_lib.scala 247:30] _T_22[15] <= _T_109 @[el2_lib.scala 248:30]
node _T_110 = bits(_T_20, 28, 28) @[el2_lib.scala 248:36] node _T_110 = bits(_T_20, 28, 28) @[el2_lib.scala 249:36]
_T_23[15] <= _T_110 @[el2_lib.scala 248:30] _T_23[15] <= _T_110 @[el2_lib.scala 249:30]
node _T_111 = bits(_T_20, 29, 29) @[el2_lib.scala 247:36] node _T_111 = bits(_T_20, 29, 29) @[el2_lib.scala 248:36]
_T_22[16] <= _T_111 @[el2_lib.scala 247:30] _T_22[16] <= _T_111 @[el2_lib.scala 248:30]
node _T_112 = bits(_T_20, 29, 29) @[el2_lib.scala 248:36] node _T_112 = bits(_T_20, 29, 29) @[el2_lib.scala 249:36]
_T_23[16] <= _T_112 @[el2_lib.scala 248:30] _T_23[16] <= _T_112 @[el2_lib.scala 249:30]
node _T_113 = bits(_T_20, 30, 30) @[el2_lib.scala 246:36] node _T_113 = bits(_T_20, 30, 30) @[el2_lib.scala 247:36]
_T_21[16] <= _T_113 @[el2_lib.scala 246:30] _T_21[16] <= _T_113 @[el2_lib.scala 247:30]
node _T_114 = bits(_T_20, 30, 30) @[el2_lib.scala 248:36] node _T_114 = bits(_T_20, 30, 30) @[el2_lib.scala 249:36]
_T_23[17] <= _T_114 @[el2_lib.scala 248:30] _T_23[17] <= _T_114 @[el2_lib.scala 249:30]
node _T_115 = bits(_T_20, 31, 31) @[el2_lib.scala 246:36] node _T_115 = bits(_T_20, 31, 31) @[el2_lib.scala 247:36]
_T_21[17] <= _T_115 @[el2_lib.scala 246:30] _T_21[17] <= _T_115 @[el2_lib.scala 247:30]
node _T_116 = bits(_T_20, 31, 31) @[el2_lib.scala 247:36] node _T_116 = bits(_T_20, 31, 31) @[el2_lib.scala 248:36]
_T_22[17] <= _T_116 @[el2_lib.scala 247:30] _T_22[17] <= _T_116 @[el2_lib.scala 248:30]
node _T_117 = cat(_T_21[1], _T_21[0]) @[el2_lib.scala 253:22] node _T_117 = cat(_T_21[1], _T_21[0]) @[el2_lib.scala 254:22]
node _T_118 = cat(_T_21[3], _T_21[2]) @[el2_lib.scala 253:22] node _T_118 = cat(_T_21[3], _T_21[2]) @[el2_lib.scala 254:22]
node _T_119 = cat(_T_118, _T_117) @[el2_lib.scala 253:22] node _T_119 = cat(_T_118, _T_117) @[el2_lib.scala 254:22]
node _T_120 = cat(_T_21[5], _T_21[4]) @[el2_lib.scala 253:22] node _T_120 = cat(_T_21[5], _T_21[4]) @[el2_lib.scala 254:22]
node _T_121 = cat(_T_21[8], _T_21[7]) @[el2_lib.scala 253:22] node _T_121 = cat(_T_21[8], _T_21[7]) @[el2_lib.scala 254:22]
node _T_122 = cat(_T_121, _T_21[6]) @[el2_lib.scala 253:22] node _T_122 = cat(_T_121, _T_21[6]) @[el2_lib.scala 254:22]
node _T_123 = cat(_T_122, _T_120) @[el2_lib.scala 253:22] node _T_123 = cat(_T_122, _T_120) @[el2_lib.scala 254:22]
node _T_124 = cat(_T_123, _T_119) @[el2_lib.scala 253:22] node _T_124 = cat(_T_123, _T_119) @[el2_lib.scala 254:22]
node _T_125 = cat(_T_21[10], _T_21[9]) @[el2_lib.scala 253:22] node _T_125 = cat(_T_21[10], _T_21[9]) @[el2_lib.scala 254:22]
node _T_126 = cat(_T_21[12], _T_21[11]) @[el2_lib.scala 253:22] node _T_126 = cat(_T_21[12], _T_21[11]) @[el2_lib.scala 254:22]
node _T_127 = cat(_T_126, _T_125) @[el2_lib.scala 253:22] node _T_127 = cat(_T_126, _T_125) @[el2_lib.scala 254:22]
node _T_128 = cat(_T_21[14], _T_21[13]) @[el2_lib.scala 253:22] node _T_128 = cat(_T_21[14], _T_21[13]) @[el2_lib.scala 254:22]
node _T_129 = cat(_T_21[17], _T_21[16]) @[el2_lib.scala 253:22] node _T_129 = cat(_T_21[17], _T_21[16]) @[el2_lib.scala 254:22]
node _T_130 = cat(_T_129, _T_21[15]) @[el2_lib.scala 253:22] node _T_130 = cat(_T_129, _T_21[15]) @[el2_lib.scala 254:22]
node _T_131 = cat(_T_130, _T_128) @[el2_lib.scala 253:22] node _T_131 = cat(_T_130, _T_128) @[el2_lib.scala 254:22]
node _T_132 = cat(_T_131, _T_127) @[el2_lib.scala 253:22] node _T_132 = cat(_T_131, _T_127) @[el2_lib.scala 254:22]
node _T_133 = cat(_T_132, _T_124) @[el2_lib.scala 253:22] node _T_133 = cat(_T_132, _T_124) @[el2_lib.scala 254:22]
node _T_134 = xorr(_T_133) @[el2_lib.scala 253:29] node _T_134 = xorr(_T_133) @[el2_lib.scala 254:29]
node _T_135 = cat(_T_22[1], _T_22[0]) @[el2_lib.scala 253:39] node _T_135 = cat(_T_22[1], _T_22[0]) @[el2_lib.scala 254:39]
node _T_136 = cat(_T_22[3], _T_22[2]) @[el2_lib.scala 253:39] node _T_136 = cat(_T_22[3], _T_22[2]) @[el2_lib.scala 254:39]
node _T_137 = cat(_T_136, _T_135) @[el2_lib.scala 253:39] node _T_137 = cat(_T_136, _T_135) @[el2_lib.scala 254:39]
node _T_138 = cat(_T_22[5], _T_22[4]) @[el2_lib.scala 253:39] node _T_138 = cat(_T_22[5], _T_22[4]) @[el2_lib.scala 254:39]
node _T_139 = cat(_T_22[8], _T_22[7]) @[el2_lib.scala 253:39] node _T_139 = cat(_T_22[8], _T_22[7]) @[el2_lib.scala 254:39]
node _T_140 = cat(_T_139, _T_22[6]) @[el2_lib.scala 253:39] node _T_140 = cat(_T_139, _T_22[6]) @[el2_lib.scala 254:39]
node _T_141 = cat(_T_140, _T_138) @[el2_lib.scala 253:39] node _T_141 = cat(_T_140, _T_138) @[el2_lib.scala 254:39]
node _T_142 = cat(_T_141, _T_137) @[el2_lib.scala 253:39] node _T_142 = cat(_T_141, _T_137) @[el2_lib.scala 254:39]
node _T_143 = cat(_T_22[10], _T_22[9]) @[el2_lib.scala 253:39] node _T_143 = cat(_T_22[10], _T_22[9]) @[el2_lib.scala 254:39]
node _T_144 = cat(_T_22[12], _T_22[11]) @[el2_lib.scala 253:39] node _T_144 = cat(_T_22[12], _T_22[11]) @[el2_lib.scala 254:39]
node _T_145 = cat(_T_144, _T_143) @[el2_lib.scala 253:39] node _T_145 = cat(_T_144, _T_143) @[el2_lib.scala 254:39]
node _T_146 = cat(_T_22[14], _T_22[13]) @[el2_lib.scala 253:39] node _T_146 = cat(_T_22[14], _T_22[13]) @[el2_lib.scala 254:39]
node _T_147 = cat(_T_22[17], _T_22[16]) @[el2_lib.scala 253:39] node _T_147 = cat(_T_22[17], _T_22[16]) @[el2_lib.scala 254:39]
node _T_148 = cat(_T_147, _T_22[15]) @[el2_lib.scala 253:39] node _T_148 = cat(_T_147, _T_22[15]) @[el2_lib.scala 254:39]
node _T_149 = cat(_T_148, _T_146) @[el2_lib.scala 253:39] node _T_149 = cat(_T_148, _T_146) @[el2_lib.scala 254:39]
node _T_150 = cat(_T_149, _T_145) @[el2_lib.scala 253:39] node _T_150 = cat(_T_149, _T_145) @[el2_lib.scala 254:39]
node _T_151 = cat(_T_150, _T_142) @[el2_lib.scala 253:39] node _T_151 = cat(_T_150, _T_142) @[el2_lib.scala 254:39]
node _T_152 = xorr(_T_151) @[el2_lib.scala 253:46] node _T_152 = xorr(_T_151) @[el2_lib.scala 254:46]
node _T_153 = cat(_T_23[1], _T_23[0]) @[el2_lib.scala 253:56] node _T_153 = cat(_T_23[1], _T_23[0]) @[el2_lib.scala 254:56]
node _T_154 = cat(_T_23[3], _T_23[2]) @[el2_lib.scala 253:56] node _T_154 = cat(_T_23[3], _T_23[2]) @[el2_lib.scala 254:56]
node _T_155 = cat(_T_154, _T_153) @[el2_lib.scala 253:56] node _T_155 = cat(_T_154, _T_153) @[el2_lib.scala 254:56]
node _T_156 = cat(_T_23[5], _T_23[4]) @[el2_lib.scala 253:56] node _T_156 = cat(_T_23[5], _T_23[4]) @[el2_lib.scala 254:56]
node _T_157 = cat(_T_23[8], _T_23[7]) @[el2_lib.scala 253:56] node _T_157 = cat(_T_23[8], _T_23[7]) @[el2_lib.scala 254:56]
node _T_158 = cat(_T_157, _T_23[6]) @[el2_lib.scala 253:56] node _T_158 = cat(_T_157, _T_23[6]) @[el2_lib.scala 254:56]
node _T_159 = cat(_T_158, _T_156) @[el2_lib.scala 253:56] node _T_159 = cat(_T_158, _T_156) @[el2_lib.scala 254:56]
node _T_160 = cat(_T_159, _T_155) @[el2_lib.scala 253:56] node _T_160 = cat(_T_159, _T_155) @[el2_lib.scala 254:56]
node _T_161 = cat(_T_23[10], _T_23[9]) @[el2_lib.scala 253:56] node _T_161 = cat(_T_23[10], _T_23[9]) @[el2_lib.scala 254:56]
node _T_162 = cat(_T_23[12], _T_23[11]) @[el2_lib.scala 253:56] node _T_162 = cat(_T_23[12], _T_23[11]) @[el2_lib.scala 254:56]
node _T_163 = cat(_T_162, _T_161) @[el2_lib.scala 253:56] node _T_163 = cat(_T_162, _T_161) @[el2_lib.scala 254:56]
node _T_164 = cat(_T_23[14], _T_23[13]) @[el2_lib.scala 253:56] node _T_164 = cat(_T_23[14], _T_23[13]) @[el2_lib.scala 254:56]
node _T_165 = cat(_T_23[17], _T_23[16]) @[el2_lib.scala 253:56] node _T_165 = cat(_T_23[17], _T_23[16]) @[el2_lib.scala 254:56]
node _T_166 = cat(_T_165, _T_23[15]) @[el2_lib.scala 253:56] node _T_166 = cat(_T_165, _T_23[15]) @[el2_lib.scala 254:56]
node _T_167 = cat(_T_166, _T_164) @[el2_lib.scala 253:56] node _T_167 = cat(_T_166, _T_164) @[el2_lib.scala 254:56]
node _T_168 = cat(_T_167, _T_163) @[el2_lib.scala 253:56] node _T_168 = cat(_T_167, _T_163) @[el2_lib.scala 254:56]
node _T_169 = cat(_T_168, _T_160) @[el2_lib.scala 253:56] node _T_169 = cat(_T_168, _T_160) @[el2_lib.scala 254:56]
node _T_170 = xorr(_T_169) @[el2_lib.scala 253:63] node _T_170 = xorr(_T_169) @[el2_lib.scala 254:63]
node _T_171 = cat(_T_24[2], _T_24[1]) @[el2_lib.scala 253:73] node _T_171 = cat(_T_24[2], _T_24[1]) @[el2_lib.scala 254:73]
node _T_172 = cat(_T_171, _T_24[0]) @[el2_lib.scala 253:73] node _T_172 = cat(_T_171, _T_24[0]) @[el2_lib.scala 254:73]
node _T_173 = cat(_T_24[4], _T_24[3]) @[el2_lib.scala 253:73] node _T_173 = cat(_T_24[4], _T_24[3]) @[el2_lib.scala 254:73]
node _T_174 = cat(_T_24[6], _T_24[5]) @[el2_lib.scala 253:73] node _T_174 = cat(_T_24[6], _T_24[5]) @[el2_lib.scala 254:73]
node _T_175 = cat(_T_174, _T_173) @[el2_lib.scala 253:73] node _T_175 = cat(_T_174, _T_173) @[el2_lib.scala 254:73]
node _T_176 = cat(_T_175, _T_172) @[el2_lib.scala 253:73] node _T_176 = cat(_T_175, _T_172) @[el2_lib.scala 254:73]
node _T_177 = cat(_T_24[8], _T_24[7]) @[el2_lib.scala 253:73] node _T_177 = cat(_T_24[8], _T_24[7]) @[el2_lib.scala 254:73]
node _T_178 = cat(_T_24[10], _T_24[9]) @[el2_lib.scala 253:73] node _T_178 = cat(_T_24[10], _T_24[9]) @[el2_lib.scala 254:73]
node _T_179 = cat(_T_178, _T_177) @[el2_lib.scala 253:73] node _T_179 = cat(_T_178, _T_177) @[el2_lib.scala 254:73]
node _T_180 = cat(_T_24[12], _T_24[11]) @[el2_lib.scala 253:73] node _T_180 = cat(_T_24[12], _T_24[11]) @[el2_lib.scala 254:73]
node _T_181 = cat(_T_24[14], _T_24[13]) @[el2_lib.scala 253:73] node _T_181 = cat(_T_24[14], _T_24[13]) @[el2_lib.scala 254:73]
node _T_182 = cat(_T_181, _T_180) @[el2_lib.scala 253:73] node _T_182 = cat(_T_181, _T_180) @[el2_lib.scala 254:73]
node _T_183 = cat(_T_182, _T_179) @[el2_lib.scala 253:73] node _T_183 = cat(_T_182, _T_179) @[el2_lib.scala 254:73]
node _T_184 = cat(_T_183, _T_176) @[el2_lib.scala 253:73] node _T_184 = cat(_T_183, _T_176) @[el2_lib.scala 254:73]
node _T_185 = xorr(_T_184) @[el2_lib.scala 253:80] node _T_185 = xorr(_T_184) @[el2_lib.scala 254:80]
node _T_186 = cat(_T_25[2], _T_25[1]) @[el2_lib.scala 253:90] node _T_186 = cat(_T_25[2], _T_25[1]) @[el2_lib.scala 254:90]
node _T_187 = cat(_T_186, _T_25[0]) @[el2_lib.scala 253:90] node _T_187 = cat(_T_186, _T_25[0]) @[el2_lib.scala 254:90]
node _T_188 = cat(_T_25[4], _T_25[3]) @[el2_lib.scala 253:90] node _T_188 = cat(_T_25[4], _T_25[3]) @[el2_lib.scala 254:90]
node _T_189 = cat(_T_25[6], _T_25[5]) @[el2_lib.scala 253:90] node _T_189 = cat(_T_25[6], _T_25[5]) @[el2_lib.scala 254:90]
node _T_190 = cat(_T_189, _T_188) @[el2_lib.scala 253:90] node _T_190 = cat(_T_189, _T_188) @[el2_lib.scala 254:90]
node _T_191 = cat(_T_190, _T_187) @[el2_lib.scala 253:90] node _T_191 = cat(_T_190, _T_187) @[el2_lib.scala 254:90]
node _T_192 = cat(_T_25[8], _T_25[7]) @[el2_lib.scala 253:90] node _T_192 = cat(_T_25[8], _T_25[7]) @[el2_lib.scala 254:90]
node _T_193 = cat(_T_25[10], _T_25[9]) @[el2_lib.scala 253:90] node _T_193 = cat(_T_25[10], _T_25[9]) @[el2_lib.scala 254:90]
node _T_194 = cat(_T_193, _T_192) @[el2_lib.scala 253:90] node _T_194 = cat(_T_193, _T_192) @[el2_lib.scala 254:90]
node _T_195 = cat(_T_25[12], _T_25[11]) @[el2_lib.scala 253:90] node _T_195 = cat(_T_25[12], _T_25[11]) @[el2_lib.scala 254:90]
node _T_196 = cat(_T_25[14], _T_25[13]) @[el2_lib.scala 253:90] node _T_196 = cat(_T_25[14], _T_25[13]) @[el2_lib.scala 254:90]
node _T_197 = cat(_T_196, _T_195) @[el2_lib.scala 253:90] node _T_197 = cat(_T_196, _T_195) @[el2_lib.scala 254:90]
node _T_198 = cat(_T_197, _T_194) @[el2_lib.scala 253:90] node _T_198 = cat(_T_197, _T_194) @[el2_lib.scala 254:90]
node _T_199 = cat(_T_198, _T_191) @[el2_lib.scala 253:90] node _T_199 = cat(_T_198, _T_191) @[el2_lib.scala 254:90]
node _T_200 = xorr(_T_199) @[el2_lib.scala 253:97] node _T_200 = xorr(_T_199) @[el2_lib.scala 254:97]
node _T_201 = cat(_T_26[2], _T_26[1]) @[el2_lib.scala 253:107] node _T_201 = cat(_T_26[2], _T_26[1]) @[el2_lib.scala 254:107]
node _T_202 = cat(_T_201, _T_26[0]) @[el2_lib.scala 253:107] node _T_202 = cat(_T_201, _T_26[0]) @[el2_lib.scala 254:107]
node _T_203 = cat(_T_26[5], _T_26[4]) @[el2_lib.scala 253:107] node _T_203 = cat(_T_26[5], _T_26[4]) @[el2_lib.scala 254:107]
node _T_204 = cat(_T_203, _T_26[3]) @[el2_lib.scala 253:107] node _T_204 = cat(_T_203, _T_26[3]) @[el2_lib.scala 254:107]
node _T_205 = cat(_T_204, _T_202) @[el2_lib.scala 253:107] node _T_205 = cat(_T_204, _T_202) @[el2_lib.scala 254:107]
node _T_206 = xorr(_T_205) @[el2_lib.scala 253:114] node _T_206 = xorr(_T_205) @[el2_lib.scala 254:114]
node _T_207 = cat(_T_185, _T_200) @[Cat.scala 29:58] node _T_207 = cat(_T_185, _T_200) @[Cat.scala 29:58]
node _T_208 = cat(_T_207, _T_206) @[Cat.scala 29:58] node _T_208 = cat(_T_207, _T_206) @[Cat.scala 29:58]
node _T_209 = cat(_T_134, _T_152) @[Cat.scala 29:58] node _T_209 = cat(_T_134, _T_152) @[Cat.scala 29:58]
node _T_210 = cat(_T_209, _T_170) @[Cat.scala 29:58] node _T_210 = cat(_T_209, _T_170) @[Cat.scala 29:58]
node _T_211 = cat(_T_210, _T_208) @[Cat.scala 29:58] node _T_211 = cat(_T_210, _T_208) @[Cat.scala 29:58]
node _T_212 = xorr(_T_20) @[el2_lib.scala 254:13] node _T_212 = xorr(_T_20) @[el2_lib.scala 255:13]
node _T_213 = xorr(_T_211) @[el2_lib.scala 254:23] node _T_213 = xorr(_T_211) @[el2_lib.scala 255:23]
node _T_214 = xor(_T_212, _T_213) @[el2_lib.scala 254:18] node _T_214 = xor(_T_212, _T_213) @[el2_lib.scala 255:18]
node ic_tag_ecc = cat(_T_214, _T_211) @[Cat.scala 29:58] node ic_tag_ecc = cat(_T_214, _T_211) @[Cat.scala 29:58]
node _T_215 = mux(UInt<1>("h00"), UInt<13>("h01fff"), UInt<13>("h00")) @[Bitwise.scala 72:12] node _T_215 = mux(UInt<1>("h00"), UInt<13>("h01fff"), UInt<13>("h00")) @[Bitwise.scala 72:12]
node _T_216 = bits(io.ic_rw_addr, 28, 10) @[el2_ifu_ic_mem.scala 86:96] node _T_216 = bits(io.ic_rw_addr, 28, 10) @[el2_ifu_ic_mem.scala 86:96]
node _T_217 = cat(_T_215, _T_216) @[Cat.scala 29:58] node _T_217 = cat(_T_215, _T_216) @[Cat.scala 29:58]
node ic_tag_parity = xorr(_T_217) @[el2_lib.scala 193:13] node ic_tag_parity = xorr(_T_217) @[el2_lib.scala 194:13]
node _T_218 = and(io.ic_debug_wr_en, io.ic_debug_tag_array) @[el2_ifu_ic_mem.scala 90:30] node _T_218 = and(io.ic_debug_wr_en, io.ic_debug_tag_array) @[el2_ifu_ic_mem.scala 90:30]
node _T_219 = bits(io.ic_debug_wr_data, 68, 64) @[el2_ifu_ic_mem.scala 90:93] node _T_219 = bits(io.ic_debug_wr_data, 68, 64) @[el2_ifu_ic_mem.scala 90:93]
node _T_220 = bits(io.ic_debug_wr_data, 31, 11) @[el2_ifu_ic_mem.scala 90:150] node _T_220 = bits(io.ic_debug_wr_data, 31, 11) @[el2_ifu_ic_mem.scala 90:150]
@ -338,6 +338,56 @@ circuit EL2_IC_TAG :
node _T_222 = bits(ic_tag_ecc, 4, 0) @[el2_ifu_ic_mem.scala 91:38] node _T_222 = bits(ic_tag_ecc, 4, 0) @[el2_ifu_ic_mem.scala 91:38]
node _T_223 = mux(UInt<1>("h00"), UInt<2>("h03"), UInt<2>("h00")) @[Bitwise.scala 72:12] node _T_223 = mux(UInt<1>("h00"), UInt<2>("h03"), UInt<2>("h00")) @[Bitwise.scala 72:12]
node _T_224 = cat(_T_222, _T_223) @[Cat.scala 29:58] node _T_224 = cat(_T_222, _T_223) @[Cat.scala 29:58]
node ic_tag_wr_data = mux(_T_218, _T_221, _T_224) @[el2_ifu_ic_mem.scala 90:11] node _T_225 = bits(io.ic_rw_addr, 28, 10) @[el2_ifu_ic_mem.scala 91:121]
io.test <= ic_tag_wr_data @[el2_ifu_ic_mem.scala 93:11] node _T_226 = cat(_T_224, _T_225) @[Cat.scala 29:58]
node ic_tag_wr_data = mux(_T_218, _T_221, _T_226) @[el2_ifu_ic_mem.scala 90:11]
node _T_227 = or(io.ic_debug_rd_en, io.ic_debug_wr_en) @[el2_ifu_ic_mem.scala 93:45]
node _T_228 = bits(_T_227, 0, 0) @[el2_ifu_ic_mem.scala 93:66]
node _T_229 = bits(io.ic_debug_addr, 9, 3) @[el2_ifu_ic_mem.scala 93:89]
node ic_rw_addr_q = mux(_T_228, _T_229, io.ic_rw_addr) @[el2_ifu_ic_mem.scala 93:25]
reg ic_debug_rd_way_en_ff : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ic_mem.scala 95:38]
ic_debug_rd_way_en_ff <= ic_debug_rd_way_en @[el2_ifu_ic_mem.scala 95:38]
cmem tag_mem : UInt<26>[2][128] @[el2_ifu_ic_mem.scala 97:20]
wire ic_tag_data_raw : UInt<26>[2] @[el2_ifu_ic_mem.scala 98:29]
ic_tag_data_raw[0] <= UInt<1>("h00") @[el2_ifu_ic_mem.scala 101:24]
node _T_230 = bits(ic_tag_wren_q, 0, 0) @[el2_ifu_ic_mem.scala 102:23]
node _T_231 = bits(ic_tag_clken, 0, 0) @[el2_ifu_ic_mem.scala 102:39]
node _T_232 = and(_T_230, _T_231) @[el2_ifu_ic_mem.scala 102:26]
when _T_232 : @[el2_ifu_ic_mem.scala 102:43]
node _T_233 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 103:25]
infer mport _T_234 = tag_mem[_T_233], clock @[el2_ifu_ic_mem.scala 103:12]
node _T_235 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 103:81]
node _T_236 = bits(_T_235, 0, 0)
_T_234[_T_236] <= ic_tag_wr_data @[el2_ifu_ic_mem.scala 103:125]
skip @[el2_ifu_ic_mem.scala 102:43]
else : @[el2_ifu_ic_mem.scala 104:32]
node _T_237 = bits(ic_tag_clken, 0, 0) @[el2_ifu_ic_mem.scala 104:28]
when _T_237 : @[el2_ifu_ic_mem.scala 104:32]
node _T_238 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 105:49]
infer mport _T_239 = tag_mem[_T_238], clock @[el2_ifu_ic_mem.scala 105:36]
node _T_240 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 105:105]
node _T_241 = bits(_T_240, 0, 0)
ic_tag_data_raw[0] <= _T_239[_T_241] @[el2_ifu_ic_mem.scala 105:26]
skip @[el2_ifu_ic_mem.scala 104:32]
ic_tag_data_raw[1] <= UInt<1>("h00") @[el2_ifu_ic_mem.scala 101:24]
node _T_242 = bits(ic_tag_wren_q, 1, 1) @[el2_ifu_ic_mem.scala 102:23]
node _T_243 = bits(ic_tag_clken, 1, 1) @[el2_ifu_ic_mem.scala 102:39]
node _T_244 = and(_T_242, _T_243) @[el2_ifu_ic_mem.scala 102:26]
when _T_244 : @[el2_ifu_ic_mem.scala 102:43]
node _T_245 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 103:25]
infer mport _T_246 = tag_mem[_T_245], clock @[el2_ifu_ic_mem.scala 103:12]
node _T_247 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 103:81]
node _T_248 = bits(_T_247, 0, 0)
_T_246[_T_248] <= ic_tag_wr_data @[el2_ifu_ic_mem.scala 103:125]
skip @[el2_ifu_ic_mem.scala 102:43]
else : @[el2_ifu_ic_mem.scala 104:32]
node _T_249 = bits(ic_tag_clken, 1, 1) @[el2_ifu_ic_mem.scala 104:28]
when _T_249 : @[el2_ifu_ic_mem.scala 104:32]
node _T_250 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 105:49]
infer mport _T_251 = tag_mem[_T_250], clock @[el2_ifu_ic_mem.scala 105:36]
node _T_252 = bits(ic_rw_addr_q, 9, 3) @[el2_ifu_ic_mem.scala 105:105]
node _T_253 = bits(_T_252, 0, 0)
ic_tag_data_raw[1] <= _T_251[_T_253] @[el2_ifu_ic_mem.scala 105:26]
skip @[el2_ifu_ic_mem.scala 104:32]
io.test <= ic_tag_data_raw[0] @[el2_ifu_ic_mem.scala 108:11]

View File

@ -19,33 +19,170 @@ module EL2_IC_TAG(
input io_scan_mode, input io_scan_mode,
output [25:0] io_test output [25:0] io_test
); );
`ifdef RANDOMIZE_MEM_INIT
reg [31:0] _RAND_0;
reg [31:0] _RAND_1;
`endif // RANDOMIZE_MEM_INIT
reg [25:0] tag_mem_0 [0:127]; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_0__T_239_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_0__T_239_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_0__T_251_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_0__T_251_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_0__T_234_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_0__T_234_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_0__T_234_mask; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_0__T_234_en; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_0__T_246_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_0__T_246_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_0__T_246_mask; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_0__T_246_en; // @[el2_ifu_ic_mem.scala 97:20]
reg [25:0] tag_mem_1 [0:127]; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_1__T_239_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_1__T_239_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_1__T_251_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_1__T_251_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_1__T_234_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_1__T_234_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_1__T_234_mask; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_1__T_234_en; // @[el2_ifu_ic_mem.scala 97:20]
wire [25:0] tag_mem_1__T_246_data; // @[el2_ifu_ic_mem.scala 97:20]
wire [6:0] tag_mem_1__T_246_addr; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_1__T_246_mask; // @[el2_ifu_ic_mem.scala 97:20]
wire tag_mem_1__T_246_en; // @[el2_ifu_ic_mem.scala 97:20]
wire _T_1 = io_ic_rw_addr[2:1] == 2'h1; // @[el2_ifu_ic_mem.scala 71:95]
wire [1:0] _T_3 = _T_1 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] ic_tag_wren = io_ic_wr_en & _T_3; // @[el2_ifu_ic_mem.scala 71:33]
wire _T_4 = io_ic_rd_en | io_clk_override; // @[el2_ifu_ic_mem.scala 72:55]
wire [1:0] _T_6 = _T_4 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] _T_7 = _T_6 | io_ic_wr_en; // @[el2_ifu_ic_mem.scala 72:73]
wire _T_14 = io_ic_debug_wr_en & io_ic_debug_tag_array; // @[el2_ifu_ic_mem.scala 80:65] wire _T_14 = io_ic_debug_wr_en & io_ic_debug_tag_array; // @[el2_ifu_ic_mem.scala 80:65]
wire [1:0] _T_16 = _T_14 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] ic_debug_wr_way_en = _T_16 & io_ic_debug_way; // @[el2_ifu_ic_mem.scala 80:90]
wire [1:0] _T_8 = _T_7 | ic_debug_wr_way_en; // @[el2_ifu_ic_mem.scala 72:87]
wire _T_10 = io_ic_debug_rd_en & io_ic_debug_tag_array; // @[el2_ifu_ic_mem.scala 79:65]
wire [1:0] _T_12 = _T_10 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12]
wire [1:0] ic_debug_rd_way_en = _T_12 & io_ic_debug_way; // @[el2_ifu_ic_mem.scala 79:90]
wire [1:0] ic_tag_clken = _T_8 | ic_debug_rd_way_en; // @[el2_ifu_ic_mem.scala 72:108]
wire [1:0] ic_tag_wren_q = ic_tag_wren | ic_debug_wr_way_en; // @[el2_ifu_ic_mem.scala 82:35]
wire [31:0] _T_20 = {13'h0,io_ic_rw_addr[28:10]}; // @[Cat.scala 29:58] wire [31:0] _T_20 = {13'h0,io_ic_rw_addr[28:10]}; // @[Cat.scala 29:58]
wire [8:0] _T_124 = {_T_20[16],_T_20[14],_T_20[12],_T_20[10],_T_20[8],_T_20[6],_T_20[5],_T_20[3],_T_20[1]}; // @[el2_lib.scala 253:22] wire [8:0] _T_124 = {_T_20[16],_T_20[14],_T_20[12],_T_20[10],_T_20[8],_T_20[6],_T_20[5],_T_20[3],_T_20[1]}; // @[el2_lib.scala 254:22]
wire [17:0] _T_133 = {_T_20[31],_T_20[30],_T_20[28],_T_20[27],_T_20[25],_T_20[23],_T_20[21],_T_20[20],_T_20[18],_T_124}; // @[el2_lib.scala 253:22] wire [17:0] _T_133 = {_T_20[31],_T_20[30],_T_20[28],_T_20[27],_T_20[25],_T_20[23],_T_20[21],_T_20[20],_T_20[18],_T_124}; // @[el2_lib.scala 254:22]
wire _T_134 = ^_T_133; // @[el2_lib.scala 253:29] wire _T_134 = ^_T_133; // @[el2_lib.scala 254:29]
wire [8:0] _T_142 = {_T_20[15],_T_20[14],_T_20[11],_T_20[10],_T_20[7],_T_20[6],_T_20[4],_T_20[3],_T_20[0]}; // @[el2_lib.scala 253:39] wire [8:0] _T_142 = {_T_20[15],_T_20[14],_T_20[11],_T_20[10],_T_20[7],_T_20[6],_T_20[4],_T_20[3],_T_20[0]}; // @[el2_lib.scala 254:39]
wire [17:0] _T_151 = {_T_20[31],_T_20[29],_T_20[28],_T_20[26],_T_20[25],_T_20[22],_T_20[21],_T_20[19],_T_20[18],_T_142}; // @[el2_lib.scala 253:39] wire [17:0] _T_151 = {_T_20[31],_T_20[29],_T_20[28],_T_20[26],_T_20[25],_T_20[22],_T_20[21],_T_20[19],_T_20[18],_T_142}; // @[el2_lib.scala 254:39]
wire _T_152 = ^_T_151; // @[el2_lib.scala 253:46] wire _T_152 = ^_T_151; // @[el2_lib.scala 254:46]
wire [8:0] _T_160 = {_T_20[15],_T_20[14],_T_20[9],_T_20[8],_T_20[7],_T_20[6],_T_20[2],_T_20[1],_T_20[0]}; // @[el2_lib.scala 253:56] wire [8:0] _T_160 = {_T_20[15],_T_20[14],_T_20[9],_T_20[8],_T_20[7],_T_20[6],_T_20[2],_T_20[1],_T_20[0]}; // @[el2_lib.scala 254:56]
wire [17:0] _T_169 = {_T_20[30],_T_20[29],_T_20[28],_T_20[24],_T_20[23],_T_20[22],_T_20[21],_T_20[17],_T_20[16],_T_160}; // @[el2_lib.scala 253:56] wire [17:0] _T_169 = {_T_20[30],_T_20[29],_T_20[28],_T_20[24],_T_20[23],_T_20[22],_T_20[21],_T_20[17],_T_20[16],_T_160}; // @[el2_lib.scala 254:56]
wire _T_170 = ^_T_169; // @[el2_lib.scala 253:63] wire _T_170 = ^_T_169; // @[el2_lib.scala 254:63]
wire [6:0] _T_176 = {_T_20[12],_T_20[11],_T_20[10],_T_20[9],_T_20[8],_T_20[7],_T_20[6]}; // @[el2_lib.scala 253:73] wire [6:0] _T_176 = {_T_20[12],_T_20[11],_T_20[10],_T_20[9],_T_20[8],_T_20[7],_T_20[6]}; // @[el2_lib.scala 254:73]
wire [14:0] _T_184 = {_T_20[27],_T_20[26],_T_20[25],_T_20[24],_T_20[23],_T_20[22],_T_20[21],_T_20[13],_T_176}; // @[el2_lib.scala 253:73] wire [14:0] _T_184 = {_T_20[27],_T_20[26],_T_20[25],_T_20[24],_T_20[23],_T_20[22],_T_20[21],_T_20[13],_T_176}; // @[el2_lib.scala 254:73]
wire _T_185 = ^_T_184; // @[el2_lib.scala 253:80] wire _T_185 = ^_T_184; // @[el2_lib.scala 254:80]
wire [14:0] _T_199 = {_T_20[20],_T_20[19],_T_20[18],_T_20[17],_T_20[16],_T_20[15],_T_20[14],_T_20[13],_T_176}; // @[el2_lib.scala 253:90] wire [14:0] _T_199 = {_T_20[20],_T_20[19],_T_20[18],_T_20[17],_T_20[16],_T_20[15],_T_20[14],_T_20[13],_T_176}; // @[el2_lib.scala 254:90]
wire _T_200 = ^_T_199; // @[el2_lib.scala 253:97] wire _T_200 = ^_T_199; // @[el2_lib.scala 254:97]
wire [5:0] _T_205 = {_T_20[5],_T_20[4],_T_20[3],_T_20[2],_T_20[1],_T_20[0]}; // @[el2_lib.scala 253:107] wire [5:0] _T_205 = {_T_20[5],_T_20[4],_T_20[3],_T_20[2],_T_20[1],_T_20[0]}; // @[el2_lib.scala 254:107]
wire _T_206 = ^_T_205; // @[el2_lib.scala 253:114] wire _T_206 = ^_T_205; // @[el2_lib.scala 254:114]
wire [5:0] _T_211 = {_T_134,_T_152,_T_170,_T_185,_T_200,_T_206}; // @[Cat.scala 29:58] wire [5:0] _T_211 = {_T_134,_T_152,_T_170,_T_185,_T_200,_T_206}; // @[Cat.scala 29:58]
wire _T_212 = ^_T_20; // @[el2_lib.scala 254:13] wire _T_212 = ^_T_20; // @[el2_lib.scala 255:13]
wire _T_213 = ^_T_211; // @[el2_lib.scala 254:23] wire _T_213 = ^_T_211; // @[el2_lib.scala 255:23]
wire _T_214 = _T_212 ^ _T_213; // @[el2_lib.scala 254:18] wire _T_214 = _T_212 ^ _T_213; // @[el2_lib.scala 255:18]
wire [6:0] ic_tag_ecc = {_T_214,_T_134,_T_152,_T_170,_T_185,_T_200,_T_206}; // @[Cat.scala 29:58] wire [6:0] ic_tag_ecc = {_T_214,_T_134,_T_152,_T_170,_T_185,_T_200,_T_206}; // @[Cat.scala 29:58]
wire [25:0] _T_221 = {io_ic_debug_wr_data[68:64],io_ic_debug_wr_data[31:11]}; // @[Cat.scala 29:58] wire [25:0] _T_221 = {io_ic_debug_wr_data[68:64],io_ic_debug_wr_data[31:11]}; // @[Cat.scala 29:58]
wire [6:0] _T_224 = {ic_tag_ecc[4:0],2'h0}; // @[Cat.scala 29:58] wire [25:0] _T_226 = {ic_tag_ecc[4:0],2'h0,io_ic_rw_addr[28:10]}; // @[Cat.scala 29:58]
wire _T_227 = io_ic_debug_rd_en | io_ic_debug_wr_en; // @[el2_ifu_ic_mem.scala 93:45]
wire [28:0] ic_rw_addr_q = _T_227 ? {{22'd0}, io_ic_debug_addr[9:3]} : io_ic_rw_addr; // @[el2_ifu_ic_mem.scala 93:25]
wire _T_232 = ic_tag_wren_q[0] & ic_tag_clken[0]; // @[el2_ifu_ic_mem.scala 102:26]
wire [25:0] _GEN_4 = tag_mem_0__T_239_data; // @[el2_ifu_ic_mem.scala 105:26]
wire [25:0] _GEN_5 = ic_rw_addr_q[3] ? tag_mem_1__T_239_data : _GEN_4; // @[el2_ifu_ic_mem.scala 105:26]
wire [25:0] _GEN_9 = ic_tag_clken[0] ? _GEN_5 : 26'h0; // @[el2_ifu_ic_mem.scala 104:32]
wire _T_244 = ic_tag_wren_q[1] & ic_tag_clken[1]; // @[el2_ifu_ic_mem.scala 102:26]
assign tag_mem_0__T_239_addr = ic_rw_addr_q[9:3];
assign tag_mem_0__T_239_data = tag_mem_0[tag_mem_0__T_239_addr]; // @[el2_ifu_ic_mem.scala 97:20]
assign tag_mem_0__T_251_addr = ic_rw_addr_q[9:3];
assign tag_mem_0__T_251_data = tag_mem_0[tag_mem_0__T_251_addr]; // @[el2_ifu_ic_mem.scala 97:20]
assign tag_mem_0__T_234_data = _T_14 ? _T_221 : _T_226;
assign tag_mem_0__T_234_addr = ic_rw_addr_q[9:3];
assign tag_mem_0__T_234_mask = ~ic_rw_addr_q[3];
assign tag_mem_0__T_234_en = ic_tag_wren_q[0] & ic_tag_clken[0];
assign tag_mem_0__T_246_data = _T_14 ? _T_221 : _T_226;
assign tag_mem_0__T_246_addr = ic_rw_addr_q[9:3];
assign tag_mem_0__T_246_mask = ~ic_rw_addr_q[3];
assign tag_mem_0__T_246_en = ic_tag_wren_q[1] & ic_tag_clken[1];
assign tag_mem_1__T_239_addr = ic_rw_addr_q[9:3];
assign tag_mem_1__T_239_data = tag_mem_1[tag_mem_1__T_239_addr]; // @[el2_ifu_ic_mem.scala 97:20]
assign tag_mem_1__T_251_addr = ic_rw_addr_q[9:3];
assign tag_mem_1__T_251_data = tag_mem_1[tag_mem_1__T_251_addr]; // @[el2_ifu_ic_mem.scala 97:20]
assign tag_mem_1__T_234_data = _T_14 ? _T_221 : _T_226;
assign tag_mem_1__T_234_addr = ic_rw_addr_q[9:3];
assign tag_mem_1__T_234_mask = ic_rw_addr_q[3];
assign tag_mem_1__T_234_en = ic_tag_wren_q[0] & ic_tag_clken[0];
assign tag_mem_1__T_246_data = _T_14 ? _T_221 : _T_226;
assign tag_mem_1__T_246_addr = ic_rw_addr_q[9:3];
assign tag_mem_1__T_246_mask = ic_rw_addr_q[3];
assign tag_mem_1__T_246_en = ic_tag_wren_q[1] & ic_tag_clken[1];
assign io_ictag_debug_rd_data = 26'h0; // @[el2_ifu_ic_mem.scala 64:26] assign io_ictag_debug_rd_data = 26'h0; // @[el2_ifu_ic_mem.scala 64:26]
assign io_ic_rd_hit = 2'h0; // @[el2_ifu_ic_mem.scala 65:16] assign io_ic_rd_hit = 2'h0; // @[el2_ifu_ic_mem.scala 65:16]
assign io_ic_tag_perr = 1'h0; // @[el2_ifu_ic_mem.scala 66:18] assign io_ic_tag_perr = 1'h0; // @[el2_ifu_ic_mem.scala 66:18]
assign io_test = _T_14 ? _T_221 : {{19'd0}, _T_224}; // @[el2_ifu_ic_mem.scala 93:11] assign io_test = _T_232 ? 26'h0 : _GEN_9; // @[el2_ifu_ic_mem.scala 108:11]
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
`ifdef FIRRTL_BEFORE_INITIAL
`FIRRTL_BEFORE_INITIAL
`endif
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
`ifdef RANDOMIZE_MEM_INIT
_RAND_0 = {1{`RANDOM}};
for (initvar = 0; initvar < 128; initvar = initvar+1)
tag_mem_0[initvar] = _RAND_0[25:0];
_RAND_1 = {1{`RANDOM}};
for (initvar = 0; initvar < 128; initvar = initvar+1)
tag_mem_1[initvar] = _RAND_1[25:0];
`endif // RANDOMIZE_MEM_INIT
`endif // RANDOMIZE
end // initial
`ifdef FIRRTL_AFTER_INITIAL
`FIRRTL_AFTER_INITIAL
`endif
`endif // SYNTHESIS
always @(posedge clock) begin
if(tag_mem_0__T_234_en & tag_mem_0__T_234_mask) begin
tag_mem_0[tag_mem_0__T_234_addr] <= tag_mem_0__T_234_data; // @[el2_ifu_ic_mem.scala 97:20]
end
if(tag_mem_0__T_246_en & tag_mem_0__T_246_mask) begin
tag_mem_0[tag_mem_0__T_246_addr] <= tag_mem_0__T_246_data; // @[el2_ifu_ic_mem.scala 97:20]
end
if(tag_mem_1__T_234_en & tag_mem_1__T_234_mask) begin
tag_mem_1[tag_mem_1__T_234_addr] <= tag_mem_1__T_234_data; // @[el2_ifu_ic_mem.scala 97:20]
end
if(tag_mem_1__T_246_en & tag_mem_1__T_246_mask) begin
tag_mem_1[tag_mem_1__T_246_addr] <= tag_mem_1__T_246_data; // @[el2_ifu_ic_mem.scala 97:20]
end
end
endmodule endmodule

View File

@ -1,4 +1,11 @@
[ [
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_test_hash_p1",
"sources":[
"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifc_fetch_addr_f"
]
},
{ {
"class":"firrtl.transforms.CombinationalPath", "class":"firrtl.transforms.CombinationalPath",
"sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_btb_target_f", "sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifu_bp_btb_target_f",
@ -130,6 +137,13 @@
"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_exu_i0_br_index_r" "~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_exu_i0_br_index_r"
] ]
}, },
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_test_hash",
"sources":[
"~el2_ifu_bp_ctl|el2_ifu_bp_ctl>io_ifc_fetch_addr_f"
]
},
{ {
"class":"firrtl.EmitCircuitAnnotation", "class":"firrtl.EmitCircuitAnnotation",
"emitter":"firrtl.VerilogEmitter" "emitter":"firrtl.VerilogEmitter"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,9 +6,7 @@ import chisel3.util._
class el2_ifu_bp_ctl extends Module with el2_lib { class el2_ifu_bp_ctl extends Module with el2_lib {
val io = IO (new Bundle { val io = IO (new Bundle {
// val clk = Input(Bool()) val active_clk = Input(Clock())
// val active_clk = Input(Bool())
// val rst_l = Input(Bool())
val ic_hit_f = Input(Bool()) val ic_hit_f = Input(Bool())
val ifc_fetch_addr_f = Input(UInt(31.W)) val ifc_fetch_addr_f = Input(UInt(31.W))
val ifc_fetch_req_f = Input(Bool()) // Fetch request generated by the IFC val ifc_fetch_req_f = Input(Bool()) // Fetch request generated by the IFC
@ -38,6 +36,9 @@ class el2_ifu_bp_ctl extends Module with el2_lib {
val ifu_bp_pc4_f = Output(UInt(2.W)) val ifu_bp_pc4_f = Output(UInt(2.W))
val ifu_bp_valid_f = Output(UInt(2.W)) val ifu_bp_valid_f = Output(UInt(2.W))
val ifu_bp_poffset_f = Output(UInt(12.W)) val ifu_bp_poffset_f = Output(UInt(12.W))
val test_hash = Output(UInt())
val test_hash_p1 = Output(UInt())
}) })
val TAG_START = 16+BTB_BTAG_SIZE val TAG_START = 16+BTB_BTAG_SIZE
@ -46,6 +47,7 @@ class el2_ifu_bp_ctl extends Module with el2_lib {
val CALL = 2 val CALL = 2
val RET = 1 val RET = 1
val BV = 0 val BV = 0
val LRU_SIZE = BTB_ARRAY_DEPTH val LRU_SIZE = BTB_ARRAY_DEPTH
val NUM_BHT_LOOP = if(BHT_ARRAY_DEPTH > 16) 16 else BHT_ARRAY_DEPTH val NUM_BHT_LOOP = if(BHT_ARRAY_DEPTH > 16) 16 else BHT_ARRAY_DEPTH
val NUM_BHT_LOOP_INNER_HI = if(BHT_ARRAY_DEPTH > 16) BHT_ADDR_LO+3 else BHT_ADDR_HI val NUM_BHT_LOOP_INNER_HI = if(BHT_ARRAY_DEPTH > 16) BHT_ADDR_LO+3 else BHT_ADDR_HI
@ -89,11 +91,12 @@ class el2_ifu_bp_ctl extends Module with el2_lib {
// Hash the first PC // Hash the first PC
val btb_rd_addr_f = el2_btb_addr_hash(io.ifc_fetch_addr_f) val btb_rd_addr_f = el2_btb_addr_hash(io.ifc_fetch_addr_f)
io.test_hash := btb_rd_addr_f
// Second pc = pc +4 // Second pc = pc +4
val fetch_addr_p1_f = io.ifc_fetch_addr_f + 4.U val fetch_addr_p1_f = io.ifc_fetch_addr_f + 2.U
// Hash the second pc // Hash the second pc
val btb_rd_addr_p1_f = el2_btb_addr_hash(fetch_addr_p1_f) val btb_rd_addr_p1_f = el2_btb_addr_hash(fetch_addr_p1_f)
io.test_hash_p1 := btb_rd_addr_p1_f
// TODO // TODO
val btb_sel_f = Cat(~bht_dir_f(0),bht_dir_f(0)) val btb_sel_f = Cat(~bht_dir_f(0),bht_dir_f(0))

View File

@ -85,12 +85,41 @@ class EL2_IC_TAG extends Module with el2_lib with param {
val ic_tag_parity = if(ICACHE_ECC) rveven_paritygen(Cat(Fill(ICACHE_TAG_LO,0.U),io.ic_rw_addr(31-3, ICACHE_TAG_LO-3))) else 0.U val ic_tag_parity = if(ICACHE_ECC) rveven_paritygen(Cat(Fill(ICACHE_TAG_LO,0.U),io.ic_rw_addr(31-3, ICACHE_TAG_LO-3))) else 0.U
val ic_tag_wr_data = if(ICACHE_TAG_LO==11) Mux(io.ic_debug_wr_en & io.ic_debug_tag_array, Cat(if(ICACHE_ECC) io.ic_debug_wr_data(68,64) else io.ic_debug_wr_data(64), io.ic_debug_wr_data(31,11)), val ic_tag_wr_data = if(ICACHE_TAG_LO==1)Mux(io.ic_debug_wr_en & io.ic_debug_tag_array, Cat(if(ICACHE_ECC) io.ic_debug_wr_data(68,64) else io.ic_debug_wr_data(64), io.ic_debug_wr_data(31,11)),
Cat(if(ICACHE_ECC) ic_tag_ecc(4,0) else ic_tag_parity, io.ic_rw_addr(31-3,ICACHE_TAG_LO-3))) Cat(if(ICACHE_ECC) ic_tag_ecc(4,0) else ic_tag_parity, io.ic_rw_addr(31-3,ICACHE_TAG_LO-3)))
else Mux(io.ic_debug_wr_en & io.ic_debug_tag_array, Cat(if(ICACHE_ECC) io.ic_debug_wr_data(68,64) else io.ic_debug_wr_data(64), io.ic_debug_wr_data(31,11)), else Mux(io.ic_debug_wr_en & io.ic_debug_tag_array, Cat(if(ICACHE_ECC) io.ic_debug_wr_data(68,64) else io.ic_debug_wr_data(64), io.ic_debug_wr_data(31,11)),
Cat(if(ICACHE_ECC) Cat(ic_tag_ecc(4,0), Fill(PAD_BITS,0.U)) else Cat(ic_tag_parity,Fill(PAD_BITS,0.U), io.ic_rw_addr(31-3,ICACHE_TAG_LO-3)))) Cat(if(ICACHE_ECC) Cat(ic_tag_ecc(4,0),Fill(PAD_BITS,0.U)) else Cat(ic_tag_parity,Fill(PAD_BITS,0.U)), io.ic_rw_addr(31-3,ICACHE_TAG_LO-3)))
io.test := ic_tag_wr_data val ic_rw_addr_q = Mux((io.ic_debug_rd_en | io.ic_debug_wr_en).asBool,io.ic_debug_addr(ICACHE_INDEX_HI-3,ICACHE_TAG_INDEX_LO-3),io.ic_rw_addr)
val ic_debug_rd_way_en_ff = RegNext(ic_debug_rd_way_en, 0.U)
val tag_mem = Mem(ICACHE_TAG_DEPTH, Vec(ICACHE_NUM_WAYS, UInt(Tag_Word.W)))
val ic_tag_data_raw = Wire(Vec(ICACHE_NUM_WAYS, UInt(Tag_Word.W)))
for(i<-0 until ICACHE_NUM_WAYS){
ic_tag_data_raw(i) := 0.U
when(ic_tag_wren_q(i)&ic_tag_clken(i)){
tag_mem(ic_rw_addr_q(ICACHE_INDEX_HI-3, ICACHE_TAG_INDEX_LO-3))(ic_rw_addr_q(ICACHE_INDEX_HI-3, ICACHE_TAG_INDEX_LO-3)) := ic_tag_wr_data
}.elsewhen(ic_tag_clken(i)){
ic_tag_data_raw(i) := tag_mem(ic_rw_addr_q(ICACHE_INDEX_HI-3, ICACHE_TAG_INDEX_LO-3))(ic_rw_addr_q(ICACHE_INDEX_HI-3, ICACHE_TAG_INDEX_LO-3))
}
}
io.test := ic_tag_data_raw(0)
// for(i<-0 until ICACHE_NUM_WAYS; k<-0 until ICACHE_BANKS_WAY){
// wb_dout(i)(k) := 0.U
// val WE = if(ICACHE_WAYPACK) ic_b_sb_wren(k).orR else ic_b_sb_wren(k)(i)
// val ME = if(ICACHE_WAYPACK) ic_bank_way_clken(k).orR else ic_bank_way_clken(k)(i)
// when((ic_b_sb_wren(k)(i) & ic_bank_way_clken(k)(i)).asBool){
// data_mem(ic_rw_addr_bank_q(k))(k)(i) := ic_sb_wr_data(k)
// }.elsewhen((!ic_b_sb_wren(k)(i)&ic_bank_way_clken(k)(i)).asBool){
// wb_dout(i)(k) := data_mem(ic_rw_addr_bank_q(k))(k)(i)
// }
// }
// io.test := ic_tag_wr_data
// println(Tag_Word)
@ -261,7 +290,7 @@ class EL2_IC_DATA extends Module with el2_lib {
val ic_cacheline_wrap_ff = ic_rw_addr_ff(ICACHE_TAG_INDEX_LO-2,ICACHE_BANK_LO-1) === Fill(ICACHE_TAG_INDEX_LO-ICACHE_BANK_LO, 1.U) val ic_cacheline_wrap_ff = ic_rw_addr_ff(ICACHE_TAG_INDEX_LO-2,ICACHE_BANK_LO-1) === Fill(ICACHE_TAG_INDEX_LO-ICACHE_BANK_LO, 1.U)
//////////////////////////////////////////// Memory stated //////////////////////////////////////////// Memory stated
val (data_mem_word, tag_mem_word, ecc_offset) = DATA_MEM_LINE val (data_mem_word, tag_mem_word, ecc_offset, tag_word) = DATA_MEM_LINE
val wb_dout = Wire(Vec(ICACHE_BANKS_WAY,Vec(ICACHE_NUM_WAYS, UInt(data_mem_word.W)))) val wb_dout = Wire(Vec(ICACHE_BANKS_WAY,Vec(ICACHE_NUM_WAYS, UInt(data_mem_word.W))))
val data_mem = Mem(ICACHE_DATA_DEPTH, Vec(ICACHE_BANKS_WAY,Vec(ICACHE_NUM_WAYS, UInt(data_mem_word.W)))) val data_mem = Mem(ICACHE_DATA_DEPTH, Vec(ICACHE_BANKS_WAY,Vec(ICACHE_NUM_WAYS, UInt(data_mem_word.W))))
for(i<-0 until ICACHE_NUM_WAYS; k<-0 until ICACHE_BANKS_WAY){ for(i<-0 until ICACHE_NUM_WAYS; k<-0 until ICACHE_BANKS_WAY){
@ -305,4 +334,5 @@ class EL2_IC_DATA extends Module with el2_lib {
object ifu_ic extends App { object ifu_ic extends App {
println((new chisel3.stage.ChiselStage).emitVerilog(new EL2_IC_TAG())) println((new chisel3.stage.ChiselStage).emitVerilog(new EL2_IC_TAG()))
//println()
} }

View File

@ -159,14 +159,15 @@ trait param {
trait el2_lib extends param{ trait el2_lib extends param{
// Configuration Methods // Configuration Methods
def MEM_CAL : (Int, Int, Int)= def MEM_CAL : (Int, Int, Int, Int)=
(ICACHE_WAYPACK, ICACHE_ECC) match{ (ICACHE_WAYPACK, ICACHE_ECC) match{
case(false,false) => (68,22, 68) case(false,false) => (68, 22, 68, 22)
case(false,true) => (71,26, 71) case(false,true) => (71, 26, 71, 26)
case(true,false) => (68*ICACHE_NUM_WAYS,22*ICACHE_NUM_WAYS, 68) case(true,false) => (68*ICACHE_NUM_WAYS, 22*ICACHE_NUM_WAYS, 68, 22)
case(true,true) => (71*ICACHE_NUM_WAYS,26*ICACHE_NUM_WAYS, 71) case(true,true) => (71*ICACHE_NUM_WAYS, 26*ICACHE_NUM_WAYS, 71, 26)
} }
val DATA_MEM_LINE = MEM_CAL val DATA_MEM_LINE = MEM_CAL
val Tag_Word = MEM_CAL._4
def el2_btb_tag_hash(pc : UInt) = def el2_btb_tag_hash(pc : UInt) =
VecInit.tabulate(3)(i => pc(BTB_ADDR_HI+((i+1)*(BTB_BTAG_SIZE)),BTB_ADDR_HI+(i*BTB_BTAG_SIZE)+1)).reduce(_^_) VecInit.tabulate(3)(i => pc(BTB_ADDR_HI+((i+1)*(BTB_BTAG_SIZE)),BTB_ADDR_HI+(i*BTB_BTAG_SIZE)+1)).reduce(_^_)
@ -175,8 +176,8 @@ trait el2_lib extends param{
pc(BTB_ADDR_HI+(2*BTB_BTAG_SIZE),BTB_ADDR_HI+BTB_BTAG_SIZE+1)^pc(BTB_ADDR_HI+BTB_BTAG_SIZE,BTB_ADDR_HI+1) pc(BTB_ADDR_HI+(2*BTB_BTAG_SIZE),BTB_ADDR_HI+BTB_BTAG_SIZE+1)^pc(BTB_ADDR_HI+BTB_BTAG_SIZE,BTB_ADDR_HI+1)
def el2_btb_addr_hash(pc : UInt) = def el2_btb_addr_hash(pc : UInt) =
if(BTB_FOLD2_INDEX_HASH) pc(BTB_INDEX1_HI,BTB_INDEX1_LO) ^ pc(BTB_INDEX3_HI,BTB_INDEX3_LO) if(BTB_FOLD2_INDEX_HASH) pc(BTB_INDEX1_HI-1,BTB_INDEX1_LO-1) ^ pc(BTB_INDEX3_HI-1,BTB_INDEX3_LO-1)
else pc(BTB_INDEX1_HI,BTB_INDEX1_LO) ^ pc(BTB_INDEX2_HI,BTB_INDEX2_LO) ^ pc(BTB_INDEX3_HI,BTB_INDEX3_LO) else pc(BTB_INDEX1_HI-1,BTB_INDEX1_LO-1) ^ pc(BTB_INDEX2_HI-1,BTB_INDEX2_LO-1) ^ pc(BTB_INDEX3_HI-1,BTB_INDEX3_LO-1)
def el2_btb_ghr_hash(hashin : UInt, ghr :UInt) = def el2_btb_ghr_hash(hashin : UInt, ghr :UInt) =
if(BHT_GHR_HASH_1) Cat(ghr(BHT_GHR_SIZE-1,BTB_INDEX1_HI-1), hashin(BTB_INDEX1_HI,2) ^ ghr(BTB_INDEX1_HI-2,0)) if(BHT_GHR_HASH_1) Cat(ghr(BHT_GHR_SIZE-1,BTB_INDEX1_HI-1), hashin(BTB_INDEX1_HI,2) ^ ghr(BTB_INDEX1_HI-2,0))