mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;

entity Phaseshift is
   port ( CLKIN_IN        : in    std_logic; 
          PSCLK_IN        : in    std_logic; 
          PSEN_IN         : in    std_logic; 
          PSINCDEC_IN     : in    std_logic; 
          RST_IN          : in    std_logic; 
          CLKIN_IBUFG_OUT : out   std_logic; 
          CLK0_OUT        : out   std_logic; 
          LOCKED_OUT      : out   std_logic; 
          PSDONE_OUT      : out   std_logic);
end Phaseshift;

architecture BEHAVIORAL of Phaseshift is
   signal CLKFB_IN        : std_logic;
   signal CLKIN_IBUFG     : std_logic;
   signal CLK0_BUF        : std_logic;
   signal GND_BIT         : std_logic;
begin
   GND_BIT <= '0';
   CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
   CLK0_OUT <= CLKFB_IN;
   CLKIN_IBUFG_INST : IBUFG
      port map (I=>CLKIN_IN,
                O=>CLKIN_IBUFG);
   
   CLK0_BUFG_INST : BUFG
      port map (I=>CLK0_BUF,
                O=>CLKFB_IN);
   
   DCM_SP_INST : DCM_SP
   generic map( CLK_FEEDBACK => "1X",
            CLKDV_DIVIDE => 2.0,
            CLKFX_DIVIDE => 1,
            CLKFX_MULTIPLY => 4,
            CLKIN_DIVIDE_BY_2 => FALSE,
            CLKIN_PERIOD => 20.000,
            CLKOUT_PHASE_SHIFT => "VARIABLE",
            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
            DFS_FREQUENCY_MODE => "LOW",
            DLL_FREQUENCY_MODE => "LOW",
            DUTY_CYCLE_CORRECTION => TRUE,
            FACTORY_JF => x"C080",
            PHASE_SHIFT => 20,
            STARTUP_WAIT => FALSE)
      port map (CLKFB=>CLKFB_IN,
                CLKIN=>CLKIN_IBUFG,
                DSSEN=>GND_BIT,
                PSCLK=>PSCLK_IN,
                PSEN=>PSEN_IN,
                PSINCDEC=>PSINCDEC_IN,
                RST=>RST_IN,
                CLKDV=>open,
                CLKFX=>open,
                CLKFX180=>open,
                CLK0=>CLK0_BUF,
                CLK2X=>open,
                CLK2X180=>open,
                CLK90=>open,
                CLK180=>open,
                CLK270=>open,
                LOCKED=>LOCKED_OUT,
                PSDONE=>PSDONE_OUT,
                STATUS=>open);
   
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.