INOUT Port - Richtung umschalten

#767037
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?
Angehängte Dateien:
#767101
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
#767144
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...
#767150
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren