Forum: FPGA, VHDL & Co. Timing Constraint: Welche Takte im SDC-File constrainen?


von Hubi (Gast)


Lesenswert?

Hallo Zusammen,

ich habe eine generelle Frage bezüglich Timing Constraints im SDC.

Vorab: Ichg arbeite mit einem Altera Cyclone III und Quartus 2.

Soo, ich habe in meinem Design zahlreiche Clocks, die sich aber in 2 
Typen unterscheiden:


1.) Clocks die durch eine PLL aus einem externen Takt generiert sind
    (für die schnellen Clocks).

2.) Clocks durch Division mit kombinatorischer Logik
    (für die langsameren Clocks).


Die PLL-basierenden Clocks sind mir eig. klar. Die gebe ich im 
Constraints-File folgendermaßen an:

Beispiel:
1
create_generated_clock -name clk_20m
2
                       -master_clock TCXO_10m
3
                       -source <<pll input port name>> 
4
                       -divide_by 0
5
                       -multiply_by 2
6
                       -duty_cycle 50.00 
7
                       { <<pll output port name>> }

Aber wie mache ich das für Clocks der zweiten Gruppe die durch 
kombinatorische Logik entstehen? Hier habe ich oft variablen Duty Cycle, 
Multiplikator oder Divisor, etc. wesshalb diese Daten alle entfallen.

Eigentlich will ich dem Synthesetool ja auch nur mitteilen, dass es 
diese Signale als Clocks interpretieren soll. Bin ich da auf dem 
richtigen Weg wenn ich das im SDC-File angebe?

Gruß

Hubi

von Schlumpf (Gast)


Lesenswert?

Hubi schrieb:
> Eigentlich will ich dem Synthesetool ja auch nur mitteilen, dass es
> diese Signale als Clocks interpretieren soll. Bin ich da auf dem
> richtigen Weg wenn ich das im SDC-File angebe?

Nicht ganz. DASS es sich bei den Signalen um einen Takt handelt, erkennt 
die Synthese anhand deiner Verhaltensbeschreibung in deinem VHDL-Code
Wie schnell der Takt sein soll, kann die Synthese aber nicht erkennen, 
daher teilt man ihr das per Constraint mit.

Hubi schrieb:
> Soo, ich habe in meinem Design zahlreiche Clocks,

Das halte ich für eine gefährliche Sache. Es ist viel sinnvoller, in 
einem System möglichst wenig Takte zu haben (idelaerweise nur einen) und 
damit ALLE Register zu takten.

von Hubi (Gast)


Lesenswert?

D.h. ich gebe bei veränderlichem Takt einfach den maximal zu erwartenden 
Takt an?

Schlumpf schrieb:
>
> Hubi schrieb:
>> Soo, ich habe in meinem Design zahlreiche Clocks,
>
> Das halte ich für eine gefährliche Sache. Es ist viel sinnvoller, in
> einem System möglichst wenig Takte zu haben (idelaerweise nur einen) und
> damit ALLE Register zu takten.

Das geht in diesem Design leider nicht. Wegen diversen Interfaces sind 
auch einige Takte notwendig.


Noch eine Frage wegen generierten internen Clocks.

Wie ist das denn wenn ich eine durch eine PLL generierte Clock habe 
(clk_pll) und diese im einfachsten Fall durch ein internes Signal einem 
Output-Signal zuweise, Pseudo-Code-Beispiel:
1
clk_int <= clk_pll;
2
clk_out <= clk_int;

Dass ich clk_pll constrainen muss ist klar. Aber muss ich auch clk_int 
und clk_out constrainen? Das Synthesetool dürfte doch rückverfolgen 
können dass diese Signale direkt abgeleitet sind von clk_pll?

Vielen Dank.

Hubi

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


Lesenswert?

Hubi schrieb:
> 2.) Clocks durch Division mit kombinatorischer Logik
> (für die langsameren Clocks).
Das ist nur eine längere Schreibweise für "Murks"...

Hubi schrieb:
> Das geht in diesem Design leider nicht. Wegen diversen Interfaces sind
> auch einige Takte notwendig.
Sieh dir mal das Thema "Clock Enable" an. Die Flipflops im FPGA haben 
sogar extra einen Eingang dafür...

> wenn ich eine durch eine PLL generierte Clock habe
Dann kannst du davon ausgehen, dass alle davon abgeleiteten Takte 
(auch die, die zwischendurch einen anderen Namen bekommen) von der 
Toolchain erkannt und abgeleitet werden können.

> clk_int <= clk_pll;
> clk_out <= clk_int;
Ich würde dir das Auge auskratzen, wenn ich als dein Kollege und 
Nachfolger in 10 Jahren so einen Code zur Wartung bekommen würde. DREI 
unterschiedliche Bezeichner für EIN und das selbe Signal. Nein, danke...

> clk_out <= clk_int;
Man sollte so direkt übrigens keinen Takt ausgeben. Besser ist die 
Verwendung von DDR-Flipflops zur Ausgabe von wirklich brauchbar 
synchronen Takten.

