You are on page 1of 19

20.04.

2012

Lattice LC4128 Platine


Elias Froehlich

Elias Frhlich TGT 11/1 Ellwangen

Seite 1

20.04.2012

Lattice LC4128 Platine


Seite:

1 1.1 1.2 1.3 1.4 2 2.1 2.2 3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3 4 4.1 4.2 5

CPLDs Aufbau Programmierung Anwendung Unterschiede zu anderen Chips LC4128 Platine Hardware Installation Abel Programme erstellen Befehle Deklarationen Gleichungen Taktgleichungen When-Then Wahrheitstabellen
Weiterfhrende Links

4 4 4 4 4 5 5 6 6 6 9 9 9 10 11 12 12 13 15 15 17 19

Kompilieren Anwendung Binr zu BCD Wandler Code-Lineal Quellen

Elias Frhlich TGT 11/1 Ellwangen

Seite 2

20.04.2012

Vorwort
Ich mchte ihnen in Diesem Dokument die Programmierung der Lattice LC4128V Platine sowie Allgemein die Programmierung in Abel nher bringen. Dabei werde ich nur auf die Grundbefehle eingehen. Fr Tiefere einblicke in die Programmierung benutzen sie bitte die im weiteren Verlinkten Manuals. Ausserdem gehe ich auf die Installation der bentigten Software, sowie einige Anwendungen ein.

Elias Frhlich TGT 11/1 Ellwangen

Seite 3

20.04.2012

1. CPLDs
CPLD steht fr Complex Programmable Logic Device was bersetzt Komplexes programmierbares Logik Gert 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 Ausgnge eignen sie sich vor allem fr komplexe, parallele Probleme bei denen viele Ausgnge bentigt werden. Da sie sehr wenig Speicher (32-512 Flip-Flops) haben knnen Anwendungen die viele Register bentigen nur sehr schwer gelst werden. Sie knnen hohe Geschwindigkeiten von 30-400Mhz erreichen, da sie intern eine einfache Verdrahtung haben. Auerdem haben neuere CPLDs einen relativ geringen Stromverbrauch.

1.2 Programmierung
CPLDs knnen in Hardwarebeschreibungssprachen, die unteranderem vom Hersteller abhngen, 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 fr: Uhren PWM-Generatoren Taktteiler Seriell/Parallel Wandler

verwendet.

1.4 Unterschiede zu anderen Chips


Hier ein Vergleich mit anderen Programmierbaren Chiparchitekturen: CPLDs Geringer Stromverbrauch Hohe Taktraten FPGAs Viel Speicher Geringe Taktraten Hhere Kosten Groer Platzbedarf Hherer Stromverbrauch Hoher Entwicklungsaufwand Verliert Programmierung Mikrocontroller Geringere Kosten Niedriger Entwicklungsaufwand Viel Speicher Relativ langsam

Vorteile

Nachteile

Wenig Speicher Hoher Entwicklungsaufwand Groer Platzbedarf

Allerdings muss man bedenken, dass man die Architekturen schlecht miteinander vergleichen kann, da vor allem die Mikrocontroller, fr ganz andere Einsatzzwecke hergestellt werden.

Elias Frhlich TGT 11/1 Ellwangen

Seite 4

20.04.2012

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

Elias Frhlich TGT 11/1 Ellwangen

Seite 5

20.04.2012

2.2 Installation
Vor dem eigentlichen Programmieren mssen natrlich 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 bentigte Software isp Lever Classic finden sie unter: http://www.latticesemi.com/dynamic/view_document.cfm?document_id=43204 Auch das bentigte Brenn-Programm isp VMsystems ist bereits enthalten. Eine ausfhrliche 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. Neues Projekt erstellen Projektname angeben

Shematic/ Abel auswhlen

Zuerst erstellen sie ein neues Projekt, nachdem Shematic/Abel und den Projektname angegeben wurde klickt man auf Weiter.

Elias Frhlich TGT 11/1 Ellwangen

Seite 6

CPLD auswhlen
20.04.2012

