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
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.
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?
> 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.
> Ich nehme an, dass ich die 10 kBit wohl im SRAM abspeichern müsste?
Sorry, welcher SRAM? Von außen drangebastelt?
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
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.
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
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"
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.
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.
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.
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.