Högskolan Dalarna Institutionen för Elektroteknik LABORATION LABORATIONSINSTRUKTION LOG/iC, PLD, kombinatorik, sekvensnät KURS Digitalteknik LAB NR 6 INNEHÅLL. Inledning 2. Prioritetskodare 3. Elektronisk tärning NAMN KOMMENTARER PROGRAM/KURS UTFÖRD GODKÄND
Laboration nr 6 Digitalteknik Innehåll: Syfte: Konstruktion av ett kombinatoriskt resp. sevensiellt nät med hjälp av ett modernt konstruktionshjälpmedel för programmerbar logik. Att få insikt i vad det praktiskt innebär att konstruera med generella logiska byggelement, s.k. PLD. Inledning I denna laboration kommer du att använda en PC-baserad programvara vid namn LOG/iC från det tyska företaget ISDATA. Programpaketet som är mycket användarvänligt, innehåller ett antal moduler vilka tillsammans erbjuder en relativt komplett utvecklingsmiljö för konstruktion av digital logik med hjälp av s.k. PLD-kretsar (Programmable Logic Devices). Den PLD-krets som skall användas vid laborationen har beteckningen PALCE22V och är en elektriskt raderbar CMOS-variant av den mycket vanligt förekommande 22V. LOG/iC Konstruktionsverktyget LOG/iC klarar att: o kontrollera och tolka en funktionell beskrivning av en digital funktion o konvertera den givna beskrivningen till en uppsättning minimerade booleska uttryck o konvertera de booleska uttrycken till en datafil som kan användas för att programmera en PLD o simulera (levandegöra) den av användaren givna beskrivningen Dessutom innehåller verktyget en detaljerad databas över större delen av den programmerbara logik som finns på marknaden. LOG/iC är en generell programvara för PLD-kretsar och den är relativt enkel att använda. Tyvärr har de generella programvarorna inte utvecklats lika fort som de nya kretsarna och numera bör man i stället för LOG/iC använda en dedicerad programvara som är utvecklade för just den PLD man ska arbeta med. Programvaror av denna typ är ofta gratis, men de är begränsade till ett fabrikat. För den PLD som används vid laborationen fungerar LOG/iC alldeles utmärkt. Den variant av LOG/iC som vi använder heter LOG/iC2 Eval och är en utvärderings (evaluation) version av LOG/iC2. Programmet startas från Start/Program/LOG_iC2/LOG_C2 Eval. Lab nr 6 2-2-3/pls
Arbetsgången för ett typiskt arbetspass med LOG/iC kan se ut enligt följande: o Skapa en ny design design new <filnamn>. Svara nej på frågan om hierarkisk editor. o Starta editering av indatafilen <filename>.dcb. I filen beskrivs alla logiska funktioner för konstruktionen. Filen innehåller inga kretsspecifika data. o Starta editering av indatafilen <filename>.ddv. I filen beskrivs alla data som tillhör den PLD som ska användas, dvs PALCE22V i detta fall.. o Kompilera konstruktionsbeskrivningen med execute/optimize eller execute/generate o Kontrollera utresultatet i listfilerna under Outputs. o Rätta ev. fel genom att editera infilen igen, därefter ny kompilering. o Verifiera/simulera beteendet med hjälp av verifieraren, Execute/Simulator. o Skriv ut listfiler på printern. PALCE22VH 22V är beteckningen på en relativt enkel PLD-krets. Beteckningen kommer av att den kan använda upp till 22 insignaler och generera maximalt utsignaler. Summan av ingångarna och utgångarna är begränsad till 22 där av signalerna är dubbelriktade och kan användas som in- eller utgångar). Kretsen som är en PAL, dvs har en programmerbar AND-matris men fast OR-matris, innehåller förutom ren kombinatorik också D-vippor. Värt att notera är att kretsens maximalt utgångar inte är identiskt uppbyggda. I stället för att låta kretsens totalt 2 produkttermer fördelas lika över alla utgångar (2/utgång) så har man valt att låta några av utgångarna få fler än 2 och några färre. Därigenom möjliggör man att även svårare uttryck kan rymmas i kretsen. I praktiken visar det sig att det oftast är någon enstaka signal som kräver många produkttermer. Dessa signaler kan i så fall kopplas till de utgångar som har många produkttermer. I denna lab skall vi använda en variant av 22V, PALCE22CVH från Vantis (Lattice). Den är elektriskt raderbar vilket gör att den mycket lätt kan återanvändas efter en eventuell felprogrammering eller funktionsändring. Studera kretsens datablad! Lab nr 6 2 2-2-3/pls
Programmeringsutrustningen För att programmera PLD-kretsarna efter en lyckad kompilering i LOG/iC, finns en PC-styrd programmeringsenhet, Micromaster LV48 från ICE Technology. Programmeraren finns installerad till en av PCdatorerna i laborationssalen och den består av en hårdvaruenhet som är ansluten till datorns parallellport. Programvaran är relativt enkel att använda. Programmeraren kan användas till en mängd olika programmerbara kretsar, tex HC, PIC-processorer, minnen, PLDkretsar. o Starta programmet genom att klicka på ikonen för programmeraren o Välj kretsfabrikat, VANTIS o Välj kretstyp, PALCE22VH-25/4 o Läs in programmeringsdata från LOG/iC från filen <namn>.pp2 o Sätt fast kretsen i programmeringsadaptern. OBS! jordpinnens plac. o Starta programmeringen o Avlägsna kretsen o Avsluta programmet Lab nr 6 3 2-2-3/pls
2 Prioritetskodare (kombinatoriskt nät) Konstruera med hjälp av PLD-kretsen PALCE22V en prioritetskodare, 8 till 3, enligt nedanstående figur och beskrivning. 2 3 4 5 6 7 8 22CV PRIENC I7 I6 I5 I4 ACT I3 I2 C4 I C2 I C 23 22 2 2 Beskrivning: Prioritetskodaren skall då en eller flera av dess ingångar aktiveras, går höga, visa binärkoden för den aktiverade ingång som har högst prioritet (I7 högst, I lägst). Binärkoden skall ha positionsvikterna 4, 2,, och presenteras på utgångarna C4-C. Utgången ACT skall indikera när någon ingång är aktiverad. Då ingen ingång är aktiverad (I7-I = ), spelar det ingen roll vilken utsignal som genereras på C4-C, detta indikeras av att signalen ACT=. Arbetsgång: ) Tänk igenom uppgiften 2) Beskriv funktionen med en funktionstabell 3) Skriv två källkodsfiler som beskriver konstruktionen: logic description (filtyp.dcb) med all logisk beskrivning av konstruktionen. device description (filtyp.ddv) med information om PLD:en. 4) Kompilera och åtgärda ev. felutskrifter. 5) Verifiera funktionen med hjälp av funktionsverifieraren 6) Programmera en krets 7) Koppla upp och prova funktionen i praktiken (färdig labuppkoppling finns att tillgå vid labtillfället) Punkt 2-4 görs med hjälp av programpaketet LOG/iC, punkt 5 behöver inte göras. Punkt 6 klaras med programmeringsenheten Micromaster LV48. Redovisning: o Listfiler som ska innehålla minst källkodsfiler och booleska ekvationer för konstruktionen. Innehållet kan väljas med menyalternativet Options/Design Redigera filerna i WORD innan utskriften görs. o Praktisk demonstration av fungerande krets. Lab nr 6 4 2-2-3/pls
3 Elektronisk speltärning (sekvenskrets) Konstruera en elektronisk speltärning beskriven av nedanstående tillståndsgraf. Tärningen utförs som ett synkront sekvensnät av Moore-typ innehållande totalt 7 nyttiga tillstånd S-S7. S är start- eller resettillståndet med utsignalen, dvs alla ögon släckta. S2-S7 utgör de normala räknetillstånden för tärningen. Asynkr. reset S GO S2 S7 6 S3 2 S6 S4 5 S5 4 3 Då insignalen GO aktiveras skall tärningen räkna modulo-6 enligt tillståndsgrafen ovan tills GO deaktiveras varvid tärningen stannar och visar värdet av tärningskastet. Resultatpresentationen sker med 7 st. lysdioder arrangerade som ögonen på en tärning enligt figuren nedan. Tabellen anger hur resp. LED skall aktiveras beroende av tärningsvärdet. L L5 LLLLLLL 234567 L2 L4 L6 2 3 L3 L7 4 5 6 Eftersom tillståndsgrafen innehåller totalt 7 nyttiga tillstånd kan vi realisera nätet med 3 st tillståndsvariabler, bitar. Lab nr 6 5 2-2-3/pls
Eftersom det verkar behövas 7 st utsignaler kan vi inte direkt plocka dessa utsignaler från tillståndsvippornas utgångar. Istället behövs en utgångskombinatorik som kan generera L-L7. Att göra på ovanstående sätt vore ett slöseri med utgångsanslutningar på kretsen 22CV. Tre st. utgångar ockuperas ju av de tre tillståndsvipporna vilka internt återkopplas till AND-OR matrisen igen för att där bilda utgångsfunktionerna för L-L7 vilka i sin tur ockuperar 7 st. utgångspinnar. Totalt utgångsanslutningar går åt. Ett annat och troligen bättre alternativ vore att öka antalet tillståndsbitar till 7. Eftersom utsignalkombinationerna är unika kan vi med 7 tillståndsbitar koda i detta fall 7 st. nyttiga tillståndskombinationer så att resp. tillståndsbit direkt motsvarar en av utsignalerna. Utsignalerna kan därigenom tas direkt från vippornas utgångar och vi behöver ingen utgångskombinatorik. Totalt 7 utgångsanslutningar går åt. Att införa 7 tillståndsbitar medför dock att vi får 2 7 =28 möjliga tillstånd. Eftersom det endast behövdes 7 st nyttiga tillstånd har vi nu fått 2 st onödiga tillstånd på halsen. Dessa extra tillstånd måste för säkerhets skull tas om hand, specificeras, vilket p.g.a. av den stora mängden inte är alldeles enkelt, inte ens med ett utvecklingshjälpmedel som LOG/iC. Oberoende av om man väljer alt. eller alt. 2 ovan, kommer LOG/iC att i sin resultatlistning påpeka att de tre utsignalerna L7, L6, L5 var för sig är identiska med utsignalerna L, L2, L3. Studera utsignaltabellen på föregående sida och övertyga dig om att så är fallet. Utskriften från LOG/iC blir: IDENTICAL FUNCTIONS: -------------------- L5.D = L3.D (.D anger D-vippans D-ingång) L6.D = L2.D L7.D = L.D Det tredje och troligen det bästa alternativet borde vara att i likhet med alternativ 2 koda tillstånden så att utsignalerna kan tas direkt från resp. tillståndsbit. Med endast 4 väsentliga utsignaler (L-L4) får vi således totalt 6 möjliga tillstånd varav nu endast 9 st. onödiga. Totalt 4 utgångsanslutningar går åt. Innan vi nu rusar iväg och kodar detta tredje alternativ bör vi tänka efter hur insignalen GO egentligen är beskaffad. Vi kan på goda grunder utgå från att den inte är synkroniserad med klockan utan att den istället kan förändras i vilket tidsögonblick som helst, d.v.s. den är asynkron. Denna asynkrona signal styr via ett kombinatoriskt nät nästa tillstånd, d.v.s. påverkar hur samtliga tillståndsvippor kommer att stå efter aktiv klockflank. Lab nr 6 6 2-2-3/pls
Eftersom signalen inte är klocksynkron kan det mycket väl hända att setup- eller hold-tiden för någon eller några av tillståndsvipporna inte uppfylls. Detta kan i så fall leda till att maskinen kommer att hoppa mellan tillstånden på ett helt ospecificerat sätt. Genom att synkronisera insignalen i ett inledande vippelement kan vi undvika detta problem. Uppgift: Utgå från alternativ 3 och låt de 9 extra tillstånden alla ovillkorligt leda tillbaka till tillstånd S. Insignalen GO skall anses vara asynkron och skall således klockas i ett inledande vippelement innan den ansluts till sekvensnätet. Tips: eftersom signalen GO är aktivt låg kan det vara lämpligt att ge den namnet GON i LOG/iC-beskrivningen (N anger att den är aktiv på låg nivå). Klockning av en signal i en D-vippa kan i LOG/iC anges på följande sätt: *BOOLEAN-EQUATIONS CLGON:=GON; OBS! Den nya signalen CLGON måste deklareras som en variabel (utgång). Eftersom en D-vippa tas i anspråk för synkroniseringen och varje D-vippa är knuten till en egen kapselpinne måste vi också ange vilken pinne som skall reserveras för denna vippa. Detta görs under *PINS CLGON = 8. Gör upp en konstruktionsbeskrivning till LOG/iC med en pintilldelning enligt figuren nedan. Kompilera och verifiera funktionen med verifieringsverktyget. Observera att både den asynkrona reseten och klocksignalen måste definieras. Den asynkrona reseten kan deklareras under BOOLEAN- EQUATIONS med L.RS = RES. Klocksignalen behöver egentligen inte definieras eftersom stift på 22CV-kretsarna är konstant ansluten till klockingångarna på alla D-vipporna. För att tydliggöra funktionen bör man skriva L.CLK = CLK. CLK RES GO 22CV DIE C 2 RES L 7 3 6 GO L2 5 L3 4 L4 Lab nr 6 7 2-2-3/pls
Programmera en krets samt provkör den i praktiken på en i förväg redan iordningsställd testuppkoppling (finns vid labtillfället). Observera att den givna pintilldelningen måste följas. Redovisa resultatlistningen från LOG/iC på samma sätt som den första uppgiften samt demonstrera kretsen i full aktion med hjälp av den färdiga labuppkopplingen. Lab nr 6 8 2-2-3/pls