X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsoc%2Ffu%2Fdiv%2Fexperiment%2Fgoldschmidt_div_sqrt.py;h=1f3f81a4df74891647355d4eefc58964ccc69c90;hb=1de2783b8e14ff55bb79e5c48828d922321ae64f;hp=a86fa78d111e3957b31e45a645b0ba8ac5e85174;hpb=2d9fb70cf873f26b77a90cd938e9d656afc4e1d1;p=soc.git diff --git a/src/soc/fu/div/experiment/goldschmidt_div_sqrt.py b/src/soc/fu/div/experiment/goldschmidt_div_sqrt.py index a86fa78d..1f3f81a4 100644 --- a/src/soc/fu/div/experiment/goldschmidt_div_sqrt.py +++ b/src/soc/fu/div/experiment/goldschmidt_div_sqrt.py @@ -1097,7 +1097,12 @@ class GoldschmidtDivOp(enum.Enum): assert state.f is not None assert state.f.width == params.n_d_f_total_wid, "invalid f width" d = Signal.like(state.d) - m.d.comb += d.eq((state.d * state.f) >> params.expanded_width) + d_times_f = Signal.like(state.d * state.f) + m.d.comb += [ + d_times_f.eq(state.d * state.f), + d.eq((d_times_f >> params.expanded_width) + + (d_times_f[:params.expanded_width] != 0)), + ] state.d = d elif self == GoldschmidtDivOp.FEq2MinusD: assert state.d.width == params.n_d_f_total_wid, "invalid d width"