Forum: FPGA, VHDL & Co. INOUT Port - Richtung umschalten


von E. P. (metallman)


Angehängte Dateien:

Lesenswert?

ich habe jetzt ein neues Problem, bzw. noch eine Frage an die Experten.

Und zwar habe ich zwei State Machines in einer Datei (also zwei einzelne 
prozesse) zusammengefügt. Diese SMs müssen jeweils mit einem UART 
kommunizieren. Das Problem ist nur, dass der UART nur eine 
8bit-Datenleitung hat, die als INOUT definiert ist.
Die eine SM ist für das Senden der Daten an uART verantwortlich, die 
andere für das Empfangen. Nun ist die Frage, wie ich auf das IO-Port des 
UART zugreifen kann.
Ich habe versucht durch zusätzliche signale (jetzt nie wieder variablen) 
so ne Art Multiplexer zu realisieren. das funktioniert aber nicht 
richtig und erzeugt zudem noch Latches bei der synthese..(
Wie kann ich jetzt die Datenleitung sowohl als Ein- als auch als Ausgang 
benutzen bzw. dazwischen umschalten?

von Falk B. (falk)


Lesenswert?

@ E. P. (metallman)

>Und zwar habe ich zwei State Machines in einer Datei (also zwei einzelne
>prozesse) zusammengefügt. Diese SMs müssen jeweils mit einem UART
>kommunizieren. Das Problem ist nur, dass der UART nur eine
>8bit-Datenleitung hat, die als INOUT definiert ist.

Ist das ein UART im FPGA? Dann wäre das ungünstig, sowas macht man mit 
zwei unidirektionalen Bussen.

>Die eine SM ist für das Senden der Daten an uART verantwortlich, die
>andere für das Empfangen. Nun ist die Frage, wie ich auf das IO-Port des
>UART zugreifen kann.

Du brauchst einen Master/Multiplexer.

>Wie kann ich jetzt die Datenleitung sowohl als Ein- als auch als Ausgang
>benutzen bzw. dazwischen umschalten?

Jeder Prozess muss ein Signal generieren, wenn er auf den UART zugreifen 
will. Ein dritter Prozess prüft nun abwechselnd, ob einer der beiden 
anderen Prozesse zugreifen will, und wenn ja, dann schaltet er die 
Richtung entsprechend um. Wenn du Daten ausgeben willst, einfach 
zuweisen. Wenn du auf Eingang schalten willst, alles "ZZZZZZZZ" 
zuweisen.

Mfg
Falk

von E. P. (metallman)


Lesenswert?

Vielen Dank

ich habe jetzt genauso gemacht, wie du geschrieben hast, und es 
funktioniert in der Simulation!

Beim Synthetizieren kriege jedoch eine, bzw acht Warnungen:

WARNING:Xst:1903 - Unit frameerzeuger : signal sig_rx_data_register<7> : 
Internal tristate is replaced by logic

...und so weiter bis Signal <0>

ansonsten sieht deutlich besser als vorher...

von Falk B. (falk)


Lesenswert?

@ E. P. (metallman)

>Beim Synthetizieren kriege jedoch eine, bzw acht Warnungen:

>WARNING:Xst:1903 - Unit frameerzeuger : signal sig_rx_data_register<7> :
>Internal tristate is replaced by logic

Das hab ich doch gesagt! Wenn das ein UART Modul im FPGA ist, also 
KEIN  UART IC ausserhalb des FPGA, dann ist der bidirektionale 
Datenbus schlecht bis sinnlos. Ersetze ihn durch zwei unidirektionale 
Datenbusse. Dann brauchst du auch keinen MUX und alles wird einfacher.

MfG
Falk

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.