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?
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.
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.
Wieso jagst Du es nicht einfach durch den Synthesizer und schaust nach, ob er es richtig synthetisiert?
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...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.