Inout-Port im VHDL RS232-Modul von Digilent

Ich schaue mir die Digilent RS232-Referenzkomponente an, die unter http://www.digilentinc.com/Products/Detail.cfm?Prod=S3EBOARD für das Spartan 3E Starter Kit erhältlich ist. Ich habe begonnen, eine Testbench zusammenzustellen, aber der VHDL-Code enthält einen „inout“-Port.

Ich habe mir den Code für die RS232-Komponente angesehen und sehe nicht, wie der RDA-Port jemals ein Eingangsport sein kann - RDA ist "Read Data Available", was anzeigt, dass ein Wort zum Lesen bereit ist. Ich sehe das als Ausgabefunktion. Ich dachte, es wäre klar, warum dies nach dem Lesen des Codes "inout" war, aber ich kann nicht erkennen, wie dies überhaupt eine Eingabefunktion ist.

Irgendwelche Gedanken? Danke für eure Hilfe, alle.

Antworten (1)

Wenn ein Port in VHDL als „out“ deklariert ist, kann er zugewiesen, aber nicht an anderer Stelle innerhalb des Moduls verwendet werden. Insbesondere die Zuweisung in Zeile 155 würde als Fehler gekennzeichnet:

OE <= RDA;

Wenn Sie den Port "inout" machen, wird diese Verwendung zulässig.

Inout-Ports sind jedoch aus einer Reihe von Gründen "chaotisch", und ich versuche, sie nach Möglichkeit zu vermeiden. Ein anderer Ansatz besteht darin, eine zweite Kopie des Signals (z. B. RDA_int) zu deklarieren, das überall im Modul verwendet wird, und dieses Signal dann nur einmal dem Ausgangsport zuzuweisen.

RDA <= RDA_int;
Vielen Dank, dies ist eine ausgezeichnete Antwort und ein guter Trick für VHDL, um dieses Problem zu vermeiden.
Der Typ "Puffer" ermöglicht es Ihnen auch, den Wert zu lesen, den Sie geschrieben haben, ohne das Signal wirklich bidirektional zu machen.
@AndrewKohlsmith Ich habe zu diesem Zweck immer interne Signale erstellt. Beim Lesen einiger Diskussionen darüber scheint der Pufferportmodus problematisch zu sein, und es wird gesagt (ich kann die Originalquelle nicht finden), dass Xilinx von seiner Verwendung abrät, da dies zu Synthesefehlern führen könnte (z. B. hier ) . Hat jemand eine Idee, was es anders macht? In der HW-Implementierung, meine ich.
@Serge: Danke, ich wusste, dass es einen Grund gab, warum ich auch "Puffer" vermied, aber ich konnte mich nicht erinnern, was es war.
Ich habe die Blog-Beiträge von "vhdlguru" schon einmal gesehen ... er gibt nicht wirklich einen konkreten Hinweis darauf, wo das Problem in Bezug auf den dokumentierten Betrieb, einen Fehlerbericht oder eine SR liegt, aber ich vermute, dass es darin liegt ISE. Ich hatte keine Probleme, weder mit Quartus (Altera) noch mit Modelsim.
VHDL2008 ermöglicht jetzt das Lesen von Ausgabeports