automatizovano projektovanje digitalnih sistema … · 2012-03-06 · aktivnosti vezane za...
TRANSCRIPT
Radovan D. Stojanović
AUTOMATIZOVANO PROJEKTOVANJE
DIGITALNIH SISTEMA
(VHDL i FPGA)
ENTITY half_adder ISPORT( x, y, enable: IN BIT;carry, result: OUT BIT);END half_adder;
2008
R. Stojanović VHDL i FPGA
______________________________________________________________________
1
SADRŽAJ
UVOD 5
1 VHDL ................................................................................... 8
1.1 Uvod .............................................................................................. 8
1.2 Nivoi modelovanja i apstrakcije ...................................................... 11
1.3 Struktura VHDL programa .............................................................. 13
1.4 Entitet ............................................................................................... 13
1.5 Arhitektura ....................................................................................... 15
1.6 Entitet + Ahitektura ....................................................................... 16
1.7 Vježba 1 – Unos, kompajliranje i simulacija VHDL programa ..... 16
1.8 Vježba 2 – Unos, kompajliranje i simulacija šematskog kola ......... 18
1.9 Deklaracija biblioteke ..................................................................... 19
1.10 Deklaracije paketa – Package .......................................................... 20
1.11 Vježba 3 – Upotreba biblioteka i paketa .......................................... 23
1.12 Komentari ......................................................................................... 25
1.13 Tipovi podataka ................................................................................ 26
1.14 Operatori ........................................................................................... 35
1.15 Atributi .............................................................................................. 38
1.16 Generic .............................................................................................. 41
1.17 Paralelno kodiranje .......................................................................... 42
1.18 Sekvencijalno kodiranje .................................................................. 46
1.19 Strukturno modelovanje ................................................................... 57
R. Stojanović VHDL i FPGA
______________________________________________________________________
2
2 FPGA – Osnove ............................................................. 63
2.1 Uvod .......................................................................................... 63
2.2 Aplikaciono specifična integrisana kola (ASIC) …………….. 63
2.3 PLD kola .................................................................................... 66
2.4 FPGA ......................................................................................... 73
2.5 Tehnologije programiranja PLD kola ……………………….... 81
2.6 Konfigurisanje FPGA čipova ......................................................86
3 Quartus II – Upustvo ……………………………….... 97
3.1 Uvod ........................................................................................... 97
3.2 Postupak instalacije i pokretanja Quartus-a II ........................... 97
3.3 Kreiranje projekta ...................................................................... 101
3.4 Unos projekta opisanog VHDL kodom ..................................... 105
3.5 Kompajliranje (prevodjenje) projekta ....................................... 108
3.6 Simulacija projekta ................................................................... 110
3.7 Kreiranje simbola .................................................................... 122
3.8 Unos šematskog projekta ......................................................... 124
3.9 Pridruživanje pinova i konfigurisanje FPGA čipa .................... 132
4 Primjeri za vježbu ........................................................ 144
4.1 Primjer 1: DFF .......................................................................... 144
4.2 Primjer 2: Full Adder ............................................................... 146
R. Stojanović VHDL i FPGA
______________________________________________________________________
3
4.3 Primjer 3: Up-counter .............................................................. 147
4.4 Primjer 4: Binarni komparator ................................................ 149
4.5 Primjer 5: Counter+Comparator ............................................ 152
4.6 Primjer 6: Mux2to1 vektorskih podataka sa promjenljivom
Dužinom ................................................................................... 153
4.7 Primjer 7: Mux4to1 pomoću Mux2to1 .................................... 155
4.8 Primjer 8: Shift registar sa promjenljivom dužinom ................ 157
4.9 Primjer 9: RAM memory .......................................................... 160
4.10 Primjer 10: State Machine ........................................................ 162
4.11 Napredni dizajn: Primjer realizacije Fleksibilnog FPGA
baziranog IIR filtra .................................................................. 166
5. Literatura .................................................................................. 182
Prilog 1: UP3 edukaciona ploča .........................................................184
R. Stojanović VHDL i FPGA
______________________________________________________________________
4
Ivanu i Matiji
R. Stojanović VHDL i FPGA
______________________________________________________________________
5
Uvod
Da li je moguće projektovati kolo sa više od 200 miliona tranzistora?
Ručno, ne automatski, da. Stoga se danas poluprovodnička tehnologija i
EDA (Electronic Design Automatisation) moraju posmatrati kao
jedinstvena cjelina. Nemoguće je zamisliti razvoj poluprovodnika bez
računara i vice versa. Pored složenosti, EDA uspješno rešava i probleme
heterogenosti, skraćuje vrijeme do izlaska na tržište (time to market),
smanjenjuje dimenzije i presudno doprinosi obaranju cijena. To su samo
djelimični razlozi zašto su programski jezici i softverski alati za
kompjutersko projektovanje elektronskih kola postali standardi u poljima
edukacije i profesionalne primjene.
Ovaj materijal je kreiran za potrebe grupe kurseva koji se drže na
Elektrotehničkom fakultetu, Univerziteta Crne, a može poslužiti i ostalim
ciljnim grupama koje se bave ovom problematikom. Podijeljen je na pet
tematskih cjelina, za koje smo smatrali da su neophodne projektantu
digitalnih sistema da bi postao familijaran sa procesom automatizovanog
projektovanja.
U prvom dijelu, vezanom za logičko projektovanje, dati su osnovni
pojmovi o VHDLu, programskom jeziku za opis digitalnog hardvera koji je
danas postao jedan od standarda. Čitalac se upoznaje sa osnovnim
principima jezika, strukturi koda, bibliotekama, tipovima podataka i sl.
Drugi dio se bavi fizičkim projektovanjem tj. implementacijom
digitalnih sistema na nivou FPGA čipova, koji predstavljaju vrstu PLD kola
čije su glavne osobine: veliki kapacitet, rekonfigurabilnost na svim nivoima
(interkonekcije, logički blokovi, I-O blokovi), velika brzina rada,
R. Stojanović VHDL i FPGA
______________________________________________________________________
6
prihvatljiva cijena, mala potrošnja itd. Kao takvi predstavljaju idelnu
platformu za optimalnu hardverizaciju složenih digitalnih sistema i vrlo
brzo su postali veoma popularni i široko rasprostranjeni.
Jedan od konkretnih softverskih paketa za razvoj i projektovanje
digitalnih sistema, kao i njihovu implementaciju u FPGA čipovima se
opisuje u trećem dijelu. Riječ je o Alterinoj Quartus II platformi koja sadrži
sve potrebne alate za opis, prevoñenje, optimizaciju, analizu, simulaciju,
verifikaciju kao i za konfiguraciju (programiranje) FPGA čipova.
Četvrto poglavlje daje veliki broj primjera za vježbanje VHDLa na
nivou programiranja kombinacionih i sekvencijalnih kola. U ovom
poglavlju se daje i primjer složenijeg dizajna namijenjen naprednijem
učenju.
Prilozi su dati u okviru petog poglavlja. Ukratko se opisuje UP3
edukacioni kit koji je korišten u procesu provjere funkcionalnosti
predloženih primjera i složenijih projekata.
Cilj autora je bio da studenti kroz praktičan rad ovladaju spektrom
tehnika koje se primenjuju u ovoj oblasti i da nakon odslušanog kursa (ili
skupa bliskih disciplina) budu u spremni da projektuju digitalne sisteme
niske i srednje složenosti primjenom jednog od savremenih razvojnih alata.
Stoga, metodologija izlaganja odstupa od uobičajenih i bazira se na
principu «učenja kroz primjere», koja se pokazala veoma «omiljenom» i
posebno efikasnom. U tekstu se daje veliki broj praktičnih ilustracija,
primjera koda, tehnika programiranja, simulacije, verifikacije, a na kraju i
praktične implementacije.
Ideja o ovom tekstu, kao i pojedinim kursevima, bi vjerovatno ostala
“mrtvo slovo na papiru” da nije bilo pomoći TEMPUS programa koji je
kroz svoj projekat CD_JEP_40017_2005 pružio odgovarajuću finansijsku i
infrastrukturalnu pomoć Fakultetu i autoru. I ovom prilikom im se iskreno
R. Stojanović VHDL i FPGA
______________________________________________________________________
7
zahvaljujem. Zahvaljujem se i svim generacijama studenata dodiplomskih i
poslijediplomskih studija koji su slušali neki od kurseva iz ove oblasti.
Veliki broj njih je svojim mišljenjima, sugestijama, diplomskim i
magistarskim radovima dao značajan doprinos u osmišljavanju i
poboljšanju ovog teksta. Naročito dugujem zahvlanost Zoranu Jakšiću,
dipl. ing. koji je nesebično pomagao u izradi ovog priručnika.
Biću naročito zahvalan onima koji mi ukažu na propuste ili daju
predloge za unapredjenje sledećeg izdanja.
Podgorica, avgust, 2008 Autor,
Radovan D. Stojanović
R. Stojanović VHDL i FPGA
______________________________________________________________________
8
1. VHDL
1.1 Uvod
VHDL predstavlja programski jezik za opis hardvera. Skraćenica je za
engleski naziv Very High Speed Integrated Circuit Hardware Description
Language. Opisuje ponašanje digitalnog elektronskog kola ili sistema, na
osnovu čega se isto/i može kasnije fizički implementirati. Osim VHDL-a, u
upotrebi su i Verilog, AHDL, ABEL, CUPL, ali se VHDL i Verilog najviše
koriste. Postoje i njihove verzije za opis analognih kola, VHDL-AMS i
Verilog-AMS.
Danas, VHDL predstavlja industrijski standard u automatizovanom
projektovanju. Počeo se razvijati krajem 70-ih godina, a poslije nekoliko
revizija 1987. dobija prvu standardizaciju kao IEEE 1076. 1993. godine
IEEE 1076 je revidovan u IEEE 1076-1993 standard (uobičajeno
VHDL93), koji je danas uglavnom u upotrebi. Poslednja revizija
napravljena je 2002. godine.
VHDL je namijenjen sintezi i simulaciji digitalnih kola. Treba
napomenuti da je simulacija uvijek moguća, dok postoje slučajevi kada to
nije slučaj sa sintezom. Značajna prednost VHDL-a je što je nezavistan od
izbora implementacione platforme. Sistem koji je u njemu razvijen može se
fizički implementirati u CPLD (Complex Programmable Logic Device),
FPGA (Field-Programmable Gate Array), kao i u ASIC (Application-
Specific Integrated Circuit) čipovima. Najčešće se upotrebljavaju CPLD i
FPGA varijante, gdje se hardversko konfigurisanje (programiranje) čipa
obavlja pomoću odgovarajućeg interfejsa, a isti (čip) se može ponovo pre-
konfigurisati.
R. Stojanović VHDL i FPGA
______________________________________________________________________
9
VHDL po elementima sintakse podseća na Pascal, C, C++ itd., ali se
od njih suštinski razlikuje. Osnovna razlika je u tome što je VHDL, u
suštini, paralelan jezik, a ne samo strukturalan kao što je to slučaj sa
Pascalom ili objektno orijentisan kao što je C++. Pod pojmom paralelan se
podrazumijeva da se elementi programa u suštini izvršavaju paralelno
(konkurentno, istovremeno), jer VHDL nastoji da opiše realni digitalni
sistem, gdje se izlaz mijenja istovremeno sa stanjima na ulazima. U
strukturalnim programskim jezicima program se izvršava „sekvencijalno“,
“naredba po naredba”. Ali, i ovdje postoje izuzeci, jedino izrazi pisani u
okviru procesa, funkcija ili procedura se izvršavaju sekvencijalno. U
realnim digitalnim sistemima imamo odgovarajuća kašnjenja različite
prirode i VHDL omogućava njihovo modelovanje. Dakle, pomoću VHDL-
a je moguće veoma vjerodostojno modelovati fizičko ponašanje digitalnog
hardvera.
Aktivnosti vezane za projektovanje digitalnog kola mogu se ilustrovati
dijagramom sa slike 1.1, gdje se uočavaju dvije faze, faza logičkog
projektovanja i faza fizičkog projektovanja. Naš akcenat će biti na fazi
logičkog projektovanja. Počinje se opisom projekta (kola) i to VHDLu na
nivou više abstrakcije. Logička sinteza predstavlja aktivnost tokom koje
alat za sintezu (kompajler) tumači VHDL kod i prevodi ga u prepoznatljive
logičke module. Moduli mogu biti definisani na različitim hijerarhijskim
nivoima. Na RTL (Register Transfer Level) nivou to može biti sabirač,
multiplekser i sl.. Razlaganje (partitioning) podrazumijeva prevoñenje
logičkih modula sa višeg nivoa u osnovne logičke ćelije koje se nalaze u
biblioteci ćelija (npr. sabirač se prevodi na nivo XOR). Zato je neophodno
da se opisu projekta pridruže podaci o željenim bibliotekama. Pre-lejaut
simulacija ima zadatak da proveri da li su ispunjeni projektni zahtjevi i
njome se proverava opis projekta u domenu ponašanja (tajming,
zauzimanje resursa, kašnjenja, funkcionalnost itd...).
R. Stojanović VHDL i FPGA
______________________________________________________________________
10
Faza fizičkog projektovanja počinje planiranjem površine. Pravi se
raspored većih logičkih modula. Pri tome se vodi računa o tome da se
logički elementi u jednom modulu taktuju istom frekvencijom. Razmatra se
meñusobni uticaj pojedinih modula i donose strateške odluke o organizaciji
čipa, veličini najdužih veza, kritičnom kašnjenju itd. Zato efekte koji mogu
da proisteknu iz ove faze treba uključiti u procenu što ranije, najbolje još
prije razlaganja. Razmeštaj (placement) pojedinih logičkih ćelija obavlja se
sa ciljem minimiziranja površine čipa ili dužine svih veza (ili najduže veze)
odnosno da se ne prekorače zadati dinamički parametri (kašnjenje). Pri
tome, uzimaju se u obzir samo informacije o broju meñusobnih veza
izmeñu ćelija, a ne i njihov stvarni položaj. Povezivanje (routing) je
aktivnost tokom koje se trasiraju veze izmeñu pojedinih ćelija. Tek po
okončanju ove aktivnosti poznate su tačne dužine veza. Tada se dobijaju
precizne informacije o kašnjenju duž veza. Ekstrakcijom parametara kola
iz lejauta dostupni su podaci o mnogim fizičkim parametrima jer se znaju
dimenzije i položaji svih djelova lejauta. Kao rezultat ove aktivnosti dobija
se lista opisa kola na tranzistorskom nivou (net lista). Net lista sadrži sve
parametre neophodne za detaljnu simulaciju ponašanja kola. Post lejaut
simulacija treba da verifikuje ispravnost cjelokupnog projekta. Ako
rezultati ove simulacije potvrñuju specifikacije projekta, projektovanje u
užem smislu je završeno. Tada mogu da se ekstrahuju podaci za izradu
maski, čime je projekat spreman za izradu prototipa, odnosno
programiranje, ako se radi o FPGA čipovima. Treba napomenuti da je u
slučaju FPGA dizajna faza fizičkog projektovanja dosta automatizovana i
da projektanti obraćaju malu pažnju na njene efekte prije svega zbog
velikog izbora FPGA čipova izdašnih i po kapacitetu i po brzini, a malih
varijacija u cijene koštanja.
R. Stojanović VHDL i FPGA
______________________________________________________________________
11
Slika 1.1: Ilustracija toka projektovanja.
1.2 Nivoi modelovanja i apstrakcije
Glavni cilj u automatizovanom projektovanju elektronskih sistema je
postići što viši nivo abstrakcije u opisu problema; što je i bio slučaj sa
ostalim programskim jezicima. Npr. množenje dva broja u C-u možemo
izraziti jednom programskom linijom (c=a*b), ne vodeći računa da se ona
izvršava na specijalnom, ni malo jednostavnom, hardveru i zahtijeva
nekoliko taktova. Takav je slučaj i sa VHDL-om, što je opis udaljeniji od
konkretne hardverske implementacije to je njegov nivo abstrakcije veći.
Medjutim, način izražavanja abstrakcije može biti različit i kod VHDLa se
poistovećuje sa nivoima modelovanja, koji se najčešće dijele u tri grupe:
R. Stojanović VHDL i FPGA
______________________________________________________________________
12
1) Funkcionalni ili nivo ponašanja (behavior).
2) Strukturalni (structural) i
3) Fizički ili geometrijski (physical).
Prvi nivo opisuje ponašanje sistema i samim tim predstavlja najviši
nivo abstrakcije, slika 1.2. Opis ponašanja specificira relaciju izmedju
ulaznih i izlaznih signala. To može biti jednostavni logički ili aritmetički
izraz ili složenije forme kao što su RTL i algoritamski opis. Drugi nivo
modeluje strukturu sistema u smislu povezivanja pojedinih cjelina. Asocira
na šemu medjusobno povezanih logičkih kapija. Najniži nivo abstrakcije i
najkonkretniji je fizički nivo gde se programer može spustiti do fizickog
nivoa – tranzistora, diode itd. Za nas će biti interesantna samo prva dva
nivoa, a konkretan način implementacije hardvera će biti prepušten
softverskim alatima koji će se koristiti.
Slika 1.2: Nivoi modelovanja u VHDLu.
R. Stojanović VHDL i FPGA
______________________________________________________________________
13
1.3 Struktura VHDL programa
Generalno gledano VHDL program se sastoji iz tri dijela, slika 1.3.
1) deklaracije biblioteka i paketa,
2) deklaracije entiteta (entity) i
3) opisa arhitekture (architecture)
Najprostija varijanta programa može sadržati deklaraciju entiteta i
opis arhitekture.
Slika 1.3: Osnovni strukturalni elementi VHDL koda.
1.4 Entitet
Entity opisuje interfejs modula koji je opisan VHDL kodom. Ako
zamislimo da VHDL program opisuje ponašanje jedne „crne kutije“, onda
dio koji opisuje entitet opisuje spoljašnje tačke (portove) preko kojih ta
„crna kutija“ komunicira sa spoljašnim svijetom. To je u stvari lista koja
sadrži specifikaciju ulaznih i izlaznih pinova kola. Sintaksa eniteta je:
R. Stojanović VHDL i FPGA
______________________________________________________________________
14
ENTITY entity_name IS
PORT
(
port_name : signal_mode signal_type;
port_name : signal_mode signal_type;
...);
END entity_name;
Signal_mode može biti IN , OUT, INOUT ili BUFFER. IN i OUT su
unidirekcioni pinovi, dok je INOUT bidirekcioni pin. BUFFER se koristi kada
postoji potreba za internom upotrebom izlaza.
Tip signala može biti BIT , STD_LOGIC, INTEGER itd, dok ime
entiteta može biti bilo koje ime osim rezervisanih tj. ključnih riječi.
Posmatrajmo prosto NI (NAND) kolo sa dva ulaza (a i b) i jednim
izlazmom (c), slika 1.4. Definisanje entiteta za dato kolo izgledala:
Slika 1.4: Prosto NI kolo.
ENTITY nand_gate IS
PORT
(
a, b : IN BIT;
c : OUT BIT
);
END nand_gate;
Prethodno kolo je definisano tako da ima tri pina - dva ulaza i jedan
izlaz. Svi signali su tipa BIT. Ime entiteta je nand_gate .
R. Stojanović VHDL i FPGA
______________________________________________________________________
15
1.5 Arhitektura
Arhitekturom se opisuje način na koji kolo treba da funkcioiše. Njena
sitaksa je:
ARCHITECTURE architecture_name OF entity_name IS
[declarations]
BEGIN
(code)
END architecture_name;
Kako je prikazano, arhitektura se sastoji iz dva dijela: deklarativni dio
koji je opcion, gdje se signali, konstante i sl. deklarišu i dio za kod (počevši
od ključne riječi begin). Kao i u slučaju entiteta i arhitektura može imati
bilo koje ime, osim rezervisanih riječi. Arhitektura za gornje NI kola bi
izgledala.
ARCHITECTURE myarch OF nand_gate IS
BEGIN
c <= a NAND b;
END myarch;
Kolo vrši NI operaciju nad ulaznim signalima a i b i dobijenu
vrijednost prosljeñuje na pin c. Ime ove arhitekture je myarch, a mora se
naglasiti da se odnosi na entitet nand_gate. Arhitektura ne posjeduje
deklarativni dio, dok dio za kod sadrži samo prostu dodjelu rezultata.
Arhitekturnih djelova može biti više. Za sada ćemo podrazumijevati samo
jedan.
R. Stojanović VHDL i FPGA
______________________________________________________________________
16
1.6 Entitet + Ahitektura
Jednostavni VHDL program predstavlja skup Entity + Architecture.
Za slučaju NI kola program „nand_gate.vhd” bi izgledalo:
ENTITY nand_gate IS
PORT
(
a, b : IN BIT;
c : OUT BIT
);
END nand_gate;
ARCHITECTURE myarch OF nand_gate IS
BEGIN
c <= a NAND b;
END myarch;
Treba napomenuti da je ime VHDL programa strogo vezano za ime
entiteta i moraju se poklapati. Ekstenzija za VHDL program je obično .vhd.
1.7 Vježba 1 - Unos, kompajliranje i simulacija VHDL
programa
Gornji primjer pokazuje kako se spajanjem koda ENTITY i
ARCHITECTURE može doći do prostog VHDL programa. Da bi se
provjerila ispravnost bilo kojeg VHDL programa mora se isti unijeti u neki
od tekstualnih editora, provjeriti ispravnost njegove sintakse, izvršiti
kompajliranje i na kraju simulacija. Navedene operacije se obavljaju u
nekom od VHDL razvojnih alata (compiler + simulator) od kojih su
najpoznatiji Alterin Quartus II, Symphony EDA, Mentor Graphics
ModelSim, Xilinx VHDL ISE Tool itd..
R. Stojanović VHDL i FPGA
______________________________________________________________________
17
U sledećem primjeru upoznaćemo se sa unosom VHDL koda,
provjerom njegove ispravnosti i izvršiti njegovo kompajliranje i simulaciju.
Poslužićemo se primjerom polu-sabirača (half_adder) sa slike 1.5, a kao
kompajler biće upotrijebljen Alterin Quartus II..
Slika 1.5: Polu-sabirač, (lijevo) simbol na nivou “crne kutije”, (desno) šematski
prikaz u obliku logi čkih ćelija
KORAK 1: Na osnovu dosadašnjeg znanja o Entity i Architecture
VHDL program polu-sabirača bi izgledao.
ENTITY half_adder IS
PORT( x, y, enable: IN BIT;
carry, result: OUT BIT);
END half_adder;
ARCHITECTURE half_adder_b OF
half_adder IS
BEGIN
carry <= enable AND (x AND y);
result <= enable AND (x XOR y);
END half_adder_b;
Ali, problem još uvijek nije riješen, jer ne znamo dali je naš program
ispravan u smislu sintakse, a da ne govorimo u smislu funkcionalnosti. Da
R. Stojanović VHDL i FPGA
______________________________________________________________________
18
bismo riješili datu dilemu moramo imati odgovarajući kompajler i
simulator za VHDL kod.
KORAK 2: Upoznajmo se sa instaliranjem, pokretanjem VHDL
kompajlera i simulatora u sastavu Quartus II programskog alata u okviru
kojeg ćemo unijeti kod half_adder.vhd i provjeriti njegovu funkcionalnost.
• U tom cilju predjite na Poglavlje 3, pročitajte i odvježbajte
operacije date u izložene u paragrafima 3.1 do 3.7.
1.8 Vježba 2 – Unos, kompajliranje i simulacija šematskog
kola
Koristeći VHDL kod i simbol polusabirača iz Primjera 1.7 može se
realizovati kolo punog sabirača (full_adder) prema šemi na slici 1.6.
Potrebno je još jedno XOR kolo. U tom cilju upoznajmo se kako se
digitalno kolo može šematski unijeti, kompajlirati i simulirati.
Slika 1. 6: Šematski prikaz punog sabirača izraženo preko polu-sabirača i jednog
XOR kola.
• Predjite na Poglavlje 3, pročitajte i odvježbajte operacije u
okviru paragrafa 3.8.
R. Stojanović VHDL i FPGA
______________________________________________________________________
19
1.9 Deklaracija biblioteke
Osnovna struktura biblioteke prikazana je na slici 1.7. Kod je
organizovan u obliku funkcija, procedura, komponenti i sl, koji su
smješteni u package, i dalje organizovani u biblioteke.
FUNKCIJE
PROCEDURE
KOMPONENTE
KONSTANTE
TIPOVI
PACKAGE
BIBLIOTEKA
Slika 1.7: Osnovna struktura biblioteke.
Da bi se deklarisala biblioteka, dakle da bi postala vidljiva ostatku
koda, potrebno je unijeti dvije linije koda - prva sadrži ime biblioteke i
druga počinje ključnom riječju use:
LIBRARY library_name;
USE library_name.package_name.package_parts;
Obično su bar tri package-a, iz tri različite biblioteke potrebna za
bilo koji dizajn:
ieee.std_logic_1164 (ieee biblioteka)
standard (std biblioteka)
work (work biblioteka)
Odgovarajuće deklaracije bi izgledale na sljedeći način:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY std;
R. Stojanović VHDL i FPGA
______________________________________________________________________
20
USE std.standard.all;
LIBRARY work;
USE work.all;
Biblioteke std i work su vidljive po default-u, zato ih nema potrebe
posebno deklarisati, samo se biblioteka ieee mora eksplicitno uključiti. Ova
biblioteka sadrži nekoliko package-a:
- std_logic_1164 - specificira std_logic (8 nivoa) i ustd_logic (9
nivoa) multi-valued logički sistem.
- std_logic_arith - specificira logičke i komparatorske operacije
nad podacima tipa signed i unsigned. Sadrži takoñe nekoliko
funkcija za konverziju tipova podataka: conv_integer(p).
- conv_unsigned(p,b),conv_signed(p,b), conv_std_logic_vector(p,b).
- std_logic_signed - sadrži funkcije koje omogućavaju operacije
nad std_logic_vector podacima tipa signed.
- std_logic_unsigned - sadrži funkcije koje omogućavaju operacije
nad std_logic_vector podacima tipa unsigned.
1.10 Deklaracije paketa - Package
PACKAGE predstavlja skup deklaracija koje se mogu koristiti u
nekom narednom projektu. PACKAGE posjeduje dio za deklaraciju i
opciono može sadržati tijelo tj. BODY. Deklaracija i tijelo se smeštaju u
posebnom fajlu koji mora imati isti naziv kao i sam PACKAGE. U okviru
jednog ovakvog skupa mogu se nalaziti definicije za različite fukcije,
procedure, komponente i sl..
• Sintaksa (PACKAGE, deklaracija):
PACKAGE package-name IS
type-declarations;
R. Stojanović VHDL i FPGA
______________________________________________________________________
21
subtype-declarations;
signal-declarations;
variable-declarations;
constant-declarations;
component-declarations;
function-declarations;
procedure-declarations;
END package-name;
• Sintaksa (PACKAGE, tijelo (body), deklaracija):
PACKAGE BODY package-name IS
function-definitions; -- za funkcije definisane u
PACKAGE deklaraciji
procedure-definitions; -- za procedure definisane
u PACKAGE deklaraciji
END package-name;
• Primjer:
Library ieee;
Use ieee.std_logic_1164.all;
Package example_package is
Type byte is std_logic_vector (7 downto 0);
Fuction and8 (a, b:in byte) return byte;
End example_package;
Package body example_package is
Fuction and8 (a, b:in byte) return byte;
Return a AND b;
End and8;
End example_package;
R. Stojanović VHDL i FPGA
______________________________________________________________________
22
1.10.1 Upotreba PACKAGEa
Da bismo pozvali PACKAGE na početku programa ili prije njegovog
poziva potrebno je uključiti LIBRARY i USE komandu za dati PACKAGE.
Najčešće put biblioteke u kojem je smešten PACKAGE se označava kao
WORK.
• Sintaksa:
LIBRARY WORK;
USE WORK.package-name.ALL;
• Primjer:
LIBRARY WORK;
USE WORK.example_package.ALL;
Entity test_package is
Port
(
x,y : in byte;
z :out byte
);
End test_package;
Architecture test_package_arch of test_package is
Begin
Z=and8(w,y);
End test_package_arch;
1.11 Vježba 3 – Upotreba biblioteka i paketa
Ovaj primjer nas upoznaje sa osnovnom strukturom VHDL koda
(Library – Package, Entity, Architecture). Ujedno, pokazuje kako se pravi
PACKAGE i kako se isti „usadjuje“ u strukturu složenijeg kola.
R. Stojanović VHDL i FPGA
______________________________________________________________________
23
a) Projektovati VHDL kod za multipleksor 2u1 (mux2to1.vhd) u
PACKAGE obliku, gdje su ulazno-izlazni podaci tipa
STD_LOGIC, slika 1.8(lijevo). Priložiti kod i simulacione
dijagrame.
b) Projektovati multipleksor 4u1 (mux4to1.vhd), slika 1.8(desno),
koristeći razvijeni PACKAGE mux2to1.vhd. Priložiti kod i
simulacione dijagrame.
Slika 1.8: Multipleksor 4u1 (mux4to1) dobijen preko 2u1 (mux2to1).
Problem rešavamo u dva koraka. U prvom, projektujemo komponentu
mux2to1 kao PACKAGE mux2to1.vhd, i to kao svaki drugi .vhd program,
slika 1.9, uključujući kompajliranje i simulaciju, slika 1.10. Obratiti pažnju
kako se u drugom dijelu programa definiše komponenta mux2to1 koje će se
kasnije upotrijebiti. Komponenta se mora dodatno definisati jer PACKAGE
može sadržati više njih od kojih se svaka odnosi na odgovarajući entitet i
arhitekturu. Nakon kompajliranja PACKAGEa prelazimo na drugi korak u
kojem projektujemo mux4to1 na osnovu mux2to1. Njegova arhitektura je
strukturalnog tipa i daje način “usadjivanja komponenti”. Tri mux2to1
komponente (u1, u2 i u3) su ugradjene sa tačnim mapiranjem
ulazno/izlaznih signala. Npr. u1: mux2to1 PORT MAP(w0, w1,
R. Stojanović VHDL i FPGA
______________________________________________________________________
24
sel0, I1) označava da komponeta u1 unutar arhitekture mux4to1
predstavlja PORT tipa komponente mux2to1 čija su četiri pina vezana na
signale w0, w1, sel0 (ulazni) i I1 (izlazni). Prema slici 1.8 može se
vidjeti da I1 predstavlja interni signal, koji se u samoj arhitekturi mux4to1
mora definisati u formi SIGNAL. Na kraju je izvršena simulacija mux4to1
sklopa, što se može vidjeti na slici 1.11.
Slika 1.9: PACKAGE kod i kod u kojem se poziva dati PACKAGE.
Slika 1.10: Simulacija mux2to1 PACKAGEa.
R. Stojanović VHDL i FPGA
______________________________________________________________________
25
Slika 1.11: Simulacija mux4to1 kola.
NAPOMENA: Pri kompajliranju mux4to1.vhd kao projekta u
Qurtusu II, nije dovoljno ukklju čiti package sa USE
work.mux2to1_package.all; već treba mux2to1.vhd dodati
projektu sa Project-> Add/Remove files in Project…
1.12 Komentari
Komentar od teksta kojim je predstavljen VHDL kod odvaja se sa
dvije ctrice „--„
--Ovo je komentar
--Jos jedan komentar
1.13 Tipovi podataka
VHDL sadrži veliki broj predefinisanih tipova podataka, specificiranih
standardom IEEE 1164. Definicija konkretnih tipova podataka nalazi se,
kako je to već ranije rečeno, u bibliotekama std i ieee .
Package std biblioteke standard definiše sledeće tipove podataka:
BIT, BOOLEAN, INTEGER i REAL.
Package std_logic_1164 biblioteke ieee definiše tipove podataka
std_logic, std_ulogic, std_logic_vector kao i
std_ulogic_vector .
R. Stojanović VHDL i FPGA
______________________________________________________________________
26
Package std_arith biblioteke ieee definiše tipove podataka signed i
unsigned .
1.13.1 BIT i BIT_VECTOR
Ova dva tipa su predefinisani tipovi u VHDLu. Mogu imati vrijednost
„0“ ili „1“. BIT_VECTOR je niz podataka tipa BIT . Vektor koji sadrži sve
bitove iste vrijedniosti može biti napravljen korišćenjem ključne riječi
OTHERS.
• Primjeri:
SIGNAL x: BIT;
-- x je deklarisan kao jednobitni signal
SIGNAL y: BIT_VECTOR (3 DOWNTO 0);
-- y signal dužine 4 bita, zadnji lijevi MSB
SIGNAL z: BIT_VECTOR (0 TO 7);
-- z signal dužine 8 bita, zadnji desni MSB
1.13.2 STD_LOGIC i STD_LOGIC_VECTOR
Ovi tipovi podataka pružaju mogućnost definisanja više vrijednosti
podataka u odnosu na tip BIT. Mogu imati sledeće vrijednosti:
„0” – normalna „0”
„1” – normalna „1”
„Z” – stanje visoke impedanse
„X” – neodredjeno stanje
STD_LOGIC i STD_LOGIC_VECTOR tipovi nijesu predefinisani i
ako želimo da ih koristimo sledeće dvije „library” komande moraju biti
uključene:
library ieee;
R. Stojanović VHDL i FPGA
______________________________________________________________________
27
use ieee.std_logic_1164.all;
Ukoliko se std_logic_vector koriste kao binarni brojevi u
aritmetičko-logičim operacijama tada je potrebno uključiti jedan od
package-a, std_logic_signed ili std_logic_unsigned koji se
nalaze u biblioteci ieee . To se može postići jednom od dvije naredne
komande:
use ieee.std_logic_signed.all;
--za znakovne aritmeti•ke operacije;
use ieee.std_logic_unsigned.all;
--za bez-znakovne aritmeti•ke operacije;
• Primjeri:
library ieee;
use ieee.std_logic_1164.all;
--.....................................
--.....................................
SIGNAL x: std_logic;
-- x je deklarisan kao jednobitni signal
SIGNAL y: std_logic_vector (3 DOWNTO 0);
-- y je deklarisan kao signal dužine 4 bita •iji je
-- zadnji lijevi bit MSB
SIGNAL z: std_logic_vector (0 TO 7);
-- z je deklarisan kao signal dužine 8 bita •iji je
-- zadnji desni bit MSB
--.....................................
--.....................................
x<=’1’;
y<=”00Z1”;
z<=(others=>’0’);
R. Stojanović VHDL i FPGA
______________________________________________________________________
28
Vrlo sličan tipu podataka std_logic_vector su tipovi podataka
signed i unsigned .
• Primjer:
SIGNAL x: signed(3 DOWNTO 0);
SIGNAL y: unsigned (3 DOWNTO 0);
Std_logic_vector po defaultu compiler tumači kao signed
binarni broj zapisan u notaciji sa dvojnim komplementom pa praktično da
nema razlike izmeñu njega i signed tipa podataka. Za razliku od njih tip
podataka unsigned kako mu samo ime naslućuje predstavlaj binarni vector
čija je vrednost isključivo pozitivna. Lako se zaključuje da je maximalan
vrednost unsigned binarnog vektora duplo veća od signed vektora
iste dužine.
Vrlo sličan std_logic tipu podataka je i std_ulogic .
Generalno gledano jedina razlika izmedju ova dva tipa podatka je u tome
što std_ulogic standard uvodi jos jedno stanje („U“-unresolved).
Definicija, dodeljivanje vrednosti ovakvom tipu podataka i slično, potpuno
je isto kao i sa std_logic tipom podataka. Rad sa ovim tipom podataka,
takoñe zahteva uključenje već pomenutih biblioteka.
1.13.3 BOLEAN
Bolean je predefinisani tip podataka koji može imati dvije vrijednosti:
TRUE i FALSE
• Primjer:
signal x: bolean;
R. Stojanović VHDL i FPGA
______________________________________________________________________
29
1.13.4 INTEGER
Integer je predefinisani tip slično “integer-u” u drugim
programskim jezicima, npr. u „C“-u. Uobičajeno koristi 32 bita za
aritmetiku sa znakom. U slučaju kada želimo skratiti bitovnu dužinu
upotrebljava se ključna riječ RANGE.
• Primjer:
signal x : integer;
signal z : integer range -256 to 256;
Tip podataka NATURAL je ustvari INTEGER tip podataka za vrednosti
od 0 do 2,147,483,647.
1.13.5 ENYMERATION
Nenumerisani tip omogućava korisniku da definiše vrijednosti koje će
dati tip podataka sadržati.
• Sintaksa:
TYPE identifier IS (value1, value2,…);
• Primjer:
Type state_type is (S1, S2, S3)
Signal state: state_type;
--.................................
State<=S1;
1.13.6 ARRAY
Predstavlja nizovni tip podataka, grupiše podatke odredjenog tipa u
jednodimenzioni ili višedimenzionalni niz (vektor).
R. Stojanović VHDL i FPGA
______________________________________________________________________
30
• Sintaksa:
TYPE identifier IS ARRAY (range) of TYPE
• Primjer:
Type byte is array (7 downto 0) of bit;
Type memory is array (1 to 128) of byte;
Signal memory: memory_type;
--..........................
Memory(4)=“0001101“;
• Dvodimenzioni niz
Kao i u drugim programskim jezicima i u VHDL-u je moguće
definisati dvodimenzioni niz. Najpoznatiji i najčešće korišćeni slučaj u
dizajnu kada je potrebno definisati neki dvodimenzioni niz jeste kada je
potrebno dizajnirati neki od tipova memorije (RAM, ROM). U primerima
koji slede dati su neki od slučaja korišćenaj dvodimenzionih nizova.
• Primjer:
TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7
DOWNTO 0);
Singal a:matrix;
................................................... .....
A(1)=”00110111”;
Matrica definisana na ovaj način predstavlja ustvari vector skupa
podataka tipa std_logic_vector . Zato je signalu ovako definisanog
tipa moguće pristupati (dodeljivati vrednost) kao na način prikazan u
prethodnom kodu.
Ukoliko se 2D niz definiše kao na način prikazan u narednom primeru
pristupanje podacima je malo drukčije.
R. Stojanović VHDL i FPGA
______________________________________________________________________
31
TYPE array3 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF
STD_LOGIC;
Singal a: array3;
................................................
A(1)(4)=’0’;
Primećuje se da se na ovaj način svakom bitu iz matrice mora
odvojeno pristupati.
1.13.7 SUBTYPE
SUBTYPE (Podtip) je verzija odgovarajućeg tipa podataka, ali
definisana za odredjenu oblastvaženja. Na taj način se odredjeni tip, npr
integer, može predefinisati da važi u oblasti koja nije predefinisana
• Sintaksa:
SUBTYPE identifier IS type RANGE range;
• Primjer:
SUBTYPE integer4 IS integer RANGE -8 to 7;
--...........................................
SUBTYPE cell IS std_logic_vector(4 downto 0);
TYPE Memory IS ARRAY(1 to 15) of cell;
Neki standardni podtipovi su:
NATURAL, integer tipa od 0 – INTEGER MAX
POSITIVE, integer tipa od 1 - INTEGER MAX
R. Stojanović VHDL i FPGA
______________________________________________________________________
32
1.13.8 Konverzija podataka
1.13.8.1 CONV_INTEGER()
Ova funkcija pretvara STD_LOGIC_VECTOR SIGNED i
UNSIGNED tip podataka u INTEGER. Njena upoterba zahtijava uključenje
sledeće biblioteke.
LIBRARY IEEE;
Use IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
• Sintaksa:
CONV_INTEGER(std_logic_vector);
• Primjer:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
..............................................
Signal forbitstd : std_logic_vector(3 downto 0);
Signal n : integer;
..............................................
N=conv_integer(forbitstd)
R. Stojanović VHDL i FPGA
______________________________________________________________________
33
1.13.8.2 CONV_STD_LOGIC_VECTOR, CONV_SIGNED,
CONV_UNSIGNED
Ove funkcije pretvaraju tipove CONV_STD_LOGIC_VECTOR,
CONV_SIGNED, CONV_UNSIGNED, INTEGER u neki drugi tip. Da bi
se koristile i ove funkcije takoñe je potrebno uključiti biblioteke koje se
koriste i za funkciju conv_integer.
• Sintaksa
CONV_STD_LOGIC_VECTOR(N, word_length);
CONV_SIGNED(N, word_length);
CONV_UNSIGNED(N, word_length);
• Primjer:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
..............................................
Signal x : std_logic_vector(3 downto 0);
Sigal z : signed(5 downto 0);
Sigal y : unsigned(5 downto 0);
Signal n : integer;
..............................................
x=CONV_STD_LOGIC_VECTOR(z, 4);
z=CONV_SIGNED(y, 6);
y=CONV_UNSIGNED(N, 6);
Prikaz tipova podataka koji se koriste u VHDL i njihov opseg
vrijednosti je dat u Tabeli 1.1. Treba napomenuti da VHDL podržava još
R. Stojanović VHDL i FPGA
______________________________________________________________________
34
neke tipove podataka (npr real koji predstavlja cifre prikazane sa pokretnim
zarezom), ali ovakav kod nije sintezibilan.
Tabela 1.1: Prikaz tipova podataka koji se mogu koristiti u VHDL-u i njihovih
mogućih vrednosti
Tip podataka Moguće vrijednosti
BIT, BIT_VECTOR ‘0’, ‘1’
STD_LOGIC,
STD_LOGIC_VECTOR
‘X’, ‘0’, ‘1’, ‘Z’
STD_ULOGIC,
STD_ULOGIC_VECTOR
‘X’, ‘0’, ‘1’, ‘Z’
BOOLEAN True ili False.
NATURAL od 0 do 2, 147, 483, 647.
INTEGER od -2,147,483,647 do
+2,147,483,647.
SIGNED od -2,147,483,647 do
+2,147,483,647.
UNSIGNED od 0 do 2,147,483,647.
User-defined integer type Podset od INTEGER.
User-defined enumerated type Enumerisan od strane korisnika.
SUBTYPE „Single-type kolekcija“ od bilo
kojeg tipa.
ARRAY Niz bilo kojeg tipa.
R. Stojanović VHDL i FPGA
______________________________________________________________________
35
1.14 Operatori
Predefinisani operatori u VHDL su Logički (Logical), Aritmeti čki
(Arithmetic), Relacioni (Relational) i Pomjerački (Shift). U Tabeli 1.2 je
data njihova sintaksa i funkcionalni karakter.
Tabela 1.2 Neki od najčešće korišćenih operatora.
Logički Operator Operacija Primjer
AND AND Z<=X AND Y
OR OR Z<=X OR Y
NOT NOT Z<=X NOT Y
NAND NAND Z<=X NAND Y
NOR NOR Z<=X NOR Y
XOR XOR Z<=X XOR Y
NXOR NXOR Z<=X NXOR Y
Aritmeti čki
Operator Operacija Primjer
+ Sabiranje Z<=X + Y
- Oduzimanje Z<=X - Y
* Množenje Z<=X * Y
/ Deljenje Z<=X / Y
R. Stojanović VHDL i FPGA
______________________________________________________________________
36
** Stepenovanje Z<=X **2
MOD MODUL Z<=X MOD Y
REM Osttak Z<=X REM Y
ABS Apsolutna Vrednost Z<= ABS(X)
Opearatori
poreñenja Operacija Primjer
= Јеdnako If (a=b) then
/= Različito If (a /=) then
> Veće If (a >) then
< Manje If (a <) then
>= Veće ili jednako If (a >=) then
=< Manje ili jednako If (a =<) then
Operatori
pomeranja Operacija Primjer
SLL Logičko pomeranje
ulevo X<=Y SLL 2
SRL Logičko pomeranje
udesno X<=Y SRL 3
R. Stojanović VHDL i FPGA
______________________________________________________________________
37
SLA Aritmetičko pomeranje
ulevo X<=Y SLA 2
SRA Aritmetičko pomeranje
udesno X<=Y SRA 4
ROL Rotiranje ulevo X<=Y ROL 3
ROR Rotiranje udesno X<=Y ROR 1
• Primjer:
U narednom primjeru dat je prikaz jednostavnog kola koje obavlja
funkciju sabiranja. Kao ulazni i izlazni tip podataka izabran je tip podataka
signed dužine 4 bita. Primenjuje se operator sabiranja „+“.
----- Example in/out=SIGNED ----------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
------------------------------------------
ENTITY adder1 IS
PORT ( a, b : IN SIGNED (3 DOWNTO 0);
sum : OUT SIGNED (3 DOWNTO 0));
END adder1;
------------------------------------------
ARCHITECTURE adder1 OF adder1 IS
BEGIN
sum <= a + b;
END adder1;
R. Stojanović VHDL i FPGA
______________________________________________________________________
38
Slika 1.12: Prikaz rezultata simulacije za prethodni primjer.
1.15 Atributi
VHDL podržava nekoliko tipova atributa. Vezani su za signale,
promjenljive i podatke tipa „type“. Označavaju se sa (‘) iza čega slijedi
naziv atributa. Sledeća tabela pokazuje nekoliko attributa vezanih za
signale.
Tabela 1.3: Atributi vezani za siginale.
Atribut Funkcija
signal_name’event Vraća Boolean vrijednost True ako se dogadjaj
vezan za signal desi, suprotno daje False.
signal_name’active Vraća Boolean vrijednost True ako se
promjena signala desi, suprotno daje False.
signal_name’transaction Vraća signal tipa “bit” svakog trenutka kada se
desi promjena (0 na 1 ili 1 na 0).
signal_name’last_event Vraća vremenski interval od trenutka zadnjeg
dešavanja signala.
signal_name’last_active Vraća vremenski interval od trenutka zadnje
promjene signala.
signal_name’last_value Vraća vrijednost signala prije zadnjeg
dogadjaja.
R. Stojanović VHDL i FPGA
______________________________________________________________________
39
signal_name’delayed(T) Signal uzima iste vrijednosti kao signal_name,
ali je pomjeren za vrijeme T. Uobičajeno T=0.
signal_name’stable(T) Vraća Boolean vrijednost True ako se
promjena signala desila i ako je pri tom ostao
stabilan vrijeme T, suprotno daje False.
Uobičajeno T=0.
signal_name’quiet(T) Vraća Boolean vrijednost True ako u intervalu
T nije bilo promjene, suprotno daje False.
Uobičajeno T=0.
• Primjer:
if (CLOCK’event and CLOCK=’1’) then …
-- Ovaj izraz proverava dali je naisla uzlazna ivic a kloka
Nekoliko atributa podržava skalarne ili potake tipa „type“, Tabela 1.4.
Tabela 1.4: Atributi vezani za „type“.
Atribut Vrijednost
scalar_type’left Vraća prvi lijevi.
scalar_type’right Vraća prvi desni.
scalar_type’low Vraća najmanju vrijednost.
scalar_type’high Vraća najveću vrijednost.
scalar_type’value(s) Vraća vrijednost koja korenspondira indeksu s.
• Primjer:
type my_index is range 3 to 15;
vra ća:
my_index’left 3
my_index’value(5) “5”
my_levels’left low
R. Stojanović VHDL i FPGA
______________________________________________________________________
40
my_levels’low low
my_levels’high highZ
my_levels’value(dontcare) “dontcare”
Slično je i sa vektroskim tipovima podataka, Tabela 1.5.
Tabela 1.5: Atributi vezani za vektorske tipove podataka.
Atribut Vraća
MATRIX‘ left(N)
MATRIX’ right (N)
MATRIX’ high(N)
MATRIX’ low(N)
MATRIX’ length(N)
MATRIX’ range(N)
MATRIX’ reverse_range(N)
Prvi lijevi od indeksa N
Prvi desni od indeksa N
Najveću od indeksa N
Najmanji od indeksa N
Broj elemenata od indeksa N
Poredak “up to”
Poredak “downto”
• Primjer:
type MYARR1 is array (-2 to 4) of integer;
vra ća:
MYARR1’left -2
MYARR1’right 4
MYARR1’high 4
MYARR1’reverse_range 4 downto to -2
1.16 GENERIC
Promjenljiva koja je deklarisana korišćenjem ključne riječi GENERIC
predstavlja konstantu koja se može samo čitati. Ova riječ se upotrebljava
najčešće kada je potrebno projektovati dizajn čiji se neki od parametara
mogu mijenjati (npr. dubina i širina memorije, dužina registra i sl.). Za
R. Stojanović VHDL i FPGA
______________________________________________________________________
41
dizajnera je mnogo jednostavnije da napravi komponentu koja se u daljem
radu može koristiti nezavisno od parametara kakvi su već navedeni.
• Primjer:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity signed_adder is
generic (DATA_WIDTH : natural := 8);
port
(
a : in signed ((DATA_WIDTH-1) downto 0);
b : in signed ((DATA_WIDTH-1) downto 0);
result : out signed ((DATA_WIDTH-1) downto 0)
);
end entity;
Vrijednost generičke komponente takoñe može biti definisana pri
deklaraciji ili usadjivanju komponente.
• Primjer:
Component signed_adder
generic (DATA_WIDTH : natural := 8);
port
(
a : in signed ((DATA_WIDTH-1) downto 0);
b : in signed ((DATA_WIDTH-1) downto 0);
result : out signed ((DATA_WIDTH-1) downto 0)
);
End component;
R. Stojanović VHDL i FPGA
______________________________________________________________________
42
Sada, ukoliko bi se ova komponenta koristila u nekom novom dizajnu
parametrizacija se može obaviti vrlo jednostavno kako to pokazuje naredni
primer.
architecture slozeniji_dizajn..............
...........................................
Begin
SA: signed_adder generic map(data_WIDTH=>8) port
map(a=>x, b=>y, result=> z);
1.17 Paralelno kodiranje (Concurrent Code)
VHDL kod može biti paralelan (concurrent) ili sekvencijalan. Ova
podjela je vrlo bitna jer, omogućava bolje razumijevanje kakve se komande
koriste gdje, kao i posledice primjene jednog odnosno drugog načina.
Komande koje se koriste za pralelno kodiranje su WHEN i GENERATE.
Pored njih koriste se i osnovni operatori (AND, OR, *..) i na kraju
kao poseban vid pridruživanja, nazvan BLOK može se koristiti za ovakav
način projektovanja.
1.17.1 WHEN
Kao što je već pomenuto u uvodu ovog poglavlja, WHEN je jedna od
fundamentalnih paralelnih komandi (zajedno sa operatorima i GENERATE).
Javlja se u dva oblika: WHEN / ELSE (prosto WHEN) i WITH / SELECT /
WHEN (selektovano WHEN). Sintaksa je prikazana u sledećem tekstu.
• WHEN / ELSE:
assignment WHEN condition ELSE
assignment WHEN condition ELSE
...;
• WITH / SELECT / WHEN:
R. Stojanović VHDL i FPGA
______________________________________________________________________
43
WITH identifier SELECT
assignment WHEN value,
Kad god je sintagma WITH / SELECT / WHEN korišćena, sve
moguće kombinacije moraju biti predviñene kodom, pa se ključna riječ
OTHERS vrlo često koristi. Još jedna vrlo bitna ključna riječ kod ove
naredbe je UNAFFECTED, kada nije potrebno izvršiti nijednu akciju.
• Primjer:
------ With WHEN/ELSE -------------------------
outp <= "000" WHEN (inp='0' OR reset='1') ELSE
"001" WHEN ctl='1' ELSE
"010";
---- With WITH/SELECT/WHEN --------------------
WITH control SELECT
output <= "000" WHEN reset,
"111" WHEN set,
UNAFFECTED WHEN OTHERS;
• Primjer:
Potreno je napisati VHDL code koji će obavljati funkciju multipleksera
4u1. 4 ulaza treba da budu tipa std_logic , dok selekcioni ulazi (2)
trebaju da budu tipa std_logic_vector(1 downto 0). Kolo treba
da ima jedan izlaz tipa std_logic .
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-------------------------------------------
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0);
R. Stojanović VHDL i FPGA
______________________________________________________________________
44
y: OUT STD_LOGIC);
END mux;
-------------------------------------------
ARCHITECTURE mux2 OF mux IS
BEGIN
WITH sel SELECT
y <= a WHEN "00", -- notice "," instead of ";"
b WHEN "01",
c WHEN "10",
d WHEN OTHERS; -- cannot be "d WHEN "11" "
END mux2;
--------------------------------------------
1.17.2 GENERATE
GENERATE je još jedna komanda koja se koristi u paralelnom
programiranju. Ona je ekvivalentna sekvencijalnoj komandi LOOP koja će
biti obajašnjena u nekom od narednih poglavlja. Ono što se omogućava
ovom komandom je da se dio koda može ponoviti odreñeni broj puta.
Osnovna konstrukcija FOR / GENERATE sintakse je data u sledećem
tekstu.
label: FOR identifier IN range GENERATE
(concurrent assignments)
END GENERATE;
Pored kombinacije FOR/GENERATE postoji mogućnost gradjenja koda
kombinacijom IF/GENERATE (ekvivalentno IF komandi u
sekvencijalnom kodu). IF/GENERATE se može usaditi u
FOR/GENERATE petlji što prikazuje naredna sintaksa.
label1: FOR identifier IN range GENERATE
R. Stojanović VHDL i FPGA
______________________________________________________________________
45
...
label2: IF condition GENERATE
(concurrent assignments)
END GENERATE;
...
END GENERATE;
• Primjer:
SIGNAL x: BIT_VECTOR (7 DOWNTO 0);
SIGNAL y: BIT_VECTOR (15 DOWNTO 0);
SIGNAL z: BIT_VECTOR (7 DOWNTO 0);
...
G1: FOR i IN x'RANGE GENERATE
z(i) <= x(i) AND y(i+8);
END GENERATE;
Vrlo bitna stvar o kojoj se mora imati na umu kada se FOR/GENERATE
sintaksa koristi je ta da obje granice opsega moraju biti statičke. Ukoliko je
jedna od granica nestatički parametar kod u opšetm slučaju neće biti
sintenzibilan.
1.18 Sekvencijalno programiranje
Ovaj model omogućava programiranje tako da se naredbe odigravaju
sekvencijalno, baš kao u kompjuterskom programu. Sekvencijalne naredbe
uključuju veliki broj standardnih konstrukcija kao što je pridruživanje
promenljivih, if-then-else naredbe i petlje.
Vrlo bitna stvar kod sekvencijalnog koda je da on nije ograničen samo
na sekvencijalnu logiku. Korišćenjem sekvencijalnog koda može se
dizajnirati bilo sekvencijalna, bilo kombinaciona logička kola.
R. Stojanović VHDL i FPGA
______________________________________________________________________
46
Sekvencijalni kod se još naziva i „behavioral code“. Naredbe o kojima će
biti reči u ovo poglavlju su sve sekvencijalne i one se mogu koristiti samo u
okviru PROCESS-a, funkcija i procedura. One su IF, WAIT, CASE ,
and LOOP. VARIABLE se takoñe mogu koristiti samo u sekvencijalnom
kodu.
1.18.1 PROCESS
Naredbe koje se obavljaju sekvencijalno moraju se nalaziti u PROCESS
bloku. Meñutim sama PROCESS naredba je paralelna jer se više
PROCESS blokova odvijaju nezavisno jedan od drugog tj. paralelno. Više
process blokova se takodje mogu kombinovati zajedno sa paralelnim
naredbama..
• Sintaksa:
process-name: PROCESS (sensitivity-list)
variable-declarations;
BEGIN
sequentional-statements;
END PROCESS process-name;
Process počinje da se izvršava onog momenta kada neka od
promenljivih u sensitivity-list promeni svoju vrijednost. Kada se zadnja
naredba process-a izvrši process se zaustavlja sve do onog momenta kada
se ponovo desi promena stanja nekog od signala u sensitivity-listi.
• Sintaksa:
[label:] PROCESS (sensitivity list)
[VARIABLE name type [range] [:= initial_value;]]
BEGIN
(sequential code)
END PROCESS [label];
R. Stojanović VHDL i FPGA
______________________________________________________________________
47
• Primjer:
-- DFF
------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
------------------------------------------------
ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
------------------------------------------------
ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (clk, rst)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END behavior;
Na ovom mjestu bi dobro bilo primijetiti razliku izmeñu pridruživanja
naredbi signalu ili variabli odnosno operatorima koji se koriste u jednom
odnosno drugom slučaju.
R. Stojanović VHDL i FPGA
______________________________________________________________________
48
Ukoliko je nekom signal potrenbo dodati vrednost koristi se operator
<=, a ukoliko se dodeljivanje vrednosti vrši nekoj variabli koristi se
operator =.
1.18.2 WAIT
Kada process sadrži sensitivnu listu “sensitivity-list” izvršavanje se
prekida poslije zadnje komande unutar procesa. Jedna od alternativa
senzitivnoj listi jeste WAIT komanda. U tom slučaju procesi “p1” i “p2” su
ekvivalentni.
p1: process is
begin
c <= a and b;
wait on a, b;
end process;
ili
p2: process (a, b) is
begin
c <= a and b;
end process;
Ukoiko umesto process sensitivitz liste programer radje koristi pristup
sa WAIT naredbom često će koristiti WAIT UNTIL uslov.
• Primjer:
PROCESS -- no sensitivity list
BEGIN
WAIT UNTIL (clk'EVENT AND clk='1');
IF (rst='1') THEN
output <= "00000000";
ELSIF (clk'EVENT AND clk='1') THEN
R. Stojanović VHDL i FPGA
______________________________________________________________________
49
output <= input;
END IF;
END PROCESS;
1.18.3 IF
IF je sigurno jedna od najkorišćenijih naredbi. Gotovo svaki
programski jezik poseduje IF naredbu pa tako i VHDL. Sintaksa IF
naredbe u VHDL-u kao i jedan jednostavni primer dati su u tekstu koji
sledi
• Sintaksa:
IF conditions THEN assignments;
ELSIF conditions THEN assignments;
...
ELSE assignments;
END IF;
• Primjer:
IF (x<y) THEN temp:="11111111";
ELSIF (x=y AND w='0') THEN temp:="11110000";
ELSE temp:=(OTHERS =>'0');
1.18.4 CASE
CASE je još jedna naredba koja se koristi u sekvencijalnom kodu.
• Sintaksa:
CASE identifier IS
WHEN value => assignments;
WHEN value => assignments;
...
R. Stojanović VHDL i FPGA
______________________________________________________________________
50
END CASE;
• Primjer:
CASE control IS
WHEN "00" => x<=a; y<=b;
WHEN "01" => x<=b; y<=c;
WHEN OTHERS => x<="0000"; y<="ZZZZ";
END CASE;
CASE sekvencijalna naredba je vrlo slična sa naredbom WHEN kada se
programiranje vrši paralelno. I ovde isto sve kombinacije za identifier
moraju biti zadovoljene pa je i kod CASE naredbe vrlo česta upotreba
ključne reči OTHERS. Još jedna vrlo korisna komanda koja se koristi u
kombinaciji sa naredbom CASE je naredba NULL. Ova komanda se koristi
kada nikakva akcija ne treba da se izvrši u nekom delu koda.
1.18.5 LOOP
Kao što i sao ime ove naredbe naslućuje, LOOP se koristi kada je neki
deo koda potrebno izvršiti odreñeni broj puta. Postoji više načina koji
omogućavaju kreiranje petlji u VHDL.
1.18.5.1 FOR LOOP
Ovo je petlja koja se izvršava tačno odreñeni broj puta.
• Sintaksa:
[label:] FOR identifier IN range LOOP
(sequential statements)
END LOOP [label];
• Primjer:
FOR i IN 0 TO 5 LOOP
x(i) <= enable AND w(i+2);
R. Stojanović VHDL i FPGA
______________________________________________________________________
51
y(0, i) <= w(i);
END LOOP;
Korisno je primetiti sličnost izmeñu FOR LOOP sintakse u
sekvencijalnom programiranju I kombinacije FOR GENERATE u
paralelnom. I u ovom slučaju granice FOR petlje moraju biti statičke jer u
protivnom kod neće biti sintentiyabilan.
1.18.5.2 WHILE LOOP
Ovo je petlaj koja se ponavlja sve do onog momenta do koga je
zadovoljen neki uslov.
• Sintaksa:
[label:] WHILE condition LOOP
(sequential statements)
END LOOP [label];
• Primjer:
WHILE (i < 10) LOOP
WAIT UNTIL clk'EVENT AND clk='1';
(other statements)
END LOOP;
1.18.5.3 EXIT
Ukoliko je potrebno petlju prekinuti u nekom momentu (kada je
zadovoljen neki uslov) koristi se naredba EXIT .
• Primjer:
FOR i IN data'RANGE LOOP
CASE data(i) IS
WHEN '0' => count:=count+1;
WHEN OTHERS => EXIT;
END CASE;
R. Stojanović VHDL i FPGA
______________________________________________________________________
52
END LOOP;
1.18.5.4 NEXT
Ukoliko neki uslov zahteva preskakanje jedne iteracije petlje I prelayak
na narednu, koristi se naredba NEXT.
• Primjer:
FOR i IN 0 TO 15 LOOP
NEXT WHEN i=skip; -- jumps to next iteration
(...)
END LOOP;
1.18.6 Funkcije i Procedure
1.18.6.1 FUNCTION
FUNCTION je dio sekvencijalnog koda. Namena ove ključne riječi je
kreiranje funkcija koje će biti zamjena često ponavljanom setu naredbi
(konverzija podataka, logičko aritmetičke operacije i sl). Pisanjem ovakvog
koda omogućeno je lakše dijeljenje i ponovno korišćenje već urañenog
posla.
Funkcije se sastoje iz deklaracije i definicije.
• Sintaksa definicije funkcije:
FUNCTION function_name [<parameter list>] RETURN
data_type IS
[declarations]
BEGIN
(sequential statements)
END function_name;
• Pozivanje funkcije:
R. Stojanović VHDL i FPGA
______________________________________________________________________
53
function-name(actuals); -- actuals su trenutni para metri
koji se
--prosledjuju u funkciju
• Primjer:
------ Function body: --------------------------
FUNCTION positive_edge(SIGNAL s: STD_LOGIC) RETURN
BOOLEAN IS
BEGIN
RETURN (s'EVENT AND s='1');
END positive_edge;
------ Function call: --------------------------
...
IF positive_edge(clk) THEN...
...
------------------------------------------------
1.18.6.2 PROCEDURE
Naredba PROCEDURE je vrlo slična naredbi FUNCTION. Jedina
razlika izmeñu funkcije i procedure je ta što procedura kao rezultat može
da vrati više od jedne vrednosti.
• Sintaksa:
PROCEDURE procedure_name [<parameter list>] IS
[declarations]
BEGIN
(sequential statements)
END procedure_name;
• Primjer:
Potrebno je napisati kod koji obavlja funkciju komparatora dva ulazna
podatka. Ulazni i izlazni podaci su tipa integer. Najapre je potrebno
R. Stojanović VHDL i FPGA
______________________________________________________________________
54
napisati proceduru koja će obaviti postavljeni tip zadatka pa posle tu
proceduru pozvati u okviru process bloka.
• VHDL code:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------------------------- ---
ENTITY min_max IS
GENERIC (limit : INTEGER := 255);
PORT ( ena: IN BIT;
inp1, inp2: IN INTEGER RANGE 0 TO limit;
min_out, max_out: OUT INTEGER RANGE 0 TO limit);
END min_max;
--------------------------------------------------- ---
ARCHITECTURE my_architecture OF min_max IS
--------------------------
PROCEDURE sort (SIGNAL in1, in2: IN INTEGER RANGE 0 TO
limit;
SIGNAL min, max: OUT INTEGER RANGE 0 TO limit) IS
BEGIN
IF (in1 > in2) THEN
max <= in1;
min <= in2;
ELSE
max <= in2;
min <= in1;
END IF;
END sort;
--------------------------
BEGIN
R. Stojanović VHDL i FPGA
______________________________________________________________________
55
PROCESS (ena)
BEGIN
IF (ena='1') THEN sort (inp1, inp2, min_out,
max_out);
END IF;
END PROCESS;
END my_architecture;
1.18.7 Primjer sekvencijanog modelovanja
Donji primjer opisuje BCD-SEDMOSEGMENTNI detektor. Za
odredjenu BCD kombinaciju pali se odredjena kombinacija
sedmosegmentnog dekodera. Kolo ima četiri ulaza i sedam izlaza.
------ Sequentional modeling example
library ieee ;
use ieee.std_logic_1164.all;
entity bcd_7_seg is
port( I: in std_logic_vector(3 downto 0);
Segs: out std_logic_vector(1 to 7)
);
end bcd_7_seg;
architecture Behavioral of bcd_7_seg is
BEGIN
process(I)
begin
case I is
when "0000" => Segs <= "1111110";
when "0001" => Segs <= "0110000";
when "0010" => Segs <= "1101101";
when "0011" => Segs <= "1111001";
R. Stojanović VHDL i FPGA
______________________________________________________________________
56
when "0100" => Segs <= "0110011";
when "0101" => Segs <= "1011011";
when "0110" => Segs <= "1011111";
when "0111" => Segs <= "1110000";
when "1000" => Segs <= "1111111";
when "1001" => Segs <= "1110011";
when others => Segs <= "0000000";
end case;
end process;
end Behavioral;
1.19 Strukturno modelovanje
Strukturno modelovanje omogućava manuelnu konekciju više
komponenata u funkcionalnu cjelinu upotebom signala za povezivanje. Sve
komponente koje se koriste moraju prethodno biti definisane svojim
entitetom i arhitekturom što može biti u posebnim ili zajedničkom fajlu.
Strukturno modelovanje je slično sastavljanju šeme složenog kola iz
komponenti.
1.19.1 COMPONENT
COMPONENT je još jedan način deljenja koda radi njegove lakše
distribucije i višekratnog korišćenja. Na primjer, često korišćene
komponente, kakve su flip-flopovi, brojači, multiplekseri itd, mogu biti
smještene u odreñenu biblioteku tako da se mogu ponovo koristiti u nekom
novom projktu bez potrebe za pisanjem njihovog koda.
Da bi se odredjena komponenta (COMPONENT) mogla koristiti
neophodno je prvo da bude deklarisana.
• Sintaksa deklaracije komponente:
R. Stojanović VHDL i FPGA
______________________________________________________________________
57
COMPONENT component_name IS
PORT (
port_name : signal_mode signal_type;
port_name : signal_mode signal_type;
...);
END COMPONENT;
• Sintaksa povezivanja komponente:
label: component_name PORT MAP (port_list);
Deklaracije komponenti se najčešće smeštaju u neki PACKAGE. U
primerima koji slede biće jasno prikazana deklaracija
• Primer deklaracije PACKAGE koji sadrži neke komponente:
----- File my_components.vhd: ---------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
------------------------
PACKAGE my_components IS
------ inverter: -------
COMPONENT inverter IS
PORT (a: IN STD_LOGIC; b: OUT STD_LOGIC);
END COMPONENT;
------ 2-input nand: ---
COMPONENT nand_2 IS
PORT (a, b: IN STD_LOGIC; c: OUT STD_LOGIC);
END COMPONENT;
------ 3-input nand: ---
COMPONENT nand_3 IS
PORT (a, b, c: IN STD_LOGIC; d: OUT STD_LOGIC);
END COMPONENT;
------------------------
R. Stojanović VHDL i FPGA
______________________________________________________________________
58
END my_components;
U prethodnom kodu dat je prikaz PACKAGE koji sadrži neke od
osnovnih komponenti. Treba napomenuti da se dizjan ovih komponenti
mora nalaziti u nekom drugom fajlu i da ENTITY svake od komponenti
mora imati isti naziv kao i naziv komponente.
• Primer projekta u kome će se koristiti prethodno kreirani package sa
datim komponentama:
----- File project.vhd: ---------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_components.all;
---------------------------------
ENTITY project IS
PORT ( a, b, c, d: IN STD_LOGIC;
x, y: OUT STD_LOGIC);
END project;
---------------------------------
ARCHITECTURE structural OF project IS
SIGNAL w: STD_LOGIC;
BEGIN
U1: inverter PORT MAP (b, w);
U2: nand_2 PORT MAP (a, b, x);
U3: nand_3 PORT MAP (w, c, d, y);
END structural;
1.19.2 PORT MAP
Postoje dva načina da se komponente meñusobno „povežu“-poziciono i
nominalno mapiranje.
R. Stojanović VHDL i FPGA
______________________________________________________________________
59
• Primjer pozicionog mapiranja:
COMPONENT inverter IS
PORT (a: IN STD_LOGIC; b: OUT STD_LOGIC);
END COMPONENT;
...
U1: inverter PORT MAP (x, y);
• Primer nominalnog mapiranja:
U1: inverter PORT MAP (x=>a, y=>b);
Kao što se može zaključiti iz dva prethodna primjera, poziciono
mapiranje je lakše za zapisivanje, ali je i verovatnoća da se greška u kodu
napravi veća. Zato prvi način treba izbjegavati što je češće moguće osim
kada se radi o nekim vrlo jednostavnim slučajevima.
1.19.3 GENERIC MAP
Prilikom povezivanja komponenti moguće je takoñe izvršiti njihovu
parametrizaciju. Slično kao što se komponenti definišu portovi prilikom
povezivanja, isto tako na tome mestu je moguće definisati i njene
generic parametre.
• Primjer:
Dolje je dat prikaz koda koji bi trebao da obavlja funkciju detektora
parnosti. Dužina ulaznog podatka se zadaje kao generic parametar.
Pretpostaviti da je komponenta koja obavlja funkciju detektora parnosti
ranije realizovana i da se definicija ove komponente nalazi u package-u
parity_gen_package . Cilj vježbe je da se pokaže kako se u
inicijalizaciji komponente vrši njena parametrizacija (generic
parametar).
R. Stojanović VHDL i FPGA
______________________________________________________________________
60
------ File my_code.vhd (actual project): --------- ---
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
USE work.parity_gen_package.all;
-----------------------------------
ENTITY my_code IS
GENERIC (n : POSITIVE := 2); -- 2 will overwrite 7
PORT (
inp: IN BIT_VECTOR (n DOWNTO 0);
outp: OUT BIT_VECTOR (n+1 DOWNTO 0));
END my_code;
-----------------------------------
ARCHITECTURE my_arch OF my_code IS
------------------------
COMPONENT parity_gen IS
GENERIC (n : POSITIVE:=7);
PORT (input: IN BIT_VECTOR (n DOWNTO 0);
output: OUT BIT_VECTOR (n+1 DOWNTO 0));
END COMPONENT;
------------------------
BEGIN
C1: parity_gen GENERIC MAP(n) PORT MAP(inp, outp) ;
END my_arch;
R. Stojanović VHDL i FPGA
______________________________________________________________________
61
2. FPGA – Osnove
2.1 Uvod
Integrisano kolo (IC), predstavlja čip napravljen od poluprovodničkog
materijala koji obavlja različite funkcije: pojačavač, oscilator, tajmer,
mokroprocesor, memorija itd. IC se satoji od velikog broja tranzistora,
otpornika i kondenzatora . Postoji više parametara kojim se karakteriše
jedno IC: implementaciona tehnologija, potrošnja, napajanje, brzina rada,
složenost itd. U okviru ovog teksta za nas je značajna složenost i ona se
obično mjeri stepenom integracije, koji predstavlja broj osnovnih
elemenata (tranzistora, gejtova) realizovanih (integrisanih) u jednom kolu.
Po stepenu integracije integrisana kola se mogu podijeliti u pet grupa:
• SSI (Small-Scale Integration). Kola malog stepena integracije.
Sadrže do 100 osnovnih elemenata (logička kola, flip-flopovi).
• MSI (Medium-Scale Integration). Kola srednjeg stepena integracije,.
Sadrže od 100 do 1000 osnovnih elemenata. (registri, brojači,
aritmetička kola).
• LSI (Large-Scale Integration). Kola visokog stepena integracije.
Sadrže od 1000 do 10000 elemenata. (8-bitni mikroprocesori, RAM,
ROM).
• VLSI (Very Large Scale Integration), kola vrlo visokog stepena
integracije sa 10000 do 100000 elemenata. (16- i 32-bitni
mikroprocesori).
• ULSI (Ultra Large Scale Integration), kola ultra velikog stepena
integracije, sa 100000 do 1.000.000 i više osnovnih elemenata.
2.2 Aplikaciono specifična integrisana kola (ASIC)
Prema metodlogiji projektovanja, integrisana kola možemo podeliti na:
R. Stojanović VHDL i FPGA
______________________________________________________________________
62
• Standardne komponente (Standard Integrated Circuits - SIC). U ovu
grupu spadaju SSI, MSI, LSI, VLSI i ULSI kola, koja su, u
tehnološkom smislu, proizvedena nezavisno od krajnjeg korisnika.
Naime, kolo se proizvodi za nepoznatog korisnika, koji obično nema
uticaj na njegove karakteristike. Takvo kolo se proizvodi u velikim
serijama po niskoj cijeni. Primjeri su: analogni integrisani operacioni
pojačavači, tajmeri, standardna digitalna kola (TTL, CMOS) itd.
• Aplikaciono orjentisana integrisana kola, ASIC (Application Specific
Integrated Circuits). Ova kola su projektovana tako da odgovaraju
specifičnoj namjeni. Za razliku od standardnih komponenata,
funkciju ASIC kola definiše korisnik. ASIC kola se proizvode po
narudžbi u velikim ili malim serijama što utiče na njihovu cijenu.
Generalno gledano, mogu se izdvojiti dvije vrste ASIC kola: full-custom
and semi-custom.
1. Full-custom kola se u potpunosti (do nivoa osnovnih
elemenata) projektuje za tačno definisanu primjenu. Ova
tehnologija omogućava najbolje karakterisike, ali je
pojedinačna cijena dosta visoka.
2. Kod semi-custom kola, proizvoñač koristi pre-projektovane ili
pre-fabrikovane (nedovršene) strukture koje doradom
prilagoñava korisničkim zahtjevima. S obzirom da se na taj
način skraćuje vrijeme pripremne proizvodnje, krajnja
pojedinačna cena je niža, ali su performanse lošije u poreñenju
sa full-custom dizajnom. U okviru semi-custom kola
prepoznajemo sledeće kategorije:
� standard cell (standardne ćelije), kod kojih proizvoñač
nudi veliki broj standardnih ćelija (logička kola, flip-
flopovi, ali i strukture SSI, MSI složenosti). Korisnik
R. Stojanović VHDL i FPGA
______________________________________________________________________
63
isporučuje proizvoñaču šemu sačinjenu od standardnih
ćelija, na osnovu koje se izrañuje čip. Pri tome
proizvoñač ne startuje od početka već samo uklapa i
povezuje pret-projektovane standardne ćelije.
� gate arrays (gejtovske matrice), koje se izrañuju na
podlozi sačinjenoj od velikog broja pre-fabrikovanih
jednostavnih logičkih elemenata ili MOS tranzistora
koji nisu meñusobno povezani. Korisnik isporučuje
proizvoñaču šemu do nivoa osnovnih elemenata na bazi
koje on obavlja doradu, tj. metalizaciju, polaznog čipa.
3. PLD (Programmable Logic Devices), programabilna logička
kola. To su integrisana kola koja se mogu konfigurisati (tj.
programirati) od strane krajnjeg korisnika da bi ispunili
zahteve koji se tiču konkretne aplikacije. Strukturu PLD kola
čini fiksan skup komponenata kakvi su logički gejtovi, ili
složeniji logički blokovi (LEs – Logics Elements ili LCs –
Logic cells), meñusobno spojeni programabilnim vezama.
Programiranjem ovih veza, krajnji korisnik definiše funkciju
kola, a jednom programirana funkcija se može menjati u
potpunosti ili delimično. Suštinska razlika u odnosu na ostale
tipove ASIC kola je u tome da PLD kolo programira sam
korisnik, čime je on u potpunosti nezavisan od proizvoñača.
Ova su kola pretežno digitalnog karaktera, u novije vrijeme
visokog kapaciteta. Idealna su za izradu prototipova ili manje
serije. Cijena im je relativno prihvatljiva.
R. Stojanović VHDL i FPGA
______________________________________________________________________
64
2.3 PLD kola
Danas je na tržistu dostupan veliki broj tipova PLD kola, koji se
razlikuju po načinu programiranja, složenosti (tj. logičkom kapacitetu, ili
implementacionoj moći), unutrašnjoj strukturi, brzni rada, broju pinova.
Broj dostupnih komponenata kod savremenih PLD-ova je veoma veliki
tako da se sa aspekta složenosti ova kola protežu od MSI IC do VLSI IC.
Raspoloživ logički kapacitet se kreće od nekoliko stotina do nekoliko
stotina hiljada ekvivalentnih gejtova, a taktna učestanost od nekoliko
desetina MHz do nekoliko stotina MHz. PLD kola se pakuju u kućištima
sa nekoliko desetina do nekoliko stotina pinova. To znači da su PLD-ovi u
stanju da implementiraju širok dijapazon kombinacionih i sekvencijalnih
logičkih funkcija. Kao što je rečeno veoma su pogodna za brzu izradu
prototipa, ali i konačnih rešenja koja će se proizvoditi u malim serijama.
Vrijeme trajanja faze projektovanja kod ovih kola je veoma kratko. U
slučaju da je potrebno kratko vrijeme pojavljivanja proizvoda na tržište
(„time-to-market“), tada izbor PLD kola predstavlja pravo rešenje čak i sa
aspekta cijene.
Prema složenosti i organizaciji unutrašnje strukture, savremena PLD
kola se mogu klasifikovati u sledeće tri kategorije:
• SPLD (Simple PLD). PLD kola srednjeg stepena integracije
zasnovana na programabilnim AND-OR poljima, koja se koriste za
implementaciju logičkih funkcija izraženih u formi “suma
proizvoda”.
• CPLD (Complex PLD). Sastoje se od većeg broja programabilnih
logičkih blokova povezanih preko centralizovane programabilne
sprežne mreže. Po unutrašnjoj strukturi, logički blokovi su slični
tipičnom SPLD kolu.
R. Stojanović VHDL i FPGA
______________________________________________________________________
65
• FPGA (Field Programmable Gate Array). PLD kola visokog stepena
integracije koje se izvode kao polje velikog broja programabilnih
logičkih blokova (ćelija) jednostavne strukture rasporeñenih na
infrastrukturi koja ih meñusobno povezuje.
2.3.1 SPLD kola
Glavni dio SPLD arhitekture čine dve programabilne logičke matrice:
(i) AND matrica za formiranje logičkih proizvoda i (ii) OR matrica za
sumiranje logičkih proizvoda. Pored AND-OR polja pojedine PLD
arhitekture ovog tipa poseduju izlazni stepen koji tipično obezbeñuje: (1)
povratne veze sa izlaza na ulaz, (2) mogućnost promjene polariteta izlaznog
signala, (3) mogućnost da se pojedini eksterni priključci koriste bilo kao
ulazi bilo kao izlazi i (4) memorijske elemente za memorisanje stanja
izlazih signala, što omogućuje sintezu sekvencijalnih digitalnih kola.
Uobičajeni naziv za SPLD kolo kod koga se obe logičke matrice mogu
programirati je PLA (Programmable Logic Array). Pored PLA strukture u
upotrebi su i AND-OR polja kod kojih je jedna od logičkih matrica fiksna,
a druga programabilna. Konfiguracija fiksne matrice je permanentna,
izvedena u toku fabrikacije kola i ne može se menjati od strane krajnjeg
korisnika. AND-OR polje kod koga je AND matrica programabilna, a OR
matrica fiksna se zove PAL (Programmable Array Logic). AND-OR polje
sa fiksnom AND matricom i programabilnom OR matricom se zove ROM
(Read Only Memory). U poreñenju sa ostalim tipovima PLD kola (CPLD i
FPGA), SPLD kola se odlikuju relativno niskim logičkim kapacitetom (do
nekoliko stotina ekvivalentnih gejtova). Glavna namena SPLD kola je
zamena standardnih digitalnih kola niskog i srednjeg stepena integracije
(Sl. 6) čime se postiže ušteda prostora na štampanoj ploči, pojeftinjuje
proizvodnja i povećava pouzdanost u radu. Brzina rada SPLD kola je
velika. Propagaciono kašnjenje “od pina do pina” je fiksno (ne zavisi od
R. Stojanović VHDL i FPGA
______________________________________________________________________
66
implementirane funkcije i iznosi do nekoliko nanosekundi. SPLD kola su
radjena u sklopu kurseva digitalne elektronike na BSc nivou studija pa im u
ovom tekstu nećemo opširnije obradjivati.
2.3.2 CPLD
Kao što je već rečeno, CPLD kola se sastoje od više logičkih blokova
tipa SPLD, povezanih globalnom programabilnom sprežnom mrežom.
Meñutim, čak i na nivou logičkih blokova, CPLD kola su obično značajno
složenija od tipičnih SPLD kola. U većini slučajeva, logički blokovi koji se
koristne kod CPLD kola se mogu smatrati nekom fomom proširenog PAL-
a. Proširenje PAL se vrši u cilju ekonomičnijeg korišćenja logičkih
proizvoda programabilne AND matrice. Kod klasičnih PAL-ova, raspodela
logičkih proizvoda je fiksna u smislu da je svaki logički proizvod pridružen
izlazu jednog izlaznog AND kola (tj. makroćelije). Logički proizvodi koji
ostaju neiskorišćeni ne mogu se pridružiti nekoj drugoj makroćeliji.
Takoñe, makroćelije ne mogu da imaju zajedničke logičke proizvode, pa u
slučajevima kada se isti proizvod koristi za formiranje logičkih funkcija u
više makroćelija, taj proizvod mora da se formira u svakoj makroćelji u
kojoj se koristi. Kod savremenih CPLD kola, korišćenjem različitih
tehnika, ovi nedostaci su u velikoj meri otklonjeni. Postoji više
proizvodjača CPLD kola koja se i pored zajedničkih namjena razlikuju po
unutrašnjoj arhitekturi.
2.3.2.1 Primjer CPLD kola, Altera Max Seria
Firma Altera je razvila tri serije CPLD kola: Max 5000, 7000 i 9000.
Sve tri serije imaju klasičnu CPLD arhitekturu koja se sastoji od skupa
logičkih blokova, tj LAB blokova (Logic Array Block - LAB) meñusobno
povezanih globalnom programabilnom prekidačkom matricom, tj. PIA
matricom (Programmable Interconnect Matrix).
R. Stojanović VHDL i FPGA
______________________________________________________________________
67
Arhitektura serije Max 7000 je prikazana na slici 2.1. Broj LAB
blokova se kreće od 2 do 16, što zavisi od tipa kola. LAB blokovi imaju
strukturu proširenog PAL-a i sadrže po 16 makroćelija svrstanih u dvije
grupe od po 8 makroćelija. Kolo poseduje četiri pina posebne namene
(globalni takt - GCLK, globalni reset - GCLR, dozvola izlaza OE1 i OE2).
Preostali pinovi su bidirekcioni (U/I) i po potrebi se mogu konfigurisati
bilo kao ulazi bilo kao izlazi. Svaki U/I pin je preko U/I bloka povezana sa
jednom makroćelijom, kao što je to prikazano na slici 2.2. Kada se pin
koristi kao izlaz, kontrola izlaznog trostatičkog bafera se ostvaruje pomoću
jednog od dva globalna signala OE1 ili OE2. Kada se U/I pin koristi kao
ulaz, izlaz tro-statičkog bafera je permanento postavljen u stanje visoke
impedanse, a signal doveden na pin se vodi u PIA matricu, preko koje se
može proslediti bilo kom LAB bloku. S obzirom da se izlaz svake
makroćelije direktno vraća u PIA matricu, u slučajevima kada se U/I pin
koristi kao ulaz odgovarajuća makroćelija ne ostaje neiskorišćene već se
može upotrebiti za formiranje neke “interne” funkcije.
R. Stojanović VHDL i FPGA
______________________________________________________________________
68
Slika 2.1: Altera Max 7000 CPLD Arhitektura
Slika 2.2: U/I blok Altera Max 7000 CPLD serije.
Struktura jedne makroćelije LAB bloka je prikazana na slici 2.3.
Logičko polje je programabilna AND matrica, globalna na nivou LAB
R. Stojanović VHDL i FPGA
______________________________________________________________________
69
bloka, koja se koristi za formiranje logičkih proizvoda. Za svaku
makroćeliju, u logičkom polju se formira pet privatnih logičkih proizvoda.
Mada se u praktičnim primenama većina potrebnih kombinacionih funkcija
može realizovati sa pet logičkih proizvoda, neke kombinacione funkcije su
složenije i zahtevaju veći broj logičkih proizvoda. Da bi se u takvim
slučajevima obezbedilo ekonomično korišćenje raspoloživog logičkog
kapaciteta LAB bloka, koriste se paralelni ekspanderi (parallel expanders)
i deljivi ekspanderi (shared expanders). Paralelni ekspanderi predstavljaju
varijantu koncepta preusmeravanja logičkih proizvoda kod koje
makroćelija i može da “pozajmi” svoje logičke proizvode makroćeliji i+1
(ali ne i makroćeliji i-1). Dodatno ograničenje je da se logički proizvodi
mogu preusmeravati samo unutar grupe od 8 makroćelija, ali ne i izmeñu
ovih grupa ili izmeñu LAB blokova. Deljivi ekspanderi se formiraju tako
što se po jedan privatni logički proizvod iz svake makroćelije invertuje i
vraća u logičko polje, tako da se može pridodati bilo kom logičkim
proizvodu koji se formira u LAB bloku. Takoñe, unakrsnim povezivanjem
deljivih ekspandera mogu se formirati dodatni lečevi i flipflopovi.
Makroćelija se sastoji od: logičkog alokoatora, OR kola za sumiranje
logičkih proizvoda i programabilnog flipflopa. Posredstovom logičkog
alokatora, na ulaze OR kola je moguće priključiti bilo koji podskup ulaznih
logičkih proizvoda. Takoñe, bilo koji od ulaznih logičkih proizvoda se
može koristiti za upravljanje flipflopom (taktovanje, asinhrono resetovanje
i setovanje) i kontrolu polariteta kombinacione funkcije formirane na izlazu
OR kola. Flipflop se može konfigurisati tako da funkcioniše kao D, T, JK
ili SR flipflop. Za taktovanje i resetovanje flipflopa je moguće koristiti i
globalne signale za takt i reset, što se reguliše multiplekserima 1 i 2.
Makroćelija se može konfigurisati i da obavlja samo kombinacionu
funkciju, tako što se multiplekserom 3 na U/I blok direktno priključuje
izlaz EXOR kola.
R. Stojanović VHDL i FPGA
______________________________________________________________________
70
Slika 2.3: MC serije MAX 7000.
Zahvaljujući relativno velikoj brzini rada i širokom asortimanu, CPLD
kola nalaze široku primjenu, počevši od implementacije jednostavne
sprežne logike, do realizacije prototipova jednostavnijih ASIC kola. Važan
razlog za sve veću primjenu CPLD kola je re-dizajn postojećih sistema
baziranih na SPLD kolima, gdje se veći broj SPLD kola zamenjuje manjim
brojem CPLD kola. Sistemi koji se sastoje od više meñusobno povezanih
funkcionalnih modula mogu se efikasno realizovati pomoću CPLD kola,
tako što se svaki modul realizuje jedim logičkim blokom. Opšte pravilo je
da su za realizaciju u CPLD tehnologiji pogodni sistemi koji zahtijevaju
složenu logiku sa malim brojem flip-flopova. Dobar primjer takve klase
kola su konačni automati. Sva komercijalna CPLD kola su
reprogramabilna, što omogućava jednostavnu i brzu izmjenu dizajna.
CPLD kola koja su reprogramabilna “u sistemu” omogućavaju
rekonfiguraciju hardvera (npr. izmena protokola kod kola za komunikaciju)
bez isključenja napajanja. Zahvaljujući strukturi sprežne mreže, tajming se
R. Stojanović VHDL i FPGA
______________________________________________________________________
71
može predvidjeti prije nego što je sistem realizovan, što predstavlja veoma
bitnu prednost CPLD kola u odnosu na FPGA kola.
2.4 FPGA
2.4.1 Uvod
Kao što je već rečeno FPGA su PLD koja imaju vrlo visok kapacitet
logike, slika 2.4. Osnovna razlika izmedju FPGA i CPLD kola ogleda se u
tome što CPLD imaju logičke resurse sa velikim brojem ulaza ali ne
raznolike, dok FPGA imaju veliki broj raznolikih logičkih elemenata.
Slika 2.4: Fizički izgled FPGA čipova.
FPGA kola sadrže oblasti ne angažovanih elemenata koji se nazivaju
logički blokovi i raznih resursa za interkonekciju, a njihova konfiguracija
se obavlja u toku programiranja od strane krajnjeg korisnika. Ilustracija
tipične FPGA arhitekture je prikazana na slici 2.5.
R. Stojanović VHDL i FPGA
______________________________________________________________________
72
Slika 2.5: Ilustracija tipi čne FPGA arhitekture
Postoje dvije osnovne kategorije FPGA kola : SRAM FPGA i Anti-
fuse FPGA. Vodeći proizvodjači prve kategorije su Xilinx i Altera, a
druge: Actel, Quicklogic and Cypress, Xilinx.
Osnovna struktura Xilinx SRAM FPGA je matrično bazirana, što
znači da svaki čip sadrži dvo dimenzionalnu matricu logičkih blokova koji
mogu biti povezovani preko horizontalnih i vertikalnih kanala za rutiranje.
Xilinx je uveo prvu FPGA familiju pod nazivom XC2000 1985 godine. Od
tada su razvijene još tri serije XC3000, XC4000 i XC5000. Trenutno
najpopularnija i najviše korištena familija XC4000 ima kapacitet više od
15 000 ekvivalentnih gejtova.
Logički blok ove familije, koji se naziva “konfigurabilni logički
blok” (CLB) je zasnovan na “look-up” tabela (LUTs) konfiguraciji. LUT je
mala, širine jedan bit, memoriska oblast koja ima svoju adresnu liniju a
jedno bitni izlaz je ustvari LUT DATA izlaz. LUT sa k ulaza raspolaže sa
2kx1 bitova memorije i može realizovati bilo koju logičku funkciju od
njegovih k ulaza programiranjem tabela istine logičkih funkcija direktno u
memoriji. XC4000 CLB sadrži tri odvojene LUT u konfiguraciji prikazanoj
na slici 2.6. Dva četvorobitna LUT-a čine ulaze CLB-a, dok treći LUT
R. Stojanović VHDL i FPGA
______________________________________________________________________
73
može služiti u kombinaciji sa druga dva. Osim toga svaki CLB sadrži po
dva flip-flopa. Ovakva arhitektura dozvoljava da CLB inplementira širok
opseg logičkih funkcija.
Slika 2.6: Structura CLBa Xilinix SRAM FPGA.
Jedna od namjena i osobina uredjaja sa velikom gustinom pakovanja
je da mogu da podrže integraciju cijelog sistema, pa tako i čip XC4000 ima
“sistemski orjentisane “ osobine. Npr. svaki CLB sadrži kolo koje
omogućava efikasno obavljanje aritmetičkih operacija, a LUT u CLB- u
može biti konfigurisan kao read/write RAM. U seriji 4000E RAM blokovi
su realizovani kao sinhroni RAM. Osim ovoga svaki XC4000 čip ima vrlo
veliki broj AND kola na periferiji logičkih blokova što dozvoljava efikasnu
implementaciju dekoderskih kola.
Pored logike, druga ključna osobina FPGA kola su njihove strukture
za interkonekciju. Kod XC4000 interkonekcija je aranžirana u obliku
horizontalnih i vertikalnih kanala. Svaki kanal sadrži odredjeni broj kratkih
žičanih segmenata koji obuhvataju jedan CLB, dužih segmenata koji
obuhvataju dva CLB-a i vrlo dugih koji obuhvataju cijelu dužinu ili širinu
čipa. Programabilni prekidači su sposobni povezati ulaze i izlaze CLB-a u
R. Stojanović VHDL i FPGA
______________________________________________________________________
74
ožičeni segment ili povezati jedan ožičeni segment sa drugim. Šematski
prikaz jednog dijela horizontalnih kanala za rutiranje unutar XC4000 je
prikazan na slici 2.7. Na slici nisu dati CLB ulazi i izlazi i rutirajući
prekidači.
Slika 2.7: Horizontalni kanali za rutiranje kod XC 4000.
Alterina FLEX 8000 serija, slika 2.8, je bazirana na hijerarhiji od tri
nivoa, koja se mnogo češće sreće kod CPLD kola. Najniži nivo u ovoj
hijerarhiji sadrži “look-up” tabele, što nije slučaj kod CPLD, pa je to jedan
od razloga što je FLEX8000 kategorizovan u FPGA kola. Možda je
najispravnije reći da je FLEX8000 kombinacija FPGA i CPLD tehnologije.
FLEX je SRAM bazirana serija koja sadrži četiri ulazne LUT kao bazične
logičke blokove. Kapacitet logike za ova kola kreće se od 4000 pa do više
od 15 000 gejtova. Šematski prikaz arhitekture je dat na donjoj slici.
R. Stojanović VHDL i FPGA
______________________________________________________________________
75
Slika 2.8: Arhitektura Alterinog FLEX 8000 kola.
Osnovni logički blok, koji se naziva logički elemenat (LE) sadrži
četiri ulazne LUT, flip-flop i kolo prenosa specijalne namjene za aritmtička
kola. LE osim toga, sadrži kaskadna kola koja omogućavaju efikasnu
inplementaciju velikog broja AND funkcija. Detaljniji prikaz LE je dat na
slici 2.9.
Slika 2.9: Logički elemenat (LE) unutar FLEX 8000.
R. Stojanović VHDL i FPGA
______________________________________________________________________
76
Kod FLEX 8000, LE su grupisani u setove od po osam i nazivaju se
“Logic Array Blocks” (LAB). Kao što se vidi na slici 2.9, svaki LAB ima
lokalnu interkonekciju i svaki lokalni provodnik može povezati bilo koji
LE sa bilo kojim drugim LE u okviru istog LAB. Lokalne intekonekcije su
takodje povezane na globalne koje se nazibaju “Fast Track” (FT). FT su
slične kao duge linije kod Xlinx-a, tako da svaki FT se proteže na punu
širinu ili dužinu kola. Glavna razlika izmedju FLEX 8000 i Xilinx čipa je u
tome što FT sadrži samo duge linije. Ovo čini FLEX 8000 pogodnim za
CAD alate za brzo konfigurisanje što je vrlo važna osobina. Sve FT
horizontalne linije su identične , tako da su sva kašnjenja na
interkonkcijama kod FLEX 8000 mnogo predvidivija nego kod FPGA kola
koja sadrže mnogo kraćih segmenata, jer nema programabilnih svičeva.
FLEX 8000 arhitektura je proširena u FLEX 10 000 familiji.Ova
familija ima sve osobine FLEX 8000 familije sa dodatkom SRAM blokova
promjenjive veličine, koji se nazivaju “Embedded Array Blocks” (EABs).
Ideja je ilustrovana na slici 2.10, koja pokazuje da svaki red in FLEX 10
000 čipu ima EAB na jednom kraju. Svaki EAB je konfigurabilan i služi
kao SRAM blok sa različitim odnosom : 256x8, 512x4, 1Kx2, 2Kx1. U
stvari, EAB može biti alternativno konfigurisan tako da može
inplementirati kompleksna logička kola kao što su množači korištenjem
velikog broja većih više izlaznih “look up” tabela.
R. Stojanović VHDL i FPGA
______________________________________________________________________
77
Slika 2.10: Arhitektura FLEX 10 000 kola.
2.4.2 Cyclone Seria FPGA
Cyclone FPGA familija je bazirana na 1.5V, 0.13um, SRAM procesu
sa gustinom do 20060 logičkih elemenata (LEs) i do 288 Kbita RAMa.
Takodje posjeduje PLL strukture i veliki broj dodatnih pogodnosti. Ova
familija je pogodna za interkonekciju različitih periferija, gdje podržava
brzine transfera do 311 megabita po sekundi. Ovdje ćemo nešto više reći o
njoj zato što se čipovi iz ove familje upotrebljavaju u okviru provjere
kodova i šema datih u ovom priručniku.
LE je najmanja, slika 2.11, logička jedinica u Cyclone arhitekturi.
Omogućava napredne funkcije sa efikasnom upotrebom logičkih resursa.
Svaka LE sadrži četiri LUT, a svaka od njih predstavlja funkcijski
generator koji može realizovati bilo koju funkciju sa četiri promenljive.
Dodatno, svaki LE sadrži programabilni registar i carry chain sa carry
select opcijom. LE, takodje, podržava dinamičko sabiranje i množenje na
nivou jednog bita, što se definiše pomoću stanja signala LAB. Svaki LE
podržava sve tipove interkonekcije: unutar sebe same, izmedju kolona,
redova, LUT chain-a itd.
R. Stojanović VHDL i FPGA
______________________________________________________________________
78
Slika 2.11: LE Alterine Cyclone serije.
Svaki programabilni registar logičkog elementa može biti konfigurisan
za D, T, JK ili SR mod, a posjeduje true asynchronous load data, clock,
clock enable, clear, and asynchronous load/preset ulaze. Globalni signali,
U-I pinovi opšte namjene ili bilo koji element interne logike mogu pogoniti
clock i clear signale, dok U-I pinovi ili interna logika mogu pogoniti clock
enable, preset, asinhroni load i asinhroni data. Asinhroni load data ulazi
dolaze sa data3. U slučaju kombinacione logike, izlazi LUT direktno se
vezuju na izlaze LE, premošćavajući ostatak kola. Svaki LE ima tri izlaza
koji pogone različitu logiku uključujući i povratnu spregu.
Dodatno, pored tri generalna izlaza za rutiranje, LE u okviru jednog
LAB (Logic Array Blocks) ima izlaze za LUT niz (chain) i registar niz.
LUT niz izlazi omogućavaju spajanje LUTova u okviru istog LAB u
kaskadu u cilju dobijanja funkcije sa više ulaza. Registar niz izlazi
omogućavaju spajanje registara u okviru iste LAB u kaskadu. Takodje
R. Stojanović VHDL i FPGA
______________________________________________________________________
79
registar izlazi se koriste za brzu interkonekciju u okviru LABs pri tome
čuvajući interkonekcione resurse.
Svaka LAB se sastoji od 10 LEs, LE carry nizova, LAB control
signala, lokalnih interkonekcija, LUT nizova i linija za konekciju
registarskih nizova. LE iz Cyclone familije može raditi u jedan od dva
moda: (i) normalni mod i (ii) dinamički aritmetički mod. Normalni mod je
podesan za kombinacione funkcije dok se dinamički aritmetički više
upotrebljava za implementaciju sabirača, množača, akumulatora i
komparatora.
Cyclone ugradjena memorija se sastoji od banaka (kolona) M4K
blokova. Svaki M4K blok može implementirati različite tipove memorije sa
ili bez parnosti, uključujući i nekoliko vrsta dual port and single port RAM,
ROM i FIFO. Ukupno sadrži 4,608 RAM bitova.
U Cyclone arhitekturi konekcija izmedju LEta, M4K memorijskih
blokova i I-O pinova je omogućena pomoću MultiTrack interconnect
structure sa DirectDrive tehnologijom.
2.5 Tehnologije programiranja PLD kola
Konfigurabilnost PLD kola omogućena je postojanjem internih
programabilnih tačka koje, u suštini, predstavljaju prekidačke elemente koji
se mogu programirati tako da se ponašaju kao kratko-spojeni ili otvoreni
prekidači. U fazi programiranja kola, signali koji se dovode na ulaz kola
otvaraju i zatvaraju programabilne tačke (elektronske prekidače) i na taj
način ostvaruju željene oblike povezivanja internih komponenta.
Kod prvih PLD kola za realizaciju programabilnih prekidača korišćeni
su poluprovodnički osigurači. Inicijalno svi osigurači su "nesagoreni".
Pobuñivanje kola nešto višim naponima od radnih uslovljava da kroz PLD
protiču velike struje. Kao posledica, veze koje formiraju osigurači se
raskidaju. Treba pri ovome naglasiti da ne postoji metod za rekonstrukciju
R. Stojanović VHDL i FPGA
______________________________________________________________________
80
(obnavljanje) stanja prekidača, tj. njegovo sagorevanje je trajno ili
bespovratno. Tipičan predstavnik ovakvih kola je programabilni ROM ili
PROM.
Danas, kod SPLD i CPLD kola, za realizaciju programabilnih
prekidača, preovladavaju tehnologije zasnovane na tranzistorima sa
izolovanim gejtom (floating-gate) EPROM ili EEPROM tipa, dok se kod
FPGA uglavnom koriste SRAM (Static RAM) i antifuse tehnologije.
• SRAM tehnologija programiranja. Kod ove tehnologije,
konfigurisanje kola se ostvaruje pomoću pass tanzistora i
multipleksera koji se upravljaju SRAM ćelijama. Par “SRAM ćelija -
pass tranzistor” se koristi kao programabilna veza izmeñu dva žičana
segmenta (slika 2.12a). Kada je u SRAM ćeliji memorisana
“jedinica”, pass tranzistor se ponaša kao zatvoren prekidač male
serijske otpornosti. U suprotnom, kada je stanje SRAM ćelije “nula”,
pass tranzistor je otvoren prekidač veoma velike serijske otpornosti.
Za upravljanje multiplekserom, SRAM ćelije su vezane za
selekcione ulaze multipleksera . Stanje SRAM ćelija odreñuje koji je
od ulaza multipleksera povezan sa izlazom. S obzirom da SRAM
ćelije gube memorisan sadržaj nakon isključenja napajanja, PLD
kolo mora biti napunjeno konfiguracionim sadržjem pri svakom
uključenju napajanja. To zahteva eksternu, permanentnu memoriju
(tipa EPROM ili EEPROM) za čuvanje konfiguracionih bitova. U
fazi punjenja, sve SRAM ćelije PLD kola su redno povezane u
strukturu pomeračkog registra, a samo punjenje se vrši serijskim
upisom konfiguracionih bitova. U zavisnosti od tipa i kapaciteta PLD
kola, punjenje traje od nekoliko milisekundi do nekoliko desetina
milisekundi. Glavna prednost SPRAM tehnologije, u odnosu na
druge tehnologije programiranja, je mogućnost brzog
reprogramiranja, koje može biti obavljeno “u sistemu”. Glavni
R. Stojanović VHDL i FPGA
______________________________________________________________________
81
nedostaci su relativno velika površina koju na čipu zauzimaju SRAM
ćelije (tipična SRAM ćelija se realizuje sa pet tranzistora) i
neophodnost ugradnje eksterne memorije.SRAM tehnologija
programiranja se koristi u FPGA kolima firmi: Xilinix, Plessey,
Algotronix, Concurent Logic i Toshiba.
Slika 2.12: Tehnologije programiranja PLD kola: (a) SRAM; (b) EEPROM; (c)
antifjuz.
• Floating_Gate tehnologija. Radi se o istoj tehnologiji koja se sreće
kod EPROM i EEPROM memorija. Programabilni prekidač je
tranzistor sa izolovanim gejtom (EPROM tranzistor), koji se,
programiranjem, može permanentno zakočiti (slika 2.12b). Ovo se
postiže injektovanjem naelektrisanja na izolovani gejt tranzistora
(gejt 2). Do injektovanja nelektrisanja dolazi kada se izmeñu
R. Stojanović VHDL i FPGA
______________________________________________________________________
82
upravljačkog gejta (gejt 1) i drejna tranzistora dovede visok napon.
Injektovano naelektrisanje povećava napon praga tranzistora, tako da
on, u normalnom režimu rada, ostaje stalno zakočen (tj. neprovodan).
Injektovano naelektrisanje se odstranjuje izlaganjem izolovanog
gejta dejstvu ultraljubičastog svetla. EEPROM tehnologija je slična
EPROM tehnologiji, s tom razlikom što se odstranjivnje
injektovanog naelektrisanja može ostvariti električnim putem, bez
ultraljubičastog svetla. EPROM tehnologija, kao i SPRAM,
omogućava reprogramiranje. Prednost EPROM tehnologije je što
ona ne zahteva eksternu memoriju za čuvanje konfiguracionih
bitova, ali je zato proces reprogramiranja duži i može se obaviti
samo “izvan sistema”. Pored toga, serijska otpornost provodnog
EPROM tranzistora je veća (oko dva puta) od seriske otpornosti pass
tranzistora koji se koristi kod SRAM tehnologije. Takoñe, statička
potrošnja kola koje koristi EPROM tranzistore je zbog “pull_up”
otpornika (vidi sliku ) veća od potrošnje kola koje koristi SRAM
ćelije. EPROM tehnologija programiranja se koristi kod većine
CPLD kola i kod FPGA kola firmi Altera i Plus Logic. Kod FPGA
kola firmi AMD i Lattice koristi se EEPROM tehnologija.
• Antifuse tehnologija programiranja. Antifuse je komponenta sa dva
kraja koja u neprogramiranom stanju poseduje veoma veliku serijsku
otpornost (tj. predstavlja otvoren prekidač). Antifuse se sastoji od tri
sloja. Krajnji slojevi su provodni, a sloj u sredini je dialektrik.
Anifuse se postavlja izmeñu dva žičana segmenta, kao što je to
prikazano na Sl. 4c. Neprogramiran, dalektrik izoluje provodne
slojeve; programiran, on postaje permanentni spoj male otpornosti.
Programiranje se vrši dovoñenjem visokog napona (od 11 do 20V,
što zavisi od tipa antifusa) na krajeve antifuse-a. Dovoñenje napona
za programiranje se vrši preko dodatnih pass tranzistora, koji moraju
R. Stojanović VHDL i FPGA
______________________________________________________________________
83
da imaju širok kanal, kao bi propustili relativno veliku struju
programiranja (oko 5mA). Glavna prednost anifuse-a su njegove
male dimenzije. Ova prednost je donekle redukovana neizbežnim
pass tranzistorima za programiranje. U poreñenju sa drugim
tehnologijama, antifuse u programiranom stanju ima relativno malu
serijsku otpornost i parazitnu kapacitivnostu. Antifuse je normalno
“otvoren” prekidač, pa se prilikom konfigurisanja kola programiraju
samo oni antifuse-ovi koje treba “zatvoriti”. S obzirom da je kod
tipičnih aplikacija broj “zatvorenih” prekidača mnogo manji od broja
“otvorenih” (tipično broj “zatvorenih” prekidača ne prelazi 2% od
ukupnog broja prekidača u kolu), to programiranje kola koje koristi
antifuse tehnologiju traje kraće od programiranja kola koje koristi
EPROM tehnologiju. Glavni nedostatak antifuse tehnologije je
nemogućnost reprogramiranja. Antifuse tehnologiju se sreće kod
FPGA kola firmi: Actel, Quck Logic i Crosspoint.
2.6 Konfigurisanje FPGA čipova
Način konfigurisanja FPGA čipa biće objašnjen na Alterinoj familiji
FLEX 8000. Ova familija koristi SRAM ćelije za smještaj konfiguracionih
podataka u čip. Ćelije moraju biti napunjene podacima svaki put kada se
uključi napajanje. Proces fizičkog programiranja SRAM ćelija unutar
FLEX 8000 uredjaja se naziva konfiguracija. Nakon konfiguracije FLEX
8000 resetuje njegove registre, omogućuje I/O pinove i počinje izvršenje
programa kao logički uredjaj. Operacija resetovanja je poznata kao
inicijalizacija. Proces konfiguracije i inicijalizacije zajedno se naziva
komandni mod, dok se normalni rad kola “in-circuit”, naziva korisnički
mod.
SRAM tehnologija dozvoljava FLEX 8000 uredjajima da mogu biti
rekonfigurisani “in-circuit” učitavanjem novih konfiguracionih podataka.
R. Stojanović VHDL i FPGA
______________________________________________________________________
84
Rekonfiguracija u relanom vremenu se vrši prevodjenjem uredjaja u
komandni mod preko odgovarajućeg pina uredjaja., učitavanjem drugih
konfiguracionih podataka, reinicijalizacijom uredjaja i vraćanjem na
korisnički mod. Čitav ovaj proces zahtjeva manje od 100 ms. Takodje je
moguće apdejtovanje postojeće konfiguracije, da bi se sačuvala za
naknadnu upotrebu.
Konfiguracija uredjaja može biti bilo automatska po dobijanju
napajanja sistema ili pod kontrolom eksterne logike. Inicijalizacija se
kontroliše preko internog oscilatora ili preko ekstrenog klok signala.
Predvidjeni pin za konfiguraciju uredjaja se koristi za kontrolu početka
konfiguracije i inicijalizacije. Ovo svjstvo upravljanja i korištenja
komandnog moda daje FLEX 8000 familiji izvanrednu fleksibilnost pri
inplementaciji.
Konfiguracija podataka kod FLEX 8000 uredjaja može biti uradjena u
jednoj od šest konfiguracionih šema, koje se biraju u zavisnosti od
aplikacije. Dijele se na pasivne i aktivne šeme. Kod aktivnih
konfiguracionih šema FLEX 8000 upravlja procesom konfiguracije
kontrolišući uredjaje eksterne memorije i inicijalizujući proces. Klok izvor
za sve aktivne konfiguracione šeme je interni oscilator čija je tipična
frekvencija izmedju 2 i 6 MHz. U pasivnim konfiguracionim šemamama
eksterni kontroler upravlja konfiguracijom FLEX 8000 uredjaja koji tada
radi kao slejv. U Tabeli 2.1 je dat pregled mogućih konfiguracionih šema
za ove uredjaje.
R. Stojanović VHDL i FPGA
______________________________________________________________________
85
Tabela 2.1: Pregled mogućih konfiguracionih šema
Konfiguraciona šema Akronim Izvor podataka
Aktivna serijska AS Konfiguracioni
EPROM
Aktivna paralelna gornja APU Paralelni EPROM
Aktivna paralelna donja APD Paralelni EPROM
Pasivna serijska PS Serijski kanal podataka
Pasivna paralelna sinhrona PPS Inteligentni host
Pasivna paralelna
asinhrona
PPA Inteligentni host
Svaki FLEX 8000 uredjaj ima različite zahtjeve za veličinom
konfiguracionih podataka, koji zavise od broja SRAM ćelija u čipu. Tabela
2.2 prikazuje približnu veličinu podataka , izraženu u bitima i Kbitima ,
neophodnu za konfiguraciju FLEX 8000 uredjaja. Ova tabela se koristi za
proračun potrebnog prostora za podatke (npr. memoriski resursi) kod
paralelenog ili serijskog izvora podataka u sistemima kod kojih je
inkorporiran FLEX 8000 uredjaj.
R. Stojanović VHDL i FPGA
______________________________________________________________________
86
Tabela 2.2: Veličina konfiguracionih podataka za familiju FLEX 8000
Uredjaj Veličina podataka
(bit)
Veličina podataka
(Kbit)
EPF8282,EPF8282V 40 000 5
EPF8452 64 000 8
EPF8636 96 000 12
EPF8820 128 000 16
EPF81188 192 000 24
EPF81500 250 000 31
2.6.1 Aktivna konfiguracija
Kod ovog tipa konfiguracije FLEX 8000 uredjaj kontroliše cjelokupni
proces konfiguracije i generiše sinhronizacione i kontrolne signale
neophodne za sopstvenu konfiguraciju i inicijalizaciju iz eksterne
memorije. Aktivna serijska (AS) konfiguraciona šema koristi Alterin
konfiguracioni EPROM za smještaj konfiguracionih podataka. Aktivne
paralelne šeme koriste paralelne formate memorije kao što je 32K x 8-bitni
EPROM kao izvore podataka.
2.6.2 Pasivna konfiguracija
Jedna od pasivnih konfiguracionih šema će biti korištena i u ovom
radu pa će ovaj način konfiguracije biti nešto detaljnije objašnjen. U
pasivnoj konfiguracionoj šemi FLEX 8000 uredjaj je inkorporiran u sistem
sa inteligentnim hostom koji kontroliše konfiguracioni proces.Host
R. Stojanović VHDL i FPGA
______________________________________________________________________
87
selektuje serijske i paralelne izvore podataka te se podaci prezentuju FPGA
kolu na zajedničkoj sabirnici podataka. U ovakvim sistemima
konfiguracioni podaci mogu biti smješteni u “mass-storage” medijumima ,
kao što je hard disk ili jednostvano učitani putem disketa i sličnih
memoriskih jedinica.
2.6.2.1 Pasivna serijska (PS) konfiguracija
Izbor konfiguracione šeme, u praktičnim aplikacijama, zavisi od
mnogo faktora kao što su prisustvo inteligentnog hosta u sistemu, potreba
za rekonfiguracijom u realnom vremenu, te potreba za periodičnom
instalacijom novih konfiguracionih podataka. Raspoloživi prostor na
štampanoj ploči je takodje bitan pri izboru da li koristiti paralelni ili serijski
EPROM za smještaj podataka.
Kod razvoja prototipova uredjaja, preferira se primjena pasivne
serijske (PS) veze za konfiguraciju jer uz pomoć MAX+PLUS II i Quartus
II programera i odgovrajućeg interfejsa omogućava brzu iterativnu analizu.
Programer može preko interfejsa direktno konfigurisati FLEX 8000
uredjaje na štampanoj ploči prototipa. Osim toga ako je FPGA čip
inkorporiran u sistem sa inteligentnim hostom , on se može upotrebiti za
kontrolu konfiguracionog procesa u jednoj od pasivnih konfiguracionih
šema . Konfiguracija FLEX 8000 može, takodje, biti sinhronizovana sa
inicijalizacijim drugih uredjaja u sistemu.
U aplikacijama, koje zahtjevaju rekonfiguraciju u realnom vremenu
uredjaja najbolji izbor je ponovo pasivna konfiguraciona šema.
Rekonfigurabilnost dozvoljava da se logički resursi iskoriste na drugačiji
način umjesto da se dizajnira druga logika ili koristi više kola u
sistemu.Pasivna konfiguracija lako podržava eventualnu potrebu za više
izvora konfiguracionih podataka koja se može javiti .
R. Stojanović VHDL i FPGA
______________________________________________________________________
88
PS konfiguraciona veza koristi eksterni kontroler za konfiguraciju
FLEX 8000 uredjaja sa serijskim nizom bitova. Pri tome se FPGA čip
tretira kao slejv uredjaj sa petožičanim interfejsom ka eksternom
kontroleru. Eksterni kontroler može biti :
- MAX+PLUS II ili Quartus II programer, korišten zajedno sa PL-
MPU (Master Programming Unit), odgovarajućim adapterom i
FLEX download kablom.
- Inteligentni host kao što je mikrokontroler ili CPU.
- Altera “ByteBlaster kao RS-232 kompatabilni serijski download
kabal.
U našim primjerima korištena konfiguracija sa ByteBlaster kablom.
Podaci se sinhronizuju sa eksternim klokom iz izvora podataka. Pri tome
se koristi i ALTERA MAX+PLUS II ili Quartus II programer. Uredjaj se
konfiguriše sa “SRAM Object File” (.sof) koji se generiše automatski u
toku procesa kompalacije. Pri tome se FLEX uredjaji mogu konfigurisati
kao pojedinačni uredjaji ili višestruki. Slika 2.13 pokazuje principijelnu
šemu veze FLEX 8000 uredjaja za kofiguraciju u PS modu.
Slika 2.13: Šema veze FLEX 8000 za konfiguraciju u PS modu
R. Stojanović VHDL i FPGA
______________________________________________________________________
89
Kao što se vidi na slici kod PS konfiguracije biti podataka su na
DATA0 ulazu sa najmanje značajnim bitom svakog bajta na prvom mjestu.
DCLK strobuje sa visokim inpulsom za lečovanje podataka (slika 2.14).
Kada se srijski prenos podataka završi pin CONF_DONE ide na viši
logički nivo i time indicira da je čip potpuno konfigurisan. Nakon zadnjeg
bajta podataka , DCLK pin mora imati deset klok inpulsa za FLEX 8000
uredjaj da bi bio promjenjen nivo na CONF_DONE i inicirao uredjaj. Na
slici je prikazan vremenski dijagram serijske pasivne konfiguracije FLEX
8000 uredjaja, a u Tabeli 2.3 je dat tajming karakterističnih veličina sa
vremenskog dijagrama.
Slika 2.14: Vremenski dijagram važnijih signala pri konfiguraciji u PS modu.
R. Stojanović VHDL i FPGA
______________________________________________________________________
90
Tabela 2.3: Tajming karakterističnih veličina sa vremenskog dijagrama
Simbol Parametar min max jedin.
TCf2CD od nCONFIG nisko do
CONF_DONE nisko
1 Μs
tCF2ST od nCONFIG nisko do nSTATUS
nisko
1 Μs
tCFG nizak nivo nCONFIG 2 Μs
tSTATUS nizak nivo nSTATUS 2,5 Μs
tCF2CK nCONFIG visoko do prve uzlazne
ivice DCLK
5 Μs
tDSU vrijeme setapa prije uzlazne ivice
DCLK
50 Ns
tDH vrijeme zadržavanja podataka
nakon uzlazen ivice DCLK
0 Ns
tCH DCLK na visokom nivou 80 Ns
tCL DCLK na niskom nivou 80 Ns
tCLK Period DCLK 160 Ns
fmax maksimalna frekvencija DCLK 6 MHz
R. Stojanović VHDL i FPGA
______________________________________________________________________
91
2.6.2.2 Rekonfiguracija u kolu
Nakon što FLEX 8000 uredjaj udje u korisnički mod moguće
je zamjeniti konfiguraciju unutar čipa u bilo koje vrijeme. Ovaj proces se
naziva rekonfiguracija u kolu.Novi konfiguracioni podaci se biraju
koristeći jedan od tri metoda, zavisno od konfiguracione šeme:
- u pasivnoj konfiguracionoj vezi drugi fajl može biti učitan iz nekog
memoriskog sistema.
- u AS konfiguracionoj vezi višestruki set konfiguracionih podataka
može biti smješten u jednom ili više serijskih konfiguracionih
EPROM-a. Podaci se koriste sukcesivno.
- u APU i APD konfiguracionim vezama novi konfiguracioni podaci
se selektuju eksternim multipleksiranjem različitih EPROM-a preko
sabirnice podataka ili pomoću kola koje pomoću ofset adresiranja
selektuje različite strane u istom EPROM-u.
S obzirom da SRAM ćelije, koje se koriste za funkcionalno
konfigurisanje kod
FLEX 8000 arhitekture, imaju mogućnost brisanja one mogu biti
reprogramirane bez uklanjanja uredjaja iz kola.
nCONFIG ulaz kontroliše rekonfiguraciju uredjaja. U aktivnim
konfiguracionim vezama nCONFIG pin je vezan na Vcc i forsira čip na
automatsku konfiguraciju kada se uspostavi napajanje sistema. Kod PPA i
PPS konfiguracionih šema kontrolna logika koristi nCONFIG ulaz da
odredi početak konfiguracije, tako da se ovaj pin povezuje na port nekog
inteligentnog hosta koji se koristi za kontrolu konfiguracionog procesa.
Ako je nCONFIG na niskom nivou, konfiguracioni proces se odlaže dokle
je to potrebno. Npr. nCONFIG se drži na niskom nivou u toku sistemske
R. Stojanović VHDL i FPGA
______________________________________________________________________
92
inicijalizacije, a nakon toga prebacuje na visoki nivo i tako omogućava
konfiguraciju FPGA kola.
U bilo koje vrijeme u toku sistemskih operacija bez obzira na trenutno
stanje FPGA kola nCONFIG pin može biti iskorišten za restart
konfiguracionog procesa. Kada se nCONFIG pin prebaci na nizak nivo, a
onda ponovo na visok uredjaj se resetuje i pripremi za konfigurisanje. U
aktivnoj konfiguracionoj šemi, nakon ovoga uredjaj trenutno počinje sa
prijemom podataka iz eksternog EPROM-a, dok kod pasivne šeme on je
spreman za prijem podataka iz inteligentnog hosta.
Svi unešeni i registrovani podaci u toku rada će biti izgubljeni u toku
rekonfiguracije, tako da bilo koja vrijednost kauntera ili tekuće stanje
uredjaja koje se želi sačuvati mora biti smješteno bilo u memoriju hosta ili
u neko eksterno kolo kao što je Alterin EPLD. Čitav rekonfiguracioni
proces zahtjeva oko 100 ms. Sistem nastavlja normalne operacije nakon što
čip promjeni stanje na CONF_DONE pinu i time indicira da je
inicijalizacija kompletirana.
2.6.2.3 Programiranje
Za programiranje FPGA čipova koristeći SP mod je neophodan
odgovarajući interfejs. Altera je proizvela za ovu namjenu “ByteBlasterMV
Paralel Port Download Cable”, koji se koristi kao interfejs za programiranje
većine Alterinih familija kola, slika 2.15. “ByteBlasterMV” kabal ima 25-
to pinski muški heder za konekciju na PC pralelni port i 10-to pinski ženski
port za konekciju na štampanu ploču. Izabran je PS način konfiguracije i
nezavisna konfiguracija za svako kolo, tako da je na štampanoj ploči
predvidjen nezavistan priključak za svako FPGA kolo.
R. Stojanović VHDL i FPGA
______________________________________________________________________
93
Slika 2.15: Principijelna šema Byte Blastera MV.
U Tabeli 2.4 je dat raspored pinova za 25-to pinski konektor u PS
modu konekcije, sa nazivima signala .
Tabela 2.4: Raspored pinova za 25-to pinski konektor.
Pin Naziv signala u PS modu
2 DCLK
3 nCONFIG
8 DATA0
11 CONFIG_DONE
13 nSTATUS
15 VCC
18 do 25 GND
R. Stojanović VHDL i FPGA
______________________________________________________________________
94
U narednoj Tabeli 2.5 je raspored pinva za 10-to pinski konektor, sa
nazivima signala i njihovim opisom za PS konfiguracioni mod.
Tabela 2.5: Raspored pinova za 10-to pinski konektor
Pin Naziv signala Opis
1 DCLK Klok signal
2 GND Masa
3 CONF_DONE Kontrola konfiguracije
4 VCC Napajanje
5 nCONFIG Kontrola konfiguracije
6 --- Nije spojen
7 nSTATUS Konfiguracioni status
8 --- Nije spojen
9 DATA0 Konfiguracioni podaci
10 GND Masa
Nakon kompajliranja željenog fajla Alterin alat automatski generiše
SRAM Objekt File (.sof) za FLEX 10K i FLEX 8000 uredjaje ili
Programmer Object File (.pof) za MAX 9000 uredjaje. Ovim fajlovima se
konfigurišu FPGA kola. “ByteBlasterMV” kabal se spaja na paralelni port
PC-a i sa 10-pinskim krajem na štampanu ploču uredjaja koji se razvija.
Napajanje se obezbjedjuje preko štampane ploče.
Ovdje treba napomenuti da je i Cyclone seriju primenljiv isti način SP
i SA konfiguracije.
R. Stojanović VHDL i FPGA
______________________________________________________________________
95
3. Quartus II – Upustvo
3.1 Uvod
Postoji više komercijalnih alata za projektovanje digitalnih sistema
baziranim na PLD kolima. Većina proizvoñača posjeduje sopstveni alat,
prilagoñen svojoj familiji čipova. Laboratorija za primenjenu elektroniku,
Elektrotehničkog Fakulteta u Podgorici, već duže vrijeme radi na Alterinoj
platformi, koristeći, prvobitno, MAX+PLUS II, a u novije vrijeme Quartus
II koji se smatra njegovim naslednikom. Medjutim, Altera je omogućila
jednostavnu migraciju sa MAX+PLUS II na Qaurtus II kako bi se korisnici
prethodnog paketa mogli što jednostavnije prilagoditi.
U ovom poglavlju dato je upustvo za korišćenje Quartus II alata i to od
kreiranja projekta, njegovog unošenja putem koda ili šeme, kompajliranja,
simulacije, zaključno sa dodeljivanjem pinova i konfigurisanjem
(programiranjem) izabranog čipa. Tekst je pojednostavljen i namijenjen je
prije svega studentima Elektrotetrotehničkog fakulteta (svi odsjeci), a mogu
ga koristiti i ostali koje se bave ovom problematikom. U predvidjenom
obimu nije bilo moguće elaborirati sve osobine ovog paketa, pa se za
potrebe naprednog učenja preporučuju resursi proizvodjača
(www.altera.com) kao i navedena literatura u štampanoj i elektronskoj
formi.
3.2 Postupak instalacije i pokretanja Quartus II programskog paketa
Instalacioni fajl Quartus II programskog paketa besplatno se može
download-ovati sa website-a proizvoñača (www.altera.com). Postupak
instalacije zahtijeva standardnu proceduru. Instalacioni fajl se startuje
dvostrukim klikom lijevog tastera miša nakon čega se pojavi Wizard koji
R. Stojanović VHDL i FPGA
______________________________________________________________________
96
će korisnika provesti kroz standardni postupak instalacije. Preporučuje se
da se na svakom mjestu gde je potrebno napraviti bilo kakav izbor, odabere
default-na vrendnost.
Nakon instalacije Quartus II programskog paketa, potrebno je izvršiti
njegovu registraciju. Sa istog website se može skinuti besplatna licenca
(Web edition). Postupak preuzimanja licence zahteva registracju korisnika.
Potrebno je ispoštovati uputstva koja nalaže proizvoñač. Pored standardnih
podataka zahtijeva se i odgovarajući „NIC number“, slika 3.1.
Slika 3. 1: NIC number.
Da bi se došlo do tog broja u MS DOS promptu otkucamo odgovarajuću
naredbu, slika 3.2, i identifikujemo “NIC number” kao fizičku adresu
Ethernet adapter-a na našem računaru. U datom primjeru taj broj se
poklapa sa 00C04FA392EF.
Slika 3.2: Identifikovanje NIC broja u postupku licenciranja Quartus II
programa.
R. Stojanović VHDL i FPGA
______________________________________________________________________
97
Nakon odradjene procedure Altera šalje polugodišnju besplatnu licencu
na e-mail koji je korisnik naznačio. Licenca je u obliku *.dat fajla i
potrebno ju je smjestiti u jedan od naših direktorijuma. Obično ime licence
asocira na „NIC broj“, koji se iz praktičnih razloga može preimenovati u
cilju bližeg opisa, npr. „moja_licenca_quartus.dat“.
Dvostrukim klikom lijevog tastera miša na ikonu programa, pokreće se
Quartus II, nakon čega se pojavljuje korisnički interfejs prikazan na slici
3.3, koji nas pri prvom startovanju ili poslije isteka licence upozorava na
potrebu njenog instaliranja/obnavljanja.
Slika 3.3: Pokretanje Quartus II programa.
Izaberite opciju “Specify valid license file” i povežite odgovarajući fajl,
slika 3.4, nakon čega možemo vidjeti parametere licence i vrijeme njenog
trajanja, slika 3.5. Licenca se može promijeniti ili instalirati i nakon prvog
startovanja. To se postiže odabirom opcije Tools ->License Setup.
R. Stojanović VHDL i FPGA
______________________________________________________________________
98
Slika 3.4: Specificiranje licence fajla.
Slika 3.5: Parametri licence (trajanje…).
Nakon instaliranja licence i potvrde sa OK Quartus je spreman za rad.
R. Stojanović VHDL i FPGA
______________________________________________________________________
99
3.3 Kreiranje projekta
Da bi se kreirao novi projekat potrebno je pratiti sledeću proceduru.
Iz File menija, slika 3.6, izabere se opcija File->New Project Wizard.
Pojaviće se New Project Wizard: Introduction, koji vas vodi kroz
proceduru kreiranja novog projekta. Pošto je samo informativnog
karaktera Introduction treba ukloniti za buduća pojavljivanja izborom
„Don’t show me this introduction again”. Prelazimo na sledeći korak
izborom Next.
Slika 3.6: Startovanje Project Wizarda.
Prelazimo na naredni korak kreiranja projekta, slika 3.7. U ovom dijelu
potrebno je specificirati direktrorijum u kojem želimo da smjestimo
projekat, ime projekta kao i „top level design entity“, što predstavlja ime
dizajna koji predstavlja najviši hijerarhijski nivo u okviru projekta. Po
default-u dva zadnja imena su identična. Nakon specificiranja ovih
parametara klikom na dugme Next prelazi se na naredni korak.
R. Stojanović VHDL i FPGA
______________________________________________________________________
100
Slika 3.7: Specificiranje direktorijuma, imena projekta i “vrha” dizajna.
Otvara se prozor prikazan na slici 3.8 preko koga je moguće projektu
dodati fajlove koji već postoje (koji su npr. kreirani u okviru nekog drugog
projekta) i priključiti korisničke biblioteke. Na ovom nivou učenja nećemo
dodavati druge fajlove i odmah prelazimo na sledeći prozor, klikom na
Next.
R. Stojanović VHDL i FPGA
______________________________________________________________________
101
Slika 3.8: Dodavanje fajlova projektu.
Prozor koji se otvara je prikazan na slici 3.9. Ovdje je potrebno
specificirati familiju i tip FPGA kola u kojem se želi fizički implementirati
projekat. Familiju se bira u boxu Family, npr. FLEX 10K. Automatski se
izvršava popunjavanje polja sa raspoloživih čipova unutar date familije.
Ako korisnik želi da zada tip programabilnog kola, neophodno je da setuje
opciju “Specific device selected” in “Available devices” list. Ukoliko
korisnik, pak, tek treba da se odluči po pitanju izbora adekvatnog kola, npr.
na osnovu rezultata simulacija, može setovati opciju “Auto devices selected
by the Fitter”, čime će odluka o izboru konkretnog kola iz specificirane
familije biti ostavljena kompajleru, koji će o tome odlučiti na osnovu
složenosti dizajna. U našem slučaju smo izabrali Alterinu FLEX10K
familiju, čip EPF10K70RC240-4.
Sledećim klikom na Next otvara se prozor na slici 3.10 koji
omogućava korišćenje naprednijih tehnika u razvoju sistema, a koje se neće
R. Stojanović VHDL i FPGA
______________________________________________________________________
102
koristiti na ovom nivou. Nastavlja se sa Next i pojavljuje se poslednji
prozor Summary u kojem su izlistani parametri projekta, definisani pri
njegovom formiranju. Ukoliko korisnik želi da promeni bilo koji od ovih
parametara, to može učiniti pomoću Back. Ako nama potrebe za
promenom parametara, proces formiranja projekta se završava klikom na
Finish.
Slika 3.9: Izbor familije FPGA čipova i konkretnog čipa.
R. Stojanović VHDL i FPGA
______________________________________________________________________
103
Slika 3.10: Mogućnost izbora naprednih opcija.
3.4 Unos projekta opisanog VHDL kodom
Prije unosa projekta opisanog VHDL kodom potrebno je formirati
textualni fajl koji će sadžati odgovarajući program. Kreiranje VHDL fajla
se vrši opcijom File->New, slika 3.11 (lijevo), nakon čega se pojavljuje
prozor sa nazivom New prikazan na slici 3.11 (desno). U okviru ovog
prozora je potrebno selektovati opciju VHDL File sa taba Device Design
Files, i klikom na dugme OK preći u tektualni editor i uobičajeni fajl
„Vhdl1.vhd“, slika 3.12 . Ovaj fajl je potrebno snimiti pod željenim
imenom (takoñe sa ekstenzijom „.vhd“) na željenu lokaciju izborom opcije
menija File->Save As, slika 3.13. U našem slučaju fajl će biti sačuvan pod
imenom haff_adder.vhd što se poklapa sa imenom entiteta haff_adder.
R. Stojanović VHDL i FPGA
______________________________________________________________________
104
Slika 3.11: Kreiranje VHDL fajla.
Slika 3.12: Prazni editor .vhdl fajla.
R. Stojanović VHDL i FPGA
______________________________________________________________________
105
Slika 3.13: Snimanje .vhd fajla pod novim imenom (obično ime projekta).
Sada je sve spremno za unos VHDL koda u skladu sa projektinim
zadatkom, u našem slučaju kod polu-sabirača, half_adder, slika 3.14. Po
završetku unosa, dizajn je neophodno snimiti, opcija File -> Save. Još
jednom treba primijetiti da su imena entiteta i ime .vhd fajla medjusobno
identična.
R. Stojanović VHDL i FPGA
______________________________________________________________________
106
.
Slika 3.14: Primjer unesenog VHDL koda half_adder.vhd.
3.5 Kompajliranje (prevodjenje) projekta
Sledeći korak je kompajliranje projekta. U tu svrhu se koristi Quartus II
Compiler Tool. Postupkom kompajliranja se vrši provjera sintakse koda,
dodjela i povezivanje raspoloživih resursa programabilnog kola
(specificiranog u postupku formiranja projekta), kao i formiranje fajlova
koji će biti potrebni za postupak simulacije, vremenske analize signala i
konfigurisanja (programiranja kola). Tu je i veliki broj izvještaja (reporta).
Prije samog prevoñenja dizajna potrebno je izborom opcije menija Project
-> Set as Top-Level Entity postaviti dizajn koji treba prevesti na najviši
hijerarhijski nivo (jer u opštem slučaju sistem se može sastojati od više
VHDL fajlova, a prevodilac prevodi onaj fajl koji je postavljen na najviši
hijerarhijski nivo). U našem slučaju, pošto se radi o jednom fajlu, on je
automatski postavljen na najviši hijararhijski nivo.
R. Stojanović VHDL i FPGA
______________________________________________________________________
107
Kompajliranje se startuje izborom opcije Processing -> Start
Compalation, ili ikone nakon čega se može pratiti njegov tok, slika
3.15. Tokom trajanja postupka prevoñenja, u prozoru Processing koji se
nalazi ispod prozora prevodioca ispisuju se odgovarajuće informacije o
postupku prevoñenja (Info), upozorenja (Warning) i greške (Error) ukoliko
postoje. Da bi projekat bio uspešno preveden, neophodno je da nakon
prevoñenja u prozoru Processing ne bude ispisana nijedna greška (Error).
U slučaju pojave grešaka, u prozoru Processing se ispisuje i komentar koji
upućuje projektanta na mesto i uzrok greške u VHDL kodu. U tom slučaju
je neophodno da projektant na osnovu tog komentara ispravi grešku (ili
više njih) i da potom ponovo snimi ispravljeni dizajn (opcija iz menija File
-> Save) i da ponovi postupak prevoñenja. Nakon uspješnog prevoñenja
projekta (tj. bez grešaka), otvara se prozor sa porukom „Full Compilation
was successful“. Klikom na prozor Compilation report prelazimo na seriju
izvještaja, kao što su iskorišteni hardverski resursi, broj pinova, vremenska
analiza uzeta u obzir itd., slika 3.16.
Slika 3.15: Prozor Quartus-a u fazi kompajliranja i poruka da je program
uspješno kompajliran.
R. Stojanović VHDL i FPGA
______________________________________________________________________
108
Slika 3.16: Compiler report prozor.
3.6 Simulacija projekta
Simulacija ima za cilj provjeru funkcionalne ispravnosti projekta.
Rezultati simulacije bliži su stvarnom stanju ukoliko je uzeto više
parametara u obzir (kašnjenja, gličevi itd.). Na samom početku je potrebno
definisati simulacioni fajl u kojem se specificiraju vremenski oblici ulaznih
signala kao i unutrašnji ili izlazni signali koje želimo da posmatramo
(takozvani Vaveform file). Takodje, možemo definisati, vrijeme trajanja
simulacije, frekvenciju kloka, uzimanje realnih kašnjenja itd.. Potom se
startuje proces simulacije i analiziraju dobijeni rezultati. U slučaju da se
utvrdi da u dizajnu postoji greška, npr. da je dizajn funkcionalno
neispravan, potrebno je izvršiti odgovarajuće modifikacije u VHDL kodu
ili šemi sa ciljem otklanjanja grešaka i ponoviti postupak kompajlacije i
simulacije sve dok se ne dobiju željeni rezultati.
Definisanje simulacione datoteke se vrši pomoću editora vremenskih
oblika ulaznih signala. Postupak započinje kreiranjem novog Vector
Waveform fajla, izborom opcije menija File -> New, nakon čega se
R. Stojanović VHDL i FPGA
______________________________________________________________________
109
pojavljuje prozor sa nazivom New prikazan na slici 3.17. U okviru ovog
prozora je potrebno selektovati opciju Vector Waveform File sa taba Other
Files, i klikom na dugme OK otvoriti prozor prikazan na slici 3.18. Dati
prozor sadrži fajl sa ekstenzijom „.vwf“ i uobičajenim imenom
Vaweform1.vwf. Ovaj fajl je potrebno snimiti, pod imenom koje se poklapa
sa „.vhd“ fajlom, opcija File - > Save As. Na taj način smo došli do fajla
half_adder.vwf, slika 3.19.
Slika 3.17: Izbor fajla za simulaciju.
R. Stojanović VHDL i FPGA
______________________________________________________________________
110
Slika 3.18: .vwf fajl – editor talasnih oblika U-I signala.
3.19: .vwf fajla pod imenom projekta opisanog u VHDLu, izbor signala.
Zatim je potrebno izabrati signale (ulazne, unutrašnje i izlazne) koji
će biti simulirani. Izbor signala se vrši na sledeći način. Dvostrukim klikom
na kolonu Name ili Value at u prozoru sa slike 3.19, otvara se novi prozor
prikazan na slici 3.20 (Insert Node or Bus). Ukoliko poznajete ime svakog
od pinova u polje Name ih možete ukucati, meñutim mnogo lakši način je
kliknuti na dugme Node Finder nakon čega se otvara prozor prikazan na
slici 3.21. Opciju Filter treba zatim podesiti na Pins:all, i kliknuti na dugme
List čime se popunjava kolona Nodes Found svim raspoloživim signalima
R. Stojanović VHDL i FPGA
______________________________________________________________________
111
za simulaciju u skladu sa izabranom opcijom filtera, slika 3.22. Zatim je
potrebno izabrati signale koji će biti simulirani i prebaciti ih u polje
Selected Nodes (klikom na dugme ’>’, ’<’, ’ >>’ ili ’<<’ se može vršiti
prebacivanje signala iz polja Nodes Found u polje Selected Node, i
obratno), slika 3.23. Nakon što su u polje Selected Nodes prebačeni svi
signali koje je potrebno simulirati, klikom na dugme OK prozora Node
Finder i klikom na dugme OK prozora Insert Node or Bus se završava
specifikacija signala koji će biti simulirani i otvara prozor na slici 3.24.
Slika 3.20: Interfejs za unos pinova u simulacioni fajl.
Slika 3.21: Prozor za automatsko nalaženje željenih pinova.
R. Stojanović VHDL i FPGA
______________________________________________________________________
112
Slika 3.22: Popunjavanje kolone Nodes Found sa raspoloživim pinovima.
Slika 3.23: Selektovanje pinova koji će se koristiti u procesu simulacije.
R. Stojanović VHDL i FPGA
______________________________________________________________________
113
Slika 3.24: Izgled prozora za simulaciju prije zadavanja talasnih oblika ulaznih
signala.
Prije početka zadavanja talasnih oblika signala može se specificirati
vremenski interval u kome se vrši simulacija. Uobičajeno on iznosi 100ns.
Najpre se izborom opcije menija Edit -> End Time otvara prozor End
Time, slika 3.25, u okviru kojeg je u polju Time potrebno zadati trajanje
vremenskog intervala za koji će se vršiti simulacija, u našem slučaju 10us, i
potvrditi izbor klikom na dugme OK. Zatim se izborom opcije menija Edit
-> Grid Size otvara prozor Grid Size, slika 3.26, u okviru kojeg se zadaje
vremenski interval za trajanje Grid-a (razmak izmeñu vertikalnih linija koje
predstavljaju minimalni vremenski korak za predstojeće zadavanje
vrednosti ulaznim signalima) na simulacionom dijagramu, koji se potvrñuje
klikom na dugme OK. Da bismo vidjeli kompletnu novu vremensku
podjelu treba izabrati View -> Fit in Window , slika 3.27
R. Stojanović VHDL i FPGA
______________________________________________________________________
114
Slika 3.25: Izbor trajanja simulacije (end time).
Slika 3.26: Vremenski interval podjele (grida).
R. Stojanović VHDL i FPGA
______________________________________________________________________
115
Slika 3.27: Smještanje cjelokupnog vremena trajanja simulacije u jednom
prozoru.
Zadavanje željene vrednosti nekom ulaznom signalu se može izvršiti u
čitavom intervalu, lijevim klikom na Name ili Value at, slika 3.28, pri čemu
se interval osjenči. Zatim se predje na toolbar sa vrijednostima signala i
klikom na ikonu ‘0’, ‘1’… zada njegova vrijednost. Zadavanje na dijelu
intervala se obavlja prevlačenjem kursorom uz pritisnuti lijevi taster, čime
se taj interval selektuje. Na taj način su selektovane i zadate vrijednosti
signala x i y na slici 3.29. Ukoliko je ulazni signal vektorskog tipa,
vrijednost mu se za željeni interval vremena može zadati na sličan način
klikom na ikonu ‘?’ čime se otvara prozor Arbitrary Value u okviru kojeg
je potrebno specificirati Radix (Unsigned Decimal, Signed Decimal,
Hexadecimal, Octal, Binary,...) i vrijednost signala, koja se potom
potvrñuje klikom na dugme OK. Ukoliko ulazni signal treba da bude signal
takta, najlakši način za njegovo specificiranje je selektovanjem signala
klikom na njegovo ime (lijevo od kolone Name u prozoru simulacionog
dijagrama), zatim klikom na ikonu ‘C’ čime se otvara prozor Count Value
na čijoj kartici Timing se izborom opcije At absolute times i zadavanjem
vrijednosti Count every i Multiplied by zadaje interval promene vrijednosti
signala (jednak proizvodu vrijednosti Count every i Multiplied by). Na
R. Stojanović VHDL i FPGA
______________________________________________________________________
116
sličan način je moguće zadati i vrijednosti signala vektorskog tipa čija
vrijednost se povećava ili smanjuje za fiksnu vrijednost koraka (zadatu u
polju Increment by na kartici Counting u prozoru Count Value), pri čemu je
interval promjene vrijednosti signala zadat na način kao što je to već
opisano (podešavanjem odgovarajućih vrijednosti na kartici Timing). Radix
svakog signala ponaosob u simulacionom dijagramu se može specificirati
ili modifikovati po potrebi i na sledeći način: desnim klikom mišem na ime
signala u koloni Name i izborom opcije Properties otvara se prozor Node
Properties u okviru koga treba u polju Radix selektovati željenu opciju
(Unsigned Decimal, Signed Decimal, Hexadecimal, Octal, Binary,...).
Slika 3.28: Žadavanje željene vrijednosti signala na čitavom intervalu.
R. Stojanović VHDL i FPGA
______________________________________________________________________
117
Slika 3.29: Zadavanje željene vrijednosti na pojedinim intervalima selektovanog
signala.
Nakon što su specificirane vrednosti ulaznih signala, sama simulacija
se pokreće izborom opcije menija Processing -> Start simulation, slika
3.30, nakon čega se otvara prozor prikazan na slici 3.31. I ovaj prozor kao
u slučaju kompajliranja sadrži mnoštvo dodatnih informacija: Reporti
(Reports), Poruke (Message), Greške (Error) itd.
Slika 3.30: Startovanje simulacije iz glavnog menija.
R. Stojanović VHDL i FPGA
______________________________________________________________________
118
Slika 3.31: Uspješan završetak simulacije
Po završetku simulacije pojavljuje se prozor sa porukom Simulator
was successful, u slučaju da je simulacija prošla uspešno, ili suprotno. U
našem slučaju simulacija daje rezultate date na slici 3.32, poslije View->Fit
in window.
Slika 3.32: Rezultat simulacije.
Poslije izvršene simulacije i provjere vjerodostojnosti rezultata,
projektant može biti upoznat sa karakteristikama svoga projekta putem
velikog broja izvještaja i dodatnih funkcija u okviru odgovarajućih menija.
R. Stojanović VHDL i FPGA
______________________________________________________________________
119
Takodje, dodatnom analizom grafika, npr. poslije zumiranja – View->
Zoom in, može se uočiti odgovarajuće kašnjenje. Na slici 3.33 se vidi da
izlaz result kasni (približno 20ns) u odnosu na promjene ulaza x i y.
Slika 3.33: Detekcija kašnjenja.
Quartus II uključuje alat kojim se može prikazati šema kola opisanog
VHDL kodom. Šema je na RTL nivou, a alat koji se koristi nosi naziv RTL
Viewer. Izaberite Tools->Netlist Viewers->RTL Viewer i dobićete izgled
kola kao na slici 3.34, što predstavlja električnu šemu polu sabirača
(half_adder) na nivou logičkih ćelija. Ova opcija je posebno dobra kada se
dodatno želi provjeriti kolo kao i otkriti neke od grešaka koje lakše
možemo detektovati na šematskom nivou (kao nedostajući elementi,
pogrešne konekcije itd).
R. Stojanović VHDL i FPGA
______________________________________________________________________
120
Slika 3.34: Šema kola na RTL nivou upotrebom RTL Viewer-a
3.7 Kreiranje simbola
Nakon izvršene simulacije i provjere funkcionalnosti projekta može se
napraviti poseban blok (simbol) koji će se kasnije upotrijebljavati unutar
složenijih projekata kao jedna od sastavnih komponenti. Treba napomenuti
da je na ovaj način kreirana komponenta potpuno ravnopravna sa onima
koje se nalaze u pripadajućim bibliotekama U našem slučaju to će biti
simbol „half_adder“, koji će podsjećati na blok sa 3 ulaza i 2 izlaza i iza
koje se „krije“ provjereni VHDL kod. Formiranje simbola obavljamo iz
glavnog menija sa File->Create->Update>Create Symbol for Current
File, slika 3.35. Ako je sve o redu, pojaviće se poruka Create Symbol file
was successful, slika 3.36. Treba napomenuti da simbol može posjedovati
unošenje parametara (u posebnom prozoru), npr. dužinu vektora ulaznih
podataka, frekvenciju kloka, što je veoma podesno u postupku testiranja.
R. Stojanović VHDL i FPGA
______________________________________________________________________
121
Slika 3.35: Postupak kreiranja simbola
Slika 3.36: Poruka koja ukazuje da je simbol uspješno kreiran.
R. Stojanović VHDL i FPGA
______________________________________________________________________
122
3.8 Unos šematskog projekta
Obično, za studente kao i profesionalne projektante šematsko
projektovanje predstavlja prirodniji način zbog toga što tokom svoga
školovanja postaju familijarni sa velikim brojem aktivnih i pasivnih
komponenti koje komponuju u složenije šeme. Npr. jedan pojačavač ili
filtar može se predstaviti kao kolo u kojem su šematski vezani operacioni
pojačavači, otpornici i kondenzatori. Quartus II sa velikim brojem svojih
biblioteka i simbola od najednostavnijih gejtova do megafunkcija pruža
moćnu platformu za ovaj način projektovanja ali u domenu digitalnih kola.
Slika 1, primjer x, pokazuje kako se puni sabirač (full_adder) može
napraviti pomoću dva polu-sabirača (half_adder) i jednog ex_ili kola (xor).
Na tom primjeru će biti pokazano kako se kreira projekat u šemetskom
okruženju.
Otvaranje projekta se obavlja na isti način kao što je opisano u 3.3.
Njegov naziv je full_adder, a izabrano je isto FPGA kolo kao u
prethodnom slučaju. Sada je umjesto .vhd fajla potrebno formirati šematski
fajl. To se postiže iz glavnog menija opcijom File->New i izborom Block
Diagram/Schematic File, slika 3.37..
R. Stojanović VHDL i FPGA
______________________________________________________________________
123
Slika 3.37: Izbor šematskog fajla.
Pojaviće se šematski editor sa uobičajenim “Block1.bdf” fajlom, pri
čemu .bdf asocira na “blok dijagram fajl” , slika 3.38. Fajl ćemo snimiti
pod imenom koje se poklapa sa imenom projekta, full_adder.bdf, slika
3.39. Sada je sve spremno za unošenje odgovarajuće šeme.
Slika 3.38: Grafički editor za šematski unos.
R. Stojanović VHDL i FPGA
______________________________________________________________________
124
Slika 3.39: Snimanje .bdf fajla pod imenom projekta.
Duplim klikom na grafički editor pojaviće se prozor sa bibliotekama
ili kreiranim simbolima. U direktorijumu Project nalazi se prethodno
kreirani simbol half_adder kojeg ćemo selektovati a potom potvrdom na
OK prebaciti u grafički editor, slika 3.40. Na isti način smjestićemo i drugi
half_adder, slika 3.41. Potrebno je napomenuti da se drugi half_adder
može dobiti jednostavnim kopiranjem prvog (selektovanje prvoga, desni
klik, copy, biranje pozicije, desni klik, paste).
R. Stojanović VHDL i FPGA
______________________________________________________________________
125
Slika 3.40. Selektovanje simbola half_adder.
Slika 3.41. Dva simbola half_adder u grafičkom editoru.
Potrebno ex_ili kolo ćemo izabrati iz ponudjene Alterine biblioteke
primitives koja sadrži sva prosta logička kola kao što su i, ili, ni, nili, ex-ili
itd, slika 3.42. Kada smo izabrali i smjestili dva half_addera i jedno ex_ili
kolo dolazimo do ulaznih i izlaznih pinova. Ulazni pinovi se označavaju
R. Stojanović VHDL i FPGA
______________________________________________________________________
126
kao input, slika 3.43, a izlazni kao output. Klikom na pin_name editujemo
naziv pina, npr. A,B, CARRY_IN, SUM itd. Nakon što su potrebna kola
postavljena na radnu površinu, sada ih je potrebno povezati. Pokazivač
miša je potrebno dovesti do početne tačke koju je potrebno povezati. Tada
kursor promijeni oblik (njegov oblik postane znak „+“ i oznaka koja
asocira na spajanje). Potom se kursor miš povlači prema krajnjoj tački,
slika 3.44. Kada se kursor približi odgovarajućoj tački ili pinu na njemu se
pojavi mali kvadrat koji označava da je njegova veza sa provodnikom
uspostalvjena. Oslobadjenjem tastera uspostavlja se veza. Na slici 3.45 dat
je prikaz povezanih komponenti. Ukoliko je odreñenu vezu potrebno
izbrisati, lijevim tasterom miša potrebno je kliknuti na nju nakon čega ona
promeni boju u odredjenom segmentu. Pritiskom na taster Delete veza se
briše.
Slika 3.42: Izbor ex_or kola iz biblioteke primitives.
R. Stojanović VHDL i FPGA
______________________________________________________________________
127
Slika 3.43: Ulazni pin.
Slika 3.44: Postupak povezivanja elemenata šeme.
R. Stojanović VHDL i FPGA
______________________________________________________________________
128
Slika 3.45: Kompletirana šema u grafičkom editoru.
Kreirani fajl je potrebno snimiti. Kao što je prethodno rečeno fajl treba
snimiti sa istim imenom projekta. Imenovanje fajla istim imenom kao i
projekat označava da je taj fajl prvi i najviši na hijerarhijskoj lestvici (top
level design entity). Šta ovo znači?
Svaki projekat može sadržati više design file-ova. Na primer, recimo da
je u jednom fajlu realizovan multiplekser 2na1, i neka je taj fajl snimljen
pod nazivom mux_2_1. Pretpostavimo da sad ovaj multiplekser treba
iskoristiti za realizaciju nekog složenijeg kola (recimo multiplekser 4na1).
Dakle, multiplekser 4na1 „sadrži“ multiplekser 2na1. Recimo da je cilj
projekta bio realizacija multipleksera 4na1. Multiplekser 4na1 se u
konkretnom projektu nece korisiti za realiaciju nekog novog dizajna. Dakle
multiplekser 4na1 je najviši na dizajnerskoj hijerajhijskoj lestvici, tj. on je
„top level design entity“.
Projekat iz ovog primera je prilično jednostavan, sadrži samo jedan file,
pa on mora da ima isti naziv kao i sam projekat.
Nakon unošenja šeme i definisanje projekta slijedi njegovo
kompajliranje. Ono se obavlja na potpuno identičan način kao u slučaju
kodnog unosa. Isto važi i za postupak simulacije i pridruživanja pinova.
Slika 3.46 daje rezultate simulacije za kolo punog sabirača.
R. Stojanović VHDL i FPGA
______________________________________________________________________
129
Slika 3.46: Simulacija punog-sabirača projektovanog u grafičkom editoru.
R. Stojanović VHDL i FPGA
______________________________________________________________________
130
3.9 Pridruživanje pinova i konfigurisanje FPGA čipa
Sledeći primjer pokazuje kako se odredjeno digitalno kolo možemo
fizički implementirati u FPGA čipu i na taj način napraviti „svoj čip“ koji
će obavljati odredjenu funkciju. Zadatak je napraviti četvorobitni brojač
koji se pogoni klokom od 1Hz ili 2Hz u zavisnosti od statusa pina
sel_speed, slika 3.47. Signal 2Hz se dobija dijeljenjem clk signala 48MHz,
a potom se isti prosledjuje direktno na ulaz brojača ili dodatno dijeli sa 2 da
bi se dobio klok od 1s. Na izlaz brojača out[3..0] vezane su led diode kako
bi se vizuelno prikazala promjena njegovog sadržaja. Upaljena LED dioda
odgovara logičkoj „1“ odgovarajućeg izlaznog bita. Ulazni i izlazni signali
su pridruženi odgovarajućim pinovima FPGA kola. Stanja ulaznih signala,
sel_speed, en i rst, osim clk, se zadaju DIP SWITCHOM SW3 i tasterom
PBSWITCH_5.
Čip EP1C6Q240C8, kao i ostale periferije, se nalazi na Alterinoj
razvojnoj ploči UP3. Čip EP1C6Q240C8 je velikog kapaciteta (5920 LCs)
sa velikim brojem pinova (240 od kojih upotrebljivo 185) RAM
memorijom (92160 bita) i dva PLL kola .
Slika 3.47: Četvoro-bitni broja č pogonjen klokom 1Hz ili 2Hz.
R. Stojanović VHDL i FPGA
______________________________________________________________________
131
Da bi se riješio dati problem trebe povezati sistem kao na slici 3.48.
ByteBlaster kabal služi za konfigurisanje (programiranje) FPGA čipa i
povezuje se na paralelni port računara, a sa strane UP3 ploče na JTAG
konektor. Jednosmerni napon se dovodi na power konektor (DC). Nakon
uključivanja sistem je spreman za rad.
Slika 3.48 Prikaz interfejsa za dodelu pinova.
Potrebno je u VHDLu napraviti dva bloka (simbola) clk_div i
counter i to u package formi, listinzi dati u sledećem tekstu. Clk_div ima
promjenljiv parameter N, a counter word_lenght.
-------------------------clk divider-----------------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- --------
entity clk_div is
generic(N:integer:=2);
port
R. Stojanović VHDL i FPGA
______________________________________________________________________
132
( clk: in std_logic;
clk_new : out std_logic);
end clk_div;
--------------------------------------------------- --------
architecture clk_div_behav of clk_div is
signal clk_temp : std_logic;
signal temp : integer range 0 to N-1;
begin
process(clk, clk_temp)
begin
if(clk'event and clk='0') then
if(temp=N/2-1)then
temp<=temp+1;
clk_temp<='1';
elsif (temp=N-1) then
temp <= 0;
clk_temp<='0';
else
temp<=temp+1;
end if;
clk_new<=clk_temp;
end if;
end process;
end clk_div_behav;
--------------------------------------------------- ------
Library Ieee;
Use ieee.std_logic_1164.all;
R. Stojanović VHDL i FPGA
______________________________________________________________________
133
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- -------
package clk_div_package is
component clk_div
generic(N:integer:=2);
port
( clk : in std_logic;
clk_new : out std_logic);
end component;
end clk_div_package;
---------- Counter ----------------------------------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
entity counter is
generic(word_length : integer:=4);
port(
clk, en, rst : in std_logic;
output : out
std_logic_vector(word_length-1 downto 0);
comp: out std_logic
);
end counter;
R. Stojanović VHDL i FPGA
______________________________________________________________________
134
architecture counter_behav of counter is
signal counting : std_logic_vector(word_length-1
downto 0);
begin
process(clk, rst, en)
begin
if rst='0' then
output<=(others=>'0');
counting<=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
output<=counting;
counting<=counting+'1';
-- else
-- output<=(others=>'0');
-- counting<=(others=>'0');
end if;
end if;
end process;
end architecture;
--This counter is going to be used for discharge ti me
determination
Library Ieee;
Use ieee.std_logic_1164.all;
R. Stojanović VHDL i FPGA
______________________________________________________________________
135
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
package counter_package is
component counter
generic(word_length : integer:=16);
port(
clk, en, rst : in std_logic;
output : out
std_logic_vector(word_length-1 downto 0);
comp: out std_logic
);
end component;
end package counter_package;
Kontrolna logika vezana za sel_speed realizovana je pomoću
multipleksora 2u1 (21mux), D flip-flopa i jednog invertora. Otvori se
projekat test i povežu komponete u fajlu test.bdf, kao što je prikazano na
slici 3.49. Prije toga smo odabrali odgovarajuće FPGA kolo Cyclone
EP1C6Q240C8 koje se nalazi na UP3 ploči.
R. Stojanović VHDL i FPGA
______________________________________________________________________
136
VCCen INPUT
VCCclk INPUT
VCCrst INPUT
VCCsel_speed INPUT
out[3..0]OUTPUT
w ord_length 4Parameter Value
clk
en
rst
output[word_length-1..0]
counter
inst
MULTIPLEXER
S
B
A
Y
21mux
inst5
CLRN
DPRN
Q
DFF
inst8
NOT
inst9N 24000000Parameter Value
clk clk_new
clk_div
inst1
Slika 3.49: Šema sistema
Izvrši se kompajliranje kola i opcijom Assigments -> Back-Annotate
Assigments, OK vidimo na koji je način kompajler (automatski) pridružio
pinove, slika 3.50.
PIN_214VCC
en INPUT
PIN_29VCC
clk INPUT
PIN_28VCC
rst INPUT
PIN_204
VCCsel_speed INPUT
PIN_220PIN_216PIN_218PIN_217
out[3..0]OUTPUT
w ord_length 4Parameter Value
clk
en
rst
output[word_length-1..0]
counter
inst
MULTIPLEXER
S
B
A
Y
21mux
inst5
CLRN
DPRN
Q
DFF
inst8
NOT
inst9N 24000000Parameter Value
clk clk_new
clk_div
inst1
Slika 3.50: Automatska dodjela pinova (nakon kompajliranja)
Može se uočiti da na ovaj način pridruženi pinovi ne odgovaraju
projektnom zadatku što nas upućuje da iste moramo manuelno re-
aranžirati, u skladu sa pozicijama na UP3 ploči. Iz glavnog menija se
izabere Assigments -> Pin planner, slika 3.51, i pojavljuje se maska data
na slici 3.52.
R. Stojanović VHDL i FPGA
______________________________________________________________________
137
Slika 3.51: Izbor Pin-planner-a
Izaberemo Pins: all i što će izlistati sve ulazno-izlazne pinove
korištene u projektu. U polju Location duplim klikom miša dobijamo formu
za selektovanje odgovarajućeg pina koji se pridruzuje odgovarajućem
ulazu/izlazu, slika 5.53. Na taj način se kompletira cjelokupno
pridruživanje, slika 3.54.
R. Stojanović VHDL i FPGA
______________________________________________________________________
138
Slika 3.52: Maska Pin-plannera
Slika 3.53: Manuelno selektovanje i pridruživanje odredjenog pina.
Slika 3.54: Pridruživanje pinova za sve signale.
R. Stojanović VHDL i FPGA
______________________________________________________________________
139
Poslije vraćanja na šematski prikaz može se vidjeti nova distribucija
pinova, slika 3.55.
PIN_61VCC
en INPUT
PIN_29VCC
clk INPUT
PIN_49VCC
rst INPUT
PIN_60
VCCsel_speed INPUT
PIN_56PIN_55PIN_54PIN_53
out[3..0]OUTPUT
w ord_length 4Parameter Value
clk
en
rst
output[word_length-1..0]
counter
inst
MULTIPLEXER
S
B
A
Y
21mux
inst5
CLRN
DPRN
Q
DFF
inst8
NOT
inst9N 24000000Parameter Value
clk clk_new
clk_div
inst1
Slika 3.55: Manuelno pridruženi pinovi
Potrebno je izvršiti novo kompajliranje pa simulaciju i najzad
verifikaciju u cilju provjere funkcionalnosti samog kola. Konfigurisanje
počinjemo tako što iz glavnog menije izaberemo Tools->Programmer
opciju, slika 3.56, ili kliknemo na odgovarajuću ikonicu programmer u
Toolbaru. Pojaviće se glavna maska programa za konfigurisanje –
Programmera, slika 3.57. Sistem je automatski detektovao na paralelnom
portu LPT1 ByteBlaster II kao hardver za programiranje. Izaberemo JTAG
mod i čekiramo box Program/Configure. Fajl koji će se uploadovati u
FPGA konfiguracionu memoriju ima oznaku test.sof sa odgovarajućom
check sumom. Opcija Hardware Setup nam omogućava setovanje drugog
hardvera za programiranje (ako postoji), dok forma Mode služi za izbor
metoda programiranja (In-socket, passive serial, active serial). Za start
programiranja potrebno je pritisnuti Start, a bar Progress će poceti da
prikazuje procenat sadrzaja koji je uploadovan, slika 3.58. Ako je sve u
redu, nakon kompletiranja programiranja, kolo na UP3 ploči počinje da
obavlja zadatu operaciju, tj. diode se pale u ritmu 4-bitnog brojača.
R. Stojanović VHDL i FPGA
______________________________________________________________________
140
Slika 3.56: Izbor opcije programmera.
Slika 3.57: Maska programera.
R. Stojanović VHDL i FPGA
______________________________________________________________________
141
Slika 3.58: Uspješno uploadovan program.
R. Stojanović VHDL i FPGA
______________________________________________________________________
142
4. Primjeri za vježbu
4.1 Primjer 1: DFF
U nastavku dat je primjer VHDL koda D flip-flopa. Ulazi flip flopa su
clk (takt), D (data ulaz) i rst (asihroni reset), dok je izlaz označen
promenljivom Q. Ako je rst=1 Q izlaz ima vrijednost 0. U suprotnom
ulaz se preslikava na izlaz i to na pozitivnu ivicu takta (clk ).
• VHDL code DFFa:
---------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------
ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
---------------------------------------
ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (rst, clk)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
R. Stojanović VHDL i FPGA
______________________________________________________________________
143
END PROCESS;
END behavior;
• Komentar:
Deklaracija biblioteka nije neophodna u ovom slučaju jer su podaci
tipa BIT .
Linije 2-3: deklaracija biblioteka (ključna riječ use i ime biblioteke).
Linije 5-8: entitet DFFa.
Linije 10-20: arhitektura DFFa.
Linija 6: ulazni portovi (in). U ovom slučaju svi su tipa std_logic.
Linija 7: izlazni portovi (out, inout, buffer). Ovdje su i izlazni portovi
tipa std_logic.
Linije 11-19: dio koda kojim se definiše arhitektura, počevši od ključne
riječi begin.
Linije 12-19: proces (u okviru procesa instrukcije se izvršavaju
sekvencijalno).
Linija 12: proces se izvršava svaki put kad doñe do promjene nekog od
signala koji se nalaze u sensitivity listi. U ovom slučaju, proces se izvršava
svaki put kad doñe do promjene rst ili clk signala.
Linije 14-15: kolo se resetuje svaki put kad rst ima vrijednost logičke
jedinice, nezavisno od stanja takta - asinhroni reset.
Linije 16-17: ukoliko rst ima vrijednost nula i ukoliko dodje do
promjene logičkog stanja takta sa nule na jedan, ulazni signal d se smješta
u flip-flop (q<=d).
Linije 15 i 17: “<=” operatorom se dodjeljuje vrijednost signalu.
Operator “:=” se koristi ukoliko je riječ o promjenljivoj. Svi portovi su
signali.
R. Stojanović VHDL i FPGA
______________________________________________________________________
144
Linije 1, 4, 9 i 21: “--“ označava komentar. Ovdje služe samo za bolju
organizaciju dizajna.
VHDL nije case sensitive.
• Simulacija:
Na slici 4.1 je dat simulacioni dijagram DFFa predstavljen gornjim
kodom.
Slika 4.1: Simulacioni dijagram DFF-a.
4.2 Primjer 2: Full Adder
Potrebno je napisati VHDL code za kolo koje će obavljati funkciju
punog sabirača. Ulazni pinovi su a, b, i cin dok su izlazni pinovi s
i cout . Izlaz treba računati kao s=a xor b xor c i cout
=a*b+b*cin+a*cin
• VHDL code:
ENTITY full_ader IS
PORT (a, b, cin: IN BIT;
s, cout: OUT BIT);
END full_ader;
--------------------------------------
ARCHITECTURE dataflow OF full_ader IS
BEGIN
s <= a XOR b XOR cin;
cout <= (a AND b) OR (a AND cin) OR
(b AND cin);
R. Stojanović VHDL i FPGA
______________________________________________________________________
145
END dataflow;
• Simulacija:
Slika 4.2 Rezlutati simulacije za full-addera
4.3 Primjer 3: Up-counter
Koristeći se Quartus II softverskim paketom potrebno je napisati
VHDL kod za komponentu koja bi tebala da obavlja funkciju up countera.
Ulazni pinovi treba da su: clk (globalni takt), rst (reset kola) i enable (kada
je na ovom ulazu „1“ stanje na brojaču se povećava za „1“ a kada je „0“
stanje na brojaču se ne mijenja). Izlazni pin treba da je niz bitova koji će
označavati stanje na brojaču. Dužina izlaznog niza brojača se zadaju prije
kompajliranja kao generic parametri.
Potrebno je definisati projekat, napisati VHDL code, kompajlirati ga i
izvršiti simulaciju. Nakon uspješno završenog posla portebno je napraviti
grafičku komponentu (simbol) od pomenutog dizajna.
• VHDL code:
----------------------------------counter---------- --------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- --------
entity counter is
generic(word_length : integer:=4);
port(
clk, en, rst: in std_logic;
R. Stojanović VHDL i FPGA
______________________________________________________________________
146
output : out std_logic_vector(word_length-1 downt o 0)
);
end counter;
--------------------------------------------------- --------
architecture counter_behav of counter is
signal counting : std_logic_vector(word_length-1 do wnto 0);
begin
process(clk, rst, en)
begin
if rst='1' then
output<=(others=>'0');
counting<=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
output<=counting;
counting<=counting+'1';
end if;
end if;
end process;
end architecture;
-------------------------package------------------- --------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- --------
package counter_package is
component counter
generic(word_length : integer:=16);
port(
clk, en, rst: in std_logic;
output : out std_logic_vector(word_length-1 downt o 0)
);
R. Stojanović VHDL i FPGA
______________________________________________________________________
147
end component;
end package counter_package;
Rezultati simulacije su dati na slici 4.3, dok slika 4.4 prikazuje izgled
kreiranog simbola.
Slika 4.3: Rezultat simulacije prethodnog VHDL koda
Slika 4.4: Prikaz kreiranog grafičkog simbola.
4.4 Primjer 4: Binarni komparator
Koristeći se Quartus II softverskim paketom potrebno je napraviti
komponentu koja će obavljati funkciju komparatora. Ulazni pinovi treba da
budu dva niza promenljive dužine. Dužina ulaznog niza se zadaje prije
kompajliranja kao generic parametar. Izlazni pin teba da ima vrijednost „1“
kada je vrijednost na ulaznim pinovima ista, a „0“ ako to nije slučaj.
Potrebno je definisati projekat, napisati VHDL code, kompajlirati ga i
izvršiti simulaciju. Nakon uspešno završenog posla portebno je napraviti
grafičku komponentu (simbol).
• VHDL code
------------------------comparator----------------- ----------------
Library Ieee;
Use ieee.std_logic_1164.all;
R. Stojanović VHDL i FPGA
______________________________________________________________________
148
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- ----------------
entity comparator is
generic(word_length : integer:=8);
port(
input1 : in std_logic_vector(word_length-1 downto 0 );
input2 : in std_logic_vector(word_length-1 downto 0 );
clk, rst : in std_logic;
output : out std_logic
);
end comparator;
--------------------------------------------------- ------
architecture comparator_behav of comparator is
begin
process(clk, rst)
begin
if rst='1' then
output<='0';
elsif clk'event and clk='1' then
if input1=input2 then
output<='1';
else
output<='0';
end if;
end if;
end process;
end architecture;
-------------------------package------------------- ----------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- ----------------
R. Stojanović VHDL i FPGA
______________________________________________________________________
149
package comparator_package is
component comparator
generic(word_length : integer:=8);
port(
input1 : in std_logic_vector(word_length-1 downto 0 );
input2 : in std_logic_vector(word_length-1 downto 0 );
clk, rst : in std_logic;
output : out std_logic
);
end component;
end package comparator_package;
• Simulacija:
Slika 4.5: Rezultat simulacije prethodnog VHDL koda
Slika 4.6: Prikaz kreiranog grafičkog simbola
4.5 Primjer 5: Counter+Comparator
Koristeći se prethodno kreiranim komponentama potrebno je
realizovati sledeći projekat. Vrijednost pina na izlazu treba da bude „1“
kada je vrijednost na osmobitnom brojaču 81 (01010001). Potebno je
R. Stojanović VHDL i FPGA
______________________________________________________________________
150
iskoristiti prethodno kreirane komponente kao i komponentu constant koja
se nalazi u biblioteci megafunctions-> gates.
Definisati projekat, kreirati grafički fajl, dodati korišćene fajlove u
projekat, kompajlirati dizajn i izvršiti simulaciju. Nakon što je simulacijom
potvrñena ispravnost funkcionalnosti kola potrebno je dodeliti pinove za
neko proizvoljno izabrano FPGA kolo. Sistem je potebno ponovo
kompajlirati.
Slika 4.7: Prikaz kreiranog dizajna.
Slika 4.8: Rezultat simulacije.
4.6 Primjer 6: Mux2to1 vektorskih podataka sa promjenljivom dužinom
Koristeći se Quartus II softverskim paketom potrebno je kreirati
multiplekser 2u1. Ulazi treba da su 2 podatka čija se dužina zadaje pre
kompajliranja kao generic parametar. Izlaz treba da je niz iste dužine kako i
R. Stojanović VHDL i FPGA
______________________________________________________________________
151
ulazni podaci. Multiplekser treba da sadrži i jedan kontrolni ulaz koji
odreñuje koji će od podataka biti prosledjen na izlaz.
Potrebno je napisati VHDL code kompajlirati dizajn i kreirati grafičku
komponentu. Priložite adekvatni simulacioni dijagram.
• VHDL code
-------------2 data in multiplexer----------------- ---------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- ----------------
entity mux2to1 is
generic(word_length : integer:=16);
port
( contr : in std_logic;
input1 : in signed(word_length-1 downto 0);
input2 : in signed(word_length-1 downto 0);
output : out signed(word_length-1 downto 0)
);
end mux2to1;
--------------------------------------------------- ----------------
architecture mux2to1_behav of mux2to1 is
begin
process(contr, input1, input2)
begin
if contr='1' then
output<=input1;
else
output<=input2;
end if;
end process;
R. Stojanović VHDL i FPGA
______________________________________________________________________
152
end mux2to1_behav;
--------------------------------------------------- ----------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
--------------------------------------------------- -------------
package mux2to1_package is
component mux2to1
generic(word_length : integer:=16);
port
( contr : in std_logic;
input1 : in signed(word_length-1 downto 0);
input2 : in signed(word_length-1 downto 0);
output : out signed(word_length-1 downto 0)
);
end component;
end mux2to1_package;
• Simulacija:
Slika 4.9: Prikaz rezultata simulacije.
4.7 Primjer 7: Mux4to1 pomoću Mux2to1
Koristeći se prethodno razvijenim dizajnom potrebno je kreirati
multiplekser 4u1. Potebno je kreirati projekat i u njega uključiti
odgovarajući VHDL file. Zatim je potrebno napisati VHDL file za
multiplekser 4u1.
R. Stojanović VHDL i FPGA
______________________________________________________________________
153
Potrebno je priložiti simulacione dijagrame i od kreiranog fajla
napraviti grafički objekat.
• VHDL code:
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
library work;
use work.mux2to1_package.all;
--------------------------------------------------- ----------------
entity mux4to1 is
generic(word_length : integer:=16);
port
( contr : in std_logic_vector(1 downto 0);
input1 : in signed(word_length-1 downto 0);
input2 : in signed(word_length-1 downto 0);
input3 : in signed(word_length-1 downto 0);
input4 : in signed(word_length-1 downto 0);
output : out signed(word_length-1 downto 0)
);
end mux4to1;
architecture mux4to1_behav of mux4to1 is
signal temp1, temp2 : signed(word_length-1 downto 0 );
begin
mux1def : mux2to1 generic map (word_length=>word_le ngth)
port map (input1=>input1, input2=>input2,
contr=>contr(0),output=>temp1);
mux2def : mux2to1 generic map (word_length=>word_le ngth)
port map (input1=>input3, input2=>input4,
contr=>contr(0),output=>temp2);
mux3def : mux2to1 generic map (word_length=>word_le ngth)
R. Stojanović VHDL i FPGA
______________________________________________________________________
154
port map (input1=>temp1, input2=>temp2,
contr=>contr(1),output=>output);
end mux4to1_behav;
--------------------------------------------------- ---------------
Library Ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
library work;
use work.mux2to1_package.all;
package mux4to1_package is
component mux4to1
generic(word_length : integer:=16);
port
( contr : in std_logic_vector(1 downto 0);
input1 : in signed(word_length-1 downto 0);
input2 : in signed(word_length-1 downto 0);
input3 : in signed(word_length-1 downto 0);
input4 : in signed(word_length-1 downto 0);
output : out signed(word_length-1 downto 0)
);
end component;
end mux4to1_package;
• Simulacija:
Slika 4.10: Prikaz rezultata simulacije multipleksera 4u1.
R. Stojanović VHDL i FPGA
______________________________________________________________________
155
contr[1..0]
input1[word_length-1..0]
input2[word_length-1..0]
input3[word_length-1..0]
input4[word_length-1..0]
output[word_length-1..0]
mux4to1
inst
w ord_length 16Parameter Value
Slika 4.11: Multiplexer 4u1, prikaz grafičkog simbola.
4.8 Primjer 8: Shift registar sa promjenljivom dužinom
Koristeći se Quartuss II programskim paketom potrebno je kreirati
dizajn koji će obavljati funkciju shift registra. Dužina registra se specificira
prije kompajliranja kao generic parametar. Dizajn ima po jedan ulazni i
izlazni data podatak. Pored ovih podataka shift registar trba da poseduje i
ulaze clk (takt) kao i rst (globalni reset).
Potrebno je napisati kod i priložiti simulacione dijagrame. Takaoñe,
dati prikaz grafičkog dizajna.
library ieee;
use ieee.std_logic_1164.all;
entity basic_shift_register is
generic
(
NUM_STAGES : natural := 64
);
port
(
clk : in std_logic;
enable : in std_logic;
sr_in : in std_logic;
R. Stojanović VHDL i FPGA
______________________________________________________________________
156
sr_out : out std_logic
);
end entity;
architecture rtl of basic_shift_register is
-- Build an array type for the shift register
type sr_length is array ((NUM_STAGES-1) downto 0) of std_logic;
-- Declare the shift register signal
signal sr: sr_length;
begin
process (clk)
begin
if (rising_edge(clk)) then
if (enable = '1') then
-- Shift data by one stage; data from last
stage is lost
sr((NUM_STAGES-1) downto 1) <= sr((NUM_STAGES-
2) downto 0);
-- Load new data into the first stage
sr(0) <= sr_in;
end if;
end if;
end process;
-- Capture the data from the last stage, before it is lost
sr_out <= sr(NUM_STAGES-1);
R. Stojanović VHDL i FPGA
______________________________________________________________________
157
end rtl;
• Simulacija:
Slika 4.12: Prikaz rezultata simulacije.
clk
enable
sr_in
sr_out
shif ter
inst
NUM_STAGES 4Parameter Value
Slika 4.13: Prikaz grafičkog simbola kreiranog shift registra.
4.9 Primjer 9: RAM memory
Koristeći se Quartus II programskim paketom potrebno je napisati
program koji će obavljati funkciju RAM memorije. Dizajn teba da ima
jedan ulaz za podatke (std_logic_vector čija se dužina zadaje kao generic
parametar prije kompajliranja) kao i ulaz koji će odredjivati u kojoj adresi
se vrši upis/čitanje. Izlaz treba da je bit vector niz podataka. Dužina
podataka kao i broj riječi koje se mogu upisati u memoriji se zadaje kao
R. Stojanović VHDL i FPGA
______________________________________________________________________
158
generic parametar. Dizajn treba da ima još jedan ulaz koji će odreñivati da
li se u memoriji u datom trenutku vrši čitanje ili upisivanje.
Potebno je definisati projekat, napisati VHDL code, izvršiti
kompajliranje i simulaciju. Priložiti VHDL file i simulacione dijagrame.
• VHDL code:
----------------- Single port RAM ----------------- ---------
library ieee;
use ieee.std_logic_1164.all;
--------------------------------------------------- ----------
entity single_port_ram is
generic
(
DATA_WIDTH : natural := 8;
ADDR_WIDTH : natural := 6
);
port
(
clk : in std_logic;
addr : in natural range 0 to 2**ADDR_WIDTH - 1;
data : in std_logic_vector((DATA_WIDTH-1) downto 0);
we : in std_logic := '1';
q : out std_logic_vector((DATA_WIDTH -1) downto 0 )
);
end entity;
architecture rtl of single_port_ram is
-- Build a 2-D array type for the RAM
R. Stojanović VHDL i FPGA
______________________________________________________________________
159
subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0);
type memory_t is array(addr'high downto 0) of word _t;
-- Declare the RAM signal.
signal ram : memory_t;
-- Register to hold the address
signal addr_reg : natural range 0 to addr'high;
begin
process(clk)
begin
if(rising_edge(clk)) then
if(we = '1') then
ram(addr) <= data;
end if;
-- Register the address for reading
addr_reg <= addr;
end if;
end process;
q <= ram(addr_reg);
end rtl;
• Simulacija:
Slika 4.14: Prikaz rezultata simulacije
4.10 Primjer 10: State Machine
Projektovati State Machinu Malyevog tipa (mašina čiji izlaz zavisi i
od prethodnog stanja i stanja trenutnog ulaza). Mašina treba da obavlja
R. Stojanović VHDL i FPGA
______________________________________________________________________
160
funkciju detektora sekvence „1110“. Dizajn treba da ima clk i reset signale
kao i jedan ulaz i izlaz.
Potrebno je napisati VHDL kod, i dati prikaz simulacionih dijagrama.
• VHDL code:
library ieee;
use ieee.std_logic_1164.all;
entity state_machine is
port
(
clk : in std_logic;
input : in std_logic;
reset : in std_logic;
output : out std_logic
);
end entity;
architecture rtl of state_machine is
-- Build an enumerated type for the state machine
type state_type is (s0, s1, s2, s3);
-- Register to hold the current state
signal state : state_type;
begin
process (clk, reset)
begin
if reset = '1' then
state <= s0;
elsif (rising_edge(clk)) then
case state is
when s0=>
if input = '1' then
state <= s1;
else
R. Stojanović VHDL i FPGA
______________________________________________________________________
161
state <= s0;
end if;
when s1=>
if input = '1' then
state <= s2;
else
state <= s0;
end if;
when s2=>
if input = '1' then
state <= s3;
else
state <= s0;
end if;
when s3=>
if input = '1' then
state <= s3;
else
state <= s0;
end if;
end case;
end if;
end process;
process (state, input)
begin
case state is
when s0=>
if input = '1' then
output <= '0';
else
output <= '0';
end if;
when s1=>
if input = '1' then
R. Stojanović VHDL i FPGA
______________________________________________________________________
162
output <= '0';
else
output <= '0';
end if;
when s2=>
if input = '1' then
output <= '0';
else
output <= '0';
end if;
when s3=>
if input = '1' then
output <= '0';
else
output <= '1';
end if;
end case;
end process;
end rtl;
• Simulacija:
Slika 4.15: Prikaz simulacionog dijagrama state machine
4.11 Napredni dizajn: Primjer realizacije Fleksibilnog FPGA
baziranog IIR filtra
U okviru ovog paragrafa dat je primjer realizacije jednog složenijeg
sistema, konkretno IIR filtra. Upoznajmo se najpre sa osnovnom
funkcijom tj jednačinom IIR sistema.
R. Stojanović VHDL i FPGA
______________________________________________________________________
163
4.11.1 Opšta forma funkcije prenosa digitalnog sistema
Svaki digitalni sistem se može predstaviti takozvanom funkcijom
prenosa, čiji je opšti oblik dat formulom (4.1)
10 1
11
...( )( )
( ) 1 ...
NN
MM
A A z A zY zH z
X z B z B z
− −
− −
+ + += =− − −
4.1
Datoj funkciji prenosa u vremenskom domenu odgovara diferencna
jednačina:
0 1 1( ) ( ) ( 1) ... ( ) ( 1) ... ( )N My n A x n A x n A x n N B y n B y n M= + − + + − + − + + − 4.2
Upravo ova jednačina poslužiće kao osnov realizacije IIR filtra.
4.11. 2 Osnovni princip projektovanog digitalnog filtra. Opšta blok
šema realizacje
Na slici 4.16 data je opšta blok šema realizacije kompletnog sistema.
R. Stojanović VHDL i FPGA
______________________________________________________________________
164
Slika 4.16: Opšta blok šema realizacije filtera
Sistem se sastoji iz više blokova. Ključni dio je Filter Algorithm u
kome se realizuje sama funkcija filtra. Naime, u njemu se obavljaju
potrebne numeričke operacije (množenja i sabiranja - formula 4.2). Ovom
bloku je paraleno potrebno proslediti vrednosti sa ulaza (i izlaza) i tu
funkciju obavlja sklop Data Menager.
Takoñe, bloku Filter Algorithm potrebno je prosledi koeficiente filtra.
U tom cilju kreiran je dio Coef Menager. Funkcija ovog bloka je
smještanje koeficienta koji se serijski upisuju preko ulaza coef_in. Sam
blok se može shvatiti kao serijska veza više registara (broj registara jednak
je broju množača koje poseduje ralizovan filtar). Prilikom upisivanja
koeficienata (programiranje filtra) kontrolni signal write_coef potebno je
postaviti na „1“. Prvo se upisuju takozvani „direktni koeficienti“
( 0 1 2, , ,.. NA A A A ), a zatim i „povratni koeficienti“ (0 1 2, , ,.. NB B B B ). Kada se
upis obavi, signal coef_complete ima vrijednost „1“ i time označava da je
R. Stojanović VHDL i FPGA
______________________________________________________________________
165
upis završen, a filtar spreman za puštanje u rad. To se postiže kratkim
pozitivnim impulsom na start ulazu.
Signali data_valid i clk_out služe kao indikacija da su rezultati na
izlazu spremni za preuzimanje, odnosno za sinhronizaciju sa ostatkom
sistema. Podaci se preuzimaju kada je na izlazu clk_out ostvari pozitivna
tranzicija. Ukoliko je filter potrebno reprogramirati, sistem prethodno mora
biti resetovan (pozitivni impuls na ulazu rst).
4.11.3 Primer realizacije, FPGA baziranog, IIR filtra
U okviru primjera realizovan je fleksibilan core koji će obavljati
funkciju IIR filtra. Na slici 4.17 dat je šematski prikaz ponuñenog rešenja.
Slika 4.17: IIR core. Prikaz bloka (shematic file)
Core je potpuno prilagoñen za različite dužine podataka kao i za različiti
red filtra. Ove vrijednosti je prije kompajliranja potrebno unijeti kao
generic parametre (word_length i order).
Prilikom programiranja filtra potrebno je znati sledeće. Za njegovu
realizaciju korištena je takozvana integer aritmetika. Pošto se u opštem
slučaju prilikom računanja koeficienata filtra, dobijaju realni brojevi (u
opsegu 1 1− ÷ ), dobijene vrednosti je pre unošenja potrebno preskalirati u
odnosu na opseg _ 1 _ 12 2word length word length− −− ÷ , gde je word_length dužina riječi.
Dakle, dobijeni realni koeficienti se pomnože sa _ 12word length− i dobijeni
rezultat se zaokruži na najbližu celobrojnu vrijednost.
R. Stojanović VHDL i FPGA
______________________________________________________________________
166
Što se samog interfejsa tiče on je u potpunosti objašnjen u prethodnom
poglavlju pa je ovdje samo dat prikaz jedne Quartus simulacije koja
najbolje ilustruje gore pomenuto, slika 4.18.
Slika 4.18: IIR filtar. Prikaz Quartus simulacije
4.11.4 Resursi utrošeni za realizaciju IIR filtra
Na donjem grafiku, slika 4.19, dati su resursi potrebni poterbni za
realizaciju predloženog rešenja IIR filtra. Grafik je dat za različite dužine
podataka kao i za različit red filtra. Resursi su snimani za FPGA Cyclone -
EP1C6Q240C8.
0
500
1000
1500
2000
2500
3000
3500
4000
4500
LogicCels
2 3 4 5 6Red Filtra
8
16
Slika 4.18: IIR filtar. Pregled utrošenih resursa za različiti red filtra i dužine
podataka.
R. Stojanović VHDL i FPGA
______________________________________________________________________
167
Komentar:
Vidi se da je broj logičih kola potrebnih za realizaciju IIR filtra
srazmjeran redu filtra. Bitno je naglasiti da se najveći resursi troše za
paralelne množače kojih svaki IIR filtar ima 2 order∗ . Ukoliko se za
realizaciju opisanog rešenja izabere neko novije kolo koje sadrži DSP
blokove broj logičkih kola potrebnih za ovakvu realizaciju će se znatno
smanjiti naravno baš na uštrb DSP blokova. Za realizaciju paralelnog
množača se može upotrebiti 1 DSP blok (ako je dužina reči manja od 9),
odnosno 2 (ako je dužina reči manja od 18). U ovoj činjenici će se najbolje
ogledati preraspodjela resursa ukoliko bi se za realizaciju koristio neki
noviji FPGA čip.
4.11.5 VHDL code IIR filtra
• IIR filter
------------------------------iir filter----------- -----------------------
Library ieee;
Use ieee.std_logic_1164.all;
Use Ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
use work.add3_package.all;
use work.clk_new_package.all;
use work.JK_F_F_package.all;
--------------------------------------------------- -----------------------
entity iir is
generic ( word_length: integer :=16;
order: integer :=6
);
port( clk_in, rst : in std_logic;
start,write_coef, clk_coef : in std_logi c;
out_clk, data_valid : out std_logic;
coef_complete : out std_logic;
din_coef, data_in : in signed(word_len gth-1 downto 0);
data_out : out signed(word_length-1 dow nto 0)
R. Stojanović VHDL i FPGA
______________________________________________________________________
169
);
end iir;
--------------------------------------------------- ------------------------
architecture iir_behav of iir is
component add3
generic(
word_length : integer:=8);
port(
clk, rst : in std_logic;
inp1, inp2, inp3 : in signed(word_length-1 downto 0);
output : out signed(word_length-1 downto 0)
);
end component;
Component JK_f_f
Port ( j, k, clk, clr : in std_logic ;
q : out std_logic);
End Component;
Component clk_new
Port(
clk, En :In std_logic;
clk_out :Out std_logic);
End Component;
R. Stojanović VHDL i FPGA
______________________________________________________________________
170
type memo is array(natural range<>) of signed(word_ length-1 downto 0);
type memo_2x is array(natural range<>) of signed(2* word_length-1 downto 0);
type memo_ord is array(natural range <>) of signed( word_length+order-1 downto 0);
signal coefs : memo (0 to 2*order);
signal multed : memo_2x (0 to order);
signal multed_bek : memo_2x(1 to order);
signal multed_scal_dir : memo(0 to order);
signal multed_scal_bek : memo (1 to order);
signal inp_temp : signed(word_length-1 downto 0 );
signal dat_val_temp, start_temp : std_logic;
signal coef_complete_temp1 : std_logic;
signal coef_complete_temp2 : std_logic;
signal add_temp : memo_ord(0 to order);
signal j : integer range 0 to 2*order+1;
signal i : integer range 0 to order+2;
begin
process(clk_coef, rst, write_coef)
begin
if rst='1' then
for i in 0 to 2*order loop
coefs(i)<=(others=>'0');
end loop;
R. Stojanović VHDL i FPGA
______________________________________________________________________
171
j<=0;
coef_complete_temp1<='0';
elsif clk_coef'event and clk_coef='1' then
if write_coef='1' then
coefs(0 to 2*order-1)<=coefs(1 to 2*order);
coefs(2*order)<=din_coef;
if j<2*order then
j<=j+1;
else
j<=0;
end if;
if j=2*order then
coef_complete_temp1<='1';
else
coef_complete_temp1<='0';
end if;
else
j<=0;
end if;
end if;
end process;
process(clk_in, rst, start_temp, write_coef)
R. Stojanović VHDL i FPGA
______________________________________________________________________
172
begin
if rst='1' or start_temp='0' then
for i in 0 to order loop
multed(i)<=(others=>'0');
end loop;
i<=0;
dat_val_temp<='0';
coef_complete_temp2<='1';
elsif clk_in'event and clk_in='1' then
for i in 0 to order loop
multed(i)<=coefs(i)*data_in;
end loop;
if coef_complete_temp1='1' then
coef_complete_temp2<='0';
end if;
if i=order+2 then
dat_val_temp<='1';
else
dat_val_temp<='0';
i<=i+1;
end if;
end if;
R. Stojanović VHDL i FPGA
______________________________________________________________________
173
end process;
coef_complete<=coef_complete_temp1 and coef_comple te_temp2;
process(multed, multed_scal_dir)
begin
for i in 0 to order loop
multed_scal_dir(i)<=multed(i)(2*word_length-2 do wnto word_length-1);
end loop;
end process;
add_generate: for i in 1 to order-1 generate
add_def_i: add3 generic map(word_length=>word_leng th+order)
port map(clk=>clk_in,rst=>rst,
inp1=>conv_signed(multed_scal_dir(i),word_leng th+order),
inp2=>add_temp(i+1),
inp3=>-conv_signed(multed_scal_bek(i), word_le ngth+order),
output=>add_temp(i));
end generate add_generate;
add_def_ord: add3 generic map(word_length=>word_le ngth+order)
port map(clk=>clk_in,rst=>rst,
inp1=>conv_signed(multed_scal_dir(order),word_ length+order),
inp2=>(others=>'0'),
inp3=>-conv_signed(multed_scal_bek(order),word _length+order),
output=>add_temp(order));
R. Stojanović VHDL i FPGA
______________________________________________________________________
174
add_def_0 : add3 generic map(word_length=>word_le ngth+order)
port map(clk=>clk_in,rst=>rst,
inp1=>conv_signed(multed_scal_dir(0),word_leng th+order),
inp2=>conv_signed(add_temp(1),word_length+orde r),
inp3=>(others=>'0'),
output=>add_temp(0));
process(add_temp(0),multed_bek, multed_scal_bek, c oefs)
begin
for i in 1 to order loop
multed_bek(i)<=coefs(order+i)*(add_temp(0)(word_ length-1 downto 0));
multed_scal_bek(i)<=multed_bek(i)(2*word_length- 2 downto word_length-1);
end loop;
end process;
jk_start_def: jk_f_f port map(clk=>clk_in, clr=>rs t,j=>start,
k=>write_coef, q=>start_temp);
clk_out_def: clk_new port map(clk=>not clk_in, en =>dat_val_temp, clk_out=>out_clk);
process(clk_in, rst, dat_val_temp, add_temp(0))
begin
if rst='1' then
data_valid<='0';
R. Stojanović VHDL i FPGA
______________________________________________________________________
175
elsif clk_in'event and clk_in='1' then
if rst='1' then
data_out<=(others=>'0');
else
data_out<=add_temp(0)(word_length-1 downto 0);
data_valid<=dat_val_temp;
end if;
end if;
end process;
end iir_behav;
• JK Flip flop
-------------------JK Flip-Flop-------------------
-------------------------------------------------
Library ieee;
Use ieee.std_logic_1164.all;
-------------------------------------------------
Entity JK_f_f is
Port ( j, k, clk, clr : in std_logic ;
q : out std_logic);
End JK_f_f;
-------------------------------------------------
R. Stojanović VHDL i FPGA
______________________________________________________________________
176
Architecture JK_f_f_behav of JK_f_f is
Signal qtemp: std_logic;
Begin
Process(clk,clr)
Begin
if clr='1' then
qtemp<='0';
elsif clk'event and clk = '1' then
if j='1' and k='0' then
qtemp<='1';
end if;
if j='0' and k='1' then
qtemp<='0';
end if;
if j='0' and k='0' then
qtemp<=qtemp;
end if;
if j='1' and k='1' then
qtemp<= not qtemp;
end if;
End if ;
End Process ;
q<= qtemp;
End JK_f_f_behav;
---------------------------------------------------
R. Stojanović VHDL i FPGA
______________________________________________________________________
177
Library ieee;
Use ieee.std_logic_1164.all;
---------------------------------------------------
Package JK_f_f_package is
Component JK_f_f
Port ( j, k, clk, clr : in std_logic ;
q : out std_logic);
End Component;
End JK_f_f_package;
• CLK_new
----------------------------Clk_New---------------- ---------------
library ieee;
use ieee.std_logic_1164.all;
--------------------------------------------------- ---------------
entity clk_new is
port(
clk, en : in std_logic;
clk_out : out std_logic);
end clk_new;
--------------------------------------------------- ---------------
architecture clk_new_behav of clk_new is
signal Temp : std_logic;
R. Stojanović VHDL i FPGA
______________________________________________________________________
178
begin
process(clk)
begin
if clk'event and clk='0' then
temp<=en;
end if;
end process;
clk_out<=temp and clk;
end clk_new_behav;
--------------------------------------------------- ---------------
library Ieee;
use ieee.std_logic_1164.all;
--------------------------------------------------- ----------------
Package clk_new_package Is
Component clk_new
Port(
clk, En :In std_logic;
clk_out :Out std_logic);
End Component;
End Clk_new_package;
5. Literatura
1. Radovan Stojanović, "Automatizovani dizajn elektronskih kola
(ADEK - CAED)", skripta, Elektrotehnički Fakultet, Univerzitet
Crne Gore, 2005.
2. James O. Hablen, Tyson S. Hall, Michael D Furman, "Rapid
Prototyping of Digital Systems", Springer Science and Business
Media, Inc., 2006.
3. Clive "Max" Maxfield, "The Design Warrior's Guide to FPGAs",
Mentor Graphics Corporation and Xilinx, Inc., 2004.
4. Robert Dueck, "Digital Design with CPLD Applications and VHDL",
Delmar/Thomson Learning, 2005.
5. Peter J. Ashenden, "The VHDL Cookbook", Dept. Computer Science
University of Adelaide, South Australia, 2003.
6. Enoch O. Hwang, B, "Microprocessor Design, Principles and
Practices with VHDL", Brooks/Cole, 2004.
7. Mark Zwolinski, “Digital System Design with VHDL” 2nd Edition,
Pearson and Prentice Hall, 2004.
8. Stephen Brown and Jonathan Rose, "Architecture of FPGAs and
CPLDs: A Tutorial" , IEEE Design and Test of Computers, Vol. 13,
No. 2, pp. 42-57, 1996.
9. John F. Wakerly, “Digital Design Principles and Practices”,
Pearson, 2001.
10. Milena Jovanovic, “Projektovanje digitalnih sistema upotrebom
Quartus II razvojnog okruženja”, diplomski rad, ETF Podgorica,
2004.
R. Stojanović VHDL i FPGA
______________________________________________________________________
180
11. Jakšić Zoran, “Primjena FPGA tehnologije u digitalnoj obradi
signala”, diplomski rad, ETF Podgorica, 2006.
12. Nebojša Šolaja, “Razvoj i realizacija rekonfigurabilnih elektronskih
sistema za laserski bazirana mjerenja”, magistarski rad, ETF
Podgorica, 2005.
13. www.altera.com
14. www.xilinx.com
R. Stojanović VHDL i FPGA
______________________________________________________________________
181
Prilog 1: UP3 edukaciona ploča
Kompletno projektovanje, simulacija i verifikacija u primjerima u
okviru ovog priručnika obavljeni su u Alterinom razvojnom okruženju
Quartus II. Pri tom je korištena UP3 edukaciona ploča, slika P1.1, na kojoj
je svaki dizajn eksperimentalno provjeren. UP3 kit sadrži Cyclone FPGA
čip, eksterni SRAM, SDRAM, Flash memoriju i širok asortiman I/O
uredaja i konektora. Alterina UP3 ploča dostupna je u dvije verzije: sa
EP1C6Q240 FPGA ili nešto većim EP1C12Q240 FPGA čipom. Kao
interfejs za programiranje FPGA kola može se upotrijebiti Byte Blaster II,
koji se konektuje na PC paralelni port ili USB Blaster kabal (vidi 3.9). Za
napajanje energijom se koristi eksterni 6V DC kabal ili AC -to-DC adapter.
Slika P1.1: Izgled Alterine UP3 edukacione ploče.
R. Stojanović VHDL i FPGA
______________________________________________________________________
182
P1.1 Karakteristike UP3-1C6 i UP3-1C12 edukacionih ploča
Raspored odgovarajućih interfejsa i konektora na UP3-1C6
eksperimentalnoj ploči je dat na slici P1.2
Slika P1.2: Raspored interfejsa i konektora.
Slijedi pregled karakteristika UP3-1C6 ploče:
º Altera EP1C6Q240 FPGA cip i EPCS1 konfiguracioni uredaj
º Podržava IP (Intelectual Property) bazirani dizajn sa ili bez
mikroprocesora
º USB 1.1 (najveca i najmanja brzina)
º RS 232 Port
º Parallel Port (IEEE 1284)
º PS/2 Port
º VGA Port
º IDE (Integrated Drive Electronics)
R. Stojanović VHDL i FPGA
______________________________________________________________________
183
º 2 kilobajta I2C PROM-a (proširiv)
º 128 kilobajta SRAM-a
º 2 megabajta Flash-a
º 8 megabajta SDRAM-a
º Podržava više clock-ova, poput CPU clock-a, USB clock-a, PCI
clock-a,
IOAPIC clock-a
º JTAG i aktivni serijski download kapaciteti
º 5V Santa Cruz long Expansion Header koji podrzava 74 I/O
º 4-bitni switch blok
º 4 prekidaca i globalni reset prekidac
º 4 LED
º 16x2 karaktera LCD modul
º I2C Real Time Clock
Razlike izmedju UP3-1C6 i UP3-1C12 ploče mogu se sumirati u:
• EP1C6Q240 i EP1C12Q240 čipovi imaju različit broj logičkih
elemenata (LE), različit broj RAM blokova i internih RAM
bitova (Tabela P.1).
• UP3-1C6 ploca podržava 74 I/O pina, a UP3-1C12 ploca
podržava 62 I/O pina.
• Raspored pinova kod LCD modula, kao i kod memorijskih
uredaja je razlicit.
• Bitno je i naznačiti da se mora kompajlirati dizajn za
odgovarajući Cyclone čip, jer u suprotnom neće biti
download-ovan. Ukoliko želimo u toku rada preći sa jedne
ploče na drugu, potrebno je provjeriti oznake pinova pa,
rekompajlirati dizajn za novi FPGA čip.
R. Stojanović VHDL i FPGA
______________________________________________________________________
184
Tabela P1.1: Karakteristike Cyclone FPGA cipova na UP3 ploči.
UP3 ploča obezbjeduje nekoliko eksternih ROM i RAM memorija
čiji su kapaciteti znatno veći od Cyclone FPGA interne memorije, ali
zahtijevaju i duže vrijeme pristupa (Tabela P1.2). FPGA procesori poput
NIOS-a koriste eksternu memoriju kao programsku i data memoriju, a
internu memoriju za registraciju i skladištenje. Flash i EEPROM koriste se
za nepromjenljivo memorijsko skladištenje. EPCS1 serijski Flash čip
koristi se za automatsko punjenje FPGA serijske konfiguracije u sistemima
gdje se ne želi download-ovati dizajn u ploču preko Byte Blaster II kabla
svaki put kada se priključi na napajanje.
Tabela P1.2: Memorijske karakteristike UP3 ploče.
P1.2 I/O karakteristike UP3 ploče
Za većinu uredaja, hardver UP3 ploče obezbjeduje samo električni interfejs
do FPGA I/O pinova. Logika koja obezbjeduje interfejs kontroler za uredaj
mora se konstruisati pomoću FPGA interne logike. Cyclone FPGA je
"surface-mount" čip direktno zalemljen na ploču. Jako je
komplikovano, ako ne i nemoguće zamijeniti ovaj čip bez skupocjenog
alata namijenjenog za tu operaciju. Zbog velike osjetljivosti I/O pinova
R. Stojanović VHDL i FPGA
______________________________________________________________________
185
treba voditi računa o tome kako eksterne uredaje konektujemo na Cyclone
I/O pinove. Takode, pinove treba označiti kao što piše u uputstvu i povezati
ih sa odgovarajućim uredajima (Tabela P1.3).
Tabela P1.3: Pregled karakteristika I/O pinova na UP3 ploči.
U Tabeli P1.4 slijedi pregled naziva, tipova i funkcija najčešće
korištenih I/O FPGA pinova u okviru UP3 ploče.
R. Stojanović VHDL i FPGA
______________________________________________________________________
186
Tabela P1.4: Pregled najcešce korišcenih I/O FPGA pinova.
R. Stojanović VHDL i FPGA
______________________________________________________________________
187
P1.3 UP3core biblioteka funkcija
IP (Intelectual Property) cores često se koriste u kompleksnim
hijerarhijskim dizajnima. IP core predstavlja prethodno razvijen,
sintetizovan hardverski dizajn koji obezbjeduje gotove, frekventno
korištene funkcije. Komercijalne, licencirane IP cores obuhvataju i složene
funkcije poput mikroprocesora, mikrokontrolera, multimedijalnih i DSP
(Digital Signal Processing) funkcija, komunikacijskih kontrolera. IP cores
promovišu dizajn za višekratnu upotrebu I redukuju vrijeme potrebno za
razvoj dizajna tako što nude slicne hardverske funkcije u gotovom dizajnu.
UP3core funkcije (Tabela P1.5) su dizajnirane da pojednostave
upotrebu djelova UP3 ploče poput tastera, tastature, miša, LCD displeja,
video izlaza. Ove funkcije mogu se upotrebljavati kao simboli iz UP3core
biblioteke (gdje su deklarisani u VHDL modulu) ili kao komponente u
drugim VHDL ili Verilog fajlovima. Da bi UP3core funkcija odradila tačnu
operaciju mora se znati tačno naziv I/O pinova i uredaji koji se na njih
konektuju. Neke od UP3core funkcija zahtijevaju i clock ulaze, a ukoliko
su im potrebni sporiji clock signali – to im obezbjeduje clock djelitelj, koji
je takode UP3core funkcija. Naš zadatak je da izvršimo kratak pregled
karakteristika ovih funkcija.
R. Stojanović VHDL i FPGA
______________________________________________________________________
188
Tabela P1.5: Naziv i opis UP3core funkcija.