From e8e6b6ddb3fd7e0f84d555cca05cfc40b9d19de0 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Mon, 30 Dec 2024 00:36:45 +0800 Subject: [PATCH] Still need to fix --- TopOrigin.sv | 697 +++++++------ src/hex/mem.hex | 44 +- src/main/scala/common/Consts.scala | 30 +- src/main/scala/common/Instructions.scala | 27 +- src/main/scala/micore/Core.scala | 365 ++++--- src/main/scala/micore/Memory.scala | 38 +- src/main/scala/micore/Top.scala | 11 +- src/test/scala/micore/MicoreSpec.scala | 3 +- target/scala-2.13/-name-_2.13-0.1.0.jar | Bin 66919 -> 60652 bytes target/scala-2.13/zinc/inc_compile_2.13.zip | Bin 14709 -> 15351 bytes .../_global/_global/compileOutputs/previous | 2 +- .../compileIncremental/_global/streams/out | 58 +- .../compile/incOptions/_global/streams/out | 15 + .../compile/packageBin/_global/streams/inputs | 2 +- .../compile/packageBin/_global/streams/out | 8 - .../TopOrigin.lo.fir | 938 ++++++++++-------- 16 files changed, 1317 insertions(+), 921 deletions(-) diff --git a/TopOrigin.sv b/TopOrigin.sv index 881df86..8600283 100755 --- a/TopOrigin.sv +++ b/TopOrigin.sv @@ -1,4 +1,15 @@ // Generated by CIRCT firtool-1.62.0 +// Standard header to adapt well known macros for prints and assertions. + +// Users can define 'PRINTF_COND' to add an extra gate to prints. +`ifndef PRINTF_COND_ + `ifdef PRINTF_COND + `define PRINTF_COND_ (`PRINTF_COND) + `else // PRINTF_COND + `define PRINTF_COND_ 1 + `endif // PRINTF_COND +`endif // not def PRINTF_COND_ + // VCS coverage exclude_file module regfile_32x32( input [4:0] R0_addr, @@ -9,6 +20,10 @@ module regfile_32x32( input R1_en, R1_clk, output [31:0] R1_data, + input [4:0] R2_addr, + input R2_en, + R2_clk, + output [31:0] R2_data, input [4:0] W0_addr, input W0_en, W0_clk, @@ -16,24 +31,13 @@ module regfile_32x32( ); reg [31:0] Memory[0:31]; - reg _R0_en_d0; - reg [4:0] _R0_addr_d0; - always @(posedge R0_clk) begin - _R0_en_d0 <= R0_en; - _R0_addr_d0 <= R0_addr; - end // always @(posedge) - reg _R1_en_d0; - reg [4:0] _R1_addr_d0; - always @(posedge R1_clk) begin - _R1_en_d0 <= R1_en; - _R1_addr_d0 <= R1_addr; - end // always @(posedge) always @(posedge W0_clk) begin if (W0_en & 1'h1) Memory[W0_addr] <= W0_data; end // always @(posedge) - assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx; - assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx; + assign R0_data = R0_en ? Memory[R0_addr] : 32'bx; + assign R1_data = R1_en ? Memory[R1_addr] : 32'bx; + assign R2_data = R2_en ? Memory[R2_addr] : 32'bx; endmodule module Core( @@ -45,277 +49,279 @@ module Core( input [31:0] io_dmem_rdata, output io_dmem_wen, output [31:0] io_dmem_wdata, - output io_exit + output io_exit, + output [31:0] io_gp ); - wire [31:0] _regfile_ext_R0_data; - wire [31:0] _regfile_ext_R1_data; - reg [31:0] id_reg_pc; - reg [31:0] id_reg_inst; - reg [31:0] exe_reg_pc; - reg [4:0] exe_reg_wb_addr; - reg [31:0] exe_reg_op1_data; - reg [31:0] exe_reg_op2_data; - reg [31:0] exe_reg_rs2_data; - reg [4:0] exe_reg_exe_fun; - reg [1:0] exe_reg_mem_wen; - reg [1:0] exe_reg_rf_wen; - reg [2:0] exe_reg_wb_sel; - reg [31:0] exe_reg_imm_b_sext; - reg [31:0] mem_reg_pc; - reg [4:0] mem_reg_wb_addr; - reg [31:0] mem_reg_alu_out; - reg [31:0] mem_reg_rs2_data; - reg [1:0] mem_reg_rf_wen; - reg [2:0] mem_reg_wb_sel; - reg [1:0] mem_reg_mem_wen; - reg [4:0] wb_reg_wb_addr; - reg [1:0] wb_reg_rf_wen; - reg [31:0] wb_reg_wb_data; - reg [31:0] if_reg_pc; - wire _id_rs2_data_T_5 = wb_reg_rf_wen == 2'h1; - wire exe_br_flg = - exe_reg_exe_fun == 5'hC - ? exe_reg_op1_data != exe_reg_op2_data - : exe_reg_exe_fun == 5'hB & exe_reg_op1_data == exe_reg_op2_data; - wire exe_jmp_flg = exe_reg_wb_sel == 3'h3; + wire [31:0] mem_wb_data; + wire exe_jmp_flg; + wire exe_br_flg; + wire [31:0] _regfile_ext_R1_data; + wire [31:0] _regfile_ext_R2_data; + reg [31:0] id_reg_pc; + reg [31:0] id_reg_inst; + reg [31:0] exe_reg_pc; + reg [4:0] exe_reg_wb_addr; + reg [31:0] exe_reg_op1_data; + reg [31:0] exe_reg_op2_data; + reg [31:0] exe_reg_rs2_data; + reg [4:0] exe_reg_exe_fun; + reg [1:0] exe_reg_mem_wen; + reg [1:0] exe_reg_rf_wen; + reg [2:0] exe_reg_wb_sel; + reg [31:0] exe_reg_imm_b_sext; + reg [31:0] mem_reg_pc; + reg [4:0] mem_reg_wb_addr; + reg [31:0] mem_reg_rs2_data; + reg [1:0] mem_reg_mem_wen; + reg [1:0] mem_reg_rf_wen; + reg [2:0] mem_reg_wb_sel; + reg [31:0] mem_reg_alu_out; + reg [4:0] wb_reg_wb_addr; + reg [1:0] wb_reg_rf_wen; + reg [31:0] wb_reg_wb_data; + reg [31:0] if_reg_pc; + wire _id_inst_T = exe_br_flg | exe_jmp_flg; + wire _id_rs2_data_hazard_T = exe_reg_rf_wen == 2'h1; + wire stall_flg = + _id_rs2_data_hazard_T & (|(id_reg_inst[25:21])) + & id_reg_inst[25:21] == exe_reg_wb_addr | _id_rs2_data_hazard_T + & (|(id_reg_inst[20:16])) & id_reg_inst[20:16] == exe_reg_wb_addr; + wire [31:0] id_inst = _id_inst_T | stall_flg ? 32'h0 : id_reg_inst; + wire _id_rs2_data_T_2 = mem_reg_rf_wen == 2'h1; + wire _id_rs2_data_T_5 = wb_reg_rf_wen == 2'h1; + wire [31:0] id_rs1_data = + id_inst[25:21] == 5'h0 + ? 32'h0 + : id_inst[25:21] == mem_reg_wb_addr & _id_rs2_data_T_2 + ? mem_wb_data + : id_inst[25:21] == wb_reg_wb_addr & _id_rs2_data_T_5 + ? wb_reg_wb_data + : _regfile_ext_R2_data; + wire [31:0] id_rs2_data = + id_inst[20:16] == 5'h0 + ? 32'h0 + : id_inst[20:16] == mem_reg_wb_addr & _id_rs2_data_T_2 + ? mem_wb_data + : id_inst[20:16] == wb_reg_wb_addr & _id_rs2_data_T_5 + ? wb_reg_wb_data + : _regfile_ext_R1_data; + wire [16:0] _GEN = {id_inst[31:26], id_inst[10:0]}; + wire _csignals_T_5 = _GEN == 17'h20; + wire [19:0] _GEN_0 = {id_inst[31:28], id_inst[15:0]}; + wire _csignals_T_7 = _GEN_0 == 20'h80000; + wire _csignals_T_9 = _GEN == 17'h22; + wire _csignals_T_11 = _GEN == 17'h24; + wire _csignals_T_13 = _GEN == 17'h25; + wire _csignals_T_15 = _GEN == 17'h26; + wire _csignals_T_17 = _GEN_0 == 20'hC0000; + wire _csignals_T_19 = _GEN_0 == 20'hD0000; + wire _csignals_T_21 = _GEN == 17'h2A; + wire _csignals_T_23 = _GEN_0 == 20'h40000; + wire _csignals_T_25 = _GEN_0 == 20'h50000; + wire _csignals_T_27 = id_inst == 32'hC000000; + wire _csignals_T_29 = {id_inst[31:22], id_inst[9:0]} == 20'h78000; + wire _GEN_1 = _csignals_T_23 | _csignals_T_25; + wire _GEN_2 = _csignals_T_21 | _GEN_1; + wire [2:0] _csignals_T_70 = + _csignals_T_5 + ? 3'h1 + : _csignals_T_7 + ? 3'h2 + : _csignals_T_9 | _csignals_T_11 | _csignals_T_13 | _csignals_T_15 + ? 3'h1 + : _csignals_T_17 | _csignals_T_19 + ? 3'h2 + : _GEN_2 ? 3'h1 : _csignals_T_27 ? 3'h4 : {_csignals_T_29, 2'h1}; + wire [3:0][31:0] _GEN_3 = + {{{27'h0, id_inst[15:11]}}, {32'h0}, {id_reg_pc}, {id_rs1_data}}; + wire [31:0] id_op1_data = + _GEN_3[_csignals_T_5 | _csignals_T_7 | _csignals_T_9 | _csignals_T_11 | _csignals_T_13 + | _csignals_T_15 | _csignals_T_17 | _csignals_T_19 | _GEN_2 + ? 2'h0 + : _csignals_T_27 ? 2'h1 : {_csignals_T_29, 1'h0}]; + wire [33:0] id_op2_data = + _csignals_T_70 == 3'h1 + ? {2'h0, id_rs2_data} + : _csignals_T_70 == 3'h2 + ? {2'h0, {16{id_inst[15]}}, id_inst[15:0]} + : _csignals_T_70 == 3'h3 + ? {2'h0, {22{id_inst[15]}}, id_inst[15:11], id_inst[25:21]} + : _csignals_T_70 == 3'h4 + ? {{6{id_inst[23]}}, id_inst[25:0], 2'h0} + : {2'h0, _csignals_T_70 == 3'h5 ? {id_inst[15:0], 16'h0} : 32'h0}; + wire [31:0] _exe_alu_out_T_30 = exe_reg_op1_data + exe_reg_op2_data; + wire [62:0] _exe_alu_out_T_14 = {31'h0, exe_reg_op1_data} << exe_reg_op2_data[4:0]; + wire [31:0] _GEN_4 = {27'h0, exe_reg_op2_data[4:0]}; + wire [31:0] _exe_alu_out_T_46 = + exe_reg_exe_fun == 5'h1 + ? _exe_alu_out_T_30 + : exe_reg_exe_fun == 5'h2 + ? exe_reg_op1_data - exe_reg_op2_data + : exe_reg_exe_fun == 5'h3 + ? exe_reg_op1_data & exe_reg_op2_data + : exe_reg_exe_fun == 5'h4 + ? exe_reg_op1_data | exe_reg_op2_data + : exe_reg_exe_fun == 5'h5 + ? exe_reg_op1_data ^ exe_reg_op2_data + : exe_reg_exe_fun == 5'h6 + ? _exe_alu_out_T_14[31:0] + : exe_reg_exe_fun == 5'h7 + ? exe_reg_op1_data >> _GEN_4 + : exe_reg_exe_fun == 5'h8 + ? $signed($signed(exe_reg_op1_data) >>> _GEN_4) + : exe_reg_exe_fun == 5'h9 + ? {31'h0, + $signed(exe_reg_op1_data) < $signed(exe_reg_op2_data)} + : exe_reg_exe_fun == 5'hA + ? {31'h0, exe_reg_op1_data < exe_reg_op2_data} + : exe_reg_exe_fun == 5'h11 + ? _exe_alu_out_T_30 & 32'hFFFFFFFE + : exe_reg_exe_fun == 5'h12 + ? exe_reg_op1_data + : 32'h0; + wire _exe_br_flg_T_3 = exe_reg_op1_data == exe_reg_op2_data; + assign exe_br_flg = + exe_reg_exe_fun == 5'hB + ? _exe_br_flg_T_3 + : exe_reg_exe_fun == 5'hC & ~_exe_br_flg_T_3; + assign exe_jmp_flg = exe_reg_wb_sel == 3'h3; + assign mem_wb_data = + mem_reg_wb_sel == 3'h2 + ? io_dmem_rdata + : mem_reg_wb_sel == 3'h3 ? mem_reg_pc + 32'h4 : mem_reg_alu_out; + `ifndef SYNTHESIS + always @(posedge clock) begin + if ((`PRINTF_COND_) & ~reset) begin + $fwrite(32'h80000002, "---------------------\n"); + $fwrite(32'h80000002, "if_reg_pc: 0x%x\n", if_reg_pc); + $fwrite(32'h80000002, "id_reg_pc: 0x%x\n", id_reg_pc); + $fwrite(32'h80000002, "id_reg_inst: 0x%x\n", id_reg_inst); + $fwrite(32'h80000002, "id_inst: 0x%x\n", id_inst); + $fwrite(32'h80000002, "id_rs1_data: 0x%x\n", id_rs1_data); + $fwrite(32'h80000002, "id_rs2_data: 0x%x\n", id_rs2_data); + $fwrite(32'h80000002, "exe_reg_pc: 0x%x\n", exe_reg_pc); + $fwrite(32'h80000002, "exe_reg_op1_data: 0x%x\n", id_op1_data); + $fwrite(32'h80000002, "exe_reg_op2_data: 0x%x\n", id_op2_data); + $fwrite(32'h80000002, "exe_alu_out: 0x%x\n", _exe_alu_out_T_46); + $fwrite(32'h80000002, "mem_reg_pc: 0x%x\n", mem_reg_pc); + $fwrite(32'h80000002, "mem_wb_data: 0x%x\n", mem_wb_data); + $fwrite(32'h80000002, "wb_reg_wb_data: 0%x\n", wb_reg_wb_data); + $fwrite(32'h80000002, "---------------------\n"); + end + end // always @(posedge) + `endif // not def SYNTHESIS always @(posedge clock) begin - automatic logic _id_inst_T = exe_br_flg | exe_jmp_flg; - automatic logic _id_rs2_data_hazard_T = exe_reg_rf_wen == 2'h1; - automatic logic stall_flg; - automatic logic [31:0] id_inst; - automatic logic _id_rs2_data_T_2; - automatic logic _id_rs2_data_T; - automatic logic [31:0] _id_rs2_data_T_8; - automatic logic [16:0] _GEN; - automatic logic _csignals_T_5; - automatic logic [19:0] _GEN_0; - automatic logic _csignals_T_7; - automatic logic _csignals_T_9; - automatic logic _csignals_T_11; - automatic logic _csignals_T_13; - automatic logic _csignals_T_15; - automatic logic _csignals_T_17; - automatic logic _csignals_T_19; - automatic logic [16:0] _GEN_1; - automatic logic _csignals_T_21; - automatic logic _csignals_T_23; - automatic logic _csignals_T_25; - automatic logic _csignals_T_27; - automatic logic _csignals_T_29; - automatic logic _csignals_T_31; - automatic logic _csignals_T_33; - automatic logic _csignals_T_35; - automatic logic _csignals_T_37; - automatic logic _csignals_T_39; - automatic logic _GEN_2; - automatic logic _GEN_3; - automatic logic [1:0] csignals_1; - automatic logic [2:0] _csignals_T_95; - automatic logic [31:0] _GEN_4 = {27'h0, exe_reg_op2_data[4:0]}; - automatic logic [62:0] _exe_alu_out_T_8 = - {31'h0, exe_reg_op1_data} << exe_reg_op2_data[4:0]; - automatic logic [31:0] exe_alu_out; - stall_flg = - _id_rs2_data_hazard_T & (|(id_reg_inst[25:21])) - & id_reg_inst[25:21] == exe_reg_wb_addr | _id_rs2_data_hazard_T - & (|(id_reg_inst[20:16])) & id_reg_inst[20:16] == exe_reg_wb_addr; - id_inst = _id_inst_T | stall_flg ? 32'h0 : id_reg_inst; - _id_rs2_data_T_2 = mem_reg_rf_wen == 2'h1; - _id_rs2_data_T = id_reg_inst[20:16] == 5'h0; - _id_rs2_data_T_8 = - id_reg_inst[20:16] == mem_reg_wb_addr & _id_rs2_data_T_2 - ? mem_reg_alu_out - : id_reg_inst[20:16] == wb_reg_wb_addr & _id_rs2_data_T_5 - ? wb_reg_wb_data - : _regfile_ext_R0_data; - _GEN = {id_inst[31:26], id_inst[10:0]}; - _csignals_T_5 = _GEN == 17'h20; - _GEN_0 = {id_inst[31:28], id_inst[15:0]}; - _csignals_T_7 = _GEN_0 == 20'h80000; - _csignals_T_9 = _GEN == 17'h22; - _csignals_T_11 = _GEN == 17'h24; - _csignals_T_13 = _GEN == 17'h25; - _csignals_T_15 = _GEN == 17'h26; - _csignals_T_17 = _GEN_0 == 20'hC0000; - _csignals_T_19 = _GEN_0 == 20'hD0000; - _GEN_1 = {id_inst[30:20], id_inst[5:0]}; - _csignals_T_21 = _GEN_1 == 17'h0; - _csignals_T_23 = _GEN_1 == 17'h2; - _csignals_T_25 = _GEN_1 == 17'h3; - _csignals_T_27 = _GEN == 17'h2A; - _csignals_T_29 = _GEN_0 == 20'h40000; - _csignals_T_31 = _GEN_0 == 20'h50000; - _csignals_T_33 = id_inst == 32'hC000000; - _csignals_T_35 = _GEN_0 == 20'h8; - _csignals_T_37 = {id_inst[31:22], id_inst[9:0]} == 20'h78000; - _csignals_T_39 = id_inst == 32'h0; - _GEN_2 = _csignals_T_29 | _csignals_T_31; - _GEN_3 = _csignals_T_21 | _csignals_T_23 | _csignals_T_25 | _csignals_T_27 | _GEN_2; - csignals_1 = - _csignals_T_5 | _csignals_T_7 | _csignals_T_9 | _csignals_T_11 | _csignals_T_13 - | _csignals_T_15 | _csignals_T_17 | _csignals_T_19 | _GEN_3 - ? 2'h0 - : _csignals_T_33 - ? 2'h1 - : _csignals_T_35 ? 2'h0 : {_csignals_T_37 | _csignals_T_39, 1'h0}; - _csignals_T_95 = - _csignals_T_5 - ? 3'h1 - : _csignals_T_7 - ? 3'h2 - : _csignals_T_9 | _csignals_T_11 | _csignals_T_13 | _csignals_T_15 - ? 3'h1 - : _csignals_T_17 | _csignals_T_19 - ? 3'h2 - : _GEN_3 - ? 3'h1 - : _csignals_T_33 - ? 3'h4 - : _csignals_T_35 - ? 3'h0 - : _csignals_T_37 ? 3'h5 : {2'h0, ~_csignals_T_39}; - exe_alu_out = - exe_reg_exe_fun == 5'hE - ? exe_reg_op1_data - : exe_reg_exe_fun == 5'h9 - ? {31'h0, $signed(exe_reg_op1_data) < $signed(exe_reg_op2_data)} - : exe_reg_exe_fun == 5'h8 - ? $signed($signed(exe_reg_op1_data) >>> _GEN_4) - : exe_reg_exe_fun == 5'h7 - ? exe_reg_op1_data >> _GEN_4 - : exe_reg_exe_fun == 5'h6 - ? _exe_alu_out_T_8[31:0] - : exe_reg_exe_fun == 5'h5 - ? exe_reg_op1_data ^ exe_reg_op2_data - : exe_reg_exe_fun == 5'h4 - ? exe_reg_op1_data | exe_reg_op2_data - : exe_reg_exe_fun == 5'h3 - ? exe_reg_op1_data & exe_reg_op2_data - : exe_reg_exe_fun == 5'h2 - ? exe_reg_op1_data - exe_reg_op2_data - : exe_reg_exe_fun == 5'h1 - ? exe_reg_op1_data + exe_reg_op2_data - : 32'h0; - if (~stall_flg) - id_reg_pc <= if_reg_pc; - if (_id_inst_T) + if (reset) begin + id_reg_pc <= 32'h0; id_reg_inst <= 32'h0; - else if (~stall_flg) - id_reg_inst <= io_imem_inst; - exe_reg_pc <= id_reg_pc; - exe_reg_wb_addr <= id_reg_inst[15:11]; - if (csignals_1 == 2'h0) - exe_reg_op1_data <= - id_reg_inst[25:21] == 5'h0 - ? 32'h0 - : id_reg_inst[25:21] == mem_reg_wb_addr & _id_rs2_data_T_2 - ? mem_reg_alu_out - : id_reg_inst[25:21] == wb_reg_wb_addr & _id_rs2_data_T_5 - ? wb_reg_wb_data - : _regfile_ext_R1_data; - else if (csignals_1 == 2'h1) - exe_reg_op1_data <= id_reg_pc; - else + exe_reg_pc <= 32'h0; + exe_reg_wb_addr <= 5'h0; exe_reg_op1_data <= 32'h0; - if (_csignals_T_95 == 3'h5) - exe_reg_op2_data <= {id_inst[15:0], 16'h0}; - else if (_csignals_T_95 == 3'h4) - exe_reg_op2_data <= {{4{id_inst[25]}}, id_inst[25:0], 2'h0}; - else if (_csignals_T_95 == 3'h3 | _csignals_T_95 == 3'h2) - exe_reg_op2_data <= {{16{id_inst[15]}}, id_inst[15:0]}; - else if (_csignals_T_95 != 3'h1 | _id_rs2_data_T) exe_reg_op2_data <= 32'h0; - else - exe_reg_op2_data <= _id_rs2_data_T_8; - exe_reg_rs2_data <= _id_rs2_data_T ? 32'h0 : _id_rs2_data_T_8; - if (_csignals_T_5 | _csignals_T_7) - exe_reg_exe_fun <= 5'h1; - else if (_csignals_T_9) - exe_reg_exe_fun <= 5'h2; - else if (_csignals_T_11) - exe_reg_exe_fun <= 5'h3; - else if (_csignals_T_13) - exe_reg_exe_fun <= 5'h4; - else if (_csignals_T_15) - exe_reg_exe_fun <= 5'h5; - else if (_csignals_T_17) - exe_reg_exe_fun <= 5'h3; - else if (_csignals_T_19) - exe_reg_exe_fun <= 5'h4; - else if (_csignals_T_21) - exe_reg_exe_fun <= 5'h6; - else if (_csignals_T_23) - exe_reg_exe_fun <= 5'h7; - else if (_csignals_T_25) - exe_reg_exe_fun <= 5'h8; - else if (_csignals_T_27) - exe_reg_exe_fun <= 5'h9; - else if (_csignals_T_29) - exe_reg_exe_fun <= 5'hB; - else if (_csignals_T_31) - exe_reg_exe_fun <= 5'hC; - else if (_csignals_T_33) - exe_reg_exe_fun <= 5'h1; - else if (_csignals_T_35) - exe_reg_exe_fun <= 5'hE; - else - exe_reg_exe_fun <= {4'h0, _csignals_T_37}; - exe_reg_mem_wen <= 2'h0; - if (_csignals_T_5 | _csignals_T_7 | _csignals_T_9 | _csignals_T_11 | _csignals_T_13 - | _csignals_T_15 | _csignals_T_17 | _csignals_T_19 | _csignals_T_21 - | _csignals_T_23 | _csignals_T_25 | _csignals_T_27) begin - exe_reg_rf_wen <= 2'h1; - exe_reg_wb_sel <= 3'h1; - end - else if (_GEN_2) begin - exe_reg_rf_wen <= 2'h0; - exe_reg_wb_sel <= 3'h0; - end - else if (_csignals_T_33) begin - exe_reg_rf_wen <= 2'h1; - exe_reg_wb_sel <= 3'h3; - end - else if (_csignals_T_35) begin + exe_reg_rs2_data <= 32'h0; + exe_reg_exe_fun <= 5'h0; + exe_reg_mem_wen <= 2'h0; exe_reg_rf_wen <= 2'h0; exe_reg_wb_sel <= 3'h0; + exe_reg_imm_b_sext <= 32'h0; + mem_reg_pc <= 32'h0; + mem_reg_wb_addr <= 5'h0; + mem_reg_rs2_data <= 32'h0; + mem_reg_mem_wen <= 2'h0; + mem_reg_rf_wen <= 2'h0; + mem_reg_wb_sel <= 3'h0; + mem_reg_alu_out <= 32'h0; + wb_reg_wb_addr <= 5'h0; + wb_reg_rf_wen <= 2'h0; + wb_reg_wb_data <= 32'h0; + if_reg_pc <= 32'h400000; end else begin - exe_reg_rf_wen <= {1'h0, _csignals_T_37}; - exe_reg_wb_sel <= {2'h0, _csignals_T_37}; + automatic logic _GEN_5; + _GEN_5 = _csignals_T_27 | _csignals_T_29; + if (~stall_flg) + id_reg_pc <= if_reg_pc; + if (_id_inst_T) + id_reg_inst <= 32'h0; + else if (~stall_flg) + id_reg_inst <= io_imem_inst; + exe_reg_pc <= id_reg_pc; + exe_reg_wb_addr <= id_inst[15:11]; + exe_reg_op1_data <= id_op1_data; + exe_reg_op2_data <= id_op2_data[31:0]; + exe_reg_rs2_data <= id_rs2_data; + if (_csignals_T_5 | _csignals_T_7) + exe_reg_exe_fun <= 5'h1; + else if (_csignals_T_9) + exe_reg_exe_fun <= 5'h2; + else if (_csignals_T_11) + exe_reg_exe_fun <= 5'h3; + else if (_csignals_T_13) + exe_reg_exe_fun <= 5'h4; + else if (_csignals_T_15) + exe_reg_exe_fun <= 5'h5; + else if (_csignals_T_17) + exe_reg_exe_fun <= 5'h3; + else if (_csignals_T_19) + exe_reg_exe_fun <= 5'h4; + else if (_csignals_T_21) + exe_reg_exe_fun <= 5'h9; + else if (_csignals_T_23) + exe_reg_exe_fun <= 5'hB; + else if (_csignals_T_25) + exe_reg_exe_fun <= 5'hC; + else + exe_reg_exe_fun <= {4'h0, _GEN_5}; + exe_reg_mem_wen <= 2'h0; + if (_csignals_T_5 | _csignals_T_7 | _csignals_T_9 | _csignals_T_11 | _csignals_T_13 + | _csignals_T_15 | _csignals_T_17 | _csignals_T_19 | _csignals_T_21) begin + exe_reg_rf_wen <= 2'h1; + exe_reg_wb_sel <= 3'h1; + end + else if (_GEN_1) begin + exe_reg_rf_wen <= 2'h0; + exe_reg_wb_sel <= 3'h0; + end + else begin + exe_reg_rf_wen <= {1'h0, _GEN_5}; + if (_csignals_T_27) + exe_reg_wb_sel <= 3'h3; + else + exe_reg_wb_sel <= {2'h0, _csignals_T_29}; + end + exe_reg_imm_b_sext <= {{14{id_inst[15]}}, id_inst[15:0], 2'h0}; + mem_reg_pc <= exe_reg_pc; + mem_reg_wb_addr <= exe_reg_wb_addr; + mem_reg_rs2_data <= exe_reg_rs2_data; + mem_reg_mem_wen <= exe_reg_mem_wen; + mem_reg_rf_wen <= exe_reg_rf_wen; + mem_reg_wb_sel <= exe_reg_wb_sel; + mem_reg_alu_out <= _exe_alu_out_T_46; + wb_reg_wb_addr <= mem_reg_wb_addr; + wb_reg_rf_wen <= mem_reg_rf_wen; + wb_reg_wb_data <= mem_wb_data; + if (exe_br_flg) + if_reg_pc <= exe_reg_pc + exe_reg_imm_b_sext; + else if (exe_jmp_flg) + if_reg_pc <= _exe_alu_out_T_46; + else if (~stall_flg) + if_reg_pc <= if_reg_pc + 32'h4; end - exe_reg_imm_b_sext <= {{16{id_inst[15]}}, id_inst[15:0]}; - mem_reg_pc <= exe_reg_pc; - mem_reg_wb_addr <= exe_reg_wb_addr; - mem_reg_alu_out <= exe_alu_out; - mem_reg_rs2_data <= exe_reg_rs2_data; - mem_reg_rf_wen <= exe_reg_rf_wen; - mem_reg_wb_sel <= exe_reg_wb_sel; - mem_reg_mem_wen <= exe_reg_mem_wen; - wb_reg_wb_addr <= mem_reg_wb_addr; - wb_reg_rf_wen <= mem_reg_rf_wen; - wb_reg_wb_data <= - mem_reg_wb_sel == 3'h3 - ? mem_reg_pc + 32'h4 - : mem_reg_wb_sel == 3'h2 ? io_dmem_rdata : mem_reg_alu_out; - if (reset) - if_reg_pc <= 32'h0; - else if (exe_br_flg) - if_reg_pc <= exe_reg_pc + exe_reg_imm_b_sext; - else if (exe_jmp_flg) - if_reg_pc <= exe_alu_out; - else if (~stall_flg) - if_reg_pc <= if_reg_pc + 32'h4; end // always @(posedge) regfile_32x32 regfile_ext ( - .R0_addr (id_reg_inst[20:16]), + .R0_addr (5'h3), .R0_en (1'h1), .R0_clk (clock), - .R0_data (_regfile_ext_R0_data), - .R1_addr (id_reg_inst[25:21]), + .R0_data (io_gp), + .R1_addr (id_inst[20:16]), .R1_en (1'h1), .R1_clk (clock), .R1_data (_regfile_ext_R1_data), + .R2_addr (id_inst[25:21]), + .R2_en (1'h1), + .R2_clk (clock), + .R2_data (_regfile_ext_R2_data), .W0_addr (wb_reg_wb_addr), .W0_en (_id_rs2_data_T_5), .W0_clk (clock), @@ -325,48 +331,84 @@ module Core( assign io_dmem_addr = mem_reg_alu_out; assign io_dmem_wen = mem_reg_mem_wen[0]; assign io_dmem_wdata = mem_reg_rs2_data; - assign io_exit = id_reg_inst == 32'hC0000000; + assign io_exit = id_reg_inst == 32'h114514; endmodule // VCS coverage exclude_file -module mem_512x32( - input [8:0] R0_addr, +module mem_4096x8( + input [11:0] R0_addr, input R0_en, R0_clk, - output [31:0] R0_data, - input [8:0] R1_addr, + output [7:0] R0_data, + input [11:0] R1_addr, input R1_en, R1_clk, - output [31:0] R1_data, - input [8:0] W0_addr, + output [7:0] R1_data, + input [11:0] R2_addr, + input R2_en, + R2_clk, + output [7:0] R2_data, + input [11:0] R3_addr, + input R3_en, + R3_clk, + output [7:0] R3_data, + input [11:0] R4_addr, + input R4_en, + R4_clk, + output [7:0] R4_data, + input [11:0] R5_addr, + input R5_en, + R5_clk, + output [7:0] R5_data, + input [11:0] R6_addr, + input R6_en, + R6_clk, + output [7:0] R6_data, + input [11:0] R7_addr, + input R7_en, + R7_clk, + output [7:0] R7_data, + input [11:0] W0_addr, input W0_en, W0_clk, - input [31:0] W0_data + input [7:0] W0_data, + input [11:0] W1_addr, + input W1_en, + W1_clk, + input [7:0] W1_data, + input [11:0] W2_addr, + input W2_en, + W2_clk, + input [7:0] W2_data, + input [11:0] W3_addr, + input W3_en, + W3_clk, + input [7:0] W3_data ); - reg [31:0] Memory[0:511]; - reg _R0_en_d0; - reg [8:0] _R0_addr_d0; - always @(posedge R0_clk) begin - _R0_en_d0 <= R0_en; - _R0_addr_d0 <= R0_addr; - end // always @(posedge) - reg _R1_en_d0; - reg [8:0] _R1_addr_d0; - always @(posedge R1_clk) begin - _R1_en_d0 <= R1_en; - _R1_addr_d0 <= R1_addr; - end // always @(posedge) + reg [7:0] Memory[0:4095]; always @(posedge W0_clk) begin if (W0_en & 1'h1) Memory[W0_addr] <= W0_data; + if (W1_en & 1'h1) + Memory[W1_addr] <= W1_data; + if (W2_en & 1'h1) + Memory[W2_addr] <= W2_data; + if (W3_en & 1'h1) + Memory[W3_addr] <= W3_data; end // always @(posedge) `ifdef ENABLE_INITIAL_MEM_ initial $readmemh("src/hex/mem.hex", Memory); `endif // ENABLE_INITIAL_MEM_ - assign R0_data = _R0_en_d0 ? Memory[_R0_addr_d0] : 32'bx; - assign R1_data = _R1_en_d0 ? Memory[_R1_addr_d0] : 32'bx; + assign R0_data = R0_en ? Memory[R0_addr] : 8'bx; + assign R1_data = R1_en ? Memory[R1_addr] : 8'bx; + assign R2_data = R2_en ? Memory[R2_addr] : 8'bx; + assign R3_data = R3_en ? Memory[R3_addr] : 8'bx; + assign R4_data = R4_en ? Memory[R4_addr] : 8'bx; + assign R5_data = R5_en ? Memory[R5_addr] : 8'bx; + assign R6_data = R6_en ? Memory[R6_addr] : 8'bx; + assign R7_data = R7_en ? Memory[R7_addr] : 8'bx; endmodule module Memory( @@ -379,26 +421,78 @@ module Memory( input [31:0] io_dmem_wdata ); - mem_512x32 mem_ext ( - .R0_addr (io_imem_addr[10:2]), + wire [7:0] _mem_ext_R0_data; + wire [7:0] _mem_ext_R1_data; + wire [7:0] _mem_ext_R2_data; + wire [7:0] _mem_ext_R3_data; + wire [7:0] _mem_ext_R4_data; + wire [7:0] _mem_ext_R5_data; + wire [7:0] _mem_ext_R6_data; + wire [7:0] _mem_ext_R7_data; + wire [11:0] _io_dmem_rdata_T = io_dmem_addr[11:0] + 12'h3; + wire [11:0] _io_dmem_rdata_T_3 = io_dmem_addr[11:0] + 12'h2; + wire [11:0] _io_dmem_rdata_T_6 = io_dmem_addr[11:0] + 12'h1; + mem_4096x8 mem_ext ( + .R0_addr (io_imem_addr[11:0]), .R0_en (1'h1), .R0_clk (clock), - .R0_data (io_imem_inst), - .R1_addr (io_dmem_addr[10:2]), + .R0_data (_mem_ext_R0_data), + .R1_addr (io_imem_addr[11:0] + 12'h1), .R1_en (1'h1), .R1_clk (clock), - .R1_data (io_dmem_rdata), - .W0_addr (io_dmem_addr[10:2]), + .R1_data (_mem_ext_R1_data), + .R2_addr (io_imem_addr[11:0] + 12'h2), + .R2_en (1'h1), + .R2_clk (clock), + .R2_data (_mem_ext_R2_data), + .R3_addr (io_imem_addr[11:0] + 12'h3), + .R3_en (1'h1), + .R3_clk (clock), + .R3_data (_mem_ext_R3_data), + .R4_addr (io_dmem_addr[11:0]), + .R4_en (1'h1), + .R4_clk (clock), + .R4_data (_mem_ext_R4_data), + .R5_addr (_io_dmem_rdata_T_6), + .R5_en (1'h1), + .R5_clk (clock), + .R5_data (_mem_ext_R5_data), + .R6_addr (_io_dmem_rdata_T_3), + .R6_en (1'h1), + .R6_clk (clock), + .R6_data (_mem_ext_R6_data), + .R7_addr (_io_dmem_rdata_T), + .R7_en (1'h1), + .R7_clk (clock), + .R7_data (_mem_ext_R7_data), + .W0_addr (_io_dmem_rdata_T), .W0_en (io_dmem_wen), .W0_clk (clock), - .W0_data (io_dmem_wdata) + .W0_data (io_dmem_wdata[31:24]), + .W1_addr (_io_dmem_rdata_T_3), + .W1_en (io_dmem_wen), + .W1_clk (clock), + .W1_data (io_dmem_wdata[23:16]), + .W2_addr (_io_dmem_rdata_T_6), + .W2_en (io_dmem_wen), + .W2_clk (clock), + .W2_data (io_dmem_wdata[15:8]), + .W3_addr (io_dmem_addr[11:0]), + .W3_en (io_dmem_wen), + .W3_clk (clock), + .W3_data (io_dmem_wdata[7:0]) ); + assign io_imem_inst = + {_mem_ext_R3_data, _mem_ext_R2_data, _mem_ext_R1_data, _mem_ext_R0_data}; + assign io_dmem_rdata = + {_mem_ext_R7_data, _mem_ext_R6_data, _mem_ext_R5_data, _mem_ext_R4_data}; endmodule module TopOrigin( - input clock, - reset, - output io_exit + input clock, + reset, + output io_exit, + output [31:0] io_gp ); wire [31:0] _memory_io_imem_inst; @@ -416,7 +510,8 @@ module TopOrigin( .io_dmem_rdata (_memory_io_dmem_rdata), .io_dmem_wen (_core_io_dmem_wen), .io_dmem_wdata (_core_io_dmem_wdata), - .io_exit (io_exit) + .io_exit (io_exit), + .io_gp (io_gp) ); Memory memory ( .clock (clock), diff --git a/src/hex/mem.hex b/src/hex/mem.hex index 1898c61..56ca829 100755 --- a/src/hex/mem.hex +++ b/src/hex/mem.hex @@ -1,8 +1,36 @@ -00 01 08 20 -00 00 10 20 -65 00 12 20 -20 80 08 02 -01 00 08 21 -2A 50 12 01 -FC FF 40 15 -00 00 00 00 +01 +00 +08 +20 +00 +00 +10 +20 +65 +00 +12 +20 +20 +80 +08 +02 +01 +00 +08 +21 +2a +50 +12 +01 +fc +ff +40 +15 +00 +00 +00 +00 +14 +45 +11 +00 \ No newline at end of file diff --git a/src/main/scala/common/Consts.scala b/src/main/scala/common/Consts.scala index 79ada35..2ab76c0 100755 --- a/src/main/scala/common/Consts.scala +++ b/src/main/scala/common/Consts.scala @@ -6,12 +6,12 @@ import chisel3.util._ object Consts { // 数据宽度和地址 val WORD_LEN = 32 // 指令和数据的宽度为32位 - val START_ADDR = 0.U(WORD_LEN.W) // 起始地址,设为0 + val START_ADDR = 0x00400000.U(WORD_LEN.W) // MIPS程序的起始地址通常为0x00400000 val BUBBLE = 0x00000000.U(WORD_LEN.W) // 用于冒泡的指令 [NOP] - val UNIMP = "x_c0000000".U(WORD_LEN.W) + val UNIMP = 0x00114514.U(WORD_LEN.W) // 未实现指令 [NOP] // 寄存器地址长度 - val ADDR_LEN = 5 // rs1、rs2和写回寄存器的地址宽度为5位 + val ADDR_LEN = 5 // rs、rt和rd的地址宽度为5位 // 执行功能定义 val EXE_FUN_LEN = 5 // 执行功能的编码长度为5位 @@ -28,18 +28,22 @@ object Consts { val ALU_SLTU = 10.U(EXE_FUN_LEN.W) // 无符号比较小于操作 val BR_BEQ = 11.U(EXE_FUN_LEN.W) // 分支相等 val BR_BNE = 12.U(EXE_FUN_LEN.W) // 分支不等 - val ALU_JAL = 13.U(EXE_FUN_LEN.W) // JAL跳转 - val ALU_COPY1 = 14.U(EXE_FUN_LEN.W) // 复制操作 + val BR_BLT = 13.U(EXE_FUN_LEN.W) // 有符号小于分支 + val BR_BGE = 14.U(EXE_FUN_LEN.W) // 有符号大于等于分支 + val BR_BLTU = 15.U(EXE_FUN_LEN.W) // 无符号小于分支 + val BR_BGEU = 16.U(EXE_FUN_LEN.W) // 无符号大于等于分支 + val ALU_JALR = 17.U(EXE_FUN_LEN.W) // JALR跳转(MIPS中没有JALR,但可以模拟) + val ALU_COPY1 = 18.U(EXE_FUN_LEN.W) // 复制操作 // 操作数选择 val OP1_LEN = 2 // 操作数1的选择宽度为2位 - val OP1_RS1 = 0.U(OP1_LEN.W) // 选择rs1 - val OP1_PC = 1.U(OP1_LEN.W) // 选择PC - val OP1_X = 2.U(OP1_LEN.W) // 未定义操作数1 + val OP1_X = 0.U(OP1_LEN.W) // 未定义操作数1 + val OP1_RS = 1.U(OP1_LEN.W) // 选择rs + val OP1_PC = 2.U(OP1_LEN.W) // 选择PC val OP2_LEN = 3 // 操作数2的选择宽度为3位 val OP2_X = 0.U(OP2_LEN.W) // 未定义操作数2 - val OP2_RS2 = 1.U(OP2_LEN.W) // 选择rs2 + val OP2_RT = 1.U(OP2_LEN.W) // 选择rt val OP2_IMI = 2.U(OP2_LEN.W) // 立即数操作数2(immI) val OP2_IMS = 3.U(OP2_LEN.W) // 立即数操作数2(immS) val OP2_IMJ = 4.U(OP2_LEN.W) // 立即数操作数2(immJ) @@ -62,12 +66,4 @@ object Consts { val WB_MEM = 2.U(WB_SEL_LEN.W) // 内存数据写回 val WB_PC = 3.U(WB_SEL_LEN.W) // PC写回 - // 内存宽度 - val MW_LEN = 3 // 内存宽度控制信号宽度为3位 - val MW_X = 0.U(MW_LEN.W) // 未定义 - val MW_W = 1.U(MW_LEN.W) // 32位字访问 - val MW_H = 2.U(MW_LEN.W) // 16位半字访问 - val MW_B = 3.U(MW_LEN.W) // 8位字节访问 - val MW_HU = 4.U(MW_LEN.W) // 16位无符号半字访问 - val MW_BU = 5.U(MW_LEN.W) // 8位无符号字节访问 } diff --git a/src/main/scala/common/Instructions.scala b/src/main/scala/common/Instructions.scala index b9e6521..2e1a83d 100755 --- a/src/main/scala/common/Instructions.scala +++ b/src/main/scala/common/Instructions.scala @@ -5,13 +5,13 @@ import chisel3.util._ object Instructions { // * 加载 / 存储 - val LW = BitPat("b100011????????????0000000000000000") // lw rt, offset(rs) - val SW = BitPat("b101011????????????0000000000000000") // sw rt, offset(rs) + val LW = BitPat("b100011????????????????????????????") // lw rt, offset(rs) + val SW = BitPat("b101011????????????????????????????") // sw rt, offset(rs) // * 算术运算 val ADD = BitPat("b000000???????????????00000100000") // add rd, rs, rt val ADDI = BitPat( - "b001000????????????0000000000000000" + "b001000????????????????????????????" ) // addi rt, rs, immediate val SUB = BitPat("b000000???????????????00000100010") // sub rd, rs, rt @@ -20,30 +20,31 @@ object Instructions { val OR = BitPat("b000000???????????????00000100101") // or rd, rs, rt val XOR = BitPat("b000000???????????????00000100110") // xor rd, rs, rt val ANDI = BitPat( - "b001100????????????0000000000000000" + "b001100????????????????????????????" ) // andi rt, rs, immediate val ORI = BitPat( - "b001101????????????0000000000000000" + "b001101????????????????????????????" ) // ori rt, rs, immediate // * 比较 val SLT = BitPat("b000000???????????????00000101010") // slt rd, rs, rt // * 条件分支 - val BEQ = BitPat("b000100????????????0000000000000000") // beq rs, rt, offset - val BNE = BitPat("b000101????????????0000000000000000") // bne rs, rt, offset + val BEQ = BitPat("b000100????????????????????????????") // beq rs, rt, offset + val BNE = BitPat("b000101????????????????????????????") // bne rs, rt, offset // * 移位 - val SLL = BitPat("b00000000000??????????????000000") // sll rd, rt, shamt - val SRL = BitPat("b00000000000??????????????000010") // srl rd, rt, shamt - val SRA = BitPat("b00000000000??????????????000011") // sra rd, rt, shamt + val SLL = BitPat("b00000000000???????????????000000") // sll rd, rt, shamt + val SRL = BitPat("b00000000000???????????????000010") // srl rd, rt, shamt + val SRA = BitPat("b00000000000???????????????000011") // sra rd, rt, shamt // * 跳转 val JR = BitPat("b000000????????????0000000000001000") // jr rs - val JAL = BitPat("b00001100000000000000000000000000") // jal target + val JAL = BitPat("b000011????????????????????????????") // jal target // * 立即数加载 - val LUI = BitPat("b00111100000????????????0000000000") // lui rt, immediate + val LUI = BitPat("b00111100000???????????????????????") // lui rt, immediate - val NOP = BitPat("b000000000000000000000000000000000") // nop + // * NOP + val NOP = BitPat("b00000000000000000000000000000000") // nop (sll $0, $0, 0) } diff --git a/src/main/scala/micore/Core.scala b/src/main/scala/micore/Core.scala index f97a348..f424fff 100755 --- a/src/main/scala/micore/Core.scala +++ b/src/main/scala/micore/Core.scala @@ -7,48 +7,50 @@ import common.Instructions._ class Core extends Module { val io = IO(new Bundle { - val imem = Flipped(new ImemPortIo) - val dmem = Flipped(new DmemPortIo) + val imem = Flipped(new ImemPortIo()) + val dmem = Flipped(new DmemPortIo()) val exit = Output(Bool()) + val gp = Output(UInt(WORD_LEN.W)) }) - // Block RAM for data memory - val regfile = SyncReadMem(32, UInt(WORD_LEN.W)) + val regfile = Mem(32, UInt(WORD_LEN.W)) // ********* Pipeline Registers ********* - val id_reg = Reg(new Bundle { - val pc = UInt(WORD_LEN.W) - val inst = UInt(WORD_LEN.W) - }) + // IF/ID state + val id_reg_pc = RegInit(0.U(WORD_LEN.W)) + val id_reg_inst = RegInit(0.U(WORD_LEN.W)) - val exe_reg = Reg(new Bundle { - val pc = UInt(WORD_LEN.W) - val wb_addr = UInt(ADDR_LEN.W) - val op1_data = UInt(WORD_LEN.W) - val op2_data = UInt(WORD_LEN.W) - val rs2_data = UInt(WORD_LEN.W) - val exe_fun = UInt(EXE_FUN_LEN.W) - val mem_wen = UInt(MEN_LEN.W) - val rf_wen = UInt(REN_LEN.W) - val wb_sel = UInt(WB_SEL_LEN.W) - val imm_b_sext = UInt(WORD_LEN.W) - }) + // ID/EX state + val exe_reg_pc = RegInit(0.U(WORD_LEN.W)) + val exe_reg_wb_addr = RegInit(0.U(ADDR_LEN.W)) + val exe_reg_op1_data = RegInit(0.U(WORD_LEN.W)) + val exe_reg_op2_data = RegInit(0.U(WORD_LEN.W)) + val exe_reg_rs2_data = RegInit(0.U(WORD_LEN.W)) + val exe_reg_exe_fun = RegInit(0.U(EXE_FUN_LEN.W)) + val exe_reg_mem_wen = RegInit(0.U(MEN_LEN.W)) + val exe_reg_rf_wen = RegInit(0.U(REN_LEN.W)) + val exe_reg_wb_sel = RegInit(0.U(WB_SEL_LEN.W)) + val exe_reg_imm_i_sext = RegInit(0.U(WORD_LEN.W)) + val exe_reg_imm_s_sext = RegInit(0.U(WORD_LEN.W)) + val exe_reg_imm_b_sext = RegInit(0.U(WORD_LEN.W)) + val exe_reg_imm_u_shifted = RegInit(0.U(WORD_LEN.W)) + val exe_reg_imm_z_uext = RegInit(0.U(WORD_LEN.W)) - val mem_reg = Reg(new Bundle { - val pc = UInt(WORD_LEN.W) - val wb_addr = UInt(ADDR_LEN.W) - val alu_out = UInt(WORD_LEN.W) - val rs2_data = UInt(WORD_LEN.W) - val rf_wen = UInt(REN_LEN.W) - val wb_sel = UInt(WB_SEL_LEN.W) - val mem_wen = UInt(MEN_LEN.W) - }) + // EX/MEM state + val mem_reg_pc = RegInit(0.U(WORD_LEN.W)) + val mem_reg_wb_addr = RegInit(0.U(ADDR_LEN.W)) + val mem_reg_op1_data = RegInit(0.U(WORD_LEN.W)) + val mem_reg_rs2_data = RegInit(0.U(WORD_LEN.W)) + val mem_reg_mem_wen = RegInit(0.U(MEN_LEN.W)) + val mem_reg_rf_wen = RegInit(0.U(REN_LEN.W)) + val mem_reg_wb_sel = RegInit(0.U(WB_SEL_LEN.W)) + val mem_reg_imm_z_uext = RegInit(0.U(WORD_LEN.W)) + val mem_reg_alu_out = RegInit(0.U(WORD_LEN.W)) - val wb_reg = Reg(new Bundle { - val wb_addr = UInt(ADDR_LEN.W) - val rf_wen = UInt(REN_LEN.W) - val wb_data = UInt(WORD_LEN.W) - }) + // MEM/WB state + val wb_reg_wb_addr = RegInit(0.U(ADDR_LEN.W)) + val wb_reg_rf_wen = RegInit(0.U(REN_LEN.W)) + val wb_reg_wb_data = RegInit(0.U(WORD_LEN.W)) // ********* Instruction Fetch (IF) Stage ********* val if_reg_pc = RegInit(START_ADDR) @@ -67,193 +69,232 @@ class Core extends Module { Seq( exe_br_flg -> exe_br_target, exe_jmp_flg -> exe_alu_out, - stall_flg -> if_reg_pc + stall_flg -> if_reg_pc // stall ) ) if_reg_pc := if_pc_next // ********* IF/ID Stage ********* - id_reg.pc := Mux(stall_flg, id_reg.pc, if_reg_pc) - id_reg.inst := MuxCase( + id_reg_pc := Mux(stall_flg, id_reg_pc, if_reg_pc) + id_reg_inst := MuxCase( if_inst, Seq( (exe_br_flg || exe_jmp_flg) -> BUBBLE, - stall_flg -> id_reg.inst + stall_flg -> id_reg_inst ) ) // ********* Decode (ID) Stage ********* - val id_rs1_addr = id_reg.inst(25, 21) - val id_rs2_addr = id_reg.inst(20, 16) - val id_wb_addr = id_reg.inst(15, 11) + val id_rs1_addr_b = id_reg_inst(25, 21) // MIPS rs字段 + val id_rs2_addr_b = id_reg_inst(20, 16) // MIPS rt字段 - // Data Hazard +// 与EX数据冒险 -> stall val id_rs1_data_hazard = - (exe_reg.rf_wen === REN_S) && (id_rs1_addr =/= 0.U) && (id_rs1_addr === exe_reg.wb_addr) + (exe_reg_rf_wen === REN_S) && (id_rs1_addr_b =/= 0.U) && (id_rs1_addr_b === exe_reg_wb_addr) val id_rs2_data_hazard = - (exe_reg.rf_wen === REN_S) && (id_rs2_addr =/= 0.U) && (id_rs2_addr === exe_reg.wb_addr) + (exe_reg_rf_wen === REN_S) && (id_rs2_addr_b =/= 0.U) && (id_rs2_addr_b === exe_reg_wb_addr) stall_flg := (id_rs1_data_hazard || id_rs2_data_hazard) val id_inst = - Mux((exe_br_flg || exe_jmp_flg || stall_flg), BUBBLE, id_reg.inst) + Mux((exe_br_flg || exe_jmp_flg || stall_flg), BUBBLE, id_reg_inst) - val id_rs1_data = Mux( - id_rs1_addr === 0.U, - 0.U(WORD_LEN.W), - Mux( - (id_rs1_addr === mem_reg.wb_addr) && (mem_reg.rf_wen === REN_S), - mem_reg.alu_out, - Mux( - (id_rs1_addr === wb_reg.wb_addr) && (wb_reg.rf_wen === REN_S), - wb_reg.wb_data, - regfile(id_rs1_addr) - ) + val id_rs1_addr = id_inst(25, 21) // MIPS rs字段 + val id_rs2_addr = id_inst(20, 16) // MIPS rt字段 + val id_wb_addr = id_inst(15, 11) // MIPS rt字段(写回地址) + + val mem_wb_data = Wire(UInt(WORD_LEN.W)) + val id_rs1_data = MuxCase( + regfile(id_rs1_addr), + Seq( + (id_rs1_addr === 0.U) -> 0.U(WORD_LEN.W), + ((id_rs1_addr === mem_reg_wb_addr) && (mem_reg_rf_wen === REN_S)) -> mem_wb_data, // 从MEM直通 + ((id_rs1_addr === wb_reg_wb_addr) && (wb_reg_rf_wen === REN_S)) -> wb_reg_wb_data // 从WB直通 ) ) - val id_rs2_data = Mux( - id_rs2_addr === 0.U, - 0.U(WORD_LEN.W), - Mux( - (id_rs2_addr === mem_reg.wb_addr) && (mem_reg.rf_wen === REN_S), - mem_reg.alu_out, - Mux( - (id_rs2_addr === wb_reg.wb_addr) && (wb_reg.rf_wen === REN_S), - wb_reg.wb_data, - regfile(id_rs2_addr) - ) + val id_rs2_data = MuxCase( + regfile(id_rs2_addr), + Seq( + (id_rs2_addr === 0.U) -> 0.U(WORD_LEN.W), + ((id_rs2_addr === mem_reg_wb_addr) && (mem_reg_rf_wen === REN_S)) -> mem_wb_data, // 从MEM直通 + ((id_rs2_addr === wb_reg_wb_addr) && (wb_reg_rf_wen === REN_S)) -> wb_reg_wb_data // 从WB直通 ) ) - // 立即数扩展 - val id_imm_i_sext = Cat(Fill(16, id_inst(15)), id_inst(15, 0)) - val id_imm_b_sext = Cat(Fill(16, id_inst(15)), id_inst(15, 0)) + val id_imm_i = id_inst(15, 0) // MIPS立即数字段 + val id_imm_i_sext = Cat(Fill(16, id_imm_i(15)), id_imm_i) + val id_imm_s = Cat(id_inst(15, 11), id_inst(25, 21)) // 生成 10 位的立即数字段 + val id_imm_s_sext = Cat(Fill(22, id_imm_s(9)), id_imm_s) // 符号扩展到 32 位 + val id_imm_b = Cat(id_inst(15, 0), 0.U(2.W)) // MIPS分支指令的立即数字段 + val id_imm_b_sext = Cat(Fill(14, id_imm_b(17)), id_imm_b) + val id_imm_j = Cat(id_inst(25, 0), 0.U(2.W)) // MIPS跳转指令的立即数字段 + val id_imm_j_sext = Cat(Fill(6, id_imm_j(25)), id_imm_j, 0.U(2.W)) + val id_imm_u = id_inst(15, 0) // MIPS lui指令的立即数字段 + val id_imm_u_shifted = Cat(id_imm_u, Fill(16, 0.U)) + val id_imm_z = id_inst(15, 11) // MIPS立即数字段 + val id_imm_z_uext = Cat(Fill(27, 0.U), id_imm_z) - // 控制信号解码 val csignals = ListLookup( id_inst, - List(ALU_X, OP1_RS1, OP2_RS2, MEN_X, REN_X, WB_X), + List(ALU_X, OP1_RS, OP2_RT, MEN_X, REN_X, WB_X), Array( - LW -> List(ALU_ADD, OP1_RS1, OP2_IMI, MEN_X, REN_S, WB_MEM), - SW -> List(ALU_ADD, OP1_RS1, OP2_IMS, MEN_S, REN_X, WB_X), - ADD -> List(ALU_ADD, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - ADDI -> List(ALU_ADD, OP1_RS1, OP2_IMI, MEN_X, REN_S, WB_ALU), - SUB -> List(ALU_SUB, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - AND -> List(ALU_AND, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - OR -> List(ALU_OR, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - XOR -> List(ALU_XOR, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - ANDI -> List(ALU_AND, OP1_RS1, OP2_IMI, MEN_X, REN_S, WB_ALU), - ORI -> List(ALU_OR, OP1_RS1, OP2_IMI, MEN_X, REN_S, WB_ALU), - SLL -> List(ALU_SLL, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - SRL -> List(ALU_SRL, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - SRA -> List(ALU_SRA, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - SLT -> List(ALU_SLT, OP1_RS1, OP2_RS2, MEN_X, REN_S, WB_ALU), - BEQ -> List(BR_BEQ, OP1_RS1, OP2_RS2, MEN_X, REN_X, WB_X), - BNE -> List(BR_BNE, OP1_RS1, OP2_RS2, MEN_X, REN_X, WB_X), + LW -> List(ALU_ADD, OP1_RS, OP2_IMI, MEN_X, REN_S, WB_MEM), + SW -> List(ALU_ADD, OP1_RS, OP2_IMS, MEN_S, REN_X, WB_X), + ADD -> List(ALU_ADD, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + ADDI -> List(ALU_ADD, OP1_RS, OP2_IMI, MEN_X, REN_S, WB_ALU), + SUB -> List(ALU_SUB, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + AND -> List(ALU_AND, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + OR -> List(ALU_OR, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + XOR -> List(ALU_XOR, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + ANDI -> List(ALU_AND, OP1_RS, OP2_IMI, MEN_X, REN_S, WB_ALU), + ORI -> List(ALU_OR, OP1_RS, OP2_IMI, MEN_X, REN_S, WB_ALU), + SLT -> List(ALU_SLT, OP1_RS, OP2_RT, MEN_X, REN_S, WB_ALU), + BEQ -> List(BR_BEQ, OP1_RS, OP2_RT, MEN_X, REN_X, WB_X), + BNE -> List(BR_BNE, OP1_RS, OP2_RT, MEN_X, REN_X, WB_X), JAL -> List(ALU_ADD, OP1_PC, OP2_IMJ, MEN_X, REN_S, WB_PC), - JR -> List(ALU_COPY1, OP1_RS1, OP2_X, MEN_X, REN_X, WB_X), - LUI -> List(ALU_ADD, OP1_X, OP2_IMU, MEN_X, REN_S, WB_ALU), - NOP -> List(ALU_X, OP1_X, OP2_X, MEN_X, REN_X, WB_X) + LUI -> List(ALU_ADD, OP1_X, OP2_IMU, MEN_X, REN_S, WB_ALU) ) ) val id_exe_fun :: id_op1_sel :: id_op2_sel :: id_mem_wen :: id_rf_wen :: id_wb_sel :: Nil = csignals - val id_op1_data = Mux( - id_op1_sel === OP1_RS1, - id_rs1_data, - Mux(id_op1_sel === OP1_PC, id_reg.pc, 0.U(WORD_LEN.W)) - ) - val id_op2_data = MuxLookup( - id_op2_sel, - 0.U(WORD_LEN.W) - )( + val id_op1_data = MuxCase( + 0.U(WORD_LEN.W), Seq( - OP2_RS2 -> id_rs2_data, - OP2_IMI -> id_imm_i_sext, - OP2_IMS -> id_imm_i_sext, - OP2_IMJ -> Cat(Fill(4, id_inst(25)), id_inst(25, 0), 0.U(2.W)), - OP2_IMU -> Cat(id_inst(15, 0), Fill(16, 0.U)) + (id_op1_sel === OP1_RS) -> id_rs1_data, + (id_op1_sel === OP1_PC) -> id_reg_pc + // (id_op1_sel === OP1_IMZ) -> id_imm_z_uext + ) + ) + + val id_op2_data = MuxCase( + 0.U(WORD_LEN.W), + Seq( + (id_op2_sel === OP2_RT) -> id_rs2_data, + (id_op2_sel === OP2_IMI) -> id_imm_i_sext, + (id_op2_sel === OP2_IMS) -> id_imm_s_sext, + (id_op2_sel === OP2_IMJ) -> id_imm_j_sext, + (id_op2_sel === OP2_IMU) -> id_imm_u_shifted ) ) // ********* Decode/Execute (ID/EX) Stage ********* - exe_reg.pc := id_reg.pc - exe_reg.op1_data := id_op1_data - exe_reg.op2_data := id_op2_data - exe_reg.rs2_data := id_rs2_data - exe_reg.wb_addr := id_wb_addr - exe_reg.wb_sel := id_wb_sel - exe_reg.mem_wen := id_mem_wen - exe_reg.rf_wen := id_rf_wen - exe_reg.imm_b_sext := id_imm_b_sext - exe_reg.exe_fun := id_exe_fun + exe_reg_pc := id_reg_pc + exe_reg_op1_data := id_op1_data + exe_reg_op2_data := id_op2_data + exe_reg_rs2_data := id_rs2_data + exe_reg_wb_addr := id_wb_addr + exe_reg_wb_sel := id_wb_sel + exe_reg_mem_wen := id_mem_wen + exe_reg_rf_wen := id_rf_wen + exe_reg_imm_i_sext := id_imm_i_sext + exe_reg_imm_s_sext := id_imm_s_sext + exe_reg_imm_b_sext := id_imm_b_sext + exe_reg_imm_u_shifted := id_imm_u_shifted + exe_reg_imm_z_uext := id_imm_z_uext + exe_reg_exe_fun := id_exe_fun // ********* Execute (EX) Stage ********* - exe_alu_out := MuxLookup( - exe_reg.exe_fun, - 0.U(WORD_LEN.W) - )( + exe_alu_out := MuxCase( + 0.U(WORD_LEN.W), Seq( - ALU_ADD -> (exe_reg.op1_data + exe_reg.op2_data), - ALU_SUB -> (exe_reg.op1_data - exe_reg.op2_data), - ALU_AND -> (exe_reg.op1_data & exe_reg.op2_data), - ALU_OR -> (exe_reg.op1_data | exe_reg.op2_data), - ALU_XOR -> (exe_reg.op1_data ^ exe_reg.op2_data), - ALU_SLL -> (exe_reg.op1_data << exe_reg.op2_data(4, 0))(31, 0), - ALU_SRL -> (exe_reg.op1_data >> exe_reg.op2_data(4, 0)).asUInt, - ALU_SRA -> (exe_reg.op1_data.asSInt >> exe_reg.op2_data(4, 0)).asUInt, - ALU_SLT -> (exe_reg.op1_data.asSInt < exe_reg.op2_data.asSInt).asUInt, - ALU_COPY1 -> exe_reg.op1_data + (exe_reg_exe_fun === ALU_ADD) -> (exe_reg_op1_data + exe_reg_op2_data), + (exe_reg_exe_fun === ALU_SUB) -> (exe_reg_op1_data - exe_reg_op2_data), + (exe_reg_exe_fun === ALU_AND) -> (exe_reg_op1_data & exe_reg_op2_data), + (exe_reg_exe_fun === ALU_OR) -> (exe_reg_op1_data | exe_reg_op2_data), + (exe_reg_exe_fun === ALU_XOR) -> (exe_reg_op1_data ^ exe_reg_op2_data), + (exe_reg_exe_fun === ALU_SLL) -> (exe_reg_op1_data << exe_reg_op2_data( + 4, + 0 + )), + (exe_reg_exe_fun === ALU_SRL) -> (exe_reg_op1_data >> exe_reg_op2_data( + 4, + 0 + )).asUInt, + (exe_reg_exe_fun === ALU_SRA) -> (exe_reg_op1_data.asSInt >> exe_reg_op2_data( + 4, + 0 + )).asUInt, + (exe_reg_exe_fun === ALU_SLT) -> (exe_reg_op1_data.asSInt < exe_reg_op2_data.asSInt).asUInt, + (exe_reg_exe_fun === ALU_SLTU) -> (exe_reg_op1_data < exe_reg_op2_data).asUInt, + (exe_reg_exe_fun === ALU_JALR) -> ((exe_reg_op1_data + exe_reg_op2_data) & (~1 + .U(WORD_LEN.W))), + (exe_reg_exe_fun === ALU_COPY1) -> exe_reg_op1_data ) ) - exe_br_flg := MuxLookup( - exe_reg.exe_fun, - false.B - )( + exe_br_flg := MuxCase( + false.B, Seq( - BR_BEQ -> (exe_reg.op1_data === exe_reg.op2_data), - BR_BNE -> (exe_reg.op1_data =/= exe_reg.op2_data) + (exe_reg_exe_fun === BR_BEQ) -> (exe_reg_op1_data === exe_reg_op2_data).asBool, + (exe_reg_exe_fun === BR_BNE) -> !(exe_reg_op1_data === exe_reg_op2_data).asBool ) ) - exe_br_target := exe_reg.pc + exe_reg.imm_b_sext - exe_jmp_flg := (exe_reg.wb_sel === WB_PC) + exe_br_target := exe_reg_pc + exe_reg_imm_b_sext - // ********* Execute/Memory (EX/MEM) Stage ********* - mem_reg.pc := exe_reg.pc - mem_reg.wb_addr := exe_reg.wb_addr - mem_reg.alu_out := exe_alu_out - mem_reg.rs2_data := exe_reg.rs2_data - mem_reg.rf_wen := exe_reg.rf_wen - mem_reg.wb_sel := exe_reg.wb_sel - mem_reg.mem_wen := exe_reg.mem_wen + exe_jmp_flg := (exe_reg_wb_sel === WB_PC) + + // ********** Execute/Memory (EX/MEM) Stage *********** + mem_reg_pc := exe_reg_pc + mem_reg_op1_data := exe_reg_op1_data + mem_reg_rs2_data := exe_reg_rs2_data + mem_reg_wb_addr := exe_reg_wb_addr + mem_reg_alu_out := exe_alu_out + mem_reg_rf_wen := exe_reg_rf_wen + mem_reg_wb_sel := exe_reg_wb_sel + mem_reg_imm_z_uext := exe_reg_imm_z_uext + mem_reg_mem_wen := exe_reg_mem_wen // ********* Memory (MEM) Stage ********* - io.dmem.addr := mem_reg.alu_out - io.dmem.wen := mem_reg.mem_wen - io.dmem.wdata := mem_reg.rs2_data + io.dmem.addr := mem_reg_alu_out + io.dmem.wen := mem_reg_mem_wen + io.dmem.wdata := mem_reg_rs2_data - val mem_wb_data = MuxLookup( - mem_reg.wb_sel, - mem_reg.alu_out - )( + mem_wb_data := MuxCase( + mem_reg_alu_out, Seq( - WB_MEM -> io.dmem.rdata, - WB_PC -> (mem_reg.pc + 4.U(WORD_LEN.W)) + (mem_reg_wb_sel === WB_MEM) -> io.dmem.rdata, + (mem_reg_wb_sel === WB_PC) -> (mem_reg_pc + 4.U(WORD_LEN.W)) ) ) - // ********* Memory/Write Back (MEM/WB) Stage ********* - wb_reg.wb_addr := mem_reg.wb_addr - wb_reg.rf_wen := mem_reg.rf_wen - wb_reg.wb_data := mem_wb_data + // ********** Memory/Write Back (MEM/WB) Stage *********** + wb_reg_wb_data := mem_wb_data + wb_reg_rf_wen := mem_reg_rf_wen + wb_reg_wb_addr := mem_reg_wb_addr // ********* Write Back (WB) Stage ********* - when(wb_reg.rf_wen === REN_S) { - regfile(wb_reg.wb_addr) := wb_reg.wb_data - } + when(wb_reg_rf_wen === REN_S) { regfile(wb_reg_wb_addr) := wb_reg_wb_data } - io.exit := (id_reg.inst === UNIMP) + // ********* Debugging ********* + io.gp := regfile(3) + io.exit := (id_reg_inst === UNIMP) + printf(p"---------------------\n") + // printf(p"if_reg_pc: 0x${Hexadecimal(if_reg_pc)}\n") + printf(p"id_reg_pc: 0x${Hexadecimal(id_reg_pc)}\n") + printf(p"id_reg_inst: 0x${Hexadecimal(id_reg_inst)}\n") + printf(p"id_inst: 0x${Hexadecimal(id_inst)}\n") + printf(p"id_rs1_addr: 0x${Hexadecimal(id_rs1_addr)}\n") + printf(p"id_rs2_addr: 0x${Hexadecimal(id_rs2_addr)}\n") + printf(p"id_wb_addr: 0x${Hexadecimal(id_wb_addr)}\n") + printf(p"id_exe_fun: 0x${Hexadecimal(id_exe_fun)}\n") + printf(p"id_op1_sel: 0x${Hexadecimal(id_op1_sel)}\n") + printf(p"id_op1_data: 0x${Hexadecimal(id_op1_data)}\n") + printf(p"id_op2_sel: 0x${Hexadecimal(id_op2_sel)}\n") + printf(p"id_op2_data: 0x${Hexadecimal(id_op2_data)}\n") + printf(p"id_mem_wen: 0x${Hexadecimal(id_mem_wen)}\n") + printf(p"id_rf_wen: 0x${Hexadecimal(id_rf_wen)}\n") + printf(p"id_wb_sel: 0x${Hexadecimal(id_wb_sel)}\n") + printf(p"id_rs1_data: 0x${Hexadecimal(id_rs1_data)}\n") + printf(p"id_rs2_data: 0x${Hexadecimal(id_rs2_data)}\n") + // printf(p"exe_reg_pc: 0x${Hexadecimal(exe_reg_pc)}\n") + // printf(p"exe_reg_op1_data: 0x${Hexadecimal(id_op1_data)}\n") + // printf(p"exe_reg_op2_data: 0x${Hexadecimal(id_op2_data)}\n") + printf(p"exe_alu_out: 0x${Hexadecimal(exe_alu_out)}\n") + printf(p"mem_reg_pc: 0x${Hexadecimal(mem_reg_pc)}\n") + printf(p"mem_reg_alu_out: 0x${Hexadecimal(mem_reg_alu_out)}\n") + printf(p"mem_wb_data: 0x${Hexadecimal(mem_wb_data)}\n") + printf(p"wb_reg_wb_data: 0${Hexadecimal(wb_reg_wb_data)}\n") + printf(p"---------------------\n") } diff --git a/src/main/scala/micore/Memory.scala b/src/main/scala/micore/Memory.scala index 0bc8045..43cecdc 100755 --- a/src/main/scala/micore/Memory.scala +++ b/src/main/scala/micore/Memory.scala @@ -2,14 +2,19 @@ package micore import chisel3._ import chisel3.util._ -import chisel3.util.experimental.loadMemoryFromFileInline +import chisel3.util.experimental.loadMemoryFromFile import common.Consts._ +import chisel3.util.experimental.loadMemoryFromFileInline +/** 表示一个指令内存端口接口的类 + */ class ImemPortIo extends Bundle { val addr = Input(UInt(WORD_LEN.W)) val inst = Output(UInt(WORD_LEN.W)) } +/** 表示一个数据内存端口接口的类 + */ class DmemPortIo extends Bundle { val addr = Input(UInt(WORD_LEN.W)) val rdata = Output(UInt(WORD_LEN.W)) @@ -19,20 +24,37 @@ class DmemPortIo extends Bundle { class Memory extends Module { val io = IO(new Bundle { - val imem = new ImemPortIo - val dmem = new DmemPortIo + val imem = new ImemPortIo() + val dmem = new DmemPortIo() }) - // val mem = Mem(8192, UInt(8.W)) - val mem = SyncReadMem(512, UInt(WORD_LEN.W)) + // 生成八位宽x4096(4KB)寄存器的存储器。 + val mem = Mem(4096, UInt(8.W)) + // 加载存储器的初始值。 loadMemoryFromFileInline(mem, "src/hex/mem.hex") - io.imem.inst := mem.read(io.imem.addr >> 2) + // 连接四个地址存储的八位数据形成一个32位的指令。 + io.imem.inst := Cat( + mem(io.imem.addr + 3.U(WORD_LEN.W)), + mem(io.imem.addr + 2.U(WORD_LEN.W)), + mem(io.imem.addr + 1.U(WORD_LEN.W)), + mem(io.imem.addr) + ) - io.dmem.rdata := mem.read(io.dmem.addr >> 2) + // 连接四个地址存储的八位数据形成一个32位的数据。 + io.dmem.rdata := Cat( + mem(io.dmem.addr + 3.U(WORD_LEN.W)), + mem(io.dmem.addr + 2.U(WORD_LEN.W)), + mem(io.dmem.addr + 1.U(WORD_LEN.W)), + mem(io.dmem.addr) + ) + // 写数据到存储器。 when(io.dmem.wen) { - mem.write(io.dmem.addr >> 2, io.dmem.wdata) + mem(io.dmem.addr) := io.dmem.wdata(7, 0) + mem(io.dmem.addr + 1.U(WORD_LEN.W)) := io.dmem.wdata(15, 8) + mem(io.dmem.addr + 2.U(WORD_LEN.W)) := io.dmem.wdata(23, 16) + mem(io.dmem.addr + 3.U(WORD_LEN.W)) := io.dmem.wdata(31, 24) } } diff --git a/src/main/scala/micore/Top.scala b/src/main/scala/micore/Top.scala index 941bdc8..70becd8 100755 --- a/src/main/scala/micore/Top.scala +++ b/src/main/scala/micore/Top.scala @@ -8,14 +8,14 @@ import common.Consts._ class TopOrigin extends Module { val io = IO(new Bundle { val exit = Output(Bool()) + val gp = Output(UInt(WORD_LEN.W)) }) - val core = Module(new Core) - val memory = Module(new Memory) - + val core = Module(new Core()) + val memory = Module(new Memory()) core.io.imem <> memory.io.imem core.io.dmem <> memory.io.dmem - io.exit := core.io.exit + io.gp := core.io.gp } /** Generate Verilog sources and save it in file @@ -26,8 +26,7 @@ object TopOrigin extends App { firtoolOpts = Array( "--disable-all-randomization", "--strip-debug-info", - "--O=release", - "--mlir-timing" + "--O=release" ) ) } diff --git a/src/test/scala/micore/MicoreSpec.scala b/src/test/scala/micore/MicoreSpec.scala index dc05731..879f293 100755 --- a/src/test/scala/micore/MicoreSpec.scala +++ b/src/test/scala/micore/MicoreSpec.scala @@ -1,8 +1,9 @@ package micore import chisel3._ -import org.scalatest.flatspec._ import chiseltest._ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers class CTest extends AnyFlatSpec with ChiselScalatestTester { "Micore" should "run the C program" in { diff --git a/target/scala-2.13/-name-_2.13-0.1.0.jar b/target/scala-2.13/-name-_2.13-0.1.0.jar index c5de2f01d9ae07ebd66cd0c69033de0ceb21b804..8c2320e0c41d1c4b347d1f06174908ab2cfb8566 100755 GIT binary patch delta 55901 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 NFzknl#O}Wy{ts5)Z6^Q# delta 62077 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 diff --git a/target/scala-2.13/zinc/inc_compile_2.13.zip b/target/scala-2.13/zinc/inc_compile_2.13.zip index 92b131bda6f0eedca6231a6db71e460bc1c62a94..c9de0579d0479655d1f8c8efca8fd5efc0628b4a 100755 GIT binary patch literal 15351 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 diff --git a/target/streams/compile/_global/_global/compileOutputs/previous b/target/streams/compile/_global/_global/compileOutputs/previous index 8692e93..422b9f2 100755 --- a/target/streams/compile/_global/_global/compileOutputs/previous +++ b/target/streams/compile/_global/_global/compileOutputs/previous @@ -1 +1 @@ -["sbt.Task[scala.collection.Seq[java.nio.file.Path]]",["/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Consts$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$delayedInit$body.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Instructions$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$4.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$2.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Memory$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/ImemPortIo.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$5.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Consts.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$3.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/DmemPortIo.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Memory.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Instructions.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/zinc/inc_compile_2.13.zip"]] \ No newline at end of file +["sbt.Task[scala.collection.Seq[java.nio.file.Path]]",["/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Consts$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$delayedInit$body.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Instructions$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Memory$$anon$1.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/ImemPortIo.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Consts.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/DmemPortIo.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Memory.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/TopOrigin$.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/common/Instructions.class","/run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/zinc/inc_compile_2.13.zip"]] \ No newline at end of file diff --git a/target/streams/compile/compileIncremental/_global/streams/out b/target/streams/compile/compileIncremental/_global/streams/out index 69ae457..debaacf 100755 --- a/target/streams/compile/compileIncremental/_global/streams/out +++ b/target/streams/compile/compileIncremental/_global/streams/out @@ -1,6 +1,58 @@ [debug] [zinc] IncrementalCompile ----------- [debug] IncrementalCompile.incrementalCompile -[debug] previous = Stamps for: 18 products, 5 sources, 2 libraries +[debug] previous = Stamps for: 14 products, 5 sources, 2 libraries [debug] current source = Set(${BASE}/src/main/scala/micore/Core.scala, ${BASE}/src/main/scala/micore/Top.scala, ${BASE}/src/main/scala/common/Instructions.scala, ${BASE}/src/main/scala/micore/Memory.scala, ${BASE}/src/main/scala/common/Consts.scala) -[debug] > initialChanges = InitialChanges(Changes(added = Set(), removed = Set(), changed = Set(), unmodified = ...),Set(),Set(),API Changes: Set()) -[debug] No changes +[debug] > initialChanges = InitialChanges(Changes(added = Set(), removed = Set(), changed = Set(${BASE}/src/main/scala/common/Consts.scala, ${BASE}/src/main/scala/micore/Core.scala), unmodified = ...),Set(),Set(),API Changes: Set()) +[debug]  +[debug] Initial source changes: +[debug]  removed: Set() +[debug]  added: Set() +[debug]  modified: Set(${BASE}/src/main/scala/common/Consts.scala, ${BASE}/src/main/scala/micore/Core.scala) +[debug] Invalidated products: Set() +[debug] External API changes: API Changes: Set() +[debug] Modified binary dependencies: Set() +[debug] Initial directly invalidated classes: Set(common.Consts, micore.Core) +[debug] Sources indirectly invalidated by: +[debug]  product: Set() +[debug]  binary dep: Set() +[debug]  external source: Set() +[debug] All initially invalidated classes: Set(common.Consts, micore.Core) +[debug] All initially invalidated sources:Set(${BASE}/src/main/scala/common/Consts.scala, ${BASE}/src/main/scala/micore/Core.scala) +[debug] Initial set of included nodes: common.Consts, micore.Core +[debug] compilation cycle 1 +[info] compiling 2 Scala sources to /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes ... +[debug] Returning already retrieved and compiled bridge: /home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala2-sbt-bridge/2.13.12/scala2-sbt-bridge-2.13.12.jar. +[debug] [zinc] Running cached compiler 6e7cf61b for Scala compiler version 2.13.12 +[debug] [zinc] The Scala compiler is invoked with: +[debug]  -language:reflectiveCalls +[debug]  -deprecation +[debug]  -feature +[debug]  -Xcheckinit +[debug]  -Ymacro-annotations +[debug]  -Xplugin:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/chipsalliance/chisel-plugin_2.13.12/6.2.0/chisel-plugin_2.13.12-6.2.0.jar +[debug]  -bootclasspath +[debug]  /home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar +[debug]  -classpath +[debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/chipsalliance/chisel_2.13/6.2.0/chisel_2.13-6.2.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.12/scala-reflect-2.13.12.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/scopt/scopt_2.13/4.1.0/scopt_2.13-4.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/net/jcazevedo/moultingyaml_2.13/0.4.2/moultingyaml_2.13-0.4.2.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/json4s/json4s-native_2.13/4.0.6/json4s-native_2.13-4.0.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-text/1.10.0/commons-text-1.10.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/data-class_2.13/0.2.6/data-class_2.13-0.2.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/os-lib_2.13/0.9.2/os-lib_2.13-0.9.2.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-parallel-collections_2.13/1.0.4/scala-parallel-collections_2.13-1.0.4.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/upickle_2.13/3.1.0/upickle_2.13-3.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/chipsalliance/firtool-resolver_2.13/1.3.0/firtool-resolver_2.13-1.3.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/nscala-time/nscala-time_2.13/2.22.0/nscala-time_2.13-2.22.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/yaml/snakeyaml/1.26/snakeyaml-1.26.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/json4s/json4s-core_2.13/4.0.6/json4s-core_2.13-4.0.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/json4s/json4s-native-core_2.13/4.0.6/json4s-native-core_2.13-4.0.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/geny_2.13/1.0.0/geny_2.13-1.0.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/ujson_2.13/3.1.0/ujson_2.13-3.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/upack_2.13/3.1.0/upack_2.13-3.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/upickle-implicits_2.13/3.1.0/upickle-implicits_2.13-3.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/dev/dirs/directories/26/directories-26.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/outr/scribe_2.13/3.13.0/scribe_2.13-3.13.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier_2.13/2.1.8/coursier_2.13-2.1.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/joda-time/joda-time/2.10.1/joda-time-2.10.1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/joda/joda-convert/2.2.0/joda-convert-2.2.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/json4s/json4s-ast_2.13/4.0.6/json4s-ast_2.13-4.0.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/json4s/json4s-scalap_2.13/4.0.6/json4s-scalap_2.13-4.0.6.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/upickle-core_2.13/3.1.0/upickle-core_2.13-3.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/outr/perfolation_2.13/1.2.9/perfolation_2.13-1.2.9.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/lihaoyi/sourcecode_2.13/0.3.1/sourcecode_2.13-0.3.1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.11.0/scala-collection-compat_2.13-2.11.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/outr/moduload_2.13/1.1.7/moduload_2.13-1.1.7.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.13.5.2/jsoniter-scala-core_2.13-2.13.5.2.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-core_2.13/2.1.8/coursier-core_2.13-2.1.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-cache_2.13/2.1.8/coursier-cache_2.13-2.1.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-proxy-setup/2.1.8/coursier-proxy-setup-2.1.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/concurrent-reference-hash-map/1.1.0/concurrent-reference-hash-map-1.1.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.13/2.2.0/scala-xml_2.13-2.2.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/coursier-util_2.13/2.1.8/coursier-util_2.13-2.1.8.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/get-coursier/jniutils/windows-jni-utils/0.3.3/windows-jni-utils-0.3.3.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/4.9.0/plexus-archiver-4.9.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/virtuslab/scala-cli/config_2.13/0.2.1/config_2.13-0.2.1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/io/github/alexarchambault/windows-ansi/windows-ansi/0.0.5/windows-ansi-0.0.5.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/3.4.1/plexus-io-3.4.1.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/commons-io/commons-io/2.15.0/commons-io-2.15.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/commons/commons-compress/1.24.0/commons-compress-1.24.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/iq80/snappy/snappy/0.4/snappy-0.4.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/tukaani/xz/1.9/xz-1.9.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar:/home/gh0s7/.cache/coursier/v1/https/repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.18/jansi-1.18.jar +[debug] Invalidating (transitively) by inheritance from common.Consts... +[debug] Initial set of included nodes: common.Consts +[debug] Invalidated by transitive inheritance dependency: Set(common.Consts) +[debug] None of the modified names appears in source file of micore.TopOrigin. This dependency is not being considered for invalidation. +[debug] None of the modified names appears in source file of micore.ImemPortIo. This dependency is not being considered for invalidation. +[debug] None of the modified names appears in source file of micore.Core. This dependency is not being considered for invalidation. +[debug] None of the modified names appears in source file of micore.Memory. This dependency is not being considered for invalidation. +[debug] None of the modified names appears in source file of micore.DmemPortIo. This dependency is not being considered for invalidation. +[debug] Change NamesChange(common.Consts,ModifiedNames(changes = UsedName(OP1_IMZ,[Default]))) invalidates 1 classes due to The common.Consts has the following regular definitions changed: +[debug]  UsedName(OP1_IMZ,[Default]). +[debug]  > by transitive inheritance: Set(common.Consts) +[debug]  >  +[debug]  >  +[debug]   +[debug] New invalidations: +[debug] Initial set of included nodes:  +[debug] Previously invalidated, but (transitively) depend on new invalidations: +[debug] Final step, transitive dependencies: +[debug]  Set() +[debug] No classes were invalidated. +[debug] Scala compilation took 2.955256556 s +[debug] done compiling diff --git a/target/streams/compile/incOptions/_global/streams/out b/target/streams/compile/incOptions/_global/streams/out index 9479f4e..a11cadf 100755 --- a/target/streams/compile/incOptions/_global/streams/out +++ b/target/streams/compile/incOptions/_global/streams/out @@ -1,2 +1,17 @@ [debug] Created transactional ClassFileManager with tempDir = /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes.bak +[debug] About to delete class files: +[debug]  Consts$.class +[debug]  Consts.class +[debug]  Core$$anon$1.class +[debug]  Core.class +[debug] We backup class files: +[debug]  Consts$.class +[debug]  Consts.class +[debug]  Core$$anon$1.class +[debug]  Core.class +[debug] Registering generated classes: +[debug]  Consts.class +[debug]  Consts$.class +[debug]  Core$$anon$1.class +[debug]  Core.class [debug] Removing the temporary directory used for backing up class files: /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes.bak diff --git a/target/streams/compile/packageBin/_global/streams/inputs b/target/streams/compile/packageBin/_global/streams/inputs index c77af77..d9a0ca3 100755 --- a/target/streams/compile/packageBin/_global/streams/inputs +++ b/target/streams/compile/packageBin/_global/streams/inputs @@ -1 +1 @@ --153958634 \ No newline at end of file +-627113868 \ No newline at end of file diff --git a/target/streams/compile/packageBin/_global/streams/out b/target/streams/compile/packageBin/_global/streams/out index 594010b..766e80b 100755 --- a/target/streams/compile/packageBin/_global/streams/out +++ b/target/streams/compile/packageBin/_global/streams/out @@ -14,14 +14,6 @@ [debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore [debug]  micore/Core$$anon$1.class [debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$1.class -[debug]  micore/Core$$anon$2.class -[debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$2.class -[debug]  micore/Core$$anon$3.class -[debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$3.class -[debug]  micore/Core$$anon$4.class -[debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$4.class -[debug]  micore/Core$$anon$5.class -[debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core$$anon$5.class [debug]  micore/Core.class [debug]  /run/media/gh0s7/Data/project/ddca2024/micore/target/scala-2.13/classes/micore/Core.class [debug]  micore/DmemPortIo.class diff --git a/test_run_dir/Micore_should_run_the_C_program/TopOrigin.lo.fir b/test_run_dir/Micore_should_run_the_C_program/TopOrigin.lo.fir index 1f38fae..49b023a 100755 --- a/test_run_dir/Micore_should_run_the_C_program/TopOrigin.lo.fir +++ b/test_run_dir/Micore_should_run_the_C_program/TopOrigin.lo.fir @@ -10,176 +10,227 @@ circuit TopOrigin : output io_dmem_wen : UInt<1> @[src/main/scala/micore/Core.scala 9:14] output io_dmem_wdata : UInt<32> @[src/main/scala/micore/Core.scala 9:14] output io_exit : UInt<1> @[src/main/scala/micore/Core.scala 9:14] + output io_gp : UInt<32> @[src/main/scala/micore/Core.scala 9:14] - mem regfile : @[src/main/scala/micore/Core.scala 16:28] + mem regfile : @[src/main/scala/micore/Core.scala 16:20] data-type => UInt<32> depth => 32 - read-latency => 1 + read-latency => 0 write-latency => 1 reader => id_rs1_data_MPORT reader => id_rs2_data_MPORT + reader => io_gp_MPORT writer => MPORT read-under-write => undefined reg id_reg_pc : UInt<32>, clock with : - reset => (UInt<1>("h0"), id_reg_pc) @[src/main/scala/micore/Core.scala 19:19] + reset => (UInt<1>("h0"), id_reg_pc) @[src/main/scala/micore/Core.scala 20:26] reg id_reg_inst : UInt<32>, clock with : - reset => (UInt<1>("h0"), id_reg_inst) @[src/main/scala/micore/Core.scala 19:19] + reset => (UInt<1>("h0"), id_reg_inst) @[src/main/scala/micore/Core.scala 21:28] reg exe_reg_pc : UInt<32>, clock with : - reset => (UInt<1>("h0"), exe_reg_pc) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_pc) @[src/main/scala/micore/Core.scala 24:27] reg exe_reg_wb_addr : UInt<5>, clock with : - reset => (UInt<1>("h0"), exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 25:32] reg exe_reg_op1_data : UInt<32>, clock with : - reset => (UInt<1>("h0"), exe_reg_op1_data) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_op1_data) @[src/main/scala/micore/Core.scala 26:33] reg exe_reg_op2_data : UInt<32>, clock with : - reset => (UInt<1>("h0"), exe_reg_op2_data) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_op2_data) @[src/main/scala/micore/Core.scala 27:33] reg exe_reg_rs2_data : UInt<32>, clock with : - reset => (UInt<1>("h0"), exe_reg_rs2_data) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_rs2_data) @[src/main/scala/micore/Core.scala 28:33] reg exe_reg_exe_fun : UInt<5>, clock with : - reset => (UInt<1>("h0"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 29:32] reg exe_reg_mem_wen : UInt<2>, clock with : - reset => (UInt<1>("h0"), exe_reg_mem_wen) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_mem_wen) @[src/main/scala/micore/Core.scala 30:32] reg exe_reg_rf_wen : UInt<2>, clock with : - reset => (UInt<1>("h0"), exe_reg_rf_wen) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_rf_wen) @[src/main/scala/micore/Core.scala 31:31] reg exe_reg_wb_sel : UInt<3>, clock with : - reset => (UInt<1>("h0"), exe_reg_wb_sel) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_wb_sel) @[src/main/scala/micore/Core.scala 32:31] + reg exe_reg_imm_i_sext : UInt<32>, clock with : + reset => (UInt<1>("h0"), exe_reg_imm_i_sext) @[src/main/scala/micore/Core.scala 33:35] + reg exe_reg_imm_s_sext : UInt<32>, clock with : + reset => (UInt<1>("h0"), exe_reg_imm_s_sext) @[src/main/scala/micore/Core.scala 34:35] reg exe_reg_imm_b_sext : UInt<32>, clock with : - reset => (UInt<1>("h0"), exe_reg_imm_b_sext) @[src/main/scala/micore/Core.scala 24:20] + reset => (UInt<1>("h0"), exe_reg_imm_b_sext) @[src/main/scala/micore/Core.scala 35:35] + reg exe_reg_imm_u_shifted : UInt<32>, clock with : + reset => (UInt<1>("h0"), exe_reg_imm_u_shifted) @[src/main/scala/micore/Core.scala 36:38] + reg exe_reg_imm_z_uext : UInt<32>, clock with : + reset => (UInt<1>("h0"), exe_reg_imm_z_uext) @[src/main/scala/micore/Core.scala 37:35] reg mem_reg_pc : UInt<32>, clock with : - reset => (UInt<1>("h0"), mem_reg_pc) @[src/main/scala/micore/Core.scala 37:20] + reset => (UInt<1>("h0"), mem_reg_pc) @[src/main/scala/micore/Core.scala 40:27] reg mem_reg_wb_addr : UInt<5>, clock with : - reset => (UInt<1>("h0"), mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 37:20] - reg mem_reg_alu_out : UInt<32>, clock with : - reset => (UInt<1>("h0"), mem_reg_alu_out) @[src/main/scala/micore/Core.scala 37:20] + reset => (UInt<1>("h0"), mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 41:32] + reg mem_reg_op1_data : UInt<32>, clock with : + reset => (UInt<1>("h0"), mem_reg_op1_data) @[src/main/scala/micore/Core.scala 42:33] reg mem_reg_rs2_data : UInt<32>, clock with : - reset => (UInt<1>("h0"), mem_reg_rs2_data) @[src/main/scala/micore/Core.scala 37:20] - reg mem_reg_rf_wen : UInt<2>, clock with : - reset => (UInt<1>("h0"), mem_reg_rf_wen) @[src/main/scala/micore/Core.scala 37:20] - reg mem_reg_wb_sel : UInt<3>, clock with : - reset => (UInt<1>("h0"), mem_reg_wb_sel) @[src/main/scala/micore/Core.scala 37:20] + reset => (UInt<1>("h0"), mem_reg_rs2_data) @[src/main/scala/micore/Core.scala 43:33] reg mem_reg_mem_wen : UInt<2>, clock with : - reset => (UInt<1>("h0"), mem_reg_mem_wen) @[src/main/scala/micore/Core.scala 37:20] + reset => (UInt<1>("h0"), mem_reg_mem_wen) @[src/main/scala/micore/Core.scala 44:32] + reg mem_reg_rf_wen : UInt<2>, clock with : + reset => (UInt<1>("h0"), mem_reg_rf_wen) @[src/main/scala/micore/Core.scala 45:31] + reg mem_reg_wb_sel : UInt<3>, clock with : + reset => (UInt<1>("h0"), mem_reg_wb_sel) @[src/main/scala/micore/Core.scala 46:31] + reg mem_reg_imm_z_uext : UInt<32>, clock with : + reset => (UInt<1>("h0"), mem_reg_imm_z_uext) @[src/main/scala/micore/Core.scala 47:35] + reg mem_reg_alu_out : UInt<32>, clock with : + reset => (UInt<1>("h0"), mem_reg_alu_out) @[src/main/scala/micore/Core.scala 48:32] reg wb_reg_wb_addr : UInt<5>, clock with : - reset => (UInt<1>("h0"), wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 47:19] + reset => (UInt<1>("h0"), wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 51:31] reg wb_reg_rf_wen : UInt<2>, clock with : - reset => (UInt<1>("h0"), wb_reg_rf_wen) @[src/main/scala/micore/Core.scala 47:19] + reset => (UInt<1>("h0"), wb_reg_rf_wen) @[src/main/scala/micore/Core.scala 52:30] reg wb_reg_wb_data : UInt<32>, clock with : - reset => (UInt<1>("h0"), wb_reg_wb_data) @[src/main/scala/micore/Core.scala 47:19] + reset => (UInt<1>("h0"), wb_reg_wb_data) @[src/main/scala/micore/Core.scala 53:31] reg if_reg_pc : UInt<32>, clock with : - reset => (UInt<1>("h0"), if_reg_pc) @[src/main/scala/micore/Core.scala 54:26] - node _if_pc_plus4_T = add(if_reg_pc, UInt<32>("h4")) @[src/main/scala/micore/Core.scala 64:31] - node if_pc_plus4 = tail(_if_pc_plus4_T, 1) @[src/main/scala/micore/Core.scala 64:31] - node _id_rs1_data_hazard_T = eq(exe_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 92:21] - node id_rs1_addr = bits(id_reg_inst, 25, 21) @[src/main/scala/micore/Core.scala 86:32] - node _id_rs1_data_hazard_T_1 = neq(id_rs1_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 92:48] - node _id_rs1_data_hazard_T_2 = and(_id_rs1_data_hazard_T, _id_rs1_data_hazard_T_1) @[src/main/scala/micore/Core.scala 92:32] - node _id_rs1_data_hazard_T_3 = eq(id_rs1_addr, exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 92:73] - node id_rs1_data_hazard = and(_id_rs1_data_hazard_T_2, _id_rs1_data_hazard_T_3) @[src/main/scala/micore/Core.scala 92:57] - node _id_rs2_data_hazard_T = eq(exe_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 94:21] - node id_rs2_addr = bits(id_reg_inst, 20, 16) @[src/main/scala/micore/Core.scala 87:32] - node _id_rs2_data_hazard_T_1 = neq(id_rs2_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 94:48] - node _id_rs2_data_hazard_T_2 = and(_id_rs2_data_hazard_T, _id_rs2_data_hazard_T_1) @[src/main/scala/micore/Core.scala 94:32] - node _id_rs2_data_hazard_T_3 = eq(id_rs2_addr, exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 94:73] - node id_rs2_data_hazard = and(_id_rs2_data_hazard_T_2, _id_rs2_data_hazard_T_3) @[src/main/scala/micore/Core.scala 94:57] - node _stall_flg_T = or(id_rs1_data_hazard, id_rs2_data_hazard) @[src/main/scala/micore/Core.scala 95:36] - node stall_flg = _stall_flg_T @[src/main/scala/micore/Core.scala 58:23 95:13] + reset => (UInt<1>("h0"), if_reg_pc) @[src/main/scala/micore/Core.scala 56:26] + node _if_pc_plus4_T = add(if_reg_pc, UInt<32>("h4")) @[src/main/scala/micore/Core.scala 66:31] + node if_pc_plus4 = tail(_if_pc_plus4_T, 1) @[src/main/scala/micore/Core.scala 66:31] + node _id_rs1_data_hazard_T = eq(exe_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 93:21] + node id_rs1_addr_b = bits(id_reg_inst, 25, 21) @[src/main/scala/micore/Core.scala 88:34] + node _id_rs1_data_hazard_T_1 = neq(id_rs1_addr_b, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 93:50] + node _id_rs1_data_hazard_T_2 = and(_id_rs1_data_hazard_T, _id_rs1_data_hazard_T_1) @[src/main/scala/micore/Core.scala 93:32] + node _id_rs1_data_hazard_T_3 = eq(id_rs1_addr_b, exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 93:77] + node id_rs1_data_hazard = and(_id_rs1_data_hazard_T_2, _id_rs1_data_hazard_T_3) @[src/main/scala/micore/Core.scala 93:59] + node _id_rs2_data_hazard_T = eq(exe_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 95:21] + node id_rs2_addr_b = bits(id_reg_inst, 20, 16) @[src/main/scala/micore/Core.scala 89:34] + node _id_rs2_data_hazard_T_1 = neq(id_rs2_addr_b, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 95:50] + node _id_rs2_data_hazard_T_2 = and(_id_rs2_data_hazard_T, _id_rs2_data_hazard_T_1) @[src/main/scala/micore/Core.scala 95:32] + node _id_rs2_data_hazard_T_3 = eq(id_rs2_addr_b, exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 95:77] + node id_rs2_data_hazard = and(_id_rs2_data_hazard_T_2, _id_rs2_data_hazard_T_3) @[src/main/scala/micore/Core.scala 95:59] + node _stall_flg_T = or(id_rs1_data_hazard, id_rs2_data_hazard) @[src/main/scala/micore/Core.scala 96:36] + node stall_flg = _stall_flg_T @[src/main/scala/micore/Core.scala 60:23 96:13] node _if_pc_next_T = mux(stall_flg, if_reg_pc, if_pc_plus4) @[src/main/scala/chisel3/util/Mux.scala 126:16] - node _exe_jmp_flg_T = eq(exe_reg_wb_sel, UInt<3>("h3")) @[src/main/scala/micore/Core.scala 222:34] - node exe_jmp_flg = _exe_jmp_flg_T @[src/main/scala/micore/Core.scala 222:15 61:25] - node _exe_alu_out_T_37 = eq(UInt<5>("he"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_35 = eq(UInt<5>("h9"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_16 = asSInt(exe_reg_op1_data) @[src/main/scala/micore/Core.scala 206:36] - node _exe_alu_out_T_17 = asSInt(exe_reg_op2_data) @[src/main/scala/micore/Core.scala 206:62] - node _exe_alu_out_T_18 = lt(_exe_alu_out_T_16, _exe_alu_out_T_17) @[src/main/scala/micore/Core.scala 206:43] - node _exe_alu_out_T_33 = eq(UInt<5>("h8"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_12 = asSInt(exe_reg_op1_data) @[src/main/scala/micore/Core.scala 205:36] - node _exe_alu_out_T_13 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 205:62] - node _exe_alu_out_T_14 = dshr(_exe_alu_out_T_12, _exe_alu_out_T_13) @[src/main/scala/micore/Core.scala 205:43] - node _exe_alu_out_T_15 = asUInt(_exe_alu_out_T_14) @[src/main/scala/micore/Core.scala 205:70] - node _exe_alu_out_T_31 = eq(UInt<5>("h7"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_10 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 204:55] - node _exe_alu_out_T_11 = dshr(exe_reg_op1_data, _exe_alu_out_T_10) @[src/main/scala/micore/Core.scala 204:36] - node _exe_alu_out_T_29 = eq(UInt<5>("h6"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_7 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 203:55] - node _exe_alu_out_T_8 = dshl(exe_reg_op1_data, _exe_alu_out_T_7) @[src/main/scala/micore/Core.scala 203:36] - node _exe_alu_out_T_9 = bits(_exe_alu_out_T_8, 31, 0) @[src/main/scala/micore/Core.scala 203:62] - node _exe_alu_out_T_27 = eq(UInt<5>("h5"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_6 = xor(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 202:36] - node _exe_alu_out_T_25 = eq(UInt<5>("h4"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_5 = or(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 201:35] - node _exe_alu_out_T_23 = eq(UInt<5>("h3"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_4 = and(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 200:36] - node _exe_alu_out_T_21 = eq(UInt<5>("h2"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_2 = sub(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 199:36] - node _exe_alu_out_T_3 = tail(_exe_alu_out_T_2, 1) @[src/main/scala/micore/Core.scala 199:36] - node _exe_alu_out_T_19 = eq(UInt<5>("h1"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T = add(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 198:36] - node _exe_alu_out_T_1 = tail(_exe_alu_out_T, 1) @[src/main/scala/micore/Core.scala 198:36] - node _exe_alu_out_T_20 = mux(_exe_alu_out_T_19, _exe_alu_out_T_1, UInt<32>("h0")) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_22 = mux(_exe_alu_out_T_21, _exe_alu_out_T_3, _exe_alu_out_T_20) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_24 = mux(_exe_alu_out_T_23, _exe_alu_out_T_4, _exe_alu_out_T_22) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_26 = mux(_exe_alu_out_T_25, _exe_alu_out_T_5, _exe_alu_out_T_24) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_28 = mux(_exe_alu_out_T_27, _exe_alu_out_T_6, _exe_alu_out_T_26) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_30 = mux(_exe_alu_out_T_29, _exe_alu_out_T_9, _exe_alu_out_T_28) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_32 = mux(_exe_alu_out_T_31, _exe_alu_out_T_11, _exe_alu_out_T_30) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_34 = mux(_exe_alu_out_T_33, _exe_alu_out_T_15, _exe_alu_out_T_32) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_36 = mux(_exe_alu_out_T_35, _exe_alu_out_T_18, _exe_alu_out_T_34) @[src/main/scala/micore/Core.scala 196:4] - node _exe_alu_out_T_38 = mux(_exe_alu_out_T_37, exe_reg_op1_data, _exe_alu_out_T_36) @[src/main/scala/micore/Core.scala 196:4] - node exe_alu_out = _exe_alu_out_T_38 @[src/main/scala/micore/Core.scala 193:15 62:25] + node _exe_jmp_flg_T = eq(exe_reg_wb_sel, UInt<3>("h3")) @[src/main/scala/micore/Core.scala 236:34] + node exe_jmp_flg = _exe_jmp_flg_T @[src/main/scala/micore/Core.scala 236:15 63:25] + node _exe_alu_out_T = eq(exe_reg_exe_fun, UInt<5>("h1")) @[src/main/scala/micore/Core.scala 201:24] + node _exe_alu_out_T_1 = add(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 201:58] + node _exe_alu_out_T_2 = tail(_exe_alu_out_T_1, 1) @[src/main/scala/micore/Core.scala 201:58] + node _exe_alu_out_T_3 = eq(exe_reg_exe_fun, UInt<5>("h2")) @[src/main/scala/micore/Core.scala 202:24] + node _exe_alu_out_T_4 = sub(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 202:58] + node _exe_alu_out_T_5 = tail(_exe_alu_out_T_4, 1) @[src/main/scala/micore/Core.scala 202:58] + node _exe_alu_out_T_6 = eq(exe_reg_exe_fun, UInt<5>("h3")) @[src/main/scala/micore/Core.scala 203:24] + node _exe_alu_out_T_7 = and(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 203:58] + node _exe_alu_out_T_8 = eq(exe_reg_exe_fun, UInt<5>("h4")) @[src/main/scala/micore/Core.scala 204:24] + node _exe_alu_out_T_9 = or(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 204:57] + node _exe_alu_out_T_10 = eq(exe_reg_exe_fun, UInt<5>("h5")) @[src/main/scala/micore/Core.scala 205:24] + node _exe_alu_out_T_11 = xor(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 205:58] + node _exe_alu_out_T_12 = eq(exe_reg_exe_fun, UInt<5>("h6")) @[src/main/scala/micore/Core.scala 206:24] + node _exe_alu_out_T_13 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 206:77] + node _exe_alu_out_T_14 = dshl(exe_reg_op1_data, _exe_alu_out_T_13) @[src/main/scala/micore/Core.scala 206:58] + node _exe_alu_out_T_15 = eq(exe_reg_exe_fun, UInt<5>("h7")) @[src/main/scala/micore/Core.scala 210:24] + node _exe_alu_out_T_16 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 210:77] + node _exe_alu_out_T_17 = dshr(exe_reg_op1_data, _exe_alu_out_T_16) @[src/main/scala/micore/Core.scala 210:58] + node _exe_alu_out_T_18 = eq(exe_reg_exe_fun, UInt<5>("h8")) @[src/main/scala/micore/Core.scala 214:24] + node _exe_alu_out_T_19 = asSInt(exe_reg_op1_data) @[src/main/scala/micore/Core.scala 214:58] + node _exe_alu_out_T_20 = bits(exe_reg_op2_data, 4, 0) @[src/main/scala/micore/Core.scala 214:84] + node _exe_alu_out_T_21 = dshr(_exe_alu_out_T_19, _exe_alu_out_T_20) @[src/main/scala/micore/Core.scala 214:65] + node _exe_alu_out_T_22 = asUInt(_exe_alu_out_T_21) @[src/main/scala/micore/Core.scala 217:10] + node _exe_alu_out_T_23 = eq(exe_reg_exe_fun, UInt<5>("h9")) @[src/main/scala/micore/Core.scala 218:24] + node _exe_alu_out_T_24 = asSInt(exe_reg_op1_data) @[src/main/scala/micore/Core.scala 218:58] + node _exe_alu_out_T_25 = asSInt(exe_reg_op2_data) @[src/main/scala/micore/Core.scala 218:84] + node _exe_alu_out_T_26 = lt(_exe_alu_out_T_24, _exe_alu_out_T_25) @[src/main/scala/micore/Core.scala 218:65] + node _exe_alu_out_T_27 = eq(exe_reg_exe_fun, UInt<5>("ha")) @[src/main/scala/micore/Core.scala 219:24] + node _exe_alu_out_T_28 = lt(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 219:59] + node _exe_alu_out_T_29 = eq(exe_reg_exe_fun, UInt<5>("h11")) @[src/main/scala/micore/Core.scala 220:24] + node _exe_alu_out_T_30 = add(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 220:60] + node _exe_alu_out_T_31 = tail(_exe_alu_out_T_30, 1) @[src/main/scala/micore/Core.scala 220:60] + node _exe_alu_out_T_32 = not(UInt<32>("h1")) @[src/main/scala/micore/Core.scala 220:83] + node _exe_alu_out_T_33 = and(_exe_alu_out_T_31, _exe_alu_out_T_32) @[src/main/scala/micore/Core.scala 220:80] + node _exe_alu_out_T_34 = eq(exe_reg_exe_fun, UInt<5>("h12")) @[src/main/scala/micore/Core.scala 222:24] + node _exe_alu_out_T_35 = mux(_exe_alu_out_T_34, exe_reg_op1_data, UInt<32>("h0")) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_36 = mux(_exe_alu_out_T_29, _exe_alu_out_T_33, _exe_alu_out_T_35) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_37 = mux(_exe_alu_out_T_27, _exe_alu_out_T_28, _exe_alu_out_T_36) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_38 = mux(_exe_alu_out_T_23, _exe_alu_out_T_26, _exe_alu_out_T_37) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_39 = mux(_exe_alu_out_T_18, _exe_alu_out_T_22, _exe_alu_out_T_38) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_40 = mux(_exe_alu_out_T_15, _exe_alu_out_T_17, _exe_alu_out_T_39) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_41 = mux(_exe_alu_out_T_12, _exe_alu_out_T_14, _exe_alu_out_T_40) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_42 = mux(_exe_alu_out_T_10, _exe_alu_out_T_11, _exe_alu_out_T_41) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_43 = mux(_exe_alu_out_T_8, _exe_alu_out_T_9, _exe_alu_out_T_42) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_44 = mux(_exe_alu_out_T_6, _exe_alu_out_T_7, _exe_alu_out_T_43) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_45 = mux(_exe_alu_out_T_3, _exe_alu_out_T_5, _exe_alu_out_T_44) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_alu_out_T_46 = mux(_exe_alu_out_T, _exe_alu_out_T_2, _exe_alu_out_T_45) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node exe_alu_out = bits(_exe_alu_out_T_46, 31, 0) @[src/main/scala/micore/Core.scala 198:15 64:25] node _if_pc_next_T_1 = mux(exe_jmp_flg, exe_alu_out, _if_pc_next_T) @[src/main/scala/chisel3/util/Mux.scala 126:16] - node _exe_br_flg_T_4 = eq(UInt<5>("hc"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 214:4] - node _exe_br_flg_T_1 = neq(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 217:35] - node _exe_br_flg_T_2 = eq(UInt<5>("hb"), exe_reg_exe_fun) @[src/main/scala/micore/Core.scala 214:4] - node _exe_br_flg_T = eq(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 216:35] - node _exe_br_flg_T_3 = mux(_exe_br_flg_T_2, _exe_br_flg_T, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 214:4] - node _exe_br_flg_T_5 = mux(_exe_br_flg_T_4, _exe_br_flg_T_1, _exe_br_flg_T_3) @[src/main/scala/micore/Core.scala 214:4] - node exe_br_flg = _exe_br_flg_T_5 @[src/main/scala/micore/Core.scala 211:14 59:24] - node _exe_br_target_T = add(exe_reg_pc, exe_reg_imm_b_sext) @[src/main/scala/micore/Core.scala 221:31] - node _exe_br_target_T_1 = tail(_exe_br_target_T, 1) @[src/main/scala/micore/Core.scala 221:31] - node exe_br_target = _exe_br_target_T_1 @[src/main/scala/micore/Core.scala 221:17 60:27] + node _exe_br_flg_T = eq(exe_reg_exe_fun, UInt<5>("hb")) @[src/main/scala/micore/Core.scala 229:24] + node _exe_br_flg_T_1 = eq(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 229:57] + node _exe_br_flg_T_2 = eq(exe_reg_exe_fun, UInt<5>("hc")) @[src/main/scala/micore/Core.scala 230:24] + node _exe_br_flg_T_3 = eq(exe_reg_op1_data, exe_reg_op2_data) @[src/main/scala/micore/Core.scala 230:58] + node _exe_br_flg_T_4 = eq(_exe_br_flg_T_3, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 230:39] + node _exe_br_flg_T_5 = mux(_exe_br_flg_T_2, _exe_br_flg_T_4, UInt<1>("h0")) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _exe_br_flg_T_6 = mux(_exe_br_flg_T, _exe_br_flg_T_1, _exe_br_flg_T_5) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node exe_br_flg = _exe_br_flg_T_6 @[src/main/scala/micore/Core.scala 226:14 61:24] + node _exe_br_target_T = add(exe_reg_pc, exe_reg_imm_b_sext) @[src/main/scala/micore/Core.scala 234:31] + node _exe_br_target_T_1 = tail(_exe_br_target_T, 1) @[src/main/scala/micore/Core.scala 234:31] + node exe_br_target = _exe_br_target_T_1 @[src/main/scala/micore/Core.scala 234:17 62:27] node if_pc_next = mux(exe_br_flg, exe_br_target, _if_pc_next_T_1) @[src/main/scala/chisel3/util/Mux.scala 126:16] - node _id_reg_pc_T = mux(stall_flg, id_reg_pc, if_reg_pc) @[src/main/scala/micore/Core.scala 76:19] - node _id_reg_inst_T = or(exe_br_flg, exe_jmp_flg) @[src/main/scala/micore/Core.scala 80:19] + node _id_reg_pc_T = mux(stall_flg, id_reg_pc, if_reg_pc) @[src/main/scala/micore/Core.scala 78:19] + node _id_reg_inst_T = or(exe_br_flg, exe_jmp_flg) @[src/main/scala/micore/Core.scala 82:19] node _id_reg_inst_T_1 = mux(stall_flg, id_reg_inst, io_imem_inst) @[src/main/scala/chisel3/util/Mux.scala 126:16] node _id_reg_inst_T_2 = mux(_id_reg_inst_T, UInt<32>("h0"), _id_reg_inst_T_1) @[src/main/scala/chisel3/util/Mux.scala 126:16] - node id_wb_addr = bits(id_reg_inst, 15, 11) @[src/main/scala/micore/Core.scala 88:31] - node _id_inst_T = or(exe_br_flg, exe_jmp_flg) @[src/main/scala/micore/Core.scala 98:21] - node _id_inst_T_1 = or(_id_inst_T, stall_flg) @[src/main/scala/micore/Core.scala 98:36] - node id_inst = mux(_id_inst_T_1, UInt<32>("h0"), id_reg_inst) @[src/main/scala/micore/Core.scala 98:8] - node _id_rs1_data_T = eq(id_rs1_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 101:17] - node _id_rs1_data_T_1 = eq(id_rs1_addr, mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 104:20] - node _id_rs1_data_T_2 = eq(mem_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 104:60] - node _id_rs1_data_T_3 = and(_id_rs1_data_T_1, _id_rs1_data_T_2) @[src/main/scala/micore/Core.scala 104:41] - node _id_rs1_data_T_4 = eq(id_rs1_addr, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 107:22] - node _id_rs1_data_T_5 = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 107:60] - node _id_rs1_data_T_6 = and(_id_rs1_data_T_4, _id_rs1_data_T_5) @[src/main/scala/micore/Core.scala 107:42] - node _id_rs1_data_T_7 = mux(_id_rs1_data_T_6, wb_reg_wb_data, regfile.id_rs1_data_MPORT.data) @[src/main/scala/micore/Core.scala 106:10] - node _id_rs1_data_T_8 = mux(_id_rs1_data_T_3, mem_reg_alu_out, _id_rs1_data_T_7) @[src/main/scala/micore/Core.scala 103:8] - node id_rs1_data = mux(_id_rs1_data_T, UInt<32>("h0"), _id_rs1_data_T_8) @[src/main/scala/micore/Core.scala 100:24] - node _id_rs2_data_T = eq(id_rs2_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 114:17] - node _id_rs2_data_T_1 = eq(id_rs2_addr, mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 117:20] - node _id_rs2_data_T_2 = eq(mem_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 117:60] - node _id_rs2_data_T_3 = and(_id_rs2_data_T_1, _id_rs2_data_T_2) @[src/main/scala/micore/Core.scala 117:41] - node _id_rs2_data_T_4 = eq(id_rs2_addr, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 120:22] - node _id_rs2_data_T_5 = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 120:60] - node _id_rs2_data_T_6 = and(_id_rs2_data_T_4, _id_rs2_data_T_5) @[src/main/scala/micore/Core.scala 120:42] - node _id_rs2_data_T_7 = mux(_id_rs2_data_T_6, wb_reg_wb_data, regfile.id_rs2_data_MPORT.data) @[src/main/scala/micore/Core.scala 119:10] - node _id_rs2_data_T_8 = mux(_id_rs2_data_T_3, mem_reg_alu_out, _id_rs2_data_T_7) @[src/main/scala/micore/Core.scala 116:8] - node id_rs2_data = mux(_id_rs2_data_T, UInt<32>("h0"), _id_rs2_data_T_8) @[src/main/scala/micore/Core.scala 113:24] - node _id_imm_i_sext_T = bits(id_inst, 15, 15) @[src/main/scala/micore/Core.scala 128:43] - node _id_imm_i_sext_T_1 = mux(_id_imm_i_sext_T, UInt<16>("hffff"), UInt<16>("h0")) @[src/main/scala/micore/Core.scala 128:31] - node _id_imm_i_sext_T_2 = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 128:57] - node id_imm_i_sext = cat(_id_imm_i_sext_T_1, _id_imm_i_sext_T_2) @[src/main/scala/micore/Core.scala 128:26] - node _id_imm_b_sext_T = bits(id_inst, 15, 15) @[src/main/scala/micore/Core.scala 129:43] - node _id_imm_b_sext_T_1 = mux(_id_imm_b_sext_T, UInt<16>("hffff"), UInt<16>("h0")) @[src/main/scala/micore/Core.scala 129:31] - node _id_imm_b_sext_T_2 = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 129:57] - node id_imm_b_sext = cat(_id_imm_b_sext_T_1, _id_imm_b_sext_T_2) @[src/main/scala/micore/Core.scala 129:26] - node _csignals_T = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _id_inst_T = or(exe_br_flg, exe_jmp_flg) @[src/main/scala/micore/Core.scala 99:21] + node _id_inst_T_1 = or(_id_inst_T, stall_flg) @[src/main/scala/micore/Core.scala 99:36] + node id_inst = mux(_id_inst_T_1, UInt<32>("h0"), id_reg_inst) @[src/main/scala/micore/Core.scala 99:8] + node id_rs1_addr = bits(id_inst, 25, 21) @[src/main/scala/micore/Core.scala 101:28] + node id_rs2_addr = bits(id_inst, 20, 16) @[src/main/scala/micore/Core.scala 102:28] + node id_wb_addr = bits(id_inst, 15, 11) @[src/main/scala/micore/Core.scala 103:27] + node _id_rs1_data_T = eq(id_rs1_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 109:20] + node _id_rs1_data_T_1 = eq(id_rs1_addr, mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 110:21] + node _id_rs1_data_T_2 = eq(mem_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 110:61] + node _id_rs1_data_T_3 = and(_id_rs1_data_T_1, _id_rs1_data_T_2) @[src/main/scala/micore/Core.scala 110:42] + node _id_rs1_data_T_4 = eq(id_rs1_addr, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 111:21] + node _id_rs1_data_T_5 = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 111:59] + node _id_rs1_data_T_6 = and(_id_rs1_data_T_4, _id_rs1_data_T_5) @[src/main/scala/micore/Core.scala 111:41] + node _id_rs1_data_T_7 = mux(_id_rs1_data_T_6, wb_reg_wb_data, regfile.id_rs1_data_MPORT.data) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _mem_wb_data_T = eq(mem_reg_wb_sel, UInt<3>("h2")) @[src/main/scala/micore/Core.scala 257:23] + node _mem_wb_data_T_1 = eq(mem_reg_wb_sel, UInt<3>("h3")) @[src/main/scala/micore/Core.scala 258:23] + node _mem_wb_data_T_2 = add(mem_reg_pc, UInt<32>("h4")) @[src/main/scala/micore/Core.scala 258:49] + node _mem_wb_data_T_3 = tail(_mem_wb_data_T_2, 1) @[src/main/scala/micore/Core.scala 258:49] + node _mem_wb_data_T_4 = mux(_mem_wb_data_T_1, _mem_wb_data_T_3, mem_reg_alu_out) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _mem_wb_data_T_5 = mux(_mem_wb_data_T, io_dmem_rdata, _mem_wb_data_T_4) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node mem_wb_data = _mem_wb_data_T_5 @[src/main/scala/micore/Core.scala 105:25 254:15] + node _id_rs1_data_T_8 = mux(_id_rs1_data_T_3, mem_wb_data, _id_rs1_data_T_7) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node id_rs1_data = mux(_id_rs1_data_T, UInt<32>("h0"), _id_rs1_data_T_8) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_rs2_data_T = eq(id_rs2_addr, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 117:20] + node _id_rs2_data_T_1 = eq(id_rs2_addr, mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 118:21] + node _id_rs2_data_T_2 = eq(mem_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 118:61] + node _id_rs2_data_T_3 = and(_id_rs2_data_T_1, _id_rs2_data_T_2) @[src/main/scala/micore/Core.scala 118:42] + node _id_rs2_data_T_4 = eq(id_rs2_addr, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 119:21] + node _id_rs2_data_T_5 = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 119:59] + node _id_rs2_data_T_6 = and(_id_rs2_data_T_4, _id_rs2_data_T_5) @[src/main/scala/micore/Core.scala 119:41] + node _id_rs2_data_T_7 = mux(_id_rs2_data_T_6, wb_reg_wb_data, regfile.id_rs2_data_MPORT.data) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_rs2_data_T_8 = mux(_id_rs2_data_T_3, mem_wb_data, _id_rs2_data_T_7) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node id_rs2_data = mux(_id_rs2_data_T, UInt<32>("h0"), _id_rs2_data_T_8) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node id_imm_i = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 123:25] + node _id_imm_i_sext_T = bits(id_imm_i, 15, 15) @[src/main/scala/micore/Core.scala 124:44] + node _id_imm_i_sext_T_1 = mux(_id_imm_i_sext_T, UInt<16>("hffff"), UInt<16>("h0")) @[src/main/scala/micore/Core.scala 124:31] + node id_imm_i_sext = cat(_id_imm_i_sext_T_1, id_imm_i) @[src/main/scala/micore/Core.scala 124:26] + node _id_imm_s_T = bits(id_inst, 15, 11) @[src/main/scala/micore/Core.scala 125:29] + node _id_imm_s_T_1 = bits(id_inst, 25, 21) @[src/main/scala/micore/Core.scala 125:46] + node id_imm_s = cat(_id_imm_s_T, _id_imm_s_T_1) @[src/main/scala/micore/Core.scala 125:21] + node _id_imm_s_sext_T = bits(id_imm_s, 9, 9) @[src/main/scala/micore/Core.scala 126:44] + node _id_imm_s_sext_T_1 = mux(_id_imm_s_sext_T, UInt<22>("h3fffff"), UInt<22>("h0")) @[src/main/scala/micore/Core.scala 126:31] + node id_imm_s_sext = cat(_id_imm_s_sext_T_1, id_imm_s) @[src/main/scala/micore/Core.scala 126:26] + node _id_imm_b_T = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 127:29] + node id_imm_b = cat(_id_imm_b_T, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 127:21] + node _id_imm_b_sext_T = bits(id_imm_b, 17, 17) @[src/main/scala/micore/Core.scala 128:44] + node _id_imm_b_sext_T_1 = mux(_id_imm_b_sext_T, UInt<14>("h3fff"), UInt<14>("h0")) @[src/main/scala/micore/Core.scala 128:31] + node id_imm_b_sext = cat(_id_imm_b_sext_T_1, id_imm_b) @[src/main/scala/micore/Core.scala 128:26] + node _id_imm_j_T = bits(id_inst, 25, 0) @[src/main/scala/micore/Core.scala 129:29] + node id_imm_j = cat(_id_imm_j_T, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 129:21] + node _id_imm_j_sext_T = bits(id_imm_j, 25, 25) @[src/main/scala/micore/Core.scala 130:43] + node _id_imm_j_sext_T_1 = mux(_id_imm_j_sext_T, UInt<6>("h3f"), UInt<6>("h0")) @[src/main/scala/micore/Core.scala 130:31] + node id_imm_j_sext_hi = cat(_id_imm_j_sext_T_1, id_imm_j) @[src/main/scala/micore/Core.scala 130:26] + node id_imm_j_sext = cat(id_imm_j_sext_hi, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 130:26] + node id_imm_u = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 131:25] + node _id_imm_u_shifted_T = mux(UInt<1>("h0"), UInt<16>("hffff"), UInt<16>("h0")) @[src/main/scala/micore/Core.scala 132:44] + node id_imm_u_shifted = cat(id_imm_u, _id_imm_u_shifted_T) @[src/main/scala/micore/Core.scala 132:29] + node id_imm_z = bits(id_inst, 15, 11) @[src/main/scala/micore/Core.scala 133:25] + node _id_imm_z_uext_T = mux(UInt<1>("h0"), UInt<27>("h7ffffff"), UInt<27>("h0")) @[src/main/scala/micore/Core.scala 134:31] + node id_imm_z_uext = cat(_id_imm_z_uext_T, id_imm_z) @[src/main/scala/micore/Core.scala 134:26] + node _csignals_T = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_1 = eq(UInt<34>("h230000000"), _csignals_T) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_2 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_2 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_3 = eq(UInt<34>("h2b0000000"), _csignals_T_2) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_4 = and(id_inst, UInt<32>("hfc0007ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_5 = eq(UInt<6>("h20"), _csignals_T_4) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_6 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_6 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_7 = eq(UInt<32>("h80000000"), _csignals_T_6) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_8 = and(id_inst, UInt<32>("hfc0007ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_9 = eq(UInt<6>("h22"), _csignals_T_8) @[src/main/scala/chisel3/util/Lookup.scala 31:38] @@ -189,285 +240,388 @@ circuit TopOrigin : node _csignals_T_13 = eq(UInt<6>("h25"), _csignals_T_12) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_14 = and(id_inst, UInt<32>("hfc0007ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_15 = eq(UInt<6>("h26"), _csignals_T_14) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_16 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_16 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_17 = eq(UInt<32>("hc0000000"), _csignals_T_16) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_18 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_18 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] node _csignals_T_19 = eq(UInt<32>("hd0000000"), _csignals_T_18) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_20 = and(id_inst, UInt<31>("h7ff0003f")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_21 = eq(UInt<1>("h0"), _csignals_T_20) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_22 = and(id_inst, UInt<31>("h7ff0003f")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_23 = eq(UInt<2>("h2"), _csignals_T_22) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_24 = and(id_inst, UInt<31>("h7ff0003f")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_25 = eq(UInt<2>("h3"), _csignals_T_24) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_26 = and(id_inst, UInt<32>("hfc0007ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_27 = eq(UInt<6>("h2a"), _csignals_T_26) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_28 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_29 = eq(UInt<31>("h40000000"), _csignals_T_28) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_30 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_31 = eq(UInt<31>("h50000000"), _csignals_T_30) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_32 = and(id_inst, UInt<32>("hffffffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_33 = eq(UInt<28>("hc000000"), _csignals_T_32) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_34 = and(id_inst, UInt<34>("h3f000ffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_35 = eq(UInt<4>("h8"), _csignals_T_34) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_36 = and(id_inst, UInt<33>("h1ffc003ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_37 = eq(UInt<31>("h78000000"), _csignals_T_36) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_38 = and(id_inst, UInt<33>("h1ffffffff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_39 = eq(UInt<1>("h0"), _csignals_T_38) @[src/main/scala/chisel3/util/Lookup.scala 31:38] - node _csignals_T_40 = mux(_csignals_T_39, UInt<5>("h0"), UInt<5>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_41 = mux(_csignals_T_37, UInt<5>("h1"), _csignals_T_40) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_42 = mux(_csignals_T_35, UInt<5>("he"), _csignals_T_41) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_43 = mux(_csignals_T_33, UInt<5>("h1"), _csignals_T_42) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_44 = mux(_csignals_T_31, UInt<5>("hc"), _csignals_T_43) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_45 = mux(_csignals_T_29, UInt<5>("hb"), _csignals_T_44) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_46 = mux(_csignals_T_27, UInt<5>("h9"), _csignals_T_45) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_47 = mux(_csignals_T_25, UInt<5>("h8"), _csignals_T_46) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_48 = mux(_csignals_T_23, UInt<5>("h7"), _csignals_T_47) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_49 = mux(_csignals_T_21, UInt<5>("h6"), _csignals_T_48) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_50 = mux(_csignals_T_19, UInt<5>("h4"), _csignals_T_49) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_51 = mux(_csignals_T_17, UInt<5>("h3"), _csignals_T_50) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_52 = mux(_csignals_T_15, UInt<5>("h5"), _csignals_T_51) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_53 = mux(_csignals_T_13, UInt<5>("h4"), _csignals_T_52) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_54 = mux(_csignals_T_11, UInt<5>("h3"), _csignals_T_53) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_55 = mux(_csignals_T_9, UInt<5>("h2"), _csignals_T_54) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_56 = mux(_csignals_T_7, UInt<5>("h1"), _csignals_T_55) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_57 = mux(_csignals_T_5, UInt<5>("h1"), _csignals_T_56) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_58 = mux(_csignals_T_3, UInt<5>("h1"), _csignals_T_57) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_0 = mux(_csignals_T_1, UInt<5>("h1"), _csignals_T_58) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_59 = mux(_csignals_T_39, UInt<2>("h2"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_60 = mux(_csignals_T_37, UInt<2>("h2"), _csignals_T_59) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_61 = mux(_csignals_T_35, UInt<2>("h0"), _csignals_T_60) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_62 = mux(_csignals_T_33, UInt<2>("h1"), _csignals_T_61) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_63 = mux(_csignals_T_31, UInt<2>("h0"), _csignals_T_62) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_64 = mux(_csignals_T_29, UInt<2>("h0"), _csignals_T_63) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_65 = mux(_csignals_T_27, UInt<2>("h0"), _csignals_T_64) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_66 = mux(_csignals_T_25, UInt<2>("h0"), _csignals_T_65) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_67 = mux(_csignals_T_23, UInt<2>("h0"), _csignals_T_66) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_68 = mux(_csignals_T_21, UInt<2>("h0"), _csignals_T_67) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_69 = mux(_csignals_T_19, UInt<2>("h0"), _csignals_T_68) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_70 = mux(_csignals_T_17, UInt<2>("h0"), _csignals_T_69) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_71 = mux(_csignals_T_15, UInt<2>("h0"), _csignals_T_70) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_72 = mux(_csignals_T_13, UInt<2>("h0"), _csignals_T_71) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_73 = mux(_csignals_T_11, UInt<2>("h0"), _csignals_T_72) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_74 = mux(_csignals_T_9, UInt<2>("h0"), _csignals_T_73) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_75 = mux(_csignals_T_7, UInt<2>("h0"), _csignals_T_74) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_76 = mux(_csignals_T_5, UInt<2>("h0"), _csignals_T_75) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_77 = mux(_csignals_T_3, UInt<2>("h0"), _csignals_T_76) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_1 = mux(_csignals_T_1, UInt<2>("h0"), _csignals_T_77) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_78 = mux(_csignals_T_39, UInt<3>("h0"), UInt<3>("h1")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_79 = mux(_csignals_T_37, UInt<3>("h5"), _csignals_T_78) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_80 = mux(_csignals_T_35, UInt<3>("h0"), _csignals_T_79) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_81 = mux(_csignals_T_33, UInt<3>("h4"), _csignals_T_80) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_82 = mux(_csignals_T_31, UInt<3>("h1"), _csignals_T_81) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_83 = mux(_csignals_T_29, UInt<3>("h1"), _csignals_T_82) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_84 = mux(_csignals_T_27, UInt<3>("h1"), _csignals_T_83) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_85 = mux(_csignals_T_25, UInt<3>("h1"), _csignals_T_84) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_86 = mux(_csignals_T_23, UInt<3>("h1"), _csignals_T_85) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_87 = mux(_csignals_T_21, UInt<3>("h1"), _csignals_T_86) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_88 = mux(_csignals_T_19, UInt<3>("h2"), _csignals_T_87) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_89 = mux(_csignals_T_17, UInt<3>("h2"), _csignals_T_88) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_90 = mux(_csignals_T_15, UInt<3>("h1"), _csignals_T_89) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_91 = mux(_csignals_T_13, UInt<3>("h1"), _csignals_T_90) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_92 = mux(_csignals_T_11, UInt<3>("h1"), _csignals_T_91) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_93 = mux(_csignals_T_9, UInt<3>("h1"), _csignals_T_92) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_94 = mux(_csignals_T_7, UInt<3>("h2"), _csignals_T_93) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_95 = mux(_csignals_T_5, UInt<3>("h1"), _csignals_T_94) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_96 = mux(_csignals_T_3, UInt<3>("h3"), _csignals_T_95) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_2 = mux(_csignals_T_1, UInt<3>("h2"), _csignals_T_96) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_97 = mux(_csignals_T_39, UInt<2>("h0"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_98 = mux(_csignals_T_37, UInt<2>("h0"), _csignals_T_97) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_99 = mux(_csignals_T_35, UInt<2>("h0"), _csignals_T_98) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_100 = mux(_csignals_T_33, UInt<2>("h0"), _csignals_T_99) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_101 = mux(_csignals_T_31, UInt<2>("h0"), _csignals_T_100) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_102 = mux(_csignals_T_29, UInt<2>("h0"), _csignals_T_101) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_103 = mux(_csignals_T_27, UInt<2>("h0"), _csignals_T_102) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_104 = mux(_csignals_T_25, UInt<2>("h0"), _csignals_T_103) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_105 = mux(_csignals_T_23, UInt<2>("h0"), _csignals_T_104) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_106 = mux(_csignals_T_21, UInt<2>("h0"), _csignals_T_105) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_107 = mux(_csignals_T_19, UInt<2>("h0"), _csignals_T_106) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_108 = mux(_csignals_T_17, UInt<2>("h0"), _csignals_T_107) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_109 = mux(_csignals_T_15, UInt<2>("h0"), _csignals_T_108) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_110 = mux(_csignals_T_13, UInt<2>("h0"), _csignals_T_109) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_111 = mux(_csignals_T_11, UInt<2>("h0"), _csignals_T_110) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_112 = mux(_csignals_T_9, UInt<2>("h0"), _csignals_T_111) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_113 = mux(_csignals_T_7, UInt<2>("h0"), _csignals_T_112) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_114 = mux(_csignals_T_5, UInt<2>("h0"), _csignals_T_113) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_115 = mux(_csignals_T_3, UInt<2>("h1"), _csignals_T_114) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_3 = mux(_csignals_T_1, UInt<2>("h0"), _csignals_T_115) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_116 = mux(_csignals_T_39, UInt<2>("h0"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_117 = mux(_csignals_T_37, UInt<2>("h1"), _csignals_T_116) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_118 = mux(_csignals_T_35, UInt<2>("h0"), _csignals_T_117) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_119 = mux(_csignals_T_33, UInt<2>("h1"), _csignals_T_118) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_120 = mux(_csignals_T_31, UInt<2>("h0"), _csignals_T_119) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_121 = mux(_csignals_T_29, UInt<2>("h0"), _csignals_T_120) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_122 = mux(_csignals_T_27, UInt<2>("h1"), _csignals_T_121) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_123 = mux(_csignals_T_25, UInt<2>("h1"), _csignals_T_122) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_124 = mux(_csignals_T_23, UInt<2>("h1"), _csignals_T_123) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_125 = mux(_csignals_T_21, UInt<2>("h1"), _csignals_T_124) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_126 = mux(_csignals_T_19, UInt<2>("h1"), _csignals_T_125) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_127 = mux(_csignals_T_17, UInt<2>("h1"), _csignals_T_126) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_128 = mux(_csignals_T_15, UInt<2>("h1"), _csignals_T_127) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_129 = mux(_csignals_T_13, UInt<2>("h1"), _csignals_T_128) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_130 = mux(_csignals_T_11, UInt<2>("h1"), _csignals_T_129) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_131 = mux(_csignals_T_9, UInt<2>("h1"), _csignals_T_130) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_132 = mux(_csignals_T_7, UInt<2>("h1"), _csignals_T_131) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_133 = mux(_csignals_T_5, UInt<2>("h1"), _csignals_T_132) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_134 = mux(_csignals_T_3, UInt<2>("h0"), _csignals_T_133) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_4 = mux(_csignals_T_1, UInt<2>("h1"), _csignals_T_134) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_135 = mux(_csignals_T_39, UInt<3>("h0"), UInt<3>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_136 = mux(_csignals_T_37, UInt<3>("h1"), _csignals_T_135) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_137 = mux(_csignals_T_35, UInt<3>("h0"), _csignals_T_136) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_138 = mux(_csignals_T_33, UInt<3>("h3"), _csignals_T_137) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_139 = mux(_csignals_T_31, UInt<3>("h0"), _csignals_T_138) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_140 = mux(_csignals_T_29, UInt<3>("h0"), _csignals_T_139) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_141 = mux(_csignals_T_27, UInt<3>("h1"), _csignals_T_140) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_142 = mux(_csignals_T_25, UInt<3>("h1"), _csignals_T_141) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_143 = mux(_csignals_T_23, UInt<3>("h1"), _csignals_T_142) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_144 = mux(_csignals_T_21, UInt<3>("h1"), _csignals_T_143) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_145 = mux(_csignals_T_19, UInt<3>("h1"), _csignals_T_144) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_146 = mux(_csignals_T_17, UInt<3>("h1"), _csignals_T_145) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_147 = mux(_csignals_T_15, UInt<3>("h1"), _csignals_T_146) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_148 = mux(_csignals_T_13, UInt<3>("h1"), _csignals_T_147) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_149 = mux(_csignals_T_11, UInt<3>("h1"), _csignals_T_148) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_150 = mux(_csignals_T_9, UInt<3>("h1"), _csignals_T_149) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_151 = mux(_csignals_T_7, UInt<3>("h1"), _csignals_T_150) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_152 = mux(_csignals_T_5, UInt<3>("h1"), _csignals_T_151) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _csignals_T_153 = mux(_csignals_T_3, UInt<3>("h0"), _csignals_T_152) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node csignals_5 = mux(_csignals_T_1, UInt<3>("h2"), _csignals_T_153) @[src/main/scala/chisel3/util/Lookup.scala 34:39] - node _id_op1_data_T = eq(csignals_1, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 163:16] - node _id_op1_data_T_1 = eq(csignals_1, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 165:20] - node _id_op1_data_T_2 = mux(_id_op1_data_T_1, id_reg_pc, UInt<32>("h0")) @[src/main/scala/micore/Core.scala 165:8] - node id_op1_data = mux(_id_op1_data_T, id_rs1_data, _id_op1_data_T_2) @[src/main/scala/micore/Core.scala 162:24] - node _id_op2_data_T = bits(id_inst, 25, 25) @[src/main/scala/micore/Core.scala 175:37] - node _id_op2_data_T_1 = mux(_id_op2_data_T, UInt<4>("hf"), UInt<4>("h0")) @[src/main/scala/micore/Core.scala 175:26] - node _id_op2_data_T_2 = bits(id_inst, 25, 0) @[src/main/scala/micore/Core.scala 175:51] - node id_op2_data_hi = cat(_id_op2_data_T_1, _id_op2_data_T_2) @[src/main/scala/micore/Core.scala 175:21] - node _id_op2_data_T_3 = cat(id_op2_data_hi, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 175:21] - node _id_op2_data_T_4 = bits(id_inst, 15, 0) @[src/main/scala/micore/Core.scala 176:29] - node _id_op2_data_T_5 = mux(UInt<1>("h0"), UInt<16>("hffff"), UInt<16>("h0")) @[src/main/scala/micore/Core.scala 176:42] - node _id_op2_data_T_6 = cat(_id_op2_data_T_4, _id_op2_data_T_5) @[src/main/scala/micore/Core.scala 176:21] - node _id_op2_data_T_7 = eq(UInt<3>("h1"), csignals_2) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_8 = mux(_id_op2_data_T_7, id_rs2_data, UInt<32>("h0")) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_9 = eq(UInt<3>("h2"), csignals_2) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_10 = mux(_id_op2_data_T_9, id_imm_i_sext, _id_op2_data_T_8) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_11 = eq(UInt<3>("h3"), csignals_2) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_12 = mux(_id_op2_data_T_11, id_imm_i_sext, _id_op2_data_T_10) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_13 = eq(UInt<3>("h4"), csignals_2) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_14 = mux(_id_op2_data_T_13, _id_op2_data_T_3, _id_op2_data_T_12) @[src/main/scala/micore/Core.scala 170:4] - node _id_op2_data_T_15 = eq(UInt<3>("h5"), csignals_2) @[src/main/scala/micore/Core.scala 170:4] - node id_op2_data = mux(_id_op2_data_T_15, _id_op2_data_T_6, _id_op2_data_T_14) @[src/main/scala/micore/Core.scala 170:4] - node _mem_wb_data_T = add(mem_reg_pc, UInt<32>("h4")) @[src/main/scala/micore/Core.scala 244:28] - node _mem_wb_data_T_1 = tail(_mem_wb_data_T, 1) @[src/main/scala/micore/Core.scala 244:28] - node _mem_wb_data_T_2 = eq(UInt<3>("h2"), mem_reg_wb_sel) @[src/main/scala/micore/Core.scala 241:4] - node _mem_wb_data_T_3 = mux(_mem_wb_data_T_2, io_dmem_rdata, mem_reg_alu_out) @[src/main/scala/micore/Core.scala 241:4] - node _mem_wb_data_T_4 = eq(UInt<3>("h3"), mem_reg_wb_sel) @[src/main/scala/micore/Core.scala 241:4] - node mem_wb_data = mux(_mem_wb_data_T_4, _mem_wb_data_T_1, _mem_wb_data_T_3) @[src/main/scala/micore/Core.scala 241:4] - node _T = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 254:22] - node _GEN_0 = validif(_T, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 254:33 255:12] - node _GEN_1 = validif(_T, clock) @[src/main/scala/micore/Core.scala 254:33 255:12] - node _GEN_2 = mux(_T, UInt<1>("h1"), UInt<1>("h0")) @[src/main/scala/micore/Core.scala 254:33 255:12 16:28] - node _GEN_3 = validif(_T, UInt<1>("h1")) @[src/main/scala/micore/Core.scala 254:33 255:29] - node _GEN_4 = validif(_T, wb_reg_wb_data) @[src/main/scala/micore/Core.scala 254:33 255:29] - node _io_exit_T = eq(id_reg_inst, UInt<32>("hc0000000")) @[src/main/scala/micore/Core.scala 258:27] - io_imem_addr <= if_reg_pc @[src/main/scala/micore/Core.scala 55:16] - io_dmem_addr <= mem_reg_alu_out @[src/main/scala/micore/Core.scala 234:16] - io_dmem_wen <= bits(mem_reg_mem_wen, 0, 0) @[src/main/scala/micore/Core.scala 235:15] - io_dmem_wdata <= mem_reg_rs2_data @[src/main/scala/micore/Core.scala 236:17] - io_exit <= _io_exit_T @[src/main/scala/micore/Core.scala 258:11] - regfile.id_rs1_data_MPORT.addr <= id_rs1_addr @[src/main/scala/micore/Core.scala 109:16] - regfile.id_rs1_data_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Core.scala 86:32] - regfile.id_rs1_data_MPORT.clk <= clock @[src/main/scala/micore/Core.scala 109:16] - regfile.id_rs2_data_MPORT.addr <= id_rs2_addr @[src/main/scala/micore/Core.scala 122:16] - regfile.id_rs2_data_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Core.scala 87:32] - regfile.id_rs2_data_MPORT.clk <= clock @[src/main/scala/micore/Core.scala 122:16] + node _csignals_T_20 = and(id_inst, UInt<32>("hfc0007ff")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_21 = eq(UInt<6>("h2a"), _csignals_T_20) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_22 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_23 = eq(UInt<31>("h40000000"), _csignals_T_22) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_24 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_25 = eq(UInt<31>("h50000000"), _csignals_T_24) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_26 = and(id_inst, UInt<34>("h3f0000000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_27 = eq(UInt<30>("h30000000"), _csignals_T_26) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_28 = and(id_inst, UInt<34>("h3ff800000")) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_29 = eq(UInt<32>("hf0000000"), _csignals_T_28) @[src/main/scala/chisel3/util/Lookup.scala 31:38] + node _csignals_T_30 = mux(_csignals_T_29, UInt<5>("h1"), UInt<5>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_31 = mux(_csignals_T_27, UInt<5>("h1"), _csignals_T_30) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_32 = mux(_csignals_T_25, UInt<5>("hc"), _csignals_T_31) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_33 = mux(_csignals_T_23, UInt<5>("hb"), _csignals_T_32) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_34 = mux(_csignals_T_21, UInt<5>("h9"), _csignals_T_33) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_35 = mux(_csignals_T_19, UInt<5>("h4"), _csignals_T_34) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_36 = mux(_csignals_T_17, UInt<5>("h3"), _csignals_T_35) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_37 = mux(_csignals_T_15, UInt<5>("h5"), _csignals_T_36) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_38 = mux(_csignals_T_13, UInt<5>("h4"), _csignals_T_37) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_39 = mux(_csignals_T_11, UInt<5>("h3"), _csignals_T_38) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_40 = mux(_csignals_T_9, UInt<5>("h2"), _csignals_T_39) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_41 = mux(_csignals_T_7, UInt<5>("h1"), _csignals_T_40) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_42 = mux(_csignals_T_5, UInt<5>("h1"), _csignals_T_41) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_43 = mux(_csignals_T_3, UInt<5>("h1"), _csignals_T_42) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_0 = mux(_csignals_T_1, UInt<5>("h1"), _csignals_T_43) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_44 = mux(_csignals_T_29, UInt<2>("h2"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_45 = mux(_csignals_T_27, UInt<2>("h1"), _csignals_T_44) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_46 = mux(_csignals_T_25, UInt<2>("h0"), _csignals_T_45) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_47 = mux(_csignals_T_23, UInt<2>("h0"), _csignals_T_46) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_48 = mux(_csignals_T_21, UInt<2>("h0"), _csignals_T_47) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_49 = mux(_csignals_T_19, UInt<2>("h0"), _csignals_T_48) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_50 = mux(_csignals_T_17, UInt<2>("h0"), _csignals_T_49) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_51 = mux(_csignals_T_15, UInt<2>("h0"), _csignals_T_50) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_52 = mux(_csignals_T_13, UInt<2>("h0"), _csignals_T_51) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_53 = mux(_csignals_T_11, UInt<2>("h0"), _csignals_T_52) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_54 = mux(_csignals_T_9, UInt<2>("h0"), _csignals_T_53) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_55 = mux(_csignals_T_7, UInt<2>("h0"), _csignals_T_54) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_56 = mux(_csignals_T_5, UInt<2>("h0"), _csignals_T_55) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_57 = mux(_csignals_T_3, UInt<2>("h0"), _csignals_T_56) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_1 = mux(_csignals_T_1, UInt<2>("h0"), _csignals_T_57) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_58 = mux(_csignals_T_29, UInt<3>("h5"), UInt<3>("h1")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_59 = mux(_csignals_T_27, UInt<3>("h4"), _csignals_T_58) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_60 = mux(_csignals_T_25, UInt<3>("h1"), _csignals_T_59) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_61 = mux(_csignals_T_23, UInt<3>("h1"), _csignals_T_60) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_62 = mux(_csignals_T_21, UInt<3>("h1"), _csignals_T_61) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_63 = mux(_csignals_T_19, UInt<3>("h2"), _csignals_T_62) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_64 = mux(_csignals_T_17, UInt<3>("h2"), _csignals_T_63) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_65 = mux(_csignals_T_15, UInt<3>("h1"), _csignals_T_64) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_66 = mux(_csignals_T_13, UInt<3>("h1"), _csignals_T_65) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_67 = mux(_csignals_T_11, UInt<3>("h1"), _csignals_T_66) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_68 = mux(_csignals_T_9, UInt<3>("h1"), _csignals_T_67) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_69 = mux(_csignals_T_7, UInt<3>("h2"), _csignals_T_68) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_70 = mux(_csignals_T_5, UInt<3>("h1"), _csignals_T_69) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_71 = mux(_csignals_T_3, UInt<3>("h3"), _csignals_T_70) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_2 = mux(_csignals_T_1, UInt<3>("h2"), _csignals_T_71) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_72 = mux(_csignals_T_29, UInt<2>("h0"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_73 = mux(_csignals_T_27, UInt<2>("h0"), _csignals_T_72) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_74 = mux(_csignals_T_25, UInt<2>("h0"), _csignals_T_73) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_75 = mux(_csignals_T_23, UInt<2>("h0"), _csignals_T_74) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_76 = mux(_csignals_T_21, UInt<2>("h0"), _csignals_T_75) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_77 = mux(_csignals_T_19, UInt<2>("h0"), _csignals_T_76) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_78 = mux(_csignals_T_17, UInt<2>("h0"), _csignals_T_77) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_79 = mux(_csignals_T_15, UInt<2>("h0"), _csignals_T_78) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_80 = mux(_csignals_T_13, UInt<2>("h0"), _csignals_T_79) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_81 = mux(_csignals_T_11, UInt<2>("h0"), _csignals_T_80) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_82 = mux(_csignals_T_9, UInt<2>("h0"), _csignals_T_81) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_83 = mux(_csignals_T_7, UInt<2>("h0"), _csignals_T_82) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_84 = mux(_csignals_T_5, UInt<2>("h0"), _csignals_T_83) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_85 = mux(_csignals_T_3, UInt<2>("h1"), _csignals_T_84) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_3 = mux(_csignals_T_1, UInt<2>("h0"), _csignals_T_85) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_86 = mux(_csignals_T_29, UInt<2>("h1"), UInt<2>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_87 = mux(_csignals_T_27, UInt<2>("h1"), _csignals_T_86) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_88 = mux(_csignals_T_25, UInt<2>("h0"), _csignals_T_87) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_89 = mux(_csignals_T_23, UInt<2>("h0"), _csignals_T_88) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_90 = mux(_csignals_T_21, UInt<2>("h1"), _csignals_T_89) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_91 = mux(_csignals_T_19, UInt<2>("h1"), _csignals_T_90) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_92 = mux(_csignals_T_17, UInt<2>("h1"), _csignals_T_91) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_93 = mux(_csignals_T_15, UInt<2>("h1"), _csignals_T_92) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_94 = mux(_csignals_T_13, UInt<2>("h1"), _csignals_T_93) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_95 = mux(_csignals_T_11, UInt<2>("h1"), _csignals_T_94) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_96 = mux(_csignals_T_9, UInt<2>("h1"), _csignals_T_95) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_97 = mux(_csignals_T_7, UInt<2>("h1"), _csignals_T_96) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_98 = mux(_csignals_T_5, UInt<2>("h1"), _csignals_T_97) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_99 = mux(_csignals_T_3, UInt<2>("h0"), _csignals_T_98) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_4 = mux(_csignals_T_1, UInt<2>("h1"), _csignals_T_99) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_100 = mux(_csignals_T_29, UInt<3>("h1"), UInt<3>("h0")) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_101 = mux(_csignals_T_27, UInt<3>("h3"), _csignals_T_100) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_102 = mux(_csignals_T_25, UInt<3>("h0"), _csignals_T_101) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_103 = mux(_csignals_T_23, UInt<3>("h0"), _csignals_T_102) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_104 = mux(_csignals_T_21, UInt<3>("h1"), _csignals_T_103) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_105 = mux(_csignals_T_19, UInt<3>("h1"), _csignals_T_104) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_106 = mux(_csignals_T_17, UInt<3>("h1"), _csignals_T_105) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_107 = mux(_csignals_T_15, UInt<3>("h1"), _csignals_T_106) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_108 = mux(_csignals_T_13, UInt<3>("h1"), _csignals_T_107) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_109 = mux(_csignals_T_11, UInt<3>("h1"), _csignals_T_108) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_110 = mux(_csignals_T_9, UInt<3>("h1"), _csignals_T_109) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_111 = mux(_csignals_T_7, UInt<3>("h1"), _csignals_T_110) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_112 = mux(_csignals_T_5, UInt<3>("h1"), _csignals_T_111) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _csignals_T_113 = mux(_csignals_T_3, UInt<3>("h0"), _csignals_T_112) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node csignals_5 = mux(_csignals_T_1, UInt<3>("h2"), _csignals_T_113) @[src/main/scala/chisel3/util/Lookup.scala 34:39] + node _id_op1_data_T = eq(csignals_1, UInt<2>("h0")) @[src/main/scala/micore/Core.scala 164:19] + node _id_op1_data_T_1 = eq(csignals_1, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 165:19] + node _id_op1_data_T_2 = eq(csignals_1, UInt<2>("h3")) @[src/main/scala/micore/Core.scala 166:19] + node _id_op1_data_T_3 = mux(_id_op1_data_T_2, id_imm_z_uext, UInt<32>("h0")) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_op1_data_T_4 = mux(_id_op1_data_T_1, id_reg_pc, _id_op1_data_T_3) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node id_op1_data = mux(_id_op1_data_T, id_rs1_data, _id_op1_data_T_4) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_op2_data_T = eq(csignals_2, UInt<3>("h1")) @[src/main/scala/micore/Core.scala 173:19] + node _id_op2_data_T_1 = eq(csignals_2, UInt<3>("h2")) @[src/main/scala/micore/Core.scala 174:19] + node _id_op2_data_T_2 = eq(csignals_2, UInt<3>("h3")) @[src/main/scala/micore/Core.scala 175:19] + node _id_op2_data_T_3 = eq(csignals_2, UInt<3>("h4")) @[src/main/scala/micore/Core.scala 176:19] + node _id_op2_data_T_4 = eq(csignals_2, UInt<3>("h5")) @[src/main/scala/micore/Core.scala 177:19] + node _id_op2_data_T_5 = mux(_id_op2_data_T_4, id_imm_u_shifted, UInt<32>("h0")) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_op2_data_T_6 = mux(_id_op2_data_T_3, id_imm_j_sext, _id_op2_data_T_5) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_op2_data_T_7 = mux(_id_op2_data_T_2, id_imm_s_sext, _id_op2_data_T_6) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _id_op2_data_T_8 = mux(_id_op2_data_T_1, id_imm_i_sext, _id_op2_data_T_7) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node id_op2_data = mux(_id_op2_data_T, id_rs2_data, _id_op2_data_T_8) @[src/main/scala/chisel3/util/Mux.scala 126:16] + node _T = eq(wb_reg_rf_wen, UInt<2>("h1")) @[src/main/scala/micore/Core.scala 268:22] + node _GEN_0 = validif(_T, wb_reg_wb_addr) @[src/main/scala/micore/Core.scala 268:{33,42}] + node _GEN_1 = validif(_T, clock) @[src/main/scala/micore/Core.scala 268:{33,42}] + node _GEN_2 = mux(_T, UInt<1>("h1"), UInt<1>("h0")) @[src/main/scala/micore/Core.scala 16:20 268:{33,42}] + node _GEN_3 = validif(_T, UInt<1>("h1")) @[src/main/scala/micore/Core.scala 268:{33,59}] + node _GEN_4 = validif(_T, wb_reg_wb_data) @[src/main/scala/micore/Core.scala 268:{33,59}] + node _io_exit_T = eq(id_reg_inst, UInt<32>("h114514")) @[src/main/scala/micore/Core.scala 272:27] + node _T_1 = asUInt(reset) @[src/main/scala/micore/Core.scala 273:9] + node _T_2 = eq(_T_1, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 273:9] + node _T_3 = asUInt(reset) @[src/main/scala/micore/Core.scala 275:9] + node _T_4 = eq(_T_3, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 275:9] + node _T_5 = asUInt(reset) @[src/main/scala/micore/Core.scala 276:9] + node _T_6 = eq(_T_5, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 276:9] + node _T_7 = asUInt(reset) @[src/main/scala/micore/Core.scala 277:9] + node _T_8 = eq(_T_7, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 277:9] + node _T_9 = asUInt(reset) @[src/main/scala/micore/Core.scala 278:9] + node _T_10 = eq(_T_9, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 278:9] + node _T_11 = asUInt(reset) @[src/main/scala/micore/Core.scala 279:9] + node _T_12 = eq(_T_11, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 279:9] + node _T_13 = asUInt(reset) @[src/main/scala/micore/Core.scala 280:9] + node _T_14 = eq(_T_13, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 280:9] + node _T_15 = asUInt(reset) @[src/main/scala/micore/Core.scala 281:9] + node _T_16 = eq(_T_15, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 281:9] + node _T_17 = asUInt(reset) @[src/main/scala/micore/Core.scala 282:9] + node _T_18 = eq(_T_17, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 282:9] + node _T_19 = asUInt(reset) @[src/main/scala/micore/Core.scala 283:9] + node _T_20 = eq(_T_19, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 283:9] + node _T_21 = asUInt(reset) @[src/main/scala/micore/Core.scala 284:9] + node _T_22 = eq(_T_21, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 284:9] + node _T_23 = asUInt(reset) @[src/main/scala/micore/Core.scala 285:9] + node _T_24 = eq(_T_23, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 285:9] + node _T_25 = asUInt(reset) @[src/main/scala/micore/Core.scala 286:9] + node _T_26 = eq(_T_25, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 286:9] + node _T_27 = asUInt(reset) @[src/main/scala/micore/Core.scala 287:9] + node _T_28 = eq(_T_27, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 287:9] + node _T_29 = asUInt(reset) @[src/main/scala/micore/Core.scala 288:9] + node _T_30 = eq(_T_29, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 288:9] + node _T_31 = asUInt(reset) @[src/main/scala/micore/Core.scala 289:9] + node _T_32 = eq(_T_31, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 289:9] + node _T_33 = asUInt(reset) @[src/main/scala/micore/Core.scala 290:9] + node _T_34 = eq(_T_33, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 290:9] + node _T_35 = asUInt(reset) @[src/main/scala/micore/Core.scala 294:9] + node _T_36 = eq(_T_35, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 294:9] + node _T_37 = asUInt(reset) @[src/main/scala/micore/Core.scala 295:9] + node _T_38 = eq(_T_37, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 295:9] + node _T_39 = asUInt(reset) @[src/main/scala/micore/Core.scala 296:9] + node _T_40 = eq(_T_39, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 296:9] + node _T_41 = asUInt(reset) @[src/main/scala/micore/Core.scala 297:9] + node _T_42 = eq(_T_41, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 297:9] + node _T_43 = asUInt(reset) @[src/main/scala/micore/Core.scala 298:9] + node _T_44 = eq(_T_43, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 298:9] + node _T_45 = asUInt(reset) @[src/main/scala/micore/Core.scala 299:9] + node _T_46 = eq(_T_45, UInt<1>("h0")) @[src/main/scala/micore/Core.scala 299:9] + io_imem_addr <= if_reg_pc @[src/main/scala/micore/Core.scala 57:16] + io_dmem_addr <= mem_reg_alu_out @[src/main/scala/micore/Core.scala 250:16] + io_dmem_wen <= bits(mem_reg_mem_wen, 0, 0) @[src/main/scala/micore/Core.scala 251:15] + io_dmem_wdata <= mem_reg_rs2_data @[src/main/scala/micore/Core.scala 252:17] + io_exit <= _io_exit_T @[src/main/scala/micore/Core.scala 272:11] + io_gp <= regfile.io_gp_MPORT.data @[src/main/scala/micore/Core.scala 271:9] + regfile.id_rs1_data_MPORT.addr <= id_rs1_addr @[src/main/scala/micore/Core.scala 107:12] + regfile.id_rs1_data_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Core.scala 107:12] + regfile.id_rs1_data_MPORT.clk <= clock @[src/main/scala/micore/Core.scala 107:12] + regfile.id_rs2_data_MPORT.addr <= id_rs2_addr @[src/main/scala/micore/Core.scala 115:12] + regfile.id_rs2_data_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Core.scala 115:12] + regfile.id_rs2_data_MPORT.clk <= clock @[src/main/scala/micore/Core.scala 115:12] + regfile.io_gp_MPORT.addr <= UInt<5>("h3") @[src/main/scala/micore/Core.scala 271:19] + regfile.io_gp_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Core.scala 271:19] + regfile.io_gp_MPORT.clk <= clock @[src/main/scala/micore/Core.scala 271:19] regfile.MPORT.addr <= _GEN_0 regfile.MPORT.en <= _GEN_2 regfile.MPORT.clk <= _GEN_1 regfile.MPORT.data <= _GEN_4 regfile.MPORT.mask <= _GEN_3 - id_reg_pc <= _id_reg_pc_T @[src/main/scala/micore/Core.scala 76:13] - id_reg_inst <= _id_reg_inst_T_2 @[src/main/scala/micore/Core.scala 77:15] - exe_reg_pc <= id_reg_pc @[src/main/scala/micore/Core.scala 181:14] - exe_reg_wb_addr <= id_wb_addr @[src/main/scala/micore/Core.scala 185:19] - exe_reg_op1_data <= id_op1_data @[src/main/scala/micore/Core.scala 182:20] - exe_reg_op2_data <= id_op2_data @[src/main/scala/micore/Core.scala 183:20] - exe_reg_rs2_data <= id_rs2_data @[src/main/scala/micore/Core.scala 184:20] - exe_reg_exe_fun <= csignals_0 @[src/main/scala/micore/Core.scala 190:19] - exe_reg_mem_wen <= csignals_3 @[src/main/scala/micore/Core.scala 187:19] - exe_reg_rf_wen <= csignals_4 @[src/main/scala/micore/Core.scala 188:18] - exe_reg_wb_sel <= csignals_5 @[src/main/scala/micore/Core.scala 186:18] - exe_reg_imm_b_sext <= id_imm_b_sext @[src/main/scala/micore/Core.scala 189:22] - mem_reg_pc <= exe_reg_pc @[src/main/scala/micore/Core.scala 225:14] - mem_reg_wb_addr <= exe_reg_wb_addr @[src/main/scala/micore/Core.scala 226:19] - mem_reg_alu_out <= exe_alu_out @[src/main/scala/micore/Core.scala 227:19] - mem_reg_rs2_data <= exe_reg_rs2_data @[src/main/scala/micore/Core.scala 228:20] - mem_reg_rf_wen <= exe_reg_rf_wen @[src/main/scala/micore/Core.scala 229:18] - mem_reg_wb_sel <= exe_reg_wb_sel @[src/main/scala/micore/Core.scala 230:18] - mem_reg_mem_wen <= exe_reg_mem_wen @[src/main/scala/micore/Core.scala 231:19] - wb_reg_wb_addr <= mem_reg_wb_addr @[src/main/scala/micore/Core.scala 249:18] - wb_reg_rf_wen <= mem_reg_rf_wen @[src/main/scala/micore/Core.scala 250:17] - wb_reg_wb_data <= mem_wb_data @[src/main/scala/micore/Core.scala 251:18] - if_reg_pc <= mux(reset, UInt<32>("h0"), if_pc_next) @[src/main/scala/micore/Core.scala 54:{26,26} 73:13] + id_reg_pc <= mux(reset, UInt<32>("h0"), _id_reg_pc_T) @[src/main/scala/micore/Core.scala 20:{26,26} 78:13] + id_reg_inst <= mux(reset, UInt<32>("h0"), _id_reg_inst_T_2) @[src/main/scala/micore/Core.scala 21:{28,28} 79:15] + exe_reg_pc <= mux(reset, UInt<32>("h0"), id_reg_pc) @[src/main/scala/micore/Core.scala 182:14 24:{27,27}] + exe_reg_wb_addr <= mux(reset, UInt<5>("h0"), id_wb_addr) @[src/main/scala/micore/Core.scala 186:19 25:{32,32}] + exe_reg_op1_data <= mux(reset, UInt<32>("h0"), id_op1_data) @[src/main/scala/micore/Core.scala 183:20 26:{33,33}] + exe_reg_op2_data <= bits(mux(reset, UInt<32>("h0"), id_op2_data), 31, 0) @[src/main/scala/micore/Core.scala 184:20 27:{33,33}] + exe_reg_rs2_data <= mux(reset, UInt<32>("h0"), id_rs2_data) @[src/main/scala/micore/Core.scala 185:20 28:{33,33}] + exe_reg_exe_fun <= mux(reset, UInt<5>("h0"), csignals_0) @[src/main/scala/micore/Core.scala 195:19 29:{32,32}] + exe_reg_mem_wen <= mux(reset, UInt<2>("h0"), csignals_3) @[src/main/scala/micore/Core.scala 188:19 30:{32,32}] + exe_reg_rf_wen <= mux(reset, UInt<2>("h0"), csignals_4) @[src/main/scala/micore/Core.scala 189:18 31:{31,31}] + exe_reg_wb_sel <= mux(reset, UInt<3>("h0"), csignals_5) @[src/main/scala/micore/Core.scala 187:18 32:{31,31}] + exe_reg_imm_i_sext <= mux(reset, UInt<32>("h0"), id_imm_i_sext) @[src/main/scala/micore/Core.scala 190:22 33:{35,35}] + exe_reg_imm_s_sext <= mux(reset, UInt<32>("h0"), id_imm_s_sext) @[src/main/scala/micore/Core.scala 191:22 34:{35,35}] + exe_reg_imm_b_sext <= mux(reset, UInt<32>("h0"), id_imm_b_sext) @[src/main/scala/micore/Core.scala 192:22 35:{35,35}] + exe_reg_imm_u_shifted <= mux(reset, UInt<32>("h0"), id_imm_u_shifted) @[src/main/scala/micore/Core.scala 193:25 36:{38,38}] + exe_reg_imm_z_uext <= mux(reset, UInt<32>("h0"), id_imm_z_uext) @[src/main/scala/micore/Core.scala 194:22 37:{35,35}] + mem_reg_pc <= mux(reset, UInt<32>("h0"), exe_reg_pc) @[src/main/scala/micore/Core.scala 239:14 40:{27,27}] + mem_reg_wb_addr <= mux(reset, UInt<5>("h0"), exe_reg_wb_addr) @[src/main/scala/micore/Core.scala 242:19 41:{32,32}] + mem_reg_op1_data <= mux(reset, UInt<32>("h0"), exe_reg_op1_data) @[src/main/scala/micore/Core.scala 240:20 42:{33,33}] + mem_reg_rs2_data <= mux(reset, UInt<32>("h0"), exe_reg_rs2_data) @[src/main/scala/micore/Core.scala 241:20 43:{33,33}] + mem_reg_mem_wen <= mux(reset, UInt<2>("h0"), exe_reg_mem_wen) @[src/main/scala/micore/Core.scala 247:19 44:{32,32}] + mem_reg_rf_wen <= mux(reset, UInt<2>("h0"), exe_reg_rf_wen) @[src/main/scala/micore/Core.scala 244:18 45:{31,31}] + mem_reg_wb_sel <= mux(reset, UInt<3>("h0"), exe_reg_wb_sel) @[src/main/scala/micore/Core.scala 245:18 46:{31,31}] + mem_reg_imm_z_uext <= mux(reset, UInt<32>("h0"), exe_reg_imm_z_uext) @[src/main/scala/micore/Core.scala 246:22 47:{35,35}] + mem_reg_alu_out <= mux(reset, UInt<32>("h0"), exe_alu_out) @[src/main/scala/micore/Core.scala 243:19 48:{32,32}] + wb_reg_wb_addr <= mux(reset, UInt<5>("h0"), mem_reg_wb_addr) @[src/main/scala/micore/Core.scala 265:18 51:{31,31}] + wb_reg_rf_wen <= mux(reset, UInt<2>("h0"), mem_reg_rf_wen) @[src/main/scala/micore/Core.scala 264:17 52:{30,30}] + wb_reg_wb_data <= mux(reset, UInt<32>("h0"), mem_wb_data) @[src/main/scala/micore/Core.scala 263:18 53:{31,31}] + if_reg_pc <= mux(reset, UInt<32>("h400000"), if_pc_next) @[src/main/scala/micore/Core.scala 56:{26,26} 75:13] + printf(clock, and(and(UInt<1>("h1"), _T_2), UInt<1>("h1")), "---------------------\n") : printf @[src/main/scala/micore/Core.scala 273:9] + printf(clock, and(and(UInt<1>("h1"), _T_4), UInt<1>("h1")), "id_reg_pc: 0x%x\n", id_reg_pc) : printf_1 @[src/main/scala/micore/Core.scala 275:9] + printf(clock, and(and(UInt<1>("h1"), _T_6), UInt<1>("h1")), "id_reg_inst: 0x%x\n", id_reg_inst) : printf_2 @[src/main/scala/micore/Core.scala 276:9] + printf(clock, and(and(UInt<1>("h1"), _T_8), UInt<1>("h1")), "id_inst: 0x%x\n", id_inst) : printf_3 @[src/main/scala/micore/Core.scala 277:9] + printf(clock, and(and(UInt<1>("h1"), _T_10), UInt<1>("h1")), "id_rs1_addr: 0x%x\n", id_rs1_addr) : printf_4 @[src/main/scala/micore/Core.scala 278:9] + printf(clock, and(and(UInt<1>("h1"), _T_12), UInt<1>("h1")), "id_rs2_addr: 0x%x\n", id_rs2_addr) : printf_5 @[src/main/scala/micore/Core.scala 279:9] + printf(clock, and(and(UInt<1>("h1"), _T_14), UInt<1>("h1")), "id_wb_addr: 0x%x\n", id_wb_addr) : printf_6 @[src/main/scala/micore/Core.scala 280:9] + printf(clock, and(and(UInt<1>("h1"), _T_16), UInt<1>("h1")), "id_exe_fun: 0x%x\n", csignals_0) : printf_7 @[src/main/scala/micore/Core.scala 281:9] + printf(clock, and(and(UInt<1>("h1"), _T_18), UInt<1>("h1")), "id_op1_sel: 0x%x\n", csignals_1) : printf_8 @[src/main/scala/micore/Core.scala 282:9] + printf(clock, and(and(UInt<1>("h1"), _T_20), UInt<1>("h1")), "id_op1_data: 0x%x\n", id_op1_data) : printf_9 @[src/main/scala/micore/Core.scala 283:9] + printf(clock, and(and(UInt<1>("h1"), _T_22), UInt<1>("h1")), "id_op2_sel: 0x%x\n", csignals_2) : printf_10 @[src/main/scala/micore/Core.scala 284:9] + printf(clock, and(and(UInt<1>("h1"), _T_24), UInt<1>("h1")), "id_op2_data: 0x%x\n", id_op2_data) : printf_11 @[src/main/scala/micore/Core.scala 285:9] + printf(clock, and(and(UInt<1>("h1"), _T_26), UInt<1>("h1")), "id_mem_wen: 0x%x\n", csignals_3) : printf_12 @[src/main/scala/micore/Core.scala 286:9] + printf(clock, and(and(UInt<1>("h1"), _T_28), UInt<1>("h1")), "id_rf_wen: 0x%x\n", csignals_4) : printf_13 @[src/main/scala/micore/Core.scala 287:9] + printf(clock, and(and(UInt<1>("h1"), _T_30), UInt<1>("h1")), "id_wb_sel: 0x%x\n", csignals_5) : printf_14 @[src/main/scala/micore/Core.scala 288:9] + printf(clock, and(and(UInt<1>("h1"), _T_32), UInt<1>("h1")), "id_rs1_data: 0x%x\n", id_rs1_data) : printf_15 @[src/main/scala/micore/Core.scala 289:9] + printf(clock, and(and(UInt<1>("h1"), _T_34), UInt<1>("h1")), "id_rs2_data: 0x%x\n", id_rs2_data) : printf_16 @[src/main/scala/micore/Core.scala 290:9] + printf(clock, and(and(UInt<1>("h1"), _T_36), UInt<1>("h1")), "exe_alu_out: 0x%x\n", exe_alu_out) : printf_17 @[src/main/scala/micore/Core.scala 294:9] + printf(clock, and(and(UInt<1>("h1"), _T_38), UInt<1>("h1")), "mem_reg_pc: 0x%x\n", mem_reg_pc) : printf_18 @[src/main/scala/micore/Core.scala 295:9] + printf(clock, and(and(UInt<1>("h1"), _T_40), UInt<1>("h1")), "mem_reg_alu_out: 0x%x\n", mem_reg_alu_out) : printf_19 @[src/main/scala/micore/Core.scala 296:9] + printf(clock, and(and(UInt<1>("h1"), _T_42), UInt<1>("h1")), "mem_wb_data: 0x%x\n", mem_wb_data) : printf_20 @[src/main/scala/micore/Core.scala 297:9] + printf(clock, and(and(UInt<1>("h1"), _T_44), UInt<1>("h1")), "wb_reg_wb_data: 0%x\n", wb_reg_wb_data) : printf_21 @[src/main/scala/micore/Core.scala 298:9] + printf(clock, and(and(UInt<1>("h1"), _T_46), UInt<1>("h1")), "---------------------\n") : printf_22 @[src/main/scala/micore/Core.scala 299:9] - module Memory : @[src/main/scala/micore/Memory.scala 20:7] - input clock : Clock @[src/main/scala/micore/Memory.scala 20:7] - input reset : UInt<1> @[src/main/scala/micore/Memory.scala 20:7] - input io_imem_addr : UInt<32> @[src/main/scala/micore/Memory.scala 21:14] - output io_imem_inst : UInt<32> @[src/main/scala/micore/Memory.scala 21:14] - input io_dmem_addr : UInt<32> @[src/main/scala/micore/Memory.scala 21:14] - output io_dmem_rdata : UInt<32> @[src/main/scala/micore/Memory.scala 21:14] - input io_dmem_wen : UInt<1> @[src/main/scala/micore/Memory.scala 21:14] - input io_dmem_wdata : UInt<32> @[src/main/scala/micore/Memory.scala 21:14] + module Memory : @[src/main/scala/micore/Memory.scala 25:7] + input clock : Clock @[src/main/scala/micore/Memory.scala 25:7] + input reset : UInt<1> @[src/main/scala/micore/Memory.scala 25:7] + input io_imem_addr : UInt<32> @[src/main/scala/micore/Memory.scala 26:14] + output io_imem_inst : UInt<32> @[src/main/scala/micore/Memory.scala 26:14] + input io_dmem_addr : UInt<32> @[src/main/scala/micore/Memory.scala 26:14] + output io_dmem_rdata : UInt<32> @[src/main/scala/micore/Memory.scala 26:14] + input io_dmem_wen : UInt<1> @[src/main/scala/micore/Memory.scala 26:14] + input io_dmem_wdata : UInt<32> @[src/main/scala/micore/Memory.scala 26:14] - mem mem : @[src/main/scala/micore/Memory.scala 27:24] - data-type => UInt<32> - depth => 512 - read-latency => 1 + mem mem : @[src/main/scala/micore/Memory.scala 32:16] + data-type => UInt<8> + depth => 4096 + read-latency => 0 write-latency => 1 reader => io_imem_inst_MPORT + reader => io_imem_inst_MPORT_1 + reader => io_imem_inst_MPORT_2 + reader => io_imem_inst_MPORT_3 reader => io_dmem_rdata_MPORT + reader => io_dmem_rdata_MPORT_1 + reader => io_dmem_rdata_MPORT_2 + reader => io_dmem_rdata_MPORT_3 writer => MPORT + writer => MPORT_1 + writer => MPORT_2 + writer => MPORT_3 read-under-write => undefined - node _io_imem_inst_T = shr(io_imem_addr, 2) @[src/main/scala/micore/Memory.scala 31:41] - node _GEN_0 = validif(UInt<1>("h1"), _io_imem_inst_T) @[src/main/scala/micore/Memory.scala 31:{27,27}] - node _io_imem_inst_WIRE = _GEN_0 @[src/main/scala/micore/Memory.scala 31:27] - node _io_imem_inst_T_1 = bits(_io_imem_inst_WIRE, 8, 0) @[src/main/scala/micore/Memory.scala 31:27] - node _GEN_1 = mux(UInt<1>("h1"), UInt<1>("h1"), UInt<1>("h0")) @[src/main/scala/micore/Memory.scala 27:24 31:{27,27}] - node _GEN_2 = validif(UInt<1>("h1"), _io_imem_inst_T_1) @[src/main/scala/micore/Memory.scala 31:{27,27}] - node _GEN_3 = validif(UInt<1>("h1"), clock) @[src/main/scala/micore/Memory.scala 31:{27,27}] - node _io_dmem_rdata_T = shr(io_dmem_addr, 2) @[src/main/scala/micore/Memory.scala 33:42] - node _GEN_4 = validif(UInt<1>("h1"), _io_dmem_rdata_T) @[src/main/scala/micore/Memory.scala 33:{28,28}] - node _io_dmem_rdata_WIRE = _GEN_4 @[src/main/scala/micore/Memory.scala 33:28] - node _io_dmem_rdata_T_1 = bits(_io_dmem_rdata_WIRE, 8, 0) @[src/main/scala/micore/Memory.scala 33:28] - node _GEN_5 = validif(UInt<1>("h1"), _io_dmem_rdata_T_1) @[src/main/scala/micore/Memory.scala 33:{28,28}] - node _T = shr(io_dmem_addr, 2) @[src/main/scala/micore/Memory.scala 36:28] - node _T_1 = bits(_T, 8, 0) @[src/main/scala/micore/Memory.scala 36:14] - node _GEN_6 = validif(io_dmem_wen, _T_1) @[src/main/scala/micore/Memory.scala 35:21 36:14] - node _GEN_7 = validif(io_dmem_wen, clock) @[src/main/scala/micore/Memory.scala 35:21 36:14] - node _GEN_8 = mux(io_dmem_wen, UInt<1>("h1"), UInt<1>("h0")) @[src/main/scala/micore/Memory.scala 35:21 36:14 27:24] - node _GEN_9 = validif(io_dmem_wen, UInt<1>("h1")) @[src/main/scala/micore/Memory.scala 35:21 36:14] - node _GEN_10 = validif(io_dmem_wen, io_dmem_wdata) @[src/main/scala/micore/Memory.scala 35:21 36:14] - io_imem_inst <= mem.io_imem_inst_MPORT.data @[src/main/scala/micore/Memory.scala 31:16] - io_dmem_rdata <= mem.io_dmem_rdata_MPORT.data @[src/main/scala/micore/Memory.scala 33:17] - mem.io_imem_inst_MPORT.addr <= _GEN_2 - mem.io_imem_inst_MPORT.en <= _GEN_1 - mem.io_imem_inst_MPORT.clk <= _GEN_3 - mem.io_dmem_rdata_MPORT.addr <= _GEN_5 - mem.io_dmem_rdata_MPORT.en <= _GEN_1 - mem.io_dmem_rdata_MPORT.clk <= _GEN_3 - mem.MPORT.addr <= _GEN_6 - mem.MPORT.en <= _GEN_8 - mem.MPORT.clk <= _GEN_7 - mem.MPORT.data <= _GEN_10 - mem.MPORT.mask <= _GEN_9 + node _io_imem_inst_T = add(io_imem_addr, UInt<32>("h3")) @[src/main/scala/micore/Memory.scala 39:22] + node _io_imem_inst_T_1 = tail(_io_imem_inst_T, 1) @[src/main/scala/micore/Memory.scala 39:22] + node _io_imem_inst_T_2 = bits(_io_imem_inst_T_1, 11, 0) @[src/main/scala/micore/Memory.scala 39:8] + node _io_imem_inst_T_3 = add(io_imem_addr, UInt<32>("h2")) @[src/main/scala/micore/Memory.scala 40:22] + node _io_imem_inst_T_4 = tail(_io_imem_inst_T_3, 1) @[src/main/scala/micore/Memory.scala 40:22] + node _io_imem_inst_T_5 = bits(_io_imem_inst_T_4, 11, 0) @[src/main/scala/micore/Memory.scala 40:8] + node _io_imem_inst_T_6 = add(io_imem_addr, UInt<32>("h1")) @[src/main/scala/micore/Memory.scala 41:22] + node _io_imem_inst_T_7 = tail(_io_imem_inst_T_6, 1) @[src/main/scala/micore/Memory.scala 41:22] + node _io_imem_inst_T_8 = bits(_io_imem_inst_T_7, 11, 0) @[src/main/scala/micore/Memory.scala 41:8] + node _io_imem_inst_T_9 = bits(io_imem_addr, 11, 0) @[src/main/scala/micore/Memory.scala 42:8] + node io_imem_inst_lo = cat(mem.io_imem_inst_MPORT_2.data, mem.io_imem_inst_MPORT_3.data) @[src/main/scala/micore/Memory.scala 38:22] + node io_imem_inst_hi = cat(mem.io_imem_inst_MPORT.data, mem.io_imem_inst_MPORT_1.data) @[src/main/scala/micore/Memory.scala 38:22] + node _io_imem_inst_T_10 = cat(io_imem_inst_hi, io_imem_inst_lo) @[src/main/scala/micore/Memory.scala 38:22] + node _io_dmem_rdata_T = add(io_dmem_addr, UInt<32>("h3")) @[src/main/scala/micore/Memory.scala 47:22] + node _io_dmem_rdata_T_1 = tail(_io_dmem_rdata_T, 1) @[src/main/scala/micore/Memory.scala 47:22] + node _io_dmem_rdata_T_2 = bits(_io_dmem_rdata_T_1, 11, 0) @[src/main/scala/micore/Memory.scala 47:8] + node _io_dmem_rdata_T_3 = add(io_dmem_addr, UInt<32>("h2")) @[src/main/scala/micore/Memory.scala 48:22] + node _io_dmem_rdata_T_4 = tail(_io_dmem_rdata_T_3, 1) @[src/main/scala/micore/Memory.scala 48:22] + node _io_dmem_rdata_T_5 = bits(_io_dmem_rdata_T_4, 11, 0) @[src/main/scala/micore/Memory.scala 48:8] + node _io_dmem_rdata_T_6 = add(io_dmem_addr, UInt<32>("h1")) @[src/main/scala/micore/Memory.scala 49:22] + node _io_dmem_rdata_T_7 = tail(_io_dmem_rdata_T_6, 1) @[src/main/scala/micore/Memory.scala 49:22] + node _io_dmem_rdata_T_8 = bits(_io_dmem_rdata_T_7, 11, 0) @[src/main/scala/micore/Memory.scala 49:8] + node _io_dmem_rdata_T_9 = bits(io_dmem_addr, 11, 0) @[src/main/scala/micore/Memory.scala 50:8] + node io_dmem_rdata_lo = cat(mem.io_dmem_rdata_MPORT_2.data, mem.io_dmem_rdata_MPORT_3.data) @[src/main/scala/micore/Memory.scala 46:23] + node io_dmem_rdata_hi = cat(mem.io_dmem_rdata_MPORT.data, mem.io_dmem_rdata_MPORT_1.data) @[src/main/scala/micore/Memory.scala 46:23] + node _io_dmem_rdata_T_10 = cat(io_dmem_rdata_hi, io_dmem_rdata_lo) @[src/main/scala/micore/Memory.scala 46:23] + node _T = bits(io_dmem_addr, 11, 0) @[src/main/scala/micore/Memory.scala 55:8] + node _T_1 = bits(io_dmem_wdata, 7, 0) @[src/main/scala/micore/Memory.scala 55:39] + node _T_2 = add(io_dmem_addr, UInt<32>("h1")) @[src/main/scala/micore/Memory.scala 56:22] + node _T_3 = tail(_T_2, 1) @[src/main/scala/micore/Memory.scala 56:22] + node _T_4 = bits(_T_3, 11, 0) @[src/main/scala/micore/Memory.scala 56:8] + node _T_5 = bits(io_dmem_wdata, 15, 8) @[src/main/scala/micore/Memory.scala 56:57] + node _T_6 = add(io_dmem_addr, UInt<32>("h2")) @[src/main/scala/micore/Memory.scala 57:22] + node _T_7 = tail(_T_6, 1) @[src/main/scala/micore/Memory.scala 57:22] + node _T_8 = bits(_T_7, 11, 0) @[src/main/scala/micore/Memory.scala 57:8] + node _T_9 = bits(io_dmem_wdata, 23, 16) @[src/main/scala/micore/Memory.scala 57:57] + node _T_10 = add(io_dmem_addr, UInt<32>("h3")) @[src/main/scala/micore/Memory.scala 58:22] + node _T_11 = tail(_T_10, 1) @[src/main/scala/micore/Memory.scala 58:22] + node _T_12 = bits(_T_11, 11, 0) @[src/main/scala/micore/Memory.scala 58:8] + node _T_13 = bits(io_dmem_wdata, 31, 24) @[src/main/scala/micore/Memory.scala 58:57] + node _GEN_0 = validif(io_dmem_wen, _T) @[src/main/scala/micore/Memory.scala 54:21 55:8] + node _GEN_1 = validif(io_dmem_wen, clock) @[src/main/scala/micore/Memory.scala 54:21 55:8] + node _GEN_2 = mux(io_dmem_wen, UInt<1>("h1"), UInt<1>("h0")) @[src/main/scala/micore/Memory.scala 32:16 54:21 55:8] + node _GEN_3 = validif(io_dmem_wen, UInt<1>("h1")) @[src/main/scala/micore/Memory.scala 54:21 55:23] + node _GEN_4 = validif(io_dmem_wen, _T_1) @[src/main/scala/micore/Memory.scala 54:21 55:23] + node _GEN_5 = validif(io_dmem_wen, _T_4) @[src/main/scala/micore/Memory.scala 54:21 56:8] + node _GEN_6 = validif(io_dmem_wen, _T_5) @[src/main/scala/micore/Memory.scala 54:21 56:41] + node _GEN_7 = validif(io_dmem_wen, _T_8) @[src/main/scala/micore/Memory.scala 54:21 57:8] + node _GEN_8 = validif(io_dmem_wen, _T_9) @[src/main/scala/micore/Memory.scala 54:21 57:41] + node _GEN_9 = validif(io_dmem_wen, _T_12) @[src/main/scala/micore/Memory.scala 54:21 58:8] + node _GEN_10 = validif(io_dmem_wen, _T_13) @[src/main/scala/micore/Memory.scala 54:21 58:41] + io_imem_inst <= _io_imem_inst_T_10 @[src/main/scala/micore/Memory.scala 38:16] + io_dmem_rdata <= _io_dmem_rdata_T_10 @[src/main/scala/micore/Memory.scala 46:17] + mem.io_imem_inst_MPORT.addr <= _io_imem_inst_T_2 @[src/main/scala/micore/Memory.scala 39:8] + mem.io_imem_inst_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 39:8] + mem.io_imem_inst_MPORT.clk <= clock @[src/main/scala/micore/Memory.scala 39:8] + mem.io_imem_inst_MPORT_1.addr <= _io_imem_inst_T_5 @[src/main/scala/micore/Memory.scala 40:8] + mem.io_imem_inst_MPORT_1.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 40:8] + mem.io_imem_inst_MPORT_1.clk <= clock @[src/main/scala/micore/Memory.scala 40:8] + mem.io_imem_inst_MPORT_2.addr <= _io_imem_inst_T_8 @[src/main/scala/micore/Memory.scala 41:8] + mem.io_imem_inst_MPORT_2.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 41:8] + mem.io_imem_inst_MPORT_2.clk <= clock @[src/main/scala/micore/Memory.scala 41:8] + mem.io_imem_inst_MPORT_3.addr <= _io_imem_inst_T_9 @[src/main/scala/micore/Memory.scala 42:8] + mem.io_imem_inst_MPORT_3.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 42:8] + mem.io_imem_inst_MPORT_3.clk <= clock @[src/main/scala/micore/Memory.scala 42:8] + mem.io_dmem_rdata_MPORT.addr <= _io_dmem_rdata_T_2 @[src/main/scala/micore/Memory.scala 47:8] + mem.io_dmem_rdata_MPORT.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 47:8] + mem.io_dmem_rdata_MPORT.clk <= clock @[src/main/scala/micore/Memory.scala 47:8] + mem.io_dmem_rdata_MPORT_1.addr <= _io_dmem_rdata_T_5 @[src/main/scala/micore/Memory.scala 48:8] + mem.io_dmem_rdata_MPORT_1.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 48:8] + mem.io_dmem_rdata_MPORT_1.clk <= clock @[src/main/scala/micore/Memory.scala 48:8] + mem.io_dmem_rdata_MPORT_2.addr <= _io_dmem_rdata_T_8 @[src/main/scala/micore/Memory.scala 49:8] + mem.io_dmem_rdata_MPORT_2.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 49:8] + mem.io_dmem_rdata_MPORT_2.clk <= clock @[src/main/scala/micore/Memory.scala 49:8] + mem.io_dmem_rdata_MPORT_3.addr <= _io_dmem_rdata_T_9 @[src/main/scala/micore/Memory.scala 50:8] + mem.io_dmem_rdata_MPORT_3.en <= UInt<1>("h1") @[src/main/scala/micore/Memory.scala 50:8] + mem.io_dmem_rdata_MPORT_3.clk <= clock @[src/main/scala/micore/Memory.scala 50:8] + mem.MPORT.addr <= _GEN_0 + mem.MPORT.en <= _GEN_2 + mem.MPORT.clk <= _GEN_1 + mem.MPORT.data <= _GEN_4 + mem.MPORT.mask <= _GEN_3 + mem.MPORT_1.addr <= _GEN_5 + mem.MPORT_1.en <= _GEN_2 + mem.MPORT_1.clk <= _GEN_1 + mem.MPORT_1.data <= _GEN_6 + mem.MPORT_1.mask <= _GEN_3 + mem.MPORT_2.addr <= _GEN_7 + mem.MPORT_2.en <= _GEN_2 + mem.MPORT_2.clk <= _GEN_1 + mem.MPORT_2.data <= _GEN_8 + mem.MPORT_2.mask <= _GEN_3 + mem.MPORT_3.addr <= _GEN_9 + mem.MPORT_3.en <= _GEN_2 + mem.MPORT_3.clk <= _GEN_1 + mem.MPORT_3.data <= _GEN_10 + mem.MPORT_3.mask <= _GEN_3 module TopOrigin : @[src/main/scala/micore/Top.scala 8:7] input clock : Clock @[src/main/scala/micore/Top.scala 8:7] input reset : UInt<1> @[src/main/scala/micore/Top.scala 8:7] output io_exit : UInt<1> @[src/main/scala/micore/Top.scala 9:14] + output io_gp : UInt<32> @[src/main/scala/micore/Top.scala 9:14] - inst core of Core @[src/main/scala/micore/Top.scala 12:20] - inst memory of Memory @[src/main/scala/micore/Top.scala 13:22] - io_exit <= core.io_exit @[src/main/scala/micore/Top.scala 18:11] + inst core of Core @[src/main/scala/micore/Top.scala 13:20] + inst memory of Memory @[src/main/scala/micore/Top.scala 14:22] + io_exit <= core.io_exit @[src/main/scala/micore/Top.scala 17:11] + io_gp <= core.io_gp @[src/main/scala/micore/Top.scala 18:9] core.clock <= clock core.reset <= reset core.io_imem_inst <= memory.io_imem_inst @[src/main/scala/micore/Top.scala 15:16]