Forum: FPGA, VHDL & Co. VHDL Anweisung für CLOCK


von Kurz (Gast)


Lesenswert?

Servus !

Ich suche eine Anweisung mit der in in VHDL an den Eingang eines 
Bausteins (zum Beispiel ein einfaches UND Gatter) an einen CLOCK von 
z.B 100 kHZ legen kann.

Mein Board Altera Max II Development Board hat einen Prozessor von dem 
ich zwei Clocks abgreifen kann (PINs mit 66 und 6 MHZ) aber es muss doch 
gehen dass ich durch einen Befehl z.B 100 kHz oder nur ein 1Hz als CLOCK 
Eingang hernehme?

Vielen Dank

von Mark (Gast)


Lesenswert?

Hi,

im praktischen Leben kannst Du nur die Clocks nehmen, die an Deinem 
Baustein auch anliegen. Du definierst im Top-Design-File einen 
Clock-Eingang
und legst in der Altera-Software dieses Signal auf den entspr. Pin wo
eben der Clock verfügbar ist.

In einer Simulation dagegen kannst Du Dir jeden Clock generieren, einen 
speziellen
Clock-Befehl gibt es nicht, Du lässt ein Signal einfach mit einer best. 
Frequenz toggeln.

Oder hab ich Dich komplett falsch verstanden?

von Kurz (Gast)


Lesenswert?

Du hast mich vollkommen richtig verstanden.

Also kann ich nur mit Schleifen und / oder Taktteilern arbeiten um mich 
in den kHz Bereich zu bringen?

Wenn ein Tastereingang alle 0,5 Sekunden abgefragt werden soll, dann 
muss ich eine Zählerschleife einfügen und entsprechend meinem CLOCK 
Eingang dann runterzählen lassen? Richtig?

von Alban (Gast)


Lesenswert?

Bei Xilinx gibt es dafür Clockmanager (DCM), kenne leider den Namen bei 
Altera dafür nicht. Das ist eine Funktion im FPGA und da gibt man einen 
Takt rein und kann den dann hoch oder runter teilen. Das ist eine andere 
Alternative zum reinen HDL Code eines Zählers.

von Falk B. (falk)


Lesenswert?

Kurz (Gast)

>Also kann ich nur mit Schleifen und / oder Taktteilern arbeiten um mich
>in den kHz Bereich zu bringen?

Ja, Teiler. Keine Schleifen, das ist in VHDL was anderes.

>Wenn ein Tastereingang alle 0,5 Sekunden abgefragt werden soll, dann
>muss ich eine Zählerschleife einfügen und entsprechend meinem CLOCK
>Eingang dann runterzählen lassen? Richtig?

Einen Zähler.

MfG
Falk

von Falk B. (falk)


Lesenswert?

@ Alban (Gast)

>Bei Xilinx gibt es dafür Clockmanager (DCM), kenne leider den Namen bei
>Altera dafür nicht. Das ist eine Funktion im FPGA und da gibt man einen
>Takt rein und kann den dann hoch oder runter teilen. Das ist eine andere
>Alternative zum reinen HDL Code eines Zählers.

Davon sollte man als Anfänger die Finger lassen. Ausserdem sind dies 
DCMs oder PLLs nur für WIRKLICH schnelle Sachen sinnvoll, nicht für 
Gleichstrom im khZ Bereich.

MFG
Falk

von Kurz (Gast)


Lesenswert?

Wie kann ich das praktisch umsetzten wenn ich vom MHz bereich in den kHz 
oder Hz bereich kommen nochte dann bin ich sehr lange geschäftigt jeden 
Teiler einzel zu programmieren.

Wie könnte so etwas aussehen?

von Dirk (Gast)


Lesenswert?

Schieberegister

von Falk B. (falk)


Lesenswert?

@  Kurz (Gast)

>Wie kann ich das praktisch umsetzten wenn ich vom MHz bereich in den kHz
>oder Hz bereich kommen nochte dann bin ich sehr lange geschäftigt jeden
>Teiler einzel zu programmieren.

Hääää???

>Wie könnte so etwas aussehen?
1
process(clk)
2
begin
3
  if risng_edge(clk) then
4
    if cnt=0 then
5
      ce_slow <='1';
6
      cnt <= 5000-1;
7
    else
8
      ce_slow <='0';
9
      cnt <= cnt-1;
10
    end if;
11
  end if;
12
end process;

Die 5000 ist das Teilerverhältnis. Wenn du den Zähler gross genug 
machst, kannst du sehr langsame Clock enables erzeugen (nam benutzt 
keine abgeleiteten Take)

Taktung FPGA/CPLD

MfG
Falk

@ Dirk (Gast)

>Schieberegister

Sülze!

von Kurz (Gast)


Lesenswert?

Vielen Dank

Ich werde es gleich mal ausprobieren!

von Kurz (Gast)


Lesenswert?

Ich möchte folgende Aufgabe mit VHDL realisieren:

Eine einstellbare PWM. Ich habe ein 66 MHz Signal und 4 Taster zur 
Verfügung.

Meine Idee ist dass ich das „Programm“ bei 50%  PWM  starten lasse und 
Abfragen für die Taster mache ob das PWM erhöht oder herabgesetzt werden 
soll. Zyklisch. Wenn nichts gedrückt wird macht das Board einfach weiter 
wie bisher.

Aus C kenne ich schleifen und Abfrage der Variablen ( in dem Fall Taster 
).

Würde die Grundidee in VHDL auch so funktionieren oder muss ich 
umdenken?

von Kurz (Gast)


Lesenswert?

Clock herabsetzten damit das ganze mit 100 kHz läuft.

von Falk B. (falk)


Lesenswert?

@ Kurz (Gast)

>Meine Idee ist dass ich das „Programm“ bei 50%  PWM  starten lasse und
>Abfragen für die Taster mache ob das PWM erhöht oder herabgesetzt werden
>soll. Zyklisch. Wenn nichts gedrückt wird macht das Board einfach weiter
>wie bisher.

>Würde die Grundidee in VHDL auch so funktionieren oder muss ich
>umdenken?

Die Idee funktioniert schon in VHDL, aber die UMSETZUNG sieht um einiges 
anders aus. VHDL ist eine Hardwarebeaschreibungssprache und kein 
"normale" Programmiersprache.


MFG
Falk

von Alban (Gast)


Lesenswert?

@ Falk

>Davon sollte man als Anfänger die Finger lassen. Ausserdem sind dies
>DCMs oder PLLs nur für WIRKLICH schnelle Sachen sinnvoll, nicht für
>Gleichstrom im khZ Bereich.

Danke für den Hinweis. Gut zu wissen.

von Stefan W. (wswbln)


Lesenswert?

...und wenn Falk's Vorschlag von 16:29 läuft, kannst Du dann als nächste 
Übung cnt als Natural-Variable in den Process verschieben und den 
Teilerfaktor als Generic übergeben. Dann fällt es beim nächsten mal 
leichter, wenn Du sowas nochmal brauchst...

;-)

von Hannes (Gast)


Lesenswert?

@ falk
ich bin gerade auf der Suche nach einem gutem clock divider, also habe 
ich auch den oberen code habe ich über mein spartan 3 e StarterKit 
laufen lassen, und einen Oszilloskop an den Ausgang gehängt. Auf diesem 
war dann zu sehen, dass die Frequenz nur für einen impuls der 
ursprünglichen Clock oben bleibt, und nicht für 50 % des Taktes. Ich 
weiss nicht ob ich mich verständlich genug ausgedrückt habe, aber leider 
kann ich bei meinem Oszilloskopen kein Hardcopy machen, und das alles zu 
beschreiben ist nicht so einfach.

P.S. im code war ein schreibfehler, du hast das "i" bei "rising_edge" 
vergessen ;)

von Rick Dangerus (Gast)


Lesenswert?

@Hannes:

Dein Oszi funktioniert richtig und der Code ist auch ok.
Durch den Code wird ein "clock enable (CE)" erzeugt.
Wenn man wirklich einen Takt (50/50) braucht, muss man z.B. ein FlipFlop 
toggeln lassen.

Rick

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.