MIKROPROCESORSKI SISTEMI Projektovanje interfejsa za povezivanje čipa PIA-8255 na APB magistralu Niš, 2006
Download ReportTranscript MIKROPROCESORSKI SISTEMI Projektovanje interfejsa za povezivanje čipa PIA-8255 na APB magistralu Niš, 2006
ELEKTRONSKI FAKULTET U NIŠU MIKROPROCESORSKI SISTEMI Projektovanje interfejsa za povezivanje čipa PIA-8255 na APB magistralu Niš, 2006 1. UVOD Medjusobno povezivanje čipova na štampanoj ploči predstavlja veoma važan aspekt za uspešnu realizaciju visoko performansnih digitalnih sistema time što direktno omogućava da veliki broj komponenata sistema efikasno razmenjuju podatke. Ova mogućnost obezbedjuje da integrisane komponente sistema budu veoma dobro ukompovane u jedan distribuirani sistem. Da bi se uspešno realizovao ovaj cilj danas je razvijen veći broj komunikacionih sprežnih tehnologija, kakve su npr.: Hyper Transport, RapidIO, PCI Express pomoću kojih se ostvaruje efikasna komunikacija na nivou čip-ka-čip. Sa druge strane napredak na polju VLSI tehnologije uslovio je da se sve veći broj gradivnih blokova sistema integriše u jedinstveni sistem. Ovakva rešenja se nazivaju System–on-Chip (SoC) dizajn. Osnovni problem koji se pri ovome javlja predstavlja efikasno medjusobno povezivanje gradivnih blokova unutar čipa. U cilju uspešnog rešavanja ovog problema standardizovane interne SoC magistrale. koriste se Tipični reprezenti ovakvih magistrala su: AMBA, AVALON, Core Connect, Wishbone, Sillicon Backplane Network, CoreFrame, Marble, PI bus, OCP, VCI (Virtual Component Interface). System–on-Chip (SoC) dizajn se standardno realizuje od većeg broja IP-ova (Intelectual Property) kao gotove komponente koje treba medjusobno povezati u jedinstveni sistem. Pri ovome jedan od glavnih projektantskih izazova predstavlja projektovanje interfejs logike koja predstavlja ljusku za IP i koja omogućava da se IP poveže na odgovarajuću sistemsku magistralu. U ovom semestralnom radu biće: mogućnost povezivanja programibilnog paralelnog perifernog interfejsa, PIA-APB-8255 (Parallel Interface Adapter Intel 8255 for AMBA APB Bus), realizovanog kao jezgro (IP) na APB magistralu koja je sastavni deo AMBA magistrale, razmatrana kreiran VHDL kod koji se odnosi na opis na behavioral nivou kola PIA-APB-8255, data implementacija kola PIA-APB-8255 koja FPGA tehnologiju. se odnosi na Actel Ilustracije radi, jedan tipičan SoC dizajn baziran na AMBA magistrali kod koga je na APB povezano PIA kolo, prikazan je na Slici 1.1: 8051 Memorija Interfejs ASB ili AHB BRIDGE APB Interfejs Timer 8253 Interfejs UART 8251 Interfejs PIA 8255 Slika 1.1: SoC dizajn baziran na AMBA magistrali Kao što se vidi na slici 1.1 SoC dizajn zasnovan na AMBA magistrali je hijerarhijski organizovan oko dve magistrale, AHB (ili ASB) magistrale koja se koristi za brzi prenos podataka izmedju procesora i memorije i APB magistrale koja se koristi za spregu perifernih programibilnih čipova kakvi su: 8253 (Timer), 8251 (UART) i 8255 (PIA). Sprega između ASB i APB se ostvaruje preko mosta (bridge). Analizirajući šemu na slici 1.1 uočavamo da se svaki IP blok spreže na odgovarajuću magistralu preko specifičnog projektovanog interfejsa. U konkretnom slučaju razmatrani su periferni programibilni čipovi iz familije INTEL, koji su pre sega projektovani za realizaciju sistema zasnovanim na INTEL-ovim procesorima, kakvi su: 8088, 8086, 80286, 80386 itd. Sobzirom da SoC dizajn može da bude zasnovan na bilo kom procesoru, ili multiprocesorskom sistemu neophodno je projektovati logiku interfejs tipa koja obezbedjuje povezivanje raznorodnih (heterogenih) IP-ova na jedinstveni sistem. U konkretnom slučaju rešavan je problem projektovanja interfejsa pomoću koga se ostvaruje sprega između jezgra PIA 8255 i APB magistrale kod AMBA. U tom cilju neophodno je bilo prvo kreirati VHDL kod za odgovarajući interfejs, zatim definisati testne sekvence za proveru ispravnosti rada kola, i na kraju implementirati kolo u FPGA tehnologiji. Shodno predhodnom, celokupna materija koja je izložena u ovom radu je podeljena je na 8 poglavlja: Poglavlje 1 je uvodno, koje u kratkim crtama ukazuje na problem koji je rešavan, i način kako je rešavan. U poglavlju 2 dat je kratak opis AMBA magistrale. U poglavlju 3 prikazani su detalji koji se odnose na operacije prenosa podataka po APB magistrali. Interna struktura čipa PIA 8255, definicija ulazno - izlaznih signala, i režimi rada opisani su u poglavlju 4. VHDL opis na behavioral nivou čipa PIA-APB-8255 prikazan je u poglavlju 5. Poglavlje 6 tiče se testiranja čipa PIA-APB-8255 sa ciljem da se proveri ispravnost dizajna. U poglavlju 7 prikazan je postupak implementacije čipa PIAAPB-8255 na Xilinx -ovo FPGA kolo 2S50PQ208-6 iz familije Xilinx SPARTAN2. U poglavlju 8 opisana je laboratorijska vežba pomoću koje studenti koristeći alate za projektovanje navedene u ovom radu mogu da provere ispravnost implementiranog čipa. 2. AMBA MAGISTRALA 2.1. OPIS AMBA MAGISTRALE AMBA (Advanced Microcontroller Bus Architecture) je hijerarhijski organizovana sistemska magistrala namenjena za SoC dizajne koju čine sledeće tri magistrale: ♠ Advanced High-performance Bus (AHB); ♠ Advanced System Bus (ASB); ♠ Advanced Peripheral Bus (APB). AHB je veoma brza magistrala namenjena za spregu procesor– memorija. Procesor može biti master ili slave tipa. ASB je takođe brza magistrala namenjena za spregu procesormemorija. ASB je alternativna magistrala, pogodna za korišćenje kod sistema visokih performansi kada oni ne koriste AHB. APB je magistrala koja se koristi za efikasnu spregu sa perifernim programibilnim čipovima. Sprega između ASB i APB se ostvaruje preko mosta (bridge). 2.2. STRUKTURA TIPIČNOG ZASNOVANOG NA AMBA MAGISTRALI MIKRORAČUNARA Na slici 2.1 prikazana je struktura jednog mikroračunarskog sistema zasnovanog na AMBA magistrali. tipičnog S obzirom da je sistem tipa SoC dizajn uobičajeno je da se ovako rešenje naziva mikrokontroler. Kao što se vidi sa slike 2.1 mikrokontroler je hijerarhijski organizovan oko dve magistrale. Na višem nivou je AHB ili ASB, a na nižem APB. Zbog zahteva za većom brzinom u prenosu podataka na AHB (ASB) se povezuju CPU, memorijski podsistem, interfejs za memorijsko proširenje, i DMA kontroler. Na APB magistrali povezani su programibilni periferni interfejs čipovi tipa: tajmer, UART, PIA, tastaturni čip i dr. Visoko – performansni ARM procesor Visoko – propusni spoljni memorijski interfejs Visoko propusni onchip RAM AHB ili ASB Glavna DMA magistrala M O S T UART APB Tastatura AHB prema APB most ili ASB prema APB most Slika 2.1: AMBA-bas mikrokontroler Brojač PIA 3. AMBA APB MAGISTRALA APB (Advanced Peripheral Bus) je deo AMBA hijerarhije magistrala. Ova magistrala se koristi za efikasnu spregu sa perifernim programibilnim interfejs čipovima. Važno je to, da se kod APB sve promene signala dešavaju na rastuću ivicu taktnog signala. 3.1. OPIS APB MAGISTRALE Opis delovanja APB magistrale objašnjen je u zaglavljima: ♠ ♠ ♠ dijagram stanja operacija upisa operacija čitanja APB komunicira sa ASB ili AHB magistralom i sa programibilnim periferijama, pomoću ulazno – izlaznih signala i to: PCLK, PRESET, PWRITE, PSEL, PENABLE, kao i ulazima PWDATA i PADDR, i izlazom PRDATA. 3.1.1. Dijagram stanja Na slici 3.1 prikazan je dijagram stanja. Pomoću njega se predstavlja funkcionisanje ove magistrale. Slika 3.1: Dijagram stanja Kao što se sa slike 3.1 vidi, funkcionisanje ove magistrale može se opisati sa tri stanja: IDLE, SETUP i ENABLE. IDLE - Pasivno stanje. Signali PSELx i PENABLE su u stanju logičke nule. SETUP - Kada su signali PSELx u stanju logičke jedinice a PENABLE u stanju logičke nule magistrala prelazi u stanje SETUP. Ona ostaje u ovom stanju jedan taktni interval, nakon čega se sa usponskom ivicom taktnog signala prelazi u stanje ENABLE. ENABLE - Prelazi se u ovo stanje kada su signali PSELx i PENABLE u stanju logičke jedinice. Ovo stanje traje jedan taktni interval. Iz ovog stanja se vraćamo u stanje IDLE na kraju operacije, a ako postoji zahtev za prenos ona prelazi u stanje SETUP. 3.1.2. Operacija upisa Vremenski dijagram koji prikazuje redosled dogadjaja prikazan je na slici 3.2: Prvi taktni interval odgovara stanju IDLE, a nakon toga u drugom taktnom intervalu prelazi se u stanje SETUP. Treći taktni interval odgovara stanju ENABLE. Adrese, linije za podatke i PWRITE postavljaju se u toku drugog, a važeći su u toku trećeg taktnog signala. Operacija upisa završava se četvrtim taktnim signalom. Slika 3.2: Operacija upisa 3.1.3 Operacija čitanja Vremenski dijagram koji prikazuje redosled operacije čitanja prikazan je na slici 3.3: Prvi taktni interval odgovara stanju IDLE. U drugom taktnom intervalu prelazi se u stanje SETUP. Dok treći taktni interval odgovara stanju ENABLE. Adrese se postavljaju u toku drugog, i važeće su u toku trećeg taktnog signala. PWRITE koji je aktivan u toku prvog taktnog intervala, u drugom taktnom intervalu se postavlja na neaktivnu vrednost. Linije za podatke se postavljaju tokom ENABLE stanja. Operacija čitanja završava se četvrtim taktnim signalom. Slika 3.3: Operacija čitanja 3.2. APB most APB most predstavlja interfejs izmedju AHB (ili ASB) magistrale i APB magistrale. On je slave za AHB (ili ASB), a master za APB. 3.2.1 APB master Blok dijagram Na slici 3.4 prikazan je blok dijagram APB master-a. Sa strane AHB (ili ASB) magistrale postoje signali PRESETn i PCLK, kao i PRDATA. A sa strane APB magistrale PADDR, PWDATA, signali PSEL, PENABLE i PWRITE. Slika 3.4: APB signal interfejs APB mosta Funkcija APB mastera APB master obavlja sledeće funkcije: generiše adresu i zadržava je validnom tokom operacije upisa ili čitanja; dekodira adresu i generiše periferijski selekt PSELx. Samo jedan periferijski selekt signal PSELi, i=1,2…n, može biti aktivan tokom operacije upisa ili čitanja; prebacuje podatke sa AHB (ASB) magistrale na APB u toku operacije upisa; prebacuje podatke sa APB na sistemsku magistralu u toku operacije čitanja; generiše impuls za pamćenje adrese (strob signal), PENABLE, u toku operacije čitanja ili upisa. APB slave APB slave ima jednostavan, ali ipak fleksibilan interfejs. Tačna interfejsa zavisi aplikacije. implementacija od konkretne Blok dijagram Na slici 3.5 prikazan je pogled na most sa sistemske magistrale, APB slave. Slika 3.5: Dijagram APB – slave Funkcija APB slave-a APB slave interfejs je veoma fleksibilan. Za operaciju upisa podaci se postavljaju u narednim vremenskim trenucima: na obe rastuće ivice PCLK kada je PSELx na logičkoj jedinici; na rastućoj ivici PENABLE kada je PSELx na logičkoj jedinici. Selekcioni signal PSELx, adresa PADDR i signal upisa PWRITE mogu biti kombinovani da bi se odredilo kom registru treba obnoviti sadržaj pomoću operacije upisa. Za operaciju čitanja podaci mogu biti prebačeni na magistralu podataka kada je PWRITE na logičkoj nuli, a PSELx i PENABLE na logičkoj jedinici. U tom slučaju se PADDR koristi za odredjivanje registra iz koga treba da se izvrši operacija čitanja. Talasni oblici signala su dati na slici 3.6. Slika 3.6: Talasni oblici APB slave 4. 8255 Intelov čip 8255, pararelni programibilni interfejs PPI (Programmable Peripheral Interface) je CMOS komponenta koja se koristi kod aplikacija koje se odnose na paralelni prenos podataka. Sa strane poseduje 24 ulazno/izlazna pina koji mogu biti programibilni u dve grupe po 12. Izradjen je u CMOS tehnologiji sa jednostrukim +5V napajanjem. Režimi rada se softverski postavljaju. 4.1. OPIS KOLA 8255 Na slici 4.1 je data blok šema 8255 kola: Slika 4.1: Blok šema BAFER PODATAKA Trostatički bi-direkcioni 8 – bitni bafer koristi se kao interfejs za povezivanje 8255 na sistemsku magistralu. Podaci se primaju i šalju preko bafera dok se izvršavaju ulazno izlazne CPU operacije. Kontrolni kod i statusna informacija se takodje šalju kroz bafer. R/W I KONTROLNA LOGIKA Funkcija ovog bloka je da upravlja sa svim unutrašnjim i spoljašnjim prenosima. Prihvata upravljačke signale sa sistemske magistrale, upravlja radom ulazno/izlaznog bafera i generiše signale za rad celokupnog kola. Izbor PIA se vrši signalom CS (Chip Select). CS (Chip Select) Chip Select je ulazni signal kojim se dozvoljava rad kola. Kada kolo nije selektovano, ne obavlja se nikakva operacija. Aktivan je kada je postavljen u stanju logičke nule. RD (Read) Kada je ovaj signal na logičkoj nuli u toku je operacija čitanja. WR (Write) Kada je ovaj signal na logičkoj nuli u toku je operacija upisa. A1 i A0 To su adresni signali, kojima se u vezi sa ulaznim signalima RD i WR, vrši selekcija jednog od tri porta (port A, port B ili port C) ili se pak kontrolni kod upisuje u registar za upis načina (MOD-a) rada. U zavisnosti od stanja signala RS, WR, CS, A1 i A0, čip 8255 obavlja sledeće funkcije koje su date u tabeli 4.1. A1 A0 CS RD WR Ulazne operacije (READ) 0 0 0 0 1 PORT A → DATA BUS 0 1 0 0 1 PORT B → DATA BUS 1 0 0 0 1 PORT C → DATA BUS Izlazne operacije (WRITE) 0 0 0 1 0 DATA BUS → PORT A 0 1 0 1 0 DATA BUS → PORT B 1 0 0 1 0 DATA BUS → PORT C 1 1 0 1 0 DATA BUS → CONTROL Nemoguce funkcije x x 1 x x neaktivno stanje 1 1 0 0 1 neaktivno stanje x x 0 1 1 neaktivno stanje Tabela 4.1: Tabela stanja za ulaze R/W i kontrolne logike RESET stanje. Kada je aktivan (stanje logičke jedinice) kolo se postavlja u početno UPRAVLJANJE PORTOVIMA IZ GRUPE A i GRUPE B R/W kontrolna logika priprema modove rada i upravljačke signale za tri 8-bitna ulazno-izlazna porta. Upravljanje ulazno - izlaznih portova je podeljeno u dve grupe: u grupu A i grupu B. Svaka od ovih grupa prihvata “komande od R/W kontrolne logike, prima informacije sa unutrašnje magistrale kola i postavlja pravu komandu za vezane portove. Kontrolnu grupu A čine: Port A i gornja polovina porta C (C7 - C4). Kontrolnu grupu B čine: Port B i donja polovina porta C (C3 – C0). Port A, B i C 8255 sadrži tri 8 – bitna porta ( A,B i C ). Port A. Jedan 8 – bitni data izlazni leč/bafer i jedan 8 - bitni data ulazni leč. Port B. Jedan 8 – bitni data izlazni leč/bafer i jedan 8 – bitni data ulazni bafer. Port C. Jedan 8 – bitni data izlazni leč/bafer i jedan 8 – bitni data ulazni bafer (bez leča za ulaz). Ovaj port može biti rasporedjen u dva 4 bitna porta ispod načina kontrole. Svaki 4 - bitni port sadrži jedan 4 - bitni leč i to može koristiti za kontrolu izlaznih signala i kontrolu stanja ulaznih signala u vezi sa portovima A i B. 4.2. OPIS RADA KOLA 8255 Kompletno funkcionisanje kola je definisano od strane sistemskog softvera. Kod 8255 dostupna su tri načina rada (MOD-a) i to: Mode 0 – Osnovni U/I, Mode 1 – Strobovani U/I, Mode 2 – Bi-direkciona magistrala. Pinovi grupe B se mogu programirati za rad u mode 0 ili mode 1, a pinovi grupe A za rad u mode 0, mode 1 ili mode 2. Mode 0 – naziva se osnovni ulazno/izlazni način rada koji uzrokuje da 8255 radi kao baferovani ulazni ili lečovani izlazni uredjaj. Mode 1 – strobovani ulazno/izlazni način rada postavlja portove A i B i odgovarajuće upravljačke linije višeg i nižeg dela porta C. Ovaj mod se koristi za podršku rada handshake procedura i prekida, iniciranih od strane ulazno/izlaznih uredjaja u slučajevima kada se prenos podataka ostvaruje bez direktne intervencije CPU-a. Razlikuju se dva tipa rada kod mode 1, a to su mode 1 strobovani ulaz, i mode 1 strobovani izlaz. Mode 2 – način rada ovog moda važi samo za grupu A. Kod bidirekcionog rada podaci se predaju i primaju preko istih veza. Ovakav način rada koristan je kod sprezanja dva računara. 5. čip PIA–APB-8255 5.1. OPIS ČIPA PIA-APB-8255 Ovo kolo predstavlja interfejs izmedju APB magistrale i spoljnjeg sveta. Zbog specifičnog rada APB magistrale ono u sebi sadrži interfejs logiku koja je za ovaj slučaj specifično projektovana, a za spregu sa spoljnim svetom koristi se PIA-8255 koji je kompatibilan po svojoj funkciji sa Intelovim čipom 8255. To znači da je sprega sa spoljnim svetom ostvarena shodno principima rada modu 0, modu 1, i modu 2 PIA-8255. Takvo kolo dato je na slici 5.1: PADDR PORT A PCLK PENABLE PRESET PIA-APB-8255 PSELx PORT B PWRITE PWDATA PORT C PRDATA Slika 5.1: Čip PIA-APB-8255 PADDR PORT A PCLK DIN[7:0] PENABLE PRESET PSELx RESET Interfejs APB-bridge CS PWRITE RD PWDATA WR PRDATA PIA 8255 DOUT[7:0] Slika 5.2: Unutrašnja struktura čipa PIA-APB-8255 PORT B PORT C Interfejs logika, čipa PIA-APB-8255, nazvana APB-bridge je specifično projektovana i izvedeno kolo je tipa sekvencijalna mreža. Na svom ulazu prihvata signale PCLK, PENABLE, PRESET, PSELx, PWRITE, PADDR i PWDATA sa APB magistrale, kao i izlaz DOUT sa PIA-8255. Na izlazu ova interfejs logika generiše signale RESET, WR, CS i RD ka PIA-8255, a PRDATA i DIN ka APB magistrali. Na slici 5.3 je data struktura interfejsa APB-bridge: Slika 5.3: Interfejs APB-bridge Da bi ostvarili kompatibilnost u radu sa PIA-8255 neophodno je bilo obaviti sledeće aktivnosti: 1) Preslikati PIA-8255 na jedinstvenu ulazno – izlaznu adresu koja u konkretnom slučaju iznosi “00009000”H. 2) Da bi obavili zadatak definisan stavkom 1, neophodno je bilo ugraditi blok komparator, U3, čiji je izlaz “enable” definisan na sledeći način: if ADDR="10010000" then enable =”1” else enable =”0”. Na ulaz ADDR se dovode signali PADDR [15:]. 3) Sobzirom da je magistrala sinhrona (odlikuje se time da se svi dogadjaji odvijaju u ritmu taktnog signala), neophodno je bilo zbog kompatibilnosti u radu dovesti na ulaz bloka U4, globalni taktni signal APB magistrale, PCLK. Ovim signalom obezbedjeni su uslovi za sinhrono generisanje signala READ (RD), WRITE (WR) i ChipSelect (CS) PIA-8255. 4) Blok kontrolna logika, U4, prihvata signale PENABLE, PRESET, PSELx, PWRITE i PCLK sa APB magistrale. Na ulazu ADDR_en prihvata izlazni signal enable iz bloka U3. Na izlazima generiše signale sel_in i sel_out. Način generisanja signala na izlazu ovog bloka shodno vrednosti ulaza definisan je tabelom 5.1. PCLK PRESET PSELx PENABLE PWRITE ADDR_en Stanje sel_in sel_out 0 X X X X RESET 0 0 1 0 0 0 1 IDLE 0 0 1 1 0 1 1 SETUP 0 0 1 1 1 1 1 ENABLE 1 0 1 1 1 0 1 ENABLE 0 1 1 X X X 0 DISABLE 0 0 Tabela 5.1: Tabela stanja kontrolne logike 5) Blok U1 je baferski stepen. Njegov princip rada se može opisati sledećim iskazom: if enable = '1' then a =>y else y =“Z“. Gde je Z stanje visoke impedanse. Na ulazu a prihvata signal PWDATA[7:0] sa APB magistrale, a izlaz y se prosledjuje na signal DIN. 6) Blok U2 je baferski stepen čiji se rad opisuje na sledeć način: if enable = '1' then a =>y else y =“Z“. Gde je Z stanje visoke impedanse. Ulaz a prihvata DOUT, a izlaz y se prosledjuje na ulaz bloka U5. 7) PRDATA [7:0] se formiraju ulazom DOUT, koji se preko bloka U2 vodi na ulaz bloka U5, bloka koji vrši generisanje još 24 bita veće težine. Ovaj blok vrši beznakovno proširenje 8-bitne ulazne na 32-bitnu izlaznu vrednost na sledeći način: iz <= "000000000000000000000000"&ul. Ulaz ul prihvata izlaz y sa bloka U2, a izlaz iz se prosledjuje na PRDATA. 8) Kada je APB magistrala u stanju enable, blok U4 generiše izlazne signale sel_in i sel_out koji služe i da se da dozvola da se upiše ili pročita informacija. Oni su aktivni u toku jedne periode taktnog impulsa, što znači da bi na izlazu interfejsa imali validnu informaciju samo za taj period. Medjutim, informacija u PIA-8255 može da se upiše ili pročita tek na sledeću rastuću ivicu taktnog impulsa, pri čemu signali RD, WR i CS moraju biti stabilni pre te rastuće ivice taktnog impulsa, konkretno oni su uzeli neku vrednost pre te rastuće ivice a ne u samom trenutku. Ako bi se desilo da se u istom trenutku menja i stanje signala i rastuća ivica taktnog signala, može se desiti da dodje do greške upisa zbog nemogućnosti da se u tačno istom trenutku promene. Vremenski dijagram PIA-8255 se može videti sa slike 5.4. Slika 5.4: Vremenski dijagram čipa 8255 9) Da bi ispunili potrebu definisanu stavkom 8, neophodno je bilo ugraditi blokove U6 i U9 (DoubleEdgeSR) koji sa ulazima EdgeRESET, EdgeSET i RESET generišu izlaz SRout. Ovi blokovi se direktno setuju opadajućom ivicom EdgeRESET, a direktno se resetuju rastućom ivicom EdgeSET. Blokovi U6 i U9 su strukturno opisani. EdgeRESET je taktni ulaz i na njega se dovodi globalni taktni signal APB magistrale, PCLK. Na slici 5.5 je dat vremenski dijagram ulaznoizlaznih signala ovih blokova. reset edge set edge Slika 5.5: Vremenski dijagram Neophodno je koristiti dva ovakva bloka. Jedan će biti za upis a drugi za čitanje informacija. Jedan od njih, U6, će na ulazu EdgeSET prihvatiti izlaz sel_in a blok U9 će na ulazu EdgeSET prihvatiti izlaz sel_out bloka U4. Izlaz SRout bloka U6 služi da se da dozvola za upisivanje informacija jer se vodi na ulaz bloka za invertovanje U11, čiji se izlaz y vezuje na ulaz enable bloka U1, a vezuje se i na izlaz WR. Izlaz SRout drugog bloka služi da se da dozvola za iščitavanje informacija jer se vodi na ulaz bloka za invertovanje U12, čiji se izlaz y vezuje na ulaz enable bloka U2, a i vezuje se na izlaz RD. 10) Blok U10 je AND kolo koje generiše aktivan (logička jedinica) izlaz output kada su oba ulaza I0 i I1 aktivna (logička jedinica). Na jedan ulaz se dovodi izlaz bloka U6 a na drugi ulaz izlaz bloka U9. Izlaz output se prosledjuje na CS. 11) Potreba za korišćenjem blokova DoubleEdgeSR je ta da se njime kontrolišu signali sel_in i sel_out, jer kad dodje sledeća rastuća ivica taktnog signala signali sel_in i sel_out bi se postavili na nulu, i ulaz DIN PIA-8255 bi bio u stanju visoke impedanse Z. Sa blokom U6 produžujemo signal sel_in (isto važi i za signal sel_out sa blokom U9), do sledeće rastuće ivice taktnog signala. Sa slike 5.6 se vidi da se od signala sel_in pravi signal enable koji je duži od njega za jednu periodu kloka, a od njega se prave signali RD, WR i CS tako da na rastućoj ivici (zelena linija na slici) dobijamo stabilno CS=0, WR=0 i RD=1 i izvršiće se upis podatka DIN=89 koji je takodje stabilan pre nailaska ove rastuće ivice. Slika 5.6: Vremenski dijagram 12) Da bi obezbedili ulazni signal RESET PIA-8255 koji je aktivan na logičkoj jedinici i kome se dovodi izlazni signal RESET sa interfejsa APB-bridge, neophodno je bilo ugraditi blok za invertovanje, U8. Na ulaz x ovog bloka se dovodi signal PRESET sa APB magistrale koji na izlazu generiše signal y koji se prosledjuje na izlaz RESET. 13) PADDR [2:0] se direktno vezuju za PIA-8255 na njegov ulaz A. 5. 2. PREDLOG REALIZACIJE ČIPA PIA-APB-8255 Za sam razvoj i testiranje koda korišćen je programski paket ACTIV-HDL. U strukturi na najvišem nivou razlikujemo 2 entiteta, kao na slici 5.7: entitet “APB_bridge“ entitet “ čip 8255 “ PRDATA(31:0) U2 U1 D O U T (7 :0 ) PADDR(31:0) PCLK PENABLE PRESET PSELx PWDATA(31:0) PWRITE P A D DR (3 1:0 ) P CLK P E NA BL E PADDR(1:0) D IN (7:0 ) P R D A TA (3 1:0 ) RE S E T A (1 :0 ) CLK D IN (7:0 ) P A IN(7 :0 ) D O U T (7 :0 ) P A EN P A O UT (7:0 ) nC S P B IN(7 :0 ) P B O UT (7:0 ) P R E SE T nR D P C IN (7 :0 ) P S EL x nW R RE S E T P W D AT A (3 1 :0 ) nC S P W R IT E nR D APB_bridge PAOUT(7:0) P B EN PBOUT(7:0) P C E N(7 :0 ) P C O UT (7:0 ) PCOUT(7:0) nW R a8255 PAIN(7:0) PBIN(7:0) PCIN(7:0) Slika 5.7: Blok šema čipa PIA-APB-8255 5.2.1 APB_bridge Predstavlja interfejs logiku čipa PIA-APB-8255, koja je za ovaj slučaj specifično projektovana i izvedeno kolo je tipa sekvencijalna mreža. Na ulazu prihvata signale PCLK, PENABLE, PRESET, PSELx, PWRITE sa magistrale kao i PADDR, PWDATA i DOUT. Na izlazu ova interfejs logika generiše signale RESET, nWR, nCS i nRD, kao i PRDATA i DIN. Na slici 5.8 data je blok šema interfejsa, APBbridge, čipa PIA-APB-8255. Ova interfejs logika se sastoji od sledećih entiteta: ♠ ♠ ♠ ♠ ♠ ♠ ♠ entitet “Control_ Logic“ entitet “DoubleEdgeSR“, (blokovi U6 i U9 na slici) entitet “TriSTATE_BUFFER“, (blokovi U1 i U2) entitet “ADDR_COMPARE“ entitet “Proširenje“ entitet “INV_1”, (blokovi U8, U11 i U12), kao i entitet “AND_2” ADDR_COMPARE Control_Logic DoubleEdgeSR U3 PADD R (15:8) A D D R (7 : 0 ) e nab le AND_2 ADDR_compare PADDR(31:0) U8 U4 PR ESET A DDR_en PCLK PENABLE PRESET PSELx PWRITE P CLK x RESET y s e l_ in INV_1 s e l_o ut DIN(7:0) P E NA BL E P R E SE T U6 P S EL x P W R IT E E d g eR E SE T S R o ut INV_1 E d ge SE T control_logic RE S E T U10 GND DoubleEdgeSR U1 I0 PW D ATA(7: 0) a(7 : 0 ) y (7 :0 ) U9 e nab le E d g eR E SE T PWDATA(31:0) U5 PRDATA(31:0) iz (3 1: 0 ) ul(7 : 0 ) TriSTATE_BUFFER U2 y (7 :0 ) a(7 : 0 ) nCS S R o ut AND_2 E d ge SE T nRD RE S E T DoubleEdgeSR e nab le Prosirenje TriSTATE_BUFFER nWR U11 y Proširenje O U T PU T I1 x INV_1 U12 TriSTATE_BUFFER y x INV_1 DOUT(7:0) Slika 5.8: Blok šema APB-bridge 5.2.1.1. CONTROL_LOGIC To je blok koji predstavlja kontrolnu logiku interfejsa APBbridge koji upravlja radom celokupnog dizajna i koji odredjuje stanja same APB magistrale. Signal sa ulaza, ADDR_en, kada je u stanju logičke jedinice dozvoljava rad bloka, tj. prenos signala na izlaz. Signalima PSELx i PENABLE se upravlja stanjima APB magistrale (IDLE, SETUP, ENABLE). Signalom PWRITE se dozvoljava upis (aktivan u stanju logičke jedinice). Ovaj blok na svojim izlazima generiše signale sel_in i sel_out koji služe da se da dozvola za upisivanje informacija ili iščitavanje informacija, sa ili u magistralu. Listing koda:=> when enable if PENABLE='1' then proc2:process PWRITE, state) library IEEE; (PSELx,PENABLE, if ADDR_en='1' then begin use if IEEE.STD_LOGIC_1164.all; PWRITE='1' then sel_in<='0'; entity control_logic is sel_in <='1'; sel_out<='0'; port else (PCLK: in std_logic; case state is PRESET: std_logic; sel_out in <='1'; when reset next_state <= idle; PSELx : in => std_logic; end if; when idle => PENABLE: end if; in std_logic; if PSELx = '1' then PWRITE end if;: in std_logic; next_state setup; ADDR_en: in<= std_logic; if PSELx='1' then else sel_in : out<=std_logic; next_state setup; next_state <=std_logic); idle; sel_out: out else if; end end control_logic; next_state <= idle; when setupcontrol_logic => architecture of control_logic is end if; if PENABLE='1' then when others => next_state <= reset; end <=isenable; typenext_state state_type (reset, idle, setup, enable); case; end state,next_state: if; signal state_type; end process proc2; begin end control_logic; proc1:process (PCLK,PRESET) is begin if PRESET='0' then state<=reset; elsif rising_edge(PCLK) then state<=next_state; end if; end process proc1; A DDR_en P CLK s e l_ in s e l_o ut P E NA BL E P R E SE T P S EL x P W R IT E control_logic Slika 5.9: Blok Control_logic Listing 5.2.1.2. koda: ADDR_COMPARE IEEE; library Blok koji prihvata osmobitnu informaciju na svom ulazu, vrši use IEEE.STD_LOGIC_1164.all; uporedjivanje sa is heksadecimalnim “90“ i na izlazu generiše signal entity ADDR_compare port (ADDR: in std_logic_vector(7 downto 0); nule, u zavisnosti od enable u stanju logičke jedinice ili logičke enable: out std_logic); jednakosti, što znači da ako je ostvarena jednakost, signal endostvarene ADDR_compare; architecture of ADDR_compare is enable je uADDR_compare stanju logičke jedinice; u suprotnom je u stanju logičke begin nule. process(ADDR) begin if ADDR="10010000" then enable <='1'; else enable<='0'; end if; end process; end ADDR_compare; A D D R (7 :0 ) e nab le ADDR_compare Slika 5.10: Blok ADDR_compare Listing koda: 5.2.1.3 TriSTATE_BUFFER (TROSTATIČKI BAFER) library IEEE; IEEE.STD_LOGIC_1164.all; Blok koji prihvata osmobitnu informaciju sa svog ulaza, kada je use entity TriSTATE_BUFFER is aktivan signal za dozvolu rada enable. Ako je signal za dozvolu rada port( a : in STD_LOGIC_VECTOR(7 downto 0); aktivan jedinica) tada se stanje y : (logička out STD_LOGIC_VECTOR(7 downto 0);ovog bafera prosledjuje na enable STD_LOGIC); njegov izlaz.: Uinsuprotnom, izlaz bafera je u stanju visoke impedanse. end TriSTATE_BUFFER; architecture TriSTATE_BUFFER of TriSTATE_BUFFER is begin process(a,enable) begin if enable = '1' then a(7 :0 ) y (7 :0 ) y <= a; e nab le else y <= (others=>'Z'); end if; TriSTATE_BUFFER end process; end TriSTATE_BUFFER; Slika 5.11: BlokTriSTATE_BUFFER 5.2.1.4 DoubleEdgeSR Ovo S vremenskog kolo će se direktno dijagrama setovati se vidi opadajućom da je izlazni ivicom signal EdgeRESET, Srout nakon a direktno rastuće ivice će sesignala resetovati RESET rastućom postavljen ivicom u stanju EdgeSET. logičke Kolo jedinice. je strukturno realizovano i njegova struktura je prikazana na slici 5.12., dok je na slici dijagram ulazno-izlaznih signalaSrout ovog prelazi kola na logičku 5.5 dat vremenski Pojavom rastuće ivice signala EdgeSET, U1 nulu i ostaje sve do pojave opadajuće ivice EdgeRESET. EdgeSET CLK Q CLR VCC DA TA U4 U3 RESET I0 O I0 I1 U7 I1 U8 U2 OR_2 x y INV_1 EdgeRESET U9 DFF_R x y SRout INV_1 XOR_2 I0 O U T PU T CLK I1 CLR U6 AND_2 I0 O U T PU T reset edge O set edge Q DA TA DFF_F I1 U5 AND_2 Slika 5.5: Vremenski dijagram O U T PU T I0 I1 AND_2 Slika 5.12: DoubleEdgeSR Sa slike 5.12 vidimo da se izlazni signal Srout postavlja u stanje logičke nule rastućom ivicom signala EdgeSET, a u stanje logičke jedinice se postavlja opadajućom ivicom signala EdgeRESET. Listing koda: U6U1: :AND_2 DFF_R component INV_1 library IEEE; port portmap( map(CLK I0 =>=>NET1456, EdgeSET, port ( x : in STD_LOGIC; use IEEE.STD_LOGIC_1164.all; I1CLR => => NET18, NET1012, y : => out STD_LOGIC); entity DoubleEdgeSR is OUTPUT DATA => VCC, NET92); end component; EdgeRESET : in STD_LOGIC; U7 : port( INV_1Q => NET18); component OR_2 EdgeSET : in STD_LOGIC; U2port : DFF_F map(x => EdgeSET, port ( RESET : => inI0 STD_LOGIC; porty map(CLK => NET1443 NET92, );: in STD_LOGIC; : in STD_LOGIC; :I1 => out STD_LOGIC ); U8 : SRout AND_2CLR NET1012, O : out STD_LOGIC); end map( DoubleEdgeSR; port DATAI0=>=>VCC, NET1443, end component; architecture of DoubleEdgeSR is I1Q => => DoubleEdgeSR EdgeRESET, NET62 ); component XOR_2 component AND_2=> NET1456 ); U3 : XOR_2 OUTPUT port( ( I0: :ininSTD_LOGIC; STD_LOGIC; U9 : port INV_1 map(I0 =>I0 NET18, inSTD_LOGIC; STD_LOGIC; :x :in port map( I1I1=> => NET62, NET1534, O=>: out STD_LOGIC); OUTPUT : out STD_LOGIC); yO => SRout NET1534 ); ); end component; U4VCC :end OR_2 <=component; VCC_CONSTANT; constant VCC_CONSTANT component DFF_F port map(I0 => RESET, : STD_LOGIC := '1'; end DoubleEdgeSR; signal NET1012 STD_LOGIC; port (CLK in: STD_LOGIC; I1 =>: NET69, signal NET1443 STD_LOGIC; CLR in: STD_LOGIC; O =>:NET1012 ); signal NET1456 : STD_LOGIC; DATA : in STD_LOGIC; U5 : AND_2 signal NET1534 STD_LOGIC; Q : out=>:STD_LOGIC ); port map(I0 NET62, signal NET18 : STD_LOGIC; end component; I1 => NET18, signal NET62 STD_LOGIC; component DFF_R: => OUTPUT NET69); signal NET69 : STD_LOGIC; port (CLK : in STD_LOGIC; signal NET92 CLR : :inSTD_LOGIC; STD_LOGIC; signal VCC : STD_LOGIC; DATA : in STD_LOGIC; begin Q : out STD_LOGIC ); end component; E d g eR E SE T S R o ut E d ge SE T RE S E T DoubleEdgeSR Slika 5.13: DoubleEdgeSR 5.2.1.4.3 DFF_F (D Flip Flop) 5.2.1.4.1 OR_2 (ILI kolo) 5.2.1.4.2 DFF_R (D Flip Flop) Listing koda: koda: ListingListing koda: I0C L K library IEEE; IEEE; library library use IEEE; IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all; use IEEE.std_logic_1164.all; entity DFF_R DFF_F is is entity entity OR_2port is port (( CLR CLR :: in in std_logic; std_logic; port ( I0 CLK : in: std_logic; in std_logic; CLK : in std_logic; I1 : in std_logic; : in std_logic; DATA DATA : in std_logic; O : out std_logic); Q :std_logic); out std_logic); Q : out end entity; end entity; entity; end architecture gate_arch of OR_2 is architecture DFF_F_arch of DFF_R DFF_F is is architecture DFF_R_arch of begin signal TEMP_Q: std_logic:='0'; signal TEMP_Q: std_logic:='0'; O <=begin I0 or I1; begin process (CLK, (CLK, CLR) CLR) end gate_arch; process begin begin if=CLR '1' then if CLR '1'=then TEMP_Q <= '0'; TEMP_Q <= '0'; elsif elsif falling_edge(CLK) rising_edge(CLK) then then TEMP_Q <= DATA; TEMP_Q <= DATA; end end if; if; end process; process; end <= TEMP_Q; TEMP_Q; QQ <= end DFF_R_arch; DFF_F_arch; end I1C L R OQ DA TA OR_2 Slika 5.14: OR_2 kolo DFF_R Slika 5.15: D Flip Flop 5.2.1.4.4 XOR_2 Proširenje Listing koda: libraryBlok koji koji stavlja 24 bita veće težine na logičku nulu. On IEEE; prihvata osmobitni podatak sa svog ulaza i to 8 bitaI1manje težine, use IEEE.STD_LOGIC_1164.all; entity XOR_2 is na mestu 24 bita veće težine i na izlazu generiše 32 bitni dodeljuje nule XOR_2 port ( I0 : in std_logic; podatak.I1 : in std_logic; Slika 5.17: XOR_2 kolo I0 O : out std_logic); end entity; 5.2.1.4.4 XOR_2 architecture gate_arch of XOR_2 is begin Listing koda: O <= I0 xor I1; end gate_arch; library IEEE; use IEEE.STD_LOGIC_1164.all; entity Prosirenje is port (ul:in std_logic_vector(7 downto 0); iz:out std_logic_vector(31 downto 0)); end Prosirenje; architecture Prosirenje of Prosirenje is begin iz<="000000000000000000000000"&ul; end Prosirenje; O iz (3 1:0 ) ul(7 :0 ) Prosirenje Slika 5.18: Blok Proširenje 5.2.1.6 INV_1 (Invertor) 5.2.1.7 AND_2 (I kolo) Listing Listing koda: koda: library library IEEE; IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_1164.all; entity entity INV_1 AND_2 is is port( x : in STD_LOGIC; port( I0: in std_logic; : out STD_LOGIC); I1: iny std_logic; end OUTPUT: INV_1; out std_logic); architecture INV_1 of INV_1 is end AND_2; begin architecture AND_2 of AND_2 is y<=not x; begin end OUTPUT INV_1; <= I0 and I1; end AND_2; I0x O U T PU T y I1 INV_1 Slika 5.19: Invertor AND_2 Slika 5.20: I_kolo PRDATA => PRDATA, PENABLE architecture : in => PIA_APB_8255 STD_LOGIC; of PIA_APB_8255 is 5.2.2PRESET Interfejs APB-bridge PRESET, D O U T (7 :0 ) D IN (7:0 ) component PRESET a8255 in STD_LOGIC; PSELx => :PSELx, P A D DR (3 1:0 ) P R D A TA (3 1:0 ) port (A PSELx : in => STD_LOGIC_VECTOR(1 : in STD_LOGIC; downto 0); Listing koda: PWDATA PWDATA, P CLK RE S E T CLK : => PWDATA in : PWRITE, STD_LOGIC; in STD_LOGIC_VECTOR(31 downto 0); PWRITE DIN :=>in PWRITE :NET2616, STD_LOGIC_VECTOR(7 in STD_LOGIC; downto 0); libraryRESET IEEE; P E NA BL E nC S PAIN DIN : : out in STD_LOGIC_VECTOR(7 downto 0); use IEEE.STD_LOGIC_1164.all; nCS => NET2622, P R E SE T nR D PBIN PRDATA inout : STD_LOGIC_VECTOR(7 downto downto 0); 0); entity PIA_APB_8255 isSTD_LOGIC_VECTOR(31 nRD => :NET2628, P S EL x nW R PCIN RESET :STD_LOGIC; in out STD_LOGIC_VECTOR(7 STD_LOGIC; downto 0); port(PCLK :=> in:NET2634); nWR P W D AT A (3 1 :0 ) RESET nCS : out : in STD_LOGIC; PENABLE : STD_LOGIC; in STD_LOGIC; U2 : a8255 nCS nRD : => in: PADDR(0), inout STD_LOGIC; P W R IT E PRESET in STD_LOGIC; STD_LOGIC; port map(A(0) nRD nWR : inout in STD_LOGIC; STD_LOGIC); PSELx :PADDR(1), in STD_LOGIC; A(1) => APB_bridge end component; nWR in: STD_LOGIC; PWRITE in STD_LOGIC; CLK =>: PCLK, signalDIN DOUT NET2616 :inSTD_LOGIC; STD_LOGIC_VECTOR(7 PADDR :out STD_LOGIC_VECTOR(31downto downto0); 0); => :BUS2610, Slika 5.21: Interfejs APB-bridge signalDOUT PAEN NET2622 out : STD_LOGIC; STD_LOGIC; PAIN=>:: BUS2640, in STD_LOGIC_VECTOR(7 downto 0); signalPAIN PAOUT NET2628 out : STD_LOGIC; STD_LOGIC_VECTOR(7 downto0); 0); PBIN=>::PAIN, in STD_LOGIC_VECTOR(7 downto signalPAOUT PBEN NET2634 :: out : STD_LOGIC; STD_LOGIC; PCIN => in STD_LOGIC_VECTOR(7 downto 0); PAOUT, signalPBIN PBOUT BUS2610 out STD_LOGIC_VECTOR STD_LOGIC_VECTOR(7 (7 downto downto 0); 0); PWDATA :: in STD_LOGIC_VECTOR(31 downto 0); => :PBIN, signalPBOUT PCEN BUS2640 : out : STD_LOGIC_VECTOR STD_LOGIC_VECTOR(7 (7 downto 0); PAOUT=>: PBOUT, out STD_LOGIC_VECTOR(7 downto 0); begin PCOUT out STD_LOGIC_VECTOR(7 PBOUT : out STD_LOGIC_VECTOR(7 downtodownto 0); 0)); PCIN => :PCIN, end:component; U1 APB_bridge PCOUT=>: PCOUT, out STD_LOGIC_VECTOR(7 downto 0); PCOUT component port map(DIN APB_bridge BUS2610, PRDATA out STD_LOGIC_VECTOR(31 downto 0)); RESET =>=>:NET2616, port (DOUT DOUT inBUS2640, STD_LOGIC_VECTOR(7 downto 0); nCS =>:=> NET2622, end PIA_APB_8255; PADDR : in => PADDR, STD_LOGIC_VECTOR(31 downto 0); nRD => NET2628, PCLK => PCLK, PCLK in STD_LOGIC; nWR => : NET2634); PENABLE => PENABLE, end PIA_APB_8255; component APB_bridge PCLK => PCLK, port (DOUT : in=> STD_LOGIC_VECTOR(7 downto 0); PENABLE PENABLE, architecture PIA_APB_8255 of PIA_APB_8255 is 5.2.4 Listing koda čipa PIA-APB-8255 PADDR :=> inPRDATA, STD_LOGIC_VECTOR(31 downto 0); PRDATA component a8255 PCLK : in => STD_LOGIC; PRESET, port (APRESET : in STD_LOGIC_VECTOR(1 downto 0); library IEEE; P A D DR (3 1:0 ) PENABLE : in STD_LOGIC; P R D A TA (3 1:0 ) PSELx CLK : => in PSELx, STD_LOGIC; use IEEE.std_logic_1164.all; P CLK PRESET : in STD_LOGIC; P A IN(7 :0 ) => STD_LOGIC_VECTOR(7 PWDATA, DIN : in downto 0); entity PWDATA PIA_APB_8255 is P E NA BL E P B IN(7 :0 ) PSELx : in STD_LOGIC; PWRITE PWRITE, P C IN (7 :0 ) PAIN : => in STD_LOGIC_VECTOR(7 downto 0); port(PCLK : in STD_LOGIC; P R E SE T PWDATA : in STD_LOGIC_VECTOR(31 downto 0); RESET PBIN :=>in STD_LOGIC_VECTOR(7 downto 0); PENABLE :NET2616, in STD_LOGIC; PWRITE : in STD_LOGIC; P S Ex P A O UT (7:0 ) nCS =>: NET2622, PCIN inin STD_LOGIC_VECTOR(7 downto 0); PRESET : STD_LOGIC; P B O UT (7:0 ) DIN : out STD_LOGIC_VECTOR(7 downto 0); P W R IT E P C O UT (7:0 ) nRD => :NET2628, RESET PSELx in STD_LOGIC; PRDATA : out STD_LOGIC_VECTOR(31 downto 0); nWR => NET2634); P W D AT A (3 1 :0 ) nCS : in STD_LOGIC; PWRITE : in STD_LOGIC; RESET : out STD_LOGIC; U2 : a8255 nRD : : inin STD_LOGIC; PADDR STD_LOGIC_VECTOR(31 downto 0); nCS : out STD_LOGIC; port map(A(0) => PADDR(0), nWR PAIN::in inSTD_LOGIC; STD_LOGIC_VECTOR(7 downto 0); nRD : inout STD_LOGIC; A(1) PADDR(1), DOUT out STD_LOGIC_VECTOR(7downto downto0); 0); PBIN => : in STD_LOGIC_VECTOR(7 nWR : inout STD_LOGIC); CLK PAEN outSTD_LOGIC_VECTOR(7 STD_LOGIC; PIA_APB_8255 PCIN=>: PCLK, in downto 0); end component; DIN => :BUS2610, PAOUT STD_LOGIC_VECTOR(7 downto PWDATA :out in STD_LOGIC_VECTOR(31 downto0); 0); Slika 5.30: PIA-APB-8255 signal NET2616 : STD_LOGIC; DOUT => BUS2640, PBEN PAOUT::out outSTD_LOGIC; STD_LOGIC_VECTOR(7 downto 0); signal NET2622 : STD_LOGIC; PAIN => PAIN, PBOUT : out STD_LOGIC_VECTOR(7 downto 0); signal NET2628 :PAOUT, STD_LOGIC; PAOUT PCEN PCOUT:=> :out outSTD_LOGIC_VECTOR(7 STD_LOGIC_VECTOR(7downto downto0); 0); signal NET2634 : STD_LOGIC; PBIN =>::PBIN, PCOUT out downto 0)); PRDATA outSTD_LOGIC_VECTOR(7 STD_LOGIC_VECTOR(31 downto 0)); signal BUS2610 : STD_LOGIC_VECTOR (7 downto 0); PBOUT => PBOUT, end component; PIA_APB_8255; signal BUS2640 STD_LOGIC_VECTOR (7 downto 0); PCIN => : PCIN, begin PCOUT => PCOUT, U1 : APB_bridge RESET => NET2616, port map(DIN BUS2610, nCS =>=> NET2622, DOUT =>NET2628, BUS2640, nRD => PADDR PADDR, nWR =>=> NET2634); end PIA_APB_8255; signal PRESET : std_logic; signal PSELx : std_logic; library ieee; PWRITE : std_logic; use signal ieee.std_logic_1164.all; signal PADDR : std_logic_vector(31 downto 0); signal : std_logic_vector(7 U pia_apb_8255_tb ciljuPAIN provere ispravnosti rada downto dizajna,0);napisan je entity is PBIN : std_logic_vector(7 downto 0); end signal pia_apb_8255_tb; izvršena je simulacija rada kola. signal PCIN : std_logic_vector(7 downto 0); is architecture TB_ARCHITECTURE of pia_apb_8255_tb signal PWDATA : std_logic_vector(31 downto 0); component pia_apb_8255 signal PAOUT : std_logic_vector(7 port( Sledi listing Test-bench programa: downto 0); signal PBOUT std_logic_vector(7 downto 0); PCLK : in: std_logic; signal PCOUT :: in std_logic_vector(7 downto 0); PENABLE std_logic; signal PRDATA : std_logic_vector(31 downto 0); PRESET : in std_logic; begin PSELx : in std_logic; UUT :PWRITE pia_apb_8255 : in std_logic; port PADDR map (PCLK PCLK, : in => std_logic_vector(31 downto 0); PENABLE PENABLE, PAIN : in=>std_logic_vector(7 downto 0); PRESET => std_logic_vector(7 PRESET, PBIN : in downto 0); PSELx => PSELx, PCIN : in std_logic_vector(7 downto 0); PWRITE :=>inPWRITE, PWDATA std_logic_vector(31 downto 0); PADDR :=>out PADDR, PAOUT std_logic_vector(7 downto 0); PAIN => PAIN, PBOUT : out std_logic_vector(7 downto 0); PBIN => PBIN, PCOUT : out std_logic_vector(7 downto 0); PCIN => PCIN, PRDATA : out std_logic_vector(31 downto 0) ); PWDATA => PWDATA, end component; entity PAOUT => PAOUT, PBOUT => PBOUT, signal PCLK : std_logic; PCOUT => PCOUT,: std_logic; signal PENABLE PRDATA => PRDATA); 6. TESTIRANJE RADA čipa PIA-APB-8255 TestBench program i your stimulus herepokriva ... Prethodni listing test-- Add – bencha najbolje sve situacije koje se mogu javitiPCLK tokom Sve to možemo videti na vremenskom dijagramu PCLK <= not afterrada. 20ns; PRESET<='1','0' after 5ns,'1'čipa after 10ns; koji simulira rad opisanog PIA-APB-8255. Sa ovog dijagrama, dat na PSELx <='0','1' after 80ns,'0' after 160ns,'1' after 240ns,'0' after slici 6.1, može se uočiti funkcionisanje sistema. 320ns,'1' after 440ns,'0' after 520ns; PENABLE <='0','1' after 120ns,'0' after 160ns,'1' after 280ns,'0' after 320ns,'1' after 480ns,'0' after 520ns; PWRITE <='0', '1' after 80ns,'0' after 160ns,'1' after 240ns,'0' after 320ns,'0' after 440ns,'0' after 520ns; PADDR<="00000000000000001001000000000000","00000000000000001001000000000011" after 50ns,"00000000000000001001000000000000" after 200ns,"00000000000000001001000000000010" after 440ns; PWDATA<="00000000000000000000000010001001","00000000000000000000000000001010" after 190ns; PAIN<="00000001"; PBIN<="00011010"; PCIN<="00000000","00000111" after 450ns; end TB_ARCHITECTURE; configuration TESTBENCH_FOR_pia_apb_8255 of pia_apb_8255_tb is for TB_ARCHITECTURE for UUT : pia_apb_8255 use entity work.pia_apb_8255(pia_apb_8255); end for; end for; Slika 6.1: Vremenski dijagram rada čipa PIA-APB-8255 end TESTBENCH_FOR_pia_apb_8255; 7. IMPLEMENTACIJA čipa PIA-APB-8255 Sintezu i implementaciju smo izvršili u programskom paketu XILINX ISE 6.3, firme XILINX. Ovaj programski paket namenjen je za razvoj aplikacija baziranih na njihovim CPLD i FPGA kolima. Prilikom implementacije čipa PIA-APB-8255 iskorišćeno je FPGA kolo iz XILINX-ove familije SPARTAN2, device 2S50PQ208-6. To je kuciste PQ208, što znači da poseduje 208 pinova. Morali smo da iskoristimo ovo kućiste jer čip koji implementiramo zahteva 174 pina. Upotrebljeno je, iako nije bilo potrebe za tolikim brojem pinova, jer je to najmanje pakovanje koje poseduje ova familija. Na slici 7.1, prikazana je šema sinteze čipa PIA-APB-8255 na najvišem nivou, koju je izgenerisao program Xilinx ECS. Na šemi se mogu uočiti osnovni blokovi od kojih se čip sastoji. Slika 7.1: Šema sinteze čipa PIA-APB-8255 Programom se može analizirati svaki blok ponaosob do nivoa samih gejtova. Na slici 7.2 je data šema sinteze bloka čipa PIA-APB-8255, APBbridge: Slika 7.2: Šema sinteze APB-bridge Na slici 7.3 data je šema sinteze čipa 8255: Nakon toga prešlo se na samu implementaciju kola na konkretnom Na osnovu dobijenih podataka, što se vidi iz prethodnog listinga, bitno FPGA kolu. Naredni listing nam pokazuje dobijene rezultate: Logic je daUtilization: se na kraju vidi da je implemetnirano kolo zauzelo 1483 ekvivalentnih Number of Slice Flip Flops: 27 out of 1,536 1% gejtova. targetLUTs: part "2s50pq208-6". Number Using of 4 input 148 out of 1,536 9% Removing unused or disabled logic... Running cover... Logic Distribution: Number Treba istaći da je packing... maksimalna radna frekvencija85kola 213.4 MHz. Running directed of occupied Slices: out of 768 11% delay-based packing... Number Running of Slices containingLUT only related logic: 85 out of 85 100% Running related packing... of Slices containing unrelated logic: struktura 0koja outjeofdobijena 85 nakon 0% Number Na slikama 7.4 i 7.5 data je unutrašnja Design Summary *See NOTES below for an explanation of the effects of unrelated logic implementacije kola gde se vide zauzeti blokovi unutar kola. -------------Number of of 4 errors: 0 Total Number input LUTs: 148 out of 1,536 9% Number of warnings: 5 Number of bonded IOBs: 102 out of 140 72% Slika 7.4 nam prikazuje sam razmeštaj ćelija gde možemo videti i koji grupisani; to IOB Flip Flops: 35 pinoviofu kolu su iskorišćeni. Na slici se vidi kola nisu Number GCLKs: 1 out of da izvodi 4 25% Number ofseGCLKIOBs: 1 out ofveza do 4 svih 25% je da bi postiglo približno isto kašnjenje pinova. Total equivalent gate count for design: 1,483 Slika 7.4: Šema zauzetosti ćelija kola Izgled povezanosti samih veza prikazan je na slici 7.5: Slika 7.5: Šema veza ćelija u kolu Na slici 7.6 prikazan je raspored pinova na FPGA kolu: Slika 7.6: Raspored pinova