von Hubi (Gast)


Lesenswert?

Erstmal danke für deine Hinweise, aber...

Lothar Miller schrieb:
>> clk_int <= clk_pll;
>> clk_out <= clk_int;
> Ich würde dir das Auge auskratzen, wenn ich als dein Kollege und
> Nachfolger in 10 Jahren so einen Code zur Wartung bekommen würde. DREI
> unterschiedliche Bezeichner für EIN und das selbe Signal. Nein, danke...

sowas brauchts als Umgangston von einem Moderator aus meiner Sicht 
wirklich nicht. Das geht auch anders.


Ich habe den Code übernommen, baue darauf Constraints auf usw. Naja wie 
auch immer. Danke für die Hilfe.

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


Lesenswert?

Hubi schrieb:
> sowas brauchts als Umgangston von einem Moderator aus meiner Sicht
> wirklich nicht.
In jedem Moderator steckt ein Mensch. Ich hätte diesen Satz auch als 
Nichtmoderator geschrieben.

> Das geht auch anders.
Es braucht manchmal drastische und sarkastische Übertreibungen, um den 
Kern der Aussage zu verdeutlichen.

> Ich habe den Code übernommen, baue darauf Constraints auf usw.
Ja und: machen dir diese vielen (unnötigen) Namenswechsel Freude? Oder 
machen sie wenigstens das Leben einfacher und die Beschreibung 
durchschaubarer?

> Naja wie auch immer. Danke für die Hilfe.
Keine Ursache.

Noch was:
Sowas wie  die Takte aus den Flipflop-Taktteilern kannst du nicht 
sinnvoll constrainen, denn die Toolchain bekommt meist keinen 
brauchbaren Bezug zum Quelltakt berechnet. Und dann hat sie im weitern 
oft Probleme mit diesem abgeleiteten Takt, der evtl. sogar über das ganz 
normale Routing geführt wird...

von Schlumpf (Gast)


Lesenswert?

> Das Synthesetool dürfte doch rückverfolgen
> können dass diese Signale direkt abgeleitet sind von clk_pll?

Richtig, das kann es und wir es auch tun.

> Das geht in diesem Design leider nicht. Wegen diversen Interfaces sind
> auch einige Takte notwendig.

Wenn das tasächlich so ist, dann wirst du sicher auch alle Übergänge 
genau durchdacht, designed und richtig constrained haben..

von Schlumpf (Gast)


Lesenswert?

Lothar Miller schrieb:
> Noch was:
> Sowas wie  die Takte aus den Flipflop-Taktteilern kannst du nicht
> sinnvoll constrainen, denn die Toolchain bekommt meist keinen
> brauchbaren Bezug zum Quelltakt berechnet. Und dann hat sie im weitern
> oft Probleme mit diesem abgeleiteten Takt, der evtl. sogar über das ganz
> normale Routing geführt wird...

Und dann noch der böse Skew, weil plötzlich kein Clocktree mehr frei 
ist..

von bko (Gast)


Lesenswert?

Hier ists  doch schön Beschrieben
(rolle runter zu:  Asynchrone Taktleitung):
http://www.mikrocontroller.net/articles/Taktung_FPGA/CPLD
[nebenbei]
Moderator:
Herkunft:
 vom lateinischen Substantiv moderātor → la ‚Mäßigender, Leiter, 
Lenker‘,
 zum lateinischen Verb moderare → la ‚mäßigen, leiten, lenken‘[1]

http://de.wiktionary.org/wiki/Moderator  ;)
[ende nebenbei]

von Klakx (Gast)


Lesenswert?

damit deine Synthese ein bisschen netter zu dir wird:
wenn du den clock auf einem ausgang führst (zum Test gar nicht mal 
unüblich), dann setz diesen clock als generated_clock mit divide by 1

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


Lesenswert?

Offtopic:

bko schrieb:
> [nebenbei]
Ich kenne den Link und weiß um die steuernde Funktion eines Moderators. 
Und ich hoffe, mit meinen Beiträgen den Threads und eine zielbringende 
Richtung geben und zum Wissen der Fragenden etwas positiv beisteuern zu 
können. Meist funktioniert das...

Wenn ein Moderator allerdings nur steuert, dann ist einer weniger da, 
der etwas voranbringt. Ein Ruderboot wird allein mit 10 Steuermännern 
keinen Meter von der Stelle kommen. Wenn sich aber 9 der Seuermänner 
"herablassen" und mitrudern, dann klappt das schon besser...

Wenn es beruhigt: das nächste Mal werde ich mich für solch einen 
Kommentar ausloggen und den als Gast schreiben. Ich werde ihn allerdings 
trotzdem mit meinem Namen schreiben.

von Olga (Gast)


Lesenswert?

bko schrieb:
> http://de.wiktionary.org/wiki/Moderator  ;)
> [ende nebenbei]

Siehs doch mal andersrum, hubi. Laut Lothars Kommentar bist du also 
derjenige, der nun berechtigt ist seinem Kollegen, der das fabriziert 
hat, ein Auge auszukratzen ;-)

