Produce stable value when trans. to/from -
This commit is contained in:
1 parent
4f6b733eb4
commit
a4cce9f8c0
1 file changed
+5
-1
+5
-1
@@ -241,6 +241,8 @@ def mv_latch(d, t, q_prev, out=None):
|
||||
def mv_transition(init, final, out=None):
|
||||
"""Computes the logic transitions from the initial values of ``init`` to the final values of ``final``.
|
||||
Pulses in the input data are ignored. If any of the inputs are ``UNKNOWN``, the result is ``UNKNOWN``.
|
||||
If init is ``UNASSIGNED``, the result is the final value of ``final``.
|
||||
If final is ``UNASSIGNED``, the result is the initial value of ``init``.
|
||||
If both inputs are ``UNASSIGNED``, the result is ``UNASSIGNED``.
|
||||
|
||||
:param init: A multi-valued array.
|
||||
@@ -251,7 +253,9 @@ def mv_transition(init, final, out=None):
|
||||
out = out or np.empty(np.broadcast(init, final).shape, dtype=np.uint8)
|
||||
out[...] = (init & 0b010) | (final & 0b001)
|
||||
out[...] |= ((out << 1) ^ (out << 2)) & 0b100
|
||||
unknown = (init == UNKNOWN) | (init == UNASSIGNED) | (final == UNKNOWN) | (final == UNASSIGNED)
|
||||
out[...] = np.choose(init == UNASSIGNED, [out, (final & 0b001) * ONE])
|
||||
out[...] = np.choose(final == UNASSIGNED, [out, ((init & 0b010) >> 1) * ONE])
|
||||
unknown = (init == UNKNOWN) | (final == UNKNOWN)
|
||||
unassigned = (init == UNASSIGNED) & (final == UNASSIGNED)
|
||||
np.putmask(out, unknown, UNKNOWN)
|
||||
np.putmask(out, unassigned, UNASSIGNED)
|
||||
|
||||
Reference in new issue
Block a user