forked from Github_Repos/cvw
Initial FDIVSQRT simplification working
This commit is contained in:
parent
16cde5f87e
commit
7b0e43bc10
@ -66,6 +66,7 @@ module fdivsqrtfsm(
|
||||
//logic [$clog2(`DIVLEN/2+3)-1:0] Dur;
|
||||
logic [`DIVb+3:0] W;
|
||||
logic SpecialCase;
|
||||
logic WZeroDelayed; // *** later remove
|
||||
|
||||
//flopen #($clog2(`DIVLEN/2+3)) durflop(clk, DivStart, CalcDur, Dur);
|
||||
assign DivBusy = (state == BUSY);
|
||||
@ -87,7 +88,8 @@ module fdivsqrtfsm(
|
||||
assign WZero = ((NextWSN^NextWCN)=={NextWSN[`DIVb+2:0]|NextWCN[`DIVb+2:0], 1'b0});
|
||||
assign DivSE = |W;
|
||||
end
|
||||
assign DivDone = (state == DONE);
|
||||
flopr #(1) WZeroReg(clk, reset | DivStart, WZero, WZeroDelayed);
|
||||
assign DivDone = (state == DONE) | WZeroDelayed;
|
||||
assign W = WC+WS;
|
||||
assign NegSticky = W[`DIVb+3];
|
||||
assign EarlyTermShiftE = step;
|
||||
@ -102,14 +104,14 @@ module fdivsqrtfsm(
|
||||
step <= Dur;
|
||||
if (SpecialCase) state <= #1 DONE;
|
||||
else state <= #1 BUSY;
|
||||
end else if (DivDone) begin
|
||||
if (StallM) state <= #1 DONE;
|
||||
else state <= #1 IDLE;
|
||||
end else if (state == BUSY) begin
|
||||
if ((step == 1) | WZero) begin
|
||||
if (step == 0) begin
|
||||
state <= #1 DONE;
|
||||
end
|
||||
step <= step - 1;
|
||||
end else if (state == DONE) begin
|
||||
if (StallM) state <= #1 DONE;
|
||||
else state <= #1 IDLE;
|
||||
end
|
||||
end
|
||||
endmodule
|
@ -73,7 +73,7 @@ module fdivsqrtpreproc (
|
||||
assign SqrtX = Xe[0]^XZeroCnt[0] ? {1'b0, ~XZero, PreprocX} : {~XZero, PreprocX, 1'b0};
|
||||
assign X = Sqrt ? {SqrtX, {`DIVb-1-`NF{1'b0}}} : {~XZero, PreprocX, {`DIVb-`NF{1'b0}}};
|
||||
assign Dpreproc = {PreprocY, {`DIVN-1-`NF{1'b0}}};
|
||||
assign Dur = (`DURLEN)'(`FPDUR);
|
||||
assign Dur = (`DURLEN)'(`FPDUR-1);
|
||||
|
||||
// radix 2 radix 4
|
||||
// 1 copies DIVLEN+2 DIVLEN+2/2
|
||||
|
Loading…
Reference in New Issue
Block a user