2018-12-26 06:19:34 -07:00
|
|
|
from .tools import *
|
|
|
|
from ..hdl.ast import *
|
|
|
|
from ..back.pysim import *
|
|
|
|
from ..lib.coding import *
|
|
|
|
|
|
|
|
|
|
|
|
class EncoderTestCase(FHDLTestCase):
|
|
|
|
def test_basic(self):
|
|
|
|
enc = Encoder(4)
|
|
|
|
with Simulator(enc) as sim:
|
|
|
|
def process():
|
|
|
|
self.assertEqual((yield enc.n), 1)
|
|
|
|
self.assertEqual((yield enc.o), 0)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0001)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 0)
|
|
|
|
self.assertEqual((yield enc.o), 0)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0100)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 0)
|
|
|
|
self.assertEqual((yield enc.o), 2)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0110)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 1)
|
|
|
|
self.assertEqual((yield enc.o), 0)
|
|
|
|
|
|
|
|
sim.add_process(process)
|
2018-12-27 14:45:55 -07:00
|
|
|
sim.run()
|
2018-12-26 06:19:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
class PriorityEncoderTestCase(FHDLTestCase):
|
|
|
|
def test_basic(self):
|
|
|
|
enc = PriorityEncoder(4)
|
|
|
|
with Simulator(enc) as sim:
|
|
|
|
def process():
|
|
|
|
self.assertEqual((yield enc.n), 1)
|
|
|
|
self.assertEqual((yield enc.o), 0)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0001)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 0)
|
|
|
|
self.assertEqual((yield enc.o), 0)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0100)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 0)
|
|
|
|
self.assertEqual((yield enc.o), 2)
|
|
|
|
|
|
|
|
yield enc.i.eq(0b0110)
|
|
|
|
yield Delay()
|
|
|
|
self.assertEqual((yield enc.n), 0)
|
|
|
|
self.assertEqual((yield enc.o), 1)
|
|
|
|
|
|
|
|
sim.add_process(process)
|
2018-12-27 14:45:55 -07:00
|
|
|
sim.run()
|
2018-12-26 06:19:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
class DecoderTestCase(FHDLTestCase):
|
|
|
|
def test_basic(self):
|
|
|
|
dec = Decoder(4)
|
|
|
|
with Simulator(dec) as sim:
|
|
|
|
def process():
|
2018-12-27 14:45:55 -07:00
|
|
|
self.assertEqual((yield dec.o), 0b0001)
|
2018-12-26 06:19:34 -07:00
|
|
|
|
2018-12-27 14:45:55 -07:00
|
|
|
yield dec.i.eq(1)
|
2018-12-26 06:19:34 -07:00
|
|
|
yield Delay()
|
2018-12-27 14:45:55 -07:00
|
|
|
self.assertEqual((yield dec.o), 0b0010)
|
2018-12-26 06:19:34 -07:00
|
|
|
|
2018-12-27 14:45:55 -07:00
|
|
|
yield dec.i.eq(3)
|
2018-12-26 06:19:34 -07:00
|
|
|
yield Delay()
|
2018-12-27 14:45:55 -07:00
|
|
|
self.assertEqual((yield dec.o), 0b1000)
|
2018-12-26 06:19:34 -07:00
|
|
|
|
2018-12-27 14:45:55 -07:00
|
|
|
yield dec.n.eq(1)
|
2018-12-26 06:19:34 -07:00
|
|
|
yield Delay()
|
2018-12-27 14:45:55 -07:00
|
|
|
self.assertEqual((yield dec.o), 0b0000)
|
2018-12-26 06:19:34 -07:00
|
|
|
|
|
|
|
sim.add_process(process)
|
2018-12-27 14:45:55 -07:00
|
|
|
sim.run()
|