Forum: FPGA, VHDL & Co. Tristate Ausgang synthetisieren


von alex (Gast)


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?

von Schlumpf (Gast)


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.

von Klaus F. (kfalser)


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.

von Xenu (Gast)


Lesenswert?

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

von alex (Gast)


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...

von Xenu (Gast)


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...

von alex (Gast)


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.

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.