mikrocontroller.net

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


Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schieberegister

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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?
process(clk)
begin
  if risng_edge(clk) then
    if cnt=0 then
      ce_slow <='1';
      cnt <= 5000-1;
    else
      ce_slow <='0';
      cnt <= cnt-1;
    end if;
  end if;
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!

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank

Ich werde es gleich mal ausprobieren!

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Clock herabsetzten damit das ganze mit 100 kHz läuft.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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...

;-)

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.