-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoad_Unit.v
More file actions
38 lines (36 loc) · 1.64 KB
/
Load_Unit.v
File metadata and controls
38 lines (36 loc) · 1.64 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
// msrv32_load_unit 21BCE0289
module msrv32_load_unit(
input ahb_resp_in,
input [31:0] ms_riscv32_mp_dmdata_in,
input [1:0] iadder_out_1_to_0_in,
input load_unsigned_in,
input [1:0] load_size_in,
output reg [31:0] lu_output_out
);
parameter BYTE = 2'b00,
HALF = 2'b01,
WORD = 2'b10;
initial begin
lu_output_out = 32'h00000000;
end
always@(*) begin
if(!ahb_resp_in) begin
case(load_size_in)
BYTE: case(iadder_out_1_to_0_in)
2'b00: lu_output_out = { (load_unsigned_in ? 24'b0 : ({24{ms_riscv32_mp_dmdata_in[7]}})), ms_riscv32_mp_dmdata_in[7:0] };
2'b01: lu_output_out = { (load_unsigned_in ? 24'b0 : ({24{ms_riscv32_mp_dmdata_in[15]}})), ms_riscv32_mp_dmdata_in[15:8] };
2'b10: lu_output_out = { (load_unsigned_in ? 24'b0 : ({24{ms_riscv32_mp_dmdata_in[23]}})), ms_riscv32_mp_dmdata_in[23:16] };
2'b11: lu_output_out = { (load_unsigned_in ? 24'b0 : ({24{ms_riscv32_mp_dmdata_in[31]}})), ms_riscv32_mp_dmdata_in[31:24] };
default: lu_output_out = { (load_unsigned_in ? 24'b0 : ({24{ms_riscv32_mp_dmdata_in[7]}})), ms_riscv32_mp_dmdata_in[7:0] };
endcase
HALF: case(iadder_out_1_to_0_in[1])
1'b0: lu_output_out = { (load_unsigned_in ? 16'b0 : ({16{ms_riscv32_mp_dmdata_in[15]}})), ms_riscv32_mp_dmdata_in[15:0] };
1'b1: lu_output_out = { (load_unsigned_in ? 16'b0 : ({16{ms_riscv32_mp_dmdata_in[31]}})), ms_riscv32_mp_dmdata_in[31:16] };
default: lu_output_out = { (load_unsigned_in ? 16'b0 : ({16{ms_riscv32_mp_dmdata_in[15]}})), ms_riscv32_mp_dmdata_in[15:0] };
endcase
WORD: lu_output_out = ms_riscv32_mp_dmdata_in;
default: lu_output_out = ms_riscv32_mp_dmdata_in;
endcase
end
end
endmodule