www.mikrocontroller.net

Forum: FPGA, VHDL & Co. DCM (Spartan3)


Autor: Patric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

ich versuche die Frequenz einer mit DCM erzeugten Clock zur Laufzeit zu
verändern. Kann das funktionieren?

Autor: AxelMeineke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
What??? Was willst du ??? Irgendwie solltest du etwas genauer werden ...
Bis jetzt verstehe ich leider nur Bahnhof... Schreib doch bitte etwas
mehr als nen 1,5 Zeiler LOL...

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht nicht, da die generics für synthese benutzt werden, und dann
nachher nicht mehr verändert werden können.

Autor: Konstantin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich meine, es geht :-o

Ich würde sagen: es kann funktionieren :-)

Mit Generics hat es nicht unbedingt was zu tun. Irgendwo habe ich es
schon gesehen, komme jetzt aber nicht drauf, ob das Spartan 3 oder
Cyclone ist.

Konstantin

p.s.: wenn Du Dich erkundigt hast, sag' unbedingt BEscheid, ob das
geklappt hat /* Daumendrück */

Autor: Patric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Axel

Also nochmal ganz langsam. Man nehme einen DCM.
inst_DCM : DCM
generic map (
   CLKFX_DIVIDE      => 1,
   CLKFX_MULTIPLY    => 4
)

port map (CLKIN      => clk_in,
          CLKFX      => clkfb
)

Die Frequenz an CLKFX ist bestimmt durch:
CLKFX = (CLKFX_MULTIPLY / CLKFX_DIVIDE) * CLKIN

D.h. damit kann man (fast) jede beliebige Frequenz erhalten. Was ich
nun möchte ist die Parameter CLKFX_DIVIDE und CLKFX_MULTIPLY durch
extern anliegende Signale zu ändern um die Frequenz zu steuern. Wie das
vor der Synthese geht ist klar. Aber geht es auch irgendwie danach?

P.S. Zwei andere Leser haben den 1,5 Zeiler verstanden ;-)

Autor: Konstantin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Patric:
ich habe gerade Datenblatt von Xilinx angeschaut (solltest Du
vielleicht auch tun). Und muss sagen: es sieht schlecht aus :-(

Wozu brauchst Du sowas?... okay, egal, Du brauchst das, also hier ist
mein Lösungsvorschlag:

Du baust Dir einen Zähler, und trigerst einen beliebigen Pin. Der wird
dann extern auf ein CLOCK-Buffer geführt - also normal verdrahten. Und
schon hast Du Deinen eigenen Clock.
Im Endeffekt hast Du dann 2 Clockdomains: z.B. 100 Mhz, mit denen Du
den Zähler speist, und die andere Logic, die dann mit dem ... ach, hast
schon verstanden, oder?

Gutes Gelingen,

Konstantin

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
generics sind laut definition Konstanten. Aus den generics bestimmt die
Synthese wie die Hardware synthetisiert werden soll.  Nachträgliches
zuweisen in der gegossenen Hardware geht nicht. Ich würde versuchen
eine möglichst hohe Taktfrequenz mittels DCM zu erzeugen, eventuell
durch Kaskadierund mehrere DCM, und dann das ganze wieder mittels
counter herruntezuteilen.

Autor: Patric (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So mache ich das im Moment auch (siehe Anhang). Wäre eben sehr schön
gewesen, wenn das direkt mit DCM klappen würde.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Das Bild ist total unscharf. Ein neues wäre besser, damit ich mal
sehen kann was Du da genau gemacht hast, denn dies ist äußerst
interessant.

2. Kann man den globalen Clock Buffer (BufG) einfach so benutzen? Bei
mir hat das nie funktioniert. Zudem liegen die Clock Treiber sehr dicht
am Rand. Den neuen Clock, den Du über den Zähler erhälst, verbindest Du
mit dem BufG. Dadurch ensteht eine Clock-Skew, da der heruntergeteilte
Clockausgang eine Laufzeit zum BufG benötigt (kann eine ns betragen),
das ist somit immer eine unsaubere Lösung. Erst wenn das Signal wieder
auf der Clock-Leitung ist, besitzt das Signal wieder eine
Signalverzögerungszeit von wenigen Picosekunden. Am besten man kauft
einen Quarz mit der Frequenz die man benötigt (z.B. Auris.de dort kann
man Quarze in allen Frequenzen kaufen)

Viele Grüsse

Micahel

Autor: Patric (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das Bild nochmal grösser.

> Kann man den globalen Clock Buffer (BufG) einfach so benutzen? Bei
> mir hat das nie funktioniert.

Das wird in xapp462 so beschrieben. DCM output über BUFG nach aussen
und auch als Feedback zum DCM.
   clk_out <= clkfb;
   
   inst_DCM : DCM
      generic map ( CLKIN_PERIOD            => 20.0,
         DFS_FREQUENCY_MODE      => "LOW",
         STARTUP_WAIT            => TRUE
      )

      port map (CLKIN   => clk_in,
         CLK2X          => clk2x,
         CLKFB          => clkfb,
         DSSEN          => GND,
         PSINCDEC       => GND,
         PSEN           => GND,
         PSCLK          => GND,
         RST            => reset
      );

   inst_BUFG1 : BUFG
      port map (I =>  clk2x,
            O     => clkfb
      );

>  Den neuen Clock, den Du über den Zähler erhälst, verbindest Du
> mit dem BufG. Dadurch ensteht eine Clock-Skew, da der
heruntergeteilte
> Clockausgang eine Laufzeit zum BufG benötigt (kann eine ns
betragen),
> das ist somit immer eine unsaubere Lösung.

Das ist klar. Da ich aber mit 2 Clockdomains, die nur über einen
Dualport-RAM verbunden sind, arbeite spielt Skew keine Rolle. Ich
nutzte auch immer nur einen Teilerausgang gleichzeitig.

> Am besten man kauft einen Quarz mit der Frequenz die man benötigt
> (z.B. Auris.de dort kann man Quarze in allen Frequenzen kaufen)

Das ist aber unnötig. Mittels DCM (DFS) kann man (fast) jeden
beliebigen Takt erzeugen. Ein Standard-Quarz ist völlig ausreichend.
Wie ich oben schon erwähnt habe:
CLKFX = (CLKFX_MULTIPLY / CLKFX_DIVIDE) * CLKIN

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.