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

34 lines
1.0 KiB
Verilog

`timescale 1ns / 1ps
module WriteBack (
input clk,
// From prev stage
input prev_register_write,
input prev_WB_source,
input [31:0] prev_memory_read_data,
input [31:0] prev_ALU_result,
input [4:0] prev_register_write_destination,
// To many things, really
output register_write,
output [31:0] register_write_data,
output [4:0] register_write_addr
);
reg WB_register_write;
reg WB_WB_source;
reg [31:0] WB_memory_read_data;
reg [31:0] WB_ALU_result;
reg [4:0] WB_register_write_destination;
assign register_write = WB_register_write;
assign register_write_data = (WB_WB_source == 1'b0) ? WB_ALU_result : WB_memory_read_data;
assign register_write_addr = WB_register_write_destination;
always @(posedge clk) begin
WB_register_write <= prev_register_write;
WB_WB_source <= prev_WB_source;
WB_memory_read_data <= prev_memory_read_data;
WB_ALU_result <= prev_ALU_result;
WB_register_write_destination <= prev_register_write_destination;
end
endmodule