Hallo, ich habe die letzten Jahre nichts mehr mit programmierbarer Logic zu tun gehabt. Nun habe ich eine sinnvolle Aufgabe für so etwas, habe aber keinen Überblick über die heutigen Möglichkeiten. Meine Anforderungen in Stichpunkten: 1. 16Bit Datenbus, einige Adress- und Steuerleitungen zu einem µC (@ 3,3V) 2. 6 unabhängige SPI-Slaves mit Datenrate um 8 .. 16MHz (SPI-Master @ 5V) 3. SPI-Frame besteht aus 32Bits 4. niedrige Verlusstleistung (Abwärme) 5. Möglichst kein BGA 6. Preisgünstig und beschaffbar Welche Möglichkeiten habe ich da? Geht das mehr in Richtung FPGA oder ist das noch mit CPLDs zu machen? Welche Hersteller empfeht ihr mir? Komme ich um separate Pegelumsetzer herum? Schon mal Danke, Dirk
Sollte locker in einem CPLD machbar sein, allerdings sind das schon paar Makrozellen dann. Ein 95er von XILINX mit 256 Makrozellen reicht sicher aus. Musst ma durchrechnen. 6 x 32 plus nochma welche zum Takt-Teilen. Die 95er Reihe hat meines Wissens 5V-tolerante I/Os.
Waren in einer Macrozelle 2 FF? Wenn ich das vom Timing so gestalte, dass während dem lesen und schreiben der Shiftregister keine SPI-Übertragung stattfindet komme ich wahrscheinlich um eine Pufferung der Shiftregister herrum. Wie vielen Macrozellen braucht so ein Design? Wie viel braucht die Busankopplung?
Also gehen wir davon aus, daß ein SPI Frame komplett gespeichert werden muss. Das sind dann 6*32=192 Bits. Da vermutlich die Daten nicht sofort abgeholt werden, müssen die erstmal zwischengespeichert werden. Also im ungünstigen Fall nochmal 192 Bits. Und das ganze sowohl in der Empfangs- und Senderichtung. Das sprengt jeden CPLD. Nimm einfach einen kleinen Spartan 2E, der sollte bei effizienter Nutzung der Ressourcen (guter Programmierstil vorausgesetzt) reichen. Gruß, fpga-dev
Denke auch, dass das NICHT in ein CPLD passt, da du, wie Valerij sagte, deine SPI-Daten ja noch zwischenspeichern musst. die Lattice XP-FPGAs sind auch in recht kleinen Großen erhältlich. Ausserdem sparst du dir bei denen das Boot-Device. Den LFXP3 gibt es sogar im TQFP-100 Package. http://www.latticesemi.com/products/fpga/xp/index.cfm?source=topnav&jsessionid=ba30e47d3dbcW$9D$23$
Danke für die Antworten. Ich denke ich kommen ohne Zwischenspeicherung der Daten aus. Folgenden Ablauf habe ich mir vorgestellt. 1. µC schreibt die zu sendenden Daten in die 6 Shiftregister. 2. µC gibt die Takteingänge der Shiftregister frei. 3. µC triggert die SPI-Master, die darauf hin den Sendetakt liefern und die Sendedaten (Daten zum CPLD) raustakten und die Empfangsdaten (Daten vom CPLD) eintakten. 4. Nach Ablauf der Übertragung (32 Schiebetakte) werden die Takteingänge im CPLD wieder verriegelt. 5. µC wird benachrichtigt und liest in aller Ruhe die Empfangsdaten aus den Shiftregistern aus. 6. zurück zu 1. Das Shiftregister ist dabei als Ringregister ausgeführt und enthält nach dem austakten der Sendedaten die eingetakteten Empfangsdaten. Mache ich bei meinem gedachten Ablauf einen Denkfehler? Geht das in ein CPLD? @Schlumpf Die Lattice XP-FPGAs werde ich mir mal genauer anschauen. Wo liegen die etwa im Preis? Gruß, Dirk
Ein CPLD hat für das SPI Schieben vom Prinzip keine Probleme, ich würde Dir aber empfehlen zuerst das Programm in VHDL zu schreiben und zu testen, bevor Du den Baustein wählst. Der Teufel steckt wohl eher im Detail, z.B. im Interface uC und FPGA. Wenn die Busbreite z.B. 8 Bit ist, dann siehst Du vom uC aus mindesten 6 x 4 = 24 verschiedene 8 Bit Register welche Du schreiben und Lesen mußt. Schreiben ist vielleicht weniger das Problem, aber das Lesen erfordert mindesten einen 24-fach Multiplexer. Damit könnte ein CPLD möglicherweise überfordert sein. Das andere ist die Benachrichtigung des uC, über z.B. Interrupt. Wenn die 6 SPI-Master z.B. unterschiedlich schnell schieben, also 1 Kanal fertig ist und der andere noch nicht, dann muß dies verwaltet werden und dies könnte komplizierter sein als es im ersten Moment scheint. Klaus
Ich habe mir jetzt mal folgende zwei CPLDs ausgesucht: EPM570T100C5N von Altera XC95288XL-10TQG144C von Xilinx die liegen mit ca. 11 Euro gerade so an der Schmerzgrenze. Ist schon seltsam was die Hersteller in diesem Bereich unter Low Cost verstehen. Wo kauft ihr das Zeugs un 100er Stückzahlen? Nochmal zur Technik: Ich habe in meiner Anwendung einzelne 6 Schiebetakte die von den einzelnen SPI-Mastern erzeugt werden. Gibt das Probleme mit den Taktresourcen der CPLDs? Dirk
Wie schnell sind denn Deine 6 Schiebetakte? Wenn sie langsam genung sind kannst Du sie einsynchronisieren. Der CPLD läuft dann mit einem höheren Takt. Bevor Du die Chips kaufst, würde ich erstmal das Verhalten beschreiben und simulieren. Bei CPLDs ist die Pinauswahl auch nicht so flexibel wie bei FPGAs. Rick
@Rick Schiebetakt liegt bei bis zu 20MHz. Dann müsste ich im CPLD vielleicht mit 60MHz abtasten. Ist das (zu) schnell? Was heisst das für die Stromaufnahme? Ich habe vor vielen Jahren mal Zuverlässigkeitsprobleme mit zu vielen unterschiedlichen Taktdomänen gehabt (ispLSI1032 von Lattice). Kann mir das mit den heutigen Halbleitern auch noch passieren. In was Modelliert man so etwas heute? VHDL? Dirk
60MHz sollte der CPLD können. Die Werte müßten sich aus dem Datenblatt ermitteln lassen. Aber auch die Synthesetools (Xilinx ISE) sollten die maximale Geschwindigkeit anzeigen können. Anderseits wenn Du kannst Du auch einen CPLD mit ausreichend Clock-Eingängen nehemn. Dann sind die Ausgänge aber immer noch nicht synchron zueinander. Und ja, Modellierung in VHDL, da findest Du hier am ehesten Unterstützung. Rick
@Rick Was meinst du mit den Ausgängen, die Datenleitungen müssen halt sicher zur fallenden Flanke der Schiebetakte anliegen. Die SPI-Master erzeugen jeweils ihren Schiebetakt. Nanosekundengenaue Synchronisation der Master ist nicht möglich. Wie es aussieht brauche ich für jeden Kanal einen separaten 6Bit Counter damit ich die 32 Takte mitzählen kann um damit das Ende der Datenübertragung zu erkennen. Dirk
Ich hab alles nochmal durchgelesen. Erst schreibst Du was von 6 Slaves und dann was von 6 Master. Wenn ich es richtig verstanden habe willst Du von Deinem uC aus 6 SPI-Master abfragen. Und das soll offfenbar zwingend gleichzeitig geschehen, so eine Art digitales sample & hold. Wenn Gleichzeitigkeit nicht das Kriterium ist, könntest Du einen Multiplexer verwenden. Kannst Du nicht aus den 6 Mastern Slaves machen? Und dann den FPGA/CPLD als Master/Taktquelle laufen lassen? Das würde einiges vereinfachen. Ansonsten wäre sampeln die sauberste Lösung, da im CPLD nur ein Takt nötig ist und alles synchron läuft. Rick
@ Dirk S. (Gast) >Schiebetakt liegt bei bis zu 20MHz. >Dann müsste ich im CPLD vielleicht mit 60MHz abtasten. Ist das (zu) Schafft der CPLD, würde ich aber nicht machen. Wozu auch? Dein FPGA/CPLD ist der Master und kann problemlos die 6 SPI-Takte generieren. >>schnell? Was heisst das für die Stromaufnahme? Sie wird höher, bis zu dreimal höher. >Ich habe vor vielen Jahren mal Zuverlässigkeitsprobleme mit zu vielen >unterschiedlichen Taktdomänen gehabt (ispLSI1032 von Lattice). Kann mir Das waren Designfehler, die der Anwender zu verantworten hat, nicht der IC Hersteller! >das mit den heutigen Halbleitern auch noch passieren. Ja, wenn man es falsch macht. Viele Leute haben eine ungesunde Portion Halbwissen, vor allem was den Umgang mit asynchronen Taktdomänen angeht. Wenns dann knallt ist immer der IC schuld . . . :-( >In was Modelliert man so etwas heute? VHDL? Oder Verilog, wobei das eher in Amerika verbreitet ist. Europa ist VHDL-Gebiet ;-) >1. µC schreibt die zu sendenden Daten in die 6 Shiftregister. >2. µC gibt die Takteingänge der Shiftregister frei. >3. µC triggert die SPI-Master, die darauf hin den Sendetakt liefern und >die Sendedaten (Daten zum CPLD) raustakten und die Empfangsdaten (Daten >vom CPLD) eintakten. >4. Nach Ablauf der Übertragung (32 Schiebetakte) werden die Takteingänge >im CPLD wieder verriegelt. >5. µC wird benachrichtigt und liest in aller Ruhe die Empfangsdaten aus >den Shiftregistern aus. >6. zurück zu 1. >Das Shiftregister ist dabei als Ringregister ausgeführt und enthält nach >dem austakten der Sendedaten die eingetakteten Empfangsdaten. >Mache ich bei meinem gedachten Ablauf einen Denkfehler? Nein. >Geht das in ein CPLD? Könnte passen, aber da brauchst du schon einen mit 256 oder gar 512 Macrozellen. Die kosten mehr als ein kleines FPGA, welches ein Vielfaches der Logikressourcen hat. Hmmm. >Nochmal zur Technik: >Ich habe in meiner Anwendung einzelne 6 Schiebetakte die von den >einzelnen SPI-Mastern erzeugt werden. Gibt das Probleme mit den >Taktresourcen der CPLDs? Deine 6 Master sind doch im CPLD/FPGA, oder? Da ist es kein Problem den ersten 1kHz erzeugen zu lassen und den zweiten 10 MHz. Wenn deine höchste Frequenz 20 MHz ist, würde ich das CPLD mit 40 MHz betreiben. Der "Trick" dabei ist, dass die einzelnen SPI-Takte als normale Signale generiert und gehandhabt werden. Damit braucht man nur 1 Taktnetz und das ganze Design is vollkommen synchron. MfG Falk
Danke für die vielen Antworten. Angehängt eine Skizze damit die Sache klarer wird. Die Slaves sind im PLD. @Falk Ich bin natürlich auch ein Fan von synchronen Designs. Die CPLDs bieten aber auch mehrere verschiedene Taktnetze, und vermitteln mir daduch den Eindruck dass man damit auch mehrere unabhängige Subsysteme asynchron voneinander Takten können sollte. Vor den FPGAs schrecke ich ein wenig zurück, da dort häufig noch ein Konfigurations-EEPROM benötigt wird. Ich habe mir bei Lattice msl die FPGAs angeschaut und finde die Teile recht überteuert. Der kleinste in 100er Stückzahlen um $16. Irgendwie verstehe ich den Architektur-Unterschied zwischen FPGA und CPLD noch nicht so recht. FPGA haben anscheinend eine größere Anzahl an Logikblöcken geringerer Komplexität. Die "Logik" ist offensichtlich in kleinen Look-Up-Tables (mit 4 Eingängen) abgelegt. War's das? Auch fehlt mir irgendwie die Vergleichsmöglichkeit der Kapazitätsangaben. 3.1K LUTS hört sich nach viel an, aber was kann man damit anstellen? Dirk
@ Dirk S. >Ich bin natürlich auch ein Fan von synchronen Designs. >Die CPLDs bieten aber auch mehrere verschiedene Taktnetze, und >vermitteln mir daduch den Eindruck dass man damit auch mehrere >unabhängige Subsysteme asynchron voneinander Takten können sollte. Kann man auch, wenn man eine Dinge beachtet. Aber wieso soll man sich den Stress machen, wenn es nicht wirklich notwendig ist? Ohhh, ich sehe gerade, ich hab da wohl was übersehen. Du willst 6 Slaves in den CPLD/FPGA bauen. Hmmm. Das ist dann schon was anderes. >Vor den FPGAs schrecke ich ein wenig zurück, da dort häufig noch ein >Konfigurations-EEPROM benötigt wird. Ja, ausser du nimmst -Actel, die sind FLASH basierend, keine Ahnung ob die 5V tolerieren -Spartan3AN, die neuen haben FLASH on chip, allerdings NICHT direkt 5V tolerant -? >Ich habe mir bei Lattice msl die FPGAs angeschaut und finde die Teile >recht überteuert. Der kleinste in 100er Stückzahlen um $16. Hmm, den XC2S15 gibts bei www.nuhorizons.com ab 8$. Die Firma ist mittlerweile auch in Deutschland auf dem Markt. OK, dann brauchst du immer noch einen EEPROM zur Konfiguration. Die originalen Xilinx FLASH sind schweineteuer, weiss der Geier warum. Hier ist es sicher besser, einen kleinen 16 Pin uC + serielles EEPROM zu verwenden, das ist wesentlich billiger. OK, kostet natürlich ein wenig Entwicklungszeit :-( >Irgendwie verstehe ich den Architektur-Unterschied zwischen FPGA und >CPLD noch nicht so recht. FPGA haben anscheinend eine größere Anzahl an >Logikblöcken geringerer Komplexität. Die "Logik" ist offensichtlich in Ja, die Granularität ist feiner. >kleinen Look-Up-Tables (mit 4 Eingängen) abgelegt. War's das? Nein. FPGAs haben noch RAMs, PLLs, DLLs, Multiplizierer, Gigabit-tranceiver etc. Ausserdem ist die Routingstruktur vollkommen anders. >Auch fehlt mir irgendwie die Vergleichsmöglichkeit der >Kapazitätsangaben. >3.1K LUTS hört sich nach viel an, aber was kann man damit anstellen? 3.1k LUTs heisst in etwa, dass 3.1K LUTs a 4 Eingänge (16 Bit ROM) + FlipFlop vorhanden sind. Damit kannst du 3.1K Bit speichern. Die Produkttereme der CPLDs sind natürlich viel grösser als LUTs, Pi mal Daumen kann man sagen, dass ca 10..50 LUTs einen Produktterm eines CPLDs ergeben. Allerdings werden in den meisten Schaltungen die Produktterme gar nicht gross ausgereizt, sodass ein grössere Anzahl kleiner LUTs wesentlich günstiger ist. In deinem Fall ist ein FPGA mit 3.1K LUTs wesentlich besser als ein CPLD mit 512 Macrozellen. MfG Falk
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.