Forum: FPGA, VHDL & Co. DCM verzögerung kompensieren


von Ajo (Gast)


Lesenswert?

Hallo zusammen,

ich hab nach langem wieder mal mit VHDl zutun.
Die aufgabe lautet hier einen PCI104 bridge aufzubauen mit einem Takt 
von 33MHz. Ich darf hier max. 2ns von Device zu Device verzögerung 
haben.
Nun dachte ich mir, dass ich hier ein DCM einsetzen, der die Verzögerung 
etwas kompensieren kann.
Das Werkzeug(DCM-WIZARD) ist ganz schön aufwendig zu verstehen, sobald 
man mehr macht als nur zu teilen oder zu Multiplizieren.

Hat jemand hier damit etwas Erfahrungen?

Danke,
Ajo

von Ajo (Gast)


Lesenswert?

Hallo zusammen,

kann mir hier wirklich niemand helfen --:)

Gruss,
Ajo

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Hat jemand hier damit etwas Erfahrungen?
Mit was denn?
Dem DCM?
Dem DCM-Wizzard?
Dem PCI-Bus?
Einer PCI-Bridge?

Lies mal die Appnotes zur DCM.
Der Clock-Manager macht letztlich nichts anderes, als einen Ausgang auf 
einen Eingang zu beziehen und deren Frequenz und Phase zueinander 
auszuregeln.

Ich nehme nicht den Wizzard, sondern verdrahte den DCM von Hand, dann 
weiß ich was ich habe ;-)

von Ajo (Gast)


Lesenswert?

Endlich jemand!
Danke Lothar.

ich hab mir das code durch DCM erzugt und in mein VHDL-code eingebunden.
am besten zeige ich dir das code und vielleicht fehlt dir was ein, was 
ich falsch gemacht habe:

-------------------------------begin 
DCM--------------------------------------------------

  GND_BIT <= '0';
   CLK0_OUT <= CLKFB_IN;
   CLKDV_BUFG_INST : BUFG
      port map (I=>CLKDV_BUF,
                O=>CLKDV_OUT);

   CLKFX_BUFG_INST : BUFG
      port map (I=>CLKFX_BUF,
                O=>CLKFX_OUT);

   CLK0_BUFG_INST : BUFG
      port map (I=>CLK0_BUF,
                O=>CLKFB_IN);

   DCM_SP_INST : DCM_SP
   generic map( CLK_FEEDBACK => "1X",
           CLKDV_DIVIDE => 10.00,--2.0,
           CLKFX_DIVIDE => 4,
           CLKFX_MULTIPLY => 2,
           CLKIN_DIVIDE_BY_2 => FALSE,
           CLKIN_PERIOD => 30.30,
           CLKOUT_PHASE_SHIFT => "NONE",
           DESKEW_ADJUST => "SOURCE_SYNCHRONOUS",
           DFS_FREQUENCY_MODE => "HIGH",
           DLL_FREQUENCY_MODE => "LOW", --"LOW",
           DUTY_CYCLE_CORRECTION => FALSE, -- TRUE,
           FACTORY_JF => x"C080",
           PHASE_SHIFT => 10,
            STARTUP_WAIT => FALSE)
      port map (CLKFB=>CLKFB_IN,
                CLKIN=>CLOCK,  --übergabe 33MHz an DCM CLK input
                DSSEN=>GND_BIT,
                PSCLK=>GND_BIT,
                PSEN=>GND_BIT,
                PSINCDEC=>GND_BIT,
                RST=>NotReset, --RST_IN,
                CLKDV=>CLKDV_BUF,
                --CLKFX=>CLKFX_BUF,
    CLKFX=>CLK0,
                CLKFX180=>open,
                CLK0=>CLK0_BUF,
                CLK2X=>open,
                CLK2X180=>open,
                CLK90=>open,
                CLK180=>open,
                CLK270=>open,
                LOCKED=>LOCKED_OUT,
                PSDONE=>open,
                STATUS=>open);
-------------------------------end 
DCM--------------------------------------------------------

Danke!

von Christian R. (supachris)


Lesenswert?

Wie wäre es, wenn du den Abschnitt mit dem DCM im Datenblatt genau lesen 
würdest? Ich finde, da steht alles genauestens und recht verständlich 
erklärt drin. Ich arbeite immer mit dem Wizzard, hat immer gut geklappt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> was ich falsch gemacht habe:
Das kommt darauf an, was du willst...
Was soll der jetzt machen, und was tut er nicht? Was tust du mit Teilern 
herum, wenn du "nur" eine Phasenverschiebung korrigieren willst?

von Ajo (Gast)


Lesenswert?

> was ich falsch gemacht habe:
Das kommt darauf an, was du willst...

>>ich würde gerne den Takt eingang CLK0, der nach aussen geht
möglichst ohne verzögerung(z.b. FPGA Pin zu Pin verzögerung) weiter 
geben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ich würde gerne den Takt eingang CLK0, der nach aussen geht ...
???
Du möchtest den PCI-Takt, der z.B. am Pin 1 herienkommt, auf einem 
anderen z.B. Pin 2 möglichst ohne Verzögerungen reproduzieren?

von Ajo (Gast)


Lesenswert?

Du möchtest den PCI-Takt, der z.B. am Pin 1 herienkommt, auf einem
anderen z.B. Pin 2 möglichst ohne Verzögerungen reproduzieren?

Ganz genau Lothar.
Das will ich erreichen.
Kannst du mir da paar tips geben?
Grüsse

PS: Schöne Ostern

von Christian R. (supachris)


Lesenswert?

Naja, dazu müsstest du wissen, wieviel Gesamt-Durchlauf-Verzögerung du 
in dem FPGA hat, da kannst du den DCM so einstellen, dass er die gerade 
ausgleicht, also mit dem Phase Shift, evtl. im Kombination mit dem 270° 
Ausgang. Dann stellst du die Phase so ein, dass du insgesamt 360° 
erreichst.

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
Noch kein Account? Hier anmelden.