Richtige Bauform/Pinzahl angeben

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 ausgewhlten CPLD und Klick auf die Schaltflche NEW wird ein neues Sourcefile erstellt. Als Formattyp wird in diesem Beispiel ABEL-HDL Module verwendet. Bei der Erstellung von Schaltplnen wird hier Schematic ausgewhlt.

Elias Frhlich TGT 11/1 Ellwangen

Seite 7

20.04.2012

Nun ffnet sich der Text Editor, hier mssen 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 knnen 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 taster1, taster2 pin 15, 17; led0, led1 pin 60, 61 istype 'buffer,com'; equations led0 = taster2; led1 = taster1; END Led0 a= Taster2 Led0 a= Taster2 deklarationen Taster an Pin15 und 17 Leds an Pin 60, 61

Elias Frhlich TGT 11/1 Ellwangen

Seite 8

20.04.2012

3.2 Befehle
3.2.1 Deklarationen Nach dem Befehl declarations knnen Flip-Flops und Ausgnge 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. Auerdem kann noch ein Pin angegeben werden. Wird kein Pin angegeben whlt die Software automatisch einen Pin aus. Auch mehrere Register knnen auf einmal deklariert werden. Dazu kann man sie entweder per Komma trennen oder sie durch eine Zahl am Ende Nummerieren. Mehrere Register knnen der bersichtlichkeit halber zu Sets zusammengefgt werden. Hier einige Beispiele: declarations "Inputs in1, in2, in3, in4 pin; clk pin 88; "Outputs out_comb pin istype 'com'; out_reg_ff pin istype 'reg'; out_reg_tff pin istype 'reg_T'; kombinatorisch getaktet detailliert getaktet hier ohne Pin Angabe mit Pin Angabe

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 knnen jetzt als count verwendet werden

3.2.2 Gleichungen Nach dem Befehl equations knnen Logische und Arithmetische Operationen vorgenommen werden. Dabei knnen folgende Befehle benutzt werden: Logische Operationen Beispiele NOT AND OR XOR XNOR

Operation ! & # $ !$

Elias Frhlich TGT 11/1 Ellwangen

Seite 9

20.04.2012

Arithmetische Operationen Operation Beispiele Beschreibung -A Negation A-B Subtraktion + A+B Addition Nicht untersttzt 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'; cnt0..cnt3 pin; out0..out3 pin; count = [cnt0..cnt3] equations led =cnt0 & !cnt2 # cnt3 [out0..out3] = count + count END led an wenn: cnt0 und cnt2 nicht oder cnt3 high ist hier sparen Sets Zeit und sind bersichtlicher count als Set deklarieren Led deklarieren

3.2.3 Taktgleichungen Mit Taktgleichungen knnen zum Beispiel Zhler realisiert werden. Hierzu werden getaktete Register als Set definiert, durch Addition bei jedem Takt wird daraus ein Zhler. Bei Taktgleichungen muss := verwendet werden. declarations; clk pin 88; cnt3..cnt0 pin istype 'reg'; count = [cnt3..cnt0]; equations count.clk = clk; count := count + 1; END das Set count wird mit dem Signal clk getaktet Bei jedem Takt wird 1 zu count addiert ein Clock pin muss deklariert werden in diesem Fall Pin 88 oder 89 getaktete Register Register als Set count deklarieren

Elias Frhlich TGT 11/1 Ellwangen

Seite 10

20.04.2012

3.2.4 When-Then Mit dem Befehl When knnen bei bestimmten Ereignissen Operationen ausgefhrt werden. Dabei sind folgende Vergleichs-Operationen mglich: Operation == != < <= > >= Beschreibung Gleich Ungleich Kleiner Kleiner gleich Grer Grer gleich

Werden mehrere Befehle Bentigt, mssen { } um die Befehle gesetzt werden. Hier ein Taktteiler als Beispiel: MODULE taktteiler TITLE 'Ein 1/4 Taktteiler' declarations; clk pin 88; cnt3..cnt0 pin istype 'reg'; count = [cnt3..cnt0]; equations count.clk = clk; WHEN (count == 4) THEN count := 0; ELSE count = count +1; das Set count wird mit dem Signal clk getaktet Wenn count = 4, count zurcksetzenen Andernfalls 1 zu count addieren ein Clock pin muss deklariert werden in diesem Fall Pin 88 oder 89 getaktete Register Register als Set count deklarieren

END

Elias Frhlich TGT 11/1 Ellwangen

Seite 11

20.04.2012

3.2.5 Wahrheitstabellen Mit dem Befehl truth_table der normalerweise am Ende des Programms verwendet wird knnen sie Wahrheitstabellen erstellen. Dabei mssen nur die gewnschten 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]) [ 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]; [ 0, 1, 0, 0] -> [1,0,0,1,1,0,0]; [ 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

Hier werden die Register/Sets angegeben

Neben der Binren kann auch die Dezimal Schreibweise verwendet werden

3.2.6 Weiterfhrende Links Dies war nur ein kleiner Einblick in die Programmierung mit Abel. Im Internet sind ausfhrliche 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

Elias Frhlich TGT 11/1 Ellwangen

Seite 12

20.04.2012

3.3 Kompilieren

CPLD auswhlen

Um das Programm zu Kompilieren muss zuerst im File Fenster der richtiger CPLD ausgewhlt werden, danach gengt ein Doppelklick auf JEDEC FILE

Doppelklick auf JEDEC FILE

Import Beim Ersten Kompilieren sollte diese Fenster erscheinen. Hier sollte Import ausgewhlt werden. Dieses Fenster lsst sich ausblenden wenn unter Tools Import Source Constraint Option Die Option Always Import Source Constraints gesetzt wird.

Nach dem erfolgreichen kompilieren sollte neben JEDEC File ein grnes Hkchen 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.

Elias Frhlich TGT 11/1 Ellwangen

Seite 13

Projektverzeichnis

CPLD beschreiben

20.04.2012

Dopellklick um Device Information zu ffnen

ohne Fehler kompiliert

Projektverzeichnis /Jedec File hier angeben

Elias Frhlich TGT 11/1 Ellwangen

Seite 14

20.04.2012

4. Anwendung
4.1 Binr zu BCD Wandler
Zum erlernen des Schaltungseditors wurde ein Binr zu BCD Wandler im shift and add3 Verfahren Programmiert. Dabei wird die Binrzahl zu BCD gewandelt und danach ber eine Wahrheitstabelle ausgegeben.

43 Ausgabe in dezimal

101011 Binre Eingabe

Bei diesem Verfahren werden alle Bits solange um 1 nach links geshiftet bis der Wert einer Spalte grer als 6 ist. Dann 3 zur entsprechenden Spalte hinzugefgt, wie man hier sehen kann: Operationten Hunderter Zehner Einer Binr HEX F F 1111 1111 Start 1 1111 111 Shift 1 1 1 1 1 1 1 11 Shift 2 111 1111 1 Shift 3 1010 1111 1 Add 3 1 0101 1111 Shift 4 1 1000 1111 Add 3 11 0001 111 Shift 5 110 0011 11 Shift 6 1 0 0 1 0011 11 Add 3 1 0010 0111 1 Shift 7 1 0010 1010 1 Add 3 10 0101 0101 Shift 8 BCD 2 5 5

Elias Frhlich TGT 11/1 Ellwangen

Seite 15

20.04.2012

Um die Schaltung zu realisieren wurde ein add3 Modul im Schaltplaneditor erstellt: 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 11 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 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 Vollstndige Programmcode ist im Anhang enthalten.

Elias Frhlich TGT 11/1 Ellwangen

Seite 16

20.04.2012

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 Operationsverstrker LM324 verwendet. Dieser vergleicht eine Referenzspannung, die sich ber das Poti einstellen lsst, mit der Spannung des Fototransistors und verstrkt 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 fr die 7-Segment Anzeigen um. MODULE graycode TITLE Gray Code declarations Inputs gray0..gray3

pin 3..6 ;

//Eingnge

Elias Frhlich TGT 11/1 Ellwangen

Seite 17

20.04.2012

"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

Elias Frhlich TGT 11/1 Ellwangen

Seite 18

20.04.2012

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/

Elias Frhlich TGT 11/1 Ellwangen

Seite 19