Hallo, ich würde mich gerne etwas mit CPLDs auseinander setzen. Ich habe vor, mir einen mehrstufigen Timer für kurze Pulsfolgen zu bauen. Hierfür würde ich im CPLD mehrere Counter (16 oder 24 Bit) aufbauen wollen und vom CLK oder über einen Vorteiler ansteuern lassen. Um aber zu einem gewünschten Zeitpunkt einen Impuls auszulösen, benötige ich einen Vergleichswert, den ich gerne extern vorgeben würde, z.B. durch einen Mikrocontroller. Ich möchte nicht für jede Konfiguration den CPLD neu programmieren müssen, sondern das soll im Betrieb vornehmbar sein. Sonst würde der CPLD nicht lange leben... Habt ihr eventuell Erfahrungen oder kennt Appnotes, wo so etwas hinsichtlich Hardware und Software beschrieben wird? Derzeit würde ich für jeden Counter ein Vergleichsregister einplanen wollen, das ich vor dem Auslösen der Counter mit dem Mikrocontroller beschreibe. Aber wie könnte eine solche Schnittstelle am sinnvollsten aussehen? Es müssen 16 oder 24Bit-Worte an mehrere Register übergeben werden. Und das möglichst einfach. Macht man das "altmodisch" über Daten- und Adressleitungen? Das wären einige. Ich würde mich freuen, wenn ihr mir da einen Standardweg aufzeigen könntet. Ich bin da sicherlich nicht der Erste, der das versucht. Mit Gruß Schmidt
Schmidt schrieb: > Macht man das "altmodisch" über Daten- und Adressleitungen? Das > wären einige. Man definiert sich ein Registermodell ähnlich wie bei einem normalen Peripheriebaustein, welches in dem CPLD/FPGA umgesetzt wird. Die Breite der Busanbindung richtet sich dann nach der Zahl der hierfür reservierbaren Pins und muss nicht einmal die gleiche Wortbreite wie der Microcontroller oder die im CPLD realisierten Zähler haben. Statt eines separaten Adressbusses kann man auch die Daten und Adressen multiplexen. Ich habe erst kürzlich solch eine Anbindung mit D[5..0], /RD, /WR, ALE realisiert. Auch der umgekehrte Weg ist ggf. möglich. Sobald man höhere Übertragungsraten zwischen CPLD/FPGA und Microcontroller/Mikroprozessor benötigt, sollte man darüber nachdenken, den Prozessor gleich als Softcore in ein FPGA zu packen. Ich bin derzeit sogar mit einem derartigen Projekt befasstt, wobei hierbei u.a. ausschlaggebend war, dass man mittlerweile solche Softcore-Projekte sehr komfortabel in Xilinx Vivado realisieren kann und auch ein Abgleich der Registermodelle in der programmierbaren Logik und in der Software erfolgt.
:
Bearbeitet durch User
Schmidt schrieb: > Hierfür würde ich im CPLD mehrere Counter (16 oder 24 Bit) aufbauen > wollen Da würde ich dir den Tipp geben, das vorher in VHDL zu beschreiben und synthetisieren zu lassen, damit du weißt, welcher CPLD reicht. Ich hatte für eine 16*8 Dot-Matrix-Anzeige das mal gemacht. Hätte einen Speicher von 32Bits * 8 gebraucht und selbst das hat in den größten CPLD der XC95xx-Reihe nicht mehr gepasst. Ansonsten ist es relativ einfach. Du kannst in den CPLD ein Schieberegister einbauen. An die Pins nach außen hängst du das SPI-Interface des Mikrocontrollers, was faktisch auch nichts anderes als ein Schieberegister ist. So bekommst du die Daten schonmal easy rüber. Dann könntest du noch eine weitere Leitung für z.B. Command und Data vorsehen. Beispiel: C/D auf high: Das was übertragen wird ist die Adresse des Timers, den du setzen möchtest. C/D auf low: Das ist dann der eigentliche Wert für den Timer, den du zuvor selektiert hast. Wenn du nur 8Bit-weise überträgst, könntest du auf diese Art auch Byte-weise deine 24/32Bit Register adressieren. Aber wie gemeint, mach erstmal die Beschreibung in VHDL ... Wenn du weißt, wieviel Resourcen das benötigt, dann das richtige Bauteil dazu auswählen.
:
Bearbeitet durch User
Schmidt schrieb: > Es müssen 16 oder 24Bit-Worte an mehrere Register übergeben werden Dann vergiss CPLD mit ihren paar wenigen Registern am besten gleich wieder.a Andreas S. schrieb: > Ich habe erst kürzlich solch eine Anbindung mit D[5..0], /RD, /WR, ALE > realisiert. Ich würde da ein SPI Interface nehmen.
Hallo, vielen Dank für eure schnellen Antworten. Dann lag ich ja nicht ganz falsch. Der Weg über SPI interessiert mich, da er Leitungen und Aufwand spart. Ist der Gedanke dann der, dass das Schieberegister gleich den Vergleichswertregistern entspricht und ich über VHDL einfach jedem Counter einen Bereich des Schieberegisters als Vergleichsregister zuordne? Dann könnte ich die "Gestalt" der Register einfach über die Bitfolge des SPI-Streams konfigurieren. Das wäre flexibel. Ich kenne mich mit VHDL nur ganz wenig aus. Ebenso habe ich erst wenig Erfahrung mit CPLDs. Wenn ich ein 16Bit Zähler oder ein Register aufsetze, wieviele FFs müsste ich hierfür bei der Synthetisierung einplanen? Je Bit nur eines? Wenn ich z.B. 5 Counter planen würde zu 16 Bit und zu jedem ein Vergleichsregister, so wären das 160 zu Speichernde Bits. Derzeit plane ich einen alten MaxII von Altera zu versuchen, der jedoch nur 240 LEs aufweist. Das dürfte zu knapp werden. Ich danke euch für eure Hilfe. Mit Gruß Schmidt
Ein Thema wäre noch, was passiert während das Schieberegister neu beschrieben wird. Solange die Bits noch nicht an der entgültigen Position sind, hast du falsche Werte in deinen Vergleichsregistern. Entweder hältst du die Pulsgenerierung solange an (z.B. solange die CS_N Leitung low ist), oder du benötigst 80 weitere FF, um dem Schieberegister ein paralleles Storage Register zu gönnen. Guck' dir vielleicht auch mal die ECP2 FPGAs von Lattice an, da gibst du vielleicht 2-3 EUR mehr aus als für den CPLD, hast aber in der kleinsten Version gleich tausende von FFs...
Schmidt schrieb: > Wenn ich ein 16Bit Zähler oder ein Register aufsetze, wieviele FFs > müsste ich hierfür bei der Synthetisierung einplanen? Je Bit nur eines? > Wenn ich z.B. 5 Counter planen würde zu 16 Bit und zu jedem ein > Vergleichsregister, so wären das 160 zu Speichernde Bits. Soweit korrekt, wenn es denn ganz ohne Vorteiler direkt mit dem "Mastertakt" geht. Zudem kommt noch das Interface dazu, das je nach nötiger Synchronisation (dürfen die Vergleichsregister zu beliebigen Zeiten manipuliert werden, oder muss das im "Nulldurchgang" des Zählers passieren?) nochmal 40-200 Flipflops braucht. Fazit: CPLDs taugen für sowas nicht. Oder man muss gleich am Anfang "herumtricksen". Und das ganz ohne Erfahrung, wie ein "richtiges" HDL-Design auszusehen hat. Joe F. schrieb: > Guck' dir vielleicht auch mal die ECP2 FPGAs von Lattice an, da gibst du > vielleicht 2-3 EUR mehr aus als für den CPLD, hast aber in der kleinsten > Version gleich tausende von FFs... Oder die MachXO FPGAs, die von Lattice auch als Brücke vom CPLD beworben werden: http://www.latticesemi.com/en/Products.aspx
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Oder die MachXO FPGAs Stimmt. Die sind auch saugünstig und haben ihr Bootflash gleich eingebaut, wenn ich mich richtig erinnere.
Hallo, danke für die Informationen. Ja, natürlich müssen weitere Baugruppen für die Interfaces und die Taktung berücksichtigt werden. Dann wird es vermutlich wirklich knapp bis unmöglich. Der Grund, warum ich auf CPLDs schaue (nach meinem Kenntnisstand): 1. Nichtflüchtiger Speicher und somit kein Konfigurations EEprom oder µC notwendig. 2. Fixe Gatterlaufzeiten. Ich möchte einen sehr eng bestimmbaren Zeitraum zwischen zwei Timern erreichen können, ohne Gatterlaufzeiten berücksichtigen zu müssen. 3. Einfachere Spannungsversorgung (3,3V) -> einfacheres Layout. 4. Sehr günstige Entwicklungsboards von Altera (AliE..) und frei verfügbare Entwicklungsumgebung (Quartus). Ich werde mir die anderen beiden Vorschläge mal ansehen. Habt ihr da Erfahrungen mit? Mit Gruß und Dank Schmidt
Noch etwas vergessen: ihr habt offenbar mit den Lattice-Bausteinen Erfahrung. Könntet ihr mir einen Baustein empfehlen, der: 1. mit 3,3V läuft (oder von hier abgeleitet werden kann), und 3,3V kompatibele IOs hat? Ich würde gerne auf Pegelwandler verzichten, wenn es geht. 2. möglichst kein BGA-Package hat, gut verfügbar und preiswert ist? Mit Gruß Schmidt
Lothar M. schrieb: > Zudem kommt noch das Interface dazu, das je nach > nötiger Synchronisation (dürfen die Vergleichsregister zu beliebigen > Zeiten manipuliert werden, oder muss das im "Nulldurchgang" des Zählers > passieren?) nochmal 40-200 Flipflops braucht. Diesen Synch-Aufwand kann man ein Stück weit reduzieren, wenn man den Zielwert für den Zähler nicht als Vergleichswert behandelt sondern als Reload-Wert eines Abwärtszählers: dann erfolgt die Übernahme geänderter Werte ganz von selbst nur beim Nulldurchgang. Außerdem muss man nicht beliebige 16-Bit-Werte miteinander vergleichen (was bei der üblichen und/oder-Logik von CPLDs hässliche Terme gibt), sondern man kann den Zählerwert fest mit 0 vergleichen. Im Endeffekt benötigt man dann an Macrozellen n*16 für die Zähler plus n*16 für die Reloadwerte plus n für die Pulsausgänge plus eine Handvoll für das SPI und den Clock. Geht aber nur, wenn es sich um eine reine Timer-Anwendung handelt (also ein Nadelpuls mit progammierbarer Wiederholrate). Wenn es stattdessen PWM-Ausgänge werden sollten, wäre der zusätzliche Aufwand an Makrozellen nicht zu vermeiden. Schmidt schrieb: > Dann wird es > vermutlich wirklich knapp bis unmöglich. Das ist das schöne an der Logikentwicklung: du kannst dein Design schon mal (mit kostenlosen Werkzeugen) entwerfen und synthetisieren lassen, ohne dass du schon einen konkreten Baustein kaufst. Dann siehst du direkt, welcher Baustein ausreichen würde und welcher nicht und kannst auch im Nachhinein den Baustein ändern. Ungünstig wäre nur, wenn du den ersten Entwurf mit der Software eines Herstellers machen würdest, und dann für den endgültigen Aufbau auf einen anderen Hersteller umschwenken müsstest.
Schmidt schrieb: > 1. Nichtflüchtiger Speicher und somit kein Konfigurations EEprom oder µC > notwendig. MachXO -> eingebaut > 2. Fixe Gatterlaufzeiten. Ich möchte einen sehr eng bestimmbaren > Zeitraum zwischen zwei Timern erreichen können, ohne Gatterlaufzeiten > berücksichtigen zu müssen. Über welche Frequenzen reden wir denn? > 3. Einfachere Spannungsversorgung (3,3V) -> einfacheres Layout. -> MachXO. 3V3 - fertig.
Hallo, @Achim Ja, da stimme ich dir zu. Ich habe mich bislang ein wenig mit Quartus auseinander gesetzt und würde das Projekt auch gerne hiermit erarbeiten. Die Lernkurve liegt also noch vor mir. Daher frage ich lieber rechtzeitig nach Alternativen. Es besteht ein Hardwareentwurf, aber da ich darum wusste, habe ich mich noch nicht auf einen Baustein festgelegt. Alternativ könnte ich den Entwurf auch mit der Cyclon-Serie versuchen. Dann würde ich mit dem Tool weiter arbeiten können. Aber die Cyclons mit Beinchen benötigen halt eine externe Konfiguration, was die Sache wieder kompliziert macht. Aber ja, eine Abschätzung des Designs wäre möglich. Der Vorschlag mit dem Abwärtszähler ist super. Vielen Dank. Da müsste ich nur sehen, wie ich den Sollwert beim Zählerreset übergebe. Entspricht bei den FPGAs ein LUT einer Macrozelle? Liegen die FFs als Hardwarekomponente vor oder werden die auch aus LUTs synthetisiert? @alle Die MachX0 scheinen deutlich günstiger zu sein für meinen Einsatzbereich. Angestrebte Ausgangsfrequenz derzeit 50MHz. Hat einer einen Vorschlag für ein konkretes Bauteil in z.B. TQFP? Mit Gruß und Dank Schmidt
Schmidt schrieb: > Der Vorschlag mit dem Abwärtszähler ist super. Vielen Dank. Da müsste > ich nur sehen, wie ich den Sollwert beim Zählerreset übergebe. Na ja, irgendwie in der Art: if zaehler=x"0000" then zaehler<=zaehler_reload; Puls <= '1'; else zaehler<=zaehler - 1; Puls <= '0'; end if; Und zaehler_reload ist halt Teil des Schieberegisters, das SPI-mäßig gefüllt wird.
Schmidt schrieb: > Hat einer einen Vorschlag für ein konkretes Bauteil in z.B. TQFP? Nimm einen MachXO2 lcmxo2-640hc-4tg100c mit 640 Logikzellen. Ist im TQFP 100 und mit OnChip Regler für die Corespannung. Zusammen mit dem eingebauten Oszillator die Faust aufs Auge für den Anwendungsfall hier... > Entspricht bei den FPGAs ein LUT einer Macrozelle? Liegen die FFs als > Hardwarekomponente vor oder werden die auch aus LUTs synthetisiert? Blätter mal durch ein Datenblatt eines MachXO. Du wirst sehen, dass 1 Flipflop hinter einer 4er Lookup Tabelle sitzt. Diese LUT kann also nur 4 Eingänge kombinatorisch verknüpfen. Ein kompletter Produktterm eines CPLDs hat ein Vielfaches an Eingängen. Aber beim FPGA macht es einfach die Menge und die einfache Verdrahtung.
:
Bearbeitet durch Moderator
Hallo Lothar, vielen Dank für den Hinweis. Ich habe gleich mal nachgesehen und der fällt preislich ja wirklich hervorragend aus. Ein größerer MAXII oder MAXV kostet ein Vielfaches. Ich habe festgestellt, dass Lattice offenbar drei IDEs anbieten. Warum denn das? Anscheinend ist aber Lattice Diamond das Programm der Wahl. Kannst du das bestätigen? Wie sieht das mit Programmern aus? Ich habe einige Programmer gefunden, die anscheinend wie die USBBlaster vom Altera aufgebaut sind. Fallen aus Fernost jedoch etwas teuerer aus. Muss ich da auf etwas spezielles achten oder sind die über alle Familienmitglieder von Latticde kompatibel? Leider konnte ich keine günstigen Evalboards oder einfache Breakoutboards mit rudimentärer Peripherie aus gleicher Quelle finden. Hast du hier evtl. eine Bezugsquelle oder könntest einen Tipp aussprechen? Bei Altera wüsste ich um die Komponenten. Mit Lattice hatte ich noch nie Kontakt. Vielen Dank! Mit Gruß P.S. so kommt man von einer spezifischen Frage auf einen kompletten Systemumstieg... :) Schmidt
Schmidt schrieb: > Ich habe festgestellt, dass Lattice offenbar drei IDEs anbieten. Warum > denn das? Alt, Neu und Anders... Bei Xilinx gibt's das zur Zeit auch mit ISE und Vivado. > Anscheinend ist aber Lattice Diamond das Programm der Wahl. > Kannst du das bestätigen? Ja. > habe einige Programmer gefunden, die anscheinend wie die USBBlaster > vom Altera aufgebaut sind. Fallen aus Fernost jedoch etwas teuerer aus Mit ein wenig Recherche bist du für knapp 20 Euronen im Rennen... Ich nehme zum Drauflosbasteln das hier, da ist der Programmer auch schon drauf : http://www.latticesemi.com/Products/DevelopmentBoardsAndKits/MachXO2BreakoutBoard.aspx > so kommt man von einer spezifischen Frage auf einen kompletten > Systemumstieg... :) Was ich gelernt habe: kuschele dich nicht zu sehr an 1 Toolchain oder an 1 Bauteilfamilie oder an 1 Hersteller. Oder wie der Volksmund sagt: auch andere Mütter haben schöne Töchter... ?
:
Bearbeitet durch Moderator
Schmidt schrieb: > 2. Fixe Gatterlaufzeiten. Ich möchte einen sehr eng bestimmbaren > Zeitraum zwischen zwei Timern erreichen können, ohne Gatterlaufzeiten > berücksichtigen zu müssen. Wenn ich dazu etwas anmerken darf: Du tust Dir einen großen Gefallen, wenn Du alle Schaltvorgänge synchron zu einem einzigen Takt machst. Das Synthese-Tool kümmert sich dann darum, dass die Gatterlaufzeiten eingehalten werden (sofern Du Deine Timings korrekt definiert hast).
Hallo, vielen Dank für den Hinweis. Leider bin ich die letzten Tagen etwas eingebunden, daher habe ich noch nicht viel Zeit für das Projekt investieren können. Aber ich habe mir schon ein Evalboard für die Lattice-Chips besorgt. Ich bin bislang sowieso davon ausgegangen, dass es einen zentralen Clk gibt, auf den ich alle Unterfunktionen synchronisiere. Ich halte euch auf dem Laufenden. Mit Gruß und Dank Schmidt
Hallo, ich wollte mich für die Tipps und Hinweise für meinen FPGA/CPLD-Einstieg bedanken. Mittlerweile läuft die SPI-Schnittstelle bislang fehlerfrei und auch die Zähler tun was sie sollen. Ich habe viel daran gelernt. Mit Gruß und Dank Schmidt
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.