Ich bin dabei, ein von Nand2Tetris (http://www.nand2tetris.org/) inspiriertes Projekt zu starten, um einen Computer vollständig zu simulieren und das Ganze aus NAND-Gattern aufzubauen.
Ich möchte alles von Grund auf simulieren, beginnend mit einer primitiven Implementierung eines NAND-Gatters, das simuliert, wie ein NAND-Gatter auf der physischen Ebene funktionieren würde, und sie dann miteinander verbinden, um einen Computer zu bauen.
Die Sache ist, ich verstehe nicht genug darüber, wie ein NAND-Gatter auf der physischen Ebene funktionieren würde, um dies zu schreiben.
Um es klar zu sagen, das ist sicherlich nicht das, wonach ich suche:
def nand(a, b)
return !(a && b)
end
Ich möchte das NAND-Gatter als Klasse implementieren, damit es eher wie ein tatsächliches Objekt funktioniert. Ich möchte, dass es Stifte hat, und ich möchte in der Lage sein, die Stifte miteinander zu verbinden und Spannung anzulegen usw.
Kann mir jemand zeigen, wie Sie eine ordnungsgemäße Simulation eines physischen NAND-Gatters implementieren könnten, eines, das miteinander verbunden werden könnte, um letztendlich einen Computer zu bauen?
Der beste Weg ist, ein Ereignisrad zu implementieren und eine Laufzeitverzögerung für das Tor zu definieren. Ohne diese Verzögerung ist es unmöglich, irgendeine Art von Speicherelement zu simulieren. Sie können den Begriff "Ereignisrad" in Google nachschlagen, er ist die Grundlage für HDL-Simulatoren. Alternativ kann man das Ganze auch in Verilog schreiben, was den Vorteil hat, dass man die Hardware später mit den richtigen Tools tatsächlich realisieren kann und der Simulator kostenlos sein kann (siehe "Icarus").
Wenn Sie wirklich Spannungen anlegen möchten, müssen Sie ein Transistormodell implementieren oder BSIM3 in einer Art benutzerdefiniertem Simulator verwenden, aber Sie müssen SPICE schließlich neu implementieren, da das von Ihnen vorgeschlagene Objektmodell für Schaltungen mit "Eingängen" nicht gut funktioniert tatsächlich Drähte, die mit Gattern verbunden sind, die die Ausgänge laden und das Verhalten der Schaltung ändern können.
Viel Glück.
Der Aufbau eines Computers aus NAND-Gattern wäre schmerzhaft. Wenn Sie jedoch auf die Ebene von Spannungen und Strömen heruntergehen möchten, benötigen Sie einen Simulator auf Transistorebene wie Spice . Vielleicht können Sie, sobald der Transistor-Eins funktioniert, davon ausgehen, dass er funktioniert, und zu HDL wechseln, wie Sie es gezeigt und von Apalopoapa vorgeschlagen haben.
Ich bin ziemlich verwirrt über Ihr eigentliches Problem.
Die Sache ist, ich verstehe nicht genug darüber, wie ein NAND-Gatter auf der physischen Ebene funktionieren würde, um dies zu schreiben.
aber dann schreibst du alles Wissenswerte über ein NAND-Gatter:
def nand(a, b) return !(a && b) end
Alles, was Ihnen fehlt, ist, "wie man daraus ein Objekt macht", aber das ist keine Frage des physikalischen NAND-Gatters, sondern Ihres Programmierverständnisses.
Sie haben die Funktion eines NAND-Gatters geschrieben, wobei beide Eingänge flexibel sind und der Ausgang vom Aufrufer bestimmt wird. Alles, was Sie jetzt brauchen, ist, es zu einem Objekt mit festen Ein- und Ausgängen zu machen [Plus, wie die anderen Fragen sagten, eine minimale Zeitverzögerung für die Speicherung]
Vorlagentypdef
MikeC8
Das Photon
ErikR