ff transitions switch
This commit is contained in:
1 parent
6430f10f73
commit
faf41f0863
1 file changed
+15
-11
+15
-11
@@ -91,13 +91,16 @@ class LogicSim:
|
|||||||
if line is not None: self.state_epoch[line.reader] = self.epoch
|
if line is not None: self.state_epoch[line.reader] = self.epoch
|
||||||
return stimuli
|
return stimuli
|
||||||
|
|
||||||
def capture(self, responses):
|
def capture(self, responses, ff_transitions=False):
|
||||||
"""Capture the current values at the primary outputs and in the state-elements (flip-flops).
|
"""Capture the current values at the primary outputs and in the state-elements (flip-flops).
|
||||||
For primary outputs, the logic value is stored unmodified in the given target array.
|
For primary outputs, the logic value is stored unmodified in the given target array.
|
||||||
For flip-flops, the logic value is constructed from the previous state and the new state.
|
For flip-flops, the logic value is either stored unmodified (`ff_transitions=False`)
|
||||||
|
or constructed from the previous state and the new state (`ff_transitions=True`).
|
||||||
|
|
||||||
:param responses: A bit-parallel storage target for the responses in a compatible shape.
|
:param responses: A bit-parallel storage target for the responses in a compatible shape.
|
||||||
:type responses: :py:class:`~kyupy.logic.BPArray`
|
:type responses: :py:class:`~kyupy.logic.BPArray`
|
||||||
|
:param ff_transitions: If true, calculate and store the transitions between the previous state
|
||||||
|
(the currently assigned pattern) and the new state.
|
||||||
:returns: The given responses object.
|
:returns: The given responses object.
|
||||||
"""
|
"""
|
||||||
for node, resp in zip(self.interface, responses.data if hasattr(responses, 'data') else responses):
|
for node, resp in zip(self.interface, responses.data if hasattr(responses, 'data') else responses):
|
||||||
@@ -106,15 +109,16 @@ class LogicSim:
|
|||||||
resp[...] = self.state[node.outs[0]]
|
resp[...] = self.state[node.outs[0]]
|
||||||
else:
|
else:
|
||||||
resp[...] = self.state[node.ins[0]]
|
resp[...] = self.state[node.ins[0]]
|
||||||
# FIXME: unclear why we should use outs for DFFs
|
if not ff_transitions: continue
|
||||||
#if self.m > 2 and 'dff' in node.kind.lower() and len(node.outs) > 0:
|
# outs of DFFs contain the previously assigned value (previous state)
|
||||||
# if node.outs[0] is None:
|
if self.m > 2 and 'dff' in node.kind.lower() and len(node.outs) > 0:
|
||||||
# resp[1, :] = ~self.state[node.outs[1], 0, :] # assume QN is connected, take inverse of that.
|
if node.outs[0] is None:
|
||||||
# else:
|
resp[1, :] = ~self.state[node.outs[1], 0, :] # assume QN is connected, take inverse of that.
|
||||||
# resp[1, :] = self.state[node.outs[0], 0, :]
|
else:
|
||||||
# if self.m > 4:
|
resp[1, :] = self.state[node.outs[0], 0, :]
|
||||||
# resp[..., 2, :] = resp[..., 0, :] ^ resp[..., 1, :]
|
if self.m > 4:
|
||||||
# # We don't handle X or - correctly.
|
resp[..., 2, :] = resp[..., 0, :] ^ resp[..., 1, :]
|
||||||
|
# FIXME: We don't handle X or - correctly.
|
||||||
|
|
||||||
return responses
|
return responses
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user