Hallo liebe FPGA-Gemeinde, ich hätte da gern mal ein Problem... Im Rahmen meiner Diplomarbeit muss ich mein Design an eine bereits existierende Prozessor-Architektur (DLX) anbauen. Nun ergibt sich daraus die Schwierigkeit, dass ich die DLX solange anhalten muss, bis meine Verarbeitung beendet ist. Sprich, ich muss sie zeitweise vom System-Takt trennen, da es sonst keine andere Möglichkeit gibt, sie anzuhalten. Wenn ich das nun einfach über eine Und-Verknüfung mit einem Enable-Signal mache, gibt es Glitches... logisch.... Der Einsatz eines BUFGMUX bzw. BUFGCE, wie er bei den Xilinx-Primitives existiert, würde zwar den gewünschten Erfolg bringen, aber diese existieren leider nicht für den Spartan II E. Meine Versuche diesen Anhand der in ISE enthaltenen unisims-Bibliothek nachzuprogrammieren sind leider bisher an den ieee.vital-Bibliotheken gescheitert. In den Xilinx White-Papers habe ich einen vlt. interessanten Ansatz für einen "gupufferten Muxer" gefunden: buf_clk : process (CLK_IN) begin if (CLK_IN'event and CLK_IN = '1') then case W_CLK_DLX_EN is when '1' => W_CLK_DLX <= CLK_IN; when others => W_CLK_DLX <= '0'; end case; end if; end process; -- buf_clk Ich weiß, so Zeug sollte man schon wg. des Clock-Skews nicht machen, aber ich sehe derzeit keine andere Möglichkeit. Das würde auch soweit funktionieren, wenn nicht sich dadurch die DLX-Clock auf einen Systemtakt verbreitern würde. Führt man meherer Taktzyklen hintereinander aus, so fehlen die Fallenden Flanken - die DLX-Clock entspricht genau dem Verlauf des Enable-Signales. Hat jedmand eine Idee, wie ich das besser/anders machen kann? Wäre über konstruktive Antworten äußerst dankbar :) Viele Grüße Michael
An der Clock selbst rumfummeln ist seehr gewagt. Z.B. müsstest du solche Sachen sicherstellen wie dass die Clock genau dann abschaltet, wenn du das willst, und nicht z.B. einen Takt später; dass es keine Glitches gibt; dass die Pegel beim umschalten nicht zu kurz werden; dass durch das Wiedereinschalten nicht eine Flanke zu viel kommt... von der Verteilung des Signals auf dem Clocknetz mal ganz abgesehen. Die richtige Antwort ist: Clock-Enable. Genau deshalb wurde es erfunden. Wenn du das partout nicht willst, fallen mir noch zwei andere Möglichkeiten ein. 1. Statt den Prozessor auf Hardware-Ebene anzuhalten, könne das darauf laufende Programm lange genug "nichts" tun 2. Du erzeugst die Clock für den Prozessor nur direkt aus dem Systemtakt, sondern als Ausgabe eines Toggle-FF, welches mit dem Systemtakt betrieben wird. Dan nbekommt der Prozessor nur den halben Takt, wonach du auch entscheiden musst, ob dieser Ansatz überhaupt in Frage kommt. Dafür ist dieser halbe Takt auch meines Wissens "sauber" (ohne Glitches) und hat ein einigermaßen definiertes Phasenverhältnis zum Systemtakt, was das Rüberschaufeln von Daten vereinfachen sollte.
Hi Morin, eben, deswegen verwende ich ja auch ein Clock-Enable-Signal. Nur ist die Frage, wie ich damit ohne Glitches den Takt abschalten kann - oder was meinst du mit "Wenn du das partout nicht willst..." Zu 1: Wäre prinzipiell machbar, aber dennoch unschön, da (i) dadurch unheimlich viele Leerbefehle entstehen würden und (ii) die Verarbeitung unterschiedlich lang dauern kann. Zu 2: Genau das hatte ich ja oben beschrieben. Im Prinzip kann ich den halben Takt verwenden. Aber was so halt nicht geht, ist mehrere Prozessor-Takte hintereinander auszuführen.
@ Michael (Gast) >eben, deswegen verwende ich ja auch ein Clock-Enable-Signal. Nur ist die >Frage, wie ich damit ohne Glitches den Takt abschalten kann - oder was Ja, wenn man weiss wie. http://web.archive.org/web/20051118160637/www.xilinx.com/xlnx/xweb/xil_tx_display.jsp?sGlobalNavPick=&sSecondaryNavPick=&category=&iLanguageID=1&multPartNum=1&sTechX_ID=pa_six_easy Nr. 6 ist dein gesuchter Umschalter. MfG Falk
> eben, deswegen verwende ich ja auch ein Clock-Enable-Signal. Nur ist die > Frage, wie ich damit ohne Glitches den Takt abschalten kann - oder was > meinst du mit "Wenn du das partout nicht willst..." Ein sauberes Clock-Enable-Signal blockiert den Takt nicht, sondern sagt den Registern, sie sollen den Takt ignorieren. Die Register sind schon so gebaut, dass sie das können. Keine Glitches etc., der Takt läuft normal weiter, nur die Register nehmen keine neuen Werte auf. Das CE ist ein weiterer Steuereingang der Register neben CLK und Daten.
@ Morin: Ok, sorry, ich stand vorhin auf dem Schlauch... Natürlich, dass wäre die sauberste Lösung den Prozessor umzuschreiben und die einzelnen Register dort mit einem CE-Signal zu belegen... Allerdings in Anbetracht der noch zur Verfügung stehenden Zeit und dass der Quellcode ja nicht von mir kommt... aber vlt. ist das wirklich die Notlösung und ich muss in den sauren Apfel beißen, kurz vor Schluss noch einen fremden Code über den Haufen zu werfen... Aber vielen Dank auf alle Fälle. Ich behalt das mal im Hinterkopf. @ Falk: Vielen Dank für den Link. Sieht sehr vielversprechend aus. Das werd ich morgen gleich mal probieren :))
Funktioniert super :) Vielen, vielen Dank! Und das Gesamtsystem lässt sich synthetisiern und läuft. Falk, hast was gut bei mir! Gruß Michael
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.