www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Simulation von DCM_CLKGEN (Spartan6)


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Duke Scarring (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo!

Wenn sich mal jemand wundern sollte, warum in der Simulation aus dem 
DCM_CLKGEN (nicht DCM_SP, nicht DCM_ADV) nix rauskommt, dann liegt es 
möglicherweise daran, das der Eingang FREEZEDCM unbeschaltet ist.

Im Simulationsmodell wird er zwar intern auf 'L' gezogen, aber das geht 
bei der Abfrage des Wertes schief (DCM_CLKGEN.vhd 1.23 2011/06/23, Zeile 
400, ISE 13.3).

Außerdem besitzt der DCM_CLKGEN einen internen Oszillator. Wenn die 
Simulation automatisch aufhören soll, muß man den Oszillator anhalten 
(RST = '1').

Meine (nun simulativ funktionierende) Instanziierung sieht so aus:
    -- pragma translate_off
    dcm_reset <= simulation_stop;
    -- pragma translate_on

    ...

    -- use DCM_CLKGEN instead DCM_SP, because enhanced mul/div range
    dcm_clkgen_i0: dcm_clkgen
    generic map (
        clkfx_divide      => 125,
        clkfx_multiply    => 88,
        clkin_period      => 8.0
    )
    port map (
        rst       => dcm_reset,
        freezedcm => '0',       -- force '0' for working simulation
        clkin     => clk_125,
        clkfx     => dcm_clkgen_i0_clkfx
    );

Duke

Autor: J. S. (engineer) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hm, komisch, ich arbeite gerade mit dem S6 und nutze einen ähnlichen 
Clock-GEN-Konstrukt. Bisher keine Probleme. Werde das mal 
nachvollziehen.

Wie treibst Du simulationstechnisch deinen Oszillator?

Autor: Duke Scarring (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
J. S. schrieb:
> Wie treibst Du simulationstechnisch deinen Oszillator?

Mit meiner Standardmethode:
    signal   simulation_run       : boolean := true;

    --  27 MHz, oscillator socket
    constant tb_user_clock_period : time := (1 sec / 27_000_000);
    signal   tb_user_clock        : std_logic := '0';

begin

    tb_user_clock <= not tb_user_clock after tb_user_clock_period / 2 when simulation_run;
    
    
    process
    begin
        wait <...>;
        simulation_run <= false;
        report "Simlation ended." severity note;
        wait;
    end process;

Duke

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net