quick test showing how left/right mask work
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 13 Jul 2020 19:27:56 +0000 (20:27 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 13 Jul 2020 19:28:20 +0000 (20:28 +0100)
src/soc/fu/shift_rot/rotator.py

index 8a20b0ba4f071d50031879531fa1cda811435aec..f5652ef6e4c1e32917a75700a27d9f45376518e3 100644 (file)
@@ -1,10 +1,12 @@
 # Manual translation and adaptation of rotator.vhdl from microwatt into nmigen
 #
+from nmigen.compat.sim import run_simulation
 
 from nmigen import (Elaboratable, Signal, Module, Const, Cat, Repl,
                     unsigned, signed)
 from soc.fu.shift_rot.rotl import ROTL
 from nmutil.extend import exts
+from nmigen.back.pysim import Settle
 
 
 # note BE bit numbering
@@ -160,3 +162,21 @@ class Rotator(Elaboratable):
 
         return m
 
+if __name__ == '__main__':
+
+    m = Module()
+    comb = m.d.comb
+    mr = Signal(64)
+    mb = Signal(6)
+    comb += mr.eq(left_mask(m, mb))
+   
+    def loop():
+        for i in range(64):
+            yield mb.eq(63-i)
+            yield Settle()
+            res = yield mr
+            print (i, hex(res))
+
+    run_simulation(m, [loop()],
+                   vcd_name="test_mask.vcd")
+