Files
MipsPipelineProcessor/PipelineProcessor.srcs/sources_1/new/ExecutionForward.v
2024-07-10 12:06:19 +08:00

39 lines
1.2 KiB
Verilog

`timescale 1ns / 1ps
module ExecutionForward (
input [4:0] EX_rs_address,
input [4:0] EX_rt_address,
input MEM_register_write,
input [4:0] MEM_register_write_address,
input WB_register_write,
input [4:0] WB_register_write_address,
output [1:0] IDA_source,
output [1:0] IDB_source
);
always @(*) begin
if (MEM_register_write == 1'b1 && MEM_register_write_address == EX_rs_address &&
EX_rs_address != 5'b00000) begin
IDA_source = 2'b00;
end else begin
if (WB_register_write == 1'b1 && WB_register_write_address == EX_rs_address &&
EX_rs_address != 5'b00000) begin
IDA_source = 2'b10;
end else begin
IDA_source = 2'b00;
end
end
if (MEM_register_write == 1'b1 && MEM_register_write_address == EX_rt_address &&
EX_rt_address != 5'b00000) begin
IDB_source = 2'b00;
end else begin
if (WB_register_write == 1'b1 && WB_register_write_address == EX_rt_address &&
EX_rt_address != 5'b00000) begin
IDB_source = 2'b10;
end else begin
IDB_source = 2'b00;
end
end
end
endmodule