Forum: FPGA, VHDL & Co. Buffer Type VHDL


von VHDLUser (Gast)


Lesenswert?

Guten Tag. Ich möchte den BUFR an einem Ausgang des FPGAs verwenden 
(siehe S. 378 ff. 
http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_2/xst_v6s6.pdf).

Wie funktioniert dieses richtig? Ich habe folgendes versucht:

    output : out std_logic;

    -- an dieser Stelle Buffer Deklaration einführen ?
    attribute buffer_type of output: output is "bufr";

    output <= '1';

Ist das so korrekt? Wenn in einem VHDL-Code keine 
Buffer-Type-Deklaration zu finden ist, was wird dann default-mäßig 
verwendet ("none" ?) ?

von bko (Gast)


Lesenswert?

was genau ist der Sinn des Wunsches?

Die Treiberstärke und Art der IOs werde am Besten im sog. UCF-file
eingestellt und nicht im RTL code, und der "BUFR" ist eher was FPGA-
internes, darum kümmert sich normalerweise die ISE-Software...

Im ucf-file werden dir Ports der Toplevel entity in VHDL den FPGA
Pins zugeordnen und z.b. mit Treiberstärken versehen.

in deinem Falle z.B.: so
NET output LOC = A1 | DRIVE = 2 | FAST;

Hier die wichtigsten UCF-Dinge unter Pinzuordnung, Ausgangstreiber und 
Pullup/down
http://www.mikrocontroller.net/articles/UCF-Dateien

Und hier habe ich ein Tutorial er"bingt" :)
http://www.lothar-miller.de/s9y/uploads/Tutorial_Xilinx_ISE13.pdf
Lesenswert! U.a: wird die Pinzuordnung mittel "planahed" kurz erklärt.


Und alle UCF constraints sind hier Erschlagend gelistet:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/cgd.pdf

von Christian R. (supachris)


Lesenswert?

BUFR ist was Xilinx-spezifisches, sowas muss man im Normalfall 
instanziieren.

von VHDLUser (Gast)


Lesenswert?

Danke euch. @ bko es bezieht sich auf den Beitrag 
Beitrag "Error in Xilinx EDK -> CLOCK_DEDICATED_ROUTE = FALSE". Ich möchte nun den IO 
auf BUFR setzen, um ein Problem mit der äußeren Treiberbank zu umgehen. 
Habe gedacht, dass ich für das Thema einen neuen Post mache, da es ja 
allgemein ist und eventuell auch andere Leute interessiert. Was genau 
schreibe ich dafür für eine Zeile ins ucf? Momentan steht dort:

NET rx_clk_in_p_2 LOC = K26  |  IOSTANDARD = LVDS_25  | DIFF_TERM = 
TRUE;
NET rx_clk_in_n_2 LOC = K27  |  IOSTANDARD = LVDS_25  | DIFF_TERM = 
TRUE;

Wie sieht die Zeile aus, wenn ich auf BUFR setzen möchte?

In dem von mir geposteten Dokument 
(http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_2/xst_v6s6.pdf) 
steht auf Seite 387

attribute buffer_type of signal_name :signal is 
"{ibufg|bufg|bufgp|bufh|bufr|bufio|ibuf|obuf|buf|none}";

Das ist aber keine Zeile für das ucf-File,oder? Kann mir wer da helfen?

von Klaus F. (kfalser)


Lesenswert?

Ohne jetzt die Details genau zu kennen, eine kleine Anmerkung:
Die Buffer Elemente sind meist interne Strukturen, die vom Compiler 
automatisch eingefügt und verwendet werden, z.B. wenn er merkt, dass ein 
Signal als Takt verwendet wird, dann wird damit damit ein "normales" 
Signal auf das dedizierte Clock-Netz geroutet.
Man muss sie nur in den seltensten Fällen manuell instantieren.
In deinem Fall scheint mir, wurde einfach ein falsches Pin-Paar als 
Takteingang verwendet, eines das nicht dazu gedacht war und das intern 
z.B. nicht direkt an die DCM geht.
Mit "CLOCK_DEDICATED_ROUTE=FALSE" wird dem Compiler erlaubt, eine 
alternative Route zu suchen, aber das geht auf Kosten von einem 
definiertem Timing, deshalb muss es explizit erlaubt werden.
Ich glaube nicht, dass das manuelle Einfügen eines BUFR diese Situation 
korrigieren kann, wobei zu sehen ist, wo diese BUFR Resource im FPGA 
überhaupt liegt und wie dahin geroutet werden kann.

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.