fix simprim cells, add saed90
This commit is contained in:
1 parent
47ee8d5878
commit
d97555e9e9
4 files changed
+351
-64
No files matched your search
+58
-9
@@ -1,9 +1,8 @@
|
||||
import numpy as np
|
||||
|
||||
from kyupy.logic_sim import LogicSim
|
||||
from kyupy import bench
|
||||
from kyupy import bench, logic, sim
|
||||
from kyupy.logic import mvarray, bparray, bp_to_mv, mv_to_bp
|
||||
from kyupy import logic
|
||||
|
||||
def assert_equal_shape_and_contents(actual, desired):
|
||||
desired = np.array(desired, dtype=np.uint8)
|
||||
@@ -11,17 +10,67 @@ def assert_equal_shape_and_contents(actual, desired):
|
||||
np.testing.assert_allclose(actual, desired)
|
||||
|
||||
def test_2v():
|
||||
c = bench.parse('input(x, y) output(a, o, n) a=and(x,y) o=or(x,y) n=not(x)')
|
||||
s = LogicSim(c, 8, m=8) # FIXME: do m=2
|
||||
assert s.s_len == 5
|
||||
bpa = bparray('00---', '01---', '10---', '11---')
|
||||
c = bench.parse(f'''
|
||||
input(i3, i2, i1, i0)
|
||||
output({",".join([f"o{i:02d}" for i in range(33)])})
|
||||
o00=BUF1(i0)
|
||||
o01=INV1(i0)
|
||||
o02=AND2(i0,i1)
|
||||
o03=AND3(i0,i1,i2)
|
||||
o04=AND4(i0,i1,i2,i3)
|
||||
o05=NAND2(i0,i1)
|
||||
o06=NAND3(i0,i1,i2)
|
||||
o07=NAND4(i0,i1,i2,i3)
|
||||
o08=OR2(i0,i1)
|
||||
o09=OR3(i0,i1,i2)
|
||||
o10=OR4(i0,i1,i2,i3)
|
||||
o11=NOR2(i0,i1)
|
||||
o12=NOR3(i0,i1,i2)
|
||||
o13=NOR4(i0,i1,i2,i3)
|
||||
o14=XOR2(i0,i1)
|
||||
o15=XOR3(i0,i1,i2)
|
||||
o16=XOR4(i0,i1,i2,i3)
|
||||
o17=XNOR2(i0,i1)
|
||||
o18=XNOR3(i0,i1,i2)
|
||||
o19=XNOR4(i0,i1,i2,i3)
|
||||
o20=AO21(i0,i1,i2)
|
||||
o21=OA21(i0,i1,i2)
|
||||
o22=AO22(i0,i1,i2,i3)
|
||||
o23=OA22(i0,i1,i2,i3)
|
||||
o24=AOI21(i0,i1,i2)
|
||||
o25=OAI21(i0,i1,i2)
|
||||
o26=AOI22(i0,i1,i2,i3)
|
||||
o27=OAI22(i0,i1,i2,i3)
|
||||
o28=AO211(i0,i1,i2,i3)
|
||||
o29=OA211(i0,i1,i2,i3)
|
||||
o30=AOI211(i0,i1,i2,i3)
|
||||
o31=OAI211(i0,i1,i2,i3)
|
||||
o32=MUX21(i0,i1,i2)
|
||||
''')
|
||||
s = LogicSim(c, 16, m=2)
|
||||
bpa = logic.bparray([f'{i:04b}'+('-'*(s.s_len-4)) for i in range(16)])
|
||||
s.s[0] = bpa
|
||||
s.s_to_c()
|
||||
s.c_prop()
|
||||
s.c_to_s()
|
||||
mva = bp_to_mv(s.s[1])
|
||||
|
||||
assert_equal_shape_and_contents(mva[...,:4], mvarray('--001', '--011', '--010', '--110'))
|
||||
mva = logic.bp_to_mv(s.s[1])
|
||||
for res, exp in zip(logic.packbits(mva[4:], dtype=np.uint32), [
|
||||
sim.BUF1, sim.INV1,
|
||||
sim.AND2, sim.AND3, sim.AND4,
|
||||
sim.NAND2, sim.NAND3, sim.NAND4,
|
||||
sim.OR2, sim.OR3, sim.OR4,
|
||||
sim.NOR2, sim.NOR3, sim.NOR4,
|
||||
sim.XOR2, sim.XOR3, sim.XOR4,
|
||||
sim.XNOR2, sim.XNOR3, sim.XNOR4,
|
||||
sim.AO21, sim.OA21,
|
||||
sim.AO22, sim.OA22,
|
||||
sim.AOI21, sim.OAI21,
|
||||
sim.AOI22, sim.OAI22,
|
||||
sim.AO211, sim.OA211,
|
||||
sim.AOI211, sim.OAI211,
|
||||
sim.MUX21
|
||||
]):
|
||||
assert res == exp, f'Mismatch for SimPrim {sim.names[exp]} res={bin(res)} exp={bin(exp)}'
|
||||
|
||||
|
||||
def test_4v():
|
||||
|
||||
Reference in new issue
Block a user