19
20.04.2012 Elias Fröhlich Seite 1 TGT 11/1 Ellwangen Lattice LC4128 Platine Elias Froehlich

Lattice LC4128 Platine

Embed Size (px)

DESCRIPTION

http://lloyd3000.wordpress.com/

Citation preview

Page 1: Lattice LC4128 Platine

20.04.2012

Elias Fröhlich Seite 1

TGT 11/1 Ellwangen

Lattice LC4128 Platine

Elias Froehlich

Page 2: Lattice LC4128 Platine

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

Page 3: Lattice LC4128 Platine

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.

Page 4: Lattice LC4128 Platine

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.

Page 5: Lattice LC4128 Platine

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

Page 6: Lattice LC4128 Platine

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

Page 7: Lattice LC4128 Platine

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

Page 8: Lattice LC4128 Platine

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

Page 9: Lattice LC4128 Platine

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

Page 10: Lattice LC4128 Platine

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

Page 11: Lattice LC4128 Platine

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

Page 12: Lattice LC4128 Platine

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

Page 13: Lattice LC4128 Platine

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“

Page 14: Lattice LC4128 Platine

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

Page 15: Lattice LC4128 Platine

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

Page 16: Lattice LC4128 Platine

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

Page 17: Lattice LC4128 Platine

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

Page 18: Lattice LC4128 Platine

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

Page 19: Lattice LC4128 Platine

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/