Forum: FPGA, VHDL & Co. Fehler während Synthese -> Place:1108 (ISE)


von Johannes P. (Firma: Zodiac) (nbgabber)


Lesenswert?

Hallo Zusammen,

ich beschäftige mich zurzeit Hobbytechnisch mit nem FPGA evalboard und 
programmierung in VHDL unter ISE Design Suite. Bin also absoluter 
Newbie.

Habe mir ein Buch gekauft und auch schon ein bischen was gemacht.
Als erstes habe ich nen par LED's blinken lassen, soweit OK, 
funktioniert alles.

Als nächstes Projekt hab ich mir gleich was komplexeres vorgenommen.
Ich habe also ein UART mit empfangs und sende Buffer in VHDL 
geschrieben.
Als nächstes habe ich mir die Schaltung generiert und die Schaltung 
Simuliert (Testbench geschrieben). Alles Super.

Nun wolte ich die ganze Schaltung Synthetisieren und auf mein Bord 
bringen, dabei bricht er jedoch bei dem Schritt "Map" mit folgender 
Meldung ab:
1
ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found
2
   that are not placed at an optimal clock IOB / BUFGMUX site pair. The clock
3
   IOB component <RX> is placed at site <A16>. The corresponding BUFG component
4
   <RX_IBUF_BUFG> is placed at site <BUFGMUX_X3Y7>. There is only a select set
5
   of IOBs that can use the fast path to the Clocker buffer, and they are not
6
   being used. You may want to analyze why this problem exists and correct it.
7
   If this sub optimal condition is acceptable for this design, you may use the
8
   CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote this message to a
9
   WARNING and allow your design to continue. However, the use of this override
10
   is highly discouraged as it may lead to very poor timing results. It is
11
   recommended that this error condition be corrected in the design. A list of
12
   all the COMP.PINs used in this clock placement rule is listed below. These
13
   examples can be used directly in the .ucf file to override this clock rule.
14
   < NET "RX" CLOCK_DEDICATED_ROUTE = FALSE; >

Nun ist mein Englisch auch nicht das Beste aber was ich verstehe ist:
Irgendwas ist nicht optimal Plaziert? Da haben wir schon meine erste 
Frage -> was ist IOB und was ist BUFGMUX?
Ich habe Irgendwo gelesen das BUFG irgendwas ist, das ein Clocksignal in 
der weise vergüted, dass aus einem Theoretischem Rechtecksignal, aber 
praktisch Trapezförmigem, dem Theoretischem Rechtecksignal näher kommt. 
Habe ich das richtig verstanden?

Des weiteren steht da, dass mein Anschluss 'RX' mit pin A16 des FPGAs 
verbunden ist und das nur bestimmte Anschlüße mit Clock Buffer verbunden 
werden können, diese jedoch schon belegt sind.
Nun frage ich mich: Das Synthese tool scheint ja zu glauben RX sei ein 
Clocksignal! Oder werden diese Buffer auch für was anderes verwendet? 
Wonach geht das Synthese tool, wenn er glaubt es sei ne clock? geht er 
danach ob das signal ein den clk anschluss eines D-Flipflops geht?

RX ist bei mir die Empfangsleitung die auf eine Seriell zu Parallel 
wandler geht, und von dort auf nen Buffer. Getacktet wird mit einem 100 
MHz tackt, der über einen Counter, der bis zu einer gewisse Zahl zählt, 
und somit die Clock um diese Zahl runter teilt (je nach baudrate). Nun 
wird jedesmal bei einer Flanke an RX der Counter resetet, somit 
syncronisiere ich meine Clock mit dem RX. Vieleicht interpretiert 
deshalb das Synthese tool RX als Clock?

Nun ist die Frage: Wie kann ich (vorrausgesetzt meine genanten Annahmen 
sind alle richtig) verhindern, das dieser Clock Buffer zwischen meinem 
RX signal gesetzt wird?

Vielen Dank für Hilfe!

von Christian R. (supachris)


Lesenswert?

Johannes Pnt schrieb:
> Nun
> wird jedesmal bei einer Flanke an RX der Counter resetet, somit
> syncronisiere ich meine Clock mit dem RX. Vieleicht interpretiert
> deshalb das Synthese tool RX als Clock?

Ja genau das tut die Synthese weil du es beschrieben hast, und das ist 
ziemlich schlechte Design-Praxis. Mach besser eine richtige 
Flankenerkennung mit dem 100MHz Takt auf das RX-Signal. Dann ist auch 
die Fehlermeldung weg. Da die 100MHz ja viel schneller als die höchste 
Baudrate sind, ist das kein Problem.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes Pnt schrieb:
> Getacktet wird mit einem 100 MHz tackt
Takt schreibt man ohne c...

Johannes Pnt schrieb:
> Ich habe also ein UART mit empfangs und sende Buffer in VHDL
> geschrieben.
Christian R. schrieb:
> Mach besser eine richtige
> Flankenerkennung mit dem 100MHz Takt auf das RX-Signal.
So wie es dort:
http://www.lothar-miller.de/s9y/categories/42-RS232
in der Zeile:
1
if (rxd_sr(3 downto 2) = "10") then      -- fallende Flanke Startbit
gemacht wird. Siehe dazu
http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung
http://www.lothar-miller.de/s9y/archives/3-Tastenentprellung-mit-Schieberegister.html

Und dann merk dir: es gibt nur 1 Takt. Ein Takt ist alles, was mit 
'event oder rising_edge oder falling_edge abgefragt wird.
Und auch: jedes asynchrone (externe) Signal muss einsynchronisiert 
werden. Mit mindestens 1 (sicherer 2) Flipflops.
http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren

von Johannes P. (Firma: Zodiac) (nbgabber)


Lesenswert?

@lkmiller
Vielen Dank für die Antwort!
Was mir erstmal auffällt, ist dass Deine lösung zum 
RS232-senden/-empfangen ungefähr ein 10-tel von meinem VHDL code ist 
:-/.
Auch die Flankenerkennung habe ich umständlich über 2 processe gelöst 
(einen für steigend und einen für fallend). Ich werde mich dem nochmal 
Intensiv heute Arbend witmen. Deine Seite ist echt Super (Großes lob!), 
da werde ich mich nochmal richtig einlesen, insbesondere mit dem 
einsynchronisieren!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes Pnt schrieb:
> Was mir erstmal auffällt, ist dass Deine lösung zum
> RS232-senden/-empfangen ungefähr ein 10-tel von meinem VHDL code ist.
> Auch die Flankenerkennung habe ich umständlich über 2 processe gelöst
> (einen für steigend und einen für fallend).
Das ist es, was VHDL etwas zu Unrecht in den Verruf bringt, eine 
"geschwätzige und umständliche" Sprache zu sein. So wie im 
Beitrag "Re: SPLD (GAL) - welche Software" (der es wert ist, 
von einem Anfänger auch mal ganz gelesen zu werden, genauso wie der 
Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)").

> Deine Seite ist echt Super (Großes lob!),
Danke.

> da werde ich mich nochmal richtig einlesen,
Tu das. Da steckt einiges drin, ich finde manches selber schon nicht 
mehr...
;-)

> insbesondere mit dem einsynchronisieren!
Das sind etwa 80% der Probleme, die hier auftauchen. Und vor allem: man 
findet diese Probleme nicht mit einer Simulation, und sie werden an 
gut 90% der Schulen nicht erwähnt...

Hier nochmal meine Postulate:
Beitrag "vhdl-richtlinien f. synthese?"

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.