von Schlumpf (Gast)


Lesenswert?

Hubi, nicht gleich so empfindlich sein....

Die Sache ist die:
Deine Fragestellung lässt vermuten, dass du in dem Thema eher noch recht 
wenig Erfahrung hast. Was ja auch kein Problem darstellt.
Aber auf der anderen Seite legst du dar, dass es unumgänglich sei, mit 
vielen, vielen Clocks in deinem Design zu arbeiten.

Aus Erfahrung legt das die Vermutung nahe, dass das unter Umständen auch 
anders gehen könnte.
Denn Designs mit mehreren Clocks sind nicht einfach zu beherrschen. Und 
gerade für einen Anfänger bieten sie jede Menge Stolpersteine. Es reicht 
hier in der Regel eben nicht, den Takten ihre Maximalfrequenz per 
Constraint zu geben und zu hoffen, dass die Synthese weiss, was sie dann 
zu tun hat.

Daher vermeidet man es eigentlich, wann immer es geht, mehrere Takte in 
einem Design zu verwenden. Kann sein, dass es bei dir wirklich nicht 
anders geht, aber die Aussage von Lothar, dass dies Murks sei, ist 
meines Erachtens nicht überheblich, sondern beruht auf Erfahrung.

Wie gesagt, mit deiner Frage erweckst du den Eindruck, dass du recht neu 
in dem Thema bist. Und als "Neuling" mit zig Takten (die dann auch noch 
kombinatorisch gebildet werden), umzugehen, halte auch ich für ein 
gewagtes Unterfangen.

Und dass du ein und dem gleichen Signal mehrere Namen gibst, kann man 
zwar machen, aber die Lesbarkeit leidet doch erheblich darunter. Sowas 
vermeide ich persönlich sogar über Component-Grenzen hinweg.
Die Synthese hämmert dir das eh flach und von deinen vielen Bezeichnern 
bleibt nur ein einziger übrig und dann kannst du raten, für welchen sich 
die Synthese beim jenweigen Run entschieden hat. Damit macht man sich 
und seinen Kollegen das Leben unnötig schwer und ich würde meinem 
Kollgen auch was Husten, wenn er mir sowas vorlegen würde.

Ich habe Lothars Kommentare eher als sarkastisch-ironischen Hinweis 
verstanden, dass das eher Käse ist und nicht als persönlichen Angriff.
Und ich denke, so war es auch gemeint.

von Hubi (Gast)


Lesenswert?

Servus nochmal ;-)


Ja ich habs auch nicht so gemeint.
Ich hab die Kiste übernommen und Pflege sie nun weiter. Mit FPGA-Design 
kenne ich mich schon recht i.O. aus (solide Kenntnisse aber kein Profi), 
Constraints allerdings in der Tat wie bereits angemerkt nicht besonders. 
Das will ich nun im selben Schritt wie ichs sie fürs Design hochziehe 
gleich mit angehen.

Das Ding ist: Es gibt verdammt viele Takte und ja, man könnte auch 
einige davon einsparen, keine Frage. Ich hab mir die nicht ausgedacht, 
ich muss aber mit ihnen leben (und sie, falls sie drin bleiben, 
entsprechend constrainen).

Auf einen einzigen Takt kann man das Design auch nicht runter brechen, 
aufgrund diverser unterschiedlich getakteter Schnittstellen verbleiben 
schon ein paar Takte. Die kann man zwar auch schöner und sauberer 
machen, aber wie gesagt, auf Einen geht nicht. Das sag ich als 
FPGA-Designer, nicht als Constraint-Neuling ;-)

Für diesen Fall halte ich einen Mittelweg daher am sinnvollsten, schauen 
was reduziert oder optimiert werden kann und auf der anderen Seite 
verbleibende Takte vernünftig constrainen. Genau dazu hatte ich diesen 
Thread angedacht, da mir beim Constraining verschiedene Konstrukte noch 
unklar sind.

Dass Konstrukte wie kombinatorische Clock-Divider auch sehr windige 
Geschichten sind ist mir klar. Ich find die keineswegs gut. Da die aber 
auch nur für sehr niedrige Frequenzen überhaupt drin sind will ich 
erstmal schauen ob das so wie es ist noch vertretbar ist und mit 
constrainen. Mit dem Ergebnis daraus kann ich immer noch entscheiden obs 
vorläufig drin bleibt bis höher priore Sachen erledigt sind oder es akut 
geändert werden muss - dann aber auch mit sauber nachweisbaren Fakten 
dank Timing-Report.

Hoffe ich konnts nochmal klarstellen.
Dennoch auch vielen Dank für die Links, Hilfe und auch den 
eindringlichen Ton windige Konstrukte zu vermeiden ;-)

von Schlumpf (Gast)


Lesenswert?

Das Problem bei kombinatorischen Clock-Dividern ist halt nicht unbedingt 
die zu erreichende Frequenz, sondern die Tatsache, dass die Biester 
glitchen. Und dann kannst da mit nem Constraining auch nichts retten :-(

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.