Delay-Funktion im DCM des Spartan-3E

Gast #983603
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
#983743
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

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