Browse Source

ff transitions switch

devel
Stefan Holst 2 years ago
parent
commit
faf41f0863
  1. 26
      src/kyupy/logic_sim.py

26
src/kyupy/logic_sim.py

@ -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

Loading…
Cancel
Save