mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

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

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

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

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.

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