Forum: FPGA, VHDL & Co. Ringoszillator / FPGA Übertakten


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.
von S. K. (quaxx)


Bewertung
0 lesenswert
nicht lesenswert
Moin,
ich möchte in meinem FPGA einen Analog-Spannung ausgeben. Da ich kein 
DAC auf meinem Eva-Board habe, möchte ich eine PWM ausgeben und diese 
anschließend Tiefpass filtern.

Ich habe mich von folgendem Paper dazu inspirieren lassen:

https://wwwee.ee.bgu.ac.il/~pemic/publications/conf032.pdf

Darin wird mit Hilfe eines Ringoszillators, MUX und XOR-Gatter eine 
11Bit @ 1.6MHz PWM erzeugt. Diese würde ich gerne nachbauen.


Ich habe bisher einen Ringoszillator mit mehreren NOT-Gattern aufgebaut 
und mittels Oszilloskops vermessen. Es schwingt zwar, aber nicht wie 
gewünscht (kein Rechteck und die Frequenz zu niedrig). In dem Paper wird 
der Ring mit Buffern realisiert.


Meine Problem/Fragen liegen eigentlich hier:

- Kann man einen Ringoszillator simulieren? (da es ja kein logisches, 
sondern physikalisches Verhalten ist)
- Kann man bewusst nur I/O-Buffer instanziieren, die bei der Synthese 
nicht weg optimiert werden?

- Oder habt ihr komplett andere Ideen, wie ich so eine hohe Auflösung 
und Frequenz PWM erzeugen kann? (FPGA Übertaktung, um Counter laufen 
lassen zu können?)


Meine Hardware:
Eva-Board - ARTY S7 mit einem Spartan-7 FPGA
Ich beschreibe das System in VHDL

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Bewertung
2 lesenswert
nicht lesenswert
S. K. schrieb:
> 11Bit @ 1.6MHz PWM erzeugt.

Dafür wären 3,2GHz notwendig ...

Da les ich mal mit, das wird sicher interessant.

von S. K. (quaxx)


Bewertung
0 lesenswert
nicht lesenswert
Mampf F. schrieb:
> Dafür wären 3,2GHz notwendig ...


Genau das ist das Problem. Geht eher in Richtung 3,3GHz.

Wenn man sich das Paper so anguckt, klingt auch alles ganz logisch und 
"einfach". Aber den Oszillator zu stabiliseren, um dann eine PWM daraus 
zu generieren, übersteigt irgendwie meine Fähigkeiten :D

Und da wurde das mit einem Cyclone IV gemacht, der müsste bei ca. 
f=200MHz takten.

von Hannes (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum so kompliziert? Was sind die Anforderungen an die Analogwerte?

Fuer viele Faelle funktioniert ein einfacher Delta-Sigma-DAC. Im 
einfachsten Fall baust du den so:

https://www.fpga4fun.com/PWM_DAC_2.html

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Besser als PWM und geeignet für die Anwendung: Pulsedichtemodulation

von S. K. (quaxx)


Bewertung
0 lesenswert
nicht lesenswert
Hannes schrieb:
> Warum so kompliziert? Was sind die Anforderungen an die Analogwerte?


Die Analogwerte dienen als Referenzwert einer stromgesteuerten Regelung 
eines DCDC-Wandlers. Dafür wird die Ausgangsspannung gemessen und 
anschließend im Regler zu dem Soll-Strom auf Primässeite geschlossen.

Die eigentliche Stellgröße der Halbbrücken ist eine 70kHz PWM. Daher 
muss mein DAC mit einer relativ hohen Frequenz arbeiten. Meine 
Vorgabe/Ziel ist es mindestens 10 Werte pro Schaltzyklus zu ermitteln 
(-> demnach 700kHz).

Um möglichst rippelfreie Werte (nach der Filterung) zu bekommen, habe 
ich die Frequenz erstmal höher angesetzt (runter gehen, kann man ja 
immernoch).

Über die Auflösung bin ich mir selbst noch im unklaren. Meine 
Stellgrößen PWM arbeitet mit 12 Bit, und in diesem Bereich wollte ich 
für eine genaue Regelung auch erstmal versuchen zu bleiben.


Die beiden Vorschläge schaue ich mir gleich mal an, vielleicht komme ich 
damit weiter.

von S. K. (quaxx)


Bewertung
0 lesenswert
nicht lesenswert
Das größte Problem und eher die größte Frage ist eigentlich, ob man so 
ein Verhalten, wie Ringoszillatoren aus logik-Gattern, simulieren kann.

Bei mir wird im Simulator dabei nichts angezeigt, wenn man die 
Implantation durchführt, kann man das Signal aber messen.
Ich vermute, dass es daran liegt, dass es für den Simulator nicht 
"logisch" erscheint, dass die Schaltung von sich aus zu schwingen 
beginnt.

So wird einem die Entwicklung natürlich stark erschwert, zumal ich kein 
Oszilloskop mit mehreren 10 GHz Bandbreite habe.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
S. K. schrieb:
> Das größte Problem und eher die größte Frage ist eigentlich, ob man so
> ein Verhalten, wie Ringoszillatoren aus logik-Gattern, simulieren kann.
Kann man.
Man muss dabei aber im Synthesecode mit symbolischen Zeiten hantieren. 
Das sieht nicht nur nach "Murks" aus, das ist sogar einer:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

Vor allem habe ich beobachtet, dass zwar der Ringoszillator auf dem FPGA 
erstaunlich stabil gegen Temperaturschwankungen ist, aber eben auch, 
dass diese Frequenz nicht "portierbar" ist. Ein anderes FPGA schwingt 
mit einer völlig anderen Frequenz.

von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. K. schrieb:
> Bei mir wird im Simulator dabei nichts angezeigt,

auf welcher Ebene simulierst du denn? Dass z.B. in einer 
Verhaltenssimulation nichts realistisches rauskommen kann, fände ich 
naheliegend (da die von den Verzögerungen der Gatter nichts weiß).

S. K. schrieb:
> So wird einem die Entwicklung natürlich stark erschwert, zumal ich kein
> Oszilloskop mit mehreren 10 GHz Bandbreite habe.

Keine Arme, keine Kekse ;-)
Oder man nutzt eben doch eine geschicktere Umsetzung, wie sie oben 
genannt wurden (Delta-Sigma, Pulsdichtemodulation, ..)

