Hallo, mir ist klar, dass man dafür normalerweise Multiplexer verwendet weil es sonst Konflikte geben kann, aber was, wenn mir die Konflikte entweder egal sind oder ich sichergestellt habe, dass immer nur ein Ausgang aktiv ist? Eigentlich möchte ich mehrere Prioritätsencoder verketten wie hier http://www.ti.com/lit/ds/sdls161/sdls161.pdf auf Seite 4. Da werden die Ausgänge A0,A1,A2 einfach miteinander verbunden. In VHDL habe ich das jetzt mit OR Gattern gelöst. Die Frage ist aber grundsätzlich: Kann man die direkte Verbindung von mehreren Leitungen irgendwie beschreiben? Mir reicht die Simulierbarkeit völlig aus.
Gustl B. schrieb: > Kann man die direkte Verbindung von mehreren Leitungen irgendwie > beschreiben? Mit std_logic geht das dank der Auflösungsfunktion. Anfänger machen das alltäglich. Dort nennt sich der resultierende Fehler dann "multiple Source":
1 | Eingang <= Ausgang1; |
2 | Eingang <= Ausgang2; |
3 | Eingang <= Ausgang3; |
4 | Eingang <= Ausgang4; |
Und wenn es jetzt Buskonflikte gibt, weil mehr als 2 Ausgänge unterschiedlichen aktiven Pegel treiben, dann bringt der Simluator ein 'X'. Wenn drei ein 'Z' treiben und einer einen aktiven Pegel, dann gewinnt der letztere.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Wenn drei ein 'Z' treiben und einer einen aktiven Pegel, dann > gewinnt der letztere. Innerhalb eines (modernen) FPGAs kann man 'Z' aber nicht treiben, oder? Oder gibt es doch Tristate-Möglichkeiten?
S. R. schrieb: > Innerhalb eines (modernen) FPGAs kann man 'Z' aber nicht treiben, oder? Nicht als echtes Tristate-Signal. Aber der Synthesizer kann sowas evtl. auf einen Multiplexer auflösen. Allerdings hat man dann auch schnell mal ein Latch an der Backe, denn kritisch wird es, wenn keiner treibt...
Hier ging es nur um die Simulation. Im aktuellen Seminar an der Uni fand ich eben Prioritätsencoder ganz nett für die ersten Schritte in VHDL. Die Kaskadierung ist dann ganz nett um zu lernen wie man in VHDL mit Components arbeitet. Das ist also nur zum Lernen, aber wie würde man das mit Multiplexer bauen wenn man keine Select Leitungen hat? Also nur zwei Leitungen/Ausgänge die '1', '0' oder 'Z' seien können und einen Eingang. Geht das im FPGA?
>Geht das in einem FPGA Nein, intern nicht. Begründung: > Macht denn sowas überhaupt Sinn? Bei welchen Anwendungen? Sowas macht nur bei physikalischen Simulationen von FPGAs Sinn, wenn man Kollisionsverhalten simulieren will. Im Logikdesign hat das nichts zu suchen, weil bei Funktionslogik eine Information von der Quelle zur Senke fließt und das Verhalten an Knotenpunkten eindeutig und klar und vollständig beschrieben sein muss. Entweder gibt es dort einen Vorrang, oder ein Umschalten oder eine logische Verknüpfung wie UND oder ODER. Das sind aber [b]logische[/] Verknüpfungen von Informationen und nicht etwa physische mit Leitungen. Daher gibt es im Logikdesign kein "wired or", "keine tristates" und auch keine "low aktiven Signale" oder ähnliches.
Es gibt für die interne Verdrahtung nach wie vor die Signaleigenschaft "buffer" anstelle von In oder Out, die man auch nach innen ziehen kann. Damit kann ein solches Modul sowohl als Toplevel als auch als Komponente laufen. Ich empfehle das aber ausdrücklich, sein zu lassen, weil man damit etwas beschreibt, was es nicht gibt und sowas ist immer schlecht. Firmen mit Coding-Styles schließen sowas auch aus. Man sollte das immer sauber ins und outs bennen und ausdrücklich verdrahten.
Naja in früheren FPGA Architekturen gab es schon interne Tristates, da konnte man tatsächlich wired ors verdrahten. Man konnte aber auch Kollisionen erzeugen und den FPGA schädigen. Irgendwann haben sich die FPGA Designer dann entschieden keine Tristate Treiber auf die Metallmatrix mehr loszulassen und alles mit Multiplexer zu machen... xc3000 interconnect longlines https://www.xilinx.com/support/documentation/data_sheets/3000.pdf Seite 15-17
uwe schrieb: > Irgendwann haben sich die FPGA Designer dann entschieden keine Tristate > Treiber auf die Metallmatrix mehr loszulassen und alles mit Multiplexer > zu machen... Insbesondere, weil diese dedizierten Tristate-Busse auch schnarchlangsam waren...
Nochmals vielen Dank! Selbst Buffer habe ich noch nie gebraucht sondern immer selber eingebaut.
Hallo, Beim Parallelschalten der Ausgänge darf man nicht übersehen, dass die Ausgänge aller Encoder in Tristate geschaltet werden, die an der Encodierung nicht beteiligt sind. Nur so kann es, wie im Datenblatt gezeigt, funktionieren. Gruß Manfred
Gustl B. schrieb: > Selbst Buffer habe ich noch nie gebraucht sondern immer selber eingebaut. Ein Port vom Typ Buffer ist kein physikalisches Bauteil, sondern ein "Trick", um Ausgangssignale in einem VHDL Modul lesbar zu machen. Damit kann man sich dann ein lokales Signal "sparen", weil dann dieser Augang auch in Abfragen und Zuweisungen verwendet werden kann. Besser und weniger verwirrend ist aber, mit Signalen zu arbeiten und dann das "Ausgangssignal" dem Ausgang zuzuweisen.
Manfred K. schrieb: > Hallo, > Beim Parallelschalten der Ausgänge darf man nicht übersehen, dass die > Ausgänge aller Encoder in Tristate geschaltet werden, die an der > Encodierung nicht beteiligt sind. Nur so kann es, wie im Datenblatt > gezeigt, funktionieren. > Gruß Manfred Ja genau. Und in der Simulation funktioniert das auch prima. Lothar M. schrieb: > sondern ein > "Trick" Sehe ich auch so, und das Signal das man sich spart ist in Realität ja dann doch da, also auch noch verwirrend.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.