private SignalInput(SignalInput original) { if (!String.IsNullOrEmpty(original.m_Name)) { Name = (string)original.Name.Clone(); } m_State = original.m_State; UnitDelay = 0; m_Signal = new Signal(); }
private void ProcessSimulationStep() { //set the inputs appropriate foreach (BaseElement element in m_Circuit) { SignalInput input = element as SignalInput; if (input != null) { State state = input.Signal.GetStateAtStep(m_CurrentStep); if (state == null) { if (m_LoopSimulation || m_CurrentStep < m_EditorSignals.MaxSignalLength) { throw new SimulationException( String.Format("Missing State for Signal {0} at step {1}.", input.SignalName, m_CurrentStep)); } //else don't change the signal } else { input.State = state; } } } //perform an update m_Circuit.Update(); foreach (BaseElement element in m_Circuit) { //get data from clocks Clock clock = element as Clock; if (clock != null) { AddStateToSignal(clock.Name, clock.State); } //get data from inputs SignalInput input = element as SignalInput; if (input != null) { AddStateToSignal(input.SignalName, input.State); } //get data from outputs SignalOutput output = element as SignalOutput; if (output != null) { string name = output.SignalName; if (string.IsNullOrEmpty(name)) { name = output.Name; } AddStateToSignal(name, output.State); } } m_CurrentStep++; if (m_LoopSimulation && m_CurrentStep >= m_EditorSignals.MaxSignalLength) { m_CurrentStep = 0; foreach (Signal signal in m_SignalList) { signal.Clear(); } } }