mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-03 10:15:19 +00:00
Rename FP and FPU to F in signal names
This commit is contained in:
parent
41076d4639
commit
19f0eb2aa1
@ -47,7 +47,7 @@ module fdivsqrt(
|
|||||||
output logic FDivBusyE, IFDivStartE, FDivDoneE,
|
output logic FDivBusyE, IFDivStartE, FDivDoneE,
|
||||||
output logic [`NE+1:0] QeM,
|
output logic [`NE+1:0] QeM,
|
||||||
output logic [`DIVb:0] QmM,
|
output logic [`DIVb:0] QmM,
|
||||||
output logic [`XLEN-1:0] FPIntDivResultM
|
output logic [`XLEN-1:0] FIntDivResultM
|
||||||
);
|
);
|
||||||
|
|
||||||
// Floating-point division and square root module, with optional integer division and remainder
|
// Floating-point division and square root module, with optional integer division and remainder
|
||||||
@ -97,5 +97,5 @@ module fdivsqrt(
|
|||||||
.QmM, .WZeroE, .DivStickyM,
|
.QmM, .WZeroE, .DivStickyM,
|
||||||
// Int-specific
|
// Int-specific
|
||||||
.nM, .mM, .ALTBM, .AsM, .BZeroM, .NegQuotM, .W64M, .RemOpM(Funct3M[1]), .AM,
|
.nM, .mM, .ALTBM, .AsM, .BZeroM, .NegQuotM, .W64M, .RemOpM(Funct3M[1]), .AM,
|
||||||
.FPIntDivResultM);
|
.FIntDivResultM);
|
||||||
endmodule
|
endmodule
|
@ -41,7 +41,7 @@ module fdivsqrtpostproc(
|
|||||||
output logic [`DIVb:0] QmM,
|
output logic [`DIVb:0] QmM,
|
||||||
output logic WZeroE,
|
output logic WZeroE,
|
||||||
output logic DivStickyM,
|
output logic DivStickyM,
|
||||||
output logic [`XLEN-1:0] FPIntDivResultM
|
output logic [`XLEN-1:0] FIntDivResultM
|
||||||
);
|
);
|
||||||
|
|
||||||
logic [`DIVb+3:0] W, Sum, DM;
|
logic [`DIVb+3:0] W, Sum, DM;
|
||||||
@ -129,8 +129,8 @@ module fdivsqrtpostproc(
|
|||||||
if (`XLEN==64) begin
|
if (`XLEN==64) begin
|
||||||
mux2 #(64) resmux(IntDivResultM[`XLEN-1:0],
|
mux2 #(64) resmux(IntDivResultM[`XLEN-1:0],
|
||||||
{{(`XLEN-32){IntDivResultM[31]}}, IntDivResultM[31:0]}, // Sign extending in case of W64
|
{{(`XLEN-32){IntDivResultM[31]}}, IntDivResultM[31:0]}, // Sign extending in case of W64
|
||||||
W64M, FPIntDivResultM);
|
W64M, FIntDivResultM);
|
||||||
end else
|
end else
|
||||||
assign FPIntDivResultM = IntDivResultM[`XLEN-1:0];
|
assign FIntDivResultM = IntDivResultM[`XLEN-1:0];
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
@ -54,7 +54,7 @@ module fhazard(
|
|||||||
// if the result will be FResM (can be taken from the memory stage)
|
// if the result will be FResM (can be taken from the memory stage)
|
||||||
if(FResSelM == 2'b00) ForwardXE = 2'b10; // choose FResM
|
if(FResSelM == 2'b00) ForwardXE = 2'b10; // choose FResM
|
||||||
// if the needed value is in the writeback stage
|
// if the needed value is in the writeback stage
|
||||||
end else if ((Adr1E == RdW) & FRegWriteW) ForwardXE = 2'b01; // choose FPUResult64W
|
end else if ((Adr1E == RdW) & FRegWriteW) ForwardXE = 2'b01; // choose FResult64W
|
||||||
|
|
||||||
|
|
||||||
// if the needed value is in the memory stage - input 2
|
// if the needed value is in the memory stage - input 2
|
||||||
@ -62,7 +62,7 @@ module fhazard(
|
|||||||
// if the result will be FResM (can be taken from the memory stage)
|
// if the result will be FResM (can be taken from the memory stage)
|
||||||
if(FResSelM == 2'b00) ForwardYE = 2'b10; // choose FResM
|
if(FResSelM == 2'b00) ForwardYE = 2'b10; // choose FResM
|
||||||
// if the needed value is in the writeback stage
|
// if the needed value is in the writeback stage
|
||||||
end else if ((Adr2E == RdW) & FRegWriteW) ForwardYE = 2'b01; // choose FPUResult64W
|
end else if ((Adr2E == RdW) & FRegWriteW) ForwardYE = 2'b01; // choose FResult64W
|
||||||
|
|
||||||
|
|
||||||
// if the needed value is in the memory stage - input 3
|
// if the needed value is in the memory stage - input 3
|
||||||
@ -70,7 +70,7 @@ module fhazard(
|
|||||||
// if the result will be FResM (can be taken from the memory stage)
|
// if the result will be FResM (can be taken from the memory stage)
|
||||||
if(FResSelM == 2'b00) ForwardZE = 2'b10; // choose FResM
|
if(FResSelM == 2'b00) ForwardZE = 2'b10; // choose FResM
|
||||||
// if the needed value is in the writeback stage
|
// if the needed value is in the writeback stage
|
||||||
end else if ((Adr3E == RdW) & FRegWriteW) ForwardZE = 2'b01; // choose FPUResult64W
|
end else if ((Adr3E == RdW) & FRegWriteW) ForwardZE = 2'b01; // choose FResult64W
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ module fpu (
|
|||||||
input logic [`FLEN-1:0] ReadDataW, // Read data (from LSU)
|
input logic [`FLEN-1:0] ReadDataW, // Read data (from LSU)
|
||||||
output logic [`XLEN-1:0] FCvtIntResW, // convert result to to be written to integer register (to IEU)
|
output logic [`XLEN-1:0] FCvtIntResW, // convert result to to be written to integer register (to IEU)
|
||||||
output logic FCvtIntW, // select FCvtIntRes (to IEU)
|
output logic FCvtIntW, // select FCvtIntRes (to IEU)
|
||||||
output logic [`XLEN-1:0] FPIntDivResultW // Result from integer division (to IEU)
|
output logic [`XLEN-1:0] FIntDivResultW // Result from integer division (to IEU)
|
||||||
);
|
);
|
||||||
|
|
||||||
// RISC-V FPU specifics:
|
// RISC-V FPU specifics:
|
||||||
@ -133,7 +133,7 @@ module fpu (
|
|||||||
logic [`NE+1:0] QeM; // fdivsqrt exponent
|
logic [`NE+1:0] QeM; // fdivsqrt exponent
|
||||||
logic DivStickyM; // fdivsqrt sticky bit
|
logic DivStickyM; // fdivsqrt sticky bit
|
||||||
logic FDivDoneE, IFDivStartE; // fdivsqrt control signals
|
logic FDivDoneE, IFDivStartE; // fdivsqrt control signals
|
||||||
logic [`XLEN-1:0] FPIntDivResultM; // fdivsqrt integer division result (for IEU)
|
logic [`XLEN-1:0] FIntDivResultM; // fdivsqrt integer division result (for IEU)
|
||||||
|
|
||||||
// result and flag signals
|
// result and flag signals
|
||||||
logic [`XLEN-1:0] ClassResE; // classify result
|
logic [`XLEN-1:0] ClassResE; // classify result
|
||||||
@ -147,7 +147,7 @@ module fpu (
|
|||||||
logic [`FLEN-1:0] SgnResE; // sign injection result
|
logic [`FLEN-1:0] SgnResE; // sign injection result
|
||||||
logic [`FLEN-1:0] PreFpResE, PreFpResM; // selected result that is ready in the memory stage
|
logic [`FLEN-1:0] PreFpResE, PreFpResM; // selected result that is ready in the memory stage
|
||||||
logic PreNVE, PreNVM; // selected flag that is ready in the memory stage
|
logic PreNVE, PreNVM; // selected flag that is ready in the memory stage
|
||||||
logic [`FLEN-1:0] FPUResultW; // final FP result being written to the FP register
|
logic [`FLEN-1:0] FResultW; // final FP result being written to the FP register
|
||||||
// other signals
|
// other signals
|
||||||
logic [`FLEN-1:0] AlignedSrcAE; // align SrcA to the floating point format
|
logic [`FLEN-1:0] AlignedSrcAE; // align SrcA to the floating point format
|
||||||
logic [`FLEN-1:0] BoxedZeroE; // Zero value for Z for multiplication, with NaN boxing if needed
|
logic [`FLEN-1:0] BoxedZeroE; // Zero value for Z for multiplication, with NaN boxing if needed
|
||||||
@ -177,7 +177,7 @@ module fpu (
|
|||||||
// FP register file
|
// FP register file
|
||||||
fregfile fregfile (.clk, .reset, .we4(FRegWriteW),
|
fregfile fregfile (.clk, .reset, .we4(FRegWriteW),
|
||||||
.a1(InstrD[19:15]), .a2(InstrD[24:20]), .a3(InstrD[31:27]),
|
.a1(InstrD[19:15]), .a2(InstrD[24:20]), .a3(InstrD[31:27]),
|
||||||
.a4(RdW), .wd4(FPUResultW),
|
.a4(RdW), .wd4(FResultW),
|
||||||
.rd1(FRD1D), .rd2(FRD2D), .rd3(FRD3D));
|
.rd1(FRD1D), .rd2(FRD2D), .rd3(FRD3D));
|
||||||
|
|
||||||
// D/E pipeline registers
|
// D/E pipeline registers
|
||||||
@ -203,9 +203,9 @@ module fpu (
|
|||||||
.XEnD, .YEnD, .ZEnD, .FPUStallD, .ForwardXE, .ForwardYE, .ForwardZE);
|
.XEnD, .YEnD, .ZEnD, .FPUStallD, .ForwardXE, .ForwardYE, .ForwardZE);
|
||||||
|
|
||||||
// forwarding muxs
|
// forwarding muxs
|
||||||
mux3 #(`FLEN) fxemux (FRD1E, FPUResultW, PreFpResM, ForwardXE, XE);
|
mux3 #(`FLEN) fxemux (FRD1E, FResultW, PreFpResM, ForwardXE, XE);
|
||||||
mux3 #(`FLEN) fyemux (FRD2E, FPUResultW, PreFpResM, ForwardYE, PreYE);
|
mux3 #(`FLEN) fyemux (FRD2E, FResultW, PreFpResM, ForwardYE, PreYE);
|
||||||
mux3 #(`FLEN) fzemux (FRD3E, FPUResultW, PreFpResM, ForwardZE, PreZE);
|
mux3 #(`FLEN) fzemux (FRD3E, FResultW, PreFpResM, ForwardZE, PreZE);
|
||||||
|
|
||||||
|
|
||||||
generate
|
generate
|
||||||
@ -268,7 +268,7 @@ module fpu (
|
|||||||
.XInfE, .YInfE, .XZeroE, .YZeroE, .XNaNE, .YNaNE, .FDivStartE, .IDivStartE, .XsE,
|
.XInfE, .YInfE, .XZeroE, .YZeroE, .XNaNE, .YNaNE, .FDivStartE, .IDivStartE, .XsE,
|
||||||
.ForwardedSrcAE, .ForwardedSrcBE, .Funct3E, .Funct3M, .IntDivE, .W64E,
|
.ForwardedSrcAE, .ForwardedSrcBE, .Funct3E, .Funct3M, .IntDivE, .W64E,
|
||||||
.StallM, .FlushE, .DivStickyM, .FDivBusyE, .IFDivStartE, .FDivDoneE, .QeM,
|
.StallM, .FlushE, .DivStickyM, .FDivBusyE, .IFDivStartE, .FDivDoneE, .QeM,
|
||||||
.QmM, .FPIntDivResultM /*, .DivDone(DivDoneM) */);
|
.QmM, .FIntDivResultM /*, .DivDone(DivDoneM) */);
|
||||||
|
|
||||||
//
|
//
|
||||||
// compare
|
// compare
|
||||||
@ -388,7 +388,7 @@ module fpu (
|
|||||||
// M/W pipe registers
|
// M/W pipe registers
|
||||||
flopenrc #(`FLEN) MWRegFp(clk, reset, FlushW, ~StallW, FpResM, FpResW);
|
flopenrc #(`FLEN) MWRegFp(clk, reset, FlushW, ~StallW, FpResM, FpResW);
|
||||||
flopenrc #(`XLEN) MWRegIntCvtRes(clk, reset, FlushW, ~StallW, FCvtIntResM, FCvtIntResW);
|
flopenrc #(`XLEN) MWRegIntCvtRes(clk, reset, FlushW, ~StallW, FCvtIntResM, FCvtIntResW);
|
||||||
flopenrc #(`XLEN) MWRegIntDivRes(clk, reset, FlushW, ~StallW, FPIntDivResultM, FPIntDivResultW);
|
flopenrc #(`XLEN) MWRegIntDivRes(clk, reset, FlushW, ~StallW, FIntDivResultM, FIntDivResultW);
|
||||||
|
|
||||||
// BEGIN WRITEBACK STAGE
|
// BEGIN WRITEBACK STAGE
|
||||||
|
|
||||||
@ -403,6 +403,6 @@ module fpu (
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// select the result to be written to the FP register
|
// select the result to be written to the FP register
|
||||||
mux2 #(`FLEN) FPUResultMux (FpResW, ReadDataW, FResSelW[1], FPUResultW);
|
mux2 #(`FLEN) FResultMux (FpResW, ReadDataW, FResSelW[1], FResultW);
|
||||||
|
|
||||||
endmodule // fpu
|
endmodule // fpu
|
||||||
|
@ -59,7 +59,7 @@ module datapath (
|
|||||||
input logic [`XLEN-1:0] FCvtIntResW,
|
input logic [`XLEN-1:0] FCvtIntResW,
|
||||||
input logic [`XLEN-1:0] ReadDataW,
|
input logic [`XLEN-1:0] ReadDataW,
|
||||||
input logic [`XLEN-1:0] CSRReadValW, MDUResultW,
|
input logic [`XLEN-1:0] CSRReadValW, MDUResultW,
|
||||||
input logic [`XLEN-1:0] FPIntDivResultW,
|
input logic [`XLEN-1:0] FIntDivResultW,
|
||||||
// Hazard Unit signals
|
// Hazard Unit signals
|
||||||
output logic [4:0] Rs1D, Rs2D, Rs1E, Rs2E,
|
output logic [4:0] Rs1D, Rs2D, Rs1E, Rs2E,
|
||||||
output logic [4:0] RdE, RdM, RdW
|
output logic [4:0] RdE, RdM, RdW
|
||||||
@ -122,7 +122,7 @@ module datapath (
|
|||||||
mux2 #(`XLEN) resultmuxM(IEUResultM, FIntResM, FWriteIntM, IFResultM);
|
mux2 #(`XLEN) resultmuxM(IEUResultM, FIntResM, FWriteIntM, IFResultM);
|
||||||
mux2 #(`XLEN) cvtresultmuxW(IFResultW, FCvtIntResW, FCvtIntW, IFCvtResultW);
|
mux2 #(`XLEN) cvtresultmuxW(IFResultW, FCvtIntResW, FCvtIntW, IFCvtResultW);
|
||||||
if (`IDIV_ON_FPU) begin
|
if (`IDIV_ON_FPU) begin
|
||||||
mux2 #(`XLEN) divresultmuxW(MDUResultW, FPIntDivResultW, IntDivW, MulDivResultW);
|
mux2 #(`XLEN) divresultmuxW(MDUResultW, FIntDivResultW, IntDivW, MulDivResultW);
|
||||||
end else begin
|
end else begin
|
||||||
assign MulDivResultW = MDUResultW;
|
assign MulDivResultW = MDUResultW;
|
||||||
end
|
end
|
||||||
|
@ -54,7 +54,7 @@ module ieu (
|
|||||||
output logic InvalidateICacheM, FlushDCacheM,
|
output logic InvalidateICacheM, FlushDCacheM,
|
||||||
|
|
||||||
// Writeback stage
|
// Writeback stage
|
||||||
input logic [`XLEN-1:0] FPIntDivResultW,
|
input logic [`XLEN-1:0] FIntDivResultW,
|
||||||
input logic [`XLEN-1:0] CSRReadValW, MDUResultW,
|
input logic [`XLEN-1:0] CSRReadValW, MDUResultW,
|
||||||
input logic [`XLEN-1:0] FCvtIntResW,
|
input logic [`XLEN-1:0] FCvtIntResW,
|
||||||
output logic [4:0] RdW,
|
output logic [4:0] RdW,
|
||||||
@ -104,7 +104,7 @@ module ieu (
|
|||||||
.PCE, .PCLinkE, .FlagsE, .IEUAdrE, .ForwardedSrcAE, .ForwardedSrcBE,
|
.PCE, .PCLinkE, .FlagsE, .IEUAdrE, .ForwardedSrcAE, .ForwardedSrcBE,
|
||||||
.StallM, .FlushM, .FWriteIntM, .FIntResM, .SrcAM, .WriteDataM, .FCvtIntW,
|
.StallM, .FlushM, .FWriteIntM, .FIntResM, .SrcAM, .WriteDataM, .FCvtIntW,
|
||||||
.StallW, .FlushW, .RegWriteW, .IntDivW, .SquashSCW, .ResultSrcW, .ReadDataW, .FCvtIntResW,
|
.StallW, .FlushW, .RegWriteW, .IntDivW, .SquashSCW, .ResultSrcW, .ReadDataW, .FCvtIntResW,
|
||||||
.CSRReadValW, .MDUResultW, .FPIntDivResultW, .Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW);
|
.CSRReadValW, .MDUResultW, .FIntDivResultW, .Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW);
|
||||||
|
|
||||||
forward fw(
|
forward fw(
|
||||||
.Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW,
|
.Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW,
|
||||||
|
@ -93,7 +93,7 @@ module wallypipelinedcore (
|
|||||||
logic FCvtIntStallD;
|
logic FCvtIntStallD;
|
||||||
logic FpLoadStoreM;
|
logic FpLoadStoreM;
|
||||||
logic [4:0] SetFflagsM;
|
logic [4:0] SetFflagsM;
|
||||||
logic [`XLEN-1:0] FPIntDivResultW;
|
logic [`XLEN-1:0] FIntDivResultW;
|
||||||
|
|
||||||
// memory management unit signals
|
// memory management unit signals
|
||||||
logic ITLBWriteF;
|
logic ITLBWriteF;
|
||||||
@ -223,7 +223,7 @@ module wallypipelinedcore (
|
|||||||
.RdE, .RdM, .FIntResM, .InvalidateICacheM, .FlushDCacheM,
|
.RdE, .RdM, .FIntResM, .InvalidateICacheM, .FlushDCacheM,
|
||||||
|
|
||||||
// Writeback stage
|
// Writeback stage
|
||||||
.CSRReadValW, .MDUResultW, .FPIntDivResultW,
|
.CSRReadValW, .MDUResultW, .FIntDivResultW,
|
||||||
.RdW, .ReadDataW(ReadDataW[`XLEN-1:0]),
|
.RdW, .ReadDataW(ReadDataW[`XLEN-1:0]),
|
||||||
.InstrValidM,
|
.InstrValidM,
|
||||||
.FCvtIntResW,
|
.FCvtIntResW,
|
||||||
@ -401,7 +401,7 @@ module wallypipelinedcore (
|
|||||||
.FDivBusyE, // Is the divide/sqrt unit busy (stall execute stage)
|
.FDivBusyE, // Is the divide/sqrt unit busy (stall execute stage)
|
||||||
.IllegalFPUInstrM, // Is the instruction an illegal fpu instruction
|
.IllegalFPUInstrM, // Is the instruction an illegal fpu instruction
|
||||||
.SetFflagsM, // FPU flags (to privileged unit)
|
.SetFflagsM, // FPU flags (to privileged unit)
|
||||||
.FPIntDivResultW
|
.FIntDivResultW
|
||||||
); // floating point unit
|
); // floating point unit
|
||||||
end else begin // no F_SUPPORTED or D_SUPPORTED; tie outputs low
|
end else begin // no F_SUPPORTED or D_SUPPORTED; tie outputs low
|
||||||
assign FPUStallD = 0;
|
assign FPUStallD = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user