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


von Duke Scarring (Gast)


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:
1
    -- pragma translate_off
2
    dcm_reset <= simulation_stop;
3
    -- pragma translate_on
4
5
    ...
6
7
    -- use DCM_CLKGEN instead DCM_SP, because enhanced mul/div range
8
    dcm_clkgen_i0: dcm_clkgen
9
    generic map (
10
        clkfx_divide      => 125,
11
        clkfx_multiply    => 88,
12
        clkin_period      => 8.0
13
    )
14
    port map (
15
        rst       => dcm_reset,
16
        freezedcm => '0',       -- force '0' for working simulation
17
        clkin     => clk_125,
18
        clkfx     => dcm_clkgen_i0_clkfx
19
    );

Duke

von J. S. (engineer) Benutzerseite


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?

von Duke Scarring (Gast)


Lesenswert?

J. S. schrieb:
> Wie treibst Du simulationstechnisch deinen Oszillator?

Mit meiner Standardmethode:
1
    signal   simulation_run       : boolean := true;
2
3
    --  27 MHz, oscillator socket
4
    constant tb_user_clock_period : time := (1 sec / 27_000_000);
5
    signal   tb_user_clock        : std_logic := '0';
6
7
begin
8
9
    tb_user_clock <= not tb_user_clock after tb_user_clock_period / 2 when simulation_run;
10
    
11
    
12
    process
13
    begin
14
        wait <...>;
15
        simulation_run <= false;
16
        report "Simlation ended." severity note;
17
        wait;
18
    end process;

Duke

von Harald (Gast)


Lesenswert?

Hi Duke,
dein Beitrag hat mir den Tag gerettet, danke.

lg Harald

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.