Forum: FPGA, VHDL & Co. Von 7.1 Xilinx-ISE auf 8.1 Xilinx-ISE


von Martin (Gast)


Lesenswert?

Hallo Leute!

Habe grad mal die neue Xilinx-ISE-Umgebung 8.1 installiert.
Vorher hatte ich die 7.1 Version.

Für das Auge wurde viel getan. Endlich funktioniert nun
auch das Programmiergerät so wie es soll und benötigt für
einmal runterspielen statt 30 Minuten nur noch 46 Sekunden.

Ich habe ein kleines VHDL-Design entworfen, mit dem ich
Impulse zähle. Mit diesem Design wird die Hardware
konfiguiert. Das Eingangssignal, welches gezählt wird,
heisst clk.
Mit Version 7.1 funktionierte alles hervorragend, nur
jetzt bei 8.1 schreibt mir der PC bei Place&Route folgenden
Fehler heraus:
Place:645- A clock IOB clock component is not placed at an optimal
clock IOB site. The clock IOB component <clk> is placed at site AF18.
The clock IO site can use the fast path between the IO and the clock
buffer/GCLK if the IOB is placed in the master Clock IOB Site. If this
sub optimal condition is acceptable for this design you may set the
environment variable XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING to demote this
message to a WARNING and allow your design to continue.

Als nun bitte meine Fragen:
Stört es das Werkzeug, dass ich diesen AF18-PIN ausgewählt habe und
wenn ja, warum?
Ich versehe die Meldung nicht ganz - Ich weiß nicht was hier gemeint
ist und warum dieser Pin böse sein soll?
Und wie kann ich die environment variable
XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING setzen, damit aus der ERROR-Message
eine WARNING-Message wird?

Danke für eure Antworten.
Bin leider noch ziemlich am Anfang.

Tschüss, Martin

von Xenu (Gast)


Lesenswert?

>Stört es das Werkzeug, dass ich diesen AF18-PIN ausgewählt habe und
>wenn ja, warum?

Du hast ein Taktsignal auf einen Pin gelegt, der nicht für Taktsignale
gedacht ist. Ein FPGA hat nur ein paar Pins, die speziell für
Takteingänge vorgesehen sind, siehe jeweiliges Datenblatt.

Diese Pins gehen intern auf ein Taktnetz, das so mit den internen
Flip-Flops verschalten ist, dass das Taktsignal jedes Flip-Flop mit
möglichst geringer Verzögerung ("Skew" auf englisch) erreicht.

von Martin (Gast)


Lesenswert?

Ich habe zwar das Signal clk benannt, aber der Pin sollte eigentlich
Impulse zählen, die ab und zu mal daherkommen können.

@Ein FPGA hat nur ein paar Pins, die speziell für
Takteingänge vorgesehen sind, siehe jeweiliges Datenblatt.

Aber warum hat es in der vorhergehenden Version funktioniert?

Ich verstehe hier den Unterschied der Pins nicht ganz (z.B. Clock oder
normaler Pin). Handelt es sich bei der internen Verschaltung dieser
unterschiedlichen Pins um eine unterschiedliche Geschwindigkeit der
Flip-Flops?

Gruß, Martin

von ope (Gast)


Lesenswert?

> Ich verstehe hier den Unterschied der Pins nicht ganz (z.B. Clock
> oder normaler Pin). Handelt es sich bei der internen Verschaltung
> dieser unterschiedlichen Pins um eine unterschiedliche
> Geschwindigkeit der Flip-Flops?

Xenu:
>> Ein FPGA hat nur ein paar Pins, die speziell für
>> Takteingänge vorgesehen sind, siehe jeweiliges Datenblatt.
>> Diese Pins gehen intern auf ein Taktnetz, das so mit den internen
>> Flip-Flops verschalten ist, dass das Taktsignal jedes Flip-Flop mit
>> möglichst geringer Verzögerung ("Skew" auf englisch) erreicht.

sprich: Special Wires im FPGA, da an special Pins am FPGA angepinnt
sind.

> Aber warum hat es in der vorhergehenden Version funktioniert?

Das weiss wohl nur xilinx alleine ;-) Evtl. wurde in der Version nicht
nach solchen Fehlern gesucht. Ich schätze, und nachdem was ich gelesen
habe, hatte die 7.1 viele Fehler und es war für Xilinx einfacher alles
neu zu machen um somit auch solche Fehler zu finden (genaueres sollte
in den Changelog stehen). Das alles Neu nicht auch besser/bug freier
ist zeigt wohl das neue SP1 für 8.1.

Viele Grüße
Olaf

von FPGA-User (Gast)


Lesenswert?