S. K. schrieb:
> Oder habt ihr komplett andere Ideen, wie ich so eine hohe Auflösung
> und Frequenz PWM erzeugen kann?

wenn es eine hochfrequente, hochauflösende PWM sein soll: du könntest 
einen Gigabit-IO so füttern, dass deine gewünschte PWM rauskommt. Dann 
musst du im Logikteil nur mit einem Bruchteil der Frequenz arbeiten.

Hoppla, ich sehe gerade, dass du nen Spartan 7 hast. Dann war das mit 
dem Gigabit-IO wohl keine so gute Idee. (vielleicht auf den Atix 
umsteigen?)

S. K. schrieb:
> Die eigentliche Stellgröße der Halbbrücken ist eine 70kHz PWM. Daher
> muss mein DAC mit einer relativ hohen Frequenz arbeiten. Meine
> Vorgabe/Ziel ist es mindestens 10 Werte pro Schaltzyklus zu ermitteln
> (-> demnach 700kHz).

Und du musst wirklich über eine analoge Zwischengröße gehen? Bei solchen 
kaskadierten Regelkreisen hätte ich ein ungutes Gefühl, einen PWM-DAC 
mit in die Schleife zu nehmen, der grade bei den interessanten 
Frequenzen Phasenreserve kostet. Wäre es nicht denkbar, die gesamte 
Regelung ins FPGA zu verlagern und die Halbbrücke digital anzusteuern?

von El Ef (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. K. schrieb:
> Da ich kein DAC auf meinem Eva-Board habe

S. K. schrieb:
> Eva-Board - ARTY S7 mit einem Spartan-7 FPGA

Es gibt auch PMOD-Module mit Digital-Analog-Wandlern zum anstecken.

Oder wenn genug Pins frei sind R2R-Netzwerk

von S. K. (quaxx)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe es nun immerhin geschafft, den Oszillator zu simulieren. Lag 
anscheindend an symbolischen Zeiten.
Ansonsten hab ich auch vorher schon Timing Simulationen dafür 
durchgeführt.

Mit geschickter Anordnung habe ich ein Signal mit einer Frequenz von ca. 
f=1,5GHz erzeugen können. Leider ist meine spätere Auswertung dafür zu 
träge, womit ich effektiv nur bei 600MHz lande.

Ich werde also auf einen diskreten DAC umsteigen, damit das Projekt 
weiter vorankommt.

Aber Danke für die hilfreichen Antworten, wird wohl nicht die letzte 
Frage bleiben ;)

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ich sehe den Sinn für den Ringoszillator nicht wirklich ein, wenn man 
nicht mit aller Gewalt über die Taktfrequenzen hinaus will, die mit 
einem FPGA direkt machbar sind.

Ich habe mich selbst mit solchen Oszillatoren befasst und daran herum 
geforscht:
http://www.96khz.org/oldpages/digitalnoisegenerator.htm

Daraus abgeleitete Artikel findet man hier:
Digitaler Rauschgenerator im FPGA
Digitaler Zufallszahlengenerator in VHDL

Weiter oben hatte ich schon die Pulsdichtemodulation erwähnt - leider 
mit Tippfehler, wie ich gerade sehe, also nochmal: 
Pulsdichtemodulation

Solange man nicht davon Gebrauch macht und die Möglichkeiten des 
verbesserten Spektrums gegenüber einer PWM ausnutzt, bringt die Erhöhung 
der Taktfrequenz nichts.

Ich habe mir die Schaltung im Link angesehen und würde sagen, dass die 
Phasenmodulation, die sie vorne bekommen (können, bzw. "könnten", wenn 
sie es noch etwas anders bauen würden) zwar die grundsätzliche 
Granularität der PWM optimiert, aber trotzdem nicht an die Qualität 
einer PDM heranreicht, auch wenn man in einem FPGA das Phasenrauschen 
der PLLs in Betracht zieht. Zudem kann man noch aus einem guten 
Taktgenerator speisen und hinten das Signal gaten, um sauber zu werden, 
wenn man will.

Ich habe einen konfigurierbaren PDM-Modulator am Laufen, der 768kHz 
Audio als DSD64, bzw. 96kHz als DSD512 aus dem FPGA schiebt. Die 
Qualität ist entsprechend um Klassen besser, als z.b. das schnöde 
16/24Bit der CD/DVD.

Bei 1,5MHz sollte das entsprechend sein.

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]
  • [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.
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.

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