35
AKS::Predavanje,Vjezbe,Workshop http://dl.fit.ba/ 1 Fakultet informacijskih tehnologija [email protected] [email protected] 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

WHDL vjezbe

Embed Size (px)

Citation preview

ProgramiranjeI_sylabus.doc

AKS::Predavanje,Vjezbe,Workshop

http://dl.fit.ba/

1

Fakultet informacijskih tehnologija

[email protected]

[email protected]

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]

[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

[email protected]

[email protected]

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

[email protected]

[email protected]

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]

[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]

[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

[email protected]

[email protected]

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]

[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]

[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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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;

...;