www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Takt abschalten bzw. unterbrechen mit dem Spartan II E


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  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.xili...

Nr. 6 ist dein gesuchter Umschalter.

MfG
Falk

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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 :))

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert super :) Vielen, vielen Dank! Und das Gesamtsystem lässt 
sich synthetisiern und läuft. Falk, hast was gut bei mir!

Gruß Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.