www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Was macht das Design langsamer?


Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich baue gerade an einem Design rum und habe festgestellt,
dass die "Maximum Frequency" beim Synthetisieren mittlerweile auf 106 
MHz runterging.
Das ist jetzt kein Problem, das Design soll mit 40 MHz laufen,
aber ich habe mich gefragt, welche Elemente oder Konstrukte
diese Zahl beeinflussen, irgendwann kommt bestimmt ein zeitkritisches 
Design.

Bei den letzten 2-3 Sachen, die ich dem Design hinzugefügt habe, hat
sich diese Zahl kein Stück verändert, man kann also nicht einfach sagen
mehr Zeug -> weniger MHz.

Also welche Elemente eines Designs machen dieses langsam?

Autor: Johannes S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ich würde jetzt mal auf die Länge der Kombinatorik tippen.. (Dies 
bestimmt auch den kritischen Pfad).
Abhilfe würde ein Aufbrechen der Struktur, also Pipelining, bringen.

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Taktfrequenz nach der Synthese ist eine reine Schätzung. Du darfst 
dich nicht auf diese Zahl verlassen. Das, was das Design am Ende 
wirklich kann, steht im Post-PAR Timing Report; erst nach dem Routing 
stehen auch die Routing-Delays fest. Wenn da weniger als 40 MHz steht, 
hast du ein Problem.

Die länsten Pfade stehen auch in diesem Report. Auf dieser Basis kannst 
du dann dein Design modifizieren.

 -- stefan

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei hinzuzufügen wäre, daß der jetzt kritische Pfad noch nichts 
aussagt. Die Synthese wird immer probieren, sich am Rande der 
festgelegten Frequenz "entlangzuschlängeln" und die Schaltung insgesamt 
hin-und herzubalancieren, dass es passt. Daher hat man sehr früh im 
Design immer einen Pfad, der nur gerade ein wenig schneller ist, als man 
braucht.

Man muss aber der Synthese schon mitteilen, wohin sie gehen soll - das 
scheint mir Christian noch nicht getan zu haben.

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Abhilfe würde ein Aufbrechen der Struktur, also Pipelining, bringen.
Das verstehe ich nicht, kannst du ein Beispiel geben?

>Post-PAR Timing Report
Ich hab die ganze ISE durchwühlt, aber solch einen Report
konnte ich nicht finden. Wo steht der (bei 8.1 SP3)?

>Man muss aber der Synthese schon mitteilen, wohin sie gehen soll - das
>scheint mir Christian noch nicht getan zu haben.
Was meinst du mit wohin sie gehen soll?


Ansonsten danke für eure Antworten! :)

Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1.Pipelining:
Der kritische Pfad bestimmt die maximale Frequenz eines Designs. Das 
heißt der Pfad, der in einem Takt durchlaufen werden kann ohne dass sich 
der Eingang schon wieder ändert muss beachtet werden. Der Eingangswert 
kommt dabei z.B. von einem Register und der Ausgangswert wird wieder in 
eines geschrieben, dazwischen nur Kombinatorik.
Z.b. könnte man die Addition von drei Zahlen a + b + c = d 
implementieren. Dazu könnte man einfach zwei Addierer 
hintereinanderhängen. Eventuell ist der Pfad aber zu lang um eine 
bestimmte Frequenz zu erreichen. Also kann man noch ein Register 
dazwischenbauen und damit quasi ein Zwischenergebnis a+b speichern, das 
im nächsten Takt erst +c genommen wird. Währendessen kann schon ein 
nächstes a+b berechnet werden usw. Der kritsiche Pfad geht dann nur über 
einen statt zwei Addierer.
Damit dauert eine Addition der drei Zahlen dann natürlich zwei Takte 
statt einem. Liegen allerding jeden Takt Eingangswerte an, kommt auch 
jeden Takt ein Ergebnis raus (nämlich die des vorherigen Eingabewertes).

2.Post-PAR report ist die .twr-Datei. Wird nach dem Place and Route 
erstellt, in den PAR-Optionen kann man Details einstellen.

3.Wenn du eine bestimmte Frequenz erreichen möchtest, muss die Synthese 
bzw. PAR das wissen. Dazu erstellt du ein constraints file, in dem der 
gewünschte Takt angegeben wird.

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die ausführliche und lehrreiche Antwort!
Werde mich nächste Woche intensiver damit beschäftigen.
Aber jetzt - schönes megalanges Wochenende :)

