easyABEL FEJLESZTŐ RENDSZER
TARTALOMJEGYZÉK
ELŐSZÓ
3
1 ÁLTALÁNOS JELLEMZŐK
4
1.1 AZ ABEL-HDL HARDVER LEÍRÓ NYELV 1.2 AZ EASYABEL FELDOLGOZÓ PROGRAMMODULOK 1.2.1 AZ EASYABEL ALAPKIÉPÍTÉSÉNEK FELDOLGOZÓ MODULJAI 1.2.2 A SMARTPART OPCIÓ PROGRAMMODULJAI 1.3 AZ ABEL FEJLESZTŐI KERETRENDSZER
4 4 4 5 5
2 AZ ABEL-HDL NYELV ELEMEI
6
2.1 2.2 2.3 2.4 2.5 2.6 2.7
AZ ABEL-HDL NYELV FŐBB SZINTAKTIKAI ELŐÍRÁSAI AZONOSÍTÓK HALMAZOK (SETS) BLOKKOK KOMMENTÁROK (COMMENTS) PARAMÉTEREK ÉS LÁTSZÓLAGOS PARAMÉTEREK DIREKTÍVÁK
6 6 9 9 9 9 10
3 FELADATLEÍRÁS ABEL-HDL NYELVEN
12
3.1 AZ ABEL-HDL FORRÁSFILE FELÉPÍTÉSE 3.2 LOGIKAI LEÍRÁS SZEKCIÓ 3.2.1 KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSA 3.2.2 SZEKVENCIÁLIS HÁLÓZATOK LEÍRÁSA 3.2.3 NEM TELJESEN SPECIFIKÁLT FUNKCIÓK 3.2.4 FÜGGVÉNYEK TÖBBSZÖRÖS MEGADÁSA 3.3 TESZT VEKTOROK
12 16 16 16 17 18 18
4 TERVEZÉSI, ALKALMAZÁSI MEGFONTOLÁSOK
19
4.1 4.2 4.3 4.4
19 20 22 22
SORRENDI HÁLÓZATOK TERVEZÉSE ARCHITEKTÚRA-FÜGETLEN VAGY RÉSZLETES LEÍRÁS POLARITÁS VÁLASZTÁSA TÚL SOK SZORZATTAG
5 AZ EASYABEL RENDSZER FUTTATÁSA
23
2
ELŐSZÓ Ez a leírás az ABEL fejlesztő rendszer legegyszerűbb kiépítését, az easyABEL fejlesztő rendszert ismerteti. Az ismertetés az easy ABEL 4.3 verzió felhasználói kézikönyvén alapul, kiegészítve a szerző megjegyzéseivel. a korlátozott terjedelem miatt ez az ismertetés csak vázlatos lehet, (az eredeti easyABEL Manuál nagyságrendileg 400 A4 oldal terjedelmű,) de tapasztalataink szerint elegendő az egyszerűbb PLD IC-kel történő tervezéshez. A program alkalmazását környezetfüggő on-line HELP funkció segíti. A speciális esetekhez szükséges részletesebb információk az eredeti easyABEL Manuel-ben megtalálhatók. A tényleges tervezés előtt javasoljuk a mintapéldák áttekintését is, ami megkönnyíti az ABEL-HDL nyelv megismerését. Azok a döntések, hogy egy rövid leírásba mit fontos bevinni és mit nem, általában mindig szubjektívek. Ugyancsak sok szubjektív elem van a Tervezési, alkalmazási megfontolások című fejezetben. Ezen kívül elírásokkal és sajtóhibákkal is kell számolni. Ezért a leírás összeállítója szívesen fogad minden észrevételt és javaslatot Itt szeretnék külön köszönetet mondani a DATA I/O GmbH cégnek, a PLD, FPGA áramkörök alkalmazásának oktatásához nyújtott sokrétű segítségéért.
3
1
ÁLTALÁNOS JELLEMZŐK
Az ABEL tervező rendszert a PLD (PAL, FPLA stb.) áramkörök könnyű alkalmazásához fejlesztették ki. Első változata 1984-ben jelent meg, amit az évek során újabb változatok követtek, és az ABEL rendszert folyamatosan alkalmassá tették az egyre újabb és komplexebb PLD és FPGA áramkörök kezelésére. Széleskörű alkalmazhatósága és felhasználóbarát kialakítása következtében a legelterjedtebb PLD tervező rendszerré vált. Az ABEL tervező rendszert különböző kiépítésekben hozzák forgalomba. A legnagyobb kiépítés az ABEL-FPGA rendszer, mely a legbonyolultabb programozható logikai áramköröket, az FPGA IC-ket is kezeli. Az eazyABEL változat csak a hagyományos felépítésű PLD (PAL, FPLA) elemekkel történő tervezést támogatja. Az eazyABEL programot az egyetemeknek és főiskoláknak díjmentesen bocsátotta rendelkezésükre. Az ABEL tervező rendszer a következő főbb részekből áll: - ABEL-HDL harver leíró nyelv, - ABEL feldolgozó program modulok, - ABEL fejlesztői keretrendszer.
1.1
Az ABEL-HDL hardver leíró nyelv
Az ABEL-HDL egy magas egy magas szintű herdver leíró nyelv (Hardware Description Language). Az ABEL-HDL a viselkedés-leíró nyelvek (behavioral description language) közé sorolható, mert a harver egységet alapvetően nem a struktúrája (építőelemek és azok egymáshoz való kapcsolódási módja) alapján írja le, ha az egység viselkedése (funkcionális működése) alapján: az egység kimenetei hogyan viselkednek a bemenő jelek hatására. A struktúra-független leírása előnye, hogy a tervezőknek nem kell az elején elköteleznie magát valamelyik PLD IC mellett. Az ABEL programok megengedik, hogy az IC választás a terv feldolgozása után (verifikálás, minimalizálás stb. után) történjen. Ez lehetővé teszi, hogy a tervhez optimálisan illeszkedő PLD IC-t válasszunk, és a továbbfejlesztés során sem jelent problémát újabb PLD IC típusra áttérni. Ezt a választást az ABEL program SmartPart opciójának moduljai kívánságra automatikusan elvégzik. Megjegyezzük, hogy az ABEL program megengedi, hogy a tervezett egység leírásában a PLD IC típusát és a jelek lábkiosztását is előírjuk. Ez biztosítja az ABEL korábbi verzióinak megfelelően készült tervek (forrásfile-ok) feldolgozhatóságát is.
1.2
Az easyABEL feldolgozó programmodulok
1.2.1 Az easyABEL alapkiépítésének feldolgozó moduljai Compile (ahd12pla) Szintaktikailag ellenőrzi és lefordítja a forrásfile-t, kifejti a makrókat, elvégzi a szükséges szintézist.
4
Simulate Equation (plasim) Szimulálja a tervezett egység működését az előállított logikai egyenletek alapján, a leírásban megadott tesztvektoroknak megfelelően. Optimize (plaopt) Minimalizálást végez. PartMap (fuseasm) A fuseasm modul a feldolgozott tervleírás („PLA file”) alapján előálltja a programozó készülék vezérléséhez szükséges file-t (ún. JEDEC file), és egy dokumentációs file-t is készít. A modul futtatása előtt ki kell választani a PLD IC típusát, és a jeleket hozzá kell rendelni az IC megfelelő kivezetéseihez. Ha ez nem történt meg a tervleírásban, akkor ezt a Fitter (fit) modul elvégzi. Simulate JEDEC (jedsim) Szimulálja a tervezett egység működését az előállított programozó file (JEDEC file) és a PLD IC struktúrája alapján, a leírásban megadott tesztvektoroknak megfelelően.
1.2.2
A SmartPart opció programmoduljai
Az easyABEL programhoz tartozó SmartPart opció Device Selector (devsel) és Device Fitter (fit) moduljai a megfelelő PLD IC típus kiválasztását és a tervhez illesztését segítik ill. végzik el. Device Selector (devsel) A devsel modul kiválasztja az easyABEL által támogatott PLD IC-k listájából azokat az elemeket, amelyek megfelelnek a tervező által megadott előírásoknak (pl. teljesítmény felvétel, törölhetőség, gyártó cég, …). Device Fitter (fit) A fit modul megpróbálja illeszteni a tervet a kiválasztott IC típus(ok)hoz, ha az „illesztés” lehetséges, akkor elvégzi a jelek hozzárendelését is az IC kivezetéseihez.
1.3
Az ABEL fejlesztői keretrendszer
Az ABEL fejlesztői keretrendszer (ABEL Design Enviroment) a program modulok futtatását vezérli. A keretrendszer menüvezérelt, segítségével az egyes modulok külön is futtathatók. A keretrendszer ismeri a modulok helyes futtatási sorrendjét is, és ha az előzetesen szükséges modulok nem lettek lefuttatva, vagy a forrásfile-ban végzett editálás miatt újrafuttatás szükséges, akkor a keretrendszer ezt automatikusan elvégzi.
5
2 2.1
AZ ABEL-HDL NYELV ELEMEI Az ABEL-HDL nyelv főbb szintaktikai előírásai
Az ABEL-HDL a következő alapvető szintaktikai előírásokkal dolgozik: Egy programsor legfeljebb 150 karakter hosszúságú lehet. A sorokat
(soremelés), (lapdobás) vagy (vertikális tabulátor) karakterek zárhatják le. (Megfelelő természetesen az általánosan használt kombináció is, pl. az <ENTER> gomb az IBM PC-ken. ) Azonosítókat, kulcsszavakat és számokat ’space’ (szóköz) karakterekkel kell elválasztani. Nem kötelező a szóköz használata olyan helyeken, ahol az egyes szintaktikai egységek között vessző vagy egy operátor áll, ill. zárójelek előtt és után. Azonosítók, kulcsszavak és számok belsejében szóköz vagy pont nem lehet. A nyelv kulcsszavai kis- és nagybetűs formában (akár keverve is) egyaránt szerepelhetnek. A felhasználói azonosítók (pl. jelnevek) tetszőlegesen tartalmazhatnak kis és nagybetűket, de a fordító az azonosítók esetén érzékeny a kis- és nagybetűkre (case sensitive) Deklarációkat, utasításokat, egyenleteket általánosan pontosvesszővel (;) kell lezárni, de a MODULE, END, és TITLE utasításoknál ez elhagyható, a régebbi verziókkal való kompatibilitás érdekében. Az idézőjel (”) jel a kommentár kezdetét jelzi, a kommentárt egy másik ” jel vagy a sorvég zárja.
2.2
Azonosítók
A használható (érvényes) karakterek: A – Z (nagybetűk), a – z (kisbetűk), (csak ASCII betűk, ékezetes betű NEM) 0 – 9 (számok) !@#$%^&*()-=+[]{};:’” ` ~ \ | , < > . / ? _ (aláhúzás) Előírások az azonosítókra: nem nyelvi kulcsszó, betűvel, vagy aláhúzással kezdődik, max. 31 karakter hosszú. A program a kis és nagybetűket megkülönbözteti az azonosítókban.
6
Nyelvi kulcsszavak (Nem lehetnek azonosítók, kis- és nagybetűvel is írhatók.) DECLARATIONS DEVICE ELSE ISTYOE ENABLE(obs) END MACRO ENDCASE ENDWITH FUSES EQUATIONS FLAG(obs)
IF IN(obs) THEN LIBRARY TRACE MODULE NODE OPTIONS PIN PROPERTY
STATE_DIAGRAM TEST_VECTORS TITLE TRUTH_TABLE WHEN WITH
Konstansok és stringek Számrendszerek Az ABEL 2, 8, 10, és 16 alapú számrendszereket kezel, a default általábam a decimális. (A default a @RADIX deklarációval megváltoztatható.) A számrendszerek jelölését a példák mutatják: 75 decimális 75 ^h75 hexa 75 (decimális értéke 117) ^b101 bináris 101 (decimális értéke 5) ^o17 oktális 17 (decimális értéke 15) ^h0F hexa 0F (decimális értéke 15) A karaktereknek is tulajdoníthatunk számértéket, pl. 'a'=97 . Logikai értékek A true (logikai 1) és a fals (logikai 0) logikai értékeket a program számként (32 bit integer) ábrázolja, a true=-1, azaz mind a 32 bit, a fals=0, azaz mindegyik bit 0. Speciális konstansok (case insensitive) .C. .K. .U. .D. .F. .P. .SVn. .X. .Z.
órajel impulzus low-high-low órajel impulzus high-low-high órajel felfutó él low-high transition órajel lefutó él high-low transition lebegõ be vagy kimenet regiszter elõtöltés (preload) n=2..9 a bemenet meghajtható 2..9V-tal dont' care be- vagy kimenet nagy impedanciás
7
Stringek A string két aposztrof (') közé zárt ASCII karakterek sorozata, space-t is tartalmazhat. Ha aposztrof szükséges a stringben, akkor backslash (\) karaktert kell elé írni, ha backslash szükséges, azt kétszer kell leírni. Pl: 'It\'s easy' = It's easy 'He\\she' =He\she
Operátorok Logikai operátorok (ligical operators) ! !A NOT & A & B AND # A # B OR $ A $ B XOR antivalencia !$ A !$ B XNOR ekvivalencia Aritmetikai operátorok (aritmetich operators) -A kettes komplemens (negálás) A – B kivonás + A + B összeadás * A * B szorzás / A / B elõjel nélküli egész osztás % A % B osztási maradék << A << B A-t balra shifteli B bittel >> A >> B A-t jobbra shifteli B bittel Mindkét shiftelésnél a szélrõl 0 töltõdik Relációs operátorok(relational operators) == A==B egyenlõ != A != B nem egyenlõ < A A>B nagyobb >= A >= B nagyobb egyenlõ A relációs kifejezések eredménye logikai tru vagy false. A relációs kifejezéseket ajánlatos zárójelbe tenni, hogy a logikai operátorok magasabb pioritása ne zavarjon.A relációs mûveletek elõjel nélküliek. Ezért pl. a (-1>2) true (1) értéket ad, mivel a -1 ábrázolása ..1111, és ez nagyobb mint ..0010 Értékadó operátorok(assigment operators) = kombinációs hálózat esetén := következõ órajel után érvényes ( regiszteres ) érték (szekvenciális hálózat esetén)
8
Mûveletek prioritása 1: 2: 3: 4:
2.3
-(kettes komplemens negálás), ! (NOT) & (AND), << , >> , (Shift left, Shift right) *, / , % , (szorzás, osztás, osztási maradék) + , - (összeadás, kivonás ) # , $ , !$ (OR, XOR, XNOR) = = , != , (egyenlõ, nem egyenlõ) < , <= , > , >=
Halmazok (sets)
Az egy halmazt alkotó jelekre és konstansokra közös azonosítóval lehet hivatkozni. Más nyelvekben az ilyen halmazt, jelcsoportot nevzik busznak is. A halmaz elemei [ és ] zárójelek közé kerülnek, egymástól vesszővel elválasztva, vagy csak a két szélső sorszámú elem egymástól a ".." range operátorral elválasztva. Példa a halmaz deklarációra: Addr=[A15,A14,A13] vagy Addr=[A15..A13] A szorzás (*), osztás (/), osztás-maradék (%) és shift (<<, >>) operátorok kivételével a többi operátor a halmazokra is értelmezve van. Halmaz változóknak megfelelő hosszúságú halmazok vagy bitsorozatok (számok) adhatók értékül. Számok esetén azok bináris reprezentációját veszi, és ilyenkor a halmaz legnagyobb helyi értékű bitje a baloldali bit a deklarációban.
2.4
Blokkok
A blokk az ASCII szöveg egy szekciója, melyet a { és } zárójelek határolnak. A blokkokat makrókban és direktívákban használják. A blokkokban használhatók a { és } jelek, ha backslash előzi meg azokat. A blokkon belül lehetnek további blokkok.
2.5
Kommentárok (comments)
A kommentár egy " jellel (dupla idézőjellel) kezdődik, és egy másik " jel vagy a sor vége határolja.
2.6
Paraméterek és látszólagos paraméterek
A látszólagos paraméternek (dummy argument) nincsen értéke, csak a makrókban, moduleban vagy a direktívákban jelöli, hogy melyik paraméterrel végez műveletet. A makrodeklaráció törzsében a látszólagos paraméterek jele elé egy kérdőjelet (?) kell írni, és a kérdőjeles paramétert szóközökkel kell határolni.
9
PL.:
2.7
OR_EM MACRO (a,b,c) { ?a # ?b # ?c}; (Ez a makródeklaráció) A definiált makró hívása valós paraméterekkel: D=OR_EM (x,y,z&1) Értékadás makró nélkül, ill. a makró kifejtése: D=x # y # z&1
Direktívák
A direktívák egy ABEL-HDL forrás file feldolgozását, értelmezését befolyásolják. Ha a direktívák által kibővített forrás-kódot akarja ellenőrizni, akkor az AHDL2PLA programot a list vagy -list expand opcíóval kell futtatni. A fontosabb direktívák az alábbiak: @ALTERNATE (Alternate Operator Set) Utána más szimbólumokat is logikai operátornak értelmez. Standard Alternate Funkció operátor operátor ! & # $ !$
/ * + :+: :*:
NOT AND OR XOR XNOR
Természetesen az alternate operátor beállításban nem használhatjuk az aritmetikai műveleteket a funkcióleírásban, mert ilyenkor az aritmetikai műveletek szokásos operátorai logikai operátorkénet vannak értelmezve. A standard operátorokat a @STANDARD direktíva állítja vissza. @STANDARD (Standard Operators Directive) Visszaállítja standard operátor értelmezést. @CONST (Constant Declaration) Lehetővé teszi konstansok deklarálását a normális deklarációs szekción kívül. Makrók belső konstansainak deklarációjához szánják. Szintakszisa: @CONST azonosító=kifejezés @DCSET (Don´t Care Set) Hatására az ABEL program a nem teljesen specifikált függvényeknél don´t care értékekkel számol a minimalizálásnál. Az @ONSET direktíva hatástalanítja. @ONSET Az ABEL program nem számol a don´t care értékekkel a minimalizálásnál. @IF Ha a megadott feltétel teljesül ill. a kifejezés logikai TRUE értékű, akkor a direktívában megadott blokkot beveszi a forráskódba. Szintakszisa: @IF kifejezés {block}
10
Példa: @IF (A>17) {C=D$F;} @INCLUDE A direktívában a megadott file beépül a forrásfile-ba, a direktíva helyénél kezdve. Szintakszisa: @INCLUDE ´filenév´ Példa: @INCLUDE ´macros.abl´ @PAGE A "parsing" program listafile-jába lapdobást ír be ezen a helyen. @RADIX ( Default Base Numbering Directive) Az Abel program alapértelmezésea decimális számrendszer ( radix 10). Ez megváloztatható ezzel a direktívával, a direktiva után az új radix lesz a default értelmezés. Szintakszisa: @RADIX kifejezés ; ahol a kiértékelt kifejezések 2, 8, 10 vagy 16-ot kell adnia. Példa: @RADIX 2 ; "change default base to binary @RADIX 1010 ; "change from binary to decimal @REPEAT Ez a direktíva a benne megadott blokkot n-szer egymás után behelyezi a forrásfile-ba. Az n értékét a direktívában megadott kifejezés kiértékelése adja meg.Ez a direktiva jól használható hosszú igazságtáblák és teszt vektor sorozatok esetén ismétlődő sorok leírására. Szintakszisa: @REPEAT kifejezés {Block} @IRP (indefinite Repeat Directive) Szintakszisa: @IRP dummy_par (par [,par] ... ) {Block} A direktívában megadott blokkot n-szer megismétli a forrásfile-ban, ahol n a zárójelben megadott paraméterek (par) száma. Az ismétlésnél a látszólagos paraméter (Dummy_par) mindig a következő paraméterek értékét veszi fel a zárójelben megadottak közül. Példa: @IRP A (1, ^HOA, 0 ) {B = ?A; } A példa szerint direktíva az allábbiakat helyettesíti be: B=1; B = ^HOA ; B=0;
11
Az ABEL nyelv további direktívái, melyek "trükkös" leírásokat tesznek lehetővé, és a felhasználók számára általában érdekeltek: @EXPR @IFB @IFDEF @IFIDEN @IFNB @IFNDEF @IFNIDEN
3 3.1
(Expression Directive) (If Blank Directive) (If Defined Directive) (If Identical Directive) (If Not Blank Directive) (If Not Defined Directive) (If Not Identical Directive)
FELADATLEÍRÁS ABEL-HDL NYELVEN Az ABEL-HDL forrásfile felépítése
A tervezett egység komplett logikai (funkcionális) leírását az ún. modul tartalmazza. Az ABEL-HDL forrás file elvileg több modult is tartalmazhat. Az ABEL rendszer azonban a modulokat egymástól függetlenül dolgozza fel, és a szintaktikai ellenörzéstől eltekintve a keretrendszer csak a forrásfile első modulját dolgoztatja fel, ezért nincs értelme egy file-ban több modult leírni. Egy modulban csak egyetlen eszköz (IC) specifikálható. Egy modul öt szekcóból áll, mely szekciók a következők: - Fejléc (Header) - Deklarációk (Declarations) - Logikai leírás (Logic Description) - Teszt vektorok (Test vectors) - Vége (End) Fejléc szekció A fejléc szekcióban a következő elemek vannak: MODULE (Modul azonosítója és kezdete) szintakszisa: MODULE modulnév OPTIONS
(program futását vezérlő opcionális elem)
TITLE (opc.,kiírandó fejléc a dokumentációs és jed. file-okban) szintakszisa TITLE 'string' A fejlécben az utasításoknak a fenti sorrendben kell következniük.
12
Deklarációs szekció A deklarációs szekció következő elemekből állhat DECLARATIONS
kulcsszó
DEVICE
(eszköz deklaráció)
PIN
(kivezetések bekötése)
NODE
(belső csomópontok)
ISTYPE konstansok
(pin és node attributum specifikáció, opc.)
MACRO
(makrók(k))
LIBRARY REFERENCES
(könyvtári hivatkozások)
Egy objektum első előfordulásához képest az összes rá vonatkozó deklarációnak predefinitnek kell lennie. Ennek megfelelően, ha van DEVICE deklaráció, akkor annak meg kell előznie a jelek deklarációját. Logikai leírás szekció a feladat funkcionális, strukturális leírását tartalmazza. (Argumentumaiban a korábban deklarált elemekre hivatkozhatunk.) EQUATIONS
(Boolean kifejezések )
TRUTH_TABLE
(igazságtáblák )
STATE_DIAGRAM
(idődiagramok )
FUSES
(˝biztosíték˝-deklarációk )
XOR_FACTORS
(XOR kapukat tartalmazó eszközök esetén )
Teszt vektor szekció TEST_VECTOR
(teszt vektorok )
TRACE
(opc. , szimuláció display vezérlése )
Vége szekció A modul végét jelző END utasításból áll. Szintakszisa: END modulnév
13
A deklarációs szekció Eszközdeklaráció Megadható, hogy milyen típusú PLD eszközzel történjen a feladat realizációja. Mivel az ABEL rendszer eszközfüggetlen feladatleírást is támogat , az eszközdeklaráció opcionális . Ez utóbbi esetben a PLD eszköz kiválasztása a tervezés végén történik , az ún. fitter programmal. Az esetleges eszközdeklarációnak meg kell előznie a jelek deklarációját . Az eszközdeklaráció szintakszisa : eszközazonosító DEVICE eszköz_típusjel Példa:
ic2 DEVICE p16r6
Jelek deklarációja A jelnevek szintakszisa: [ ! ] jelazonosító [.ext ] A jelazonosító opcionális kiterjesztése , a .ext rész , az ún. dot extension az áramkör egyértelműbb leírását segíti elő . A jelek deklarációja a PIN és NODE kulcsszavakkal történik. A PLD eszköz kivezetéseinek jeleit a PIN , a belső csomópontok jeleit a NODE kulcsszóval kell deklarálni. A szintakszis: jelnév [, jelnév...] PIN [ pin# [,pin#...]] [ ISTYPE ‘ attr’ ] ; jelnév [, jelnév...] NODE [ node# [,node#...]] [ ISTYPE ‘ attr’ ] ; ahol pin# ill. node# a kivezetés ill. csomópont sorszáma , ‘attr’ pedig a kivezetés ill. csomópont típusának deklarációja . Dot extensions Architektúra-független kiterjesztések .clk élvezérelt flip-flop órajel bemenete .oe háromállapotú kimenet engedélyezése .pin visszacsatolás a kivezetésről (pin-ről) .fb visszacsatolás a regiszterről Architektúra-specifikus kiterjesztések .d D flip-flop adatbemenete .j JK flip-flop J bemenete .k JK flip-flop K bemenete .s RS flip-flop S bemenete .r RS flip-flop R bemenete .t T ( toggle ) flip-flop T bemenete .q visszacsatolás flip-flop Q kimenetéről .pr regiszter preset bemenete ( szinkron vagy aszinkron ) .re regiszter reset bemenete ( szinkron vagy aszinkron ) .ap aszinkron preset bemenet .ar aszinkron reset bemenet .sp szinkron preset bemenet
14
.sr .le .lh .ce .fc
szinkron reset bemenet lach engedélyező ( enable) bemenete, aktív low lach engedélyező ( enable ) bemenete, aktív high órajel engedélyező bemenet flip-flop mode control
Jel-attribútumok Szintakszis: jelnév [,jelnév] ISTYPE ‘attr’ Ha a jelek a deklarált tipusú PLD IC adott sorszámú kivezetéseihez vagy belső pontjaihoz vannak rendelve a PIN vagy NODE deklarációval, akkor ez a jelek tipusát is egyértelműen meghatározza , és a típusmeghatározó attribútumok megadására nincs szükség. Az általános attribútumok: ‘com’ ˝kombinációs˝ vagy közönséges jel nem regiszter kimenet ‘reg’ regiszteres kimenet D típusú flip-floppal, normalizálásnál figyelembe véve a cél-eszköz esetleges inverterét ‘neg’ a jelzett bemenet vagy kimenet negált kialakítású , a reduce-fixed opció esetén erre optimalizál ‘pos’ a jelzett bemenet vagy kimenet nincs invertálva a reduce-fixed opció esetén erre optimalizál . Architektúrát meghatározó (architecture dependent ) attribútumok : ‘reg_d’ regiszteres kimenet D típusú flip-floppal , és a kimenet polaritását meg kell határozni a ‘buffer’ vagy ‘invert’ attribútumokkal. ‘reg_g’ regiszteres kimenet D típusú flip-floppal, és a kimenet polaritását meg kell határozni a ‘buffer’ vagy ‘invert’ attributúmokkal . A logikai egyenletekben és igazságtáblákban .d és .ce kiterjesztésű jeleket kell használni . ‘reg_jk’ regiszteres kimenet JK típusú flip-floppal, és a kimenet polaritását meg kell határozni a ‘buffer’ vagy ‘invert’ attributúmokkal. A logikai egyenletekben és igazságtáblákban.j és .k kiterjesztésű jeleket kell használni. ’reg_sr’ regiszteres kimenet SR típusú flip-floppal, és a kimenet polaritását meg kell határozni a buffer vagy invert attribútumokkal. A logikai egyenletekben és igazságtáblákban .s és .r kiterjesztésű jeleket kell használni. ’reg_t’ regiszteres kimenet T típusú flip-floppal, és a kimenet polaritását meg kell határozni a buffer vagy invert attribútumokkal. A logikai egyenletekben és igazságtáblákban .t kiterjesztésű jeleket kell használni. ’buffer’ a megfelelő flip-flop és a kivezetés (pin) közt nincs inverter. ’invert’ a megfelelő flip-flop és a kivezetés (pin) közt inverter van. ’xor’ a jelet egy XOR kapu állítja elő, mely két bemenetét egy-egy olyan logikai hálózat vezérli, mely a szokásos módon szarzattagok összegét képzi.
15
3.2 3.2.1
Logikai leírás szekció Kombinációs hálózatok leírása
A kombinációs hálózatok viselkedése logikai egyenletekkel vagy igazságtáblával írható le. A logikai egyenleteket az EQUATIONS kulcsszó vezeti be, egyenletek szintakszisa az alábbi: [WHEN condition THEN] equation; [ELSE equation]; Példák: EQUATIONS A = B & !C # D ; Regaddress = base + 3 ; !F = (B == C) ; WHEN B THEN A = B ; ELSE A = C ; Az igazságtáblák szintakszisa: TRUTH_TABLE (bemenő jelek –> kimenő jelek) bemenő értékek –> kimenő értékek; bemenő értékek –> kimenő értékek; ... Példa: TRUTH_TABLE (BCD_code –> [a, b, c, d, e]) –> [1, 1, 1, 1, 1]; 1 –> [1, 1, 1, 1, 1]; 2 –> [1, 1, 1, 1, 1]; ... (A példában a BCD_code és [a, b, c, d, e] egy set (halmaz). )
3.2.2
Szekvenciális hálózatok leírása
A szekvenciális hálózatok viselkedése logikai egyenletekkel, igazságtáblával vagy állapotgráffal írható le. A logikai egyenletek szintakszisa hasonló a kombinációs hálózat esetéhez, de az értékadó operátor formája : = . Az egyenlet baloldali változója az órajel után veszi fel a : = értékadó operátor utáni kifejezés értékét. Példák: EQUATIONS Q : = D & !RESET ; count : = count + 1 ; Az igazságtábla (működési tábla) szintakszisa hasonló a kombinációs hálózat esetéhez, de itt a bemenő jelek és a belső regiszterek jelei közé a : > kerül. TRUTH_TABLE (bemenő jelek : > reg. jelek [ –> kimenő jelek] ) bemenő értékek : > reg. értékek [ –> kimenő értékek] ; bemenő értékek : > reg. értékek [ –> kimenő értékek] ; ...
16
Az állapotgráf leírásának szintakszisa: STATE_DIAGRAM reg. jelek [ –> kimenő jelek] STATE state_azonosító : [equation] transition_utasítás ; [STATE state_azonosító : [equation] transition_utasítás ;] ... Az állapotátmeneti (transition) utasítások az IF-THEN-ELSE, CASE és GOTO utasítások, a szokásos jelentésükkel. Ezeket az utasításokat opcionálisan követheti a WITHENDWITH átmenet-utasítás. Példák: STATE_DIAGRAM [Qa, Qb] STATE S0 : IF Enable THEN S1 ELSE S0 ; STATE S1 : z = 0 ; CASE (Enable == 0) : S1 ; (Enable == 1) : S2 ; ENDCASE STATE S2 : z = 1 ; GOTO S0 ; A WITH-ENDWITH utasítás az IF-THEN-ELSE, CASE vagy GOTO átmenet-utasítás után használható, kimenet viselkedésének leírására. Szintakszisa: transition_utasítás következő_ állapot WITH equation [equation] . . . ENDWITH ; Példa: IF a==1 THEN S1 WITH x : = 1 ; y:= 0; ENDWITH ;
3.2.3
Nem teljesen specifikált funkciók
A nem teljesen specifikált funkciók (függvények) esetén van szerepe a @DCSET direktívának. A direktíva hiányában az ABEL program a nem specifikált esetekhez tartozó függvényértéket 0-nak veszi, ha a kimenet nincs invertálva, és ha a kimenet invertálva van, akkor 1 értéket rendel a nem specifikált esetekhez. (Az ABEL régebbi verziói mindig így működtek.) Ha a @DCSET direktíva szerepel a leírásban, akkor utána a nem specifikált esetekben a függvényértéknél valódi don't-care (közömbös) értékekkel számol a program. Az @ONSET direktíva megszünteti a don't-care értékek használatát.
17
3.2.4
Függvények többszörös megadása
Ha egy változó többször szerepel egy logikai egyenlet bal oldalán (multiple assignment), akkor a feldolgozás során a változóhoz a külön megadott kifejezések VAGY kapcsolata rendelődik. Például az y = a; y = b; hozzárendeléseket a Compile modul y = a # b logikai egyenletbe fordítja. A negált jelek esetén formailag ugyanígy jár el: az !y = a; és !y = b; egyenletekből az !y = a # b egyenlet lesz, ami ekkor az y jelre vonatkoztatva már nem VAGY kapcsolat. Az pedig, hogy mit tekint a program negált jelnek, a deklarációs szekcióban megadottaktól függ. Az előbbi példák esetén az y jel deklarációját tételeztük fel. Az előbbiekből következően megváltoztatjuk a deklarációban a jel negált vagy nem negált voltát, akkor lehet, hogy a program másképp fordítja le a logikai egyenleteket. Ezért nyomatékosan azt javasoljuk, hogy NE használják ki a több részletben történő hozzárendelés lehetőségét. A program többszörös hozzárendelés esetén figyelmeztető üzenetet nem küld.
3.3
Teszt vektorok
A teszt vektorok a tervezett logikai hálózat helyes működését írják le. Szerepük a terv szimulációval történő ellenőrzésénél és a beprogramozott PLD IC ellenőrzésénél van. Az ABEL szimulációs programja a kimenetek kiszámított állapotát összeveti a teszt vektorokban megadott állapotokkal, és eltérés esetén hibát jelez. A teszt vektorok a programozó készüléket vezérlő file-ba (*.jed) is átkerülnek, és a programozó készülék a "beégetés" után ezek ráadásával ellenőrzi a beprogramozott PLD IC működését. A teszt vektorok megadása a TEST_VECTORS kulcsszóval, az alábbi szintaxisnak megfelelően történik. TEST_VECTORS ['megjegyzés string'] (bemenöjelek -> kimenöjelek) [bemeneti értékek -> kimeneti értékek ;] [bemeneti értékek -> kimeneti értékek ;] ... Példa: TEST_VECTORS 'first set' ([A,B] -> [C,D]) [0,0] -> [1,1] ; [0,1] -> 2 ; [1,0] -> [0,1] ; A teszt vektorok több részletben, eltérő "megjegyzés"-sel is megadhatók. Kimeneti értékként a don't care (.X.) is megadható.
18
A szimulációs program által kiírandó/kijelzendő jelek a teszt vektor fejlécétől eltérőek is lehetnek, a kijelölésük a TRACE utasítással történhet. A TRACE utasítás az utána következő teszt vektorokra érvényes. Szintaxisa: TRACE (bemenő jelek -> kimenő jelek); Példa: TRACE ([A,B] -> [C ]); TEST_VECTORS ([A,B] -> [C,D]) [0,0] -> [1,1] ; [0,1] -> 2 ; TRACE ([A,B] -> [ D]); [1,0] -> [0,1] ; 1,1] -> [0,0] ; Megjegyezzük, hogy futtatáskor a keretrendszerben a Simulate ../Trace Options almenüben is beállíthatók a kimenetben ábrázolandó/kiírandó jelek. Az ellenőrzés a teszt vektorokkal az ábrázolási/kiírási opcióktól függetlenül történik.
4 4.1
TERVEZÉSI, ALKALMAZÁSI MEGFONTOLÁSOK Sorrendi hálózatok tervezése
Szinkron vagy aszinkron A szerző határozott véleménye, sok gyakorló tervezővel megegyezően, hogy sorrendi hálózatok esetén alapvetően szinkron működést tervezzünk. Kivételt a nagyon egyszerű feladatok jelentenek, ahol indokolt esetben azért aszinkron hálózatot is tervezhetünk. A gyakorlati tapasztalatok is igazolják, hogy az aszinkron hálózatoknál számtalan probléma adódik. A gyakori tervezési hibák mellett komoly nehézséget okoz, hogy a PLD IC-k belső időadatai nincsenek egyértelműen specifikálva, az időzítések típusonként, példányonként eltérőek, és a rendszer szimulátora sem támogatja aszinkron hálózatok megbízható verifikálását. Mealy- vagy Moore-modell PLD IC-k esetében a gyakorló tervezők általában kedvezőbbnek tartják az olyan Mooremodellű hálózatokat, melyeknél a hálózat kimenetét a PLD IC-k regiszterei alkotják. A nem regiszteres kimenetek hazárd szempontjából át kell gondolni. Állapotkódolás Az állapotkódolás a tervező feladata az ABEL rendszerben. A választott kódolástól is függ, hogy hány szorzattagot tartalmazó függvényekre van szükség a sorrendi hálózat realizálásához. Ha a tervezett hálózatnak a PLD IC-re történő leképezésénél (illesztésénél) hibajelzést kapunk a túl sok szükséges term miatt, akkor megpróbálkozhatunk egy kedvezőbb állapotkódolás keresésével. A közismert kódolási eljárások (szomszédos, kimenet alapján,
19
HT-partició) mellett alkalmazhatjuk az ABEL kézikönyv ajánlotta stratégiát: úgy változtatjuk meg az állapotkódolást, hogy amelyik állapotbitnél túl sok term adódott, annál az új állapotkódolás esetén a bit állapota lehetőleg ritkán változzon a szekvenciáis hálózat állapotátmeneteinél. A kódváltoztatást megkönnyíti, és a tervleírás is érthetőbb, ha az állapotgráfban vagy állapottáblában az állapotokat értelmezhető szimbolikus nevekkel jelöljük, és az állapotnevekhez tartozó kódokat külön deklaráljuk. Bekapcsolási és illegális állapotok Egy flip-flop állapota a tápfeszültség bekapcsolása után általánosan nem meghatározott, 0 vagy 1 is lehet. Ezért az állapotregiszter bekapcsolás utáni megkívánt állapota, azaz a sorrendi hálózat kívánt indulási állapota, csak külön alaphelyzet-beállító (Reset, ...) jellel biztosítható. Egyes PLD IC-k rendelkeznek olyan belső áramkörökkel, melyek a tápfeszültség ráadásakor a regisztert alapállapotba viszik. Előfordul, hogy a sorrendi hálózat belső állapotát meghatározó bitek értékeinek van olyan kombinációja, mely nem szerepel a hálózat definiált állapotai közt. Ezek a kombinációk az illegális belső állapotok. A működés komoly zavarát, leállását okozhatja, ha bekapcsolás után, vagy zavarjelek miatt a hálózat illegális állapotba kerül. Ezért célszerű gondoskodni arról, hogy ha léteznek illegális állapotok, akkor abból a hálózat visszakerüljön valamelyik legális belső állapotába.
4.2
Architektúra-fügetlen vagy részletes leírás
Ez a kérdés sorrendi hálózatoknál igényel megfontolást. Ha nincs deklarálva a PLD IC típusa, és a jelek sincsenek meghatározott pozíciójú lábakhoz rendelve, akkor egy teljesen architektúra-független leírásról van szó. Ebben az esetben az ún. pin-to-pin terv-leírást (design) célszerű használni, amely a tervezett egység működésének leírásaként az IC kimeneti csatlakozásainak (output pins) viselkedését tartalmazza a bemeneti csatlakozásokra (input pins) adott jelek függvényében. Ilyen leírás esetén az ABEL fordító az általános makrocellára alapozva végzi a szintézist. Az általános makrocella (generic macrocell) felépítése a 4.1 ábrán látható.
4.1 ábra Az általános makrocella Az ábrán a makrocella az foo nevű jelhez tartozik. Az foo az IC kivezetésén (pin) lévő jel neve, ettől a makrocella többi jelét a jelnév kiterjesztései (dot extension) különböztetik meg. A tárolóelem (register) adatbemenetén az foo:= jelölés arra utal, hogy oda a := operátorral történő értékadás jobb oldali részét megvalósító PLA hálózat kapcsolódik. A regiszter maga tulajdonképpen egy D flip-flop, melynek órajele a .clk kiterjesztésű jel. Felhívjuk a figyelmet,
20
nem mindegy, hogy a visszacsatolás az foo pontról (pin) vagy a regiszter kimenetről (foo.fb) történik, mert a kettő közt egy háromállapotú meghajtó van. Ezért az egyértelmű leíráshoz a jeleket meg kell különböztetni. Vannak olyan PLD IC-k, melyek makrocellái az általános makrocellánál több funkcióval rendelkeznek, például van aszinkron beállító és törlő bemenetük. Ha ki akarjuk használni a többletlehetőségeket, akkor architektúra-specifikus, más szóval részletes (detailed) leírást kell alkalmaznunk. Egy architektúra-specifikus makrocellára példa a 4.2 ábrán látható. A példaként bemutatott makrocellánál az aszinkron beállító jelet az .ap kiterjesztés (asynchronous preset), a törlő jelet az .ar kiterjesztés (asynchronous preset) különbözteti meg.
4. 2 ábra Egy architektúra-specifikus makrocella A PLD IC makrocellája tartalmazhat RS vagy JK flip-flopot is. Ilyenkor célszerű .r és .s illetőleg .j és .k kiterjesztéssel jelölt R, S, ill. J, K bemenetekre felírni a logikai egyenleteket. Az architektúra-független leírás D típusú flip-flopjaira felirt egyenleteket ugyan az ABEL transzformálni tudja RS vagy JK flip-flopokra is, de ez gyakran rossz hatásfokkal történik. Architektúra specifikus kiterjesztésekkel történő leírásnál a sorrendi hálózat visszacsatolásainak forrásai egyértelműen meghatározottak. Az architektúra független leírásnál az alábbi három esetet kell megkülönböztetnünk: nincs kiterjesztés, .fb kiterjesztés, .pin kiterjesztés. Nincs kiterjesztés: Ha a visszacsatolt jelnél nem adtunk meg kiterjesztést, akkor az ABEL megfelelő illesztő modulja (PartMap, fuseasm) a visszacsatoló jelet az IC kivezetéséről veszi, ha van ilyen lehetőség. Ha ilyen visszacsatolási út nem létezik, akkor a regiszter kimenetéről veszi a jelet. Az olyan PLD IC-k esetén, melyeknél létezik mindkét fajta visszacsatolási út, előfordulhat, hogy egy adott feladat a kimenetről illesztve nem megvalósítható, ’’túl sok term’’ hibajelzést kapunk. Ugyanakkor a visszacsatolásnál a .fb kiterjesztést alkalmazva a feladat illeszthető. (Ez előfordul pl. a ’p16v8 struktúrájú GAL IC-k esetén.)
21
.fb kiterjesztés Ha a visszacsatolt jelnél. fb kiterjesztést adunk meg, akkor az ABEL megfelelő illesztő modulja a visszacsatoló jelet a regiszter kimenetéről veszi, ha van ilyen lehetőség. Ha ilyen visszacsatolási út nem létezik, akkor az IC kivezetéséről veszi a jelet, de előtte ellenőrzi, hogy a kimeneti meghajtó állandóan engedélyezett állapotban van-e. Ha az utóbbi feltétel nem teljesül, hibajelzést ad. .pin kiterjesztés Ha a visszacsatolt jelnél. pin kiterjesztést adtunk meg, akkor az ABEL megfelelő illesztő modulja a visszacsatoló jelet az IC kivezetéséről veszi. Ha ilyen visszacsatolási út nem létezik, akkor hibajelzést ad.
4.3
Polaritás választása
Az ABEL rendszer a feldolgozás során a logikai egyenleteket a jelre és annak negáltjára is előállítja. A PLD IC-hez illesztésnél aztán automatikusan a megfelelő polaritást választja. A modern PLD elemeknél a kimenet vagy a regiszter-bemenet polaritása is programozható. Ez azért hasznos, mert a negált jel esetenként kevesebb term (szorzattag) összegeként állítható elő. A programozható polaritású IC-knél az illesztő modul automatikusan azt a polaritást választja, melyhez kevesebb term kell, hacsak a leírásban nem kötöttük meg a polaritást. A polaritás megkötése ’pos’ és ’neg’ ill. ’buffer’ és ’invert’ attribútumokkal történhet. Vannak olyan PLD IC-k, melyeknél a kimeneti polaritás programozható, de a makrocella nem minden funkciójának polaritása programozható ezzel összhangban. Ennek tipikus példája az elterjedten használt PAL22V10 IC. (Architektúra-neve az ABEL-ben: p22v10.) Ezeknél célszerű a polaritás megkötése a leírásban, ha minden funkciót ki akarunk használni.
4.4
Túl sok szorzattag
Az egyszerűbb és olcsóbb (és kevesebbet fogyasztó) PLD IC-vel való realizálást gyakran az akadályozza, hogy a kiadódó logikai függvény még a minimalizálás után is túl sok szorzattagot tartalmaz. A szorzattagok száma esetenként csökkenthető fordított polaritású jel alkalmazásával, erre a polaritás választás című szakaszban már kitértünk. Ugyancsak csökkenthető a termek száma megfelelő állapotkódolással, amiről az előzőekben már említést tettünk. A termek száma csökkenthető, ha a logikai függvényt nem egyetlen PLA struktúrával, hanem többszintű PLA hálózattal realizáljuk. Egy egyszerű kétszintű leírásban az y logikai függvény független változóit az elsődleges bemenő jelek egy Xí halmaza és egy (vagy több) logikai segédváltozó (u) képezi. A segédváltozó az elsődleges bemenő jelek Xj halmazának függvénye. u = f2(Xj) Y = f1 (Xí, u) A segédváltozók használatával gyakran a működés leírása is egyszerűbb és érthetőbb.
22
Ha a segédfüggvényt csak egyszerűen felírjuk a deklarációs szekcióban, akkor a feldolgozás során az ABEL egyetlen PLA struktúrát szintetizál az y függvényre. Ha ellenben a segédfüggvényhez egy makrocellát is deklarálunk (PIN, NODE), akkor az y függvényt két PLA struktúra egymás után kapcsolásával realizálja az ABEL rendszer. A segédfüggvény ügyes megválasztásával minkét PLA termszáma jóval kisebb, mint az egyetlen PLA-val történő realizálás termjeinek száma. A két PLA szinttel történő realizálásnak természetesen hátrányai is vannak: a segédfüggvény lefoglal egy kimenetet ill makrocellát, és a két sorba kapcsolt PLA struktúra miatt megnő a jelterjedési idő.
5
AZ easyABEL RENDSZER FUTTATÁSA
Az easyABEL keretrendszert a DOS operációs rendszerből abe14 parancs begépelése indítja. (Az abe14.exe file rendszerint a DATAIO könyvtárban található.) A programot az abe14 forrásfilenév[.abl] módon indítva, a paraméterként megadott forrásfile automatikusan betöltődik. Egyébként a forrásfile-t a keretrendszer „File” menüjének segítségével tölthetjük be. A tervet leíró forrásfile kiterjesztése .abl. A menürendszer A keretrendszer főmenüjéből az ALT és az almenü kezdőbetűjével azonos gomb egyidejű lenyomásával választhatunk. Az almenüben kiválasztott sor aktiválása (indítása) a Return gombbal történik. A kiválasztott menüsor funkciója a képernyő alsó sorában megjelenítődik, részletesebb információt a Help nyújt. Help A Help funkció az F1 billentyűvel is aktivizálható. A Help funkció környezetfüggő (contextsensitive). Ha a forrásfile-ban a cursort egy kulcsszóra állítjuk, akkor F1 hatására a kulcsszóhoz tartozó Help szöveg kerül kiírásra. Ha kinyitott menüablak esetén kérünk Help-et, akkor a kiválasztott menüsorra vonatkozó tájékoztatást kapunk.
23
Egérhasználat A keretrendszer egérrel is használható. Jobboldali gomb: ALT és ESC funkció; belép az utoljára megnyitott menüablakba ill. kilép belőle, kilép a megnyitott Help ablakból. Baloldali gomb: indítja a menüben kijelölt funkciót. Középső gomb: F1 gomb funkciója; meghívja a Help-et. A terv feldolgozása A könnyen kezelhető menürendszer és a környezetfüggő részletes Help funkció miatt a terv feldolgozásának lépéseit itt nem részletezzük, csak néhány fontosabb dologra hívjuk fel a figyelmet. A keretrendszer ismeri a szükséges feldolgozási sorrendet. Ha a megelőző lépések eredményei hiányoznak, vagy időközben megváltoztak módosításaink miatt, akkor a megelőző modulokat automatikusan újra lefuttatja a keretrendszer, feltéve, hogy a Defaults menüben „Auto Update” van beállítva. A modulok automatikus futtatása jól követhető, ha a Defaults menüben aktiváljuk a „Program Pause” funkciót. Szokás a feldolgozást az eredményeket megmutató View menü megfelelő sorának aktivizálásával végrehajtatni. Ez esetben azonban a feldolgozó modulok opcióinak megváltoztatása (pl. a szimuláció kijelzésének (Trace Option) megváltoztatása) nem indítja újra a feldolgozást. IC választás A PLD IC választását a SmartPart programmal végezve, csak kellő megfontoltsággal indítsuk el a „Database Search” vagy Query Database” funkciót. A teljes adatbázis végigvizsgálata viszonylag időigényes, és ha a kiválasztási kritériumokat (Modify Criteria) túl tágan határoztuk meg (vagy egyáltalán be sem állítottuk), akkor hosszú futási idő után egy nagyon hosszú listát kapunk eredményül, ami a későbbiekben is körülményesen használható. Ha az alkalmazandó PLD IC típusa adott, akkor a típust, pontosabban az IC architektúra-kódját a PartMap menü FPGA/PLDmap – Options … részében közvetlenül beírhatjuk. A munka befejezése Az easyABEL programok számos közbenső, átmeneti filet is generálnak. A keretrendszerből kilépés után a feleslegesek egyszerűen törölhetők a cleanup4 batch file segítségével. (Az easyABEL V4.3 verzióhoz adott cleanup4.bat file-t célszerű kiegészíteni a felesleges *.aop file-ok törlésével is.)
24