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 :-)
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.