Hilfe bei PWM Takteiler

Gast #5887706
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.
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #5888147
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...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.