Forum: FPGA, VHDL & Co. Delay-Funktion im DCM des Spartan-3E


von Peter (Gast)


Lesenswert?

Servus zusammen,

ich versuche ein 13 MHz Signal in 500 ps Schritten zu verzögern, und das 
ganze einstellbar.
Derzeit experimentiere ich mit einem Spartan-3E Starter Kit und möchte 
die im Spartan verfügbaren DCMs nutzen. Diese bieten zwei 
Delay-Funktionen:
- Fixed Delay
- Variable Delay

Leider bekomme das variable Delay nicht sinnvoll simuliert :-(
Zum erstellen benutze ich den Clock Wizard von ISE 10.1 (mit SP 2) und 
den auf dem Board vorhandenen 50 MHz Takt. Den Phaseshift Wert habe ich 
frei Schnauze mal auf 20 gesetzt.
Der spuckt mir folgenden Code aus:
1
library ieee;
2
use ieee.std_logic_1164.ALL;
3
use ieee.numeric_std.ALL;
4
library UNISIM;
5
use UNISIM.Vcomponents.ALL;
6
7
entity Phaseshift is
8
   port ( CLKIN_IN        : in    std_logic; 
9
          PSCLK_IN        : in    std_logic; 
10
          PSEN_IN         : in    std_logic; 
11
          PSINCDEC_IN     : in    std_logic; 
12
          RST_IN          : in    std_logic; 
13
          CLKIN_IBUFG_OUT : out   std_logic; 
14
          CLK0_OUT        : out   std_logic; 
15
          LOCKED_OUT      : out   std_logic; 
16
          PSDONE_OUT      : out   std_logic);
17
end Phaseshift;
18
19
architecture BEHAVIORAL of Phaseshift is
20
   signal CLKFB_IN        : std_logic;
21
   signal CLKIN_IBUFG     : std_logic;
22
   signal CLK0_BUF        : std_logic;
23
   signal GND_BIT         : std_logic;
24
begin
25
   GND_BIT <= '0';
26
   CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
27
   CLK0_OUT <= CLKFB_IN;
28
   CLKIN_IBUFG_INST : IBUFG
29
      port map (I=>CLKIN_IN,
30
                O=>CLKIN_IBUFG);
31
   
32
   CLK0_BUFG_INST : BUFG
33
      port map (I=>CLK0_BUF,
34
                O=>CLKFB_IN);
35
   
36
   DCM_SP_INST : DCM_SP
37
   generic map( CLK_FEEDBACK => "1X",
38
            CLKDV_DIVIDE => 2.0,
39
            CLKFX_DIVIDE => 1,
40
            CLKFX_MULTIPLY => 4,
41
            CLKIN_DIVIDE_BY_2 => FALSE,
42
            CLKIN_PERIOD => 20.000,
43
            CLKOUT_PHASE_SHIFT => "VARIABLE",
44
            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
45
            DFS_FREQUENCY_MODE => "LOW",
46
            DLL_FREQUENCY_MODE => "LOW",
47
            DUTY_CYCLE_CORRECTION => TRUE,
48
            FACTORY_JF => x"C080",
49
            PHASE_SHIFT => 20,
50
            STARTUP_WAIT => FALSE)
51
      port map (CLKFB=>CLKFB_IN,
52
                CLKIN=>CLKIN_IBUFG,
53
                DSSEN=>GND_BIT,
54
                PSCLK=>PSCLK_IN,
55
                PSEN=>PSEN_IN,
56
                PSINCDEC=>PSINCDEC_IN,
57
                RST=>RST_IN,
58
                CLKDV=>open,
59
                CLKFX=>open,
60
                CLKFX180=>open,
61
                CLK0=>CLK0_BUF,
62
                CLK2X=>open,
63
                CLK2X180=>open,
64
                CLK90=>open,
65
                CLK180=>open,
66
                CLK270=>open,
67
                LOCKED=>LOCKED_OUT,
68
                PSDONE=>PSDONE_OUT,
69
                STATUS=>open);
70
   
71
end BEHAVIORAL;

Wenn ich mir dazu nun eine Waveform Testbench erstelle, und das ganze 
simuliere, bekomme ich keine Sinnvollen Ergebnisse.
Sprich - ich erable den Phaseshift-Increment für einen Takt, warte auf 
das PSdone Signal, erhöhe um einen weiteren Wert und so weiter. Gemessen 
zeigt sich jedoch KEIN Laufzeitunterschied zwischen den Signalen am 
Eigang und nach dem DCM.

Habt ihr Erfahrungen mit dem DCM und evtl Tipps zur Simulation?
Wäre über jeden Hinweis sehr dankbar!

Grüße Peter

von Falk B. (falk)


Lesenswert?

@  Peter (Gast)

>Leider bekomme das variable Delay nicht sinnvoll simuliert :-(

Vergiss die Simulation. Die bringt wenig und ist aufwändig. AFIAK muss 
man Modelsim dazu auf jeden Fall in der Auflösung ps laufen lassen, 
sonst geht es nicht. Mach die Messung mit nem Oszi, das ist sinnvoller.

MFG
Falk

von Peter (Gast)


Lesenswert?

Da hattest Du wohl recht.
Die unsinnige Simulation zeigte sich unterm Oszi als durchaus brauchbare 
Umsetzung eines Phaseshifts.
Danke und Grüße

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.