Forum: FPGA, VHDL & Co. CLOCK_SIGNAL constraint


von T.M. (Gast)


Lesenswert?

Hallo.
neues "Prblem" bei der Synthese. Habe einen Taktteiler in meinem
Design, der den clk runterteilt, und dann für die FSM benutzt wird.
Bei der Synthese erhalte ich folgende Warnung:

'...(*) This 1 clock signal(s are generated by combinatorial logic,
and XST is not able to identify which are the primary clock signals.
Please use the CLOCK_SIGNAL constraint to specify the clock signal(s)
generated by combinatorial logic...'

Daraufhin habe ich in der Constraints Anleitung nachgescheut und
folgende Zeilen in mein Design eingefügt. Trotzdem erhalte ich
immernoch die Warnung. Die Synthese läuft zwar durch und ich kann das
Programm dann auch auf den FPGA spielen, aber stören tut mich das
trotzdem.
Hat da jemand nen Hinweis, was ich falsch gemacht habe?

Grüße
T.M.
1
-- Beginn für Synthese
2
attribute clock_signal : string;
3
attribute clock_signal of clk : signal is "yes";
4
attribute buffer_type : string;
5
attribute buffer_type of clk_geteilt : signal is "{none}";
6
-- Ende

von T.M. (Gast)


Lesenswert?

achso, folgende Zeile hatte ich statt der 3. oben auch schon probiert:
1
attribute clock_signal of clk_geteilt : signal is "yes";
Klang nach der Warnung nach zu urteilen auch logischer, weil dieses
Signal ja das durch eine Kombinatorik erzeugte ist. Funzte trotzdem
nicht.

Grüße
T.M.

von T.M. (Gast)


Lesenswert?

Hab jetzt was im Design geändert und die Warnung is weg :-)
Nur noch:
"...INFO:Xst:2169 - HDL ADVISOR - Some clock signals were not
automatically buffered by XST with BUFG/BUFR resources. Please use the
buffer_type constraint in order to insert these buffers to the clock
signals to help prevent skew problems..."
aber das dürfte nicht so schlimm sein, oder?

Grüße
T.M.

von Ines (Gast)


Lesenswert?

Hallo T.M.,

prinzipiell sollte man Clock Signale nicht einfach runtertakten, es sei
denn man nutzt dafür vorgesehene PLLs oder DCMs oder so. Das Problem ist
nämlich, dass Dein erzeugtes Clock-Signal nicht als solches erkannt
wird, und deshalb auch kein Clock-Netz verwendet wird. D.h. Du bekommst
Laufzeitunterschiede, die gerade bei einem Clock-Signal net so toll
sind.

Probier's doch mal anders. Lege sowohl Dein generiertes Signal als
auch den ursprünglichen Clock an Deine State Machine an. Vorausgesetzt
die High-Phase vom runtergeteilten Clock ist max. 1 Orginal-Clock-Takt
lang (z.B. wenn Du die Frequenz nur durch 2 geteilt hast, ansonsten
musst Du das Signal halt anpassen), kannst Du das generierte Signal als
Clock-Enable verwenden. Alles klar?

Gruß
Ines

von Jörn (Gast)


Lesenswert?

Eine andere Möglichkeit ist noch alle FF mit dem selben Takt zu
betreiben und die FF, die mit dem niedrigeren Takt laufen sollen mit
einem Enable zu versehen. Wobei das Enablesignal von einem Taktteiler
generiert wird.

Gruß Jörn

von T.M. (Gast)


Lesenswert?

Enable mache ich so
1
if clk'event and clk = '1' then
2
  if clk_enable = '1' then
3
    FF_aus <= FF_ein;
4
  end if;
5
end if;
Sehe ich das richtig?

von Ines (Gast)


Lesenswert?

Ja!

Ines

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.