Forum: FPGA, VHDL & Co. VHDL-Synthese: Clock oder kein Clock?


von hyperb (Gast)


Lesenswert?

Hi Leute

Wie erkennt das Synthesetool im Webpack von Xilinx eigentlich ob es
sich bei Signalen um Clock-Signale handelt oder nicht?

Und kann ich das auch selbst bestimmen?

Danke

von Rooney B. (rooney)


Lesenswert?

Ich nehme an dadurch, dass du im Webpack ein Signal, nennen wir es jetzt
einfach MCLK, deines VHDL Design auf einen speziellen Pin des CPLDs oder
FPGAs (Clockeingang) legst (Assign Package Pins). Welcher Pin das ist
erfährst du im Datenblatt deines Bausteins.

von FPGAküchle (Gast)


Lesenswert?

Hm, was in VHDL 'event abgefragt wird, ist ein clock. das ist das
hauptkriterium.

Und was in den timingconstraints (ucf file) mit period bezeichnet
wird.
Aber wenn es nicht an den clk eingang von FF,BRAM's,etc ('event
risineg_edge, etc) gehts, dann sit es auch kein clock.

von Bustle (Gast)


Lesenswert?

...das ist doch eine etwas komische Frage. Ein Clock ist ja auch nichts
weiteres wie ein Signal, nur mit einem (mehr oder weniger) konstantem
wechsel.

Im ucf-File kannst du die Taktrate festlegen um das Design im z.B. FPGA
danach auszulegen.

Jedes Signal kannst du mit rising_edge abfragen. (also kannst du die
"Taktsignale" selbst bestimmen)

Gruß
Bustle

von Rooney B. (rooney)


Lesenswert?

Irrtum, es macht einen Unterschied ob du eine Clockleitung nimmst oder
nicht!!!! FPGAs und CPLDs haben einen Clocktree der für die Verteilung
des Clocksignals herangezogen wird. Dieser Clocktree ermöglicht es,
dass Macrozellen synchron getaktet werden. Das Clocksignal ist also
nicht gleich wie ein "herkömmliches" Signal.

Die Abfrage 'event soll also nur für das Taktsignal verwendet werden.
Um Taktflanken auf "herkömmlichen" Signalen zu erkennen, kann man
Edge-Detektoren implementieren, die vom Clock getaktet werden.

von hyperb (Gast)


Lesenswert?

Also erstma danke für eure schnellen Antworten.

Dass Clock oder nicht Clock davon abhängt, ob ich das Signal speziellen
Pins zuordne, ist falsch.
Mit scheint es sogar so zu sein, dass die timing constraints bei der
Synthese gar nicht berücksichtigt werden...


Auch komisch:

process (Takt)
begin
    if (Takt = '1') and (Takt'event)
  then
      --bla <= Takt;
      Ausgang <= "01010101";
  end if;
end process;

Ohne Kommentar (also mit "bla <= Takt"): Takt ist Clock Signal
Mit Kommentar (also ohne "bla <= Takt"): Takt ist kein Clock Signal

von FPGAküchle (Gast)


Lesenswert?

#Mit scheint es sogar so zu sein, dass die timing constraints bei der
#Synthese gar nicht berücksichtigt werden...

Korrekt timing constraints (*.ucf) fliessen in der regel erst beim
Place und route ein.

Es gibt spezielle syntheseconstraints, da weiss ich aber auch nicht
weiter

#process (Takt)
#begin
#    if (Takt = '1') and (Takt'event)
#  then
#      --bla <= Takt;
#      Ausgang <= "01010101";
#  end if;
#end process;

#Ohne Kommentar (also mit "bla <= Takt"): Takt ist Clock Signal
#Mit Kommentar (also ohne "bla <= Takt"): Takt ist kein Clock Signal


Das wird optimiert zu konstanten Wert am Ausgang, da ist kein takt mehr
nötig.

von Rooney B. (rooney)


Lesenswert?

Na sicher hängt das von dem Pin ab, deswegen gibt es dedizierte
Takteingänge bei diesen Logikbausteinene!!! Was hätten die sonst für
eine Sinn?
Du kannst natürlich jeden Eingang als Takteingang verwenden, aber so
was macht man nicht, da Clockleitungen "spezielle" Leitungen mit
"speziellen" Properties sind. Wenn ich also spezielle Leitungen für
den Takt habe dann ist es auch sinnvoll diese zu verwenden.

In einem ordentlichen VHDL Design sollen keine "gated" Clocks
verwendet werden!!!!

von T.M. (Gast)


Lesenswert?

Wenn man externe Signale, die nicht an einem Clockpin hängen als Takt
verwendet, wird sich das Synthese/Implementierungswerkzeug aber schön
beschweren. Bei der 7.2 Version der ISE war es eine Warnung, kann sogar
sein, dass bei der 8.1 Version der ISE mit einem Error an der Stelle
Schluß ist. Man könnte höchstens diese Pins intern dann auf einen
Clockbuffer hängen, der einen Zugang zum Clocktree darstellt. Nur sind
diese Buffer oft schon den Clockeingängen zugeordnet, lassen sich also
nicht einfach nach Lust und Laune verwenden. Meist ist Anzahl Clockpins
= Anzahl Clockbuffer. Wenn man intern kombin. erzeugte Signale als Clock
an FF oder anderen synchronen Schaltungen verwendet ist das "nur"
schlechter Stil und führt zu Warnungen und asychronen Designs.


T.M.

von hyperb (Gast)


Lesenswert?

Also ist die gängige Methode, dass man bei Clock Signalen ...'event
benutzt - dann erkennt das Synthesetool das Signal als Takt. Und wenn
man kein Clock Signal wünscht, das 'event einfach vermeidet?

Mfg

von T.M. (Gast)


Lesenswert?

Wie kein Clock wünschen?
Du meinst rein kombinatorische Prozesse? Oder willst du Signale, die
kein Clock sind, auf Flanken abfragen? Dazu kann man sich mit kleinen
Tricks mithilfe von verzögerten Signalen behelfen. Man fragt einfach
das aktuelle und das vertögerte Signal ab, zB:
1
IF (wert_aktuell = '1' AND wert_verzoegert = '0') THEN   --
2
steigende Flanke
3
  ...
4
ELSIF (wert_aktuell = '0' AND wert_verzoegert = '1') THEN   --
5
fallende Flanke
6
  ...
7
END IF;
Die verzögerten Signale erstellt man einfach mit einem FF.


T.M.

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.