Microsoft Word - UNI_Mlakar_Ziga_1987_E doc

Podobni dokumenti
5 Programirljiva vezja 5.1 Kompleksna programirljiva vezja - CPLD Sodobna programirljiva vezja delimo v dve veliki skupini: CPLD in FPGA. Vezja CPLD (

DES

Delavnica Načrtovanje digitalnih vezij

DIGITALNE STRUKTURE Zapiski predavanj Branko Šter, Ljubo Pipan 2 Razdeljevalniki Razdeljevalnik (demultipleksor) opravlja funkcijo, ki je obratna funk

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

DES

CelotniPraktikum_2011_verZaTisk.pdf

Delavnica Načrtovanje digitalnih vezij

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Slide 1

Delavnica Načrtovanje digitalnih vezij

DES11_realno

Microsoft Word - CNC obdelava kazalo vsebine.doc

Diapozitiv 1

DES11_vmesniki

Microsoft PowerPoint - IPPU-V2.ppt

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Microsoft Word - avd_vaje_ars1_1.doc

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

Delavnica Načrtovanje digitalnih vezij

Diapozitiv 1

Microsoft Word - M docx

Podatkovni model ER

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

Microsoft Word - ELEKTROTEHNIKA2_11. junij 2104

Luka Brinovšek Detektor fazne napake optičnega enkoderja Diplomsko delo Maribor, avgust 2011

No Slide Title

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Univerza v Ljubljani

Logični modul LOGO!

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Vostro 430 Informacijski tehnični list o namestitvi in funkcijah

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan

Datum in kraj

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

STAVKI _5_

Slide 1

PowerPointova predstavitev

ORA 1-3

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

_ _BDA_CapitalSports_CS-Timer.indd

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Šolski center celje

DKMPT

Microsoft Word - Avditorne.docx

seminarska_naloga_za_ev

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

Kazalne naprave in tipkovnica Vodnik za uporabnike

Delavnica Načrtovanje digitalnih vezij

Microsoft Word doc

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

Uvodno predavanje

CMSC 838T Lecture

Microsoft Word - CNR-MPV2 Quick Guide_SI

Sistemi Daljinskega Vodenja Vaja 3 Matej Kristan Laboratorij za Strojni Vid Fakulteta za elektrotehniko, Univerza v Ljubl

Spoznajmo PowerPoint 2013

Diapozitiv 1

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

Navodila za uporabo Mini snemalnik

ISOFT , računalniški inženiring

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

Chapter 1

Modem in krajevno omrežje Uporabniški priročnik

Microsoft Word doc

Orodje za izvoz podatkov

ARS1

ACAD-BAU-Analiza-prostorov

1. Električne lastnosti varikap diode Vsaka polprevodniška dioda ima zaporno plast, debelina katere narašča z zaporno napetostjo. Dioda se v zaporni s

an-01-Stikalo_za_luc_za_na_stopnisce_Zamel_ASP-01.docx

REALIZACIJA ELEKTRONSKIH SKLOPOV

ELEKTRONIKA ŠTUDIJ ELEKTRONIKE

Poročilo o praktičnem usposabljanju z delom - PUD DIJAK: Ime in priimek: Naslov: Elektronski naslov: Telefon: Izobraževalni program (obkroži): - tehni

Microsoft Word doc

Sledilna ploščica in tipkovnica Uporabniški priročnik

PowerPointova predstavitev

Microsoft Word - M doc

Microsoft Word - NAVODILA ZA UPORABO.docx

II-RIS-Primer Seminarske Naloge Redni-LJ

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

10. Meritev šumnega števila ojačevalnika Vsako radijsko zvezo načrtujemo za zahtevano razmerje signal/šum. Šum ima vsaj dva izvora: naravni šum T A, k

Microsoft Word - CN-BTU4 Quick Guide_SI

Teorija kodiranja in kriptografija 2013/ AES

Zadeva: Ponudba

COBISS3/Medknjižnična izposoja

Microsoft Word - vaje2_ora.doc

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

PowerPointova predstavitev

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI

Vgrajeni sistemi Uvod & ponovitev C

Microsoft Word - A-3-Dezelak-SLO.doc

101353_-an-01-sl-_vbodni_termometer

Microsoft Word - M docx

Microsoft PowerPoint - ORS-1.ppt

Microsoft Word - Trust-CDsize-12052_12579_14070-al-cp_v5.0.doc

an-01-USB_digitalni_zvocniki_Logitech_S-150.docx

Strojna oprema

Transkripcija:

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Žiga Mlakar PROGRAMIRLJIVE STRUKTURE FPGA NIZKE KOMPLEKSNOSTI Diplomsko delo Maribor, september 2014

PROGRAMIRLJIVE STRUKTURE FPGA NIZKE KOMPLEKSNOSTI Diplomsko delo Študent: Študijski program: Smer: Mentor: Žiga Mlakar univerzitetni, Elektrotehnika Elektronika doc. dr. Janez Stergar, univ.dipl.inž. el.

i

ZAHVALA Zahvaljujem se mentorju, doc. dr. Janezu Stergarju za pomoč in vodenje pri opravljanju diplomskega dela. Posebna zahvala velja staršem, ki so mi omogočili študij. ii

Programirljive strukture FPGA nizke kompleksnosti Ključne besede: FPGA, VHDL, Basys 2, logična vezja UDK: 004.312:007.52(043.2) Povzetek Namen diplomskega dela je demonstracija nekaterih funkcionalnosti testne plošče Basys 2. Za načrtovanje smo uporabili programsko orodje Xilinx ISE WebPack. Obravnavali smo načrtovanje na klasičen način z vnosom kode VHDL 1 in novejši grafični način, ter ju primerjali. Preučili smo strukturo načrtovalske plošče, ter na njej predstavili in implementirali primer kombinacijskega in sekvenčnega logičnega vezija oz. avtomat. 1 VHDL, Very High Speed Integrated Circuit Hardware Description Language. iii

Programmable structures FPGA of lower complexity Key words: FPGA, VHDL, Basys 2, logic circuits UDK: 004.312:007.52(043.2) Abstract The purpose of this thesis is to demonstrate some of the features of the Basys 2 design platform. For design we used Xilinx ISE WebPack software tool. We have presented the classic and modern design method for logic circuit design. We compared the old fashioned approach with VHDL input as well as the quicker graphical approach using ISE WebPack. We have examined the structure of the design platform and implemented examples of combinational and sequential logic circuit with a finite state machine example. iv

KAZALO 1 UVOD... 1 2 UVOD V PROGRAMIRLJIVA VEZJA... 2 2.1 CPLD... 2 2.2 FPGA... 3 3 ARHITEKTURA TESTNE PLOŠČE... 4 4 UVOD V JEZIKE ZA STROJNI OPIS DIGITALNIH STRUKTUR... 6 4.1 IZVEDBA MULTIPLEKSORJA S K-DIAGRAMI... 6 4.2 ABEL... 7 4.3 VERILOG IN VHDL... 7 5 OSNOVE VHDL... 9 6 GRAFIČNO PROGRAMSKO ORODJE ZA NAČRTOVANJE Z FPGA XILINX ISE WEBPACK... 11 6.1 PROGRAMSKO ORODJE ISE WEBPACK... 11 6.2 GRAFIČEN VNOS MULTIPLEKSERJA IN PRIMERJAVA DELOVANJA S KODIRANIM OPISOM... 12 7 KOMBINACIJSKA LOGIČNA VEZJA... 14 7.1 KAJ SO KOMBINACIJSKA LOGIČNA VEZJA... 14 7.2 PRIKAZOVALNIK/DEKODIRNIK ŠESTNAJSTIŠKIH ŠTEVIL S 7-SEGMENTNIM PRIKAZOVALNIKOM... 14 7.3 SIMULACIJA IN VERIFIKACIJA DELOVANJA 7-SEGMENTNEGA DEKODIRNIKA... 19 7.4 IMPLEMENTACIJA NA TESTNI PLOŠČI... 19 8 SEKVENČNA LOGIČNA VEZJA... 20 8.1 PRIMER POMIKA BINARNIH PODATKOV Z 8-BITNIM POMIKALNIM REGISTROM... 21 8.2 SIMULACIJA IN VERIFIKACIJA DELOVANJA... 25 8.3 IMPLEMENTACIJA NA TESTNI PLOŠČI... 26 9 AVTOMATI... 27 9.1 PRIMER AVTOMATA - DETEKTOR ZAPOREDJA... 28 9.2 SIMULACIJA IN VERIFIKACIJA DELOVANJA... 30 9.3 IMPLEMENTACIJA NA TESTNI PLOŠČI... 30 10 SKLEP... 31 11 VIRI... 32 12 PRILOGE... 34 v

KAZALO SLIK Slika 3.1 Basys2 Povezave... 4 Slika 4.1 Multiplekser 2na1 in K-diagram... 7 Slika 5.1 Zgled VHDL kode za multiplekser.... 9 Slika 6.1 Koncept poteka načrtovanja.... 12 Slika 6.2 Grafični vnos vezja multiplekserja 2na1 z isim... 12 Slika 6.3 Primerjava simulacij multiplekserja 2na1.... 13 Slika 7.1 Segmenti prikazovalnika Basys2... 15 Slika 7.2 Dekodirnik šestnajstiških števil... 15 Slika 7.3 podatkovni tip std_logic_vector... 16 Slika 7.4 VHDL arhitektura dekodirnika... 17 Slika 7.5 Arhitektura dekodirnika z opisom komponent... 18 Slika 7.6 Simulacija obnašanja dekodirnika opisanega v hex7seg.vhd... 19 Slika 7.7 Položaji stikal in dekodirana HEX vrednost na testni plošči.... 19 Slika 8.1 Kanonična oblika sekvenčnega logičnega vezja... 20 Slika 8.2 Osem bitni pomikalni register... 21 Slika 8.3 Višje-nivojska arhitektura pomikalnega registra - shift_reg8_top... 22 Slika 8.4 delilnik frekvence clkdiv... 23 Slika 8.5 Kako se generira pulz... 24 Slika 8.6 VHDL opis 8-bitnega pomikalnega registra.... 25 Slika 8.7 Simulacija komponente shift_reg8... 25 Slika 8.8 Implementacija pomičnega registra na testni plošči... 26 Slika 9.1 Avtomat tipa Moore.... 27 Slika 9.2 Diagram prehodnih stanj, avtomat Moore... 28 Slika 9.3 RTL prikaz komponent in povezav detektorja... 28 Slika 9.4 Prehodna stanja z naštevnim tipom " enumerated type".... 29 Slika 9.5 Simulacija detektorja zaporedja... 30 Slika 9.6 Detektor na testni plošči... 30 vi

UPORABLJENE KRATICE TTL, transistor- transistor logic (tip implementacijske tehnologije). PLD, programmable logic device (tip implementacijske tehnologije). PAL, programmable Array Logic (tip implementacijske tehnologije). GAL, generic array logic (tip implementacijske tehnologije). CPLD, complex programmable logic devices (tip implementacijske tehnologije). FPGA, field programmable gate array (tip implementacijske tehnologije). NVM, non-volitile memory (tip spomina). LUT, lookup table (vpogledna tabela). RAM, Random Access Memory. (bralno-pisalni pomnilnk). CLB, configurable logic block (nastavljiv logični blok). DCM, digital clock manager (upravljalnik digitalne ure). ESD, Electrostatic discharge (elektrostatična razelektritev). EDA, Electronic design automation (kategorija programskih orodij). HDL, Hardware description language (kategorija programskih jezikov za opis hardvera). ABEL, Advanced Booelan Expression Language (HDL jezik). IEEE, The Institute of Electrical and Electronics Engineers (svetovno združenje inženirjev elektrotehnike in elektronike). VHDL, Very High Speed Integrated Circuit Hardware Description Language (HDL jezik). I/O, Input/Output (vhodno/izhodna povezava). USB, Universal Serila Bus (tip konektorja). ROM, Read Only Memory (bralni pomnilnk). VGA, Video Graphics Array (herdver prikazovalnika). UCF, User Constraints File (datoteka kamor zapišemo povezavo signalov na hardver). RTL, Register Transfer Level (nivo registerskih prenosov). LED, light emitting diode (svetilna dioda). MSB, most significant bit (bit z največjo težo). LSB, least significant bit (bit z najmanjšo težo). vii

1 UVOD Namen diplomskega dela je demonstracija nekaterih lastnosti testne plošče Basys 2. Za načrtovanje smo uporabili programsko orodje Xilinx ISE WebPack. Prikazali smo načrtovanje na klasičen in novejši način oz. primerjali grafični in VHDL vnos vezja. Na testni plošči smo predstavili in implementirali različne tipe logičnih vezij. Začeli smo z uvodom v programirljiva vezja, kjer smo predstavili različne tehnologije, ki se uporabljajo za implementacijo logičnih vezij. Nato smo podrobneje pregledali arhitekturo izbrane testne plošče, ki uporablja FPGA tehnologijo, in opisali njene lastnosti. V uvodu v programske jezike za strojni opis digitalnih struktur, smo tudi prikazali ročno načrtovanje logičnega vezja in tako naredili povezavo z naslednjim poglavjem, kjer smo isto vezje opisali v VHDL in preko tega primera predstavili osnovno skladnjo jezika. V nadaljevanju smo opisali potek načrtovanja znotraj ISE WebPack, kjer smo opisali posamezne stopnje in prenos na testno ploščo. V istem poglavju smo prikazali tudi grafičen vnos vezja, ga simulirali z orodjem isim in rezultat primerjali s simulacijo opisa vezja z VHDL. V drugi polovici naloge smo predstavili in implementirali različne tipe logičnih vezij. Prvi predstavljen tip so kombinacijska logična vezja. Krajšemu opisu kaj ta vezja so, sledi primer s katerim smo prikazali dekodirnik, simulacijo delovanja in uporabo sedem segmentnega prikazovalnika testne plošče. Lastnosti jezika VHDL smo opisovali sproti, ko smo jih prvič uporabili na primeru. Drugi predstavljen tip digitalnih struktur so sekvenčna logična vezja, kjer sledimo enakemu zaporedju opisa in simulacije. Za primer smo izbrali osembitni pomikalni register, katerega implementacija na plošči nazorno prikaže njegovo delovanje. Nazadnje smo prikazali še tipičnega predstavnika sekvenčnih vezij v obliki avtomata, kjer smo izbrali Moorov avtomat za implementacijo detektorja zaporedja. 1

2 UVOD V PROGRAMIRLJIVA VEZJA Tranzistorsko-tranzistorski logična integrirana vezja TTL 1 so bila zasnovana že v daljnih 60-ih. Omenjena integrirana vezja tipično vsebujejo ekvivalent več tranzistorjev. Hitri napredki v tehnologiji integriranih vezij so povečevali število tranzistorjev na vezjih. Ideja uporabiti zmogljivost integriranih vezij za fleksibilnost, pri čemer se lahko isto integrirano vezje večkrat konfigurira za izvajanje različnih funkcij. Konec 70-ih je bilo izdelanih več različnih tipov programirljivih logičnih vezij PLD 2 (npr. PAL 3, GAL 4 ). Zmogljivost teh je, da lahko v en gradnik programiramo logiko za katero bi drugače porabili veliko TTL gradnikov. Izvorno PLD logiko lahko ponovno programiramo s čisto novo in s tem spremenimo njegovo funkcionalnost. Z vgradnjo več PLD v eno integrirano vezje dobimo kompleksne programirljive logične naprave CPLD 5. Kasneje so bile zasnovane še bolj kompleksne strukture, t.i. vezja s programirljivimi polji oz. vezja FPGA 6. Le-ta lahko vsebujejo tudi več milijonov sistemskih vrat na enem samem integriranem vezju. Omenjena tehnologija je tudi osrednji del testne plošče Basys2, ki smo jo uporabili v diplomskem delu [2]. 2.1 CPLD Z višanjem gostote celic integriranih vezij so nastale kompleksne programirljive logične naprave CPLD, ki so ekvivalentne več PLD na enem samem integriranem 1 TTL, transistor- transistor logic 2 PLD, programmable logic devices 3 PAL, programmable Array Logic 4 GAL, generic array logic 5 CPLD, complex programmable logic devices 6 FPGA, field programmable gate array 2

vezju.makrocelice 1, so glavni gradnik CPLD. Vsaka makrocelica se obnaša kot PLD [2]. Po kompleksnosti sodijo CPLD med PLD in FPGA. Najbolj opazna razlika v primerjavi med velikim CPLD in manjšim FPGA je, da ima CPLD na čipu obstojni pomnilnik, NVM 2. NVM je pomnilnik, ki ohrani vsebino tudi, ko je napajanje naprave izklopljeno. Zaradi te karakteristike se v CPLD uporablja za izvajanje funkcij zagonskega nalagalnika 3, ki ob zagonu pripravi napravo, preden se kontrola nad delovanjem dodeli drugim napravam v sistemu. Npr. CPLD se uporablja za nalaganje konfiguracijskih podatkov v FPGA iz NVM. CPLD funkcionira takoj ob zagonu sistema [5]. 2.2 FPGA Je najkompleksnejša arhitektura PLD. Strukturo so prvič izdelali v 80-ih in uporablja vpogledne tabele LUT 4, ki bazirajo na RAM 5 pomnilniku namesto na IN/ALI vratih za implementacijo kombinacijske logike. Napravo sestavlja zbirka nastavljivih logičnih blokov CLB 6, katere obdaja zbirka I/O blokov. Basys2 vsebuje FPGA čip družine Spartan- 3E proizvajalca Xilinx. Vsebuje nekaj RAM blokov, množilnike 18x18, kot tudi nadzorni digitalni časovni blok DCM 7, ki se uporablja za izničenje distribucijskega zamika urinega signala, pravtako lahko poveča ali zmanjša frekvenco urinega signala. Vsak CLB blok pri Spartan-3E je razdeljen na štiri rezine, vsaka vsebuje dve tabeli 16x1, RAM LUT, ki lahko implementira katerekoli kombinacijsko logično funkcijo štirih spremenljivk. Pravtako vsaka rezina vsebuje dva D flip-flopa, ki se obnašata kot bitni pomnilniški napravi. Na splošno lahko v FPGA implementiramo veliko večje digitalne sisteme kot v CPLD [2]. 1 angl. macrocell. 2 NVM, non-volitile memory. 3 Ang. boot loader. 4 LUT, lookup table. 5 RAM, Random Access Memory. 6 CLB, configurable logic block. 7 DCM, digital clock manager. 3

3 ARHITEKTURA TESTNE PLOŠČE Za implementacijo digitalnih vezij smo uporabili testno ploščo Basys2, proizvajalca Digilent. V nadaljevanju (slika 3.1) je prikazana skica arhitekture plošče in povezave med različnimi elementi. Slika 3.1 Basys2 Povezave Značilnosti izbrane testne plošče so: Xilinx Spartan 3-E FPGA čip: 100.000 logičnih vrat, 2160 ekvivalentnih logičnih celic, 240 elementov CLB, 72 kb hitrega bloka RAM, 4 namenske 18-bitne množilnike, 4 urine DCM bloke, maksimalno 108 I/O. 4

Vrata za FPGA napajanje Atmel AT90USB2 USB 1, za konfiguracijo in prenos podatkov. Xilinx XCF02 Flash ROM 2, za shranjevanje FPGA konfiguracije. Nastavljiv oscilator (frekvence 25, 50 in 100 MHz). 8 LED diod, 4 sedem segmentne prikazovalnike, 4 gumbe, 8 stikal, PS/2 in 8-bitni VGA 3. 4 glave s šest I/O 4 priključki (PMOD), zaščito pred ESD 5 in kratkim stikom [6], [7]. 1 USB, Universal Serila Bus. 2 ROM, Read Only Memory. 3 VGA, Video Graphics Array. 4 I/O, Input/Output. 5 ESD, Electrostatic discharge. 5

4 UVOD V JEZIKE ZA STROJNI OPIS DIGITALNIH STRUKTUR V preteklosti so digitalna vezja načrtovali ročno, z uporabo tehnik kot so Boolove enačbe, shema vezja, K diagrami (angl. Karnaugh) in diagrami prehajanja stanj. Z uporabo računalniških načrtovalskih metod in orodij je bil načrtovalski proces preseljen v računalnik z uporabo EDA 1 orodij. Z razvojem in standardizacijo opisnih jezikov strojne opreme HDL 2, je postala HDL metoda vnosa dizajna, ki uporablja tekstovni način opisovanja digitalnih vezij najbolj priljubljena med načrtovalci.[1] 4.1 Izvedba multipleksorja s K-diagrami S primerom v nadaljevanju smo želeli prikazati, kako z ročno metodo pridemo od logične tabele, ki opisuje delovanje multiplekserja, do delujočega logičnega vezja, katerega bi lahko realizirali s TTL čipi. Multiplekser»2 na 1«izbira med dvema vhodoma na podlagi vrednosti izbirnega vhoda "s" (angl. select). Če ima le-ta vrednost 0, izbere npr. vhod A in njegovo vrednost preklopi na izhod Y. To obnašanje opisuje tabela (slika 4.1), s katere uporabo in prepis v K-diagram, izpeljemo logično enačbo in jo neposredno pretvorimo v vezje. Kadar gre za preprost primer z majhnim številom logičnih vrat, je izvedba na ta način izvedljiva ročno, ko pa imamo opravka z logičnimi čipi, ki vsebujejo veliko število logičnih vrat, s katerimi želimo implementirati kompleksnejša logična vezja, postane ta metoda nepraktična. Tu pridejo v poštev HDL jeziki, kot so VHDL, Verilog in ABEL ki 1 EDA, Electronic design automation. 2 HDL, Hardware description language. 6

omogočajo, da na višjem nivoju, z opisnim jezikom, specificiramo delovanje logičnih vezij. Slika 4.1 Multiplekser 2na1 in K-diagram 4.2 ABEL ABEL 1 je jezik in zbirka načrtovalskih orodij za programiranje PLD struktur. ABEL vsebuje skladnjo za opis vezij z enačbami, pravilnostnimi tabelami, kot tudi skladnjo za sekvenčni opis avtomatov s stanji. Vsebuje tudi skladnjo za opis testnih vektorjev. To so vzorci vhodnih vrednosti in pričakovanih izhodnih vrednosti. S prihodom in popularnostjo FPGA vezij se PLD jeziki kot je ABEL opuščajo [9]. 4.3 Verilog in VHDL Verilog in VHDL sta standardizirana HDL jezika (standard IEEE 2 ). Prvi je bolj razširjen v industriji, medtem ko drugi bolj v pedagoško/raziskovalnem okolju. Čeprav se oba jezika razlikujeta, imata oba podobne lastnosti. VHDL je lahko bolj abstrakten, Verilog pa bolj praktičen v kontekstu implementacije, saj je blizu prog. jeziku C. Oba sta prenosljiva med platformami in tehnološko neodvisna. To je pomembna lastnost, saj se tehnologija digitalnih vezij hitro spreminja. Z uporabo standardnega jezika se načrtovalec lahko 1 ABEL, Advanced Booelan Expression Language. 2 IEEE, The Institute of Electrical and Electronics Engineers. 7

osredotoči na funkcionalnost vezja, brez da se ukvarja z detajli tehnologije implementacije. Dizajn vnašamo s pisanjem VHDL/Verilog kode. V diplomskem delu smo uporabili VHDL [10]. 8

5 OSNOVE VHDL VHDL koda je sestavljena iz treh delov (slika 5.1). Za osnovni zgled in primerjavo z ročno metodo smo uporabil kodo, ki v VHDL opiše delovanje multiplekserja (slika 4.1). Slika 5.1 Zgled VHDL kode za multiplekser. Najprej določimo referenčne knjižnice (angl. reference libraries). Knjižnico vključimo s stavkom "library". S stavkom "use" vklučimo paket iz te knjižnice, s končnico ".all" izberemo vse definicije iz knjižnice. IEEE knjižnica vsebuje standardne gradnike načrtovanja, npr. paket "std_logic_1164" vsebuje definicije za "std_logic" (podatkovni tip z devetimi logičnimi vrednostmi za bit), "std_logic_vector", kakor tudi enostavne logične operacije kot so (and, not, ) [1]. Znotraj entitete oz. jedra opisa vezja (angl. entity), opišemo I/O načrt priključkov in pripadajoče parametre, ki prilagodijo načrtovanje. Ta del kode si lahko predstavljamo kot črno škatlo z I/O povezavami. I/O povezave določimo z uporabo stavka "port", in načina 9

delovanja povezave "mode", ki določa smer toka podatkov. V primerih obravnavanih v nalogi smo uporabili naslednje načine: način "in": priključek v tem načinu lahko beremo, ne moremo pa mu dodeliti vrednosti. Vrednosti se naložijo izven entitete (simulacijska datoteka.vhd). Uporablja se za enosmerne podatkovne signale in za kontrolne signale. način "out": temu lahko priredimo vrednost, ne moremo pa ga brati. Vrednosti izvirajo znotraj entitete. Uporabljamo ga za izhod (angl. output) entitete, ne pa kot interni povratni signal (angl. feedback). Za multiplekser smo določili tri vhodne signale in en izhodni signal. Vsak ima določen način glede na to, za kaj se uporablja. Uporabljen podatkovni tip je "std_logic", kar pomeni, da po takem signalu lahko prenašamo podatke tipa "bit" [1]. Entiteti sledi arhitektura (angl. architecture). Obsega opis obnašanja vezja navedenega v entiteti. Pred stavkom "begin" zapišemo signale in komponente, katere bomo uporabili znotraj arhitekture. Znotraj arhitekture se vse kar je za stavkom "begin" izvede sočasno, zato vrstni red navedb ni pomemben (je pa smiseln). Vrstni red je pomemben znotraj sekvenčnih izjav kot so "process", "function" ali "procedure". Sočasne izjave določajo signale, procese in komponente. Signalom določamo vrednosti s prireditvenim operatorjem "<=", ki desni del priredi levemu. [1] VHDL je neobčutljiv na velikost črt (za razliko od Veriloga). Dobro se je tudi držati nekega stila pisanja, saj to izboljšuje berljivost in preglednost kode. Kodo komentiramo tako, da za oznako "--" napišemo komentar, oznaka je lahko na začetku vrstice ali pa za neko kodo [1]. Generiki, "generic", se uporabijo, ko je morebiti potrebno neko vrednost, ki jo uporabljamo v dizajnu spremeniti, kadarkoli se ta dizajn uporabi. Generike deklariramo znotraj entitete, vstavimo ga takoj pred deklaracijo "port". Generiki so uporabni, če pišemo kodo, ki bo uporabna večkrat, z njimi nastavimo nek parameter. V prilogi je podana izvedba multipleksorja z uporabo deklaracije "generic". Uporabimo ga za določanje dinamične oz. spremenljive bitne širine zunanjih priključkov entitete [1]. (Priloge_Mlakar.zip\Priloge_Mlakar\example10\mux2g.vhd) 10

6 GRAFIČNO PROGRAMSKO ORODJE ZA NAČRTOVANJE Z FPGA XILINX ISE WEBPACK 6.1 Programsko orodje ISE Webpack ISE Webpack (priloga 1) je programski paket, proizvajalca Xilinx, ki smo ga uporabili pri modeliranju logičnih vezij. Logična vezja smo modelirali z VHDL kodo. Samo orodje podpira poleg VHDL tudi Verilog in grafični vnos. Načrtovanje znotraj ISE je potekalo tako, da smo ustvarili nov projekt, kateremu smo dodali izvorne datoteke, kot so VHDL koda logičnega vezja, tekstovno datoteko UCF 1, ki opisuje povezave med signali in I/O priključki načrtovanega FPGA čipa (strojne omejitve) in testno datoteko (angl. test bench), ki opisuje simulacijske signale (slika 6.1). Nato je sledila sinteza, kjer sintezno orodje avtomatsko prevede HDL izvorne datoteke v opis "netlist", ki specificira kateri logični gradniki bodo uporabljeni in kako bodo med seboj povezani. Na tem mestu postane naš dizajn odvisen od tehnologije implementacije. S seznamom povezav gradnikov ("netlist") lahko izrišemo tudi RTL 2 shemo našega vezja, kjer je razvidno kako so med seboj povezane posamezne komponente FPGA. RTL opisuje shranjevanje v registre in tok podatkov v vezju, skupaj z logičnimi operacijami, ki se izvedejo nad podatki. Za sintezo sledi implementacija, ki prevede, preslika in postavi arhitekturo znotraj navedenih omejitev. Na koncu generira bitni tok (angl. bitstream) datoteko ".bit", ki jo s programom Digilent Adept, naložimo v testno ploščo Basys2 1 UCF, User Constraints File. 2 RTL, Register Transfer Level. 11

(priloga 3). Vezje smo lahko tudi simulirali znotraj isim (priloga 2), t.j. programa za simulacije znotraj ISE WebPack, ki nam prikaže časovni potek obnašanja signalov. Testne signale lahko vnesemo tudi ročno prek konzole ali predhodno napišemo testno datoteko [1], [11]. Slika 6.1 Koncept poteka načrtovanja. 6.2 Grafičen vnos multiplekserja in primerjava delovanja s kodiranim opisom Predhodno smo že opisali (slika 4.1) kako iz pravilnostne tabele dobimo logično enačbo in vezje za multiplekser 2na1. V nadaljevanju bomo demonstrirali kako smo to isto vezje preko shematskega urejevalnika grafično vnesli v ISE Webpack. V urejevalniku smo izbrali potrebne logične gradnike in določili I/O povezave (Slika 6.2). Slika 6.2 Grafični vnos vezja multiplekserja 2na1 z isim. 12

Skladnost delovanja z predhodnimi navedbami (slika 5.1) smo preverili tako, da smo shematski in kodiran opis multiplekserja posebej simulirali v isim, z uporabo enakih testnih signalov, katere smo opisali tekstovno znotraj testne datoteke. Na simulacijskem diagramu (slika 6.3) se oba signala ujemata in prikazujeta enako delovanje, tako vidimo da sta si oba opisa logičnega vezja enakovredna. Slika 6.3 Primerjava simulacij multiplekserja 2na1. 13

7 KOMBINACIJSKA LOGIČNA VEZJA 7.1 Kaj so kombinacijska logična vezja To so logična vezja, katerih izhodi so odvisni samo od trenutnega stanja vhodov vezja.[2] Kombinacijska logična vezja so v VHDL opisana z uporabo izjav za sočasno izvajanje signalov (angl. concurrent signal statement) ali z uporabo izjave "process" [3]. 7.2 Prikazovalnik/Dekodirnik šestnajstiških števil s 7-segmentnim prikazovalnikom Vsak od štirih 7-segmentnih prikazovalnikov (slika 7.1) je sestavljen iz sedmih LED 1 segmentov, sestavljenih v ustrezen vzorec. Segmenti na testni plošči so povezani v konfiguracijo s skupno anodo, t.j. če hočemo segment aktivirati nanj pripeljemo logično "0" [6]. 1 LED, light emitting diode (svetilna dioda). 14

Slika 7.1 Segmenti prikazovalnika Basys2 V obravnavanem primeru smo realizirali dekodirnik, ki bo vhodno šestnajstiško številko (od 0 do F) ustrezno pretvoril in prikazal na 7-segmentnem prikazovalniku (segmenti A do G). Vhod v dekodirnik je šestnajstiška številka, dolga polovico zloga, ki je zapisana v obliki spremenljivke "x(3:0)". Izhod dekodirnika je koda za 7-segmentni prikaz v obliki spremenljivke "a_to_g(6:0)" (slika 7.3). Pravilnostna tabela prikazuje kateri segmenti naj se prižgejo, ko je na vhodu veljavno šestnajstiško število (priloga 4). Dekodirnik bi lahko realizirali na način, da bi za vsak segment tvorili K-diagram in tako dobili sedem logičnih enačb za vsakega ločeno. VHDL pa omogoča uporabniško prijaznejši način tvorjenja vzbujevalnih enačb z uporabo stavka "case/when" (priloga 5) [2]. Slika 7.2 Dekodirnik šestnajstiških števil Pri določanju vhodnih in izhodnih signalov (slika 7.3) smo uporabili podatkovni tip "std_logic_vector". Ker je vhod širok 4 bite, izhod pa 7, saj sestavlja segment 7 delov, je tu 15

zapis v obliki vektorja najbolj primeren. Zapis "downto" znotraj oklepaja pomeni smer uteženosti bitov; od (MSB 1 ) k (LSB 2 ). Slika 7.3 podatkovni tip std_logic_vector Za opis kombinacijskih logičnih vezij lahko uporabimo tudi stavek "process", znotraj katerega se operacije izvajajo sekvenčno in se bodo izvedle v takem zaporedju kot so zapisane, zato je pomemben vrstni red (Slika 7.4). Znotraj arhitekture je lahko več "process" stavkov, ki operirajo sočasno, lahko si jih predstavljamo kot bloke, ki tečejo paralelno. [1] V oklepaju zraven ukaza "process", določimo prožitvene signale (na spremembo katerih bo proces občutljiv), se pravi, da če se spremeni vrednost glede na spremembo katerikoli od prožitvenih signalov se bo proces izvedel sicer ne. Procesni stavek si lahko predstavljamo kot program, ki se bo izvedel sekvenčno od zgoraj navzdol, zato je vrstni red izjav v njem pomemben, izjave se izvedejo brez pomembnejše zakasnitve [2]. Stavek "case/when" omogoča, da direktno prevedemo pravilnostno tabelo in tako ne potrebujemo iskati logičnih enačb. Vrednost, ki sledi navedbi "when" v vsaki vrstici, predstavlja vrednost parametra "case", v našem primeru je to štiri bitni vhod "x". Vrstica 24 podanem primeru kode (slika 5.1) dodeli 7-bitno vrednost "0000110" polju a_to_g (array), ko bo vhodna šestnajstiška vrednost vektorja "x" enaka "3" (0011). Vrednost polje "a_to_g (6)" ustreza segmentu A, vrednost polja "a_to_g(0)" pa zadnjemu segmentu G. VHDL uporablja pred šestnajstiškim številom znak X. [2] Skladnja "when others" zagotovi, da pokrijemo vse ostale možne logične vrednosti, to je zato ker VHDL definira devet možnih vrednosti za vsak bit tipa "std_logic" [2]. 1 MSB, most significant bit. 2 LSB, least significant bit. 16

Vsi obravnavani primeri zagotavljajo, da bo končni rezultat sinteze kot načrtovano. Če so nekatera stanja izpuščena, sintezno orodje samo določi kakšen naj bo končni rezultat, rezultat je lahko vezje, ki porabi več logike kot je potrebno. Ključna beseda "others" upošteva katerekoli primer logične vrednosti, ki ni bila generirana. V tem primeru postavimo vse izhode na "0". Stavek "case" zaključimo z "end case" [1]. Slika 7.4 VHDL arhitektura dekodirnika Ko načrtujemo logično vezje je priročen hierarhičen način pisanja VHDL kode. V nadaljevanju obravnavamo isti primer z drugačnim pristopom opisa obnašanja. Uporabljena je skladnja za dekodirnik z uporabo komponent. Uporabili smo skladnjo "component" in "port map" (top level design). 17

Slika 7.5 Arhitektura dekodirnika z opisom komponent. Stavek "component" ima podoben format kot entiteta znotraj njega. Z navedbo "port" določimo vhodne in izhodne povezave, ki bodo kasneje uporabljene za povezavo komponente v celoto. Vsako komponento je potrebno deklarirati. Komponenta je kot entiteta znotraj entitete. Po deklaraciji "begin" najprej definiramo vse komponente. Isto lahko uporabimo večkrat, vendar mora imeti vsaka instanca unikatno ime [1]. Stavek "port map" določa kako naj bo vsaka od uporabljenih komponent povezana znotraj arhitekture [1]. V 32. vrstici v je razvidno kako izvedemo preslikavo vrat komponente z ostalimi notranjimi signali arhitekture. Povezave med komponentami znotraj dizajna so vidne v RTL prikazu (priloga 7). Vsak od štirih bitov prikazanih na 7-segmentnem prikazovalniku se aktivira z enim od aktivno nizkih signalov npr. vektorjem "an(3:0)". Vsi biti si delijo segmente, ki se aktivirajo z vektorjem "a_to_g(6:0)". Če je "an(3:0)" enak "1110" pomeni, da je aktiviran najbolj desni bit vektorja. Decimalne pike na prikazovalniku smo izklopili, tako da smo "dp" postavil na "1". [2] Da načrtovano vezje prenesemo na testno ploščo, moramo napisati še t.i. tekstovno datoteko UCF, v kateri navedemo povezave med signali arhitekture višjega nivoja in priključki FPGA čipa (priloga 9). 18

7.3 Simulacija in verifikacija delovanja 7-segmentnega dekodirnika V simulacija delovanja lahko vidimo, kako se vhodne vrednosti, prikazane v binarni obliki pretvorijo v izhodne vrednosti, predstavljene v šestnajstiški obliki (slika 7.6). Simulacija je skladna z delovanjem obravnavanega dekodirnika (slika 7.4). Slika 7.6 Simulacija obnašanja dekodirnika opisanega v hex7seg.vhd 7.4 Implementacija na testni plošči V nadaljevanju podajamo primer, ki prikazuje funkcionalnosti testne plošče. S premikanjem štirih stikal smo nastavljali štiri bitne vhodne vrednosti, vsako stikalo predstavlja en bit, najbolj desno stikalo "P11" predstavlja bit z najmanjšo težo. Dekodirana vnešena vrednost se nato prikaže na skrajno desnem 7-segmentnem prikazovalniku v šestnajstiški obliki. Slika 7.7 Položaji stikal in dekodirana HEX vrednost na testni plošči. 19

8 SEKVENČNA LOGIČNA VEZJA Izhodi sekvenčnih logičnih vezij so odvisni ne le od trenutnega stanja vhodov, temveč tudi od preteklih stanj vezja. Takšen tip logičnih vezij potrebuje pomnjenje (flip-flop) [2]. Sekvenčna logična vezja bazirajo na elementih kombinacijskih logičnih vezij, ki delujejo v kombinaciji s sekvenčnimi elementi, recimo D flip-flope povežemo skupaj, da tvorijo avtomat. Lahko bi tudi rekli, da je sekvenčna logika, kombinacijska logika s pomnjenjem. Slika 8.1 Kanonična oblika sekvenčnega logičnega vezja Na predhodni sliki (slika 8.1) je razvidno, da gredo vhodi vezja v kombinacijski logični del in da izhode dobimo iz kombinacijskega dela. Sekvenčni logični elementi nato začasno shranijo izhod kombinacijskega dela. Ta se nato pošlje nazaj v kombinacijski del. Tako se trenutno stanje vezja upošteva na vhodu (angl. present state). Izhod iz kombinacijskega dela predstavlja vhod v sekvenčni logični del, kjer so sekvenčni elementi. Tako se določi naslednje stanje vezja (angl. next state). Trenutno stanje se spremeni ob naslednji dvigajoči/padajoči fronti referenčnega urinega signala (angl. rising/falling edge), če gre za sinhrono logično vezje [1]. 20

8.1 Primer pomika binarnih podatkov z 8-bitnim pomikalnim registrom D flip-flop lahko pomni 1 bit. Na vhodu D postavljena logična 1 se ob dvigajoči fronti urinega signala, prenese na izhod Q. Če bi bila na vhodu logična 0, bi se na izhod Q prenesla logična 0. Registri so sestavljeni iz niza D flip-flopov povezanih zaporedno (slika 8.2). Osem bitni pomikalni register obsega osem D flip-flopov. Slika 8.2 Osem bitni pomikalni register Ob vsaki periodi ure referenčnega signala "clk", se shranjeni binarni podatki pomaknejo iz enega D flip-flopa v naslednjega. Serijski podatki v obliki niza se vnesejo z leve proti desni prek vhoda "data_in" skrajno levega D flip-flopa. Ob vsakem urinem pulzu se podatek na "data_in" zapiše v qs(0), stara vrednost qs(0) pa se zapiše v qs(1), podobno vse do zadnjega bita v qs(7), ki izpade. Vse vrednosti se pomaknejo hkrati [2]. V nadaljevanju je prikazana višje-nivojska arhitektura pomikalnega registra (slika 8.3). Iz diagrama je razvidno, da so vključene tri komponente; clkdiv, clock_pulse in shift_reg8. Povezujejo jih signali, ki predstavljajo interno ožičenje, po katerem potujejo podatki in povezujejo različne dele arhitekture registra. Nekaj več o signalih v nadaljevanju. 21

Slika 8.3 Višje-nivojska arhitektura pomikalnega registra - shift_reg8_top Hoteli smo, da se v register shrani vrednost samo ob pritisku na gumb. Če bi bila registrska komponenta priklopljena neposredno na uro testne plošče s 50 MHz, bi perioda premika vsebine znaša 20 ns. Zaradi zelo kratkega časa proženja celic moramo upoštevati tudi spreminjajoče se vrednosti tipke "btn(1)", ki pri vklopu za kratek čas logično zaniha. Potresavanje med 0 in 1 moramo v sekvenčnih logičnih vezjih kompenzirati. Kompenzacijo smo realizirali s komponento "clock_pulse", kot vhodnim signalom za uro "clk" registra "shift_reg8" in uporabo logičnih vrat ALI na katera smo pripeljali tipki "btn(0)" in "btn(1)" kot vhodna signala za komponento "clock_pulse". Tako smo generirali urin impulz ne glede na katero tipko smo pritisnili. Vendar vhodno vrednost, ki jo pomikamo v register pogojuje samo "btn(1)", kar pomeni, da se v register pomakne 1, če pritisnemo "btn(1)", sicer se v register pomakne 0. Komponenta "clkdiv" (delilnik frekvence) spremeni 50 MHz urin signal plošče v referenčni signal s 190 Hz (perioda pribl. 5 ms). Ta signal proži komponento "clock_pulse". Izhodni pulz "clkp" se generira šele tri urine cikle po tem, ko pritisnemo tipko, zato bo imel btn(1) zadosten prenihajni čas, da se ustali na logični vrednosti 1 na vhodu "din" pomikalnega registra, preden se vrednost vstavi v register [2]. 22

V komponenti "clkdiv" je uporabljen števnik kot delilnik frekvence signala "clk", kar je koristno, ko potrebujemo referenčno uro z nižjo frekvenco, znotraj dizajna (slika 8.4) [2]. Tabelo frekvenc in period 24-bitnega števnika (priloga 15), opisuje naslednja enačba: f = (8.1) 2 f i i+ 1 Tu je: f i izhodna frekvenca števca (Hz), f nazivna frekvenca (Hz), i inkrement. Slika 8.4 delilnik frekvence clkdiv Pogoj (mclk'event and mclk = '1' ) v stavku "if-then" znotraj procesa, nadzira spremembo signala "mclk" in pogojuje prehod iz 0 > 1. Če je pogoj v stavku izpolnjen se izvedejo naslednji stavki v kodi (8.4) izvede inkrementacija signala q [8]. Komponenta "clock_pulse" ima nalogo, da zakasni vhodni signal "inp" in generira en sam pulz, ko pritisnemo tipko. Razvidno je, da je "process" občutljiv na "cclk" in clr signal. Se pravi, se ob spremembi kateregakoli tudi izvrši. Ko pripeljemo v komponento urin signal "clock_pulse" iz "clkdiv", se izvede stavek "elsif", ki pogojuje tri zakasnitve. Te zakasnijo "inp" za tri polovične urine cikle. Izhodni pulz se generira z logično funkcijo AND kjer se upoštevajo vse tri zakasnitve (slika 8.5). Izhodni pulz "outp" traja samo urin cikel. 23

Slika 8.5 Kako se generira pulz. V navedeni VHDL kodi je "signal" prenašalec vrednosti. Deklariramo ga, ko je dizajn namenjen simulaciji in sintezi. Signali se uporabljajo za povezovanje komponent znotraj dizajna in za prenašanje informacij. Signal je objekt, ki ima strojni pomen. Z njim so povezane tudi časovne lastnosti. Simbol za prireditev vrednosti signalom je "<=". Signali se lahko uporabljajo v sekvenčnem ("process") in sočasno izvajanem delu VHDL kode ("architecture"), deklariramo pa jih lahko le v sočasno izvajanem delu kode. Signale, ki so v arhitekturi interni, lahko uporabimo za povezovanje izhodov/vhodov komponent arhitekture [1]. Komponenta "shift_reg8" je VHDL model osem bitnega pomikalnega registra z uporabljeno arhitekturo obnašanja (angl. behavior). Tak model opisa se osredotoči samo na funkcionalnost vezja. Orodje ISE nato določi, kako zgleda dejanska struktura vezja znotraj FPGA. Iz podanega primera je razvidno, da ko je izpolnjen pogoj ob fronti urinega signala, se bitna vrednost "data_in" shrani v LSB registra, ki predstavlja 8-bitni signal tipa std_logic_vector. Vrednosti, ki so že shranjene v register pa se premaknejo za eno mesto v desno. Signal "qs" na koncu prenesemo na signal q, ki predstavlja izhodni signal tipa "std_logic_vector". 24

Slika 8.6 VHDL opis 8-bitnega pomikalnega registra. 8.2 Simulacija in verifikacija delovanja Iz simulacije (slika 8.7) je razvidno, kako se ob prvi fronti urinega signala v LSB registra shrani binarna vrednost 1 na vhodu. Ob vsakem novem urinem ciklu se v register shrani nova vrednost iz "data_in", medtem ko se stare vrednosti sočasno pomaknejo za 1 bit višje. Ko je prvotna vhodna binarna 1 dosegla MSB lokacijo v registru je ob naslednjem urinem ciklu izgubljena. Iz simulacije je tudi razvidno katere vrednosti, so trenutno znotaj registra, kar prikazuje q[7:0]. Slika 8.7 Simulacija komponente shift_reg8 25

8.3 Implementacija na testni plošči Binarne podatke smo pomikali v register z uporabo dveh tipk. Če pritisnemo "btn(1)", bomo v register pomaknili 1 (prižgana LED), če pa pritisnemo gumb "btn(0)" bomo v register pomaknili 0 (ugasnjena LED). Prikazano je kako se vnešene vrednosti pomikajo znotraj registra od LSB (LED "M5") v smeri MSB (LED "G1"). Tako razporeditev smo določili znotraj UCF tekstovne datoteke (priloga 16). Slika 8.8 Implementacija pomičnega registra na testni plošči 26

9 AVTOMATI Končni avtomati (angl. finite state machine) so sekvenčna logična vezja, ki reagirajo na enega ali več trenutnih vhodov vezja, tako da se avtomat premakne v enega izmed več možnih stanj, kar je odvisno od trenutnega stanja avtomata. Spadajo med sekvenčna vezja, kot smo jih spoznali v prejšnem poglavju vendar so modificirana oblika sekvenčnega logičnega vezja (8.1) [1]. Tipični sta dve vrsti avtomatov; Moore in Mealy. Na primeru v nadaljevanju smo uporabili avtomat tipa Moore, kar pa v našem primeru ni tako pomembno, saj je z obema modeloma mogoče predstaviti delovanje istega logičnega vezja. Slika 9.1 Avtomat tipa Moore. Za avtomat tipa Moore je značilno, da je njegov izhod odvisen samo od trenutnega stanja avtomata (slika 9.1). Iz diagrama je razvidno, da je kombinacijski del razdeljen na dva dela; del C1, ki določa logiko vzbujevalnih enačb (naslednja stanja) in del C2, ki določa izhodno logiko avtomata. Izhod C1 vodi v register stanj (sekvenčni del), ki naslednje stanje shrani, izhod C2 pa predstavlja neposredni izhod avtomata [1], [2]. 27

9.1 Primer avtomata - Detektor zaporedja Detektor zaporedja išče vzorec "1 1101" na serijskem vhodu. Ko bo zaporedje prepoznal, to signalizira z logično 1 na izhodu avtomata. Delovanje detektorja prikazuje diagram stanj (slika 9.2). Detektor omogoča tudi zaznavanje zaporedja, ko se zadnja enica v nizu prekriva s prvo enico v naslednjem. Npr., ko smo v stanju s4 in na se vhodu pojavi 1, se premaknemo v stanje s2, ki začne z novo detekcijo vzorca. [2] Slika 9.2 Diagram prehodnih stanj, avtomat Moore Avtomat smo v VHDL modelirali direktno iz diagrama prehajanja stanj, na nivoju obnašanja. Uporabili smo tudi dve komponenti, ki smo jih uporabili že v predhodnem poglavju (delilnik frekvence "clkdiv" in "clock_pulse"), zaradi istih razlogov, saj tudi tu vnašamo binarne vhodne vrednosti preko dveh tipk na testni plošči (slika 9.3). Slika 9.3 RTL prikaz komponent in povezav detektorja 28

Komponenta "seqdeta" predstavlja avtomat Moore, ki je razčlenjen v tri procese (slika 9.1). Stanja avtomata smo opisali z uporabo podatkovnega tipa "enumerated type", katerega definiramo sami. To je tip z urejeno množico vrednosti, ki jo lahko sestavljajo identifikatorji in črkovnimi simboli. Vsi elementi množice morajo biti unikatni znotraj definiranega tipa. Vse vrednosti znotraj množice so urejene in vsak element v njej ima dodeljeno numerično vrednost, ki indicira pozicijo elementa. Element začetnega stanja, s0, ima lokacijo nič, vsak naslednji element ima lokacijo za ena večjo kot njegov predhodnik (slika 9.4) [8]. Slika 9.4 Prehodna stanja z naštevnim tipom " enumerated type". Ko pritisnemo tipko se na trenutnem vhodu "din" ustali vnešena vrednost, ki generira pulz "clkp". Le-ta aktivira sekvenčni proces registra stanj "sreg", ki shrani naslednje stanje "next_state" iz procesa kombinacijskega dela "C1" v trenutno stanje "present_state". Proces "C1" na podlagi trenutnega vhoda in trenutnega stanja, z uporabo stavka "case", določi naslednje stanje, ki si bo ob naslednjem pulzu shranilo v registru stanj. Proces "C2" dobi trenutno stanje iz registra stanj in ob urinem pulzu. Stavek "if-then" nato določi ali smo že v stanju s4, kjer nam ob detekciji celotnega zaporedja na izhod avtomata "dout" postavi binarno 1. Arhitekturni del kode avtomata "seqdeta" (priloga 18). [2] 29

9.2 Simulacija in verifikacija delovanja Simulacija prikazuje kako deluje detektor, ko mu za vhodno vrednost podamo prekrivajoče zaporedje "1101101" (Slika 9.5). Detektor je pravilno zaznal obe zaporedji, tudi prekrivajočega in ustrezno postavil izhod na 1. Simulacija lepo prikazuje tudi trenutna in naslednja stanja. Slika 9.5 Simulacija detektorja zaporedja 9.3 Implementacija na testni plošči Verificirali smo delovanje obravnavanega detektorja še na testni plošči. Avtomat se je obnašal kot pričakovano. Rezultati se ujemajo z rezultati simulacije iz predhodnega poglavja. Ko smo prek tipk vnesli zaporedje "1101101" se je "led(0)" aktivirala dvakrat. Naključni vzorci izhoda niso prožili (slika 9.6). Slika 9.6 Detektor na testni plošči 30

10 SKLEP Testna plošča Basys 2 je idealna za spoznavanje sodobnega načina načrtovanja logičnih vezij, spoznali smo osnove jezika VHDL in potek načrtovanja v orodju ISE WebPack. Dobili smo občutek kako teorija izgleda v praktični izvedbi na plošči, na tak način si je koncepte lažje predstavljati, ko vidimo kako se nekaj kar smo načrtovali in simulirali nato obnaša na testni plošči. Izpostavimo primer osem bitnega registra, ko ga implementiramo na testni plošči, lahko vidimo kako ob pritisku gumba vstavimo vanj novo vrednost in kako se tisto kar je bilo v njem shranjeno predhodno premakne naprej, saj so vrednosti predstavljene z LED diodami in so vidne. V nadaljevanju bi lahko raziskali še uporabo različnih razširitvenih modulov, ki so na voljo za testno ploščo. Tehnologija FPGA nam omogoča zelo veliko opcij, implementirati je možno zelo kompleksne tehnologije kot so mikroprocesorji, video in avdio kodiranje. 31

11 VIRI [1] Grout, I. Introduction to Digital Logic Design with VHDL. V: Digital Systems Design with FPGAs and CPLDs, Burlington, Elsevier, 2008, str. 334 474. [2] Haskell, R.E., Hanna, D.M., Digital Design:Using Digilent FPGA Boards VHDL Edition, Rochester Hills: LBE Books, 2010. [3] Lala, P.K. Combinational Logic Design Using VHDL. V: Principles of Modern Digital Design, New Jersey: John Wiley & Sons, 2007, str. 205 234. [4] Lala, P.K. Sequential Circuit Design Using VHDL. V: Principles of Modern Digital Design, New Jersey: John Wiley & Sons, 2007, str. 315 371. [5] Complex programmable logic device. Dostopno na: http://en.wikipedia.org/wiki/complex_programmable_logic_device [17. 7. 2014] [6] Xilinx Spartan-3E FPGA Family Data Sheet Dostopno na: http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf [18. 7. 2014] [7] Digilent Basys2 Board Reference Manual Dostopno na: http://digilentinc.com/data/products/basys2/basys2_rm.pdf [18. 7. 2014] 32

[8] VHDL online help Dostopno na: http://vhdl.renerta.com/source/vhd00000.htm [8. 9. 2014] [9] ABEL Dostopno na: [24.8.2014] http://en.wikipedia.org/wiki/advanced_boolean_expression_language [10] Vranesic, Brown, Fundamentals of Digital Logic, New York: McGraw-Hill, 2009. [11] ISE Design Flow Overview Dostopno na: http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/ise_c_fpga_design_fl ow_overview.htm [12. 9. 2014] 33

12 PRILOGE Priloga 1 Xilinx ISE WebPack... 35 Priloga 2 Simulator isim... 35 Priloga 3 Digilent Adept... 36 Priloga 4 Pravilnosta tabela segmentov... 36 Priloga 5 Koda sedem segmentni dekoder... 37 Priloga 6 Top level koda sedem segmentni prikazovalnik... 37 Priloga 7 RTL prikaz sedem segmentni prikazovalnik... 38 Priloga 8 Test bench koda za dekoder sedem segmentnega prikazovalnika... 38 Priloga 9 UCF sedem segmentni prikazovalnik... 39 Priloga 10 Top level koda osem bitni pomični register... 40 Priloga 11 Koda delilnika frekvence clkdiv... 41 Priloga 12 Koda clock_pulse... 42 Priloga 13 Koda za osem bitni pomični register... 43 Priloga 14 RTL prikaz za osembitni pomični register... 44 Priloga 15 Tabela delitve frekvence urinega signala... 44 Priloga 16 UCF za osembitni pomični register... 45 Priloga 17 Top level koda za detektor zaporedja... 46 Priloga 18 Detektor zaporedja koda Moore avtomata... 47 34

A - GRAFIČNO PROGRAMSKO ORODJE: Priloga 1 Xilinx ISE WebPack Priloga 2 Simulator isim 35

Priloga 3 Digilent Adept B - KOMBINACIJSKA VEZJA: Priloga 4 Pravilnosta tabela segmentov 36

Priloga 5 Koda sedem segmentni dekoder Priloga 6 Top level koda sedem segmentni prikazovalnik 37

Priloga 7 RTL prikaz sedem segmentni prikazovalnik Priloga 8 Test bench koda za dekoder sedem segmentnega prikazovalnika 38

Priloga 9 UCF sedem segmentni prikazovalnik 39

C - SEKVENČNA VEZJA: Priloga 10 Top level koda osem bitni pomični register 40

Priloga 11 Koda delilnika frekvence clkdiv 41

Priloga 12 Koda clock_pulse 42

Priloga 13 Koda za osem bitni pomični register 43

Priloga 14 RTL prikaz za osembitni pomični register Priloga 15 Tabela delitve frekvence urinega signala 44

Priloga 16 UCF za osembitni pomični register 45

D - AVTOMATI: Priloga 17 Top level koda za detektor zaporedja 46

Priloga 18 Detektor zaporedja koda Moore avtomata 47

48

49

50

51