AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DigiSim - Ein Digitaler Simulator
Thema durchsuchen
Ansicht
Themen-Optionen

DigiSim - Ein Digitaler Simulator

Ein Thema von omata · begonnen am 29. Dez 2008 · letzter Beitrag vom 10. Aug 2024
Antwort Antwort
Seite 2 von 2     12   
omata
Registriert seit: 26. Aug 2004
Ich habe gerade einen digitalen Simulator fertiggestellt. Die Anwendung ist aus einer Spielerrei hervorgegangen. Vielleicht interessiert sich jemand dafür, deshalb veröffentliche ich ihn hier einfach mal.
Miniaturansicht angehängter Grafiken
digsim.png  
Angehängte Dateien
Dateityp: exe digisim_597.exe (507,5 KB, 162x aufgerufen)

Geändert von omata (14. Aug 2011 um 20:07 Uhr)
 
linwerben
 
#11
  Alt 8. Aug 2024, 20:41
Hi omata,
ich finde das Programm sehr gut. Versuche zur Zeit auch einen Logiksimulator zu erstellen, aber für einen
speziellen Anwendungsfall. Könnte was werden, wenn ich das Problem beim Starten der Simulation lösen würde.
Mir ist nicht klar, wie ich etliche Bausteine zeitlich aktualisieren kann, dass die Ausgänge auch richtigen Wert
haben. So, wie in deiner Beispielschaltung gezeigt, wird doch eine Aktualisierungsreihenfolge notwendig sein.
Das bekomme ich nicht hin, hast du da eine Idee?
PS: gibt es zu deinem Simulator ein gesamtes Projekt als Source zum Download. Wäre sehr hilfreich.
mfG
linwerben
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

 
Delphi 10.3 Rio
 
#12
  Alt 9. Aug 2024, 11:12
Du brauchst einen Takt, so wie das bei allen CPU's oder digitalen Chips gemacht wird.
Also sozusagen einen Zustand in dem alle Gatter ihren Zustand um 1 Bit ändern können.
Mit jedem Takt werden alle einmal aktiv und setzen einen neuen Zustand an ihrem Ausgang.
Stefan
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#13
  Alt 9. Aug 2024, 12:10
Der Ersteller des DigiSim war zuletzt vor 12 Jahren online und der Thread hier ist auch schon über 15 Jahre alt!
  Mit Zitat antworten Zitat
linwerben
 
#14
  Alt 9. Aug 2024, 20:22
Du brauchst einen Takt, so wie das bei allen CPU's oder digitalen Chips gemacht wird.
Also sozusagen einen Zustand in dem alle Gatter ihren Zustand um 1 Bit ändern können.
Mit jedem Takt werden alle einmal aktiv und setzen einen neuen Zustand an ihrem Ausgang.
Danke für die Antwort.
Aber, wenn der Eingang nicht aktuell ist kann auch der Ausgang nicht richtig berechnet werden. Um den Ausgang von
AND2 richtig zu bestimmen, müssen erst alle Bausteine vor diesem auf Grund der Eingänge bestimmt werden.
Das ist aber mein Problem. Es müssen ja nicht immer alle Bausteine neu berechnet werden. Wie kann man das machen.
mfG
linwerben
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

 
Delphi 10.3 Rio
 
#15
  Alt 9. Aug 2024, 20:57
Klar, nach dem einschalten des Stromes herscht immer erstmal Chaos. Das ist ja auch der Grund warum man aus Speicher schon was lesen kann, auch wenn es nur das Rauschen des Universums ist.
So ist das auch bei einfachen FlipFlops / Gattern. Reale Daten liegen nur an der ersten Schicht an. Dann dauert es einige Takte bis "hinten" ein Ergebnis raus kommt.
Einmal gesetzte Zustände verändern sich ja nicht mehr. Bzw. werden bei jedem Takt ohne Zustandsänderung am Eingang nur erneuert.
Bei CPU's die ohne extra Innenleben daherkommen ist das ja auch so. Raus kommt ein Ergebnis erst nach einigen Takten.

Ich kann mich noch erinnern als wir in der Ausbildung selber FlipFlops erstellen und verdraten durften um daraus Zählgatter mit Ausgabe auf einer 7-Segment Anzeige zu basteln.
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

 
Delphi 12 Athens
 
#16
  Alt 10. Aug 2024, 00:18
Klar, nach dem einschalten des Stromes herscht immer erstmal Chaos. Das ist ja auch der Grund warum man aus Speicher schon was lesen kann, auch wenn es nur das Rauschen des Universums ist.
So ist das auch bei einfachen FlipFlops / Gattern. Reale Daten liegen nur an der ersten Schicht an. Dann dauert es einige Takte bis "hinten" ein Ergebnis raus kommt.
Einmal gesetzte Zustände verändern sich ja nicht mehr. Bzw. werden bei jedem Takt ohne Zustandsänderung am Eingang nur erneuert.
Bei CPU's die ohne extra Innenleben daherkommen ist das ja auch so. Raus kommt ein Ergebnis erst nach einigen Takten.
Getaktete Schaltungen (FlipFlops, etc.) haben normalerweise einen Reset Eingang, insofern herscht kurz nach dessen Aktivierung ein definierter Ausgangszustand - diesen braucht es auch, wer weiss, was die Schaltung sonst machen würde. Von "es geschieht gar nichts" bis zur "Selbstzerstörung" liegt alles drin

Logikgatter wiederum brauchen keinen Takt. Sobald ein Pegel anliegt, wird der dem Gatter entsprechende Ausgangswert nahezu unverzögert ausgegeben (ns/us).
Im Bild vom Beitrag #1 sind es reine Logikgatter. Hier muss nicht mit irgendwelchen Zeitlichen Abläufen gearbeitet werden, dies ist ist auch nicht unbedingt einfach, weil man schlicht die Abhängigkeiten der einzelnen Gatter kennen muss. Bei sich ändernden Schaltungen nicht wirklich einfach.

Mit Hilfe der Boolschen Algebra und den De Morganschen Gesetzen geht es deutlich einfacher, wobei dies auf dem Papier einfacher umsetzbar ist, als mit ein paar Codezeilen.
Roland
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#17
  Alt 10. Aug 2024, 00:25
nahezu unverzögert ausgegeben (ns/us).
Mindestens Lichtgeschwindigkeit, da das elektrische Feld im Leiter auch so schnell ist, aber es kann in gewissen Medien auch langsamer sein, vor allem dann, wenn andere physikalische/chemische Vorgänge eine Rolle spielen.

Bei einfachen "digitalen" Simulatoren nimmt man einfach 2 Zustände und schert sich oft nicht um sowas.
Einfach den alten Zustand nehmen, von einem anfangs definierten Initialzustand ausgehend, und daraus den nächsten Zustand bestimmen/berechnen, indem (notfalls) alle Teile der Schaltung durchlaufen werden.
Ausgang = neuer Zustand
Eingänge = alter Zustand

Dann kopieren und von Vorne.

Natürlich kann man auch noch Verzögerungen einfügen, wo einzelne Komponenten intern mehrere Zwischenschritte behandeln, bevor es wirklich am Ausgang ankommt, um unterschiedlich schnelle Bauteile bissl "realistischer" zu handhaben.



Analoge Schaltungen zu simulieren, da wird es dann richtig spaßig, da Laufzeiten und ganz feine Signalunterschiede eine extrem große Auswirkung haben können.

Geändert von himitsu (10. Aug 2024 um 00:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz