K U R S
Układy programowalne, część 3
Pomimo swojej długiej historii
Zgodnie z zapowiedziÄ… z marcowego wydania EP,
CUPL (Universal Compiler for
przechodzimy do przedstawienia podstaw jÍzyka CUPL, za
Programmable Logic, na rynku
dostÍpny od ok. 1983 roku) jest
pomocÄ… ktÛrego juÅ‚ wkrÛtce bÍdziemy opisywaĘ wÅ‚asne
typowym jÍzykiem opisu sprzÍtu
(HDL - Hardware Description Lan- projekty. W tej czÍÅ›ci artykuÅ‚u przedstawiamy operatory,
guage), w zwiÄ…zku z czym ma
dziaÅ‚ania i funkcje dostÍpne w CUPL-u i czÍśĘ poleceÒ
niewiele wspÛlnego z typowymi
jÍzykami programowania. Powodu- preprocesora, za pomocÄ… ktÛrych moÅ‚na sterowaĘ pracÄ…
je to m.in. taki skutek, Å‚e nie-
kompilatora.
prawdziwe staje siÍ twierdzenie,
dośĘ czÍsto spotykane wÅ›rÛd wy-
trawnych programistÛw, Å‚e ich strukturalny). ìProgramî napisany
Abstrakcja w HDL
wczeÅ›niej nabyte umiejÍtnoÅ›ci w jÍzyku HDL przekÅ‚ada siÍ wiÍc
Według słownika języka
znacznie uproszczÄ… im pracÍ na budowÍ ukÅ‚adu, a nie kolej-
polskiego abstrakcja
z układami PLD. nośĘ wykonywania czynności
oznacza pojęcie nierzeczy-
Czemu? OtÛÅ‚ piszÄ…c ìklasycz- przez mikrokontroler o ustalonej
wiste lub pozostajÄ…ce
nyî program, programista okreÅ›la architekturze.
w luznym zwiÄ…zku z rzeczy-
kolejne kroki wykonywania zada- Ze wzglÍdu na swojÄ… specyfi-
wistością (...) . W praktyce
nia, natomiast opisujÄ…c sprzÍt, kÍ, CUPL umoÅ‚liwia przede
projektowej abstrakcja
projektant opisuje (mołna to zro- wszystkim opis strukturalny na re-
oznacza możliwość opisania
biĘ na wiele sposobÛw, z ktÛrych latywnie niskim poziomie abstrak-
sposobu działania projekto-
czÍśĘ jest dostÍpna w CUPL-u) je- cji. Dlatego wÅ‚aÅ›nie CUPL-a warto
wanego układu w sposób
go zachowanie (tzw. opis beha- stosowaĘ do implementacji projek-
wygodny i czytelny dla
wioralny) lub budowÍ (tzw. opis tÛw w niewielkich ukÅ‚adach PLD. projektanta, bez koniecznoÅ›-
ci zagłębiania się w tajniki
Podstawy jÍzyka CUPL implementacji projektu
CUPL i historia
w strukturze PLD.
CUPL jest jÍzykiem wyposaÅ‚o-
Amerykańska firma Logical
nym w szereg mechanizmÛw
Devices opracowała CUPL-a
zwiÍkszajÄ…cych wygodÍ opisywa- sÅ‚owa, w tab. 5 zastrzeÅ‚one sym-
w roku 1983 jako
nia sprzÍtu. ìZwiÍkszajÄ…cychî bole. Kompilator nie jest ìczuÅ‚yî
uniwersalny język HDL
przede wszystkim w stosunku do na to, czy słowa kluczowe pisa-
drugiej generacji. Szybko
Ûwczesnych konkurentÛw jak np. ne sÄ… maÅ‚ymi, czy teÅ‚ duÅ‚ymi li-
zdobył on uznanie i przez
PALASM lub Opal (były to kom- terami, w związku z czym zapisy:
wiele lat nie miał - poza
pilatory HDL na poziomie mikro- Node, NODE, noDE itp. sÄ… trak-
ABEL-em - liczÄ…cej siÄ™
procesorowych asemblerÛw), lecz towane rÛwnorzÍdnie.
konkurencji. Ponieważ nie
ich przejrzystośĘ docenią takłe
był przez producenta
rozwijany, dość szybko siÄ™ wspÛÅ‚czeÅ›ni projektanci. Liczby
zestarzał i stopniowo tracił Kompilator CUPL-a operuje na
popularność. W 1995 roku
Zarezerwowane sÅ‚owa liczbach 32-bitowych, ktÛre mogÄ…
prawa do CUPL-a zakupił
i symbole byĘ zapisane w jednym z czterech
Protel (kompilator jest
Kompilator CUPL rozpoznaje kodÛw: binarnym, Ûsemkowym,
wbudowywany w Protela
37 sÅ‚Ûw kluczowych oraz 23 dziesiÍtnym lub szesnastkowym.
99SE i DXP), a od 1996
symbole, ktÛre nie mogÄ… byĘ wy- TwÛrcy CUPL-a przyjÍli, Å‚e nu-
roku windowsowÄ… wersjÄ™
korzystywane jako nazwy zmien- meryczne oznaczenia wyprowa-
CUPL-a bezpłatnie
nych, wÍzÅ‚Ûw, wejśĘ i wyjśĘ. dzeÒ i indeksy zmiennych sÄ… za-
udostępnia Atmel.
W tab. 4 zestawiono zastrzeÅ‚one pisywane w kodzie dziesiÍtnym,
a pozostałe liczby w kodzie szes-
nastkowym. Jełeli takie załołenie
Tab. 4. Słowa zastrzeżone w języku CUPL
APPEND ASSEMBLY ASSY COMPANY CONDITION
DATE DEFAULT DESIGNER DEVICE ELSE Tab. 5. Symbole zastrzeżone
w języku CUPL
FIELD FLD FORMAT FUNCTION FUSE
GROUP IF JUMP LOC LOCATION & # ( ) -
MACRO MIN NAME NODE OUT * + [ ] /
PARTNO PIN PINNNODE PRESENT REV : . .. /* */
REVISION SEQUENCE SEQUENCED SEQUENCEJK SEQUENCERS ; , ! « =
SEQUENCET TABLE @ $ ^
Elektronika Praktyczna 5/2004
89
K U R S
Tab. 6. Przedrostki stosowane do Tab. 8. Obsługiwane przez CUPL-a Tab. 9. Operatory logiczne
oznaczania liczb zapisanych operatory i funkcje arytmetyczne interpretowane przez CUPL-a
w różnych systemach kodowania
Znak Przykład Nazwa KolejnoSć Znak operatora Opis KolejnoSć w hierarchii
operatora działania wykonywania
Kod liczbowy Baza Przedrostek
! NOT 1
** 2**3 Potęgowanie 1
Binarny 2 'b', 'B'
& AND 2
* 8*2 Mnożenie 2
Ósemkowy 8 'o', 'O'
# OR 3
/ 3/2 Dzielenie 2
Dziesiętny 10 'd', 'D'
$ XOR 4
x%n 8%7 Modulo n dla 2
Szesnastkowy 16 'h', 'H'
liczby z za-
kresu 0...x
rzyĘ zmienne z sygnaÅ‚Ûw poÅ‚Ä…czo-
+ 3+2 Dodawania 3
nych w grupy, czÍsto nazywane
Tab. 7. Przykładowe wyniki
- 5-4 Odejmowanie 3
zastÄ™powania cyfr znakami 'X' wektorami (o nich w dalszej czÍÅ›-
LOGa(x) LOG2(x) Logarytm z x -
ci artykuÅ‚u). W wiÍkszoÅ›ci dostÍp-
Liczba WartoSci wynikowe
LOG8(x) o podstawie a
nych na rynku kompilatorÛw jÍzy-
'b'0x 00 lub 01
LOG16(x)
ka CUPL w nazwach zmiennych
LOG(x)
'B'11x0 1100 lub 1110
sÄ… rozrÛÅ‚niane litery maÅ‚e i duÅ‚e,
'D'9X 90...99
(zaznaczanych poleceniami $REPE- w zwiÄ…zku z czym nazwy ADRok
'h'Bxx B00...BFF
AT lub $MACRO) dla makr wy- i AdrOK nie sÄ… rÛwnowaÅ‚ne. De-
'b'X101 0101 lub 1101
korzystywanych w opisie projektu. klarowane zmienne mogą zaczynaĘ
odpowiada projektantowi, to sys- Nie moÅ‚na z nich korzystaĘ bez- siÍ cyfrÄ…, literÄ… lub znakiem pod-
tem kodowania liczb nie musi pośrednio w opisie projektowane- kreślenia i muszą w nazwie zawie-
byĘ w Å‚aden sposÛb oznaczany. go sprzÍtu, kompilator bÍdzie bo- raĘ co najmniej jednÄ… literÍ. Na-
JeÅ‚eli z jakichÅ› przyczyn projek- wiem zgÅ‚aszaÅ‚ bÅ‚Ídy. zwa zmiennej nie moÅ‚e zawieraĘ
tant chce zapisaĘ liczby w innym Zestawienie dostÍpnych spacji, czyli nazwa Adres ROM
kodzie, musi je oznaczaĘ specjal- w CUPL-u operatorÛw oraz funk- nie jest prawidÅ‚owa (bÅ‚Ä…d zostanie
nymi przedrostkami, ktÛre zesta- cji arytmetycznych znajduje siÍ automatycznie wychwycony przez
wiono w tab. 6. Kompilator nie w tab. 8. Wynikiem obliczenia program CUPLA), w przeciwieÒs-
rozrÛÅ‚nia duÅ‚ych i maÅ‚ych liter wartoÅ›ci logarytmu jest zawsze twie do nazwy Adres_ROM. Na-
w przedrostkach, w zwiÄ…zku liczba caÅ‚kowita. zwy zmiennych mogÄ… skÅ‚adaĘ siÍ
z czym zapisy: z maksymalnie 31 znakÛw. Nazwy
'b'100111 i 'B'100111 Operatory logiczne dłułsze są przez kompilator auto-
'h'fe19 i 'H'fe19 NarzÍdziem niezbÍdnym pod- matycznie skracane do 31 znakÛw,
sÄ… traktowane jednakowo. czas opisywania blokÛw cyfro- co moÅ‚e powodowaĘ bÅ‚ÍdnÄ… iden-
InteresujÄ…cÄ… moÅ‚liwoÅ›ciÄ… ofero- wych sÄ… operatory logiczne, za tyfikacjÍ zmiennych.
wanÄ… przez CUPL-a jest moÅ‚li- pomocÄ… ktÛrych uÅ‚ytkownik moÅ‚e
wośĘ zastÍpowania cyfr nieistot- tworzyĘ dowolne zaleÅ‚noÅ›ci lo- Zmienne indeksowane
nych w podawanej liczbie (na giczne pomiÍdzy sygnaÅ‚ami wystÍ- JÍzyk CUPL jest wyposaÅ‚ony
przykład podczas deklarowania pującymi w projektowanym w wygodny mechanizm wspomaga-
zakresu adresÛw) znakiem 'X' (lub ukÅ‚adzie. Taki sposÛb opisywania jÄ…cy tworzenie indeksowanych
'x'), co jest traktowane przez projektÛw (za pomocÄ… rÛwnaÒ bo- grup zmiennych (wektorÛw). DziÍ-
kompilator jako wartośĘ dowolna ole'owskich), jakkolwiek najbar- ki niemu mołna definiowaĘ gru-
- przykÅ‚ady pokazano w tab. 7. dziej uniwersalny, nie cieszy siÍ py sygnaÅ‚Ûw o jednakowych na-
wÅ›rÛd projektantÛw duÅ‚Ä… popular- zwach (na przykÅ‚ad magistrale),
Operatory i funkcje noÅ›ciÄ…, poniewaÅ‚ CUPL oferuje rÛÅ‚niÄ…ce siÍ miÍdzy sobÄ… wyÅ‚Ä…cz-
arytmetyczne szereg wygodniejszych sposobÛw nie cyframi indeksujÄ…cymi. DziÍki
Preprocesor CUPL-a pozwala opisu (o wyłszym stopniu abs- temu, zamiast wymieniaĘ wszyst-
korzystaĘ z wielu operatorÛw aryt- trakcji). Przedstawimy je w dalszej kie sygnaÅ‚y jak w przykÅ‚adzie:
metycznych, ktÛre mogÄ… byĘ sto- czÍÅ›ci artykuÅ‚u. [A0, A1, A2, A3, A4, A5, A6, A7,
sowane do obliczania argumentÛw W tab. 9 zestawiono dostÍpne A8, A9, A10, A11]
w jÍzyku CUPL operatory logicz- moÅ‚na je zapisaĘ w postaci:
ne oraz ich połołenie w hierar- [A0..A11]
Zapis liczb szesnastkowych
chii wykonywania dziaÅ‚aÒ. Z nie do koÒca wyjaÅ›nionych
w CUPL-u
przez producenta przyczyn, cyfry
W odróżnieniu od wielu
Zmienne indeksujÄ…ce powinny mieÅ›ciĘ siÍ
kompilatorów, CUPL
Zmiennymi w jÍzyku CUPL na- w przedziale 0...n (gdzie n ozna-
dopuszcza możliwość zapisu
zywamy ciÄ…gi znakÛw (nazwy), cza dowolnÄ… liczbÍ caÅ‚kowitÄ…
liczb szesnastkowych bez
ktÛre sÄ… przypisane wyprowadze- mniejszÄ… od 32). W niektÛrych
konieczności poprzedzania
niom układu (wejściowym lub przypadkach zweryfikowanych
liter A...F cyfrÄ…, tzn.
wyjÅ›ciowym), wewnÍtrznym wÍz- przez autora jest moÅ‚liwa popra-
prawidłowe są obydwa
Å‚om (tzw. wÍzÅ‚om ìzagrzebanymî wna kompilacja projektu, w ktÛ-
zapisy: a i 0a, c i 0c itd.
- buried node), mołna takłe two- rym zastosowano zmienne indek-
Elektronika Praktyczna 5/2004
90
K U R S
w pierwszej linii wiersza znakiem o wartościach podanych jako za-
Tab. 10. Wykaz poleceń
$. WielkośĘ liter, jakimi zapisano kres, przykłady:
preprocesora (znak $ musi siÄ™
polecenia dla preprocesora, nie $DEFINE der_osc 'b'110x - przy-
znajdować w pierwszej kolumnie
ma ładnego znaczenia, są one za- pisuje stałej der_osc wartości
nowego wiersza)
wsze rozpoznawane. W odrÛÅ‚nie- zapisane dwÛjkowo: 1100 i 1101
$DEFINE $IFDEF $UNDEF
niu od pozostaÅ‚ej czÍÅ›ci opisu $DEFINE adres 'd'[120..129] -
$ELSE $IFNDEF $REPEAT
HDL, koniec linii zawierającej po- przypisuje stałej adres wartości
$ENDIF $INCLUDE $REPEND
lecenie dla preprocesora nie jest dziesiÍtne z przedziaÅ‚u 120...129.
$MACRO $MEND
zaznaczany za pomocą średnika.
sowane w przedziale m...n (gdzie Polecenie $UNDEF
m oznacza dowolnÄ… naturalnÄ… Polecenie $DEFINE Polecenie $UNDEF odwraca
liczbÍ dziesiÍtnÄ… wiÍkszÄ… od 0). Polecenie $DEFINE pozwala dziaÅ‚anie polecenia $DEFINE dla
Nie jest to jednak reguÅ‚a, zdefiniowaĘ ciÄ…g znakÛw, ktÛry wskazanego argumentu. Format
w zwiÄ…zku z czym lepiej jest zastÄ…pi okreÅ›lony w poleceniu polecenia jest nastÍpujÄ…cy:
przestrzegaĘ przedstawionego zale- operator, liczbÍ lub symbol. Dzia- $UNDEF argument
cenia. Zmienna zindeksowana ła ono w kałdym miejscu opisu, gdzie:
cyfrą zero ma zawsze najmniejszą ał do odwołania go za pomocą argument - ciąg znakowy ułyty
wagÍ (LSB). polecenia $UNDEF. w komendzie $DEFINE.
Przykłady prawidłowo zindek- Format polecenia $DEFINE jest Polecenie $UNDEF mołna sto-
sowanych zmiennych: nastÍpujÄ…cy: sowaĘ do przedefiniowania ciÄ…gu
[low_byte_d0..low_byte_d7] $DEFINE argument1 argument2 znakowego, przykład:
[cnt_data_in_0..cnt_data_in_31] gdzie: $DEFINE S0 'B'0010
[data0..data7] argument1 - ciÄ…g znakÛw, ktÛre- ....
Wprowadzenie do numeru in- mu jest przypisywane nowe ....
deksu zera wiodÄ…cego powoduje, znaczenie, $UNDEF S0
Å‚e zmienne (np. adr_ok2 argument2 - operator, liczba lub $DEFINE S0 'B'1000
i adr_ok02) nie sÄ… sobie rÛwno- zmienna.
wałne. Po przypisaniu ciągowi zna- Polecenie $INCLUDE
kÛw zastÍpstwa, moÅ‚na go uÅ‚y- Za pomocÄ… polecenia $INCLU-
Komendy preprocesora waĘ w dowolnym miejscu progra- DE ułytkownik mołe wykorzystaĘ
Kompilator jest wyposaÅ‚ony mu w taki sam sposÛb jak war- zasoby (np. przetestowane modele
w preprocesor, ktÛry wyszukuje toÅ›ci oryginalnej. blokÛw cyfrowych) przechowywa-
i wykonuje specyficzne polecenia, Przykłady: ne w innych plikach. Przykład:
pozwalajÄ…ce wykonywaĘ miÍdzy $DEFINE ON 'b'1 $INCLUDE nazwa_pliku
innymi warunkowÄ… kompilacjÍ $DEFINE OFF 'B'0 gdzie:
fragmentÛw opisu, samodzielnie $DEFINE PORT_A 'h'3ff nazwa_pliku - to nazwa zewnÍt-
definiowaĘ staÅ‚e wykorzystywane Za pomocÄ… tego polecenia rznego pliku, do zawartoÅ›ci ktÛ-
w opisie, a takÅ‚e korzystaĘ w bie- moÅ‚na takÅ‚e zdefiniowaĘ wÅ‚asne rego odwoÅ‚uje siÍ uÅ‚ytkownik
łącym projekcie z zawartości ze- symbole - operatory logiczne, w opisie projektu.
wnÍtrznych plikÛw (np. zawiera- przykÅ‚ady: Podanie samej nazwy pliku
jÄ…cych predefiniowane elementy $DEFINE { /* - alternatywny znak (ewentualnie z rozszerzeniem) po-
lub bloki logiczne). Wszystkie te poczÄ…tku komentarza woduje poszukiwanie przez kom-
zadania preprocesor wykonuje $DEFINE } */ - alternatywny znak pilator pliku w biełącym (domyś-
przed rozpoczÍciem pracy kompi- koÒca komentarza lnym) katalogu. Aby uniknąĘ nie-
latora. Wykaz poleceÒ interpreto- $DEFINE / ! - alternatywny znak jednoznacznoÅ›ci, zamiast samej
wanych przez preprocesor znajdu- operatora negacji nazwy mołna podawaĘ kompletną
je siÍ w tab. 10. Wszystkie pole- $DEFINE * & - alternatywny znak Å›cieÅ‚kÍ dostÍpu do pliku.
cenia muszÄ… siÍ rozpoczynaĘ operatora AND Dopuszczalne jest zagnieÅ‚dÅ‚a-
$DEFINE + # - alternatywny znak nie odwoÅ‚aÒ za pomocÄ… polece-
CUPL i operatory relacji
operatora OR nia $INCLUDE, czyli plik dołą-
DokuczliwÄ… wadÄ… CUPL-a $DEFINE:+: $ - alternatywny znak czany (zewnÍtrzny) moÅ‚e siÍ tak-
jest brak możliwości operatora XOR
korzystania z operatorów $DEFINE end_proc 'h'ea - przypi-
Reguły indeksowania
relacji (występują takie
sanie stałej end_proc wartości
zmiennych
m.in. w ABEL-u, AHDL-u,
EAh
Zakres indeksowania
VHDL-u i Verilogu), dzięki
$DEFINE ROM_ADDRESS
powinien się mieścić
czemu opisywanie różnego
'b'10011101 - przypisanie stałej
w przedziale:
rodzaju komparatorów
ROM_ADDRESS wartości
i porównywanie wartości 0...n, przy czym n < 32
10011101b
wektorów stałoby się bardzo (n jest zawsze liczbą
Za pomocÄ… polecenia $DEFINE
łatwe. dziesiętną)
mołna takłe definiowaĘ stałe
Elektronika Praktyczna 5/2004
91
K U R S
Å‚e odwoÅ‚ywaĘ do pliku doÅ‚Ä…cza- z poleceÒ: $ELSE lub $ENDIF. niem $IFNDEF a jednym z pole-
nego. Dopuszczalna liczba za- W przypadku, gdy staÅ‚a bÍdÄ…ca ceÒ: $ELSE lub $ENDIF, lecz tyl-
gnieÅ‚dÅ‚eÒ nie zostaÅ‚a jawnie argumentem polecenia $IFDEF nie ko wtedy, gdy staÅ‚a bÍdÄ…ca argu-
okreÅ›lona, z doÅ›wiadczeÒ wynika, zostaÅ‚a zdefiniowana za pomocÄ… mentem polecenia nie zostaÅ‚a
łe CUPL bez trudu radzi sobie polecenia $DEFINE, opis zawarty wcześniej zdefiniowana za pomo-
nawet z 20-krotnymi. w pliku jest ignorowany ał do cą polecenia $DEFINE.
momentu wystąpienia jednego Przykład:
Polecenie $IFDEF z poleceÒ: $ELSE lub $ENDIF. $IFNDEF argument
Za pomocą polecenia $IFDEF Przykład: gdzie:
moÅ‚na poddaĘ kompilacji warun- $IFDEF argument_1 argument - to nazwa staÅ‚ej, ktÛ-
kowej wybrane fragmenty opisu outA=inA & inB; rej obecnośĘ deklaracji (za po-
umieszczone w pliku. outB=inC # inA; mocÄ… polecenia $DEFINE) jest
Przykład: $ENDIF sprawdzana przez kompilator.
$IFDEF argument Przedstawiona powyÅ‚ej czÍśĘ PoniÅ‚szy fragment opisu:
gdzie: opisu nie bÍdzie brana przez $IFNDEF argument_1
argument - to nazwa staÅ‚ej, ktÛ- kompilator pod uwagÍ, jeÅ‚eli outA=inA & inB;
rej obecnośĘ deklaracji (za po- wcześniej nie wystąpi polecenie: outB=inC # inA;
mocÄ… polecenia $DEFINE) jest $DEFINE argument_1 $ENDIF
sprawdzana przez kompilator. bÍdzie kompilowany tylko wtedy,
Fragment pliku poddawany Polecenie $IFNDEF jełeli wcześniej nie zdefiniowano
kompilacji zaczyna siÍ od miejs- Polecenie $IFNDEF dziaÅ‚a staÅ‚ej argument_1. W przeciwnym
ca zdefiniowania (za pomocÄ… po- przeciwnie do opisanego wczeÅ›- przypadku, ta czÍśĘ opisu zosta-
lecenia $DEFINE) staÅ‚ej bÍdÄ…cej niej polecenia $IFDEF, tzn. kom- nie pominiÍta przez kompilator.
argumentem polecenia $IFDEF, aÅ‚ pilowana jest ta czÍśĘ opisu, ktÛ- Piotr ZbysiÅ„ski, EP
do miejsca wystÄ…pienia jednego ra znajduje siÍ pomiÍdzy polece- piotr.zbysinski@ep.com.pl
Elektronika Praktyczna 5/2004
92
Wyszukiwarka
Podobne podstrony:
Układy programowalne cz 7Układy programowalne cz 5Układy programowalne cz 4Układy programowalne cz 6Układy programowalne cz 2Układy arytmetyczne cz 1471 Czym się kierowac przy wyborze programu F K cz I472 Czym się kierować przy wyborze programu F K cz IIUkłady programowalneElementy i uklady elektroniczne cz I S KutaAnalogowe układy programowane w systemie firmy Latticeuklady rownan cz IIZałšcznik do uchwały Program zapobiegania przestępczo ci cz ICz II Układy pomiarowe, Sondywięcej podobnych podstron