mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
parent
a8024eee26
commit
f752b5dd37
@ -423,7 +423,7 @@ module lsu import cvw::*; #(parameter cvw_t P) (
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if(MISALIGN_SUPPORT) begin
|
||||
subwordreadmisaligned #(P.LLEN) subwordread(.ReadDataWordMuxM(LittleEndianReadDataWordM), .PAdrM(PAdrM[2:0]), .BigEndianM,
|
||||
subwordreaddouble #(P.LLEN) subwordread(.ReadDataWordMuxM(LittleEndianReadDataWordM), .PAdrM(PAdrM[2:0]), .BigEndianM,
|
||||
.FpLoadStoreM, .Funct3M(LSUFunct3M), .ReadDataM);
|
||||
subwordwritedouble #(P.LLEN) subwordwrite(.LSUFunct3M, .PAdrM(PAdrM[2:0]), .FpLoadStoreM, .BigEndianM, .AllowShiftM, .IMAFWriteDataM, .LittleEndianWriteDataM);
|
||||
end else begin
|
||||
|
@ -40,11 +40,10 @@ module subwordreadmisaligned #(parameter LLEN)
|
||||
|
||||
logic [7:0] ByteM;
|
||||
logic [15:0] HalfwordM;
|
||||
logic [31:0] WordM;
|
||||
logic [4:0] PAdrSwap;
|
||||
logic [4:0] BigEndianPAdr;
|
||||
logic [4:0] LengthM;
|
||||
|
||||
|
||||
// Funct3M[2] is the unsigned bit. mask upper bits.
|
||||
// Funct3M[1:0] is the size of the memory access.
|
||||
assign PAdrSwap = BigEndianM ? BigEndianPAdr : {2'b0, PAdrM};
|
||||
@ -67,14 +66,14 @@ module subwordreadmisaligned #(parameter LLEN)
|
||||
logic [LLEN*2-1:0] ReadDataAlignedM;
|
||||
assign ReadDataAlignedM = ReadDataWordMuxM >> (PAdrSwap[$clog2(LLEN/4)-1:0] * 8);
|
||||
|
||||
assign ByteM = ReadDataAlignedM[7:0];
|
||||
assign HalfwordM = ReadDataAlignedM[15:0];
|
||||
assign WordM = ReadDataAlignedM[31:0];
|
||||
|
||||
if (LLEN == 128) begin:swrmux
|
||||
logic [31:0] WordM;
|
||||
logic [63:0] DblWordM;
|
||||
logic [127:0] QdWordM;
|
||||
|
||||
assign ByteM = ReadDataAlignedM[7:0];
|
||||
assign HalfwordM = ReadDataAlignedM[15:0];
|
||||
assign WordM = ReadDataAlignedM[31:0];
|
||||
assign DblWordM = ReadDataAlignedM[63:0];
|
||||
assign QdWordM =ReadDataAlignedM[127:0];
|
||||
|
||||
@ -93,8 +92,12 @@ module subwordreadmisaligned #(parameter LLEN)
|
||||
endcase
|
||||
|
||||
end else if (LLEN == 64) begin:swrmux
|
||||
logic [31:0] WordM;
|
||||
logic [63:0] DblWordM;
|
||||
|
||||
assign ByteM = ReadDataAlignedM[7:0];
|
||||
assign HalfwordM = ReadDataAlignedM[15:0];
|
||||
assign WordM = ReadDataAlignedM[31:0];
|
||||
assign DblWordM = ReadDataAlignedM[63:0];
|
||||
|
||||
// sign extension/ NaN boxing
|
||||
@ -113,6 +116,12 @@ module subwordreadmisaligned #(parameter LLEN)
|
||||
|
||||
end else begin:swrmux // 32-bit
|
||||
|
||||
logic [31:0] WordM;
|
||||
|
||||
assign ByteM = ReadDataAlignedM[7:0];
|
||||
assign HalfwordM = ReadDataAlignedM[15:0];
|
||||
assign WordM = ReadDataAlignedM[31:0];
|
||||
|
||||
// sign extension
|
||||
always_comb
|
||||
case(Funct3M)
|
||||
|
Loading…
Reference in New Issue
Block a user