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)
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)
self.assertEqual((yield enc.o), 0)
sim.add_process(process)
+ sim.run()
class PriorityEncoderTestCase(FHDLTestCase):
self.assertEqual((yield enc.o), 1)
sim.add_process(process)
+ sim.run()
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()