From c1491ee7dd44d9d02b7d02eb0be32c1d0adadc65 Mon Sep 17 00:00:00 2001 From: waleed-lm Date: Tue, 6 Oct 2020 19:30:06 +0500 Subject: [PATCH] ICCM Done --- el2_ifu_iccm_mem.anno.json | 36 ++ el2_ifu_iccm_mem.fir | 597 ++++++++++++++++++ el2_ifu_iccm_mem.v | 575 +++++++++++++++++ src/main/scala/ifu/el2_ifu_ic_mem.scala | 4 + src/main/scala/ifu/el2_ifu_iccm_mem.scala | 101 +++ src/main/scala/lib/el2_lib.scala | 1 + .../classes/ifu/EL2_IC_DATA$$anon$3.class | Bin 4700 -> 4700 bytes .../scala-2.12/classes/ifu/EL2_IC_DATA.class | Bin 88250 -> 88250 bytes .../scala-2.12/classes/ifu/EL2_IC_TAG.class | Bin 82759 -> 82759 bytes .../ifu/el2_ifu_iccm_mem$$anon$1.class | Bin 0 -> 3110 bytes .../classes/ifu/el2_ifu_iccm_mem.class | Bin 0 -> 91212 bytes target/scala-2.12/classes/ifu/ifu_ic$.class | Bin 3860 -> 3860 bytes .../classes/ifu/ifu_ic$delayedInit$body.class | Bin 729 -> 729 bytes target/scala-2.12/classes/ifu/ifu_iccm$.class | Bin 0 -> 3883 bytes .../ifu/ifu_iccm$delayedInit$body.class | Bin 0 -> 743 bytes target/scala-2.12/classes/ifu/ifu_iccm.class | Bin 0 -> 786 bytes target/scala-2.12/classes/lib/el2_lib.class | Bin 43083 -> 43083 bytes 17 files changed, 1314 insertions(+) create mode 100644 el2_ifu_iccm_mem.anno.json create mode 100644 el2_ifu_iccm_mem.fir create mode 100644 el2_ifu_iccm_mem.v create mode 100644 src/main/scala/ifu/el2_ifu_iccm_mem.scala create mode 100644 target/scala-2.12/classes/ifu/el2_ifu_iccm_mem$$anon$1.class create mode 100644 target/scala-2.12/classes/ifu/el2_ifu_iccm_mem.class create mode 100644 target/scala-2.12/classes/ifu/ifu_iccm$.class create mode 100644 target/scala-2.12/classes/ifu/ifu_iccm$delayedInit$body.class create mode 100644 target/scala-2.12/classes/ifu/ifu_iccm.class diff --git a/el2_ifu_iccm_mem.anno.json b/el2_ifu_iccm_mem.anno.json new file mode 100644 index 00000000..cb681bfe --- /dev/null +++ b/el2_ifu_iccm_mem.anno.json @@ -0,0 +1,36 @@ +[ + { + "class":"firrtl.transforms.CombinationalPath", + "sink":"~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_rd_data", + "sources":[ + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_rw_addr", + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_wren", + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_wr_size" + ] + }, + { + "class":"firrtl.transforms.CombinationalPath", + "sink":"~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_rd_data_ecc", + "sources":[ + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_rw_addr", + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_wren", + "~el2_ifu_iccm_mem|el2_ifu_iccm_mem>io_iccm_wr_size" + ] + }, + { + "class":"firrtl.EmitCircuitAnnotation", + "emitter":"firrtl.VerilogEmitter" + }, + { + "class":"firrtl.options.TargetDirAnnotation", + "directory":"." + }, + { + "class":"firrtl.options.OutputAnnotationFileAnnotation", + "file":"el2_ifu_iccm_mem" + }, + { + "class":"firrtl.transforms.BlackBoxTargetDirAnno", + "targetDir":"." + } +] \ No newline at end of file diff --git a/el2_ifu_iccm_mem.fir b/el2_ifu_iccm_mem.fir new file mode 100644 index 00000000..d82190b8 --- /dev/null +++ b/el2_ifu_iccm_mem.fir @@ -0,0 +1,597 @@ +;buildInfoPackage: chisel3, version: 3.3.1, scalaVersion: 2.12.11, sbtVersion: 1.3.10 +circuit el2_ifu_iccm_mem : + module el2_ifu_iccm_mem : + input clock : Clock + input reset : UInt<1> + output io : {flip clk_override : UInt<1>, flip iccm_wren : UInt<1>, flip iccm_rden : UInt<1>, flip iccm_rw_addr : UInt<15>, flip iccm_buf_correct_ecc : UInt<1>, flip iccm_correction_state : UInt<1>, flip iccm_wr_size : UInt<3>, flip iccm_wr_data : UInt<78>, iccm_rd_data : UInt<64>, iccm_rd_data_ecc : UInt<78>, flip scan_mode : UInt<1>} + + io.iccm_rd_data <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 22:19] + io.iccm_rd_data_ecc <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 23:23] + node _T = bits(io.iccm_wr_size, 1, 0) @[el2_ifu_iccm_mem.scala 24:38] + node _T_1 = eq(_T, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 24:43] + node _T_2 = bits(_T_1, 0, 0) @[el2_ifu_iccm_mem.scala 24:51] + node addr_inc = mux(_T_2, UInt<2>("h02"), UInt<2>("h01")) @[el2_ifu_iccm_mem.scala 24:21] + node _T_3 = bits(io.iccm_rw_addr, 14, 0) @[el2_ifu_iccm_mem.scala 25:38] + node _T_4 = add(_T_3, addr_inc) @[el2_ifu_iccm_mem.scala 25:54] + node addr_bank_inc = tail(_T_4, 1) @[el2_ifu_iccm_mem.scala 25:54] + wire iccm_bank_wr_data : UInt<39>[4] @[el2_ifu_iccm_mem.scala 27:35] + node _T_5 = bits(io.iccm_wr_data, 38, 0) @[el2_ifu_iccm_mem.scala 29:50] + iccm_bank_wr_data[0] <= _T_5 @[el2_ifu_iccm_mem.scala 29:32] + node _T_6 = bits(io.iccm_wr_data, 77, 39) @[el2_ifu_iccm_mem.scala 30:54] + iccm_bank_wr_data[1] <= _T_6 @[el2_ifu_iccm_mem.scala 30:36] + node _T_7 = bits(io.iccm_wr_data, 38, 0) @[el2_ifu_iccm_mem.scala 29:50] + iccm_bank_wr_data[2] <= _T_7 @[el2_ifu_iccm_mem.scala 29:32] + node _T_8 = bits(io.iccm_wr_data, 77, 39) @[el2_ifu_iccm_mem.scala 30:54] + iccm_bank_wr_data[3] <= _T_8 @[el2_ifu_iccm_mem.scala 30:36] + node _T_9 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 33:81] + node _T_10 = eq(_T_9, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 33:99] + node _T_11 = and(io.iccm_wren, _T_10) @[el2_ifu_iccm_mem.scala 33:64] + node _T_12 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 33:121] + node _T_13 = eq(_T_12, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 33:139] + node wren_bank_0 = or(_T_11, _T_13) @[el2_ifu_iccm_mem.scala 33:106] + node _T_14 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 33:81] + node _T_15 = eq(_T_14, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 33:99] + node _T_16 = and(io.iccm_wren, _T_15) @[el2_ifu_iccm_mem.scala 33:64] + node _T_17 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 33:121] + node _T_18 = eq(_T_17, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 33:139] + node wren_bank_1 = or(_T_16, _T_18) @[el2_ifu_iccm_mem.scala 33:106] + node _T_19 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 33:81] + node _T_20 = eq(_T_19, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 33:99] + node _T_21 = and(io.iccm_wren, _T_20) @[el2_ifu_iccm_mem.scala 33:64] + node _T_22 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 33:121] + node _T_23 = eq(_T_22, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 33:139] + node wren_bank_2 = or(_T_21, _T_23) @[el2_ifu_iccm_mem.scala 33:106] + node _T_24 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 33:81] + node _T_25 = eq(_T_24, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 33:99] + node _T_26 = and(io.iccm_wren, _T_25) @[el2_ifu_iccm_mem.scala 33:64] + node _T_27 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 33:121] + node _T_28 = eq(_T_27, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 33:139] + node wren_bank_3 = or(_T_26, _T_28) @[el2_ifu_iccm_mem.scala 33:106] + node _T_29 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 35:81] + node _T_30 = eq(_T_29, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 35:99] + node _T_31 = and(io.iccm_rden, _T_30) @[el2_ifu_iccm_mem.scala 35:64] + node _T_32 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 35:121] + node _T_33 = eq(_T_32, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 35:139] + node rden_bank_0 = or(_T_31, _T_33) @[el2_ifu_iccm_mem.scala 35:106] + node _T_34 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 35:81] + node _T_35 = eq(_T_34, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 35:99] + node _T_36 = and(io.iccm_rden, _T_35) @[el2_ifu_iccm_mem.scala 35:64] + node _T_37 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 35:121] + node _T_38 = eq(_T_37, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 35:139] + node rden_bank_1 = or(_T_36, _T_38) @[el2_ifu_iccm_mem.scala 35:106] + node _T_39 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 35:81] + node _T_40 = eq(_T_39, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 35:99] + node _T_41 = and(io.iccm_rden, _T_40) @[el2_ifu_iccm_mem.scala 35:64] + node _T_42 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 35:121] + node _T_43 = eq(_T_42, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 35:139] + node rden_bank_2 = or(_T_41, _T_43) @[el2_ifu_iccm_mem.scala 35:106] + node _T_44 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 35:81] + node _T_45 = eq(_T_44, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 35:99] + node _T_46 = and(io.iccm_rden, _T_45) @[el2_ifu_iccm_mem.scala 35:64] + node _T_47 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 35:121] + node _T_48 = eq(_T_47, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 35:139] + node rden_bank_3 = or(_T_46, _T_48) @[el2_ifu_iccm_mem.scala 35:106] + node _T_49 = or(wren_bank_0, rden_bank_0) @[el2_ifu_iccm_mem.scala 36:72] + node iccm_clken_0 = or(_T_49, io.clk_override) @[el2_ifu_iccm_mem.scala 36:87] + node _T_50 = or(wren_bank_1, rden_bank_1) @[el2_ifu_iccm_mem.scala 36:72] + node iccm_clken_1 = or(_T_50, io.clk_override) @[el2_ifu_iccm_mem.scala 36:87] + node _T_51 = or(wren_bank_2, rden_bank_2) @[el2_ifu_iccm_mem.scala 36:72] + node iccm_clken_2 = or(_T_51, io.clk_override) @[el2_ifu_iccm_mem.scala 36:87] + node _T_52 = or(wren_bank_3, rden_bank_3) @[el2_ifu_iccm_mem.scala 36:72] + node iccm_clken_3 = or(_T_52, io.clk_override) @[el2_ifu_iccm_mem.scala 36:87] + node _T_53 = bits(wren_bank_0, 0, 0) @[el2_ifu_iccm_mem.scala 37:69] + node _T_54 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 37:92] + node _T_55 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 38:23] + node _T_56 = eq(_T_55, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 38:41] + node _T_57 = bits(addr_bank_inc, 14, 3) @[el2_ifu_iccm_mem.scala 38:62] + node _T_58 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 38:112] + node _T_59 = mux(_T_56, _T_57, _T_58) @[el2_ifu_iccm_mem.scala 38:8] + node addr_bank_0 = mux(_T_53, _T_54, _T_59) @[el2_ifu_iccm_mem.scala 37:55] + node _T_60 = bits(wren_bank_1, 0, 0) @[el2_ifu_iccm_mem.scala 37:69] + node _T_61 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 37:92] + node _T_62 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 38:23] + node _T_63 = eq(_T_62, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 38:41] + node _T_64 = bits(addr_bank_inc, 14, 3) @[el2_ifu_iccm_mem.scala 38:62] + node _T_65 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 38:112] + node _T_66 = mux(_T_63, _T_64, _T_65) @[el2_ifu_iccm_mem.scala 38:8] + node addr_bank_1 = mux(_T_60, _T_61, _T_66) @[el2_ifu_iccm_mem.scala 37:55] + node _T_67 = bits(wren_bank_2, 0, 0) @[el2_ifu_iccm_mem.scala 37:69] + node _T_68 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 37:92] + node _T_69 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 38:23] + node _T_70 = eq(_T_69, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 38:41] + node _T_71 = bits(addr_bank_inc, 14, 3) @[el2_ifu_iccm_mem.scala 38:62] + node _T_72 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 38:112] + node _T_73 = mux(_T_70, _T_71, _T_72) @[el2_ifu_iccm_mem.scala 38:8] + node addr_bank_2 = mux(_T_67, _T_68, _T_73) @[el2_ifu_iccm_mem.scala 37:55] + node _T_74 = bits(wren_bank_3, 0, 0) @[el2_ifu_iccm_mem.scala 37:69] + node _T_75 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 37:92] + node _T_76 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 38:23] + node _T_77 = eq(_T_76, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 38:41] + node _T_78 = bits(addr_bank_inc, 14, 3) @[el2_ifu_iccm_mem.scala 38:62] + node _T_79 = bits(io.iccm_rw_addr, 14, 3) @[el2_ifu_iccm_mem.scala 38:112] + node _T_80 = mux(_T_77, _T_78, _T_79) @[el2_ifu_iccm_mem.scala 38:8] + node addr_bank_3 = mux(_T_74, _T_75, _T_80) @[el2_ifu_iccm_mem.scala 37:55] + cmem iccm_mem : UInt<39>[4][4096] @[el2_ifu_iccm_mem.scala 40:21] + node _T_81 = and(iccm_clken_0, wren_bank_0) @[el2_ifu_iccm_mem.scala 42:68] + node _T_82 = and(iccm_clken_1, wren_bank_1) @[el2_ifu_iccm_mem.scala 42:68] + node _T_83 = and(iccm_clken_2, wren_bank_2) @[el2_ifu_iccm_mem.scala 42:68] + node _T_84 = and(iccm_clken_3, wren_bank_3) @[el2_ifu_iccm_mem.scala 42:68] + wire write_vec : UInt<1>[4] @[el2_ifu_iccm_mem.scala 42:51] + write_vec[0] <= _T_81 @[el2_ifu_iccm_mem.scala 42:51] + write_vec[1] <= _T_82 @[el2_ifu_iccm_mem.scala 42:51] + write_vec[2] <= _T_83 @[el2_ifu_iccm_mem.scala 42:51] + write_vec[3] <= _T_84 @[el2_ifu_iccm_mem.scala 42:51] + node _T_85 = eq(wren_bank_0, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 43:72] + node _T_86 = and(iccm_clken_0, _T_85) @[el2_ifu_iccm_mem.scala 43:70] + node _T_87 = eq(wren_bank_1, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 43:72] + node _T_88 = and(iccm_clken_1, _T_87) @[el2_ifu_iccm_mem.scala 43:70] + node _T_89 = eq(wren_bank_2, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 43:72] + node _T_90 = and(iccm_clken_2, _T_89) @[el2_ifu_iccm_mem.scala 43:70] + node _T_91 = eq(wren_bank_3, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 43:72] + node _T_92 = and(iccm_clken_3, _T_91) @[el2_ifu_iccm_mem.scala 43:70] + wire read_enable : UInt<1>[4] @[el2_ifu_iccm_mem.scala 43:53] + read_enable[0] <= _T_86 @[el2_ifu_iccm_mem.scala 43:53] + read_enable[1] <= _T_88 @[el2_ifu_iccm_mem.scala 43:53] + read_enable[2] <= _T_90 @[el2_ifu_iccm_mem.scala 43:53] + read_enable[3] <= _T_92 @[el2_ifu_iccm_mem.scala 43:53] + wire iccm_bank_dout : UInt<39>[4] @[el2_ifu_iccm_mem.scala 45:28] + write mport _T_93 = iccm_mem[addr_bank_0], clock + when write_vec[0] : + _T_93[0] <= iccm_bank_wr_data[0] + skip + when write_vec[1] : + _T_93[1] <= iccm_bank_wr_data[1] + skip + when write_vec[2] : + _T_93[2] <= iccm_bank_wr_data[2] + skip + when write_vec[3] : + _T_93[3] <= iccm_bank_wr_data[3] + skip + write mport _T_94 = iccm_mem[addr_bank_1], clock + when write_vec[0] : + _T_94[0] <= iccm_bank_wr_data[0] + skip + when write_vec[1] : + _T_94[1] <= iccm_bank_wr_data[1] + skip + when write_vec[2] : + _T_94[2] <= iccm_bank_wr_data[2] + skip + when write_vec[3] : + _T_94[3] <= iccm_bank_wr_data[3] + skip + write mport _T_95 = iccm_mem[addr_bank_2], clock + when write_vec[0] : + _T_95[0] <= iccm_bank_wr_data[0] + skip + when write_vec[1] : + _T_95[1] <= iccm_bank_wr_data[1] + skip + when write_vec[2] : + _T_95[2] <= iccm_bank_wr_data[2] + skip + when write_vec[3] : + _T_95[3] <= iccm_bank_wr_data[3] + skip + write mport _T_96 = iccm_mem[addr_bank_3], clock + when write_vec[0] : + _T_96[0] <= iccm_bank_wr_data[0] + skip + when write_vec[1] : + _T_96[1] <= iccm_bank_wr_data[1] + skip + when write_vec[2] : + _T_96[2] <= iccm_bank_wr_data[2] + skip + when write_vec[3] : + _T_96[3] <= iccm_bank_wr_data[3] + skip + read mport _T_97 = iccm_mem[addr_bank_0], clock @[el2_ifu_iccm_mem.scala 47:34] + iccm_bank_dout[0] <= _T_97[0] @[el2_ifu_iccm_mem.scala 47:18] + iccm_bank_dout[1] <= _T_97[1] @[el2_ifu_iccm_mem.scala 47:18] + iccm_bank_dout[2] <= _T_97[2] @[el2_ifu_iccm_mem.scala 47:18] + iccm_bank_dout[3] <= _T_97[3] @[el2_ifu_iccm_mem.scala 47:18] + wire redundant_valid : UInt<2> + redundant_valid <= UInt<1>("h00") + wire redundant_address : UInt<14>[2] @[el2_ifu_iccm_mem.scala 50:31] + redundant_address[0] <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 51:21] + redundant_address[1] <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 51:21] + node _T_98 = bits(redundant_valid, 1, 1) @[el2_ifu_iccm_mem.scala 53:67] + node _T_99 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 53:90] + node _T_100 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 53:128] + node _T_101 = eq(_T_99, _T_100) @[el2_ifu_iccm_mem.scala 53:105] + node _T_102 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 53:163] + node _T_103 = eq(_T_102, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 53:169] + node _T_104 = and(_T_101, _T_103) @[el2_ifu_iccm_mem.scala 53:145] + node _T_105 = and(_T_98, _T_104) @[el2_ifu_iccm_mem.scala 53:71] + node _T_106 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 54:22] + node _T_107 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 54:60] + node _T_108 = eq(_T_106, _T_107) @[el2_ifu_iccm_mem.scala 54:37] + node _T_109 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 54:93] + node _T_110 = eq(_T_109, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 54:99] + node _T_111 = and(_T_108, _T_110) @[el2_ifu_iccm_mem.scala 54:77] + node _T_112 = or(_T_105, _T_111) @[el2_ifu_iccm_mem.scala 53:179] + node _T_113 = bits(redundant_valid, 1, 1) @[el2_ifu_iccm_mem.scala 53:67] + node _T_114 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 53:90] + node _T_115 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 53:128] + node _T_116 = eq(_T_114, _T_115) @[el2_ifu_iccm_mem.scala 53:105] + node _T_117 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 53:163] + node _T_118 = eq(_T_117, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 53:169] + node _T_119 = and(_T_116, _T_118) @[el2_ifu_iccm_mem.scala 53:145] + node _T_120 = and(_T_113, _T_119) @[el2_ifu_iccm_mem.scala 53:71] + node _T_121 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 54:22] + node _T_122 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 54:60] + node _T_123 = eq(_T_121, _T_122) @[el2_ifu_iccm_mem.scala 54:37] + node _T_124 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 54:93] + node _T_125 = eq(_T_124, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 54:99] + node _T_126 = and(_T_123, _T_125) @[el2_ifu_iccm_mem.scala 54:77] + node _T_127 = or(_T_120, _T_126) @[el2_ifu_iccm_mem.scala 53:179] + node _T_128 = bits(redundant_valid, 1, 1) @[el2_ifu_iccm_mem.scala 53:67] + node _T_129 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 53:90] + node _T_130 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 53:128] + node _T_131 = eq(_T_129, _T_130) @[el2_ifu_iccm_mem.scala 53:105] + node _T_132 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 53:163] + node _T_133 = eq(_T_132, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 53:169] + node _T_134 = and(_T_131, _T_133) @[el2_ifu_iccm_mem.scala 53:145] + node _T_135 = and(_T_128, _T_134) @[el2_ifu_iccm_mem.scala 53:71] + node _T_136 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 54:22] + node _T_137 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 54:60] + node _T_138 = eq(_T_136, _T_137) @[el2_ifu_iccm_mem.scala 54:37] + node _T_139 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 54:93] + node _T_140 = eq(_T_139, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 54:99] + node _T_141 = and(_T_138, _T_140) @[el2_ifu_iccm_mem.scala 54:77] + node _T_142 = or(_T_135, _T_141) @[el2_ifu_iccm_mem.scala 53:179] + node _T_143 = bits(redundant_valid, 1, 1) @[el2_ifu_iccm_mem.scala 53:67] + node _T_144 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 53:90] + node _T_145 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 53:128] + node _T_146 = eq(_T_144, _T_145) @[el2_ifu_iccm_mem.scala 53:105] + node _T_147 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 53:163] + node _T_148 = eq(_T_147, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 53:169] + node _T_149 = and(_T_146, _T_148) @[el2_ifu_iccm_mem.scala 53:145] + node _T_150 = and(_T_143, _T_149) @[el2_ifu_iccm_mem.scala 53:71] + node _T_151 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 54:22] + node _T_152 = bits(redundant_address[1], 13, 0) @[el2_ifu_iccm_mem.scala 54:60] + node _T_153 = eq(_T_151, _T_152) @[el2_ifu_iccm_mem.scala 54:37] + node _T_154 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 54:93] + node _T_155 = eq(_T_154, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 54:99] + node _T_156 = and(_T_153, _T_155) @[el2_ifu_iccm_mem.scala 54:77] + node _T_157 = or(_T_150, _T_156) @[el2_ifu_iccm_mem.scala 53:179] + node _T_158 = cat(_T_157, _T_142) @[Cat.scala 29:58] + node _T_159 = cat(_T_158, _T_127) @[Cat.scala 29:58] + node sel_red1 = cat(_T_159, _T_112) @[Cat.scala 29:58] + node _T_160 = bits(redundant_valid, 0, 0) @[el2_ifu_iccm_mem.scala 55:67] + node _T_161 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 55:90] + node _T_162 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 55:128] + node _T_163 = eq(_T_161, _T_162) @[el2_ifu_iccm_mem.scala 55:105] + node _T_164 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 55:163] + node _T_165 = eq(_T_164, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 55:169] + node _T_166 = and(_T_163, _T_165) @[el2_ifu_iccm_mem.scala 55:145] + node _T_167 = and(_T_160, _T_166) @[el2_ifu_iccm_mem.scala 55:71] + node _T_168 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 56:22] + node _T_169 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 56:60] + node _T_170 = eq(_T_168, _T_169) @[el2_ifu_iccm_mem.scala 56:37] + node _T_171 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 56:93] + node _T_172 = eq(_T_171, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 56:99] + node _T_173 = and(_T_170, _T_172) @[el2_ifu_iccm_mem.scala 56:77] + node _T_174 = or(_T_167, _T_173) @[el2_ifu_iccm_mem.scala 55:179] + node _T_175 = bits(redundant_valid, 0, 0) @[el2_ifu_iccm_mem.scala 55:67] + node _T_176 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 55:90] + node _T_177 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 55:128] + node _T_178 = eq(_T_176, _T_177) @[el2_ifu_iccm_mem.scala 55:105] + node _T_179 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 55:163] + node _T_180 = eq(_T_179, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 55:169] + node _T_181 = and(_T_178, _T_180) @[el2_ifu_iccm_mem.scala 55:145] + node _T_182 = and(_T_175, _T_181) @[el2_ifu_iccm_mem.scala 55:71] + node _T_183 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 56:22] + node _T_184 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 56:60] + node _T_185 = eq(_T_183, _T_184) @[el2_ifu_iccm_mem.scala 56:37] + node _T_186 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 56:93] + node _T_187 = eq(_T_186, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 56:99] + node _T_188 = and(_T_185, _T_187) @[el2_ifu_iccm_mem.scala 56:77] + node _T_189 = or(_T_182, _T_188) @[el2_ifu_iccm_mem.scala 55:179] + node _T_190 = bits(redundant_valid, 0, 0) @[el2_ifu_iccm_mem.scala 55:67] + node _T_191 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 55:90] + node _T_192 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 55:128] + node _T_193 = eq(_T_191, _T_192) @[el2_ifu_iccm_mem.scala 55:105] + node _T_194 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 55:163] + node _T_195 = eq(_T_194, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 55:169] + node _T_196 = and(_T_193, _T_195) @[el2_ifu_iccm_mem.scala 55:145] + node _T_197 = and(_T_190, _T_196) @[el2_ifu_iccm_mem.scala 55:71] + node _T_198 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 56:22] + node _T_199 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 56:60] + node _T_200 = eq(_T_198, _T_199) @[el2_ifu_iccm_mem.scala 56:37] + node _T_201 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 56:93] + node _T_202 = eq(_T_201, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 56:99] + node _T_203 = and(_T_200, _T_202) @[el2_ifu_iccm_mem.scala 56:77] + node _T_204 = or(_T_197, _T_203) @[el2_ifu_iccm_mem.scala 55:179] + node _T_205 = bits(redundant_valid, 0, 0) @[el2_ifu_iccm_mem.scala 55:67] + node _T_206 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 55:90] + node _T_207 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 55:128] + node _T_208 = eq(_T_206, _T_207) @[el2_ifu_iccm_mem.scala 55:105] + node _T_209 = bits(io.iccm_rw_addr, 2, 1) @[el2_ifu_iccm_mem.scala 55:163] + node _T_210 = eq(_T_209, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 55:169] + node _T_211 = and(_T_208, _T_210) @[el2_ifu_iccm_mem.scala 55:145] + node _T_212 = and(_T_205, _T_211) @[el2_ifu_iccm_mem.scala 55:71] + node _T_213 = bits(addr_bank_inc, 14, 1) @[el2_ifu_iccm_mem.scala 56:22] + node _T_214 = bits(redundant_address[0], 13, 0) @[el2_ifu_iccm_mem.scala 56:60] + node _T_215 = eq(_T_213, _T_214) @[el2_ifu_iccm_mem.scala 56:37] + node _T_216 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 56:93] + node _T_217 = eq(_T_216, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 56:99] + node _T_218 = and(_T_215, _T_217) @[el2_ifu_iccm_mem.scala 56:77] + node _T_219 = or(_T_212, _T_218) @[el2_ifu_iccm_mem.scala 55:179] + node _T_220 = cat(_T_219, _T_204) @[Cat.scala 29:58] + node _T_221 = cat(_T_220, _T_189) @[Cat.scala 29:58] + node sel_red0 = cat(_T_221, _T_174) @[Cat.scala 29:58] + reg sel_red0_q : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_iccm_mem.scala 58:27] + sel_red0_q <= sel_red0 @[el2_ifu_iccm_mem.scala 58:27] + reg sel_red1_q : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_iccm_mem.scala 59:27] + sel_red1_q <= sel_red1 @[el2_ifu_iccm_mem.scala 59:27] + wire redundant_data : UInt<39>[2] @[el2_ifu_iccm_mem.scala 60:28] + redundant_data[0] <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 61:18] + redundant_data[1] <= UInt<1>("h00") @[el2_ifu_iccm_mem.scala 61:18] + node _T_222 = bits(sel_red1_q, 0, 0) @[el2_ifu_iccm_mem.scala 63:47] + node _T_223 = bits(_T_222, 0, 0) @[el2_ifu_iccm_mem.scala 63:51] + node _T_224 = bits(sel_red0_q, 0, 0) @[el2_ifu_iccm_mem.scala 64:47] + node _T_225 = bits(_T_224, 0, 0) @[el2_ifu_iccm_mem.scala 64:51] + node _T_226 = bits(sel_red0_q, 0, 0) @[el2_ifu_iccm_mem.scala 65:47] + node _T_227 = not(_T_226) @[el2_ifu_iccm_mem.scala 65:36] + node _T_228 = bits(sel_red1_q, 0, 0) @[el2_ifu_iccm_mem.scala 65:64] + node _T_229 = not(_T_228) @[el2_ifu_iccm_mem.scala 65:53] + node _T_230 = and(_T_227, _T_229) @[el2_ifu_iccm_mem.scala 65:51] + node _T_231 = bits(_T_230, 0, 0) @[el2_ifu_iccm_mem.scala 65:69] + node _T_232 = mux(_T_223, redundant_data[1], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_233 = mux(_T_225, redundant_data[0], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_234 = mux(_T_231, iccm_bank_dout[0], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_235 = or(_T_232, _T_233) @[Mux.scala 27:72] + node _T_236 = or(_T_235, _T_234) @[Mux.scala 27:72] + wire iccm_bank_dout_fn_0 : UInt<39> @[Mux.scala 27:72] + iccm_bank_dout_fn_0 <= _T_236 @[Mux.scala 27:72] + node _T_237 = bits(sel_red1_q, 1, 1) @[el2_ifu_iccm_mem.scala 63:47] + node _T_238 = bits(_T_237, 0, 0) @[el2_ifu_iccm_mem.scala 63:51] + node _T_239 = bits(sel_red0_q, 1, 1) @[el2_ifu_iccm_mem.scala 64:47] + node _T_240 = bits(_T_239, 0, 0) @[el2_ifu_iccm_mem.scala 64:51] + node _T_241 = bits(sel_red0_q, 1, 1) @[el2_ifu_iccm_mem.scala 65:47] + node _T_242 = not(_T_241) @[el2_ifu_iccm_mem.scala 65:36] + node _T_243 = bits(sel_red1_q, 1, 1) @[el2_ifu_iccm_mem.scala 65:64] + node _T_244 = not(_T_243) @[el2_ifu_iccm_mem.scala 65:53] + node _T_245 = and(_T_242, _T_244) @[el2_ifu_iccm_mem.scala 65:51] + node _T_246 = bits(_T_245, 0, 0) @[el2_ifu_iccm_mem.scala 65:69] + node _T_247 = mux(_T_238, redundant_data[1], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_248 = mux(_T_240, redundant_data[0], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_249 = mux(_T_246, iccm_bank_dout[1], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_250 = or(_T_247, _T_248) @[Mux.scala 27:72] + node _T_251 = or(_T_250, _T_249) @[Mux.scala 27:72] + wire iccm_bank_dout_fn_1 : UInt<39> @[Mux.scala 27:72] + iccm_bank_dout_fn_1 <= _T_251 @[Mux.scala 27:72] + node _T_252 = bits(sel_red1_q, 2, 2) @[el2_ifu_iccm_mem.scala 63:47] + node _T_253 = bits(_T_252, 0, 0) @[el2_ifu_iccm_mem.scala 63:51] + node _T_254 = bits(sel_red0_q, 2, 2) @[el2_ifu_iccm_mem.scala 64:47] + node _T_255 = bits(_T_254, 0, 0) @[el2_ifu_iccm_mem.scala 64:51] + node _T_256 = bits(sel_red0_q, 2, 2) @[el2_ifu_iccm_mem.scala 65:47] + node _T_257 = not(_T_256) @[el2_ifu_iccm_mem.scala 65:36] + node _T_258 = bits(sel_red1_q, 2, 2) @[el2_ifu_iccm_mem.scala 65:64] + node _T_259 = not(_T_258) @[el2_ifu_iccm_mem.scala 65:53] + node _T_260 = and(_T_257, _T_259) @[el2_ifu_iccm_mem.scala 65:51] + node _T_261 = bits(_T_260, 0, 0) @[el2_ifu_iccm_mem.scala 65:69] + node _T_262 = mux(_T_253, redundant_data[1], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_263 = mux(_T_255, redundant_data[0], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_264 = mux(_T_261, iccm_bank_dout[2], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_265 = or(_T_262, _T_263) @[Mux.scala 27:72] + node _T_266 = or(_T_265, _T_264) @[Mux.scala 27:72] + wire iccm_bank_dout_fn_2 : UInt<39> @[Mux.scala 27:72] + iccm_bank_dout_fn_2 <= _T_266 @[Mux.scala 27:72] + node _T_267 = bits(sel_red1_q, 3, 3) @[el2_ifu_iccm_mem.scala 63:47] + node _T_268 = bits(_T_267, 0, 0) @[el2_ifu_iccm_mem.scala 63:51] + node _T_269 = bits(sel_red0_q, 3, 3) @[el2_ifu_iccm_mem.scala 64:47] + node _T_270 = bits(_T_269, 0, 0) @[el2_ifu_iccm_mem.scala 64:51] + node _T_271 = bits(sel_red0_q, 3, 3) @[el2_ifu_iccm_mem.scala 65:47] + node _T_272 = not(_T_271) @[el2_ifu_iccm_mem.scala 65:36] + node _T_273 = bits(sel_red1_q, 3, 3) @[el2_ifu_iccm_mem.scala 65:64] + node _T_274 = not(_T_273) @[el2_ifu_iccm_mem.scala 65:53] + node _T_275 = and(_T_272, _T_274) @[el2_ifu_iccm_mem.scala 65:51] + node _T_276 = bits(_T_275, 0, 0) @[el2_ifu_iccm_mem.scala 65:69] + node _T_277 = mux(_T_268, redundant_data[1], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_278 = mux(_T_270, redundant_data[0], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_279 = mux(_T_276, iccm_bank_dout[3], UInt<1>("h00")) @[Mux.scala 27:72] + node _T_280 = or(_T_277, _T_278) @[Mux.scala 27:72] + node _T_281 = or(_T_280, _T_279) @[Mux.scala 27:72] + wire iccm_bank_dout_fn_3 : UInt<39> @[Mux.scala 27:72] + iccm_bank_dout_fn_3 <= _T_281 @[Mux.scala 27:72] + wire redundant_lru : UInt<1> + redundant_lru <= UInt<1>("h00") + node _T_282 = eq(redundant_lru, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 67:20] + node r0_addr_en = and(_T_282, io.iccm_buf_correct_ecc) @[el2_ifu_iccm_mem.scala 67:35] + node r1_addr_en = and(redundant_lru, io.iccm_buf_correct_ecc) @[el2_ifu_iccm_mem.scala 68:35] + node _T_283 = orr(sel_red0) @[el2_ifu_iccm_mem.scala 69:63] + node _T_284 = orr(sel_red1) @[el2_ifu_iccm_mem.scala 69:78] + node _T_285 = or(_T_283, _T_284) @[el2_ifu_iccm_mem.scala 69:67] + node _T_286 = and(_T_285, io.iccm_rden) @[el2_ifu_iccm_mem.scala 69:83] + node _T_287 = and(_T_286, io.iccm_correction_state) @[el2_ifu_iccm_mem.scala 69:98] + node redundant_lru_en = or(io.iccm_buf_correct_ecc, _T_287) @[el2_ifu_iccm_mem.scala 69:50] + node _T_288 = eq(redundant_lru, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 70:55] + node _T_289 = orr(sel_red0) @[el2_ifu_iccm_mem.scala 70:84] + node _T_290 = mux(_T_289, UInt<1>("h01"), UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 70:74] + node redundant_lru_in = mux(io.iccm_buf_correct_ecc, _T_288, _T_290) @[el2_ifu_iccm_mem.scala 70:29] + reg _T_291 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when redundant_lru_en : @[Reg.scala 28:19] + _T_291 <= redundant_lru_in @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + redundant_lru <= _T_291 @[el2_ifu_iccm_mem.scala 71:17] + node _T_292 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 72:52] + reg _T_293 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when r0_addr_en : @[Reg.scala 28:19] + _T_293 <= _T_292 @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + redundant_address[0] <= _T_293 @[el2_ifu_iccm_mem.scala 72:24] + node _T_294 = bits(io.iccm_rw_addr, 14, 1) @[el2_ifu_iccm_mem.scala 73:52] + node _T_295 = bits(r1_addr_en, 0, 0) @[el2_ifu_iccm_mem.scala 73:85] + reg _T_296 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when _T_295 : @[Reg.scala 28:19] + _T_296 <= _T_294 @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + redundant_address[1] <= _T_296 @[el2_ifu_iccm_mem.scala 73:24] + node _T_297 = bits(r1_addr_en, 0, 0) @[el2_ifu_iccm_mem.scala 74:57] + reg _T_298 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when _T_297 : @[Reg.scala 28:19] + _T_298 <= UInt<1>("h01") @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + reg _T_299 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when r0_addr_en : @[Reg.scala 28:19] + _T_299 <= UInt<1>("h01") @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + node _T_300 = cat(_T_298, _T_299) @[Cat.scala 29:58] + redundant_valid <= _T_300 @[el2_ifu_iccm_mem.scala 74:19] + node _T_301 = bits(io.iccm_rw_addr, 14, 2) @[el2_ifu_iccm_mem.scala 76:45] + node _T_302 = bits(redundant_address[0], 13, 1) @[el2_ifu_iccm_mem.scala 76:85] + node _T_303 = eq(_T_301, _T_302) @[el2_ifu_iccm_mem.scala 76:61] + node _T_304 = bits(io.iccm_rw_addr, 1, 1) @[el2_ifu_iccm_mem.scala 77:22] + node _T_305 = bits(redundant_address[0], 0, 0) @[el2_ifu_iccm_mem.scala 77:48] + node _T_306 = and(_T_304, _T_305) @[el2_ifu_iccm_mem.scala 77:26] + node _T_307 = bits(io.iccm_wr_size, 1, 0) @[el2_ifu_iccm_mem.scala 77:70] + node _T_308 = eq(_T_307, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 77:75] + node _T_309 = or(_T_306, _T_308) @[el2_ifu_iccm_mem.scala 77:52] + node _T_310 = and(_T_303, _T_309) @[el2_ifu_iccm_mem.scala 76:102] + node _T_311 = bits(redundant_valid, 0, 0) @[el2_ifu_iccm_mem.scala 77:101] + node _T_312 = and(_T_310, _T_311) @[el2_ifu_iccm_mem.scala 77:84] + node _T_313 = and(_T_312, io.iccm_wren) @[el2_ifu_iccm_mem.scala 77:105] + node _T_314 = eq(redundant_lru, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 78:6] + node _T_315 = and(_T_314, io.iccm_buf_correct_ecc) @[el2_ifu_iccm_mem.scala 78:21] + node redundant_data0_en = or(_T_313, _T_315) @[el2_ifu_iccm_mem.scala 77:121] + node _T_316 = bits(io.iccm_rw_addr, 1, 1) @[el2_ifu_iccm_mem.scala 79:49] + node _T_317 = bits(redundant_address[0], 0, 0) @[el2_ifu_iccm_mem.scala 79:73] + node _T_318 = and(_T_316, _T_317) @[el2_ifu_iccm_mem.scala 79:52] + node _T_319 = bits(redundant_address[0], 0, 0) @[el2_ifu_iccm_mem.scala 79:100] + node _T_320 = bits(io.iccm_wr_size, 1, 0) @[el2_ifu_iccm_mem.scala 79:122] + node _T_321 = eq(_T_320, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 79:127] + node _T_322 = and(_T_319, _T_321) @[el2_ifu_iccm_mem.scala 79:104] + node _T_323 = or(_T_318, _T_322) @[el2_ifu_iccm_mem.scala 79:78] + node _T_324 = bits(_T_323, 0, 0) @[el2_ifu_iccm_mem.scala 79:137] + node _T_325 = bits(io.iccm_wr_data, 77, 39) @[el2_ifu_iccm_mem.scala 80:20] + node _T_326 = bits(io.iccm_wr_data, 38, 0) @[el2_ifu_iccm_mem.scala 80:44] + node redundant_data0_in = mux(_T_324, _T_325, _T_326) @[el2_ifu_iccm_mem.scala 79:31] + node _T_327 = bits(redundant_data0_en, 0, 0) @[el2_ifu_iccm_mem.scala 81:78] + reg _T_328 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when _T_327 : @[Reg.scala 28:19] + _T_328 <= redundant_data0_in @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + redundant_data[0] <= _T_328 @[el2_ifu_iccm_mem.scala 81:21] + node _T_329 = bits(io.iccm_rw_addr, 14, 2) @[el2_ifu_iccm_mem.scala 83:45] + node _T_330 = bits(redundant_address[1], 13, 1) @[el2_ifu_iccm_mem.scala 83:85] + node _T_331 = eq(_T_329, _T_330) @[el2_ifu_iccm_mem.scala 83:61] + node _T_332 = bits(io.iccm_rw_addr, 1, 1) @[el2_ifu_iccm_mem.scala 84:22] + node _T_333 = bits(redundant_address[1], 0, 0) @[el2_ifu_iccm_mem.scala 84:48] + node _T_334 = and(_T_332, _T_333) @[el2_ifu_iccm_mem.scala 84:26] + node _T_335 = bits(io.iccm_wr_size, 1, 0) @[el2_ifu_iccm_mem.scala 84:70] + node _T_336 = eq(_T_335, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 84:75] + node _T_337 = or(_T_334, _T_336) @[el2_ifu_iccm_mem.scala 84:52] + node _T_338 = and(_T_331, _T_337) @[el2_ifu_iccm_mem.scala 83:102] + node _T_339 = bits(redundant_valid, 1, 1) @[el2_ifu_iccm_mem.scala 84:101] + node _T_340 = and(_T_338, _T_339) @[el2_ifu_iccm_mem.scala 84:84] + node _T_341 = and(_T_340, io.iccm_wren) @[el2_ifu_iccm_mem.scala 84:105] + node _T_342 = eq(redundant_lru, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 85:6] + node _T_343 = and(_T_342, io.iccm_buf_correct_ecc) @[el2_ifu_iccm_mem.scala 85:21] + node redundant_data1_en = or(_T_341, _T_343) @[el2_ifu_iccm_mem.scala 84:121] + node _T_344 = bits(io.iccm_rw_addr, 1, 1) @[el2_ifu_iccm_mem.scala 86:49] + node _T_345 = bits(redundant_address[1], 0, 0) @[el2_ifu_iccm_mem.scala 86:73] + node _T_346 = and(_T_344, _T_345) @[el2_ifu_iccm_mem.scala 86:52] + node _T_347 = bits(redundant_address[1], 0, 0) @[el2_ifu_iccm_mem.scala 86:100] + node _T_348 = bits(io.iccm_wr_size, 1, 0) @[el2_ifu_iccm_mem.scala 86:122] + node _T_349 = eq(_T_348, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 86:127] + node _T_350 = and(_T_347, _T_349) @[el2_ifu_iccm_mem.scala 86:104] + node _T_351 = or(_T_346, _T_350) @[el2_ifu_iccm_mem.scala 86:78] + node _T_352 = bits(_T_351, 0, 0) @[el2_ifu_iccm_mem.scala 86:137] + node _T_353 = bits(io.iccm_wr_data, 77, 39) @[el2_ifu_iccm_mem.scala 87:20] + node _T_354 = bits(io.iccm_wr_data, 38, 0) @[el2_ifu_iccm_mem.scala 87:44] + node redundant_data1_in = mux(_T_352, _T_353, _T_354) @[el2_ifu_iccm_mem.scala 86:31] + node _T_355 = bits(redundant_data1_en, 0, 0) @[el2_ifu_iccm_mem.scala 88:78] + reg _T_356 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[Reg.scala 27:20] + when _T_355 : @[Reg.scala 28:19] + _T_356 <= redundant_data1_in @[Reg.scala 28:23] + skip @[Reg.scala 28:19] + redundant_data[1] <= _T_356 @[el2_ifu_iccm_mem.scala 88:21] + node _T_357 = bits(io.iccm_rw_addr, 2, 0) @[el2_ifu_iccm_mem.scala 90:50] + reg iccm_rd_addr_lo_q : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_iccm_mem.scala 90:34] + iccm_rd_addr_lo_q <= _T_357 @[el2_ifu_iccm_mem.scala 90:34] + node _T_358 = bits(addr_bank_inc, 2, 1) @[el2_ifu_iccm_mem.scala 91:48] + reg iccm_rd_addr_hi_q : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_iccm_mem.scala 91:34] + iccm_rd_addr_hi_q <= _T_358 @[el2_ifu_iccm_mem.scala 91:34] + node _T_359 = eq(iccm_rd_addr_hi_q, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 93:86] + node _T_360 = bits(iccm_bank_dout_fn_0, 31, 0) @[el2_ifu_iccm_mem.scala 93:115] + node _T_361 = eq(iccm_rd_addr_hi_q, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 93:86] + node _T_362 = bits(iccm_bank_dout_fn_1, 31, 0) @[el2_ifu_iccm_mem.scala 93:115] + node _T_363 = eq(iccm_rd_addr_hi_q, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 93:86] + node _T_364 = bits(iccm_bank_dout_fn_2, 31, 0) @[el2_ifu_iccm_mem.scala 93:115] + node _T_365 = eq(iccm_rd_addr_hi_q, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 93:86] + node _T_366 = bits(iccm_bank_dout_fn_3, 31, 0) @[el2_ifu_iccm_mem.scala 93:115] + node _T_367 = mux(_T_359, _T_360, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_368 = mux(_T_361, _T_362, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_369 = mux(_T_363, _T_364, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_370 = mux(_T_365, _T_366, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_371 = or(_T_367, _T_368) @[Mux.scala 27:72] + node _T_372 = or(_T_371, _T_369) @[Mux.scala 27:72] + node _T_373 = or(_T_372, _T_370) @[Mux.scala 27:72] + wire _T_374 : UInt<32> @[Mux.scala 27:72] + _T_374 <= _T_373 @[Mux.scala 27:72] + node _T_375 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 94:59] + node _T_376 = eq(_T_375, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 94:77] + node _T_377 = bits(iccm_bank_dout_fn_0, 31, 0) @[el2_ifu_iccm_mem.scala 94:106] + node _T_378 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 94:59] + node _T_379 = eq(_T_378, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 94:77] + node _T_380 = bits(iccm_bank_dout_fn_1, 31, 0) @[el2_ifu_iccm_mem.scala 94:106] + node _T_381 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 94:59] + node _T_382 = eq(_T_381, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 94:77] + node _T_383 = bits(iccm_bank_dout_fn_2, 31, 0) @[el2_ifu_iccm_mem.scala 94:106] + node _T_384 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 94:59] + node _T_385 = eq(_T_384, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 94:77] + node _T_386 = bits(iccm_bank_dout_fn_3, 31, 0) @[el2_ifu_iccm_mem.scala 94:106] + node _T_387 = mux(_T_376, _T_377, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_388 = mux(_T_379, _T_380, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_389 = mux(_T_382, _T_383, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_390 = mux(_T_385, _T_386, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_391 = or(_T_387, _T_388) @[Mux.scala 27:72] + node _T_392 = or(_T_391, _T_389) @[Mux.scala 27:72] + node _T_393 = or(_T_392, _T_390) @[Mux.scala 27:72] + wire _T_394 : UInt<32> @[Mux.scala 27:72] + _T_394 <= _T_393 @[Mux.scala 27:72] + node iccm_rd_data_pre = cat(_T_374, _T_394) @[Cat.scala 29:58] + node _T_395 = bits(iccm_rd_addr_lo_q, 0, 0) @[el2_ifu_iccm_mem.scala 95:43] + node _T_396 = bits(_T_395, 0, 0) @[el2_ifu_iccm_mem.scala 95:53] + node _T_397 = mux(UInt<1>("h00"), UInt<16>("h0ffff"), UInt<16>("h00")) @[Bitwise.scala 72:12] + node _T_398 = bits(iccm_rd_data_pre, 63, 16) @[el2_ifu_iccm_mem.scala 95:89] + node _T_399 = cat(_T_397, _T_398) @[Cat.scala 29:58] + node _T_400 = mux(_T_396, _T_399, iccm_rd_data_pre) @[el2_ifu_iccm_mem.scala 95:25] + io.iccm_rd_data <= _T_400 @[el2_ifu_iccm_mem.scala 95:19] + node _T_401 = eq(iccm_rd_addr_hi_q, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 96:85] + node _T_402 = eq(iccm_rd_addr_hi_q, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 96:85] + node _T_403 = eq(iccm_rd_addr_hi_q, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 96:85] + node _T_404 = eq(iccm_rd_addr_hi_q, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 96:85] + node _T_405 = mux(_T_401, iccm_bank_dout_fn_0, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_406 = mux(_T_402, iccm_bank_dout_fn_1, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_407 = mux(_T_403, iccm_bank_dout_fn_2, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_408 = mux(_T_404, iccm_bank_dout_fn_3, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_409 = or(_T_405, _T_406) @[Mux.scala 27:72] + node _T_410 = or(_T_409, _T_407) @[Mux.scala 27:72] + node _T_411 = or(_T_410, _T_408) @[Mux.scala 27:72] + wire _T_412 : UInt<39> @[Mux.scala 27:72] + _T_412 <= _T_411 @[Mux.scala 27:72] + node _T_413 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 97:61] + node _T_414 = eq(_T_413, UInt<1>("h00")) @[el2_ifu_iccm_mem.scala 97:79] + node _T_415 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 97:61] + node _T_416 = eq(_T_415, UInt<1>("h01")) @[el2_ifu_iccm_mem.scala 97:79] + node _T_417 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 97:61] + node _T_418 = eq(_T_417, UInt<2>("h02")) @[el2_ifu_iccm_mem.scala 97:79] + node _T_419 = bits(iccm_rd_addr_lo_q, 1, 0) @[el2_ifu_iccm_mem.scala 97:61] + node _T_420 = eq(_T_419, UInt<2>("h03")) @[el2_ifu_iccm_mem.scala 97:79] + node _T_421 = mux(_T_414, iccm_bank_dout_fn_0, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_422 = mux(_T_416, iccm_bank_dout_fn_1, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_423 = mux(_T_418, iccm_bank_dout_fn_2, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_424 = mux(_T_420, iccm_bank_dout_fn_3, UInt<1>("h00")) @[Mux.scala 27:72] + node _T_425 = or(_T_421, _T_422) @[Mux.scala 27:72] + node _T_426 = or(_T_425, _T_423) @[Mux.scala 27:72] + node _T_427 = or(_T_426, _T_424) @[Mux.scala 27:72] + wire _T_428 : UInt<39> @[Mux.scala 27:72] + _T_428 <= _T_427 @[Mux.scala 27:72] + node _T_429 = cat(_T_412, _T_428) @[Cat.scala 29:58] + io.iccm_rd_data_ecc <= _T_429 @[el2_ifu_iccm_mem.scala 96:23] + diff --git a/el2_ifu_iccm_mem.v b/el2_ifu_iccm_mem.v new file mode 100644 index 00000000..9e673bcd --- /dev/null +++ b/el2_ifu_iccm_mem.v @@ -0,0 +1,575 @@ +module el2_ifu_iccm_mem( + input clock, + input reset, + input io_clk_override, + input io_iccm_wren, + input io_iccm_rden, + input [14:0] io_iccm_rw_addr, + input io_iccm_buf_correct_ecc, + input io_iccm_correction_state, + input [2:0] io_iccm_wr_size, + input [77:0] io_iccm_wr_data, + output [63:0] io_iccm_rd_data, + output [77:0] io_iccm_rd_data_ecc, + input io_scan_mode +); +`ifdef RANDOMIZE_MEM_INIT + reg [63:0] _RAND_0; + reg [63:0] _RAND_1; + reg [63:0] _RAND_2; + reg [63:0] _RAND_3; +`endif // RANDOMIZE_MEM_INIT +`ifdef RANDOMIZE_REG_INIT + reg [31:0] _RAND_4; + reg [31:0] _RAND_5; + reg [31:0] _RAND_6; + reg [31:0] _RAND_7; + reg [31:0] _RAND_8; + reg [31:0] _RAND_9; + reg [63:0] _RAND_10; + reg [63:0] _RAND_11; + reg [31:0] _RAND_12; + reg [31:0] _RAND_13; + reg [31:0] _RAND_14; +`endif // RANDOMIZE_REG_INIT + reg [38:0] iccm_mem_0 [0:4095]; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_0__T_97_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_0__T_97_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_0__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_0__T_93_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_93_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_93_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_0__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_0__T_94_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_94_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_94_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_0__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_0__T_95_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_95_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_95_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_0__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_0__T_96_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_96_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_0__T_96_en; // @[el2_ifu_iccm_mem.scala 40:21] + reg [38:0] iccm_mem_1 [0:4095]; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_1__T_97_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_1__T_97_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_1__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_1__T_93_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_93_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_93_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_1__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_1__T_94_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_94_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_94_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_1__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_1__T_95_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_95_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_95_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_1__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_1__T_96_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_96_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_1__T_96_en; // @[el2_ifu_iccm_mem.scala 40:21] + reg [38:0] iccm_mem_2 [0:4095]; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_2__T_97_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_2__T_97_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_2__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_2__T_93_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_93_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_93_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_2__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_2__T_94_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_94_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_94_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_2__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_2__T_95_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_95_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_95_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_2__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_2__T_96_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_96_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_2__T_96_en; // @[el2_ifu_iccm_mem.scala 40:21] + reg [38:0] iccm_mem_3 [0:4095]; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_3__T_97_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_3__T_97_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_3__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_3__T_93_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_93_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_93_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_3__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_3__T_94_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_94_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_94_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_3__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_3__T_95_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_95_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_95_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire [38:0] iccm_mem_3__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + wire [11:0] iccm_mem_3__T_96_addr; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_96_mask; // @[el2_ifu_iccm_mem.scala 40:21] + wire iccm_mem_3__T_96_en; // @[el2_ifu_iccm_mem.scala 40:21] + wire _T_1 = io_iccm_wr_size[1:0] == 2'h3; // @[el2_ifu_iccm_mem.scala 24:43] + wire [1:0] addr_inc = _T_1 ? 2'h2 : 2'h1; // @[el2_ifu_iccm_mem.scala 24:21] + wire [14:0] _GEN_15 = {{13'd0}, addr_inc}; // @[el2_ifu_iccm_mem.scala 25:54] + wire [14:0] addr_bank_inc = io_iccm_rw_addr + _GEN_15; // @[el2_ifu_iccm_mem.scala 25:54] + wire [38:0] iccm_bank_wr_data_0 = io_iccm_wr_data[38:0]; // @[el2_ifu_iccm_mem.scala 29:50] + wire [38:0] iccm_bank_wr_data_1 = io_iccm_wr_data[77:39]; // @[el2_ifu_iccm_mem.scala 30:54] + wire _T_10 = io_iccm_rw_addr[2:1] == 2'h0; // @[el2_ifu_iccm_mem.scala 33:99] + wire _T_11 = io_iccm_wren & _T_10; // @[el2_ifu_iccm_mem.scala 33:64] + wire _T_13 = addr_bank_inc[2:1] == 2'h0; // @[el2_ifu_iccm_mem.scala 33:139] + wire wren_bank_0 = _T_11 | _T_13; // @[el2_ifu_iccm_mem.scala 33:106] + wire _T_15 = io_iccm_rw_addr[2:1] == 2'h1; // @[el2_ifu_iccm_mem.scala 33:99] + wire _T_16 = io_iccm_wren & _T_15; // @[el2_ifu_iccm_mem.scala 33:64] + wire _T_18 = addr_bank_inc[2:1] == 2'h1; // @[el2_ifu_iccm_mem.scala 33:139] + wire wren_bank_1 = _T_16 | _T_18; // @[el2_ifu_iccm_mem.scala 33:106] + wire _T_20 = io_iccm_rw_addr[2:1] == 2'h2; // @[el2_ifu_iccm_mem.scala 33:99] + wire _T_21 = io_iccm_wren & _T_20; // @[el2_ifu_iccm_mem.scala 33:64] + wire _T_23 = addr_bank_inc[2:1] == 2'h2; // @[el2_ifu_iccm_mem.scala 33:139] + wire wren_bank_2 = _T_21 | _T_23; // @[el2_ifu_iccm_mem.scala 33:106] + wire _T_25 = io_iccm_rw_addr[2:1] == 2'h3; // @[el2_ifu_iccm_mem.scala 33:99] + wire _T_26 = io_iccm_wren & _T_25; // @[el2_ifu_iccm_mem.scala 33:64] + wire _T_28 = addr_bank_inc[2:1] == 2'h3; // @[el2_ifu_iccm_mem.scala 33:139] + wire wren_bank_3 = _T_26 | _T_28; // @[el2_ifu_iccm_mem.scala 33:106] + wire _T_31 = io_iccm_rden & _T_10; // @[el2_ifu_iccm_mem.scala 35:64] + wire rden_bank_0 = _T_31 | _T_13; // @[el2_ifu_iccm_mem.scala 35:106] + wire _T_36 = io_iccm_rden & _T_15; // @[el2_ifu_iccm_mem.scala 35:64] + wire rden_bank_1 = _T_36 | _T_18; // @[el2_ifu_iccm_mem.scala 35:106] + wire _T_41 = io_iccm_rden & _T_20; // @[el2_ifu_iccm_mem.scala 35:64] + wire rden_bank_2 = _T_41 | _T_23; // @[el2_ifu_iccm_mem.scala 35:106] + wire _T_46 = io_iccm_rden & _T_25; // @[el2_ifu_iccm_mem.scala 35:64] + wire rden_bank_3 = _T_46 | _T_28; // @[el2_ifu_iccm_mem.scala 35:106] + wire _T_49 = wren_bank_0 | rden_bank_0; // @[el2_ifu_iccm_mem.scala 36:72] + wire iccm_clken_0 = _T_49 | io_clk_override; // @[el2_ifu_iccm_mem.scala 36:87] + wire _T_50 = wren_bank_1 | rden_bank_1; // @[el2_ifu_iccm_mem.scala 36:72] + wire iccm_clken_1 = _T_50 | io_clk_override; // @[el2_ifu_iccm_mem.scala 36:87] + wire _T_51 = wren_bank_2 | rden_bank_2; // @[el2_ifu_iccm_mem.scala 36:72] + wire iccm_clken_2 = _T_51 | io_clk_override; // @[el2_ifu_iccm_mem.scala 36:87] + wire _T_52 = wren_bank_3 | rden_bank_3; // @[el2_ifu_iccm_mem.scala 36:72] + wire iccm_clken_3 = _T_52 | io_clk_override; // @[el2_ifu_iccm_mem.scala 36:87] + wire [11:0] _T_59 = _T_13 ? addr_bank_inc[14:3] : io_iccm_rw_addr[14:3]; // @[el2_ifu_iccm_mem.scala 38:8] + wire [11:0] _T_66 = _T_18 ? addr_bank_inc[14:3] : io_iccm_rw_addr[14:3]; // @[el2_ifu_iccm_mem.scala 38:8] + wire [11:0] _T_73 = _T_23 ? addr_bank_inc[14:3] : io_iccm_rw_addr[14:3]; // @[el2_ifu_iccm_mem.scala 38:8] + wire [11:0] _T_80 = _T_28 ? addr_bank_inc[14:3] : io_iccm_rw_addr[14:3]; // @[el2_ifu_iccm_mem.scala 38:8] + reg _T_298; // @[Reg.scala 27:20] + reg _T_299; // @[Reg.scala 27:20] + wire [1:0] redundant_valid = {_T_298,_T_299}; // @[Cat.scala 29:58] + reg [13:0] redundant_address_1; // @[Reg.scala 27:20] + wire _T_101 = io_iccm_rw_addr[14:1] == redundant_address_1; // @[el2_ifu_iccm_mem.scala 53:105] + wire _T_104 = _T_101 & _T_10; // @[el2_ifu_iccm_mem.scala 53:145] + wire _T_105 = redundant_valid[1] & _T_104; // @[el2_ifu_iccm_mem.scala 53:71] + wire _T_108 = addr_bank_inc[14:1] == redundant_address_1; // @[el2_ifu_iccm_mem.scala 54:37] + wire _T_111 = _T_108 & _T_13; // @[el2_ifu_iccm_mem.scala 54:77] + wire _T_112 = _T_105 | _T_111; // @[el2_ifu_iccm_mem.scala 53:179] + wire _T_119 = _T_101 & _T_15; // @[el2_ifu_iccm_mem.scala 53:145] + wire _T_120 = redundant_valid[1] & _T_119; // @[el2_ifu_iccm_mem.scala 53:71] + wire _T_126 = _T_108 & _T_18; // @[el2_ifu_iccm_mem.scala 54:77] + wire _T_127 = _T_120 | _T_126; // @[el2_ifu_iccm_mem.scala 53:179] + wire _T_134 = _T_101 & _T_20; // @[el2_ifu_iccm_mem.scala 53:145] + wire _T_135 = redundant_valid[1] & _T_134; // @[el2_ifu_iccm_mem.scala 53:71] + wire _T_141 = _T_108 & _T_23; // @[el2_ifu_iccm_mem.scala 54:77] + wire _T_142 = _T_135 | _T_141; // @[el2_ifu_iccm_mem.scala 53:179] + wire _T_149 = _T_101 & _T_25; // @[el2_ifu_iccm_mem.scala 53:145] + wire _T_150 = redundant_valid[1] & _T_149; // @[el2_ifu_iccm_mem.scala 53:71] + wire _T_156 = _T_108 & _T_28; // @[el2_ifu_iccm_mem.scala 54:77] + wire _T_157 = _T_150 | _T_156; // @[el2_ifu_iccm_mem.scala 53:179] + wire [3:0] sel_red1 = {_T_157,_T_142,_T_127,_T_112}; // @[Cat.scala 29:58] + reg [13:0] redundant_address_0; // @[Reg.scala 27:20] + wire _T_163 = io_iccm_rw_addr[14:1] == redundant_address_0; // @[el2_ifu_iccm_mem.scala 55:105] + wire _T_166 = _T_163 & _T_10; // @[el2_ifu_iccm_mem.scala 55:145] + wire _T_167 = redundant_valid[0] & _T_166; // @[el2_ifu_iccm_mem.scala 55:71] + wire _T_170 = addr_bank_inc[14:1] == redundant_address_0; // @[el2_ifu_iccm_mem.scala 56:37] + wire _T_173 = _T_170 & _T_13; // @[el2_ifu_iccm_mem.scala 56:77] + wire _T_174 = _T_167 | _T_173; // @[el2_ifu_iccm_mem.scala 55:179] + wire _T_181 = _T_163 & _T_15; // @[el2_ifu_iccm_mem.scala 55:145] + wire _T_182 = redundant_valid[0] & _T_181; // @[el2_ifu_iccm_mem.scala 55:71] + wire _T_188 = _T_170 & _T_18; // @[el2_ifu_iccm_mem.scala 56:77] + wire _T_189 = _T_182 | _T_188; // @[el2_ifu_iccm_mem.scala 55:179] + wire _T_196 = _T_163 & _T_20; // @[el2_ifu_iccm_mem.scala 55:145] + wire _T_197 = redundant_valid[0] & _T_196; // @[el2_ifu_iccm_mem.scala 55:71] + wire _T_203 = _T_170 & _T_23; // @[el2_ifu_iccm_mem.scala 56:77] + wire _T_204 = _T_197 | _T_203; // @[el2_ifu_iccm_mem.scala 55:179] + wire _T_211 = _T_163 & _T_25; // @[el2_ifu_iccm_mem.scala 55:145] + wire _T_212 = redundant_valid[0] & _T_211; // @[el2_ifu_iccm_mem.scala 55:71] + wire _T_218 = _T_170 & _T_28; // @[el2_ifu_iccm_mem.scala 56:77] + wire _T_219 = _T_212 | _T_218; // @[el2_ifu_iccm_mem.scala 55:179] + wire [3:0] sel_red0 = {_T_219,_T_204,_T_189,_T_174}; // @[Cat.scala 29:58] + reg [3:0] sel_red0_q; // @[el2_ifu_iccm_mem.scala 58:27] + reg [3:0] sel_red1_q; // @[el2_ifu_iccm_mem.scala 59:27] + wire _T_227 = ~sel_red0_q[0]; // @[el2_ifu_iccm_mem.scala 65:36] + wire _T_229 = ~sel_red1_q[0]; // @[el2_ifu_iccm_mem.scala 65:53] + wire _T_230 = _T_227 & _T_229; // @[el2_ifu_iccm_mem.scala 65:51] + reg [38:0] redundant_data_1; // @[Reg.scala 27:20] + wire [38:0] _T_232 = sel_red1_q[0] ? redundant_data_1 : 39'h0; // @[Mux.scala 27:72] + reg [38:0] redundant_data_0; // @[Reg.scala 27:20] + wire [38:0] _T_233 = sel_red0_q[0] ? redundant_data_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_0 = iccm_mem_0__T_97_data; // @[el2_ifu_iccm_mem.scala 45:28 el2_ifu_iccm_mem.scala 47:18] + wire [38:0] _T_234 = _T_230 ? iccm_bank_dout_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_235 = _T_232 | _T_233; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_fn_0 = _T_235 | _T_234; // @[Mux.scala 27:72] + wire _T_242 = ~sel_red0_q[1]; // @[el2_ifu_iccm_mem.scala 65:36] + wire _T_244 = ~sel_red1_q[1]; // @[el2_ifu_iccm_mem.scala 65:53] + wire _T_245 = _T_242 & _T_244; // @[el2_ifu_iccm_mem.scala 65:51] + wire [38:0] _T_247 = sel_red1_q[1] ? redundant_data_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_248 = sel_red0_q[1] ? redundant_data_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_1 = iccm_mem_1__T_97_data; // @[el2_ifu_iccm_mem.scala 45:28 el2_ifu_iccm_mem.scala 47:18] + wire [38:0] _T_249 = _T_245 ? iccm_bank_dout_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_250 = _T_247 | _T_248; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_fn_1 = _T_250 | _T_249; // @[Mux.scala 27:72] + wire _T_257 = ~sel_red0_q[2]; // @[el2_ifu_iccm_mem.scala 65:36] + wire _T_259 = ~sel_red1_q[2]; // @[el2_ifu_iccm_mem.scala 65:53] + wire _T_260 = _T_257 & _T_259; // @[el2_ifu_iccm_mem.scala 65:51] + wire [38:0] _T_262 = sel_red1_q[2] ? redundant_data_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_263 = sel_red0_q[2] ? redundant_data_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_2 = iccm_mem_2__T_97_data; // @[el2_ifu_iccm_mem.scala 45:28 el2_ifu_iccm_mem.scala 47:18] + wire [38:0] _T_264 = _T_260 ? iccm_bank_dout_2 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_265 = _T_262 | _T_263; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_fn_2 = _T_265 | _T_264; // @[Mux.scala 27:72] + wire _T_272 = ~sel_red0_q[3]; // @[el2_ifu_iccm_mem.scala 65:36] + wire _T_274 = ~sel_red1_q[3]; // @[el2_ifu_iccm_mem.scala 65:53] + wire _T_275 = _T_272 & _T_274; // @[el2_ifu_iccm_mem.scala 65:51] + wire [38:0] _T_277 = sel_red1_q[3] ? redundant_data_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_278 = sel_red0_q[3] ? redundant_data_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_3 = iccm_mem_3__T_97_data; // @[el2_ifu_iccm_mem.scala 45:28 el2_ifu_iccm_mem.scala 47:18] + wire [38:0] _T_279 = _T_275 ? iccm_bank_dout_3 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_280 = _T_277 | _T_278; // @[Mux.scala 27:72] + wire [38:0] iccm_bank_dout_fn_3 = _T_280 | _T_279; // @[Mux.scala 27:72] + reg redundant_lru; // @[Reg.scala 27:20] + wire _T_282 = ~redundant_lru; // @[el2_ifu_iccm_mem.scala 67:20] + wire r0_addr_en = _T_282 & io_iccm_buf_correct_ecc; // @[el2_ifu_iccm_mem.scala 67:35] + wire r1_addr_en = redundant_lru & io_iccm_buf_correct_ecc; // @[el2_ifu_iccm_mem.scala 68:35] + wire _T_283 = |sel_red0; // @[el2_ifu_iccm_mem.scala 69:63] + wire _T_284 = |sel_red1; // @[el2_ifu_iccm_mem.scala 69:78] + wire _T_285 = _T_283 | _T_284; // @[el2_ifu_iccm_mem.scala 69:67] + wire _T_286 = _T_285 & io_iccm_rden; // @[el2_ifu_iccm_mem.scala 69:83] + wire _T_287 = _T_286 & io_iccm_correction_state; // @[el2_ifu_iccm_mem.scala 69:98] + wire redundant_lru_en = io_iccm_buf_correct_ecc | _T_287; // @[el2_ifu_iccm_mem.scala 69:50] + wire _GEN_11 = r1_addr_en | _T_298; // @[Reg.scala 28:19] + wire _GEN_12 = r0_addr_en | _T_299; // @[Reg.scala 28:19] + wire _T_303 = io_iccm_rw_addr[14:2] == redundant_address_0[13:1]; // @[el2_ifu_iccm_mem.scala 76:61] + wire _T_306 = io_iccm_rw_addr[1] & redundant_address_0[0]; // @[el2_ifu_iccm_mem.scala 77:26] + wire _T_309 = _T_306 | _T_1; // @[el2_ifu_iccm_mem.scala 77:52] + wire _T_310 = _T_303 & _T_309; // @[el2_ifu_iccm_mem.scala 76:102] + wire _T_312 = _T_310 & redundant_valid[0]; // @[el2_ifu_iccm_mem.scala 77:84] + wire _T_313 = _T_312 & io_iccm_wren; // @[el2_ifu_iccm_mem.scala 77:105] + wire redundant_data0_en = _T_313 | r0_addr_en; // @[el2_ifu_iccm_mem.scala 77:121] + wire _T_322 = redundant_address_0[0] & _T_1; // @[el2_ifu_iccm_mem.scala 79:104] + wire _T_323 = _T_306 | _T_322; // @[el2_ifu_iccm_mem.scala 79:78] + wire _T_331 = io_iccm_rw_addr[14:2] == redundant_address_1[13:1]; // @[el2_ifu_iccm_mem.scala 83:61] + wire _T_334 = io_iccm_rw_addr[1] & redundant_address_1[0]; // @[el2_ifu_iccm_mem.scala 84:26] + wire _T_337 = _T_334 | _T_1; // @[el2_ifu_iccm_mem.scala 84:52] + wire _T_338 = _T_331 & _T_337; // @[el2_ifu_iccm_mem.scala 83:102] + wire _T_340 = _T_338 & redundant_valid[1]; // @[el2_ifu_iccm_mem.scala 84:84] + wire _T_341 = _T_340 & io_iccm_wren; // @[el2_ifu_iccm_mem.scala 84:105] + wire redundant_data1_en = _T_341 | r0_addr_en; // @[el2_ifu_iccm_mem.scala 84:121] + wire _T_350 = redundant_address_1[0] & _T_1; // @[el2_ifu_iccm_mem.scala 86:104] + wire _T_351 = _T_334 | _T_350; // @[el2_ifu_iccm_mem.scala 86:78] + reg [2:0] iccm_rd_addr_lo_q; // @[el2_ifu_iccm_mem.scala 90:34] + reg [1:0] iccm_rd_addr_hi_q; // @[el2_ifu_iccm_mem.scala 91:34] + wire _T_359 = iccm_rd_addr_hi_q == 2'h0; // @[el2_ifu_iccm_mem.scala 93:86] + wire _T_361 = iccm_rd_addr_hi_q == 2'h1; // @[el2_ifu_iccm_mem.scala 93:86] + wire _T_363 = iccm_rd_addr_hi_q == 2'h2; // @[el2_ifu_iccm_mem.scala 93:86] + wire _T_365 = iccm_rd_addr_hi_q == 2'h3; // @[el2_ifu_iccm_mem.scala 93:86] + wire [31:0] _T_367 = _T_359 ? iccm_bank_dout_fn_0[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_368 = _T_361 ? iccm_bank_dout_fn_1[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_369 = _T_363 ? iccm_bank_dout_fn_2[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_370 = _T_365 ? iccm_bank_dout_fn_3[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_371 = _T_367 | _T_368; // @[Mux.scala 27:72] + wire [31:0] _T_372 = _T_371 | _T_369; // @[Mux.scala 27:72] + wire [31:0] _T_373 = _T_372 | _T_370; // @[Mux.scala 27:72] + wire _T_376 = iccm_rd_addr_lo_q[1:0] == 2'h0; // @[el2_ifu_iccm_mem.scala 94:77] + wire _T_379 = iccm_rd_addr_lo_q[1:0] == 2'h1; // @[el2_ifu_iccm_mem.scala 94:77] + wire _T_382 = iccm_rd_addr_lo_q[1:0] == 2'h2; // @[el2_ifu_iccm_mem.scala 94:77] + wire _T_385 = iccm_rd_addr_lo_q[1:0] == 2'h3; // @[el2_ifu_iccm_mem.scala 94:77] + wire [31:0] _T_387 = _T_376 ? iccm_bank_dout_fn_0[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_388 = _T_379 ? iccm_bank_dout_fn_1[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_389 = _T_382 ? iccm_bank_dout_fn_2[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_390 = _T_385 ? iccm_bank_dout_fn_3[31:0] : 32'h0; // @[Mux.scala 27:72] + wire [31:0] _T_391 = _T_387 | _T_388; // @[Mux.scala 27:72] + wire [31:0] _T_392 = _T_391 | _T_389; // @[Mux.scala 27:72] + wire [31:0] _T_393 = _T_392 | _T_390; // @[Mux.scala 27:72] + wire [63:0] iccm_rd_data_pre = {_T_373,_T_393}; // @[Cat.scala 29:58] + wire [63:0] _T_399 = {16'h0,iccm_rd_data_pre[63:16]}; // @[Cat.scala 29:58] + wire [38:0] _T_405 = _T_359 ? iccm_bank_dout_fn_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_406 = _T_361 ? iccm_bank_dout_fn_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_407 = _T_363 ? iccm_bank_dout_fn_2 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_408 = _T_365 ? iccm_bank_dout_fn_3 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_409 = _T_405 | _T_406; // @[Mux.scala 27:72] + wire [38:0] _T_410 = _T_409 | _T_407; // @[Mux.scala 27:72] + wire [38:0] _T_411 = _T_410 | _T_408; // @[Mux.scala 27:72] + wire [38:0] _T_421 = _T_376 ? iccm_bank_dout_fn_0 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_422 = _T_379 ? iccm_bank_dout_fn_1 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_423 = _T_382 ? iccm_bank_dout_fn_2 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_424 = _T_385 ? iccm_bank_dout_fn_3 : 39'h0; // @[Mux.scala 27:72] + wire [38:0] _T_425 = _T_421 | _T_422; // @[Mux.scala 27:72] + wire [38:0] _T_426 = _T_425 | _T_423; // @[Mux.scala 27:72] + wire [38:0] _T_427 = _T_426 | _T_424; // @[Mux.scala 27:72] + assign iccm_mem_0__T_97_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_0__T_97_data = iccm_mem_0[iccm_mem_0__T_97_addr]; // @[el2_ifu_iccm_mem.scala 40:21] + assign iccm_mem_0__T_93_data = io_iccm_wr_data[38:0]; + assign iccm_mem_0__T_93_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_0__T_93_mask = iccm_clken_0 & wren_bank_0; + assign iccm_mem_0__T_93_en = 1'h1; + assign iccm_mem_0__T_94_data = io_iccm_wr_data[38:0]; + assign iccm_mem_0__T_94_addr = wren_bank_1 ? io_iccm_rw_addr[14:3] : _T_66; + assign iccm_mem_0__T_94_mask = iccm_clken_0 & wren_bank_0; + assign iccm_mem_0__T_94_en = 1'h1; + assign iccm_mem_0__T_95_data = io_iccm_wr_data[38:0]; + assign iccm_mem_0__T_95_addr = wren_bank_2 ? io_iccm_rw_addr[14:3] : _T_73; + assign iccm_mem_0__T_95_mask = iccm_clken_0 & wren_bank_0; + assign iccm_mem_0__T_95_en = 1'h1; + assign iccm_mem_0__T_96_data = io_iccm_wr_data[38:0]; + assign iccm_mem_0__T_96_addr = wren_bank_3 ? io_iccm_rw_addr[14:3] : _T_80; + assign iccm_mem_0__T_96_mask = iccm_clken_0 & wren_bank_0; + assign iccm_mem_0__T_96_en = 1'h1; + assign iccm_mem_1__T_97_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_1__T_97_data = iccm_mem_1[iccm_mem_1__T_97_addr]; // @[el2_ifu_iccm_mem.scala 40:21] + assign iccm_mem_1__T_93_data = io_iccm_wr_data[77:39]; + assign iccm_mem_1__T_93_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_1__T_93_mask = iccm_clken_1 & wren_bank_1; + assign iccm_mem_1__T_93_en = 1'h1; + assign iccm_mem_1__T_94_data = io_iccm_wr_data[77:39]; + assign iccm_mem_1__T_94_addr = wren_bank_1 ? io_iccm_rw_addr[14:3] : _T_66; + assign iccm_mem_1__T_94_mask = iccm_clken_1 & wren_bank_1; + assign iccm_mem_1__T_94_en = 1'h1; + assign iccm_mem_1__T_95_data = io_iccm_wr_data[77:39]; + assign iccm_mem_1__T_95_addr = wren_bank_2 ? io_iccm_rw_addr[14:3] : _T_73; + assign iccm_mem_1__T_95_mask = iccm_clken_1 & wren_bank_1; + assign iccm_mem_1__T_95_en = 1'h1; + assign iccm_mem_1__T_96_data = io_iccm_wr_data[77:39]; + assign iccm_mem_1__T_96_addr = wren_bank_3 ? io_iccm_rw_addr[14:3] : _T_80; + assign iccm_mem_1__T_96_mask = iccm_clken_1 & wren_bank_1; + assign iccm_mem_1__T_96_en = 1'h1; + assign iccm_mem_2__T_97_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_2__T_97_data = iccm_mem_2[iccm_mem_2__T_97_addr]; // @[el2_ifu_iccm_mem.scala 40:21] + assign iccm_mem_2__T_93_data = io_iccm_wr_data[38:0]; + assign iccm_mem_2__T_93_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_2__T_93_mask = iccm_clken_2 & wren_bank_2; + assign iccm_mem_2__T_93_en = 1'h1; + assign iccm_mem_2__T_94_data = io_iccm_wr_data[38:0]; + assign iccm_mem_2__T_94_addr = wren_bank_1 ? io_iccm_rw_addr[14:3] : _T_66; + assign iccm_mem_2__T_94_mask = iccm_clken_2 & wren_bank_2; + assign iccm_mem_2__T_94_en = 1'h1; + assign iccm_mem_2__T_95_data = io_iccm_wr_data[38:0]; + assign iccm_mem_2__T_95_addr = wren_bank_2 ? io_iccm_rw_addr[14:3] : _T_73; + assign iccm_mem_2__T_95_mask = iccm_clken_2 & wren_bank_2; + assign iccm_mem_2__T_95_en = 1'h1; + assign iccm_mem_2__T_96_data = io_iccm_wr_data[38:0]; + assign iccm_mem_2__T_96_addr = wren_bank_3 ? io_iccm_rw_addr[14:3] : _T_80; + assign iccm_mem_2__T_96_mask = iccm_clken_2 & wren_bank_2; + assign iccm_mem_2__T_96_en = 1'h1; + assign iccm_mem_3__T_97_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_3__T_97_data = iccm_mem_3[iccm_mem_3__T_97_addr]; // @[el2_ifu_iccm_mem.scala 40:21] + assign iccm_mem_3__T_93_data = io_iccm_wr_data[77:39]; + assign iccm_mem_3__T_93_addr = wren_bank_0 ? io_iccm_rw_addr[14:3] : _T_59; + assign iccm_mem_3__T_93_mask = iccm_clken_3 & wren_bank_3; + assign iccm_mem_3__T_93_en = 1'h1; + assign iccm_mem_3__T_94_data = io_iccm_wr_data[77:39]; + assign iccm_mem_3__T_94_addr = wren_bank_1 ? io_iccm_rw_addr[14:3] : _T_66; + assign iccm_mem_3__T_94_mask = iccm_clken_3 & wren_bank_3; + assign iccm_mem_3__T_94_en = 1'h1; + assign iccm_mem_3__T_95_data = io_iccm_wr_data[77:39]; + assign iccm_mem_3__T_95_addr = wren_bank_2 ? io_iccm_rw_addr[14:3] : _T_73; + assign iccm_mem_3__T_95_mask = iccm_clken_3 & wren_bank_3; + assign iccm_mem_3__T_95_en = 1'h1; + assign iccm_mem_3__T_96_data = io_iccm_wr_data[77:39]; + assign iccm_mem_3__T_96_addr = wren_bank_3 ? io_iccm_rw_addr[14:3] : _T_80; + assign iccm_mem_3__T_96_mask = iccm_clken_3 & wren_bank_3; + assign iccm_mem_3__T_96_en = 1'h1; + assign io_iccm_rd_data = iccm_rd_addr_lo_q[0] ? _T_399 : iccm_rd_data_pre; // @[el2_ifu_iccm_mem.scala 22:19 el2_ifu_iccm_mem.scala 95:19] + assign io_iccm_rd_data_ecc = {_T_411,_T_427}; // @[el2_ifu_iccm_mem.scala 23:23 el2_ifu_iccm_mem.scala 96:23] +`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 = {2{`RANDOM}}; + for (initvar = 0; initvar < 4096; initvar = initvar+1) + iccm_mem_0[initvar] = _RAND_0[38:0]; + _RAND_1 = {2{`RANDOM}}; + for (initvar = 0; initvar < 4096; initvar = initvar+1) + iccm_mem_1[initvar] = _RAND_1[38:0]; + _RAND_2 = {2{`RANDOM}}; + for (initvar = 0; initvar < 4096; initvar = initvar+1) + iccm_mem_2[initvar] = _RAND_2[38:0]; + _RAND_3 = {2{`RANDOM}}; + for (initvar = 0; initvar < 4096; initvar = initvar+1) + iccm_mem_3[initvar] = _RAND_3[38:0]; +`endif // RANDOMIZE_MEM_INIT +`ifdef RANDOMIZE_REG_INIT + _RAND_4 = {1{`RANDOM}}; + _T_298 = _RAND_4[0:0]; + _RAND_5 = {1{`RANDOM}}; + _T_299 = _RAND_5[0:0]; + _RAND_6 = {1{`RANDOM}}; + redundant_address_1 = _RAND_6[13:0]; + _RAND_7 = {1{`RANDOM}}; + redundant_address_0 = _RAND_7[13:0]; + _RAND_8 = {1{`RANDOM}}; + sel_red0_q = _RAND_8[3:0]; + _RAND_9 = {1{`RANDOM}}; + sel_red1_q = _RAND_9[3:0]; + _RAND_10 = {2{`RANDOM}}; + redundant_data_1 = _RAND_10[38:0]; + _RAND_11 = {2{`RANDOM}}; + redundant_data_0 = _RAND_11[38:0]; + _RAND_12 = {1{`RANDOM}}; + redundant_lru = _RAND_12[0:0]; + _RAND_13 = {1{`RANDOM}}; + iccm_rd_addr_lo_q = _RAND_13[2:0]; + _RAND_14 = {1{`RANDOM}}; + iccm_rd_addr_hi_q = _RAND_14[1:0]; +`endif // RANDOMIZE_REG_INIT + `endif // RANDOMIZE +end // initial +`ifdef FIRRTL_AFTER_INITIAL +`FIRRTL_AFTER_INITIAL +`endif +`endif // SYNTHESIS + always @(posedge clock) begin + if(iccm_mem_0__T_93_en & iccm_mem_0__T_93_mask) begin + iccm_mem_0[iccm_mem_0__T_93_addr] <= iccm_mem_0__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_0__T_94_en & iccm_mem_0__T_94_mask) begin + iccm_mem_0[iccm_mem_0__T_94_addr] <= iccm_mem_0__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_0__T_95_en & iccm_mem_0__T_95_mask) begin + iccm_mem_0[iccm_mem_0__T_95_addr] <= iccm_mem_0__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_0__T_96_en & iccm_mem_0__T_96_mask) begin + iccm_mem_0[iccm_mem_0__T_96_addr] <= iccm_mem_0__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_1__T_93_en & iccm_mem_1__T_93_mask) begin + iccm_mem_1[iccm_mem_1__T_93_addr] <= iccm_mem_1__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_1__T_94_en & iccm_mem_1__T_94_mask) begin + iccm_mem_1[iccm_mem_1__T_94_addr] <= iccm_mem_1__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_1__T_95_en & iccm_mem_1__T_95_mask) begin + iccm_mem_1[iccm_mem_1__T_95_addr] <= iccm_mem_1__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_1__T_96_en & iccm_mem_1__T_96_mask) begin + iccm_mem_1[iccm_mem_1__T_96_addr] <= iccm_mem_1__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_2__T_93_en & iccm_mem_2__T_93_mask) begin + iccm_mem_2[iccm_mem_2__T_93_addr] <= iccm_mem_2__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_2__T_94_en & iccm_mem_2__T_94_mask) begin + iccm_mem_2[iccm_mem_2__T_94_addr] <= iccm_mem_2__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_2__T_95_en & iccm_mem_2__T_95_mask) begin + iccm_mem_2[iccm_mem_2__T_95_addr] <= iccm_mem_2__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_2__T_96_en & iccm_mem_2__T_96_mask) begin + iccm_mem_2[iccm_mem_2__T_96_addr] <= iccm_mem_2__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_3__T_93_en & iccm_mem_3__T_93_mask) begin + iccm_mem_3[iccm_mem_3__T_93_addr] <= iccm_mem_3__T_93_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_3__T_94_en & iccm_mem_3__T_94_mask) begin + iccm_mem_3[iccm_mem_3__T_94_addr] <= iccm_mem_3__T_94_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_3__T_95_en & iccm_mem_3__T_95_mask) begin + iccm_mem_3[iccm_mem_3__T_95_addr] <= iccm_mem_3__T_95_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if(iccm_mem_3__T_96_en & iccm_mem_3__T_96_mask) begin + iccm_mem_3[iccm_mem_3__T_96_addr] <= iccm_mem_3__T_96_data; // @[el2_ifu_iccm_mem.scala 40:21] + end + if (reset) begin + _T_298 <= 1'h0; + end else begin + _T_298 <= _GEN_11; + end + if (reset) begin + _T_299 <= 1'h0; + end else begin + _T_299 <= _GEN_12; + end + if (reset) begin + redundant_address_1 <= 14'h0; + end else if (r1_addr_en) begin + redundant_address_1 <= io_iccm_rw_addr[14:1]; + end + if (reset) begin + redundant_address_0 <= 14'h0; + end else if (r0_addr_en) begin + redundant_address_0 <= io_iccm_rw_addr[14:1]; + end + if (reset) begin + sel_red0_q <= 4'h0; + end else begin + sel_red0_q <= sel_red0; + end + if (reset) begin + sel_red1_q <= 4'h0; + end else begin + sel_red1_q <= sel_red1; + end + if (reset) begin + redundant_data_1 <= 39'h0; + end else if (redundant_data1_en) begin + if (_T_351) begin + redundant_data_1 <= iccm_bank_wr_data_1; + end else begin + redundant_data_1 <= iccm_bank_wr_data_0; + end + end + if (reset) begin + redundant_data_0 <= 39'h0; + end else if (redundant_data0_en) begin + if (_T_323) begin + redundant_data_0 <= iccm_bank_wr_data_1; + end else begin + redundant_data_0 <= iccm_bank_wr_data_0; + end + end + if (reset) begin + redundant_lru <= 1'h0; + end else if (redundant_lru_en) begin + if (io_iccm_buf_correct_ecc) begin + redundant_lru <= _T_282; + end else begin + redundant_lru <= _T_283; + end + end + if (reset) begin + iccm_rd_addr_lo_q <= 3'h0; + end else begin + iccm_rd_addr_lo_q <= io_iccm_rw_addr[2:0]; + end + if (reset) begin + iccm_rd_addr_hi_q <= 2'h0; + end else begin + iccm_rd_addr_hi_q <= addr_bank_inc[2:1]; + end + end +endmodule diff --git a/src/main/scala/ifu/el2_ifu_ic_mem.scala b/src/main/scala/ifu/el2_ifu_ic_mem.scala index 772a0d91..e113821f 100644 --- a/src/main/scala/ifu/el2_ifu_ic_mem.scala +++ b/src/main/scala/ifu/el2_ifu_ic_mem.scala @@ -94,10 +94,14 @@ class EL2_IC_TAG extends Module with el2_lib with param { val write_vec = VecInit.tabulate(ICACHE_NUM_WAYS)(i=>ic_tag_wren_q(i)&ic_tag_clken(i)) tag_mem.write(ic_rw_addr_q, VecInit.tabulate(ICACHE_NUM_WAYS)(i=>ic_tag_wr_data), write_vec) + val read_enable = VecInit.tabulate(ICACHE_NUM_WAYS)(i=>(!ic_tag_wren_q(i))&ic_tag_clken(i)) + val ic_tag_data_raw = (0 until ICACHE_NUM_WAYS).map(i=>Fill(Tag_Word,read_enable(i))&tag_mem.read(ic_rw_addr_q)(i)) + val w_tout = if(ICACHE_ECC) VecInit.tabulate(ICACHE_NUM_WAYS)(i=>Cat(ic_tag_data_raw(i)(25,21), ic_tag_data_raw(i)(31-ICACHE_TAG_LO,0))) else VecInit.tabulate(ICACHE_NUM_WAYS)(i=>Cat(ic_tag_data_raw(i)(21), ic_tag_data_raw(i)(31-ICACHE_TAG_LO,0))) + val ic_tag_corrected_ecc_unc = Wire(Vec(ICACHE_NUM_WAYS, UInt(7.W))) val ic_tag_corrected_data_unc = Wire(Vec(ICACHE_NUM_WAYS, UInt(32.W))) val ic_tag_single_ecc_error = Wire(Vec(ICACHE_NUM_WAYS, UInt(1.W))) diff --git a/src/main/scala/ifu/el2_ifu_iccm_mem.scala b/src/main/scala/ifu/el2_ifu_iccm_mem.scala new file mode 100644 index 00000000..194deb42 --- /dev/null +++ b/src/main/scala/ifu/el2_ifu_iccm_mem.scala @@ -0,0 +1,101 @@ +package ifu +import chisel3._ +import chisel3.util._ +import lib._ +import scala.math.pow + +class el2_ifu_iccm_mem extends Module with el2_lib { + val io = IO(new Bundle{ + val clk_override = Input(Bool()) + val iccm_wren = Input(Bool()) + val iccm_rden = Input(Bool()) + val iccm_rw_addr = Input(UInt((ICCM_BITS-1).W)) + val iccm_buf_correct_ecc = Input(Bool()) + val iccm_correction_state = Input(Bool()) + val iccm_wr_size = Input(UInt(3.W)) + val iccm_wr_data = Input(UInt(78.W)) + val iccm_rd_data = Output(UInt(64.W)) + val iccm_rd_data_ecc = Output(UInt(78.W)) + val scan_mode = Input(Bool()) + + }) + io.iccm_rd_data := 0.U + io.iccm_rd_data_ecc := 0.U + val addr_inc = Mux((io.iccm_wr_size(1,0)===3.U).asBool, 2.U(2.W), 1.U(2.W)) + val addr_bank_inc = io.iccm_rw_addr(ICCM_BITS-2,0) + addr_inc + + val iccm_bank_wr_data_vec = Wire(Vec(ICCM_NUM_BANKS, UInt(39.W))) + for(i<- 0 until ICCM_NUM_BANKS/2){ + iccm_bank_wr_data_vec(2*i) := io.iccm_wr_data(38,0) + iccm_bank_wr_data_vec((2*i)+1) := io.iccm_wr_data(77,39) + } + + val wren_bank = (0 until ICCM_NUM_BANKS).map(i=> io.iccm_wren&(io.iccm_rw_addr(ICCM_BANK_HI-1,1)===i.U)|(addr_bank_inc(ICCM_BANK_HI-1,1)===i.U)) + val iccm_bank_wr_data = iccm_bank_wr_data_vec + val rden_bank = (0 until ICCM_NUM_BANKS).map(i=> io.iccm_rden&(io.iccm_rw_addr(ICCM_BANK_HI-1,1)===i.U)|(addr_bank_inc(ICCM_BANK_HI-1,1)===i.U)) + val iccm_clken = for(i<- 0 until ICCM_NUM_BANKS) yield wren_bank(i) | rden_bank(i) | io.clk_override + val addr_bank = (0 until ICCM_NUM_BANKS).map(i=> Mux(wren_bank(i).asBool, io.iccm_rw_addr(ICCM_BITS-2, ICCM_BANK_INDEX_LO-1), + Mux((addr_bank_inc(ICCM_BANK_HI-1,1)===i.U),addr_bank_inc(ICCM_BITS-2,ICCM_BANK_INDEX_LO-1),io.iccm_rw_addr(ICCM_BITS-2,ICCM_BANK_INDEX_LO-1)))) + println(pow(2, ICCM_INDEX_BITS).intValue) + val iccm_mem = Mem(pow(2, ICCM_INDEX_BITS).intValue, Vec(ICCM_NUM_BANKS, UInt(39.W))) + + val write_vec = VecInit.tabulate(ICCM_NUM_BANKS)(i=>iccm_clken(i)&wren_bank(i)) + val read_enable = VecInit.tabulate(ICCM_NUM_BANKS)(i=>iccm_clken(i)&(!wren_bank(i))) + //io.test := addr_bank + val iccm_bank_dout = Wire(Vec(ICCM_NUM_BANKS, UInt(39.W))) + for(i<-0 until ICCM_NUM_BANKS) iccm_mem.write(addr_bank(i), iccm_bank_wr_data, write_vec) + iccm_bank_dout := iccm_mem.read(addr_bank(0)) + //io.test := iccm_bank_dout + val redundant_valid = WireInit(UInt(2.W), init = 0.U) + val redundant_address = Wire(Vec(2, UInt((ICCM_BITS-2).W))) + redundant_address := (0 until 2).map(i=>0.U) + + val sel_red1 = (0 until ICCM_NUM_BANKS).map(i=> (redundant_valid(1) & ((io.iccm_rw_addr(ICCM_BITS-2,1)===redundant_address(1)(ICCM_BITS-3,0)) & (io.iccm_rw_addr(2,1) === i.U)) | + ((addr_bank_inc(ICCM_BITS-2,1)===redundant_address(1)(ICCM_BITS-3,0)) & (addr_bank_inc(2,1) === i.U))).asUInt).reverse.reduce(Cat(_,_)) + val sel_red0 = (0 until ICCM_NUM_BANKS).map(i=> (redundant_valid(0) & ((io.iccm_rw_addr(ICCM_BITS-2,1)===redundant_address(0)(ICCM_BITS-3,0)) & (io.iccm_rw_addr(2,1) === i.U)) | + ((addr_bank_inc(ICCM_BITS-2,1)===redundant_address(0)(ICCM_BITS-3,0)) & (addr_bank_inc(2,1) === i.U))).asUInt).reverse.reduce(Cat(_,_)) + + val sel_red0_q = RegNext(sel_red0, init = 0.U) + val sel_red1_q = RegNext(sel_red1, init = 0.U) + val redundant_data = Wire(Vec(2, UInt(39.W))) + redundant_data := (0 until 2).map(i=>0.U) + val iccm_bank_dout_fn = (0 until ICCM_NUM_BANKS).map(i=> + Mux1H(Seq(sel_red1_q(i).asBool->redundant_data(1), + sel_red0_q(i).asBool->redundant_data(0), + (~sel_red0_q(i) & ~sel_red1_q(i)).asBool -> iccm_bank_dout(i)))) + val redundant_lru = WireInit(Bool(), init = 0.U) + val r0_addr_en = !redundant_lru & io.iccm_buf_correct_ecc + val r1_addr_en = redundant_lru & io.iccm_buf_correct_ecc + val redundant_lru_en = io.iccm_buf_correct_ecc | ((sel_red0.orR | sel_red1.orR) & io.iccm_rden & io.iccm_correction_state) + val redundant_lru_in = Mux(io.iccm_buf_correct_ecc, !redundant_lru, Mux(sel_red0.orR, 1.U, 0.U)) + redundant_lru := RegEnable(redundant_lru_in, 0.U, redundant_lru_en) + redundant_address(0) := RegEnable(io.iccm_rw_addr(ICCM_BITS-2,1), 0.U, r0_addr_en) + redundant_address(1) := RegEnable(io.iccm_rw_addr(ICCM_BITS-2,1), 0.U, r1_addr_en.asBool) + redundant_valid := Cat(RegEnable(1.U, 0.U, r1_addr_en.asBool),RegEnable(1.U, 0.U, r0_addr_en)) + + val redundant_data0_en = ((io.iccm_rw_addr(ICCM_BITS-2,2) === redundant_address(0)(ICCM_BITS-3,1)) & + ((io.iccm_rw_addr(1) & redundant_address(0)(0))| (io.iccm_wr_size(1,0)===3.U)) & redundant_valid(0) & io.iccm_wren) | + (!redundant_lru & io.iccm_buf_correct_ecc) + val redundant_data0_in = Mux(((io.iccm_rw_addr(1)&redundant_address(0)(0)) |(redundant_address(0)(0) & (io.iccm_wr_size(1,0)===3.U))).asBool, + io.iccm_wr_data(77,39), io.iccm_wr_data(38,0)) + redundant_data(0) := RegEnable(redundant_data0_in, 0.U, redundant_data0_en.asBool) + + val redundant_data1_en = ((io.iccm_rw_addr(ICCM_BITS-2,2) === redundant_address(1)(ICCM_BITS-3,1)) & + ((io.iccm_rw_addr(1) & redundant_address(1)(0))| (io.iccm_wr_size(1,0)===3.U)) & redundant_valid(1) & io.iccm_wren) | + (!redundant_lru & io.iccm_buf_correct_ecc) + val redundant_data1_in = Mux(((io.iccm_rw_addr(1)&redundant_address(1)(0)) |(redundant_address(1)(0) & (io.iccm_wr_size(1,0)===3.U))).asBool, + io.iccm_wr_data(77,39), io.iccm_wr_data(38,0)) + redundant_data(1) := RegEnable(redundant_data1_in, 0.U, redundant_data1_en.asBool) + + val iccm_rd_addr_lo_q = RegNext(io.iccm_rw_addr(ICCM_BANK_HI-1,0), 0.U) + val iccm_rd_addr_hi_q = RegNext(addr_bank_inc(ICCM_BANK_HI-1,1), 0.U) + + val iccm_rd_data_pre = Cat(Mux1H((0 until ICCM_NUM_BANKS).map(i=>(iccm_rd_addr_hi_q===i.U)->iccm_bank_dout_fn(i)(31,0))), + Mux1H((0 until ICCM_NUM_BANKS).map(i=>(iccm_rd_addr_lo_q(ICCM_BANK_HI-2,0)===i.U)->iccm_bank_dout_fn(i)(31,0)))) + io.iccm_rd_data := Mux(iccm_rd_addr_lo_q(0).asBool(),Cat(Fill(16,0.U),iccm_rd_data_pre(63,16)) ,iccm_rd_data_pre) + io.iccm_rd_data_ecc :=Cat(Mux1H((0 until ICCM_NUM_BANKS).map(i=>(iccm_rd_addr_hi_q===i.U)->iccm_bank_dout_fn(i))), + Mux1H((0 until ICCM_NUM_BANKS).map(i=>(iccm_rd_addr_lo_q(ICCM_BANK_HI-2,0)===i.U)->iccm_bank_dout_fn(i)))) +} +object ifu_iccm extends App { + println((new chisel3.stage.ChiselStage).emitVerilog(new el2_ifu_iccm_mem())) +} \ No newline at end of file diff --git a/src/main/scala/lib/el2_lib.scala b/src/main/scala/lib/el2_lib.scala index 67d4d282..8260d925 100644 --- a/src/main/scala/lib/el2_lib.scala +++ b/src/main/scala/lib/el2_lib.scala @@ -160,6 +160,7 @@ trait param { trait el2_lib extends param{ def repl(b:Int, a:UInt) = VecInit.tabulate(b)(i => a).reduce(Cat(_,_)) + // Configuration Methods def MEM_CAL : (Int, Int, Int, Int)= (ICACHE_WAYPACK, ICACHE_ECC) match{ diff --git a/target/scala-2.12/classes/ifu/EL2_IC_DATA$$anon$3.class b/target/scala-2.12/classes/ifu/EL2_IC_DATA$$anon$3.class index b2d8eb0fd81728f3a7277a6941855f3db6c93949..ed3f39efb999378bfed88dfb87948dba77aac7af 100644 GIT binary patch delta 255 zcmW;9KPW|E9LDkI_hxaZqD!-*qGmiVfIl1P86@2r9yi!p$W$o^-rolShT1g+Q zc{kG6;}&v6*g+Ky%wiWC*h33VylB6$Zv!~62^`uojx5KqUE{=_aB3ya><8y=7=@b# Q-4fbv8y$CvoSXgc|87K0k^lez delta 259 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 diff --git a/target/scala-2.12/classes/ifu/EL2_IC_TAG.class b/target/scala-2.12/classes/ifu/EL2_IC_TAG.class index 738742dbb69368e8649d4554522d97f9b79c0cd8..a7a14b7420415d49c8d829375d0dc12854fbeb90 100644 GIT binary patch delta 895 zcmZvaT}YE*6vv;_yP0Nd&%60OW*JRcic+G})Uq!^GBrv}Gc6gj&G|KLV;iO2m={(T zCwMN4AnGPaNA9AFu0oPRgd)2rBB4M6XPe(2blz9I>*k!_|M{QyJ?DMiGclx{7}CDF z?1L_>_dS9@XwKJ?1b(axBk4FapNnOY zOq`m}0Vkc9F)5M*E|nUII*87ITh+6qy`jW~rvPoDau=BJKvXBS@iH7;$iV1dnYf8K zoAL!Qoj?WWqg?5_7u%yPlAYVt%Ae5`;s%wIV=_&W6T2=s=-KI*37^HR;J~SvjpFXb z7O9<|7IHk~;KM~TiK|ppgoBYdoLlUt?`~bnle&1F`mz^G6~qHnVL{z;xu#2I&sE`B zZh#(~T(&?jMksnPWyJ!0SiaJn+y%|78%9_UjImyrVIJ6GefV$^wQG`}yJ-*;)~%a}d(@$Z*Gn~inY~txAM06) z_&`%xF@M8M|EhYUMmhRMemaIX40JTP(JBS_38kSKt2T8cE~&O>^9XUj(mXTqji#v4 zs43!lX)d1oKi4JFIoO~>T;z~K>87IG+sZA%9J(bh zzoIrdCBqZ&i&+`G5D-lU=#+vyo2(4o;FzXxr(aMk7{CI-aHZ$B0_HQcQ+6@G;VTOm>sTy@fKU#p2B)DAFLiu z@V!+8Q7=I{at}T96p|Do6xc%%2^A4+wt3wgo$nLhdO7EJIsfmR@BIIB6Y9AM^~)wh8o|boFL(Zz%TpC-y_poN5$;@;Ih!NJc+ zVg{J;{;H8k4;9r&ZC1#}*y%2@Bs@+fCe*AqsJtS3rV!tHCk*5K zx(P-wMsXDLHcT*v4I90=Ug%{*FvW&phK;}y8-+9*!xtNOz=t)P9*U1P2LwNFl}a^G zj0d;!i3H`D4A{A)2R{yNc_@C`x+VnpFb!hB_N0OEb!Di@WW6dNvR8`nEmG zR-}w{O)aTbS^7eLAx2U_kGOS;4%kCIzv?j7cqA{@p9AHS+J zIW59t2uRB!1R*GO>tI9(@iMZCG`D6{)w}&d(uxjD5Q^mMVY;Nzrv1nUv`J>?4a~uP zlmpDk-?Bk5m$^g-bBkf-5kD}Wu9Eq6F3MgO(0yh>eLD+9)YT9Z=+U-Yp+Y)j1&jRb qq#i4@f_+C^B2j);l~Pq5SirxdPRTg1gMSdFWh%!?BPZ%1bKgI8DoGju diff --git a/target/scala-2.12/classes/ifu/el2_ifu_iccm_mem$$anon$1.class b/target/scala-2.12/classes/ifu/el2_ifu_iccm_mem$$anon$1.class new file mode 100644 index 0000000000000000000000000000000000000000..80fe0146c680e8ebf6e0a65732bfaad3da21f6d1 GIT binary patch literal 3110 zcmaJ@ZBrCS5Pk-cb=MURP>e6}^^AbgQ#8Z~K?E_m1jGao^LknK7TLJBd)eC)HE-tq zALMT&q2i?~l}h>vysJ1RN0 z&27l#%_SajsTNrg{U+wt!&1$C)H*F&5ifAlS-F%+JgZq%PNXR|X5wIi7&dVz;a=QsSZ>qAVLTrjE|@rys9i8|G~q6q zIF?9XGI2cNUN&(e;a)LuGU4bfpCDcp=o)u@H<}PQFsO`hZ0I(X@t)mfG-&G$fkT5$ z*V|RO9}`zGYoHTzEoEKwtMxd&=XvT)XtF4Sd`rhIye+W5DNK`I){E3x)X|M4)`wNC zdJj!3Y5s<^lyuw!tjXyPu`3}|o#P7W5gl08LluW{Pi zk9!7fc>-dYY0z??uFpjBEw8ZZhGFCtWTzm)M_^z8Re{3RS*ew`{BPF8GD3sfWtBA# zDVAucxAeIAdX(Joxz~bmRHvVs6ff)`IdaE3_&OcOJ)B^nE9kt=-|YXU4a^pyv8_6IB6YA*hG8 zbAz7+iWlNfO40Y|uIR4@%r3ct3+w`&{C@35U)*iT^~F6zQg#qY*(@YwtB{n9LQ=K~ zN!cVMWs8uM4MI}32T~J)mQQi~g0ljtAl*6qD^CARrUPGc?2?N*9+Qs&RKOsHNCm@D zfzM>Yh7x>82|k+z?^c2j;~f2G!#c#jf%R0+P61$QgK$CP1@X2Cs5 z@Np&hau%FZf=?*HSF+$UHJ+p~lSkXzv zk75t`T`-{YMPXo^Eoh0g|2fxxBw1aAx1 zh!gmVvYi6gayhn-uQ?ee)oIw|*iB=-r2V9ONe4*xlk&Rx>%})5JNb12zU9Az$nQue v`Dl;7^pmoQ@d1WYe80p4bDiI@cwmp=+dt-5Jc6$$4s2S2?;{T1(+d6rI^m-Q literal 0 HcmV?d00001 diff --git a/target/scala-2.12/classes/ifu/el2_ifu_iccm_mem.class b/target/scala-2.12/classes/ifu/el2_ifu_iccm_mem.class new file mode 100644 index 0000000000000000000000000000000000000000..a8c341038ff2062e7b91c4587fd883ff1e14925b GIT binary patch literal 91212 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 VLo)oEPyEwDf$K25^y8k7{{#0?b(#PG literal 0 HcmV?d00001 diff --git a/target/scala-2.12/classes/ifu/ifu_ic$.class b/target/scala-2.12/classes/ifu/ifu_ic$.class index 0ae65ae4ef84606253e9212695e52eaadf73a8eb..5239241fc5b20595c130ffa3cf9a6bdc40bfef1e 100644 GIT binary patch delta 99 zcmbOtH$`s4O)kb4lW%d^0!c$&@yYt!o>0~VZYv<`G`9_qkUC@VJ6i iNlyOGV+m%(Fut7J$Lq`bl0lu}#pDOP6+qEQzTE)%7bGqK delta 99 zcmbOtH$`s4O)kbKlW%d^0!c$&@yYt!o>0~VZYv<`G`9_qkUC@VJ6i iNlyOGV+m%(Fg~5!$Lq`bltG>0$>ayT6+qEQzTE)t>m&LA diff --git a/target/scala-2.12/classes/ifu/ifu_ic$delayedInit$body.class b/target/scala-2.12/classes/ifu/ifu_ic$delayedInit$body.class index 6129b56aae707ad21a281a8e842b79fd7613333d..e621a24c0a737cf1d060115f8c20aa0b742e8b72 100644 GIT binary patch delta 19 Zcmcb~dXsg74HM&w$+k=ZK(dd?8vse|2MquK delta 19 Zcmcb~dXsg74HM&&$+k=ZK(dd?8vseI2L%8C diff --git a/target/scala-2.12/classes/ifu/ifu_iccm$.class b/target/scala-2.12/classes/ifu/ifu_iccm$.class new file mode 100644 index 0000000000000000000000000000000000000000..e4e13467ec7888bdcafa6b5f7df5e35f2caad032 GIT binary patch literal 3883 zcmbtX33n4!7`?As+7M{z0u;&~Bn?Y|f<=M|Z9$4@K|`yETBpfN8JNt3$%IWs+`xUq zefbHV;{t^P=lBEsQ6BG`rJ1%7bB@i)OyV-;*-zhzp zE5;)b0v+eIOIpg%%$d~5>GLw@M9?VER?caLmO4@@MbIp;LK=If0==oCEbesQ3v8)s z>*givf=rD`=bV*4u9x{bu`-%5GR<18&I49$Kz9)JyRCwI-9Aw%sRGi&QQB6B&eIZGi>E0^T>D! z=Pbh@2DF_jRvc~Gkg1Gbc7`g2g0!iftw-*lFLbP8x~6so3wFhH^rB1+SyyC!g3i;2 z_z`G5m@`x?hXfiE{gcGup!*oZDy)p60lflEUQ#`Y{+ekutJj2UL&A4XB+|7+V_1uI zOVEP#wCSAF3DlCjG_BP{5ZWZVOmT)!D zsj_q&X*1G!o#I8_lsKVqO4bmsF2#e^@N^OZn2%0V*`2IQG)Sw?JeA>Pam}>MLdA@m z@^XAoU=<-%+^~?F*ihZI)*~2>Vnp@QI=>{3n)#BYn@*hK>g&-W_jRd@MCz0+^Rhsm zd|L6)ytQ-;OEKDp;~@F;=GaHl7)X^JZAPYs-6xXMjEo=?#hCKh&1kE1RPKU&N>I|*SQ#^gOB-7yr^K%QQ>njXvhLP1BN$}3%r6^v+ z%S`$eHmz1F8RUwtxh|P249dO=t&@063-rjM?o1L5!RQ1M@5de z5~q=4kjHw$8xkN#60}f?vbe}JEf*`Ap~z-U=3mQ|s@r9X zG6;8z+vX(8WkIU$)S&y<@Va8gHw4zIR+{ULFqbQOkKj#KX=1^QRxG{>Z$)tfZ^y6+ zn^k?k%kAZ!mHk?lUd7V+U>E|wQi6(?c~2}I2Goa%v&3tUfEzv0k*bRb-se$f+OnLo zV{0XW+cjL(IW;kI%pjTk<|txgDh&TO*! zjHx*lo3-BLon3fBGUa%sI4$kdiXpfm8H>laNsX+*XMZs|B1^W+X^zbExa4JhO0%`1 zh!H%H-Lr;(I+q3F~IBN3XB1g@F#U^%Fu$z0` z#9&)^ZBxa@*6mcImG=fUSlwsNEy{f9uJur+4J)vcE4R7Q#k=~8JVe7itp3e?VEv=d z7fA80M4FTLvEf(#Xuwyzwz!Kqe9hl6PXHTT|71*TW<1LJ0ZKP0>EyQi=vT%UYp?Jm zd~IcU3zD?x#T&;r)B?Wcx0!>NsR?Yub}B7$u&Z7NYY2=8Os;WFwi8PakrYjP3E#oM zFLb*&~X7yIf>W-y%0pqoq=_WSr$ckd3;^~B?${sa*?h$rVj zZiE_=Ey?wFF;IV8YODNxQ*kZFAv{Gx3-;|U()F9H7V_bc>5g7C*!}(6z^K(<>qCs3 zxrd`FYZ0p1JOep4SO3@1%ny+G9nU<(7!}4d50C@Kw#}k2&dd1&P20Bb=xv&XISacQ zs^VF28g8Yu>Vmzr6UAzj;m}_Pdv1_*+<+eTV}*Ov$ahg(!e#ab{rUCYp#JUfBOi8q z8R$*k!>_-} zYm_hAu!Ozai|_f|fCzrzy^p`9(27&Y;xr~Oi5K`ijZZ0`#gCLYEXZF9Zw`8_bg4op hK;6D4SApY`4N7uFp8%_yvk3d$dJ?Jv1b(6w`~yP!ovHu; literal 0 HcmV?d00001 diff --git a/target/scala-2.12/classes/ifu/ifu_iccm$delayedInit$body.class b/target/scala-2.12/classes/ifu/ifu_iccm$delayedInit$body.class new file mode 100644 index 0000000000000000000000000000000000000000..4d02b84c242381ca780655980abfa319fd7bb5f2 GIT binary patch literal 743 zcmZ`%O>fgc5Pg#mhoni9hLTdCEzp3{R>Bm)DF_J=l_DhtDQ&OO+TONX?A^#&Bl52R z@gZ@5BN9IfF?PZsl{oCq&hyOMH_!X~&-Why9^*b?L!BlruaWZos2#{qOl8p1%C3&D2U!=vX`95#m{9L8 zT-7BM#dsV}39Fr*{)Koa+)(H<_qBH+ecP?VL8*)!DumiXX9-op=3MG49gL0Aw#_B! zn$59K$ai*5s#r$7f*KlxwZ$o3nD;U`<~d7f5(>wMy(7YU|35{nW);`UxQZ4R+jBKx zTNdZJY#q<%JXL(bGeWboSldmd-AJVsaEl3Fnm}d-X?d7Lo{W!#7c$c98@B#L#463_ zU~OoH|8^k8^Sm*T_S^(-L@Xl7PP4Si&?K=h4^&E0AEv*rr$eP>PoEn0Jwve1<`(!J z@I9&5e9B=3S5RhTld~rriR04lXDofi$|tOS$cnajcd}1DZu7Z1E5miHb4EPbO{PjI z1{`x78+*S{q@TNcUzqJ1Ha;?z$DM2^2bT$3v!*#Aw`ckYce$a+zA})jfh&vTri3WzX&!cLj# zvtVHE_D{GYRFDz!+<(x!3dYOVjRaZ-mMvA%G%NPs z+L_|3U`vt~wy=z?R7S3M4XcI8K}O$RKT_mU-C!l-(TBBsP2EH_o7D>YO-pLBrp|D$ z9@_h&wPGa@5<}(%v{U6x=l8O7-jJKk z@Qk|$RHO0qV!(drPISn@^|;RsgbY99&Nwb<3l>o;xl(2}N3IGjusU?hY64 zLU)fvY{&(VXiM$tu@KTN{yyRk6Wk@o4#$zh+n!H}h5d_B4!x1r_qi1Wpjj$IYJ~%eF5X{Ib=V_6u3pEkVY_1RN947|3fZZkZ%)Nf;^N6 uuTmGLsk9|kk5jWmi9eP4oWs(msUt&~Pyz*32xo|zBvVI_f>jF03cyd5AfxU8 literal 0 HcmV?d00001 diff --git a/target/scala-2.12/classes/lib/el2_lib.class b/target/scala-2.12/classes/lib/el2_lib.class index 10bbfec2c529077bd0d04ca87ad4e5488d116c8b..3db9dfbbcf880beedfc6edbfd4107b9152cfb6f8 100644 GIT binary patch delta 3602 zcmY*bc~q3w6@PcW8D%#3hCy)nhH)k+VG}SF5hI%jvMLUWTiA6FsZry}j7#ts)3^o$ zTuexfao@EOCbrR}iYJM!MFmeWMK^Iw=n&tAeEy9E5WSN0FQ)Ja%N7 z;3Qt0;DooadTOYMSp4L8>6C02K6{_E!YS-}GMY3#56wh7oW|z72+W>nB~&#rS~@K! zh-mvKMi8DYGMtuY2wi@LjKkA{HK%AEr!g_D6#j@Wq@(8lqP)WBCo^^6jD4|f$?v1f~3 z&EAvEIDK+>;F$PMR`(98pA)>u#NNZ_Ge;Ba&CDwJK+HBOD@8gl8_`iYO2y8%&a&d( zEEAl^lUb$kXVgxrkS>UoRq(}0L4u-(ov5}GzSnrs=u);2kWaG{w0`N;*NBzcPvajRmo*EQ)=^=CY63DfS6F%lhB}yQW&pKE=HSZ^37+jiLB-VZGEZTX9Ue zS;hMC>q0x+M7bzhx+y;{@=#9FbS+e{vB)9~$VprqB&A;c)iqW zAe<#|QZdId9P9cX9h(8HEuIKp&;&-C`dKl%$u6=1c$a++*Vz|%qj(+M_Et|Fp~h}! zEFN(>Ftjul?~|-1nOW+NeQ*mvrk?4Rm8?0ZczyRTWxe$ceC2bz8CUz!`B8u}wh-WO(t01WlE&n{GBLOEXw z2d*SJo8fAR$2(Q*q0Rm9>w(#<8ATH$~YTB2bp631-DijA(C2?f`6#A5V}$sOAbYR+B900tN24q;UTc0N+xTiI0Efe zfrRV)%-*VK8r2Ba&dr>)O0X_&4pc{)*g8(*U=v?3vNj54;TD-Iw+ZUXErAf(S`))H z`#6n*cES76$2%c-yK0Ds)h|V0|4IYroP9+03i9EXM9^+Qo>t4ra?>y5zDMNCg4|m> z5|7TG4Vi*%TM&pd7erv|e2X+njwhW3<@rX!c7eZ{ZzAlw0=5MP!YRUUQ@&meqvT{k zTC!lI6h*r*raT0q@aTdJh!c0MD@TKRR~U`tA_dc3!Gxx}lIVMd&g~8{77N~>!CqGo z>HA%yr8v1>q=>CE6JACgLBV--CcmuGg+`(j5j`ANEes^g8@2`aEmRHy@Cw^z0beOEDU1cJ)wAIS52)WLrFus;&{6C*c?n8DLx8vKZ zWWr1RI*-r=t(Ga0eRYi5X<{3Ns<}*$%U7H8$3g}qtJc6c=?tW(e}?fx(jj%|8ki7p z2GX=zNY~DQ4DC+H)ZT$CT{2A4t%Yn|H{|F(hg{u#$kQi-(|8n0y*;aw0A_VIrfG5G zdjE>8rxhdIxt>;RgMYn!M6zG1_wSQd1HeET)q`_Vc5oI$t|vHxXEcT4Vtc- z{#SguZu;L*cfn_yteCmULgO@Xj_y_l66P0!bBZ{JBySA9#^)pP+Z0+%eG%r+?U_qAXP$<^Q$sSLeCS%J2b`(_-2-UQr-EA^3Ld!)R(MOc#;WKA?t3q{H_P+_ zKivEjX_nB{4M+aM?!d7v^WYY}o1*D^uFWbR9sDr8<$H4A!xlxlB^QX(Whu#xbmgf|gRdMyzcj%go7-;QllhW(pWvH!3S*iR74eukIXL--z; z*Z9gj!0uNcg|}f+`#6922yAOl@rSqJkEHj7w_)XL<3xD72ydtGxuKx2DzLH-AOd2+ z1~0=1if{K0yygTcMm+MZSh_ugutk`2iH{q^rf!MXj0VSf465R1dfu(@zD5N@ysE%T)V=C1#O*IEf zI(NPZ_>Wz_48^;B89GVw3}JhG8J;8gD8o&{k1{M58J3F-iz&m?lwk>FSV|d|QHEzI b!*XxK-ff^c#tiH@YW5$24)2Nm+g1MsUv7}3 delta 3599 zcmY*bc~q1~67QOCMwkn};T~of89XwKa(EyTxdj1%ghTPS|ul@on@)5q-MRfCiIYvbq~Z$-YgD(Ijh|jUOAjyBTqY%M5ar4wdcn3?L^TWZI z0Q89omAd2rypSG<^JC1=g$*%z;BeVzOQ&QvvY9adSu5dG!edD$3;y0j173~M;U~|g z!MneD%$_z?IxPo_Q3t1);WYM4vysL*MimiKV zZoCmcQR&||{* zldSSRRyEJ7+Q2U2+Qcwoy^~l1m&9DhCPhn^Wj$Jp$0*q4wmD`zm}EfDBpvo7rNjHE zPA-zJh?O%$oHpGDA0+4CzUc<&#S_yrr9OGA zVBXHsL7(7!k*X*3e2R^13BtA`#fNaFnEzi=jBpJHQzEF9Q*G4Job+|WW^oOJXIOE4 zsuev`$APEta6eTiU8i~QoMxwnW73QWxQ@$aq*$-8SJ+iLHy^-E)(b0GpQ3?XlcLyl zC1ZU`HM@=jGq%DsLjq)%j{$R;ygPdGyOtxFGto3!iU)SgebaolP` zDZ^j7DJO}&xhWS4W=V#Qthp6tY|hY;^;w}knc)k!Xf`H1mhKDVXoL-|GfS->Gl~6` zd9uH;v21|NXP>Y$?CeSgYq*X2E`*y&k_?hW*McsawOM!=8czzt>0bBEC}ypX~{lWjC!?AM>t8~$ZU>7 zIo8~IdT{Pyd3G#(M#+a6?yzjSihb-ZoMrdmQ}!9&&Rz$fJ4&A$sf0(kHqVdRj=V{@ zCeM!FVM_LXE|52bGQh>p$I%316i{I zDvCW;tzqA(+SvE1L+rn*+W>A)K;c+F#|L19qhoHS5Q463rE&Q!OYw$b7i}ruH5PYA#G)$Tyu!iIOq_(Cr)0M z;O#FX9+tiugo7(}oOAvu*&)bBUlmS!1^M}MPL{X*O1|}!d|i1e&}K|1^no#W zY;gkE#Z~J`RiU=RpL%kZ3F9lg2<28pQhS4r?_SXt>s_P5{t8dh4_1UpcDYJ;w^w=- zUPk4>gbOMSgqxgEE4`F<1KTJ%XDYpUr&X}NtTapG^fx|X`9KCL(UK{by5)*_`($P|w94DOlR{0Pv5IC*Mo2>mMCakaWR)!ha1`+&l z)krDaRbYmy41}i=-HhJVR>JX|<9TFQ65(RiE!b4;OZE!kqpRAR@XG=ZR(mVM4XllK z{POsZssh6u+mHJbq@((@SZ`16b3xI?V-;>P0n`bl`Wo)|!xG(nWq4O5gqL-dGvnCjL9G49RqR2SUk%R6;w+N91~@BU9evp7Fd|hx8XdXCM%GG~ufYlv z)|M$Tpp@IXw%EzGntM{#@#^PvRWDreqDRW@!WR`i-r32iP}f!#L?1I9*R%>QFMQNF zD!5emc;|$ZOBFDbcaIAqFM8CuB#2b>c&E=rl(z}u`-0eCuEp|gUO2khjB>RKcW(2N z>SZcLt^!z3|2U4n+UA!%hi=eZx;^vg=FC?ySTG_H7P_s0LiZjhR%@X|T>z!(15l=Z z0Ogu!Sfp78i#6AvQu8lZqWJ-;wJ}g9yFtCY0~#DT+wBVafIGj-9W63_z>l^pB+XK~ zx`9YvY|>0_T>wM$WwKFA`y(G4{xcnN{y6ZLR+BU&&lGcwZu2BuATa+u4$-;igZYL; zWb4W1FXr=U8^;E0*<(_$A=F?qJfR3A1H$4X0IN_dl5A1oX3l6)G$|IObbyiAx!c!46kND*G52umqKEk#&H5tch@ X4z`2p7}L>FS9Sggx*T1ddldf%+pLdB