www.mikrocontroller.net

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


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
);

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.