genlib/coding, test/test_coding: unittests
This commit is contained in:
parent
205908791a
commit
5ccd1799f2
|
@ -37,15 +37,3 @@ class Decoder(Module):
|
|||
|
||||
class PriorityDecoder(Decoder):
|
||||
pass # same
|
||||
|
||||
def _main():
|
||||
from migen.fhdl import verilog
|
||||
e = Encoder(8)
|
||||
print(verilog.convert(e, ios={e.i, e.o, e.n}))
|
||||
pe = PriorityEncoder(8)
|
||||
print(verilog.convert(pe, ios={pe.i, pe.o, pe.n}))
|
||||
d = Decoder(8)
|
||||
print(verilog.convert(d, ios={d.i, d.n, d.o}))
|
||||
|
||||
if __name__ == "__main__":
|
||||
_main()
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
import unittest
|
||||
|
||||
from migen.fhdl.std import *
|
||||
from migen.genlib.coding import *
|
||||
|
||||
from migen.test.support import SimCase, SimBench
|
||||
|
||||
class EncCase(SimCase):
|
||||
class TestBench(SimBench):
|
||||
def __init__(self):
|
||||
self.submodules.dut = Encoder(8)
|
||||
|
||||
def test_sizes(self):
|
||||
self.assertEqual(flen(self.tb.dut.i), 8)
|
||||
self.assertEqual(flen(self.tb.dut.o), 3)
|
||||
self.assertEqual(flen(self.tb.dut.n), 1)
|
||||
|
||||
def test_run_sequence(self):
|
||||
seq = list(range(1<<8))
|
||||
cur = None
|
||||
def cb(tb, s):
|
||||
if seq:
|
||||
s.wr(tb.dut.i, seq.pop(0))
|
||||
i = s.rd(tb.dut.i)
|
||||
if s.rd(tb.dut.n):
|
||||
self.assertNotIn(i, [1<<i for i in range(8)])
|
||||
else:
|
||||
o = s.rd(tb.dut.o)
|
||||
self.assertEqual(i, 1<<o)
|
||||
self.run_with(cb, 256)
|
||||
|
||||
class PrioEncCase(SimCase):
|
||||
class TestBench(SimBench):
|
||||
def __init__(self):
|
||||
self.submodules.dut = PriorityEncoder(8)
|
||||
|
||||
def test_sizes(self):
|
||||
self.assertEqual(flen(self.tb.dut.i), 8)
|
||||
self.assertEqual(flen(self.tb.dut.o), 3)
|
||||
self.assertEqual(flen(self.tb.dut.n), 1)
|
||||
|
||||
def test_run_sequence(self):
|
||||
seq = list(range(1<<8))
|
||||
cur = None
|
||||
def cb(tb, s):
|
||||
if seq:
|
||||
s.wr(tb.dut.i, seq.pop(0))
|
||||
i = s.rd(tb.dut.i)
|
||||
if s.rd(tb.dut.n):
|
||||
self.assertEqual(i, 0)
|
||||
else:
|
||||
o = s.rd(tb.dut.o)
|
||||
if o > 0:
|
||||
self.assertEqual(i & 1<<(o - 1), 0)
|
||||
self.assertGreaterEqual(i, 1<<o)
|
||||
self.run_with(cb, 256)
|
||||
|
||||
class DecCase(SimCase):
|
||||
class TestBench(SimBench):
|
||||
def __init__(self):
|
||||
self.submodules.dut = Decoder(8)
|
||||
|
||||
def test_sizes(self):
|
||||
self.assertEqual(flen(self.tb.dut.i), 3)
|
||||
self.assertEqual(flen(self.tb.dut.o), 8)
|
||||
self.assertEqual(flen(self.tb.dut.n), 1)
|
||||
|
||||
def test_run_sequence(self):
|
||||
seq = list(range(8*2))
|
||||
cur = None
|
||||
def cb(tb, s):
|
||||
if seq:
|
||||
i = seq.pop()
|
||||
s.wr(tb.dut.i, i//2)
|
||||
s.wr(tb.dut.n, i%2)
|
||||
i = s.rd(tb.dut.i)
|
||||
o = s.rd(tb.dut.o)
|
||||
if s.rd(tb.dut.n):
|
||||
self.assertEqual(o, 0)
|
||||
else:
|
||||
self.assertEqual(o, 1<<i)
|
||||
self.run_with(cb, 256)
|
Loading…
Reference in New Issue