Spartan3: zwei DCMs in Serie schalten

Gast #2885843
Lesenswert?

Hallo Freunde,

ich hab folgende Anforderung:
In einem Spartan3 mit einem 80MHz-Oscillator muß ich einen 20MHz-Takt 
und einen 20MHz-Takt mit 90° Phase erzeugen.
Mein erster Ansatz sieht so aus:
1. DCM: Oscillator-Takt ("CLK_OSC80") durch 4 teilen = iClock_80divby4
2. DCM: aus iClock_80divby4 den 20MHz und  20MHz+90° erzeugen
1
iDcmClockRam80 : entity work.DCM_DivBy4   
2
  port map(
3
    CLKIN_IN     => CLK_OSC80,
4
    RST_IN       => '0',
5
    CLKDV_OUT    => iClock_80divby4,
6
    CLKIN_IBUFG_OUT   => open,
7
    CLK0_OUT     => iClock_80,
8
    LOCKED_OUT   => open  
9
);
10

11
iDcmClockRam20 : entity work.DCM_Phase90
12
  port map(
13
    CLKIN_IN     => iClock_80divby4,
14
    RST_IN       => '0',
15
    CLKIN_IBUFG_OUT   => open,
16
    CLK0_OUT     => iClock_20,
17
    CLK90_OUT    => iClock_20_90,
18
    LOCKED_OUT   => open  
19
);

Jetzt meldet mir die ISE einen Fehler:

NgdBuild:770 - IBUFG 'iDcmClockRam20/CLKIN_IBUFG_INST' and BUFG
   'iDcmClockRam80/CLKDV_BUFG_INST' on net 'iClock_80divby4' are lined 
up in
   series. Buffers of the same direction cannot be placed in series.

Ich versteh nicht so ganz, was mir dieser Fehler sagen will:
Was meint ISE mit "the same direction"?
Kann man DCMs beim Spartan3 grundsätzlich nicht in Serie schalten?
Wie kann ich das alternativ machen?
#2885887
Lesenswert?

Die 90° Ausgabe eines /4 geteilten Taktes geht da aber nur über 2 DCM in 
Reihe.
Du musst nur einstellen, dass der erste DCM am Ausgang keinen BUFG hat 
oder halt beim 2. einstellen dass am Eingang kein BUFG ist.
Standardmäßig macht der BUFG an Eingang und Ausgang, so sieht es jetzt 
vermutlich aus:

Clock -> BUFG -> DCM1 -> BUFG -> BUFG -> DCM2
Gast #2885917
Lesenswert?

Christian R. schrieb:
> Die 90° Ausgabe eines /4 geteilten Taktes geht da aber nur über 2 DCM in
> Reihe.
stimmt auffallend. Es gibt ja auch nur die Attribute
CLKDV_DIVIDE
CLKFX_DIVIDE
CLKFX_MULTIPLY

und die wirken sich halt nur auf die CLKDV bzw. CLKFX Ausgänge aus,
nicht auf CLK0, CLK90 usw.


> Standardmäßig macht der BUFG an Eingang und Ausgang, so sieht es jetzt
> vermutlich aus:
>
> Clock -> BUFG -> DCM1 -> BUFG -> BUFG -> DCM2

nicht ganz, steht doch in der Fehlermeldung der ISE, wie's aussieht:
Clock-Pin -> IBUFG -> DCM1 -> BUFG -> IBUFG -> DCM2

der IBUFG vor DCM2 muß weg.
Also am besten die DCMs direkt als DCM_SP instanziieren, und die 
benötigten Buffer auch direkt instanziieren.

Gruß,
Thosch
Gast #2885970
Lesenswert?

Danke Euch allen.

Jetzt mach ich eben den IP-Core-Generator auf und was muß ich sehen?
Es wird standardmäßig ein IP-Core aus zwei kaskadierten DCMs angeboten, 
der ganz genau das kann, was ich wollte! Warum hab ich den vorher nicht 
gesehen? Mir stehen die Haare zu Berge...
Gast #2886249
Lesenswert?

Christian R. schrieb:
> Richtig, hab die "I" unterschlagen. Kann man ja aber im Core-Gen auch
> alles einstellen, da muss man nicht unbedingt die DCM_SP selbst
> instanziieren.

Jo, das ist die Macht der Gewohnheit...
Da ich normalerweise wenig mit VHDL mache (fast alles als hierarchiche 
Schematics, meine Root-Designs sind EDIF-Netzlisten) arbeite ich da 
sowieso mit den Primitiva als Symbol.
Und bevor ich für solche Trivialitäten den Coregen anwerfe, packe ich 
lieber die paar BUFGs und DCMs in meinen Schaltplan und verdrahte sie. 
:)

Für komplexe Cores mache ich mir dann einen VHDL-Wrapper, der mit einem 
selbsterstellten Symbol übereinstimmt, so kommen dann die VHDL-Cores ins 
Design.

Gruß,
Thosch
Gast #2887251
Lesenswert?

Bronco schrieb:
> Es wird standardmäßig ein IP-Core aus zwei kaskadierten DCMs angeboten,
>
> der ganz genau das kann, was ich wollte!
Richtig, wollte ich Dir gerade empfehlen,

 Warum hab ich den vorher nicht gesehen?
Tja, das kann ich dir nicht sagen.

Der kaskadierte DCM scheint im Übrigen ein Mysterium in den S3 zu sein:
Manuell nachbauen konnte ich ihn auch noch nicht. Nicht im S3 und nicht 
im S6.
#2887733
Lesenswert?

Neuinbibi schrieb:
> Der kaskadierte DCM scheint im Übrigen ein Mysterium in den S3 zu sein:
> Manuell nachbauen konnte ich ihn auch noch nicht. Nicht im S3 und nicht
> im S6.

Das geht schon, aber meistens schlägt dann eine andere kranke 
Beschräkung im Clock-Netzwerk der Spartaner zu. Ich hab das auch in 
einem Fall mal hinbekommen. Man muss nur mi den Buffern aufpassen, dann 
klappts eigentlich.
#2888154
Lesenswert?

> Der kaskadierte DCM scheint im Übrigen ein Mysterium in den S3 zu sein:

Hm, dann habe ich bei meinem Design mit 5 DCMs im S3E wohl Glück gehabt. 
Takteingang ist 16.384MHz, gebraucht werden 33 (PCI), 66 (System) und 
133 (DDR, einmal intern+Ausgang, einmal zu Speichern der Eingänge). 
Alles von Hand instanziiert samt Buffern. Das ist alles soweit synchron, 
dass die Übergaben zwischen den Taktebenen ohne massenweise 
Registerstufen gehen...

Allerdings ist es schon auch nötig, die Orte der DCMs und Buffer 
ebenfalls vorzugeben, sonst wird das nix...

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