Tristate Ausgang synthetisieren

Gast #428321
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?
Gast #428341
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.
#428390
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.
Gast #429632
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...
Gast #429985
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren