Upload
lloyd3000
View
88
Download
1
Embed Size (px)
DESCRIPTION
http://lloyd3000.wordpress.com/
Citation preview
20.04.2012
Elias Fröhlich Seite 1
TGT 11/1 Ellwangen
Lattice LC4128 Platine
Elias Froehlich
20.04.2012
Elias Fröhlich Seite 2
TGT 11/1 Ellwangen
Lattice LC4128 Platine
Seite:
1 CPLDs 4
1.1 Aufbau 4
1.2 Programmierung 4
1.3 Anwendung 4
1.4 Unterschiede zu anderen Chips 4
2 LC4128 Platine 5
2.1 Hardware 5
2.2 Installation 6
3 Abel 6
3.1 Programme erstellen 6
3.2 Befehle 9
3.2.1 Deklarationen 9
3.2.2 Gleichungen 9
3.2.3 Taktgleichungen 10
3.2.4 When-Then 11
3.2.5 Wahrheitstabellen 12
3.2.6 Weiterführende Links 12
3.3 Kompilieren 13
4 Anwendung 15
4.1 Binär zu BCD Wandler 15
4.2 Code-Lineal 17
5 Quellen 19
20.04.2012
Elias Fröhlich Seite 3
TGT 11/1 Ellwangen
Vorwort
Ich möchte ihnen in Diesem Dokument die Programmierung der Lattice LC4128V Platine sowie Allgemein
die Programmierung in Abel näher bringen. Dabei werde ich nur auf die Grundbefehle eingehen. Für Tiefere
einblicke in die Programmierung benutzen sie bitte die im weiteren Verlinkten Manuals. Ausserdem gehe ich
auf die Installation der benötigten Software, sowie einige Anwendungen ein.
20.04.2012
Elias Fröhlich Seite 4
TGT 11/1 Ellwangen
1. CPLDs
CPLD steht für Complex Programmable Logic Device was übersetzt Komplexes programmierbares Logik
Gerät bedeutet. CPLDs sind programmierbare ICs, die beim Verlust der Versorgungsspannung ihre
Programmierung nicht verlieren.
1.1 Aufbau
CPLDs bestehen aus einer And/Or Matrix, die durch das Programmieren verbunden wird.
Durch die hohe Anzahl der ein und Ausgänge eignen sie sich vor allem für komplexe, parallele Probleme bei
denen viele Ausgänge benötigt werden. Da sie sehr wenig Speicher (32-512 Flip-Flops) haben können
Anwendungen die viele Register benötigen nur sehr schwer gelöst werden. Sie können hohe
Geschwindigkeiten von 30-400Mhz erreichen, da sie intern eine einfache Verdrahtung haben. Außerdem
haben neuere CPLDs einen relativ geringen Stromverbrauch.
1.2 Programmierung
CPLDs können in Hardwarebeschreibungssprachen, die unteranderem vom Hersteller abhängen, wie z.B.
Abel, VHDL oder Verilog programmiert, oder direkt als Schaltplan gezeichnet werden. werden. Heute
werden meist jedoch nur noch die Hochsprachen wie Verilog und VHDL verwendet.
Programmiert werden sie normalerweise über den JTAG Bus.
1.3 Anwendung
CPLDs werden zum Beispiel für:
Uhren
PWM-Generatoren
Taktteiler
Seriell/Parallel Wandler
verwendet.
1.4 Unterschiede zu anderen Chips
Hier ein Vergleich mit anderen Programmierbaren Chiparchitekturen:
CPLDs FPGAs Mikrocontroller
Vorteile Geringer Stromverbrauch
Hohe Taktraten
Viel Speicher
Geringe Taktraten
Höhere Kosten
Geringere Kosten
Niedriger
Entwicklungsaufwand
Viel Speicher
Nachteile Wenig Speicher
Hoher Entwicklungsaufwand
Großer Platzbedarf
Großer Platzbedarf
Höherer Stromverbrauch
Hoher
Entwicklungsaufwand
Verliert Programmierung
Relativ langsam
Allerdings muss man bedenken, dass man die Architekturen schlecht miteinander vergleichen kann, da vor
allem die Mikrocontroller, für ganz andere Einsatzzwecke hergestellt werden.
20.04.2012
Elias Fröhlich Seite 5
TGT 11/1 Ellwangen
2. LC4128V Platine
2.1 Hardware
Wie oben abgebildet befinden sich auf der Platine:
Ein Lattice LC4128V CPLD mit 128 Flip-Flops und 100 Pins
2 Taster
8 Dip Schalter
2 high-active 7-Segment-Anzeigen
8 high-active Leds
Eine per Poti einstellbare Taktquelle (2-100Hz)
Eine per Jumper einstellbare Taktquelle (1Hz-1Mhz)
Per Jumper einstellbar, eine Manuelle Taktquelle
Per Jumper einstellbar externe Stromversorgung
Per Jumper einstellbar USB Stromversorgung
2 Power Leds
USB -> Jtag Wandler
2x8 Input Buchsen/Pins
2x8 Output Buchsen/Pins
20.04.2012
Elias Fröhlich Seite 6
TGT 11/1 Ellwangen
2.2 Installation
Vor dem eigentlichen Programmieren müssen natürlich noch die Treiber und das Programm installiert
werden.
Bei mir ließ sich der Treiber nicht auf Windows 7/64 Bit installieren!
Auf einem Windows XP Computer gab es allerdings keine Probleme.
Die benötigte Software isp Lever Classic finden sie unter:
http://www.latticesemi.com/dynamic/view_document.cfm?document_id=43204
Auch das benötigte Brenn-Programm isp VMsystems ist bereits enthalten.
Eine ausführliche Anleitung zur Installation des Treibers finden sie hier:
http://ces.karlsruhe.de:51080/~BUB/logik/LC4128-Board/USB-Treiber_installieren_LC4128.pdf
3. Abel
3.1 Programme erstellen
Nachdem alles installiert wurde, kann das erste Programm erstellt werden. Öffnen sie dazu isp Leaver
Classic.
Zuerst erstellen sie ein neues Projekt, nachdem Shematic/Abel und den Projektname angegeben wurde klickt
man auf Weiter.
Neues Projekt erstellen Projektname angeben
Shematic/ Abel auswählen
20.04.2012
Elias Fröhlich Seite 7
TGT 11/1 Ellwangen
Nachdem sie den richtigen CPLD sowie die richtige Bauform/Pinzahl angegeben hat, in diesem Fall
LC4128V, 100TQFP, wird das Projekt mit einem Klick auf Fertigstellen erstellt.
Mit Rechtsklick auf den ausgewählten CPLD und Klick auf die Schaltfläche NEW wird ein neues Sourcefile
erstellt. Als Formattyp wird in diesem Beispiel ABEL-HDL Module verwendet. Bei der Erstellung von
Schaltplänen wird hier Schematic ausgewählt.
CPLD auswählen
Richtige Bauform/Pinzahl angeben
20.04.2012
Elias Fröhlich Seite 8
TGT 11/1 Ellwangen
Nun öffnet sich der Text Editor, hier müssen noch Modul und File Name sowie optional ein Titel angegeben
werden. Dabei empfiehlt es sich denselben Modul und Filename zu verwenden.
Mit einem Klick auf OK wird das Sourcefile erstellt.
Sie können nun dieses Testprogramm verwenden und direkt zum Kapitel 3.3 Kompilieren springen, da jetzt
nur noch einzelne Befehle Vorgestellt werden.
MODULE test TITLE 'Testprogramm' declarations “deklarationen taster1, taster2 pin 15, 17; “Taster an Pin15 und 17 led0, led1 pin 60, 61 istype 'buffer,com'; “Leds an Pin 60, 61 equations led0 = taster2; “Led0 a= Taster2 led1 = taster1; “Led0 a= Taster2 END
20.04.2012
Elias Fröhlich Seite 9
TGT 11/1 Ellwangen
3.2 Befehle
3.2.1 Deklarationen
Nach dem Befehl “declarations“ können Flip-Flops und Ausgänge als Register deklariert werden, d.h. man
weist ihnen einen im Programm verwendeten Name zu. Dabei gibt es die Auswahl zwischen
kombinatorisch, getaktet und detailliert getaktet. Außerdem kann noch ein Pin angegeben werden. Wird
kein Pin angegeben wählt die Software automatisch einen Pin aus. Auch mehrere Register können auf einmal
deklariert werden. Dazu kann man sie entweder per Komma trennen oder sie durch eine Zahl am Ende
Nummerieren. Mehrere Register können der Übersichtlichkeit halber zu Sets zusammengefügt werden.
Hier einige Beispiele:
declarations "Inputs in1, in2, in3, in4 pin; “hier ohne Pin Angabe clk pin 88; “mit Pin Angabe "Outputs out_comb pin istype 'com'; “kombinatorisch out_reg_ff pin istype 'reg'; “getaktet out_reg_tff pin istype 'reg_T'; “detailliert getaktet led3..led0 pin 58..61 istype 'buffer,com'; “Der Compiler deklariert nun led3 bis led0 “an pin 58 bis 61 als kombinatorisches Register “Sets count = [in1..in4]; “in3 bis in0 können jetzt als count verwendet werden
3.2.2 Gleichungen
Nach dem Befehl equations können Logische und Arithmetische Operationen vorgenommen werden. Dabei
können folgende Befehle benutzt werden:
Logische Operationen
Operation Beispiele
! NOT
& AND
# OR
$ XOR
!$ XNOR
20.04.2012
Elias Fröhlich Seite 10
TGT 11/1 Ellwangen
Arithmetische Operationen
Operation Beispiele Beschreibung
- -A Negation
- A-B Subtraktion
+ A+B Addition
Nicht unterstützt bei Sets:
* A*B Multiplikation
/ A/B Division
<< A<<B Shift A links um B Bits
>> A>>B Shift A rechts um B Bits
declarations led = pin 58 istype 'buffer,com'; “Led deklarieren cnt0..cnt3 pin; out0..out3 pin; count = [cnt0..cnt3] “count als Set deklarieren equations led =cnt0 & !cnt2 # cnt3 “led an wenn: cnt0 und cnt2 nicht oder cnt3 high ist [out0..out3] = count + count “hier sparen Sets Zeit und sind übersichtlicher END
3.2.3 Taktgleichungen
Mit Taktgleichungen können zum Beispiel Zähler realisiert werden. Hierzu werden getaktete Register als Set
definiert, durch Addition bei jedem Takt wird daraus ein Zähler. Bei Taktgleichungen muss := verwendet
werden.
declarations; clk pin 88; “ein Clock pin muss deklariert werden in diesem Fall Pin 88 oder 89 cnt3..cnt0 pin istype 'reg'; “getaktete Register count = [cnt3..cnt0]; “Register als Set count deklarieren equations count.clk = clk; “das Set count wird mit dem Signal clk getaktet count := count + 1; “Bei jedem Takt wird 1 zu count addiert END
20.04.2012
Elias Fröhlich Seite 11
TGT 11/1 Ellwangen
3.2.4 When-Then
Mit dem Befehl When können bei bestimmten Ereignissen Operationen ausgeführt werden.
Dabei sind folgende Vergleichs-Operationen möglich:
Operation Beschreibung
== Gleich
!= Ungleich
< Kleiner
<= Kleiner gleich
> Größer
>= Größer gleich
Werden mehrere Befehle Benötigt, müssen { } um die Befehle gesetzt werden.
Hier ein Taktteiler als Beispiel:
MODULE taktteiler TITLE 'Ein 1/4 Taktteiler' declarations; clk pin 88; “ein Clock pin muss deklariert werden in diesem Fall Pin 88 oder 89 cnt3..cnt0 pin istype 'reg'; “getaktete Register count = [cnt3..cnt0]; “Register als Set count deklarieren equations count.clk = clk; “das Set count wird mit dem Signal clk getaktet WHEN (count == 4) THEN count := 0; “Wenn count = 4, count zurücksetzenen ELSE count = count +1; “Andernfalls 1 zu count addieren END
20.04.2012
Elias Fröhlich Seite 12
TGT 11/1 Ellwangen
3.2.5 Wahrheitstabellen
Mit dem Befehl truth_table der normalerweise am Ende des Programms verwendet wird können sie
Wahrheitstabellen erstellen. Dabei müssen nur die gewünschten Register und Werte angegeben werden.
Hier ein BCD zu 7-Segment Modul als Beispiel
MODULE BCDzu7Segment TITLE ‘BCD zu 7-Segment’ d3,d2,d1,d0 pin; a, b, c, d, e, f, g pin istype 'com'; truth_table ([d3, d2, d1, d0] -> [a, b, c, d, e, f, g]) “Hier werden die Register/Sets angegeben [ 0, 0, 0, 0] -> [0,0,0,0,0,0,1]; [ 0, 0, 0, 1] -> [1,0,0,1,1,1,1]; [ 0, 0, 1, 0] -> [0,0,1,0,0,1,0]; 3 -> [0,0,0,0,1,1,0]; “Neben der Binären kann auch die Dezimal Schreibweise [ 0, 1, 0, 0] -> [1,0,0,1,1,0,0]; “verwendet werden [ 0, 1, 0, 1] -> [0,1,0,0,1,0,0]; [ 0, 1, 1, 0] -> [0,1,0,0,0,0,0]; [ 0, 1, 1, 1] -> [0,0,0,1,1,1,1]; [ 1, 0, 0, 0] -> [0,0,0,0,0,0,0]; [ 1, 0, 0, 1] -> [0,0,0,0,1,0,0]; [ 1, 0, 1, 0] -> [0,0,0,1,0,0,0]; 11 -> [1,1,0,0,0,0,0]; [ 1, 1, 0, 0] -> [0,1,1,0,0,0,1]; [ 1, 1, 0, 1] -> [1,0,0,0,0,1,0]; [ 1, 1, 1, 0] -> [0,1,1,0,0,0,0]; [ 1, 1, 1, 1] -> [0,1,1,1,0,0,0]; END
3.2.6 Weiterführende Links
Dies war nur ein kleiner Einblick in die Programmierung mit Abel. Im Internet sind ausführliche Manuals
zur Abel Programmierung zu finden. Hier die wichtigsten:
Schematic and ABEL-HDL Design Tutorial (englisch):
http://www.latticesemi.com/documents/doc17357x25.pdf
ABEL-HDL Reference Manual (englisch):
http://140.113.144.123/Creative/abel_ref.pdf
20.04.2012
Elias Fröhlich Seite 13
TGT 11/1 Ellwangen
3.3 Kompilieren
Nach dem erfolgreichen kompilieren sollte neben JEDEC File ein grünes Häkchen erscheinen. Öffnen sie
nun das bereits eingerichtete (2.2 Installation) ispVM Systems. Mit einem Doppelklick neben den Name des
CPLDs öffnet sich das Device Information Fenster. Hier muss das Verzeichnis ihres JEDC Files angegeben
werden. Diesen finden sie unter anderem in der Kopfzeile von ispLeaver. Mit einem Klick auf GO Wird ihr
Programm in den CPLD geschrieben.
Um das Programm zu Kompilieren muss zuerst im
File Fenster der richtiger CPLD ausgewählt werden,
danach genügt ein Doppelklick auf JEDEC FILE CPLD auswählen
Doppelklick auf
JEDEC FILE
Beim Ersten Kompilieren sollte diese Fenster
erscheinen. Hier sollte Import ausgewählt
werden. Dieses Fenster lässt sich ausblenden
wenn unter Tools – Import Source
Constraint Option Die Option „Always
Import Source Constraints“ gesetzt wird.
„Import“
20.04.2012
Elias Fröhlich Seite 14
TGT 11/1 Ellwangen
ohne Fehler kompiliert
CPLD beschreiben
Dopellklick um „Device Information“ zu öffnen
Projektverzeichnis
Projektverzeichnis/Jedec File hier angeben
20.04.2012
Elias Fröhlich Seite 15
TGT 11/1 Ellwangen
4. Anwendung
4.1 Binär zu BCD Wandler
Zum erlernen des Schaltungseditors wurde ein Binär zu BCD Wandler im „shift and add3“ Verfahren
Programmiert. Dabei wird die Binärzahl zu BCD gewandelt und danach über eine Wahrheitstabelle
ausgegeben.
Bei diesem Verfahren werden alle Bits solange um 1 nach links geshiftet bis der Wert einer Spalte größer als
6 ist. Dann 3 zur entsprechenden Spalte hinzugefügt, wie man hier sehen kann:
Operationten Hunderter Zehner Einer Binär
HEX F F
Start 1 1 1 1 1 1 1 1
Shift 1 1 1 1 1 1 1 1 1
Shift 2 1 1 1 1 1 1 1 1
Shift 3 1 1 1 1 1 1 1 1
Add 3 1 0 1 0 1 1 1 1 1
Shift 4 1 0 1 0 1 1 1 1 1
Add 3 1 1 0 0 0 1 1 1 1
Shift 5 1 1 0 0 0 1 1 1 1
Shift 6 1 1 0 0 0 1 1 1 1
Add 3 1 0 0 1 0 0 1 1 1 1
Shift 7 1 0 0 1 0 0 1 1 1 1
Add 3 1 0 0 1 0 1 0 1 0 1
Shift 8 1 0 0 1 0 1 0 1 0 1
BCD 2 5 5
43 Ausgabe in dezimal
101011 Binäre Eingabe
20.04.2012
Elias Fröhlich Seite 16
TGT 11/1 Ellwangen
Um die Schaltung zu realisieren wurde ein add3 Modul im Schaltplaneditor erstellt:
Dieses wurde nach folgendem Schema in einem zweiten Schaltplan kaskadiert. Zum Schluss wurde noch ein
Programmcode geschrieben der die ausgegebenen BCD Werte über Wahrheitstabelle an die 7-Segment
Anzeigen weitergibt. Der Vollständige Programmcode ist im Anhang enthalten.
Wahrheitstabelle
a0 a1 a2 a3 s0 s1 s2 s3
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 0
0 0 1 1 0 0 1 1
0 1 0 0 0 1 0 0
0 1 0 1 1 0 0 0
0 1 1 0 1 0 0 1
0 1 1 1 1 0 1 0
1 0 0 0 1 0 1 1
1 0 0 1 1 1 0 0
1 0 1 0 X X X X
1 0 1 1 X X X X
1 1 0 1 X X X X
1 1 1 0 X X X X
1 1 1 1 X X X X
20.04.2012
Elias Fröhlich Seite 17
TGT 11/1 Ellwangen
4.2 Code Lineal
Des Weiteren wurde eine ein Codelineal gebaut. Dazu wurden Reflex Lichtschranken verwendet. Verwendet
Wurde der CNY70 der in vielen Hobby Anwendungen zum Einsatz kommt. Da er allerdings eine zu Kleine
Ausgangsspannung liefert wurde der Operationsverstärker LM324 verwendet. Dieser vergleicht eine
Referenzspannung, die sich über das Poti einstellen lässt, mit der Spannung des Fototransistors und verstärkt
sie beim schwellenpunkt um das bis zu Tausendfache. Das ergibt einen guten Logikpegel der von der
LC4128V Platine erfasst werden kann.
Der Schaltplan und das Layout wurden im Kostenfreien Layout Programm Eagle v6.2 erstellt.
Hier ist ein Bild des ersten Tests der aber leider einige Fehler enthielt:
Das Programm wandelt die Daten der Reflexlichtschranken im Gray-Code über eine Wahrheitstabelle in
Daten für die 7-Segment Anzeigen um.
MODULE graycode TITLE ‘Gray Code’ declarations “Inputs gray0..gray3 pin 3..6 ; //Eingänge
20.04.2012
Elias Fröhlich Seite 18
TGT 11/1 Ellwangen
"Outputs led79..led81,led84..led87 pin 79..81,84..87 istype 'buffer,com'; //7-Segemnt Anzeige 1 led65..led67,led69..led72 pin 65..67,69..72 istype 'buffer,com'; //7-Segemnt Anzeige 2 equations TRUTH_TABLE ([gray0.. gray3]->[led79..led81,led84..led87,led65..led67,led69..led72]); [0,0,0,0]-> [0,0,0,0,0,0,0, 1,1,1,1,1,0,1] ; //0 [0,0,0,1]-> [0,0,0,0,0,0,0, 1,1,0,0,0,0,0] ; //1 [0,0,1,1]-> [0,0,0,0,0,0,0, 1,0,1,0,1,1,1] ; //2 [0,0,1,0]-> [0,0,0,0,0,0,0, 1,1,1,0,1,1,0] ; //3 [0,1,1,0]-> [0,0,0,0,0,0,0, 1,1,0,1,0,1,0] ; //4 [0,1,1,1]-> [0,0,0,0,0,0,0, 0,1,1,1,1,1,0] ; //5 [0,1,0,1]-> [0,0,0,0,0,0,0, 0,1,1,1,1,1,1] ; //6 [1,1,0,0]-> [0,0,0,0,0,0,0, 1,1,1,0,0,0,0] ; //7 [1,1,0,1]-> [0,0,0,0,0,0,0, 1,1,1,1,1,1,1] ; //8 [1,1,1,1]-> [0,0,0,0,0,0,0, 1,1,1,1,1,1,0] ; //9 [1,1,1,0]-> [1,1,0,0,0,0,0 0,0,0,0,0,0,0,] ; //10 [1,0,1,0]-> [1,1,0,0,0,0,0, 1,1,1,1,1,0,1] ; //11 [1,0,1,1]-> [1,1,0,0,0,0,0, 1,0,1,0,1,1,1] ; //12 [1,1,0,0]-> [1,1,0,0,0,0,0, 1,1,1,0,1,1,0] ; //13 [1,0,0,1]-> [1,1,0,0,0,0,0, 1,1,0,1,0,1,0] ; //14 [1,0,0,0]-> [1,1,0,0,0,0,0, 0,1,1,1,1,1,0] ; //15 END
20.04.2012
Elias Fröhlich Seite 19
TGT 11/1 Ellwangen
Quellen: http://ces.karlsruhe.de:51080/~BUB/logik/LC4128-Board/Beschreibung_Platine_LC4128.pdf http://ces.karlsruhe.de:51080/~BUB/logik/LC4128-Board/USB-Treiber_installieren_LC4128.pdf http://www.mikrocontroller.net/articles/CPLD http://de.wikipedia.org/wiki/Complex_Programmable_Logic_Device http://ces.karlsruhe.de:51080/~BUB/logik/Anleitungen/AnleitungLever_LC4128.pdf http://www.latticesemi.com/products/designsoftware/ispleverclassic/index.cfm http://www.carookee.de/forum/VHDL/14/19816758 http://www.latticesemi.com/lit/docs/manuals/abel.pdf http://people.ee.duke.edu/~dwyer/courses/ece52/Binary_to_BCD_Converter.pdf http://www.mikrocontroller.net/topic/256738 http://www.cadsoftusa.com/