DCM (Spartan3)

Gast #251291
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 */
Gast #251292
Lesenswert?

@Axel

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

7
port map (CLKIN      => clk_in,
8
          CLKFX      => clkfb
9
)

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 ;-)
Gast #251293
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
Gast #251294
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.
Gast #251296
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
Gast #251297
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.
1
   clk_out <= clkfb;
2
   
3
   inst_DCM : DCM
4
      generic map ( CLKIN_PERIOD            => 20.0,
5
         DFS_FREQUENCY_MODE      => "LOW",
6
         STARTUP_WAIT            => TRUE
7
      )
8

9
      port map (CLKIN   => clk_in,
10
         CLK2X          => clk2x,
11
         CLKFB          => clkfb,
12
         DSSEN          => GND,
13
         PSINCDEC       => GND,
14
         PSEN           => GND,
15
         PSCLK          => GND,
16
         RST            => reset
17
      );
18

19
   inst_BUFG1 : BUFG
20
      port map (I =>  clk2x,
21
            O     => clkfb
22
      );

>  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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren