Układy programowalne cz.3.pdf

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