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