From 1d46a6a382946e2b96d32e55c6c81cc26c2af6a8 Mon Sep 17 00:00:00 2001 From: Michael Nolan Date: Mon, 17 Feb 2020 11:32:01 -0500 Subject: [PATCH] part_shift_scalar now has maked shift amounts working --- .../part_shift/formal/proof_shift_scalar.py | 20 +++++++++---------- src/ieee754/part_shift/part_shift_scalar.py | 19 ++++++++++++------ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/ieee754/part_shift/formal/proof_shift_scalar.py b/src/ieee754/part_shift/formal/proof_shift_scalar.py index 8e7b0b68..b150e25b 100644 --- a/src/ieee754/part_shift/formal/proof_shift_scalar.py +++ b/src/ieee754/part_shift/formal/proof_shift_scalar.py @@ -62,19 +62,19 @@ class ShifterDriver(Elaboratable): expected = Signal(width) with m.Switch(points.as_sig()): - # with m.Case(0b00): - # comb += Assert( - # out[0:24] == (data[0:24] << (shifter & 0x1f)) & 0xffffff) + with m.Case(0b00): + comb += Assert( + out[0:24] == (data[0:24] << (shifter & 0x1f)) & 0xffffff) with m.Case(0b01): comb += Assert(out[0:8] == (data[0:8] << (shifter & 0x7)) & 0xFF) - # comb += Assert(out[8:16] == - # (data[8:16] << (shifter)) & 0xffff) + comb += Assert(out[8:24] == + (data[8:24] << (shifter & 0xf)) & 0xffff) - # with m.Case(0b10): - # comb += Assert(out[16:24] == - # (data[16:24] << (shifter & 0x7)) & 0xff) + with m.Case(0b10): + comb += Assert(out[16:24] == + (data[16:24] << (shifter & 0x7)) & 0xff) comb += Assert(out[0:16] == (data[0:16] << (shifter & 0xf)) & 0xffff) @@ -92,8 +92,8 @@ class PartitionedScalarShiftTestCase(FHDLTestCase): module = ShifterDriver() self.assertFormal(module, mode="bmc", depth=4) def test_ilang(self): - width = 32 - mwidth = 4 + width = 24 + mwidth = 3 gates = Signal(mwidth-1) points = PartitionPoints() step = int(width/mwidth) diff --git a/src/ieee754/part_shift/part_shift_scalar.py b/src/ieee754/part_shift/part_shift_scalar.py index 43d16bdb..eb155df7 100644 --- a/src/ieee754/part_shift/part_shift_scalar.py +++ b/src/ieee754/part_shift/part_shift_scalar.py @@ -55,17 +55,24 @@ class PartitionedScalarShift(Elaboratable): shifter_masks = [] for i in range(len(intervals)): max_bits = math.ceil(math.log2(width-intervals[i][0])) + sm_mask = Signal(shiftbits, name="sm_mask%d" % i) if pwid-i != 0: sm = ShifterMask(pwid-i, shiftbits, max_bits, min_bits) - setattr(m.submodules, "sm%d" % i, sm) comb += sm.gates.eq(gates[i:pwid]) - mask = Signal(shiftbits, name="sm_mask%d" % i) - comb += mask.eq(sm.mask) - shifter_masks.append(mask) + comb += sm_mask.eq(sm.mask) + setattr(m.submodules, "sm%d" % i, sm) else: # having a 0 width signal seems to give the proof issues - shifter_masks.append((1<