GAL-Programmering med WinCUPL 2015
Transcription
GAL-Programmering med WinCUPL 2015
Programmering af Gal-kredse Version 23/11-2015 Programmering af GAL-kredse. Bemærk: Kredsene kan kun klare 5 Volt !!! også på indgangene !! Derfor skal de kredse, der styrer GAL-kredsen også arbejde på 5 Volt !!! GAL-kredse er en type IC-kredse, der indeholder et stort antal GATEs og Flip-Flops, men de enkelte dele i kredsen er ikke forbundne med hinanden. Forbindelserne opstår først efter en programmering, ud fra boolske ligninger. Til at skrive og definere de boolske ligninger, og oversætte dem til anvendelig kode, dvs. kompilere dem, kan programmet WinCUPL bruges. Vha. programmet kan man navngive indgange og udgange i IC’en, og fx angive boolske ligninger for udgangene. WinCUPL er et ret gammelt program, - gad vide, om det kører på de nye Windows – OS ?? Jeg skrev i september 2015 til Lattice for evt. nyt program: 2 Svar følger: Hi Valle The GAL16V8’s are discontinued although you can still find them for sale in the market. The starting point these days tends to be a small CPLD such as the ispMach4000 family. There is a free downloadable package on our web site that you can install on PCs which still supports the GAL16V8. It’s called the ispLEVER Classic license. http://www.latticesemi.com/en/Support/Licensing.aspx#classic Hope your students will benefit. Best Regards Michael Hello Thoro Lattice tries to support future designers by giving free access to many of our software. Af: Valle Thorø Side 1 af 20 Programmering af Gal-kredse Version 23/11-2015 I would recommend you and your students download the free Lattice IspLever Clasisc software http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/FPGAandLDS/ispLEVERClassic.aspx#_D6D0016A58E549558DD2219C2649E1D8 IspLeverClassic supports the old GAL16V8s but also more complex cplds that allow students to understand PLL’s and memory components as used in programmable logic. It still supports Abel entry( similar to CupL) but also the more common Vhdl and Verilog lannguage( and Schematic). It incorporate SynplicityPro synthesis tool as part of the free package. You will need to create a Latticesemi.com account (free to anyone) to be able to download the software. We only need the PCs NIC or MAC address to generate a free license. Adam Clarkson Strategic Account Manager Europe Lattice Semiconductor UK Ltd 3000 Cathedral Hill Guildford Surrey GU2 7YB Vha. programmet WinCUPL kan man navngive indgange og udgange i IC’en, og angive boolske ligninger for udgangene. Når de boolske ligninger er defineret, kan WinCUPL oversætte kildeteksten, og generere en fil, der derefter skal flyttes over i – eller brændes ind i GAL-kredsen, Filen kaldes også en ” Fuse-map-fil ”. Det er en standardiseret fil efter JEDEC-organisationen, og filen får efternavnet ***.JED. WinCUPL-programmet kan hentes på min hjemmeside. /Elektronik / GAL. http://vthoroe.dk/elektronik.htm#Gal Eller fra Atmels hjemmeside: http://www.atmel.com/products/microcontrollers/default.aspx Søg efter ”WinCupl” Under installeringen spørges efter et serienummer. Her kan bruges 60008009, eller 66999998. / Valle Af: Valle Thorø Side 2 af 20 Programmering af Gal-kredse Version 23/11-2015 Programmerbare kredse som fx GAL har ikke fra starten nogle indbyggede funktioner – som fx. NAND-gates, OR-gates osv. Men de har et hav af indbyggede muligheder og ledninger, der bare endnu ikke er forbundne. Det er disse forbindelser, der skabes ved programmering. Via programmering kan man definere output til fx at være et boolsk udtryk med forskellige indgange som variable. Et eksempel er vis her til højre! Output X og Y følger ligningerne: X=AB+C Y AB C De lilla punkter skal forstås som vist her til højre: And-gatene har 3 input. Her er vist en skitse af, hvordan de forskellige forbindelser i kredsen i princippet laves. I tidligere udgaver var alle forbindelser intakte, men ved programmering ødelagde man de forbindelser, der ikke skulle bruges. Det skete ved at tilføre en ”stor” strøm, så forbindelserne smeltede, ligesom en ”sikring smeltes”, ved for stor strøm!! Men udviklingen har betydet, at det i dag reelt set er en form for switch, der sørger for forbindelserne, hvor det ønskes. Derfor kan GAL-kredse i dag både slettes og re-programme- En ”Fuse” smeltes !! res mange gange. Programmerede kredse kan fungere mere end 20 år. Programmeringen sker via specielt brænderudstyr. Af: Valle Thorø Side 3 af 20 Programmering af Gal-kredse Version 23/11-2015 Endnu et eksempel på etablering af boolske ligninger i kredsen: De fleste brændere skal bruge en “fuse” informationsfil, en såkaldt Fusemap, en JEDEC-fil, med extension ”.JED” GALs er forbogstaverne for Generic Array Logic devices. ( Vist nok ”Generel” Array Logic ? ) Her er vist hvordan GAL-kredse nummereres. GAL-kredse er meget fleksible kredse. De kan programmeres til på samme chip at udgøre både kombinatorisk logik, fx AND, OR, NAND osv., og registeret logik-funktioner, som bruges i tællere, skifteregistere, osv. Det vil sige, der kan laves enten simple boolske udtryk, eller der kan designes tællere vha. de indbyggede D-FF. GAL-kredse er hurtige, med propagation delays ned til så kort som 7 ns. De kan måle sig med standard 7400 og 74LS serierne. De kan programmeres gentagne gange, op til 100 gange. Sletning og programmering tager kun få sekunder. Der findes flere typer af GAL-kredse. Denne tekst dækker typerne GAL16V8 ( og GAL20V8 ). GAL16V8 har stel på pin 10, og +5 volt (VCC) på pin 20. Pin 12 til 19 er hver især forbundet til en Output Logic Macro Cells (OLMC). OLMC’en tillader output-pins at blive brugt som inputs, kombinatorial outputs, registered outputs og input/output pins. Af: Valle Thorø Side 4 af 20 Programmering af Gal-kredse Version 23/11-2015 Pin 2 til 9 er altid ”general purpose” input pins. Hvis en af OLMC’ cellerne er konfigureret som registered output, er pin 1 Clock input og pin 11 er Output Enable for register-outputs. Hvis ingen af OLMC’erne bruges, er pin 1 og 11 general purpose inputs. GAL16V8 Pin-outline: 20V8 har et lignende design. Hovedforskellen fra 16V8 er at der er flere inputs / outputs. GAL16V8 Her er vist et blokdiagram over kredsen, taget fra databladet for GAL16V8D. I venstre side ses det programmerbare AND-array. I højre side er ”OUTPUT LOGIC MACRO CELLERNE” kaldet OLMC vist. Herunder er der zoomet lidt mere ind, så ANDarrayet til venstre for én af OLMC-cellerne kan ses. Af: Valle Thorø Side 5 af 20 Programmering af Gal-kredse Version 23/11-2015 Skal en udgang “blot” være beskrevet vha. en boolsk ligning, bruges OLMC’erne ikke !! Konfigurationsmuligheder for OLMC’erne Macrocellerne kan ( ved programmering ) konfigureres til forskellige “udseender”. Her ses et blokdiagram for en Output Logic Macrocell fra kredsene GAL16V8, GAL18V10 eller GAL22V10 I midten ses en D-FlipFlop. Og til højre for den en Multiplexer. Heraf indses, at outputtet kan vælges direkte fra And / OR-arrayet, evt. inverteret, eller fra Q eller inverteret Q fra D-FFén. Endvidere ses, at outputtet kan tages tilbage til And / OR-arrayet. Det er endvidere muligt at tilgå Asynkron Reset og Synkron Preset på D-FFérne. Skal D-FF’en bruges, skal man skrive ligning til ”Output_name.d” Tilsvarende til D-FF’ens øvrige indgange. Brugbare ekstensions for g22v10 og g16v8 er: .AR /* Asynkron Reset af flip-flop */ .SP /* Synkron Preset af flip-flop */ .OE /* Output Enable */ .D /* D input for D-type flip-flop */ Se evt: http://www.rexfisher.com/Downloads/CUPL%20Tutorial.htm Af: Valle Thorø Side 6 af 20 Programmering af Gal-kredse Version 23/11-2015 WinCUPL Sproget Windows Universal Compiler for Programmable Logic (CUPL), Programmet WINCUPL bruges til at designe GAL-kredse, og generere en JEDEC-fil ( *.JED ) der så skal brændes over i kredsen. OBS. Vigtigt. Undlad altid at bruge æ, ø og å i amerikanske programmer. Dette gælder i stinavne, i tekst, der skrives ind i programmet, ja selv i kommentarer !! Start WinCUPL. WinCUPL Main window. Start et nyt projekt. File / New Project Herefter hjælper programmet med at kreere en del af kildeteksten, dvs. program-hoved og dele af teksten i Body. Men man kan også selv skrive “hovedet” i kilde-filen. Indtast fx det viste i felterne. Husk at angive Device-typen !!!! Indtast antal inputs, og Tryk OK Skal der bruges 4 inputs på den færdige GAL, skrives 4. Af: Valle Thorø Side 7 af 20 Programmering af Gal-kredse Version 23/11-2015 Og antal outputs. Indtast antal ønskede outputs. Pinnodes kan opfattes som outputs, der ikke er ført ud til en pin. Dette kan ikke bruges i 16V8. Vælg derfor 0. ”In Gal16V8, there are no buried nodes.” Nu genererer WINCUPL en ”dum” tekstside med fx følgende tekst allerede skrevet. Dvs. de ovenstående 3 indtastninger blot fører til lidt hjælp til at generere noget af kildeteksten til designet. Der skal nu angives sammenhørende pin-numre og navne, dvs. Labels. Og der skal skrives ligninger for outputs. Her ses et design-start, hvor der er valgt 3 inputs og 2 outputs. Af: Valle Thorø Side 8 af 20 Programmering af Gal-kredse Version 23/11-2015 /* og */ omkranser kommentarer. Kommentarerne kan strække sig over flere linjer. Ovenfor ses, at teksten er opdelt i 3 dele. De kan kaldes følgende: En Header-del Her defineres forskellige data, fx firma, programmør, og IC-navn. En Declaration-del Her defineres inputs og outputs med navne, fx A, B osv. En Body-del Her defineres de boolske ligninger for output. ( ikke vist herover ) Delene er blot adskilt i teksten af en kommentarlinje. Definering af Input pin navne: For at der kan skrives boolske ligninger for outputs, skal IC’ens pinnumre altid have tildelt et navn, fx et bogstav. Her følger et par eksempler på tildeling af navne til pins: /*** INPUT PINS ***/ PIN 1 = A ; Af: Valle Thorø /* Pin 1 får navnet A */ Side 9 af 20 Programmering af Gal-kredse Version 23/11-2015 PIN 2 = B ; /* her evt. kommentarer */ PIN [2..5] = [B3..0]; PIN [2..6] = [A0..2,A4,A5]; Pin [2..5] = [b, c, d, e]; /* pin 2=b, pin 3=c, pin 4=d, pin5=e*/ Pin [6,10] = [f,g]; /* pin 6 = f og pin 10 = g.*/ Bemærk: Hver linje afsluttes med semikolon. Definering af Output pin navne Også Outputs skal defineres med navne: Eksempler på tildeling af output pinnavne: /*** OUTPUT PINS ***/ PIN 12 = F1; PIN [12,19] = [F1..2] ; ( pin 12 skal hedde F1, pin 19 F2 ) PIN [13,14,15,16,17,18] = [Y0,Y1,Y2,Y3,Y4,Y5]; PIN [13..18] = [Y5..0]; Hver statement-linje skal slutte med et semi-colon (;). OUTPUT-Ligninger: /** Equations **/ Når inputs og outputs er defineret, kan der i sektionen « Equations » indskrives boolske ligninger for outputs = f(inputs) : Bemærk de specielle tegn, der bruges i WinCUPL for and, or, og inverter, osv. Eksempler : Y0 = A0 & B0; Y1 = A1 # B1; Y2 = A2 $ B2; Y3 = !B3; Y4 = !(A4 & B4); Y5 = !(A5 # B5); Af: Valle Thorø Side 10 af 20 Programmering af Gal-kredse Version 23/11-2015 A = !x&y # x&!y&z; B = !x&!y&!z # x&!y # y&z; I WINCUPL bruges følgende symboler for at beskrive ligninger osv. Herudover kan bruges parenteser. Operator Example Description ! & # $ !A A&B A#B A$B NOT AND OR XOR “Værdien” eller ” Størst kompetence” af operatorerne er angivet i flg. skema: Operator ! & # $ Example !A A&B A#B A$B Description NOT AND OR XOR Precedence 1 2 3 4 Her er et færdigt eksempel, taget fra et af de medfølgende eksempler i WinCUPL-programmet: Name Partno Revision Date Designer Company Location Assembly Device Gates; CA0001; 04; 9/12/89; G. Woolhiser; Logical Devices, Inc.; None; None; g16v8a; /****************************************************************/ /* */ /* This is a example to demonstrate how CUPL */ /* compiles simple gates. */ /* */ /****************************************************************/ /* * Inputs: */ Pin 2 = Pin 3 = define inputs to build simple gates from a; b; /* * Outputs: * */ define outputs as active HI levels Pin 12 = inva; Pin 13 = invb; Af: Valle Thorø Side 11 af 20 Programmering af Gal-kredse Pin Pin Pin Pin Pin Pin 14 15 16 17 18 19 = = = = = = and; nand; or; nor; xor; xnor; /* * Logic: */ inva invb and nand or nor xor xnor = = = = = = = = Version 23/11-2015 !a; !b; a & !(a a # !(a a $ !(a Af: Valle Thorø examples of simple gates expressed in CUPL /* inverters */ b; & b); b; # b); b; $ b); /* /* /* /* /* /* and gate */ nand gate */ or gate */ nor gate */ exclusive or gate */ exclusive nor gate */ Side 12 af 20 Programmering af Gal-kredse Version 23/11-2015 Compilerings-procedure af et design: For at få kompileringen af kildefilen til en .JED-fil til at virke, er der et par switche, der skal sættes: Først skal sikres, at der er angivet hvilken kreds, der arbejdes med. Den kreds, vi har er en GAL16V8. Der er 2 måder, dette kan angives. Enten i kildeteksten i header'en, under device. Device g16v8a; Eller det kan alternativt angives ved at vælge Option \ Devices Vælg en ATF16V8B, som svarer til en GAL16V8 Bruges denne metode, skal fluebenet for neden i ”Device In File” fjernes! Det er tillige nødvendigt at gå ind i menuen Option / Compiler. Af: Valle Thorø Side 13 af 20 Programmering af Gal-kredse Version 23/11-2015 Her vises Default fanebladet ”Output Files” Vælg fanebladet General og sæt flueben i JEDEC name = PLD name. Ellers bliver der ikke genereret en .JED-fil. Nu kan der Compileres. Vælg Run \ Device Dependent Compile. Herefter skulle der gerne være skabt en .Jed fil, som så skal brændes over i GAL-kredsen. Af: Valle Thorø Side 14 af 20 Programmering af Gal-kredse Version 23/11-2015 Er der fejl, vil de være listet i LST-filen. ( og evt. i en .DOC-fil ) Eller se i / Windows / Message-vinduet .JED-filen kan nu flyttes til brænderudstyret, - og brændes over i GAL-kredsen. JEDEC filen kaldes også for en 'fuse map'-fil. Simulering af det design, man har lavet. I WinCUPL er det muligt, at simulere sine ligninger. Men det er ret besværlig. Det springer vi over! Brænding af GAL16V8 Til at brænde Jedec-filen over i GAL-kredsen, bruger vi et specielt brænderudstyr. Det er samme brænder, Leaper 48, der bruges til at programmere Microcontrollere. Skærmbilledet for brænderen ser således ud: Til brænderen hører en mængde drivere, en til hver type programmerbar kreds, den kan håndtere. Den rigtige driver vælges ved at klikke på ”Type”. Af: Valle Thorø Side 15 af 20 Programmering af Gal-kredse Version 23/11-2015 Der vælges Lattic / GAL16V8D(DIP). Når den rigtige driver er læst ind, kan Jedec-filen læses ind. Vælg ”Load”, og find filen. Den hedder xxx.JED. I brænderprogrammet er der mulighed for at editere i fusemappen. Men det skal man nok lade være med !! Her er vist lidt af fuse-mappen. Den GAL-kreds, der ønskes programmeret, isættes brænderudstyret, som vist på skitsen på udstyret. Herefter kan der brændes, med den grønne pil. Efter brænding kan kredsen afprøves. Husk, det kun er en 5-volts kreds. /****************************************************************/ Opgave til test programmeringen af en GAL-kreds. Kald 3 indgange A, B og C. Kald 3 udgange for Q1, Q2 og Q3. Konfigurer kredsen så: 𝑄1 = 𝐴 ∙ 𝐵 ∙ 𝐶, 𝑄2 = 𝐴 + 𝐵 + 𝐶 𝑄3 = ̅̅̅̅̅̅̅̅̅̅ 𝐴∙𝐵∙𝐶 Binær til 7-segment-decoder Af: Valle Thorø Side 16 af 20 Programmering af Gal-kredse Version 23/11-2015 Design en GAL-kreds, så den fungerer som en binær-til-7-segment-dekoder, der kan vise Hex, dvs. fra 0 til 9 og A til F. Stepmotor – styring Design en GAL-kreds, som enten kan føre 4 udgange fra en 4017 direkte til en forstærkerblok ( dvs. de 4 transistorer ) eller hvis en indgang kalder DIR bliver høj vha. en switch, få motoren til at køre modsat vej rundt. Ekstraopgave: Design en GAL-kreds med indbygget sekvensgenerator til at styre en stepmotor. Herved kan man spare tælleren 4017! Der skal både være indgang til Reset, og til Direction. Diagrammet kunne se således ud: Af: Valle Thorø Side 17 af 20 Programmering af Gal-kredse Version 23/11-2015 Reset Macrocelle B 2 2 3 4 1 2 1 3 1 A.d A Udgang_A 2 D 1 3 Dir 2 1 Reset C 2 2 1 2 1 2 3 1 1 B.d B 1 C.d C 1 D.d D 3 Udgang_B 3 2 A 1 3 Dir 2 1 2 1 Reset D 2 2 1 2 3 1 3 Udgang_C 3 2 B 1 3 Dir 2 1 2 1 Reset A 2 2 1 2 3 1 3 Udgang_D 3 C Dir 2 1 3 Tegning 130412 P3 Husk at ben 11 /OE skal stelles! Overvej Clocksignalet! Af: Valle Thorø Side 18 af 20 Programmering af Gal-kredse Version 23/11-2015 Kode til at styre en stepmotorer, hvor GAL-kredsen selv genererer sekvensen. Med reset, og direction-input! Bemærk, at pin 1 er permanent clock, & Pin 11 er /(OE) Device g16v8 ; /* *************** INPUT PINS *********************/ Pin 1 = clk ; PIN 2 = Dir ; PIN 3 = Res ; /* *************** OUTPUT PINS *********************/ PIN PIN PIN PIN 18 13 14 15 = = = = A ; B ; C; D; /* *************** Equations *********************/ A.d B.d C.d D.d = = = = D&Dir # B&!Dir # Res; (A&Dir # C&!Dir) & !Res ; (B&Dir # D&!Dir) & !Res ; (C&Dir # A &!Dir) & !Res ; /* /* Husk, at ben 11 skal stelles */ For at resette */ Et andet eksempel, ikke testet !!! /* *************** INPUT PINS *********************/ Pin 1 = clk ; PIN 2 = Dir ; PIN 4 = R ; /* Reset */ /* *************** OUTPUT PINS *********************/ PIN 12 = A ; PIN 13 = B ; PIN 14 = C ; PIN 15 = D ; A.d B.d C.d D.d = = = = D&Dir A&Dir B&Dir C&Dir AR = R ; /* Af: Valle Thorø # # # # B&!Dir C&!Dir; D&!Dir; A&!Dir; Asyncron Reset */ Side 19 af 20 SP = !R ; /* /* Programmering af Gal-kredse Version 23/11-2015 Syncron Preset */ Husk, at ben 11 skal stelles */ Af: Valle Thorø Side 20 af 20