Hallo,
ich beschäftige mich erst seit kurzem mit VHDL. Hier im Forum wurde mir
nahegelegt vorerst mit einem Simulator zu arbeiten. Nun ist in einem
Simulator einiges möglich was auf einer konkreten Hardware eigentlich
nicht implementiert werden kann, da ja keine unbegrenzten Ressourcen zur
Verfügung stehen. Auf so ein Problem bin ich jetzt gerade bei meinen
Recherchen gestoßen.
Hier...
https://forums.xilinx.com/t5/CPLDs-Archived/RAM-and-ROM-for-Coolrunner-II-CPLD/td-p/1200
...wird erwähnt, dass auf einem CPLD lediglich 1 Bit an RAM pro
Makrozelle implementiert werden kann. Auf den ersten Blick erschien mir
das schon einleuchtend. Nun frage ich mich aber warum man sich keinen
RAM durch entsprechende Verschaltung von Gates zusammenbauen kann? Ein
RS-FF kann man sich ja aus zwei NOR- oder NAND-Gattern zusammenbasteln.
Warum geht das in einem CPLD nicht?
@ much (Gast)
>...wird erwähnt, dass auf einem CPLD lediglich 1 Bit an RAM pro>Makrozelle implementiert werden kann.
Ja, auch FlipFlop genannt.
> Auf den ersten Blick erschien mir>das schon einleuchtend. Nun frage ich mich aber warum man sich keinen>RAM durch entsprechende Verschaltung von Gates zusammenbauen kann?
Kann man, aber selbst die größten CPLDs haben gerade mal 512
Macrozellen.
> Ein>RS-FF kann man sich ja aus zwei NOR- oder NAND-Gattern zusammenbasteln.>Warum geht das in einem CPLD nicht?
Doch das geht, der Ram ist dann allerdings synchron (mit Takt) und nicht
asynchron wie klassischer SRAM.
Falk B. schrieb:> Kann man, aber selbst die größten CPLDs haben gerade mal 512> Macrozellen.
... und vermutlich wird man das an Registern verlieren was man
an Implementierung von Flipflops verbraucht da das Register sich
vorgefertigt in derselben Kombinatorik-Makrozelle befindet wie
die Verküpfungslogik eines "selbstgebauten" RS-FF.
much schrieb:> Ein RS-FF kann man sich ja aus zwei NOR- oder NAND-Gattern> zusammenbasteln. Warum geht das in einem CPLD nicht?
Weil ein CPLD keine solchen kleinen primitiven Funktionen hat, sondern
nur übermächtige Produktterme. Und von denen gibt es genausowenig wie es
FLipflops gibt.
Langer Rede kurzer Sinn: vergiss CPLDs. Nimm ein kleines FPGA. Das
kleinste davon hat mehr Speicher eingebaut als du mit irgendeinem CPLD
realisieren könntest...
Lothar M. schrieb:> Langer Rede kurzer Sinn: vergiss CPLDs. Nimm ein kleines FPGA. Das> kleinste davon hat mehr Speicher eingebaut als du mit irgendeinem CPLD> realisieren könntest...
Was wäre ein kleiner FPGA von Xilinx? Hast Du da einen Tipp?
Grüsse,
René
>> Was wäre ein kleiner FPGA von Xilinx? Hast Du da einen Tipp?>
Das kleinste was am unteren state-of-the-art Ende rausrutscht, ist wohl
noch die Spartan3-Reihe. Ich würde in der Domäne sonst mal Richtung
Lattice linsen, wie z.B. MachXO2, oder ICE40, die sind recht
kosteneffektiv und ersetzen bei mir so langsam die CPLDs.
Strubi schrieb:> mal Richtung Lattice linsen, wie z.B. MachXO2
Die hatte ich gemeint...
Xilinx möchte eher die High-End-Telekom-Applikationen versorgen (das
zeigen auch ganz schön die aktuellen Startbilder auf deren HP:
stattliche Serverschränke, 5G Telefonie, Satelliten, autonome
Fahrzeuge...). Da tun sie sich ein wenig schwer mit "klein".
Lattice möchte dagegen explizit das andere Ende des Marktes bedienen und
baut auch FPGAs mit genau den Schnittstellen, die in typischen
Mikrocontrolleranwendungen gefragt sind und angewendet werden.
Die Altera CPLDs (zumindest die nicht ganz alten Serien, soweit ich
weiß, ab MAX II) haben ja ein User Flash Memory auf dem Chip. Das ist
(auch wieder soweit ich weiß) extern, aber, wenn man es intern braucht,
auch intern nur über SPI zugänglich.
Das ist zwar kein RAM, wie ursprünglich gefragt, aber weiß jemand, ob
man das auch in eine Simulation einbinden kann?
Lothar M. schrieb:> Weil ein CPLD keine solchen kleinen primitiven Funktionen hat, sondern> nur übermächtige Produktterme. Und von denen gibt es genausowenig wie es> FLipflops gibt.
Ich hab mir jetzt den Aufbau vom Xilinx-XC9572 noch mal angeschaut und
ich glaube ich versehe jetzt was du meinst.
Irgendwie sind mir diese CPLDs suspekt. Der Einsatz eines CPLD erscheint
mir nur dann sinnvoll bzw. möglich wenn es eine Digitale Schaltung
ersetzen soll deren Anzahl an Gates nicht wesentlich über der Anzahl der
Macrozellen der CPLD liegt. Irgendwie verstehe ich gerade nicht wie man
beim CPLD die 1600 Gates ausnutzen soll. Man kann ja den Ausgang eines
Gates nicht direkt mit dem Eingang eines anderen verschalten. Wäre da
ein kleiners Verhältnis von Gates zu Macrozellen i.A. nicht sinnvoller?
much schrieb:> Man kann ja den Ausgang eines> Gates nicht direkt mit dem Eingang eines anderen verschalten.
Doch, das ist ja das schöne daran. Man kann die Makrozellen miteinander
kombinieren
Torben Kuhn schrieb:> Doch, das ist ja das schöne daran. Man kann die Makrozellen miteinander> kombinieren
Kannst du bitte mal kurz erklären wie das funktioniert?
Wenn ich mir z.B. folgende Schaltungen anschaue, dann kann ich den
Ausgang doch erst nach dem MUX (einer pro Makrozelle) wieder in die
Schaltmatrix zurückführen.
http://www.jjmk.dk/MMMI/PLDs/CPLD/CPLD.htm
Um die 1600 Gates wirklich ausnützen zu können müsste man die Ausgänge
der UND-Gates ja direkt wieder in die Schaltmatrix rückführen können.
Das ist ja anscheinend nicht möglich oder übersehe ich da etwas?
much schrieb:> Wäre da ein kleiners Verhältnis von Gates zu Macrozellen i.A. nicht> sinnvoller?
Ja. Das nennt sich FPGA: dort sitzt hinter jeweils einem
konfigurierbaren 4er- oder 6er-Logikblock (=LUT Lookuptable) gleich ein
Flipflop.
CPLDs waren super, als man einen breiten Adressbus decodieren und einige
Chipselect-Signal erzeugen musste: da konnte einer jeder der
Produktterme gleich alle Adressleitungen auswerten. Und der Vorteil war:
die Durchlaufzeit war pro Produktterm die selbe.
In einem FPGA müssen aber evtl. mehrere LUTs hintereinander geschaltet
werden und so ergeben sich je nach Signalpfad unterschiedliche
Durchlaufzeiten.
Das ist aber in der Realität halb so schlimm: man sagt der Toolchain wie
schnell man es braucht und die versucht ihr Bestes und meldet es, wenns
nicht klappt...
much schrieb:> Wenn ich mir z.B. folgende Schaltungen anschaue
Dort sieht man sehr schön: eine riesige Logik, aber nur ein einziges
Flipflop. Das ist ganz schlecht für Zähler, wo z.B. das unterste Bit ja
nur eine Negierung seiner selbst ist. Für dieses "NOT" wird ein ganzer
Produktterm "verheizt"...
much schrieb:> Kannst du bitte mal kurz erklären wie das funktioniert?
Letztes Bild. Der Ausgang der Makrozelle geht auf Wunsch auch über die
Matrix auf die Eingänge anderer Makrozellen.
Lothar M. schrieb:> Ja. Das nennt sich FPGA: dort sitzt hinter jeweils einem> konfigurierbaren 4er- oder 6er-Logikblock (=LUT Lookuptable) gleich ein> Flipflop.
Okey ich glaube jetzt hab ich die Vor- und Nachteile von CPLDs und FPGAs
ausreichend verstanden um Abschätzen zu können wann welche Technologie
sinnvoll eingesetzt werden kann.
Im Grunde würde der CPLD in seiner Funktion in etwa einem FPGA mit
lediglich 72 Feldern und einer riesig großen LUT ensprechen.
Danke euch allen für die Hilfe! Und sorry für die vielen naiven Fragen.
much schrieb:> Im Grunde würde der CPLD in seiner Funktion in etwa einem FPGA mit> lediglich 72 Feldern und ...
72 riesigen LUTs. Von denen normalerweise jeweils nur wenig genutzt
wird...
MCUA schrieb:> bloss, dass von den 36/72/144/288/(..1024) "riessigen LUTs" jeder mit> jedem verschaltet werden kann! was bei FPGAs nicht der Fall ist.
Natürlich wird bei FPGAs jede LUT beliebig mit anderen LUTs verschaltet,
weil sonst ja nur logische Terme mit 4 Eingängen möglich wären.
Und für CPLDs ist die Durchlaufzeit auch nur dann "garantiert", wenn
zwischen Ein- und Ausgang nur 1 Produktterm sitzt.
Nö.
Bei PLDs lassen sich prinzip. Jede MAC Direkt mit Jeder anderen MAC
verbinden (weshalb der Routing-Platzbedarf quadratisch mit der
MAC-Anzahl steigt!).
Bei FPGAs sind diese Routing-Resourcen prinz. viel geringer.
CLBs oder LEs haben nur begrenzte Anzahl Leitungen (egal ob
Track-Interconnect, Short oder LongLines), mit denen man direkt zu
andern CLBs oder LEs verschalten kann. (diese Resourcen wurden jedoch
die letzten Jahre immer weiter vergrössert (was ebenfalls die
Siliciumfläche ansteigen lässt)). Klar kann man mehrere MACs CLBs LEs
und was sonst noch hinereinanderschalten, aber dann dauerts länger.
(wie nebendran geschrieben, letztlich zählen nicht MACs oder CLBs, LEs,
sondern die Funktion und der Preis)
Falk B. schrieb:>> Ein>>RS-FF kann man sich ja aus zwei NOR- oder NAND-Gattern zusammenbasteln.>>Warum geht das in einem CPLD nicht?>> Doch das geht, der Ram ist dann allerdings synchron (mit Takt) und nicht> asynchron wie klassischer SRAM.
Man kann sich auch ungetaktete RS-Flipflops in einem CPLD bauen, was ich
neulich auch in einem Projekt genau so umsetzen musste. Allerdings
belohnt einen der Synthesizer mit dem Vorwurf, man hätte eine
kombinatorische Schleife gebaut, was ja auch völlig korrekt ist. Leider
habe ich noch keine Möglichkeit gefunden, diese Warnungen für konkrete
Einzelfälle zu unterdrücken.