Forum: FPGA, VHDL & Co. Bidirektionaler Bustreiber mit InOut und Tri-State


von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

habe einen Bustreiber geschrieben, den ich in einem gößeren Design
nutzen möchte. Wollte mal eure Meinung dazu wissen.
Verbesserungsvorschläge erwünscht!!

mfg Christian

von Tobias O. (Gast)


Lesenswert?

hmm, bin nicht besonders begeistert von deinem Design. Es ist fraglich
was die Synthese daraus macht. Ich würde die Xilinx Logic Primitive
benutzen und entsprechend deinen Anforderungen Register einfügen.
Hier mal die Instanzierung des passenden IOBUF

IOBUF_inst : IOBUF
port map (
O => O, -- Buffer output
IO => IO, -- Buffer inout port (connect directly to top-level
port)
I => I, -- Buffer input
T => T -- 3-state enable input
);

von Klaus F. (kfalser)


Lesenswert?

Die Synthese sollte das schon korrekt machen. Die Frage ist nur ob es
sich wirklich auszahlt, dafür ein eigenes Modul zu schreiben, weil
jedes Design ein bischen anders ist.
Nicht jedes Design braucht z.B. taktsynchrones Enable.
Meines Erachtens ist es dann einfacher und verständlich im TopLevel
Design zu schreiben:

Pin <= DataOut when Enable = '1' else (others => 'Z');

In jedem Fall ist das Modul von Christian ein bischen irreführend, weil
man meinen könnte, nach der Taktflanke ist immer nach der gleichen
Verzögerung der Ausgang entweder hochohmig oder hat einen neuen Wert.
In Wirklichkeit geht das tri-staten meist langsamer.

Die Xilinx-Primitive würde ich nicht verwenden, weil das Design dann
nicht mehr so portabel ist.
Christian, wenn Du das Modul verwenden willst, würde ich es von
einfachen Signalen auf Signal-Vektoren erweitern.
Außerdem bin ich ein gläubiger Anhänger der rising_edge() Funktion.

Grüße
Klaus

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.