mirror of
https://github.com/openhwgroup/cva5.git
synced 2025-04-20 12:07:53 -04:00
switch to write first mode
This commit is contained in:
parent
976ad3d5ee
commit
e41fb648be
2 changed files with 24 additions and 25 deletions
|
@ -221,19 +221,17 @@ module load_store_unit (
|
|||
assign shared_inputs.fn3 = stage1.fn3;
|
||||
|
||||
logic forward_data;
|
||||
assign forward_data = stage1.load_store_forward | dcache_forward_data;
|
||||
assign forward_data = stage1.load_store_forward;
|
||||
assign stage1_raw_data = forward_data ? previous_load : stage1.rs2;
|
||||
|
||||
//Input: ABCD
|
||||
//Assuming aligned requests,
|
||||
//Possible byte selections: (A/C/D, B/D, C/D, D)
|
||||
logic [1:0] data_in_mux;
|
||||
always_comb begin
|
||||
data_in_mux = dcache_forward_data ? dcache_stage2_fn3[1:0] : virtual_address[1:0];
|
||||
shared_inputs.data_in[7:0] = stage1_raw_data[7:0];
|
||||
shared_inputs.data_in[15:8] = (data_in_mux == 2'b01) ? stage1_raw_data[7:0] : stage1_raw_data[15:8];
|
||||
shared_inputs.data_in[23:16] = (data_in_mux == 2'b10) ? stage1_raw_data[7:0] : stage1_raw_data[23:16];
|
||||
case(data_in_mux)
|
||||
shared_inputs.data_in[15:8] = (virtual_address[1:0] == 2'b01) ? stage1_raw_data[7:0] : stage1_raw_data[15:8];
|
||||
shared_inputs.data_in[23:16] = (virtual_address[1:0] == 2'b10) ? stage1_raw_data[7:0] : stage1_raw_data[23:16];
|
||||
case(virtual_address[1:0])
|
||||
2'b10 : shared_inputs.data_in[31:24] = stage1_raw_data[15:8];
|
||||
2'b11 : shared_inputs.data_in[31:24] = stage1_raw_data[7:0];
|
||||
default : shared_inputs.data_in[31:24] = stage1_raw_data[31:24];
|
||||
|
|
|
@ -52,32 +52,33 @@ module xilinx_byte_enable_ram #(
|
|||
$readmemh(preload_file,ram, 0, LINES-1);
|
||||
end
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_a) begin
|
||||
for (int i=0; i < 4; i++) begin
|
||||
if (be_a[i])
|
||||
generate
|
||||
genvar i;
|
||||
for (i=0; i < 4; i++) begin
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_a) begin
|
||||
if (be_a[i]) begin
|
||||
ram[addr_a][8*i+:8] <= data_in_a[8*i+:8];
|
||||
data_out_a[8*i+:8] <= data_in_a[8*i+:8];
|
||||
end else begin
|
||||
data_out_a[8*i+:8] <= ram[addr_a][8*i+:8];
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_a)
|
||||
data_out_a <= ram[addr_a];
|
||||
end
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_b) begin
|
||||
for (int i=0; i < 4; i++) begin
|
||||
if (be_b[i])
|
||||
|
||||
for (i=0; i < 4; i++) begin
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_b) begin
|
||||
if (be_b[i]) begin
|
||||
ram[addr_b][8*i+:8] <= data_in_b[8*i+:8];
|
||||
data_out_b[8*i+:8] <= data_in_b[8*i+:8];
|
||||
end else begin
|
||||
data_out_b[8*i+:8] <= ram[addr_b][8*i+:8];
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always_ff @(posedge clk) begin
|
||||
if (en_b)
|
||||
data_out_b <= ram[addr_b];
|
||||
end
|
||||
endgenerate
|
||||
|
||||
endmodule
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue