mikrocontroller.net

Forum: FPGA, VHDL & Co. Tristate Ausgang synthetisieren


Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

verstehe ich das richtig, dass man zur Synthese eines Tristate-Buffers 
spezielle Makros vom Hersteller des PLDs einbinden muss?
Also dass die Zeilen:
if enable = '1' then
    output <= input;
else
    output <= 'Z';
end if;

nur für die Simulation gut sind und in Wirklichkeit kein Tristate-Buffer 
synthetisiert wird?

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein gutes Synthesewerkzeug sollte anhand der VHDL-Beschreibung 
automatisch erkennen, dass du einen Tristate-Ausgang verwenden willst 
und diesen dann auch implementieren.
Wie es z.B auch bei einem Multiplizierer funktioniert. Sprich, du 
multiplizierst zwei Zahlen und das Synthesewerkzeug erkennt, dass es 
hier einen Multiplizierer instanziieren muss.

Probier es einfach aus.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Xilinx funktioniert das schon längst.
Man muß also keine speziellen Macros einbinden, sondern kann es so 
schreiben wie Du geschrieben hast.
Ich verwende meist den Einzeiler

output <= input when enable = '1' else 'Z';

Ein bischen aufpassen muß man bei takt-synchronem Tri-staten in einem 
Prozess, also

if rising_egde(clk) then
   if enable = '1' then
      output <= input;
   else
      output <= 'Z';
   end íf;
end if;

Da wüßte ich auf Anhieb nicht ob es funktioniert.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso jagst Du es nicht einfach durch den Synthesizer und schaust nach,
ob er es richtig synthetisiert?

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei mir kommt irgendwie was anderes raus:
Mit
    output <= input when enable = '1' else 'Z';
entsteht in RTL schematics ein Rechteck mit den Eingängen E, I und einem 
Ausgang O.
Mit
    OBUFT_inst : OBUFT
    generic map (
        DRIVE => 12,
        IOSTANDARD => "DEFAULT",
        SLEW => "SLOW"
    )
    port map (
        O => output,   -- Buffer output (connect directly to top-level 
port)
        I => input,    -- Buffer input
        T => enable    -- 3-state enable input
    );
steht in RTL schematics ein Dreieck, das nach einem Tristate-Buffer, so 
wie man es kennt, aussieht...
Ich zweifle, ob das bei der Synthese wirklich alles dasselbe ist...

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du bezweifelst also dass er Dir bei der Synthese einen Tristate-Puffer 
synthetisiert, obwohl er genau das gemacht hat.

Was soll man da noch sagen...

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das Rechteck mit E, I und O einen Tristate-Buffer darstellen soll, 
dann ist es ok. Nur warum wird es nicht durch ein Dreieck wie mit OBUFT 
dargestellt? Ich denke, um auf der sicheren Seite zu sein, nehme ich 
immer die OBUFT Komponente.

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.