Esempio n. 1
0
 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();
 }
Esempio n. 2
0
 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();
         }
     }
 }