Hallo Zusammen, ich möchte demnächst ein Projekt mit CPLD in VHDL beginnen. Habe bis jetzt immer nur was mit AVRs gemacht, mein Wissen zu CPLDs ist also relativ mau. Habe mir das Pollin Board mit XC95144XL bestellt und warte nur noch bis es ankommt. Ich wollte aber gern vorher schon ausloten, was damit alles möglich sein kann. Als erstes Projekt hab ich mit einen multifunktionalen Counter überlegt. Dieser soll folgende Funktionen erfüllen. Als 24bit Binär-Counter dienen, per Clock gesteuert, mit 24 Ausgängen. Zusätzlich möchte ich aber gern (z.b. wenn ich ein zu definierendes Steuerpin auf Low ziehe, oder so ähnlich) auch 24 Eingänge haben (die von einem AVR geschalten werden) die dann einfach auf die SELBEN Ausgänge geschaltet werden, wie der vom Clock gesteuerte Counter. Sozusagen nur als Durchlass von AVR Signalen, bei Bedarf. Und zu guter Letzt bräuchte ich dann noch (z.b. bei weiterem Steuer-Pin) die Möglichkeit, per AVR einen Counter-Stand an den Eingängen vorzugeben, woraufhin der Counter nur bis zu diesem "eingestellten" Zählerstand zählt, und danach stoppt sowie eine Flanke schaltet (als Steuereingang für den AVR). Meine Frage ist nun eigentlich, ob so eine Funktionalität, vorzugsweise mit besagtem CPLD, überhaupt realisierbar ist ;-) Oder seht ihr hier etwas, was so definitiv nicht umsetzbar ist? Würde natürlich bei Gelegenheit versuchen mich in die VHDL Sache einzuarbeiten und besagtes umzusetzen. Wenn aber jemand irgendwelche Links zu einem gut verständlichen Einstieg bzw. Realisierung von ähnlichen Projekten hat, wäre ich natürlich sehr dankbar. greetz
Nicht das ich das Datenblatt des 95144 jetzt gelesen habe, aber der allgemeinen Bezeichnungslage von Xilinx folgend, sind da 144 FlipFlops drin. Du brauchst aber nur 24. Es waere vielleicht noch interessant das du die Daten seriell reinschreiben kannst und sie dann einmalig in dein Arbeitsregister uebernimmst. Dann wuerdest du doppelt soviele FFs brauchen. Aber dann waer immmer noch genug Platz um da zwei I2C-Bus ICs und etwas Logicgemuese reinzubekommen. Olaf
Hmm, mit I2C Schnittstelle wäre sogar noch besser, aber wollte als Amateur natürlich nicht zu hoch einsteigen, weiß ja nicht wie schwierig das zu programmieren ist. Das heißt ich könnte eventuell eine I2C Schnittstelle einbauen die immer einen Wert in einem Register speichert und der Counter läuft dann jedes mal nur bis zu diesem Wert. Bzw. die zweite Funktion, dass aus dem Register direkt auf die Ausgänge geschaltet werden kann (auf Wunsch/Signal)? Wie viele Makrozellen werde ich dafür voraussichtlich benötigen? Würde das vielleicht sogar in ein XC9572XL(-PCG44) mit 72 Makrozellen und 34 verfügbaren I/O-Pins passen? Das wäre optimal für mich...
> eventuell eine I2C Schnittstelle einbauen Mach am Anfang leichter eine SPI-Schnitte rein, das ist nur ein Schieberegister und hat nicht das ACK-Gezerre vom I2C... :-/ > Würde das vielleicht sogar in ein XC9572XL(-PCG44) > mit 72 Makrozellen und 34 verfügbaren I/O-Pins passen? Mit SPI: ja. Mit I2C: wenn du es simpel hältst, ja.
> Hmm, mit I2C Schnittstelle wäre sogar noch besser, aber wollte als > Amateur natürlich nicht zu hoch einsteigen, weiß ja nicht wie schwierig > das zu programmieren ist. Es sagt ja auch keiner das du das einbauen musst. Ich wollte dir nur zeigen was machbar ist. Ich habe I2C in einem XC9536, also dem kleinsten CPLD, eingebaut und der ist dadurch zu etwa 70% gefuellt. Funktionalitaet etwa wie ein PCF8574. > Würde das vielleicht sogar in ein XC9572XL(-PCG44) mit 72 Makrozellen > und 34 verfügbaren I/O-Pins passen? Das wäre optimal für mich... Das sollte kein Problem sein. Im uebrigens kannst du ja schon jetzt losprogramieren. Die ISE sagt dir schon ob es da reinpasst. Allerdings ist I2C-Bus wohl wirklich nicht das beste fuer einen Anfaenger. Ich muss auch zugeben das ich da einiges im Internet gefunden und uebernommen habe. Es gibt da naemlich zwei kleine Probleme. 1. Du brauchst einen Pin der gleichzeitig Ein und Ausgang ist. Da muss man wohl ein bisschen von der reinen Verilog-Lehre abweichen und ein spezielles Konstruct von Xilinx waehlen. 2. Normalerweise wird immer und zurecht empfohlen syncrone Designs zu machen die mit einem externen Takt arbeiten. Das haette aber nicht mehr ins CPLD gepasst. Dagegen ist SPI sehr einfach. Kann man ja schon daran sehen das man ein einfaches Schieberegister aus der 74er oder 40er Serie an SPI anschliessen kann. SPI ist ja auch kein Bus, sondern wildes geklapper mit Datenleitungen das an die Beduerfnisse von nur wenigen FFs enthaltenen Schieberegister angepasst ist. :-) Olaf
> SPI ist ja auch kein Bus, sondern wildes geklapper mit Datenleitungen > das an die Beduerfnisse von nur wenigen FFs enthaltenen > Schieberegister angepasst ist. :-) Naja, da könnte sich Widerspruch regen. Sieh dir mal die original Motorola-Spec an. Dass man da auch Schieberegister anschliessen kann, dürfte eigentlich als Vorteil gewertet werden. Die galvanische Entkopplung ist trivial, der Bus ist pfeilschnell (z.B. kein Adressprotokoll-Overhead), er arbeitet Vollduplex (gleichzeitiges Empfangen und Senden) und zudem ist die Bezeichnung SPI lizenzfrei ;-) > Da muss man ein bisschen von der reinen Verilog-Lehre abweichen ... und in VHDL beschreiben. Aber das will B.Urner sowieso machen. Wobei ich mir vorstellen könnte, dass man auch in Verilog ohne Tricks einen bidirektionalen Tristate-Puffer beschreiben kann.
> 1. Du brauchst einen Pin der gleichzeitig Ein und Ausgang ist. Da muss > man wohl ein bisschen von der reinen Verilog-Lehre abweichen und ein > spezielles Konstruct von Xilinx waehlen. muss dieser Pin wirklich als Ein und Ausgang deklariert werden? Vielleicht hab ich mich auch nicht perfekt ausgedrückt. Würde eigentlich immer einen Wert vorgeben, bis zu dem gezählt werden soll. Zurücklesen muss ich an diesem 'Bus' (sei es nun I2C oder SPI) aber nicht. Lieber wäre es mir der CPLD schaltet irgendwo eine Flanke raus, wenn er den vorgegebenen Wert erreicht hat und aufhört mit zählen. Das sollte doch die Komplexität diese Schieberegisters etwas verringern oder? > Es sagt ja auch keiner das du das einbauen musst. Ich wollte dir nur > zeigen was machbar ist. nene, das is ne super Idee. Aber wie gesagt meine Erfahrungen sind beschränkt und fürs erste werde ich sicherlich mit dem Pollin Code zum Board ein bissel rumspielen und modifizieren um ein klein wenig zu lernen. Habt ihr vielleicht sonst noch paar nützliche Links oder PDFs, für die SPI oder I2C Geschichte in VHDL? Würde mir sicherlich alles weiterhelfen, danke schonmal :-)
Du bist nicht der Erste, der sowas macht. Such mal hier im Forum nach
1 | +VHDL +SPI +Slave |
Oder probiers mal auf meiner HP ;-) http://www.lothar-miller.de/s9y/categories/26-SPI-Slave
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.