wenn Du auf der XILINX-Homepage

XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING

als Suchbegriff eingibst und dem Englischen mächtig bist,
dann ist die 2. Antwort für Dich die Lösung (hier allerding
für Virtex)

alternativ geht auch "Place:645" als Suchbegriff, das ist
schon gut, wenn die Fehler durchnummeriert sind

von Xenu (Gast)


Lesenswert?

>>Aber warum hat es in der vorhergehenden Version funktioniert?

>Das weiss wohl nur xilinx alleine ;-) Evtl. wurde in der Version
nicht
>nach solchen Fehlern gesucht.

Ich glaube da wurde schon 'ne Warnung ausgespuckt.

Mit der neuen Methode wollen sie die Leute wohl zwingen,
die Designs vernünftiger zu programmieren.

von Martin (Gast)


Lesenswert?

Hallo!

Das Dumme ist, wenn ich diesen Suchbegriff eingebe und
die Antwort 2 auswähle, dann wieder nur erklärt wird, dass
die XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING - Variable aktiviert
werden muss.

Es steht nicht dabei wie!?!

Gruß, Martin

von FPGAküchle (Gast)


Lesenswert?

Es ist eine stinknormale Enviromentvariable, wie PATH, XILINX etc..
Wenn du unter windoews arbeitest, Dann z.b.

Arbeitsplatz (Maus) -> Eigenschaften , dort den reiter Erweitert
auswählen, den button ungebungsvariablen klicken und in der Hälfte
"Benutzervariablen" neu auswählen und die Varibale samt Wert
eintragen.

von FPGAküchle (Gast)


Lesenswert?

Hat's geklappt mit der Variable?

Am besten du machst gleich richtig.

also wenn slow_sig des zu zählende eingang ist und der FPGA den Takt
main_clk bekommt dann:

process(main_clk)
begin
 if rising_edge(main_clk) then
   if reset ='0' then
      count_q <= (others => '0');
      sync_q <= (others => '0');
   else
     sync(0) <= slow_sig;
     sync(3 downto 1) <= sync(2 downto 0); --synchronisier
     if sync_q(3 downto 2) = "01" then
       count <= count+1;
    end if;
  end if;
end if;
end process;

So geht das Pin nicht auf ein Taktnetzwerk und wird ordentlich
eingetaktet.
Das rücksetzen des counters und die deklarationen überlasse ich Dir.

von Martin (Gast)


Lesenswert?

Hallo!

Ich habe das leider mit der Variable nicht hinbekommen.
Ich weiß nicht, wie du das meinst oder wo ich das umstellen kann.

Tut mir leid.

Vielleicht hast du noch einen Tipp.

Tschüss

Martin

von FPGAküchle (Gast)


Lesenswert?

OK, Du musst eine Variable in WINDOWS setzen, nicht ISE oder so. XILINX
beschreibt das in der UG109 wie folgt:

1. Right-click on the My Computer icon and select Properties.
2. In the Systems Properties window, select the Advance tab.
3. Click on the “Environment Variables” button.
4. Under “System variables”, click on the New button.
5. Enter the variable name: XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING.
6. Enter the variable value: TRUE.
7. Click OK on each of the three open windows.

Auf Deutsch (obacht, ich habe kein windows zur Hand um das
auszuprobieren, ich kann mich also mit dem Maustasten und deutschen
Texten irren):

Auf dem Desktop gibts ein ICON "Mein Computer" mit Mauszeiger drüber
fahren und rechte Maustaste drücken. In dem erscheinenden Menü
"Eigenschaften" anklicken

Neues Fenster klappt auf, dort klickst du auf das Wort erweitert.
Jetzt klappt wieder was auf, dort klickst du auf das wort
Umgebungsvaraiblen

Was jetzt aufklappt hat eine obere und eine untere Hälfte. Xilinx
schreibt nun das Du in der unteren (?) Hälfte, die Systemvariablen
genannt wird, auf das Wörtchen Neu klickst.

Wiedermal klappt was auf, diemal mit zwei Eingabe-Zeilen, in der oberen
(Variablen Name) tippst du:
  XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING
in die untere (Wert)
 TRUE

Jetzt klickst Du bei allen fenster die geöffnet worden OK.


Schliesse die ISE und starte Sie neu. Wenn das nicht klappt, starte den
Rechner neu (Hat sich bei systemvariablen manchmal happig) und starte
die ISE.

von Martin (Gast)


Lesenswert?

Hallo FPGAküchle!

Ich möchte mich recht herzlich bei dir bedanden.
Jetzt habe ich es geschafft.
Es funktioniert.

Tschüss, Martin

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.