Documentation, cleanup, multi-valued logic
This commit is contained in:
1 parent
5830608527
commit
7bcfbf502b
21 files changed
+770
-539
No files matched your search
+1
-1
@@ -5,7 +5,7 @@ def test_b01(mydir):
|
||||
with open(mydir / 'b01.bench', 'r') as f:
|
||||
c = bench.parse(f.read())
|
||||
assert 92 == len(c.nodes)
|
||||
c = bench.parse(mydir / 'b01.bench')
|
||||
c = bench.load(mydir / 'b01.bench')
|
||||
assert 92 == len(c.nodes)
|
||||
|
||||
|
||||
|
||||
+38
-5
@@ -23,6 +23,14 @@ def test_mvarray():
|
||||
assert ary.length == 1
|
||||
assert ary.width == 4
|
||||
|
||||
ary = lg.MVArray("1")
|
||||
assert ary.length == 1
|
||||
assert ary.width == 1
|
||||
|
||||
ary = lg.MVArray(["1"])
|
||||
assert ary.length == 1
|
||||
assert ary.width == 1
|
||||
|
||||
# instantiation with multiple vectors
|
||||
|
||||
ary = lg.MVArray([[0, 0], [0, 1], [1, 0], [1, 1]])
|
||||
@@ -53,14 +61,14 @@ def test_mvarray():
|
||||
|
||||
# casting to 4-valued logic
|
||||
|
||||
ary = lg.MVArray([0, 1, 2, None, 'F'])
|
||||
ary = lg.MVArray([0, 1, 2, None, 'F'], m=4)
|
||||
assert ary.data[0] == lg.ZERO
|
||||
assert ary.data[1] == lg.ONE
|
||||
assert ary.data[2] == lg.UNKNOWN
|
||||
assert ary.data[3] == lg.UNASSIGNED
|
||||
assert ary.data[4] == lg.ZERO
|
||||
|
||||
ary = lg.MVArray("0-X1PRFN")
|
||||
ary = lg.MVArray("0-X1PRFN", m=4)
|
||||
assert ary.data[0] == lg.ZERO
|
||||
assert ary.data[1] == lg.UNASSIGNED
|
||||
assert ary.data[2] == lg.UNKNOWN
|
||||
@@ -77,7 +85,7 @@ def test_mvarray():
|
||||
assert ary.data[1] == lg.ONE
|
||||
assert ary.data[2] == lg.UNKNOWN
|
||||
assert ary.data[3] == lg.UNASSIGNED
|
||||
assert ary.data[4] == lg.FALLING
|
||||
assert ary.data[4] == lg.FALL
|
||||
|
||||
ary = lg.MVArray("0-X1PRFN", m=8)
|
||||
assert ary.data[0] == lg.ZERO
|
||||
@@ -85,8 +93,8 @@ def test_mvarray():
|
||||
assert ary.data[2] == lg.UNKNOWN
|
||||
assert ary.data[3] == lg.ONE
|
||||
assert ary.data[4] == lg.PPULSE
|
||||
assert ary.data[5] == lg.RISING
|
||||
assert ary.data[6] == lg.FALLING
|
||||
assert ary.data[5] == lg.RISE
|
||||
assert ary.data[6] == lg.FALL
|
||||
assert ary.data[7] == lg.NPULSE
|
||||
|
||||
# copy constructor and casting
|
||||
@@ -103,3 +111,28 @@ def test_mvarray():
|
||||
ary2 = lg.MVArray(ary, m=2)
|
||||
assert ary2.data[1] == lg.ZERO
|
||||
assert ary2.data[7] == lg.ONE
|
||||
|
||||
|
||||
def test_mv_operations():
|
||||
x1_2v = lg.MVArray("0011", m=2)
|
||||
x2_2v = lg.MVArray("0101", m=2)
|
||||
x1_4v = lg.MVArray("0000XXXX----1111", m=4)
|
||||
x2_4v = lg.MVArray("0X-10X-10X-10X-1", m=4)
|
||||
x1_8v = lg.MVArray("00000000XXXXXXXX--------11111111PPPPPPPPRRRRRRRRFFFFFFFFNNNNNNNN", m=8)
|
||||
x2_8v = lg.MVArray("0X-1PRFN0X-1PRFN0X-1PRFN0X-1PRFN0X-1PRFN0X-1PRFN0X-1PRFN0X-1PRFN", m=8)
|
||||
|
||||
assert str(lg.mv_not(x1_2v)) == "['1100']"
|
||||
assert str(lg.mv_not(x1_4v)) == "['1111XXXXXXXX0000']"
|
||||
assert str(lg.mv_not(x1_8v)) == "['11111111XXXXXXXXXXXXXXXX00000000NNNNNNNNFFFFFFFFRRRRRRRRPPPPPPPP']"
|
||||
|
||||
assert str(lg.mv_or(x1_2v, x2_2v)) == "['0111']"
|
||||
assert str(lg.mv_or(x1_4v, x2_4v)) == "['0XX1XXX1XXX11111']"
|
||||
assert str(lg.mv_or(x1_8v, x2_8v)) == "['0XX1PRFNXXX1XXXXXXX1XXXX11111111PXX1PRFNRXX1RRNNFXX1FNFNNXX1NNNN']"
|
||||
|
||||
assert str(lg.mv_and(x1_2v, x2_2v)) == "['0001']"
|
||||
assert str(lg.mv_and(x1_4v, x2_4v)) == "['00000XXX0XXX0XX1']"
|
||||
assert str(lg.mv_and(x1_8v, x2_8v)) == "['000000000XXXXXXX0XXXXXXX0XX1PRFN0XXPPPPP0XXRPRPR0XXFPPFF0XXNPRFN']"
|
||||
|
||||
assert str(lg.mv_xor(x1_2v, x2_2v)) == "['0110']"
|
||||
assert str(lg.mv_xor(x1_4v, x2_4v)) == "['0XX1XXXXXXXX1XX0']"
|
||||
assert str(lg.mv_xor(x1_8v, x2_8v)) == "['0XX1PRFNXXXXXXXXXXXXXXXX1XX0NFRPPXXNPRFNRXXFRPNFFXXRFNPRNXXPNFRP']"
|
||||
@@ -141,7 +141,7 @@ def test_vd3():
|
||||
|
||||
|
||||
def test_b01(mydir):
|
||||
c = bench.parse(mydir / 'b01.bench')
|
||||
c = bench.load(mydir / 'b01.bench')
|
||||
|
||||
# 2-valued
|
||||
s = LogicSim(c, 8)
|
||||
|
||||
+3
-3
@@ -74,13 +74,13 @@ def test_parse():
|
||||
|
||||
|
||||
def test_b14(mydir):
|
||||
df = sdf.parse(mydir / 'b14.sdf.gz')
|
||||
df = sdf.load(mydir / 'b14.sdf.gz')
|
||||
assert df.name == 'b14'
|
||||
|
||||
|
||||
def test_gates(mydir):
|
||||
c = verilog.parse(mydir / 'gates.v')
|
||||
df = sdf.parse(mydir / 'gates.sdf')
|
||||
c = verilog.load(mydir / 'gates.v')
|
||||
df = sdf.load(mydir / 'gates.sdf')
|
||||
lt = df.annotation(c, pin_index, dataset=1)
|
||||
nand_a = c.cells['nandgate'].ins[0]
|
||||
nand_b = c.cells['nandgate'].ins[1]
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ from kyupy import stil
|
||||
|
||||
|
||||
def test_b14(mydir):
|
||||
s = stil.parse(mydir / 'b14.stuck.stil.gz')
|
||||
s = stil.load(mydir / 'b14.stuck.stil.gz')
|
||||
assert 10 == len(s.signal_groups)
|
||||
assert 1 == len(s.scan_chains)
|
||||
assert 2163 == len(s.calls)
|
||||
|
||||
@@ -5,5 +5,4 @@ def test_b01(mydir):
|
||||
with open(mydir / 'b01.v', 'r') as f:
|
||||
modules = verilog.parse(f.read())
|
||||
assert modules is not None
|
||||
assert verilog.parse(mydir / 'b01.v') is not None
|
||||
|
||||
assert verilog.load(mydir / 'b01.v') is not None
|
||||
@@ -1,11 +1,10 @@
|
||||
import numpy as np
|
||||
from kyupy.wave_sim import WaveSim, wave_eval, TMIN, TMAX
|
||||
from kyupy.wave_sim import WaveSim, WaveSimCuda, wave_eval, TMIN, TMAX
|
||||
from kyupy.logic_sim import LogicSim
|
||||
from kyupy import verilog
|
||||
from kyupy import sdf
|
||||
from kyupy.saed import pin_index
|
||||
from kyupy.packed_vectors import PackedVectors
|
||||
from kyupy.wave_sim_cuda import WaveSimCuda
|
||||
|
||||
|
||||
def test_wave_eval():
|
||||
@@ -122,24 +121,24 @@ def compare_to_logic_sim(wsim):
|
||||
|
||||
|
||||
def test_b14(mydir):
|
||||
c = verilog.parse(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.parse(mydir / 'b14.sdf.gz')
|
||||
c = verilog.load(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.load(mydir / 'b14.sdf.gz')
|
||||
lt = df.annotation(c, pin_index)
|
||||
wsim = WaveSim(c, lt, 8)
|
||||
compare_to_logic_sim(wsim)
|
||||
|
||||
|
||||
def test_b14_strip_forks(mydir):
|
||||
c = verilog.parse(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.parse(mydir / 'b14.sdf.gz')
|
||||
c = verilog.load(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.load(mydir / 'b14.sdf.gz')
|
||||
lt = df.annotation(c, pin_index)
|
||||
wsim = WaveSim(c, lt, 8, strip_forks=True)
|
||||
compare_to_logic_sim(wsim)
|
||||
|
||||
|
||||
def test_b14_cuda(mydir):
|
||||
c = verilog.parse(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.parse(mydir / 'b14.sdf.gz')
|
||||
c = verilog.load(mydir / 'b14.v.gz', branchforks=True)
|
||||
df = sdf.load(mydir / 'b14.sdf.gz')
|
||||
lt = df.annotation(c, pin_index)
|
||||
wsim = WaveSimCuda(c, lt, 8)
|
||||
compare_to_logic_sim(wsim)
|
||||
Reference in new issue
Block a user