Forum: FPGA, VHDL & Co. CPLD Coolrunner II, gute Wahl für einfache Steuerung?


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 Timo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

aus Interesse beschäftige ich mich mit CPLDs. Mit FPGAs habe ich schon 
etwas Erfahrung. Aus Interesse möchte ich mal auf einen Mikrocontroller 
oder FPGA verzichten.

Für eine kleine Steuerung muss ich nur ein paar Logikfunktionen 
nachbilden.

Mit einem ADC, angesteuert über SPI, messe ich eine Spannung. Diese 
Spannung möchte ich mit abgespeicherten Werten vergleichen und einen 
dazu passenden Duty-Cycle-Wert möglichst genau einstellen. Die 
PWM-Frequenz soll ziemlich genau 500 kHz betragen und ich möchte sie mit 
einer Genauigkeit von 0.1 % einstellen, daher wären 200 Mhz nötig.

Ich dachte dabei an die Coolrunner II-Serie von Xilinx und genauer den
XC2C32A-4QFG32C.

Kennt ihr eventuell besser geeignete CPLDs?

Meine nächste Frage ist vielleicht etwas seltsam.
Ist es mit diesen CPLDs überhaupt möglich, einen 500 kHz-SPI anzusteuern 
und feste "Array"-Werte abzuspeichern?

Empfehlt ihr einen speziellen JTAG-Programmer?

Grüße
Timo

