Forum: FPGA, VHDL & Co. Hilfe bei PWM Takteiler


von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe vor ein PWM Signal mit variablem Duty Cycle und variabler 
Frequenz (zwei Stufen) zu realisieren. Die Hohe Frequenzstufe soll 10 
Mhz betragen, die niedrige 5 MHz.

Verwende ich nur das clkin Signal (ohne Taktteilung) um die PWM zu 
erzeugen,funktioniert es.
Die Kombination von Taktteiler und PWM Generator funktioniert leider 
nicht. Aus dem PWMout Ausgang kommt dann kein Signal heraus. Anhängend 
mein Code.

Beide wait until .. in einen Process packen funktioniert leider nicht.


Verwendet wird ein Coolrunner II XC2C64A, der Eingangstakt beträgt 150 
MHz.

Ich bin absoluter Anfänger bezüglich VHDL und komme dort leider grade 
nicht weiter.

Vielen Dank im voraus.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marcel schrieb:
> Anhängend mein Code.
So wie du mit dem PWMClk generiert man keine Takte.

Such mal nach "Postulate" hier im Forum. Eines davon ist: es gibt (für 
Anfänger) nur 1 einzigen Takt im Design. Und das ist der 
Quarzoszillator, der aussen angeschlossen ist.

> Beide wait until .. in einen Process packen funktioniert leider nicht.
Doch, wenn du nur den clkin verwendest. Denn dann wirds wieder nur 1 
"wait until"...

Oder arbeite gleich wie dort im letzten Beispiel mit Clock-Enables, wie 
es in einem synchronen Design üblich ist:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

Und analysiere mal das da:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
http://www.lothar-miller.de/s9y/archives/57-Sinusausgabe-mit-PWM.html
Irgendwann wird es "Klick" machen und due erkennst das "Schema F"...

> ... funktioniert es.
> ... funktioniert leider nicht.
Wie stellst du das jeweils fest?
Hoffentlich mit einer Simulation in einer Testbench.
> Aus dem PWMout Ausgang kommt dann kein Signal heraus.
Oder misst du mit einem Ozi an der Hardware? Dann solltest du mal 
gaaaaaaaaaaaaaaaaannnnnnz lang warten. Denn du hast da mit dem Vorteiler 
eine ziemlich lange PWM-Zykluszeit von .

> Anhängend mein Code.
Warum machst du den counter nicht gleich als Integer? Damit würdest du 
dir das ganze Herumgehampel mit der Rücksetzerei und der Abfrage 
sparen...

BTW: Mit dieser Abfrage hast du das übliche "Off-by-One" Problem:
if (to_integer(counter) = 75000000) then
Du zählst einen Takt zu viel. Das macht hier jetzt nicht allzuviel aus 
aber wenn du mal nur auf 5 zählen willst und dafür 6 Durchläufe 
brauchst, dann suchst du einige Zeit nach dem Fehler...

: Bearbeitet durch Moderator
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.