Autor: livelonglearning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach dir keine Sorgen über die Geschwindigkeit deines Designs, wenn da 
106 MHz steht und du 40 erreichen willst ist das ne sichere Bank. Zwei 
große Brocken beeinflussen die Designgeschwindigkeit meist.
1) die Auslastung (hier kannst du per Faustformel sagen: je mehr im 
Design drin ist umso langsamer wird es) Das ist aber nur eine grobe 
Richtlinie! Es gibt immer krotische Größen, wo die Geschwindigkeit 
plötzlich signifikant sinkt. So lange du nicht in Regionen über 80% 
kommst sollte genügend Platz vorhanden sein alles halbwegs anständig zu 
routen. Pass hierbei beim boardlayout auf, dass logisch zusammenhängende 
blöcke auch pins in der nähe haben (bsp: du willst nen DDR2 Controller 
schreiben, dann müssen die nah beeinander liegen sonss probleme; naja, 
du kannst dir sicher vorstellen was ich meine!)
2) Dein Codingstile: Den kannst du sehr gut beeinflussen. Denk daran 
keine zu langen asynchronen Pfade einzubauen (pipelining trifft es hier 
nur halb, da pipelining die zeitliche Abfolge verändert und daher zu 
logischen Problemen führen kann). Überlege dir vorher die SChritte, die 
deine Logic abarbeiten soll und dann immer schritt für schritt und 
zwischendurch registern! Aber wenn dein Design bei 106 MHz läuft 
scheinst du das ja schon zu berücksichtigen


So und jetzt ncoh ein TIP!
Irgendwo in deinem Synthese / Place and Route Tool müsste es eine 
Einstellung geben, die den Effort einstellt. Wenn du mal an kritischen 
Parametern arbeitest kannst du dort ncoh an ein paar rädchen drehen! Zum 
einen kannst du bestimmt irgendwas zwischen low und high einstellen, wo 
die anzahl der Dürchläufe verändert werden kann. Viele Durchläufe 
bescheren einem meist bessere ERgebnisse, dauern aber mit unter die 
ganze Nacht!
Zum anderen kannst du festlegen auf was das ganze optimiert werden soll 
(area, speed or balanced)!
Und wenn das alles nicht hilft und dein Design trotzdem knapp an der 
Zielsetzung vorbeischrammt, dann probier es einfach auf der echten 
hardware aus! Es wird bei den tools immer vom worst case ausgegangen, 
also nciht unbedingt von Zimmertemperatur und stabiler spannung...
Es kann also gut sein, dass es trotzdem geht. Heribei können allerding 
effekte auftreten, die zu einem zeitweiligen Ausfall führen (das teil 
läuft und läuft und erwärmt sich dabei...). Aber wenn es nichts 
sicherheitsrelevantes ist...

Viel Erfolg!

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Peters wrote:

> ...Also welche Elemente eines Designs machen dieses langsam?

na(Gast) hat ja schon ganz gutes dazu geschrieben, bleibt aber mit den 
Addierern noch auf "Klötzchenebene". Um zu analysieren, wann genau bei 
einem FPGA eine neue Logikebene dazukommt muss man sich mal die CLBs, 
LEs (oder wie die kleinsten "Arbeitstierchen" beim jeweiligen Hersteller 
gerade heissen) ansehen.

Meist basieren diese auf Lookup Tables (LUTs) mit 4, 5 oder ein paar 
mehr Eingängen. Hat man in seinem Design zwischen zwei Flipflops 
Gleichungen mit mehr Eingängen als die LUTs bieten, ist der Placer 
gezwungen, mehrere CLBs/LEs etc. zu kaskadieren, was natürlich die 
Laufzeiten erhöht. Um das zu umgehen werden kritische Designs dann wie 
schon erwähnt "gepipelined": Statt z.B. bei einem Komparator viele Bits 
auf einmal zu vergleichen (in VHDL ein Einzeiler) macht man das bei LUTs 
mit 4 Eingängen besser mit je 2 (bei 2 Variablen) oder 4  (beim 
Vergleich mit einer zur Kompilierzeit bekannten Konstanten) Bits, latcht 
das Ergebnis mit einem DFF ab und kombiniert dies dann in weiteren 
Stufen zum Endergebnis. Effekt: Die Laufzeit nimmt um die Anzahl der 
Stufen zu, aber die max. Arbeitsgeschwindigkeit steigt (z.T. 
erheblich!).

Man darf natürlich nicht vergessen, auf anderem Weg (d.h. mit 
unterschiedlicher Pipelinelänge) parallel berechnete Ergebnisse ggf. 
durch Schieberegister(chen) passender Länge aufzusynchronisieren, sonst 
wird die Fehlersuche mitunter sehr "interessant" ;-)

Grüße aus Berlin-Tempelhof,
Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.