von blub (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Das ist ohne Probleme möglich

von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Ich dachte dabei an die Coolrunner II-Serie von Xilinx und genauer den
> XC2C32A-4QFG32C

das Teil hat gerade mal 32 Makrozellen - kann also nicht mehr als 32 Bit 
speichern. 10 brauchst du für den 0,1% PWM Zähler, bis zu 10 für den PWM 
Vergleichswert, ca. 10 für das SPI Shift-Register zum ADC. das kann eng 
werden.

Timo schrieb:
> Für eine kleine Steuerung muss ich nur ein paar Logikfunktionen
> nachbilden

für ein paar Logikfunktionen würde das CPLD schon reichen. aber deine 
Beschreibung geht über ein paar Logikfunktionen hinaus.

von Timo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe das ganze wohl etwas unterschätzt.


Ich muss 2 mal 500 Werte mit 0,1 % Genauigkeit abspeichern:
Das wären bei Integer-Werten wie Achim meinte 10 Bit.

Das ergibt also 1000 * 10 Bit = 10 kBit.

Die Auflösung des ADCs soll 12 Bit betragen, daher kommen nochmal 12 Bit 
dazu.

Dann wären wir bei genau 32 Bit, die immer genutzt werden würden.


Der XC2C64A-7VQ44C hätte 64 Makrozellen bei 4 Logikblöcken.

Ich nehme an, dass ich die 10 kBit wohl im SRAM abspeichern müsste?

von Bürovorsteher (Gast)


Bewertung
1 lesenswert
nicht lesenswert
> Ich dachte dabei an die Coolrunner II-Serie von Xilinx und genauer den
> XC2C32A-4QFG32C.
32 Makrozellen können recht wenig sein.

Meine Standardempfehlung: etwas aus der MachXO2-Serie von Lattice. 
Preiswerter Overkill, nur bei den 200 MHz musst du evtl etwas 
herumzirkeln.
Die Simulation wird es dir aber sagen.

von Bürovorsteher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Ich nehme an, dass ich die 10 kBit wohl im SRAM abspeichern müsste?
Sorry, welcher SRAM? Von außen drangebastelt?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> aus Interesse beschäftige ich mich mit CPLDs. Mit FPGAs habe ich schon
> etwas Erfahrung.
Dann solltest du eigentlich abschätzen können, wie wenig 64 Flipflops 
sind.

> Mit einem ADC, angesteuert über SPI, messe ich eine Spannung. Diese
> Spannung möchte ich mit abgespeicherten Werten vergleichen und einen
> dazu passenden Duty-Cycle-Wert möglichst genau einstellen.
Wofür soll das gut sein? Ich hoffe, dir ist klar, dass diese Strecke 
böse schwingen kann, wenn der PWM-Ausgang Auswirkungen auf den 
AD-Eingang hat.

> PWM-Frequenz soll ziemlich genau 500 kHz betragen und ich möchte sie mit
> einer Genauigkeit von 0.1 % einstellen, daher wären 200 Mhz nötig.
Diese Berechnung kann ich nicht nachvollziehen. Denn 200MHz/500kHz sind 
400. Du brauchst also einen Vorteiler von 400.
Der nächst kleinere Vorteiler wäre also 399 was 200MHz/399 = 501,25kHz 
ergibt und somit 0,25% mehr...

An dieser Stelle würde ich dann nach dem erlaubten Jitter frage, und ob 
eine DDFS eine Option sein könnte (was wahrscheinlich der Falls ist, 
weil ja vermutlich die 500kHz die Grundfrequenz für einen PWM-Zähler 
sind).

Timo schrieb:
> Ich muss 2 mal 500 Werte mit 0,1 % Genauigkeit abspeichern:
Allein dieser glatte Dezimalwert zeigt ganz offensichtlich, dass das 
Konzept von einem zweihändigen Programmierer mit jeweils 5 Fingern pro 
Hand aufgestellt wurde. Einer, der mit Hardware zu tun hat, hätte in 
Zweierpotenzen gedacht und 2 mal 512 Werte genommen.

> Das ergibt also 1000 * 10 Bit = 10 kBit.
Schon, aber du kannst eben die 10 Bit nicht ohne viel Aufwand auf eine 
"übliche" 8/16 Bit Struktur abbilden. Da bleibt pro 8-Bit-Wort ein 
"Rest" von 2 Bit oder es sind im 16-Bit-Wort 6 Bit "leer".

> Die Auflösung des ADCs soll 12 Bit betragen, daher kommen nochmal 12 Bit
> dazu.
Diese Logik kann ich nicht nachvollziehen. Wo kommen die 12 Bit "dazu"? 
Allein für die SPI-Schnitte und die dafür nötigen FSM (Ablauf+Vorteiler) 
sind auch noch ein paar Flipflops nötig.
Und vom hereinkommenden ADC-Wert ignorierst du halt einfach die 
untersten 2 Bit, dann hat das Ergebnis die gewollten 10 Bit.

> wie Achim meinte
Lies doch unbedingt auch das abschließende Fazit, das
Achim S. schrieb:
>>>> für ein paar Logikfunktionen würde das CPLD schon reichen.
>>>> aber deine Beschreibung geht über ein paar Logikfunktionen hinaus.

Bürovorsteher schrieb:
> Sorry, welcher SRAM? Von außen drangebastelt?
Und wie kommen die "abgespeicherten Werte" dort rein?

> Meine Standardempfehlung: etwas aus der MachXO2-Serie von Lattice.
So sehe ich das auch.
Und zusätzlich eine grundlegende Systembetrachtung zum Abgleich was 
"gwollt" und was "gebraucht" wird.

: Bearbeitet durch Moderator
von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:
> Für eine kleine Steuerung muss ich nur ein paar Logikfunktionen
> nachbilden.

Ich schätze, du hast nicht wirklich drüber nachgedacht. 500 kHz sind für 
einen Coolrunner kein Thema, die laufen bis zu 500 MHz schnell. Aber die 
Idee, eine Spannung per PWM mit 100 MHz oder mehr machen zu wollen, ist 
sehr eigen, wirklich. Nimm zu deinem ADC lieber noch einen passenden DAC 
hinzu, damit kommst du eher zu potte.

Obendrein kann ein 32er Coolrunner nur bis zu 32 Ausgangssignale bilden 
und seine Geschwindigkeit wird hier in keinster Weise ausgenutzt. Wenn 
schon ein CPLD, dann hier eher ein XC95144XL, die sind auch billig, 
haben 144 FF drin und laufen auch mit so etwa 100 MHz oder etwas mehr. 
Das reicht vergleichsweise aus, um z.B. einen kompletten 
VGA-Bildschirmcontroller für bis zu 800x600 zu machen (zuzüglich ein 
RAM).

W.S.

von Fpgakuechle K. (fpgakuechle) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Timo schrieb:

> Mit einem ADC, angesteuert über SPI, messe ich eine Spannung. Diese
> Spannung möchte ich mit abgespeicherten Werten vergleichen und einen
> dazu passenden Duty-Cycle-Wert möglichst genau einstellen. Die
> PWM-Frequenz soll ziemlich genau 500 kHz betragen und ich möchte sie mit
> einer Genauigkeit von 0.1 % einstellen, daher wären 200 Mhz nötig.
>
> Kennt ihr eventuell besser geeignete CPLDs?

Warum muss es ein CPLD sein, und kein µC oder FPGA?

Ich würde mir hier ein FPGA mit Soft-Core µC, embedded RAM und SPI-Port 
anschauen, am besten auf einem etablierten Board, bspw da MAX1000:
Beitrag "MAX1000 Erfahrungen"

Und falls dir bei dem Kürzel FPGA schwindelig wird, intel vermarktet dem 
MAX10 als CPLD mit FPGA-Eigenschaften ;-) oder andersrum ;-))

