Hi,
bin zwar selber Anfänger würde aber mal es über 15 Hilfssignale machen,
einen Counter definieren für die Taktverschiebungen und über if then,
oder case Anweisungen machen.
Hier mal ein Beispiel was ich so getestet habe um von 60 Mhz auf 20 Mhz
jeweils um 1 Takt verschoben.
1 | SIGNAL CNT : integer range 0 to 2 :=0;
|
2 |
|
3 | -----------------------------
|
4 | ZAEHLEN: process (CLK_60MHZ)
|
5 | begin
|
6 | if rising_edge (CLK_60MHZ) then
|
7 | if TAKT_RESET = '1' then
|
8 | CNT<=0;
|
9 | elsif CNT = 2 then
|
10 | CNT <=0;
|
11 | else
|
12 | CNT <= CNT + 1;
|
13 | end if;
|
14 | end if;
|
15 | end process ZAEHLEN;
|
16 | ----------------------------
|
17 | TAKT :process (CNT)
|
18 | begin
|
19 |
|
20 | if TAKT_RESET = '1' then
|
21 | CLK_OUT0_20MHZ <= '0';
|
22 | CLK_OUT1_20MHZ <= '0';
|
23 | CLK_OUT2_20MHZ <= '0';
|
24 | CLK_OUT3_20MHZ <= '0';
|
25 | elsif CNT = 0 then
|
26 | CLK_OUT0_20MHZ <= '1';
|
27 | CLK_OUT1_20MHZ <= '1';
|
28 | CLK_OUT2_20MHZ <= '0';
|
29 | CLK_OUT3_20MHZ <= '0';
|
30 | elsif CNT = 1 then
|
31 | CLK_OUT0_20MHZ <= '0';
|
32 | CLK_OUT1_20MHZ <= '0';
|
33 | CLK_OUT2_20MHZ <= '1';
|
34 | CLK_OUT3_20MHZ <= '0';
|
35 | elsif CNT = 2 then
|
36 | CLK_OUT0_20MHZ <= '0';
|
37 | CLK_OUT1_20MHZ <= '0';
|
38 | CLK_OUT2_20MHZ <= '0';
|
39 | CLK_OUT3_20MHZ <= '1';
|
40 |
|
41 |
|
42 | end if;
|
43 | end process TAKT;
|
Wobei hier noch ein Latch auftritt da ich kein else Zweig hab, aber das
hat andere Gründe. Für Verständniss vielleicht hilfreich
Gruß