diff --git a/rtl/VX_back_end.v b/rtl/VX_back_end.v index 64151420..85289990 100644 --- a/rtl/VX_back_end.v +++ b/rtl/VX_back_end.v @@ -86,7 +86,8 @@ VX_lsu load_store_unit( VX_execute_unit VX_execUnit( - // .clk (clk), + .clk (clk), + .reset (reset), .VX_exec_unit_req(VX_exec_unit_req), .VX_inst_exec_wb (VX_inst_exec_wb), .VX_jal_rsp (VX_jal_rsp), diff --git a/rtl/VX_execute_unit.v b/rtl/VX_execute_unit.v index 8bb677f4..8d06ce00 100644 --- a/rtl/VX_execute_unit.v +++ b/rtl/VX_execute_unit.v @@ -1,8 +1,8 @@ `include "VX_define.v" module VX_execute_unit ( - // input wire clk, - // Input + input wire clk, + input wire reset, // Request VX_exec_unit_req_inter VX_exec_unit_req, @@ -95,6 +95,13 @@ module VX_execute_unit ( end endgenerate + + // VX_inst_exec_wb_inter VX_inst_exec_wb_temp(); + // JAL Response + VX_jal_response_inter VX_jal_rsp_temp(); + // Branch Response + VX_branch_response_inter VX_branch_rsp_temp(); + // Actual Writeback assign VX_inst_exec_wb.rd = VX_exec_unit_req.rd; assign VX_inst_exec_wb.wb = VX_exec_unit_req.wb; @@ -104,17 +111,46 @@ module VX_execute_unit ( assign VX_inst_exec_wb.exec_wb_pc = in_curr_PC; // Jal rsp - assign VX_jal_rsp.jal = in_jal; - assign VX_jal_rsp.jal_dest = $signed(in_a_reg_data[jal_branch_use_index]) + $signed(in_jal_offset); - assign VX_jal_rsp.jal_warp_num = VX_exec_unit_req.warp_num; + assign VX_jal_rsp_temp.jal = in_jal; + assign VX_jal_rsp_temp.jal_dest = $signed(in_a_reg_data[jal_branch_use_index]) + $signed(in_jal_offset); + assign VX_jal_rsp_temp.jal_warp_num = VX_exec_unit_req.warp_num; // Branch rsp - assign VX_branch_rsp.valid_branch = (VX_exec_unit_req.branch_type != `NO_BRANCH) && (|VX_exec_unit_req.valid); - assign VX_branch_rsp.branch_dir = temp_branch_dir; - assign VX_branch_rsp.branch_warp_num = VX_exec_unit_req.warp_num; - assign VX_branch_rsp.branch_dest = $signed(VX_exec_unit_req.curr_PC) + ($signed(VX_exec_unit_req.itype_immed) << 1); // itype_immed = branch_offset + assign VX_branch_rsp_temp.valid_branch = (VX_exec_unit_req.branch_type != `NO_BRANCH) && (|VX_exec_unit_req.valid); + assign VX_branch_rsp_temp.branch_dir = temp_branch_dir; + assign VX_branch_rsp_temp.branch_warp_num = VX_exec_unit_req.warp_num; + assign VX_branch_rsp_temp.branch_dest = $signed(VX_exec_unit_req.curr_PC) + ($signed(VX_exec_unit_req.itype_immed) << 1); // itype_immed = branch_offset + wire zero = 0; + + // VX_generic_register #(.N(174)) exec_reg( + // .clk (clk), + // .reset(reset), + // .stall(zero), + // .flush(zero), + // .in ({VX_inst_exec_wb_temp.rd, VX_inst_exec_wb_temp.wb, VX_inst_exec_wb_temp.wb_valid, VX_inst_exec_wb_temp.wb_warp_num, VX_inst_exec_wb_temp.alu_result, VX_inst_exec_wb_temp.exec_wb_pc}), + // .out ({VX_inst_exec_wb.rd , VX_inst_exec_wb.wb , VX_inst_exec_wb.wb_valid , VX_inst_exec_wb.wb_warp_num , VX_inst_exec_wb.alu_result , VX_inst_exec_wb.exec_wb_pc }) + // ); + + VX_generic_register #(.N(36)) jal_reg( + .clk (clk), + .reset(reset), + .stall(zero), + .flush(zero), + .in ({VX_jal_rsp_temp.jal, VX_jal_rsp_temp.jal_dest, VX_jal_rsp_temp.jal_warp_num}), + .out ({VX_jal_rsp.jal , VX_jal_rsp.jal_dest , VX_jal_rsp.jal_warp_num}) + ); + + VX_generic_register #(.N(37)) branch_reg( + .clk (clk), + .reset(reset), + .stall(zero), + .flush(zero), + .in ({VX_branch_rsp_temp.valid_branch, VX_branch_rsp_temp.branch_dir, VX_branch_rsp_temp.branch_warp_num, VX_branch_rsp_temp.branch_dest}), + .out ({VX_branch_rsp.valid_branch , VX_branch_rsp.branch_dir , VX_branch_rsp.branch_warp_num , VX_branch_rsp.branch_dest }) + ); + // always @(*) begin // case(in_alu_op) // `CSR_ALU_RW: out_csr_result = in_csr_mask; diff --git a/rtl/shared_memory/VX_shared_memory_block.v b/rtl/shared_memory/VX_shared_memory_block.v index c1acb3b1..9a37b6fe 100644 --- a/rtl/shared_memory/VX_shared_memory_block.v +++ b/rtl/shared_memory/VX_shared_memory_block.v @@ -38,10 +38,10 @@ module VX_shared_memory_block //for (curr_ind = 0; curr_ind < 128; curr_ind = curr_ind + 1) for (curr_ind = 0; curr_ind < SMB_HEIGHT; curr_ind = curr_ind + 1) begin - shared_memory[curr_ind] <= 0; + shared_memory[curr_ind] = 0; end end else if(shm_write) begin - shared_memory[addr][we][31:0] <= wdata[we][31:0]; // - Ethan's addition + shared_memory[addr][we][31:0] = wdata[we][31:0]; // - Ethan's addition //if (we == 2'b00) shared_memory[addr][0][31:0] <= wdata[0][31:0]; //if (we == 2'b01) shared_memory[addr][1][31:0] <= wdata[1][31:0]; //if (we == 2'b10) shared_memory[addr][2][31:0] <= wdata[2][31:0];