lib.coding: fix tests to actually run, and fix code to fix tests.
authorwhitequark <cz@m-labs.hk>
Thu, 27 Dec 2018 21:45:55 +0000 (21:45 +0000)
committerwhitequark <cz@m-labs.hk>
Thu, 27 Dec 2018 21:45:55 +0000 (21:45 +0000)
nmigen/lib/coding.py
nmigen/test/test_lib_coding.py

index 650907771486128c279034586a9a0fc03e0ed2a8..f9c2c63d1969a552a2c098cbf8e575e964ff6c8f 100644 (file)
@@ -69,7 +69,7 @@ class PriorityEncoder:
         m = Module()
         for j, b in enumerate(reversed(self.i)):
             with m.If(b):
-                m.d.comb += self.o.eq(j)
+                m.d.comb += self.o.eq(len(self.i) - j - 1)
         m.d.comb += self.n.eq(self.i == 0)
         return m.lower(platform)
 
@@ -105,9 +105,8 @@ class Decoder:
             for j in range(len(self.o)):
                 with m.Case(j):
                     m.d.comb += self.o.eq(1 << j)
-            with m.Case():
-                with m.If(self.n):
-                    m.d.comb += self.o.eq(0)
+        with m.If(self.n):
+            m.d.comb += self.o.eq(0)
         return m.lower(platform)
 
 
index 5569e767dccf1b30462fd4ea452a143576713f9b..c535c79206cff4d40a2cb1d9c22550dd66c8f329 100644 (file)
@@ -28,6 +28,7 @@ class EncoderTestCase(FHDLTestCase):
                 self.assertEqual((yield enc.o), 0)
 
             sim.add_process(process)
+            sim.run()
 
 
 class PriorityEncoderTestCase(FHDLTestCase):
@@ -54,6 +55,7 @@ class PriorityEncoderTestCase(FHDLTestCase):
                 self.assertEqual((yield enc.o), 1)
 
             sim.add_process(process)
+            sim.run()
 
 
 class DecoderTestCase(FHDLTestCase):
@@ -61,18 +63,19 @@ class DecoderTestCase(FHDLTestCase):
         dec = Decoder(4)
         with Simulator(dec) as sim:
             def process():
-                self.assertEqual((yield enc.o), 0b0001)
+                self.assertEqual((yield dec.o), 0b0001)
 
-                yield enc.i.eq(1)
+                yield dec.i.eq(1)
                 yield Delay()
-                self.assertEqual((yield enc.o), 0b0010)
+                self.assertEqual((yield dec.o), 0b0010)
 
-                yield enc.i.eq(3)
+                yield dec.i.eq(3)
                 yield Delay()
-                self.assertEqual((yield enc.o), 0b1000)
+                self.assertEqual((yield dec.o), 0b1000)
 
-                yield enc.n.eq(1)
+                yield dec.n.eq(1)
                 yield Delay()
-                self.assertEqual((yield enc.o), 0b0000)
+                self.assertEqual((yield dec.o), 0b0000)
 
             sim.add_process(process)
+            sim.run()