ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
1
Fakultet informacijskih tehnologija
PROJEKTOVANJE DIGITALNIH LOGIČKIH KOLA U zadnjih desetak godina došlo je do promjena u načinu dizajniranja hardvera. Razvoj kompjuterskih sistema i informacijskih tehnologija uopšte, imao je značajnog uticaja i na dizajn hardvera. Savremeni dizajn se oslanja na softverska rješenja, poznatija kao CAD (Computer Aided Design) softveri, i programabilne uređaje na koje je lahko aplicirati pomodu softvera kreiran dizajn. Više je faktora koji su uticali na ovakav razvoj događaja, a među njima su i slijededi:
- jednostavnost projektovanja sistema korištenjem računara, nasuprot crtanju na papiru; - mogudnost jednostavne replikacije jednom kreirane šeme, u cjelini, ili njenog dijela; - opravdanost investicije u proizvodnju, i same proizvodnje velikih količina programabilnih
uređaja, koji bi svojom cijenom konkurisali logičkim kolima za specifičnu namjenu; - mogudnost brzog kreiranja prototipova hardvera i jednostavnost njihove izmjene, prema
uočenim nedostacima, ili drugim potrebama. Za klasično projektovanje digitalnih logičkih kola iskustvom su se kreirale formalne i neformalne
specifikacija koraka u projektovanju, nazvanih „najboljom praksom“. Savremeni dizajn se, praktično,
naslonio na ta iskustva, unaprijeđujudi upravo dijelove koji su bili vremenski najzahtjevniji, a
intelektualno, uslovno rečeno frustrirajudi. Koraci definisani jednom od „najboljih praksi“ su:
1. Identifikacija problema – dokučite šta je cilj; 2. Identifikacija raspoloživih resursa – pogledajte šta je to što Vam je dato, definišite ulaze; 3. Identifikacija izlaza – znate cilj, definišite šta je izlaz; 4. Funkcionalnost – razdvojite šta je suština, a šta «kozmetika»; razmislite šta je to što mreža
mora da zadovolji, a šta je dodato kao «posebna pogodnost»; 5. Konvencija o logičkim stanjima – definišite šta je za Vas A=0 ili A=1 i slično. (recimo A = 0
znači da kada je na ulazu A logičko 0, svjetlo je ugašeno itd.); to pomaže Vama u toku rada, a pomaže i onome ko tumači Vaše rješenje da bolje razumije Vaš tok misli;
6. Kreiranje tabele istine – Vaša tabela istine sadrži ulaze i izlaze koje ste identifikovali; primijenite logiku, šta bi trebalo biti na izlazu kada je na ulazu određena kombinacija; izlistajte sve mogude kombinacije (2n kombinacija za n ulaza);
7. Pisanje Bulove jednačine – napišite izraz, jednačinu za izlaz u funkciji ulaznih varijabli; provjerite traži li se od Vas neka specifična forma (disjunktivna ili konjuktivna – Sum Of Products ili Product Of Sums u engleskoj literaturi, respektivno), te prema tome napišite odgovarajudi izraz;
8. Minimizacija – Minimizirajte izraz korištenjem neke od metoda minimizacije (algebarsko pojednostavljivanje, K mape i dr.) ;
9. Crtanje logičke mreže – iskoristite simbole za logička kola, prikažite veze između logičkih kola, jasno označite ulaze i izlaze;
10. Provjera – obavezno provjerite da li ste svaku fazu dobro izveli; ovo je posao u kojem se zahtjeva dosta pažnje i vrlo lahko se napravi previd. Ne dopustite da Vaše rješenje bude netačno zbog trenutka nepažnje!
Kao što i sami vidite, to je zapravo potpuno prirodan slijed analize problema i njegovog rješavanja. Rezultat ovog procesa je logička struktura, predstavljena grafičkim simbolima ili Bulovom jednačinom. Jednom osmišljenu logičku strukturu, rezultat, je trebali ispitati. Projektantima je važno saznati da li su signali na izlazu u adekvatnoj zavisnosti od ulaza i drugih parametara projektovane strukture. Prije dvadesetak godina, to bi značilo kupiti integrisana logička kola, napraviti štampanu ploču sa iscrtanim vezama među njenim elementima. Ukoliko bi se uočila greška, nakon što se ispravi dizajn ponovo se kreirao prototip. To je bio zahtjevan proces, u svakom smislu. Danas je to znatno drugačije. Pomodu CAD softvera i standardiziranih programskih jezika za opis
hardvera može se napraviti programski kod koji sadrži opis logičke strukture. Taj se opis jednostavno
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
2
Fakultet informacijskih tehnologija
[email protected] prenosi na programabilne čipove, među kojima su sve popularniji FPGA (Field Programmable Gate
Aray) čipovi. Oni sadrže mrežu konfigurabilnih logičkih blokova čije se međuveze mogu programirati
(slika 1.). Logički su blokovi raspoređeni u dvodimenziono polje, a po obodu polja su ulazno/izlazni
blokovi.
Slika 1. FPGA arhitektura – blok šema
Ono što čini ove uređaje posebnim jesu programabilne međuveze. Na slici 2. se mogu vidjeti različiti
spojevi u dijelovima čipa u kojima se vrši uspostava projektovanih veza među logičkim blokovima. Ovi
se dijelovi nazivaju komutacioni ili prekidački blokovi.
S obzirom da je u mnogim aplikacijama potrebna memorija, proizvode se i čipovi sa ugrađenom
memorijom (slika 3.).
Slika 2. Mogude pozicije prekidača za horizontalne i vertikalne međuveze među logičkim blokovima u
FPGA čipu.
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
3
Fakultet informacijskih tehnologija
Slika 3. FPGA čipovi sa ugrađenom memorijom.
Krajnji rezultat projektovanja logičkih struktura je konfiguraciona datoteka. Ona se sa računara
prenosi na programabilni uređaj, čime se projektovana struktura pretvara u hardver.
Ovakav sistem projektovanja i proizvodnje hardvera je posebno interesantan kada se treba ispitati
novi dizajn, ili proizvesti hardver čija proizvodnja ne treba predi par desetina hiljada primjeraka. Čak
se i prototipovi nekih „Intel“-ovih procesora razvijaju na FPGA uređajima.
Trend današnjice su embedded sistemi. Engleski termin „embedded“ se u literaturi na jezicima
naroda u BiH prevodi kao ugniježdeni, ugrađeni ili usađeni. No, najčešde se termin koristi u izvornom
obliku. Embedded sistem je namjenski računar ugrađen u neki uređaj, koji uključuje i drugi hardver i
mehaničke dijelove. Za razliku od procesora opšte namjene koji izvršavaju instrukcije opisane
programom, embedded procesori su dizajnirani namjenski za mali broj operacija. S obzirom na razvoj
tržišta, sve vedu prodaju mobilnih telefona, pametnih mašina, automatsku kontrolu procesa u
automobilima, avionima, itd., sve je veda i potreba za embedded procesorima. U jednom kanadskom
magazinu navedeno je da 96% svih proizvedenih procesora završi u embedded sistemima. U resursno
oskudnom okruženju u koje se smještaju embedded procesori dizajn je presudan. Od interesa su
računska efikasnost, potrošnja energije i sl. Upravo zbog toga je interesantno analizirati razne
varijante rješenja, ne samo zbog cijene proizvodnje, ved i zbog isplativosti njihovog rada. I u ovom
domenu, kao i u domenu projektovanja procesora opšte namjene programabilni uređaji imaju
velikog značaja.
U svrhu opisivanja hardvera za CAD softvere, potrebno je bilo napraviti softversko okruženje koje de
pratiti slijed mentalnih procesa pri projektovanju logičkih struktura. Do sada je bilo više jezika koji su
nastajali i, prije ili poslije nestajali. Do danas su se održali VHDL i Verilog.
Na ovom predmetu de se koristiti VHDL, okruženje/simulator ModelSim (www.model.com, ModelSim
PE Student Edition).
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
4
Fakultet informacijskih tehnologija
VHDL – UKRATKO
VHDL je jezik za automatizaciju projektovanja i implementacije digitalnih logičkih, najčešde
upotrebljavan u kombinaciji sa programabilnim nizovima logičkih kapija (field-programmable gate
array – FPGA). FPGA uređaji se sastoje od skupa osnovnih logičkih kola, poput AND, OR, NOR, i
sličnih, i programabilnim vezama među ovim kolima.
VHDL je skradenica za Very-High-Speed Integrated Circuits Hardware Description Language. U toj
skradenici slovo „V“ predstavlja nekoliko riječi, Very-High-Speed Integrated Cricuits, ili VHSIC. To je
bio naziv projekta američkog Ministarstva odbrane, pokrenut 1980 godine, i rezultirao je značajnim
napretkom u oblasti integrisanih kola, litografije, pakovanja i kreiranja kombjuterskih alata za dizajn
integrisanih kola. Jedan od rezultata ovog projekta bio je i sam VHDL.
VHDL je zamisljen da bude standard IEEE i kao takav je i prihvaden u Decembru 1987 po nazivom IEEE
1076.
Dvije osnovne primjene VHDL-a su u polju uređaja sa programabilnom logikom (uključujudi CPLDs –
Complex Programmable Logic Device i FPGAs – Field Programmable Gate Arrays ) i u polju
aplikacijski specifičnih integriranih kola (ASICs – Application Specific Integrated Circuits).
Osnovni elementi sintakse VHDLa
Komentari
Komentari započinju znakovima '--' (dvije crtice) i protežu se do kraja linije.
Identifikatori
Identifikatori (VHDL rezervisane riječi ili nazivi koje je definisao programer) u VHDL jeziku moraju biti
napisani poštujudi sljedede konvencije:
- karakteri mogu biti ili alfanumerički (A...Z, a...z, 0...9) ili „_“ (underscore - donja crta).
- velika i mala slova se isto tretiraju
- prvi karakter mora biti slovo
- posljednji karakter ne može biti donja crta (_)
- dvije donje crte ne mogu biti jedna do druge.
Deklaracija objekata
Tri su tipa objekata:
Signal predstavlja logičke signale na žici u krugu. Signal nema memoriju, tako da ukoliko se njegov
izvor ukloni, signal nede imati vrijednost.
Varijabla se koristi za lokalnu pohranu privremenih podataka, vidljivih samo unutar procesa.
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
5
Fakultet informacijskih tehnologija
[email protected] Konstanta, ovi objekti moraju biti inicijalizirani sa deklarisanom vrijednosti i ta vrijednost ne može biti
izmijenjena.
Primjer:
SIGNAL x: BIT; VARIABLE y: INTEGER; CONSTANT one: STD_LOGIC_VECTOR (3 DOWNTO 0):=“0001“;
Tipovi podataka
Bit i BIT_VECTOR
Bit i BIT_VECTOR tipovi su predefinisani u VHDL. Objekti ovih tipova mogu imati vrijednosti '0' i '1'.
BIT_VECTOR tip je jednostavno vektor tipa BIT. Vektor sa svim bitovima iste vrijednosti mogu se
dobiti koristedi OTHERS ključnu riječ.
Primjer:
SIGNAL x: BIT; SIGNAL y: BIT_VECTOR (7 DOWNTO 0); x <= '1'; y <= '00000010'; y <= (OTHERS => '0'); -- isto kao i '0000000'
STD_LOGIC i STD_LOGIC_VECTOR
Ovi tipovi omoguduju više vrijednosti nego tip BIT za modeliranje realnih krugova accurately. Objekti
ovih tipova mogu imati sljedede vrijednosti:
'0' normalna 0 '1' normalna 1 'Z' visoka impedansa (mora se koristiti veliko slovo)...
INTEGER
Predefinisani integer tip definiše binarni brojni objekt za korištenje sa aritmetičkim operatorima. Po
defaultu integer signal koristi 32 bita za reprezentaciju označenih brojeva. Integer koristi nekoliko
bita koji takođe mogu biti deklarisani sa RANGE ključnom riječi.
Primjer:
SIGNAL x: BIT; SIGNAL y: INTEGER RANGE -64 TO 64;
BOOLEAN
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
6
Fakultet informacijskih tehnologija
[email protected] PREDEFINISANI boolean tip definiše objekte koji mogu imati dvije vijednosti TRUE and FALSE.
Primjer:
SIGNAL x: BOOLEAN;
ENUMERATION TYPE
Ovaj tip omogudava korisniku da specificira vrijednosti koje taj tip podataka može imati.
Sintaksa:
TYPE identifikator IS (value1, value2,...);
Primjer:
TYPE state_type IS (S1, S2, S3); SIGNAL state: state_type; state <= S1;
NIZ
Niz grupiše pojedinačne objekte podataka istog tipa zajedno u jednodimenzionalni ili
multidimenzionalni niz.
Sintaksa:
TYPE identifikator IS ARRAY (range) OF type;
Primjer:
TYPE byte IS ARRAY (7 DOWNTO 0) OF BIT; TYPE memory_type IS ARRAY (1 to 128) OF byte; SIGNAL memory: memory type; memory (3) <= „00101101“;
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
7
Fakultet informacijskih tehnologija
Dijelovi VHDL koda
Svaki VHDL model sastoji se od tri dijela: dio (blok) ENTITY i dio ARCHITECTURE, i dio za deklaraciju
biblioteka (LIBRARYs)
• Blok ENTITY definiše ulaze i izlaze sklopa.
• Blok ARCHITECTURE opisuje ponašanje i/ili strukturu sklopa.
ENTITET
U ENTITY deklaraciji deklarišu se eksterni ili korisnički intefejs modula slično deklaraciji funkcije.
Specificira imena entiteta i njegov interfejs. Interfejs se sastoji od signala koji se prosljeđuju entitetu
ili van njega koristedi dvije ključne riječi IN i OUT.
Sintaksa:
ENTITY entity-name IS
PORT (list-of-port-names-and-types);
END entity-name;
Primjer:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Siren IS PORT (
M: IN STD_LOGIC;
D: IN STD_LOGIC;
V: IN STD_LOGIC;
S: OUT STD_LOGIC) ;
END Siren;
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
8
Fakultet informacijskih tehnologija
[email protected] ARHITEKTURA
Dio ARHITECTURE definiše aktuelnu implementaciju funkcionalnosti entiteta. Ovo je slično definiciji ili
implementaciji funkcije. Sintaksa za arhitekturu zavisi od modela koji se koristi.
Sintaksa za dataflow model
ARHITECTURE architecture-name OF entity-name IS
signal declarations;
BEGIN
concurrent-statement;
END architecture-name;
Konkurentni iskazi se izvršavaju konkurentno.
Sintaksa za behavioral model
ARHITECTURE architecture-name OF entity-name IS
signal declarations;
function-definitions;
procedure-definition;
BEGIN
PROCESS-blocks;
concurrent-statement;
END architecture-name;
Iskazi unutar PROCESS bloka izvršavaju se sekvencijalno. Sam PROCESS blok se izvršava kao
konkurentni iskaz.
Sintaksa za structural model
ARHITECTURE architecture-name OF entity-name IS
component – declarations;
signal declarations;
BEGIN
ProgramiranjeI_sylabus.doc
AKS::Predavanje,Vjezbe,Workshop
http://dl.fit.ba/
9
Fakultet informacijskih tehnologija
[email protected] instance-name: PORT MAP statements;
concurrent-statement;
END architecture-name;
Za deklarciju svake korištene komponente, mora biti odgovarajudi entitet i arhitektura za te
komponente. PORT MAP iskazi su konkurentni iskazi.
Deklaracija biblioteka (LIBRARYs)
Za deklaraciju BIBLIOTEKE(odnosno uciniti je vidljivom u dizajnu) potrebne su najmanje dvije linije
koda, od kojih jedna predstavlja ime(name) biblioteke, a druga use izraz:
LIBRARY library_name;
USE library_name.package_name.package_parts;
Najmanje tri paketa (package) iz tri različite biblioteke su potreben u dizajnu:
- ieee.std_logic_1164 - standard - work
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
1
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
OPERATORI I ATRIBUTI U VHDL JEZIKU, KONKURENTNI KOD
Gotovo je nemoguće ili slabo produktivno pisati bilo koji kod efikasno ako se prije toga ne upoznamo sa tri stvari : tipovi podataka, operatori i atributi. Kao i kod svakog drugog jezika potrebno je savladati osnove da bi mogli pisati bilo jednostavniji bilo kompliciraniji program. U nastavku ćemo predstaviti više vrsta operatora i atributa.
OPERATORI
VHDL pruža nekoliko vrsta predefiniranih operatora:
• Operatori dodjele
• Logički operatori
• Artimetički operatori
• Relacijski operatori
• Operatori pomaka
• Operatori grupiranja
Svaku od ovih kategorija ćemo predstaviti zasebno!
OPERATORI DODJELE
Operatori dodjele se koriste da bi dodjelili vrijednosti signalima, varijablama i konstantama. Oni su :
<= Koristi se da bi se dodjelila vrijednost SIGNALU
:= Koristi se da bi se dodjelila vrijednost VARIJABLI, KONSTANTI ILI GENERIC. Također se koristi da bi se uspostavile početne tj. inicijalne vrijednosti
=> Koristi se za dodjelu vrijednosti individualnim elementima vektora, ili sa OTHERS
Primjer :
SIGNAL x : STD_LOGIC
VARIABLE y : STD_LOGIC_VECTOR(3 DOWNTO 0);
--- Lijevi bit je MSB (Most Significant Bit)
SIGNAL w: STD_LOGIC_VECTOR(0 to 7) ----Desni bit je MSB
Sljedeće dodjele se smatraju ispravnim:
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
2
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
• x <= ‘1’; -- ‘1’ je dodjeljen SIGNALU x koristeći <=
• y := “0000”; -- “0000” je dodijeljeno varijabli y koristeći operator :=
• w <= “10000000”; ----LSB je ‘1’, ostali su ‘0’
• w <= (0 =>’1’, OTHERS =>’0’);
• ----LSB je ‘1’, ostali su ‘0’
LOGIČKI OPERATORI
Koriste se naravno da bi se izvele logičke operacije. Podaci moraju biti tipa BIT, STD_LOGIC ili STD_ULOGIC (ili tipovi podataka ekstenzija BIT_VECTOR, STD_LOGIC_VECTOR, ili STD_ULOGIC_VECTOR). Logički operatori su :
• NOT • AND • OR • NAND • NOR • XOR • XNOR
Napomena: Operator NOT ima prvenstvo nad ostalim operatorima. XNOR operator je uveden u VHDL93.
Primjer operatora:
y <= NOT a AND b; --- (a’.b)
y <= NOT (a AND b) --- (a.b)’
y <= a NAND b; --- (a.b)’
ARTIMETIČKI OPERATORI
Koriste se da bi se izvele artimetičke operacije. Podaci mogu biti tipa INTEGER, SIGNED, UNSIGNED ili REAL. Također, ako se koriste std_logic_signed ili std_logic_unsigned paketi ieee biblioteke, tada se STD_LOGIC_VECTOR može također koristiti u operacijama dodavanja i oduzimanja.
Artimetički operatori su :
+ Sabiranje - Oduzimanje * Množenje / Dijeljenje * Eksponenecije MOD -Modul REM - Ostatak
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
3
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
ABS – Absolutna vrijednost
Nema nekih sintetičkih ograničenja što se tiče sabiranja i oduzimanja, i generalno isto vrijedi i za množenje. Za eksponenciju, dozvoljene su samo statičke vrijednosti za bazu i eksponent. Što se tiče mod i rem operatora, y mod x vraća ostatak od y/x sa znakom x, a y rem x vraća ostatak od y/x sa znakom y.
KOMPARACIJSKI OPERATORI
Koriste se za usporedbe vrijednosti podataka. Podaci mogu biti bilo kojeg tipa koji su već predhodno navedeni. Komparacijski operatori su:
= Jednako /= Različito < Manje od > Veće od <= Manje ili jednako >= Veće ili jednako
OPERATORI POMAKA
Uvedeni su u VHDL93. Sintaksa operatora pomaka je sljedeća:
<lijevi operand><operacija pomaka><desni operand>.
Lijevi operand mora biti tipa BIT_VECTOR, dok desni operand mora biti INTEGER (dopušten je + ili – ispred ovog operanda). Shift operatori su :
• sll Shift left logic -pozicije na desno su popunjene ‘0’ • srl Shift right logic –pozicije na lijevo su popunjene ‘0’ • sla Shift left arithmetic –najdesniji bit je repliciran > • sra Shift right arithmetic- lijevi bit repliciran na < • rol Rotate left logic • ror Rotate right logic
Primjer operatora pomaka:
Recimo da je x<=“01001” . Tada:
• y <= x sll 2; --logički shift na lijevo za 2:y<=“00100” • y <= x sla 2;--artimetički pomak na lijevo za 2:”00111” • y <= x srl 3;--logički shift na desno za 3:y>=“00001” • y <= x sra 2;--artimetički pomak na desno za 3:”00001” • y <= x rol 2;--rotacija na lijevo za 2: y<=“00101” • y <= x srl -2;--isto kao sll 2
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
4
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
OPERATORI GRUPISANJA
Kao što njihovo ime kaže koriste se za grupiranje vrijednosti. Podaci mogu biti bilo kojeg tipa veće predhodno nacedenog. Operatori grupiranja su:
• &
• (, , ,)
Primjer:
z <=x & “1000000” –ako je x<=1, tada z<=“11000000”
z<= (‘1’, ‘1’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, )
ATRIBUTI
Svrha atributa je da pruže više fleksibilnosti VHDL jeziku, također omogućavaju izgradnju generičkih dijelova koda (kod koji će npr. raditi za bilo koji vektor ili niz). Atributi su podijeljeni u dvije grupe:
Atributi podataka: Vraćaju informaciju (vrijednost) u vezi sa vektorom podataka
Atributi signala: Služi za praćenje (monitoring signala), i vraća TRUE ili FALSE
U oba slučaja, da bi koristili atribute moraju se koristiti apostrofi (“”). Pored liste predefiniranih atributa, VHDL pruža i korisnički definisane atribute.
ATRIBUTI PODATAKA
Predefinirani atributi podataka su :
• d’LOW: Vraća niži indeks niza • d’HIGH: Vraća viši indeks niza • d’LEFT: Vraća “leftmost” indeks niza • d’RIGHT: Vraća “rightmost” indeks niza • d’LENGTH: Vraća veličinu niza • d’RANGE: Vraća raspon niza • d’REVERSE_RANGE: Vraća raspon niza, ali u obrnutom redoslijedu
Primjer:
SIGNAL d: STD_LOGIC_VECTOR (7 DOWNTO 0)
Tada:
d’LOW =0, d’RIGHT=1, d’LEFT=7, d’RIGHT=0, d’LENGTH=8, d’RANGE= (7 downto 0), d’REVERSE_RANGE (0 to 7)
Primjer:
SIGNAL x: STD_LOGIC_VECTOR (7 DOWNTO 0)
Tada bi sve 4 LOOP izjave bile ispravne i jednake!
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
5
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
FOR i IN 0 TO 7 LOOP ... FOR i IN x’RANGE LOOP ... FOR i IN x’LOW TO x’HIGH LOOP ... FOR i IN 0 TO x’LENGTH-1 LOOP ...
Ako je signal brojčanog tipa, onda:
d’VAL(pozicija); Vraća vrijednost na tačno specificiranoj poziciji
d’POS(vrijednost); Vraća poziciju specificirane vrijednosti
d’LEFTOF(vrijednost); Vraća vrijednost na poziciji lijevo od specificirane vrijenosti
d’VAL(red, kolona); Vraća vrijednost na specifiranoj poziciji
ATRIBUTI SIGNALA
U opisu dolje, s je signal.
s’EVENT: Vraća TRUE kada se dešava promjena, neki dogaaj na s(tj. kad se mijenja vrijednost s)
s’STABLE[t]: Vraća TRUE ako se ne dešava nikakva promjena na s tijekom nekog vremenskog intervala t
s’ACTIVE: Vraća TRUE kada se transakcija (dodjela) vrši na s
s’QUIET[t]: Vraća TRUE ako se nikakva transakcija (dodjela vrši na s tokom vremenskog intervala t)
s’LAST_VALUE: Vraća vrijednost s prije posljedneg događaja (eq UNDO)
s’LAST_EVENT: Vraća vrijeme koje je prošlo od zadnjeg događaja s-a
s’LAST_ACTIVE: Vraća vrijeme koje je prošo od zadnje transakcije (dodjele) s-a
Većina ovih atributa gore navedenih se koristi za simulaciju, a najčešće korišteni atribut je s’EVENT
Primjer:
• IF (clk’EVENT AND clk=‘1’)...
• IF (NOT clk’STABLE AND clk=‘1’)
• WAIT UNTIL (clk’EVENT AND clk=‘1’)
KORISNIČKI DEFINISANI ATRIBUTI
VHDL dozvoljava izgradnju korisničkih definiranih atributa. Da bi mogli koristiti korisnički definirane atribute, moramo izvršiti njihovu deklaraciju i specifikaciju.
Deklaracija atributa
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
6
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
ATTRIBUTE attribute_name:attribute_type;
Specifikacija atributa
ATTRIBUTE attribute_name OF target_name: class IS value;
gdje su:
attribute_type: Bilo koji tip podatka(BIT, INTEGER, STD_LOGIC_VECTOR, itd.) class: TYPE, SIGNAL, FUNCTION, itd. value: ‘0’, 27, “00 11 10 01”, itd.
Primjer:
ATTRIBUTE number_of_inputs: INTEGER;
--deklaracija
ATTRIBUTE number_of_inputs OF nand3: SIGNAL IS 3;
--specifikacija
......
inputs <= nand3’number_of_pins;
--poziv atributa, vraća 3
PREKLAPANJE OPERATORA
Kao što atributi mogu biti korisnički definisani, tako mogu i operatori. Na primjer, operacija sabiranja dopušta samo sabiranje između INTEGER vrijednosti, ne dozvoljava sabiranje varijabli tipa primjer BIT. Dakle da bi bilo moguće tako nešto potrebno je preklopiti operatore. Korisnici mogu sami definirati vlastite operacije, koristeći isto ime kao i predefinirana operacija.
Primjer: Ako želimo zbrojiti INTEGER sa binarnim 1-bitnim brojem, tada možemo koristiti FUNCTION. Slijedi primjer preklopljenog operatora “+”
FUNCTION “+” (a: INTEGER, b: BIT) RETURN INTEGER IS
BEGIN
IF (b=‘1’ ) THEN RETURN a+1;
ELSE RETURN a;
END IF;
END “+”
Poziv ove funkcije izgleda ovako:
SIGNAL inp1, outp: INTEGER RANGE 0 TO 15;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
7
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
SIGNAL inp2:BIT;
(...)
outp <= 3 + inp1 + inp2;
(...)
GENERIC
Kao što samo ime kaže, GENERIC je način specificiranja generičkog parametra (a to je statički parametar koji može biti veoma lako modificiran i prilagođen različitim aplikacijama). Ovi generički parametri omogućavaju fleksibilnost i ponovnu upotrebu koda. GENERIC kada se koristi, mora biti deklariran u ENTITY dijelu koda. Specificirani parametar će tada uistinu biti globalan (vidljiv cijelom dizajnu). Njegova sintaksa je prikazana dole:
GENERIC (parameter_name : parameter_type := parameter_value);
Primjer: Generička izjava dolje specificira parametar n, tipa INTEGER, čija defaultna vrijednost je 8. Stoga, kad god se n nalazi u ENTITY ili u ARCHITECTURE njegova vrijednost će biti 8.
ENTITY my_entity IS GENERIC (n : INTEGER :=8); PORT(...); END my_entity Može biti specificirano više generičkih parametara u ENTITY Npr. GENERIC (n: INTEGER :=8;
vector: BIT_VECTOR (7 DOWNTO 0) := „00001111“ );
KONKURENTNI KOD
VHDL kod može biti konkurentan i sekvencijalan. Ova podjela je jako bitna, zato jer dopušta razumijevanje koji izrazi su namjenjeni za koji dio koda, kao i posljedice korištenje jednog ili drugog tipa koda. Konkuretni izrazi u VHDL jeziku su WHEN i GENERATE. Pored njih operatori dodjele (AND, NOT, +, *, sll, itd.) se također mog koristiti za kreiranje konkurentnog koda.
I još jedan izraz, specijalni oblik dodjele, zvani BLOCK, može također biti korišten u ovom tipu koda.
KOMBINACIJSKA VS SEKVENCIJALNA LOGIKA
Kombinacijska logika je ta gdje output logičkog kola ovisi samo o trenutnim ulazima. Tada je jasno da sistem ne zahtjeva memorije i da može biti implementiran koristeći uobičajna logička kola.
Sekvencijalna logika je ta gdje output ovisi o prijašnjim stanjima. Stoga, potrebna su takozvana “spremišta elemenata”, koji su povezani sa
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
8
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
kombinacijskim logičkim blokom kroz feedback petlju, tako da će sada pohranjena stanja također imati utjecaja na output. No, ne može se reći da svako logičko kolo koje posjeduje spremište je sekvencijalno (RAM).
Primjer je RAM memorija, gdje se ovo “spremište elemenata” pojavljuje u forward putanji, prije nego u feedback petlji. Operacija čitanja memorije ovisi samo o adresi vektora trenutno primjenjenoj na RAM input, sa dobijenom vrijednošću koja nema veze sa predhodnim pristupima memoriji.
KONKURETNI VS SEKVENCIJALNI KOD
VHDL kod je inherentno konkurentan (paralelan). Samo izrazi smješteni u PROCESS, FUNCTION ili PROCEDURE su sekvencijalni. Blok u cijelosti, osim ovih izraza koji se izvršavaju sekvencijalno, je konkurentan. Konkuretni kod se još zove dataflow kod. Generalno gledajući, mi jedino možemo graditi kombinacijska logička kola sa konkurentnim kodom. Da bi napravili sekvencijalna logička kola, mora biti korišten sekvencijalni kod. Također moguće je implementirati i kombinacijska i sekvencijalna kola.
U konkuretnom kodu može biti korišteno sljedeće :
• Operatori • Izraz WHEN (WHEN/ELSE ili WITH/SELECT/WHEN) • Izraz GENERATE • Izraz BLOCK
Nešto više reći ćemo o prve tri stavke, s odgovarajućim primjerima, a o BLOCK izrazu navesti osnovne stvari.
KORIŠTENJE OPERATORA
Ovo je najjednostavniji način kreiranja konkurentnog koda. Operatori mogu biti korišteni da impelmetiraju bilo koje kombinacijsko kolo. No, kao što ćete i sami moći primjetiti kasnije kompleksna kola se lakše prave koristeći sekvencijalni kod, iako kolo u sebi ne sadrži sekvencijalnu logiku.
Sljedeći primjer će prikazati kreiranje konkurentnog koda koristeći samo logičke operatore.
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
9
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
IZRAZ WHEN
When je jedan od osnovnih konkuretnih izraza. Pojavljuje se u dvije već navedene forme.
WHEN/ELSE:
assignment WHEN condition ELSE assignment WHEN condition ELSE
WITH / SELECT / WHEN
WITH identifier SELECT
assignment WHEN value, assignment WHEN value, ...;
Kao primjer za izraz WHEN uzet ćemo isti multiplekser kao i maloprije: Kod izgleda:
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
10
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
WITH/SELECT/WHEN
Za primjer ovog izraza opet ćemo se posližiti multiplekserom da bi dobili jasniju predodžbu o razlikama između ovih izraza:
GENERATE
GENERATE je još jedan konkurentni izraz. Taj izraz možemo uporediti sa sekvencijalnim LOOP izrazom, zato što dozvoljava da se jedan dio koda ponavlja nekoliko puta, kreirajući nekolko instanci iste dodjele. Njegova pravilna forma je FOR / GENERATE sa sljedećom sintaksom:
label: FOR identifier IN range GENERATE
(concurrent assignments)
END GENERATE;
Osim ove forme postoji još i IF / GENERATE, koja može biti ugnježđena u FOR/GENERATE.
label1: FOR identifier IN range GENERATE
...
label2: IF conditon GENERATE
(concurrent assignments)
END GENERATE;
...
END GENERATE;
Primjer:
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
11
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
Bitna stvar za napomenuti je da kod GENERATE izraza obje krajnje granice petlje moraju biti statičke. Kao primjer razmotrit ćemo kod ispod, gdje je choice input (ne-statički parametar). Ovaj dio koda nije sintesizabilan!
BLOCK
Postoje dvije vrste BLOCK izraza: Simple i Guarded.
Simple BLOCK
BLOCK izraz, u svojoj simple formi, predstavlja samo način lokalne podjele koda. On dozvoljava setu konkurentnih izraza da budu “clustered” tj. grupisane u BLOCK-ove, sa ciljem da kod bude lakše upravljiv i čitljiv. Njegova sintaksa izgleda ovako:
label: BLOCK
[declarative part]
BEGIN
(concurrent statement)
END BLOCK label;
Glavni aspekt tzv. blokiranja koda izgleda ovako:
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
12
Fakultet informacijskih tehnologija [email protected] (antonija zelić); [email protected]
Guarded BLOCK je specijalna vrsta bloka, koja uključuje dodatne izraze, zvane guard izrazi. Guarded izrazi u guarded BLOCK-u se očekivaju jedino kada je guard expression TRUE.
Sintaksa izgleda ovako:
label: BLOCK (guar expression)
[declarative part]
BEGIN
(concurrent guarded and unguarded statement)
END BLOCK label;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
1
Fakultet informacijskih tehnologija
SIGNALI I VARIJABLE
Vhdl nudi dva objekta za rad sa ne-statičkim vrijednostima podatka: SIGNAL i
VARIJABLA. Takođe omogućava i dodjeljivanje defaultne (statičke) vrijednosti sa:
GENERIC i CONSTANT. CONSTANT i SIGNAL mogu biti globalne i mogu biti korištene u
drugim tipovima koda (konkurentni ili sekvencijalni). Varijable su lokalne, koriste se
unutar dijela sekvecnijalnog koda i njihova vrijednost nikad direktno ne može biti
proslijeđivana van.
Odabir izmedju signala i varijabli nije uvijek lak, jer nekada cijele sekcije i primjeri mogu
biti unapred upropašteni.
CONSTANT
CONSTANT služi za utvrđivanje defaultne vijednosti.
Sintaksa:
CONSTANT name : type := value;
Primjer:
CONSTANT set_bit : BIT := '1';
CONSTANT datamemory : memory := (('0' , '0' , '0' , '0' ),
('0' , '0' , '0' , '1' ),
('0' , '0' , '1' , '1' ));
Konstanta može biti deklarisana u paketu, entitetu ili arhitekturi. Kada je deklarisana u
paketu ona je globalna. Kada je deklarisana unutar entiteta (iza PORT) globalna je za sve
arhitekture koje su poslije tog entiteta. Kada je deklarisana unutar arhitekture (u njenom
deklarativnom dijelu) globalna je samo za tu arhitekturu.
Najčešće se deklariše u arhitekturi ili u paketu.
SIGNAL
SIGNAL omogućava proslijeđivanje vrijednosti u i van kola. Zapravo, signal reprezentuje
veze unutar kola.
Svi portovi i entiteti su signali po defaultu.
Sintaksa:
SIGNAL name : type [range] [:=initial_value];
Primjer:
SIGNAL control: BIT :='0';
SIGNAL count: INTEGER RANGE 0 TO 100;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
2
Fakultet informacijskih tehnologija
SIGNAL y: STD_LOGIC_VECTOR (7 downto 0);
Deklaracija signala može biti na istom mjestu kao i deklaracija konstante. Važan aspekt
signala je da kad se koristi unutar sekcije sekvencijalnog koda (process, npr.) njegov
update (izmjena vrijednosti) nije trenutan tj. njegova nova vrijednost se ne može koristiti
prije izvršenja procesa, funkcije ili procedure.
Operator dodjeljivanja za signal je „<=“ .
Ono što je još važno kod signala je: mogućnost dodjeljivanja više iskaza istom signalu.
VARIABLE
Suprotno konstantama i signalima, varijabla reprezentuje samo lokalne informacije.može
biti korištena unutar procesa, funkcije ili procedure. Njena izmjena vrijednosti je
direktna, što znači da se nova vrijednost može koristiti odmah u narednoj liniji koda.
Sintaksa:
VARIABLE name : type [range] [:=initi_value];
Primjer
VARIABLE control: BIT :='0';
VARIABLE count: INTEGER RANGE 0 TO 100;
VARIABLE y: STD_LOGIC_VECTOR (7 downto 0) := „10001000“;
Varijabla može biti korištena samo unutar sekvencijalnog koda, a deklariše se samo u
deklarativnom dijelu procesa, funkcije ili procedure.
Operator dodjeljivanja za varijablu je „:=“ .
SIGNAL VS VARIABLE
Kao što je rečeno prije, nije lako odabrati između signala i varijable. Glavne razlike su
predstavljenje u tabeli ispod.
SIGNAL VARIABLE
Dodjela <= :=
Zadatak Predstavlja unutrašnje veze Predstavlja lokalne
informacije
Scope globalno lokalno
Ponašanje Izmjena vrijednosti nije
moguća trenutno
Izmjena vrijednosti moguća
trenutno
Korištenje U paketu, entitetu ili
arhitekturi
U procesu, funkciji ili
proceduri.
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
3
Fakultet informacijskih tehnologija
U kodu ispod prikazane su razlike između signala i varijabli...
MULTIPLEKSER 4U1 – korištenje signala
-------------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-------------------------------------------------------------------------------------
ENTITY mux IS
PORT (a, b, c, d, so, s1 : IN STD_LOGIC;
Y: OUT STD_LOGIC);
END mux;
-------------------------------------------------------------------------------------
ARCHITECTURE not_ok OF mux IS
SIGNAL sel : INTEGER RANGE 0 to 3;
BEGIN
PROCESS (a, b, c, d, s0, s1)
BEGIN
sel <=0;
IF (s0='1') then sel <=sel+1;
END IF;
IF (s1='1') THEN sel <=sel+2;
END IF;
CASE sel IS
WHEN 0 =>y<=a;
WHEN 1 =>y<=b;
WHEN 2 =>y<=c;
WHEN 3 =>y<=d;
END CASE;
END PROCESS;
END not_ok;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
4
Fakultet informacijskih tehnologija
MULTIPLEKSER 4U1 – korištenje varijabli
-------------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-------------------------------------------------------------------------------------
ENTITY mux IS
PORT (a, b, c, d, so, s1 : IN STD_LOGIC;
Y: OUT STD_LOGIC);
END mux;
-------------------------------------------------------------------------------------
ARCHITECTURE ok OF mux IS
PROCESS (a, b, c, d, s0, s1)
VARIABLE sel : INTEGER RANGE 0 TO 3;
BEGIN
sel :=0;
IF (s0='1') then sel :=sel+1;
END IF;
IF (s1='1') THEN sel :=sel+2;
END IF;
CASE sel IS
WHEN 0 =>y<=a;
WHEN 1 =>y<=b;
WHEN 2 =>y<=c;
WHEN 3 =>y<=d;
END CASE;
END PROCESS;
END ok;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
5
Fakultet informacijskih tehnologija
Rezultati simulacije:
Za not_ok mux
za ok mux
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
1
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
PROJEKTOVANJE SKLOPA I OSNOVNI TIPOVI PODATAKA U VHDL-U
Design flow
Jedna od osnovnih prednosti jezika VHDL je što omogućava sintezu logičkih kola ili sistema u programibilni uređaj(PLD ili FPGA) ili ASIC.
Dizajn započinjemo pisanjem VHDL koda koji se zatim spremi u file s ekstenzijom .vhd i ima isto ime kao i ENTITET
Prvi korak u procesu sinteze je kompajliranje. Kompajliranje je proces prevođenja VHDL (high-level) koda, koji opisiva kolo na RTL-u (Register Transfer Level) u netlist-u na najnižem nivou (gate level).
Slijedeći korak je optimizacija. U njemu se dizajn može simulirati, jer se izvodi na nivou logičkih kola (AND, OR, NOT).
Nakon sto se izvrši optimizacija, slijedi generiranje fizičkog izgleda za PLD/FPGA čipove, taj se korak zove razmještanje i povezivanje (Place and Route)
VHDL se može iskoristiti da bi se za opis sklopovlja koristila tri pristupa. Ova tri različita pristupa su strukturalna, podatkovna, i funkcionalna metoda za opis sklopovlja (hardvera).
Projektovanje sklopa
Projektovanje nekog sklopa sastoji se od niza koraka od kojih je svaki idući korak na
nižoj razini apstrakcije, tj. bliži je samom sklopovlju. U nastavku je dan redoslijed po
kojemu se obavlja projektiranje, a masnim slovima označeni su pojmovi specifični za
modeliranje sklopova:
• Opis funkcionalnosti sklopa • Simulacija sklopa • Implementacija sklopa u ciljnoj tehnologiji • Izrada prototipa • Otvaranje novog projekta • Dodavanje VHDL modela projektu
Opis funkcionalnosti sklopa
Sklop je moguće opisati na dva načina. Prvi način–sličan programiranju, tj. izradi
programa opisivanje je ponašanja sklopa. U tom slučaju govorimo funkcijskom
(odnosno ponašajnom) modelu. Druga mogućnost je da opišemo sastavne elemente
od kojih se sklop sastoji i način međusobnog povezivanja elemenata. U ovom slučaju
govorimo o strukturnom modelu. Elementi koje koristimo prilikom strukturnog
opisivanja sklopa nazivaju se komponente te su i one opisane bilo ponašajno ili
strukturno.
Simulacija sklopa
Nakon što je sklop opisan potrebno je provjeriti ispravnost opisa što se obavlja
simulacijom. Ulaz simulatora je niz ispitnih uzoraka koje simulator postavlja na ulaze
sklopa koji se simulira te se računa odziv, tj. izlaz. na osnovu izlaza može se zaključiti da
li je sklop ispravno opisan. Npr. ako želimo testirati procesor potrebno mu je dodati RAM
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
2
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
i ROM kako bi se on mogao testirati, te u tom slučaju govorimo o ispitnoj okolini koja se
sastoji od RAM-a i ROM-a i ispitivane komponente – procesora.
Implementacija sklopa u ciljnoj tehnologiji
U ovom koraku opisani sklop se prevodi u željenu tehnologiju (FPGA, CPLD, ASIC, itd.).
To se često izvodi automatizirano budući da se radi o dosta kompleksnom koraku. Podaci
ovog koraka mogu se koristiti u prethodnom koraku kako bi se poboljšala točnost
simulacije. Recimo, u ovom koraku saznajemo kašnjenja na sklopu koja se u koraku 2.
nisu uzimala u obzir, ali koja mogu utjecati na dizajn.
Izrada prototipa
Uprkos simulaciji još nije sigurno da će sklop nakon proizvodnje ispravno raditi te je
potrebno izvesti probne primjerke (prototipove) i testirati ih kako bi se utvrdila njihova
ispravnost. U slučaju FPGA i CPLD uređaja izrada probnih primjeraka svodi se na
programiranje sklopova, dok se u slučaju ASIC-a tvornici šalju podaci dobiveni u koraku
3 na osnovi kojih tvornica izrađuje čipove.
Apstrakcijski nivoi
Algoritam, Nivo prijenosa na registre(RTL), i Nivo ulaza i izlaza (Gate level).
Algoritme nije moguće sintetizirati, RTL je input za sintezu, nivo ulaza/izlaza je output
sinteze. Razlika između ova tri nivoa apstrakcije je u vremenskom definiranju.
Gate level opis se sastoji od mreže ulaza , izlaza i registara iz tehnološke biblioteke, koje
sadrže kašnjenja ovisna o tehnologiji za svako kolo.
Opis sadrži listu kola (komponenti) korištenih u dizajnu. Drugi dio sadrži instanciranje
komponenata i njihovu povezanost.
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
3
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
RTL (Register Transfer Level) model, dizajn je odvojen u spremišne elemente, i.e. Flip/Flop-ove ili registre, i kombinatorika koja ima funkciju prijenosa od jednog registra do sljedećeg.
TIPOVI PODATAKA
Primjer jednostavnog projekta
Komponente (ponavljanje)
Entity (entitet) blok HDL dizajna se koristi za
deklaraciju I/O portova na kolu, dok se
opisni kod nalazi unutar architecture
bloka.
Proces se sastoji od konkurentih naredbi,
postoji samo unutar arhitekture, nekoliko
procesa se može izvršavati konkurentno,
izvršenje se kontrolira bilo listom
osjetljivosti ili wait iskazima.
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
4
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
Osnovni tipovi podataka
Svi tipovi dozvoljeni u VHDL-u se sastoje od svega, od skalarnih brojčanih tipova do
složenih nizova i unosa za tipove fajl-ova.Prvi korak u odrađivanju tipova podataka je
razmatranje VHDL objekta koji mogu sadržavati različite tipove podataka.
Tipovi objekata
VHDL objekti mogu biti nesto od navedenog:
Signal, koji predstavlja povezivajuće žice koje spajaju portove instanciranja komponenti.
Varijabla se koristi za lokalnu pohranu privremenih podataka, vidljivih samo unutar
procesa.
Konstanta, predstavlja specifičnu, konkretnu vrijednost.
Signali ovdje nisu mogli biti korišteni za skladištenje podataka iz slijedećih razloga:
Varijable su učinkovitije jer se dodjela vrijednosti (inicijalizacija) vrši odmah prilikom
deklaracije, dok je taj dio kod signala odgođen za kasnije.
Varijable zauzimaju manje memorije, dok signali trebaju više informacije za atribute i
podatke o kasnijoj inicijalizaciji.
Konstante
Konstantni objekti su nazivi kojima su dodjeljene specifične(konkretne) vrijednosti tipa.
Služe za bolju dokumentaciju modela i lakše ažuriranje. Kod korištenja vrijednosti
3.1414, lakše je definisati konstantu nego je koristiti direktno u modelu:
CONSTANT OI: REAL := 3.1414;
Općenito:
CONSTANT ime_konstante {, ime_konstante} : naziv_tipa[:=vrijednost];
Konstante imaju ista pravila za opseg vrijednosti kao i signali.
Novi korisnički tip
Da bismo definirali novi tip moramo napraviti deklaraciju tipa. Deklaracija definira ime
tipa i opseg vrijednosti tipa. Deklaracija tipova podataka se navode u dijelu koda sa
deklaracijom paketa, deklaracijom entiteta, arhitektura, podprograma i procesa.
Deklaracija tipa izgleda ovako :
TYPE naziv_tipa IS oznaka_tipa;
4 su glavne kategorije tipa podataka: skalarni, kompozitni, pristupni i file tipovi.
Skalarni tipovi ulključuju sve jednostavne kao što su integer i real. Kompozitni uključuju
nizove i recorde. Tipovi pristupa su ekvivalentni pointerima u tipičnim programskim
jezicima i file tipovi daju mogućnost deklaracije file objekata sa korisnički definisanim
tipovima.
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
5
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
Primjer:
Signali
Za razliku od “uobičajenih” programskih jezika, VHDL osim varijabli poznaje i tzv. signale koji služe za modeliranje vodiča te logičkih i memorijskih elemenata u sklopovima. Primjerice, sljedeći izraz definira logička I vrata s dva ulaza:
sigA <= sigB AND sigC; dok sljedeći izraz povezuje izlaz prethodnih logičkih vrata na ulaz nekog drugog signala
sigD <= sigA;
Primjeri
SIGNAL x : BIT; -- x je signal tipa BIT
SIGNAL y: BIT_VECTOR (3 DOWNTO 0); --y je 4bitni vektor sa krajnjim lijevim bitom
MSB
SIGNAL w: BIT_VECTOR (0 TO 7);--w je 8bitni signal sa krajnjim desnim bitom MSN
Postavljanje vrijednosti:
x <= ‘1’; -- x je jednobitni signal čija je vrijednost 1
y <= “0111”; -- y je 4bitni signal vrijednosti “0111” sa -- MSB-om 0.
w <= “01110001” --(8bitni signal sa MSB=‘1’)
STD_LOGIC
STD_LOGIC i STD_LOGIC_VECTOR je 8bitni logički sistem
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
6
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
Većina std_logic nivoa je namijenjena samo za simulaciju (nije moguća sinteza), ali su
‘0’, ‘1’, ‘Z’ (visoka impedansa) sintetizibilni.
Tipovi:
• BOOLEAN: True ili False • INTEGER: 32-bitni integeri • NATURAL: ne-negativni integeri • REAL: realni brojevi. • Fizički literali: za opisivanje npr.voltaže i sl. Fizičkih vrijednosti(nije ih moguće
sintetizirati) • Literali karakteri: ASCII karakteri (nesintetizibilni) • SIGNED i UNSIGNED(u std_logic_arith paketu ieee biblioteke) dozvoljavaju
aritmetičke operacije
Aliasi
Alias definira drugo ime za signal ili dio signala. Obično se koriste za izuzimanje
određenih dijelova bit_vectora.
signal instruction: bit vector(31 down to 0);
alias epode: bit_vector(6 downto 0) is instruction(31 downto 25);
...
opcode <= "1010101"; -- Set the opcode part of an instruction code.
Primjeri
x0 <= ‘0’ --bit, std_logic ili std_ulogic --vrijednost ‘0’
X1 <= “00011111” –-bit vector, std_logic_vector
x2 <= “101111” -- 47 binarno
x3 <= B“10111” --može i ovako
x4 <= O”47” --oktalno 47
x6 <= X”2F” --heksadecimalno 47
n <= 1200; --integer
IF ready THEN --boolean koji se izvršava --kada je signal ready = TRUE
y <= 1.2E-5 --realni, nesintetizibilni
SIGNAL a: BIT;
SIGNAL b: BIT_VECTOR(7 DOWNTO 0);
SIGNAL c: STD_LOGIC;
SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0)
SIGNAL e: INTEGER RANGE 0 TO 255;
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
7
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
a<=b(5); --correct(isti skalarni tip: BIT)
b(0)<=a; --correct(isti skalarni tip: BIT);
c<=d(5); --correct(isti skalarni tip: STD_LOGIC)
d(0)<=c; --correct(isti skalarni tip: STD_LOGIC)
a<=c; --incorrect(različiti tipovi: BITxSTD_LOGIC)
b<=d; --incorrect(različiti vektori: BIT i STD_LOGIC)
e<=b; --incorrect(različiti tipovi: INTEGER i BIT_VECTOR)
e<=d; --incorrect(različiti tipovi: INTEGER i std_logic_vector)
Korisnički definirani tipovi
Predefiniran definiran integer:
TYPE integer IS RANGE -2147483647 TO 2147483647
Predefiniran definiran natural:
TYPE natural IS RANGE 0 TO +2147483647;
Korisnički definiran set integera:
TYPE my_integer IS RANGE -32 TO 32;
Korisnički definiran set integera:
TYPE student_grade IS RANGE 0 TO 100;
Korisnički definiran BIT_VECTOR:
TYPE bit_vector IS ARRAY (NATURAL RANGE <>) OF BIT;
Korisnički definiran enumerated tip:
TYPE color IS (red, green, blue, white);
Podtipovi
SUBTYPE my_logic IS STD_LOGIC RANGE ‘0‘ TO ‘Z’; --Budući da u STD_LOGIC spada(‘X’,
‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’,’-’), tako da je podtip my_logic = (‘0’, ‘1’,’Z’);
Kod uključivanja biblioteka koristi se ključna riječ library, a za uključivanje paketa se
koristi ključna riječ use:
library lib_name; -- make library visible
use lib_name.pkg_name.all; -- make package visible
Nizovi
Nizovi su kolekcije objekata istog tipa. Mogu biti:
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
8
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
1D(vektor), 2D(niz skalara) ili 1Dx1D(niz vektora), mogu postojati nizovi većih
dimenzija, ali onda nisu sintetizibilni.
Skalari mogu biti neki od slijedećih tipova:
BIT, STD_LOGIC, STD_LOGIC i BOOLEAN
Vektori:
BIT_VECTOR, STD_LOGIC_VECTOR, INTEGER, SIGNED, UNSIGNED i
STD_ULOGIC_VECTOR
Ne postoje predefinirani 2D ili 1Dx1D nizovi, oni se moraju specificirati od strane
korisnika. Da bi to uradili, moramo prvo definirati tip koji ćemo koristiti, zatim ćemo
koristeći taj tip definirati signal, varijablu ili konstantu.
TYPE ime_tipa IS ARRAY (specifikacija) OF tip_podatka;
Da bismo iskoristili novi niz deklariramo signal:
SIGNAL ime_signala: tip_signala [:=inicijalna_vrijednost];
Inicijalna vrijednost je opcionalna, samo je za simulaciju.
Primjer: 1Dx1d niz
Primjerice, želimo kreirati 1Dx1D niz vektora, svaki 8 bita dug. Svaki vektor je red, a niz
je matrica. Recimo da želimo da krajnji lijevi bit svakog vektora bude MSB, a gornji red
je red 0. Slijedi implementacija niza:
Prvi način:
TYPE row IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; --1D niz
TYPE matrica IS ARRAY (0 TO 3) OF row; --1Dx1D niz
SIGNAL x: matrica;--1Dx1D signal
Drugi način:
TYPE matrica IS ARRAY (0 TO 3) OF
STD_LOGIC_VECTOR (7 DOWNTO 0);
2D niz:
TYPE matrica2D IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;
Inicijalizacija signala ili varijable:
...:= “0001”; --za 1D niz
...:=(‘0’,’0’,’0’,’1’) --za 1D niz
...:=((‘0’,’1’,’1’,’1’),(‘1’,’1’,’1’,’0’)); --2D niz
Niz portova
ProgramiranjeI_sylabus.doc
Arhitektura kompjuterskih sistema::Vjezbe i workshop
http://dl.fit.ba/
9
Fakultet informacijskih tehnologija
[email protected] (marija herceg); [email protected]
U specifikaciji input i output pinova(PORTS) kola moguće je specificirati i portove kao
nizove vektora. S obzirom da nije dozvoljeno definirati TYPE izraze u ENTITY bloku,
rješenje je deklarirati takve korisničke tipove u bloku PACKAGE koji će biti vidljiv u
cijelom dizajnu uključujući ENTITY:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE my_data_types IS
TYPE vector_array IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR (7
DOWNTO 0);
END my_data_types;
Main code:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_data_types.all; --korisnički definiran paket
ENTITY mux IS
PORT (inp: IN VECTOR_ARRAY (0 TO 3);
.....);
END mux;
...;