Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

60 строки
1.3KB

  1. Clock::Clock (int m, State initial)
  2. {
  3. init = initial; // Merken
  4. n = m; // Merke Taktrate
  5. a = b = c = 0; // nix angeschlossen
  6. actionFlag=false; // nix aktiviert
  7. w.ConnectInput(*this,1); // Ich -> Draht
  8. w.ConnectOutput(*this,0); // Draht->Ich
  9. Sim.StoreCircuitEvent(*this);
  10. }
  11. Clock::~Clock() {}
  12. void Clock::ChangeInput (State s, int pin)
  13. {
  14. // Sorge dafuer, dass Gatter neu berechnet wird, wenn
  15. // alle Zustaende der Eingaenge (Draehte) festliegen
  16. if (!actionFlag)
  17. {
  18. Sim.StoreCircuitEvent(*this);
  19. actionFlag=true;
  20. }
  21. }
  22. void Clock::Action ()
  23. {
  24. // Selbstaktivierung nach n Takten
  25. if (c->GetState()==unknown)
  26. {
  27. c->ChangeState(Sim.GetTime()+1,init);
  28. b->ChangeState(Sim.GetTime()+1,init);
  29. }
  30. if (c->GetState()==low)
  31. {
  32. c->ChangeState(Sim.GetTime()+n,high);
  33. b->ChangeState(Sim.GetTime()+n,high);
  34. }
  35. if (c->GetState()==high)
  36. {
  37. c->ChangeState(Sim.GetTime()+n,low);
  38. b->ChangeState(Sim.GetTime()+n,low);
  39. }
  40. // erlaube neue Auswertung
  41. actionFlag=false;
  42. }
  43. void Clock::ConnectInput (Wire& w, int pin)
  44. {
  45. // Wird von Connect-Funktion des Drahtes aufgerufen
  46. a = &w;
  47. }
  48. void Clock::ConnectOutput (Wire& w, int pin)
  49. {
  50. // Wird von Connect-Funktion des Drahtes aufgerufen
  51. if (pin==0) b = &w;
  52. if (pin==1) c = &w;
  53. }