diff --git a/Src/id.v b/Src/id.v index 63965e9..3bf13d1 100644 --- a/Src/id.v +++ b/Src/id.v @@ -5,6 +5,12 @@ module id(input wire rst, input wire[`InstBus] inst_i, input wire[`RegBus] reg1_data_i, input wire[`RegBus] reg2_data_i, + input wire ex_wreg_i, //EX + input wire[`RegBus] ex_wdata_i, + input wire[`RegAddrBus] ex_wd_i, + input wire mem_wreg_i, //MEM + input wire[`RegBus] mem_wdata_i, + input wire[`RegAddrBus] mem_wd_i, output reg reg1_read_o, output reg reg2_read_o, output reg[`RegAddrBus] reg1_addr_o, @@ -64,6 +70,10 @@ module id(input wire rst, always @ (*) begin if (rst == `RstEnable) begin reg1_o <= `ZeroWord; + end else if ((reg1_read_o == 1'b1)&&(ex_wreg_i == 1'b1)&&(ex_wd_i == reg1_addr_o)) begin + reg1_o <= ex_wdata_i; + end else if ((reg1_read_o == 1b'1)&&(mem_wreg_i == 1b'1)&&(mem_wd_i == reg1_addr_o)) begin + reg1_o <= mem_wdata_i; end else if (reg1_read_o == 1'b1) begin reg1_o <= reg1_data_i; end else if (reg1_read_o == 1'b0) begin @@ -76,6 +86,10 @@ module id(input wire rst, always @ (*) begin if (rst == `RstEnable) begin reg2_o <= `ZeroWord; + end else if ((reg2_read_o == 1'b1)&&(ex_wreg_i == 1'b1)&&(ex_wd_i == reg2_addr_o)) begin + reg2_o <= ex_wdata_i; + end else if ((reg2_read_o == 1b'1)&&(mem_wreg_i == 1b'1)&&(mem_wd_i == reg2_addr_o)) begin + reg2_o <= mem_wdata_i; end else if (reg2_read_o == 1'b1) begin reg2_o <= reg2_data_i; end else if (reg2_read_o == 1'b0) begin diff --git a/Src/yunmips.v b/Src/yunmips.v index e83b90d..c2c9ac8 100644 --- a/Src/yunmips.v +++ b/Src/yunmips.v @@ -73,6 +73,14 @@ module yunmips(input wire clk, .reg1_data_i(reg1_data), .reg2_data_i(reg2_data), + + .ex_wreg_i(ex_wreg_o), //EX + .ex_wdata_i(ex_wdata_o), + .ex_wd_i(ex_wd_o), + + .mem_wreg_i(mem_wreg_o), //MEM + .mem_wdata_i(mem_wdata_o), + .mem_wd_i(mem_wd_o), .reg1_read_o(reg1_read), .reg2_read_o(reg2_read),