https://www.intel.com/content/altera-www/global/en_us/index/products/cpld/max-series.html

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Fpgakuechle K. schrieb:
> Und falls dir bei dem Kürzel FPGA schwindelig wird
Eigentlich ja nicht, denn
Timo schrieb:
> Mit FPGAs habe ich schon etwas Erfahrung.
Und wenn man sich für ein paar kleine FPGA-Designa mal den 
Ressourcenverbrauch so ansieht, dann merkt man schnell, dass 64 
Flipflops wirklich wenig sind.

> intel vermarktet dem MAX10 als CPLD mit FPGA-Eigenschaften
Alter Wein in neuen Schläuchen: das hat Lattice schon vor 10 Jahren mit 
den MachXO gemacht...   ;-)

Siehe den Beitrag "Re: FPGA/CPLD als DIP Bausteine"

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Fpgakuechle K. schrieb:
> Warum muss es ein CPLD sein, und kein µC oder FPGA?

Ich kann das verstehen: Ein CPLD benötigt keinen separaten Konfig-Flash 
und keinen Setup beim Einschalten. Das ist ein durchaus nennenswerter 
Vorteil. Und diese Dinger sind zumeist auch billiger als ein FPGA.

Naja.. und wenn man ein CPLD von Xilinx nimmt, dann kommt man sogar mit 
einem alten PC mit Win XP, Parallelport und Parallelkabel #3 oder so 
aus, um das zu programmieren. Alle anderen Lösungen brauchen mehr an 
Ausrüstung.

W.S.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Fpgakuechle K. schrieb:
>> Warum muss es ein CPLD sein, und kein µC oder FPGA?
>
> Ich kann das verstehen: Ein CPLD benötigt keinen separaten Konfig-Flash

Einige FPGAs auch nicht, weil der im Gehäuse sitzt.

> und keinen Setup beim Einschalten.

Ist nur bei wenigen Schaltungen relevant.

> Das ist ein durchaus nennenswerter
> Vorteil.

Aber nur, wenn man ihn WIRKLICH braucht!

>Und diese Dinger sind zumeist auch billiger als ein FPGA.

Nicht wirklich, wenn man sich mal die modernen, kleinen FPGAs anschaut. 
Da bekommt man deutlich mehr Logikresourcen für das gleiche Geld. Auch 
die Coolrunner II sind über 20 Jahre alt und dementsprechend relativ 
teuer, weil sie mit eher alten Halbleiterprozessen gefertigt werden.

> Naja.. und wenn man ein CPLD von Xilinx nimmt, dann kommt man sogar mit
> einem alten PC mit Win XP, Parallelport und Parallelkabel #3 oder so
> aus, um das zu programmieren. Alle anderen Lösungen brauchen mehr an
> Ausrüstung.

Ach herje, jetzt kommt wieder der russische Bastler aus der 
tiefverscheiten Taiga!

Es gibt tonnenweise Plug & Play FPGA-Boards, auch sehr klein mit 
direkter USB-Verbindung.

Der ursprüngliche Plan des OP ist, wie schon vielfach festgestellt, 
nicht sonderlich sinnvoll. Der CPLD ist zu klein, außerdem sind andere 
Konzepte für diese Anforderungen besser geeignet. U.a. ein PICCOLO, 
denn der hat einen hochauflösende PWM.

von Christoph Z. (christophz)


Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
>> Naja.. und wenn man ein CPLD von Xilinx nimmt, dann kommt man sogar mit
>> einem alten PC mit Win XP, Parallelport und Parallelkabel #3 oder so
>> aus, um das zu programmieren. Alle anderen Lösungen brauchen mehr an
>> Ausrüstung.
>
> Ach herje, jetzt kommt wieder der russische Bastler aus der
> tiefverscheiten Taiga!

Letzte Woche ist mir bei Arbeit aus einem lange ungesichteten Schrank 
ein Virtex 2 Board zugefallen. P&R für so ein Board auf einem PC aus 
damaliger Zeit hilft dann beim Heizen im Winter :-)

Ich hatte mich ja schon beim Gedanken erwischt, einen HP 16500 an ein 
Vintage-Computer-Festival zu schleppen aber es dann doch verworfen mir 
diesen Logic Analyzer nur dafür in unseren kleinen Keller zu stellen.

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.

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