Hi zusammen,
ich habe ein eher seltsames Problem, auf welches ich keine Lösung finde.
Ich habe einen Schaltplan einer CPU von anno dazumal vorliegen, welche
in RTL aufgebaut wurde, also als Resistor-Transistor-Logic. Die
komplette Schaltung besteht aus NOR-Gattern (je 3 Inputs). Nun war es
damals wohl üblich sich große NOR-Gatter dadurch zu bauen, dass man
einfach die Ausgänge von mehreren NOR-Gattern mit einer Leitung
zusammengeschaltet hat und schwupps hatte man ein NOR-Gatter, welches
mal so um die 30 Eingänge hat.
Ich möchte nun diese Schaltung in Verilog oder VHDL beschreiben, aber
das mit dem mehrere Ausgänge zusammenschalten funktioniert ja defacto
nicht. Habt ihr da eine Idee wie ich das Problem lösen kann?
Noch als Nachtrag: Die Schaltung erstreckt sich über mehrere Seiten und
manche Gatter werden über mehrere Seiten auch miteinander verbunden
(also deren Ausgänge), daher ist nicht immer sofort ersichtlich welche
Gatter mit welchen ein großes Gatter aufbauen.
Viele Grüße
Michael
Michael Strosche schrieb:> Habt ihr da eine Idee wie ich das Problem lösen kann?
Die Lösung von D. I. ist ein generisches nor Gatter. Das hilft dir (mal
abgesehen von der Verwendung fortgeschrittener VHDL-Techniken) leider
erst mal nicht weiter... :-/
Aber man kann sagen: beschreib einfach ein beliebig breites NOR-Gatter,
auf das alle die verwendeten Eingänge draufgehen:
Lothar Miller schrieb:> Aber man kann sagen: beschreib einfach ein beliebig breites NOR-Gatter,> auf das alle die verwendeten Eingänge draufgehen: ergebnis <= signal4 nor
adresse0 nor daten3 nor control6 nor input1 ... ;
Ist das denn richtig? Am Beispiel eine 3-Input NOR Gatters:
1
NOR_out<=NOR_IN(2)norNOR_IN(1)norNOR_IN(0);
Wenn nun NOR_IN <= "010" dann sollte NOR_out doch '0' sein.
Zur Verdeutlichung:
Der Vollständigkeit halber: In Verilog gibt es für solche wired-and und
wired-or Schaltungen passende Datentypen. Da darf man dann auch
Gatterausgänge zusammenschalten, ohne dass es einen Signalkonflikt gibt.
---(snip)---
wire x; // normales Signal
wor y; // wired-or Signal
nor (x, a, b); //
nor (x, c, d); // normales Signal an zwei Gatter angeschlossen
nor (y, a, b); //
nor (y, c, d); // wired-or Signal an zwei Gatter angeschlossen
---(snap)---
Da das Signal x vom Typ wire ist, wird die Zusammenlegung der beiden
nor-Gatter auf das gemeinsame Signal x einen Konflikt erzeugen. Beim
Signal y (Datentyp wor) ist das hingegen erlaubt. Allerdings ist so
etwas nicht synthetisierbar.
Nachtrag: Zum Glück habe ich das mal eben Altera Quartus zu Fraß
vorgeworfen, uns siehe da: Quartus nimmt das klaglos an! Also die
Modellierung des Signals y, wohlgemerkt. Beim Signal x beklagt Quartus,
dass zwei Gatter das Signal treiben. Aber beim Signal y ist ok! Wieder
was gelernt!
Grüße,
Harald
Claus schrieb:> Korrekt wäre meines Erachtens: ...
Das sieht plausibel aus... ;-)
Zudem geht mein Vorschlag so gar nicht, weil der Operator NOR nur 2
Operatoren zulässt. Man müsste es also Klammern wie du es gemacht hat...
Harald Flügel schrieb:> Der Vollständigkeit halber: In Verilog gibt es für solche wired-and und> wired-or Schaltungen passende Datentypen. Da darf man dann auch> Gatterausgänge zusammenschalten, ohne dass es einen Signalkonflikt gibt.
Ich sehe hier aber das Problem, dass das wor dann nur noch ein reines
Gedankenexperiment für "alte Hasen" oder "ASIC-Programmierer" ist. Denn
solche Komponenten gibt es zumindest auf FPGAs schon seit gut 15 Jahren
nicht mehr...
Mal ganz langsam:
Hier ist erst mal zu klären was das viel input RTL NOR überhaupt macht.
Ich gehe jede Wette ein sobald einer der vielen Eingänge auf high ist,
ist der Ausgang low ist.
Das wäre dann folgendes:
Claus schrieb:> Korrekt wäre meines Erachtens: NOR_out <= not ( NOR_IN(2) or NOR_IN(1) or
NOR_IN(0) );
Nachtrag:
In RTL ist das NOR das Basisgatter, es besteht pro Input aus einem
Transistor, deren Collectoren alle auf den gleichen Pullup gehen. Das
ist beliebig skalierbar (natürlich unter Beachtung von
Leitunslängen/Kapazitäten).
Im modernen Sprachgebrauch ist das sowas wie "Open Drain Logik".
Lothar Miller schrieb zum Thema Modellierung mit Datentyp wor:
> Ich sehe hier aber das Problem, dass das wor dann nur noch ein reines> Gedankenexperiment für "alte Hasen" oder "ASIC-Programmierer" ist. Denn> solche Komponenten gibt es zumindest auf FPGAs schon seit gut 15 Jahren> nicht mehr...
Gut erkannt Lothar, Logikelemente mit wired-or oder wired-and gibt es in
den aktuellen FPGAs nicht. Aber Quartus unterstützt Verilog ziemlich
gut, und der Datentyp wor ist nunmal Verilog Standard, und daher rechnet
Quartus das Modell in eine entsprechende Lösung auf Basis der
verfügbaren Logikelemente um. Wie gesagt, hab's getestet, siehe Beitrag
von vorhin.
Grüße,
Harald
Michael Strosche schrieb:> Nun war es> damals wohl üblich sich große NOR-Gatter dadurch zu bauen, dass man> einfach die Ausgänge von mehreren NOR-Gattern mit einer Leitung> zusammengeschaltet hat
Du musst dir die Funktion für das Zusammenschalten der Ausgänge (z.B. X1
und X0) aufstellen.
X1 X0 | Y
=========
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1
Mit anderen Worten, das Zusammenschalten der Ausgänge verhält sich wie
ein AND. Jeden dieser Knoten ersetzt du durch ein AND. Irgendwo würde
ich aber schon noch Register einbauen, ist ja ein FPGA. Der will das.
Tom
Danke für die vielen schnellen Antworten.
Thomas Reinemann schrieb:> X1 X0 | Y> =========> 0 0 | 0> 0 1 | 0> 1 0 | 0> 1 1 | 1>> Mit anderen Worten, das Zusammenschalten der Ausgänge verhält sich wie> ein AND.
Nein, das ist nicht der Fall. Ein NOR-Gatter ist in RTL-Technik
tatsächlich so aufgebaut wie es Lattice User beschrieben hat. Siehe dazu
das hier:
http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/RTL_Nor_000.svg/283px-RTL_Nor_000.svg.png
Dadurch kann man dann tatsächlich sehr große Gatter aus vielen kleinen
(räumlich verteilten) zusammensetzen.
Harald Flügel schrieb:> Lothar Miller schrieb zum Thema Modellierung mit Datentyp wor:>>> Ich sehe hier aber das Problem, dass das wor dann nur noch ein reines>> Gedankenexperiment für "alte Hasen" oder "ASIC-Programmierer" ist. Denn>> solche Komponenten gibt es zumindest auf FPGAs schon seit gut 15 Jahren>> nicht mehr...>> Gut erkannt Lothar, Logikelemente mit wired-or oder wired-and gibt es in> den aktuellen FPGAs nicht. Aber Quartus unterstützt Verilog ziemlich> gut, und der Datentyp wor ist nunmal Verilog Standard, und daher rechnet> Quartus das Modell in eine entsprechende Lösung auf Basis der> verfügbaren Logikelemente um. Wie gesagt, hab's getestet, siehe Beitrag> von vorhin.>> Grüße,> Harald
Das mit dem wired or war mir bislang entgangen. Werde das bei
Gelegenheit mal ausprobieren, da ich momentan keinen FPGA vor mir liegen
hab. Ich hoff einfach mal, dass die Software von Actel, von denen ich
ein Evaluationboard hier hab, das auch so gut umsetzt wie die von
Quartus.
Viele Grüße
Michael
Michael Strosche schrieb:>> Mit anderen Worten, das Zusammenschalten der Ausgänge verhält sich wie>> ein AND.>> Nein, das ist nicht der Fall. Ein NOR-Gatter ist in RTL-Technik> tatsächlich so aufgebaut wie es Lattice User beschrieben hat. Siehe dazu> das hier:
Die Funktion soll nicht ein NOR-Gatter beschreiben, sondern den Fall,
wenn die Ausgänge von zwei NOR-Gattern einfach verbunden werden. Dafür
brauchst du eine Resolutionfunktion, um es in VHDL beschreiben zu
können.
Tom
Thomas Reinemann schrieb:> Michael Strosche schrieb:>>> Mit anderen Worten, das Zusammenschalten der Ausgänge verhält sich wie>>> ein AND.>>>> Nein, das ist nicht der Fall. Ein NOR-Gatter ist in RTL-Technik>> tatsächlich so aufgebaut wie es Lattice User beschrieben hat. Siehe dazu>> das hier:>> Die Funktion soll nicht ein NOR-Gatter beschreiben, sondern den Fall,> wenn die Ausgänge von zwei NOR-Gattern einfach verbunden werden. Dafür> brauchst du eine Resolutionfunktion, um es in VHDL beschreiben zu> können.>> Tom
Ja. Sry, da hab ich wieder schneller geschrieben als gedacht. Ist
natürlich korrekt.
A. K. schrieb:> Michael Strosche schrieb:>>> Die komplette Schaltung besteht aus NOR-Gattern (je 3 Inputs).>> Willst du den Apollo AGC nachbauen?
Das wäre dann das hier:
http://klabs.org/history/ech/agc_schematics/index.htm
Und hier das IC:
http://klabs.org/history/ech/agc_schematics/logic/5011-1.jpg
Pro Baustein 2 3 fach NOR, wobei bei einem davon der Pullup optional
ist.
Der Grundbaustein hat 10 pins, könnte man mit einem kleinen SMD Module
nachbauen und dann das ganze stilecht auf einem Steckbrett verdrahten
:-)
A. K. schrieb:> Michael Strosche schrieb:>>> Die komplette Schaltung besteht aus NOR-Gattern (je 3 Inputs).>> Willst du den Apollo AGC nachbauen?
Ertappt...
Ja, hatte vor den AGC "nachzubauen". Die Idee das als physikalischen
Nachbau zu veranschlagen hatte ich auch schon, aber das war mir dann
doch zu aufwändig und zu teuer. Und da ich sowieso einen FPGA hier
rumfliegen hab wollte ich das mal damit ausprobieren. Ma schauen obs da
draufpasst.
Leider konnte ich das mit dem wor und der Synthetisierung auf Actel
FPGAs noch nicht testen, da mein Rechner da momentan zu sehr rumzickte,
aber das sollte ja dann unter Verilog klappen.
Viele Grüße
Michael
lkmiller schrieb:> Viel Spass damit, so ein streng asynchrones Design auf einem FPGA> nachzubauen... ;-)
Man könnte versuchen jedes der 3-Input-NORs mit einem Ausgangs FF
versehen.
Der FPGA Takt emuliert dann die Gatterlaufzeit des ursprünglichen
Design.
Ausserdem sollte man der Synthese jegliche Optimierung verbieten.
So. Konnte nun endlich das Verknüpfen zweier, bzw. mehrere (6 Stück)
NOR-Gatter testen.
Die Software von Actel (bzw. seit neustem Microsemi) hat die
Verilogbeschreibung mit einem "wand" exakt umgesetzt und auch die
Synthese im FPGA hat einwandfrei funktioniert.