Forum: FPGA, VHDL & Co. Eigene Clock auf Clocktree legen?


von S. K. (quaxx)


Lesenswert?

Moin,

ich benötige für ein Projekt verschiedene Taktgeschwindigkeiten. Mein 
Standardtakt hat eine Frequenz von 100MHz.
Für diverse Counter erzeugt mir der IP-Core "Clock-Wizard" einen 
zusätzlichen 300MHz Takt.

Nun kommt das Problem: Eine Komponenten benötigt einen 140kHz-Takt. 
Diesen kann ich nicht über den Clock-Wizard erzeugen lassen. Also habe 
ich über einen Counter und Comparewert einen 140kHz selber erzeugt. 
(nicht 100%ig diese Freqeunz, aber nahe genug dran, für meine 
Anwendung):
1
 Zaehler_140kHz_Takt: process(clk300)
2
 begin
3
    if rising_edge(clk300) then
4
        if cnt_140 < 2140   then          
5
            cnt_140 <= cnt_140 +1;
6
        else
7
            cnt_140 <= 0;           
8
        end if;   
9
     end if;
10
 end process; 
11
 
12
Takterzeugung_140kHz: process(cnt_140)      
13
 begin   
14
    if cnt_140 < 2140/2 then
15
        clk140 <= '0';
16
    else
17
        clk140  <= '1';
18
    end if;
19
 end process;

Nun ist das Problem, dass das Timing nicht hin haut. Dies wird vorallem 
daran liegen, dass mein selbererzeugter Takt als Signal anliegt, aber 
nicht auf dem Clocklayer (Clock tree?) geroutet wird.


Meine Frage ist nun:
Kann ich dem Implementierungstool die Info geben, dass hier "clk140" auf 
dem Clocklayergeroutet werden soll? Oder muss ich dies Erzeugung 
komplett anders gestalten?
Ich habe etwas über "BUFGCE" und dem constraint "create_generate_clock" 
gelesen, bin aber nicht wirklich schlau daraus geworden, wie genau 
dieses implementiert wird.

Habt ihr da eine Idee?

von Turmuhr Schätzer (Gast)


Lesenswert?

S. K. schrieb:
> Ich habe etwas über "BUFGCE" und dem constraint "create_generate_clock"
> gelesen, bin aber nicht wirklich schlau daraus geworden, wie genau
> dieses implementiert wird.

um ein signal auf den clocktree zu bekommen musst du es an die 
"schnittstelle" zum clocktree legen. Diese Schnittstelle ist der BUFG 
(und seine Varianten). Du musst also den BUFG instanziieren.

--

>"Nun kommt das Problem: Eine Komponenten benötigt einen 140kHz-Takt."
Takt ist nicht gleich takt, deine Komponente braucht sicherlich nur ein 
140 kHz Puls. das kannst du auch mit counter erzeugen und rausgeben. die 
clock-constraints und der clock-tree sind bei einem solchen 
"Pseudo"-Takt unnötig.

von Hans kanns (Gast)


Lesenswert?

Turmuhr Schätzer schrieb:
> Takt ist nicht gleich takt, deine Komponente braucht sicherlich nur ein
> 140 kHz Puls.

Macht man bekannterweise mit enable.

Andererseits lassen sich aus 100MHz sehr wohl 140kHz als echten Takt aus 
einer PLL erzeugen, indem man mit 7 multiplizert und dann durch 500 
teilt, wie eine einfache ->Primfaktorzerlegung aus Klasse 8 ergibt.

Mir graust es immer wieder zu sehen, dass solche einfachen Dinge nicht 
klar sind, bez. Leutz. die das nicht drauf haben, FPGAs machen wollen.

von S. K. (quaxx)


Lesenswert?

Turmuhr Schätzer schrieb:

> um ein signal auf den clocktree zu bekommen musst du es an die
> "schnittstelle" zum clocktree legen. Diese Schnittstelle ist der BUFG
> (und seine Varianten). Du musst also den BUFG instanziieren.


Alles klar, habs nun hinbekommen und mein Problem hat sich wie erhofft 
dadruch gelöst



Hans kanns schrieb:
> Turmuhr Schätzer schrieb:

> Mir graust es immer wieder zu sehen, dass solche einfachen Dinge nicht
> klar sind, bez. Leutz. die das nicht drauf haben, FPGAs machen wollen.

Naja irgendwann muss man mit sowas anfangen und sich einarbeiten, dann 
kennt man die offensichtlichen Lösungen evtl noch nicht. Wenn jeder 
alles können würde, dann bräuchte man keine Foren mehr.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Die Frage ist auch, ob man nicht mit einem 140 kHz Clock Enable arbeiten 
moechte? Dazu noch passende Multicycle Constraints, dann freut sich auch 
der Router. :-)

von S. K. (quaxx)


Lesenswert?

Hatte ich mir anfangs auch mal überlegt, aber es hat sich 
herausgestellt, dass ich auch die fallende Flanke des Clock benötige. 
Daher hatte ich mich gegen den Enable entschieden ;)

von Christophz (Gast)


Lesenswert?

Tobias B. schrieb:
> Die Frage ist auch, ob man nicht mit einem 140 kHz Clock Enable arbeiten
> moechte? Dazu noch passende Multicycle Constraints, dann freut sich auch
> der Router. :-)

S. K. schrieb:
> Hatte ich mir anfangs auch mal überlegt, aber es hat sich
> herausgestellt, dass ich auch die fallende Flanke des Clock benötige.
> Daher hatte ich mich gegen den Enable entschieden ;)

Dann halt ein 280 kHz Clock Enable oder zwei Enables mit je 140 KHz?

Was spricht gegen eine solche Lösung?

von S. K. (quaxx)


Lesenswert?

Christophz schrieb:
> Dann halt ein 280 kHz Clock Enable oder zwei Enables mit je 140 KHz?
>
> Was spricht gegen eine solche Lösung?

Eigentlich garnichts, habe ich nicht drüber nachgedacht. Irgendwann 
sieht man den Wald vorlauter Bäumen nicht mehr^^

Werde ich für die Zukunft im Hinterkopf behalten, nun läuft es alles 
ohne Probleme mit dem Takt auf dem clock tree.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

S. K. schrieb:
> Nun ist das Problem, dass das Timing nicht hin haut. Dies wird vorallem
> daran liegen, dass mein selbererzeugter Takt als Signal anliegt, aber
> nicht auf dem Clocklayer (Clock tree?) geroutet wird.

Wenn ich sowas lese, vermute ich einen gedanklichen Fehler ...

Weiter oben wurde ja schon angemerkt, dass du vmtl keinen Clock mit 
140kHz brauchst, sondern nur einen Pulse.

Den würdest du dann Taktsynchron zu den 300kHz so erzeugen und nutzen 
zB:
1
Zaehler_140kHz_Takt: process(clk300)
2
 begin
3
    if rising_edge(clk300) then
4
        clk140k <= '0';
5
        if cnt_140 < 2140   then          
6
            cnt_140 <= cnt_140 +1;
7
        else
8
            clk140k <= '1';
9
            cnt_140 <= 0;           
10
        end if;   
11
     end if;
12
 end process; 
13
14
process(clk300)
15
begin
16
  if rising_edge(clk300) then
17
    if clk140k='1' then
18
      -- irgendwas, was 140kHz clock braucht
19
    end if;
20
  end if;
21
end process;

von Edi M. (Gast)


Lesenswert?

S. K. schrieb:
> dass ich auch die fallende Flanke des Clock benötige.

Du weißt inzwischen, dass das kein Takt ist (und eine "clock" schon gar 
nicht)?

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.