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
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?
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?
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.
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
@ 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
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?
@ 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!
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?
@ 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
@ 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.
...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... ;-)
@ 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 ;)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.