Ich habe ein Spartan3A, der mit einem 25MHz Clock versorgt wird.
Das implementierte Design läuft mit ungefähr 130MHz.(Das heisst es
zumindest am Ende des Synthesize-Reports).
Nun muss ich das Design mit 100MHz laufen lassen. Dazu will ich einen
DCM verwenden, der den Eingangsclock vervierfacht.
Wenn ich nun diesen instanziere (ich liess ihn vom Coregenerator
generieren), verlangsamt das das Design so massiv, dass mir die DLL
nichts mehr bringt: Minimum period: 29.704ns (Maximum Frequency:
33.665MHz).
Was ist hier los?
Hier die Komponentendeklaration:
1 | COMPONENT DLL_25_to_100MHz
|
2 | PORT(
|
3 | CLKIN_IN : IN std_logic;
|
4 | RST_IN : IN std_logic;
|
5 | CLKFX_OUT : OUT std_logic;
|
6 | CLK0_OUT : OUT std_logic;
|
7 | LOCKED_OUT : OUT std_logic
|
8 | );
|
9 | END COMPONENT;
|
und hier die Instanzierung:
1 | Inst_DLL_25_to_100MHz: DLL_25_to_100MHz PORT MAP(
|
2 | CLKIN_IN => CLK_25M,
|
3 | RST_IN => DLL_RST,
|
4 | CLKFX_OUT => CLK_100M,
|
5 | CLK0_OUT => DLL_CLK0out,
|
6 | LOCKED_OUT => DLL_locked
|
7 | );
|
Die DLL resette ich so:
1 | -- Die DLL während 5 Clock-Zyklen resetten
|
2 | reset_dll: process(CLK_25M)
|
3 | begin
|
4 | if(rising_edge(CLK_25M)) then
|
5 | DLL_RST <= reset_cnt(4);
|
6 | reset_cnt <= reset_cnt(3 downto 0) & '0';
|
7 | end if;
|
8 | end process reset_dll;
|
Das LOCKED_OUT beachte ich im Moment nicht.
Es ist mir nicht klar, was ich mit dem CLK0_OUT-Signal machen soll. Wozu
ist das gut? Ich hänge das jetzt lediglich an ein unbenutztes Signal.
Liegt evtl. hier das Problem?