Hallo Leute,
habe nun mit meinem ersten VHDL Projekt begonnen. Es soll ein kleiner
Waveform-Generator werden.
Soweit klappt alles ganz gut, aber jetzt sind mir die Makrozellen des
XC9572XL ausgegangen. Wie optimiere ich den Code denn am besten auf eine
geringe Nutzung der Zellen hin (siehe Anlage)?
Als blutiger Anfaenger und Hobbyist wuerde mich auch interessieren, wie
man den VHDL Code noch besser aufbauen kann, oder ob ich einige Don'ts
drin habe. Pulser.vhd und PwmWave.vhd sind von mir, SineWave.vhd hab ich
aus dem Netz uebernommen. Wenn jemand mit etwas Erfahrung mal drueber
schauen wuerde, waere ich sehr dankbar.
Das mit den Makrozellen stoert mich insbesondere, weil ich in die CPLD
eigentlich noch UART oder zumindest einen I2C-Slave (ja lacht ruhig)
integrieren wollte, damit die Wellenformen von einer externen Quelle aus
eingegeben werden koennen. Ausserdem sollte noch ein "arbitrary function
generator" rein, der Wellenformen aus uebergebenen Daten erzeugt oder
diese aus einem FIFO liest. Spaeter moechte ich an die CPLD eine
schnelle Clock (100MHz) anschliessen, damit sehr schnelle Wellenformen
erzeugt werden koennen. Sind CPLDs fuer solche Aufgaben ueberhaupt
geeignet, bzw. ist eine derartige Funktionsvielfalt damit ueberhaupt
realisierbar? Sollte ich vielleicht lieber auf Analog-Technik umsteigen?
Nichtsdestotrotz interessieren mich VHDL und GAL sehr. Vielleicht gibts
einen besseren Vorschlag fuer ein Hobby-Einsteigerprojekt in die
Materie.
@ Mr. Greenhorn (Gast)
>Das mit den Makrozellen stoert mich insbesondere, weil ich in die CPLD>eigentlich noch UART oder zumindest einen I2C-Slave (ja lacht ruhig)>integrieren wollte, damit die Wellenformen von einer externen Quelle aus>eingegeben werden koennen. Ausserdem sollte noch ein "arbitrary function>generator" rein, der Wellenformen aus uebergebenen Daten erzeugt oder>diese aus einem FIFO liest.
Jaja, so jung und naiv waren wir alle mal ;-)
Schon mal überschlagen, wiviel FlipFlops und RAM für sowas gebraucht
werden?
Sowas geht nur in einem FPGA.
>erzeugt werden koennen. Sind CPLDs fuer solche Aufgaben ueberhaupt>geeignet,
Nein.
> bzw. ist eine derartige Funktionsvielfalt damit ueberhaupt>realisierbar? Sollte ich vielleicht lieber auf Analog-Technik umsteigen?
Warum? Nimm ein FPGA, das ist nicht schwerer programmierbar als ein
CPLD.
>Nichtsdestotrotz interessieren mich VHDL und GAL sehr.GAL ist out.
MFG
Falk
Hallo Falk,
dachte GAL waere ein Oberbegriff fuer FPGAs und CPLDs. Werde mal gucken,
obs FPGAs gibt die
1.) bastlerfreundlich sind (am besten THT Sockel)
2.) bei den ueblichen Verdaechtigen zu bekommen sind
Es war sehr aufwendig das Board fuer meine CPLD zu entwerfen, zu aetzen
und zu loeten, es dauert bestimmt wieder 3 Wochenenden um ein Board fuer
eine FPGA zu erstellen. Schade, dass CPLDs fuer sowas zu klein sind. Vor
allem bei den FPGAs braucht man doch viel Peripherie, wie externe
Speichermedien, wenn ich nicht irre. Ein Starterkit zu kaufen kommt fuer
mich nicht in Frage, dass geht gegen die Bastler-Ehre.
Dann schwenke ich das Projekt mal um auf eine Servo-Steuerung. Ich
denke, die Ansteuerung von einem Servo-Array sollte auch mit UART noch
zu verwirklichen sein.
Aber was ich echt gerne wissen wuerde: Was hat denn jetzt im Code den
groessten Einfluss auf die Anzahl der benutzten Macrozellen?
Mr. Greenhorn schrieb:> dachte GAL waere ein Oberbegriff fuer FPGAs und CPLDs.
Nein. PLD ist der Oberbegriff für "Programmable Logic Devices"
> Werde mal gucken, obs FPGAs gibt die ...
Vergiss es. Kein aktuelles FPGS kann die erste Forderung erfüllen.
> Ein Starterkit zu kaufen kommt fuer> mich nicht in Frage, dass geht gegen die Bastler-Ehre.
Schnitzt du deine Transistoren auch noch selber?
Du kannst mit einem FPGA noch hinreichend viel Basteln, und dabei lernst
du mehr, als die 1001. Platine auf Lochraster aufzubauen...
> Aber was ich echt gerne wissen wuerde: Was hat denn jetzt im Code den> groessten Einfluss auf die Anzahl der benutzten Macrozellen?
Die nötigen Flipflops. Dieses 9572 hat nur 72 Speicherzellen.
> Aber was ich echt gerne wissen wuerde: Was hat denn jetzt im Code den> groessten Einfluss auf die Anzahl der benutzten Macrozellen?
Das hier:
type memory_type is array (0 to 29) of integer range -128 to 127;
Das wären (so gesehen etwas vereinfacht) schon mal 30*8 FFs = 240
Speicherzellen... :-o
Die heutigen Tools lassen doch eine Simulation zu. Daher sollte man
unbedingt eine Simulation laufen lassen, bevor man sich fuer ein
spezifisches Bauteil entscheidet, ausser man ist sicher, es auch
hineinzukriegen. Eine erste Vorabklaerung ist moeglich, indem man eine
Speicherstelle als eine Makrozelle setzt.
Ein Oschi schrieb:> Eine erste Vorabklaerung ist moeglich, indem man eine> Speicherstelle als eine Makrozelle setzt.
Das ist aber insbesondere bei konstanten Arrays evtl. irreführend, weil
die ja auch hart in der Kombinatorik verdrahtet werden könn(t)en und
dann keine Speicherzellen brauchen...
Mr. Greenhorn schrieb:> Spaeter moechte ich an die CPLD eine> schnelle Clock (100MHz) anschliessen, damit sehr schnelle Wellenformen> erzeugt werden koennen. Sind CPLDs fuer solche Aufgaben ueberhaupt> geeignet,
Ich hab mein CPLD-Testboard schon mit über 200 MHz laufen lassen. Das
geht, aber für die von Dir gedachten Funktionen ist ein CPLD zu klein.
Die angepeilten 100 MHz sind auf einem aktuellen Spartan6 eher zu
schaffen, als auf einem älteren Spartan3 bzw. Spartan3E.
Duke
Man könnte an das CPLD ein externes RAM anschließen und die Wellenformen
generell nur von dort aus "abspielen", damit sollte es machbar sein. Bei
100MHz wird das allerdings schon eng und das RAM sollte schon 16 Bit
breit sein, damit man mit 12-15ns Zugriffzeit auskommt. Als
Schnittstelle würde ich dann lieber SPI nehmen, das lässt sich
wesentlich "Makrozellen-ärmer" realisieren.
Jörg
@ Ein Oschi (hacky)
>Die heutigen Tools lassen doch eine Simulation zu.
Die alten auch schon.
>Daher sollte man>unbedingt eine Simulation laufen lassen, bevor man sich fuer ein>spezifisches Bauteil entscheidet,
Nö, das sagt einem der Simulator keine Sekunde. Sondern der Fitter, der
packt nämlich die Logik in die ICs.
MFG
Falk
Die Sinustabelle kann man auch über eine CASE Konstruktion machen und
damit sozusagen hart verdrahten. Dann wird es höchstens eng mit den
Produkttermen bzw. man bekommt vom Fitter (ungewollte) "burried nodes"
also Zwischensignale erzeugt, die einem das Timing versauen können.
Ulf schrieb:>>Ich hab mein CPLD-Testboard schon mit über 200 MHz laufen lassen> Was genau war das ?
Ein Impulsformer (Trigger rein, eine einfache Signalform raus), mit
Zählern realisiert. Auf einem XC9536XL-10C, offiziell spezifiziert mit
bis zu 100 MHz.
Duke
Das Problem ist, richtige FPGAs kannst du als Bastler nur als fertiges
Modul nutzen und das ist dann ziemlich teuer (vgl. GODIL).
Ich hab mir den ganzen Tag Gedanken um Applications gemacht und bin zu
dem Entschluss gekommen, dass eine CPLD eigentlich hauptsaechlich zur
schnellen Bearbeitung von massiv parallelen Signalen gedacht ist.
Ich denke, als Projekt damit werde ich dann einen Logic-Analyzer in
Angriff nehmen. Das sollte eigentlich mit einer CPLD leicht machbar
sein. Ich packe einfach ein paar SRAM Module aufs Board die ich von der
CPLD fuellen lasse und dann per UART oder USB auslese und am PC
auswerte. Ich habe sowas noch nie gemacht, denke aber, dass die
Schwierigkeit wohl beim Synchronisieren von Lese- und Schreibprozessen
sein duerfte. Deswegen wuerde ich mehrere Puffer nuzten und ueber ein
Signal melden wann ein Puffer ausgelesen werden kann. Mit genuegend
Puffern sollte das dann doch klappen. Das ist jedenfalls das Konzept.
Hat jemand vielleicht noch ein paar gute Tipps dafuer?