-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExtendToI.sv
90 lines (80 loc) · 2.77 KB
/
ExtendToI.sv
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
module extendToI ( input logic clock, reset,
input logic [3:0] InstrIType, // Indicador do tipo da instrucao
input logic [31:0] Instr31_0,
input logic [63:0] DataMemOut, // Saida da memoria de dados
outMDR, // Saida da memoria de dados depois de MDR
regBOut, // rs2 Vindo do Reg B
regAOut, // rs1 Vindo do Reg A
output logic [63:0] extendToMem,
extendToBanco
);
wire logic [5:0] shamt;
assign shamt = Instr31_0[25:20];
always_comb begin
case (InstrIType)
4'b0000 : begin // lb
if(DataMemOut[7] == 1'b1) begin
extendToBanco = {56'b11111111111111111111111111111111111111111111111111111111, DataMemOut[7:0]};
end
else begin
extendToBanco = {56'd0, DataMemOut[7:0]};
end
end
4'b0001 : begin // lh
if(DataMemOut[15] == 1'b1) begin
extendToBanco = {53'b11111111111111111111111111111111111111111111111111111, DataMemOut[15:0]};
end
else begin
extendToBanco = {53'd0, DataMemOut[15:0]};
end
end
4'b0010 : begin // lw
if(DataMemOut[31] == 1'b1) begin
extendToBanco = {32'b11111111111111111111111111111111, DataMemOut[31:0]};
end
else begin
extendToBanco = {32'd0, DataMemOut[31:0]};
end
end
4'b0011 : begin // lbu
extendToBanco = {56'd0, DataMemOut[7:0]};
end
4'b0100 : begin // lhu
extendToBanco = {53'd0, DataMemOut[15:0]};
end
4'b0101 : begin // lwu
extendToBanco = {32'd0, DataMemOut[31:0]};
end
4'b0110 : begin // sd
extendToMem = regBOut;
end
4'b0111 : begin // sw
extendToMem = {DataMemOut[63:32],regBOut[31:0]};
end
4'b1000 : begin // sh
extendToMem = {DataMemOut[63:16],regBOut[15:0]};
end
4'b1001 : begin // sb
extendToMem = {DataMemOut[63:8],regBOut[7:0]};
end
4'b1010 : begin // ld
extendToBanco = DataMemOut[63:0];
end
4'b1011: begin // slli
extendToBanco = regAOut << shamt;
end
4'b1100 : begin // srli
extendToBanco = regAOut >> shamt;
end
4'b1101 : begin // srai
extendToBanco = regAOut >>> shamt;
end
4'b1110 : begin
end
4'b1111 : begin
end
default: begin
end
endcase
end
endmodule