Forum: FPGA, VHDL & Co. Mehrere Ausgänge auf einen Eingang


von Gustl B. (-gb-)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Gustl B. (-gb-)


Lesenswert?

Tatsache, funktioniert wunderprächtig! Vielen Dank!

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Macht denn sowas überhaupt Sinn? Bei welchen Anwendungen?

von S. R. (svenska)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von S. R. (svenska)


Lesenswert?

Also den Multiplexer doch danebenlegen.

von Gustl B. (-gb-)


Lesenswert?

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?

von J. S. (engineer) Benutzerseite


Lesenswert?

>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.

von Gustl B. (-gb-)


Lesenswert?

Vielen Dank! Hab sowas bisher auch tatsächlich noch nie im FPGA 
gebraucht.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von uwe (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Gustl B. (-gb-)


Lesenswert?

Nochmals vielen Dank! Selbst Buffer habe ich noch nie gebraucht sondern 
immer selber eingebaut.

von Manfred K. (mkch)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Gustl B. (-gb-)


Lesenswert?

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
Noch kein Account? Hier anmelden.