Hallo, so nachdem ich meine ersten zwei größeren Projekte VHDL-Technisch in den Griff bekommen habe muss ich mir langsam einen Kopf über die benötigte Logik machen. Ich habe meine Projekte einfach immer in den Spartan3 vom Starterkit geladen. Zum Beispiel benötigt mein Pulsgenerator %5 von den vorhandenen Flip-Flop-Slices. Mit anderen Worten der FPGA ist so gut wie leer. Eigentlich habe ich gehoft, dass ich den Pulsgenerator in ein CPLD klopfen kann. Aber selbst der XC95288 reicht ganz knapp nicht aus. Am liebsten wäre mir gewesen einen ca. 44-pinnigen CPLD zu benutzen. Die Platine kann ich selber ätzen und auch bestücken.... Wie ihr bestimmt schon erkannt habt, mir fehlt noch absolut das Gefühl wie viel ich an Logik benötige, bzw was in z.B. einen XC9536 reinpaßt. Bitte schreibt jetzt nicht der XC9536 besitzt 36 marcocells... Lieber wäre mir was Ihr so realisiert habts in einem Baustein. Es geht mir wirklich nur um eine intuitive Abschätzung. Vielen Dank, Sebastian B.
Das mit der Intuition hängt stark mit deinem Kenntnisstand zusammen. Da nutzt es dir auch nix, wenn ein Crack der Materie dir sagt er hat Projekt X mit diesem oder jenem Bauteil hinbekommen. Wenn es sich um ein knappes Projekt hadelt, dann kannst du unter Umständen jahrelang dein Glück versuchen eh du auf den passenden Gedanken kommst um sowas auch mit diesem Teil hinzubekommen. Erst wenn deine eigene Erfahrung und dein Wissen dir eine eigene Intuition zukommen lässt, hast du was davon. bye Frank
Naja, also ich habe mal ein wenig rumexperimentiert mit meinen ersten VHDL Codes. Zum Beispiel ein einfacher 8 Bit Counter, mit vorgeschalteten 4Bit-Frequenzteiler (siehe Anhang) verbraucht 1/3 der gesamten Resourcen des XC9536. Wenn ich jetzt noch den Freqeunzteiler auf auf 20Bit erhöhe, damit ich auch was auf dem Testboard erkennen kann (1Mhz Quarz) dann ist der CPLD XC9536 voll. Also ich habe das Gefühl, dass ein so kleiner CPLD hauptsächlich als 7400 7401 Ersatz gedacht ist. Komplexere Entwürfe passen wohl nur noch in die sehr,sehr großen CPLDs. FPGAs scheinen um ein vielfaches größer als CPLDs zu sein.
Sebastian, Du hast gerade die Abschaetzung gemacht! Ein 8-bit Counter braucht 8 Register, der 4 Bit Teiler braucht 4 Register macht zusammen 12 Register, das ist 1/3 der verfuegbaren 36 Register.
Man kann auch ordentliche Sachen in einen kleinen Käfer packen. Ich hab da z.B. mit der Umwandlung zweier serieller Datenströme in zweimal SPI zu tun gehabt. Lastete Anfangs ein 64 Makrozellen Lattice CPLD voll aus und hat nach meiner Optimierung in er 32er gepaßt. Man kennt aber danach jede Makrozelle beim Namen ;-) Die Funktionen der Schaltung ware: - Erkennung einer eindeutigen 16-Bit Folge in einem seriellen Datenstrom - Abwarten der ersten 256 Rahemsynchronisationen, bevor CPLD richtig aktiv wird - Ausblenden bestimmter Positionen innerhalb der Datenströme über 7 Bit Zähler - Erzeugung der Slave-Select Signale für zweimal SPI abhängig von der Position innerhalb der Datenströme - Erzeugung eines Signals, daß für den nachgeschalteten Controller Daten kommen - Pegelwandlung für 3 Signale - Kleinkram Wenn man es geschickt programmiert, kann man staunen, was alles in ein CPLD paßt. Als 74er Ersatz würde ich dann eher ein GAL nehmen. FPGAs sind übrigens nicht nur (normalerweise) größer, als CPLDs, sondern eigentlich ganz was anderes und deshalb nur schwer mit CPLDs zu vergleichen.
CPLD: Platz abschätzung: -Im gegensatz zum FPGA bestimmt die größe der logik die Anzahl der Pins, nicht unbedingt wieviel Pins du wirklich brauchst. grund dafür ist das feste verhältnis von Pinanzahl zu macrozellen (logikressource). Dieses verhältnis (Pin: makrozelle) ist je nach typ entweder 1:1 oder 1:2. -Die anzahl der makrozellen richtet sich hauptsächlich nach der Anzahl der FF. jede makrozelle hat 1 oder zwei FF. Zähle die FF und du hast eine gute Näherung für die Anzahl der nötigen Makrozellen. -die Anzahl der FF richtet sich nach der -Anzahl und Codierung (binary,one hot,gray) des Zustäde der FSM -anzahl der registerbits -Tiefe der Schieberegister -Breite der counter Im gegensatz zu FPGA's ist bei CPLD's auf wenig FF zu optimieren. Also z.B bei FSM Codierungen nicht one-hot wie für FPGA's sondern binary verwenden. So brauchst doe für z.B. 12 states 4 statt 12 FF. -Vorsichtshalber sollte man nach einer solchen Abschätzung der Makrozellenanzahl den wert um ein Drittel vergrößern. (falls man sich verzählt hat. -Für CPLD's sind oft andere Strukturen kleiner als für FPGA's. So habe ich ein design mit FF mit synchronen Reset/set (optimal klein für FPGA) auf asynchronen Set/reset umgeschrieben. Damit ist es kleiner im CPLD. -Falls das design zu gross wird, hilft es gelegentlich interne verbindungen nach draussen zu legen. Also zwei FF in unterschiedlichen Makrozellen nicht über die interen Switchmatrix zu verbinden, sondern der Ausgang des einen FF und den Eingang des anderen auf Pins zu legen und auf dem PCB zu verbinden. -> Summary: -am besten erst das design schreiben und auf platz optimieren, dann CPLD ordern. Ansonsten einen CPLD mit (viel) mehr Pins einplanen. falls dann doch ein kleinerer ausreicht, diesen auf das möglich kompatible PCB löten. Da die Footprints oft unterschiedlich sind für unterschiedliche große CPLD's, muss man oft mit verschachtelten (Konzentrischen) footprints arbeiten. Also innen die Pads für den kleinsten CPLD, außen die für den größten. 1) Pinanzahl als letztes festlegen
Danke für Eure Antworten. Ich musste noch etwas Hardwarebeschreibung nachblättern. Aber jetzt bin ich doch schon wieder viel, viel schlauer. Sebastian B. (neuerdings, da Sebastian schon öfters vergeben ist)
Grad bei Xilinx gefunden: http://www.xilinx.com/bvdocs/appnotes/xapp444.pdf Application note zu "CPLD Tricks und Kniffe"
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.