Forum: FPGA, VHDL & Co. Verschiedene Takte in einem Design


von Stefan (Gast)


Lesenswert?

Hallo,

ich arbeite gerade mit dem Spartan3 Eval.-Board.
Der Takt am Clock Eingang beträgt 50MHz, intern bräuchte ich aber neben
den 50MHz noch einen 2MHz Takt.
Ist es ratsam hierfür die 50MHz über einen Zähler zu teilen? Dann
benutze ich, soweit ich das verstehe, keine interne
Taktleitung mehr und somit können Laufzeitverzögerungen (Skew Rate) an
meinen 2MHz Modulen auftreten, oder?
Wie würdet Ihr dieses Problem "sauber" lösen?

Danke schon mal für Eure Hilfe!

Gruß
Stefan

von FPGAküchle (Gast)


Lesenswert?

Also skew wird jedes taktnetzwerk seperat angegeben, du hast also einen
skew auf den 50MHz und einen anderen auf den 2 MHz Netzwerk. der skew
ist unabhängig von der takterzeugung, skew entsteht wenn das Taktsignal
nicht über spezielle Leitungen geführt wird. Der Taktteiler
ist also OK. Du solltest allerdings nach dem Teiler einen BUFG
einfügen.

beispiel folgt später, wenn kein anderer schneller ist.

von axel (Gast)


Lesenswert?

Zur erklärung: BUFG ist eine Globale Clockleitung. In deinem Falle hast
du 8 zur verfügung. Die sind spezielle nur für Taktsignale. Wenn mich
nicht alles täusche gewährleisten die einen nahezu synkronen Takt an
allen im Design verwendeten Flipflops. Man korrigiere mich wenn ich da
falsch liege :-)
Probiers mal mit dem Teiler:
1
process (clk40MHz, rst)  -- Erzeugung des 2 MHz Takt
2
variable teiler_2Mhz   : integer range 255 downto 0;
3
4
begin
5
  if rst = '1' then
6
    teiler_2Mhz := 9;
7
    elsif clk40MHz'event and clk40MHz = '1' then
8
       if teiler_2Mhz = 0 then     
9
         teiler_2Mhz := 9;
10
           clk2Mhz_int <= not clk2Mhz_int;  
11
       else
12
          teiler_2Mhz := teiler_2Mhz - 1;
13
      end if;
14
  end if;  
15
end process;

Ich habs grad zusammengetippt. Also ohne Gewähr :-)


Axel

von axel (Gast)


Lesenswert?

Ups das war für 40 MHZ... sorry. Naja aber das kann man ja anpassen.

von Matthias (Gast)


Lesenswert?

Du kannst anstatt dem Teiler über Zähler auch einen der integrierten DCM
(Digital Clock Manager) benutzen, um deinen Zieltakt zu erzeugen. Dieser
synchronisiert dann die beiden Takte auch korrekt.

von axel (Gast)


Lesenswert?

Stimmt. Aber das geht nur bis 1 Mhz oder wo war noch die Grenze?

von FPGA-User (Gast)


Lesenswert?

@Stefan

sollen die beiden Takte synchron sein ?
Falls ja, dann scheidet der Taktteiler aus, es sei denn,
Du nimmst das damit generierte Signal nur als Clock-Enable
und lässt trotzdem alles generell mit 50 MHz laufen.

Die sichere Methode für mehrere synchrone Clocks ist die
Verwendung einer DCM bzw. PLL/DLL.

Falls asynchron OK ist, dann geht auch der Taktteiler.

von Stefan (Gast)


Lesenswert?

Danke für Eure bisherigen und noch kommenden Antworten!

@FPGA-User
In meinem Fall sind die 2MHz als Clock-Enable ausreichend. Würde mich
aber trotzdem noch interessieren wie ich einen 2. Takt auf eine globale
Taktleitung bekommen. So wie es aussieht geht es ja auch ohne DCM. Denn
wenn ich es richtig verstanden habe kann ich auch das durch einen
Zähler generierte 2. Taktsignal auf einen BUFG bringen.

@FPGAküchle
>> Du solltest allerdings nach dem Teiler einen BUFG einfügen.

Wäre super wenn Du mir kurz auf die Sprünge hilfst, wie ich meinen mit
Hilfe eines Zählers generierten Takt auf einen BUFG gebe.

von axel (Gast)


Lesenswert?

1
global Buf Clock2_bufg : bufg port map(i => clock2, o => clock2_int);
Dann ist das Signal clock2 dein Takt und clock2_int dein Takt auf dem
bufg.


Axel

von Horst (Gast)


Lesenswert?

Hi,

was ist eigentlich mit Clock Enable gemeint?!?
Variable mit bollean-Funktion in einem Prozess für Taktteiler je nach
Bedarf steuern, und dann die jeweiligen Taktteiler mit if-Funktion
steuern?!?

In etwa so:
IF Taktteiler_enable THEN
 Takt_2 <= '1';
ELSE
 Takt_2 <= '0';
END IF;

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.