VHDL-Synthese: Clock oder kein Clock?

Gast #417848
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.
Gast #417849
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
#417850
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.
Gast #417851
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
Gast #417852
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.
#417853
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!!!!
Gast #417854
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.
Gast #417855
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
Gast #417856
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren