Forum: Mikrocontroller und Digitale Elektronik Freuquenz teilen


von Jürgen S. (rifay)


Lesenswert?

Hallo.

Ich muss meine Taktfrequenz=50MHz mit einem Teiler auf 9600 teilen.
Der Teiler entspricht ca. 5208. Dafür würde ich folgende Teiler 
verwenden:

1x 13er
2x 10er
1x 4er

Wie kann ich das nun in VHDL realisieren?

von Josef Huber (Gast)


Lesenswert?

wenn ich 50.000.000 Hz durch 9600 teile, bringt mir mein Taschenrechner 
die Zahl 5.208,3333333 1/3. Anders gesagt, wenn ich 50.000.000 Hz durch 
13 teile bekomme ich 3.846.153,846. Diese Zahl durch 10 und das 
Ergebniss nochmal durch 10 teile, habe ich am Taschenrechner 
38.461.5385. Vorige Zahl durch 4, zeigt mein Rechner 9.615,3846. Oder 
soooooooooooooooooooo

Ich glaube ich weis was Sie als nächstes fragen.

von Bernd (Gast)


Lesenswert?

zähl doch einfach die Takte und wenn du 4800 Zähler hast toggelst du 
macht dann 9600Hz.

von Jürgen S. (rifay)


Lesenswert?

ja, die Berechnung habe ich genauso. Aber wie kann ich das in vhdl 
programmieren? Kann man das in einer schleife realisieren? wenn ja, kann 
ich die einzelnen Teiler weglassen und nur 50MHz/5208 rechnen?

War das die Frage?

von Falk B. (falk)


Lesenswert?

@  Ali Alile (rifay)

>ja, die Berechnung habe ich genauso. Aber wie kann ich das in vhdl
>programmieren?

Mit einem Zähler.

>Kann man das in einer schleife realisieren?

Gar nicht. Das ist VHDL, kein C.

>wenn ja, kann ich die einzelnen Teiler weglassen und nur 50MHz/5208 >rechnen?

Rechnen nicht, aber zählen.
1
process(clk)
2
begin
3
  if rising_edge(clk) then
4
    cnt <= cnt +1;
5
    clk_9k6 <= '0';
6
    if cnt = 5207 then
7
      cnt <= 0;
8
      clk_9k6 <= '1';
9
    end if;
10
  end if;
11
end process;

Siehe auch Taktung FPGA/CPLD.

MfG
Falk

von Jürgen S. (rifay)


Lesenswert?

@ Falk:

danke, sieht meinen wünschen entsprechend aus. Nur, wie kann ich mir das 
vorstellen, wandelt der mir die 50MHz kontinuierlich auf 9600(clk_9k6) 
um?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Ali Alile schrieb:
> Nur, wie kann ich mir das
> vorstellen,

Da gibt es eine Lampe die blinkt vor sich hin.
Und es gibt einen Typen auf einem Berg, der die Lampe beobachtet. Er 
befolgt buchstabengetreu seine Vorgaben:

Jedesmal, wenn die Lampe von aus auf ein umschaltet (rising_edge)
zählt der in Gedanken zu einer Zahl die er sich merkt 1 dazu (cnt <= cnt 
+1). Ist er damit fertig, dann überprüft er noch schnell ob er zufällig 
schon bis 5207 gezählt hat.
Wenn er drauf kommt, dass er das hat, dann hält er eine Fahne in die 
Höhe und fängt wieder bei 0 zu zählen an (und senkt dann auch gleich 
wieder die Fahne).

Wenn nun die Lampe 50 Millionen mal in der Sekunde aufblitzt, und man 
den Typen vom Tal aus beobachtet, wie oft in der Sekunde hebt er dann 
die Fahne?

So kannst du dir das vorstellen.

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.