Simulation von DCM_CLKGEN (Spartan6)

Gast #2633250
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
Gast #2634326
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

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