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.