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
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.
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.
...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
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.
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
#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.
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!!!!
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.