Repository navigation
Expand file tree
/
Copy pathpipe_mem_wb.sv
More file actions
62 lines (58 loc) · 2.08 KB
/
Copy pathpipe_mem_wb.sv
File metadata and controls
62 lines (58 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// Pipeline register: MEM/WB (Stage 4 → Stage 5)
module pipe_mem_wb
#(
parameter BITS = 32,
parameter REG_ADDR_BITS = 5
)
(
input logic clk,
input logic rst_,
// Stage 4 inputs
input logic [BITS-1:0] alu_out_s4,
input logic [BITS-1:0] d_mem_rdata,
input logic [REG_ADDR_BITS-1:0] waddr_s4,
input logic rw_s4,
input logic sel_mem_s4,
input logic [3:0] byte_en_s4,
input logic halt_s4,
input logic atomic_s4,
input logic link_rw_,
input logic sc_success_s4,
// Stage 5 outputs
output logic [BITS-1:0] alu_out_s5,
output logic [BITS-1:0] d_mem_rdata_s5,
output logic [REG_ADDR_BITS-1:0] waddr_s5,
output logic rw_s5,
output logic sel_mem_s5,
output logic [3:0] byte_en_s5,
output logic halt_s5,
output logic atomic_s5,
output logic link_rw_s5,
output logic sc_success_s5
);
always_ff @(posedge clk or negedge rst_) begin
if (!rst_) begin
alu_out_s5 <= {BITS{1'b0}};
d_mem_rdata_s5 <= {BITS{1'b0}};
waddr_s5 <= {REG_ADDR_BITS{1'b0}};
rw_s5 <= 1'b1; // No write
sel_mem_s5 <= 1'b0;
byte_en_s5 <= 4'hF;
halt_s5 <= 1'b0;
atomic_s5 <= 1'b0;
link_rw_s5 <= 1'b1; // No write
sc_success_s5 <= 1'b0; // SC failed
end else begin
alu_out_s5 <= alu_out_s4;
d_mem_rdata_s5 <= d_mem_rdata;
waddr_s5 <= waddr_s4;
rw_s5 <= rw_s4;
sel_mem_s5 <= sel_mem_s4;
byte_en_s5 <= byte_en_s4;
halt_s5 <= halt_s4;
atomic_s5 <= atomic_s4;
link_rw_s5 <= link_rw_;
sc_success_s5 <= sc_success_s4;
end
end
endmodule