+ All Categories
Home > Documents > 3es.elfak.ni.ac.rs/Files/8255.doc · Web view8255. Slika 2.3: Definicija rada PPI-a 8255 (A0 i A1)...

3es.elfak.ni.ac.rs/Files/8255.doc · Web view8255. Slika 2.3: Definicija rada PPI-a 8255 (A0 i A1)...

Date post: 18-Apr-2020
Category:
Upload: others
View: 15 times
Download: 1 times
Share this document with a friend
99
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU PROGRAMABILNI PERIFERIJSKI INTERFEJS INTEL 8255
Transcript

UNIVERZITET U NIŠUELEKTRONSKI FAKULTETKATEDRA ZA ELEKTRONIKU

PROGRAMABILNI PERIFERIJSKI INTERFEJS

INTEL 8255

Studenti: Alen Eftimov 8736 Dragan Živković 8737

Niš, Februar 2006.S A D R Ž A J :

1.SERIJSKI I PARALELNI PRENOS PODATAKA..........................................................................................................2

Serijski prenos......................................................................................................................................................................2Paralelni prenos.................................................................................................................................................................3

2. PROGRAMABILNI PERIFERIJSKI INTERFEJS INTEL 8255....................................................................................5

2.1. OSNOVNI FUNKCIONALNI OPIS KOLA 8255...........................................................................................................6Opšte....................................................................................................................................................................................6Bafer magistrale podataka...................................................................................................................................................6Čitanje/upis i kontrolna logika............................................................................................................................................7Kontrolne grupe A i B..........................................................................................................................................................8Portovi A, B i C....................................................................................................................................................................8

2.2. DETALJNI OPIS RADA KOLA 8255.............................................................................................................................9Izbor režima rada.................................................................................................................................................................9Format definisanja režima.................................................................................................................................................10Osobina setovanja/resetovanja pojedinačnih bitova.........................................................................................................10Režim 0 (osnovni ulaz/izlaz)..............................................................................................................................................10Funkcije kontrole prekida..................................................................................................................................................10Režim 1 (prekidni ulaz/izlaz)..............................................................................................................................................11Definicije ulaznih kontrolnih signala................................................................................................................................11Definicije izlaznih kontrolnih signala................................................................................................................................12Režim 2 (prekidna dvosmerna U/I magistrala)..................................................................................................................14Definicije signala dvosmerene U/I magistrale..................................................................................................................14Razmatranje specijalnih kombinacija režima....................................................................................................................15Mogućnosti strujnih izvora na portovima B i C................................................................................................................16Čitanje statusa Porta C......................................................................................................................................................16

2.3. PRIMENA ČIPA INTEL 8255........................................................................................................................................17

3. PREDLOG REALIZACIJE ČIPA 8255 POMOĆU VHDL-A....................................................................................20

3.1. CTRL_LOG........................................................................................................................................................................213.2. PORTAIN..........................................................................................................................................................................263.3. PORTBIN...........................................................................................................................................................................283.4. DOUTMUX......................................................................................................................................................................293.5. PORTAOUT.......................................................................................................................................................................313.6. PORTBOUT.......................................................................................................................................................................323.7. PORTCOUT.......................................................................................................................................................................343.8. GENERATOR TAKTA (CLK_GEN).....................................................................................................................................433.9. GLOBALNI MULTIPLEKSER (MUX_GLOBAL)...................................................................................................................44

4. SINTEZA I IMPLEMENTACIJA KOLA..........................................................................................................................46

5. TESTIRANJE RADA KOLA...............................................................................................................................................49

PRIMER 1 ( MODE 0):...............................................................................................................................................................49PRIMER 2 ( MODE 1 STROBOVANI ULAZ):................................................................................................................................53PRIMER 3 ( MODE 1 STROBOVANI IZLAZ):...............................................................................................................................57

6.ZADATAK..............................................................................................................................................................................61

1

MOD 0:...................................................................................................................................................................................61MOD 1 (STROBOVANI ULAZ):.................................................................................................................................................66MOD 1 (STROBOVANI IZLAZ):................................................................................................................................................71

7. LITERATURA :......................................................................................................................................................................76

1.SERIJSKI I PARALELNI PRENOS PODATAKA

Računar komunicira sa spoljnim svetom preko svog U/I podsistema. Podaci (informacija) se predaju/primaju ka/iz spoljnog sveta u kodiranom obliku. Postoje dva tipa prenosa podataka:

1) Serijski – preko jedinstvene veze (žice), ili komunikacionog kanala,a u datom trenutku se prenosi po jedan bit2) Paralelni – preko većeg broja veza (žica), u datom trenutku se prenosi više bitova.

Serijski prenos

Serijska informacija se prenosi preko jedinstvene linije na principu bit-po-bit. Na ovaj način smanjuje se broj veza(žica) kojim se CPU povezuje sa U/I uređajem. Serijski prenos je sporiji, karakteriše ga niža cena i veća pouzdanost,tj. greška u prenosu ili prestanku prijema lakše se detektuje,pa se zbog toga koristi za prenos na većim rastojanjima.

2

Slika 1.1: Komunikacija preko serijskih U/I portova

Paralelni prenos

Paralelnim prenosom se istovremeno po posebnim linijama prenosi veći broj bitova. Time dobijamo veću brzinu prenosa, ali i težu detekciju greške, veću nepouzdanost prenosa i veću cenu. Zato se paralelni prenos koristi za kraća rastojanja. Paralelne komunikacije, za razliku od serijskih, nisu dobro standardizovane. U/I prenos “ Hahdshake” podrazumeva da se podaci iz spoljnjeg okruženja prihvataju od CPU-a preko ulaznog bafera, a podatke koje CPU predaje spoljnom okruženju predaju preko izlaznog bafera.Primer tipičnog paralelnog izlaznog interfejsa je prikazan na sledećoj slici:

3

Slika 1.2: Povezivanje izlaznog interfejsa na izlazni uređaj tipa D/A konvertor zasnovan na paralelnom prenosu

CPU lečuje podatke u izlazni bafer podataka, a izlazi bafera su direktno povezani na izlazni uređaj ( u našem slučaju D/A konvertor). Izlaz D/A konvertora menjaće se u zavisnosti od sadržaja izlaznog bafera.

Razmotricemo jos jedan primer paralelnog interfejsa kod koga se koriste handshake upravljačke linije. Kada U/I uređaj želi da preda podatke interfejsu on prvo postavlja važeće podatke na linijama Ulazni_podaci a zatim aktivira liniju Pod_Ul_spreman. Interfejs odgovara lečovanjem podatka u Ulazni_bafer i aktivira liniju Potvrda_Ul_Podataka.U/I uređaj nakon prijema signala Potvrda_Ul_Podataka deaktivira podatke i signal Pod_Ul_Spreman. Interfejs nakon primanja podatka postavi statusni bit Ready i verovatno aktivira liniju IRn. Kada CPU prihvati podatak interfejs deaktivira statusni bit Ready. Zahtev za prekid ( IRn) kao i obrada prekida se prihvataju i obrađuju standardnim putem.

4

Slika1.3: Povezivanje ulaznog i izlaznog interfejsa

Kada je u pitanju izlaz, interfejs će postaviti Ready statusni bit i generisati zahtev za prekid kada je Izlazni_bafer podataka dosrtupan. Kada CPU upiše podatke, interfejs resetuje izlazni statusni bit Ready, postavlja podatke na magistrali Izlazni_podaci i signalizira U/I uređaju preko linije Pod_Izl_Spremni. Kada je uređaj spreman da prihvati podatke, on lečuje podatke i vraća signal Potvrda_Izl_Signala. Nakon toga interfejs deaktivira signal Pod_Izl_Spremni i ponovo postavlja izlazni statusni bit na Ready.

8255A

2. PROGRAMABILNI PERIFERIJSKI INTERFEJS INTEL 8255

8255 je programabilni čip opšte namene projektovan za upotrebu u mikroprocesorskim sistemima. Ima 24 ulazno-izlazna pina koji se mogu pojedinačno programirati u dve grupe od dvanaest

5

pinova. Ovaj čip koristi se u tri osnovna režima rada. U Režimu 0, svaka grupa od dvanaest ulazno-izlaznih pinova može da se programira u skupove od po 4, koji mogu da budu ulazi ili izlazi. U Režimu 1 svaka grupa može da se programira da ima 8 linija ulaza ili izlaza. Od preostalih četiri, tri pina se koriste za signale handshake protokola i kontrolu prekida. Režim 2 predstavlja dvosmerni rad magistrale koja koristi 8 linija za dvosmernu magistralu, i pet linija, pozajmljujući jednu od ostalih grupa, za handshake protokol. Ostale osobine čipa 8255 uključuju mogućnost bitskog setovanja i resetovanja i mogućnost davanja struje od 1 mA pri naponu od 1.5 V. Ovo omogućava Darlingtonovim tranzistorima da direktno napajaju uređaje kao što su štampači ili visokonaponski displeji.

Slika 2.1: Raspored pinova na čipu INTEL 8255

2.1. OSNOVNI FUNKCIONALNI OPIS KOLA 8255

Opšte

6

8255 je uređaj za programabilni periferijski interfejs (Programmable peripheral interface), skraćeno PPI, projektovan za upotrebu u 8080 mikroprocesorskim sistemima. Njegova funkcija je U/I komponenta opšte namene za povezivanje periferijske opreme na 8080 sistemsku magistralu. Funkcionalna konfiguracija kola 8255 je programirana sistemskim softverom tako da nije potrebna spoljašnja logika za povezivanje periferijskih uređaja ili struktura.

Slika 2.2: Interna organizacija 8255 vidljiva od strane programera

Bafer magistrale podataka

Ovaj trostatički dvosmerni, osmobitni bafer koristi se za povezivanje 8255 na sistemsku magistralu podataka procesora 8080. Bafer prenosi/prima podatke nakon izvršavanja ulaznih ili izlaznih instrukcija od strane procesora 8080. Kontrolne reči i statusne informacije se takođe prenose preko ovog bafera.

Čitanje/upis i kontrolna logika

7

Funkcija ovog bloka je da upravlja svim unutrašnjim ili spoljašnjim prenosima podataka, statusnih ili kontrolnih reči. On prihvata ulaze sa adresa procesora 8080 i kontrolnih magistrala, i po redu izdaje komande obema kontrolnim grupama.

( )

Chip Select (selektovanje čipa): “nizak nivo” na ovom ulaznom pinu omogućava komunikaciju između‚ čipa 8255 i procesora.

( )

Read (čitanje): “nizak nivo” na ovom ulaznom pinu omogućava čipu 8255 da pošalje podatke i statusne informacije procesora na magistralu podataka. U suštini, omogućava da procesor pročita podatke iz 8255.

( )

Write (upis): “nizak nivo” na ovom ulaznom pinu omogućava procesoru da upisuje podatke i kontrolne reči u čip 8255.

Slika 2.3: Definicija rada PPI-a 8255

(A0 i A1)

Selekcija Portova 0 i 1: Ovi ulazni signali, u vezi sa i ulazima, kontrolišu izbor jednog od tri porta za registar kontrolne reči. Oni su normalno povezani na najmanje značajne bitove adresne magistrale (A0 i A1).

(RESET)

8

Reset: “visok nivo” na ovom ulazu briše sve unutrašnje registre uključujući i kontrolni registar i svi Portovi (A, B i C) se postavljaju u ulazni režim.

Kontrolne grupe A i B

Funkcionalna konfiguracija svakog porta je programirana sistemskim softverom. U suštini procesor 8080 izdaje kontrolnu reč čipu 8255. Kontrolna reč sadrži informacije kao što su “režim”, “setuj bit”, “resetuj bit” i slično, čime se inicijalizuje funkcionalna konfiguracija 8255. Svaki od kontrolnih blokova (grupa A i grupa B) prihvataju komande od kontrolne logike, prihvataju kontrolne reči od unutrašnje magistrale podataka i izdaju odgovarajuće komande njima dodeljenim portovima.Kontrolna grupa A ( Port A i viši C port (C7-C4))Kontrolna grupa B ( Port B i niži C port (C3-C0))U kontrolni regitar reči se može samo upisivati. Nije dozvoljena nikakva operacija čitanja u ovom registru.

Portovi A, B i C

8255 sadrži tri 8-bitna porta (A, B i C). Svi oni mogu se konfigurisati sistemskim softverom za više različitih funkcionalnih namena, ali svaki od njih poseduje posebne karakteristike, odnosno sposobnost da dodatno poveća snagu i fleksibilnost čipa 8255.

Port A: jedan 8-bitni izlazni leč/bafer i jedan 8-bitni ulazni leč.Port B: jedan 8-bitni ulazno/izlazni leč/bafer i jedan 8-bitni ulazni bafer.Port C: jedan 8-bitni izlazni leč/bafer i jedan 8-bitni ulazni bafer (nema leča na ulazu). Ovaj port može se podeliti na dva 4-bitna porta u zavisnosti od režima. Svaki 4-bitni port sadrži 4-bitni leč i može se koristiti za izlaze kontrolnih signala i ulaze statusnih signala zajedno sa Portovima A i B.

9

2.2. DETALJNI OPIS RADA KOLA 8255

Izbor režima rada

Postoje tri osnovna režima rada koji se mogu selektovati sistemskim softverom:

Režim 0 – Osnovni Ulaz/IzlazRežim 1 - Prekidni Ulaz/IzlazRežim 2 – Dvosmerna magistrala

Kada se RESET ulaz postavi na jedinicu, svi portovi će se postaviti u režim ulaza (tj. sve 24 linije će biti u stanju visoke impedanse). Pošto se RESET ukloni, 8255 može ostati u ovom režimu bez zahteva za dodatnu inicijalizacije. Tokom izvršenja sistemskog programa, može se selektovati neki od ostalih režima upotrebom jedne izlazne instrukcije. Ovo omogućava da jedan 8255 opslužuje različite periferne uređaje sa jednostavnom softverskom rutinom.Režimi za portove A i B mogu se odvojeno definisati, dok se Port C deli na dva dela, pošto se zahteva definicijama Portova A i B. Svi izlazni registri, uključujući i statusne flip-flopove, će se resetovati kad god se promeni režim. Režimi se mogu kombinovati tako da se njihova funkcionalna definicija može prilagoditi bilo kojoj U/I strukturi. Na primer, Grupa B se može programirati u Režimu 0 da nadgleda jednostavna zatvaranja prekidača ili da prikaže rezultate izračunvanja. Grupa A se može programirati u Režimu 1 da nadgleda tastaturu ili čitač trake na osnovu prekida.

Slika 2.4: Komandni bajt komandnog registraa) programiranje portova A,B,C

b) setovanje ili resetovanje bita selektovanog bit poljem

10

Format definisanja režima

Definicije režima i moguće kombinacije mogu izgledati zbunjujuće na prvi pogled, ali posle površnog pregleda rada kompletnog uređaja, logični U/I pristup će izaći na površinu. Projektant čipa 8255 uzeo je u obzir efikasan raspored na čipu, definisanje kontrolnih signala i kompletnu funkcionalnu fleksibilnost, koja podržava skoro svaki periferijski uređaj bez spoljašnje logike. Na ovakav našin ostvareno je optimalno iskorišćenje dostupnih pinova.

Osobina setovanja/resetovanja pojedinačnih bitova

Bilo koji od osam bitova Porta C se može setovati ili resetovati upotrebom jedne izlazne instrukcije. Ova osobina redukuje softverske zahteve u kontrolnim aplikacijama.

Režimi rada

Režim 0 (osnovni ulaz/izlaz)

Ova funkcionalna konfiguracija obezbeđuje jednostavne ulazne i izlazne operacije za svaki od tri porta. Ne zahteva se handshaking protokol, već se podaci jednostavno upisuju ili čitaju sa zadatog porta.

Kada se Port C koristi kao status/kontrola za port A ili B, ovi bitovi se mogu setovati ili resetovati bitskim operacijama kao da su izlazni portovi podataka.

Funkcije kontrole prekida

Kada se 8255 programira da radi u Režimu 1 ili Režimu 2, predviđeni su kontrolni signali koji se mogu koristiti kao ulazi za zahtevanje prekida procesoru. Ovi signali, generisani sa Porta C, se mogu isključiti ili uključiti setovanjem ili resetovanjem INTE flip-flopa, upotrebom funkcija bitskog setovanja/resetovnja Porta C.Ova funkcija omogućava programeru da ne dozvoli ili dozvoli da pojedinačni U/I uređaji prekidaju procesor, bez uticaja na druge uređaje u prekidnoj strukturi.

INTE flip-flop definicija:

(BIT-SET) – INTE je setovan – omogućen prekid(BIT-RESET) – INTE je resetovan – onemogućen prekid

Napomena: Svi maskirni flip-flopovi se automatski resetuju tokom selektovanja režima i resetovanja uređaja.

11

Osnovne funkcionalne definicije Režima 0:* Dva 8-bitna i dva 4-bitna porta* Svaki port može biti ulazni i izlazni* Izlazi su lečovani* Ulazi nisu lečovani* U ovom režimu su moguće 16 različitih ulazno/izlaznih konfiguracija

Režimi rada

Režim 1 (prekidni ulaz/izlaz)

Ova funkcionalna konfigurcija obezbeđuje prenos U/I podataka ka i od zadatog porta u vezi sa signalima prekida ili handsaking protokola. U Režimu 1, Portovi A i B koriste linije na Portu C da generišu ili prihvate ove signale handshaking protokola.

Osnovne funkcionalne definicije Režima 1:* Dve grupe (grupa A i grupa B)* Svaka grupa sadrži jedan 8-bitni port podataka i jedan 4-bitni kontrolni ili port podataka* 8-bitni port podatka može biti ili ulazni ili izlazni. I ulazi i izlazi su lečovani.* 4-bitni port se koristi za kontrolu i status 8-bitnog porta podataka.

Definicije ulaznih kontrolnih signala

(strobe ulaz)Nula na ovom ulazu upisuje podatke u ulazni leč.

IBF (ulazni bafer pun)Jedinica na ovom izlazu ukazuje da su podaci upisani u ulazni leč. U suštini, ovo je potvrda. IBF se setuje kada je STB ulaz na nuli, a resetuje se tokom rastuće ivice ulaza.

INTR (zahtev za prekid)Jedinica na ovom izlazu se može iskorititi da prekida processor kada ulazni uređaj zahteva opsluživanje. INTR se setuje kada je na jedinici, IBF je na jedinici i INTE je na jedinici. Resetuje se tokom opadajuće ivice . Ova procedura omogućava ulaznim uređajima da zahtevaju opsluživanje od procesora jednostavnim izbacivanjem podataka na port.

INTE AKontrolisan bitskim setovanjem/resetovanjem PC4.

INTE BKontrolisan bitskim setovanjem/resetovanjem PC2.

12

Slika 2.5: Strobovani ulaz u režimu 1 kod 8255a) interna struktura

b) vremenski dihagrami

Definicije izlaznih kontrolnih signala

(izlazni bfer pun)Izlaz će se postaviti na nulu da ukaže da je processor upisao podatke na zadati port. OBF F/F će se setovati rastućom ivicom WR ulaza i resetovati kada je ulaz na nuli.

(ulaz potvrde)Nula na ovom ulazu informiše 8255 da su podaci sa Portova A i B prihvaćeni. U suštini, odgovor sa periferijskog uređaja ukazuje da je primio podatke sa izlaza CPU.

INTR (zahtev za prekid)

13

Jedinica na ovom izlazu može se upotrebiti da prekida CPU kada je izlazni uređaj primio podatke (prenete sa procesora). INTR se setuje kada je na jedinici, je na jedinici i INTE je na jedinici. Resetuje se tokom opadajuće ivice .

Slika 2.6: Režim 1 strobovani izlaz kod 8255a) interna struktura

b) vremenski dijagrami

Kombinacije Režima 1

Portovi A i B mogu se pojedinačno definisati kao ulazi ili izlazi u Režimu 1 kako bi podržali različite U/I prekidne aplikacije.

Režimi rada

14

Režim 2 (prekidna dvosmerna U/I magistrala)

Ova funkcionalna konfiguracija obezbeđuje značaj za komunikaciju sa periferijskim uređajem ili strukturom preko jedne 8-bitne magistrale i za predaju i za prijem podataka (dvosmerna U/I magistrala). Signali handshaking protokola koriste se da održe propisan protok magistrale na sličan način kao kod Režima 1. Takođe su dostupne i funkcije generisanja i dozvole/zabrane prekida.

Funkcionalne definicije Režima 2* Koristi se samo u grupi A* Jedan 8-bitni, dvosmerni port (Port A) i 5-bitni kontrolni port (Port C)* I ulazi i izlazu su lečovani* 5-bitni kontrolni port (Port C) se koristi za kontrolu i status 8-bitnog, dvosmernog porta (Port A)

Definicije signala dvosmerene U/I magistrale

INTR (zahtev za prekid)Jedinica na ovom izlazu se može upotrebiti da prekida procesor (CPU) i za izlazne i za ulazne operacije.

Izlazne operacije

(izlazni bafer pun) će se postaviti na nulu da ukaže da je CPU ispisao podatke na Port A.

(potvrda)Nula na ovom ulazu omogućava da trostatički izlazni bafer sa Porta A pošalje podatke. Inače, bafer bi bio u stanju visoke impedanse.INTE 1 (INTE flip-flop dodeljen sa )Kontrolisan bitskim setovanjem/resetovanjem PC6

Ulazne operacije (strobe ulaz)

Nula na ovom ulazu upisuje podatke u ulazni leč.IBF (ulazni bafer pun)Jedinica na ovom izlazu ukazuje da su podaci upisani u ulazni leč.

INTE 2(INTE flip-flop dodeljen sa IBF)Kontrolisan bitskim setovanjem/resetovanjem PC4

15

Slika 2.7: Režim 2 kod 8255a) interna struktura

b) vremenski dijagram

Razmatranje specijalnih kombinacija režima

Postoji nekoliko kombinacija režima kada se ne koriste svi bitovi Porta C za kontrolu ili status. Ostali bitovi mogu se koristiti na sledeći načim:Ako se programiraju kao ulazi –

Svim ulaznim linijama može se pristupiti tokom normalnog čitanja Porta CAko se programiraju kao izlazi –

Bitovima u višem delu C (PC7-PC4) može se pojedinačno pristupiti upotrebom finkcija bitskog setovanja/resetovanja.Bitovima u nižem delu C (PC3-PC0) može se pristupiti upotrebom funkcija bitskog setovanja/resetovanja ili pristupiti upisivanjem u Port C.

16

Mogućnosti strujnih izvora na portovima B i C

Bilo koji skup od osam izlaznih bafera, izabranih nasumice iz Portova B i C, mogu davati 1.5mA pri 1.5 V. Ova osobina omogućava da 8255 direktno napaja Darlingtonove spojeve i visokonaponske displeje koji zahtevaju ovakvu struju.

Čitanje statusa Porta C

U Režimu 1, Port C prenosi podatke u periferijske uređaje ili iz njih. Kada se 8255 programira da radi u Režimima 1 i 2, port C generiše ili prihvata handshaking signale sa periferijskih uređaja. Čitanje sadržaja Porta C omogućava da programer testira ili verifikuje status svakog perifernog uređaja i da promeni tok programa prema tome.Ne postoji specijalna instrukcija za čitanje statusne informacije sa Porta C. Normalna operacija čitanja Porta C se izvršava da obavi ovu funkciju.

17

2.3. PRIMENA ČIPA INTEL 8255

Čip 8255 je veoma moćan “alat” za sprezanje periferijskih uređaja sa mikroračunarskim sistemom 8080.Najvažnije prednosti ovog čipa su to što poseduje optimalan broj pinova i dovoljno je fleksibilan da omogućava sprezanje I/O uređaja sa sistemskom magistralom 8080 bez upotrebe dodatne logike.

Na sledećim slikama prikazani su neki tipični primeri primene ovog čipa.

Slika 1: Sprega 8255 sa brzim štampačem Slika 2: Sprega 8255 sa displejem i tastaturom

18

]Slika 3: Sprega sa tastaturom i terminalom Slika 4: D/A i A/D konverzija

Slika 5: Sprega 8255 sa flopi diskom Slika 6: Sprega 8255 sa CRT monitorom

19

Slika 7: Sprega 8255 sa čitačem kartica i industijskim mikrokontrolerom

Slika 8: Ostvarivanje distibutivnog multiprocesorskog sistema

20

3. PREDLOG REALIZACIJE ČIPA 8255 POMOĆU VHDL-a

Na Slici 3.1. prikazan je predlog realizacije čipa 8255 pomoću softverskog alata Active HDL 5.1. Potom je izvršena njegova sinteza pomoću programskog paketa ISE kompanije XILINX .

Sl.3.1. BDE dijagram čipa 8255

21

U strukturi sa Slike 3.1. (najviši nivo čipa 8255) razlikujemo 9 entiteta, odnosno komponenata:

* Ctrl_log* PortAin* PortBin* DoutMUX* PortAout* PortBout* PortCout* CLK_gen* MUX_global

Svaki od navedenih entiteta biće obrađen u ovom poglavlju.

3.1. Ctrl_log

Bilo kakav prenos podataka unutar ili van čipa 8255 odvija se na osnovu kontrolnih i upravljačkih signala koje generiše ovaj entitet (blok).

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

-- Komponenta Ctrl_log upravlja radom cipa 8255.-- Ovaj blok generise svaki interni upravljacki signal.

ENTITY Ctrl_log IS PORT( Reset : IN std_logic; Clk : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); Din : IN std_logic_vector (7 DOWNTO 0); Cin : IN std_logic_vector (7 DOWNTO 0); Aen : OUT std_logic; Ben : OUT std_logic; Cen : OUT std_logic_vector (7 DOWNTO 0); DoutSelect : OUT std_logic_vector (2 DOWNTO 0); CtrlReg : OUT std_logic_vector (7 DOWNTO 0); Ard : OUT std_logic; Brd : OUT std_logic; Awr : OUT std_logic; Bwr : OUT std_logic; AoutLd : OUT std_logic; BoutLd : OUT std_logic; Coverride : OUT std_logic;

22

CoutLd : OUT std_logic_vector (7 DOWNTO 0) );

END Ctrl_log;

ARCHITECTURE rtl OF Ctrl_log IS

-- Definisanje internih signala u okviru-- bloka Ctrl_log

SIGNAL CtrlRegD : std_logic_vector(6 DOWNTO 0); -- Lecovano stanje Kontrolnog Registra SIGNAL CtrlRegQ : std_logic_vector(6 DOWNTO 0); -- Upisano stanje Kontrolnog Registra SIGNAL ModeA : std_logic_vector(1 DOWNTO 0); -- Mod Registra A SIGNAL ModeB : std_logic; -- Mod Registra B SIGNAL PortA_IO : std_logic; -- Registar A je ulazni/izlazni SIGNAL PortB_IO : std_logic; -- Registar B je ulazni/izlazni SIGNAL PortCUp_IO : std_logic; -- Kontrola viseg dela Registra C SIGNAL PortCLow_IO : std_logic; -- Kontrola nizeg dela Registra C SIGNAL CtrlRegWrite : std_logic; -- Dozvola upisa stanja u Kontrolni Registar

BEGIN-- Poslednji bit kontrolnog registra je uvek '1';-- Svaki bit kontrolnog registra predstavlja neki-- upravljacki bit za registre A,B i C. Sada cemo-- popuniti komandni bajt Komandnog registra (Sl.2.4)

CtrlReg <= '1' & CtrlRegQ; ModeA <= CtrlRegQ (6 DOWNTO 5); ModeB <= CtrlRegQ (2); PortA_IO <= CtrlRegQ (4); PortB_IO <= CtrlRegQ (1); PortCUp_IO <= CtrlRegQ (3); PortCLow_IO <= CtrlRegQ (0); -- Definisanje izlaznih signala bloka Ctrl_log

-- Nacin generisanja dozvole portu Aout AoutLd <= '0' WHEN nCS = '0' AND A = "00" AND nWR = '0' ELSE

'1';-- Nacin generisanja dozvole portu Bout BoutLd <= '0' WHEN nCS = '0' AND A = "01" AND nWR = '0' ELSE '1';-- Na osnovu spoljasnjih upravljackih signala Ctrl_log generise-- izlazne signale koji daju informaciju o citanju/upisivanju-- stanja registara A i B, kao i interni signal CtrlRegWrite, koji-- ukazuje da treba azurirati sadrzaj Kontrolnog Registra

23

Ard <= nCS OR nRD OR A(1) OR A(0); Brd <= nCS OR nRD OR A(1) OR (NOT A(0)); Awr <= nCS OR nWR OR A(1) OR A(0); Bwr <= nCS OR nWR OR A(1) OR (NOT A(0)); CtrlRegWrite <= nCS OR nWR OR (NOT A(1)) OR (NOT A(0)) OR (NOT Din(7));

ControlLogicProc: PROCESS ( nCS , nWR , A, Din, ModeA, ModeB, PortA_IO, PortB_IO, PortCLow_IO, PortCUp_IO, Cin, CtrlRegWrite, CtrlRegQ )-- Pogledati Sliku 2.4 BEGIN

IF (ModeB = '0') THEN Ben <= NOT PortB_IO; -- generisanje dozvole Ben

IF (ModeA(1) = '1') THEN -- "punjenje" niza 4 bita Cen stanjem 1xxx, Cen (3 DOWNTO 0) <= '1' & -- pri cemu je x jednak komplementu PortCLow_IO std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO);

ELSE -- "punjenje" niza 4 bita Cen stanjem xxxx, -- pri cemu je x jednak komplementu PortCLow_IO

Cen (3 DOWNTO 0) <= std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO);

END IF; ELSE Ben <= NOT PortB_IO; Cen (3 DOWNTO 0) <= "1011"; END IF;

IF (ModeA = "00") THEN -- "punjenje" visa 4 bita Cen stanjem xxxx, Aen <= NOT PortA_IO; -- pri cemu je x jednak komplementu PortCUp_IO Cen (7 DOWNTO 4) <= std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO); ELSIF (ModeA = "01") THEN Aen <= NOT PortA_IO;

IF (PortA_IO = '0') THEN --Port A je izlazni Cen(7 DOWNTO 4) <= "10" & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO);

ELSE --Port A je ulazni Cen(7 DOWNTO 4) <= std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & "10";

24

END IF; ELSE

Aen <= NOT Cin(6); -- ACK signal generise dozvolu u Modu 2 Cen(7 DOWNTO 4) <= "1010"; -- "punjenje" visa 4 bita Cen stanjem 1010

END IF;

CASE A IS WHEN "00" => -- Port A

IF (ModeA = "00") THEN -- Ukoliko je Port A u Modu 0 DoutSelect <= "000"; -- Selektuje se nelecovani podatak PAin ELSE DoutSelect <= "001"; -- U suprotnom, selektuje se lecovani podatak PAin. END IF;

WHEN "01" => -- Port B IF (ModeB = '0') THEN -- Ukoliko je Port B u Modu 0 DoutSelect <= "010"; -- Selektuje se nelecovani podatak PBin ELSE DoutSelect <= "011"; -- U suprotnom, selektuje se lecovani podatak PBin. END IF;

WHEN "10" => -- Port C DoutSelect <= "100"; -- Selekcija podatka Cin

WHEN "11" => DoutSelect <= "110"; -- Selekcija podatka iz Kontrolnog Registra

WHEN OTHERS => NULL;

END CASE;

-- Generisanje informacije o prekoracenju, tj. -- kada procesor "puni" Kontrolni Registar

IF (nCS = '0' AND A = "11" AND Din(7) = '0') THEN Coverride <= '1'; ELSE Coverride <= '0'; END IF;

-- Ctrl_log generise upravljacki vektor CoutLd koji moze-- da ima vise stanja, zavisno od toga koju funkciju cip-- 8255 obavlja. Naredna sekvenca pokazuje nacin na koji-- se "puni" sadrzaj vektora CoutLd

IF (nCS = '0' AND A = "10" AND nWR = '0') THEN IF (ModeA = "00" AND ModeB = '0') THEN CoutLd <= "00000000"; ELSIF (ModeA = "00") THEN CoutLd <= "00001111"; ELSIF (ModeB = '0') THEN CoutLd <= "11110000"; ELSE CoutLd <= "11111111";

25

END IF; ELSIF (nCS = '0' AND A = "11" AND nWR = '0' AND Din(7) = '0') THEN CASE Din (3 DOWNTO 1) IS -- Posto je A="11", Din "nosi" upravljacku

WHEN "000" => -- informaciju, tako da CoutLd zavisi od CoutLd <= "11111110"; -- niza 3 bita vektora (signala) Din

WHEN "001" => CoutLd <= "11111101";

WHEN "010" => CoutLd <= "11111011";

WHEN "011" => CoutLd <= "11110111";

WHEN "100" => CoutLd <= "11101111";

WHEN "101" => CoutLd <= "11011111";

WHEN "110" => CoutLd <= "10111111";

WHEN "111" => CoutLd <= "01111111";

WHEN OTHERS => CoutLd <= "11111111"; END CASE;ELSE CoutLd <= "11111111";END IF;

-- Kada je aktivan CtrlRegWrite, to znaci da podatak -- koji salje procesor predstavlja upravljacki vektor. -- Tada CtrlRegD preuzima 7 bitova vektora Din. Kada -- CtrlRegWrite nije aktivan, ne azurira se stanje -- Kontrolnog Registra IF (CtrlRegWrite = '0') THEN CtrlRegD <= Din (6 DOWNTO 0);ELSE CtrlRegD <= CtrlRegQ;END IF;

END PROCESS;

CtrlRegProc: PROCESS ( Reset, Clk )

-- Ukoliko je aktivan RESET signal, stanje Kontrolnog-- Registra se postavlja na "0011011".-- Sa svakom usponskom ivicom takta stanje Kontrolnog-- Registra se azurira

BEGIN

IF (Reset = '1') THEN CtrlRegQ <= "0011011";

26

ELSIF (Clk'EVENT and Clk = '1') THEN CtrlRegQ <= CtrlRegD; END IF;

END PROCESS;

END rtl;

3.2. PortAin

Realizacija Porta A je efikasnija ukoliko se on podeli na ulazni i izlazni deo. Ulazni segment porta sadrži logiku koja prihvata podatke. Kao što se vidi na Sl.3.1, PortAin prihvata podatke iz «spoljnjeg sveta» preko globalnog multipleksera, a prosleđuje ih prema entitetu DoutMux.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY PortAin IS PORT( Ain : IN std_logic_vector (7 DOWNTO 0); AInReg : OUT std_logic_vector (7 DOWNTO 0); Reset : IN std_logic; Clk : IN std_logic; AInLd : IN std_logic );

END PortAin;

ARCHITECTURE rtl OF PortAin IS

-- Definisanje internih signala unutar ulaznog dela-- Porta A (Ain)

SIGNAL AinRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL AinRegD : std_logic_vector(7 DOWNTO 0);

BEGIN

AinReg <= AinRegQ;

-- Ulazni deo Porta A (Ain) mozemo smatrati kao-- sistem 2 x 8 latch-eva "pojacan" sa dodatnom logikom;

27

AinProc1: PROCESS ( AinLd, Ain, AinRegQ )

BEGIN

-- Kada je aktivan signal AinLd, azurira se sadrzaj-- Porta Ain, 8-bitnim podatkom koji je na njegovom-- ulazu

IF ( AinLd = '0') THEN AinRegD <= Ain (7 DOWNTO 0); ELSE AinRegD <= AinRegQ; END IF;

END PROCESS;

AinProc2: PROCESS ( Reset, Clk )

BEGIN

-- Ukoliko je prisutan spoljasnji Reset, stanje Porta Ain-- postaje "00000000"

IF (RESET = '1') THEN AinRegQ <= "00000000";

-- Sa usponskom ivicom takta 8-bitni podatak ce biti-- dostupan na izlazu

ELSIF ( Clk'EVENT and Clk = '1') THEN AinRegQ <= AinRegD; END IF;

END PROCESS;

END rtl;

28

3.3. PortBin

Realizacija Porta B je efikasnija ukoliko se on podeli na ulazni i izlazni deo. PortBin prihvata podatke preko iz «spoljnjeg sveta» preko globalnog multipleksera, a prosleđuje ih prema entitetu DoutMux. Naravno, da li će se Port B ponašati kao ulazni ili kao izlazni, zavisi od upravljačkih signala, koja sa procesora dolazi na entitet (blok) Cnt_log.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY PortBin IS PORT( Reset : IN std_logic; Clk : IN std_logic; Bin : IN std_logic_vector (7 DOWNTO 0); BinLd : IN std_logic; BinReg : OUT std_logic_vector (7 DOWNTO 0) );

END PortBin;

ARCHITECTURE rtl OF PortBin IS

-- Definisanje internih signala unutar ulaznog dela-- Porta B (Bin)

SIGNAL BinRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL BinRegD : std_logic_vector(7 DOWNTO 0);

BEGIN

BinReg <= BinRegQ;

BinProc1: PROCESS ( BinLd, Bin, BinRegQ ) -- Ulazni deo Porta B (Bin) mozemo smatrati kao-- sistem 2 x 8 latch-eva sa dodatnom logikom;

BEGIN -- Kada je aktivan signal BinLd (ovaj signal-- generise blok Ctrl_log) upisuje se sadrzaj-- sa ulaza Porta Bin

29

IF ( BinLd = '0') THEN BinRegD <= Bin (7 DOWNTO 0); ELSE BinRegD <= BinRegQ; END IF;

END PROCESS;

BinProc2: PROCESS ( Reset, Clk )

BEGIN

-- Kada je prisutan spoljasnji Reset, stanje Porta Bin-- se anulira, tj. postaje "00000000". Onog trenutka-- kada naidje usponska ivica takta, sadrzaj Porta Bin-- se prenosi na izlaz BinReg

IF (Reset = '1') THEN BinRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN BinRegQ <= BinRegD; END IF;

END PROCESS;

END rtl;

3.4. DoutMUX

Zadatak entiteta DoutMux je da na osnovu upravljačkih signala generisanih od strane entiteta Cnt_log, definiše transport podataka prema izlaznim segmentima portova A, B i C (PortAout, PortBout, PortCout).

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY Dout_mux IS PORT( Ain : IN std_logic_vector (7 DOWNTO 0); Bin : IN std_logic_vector (7 DOWNTO 0); AinReg : IN std_logic_vector (7 DOWNTO 0); BinReg : IN std_logic_vector (7 DOWNTO 0); CStatus : IN std_logic_vector (7 DOWNTO 0); CtrlReg : IN std_logic_vector (7 DOWNTO 0); DoutSelect : IN std_logic_vector (2 DOWNTO 0);

30

Dout : OUT std_logic_vector(7 DOWNTO 0) );

END Dout_mux;

ARCHITECTURE rtl OF Dout_mux IS

BEGIN mux_proc : PROCESS(Ain, Bin, AinReg, BinReg, CStatus, CtrlReg, DoutSelect)

BEGIN

-- Tokom jednog taktnog perioda cip 8255 moze da operise samo-- sa jednim portom. Otuda i postojanje multipleksera koji-- propusta samo jedan od 6 relevantnih 8-bitnih signala.-- Drugim recima, izlaz multipleksera Dout zavisno od stanja-- kontrolnog signala DoutSelect "preuzima" jedan od sledecih-- signala: Ain, Bin, AinReg, BinReg, CStatus ili CtrlReg.

CASE DoutSelect IS

WHEN "000" => DOUT <= Ain;

WHEN "001" => DOUT <= AinReg;

WHEN "010" => DOUT <= Bin;

WHEN "011" => DOUT <= BinReg;

WHEN "100" => DOUT <= CStatus;

WHEN "110" => DOUT <= CtrlReg;

WHEN OTHERS => DOUT <= "11111111";

END CASE;

END PROCESS mux_proc;

END rtl;

31

3.5. PortAout

Izlazni segment porta sadrži logiku koja šalje podatke prema entitetu DoutMux. Napominjemo da Port A može da se definiše ili kao ulazni ili kao izlazni, zavisno od upravljačkih signala.

U jednom trenutku, prema „spoljašnjem svetu“ komunicira samo jedan port (A, B ili C).

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY PortAout IS PORT( Reset : IN std_logic; Clk : IN std_logic; Din : IN std_logic_vector (7 DOWNTO 0); AOutLd : IN std_logic; Aout : OUT std_logic_vector (7 DOWNTO 0) );

END PortAout;

ARCHITECTURE rtl OF PortAout IS

-- Definisanje internih signala

SIGNAL AOutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL AOutRegQ : std_logic_vector(7 DOWNTO 0);

BEGIN

Aout <= AOutRegQ;

-- Kao i u slucaju ulaznog dela Porta A i izlazni deo predstavlja -- sistem od 2 x 8 latch-eva "pojacan" sa dodatnom logikom;

AOutProc1: PROCESS ( AoutLd, AoutRegQ, Din )

32

BEGIN

IF ( AoutLd = '0') THEN AoutRegD <= Din;

ELSE AoutRegD <= AoutRegQ;

END IF;

END PROCESS;

AOutProc2: PROCESS ( Reset, Clk )

BEGIN -- Nailazak spoljasnjeg Reset "anulira" sadrzaj izlaza-- Porta Aout. Sa svakom usponskom ivicom takta sadrzaj-- Porta Aout je dostupan na izlazu, jer se AOutRegQ-- uvek preslikava na Aout

IF (Reset = '1') THEN AOutRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN AOutRegQ <= AOutRegD; END IF;

END PROCESS;

END rtl;

3.6. PortBout

Izlazni segment ovog porta sadrži logiku koja šalje podatke prema entitetu DoutMux. Zavisno od upravljačkih signala, Port B može da se definiše ili kao ulazni ili kao izlazni.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY PortBout IS PORT( Reset : IN std_logic; Clk : IN std_logic;

33

Din : IN std_logic_vector (7 DOWNTO 0); BoutLd : IN std_logic; Bout : OUT std_logic_vector (7 DOWNTO 0) );

END PortBout;

ARCHITECTURE rtl OF PortBout IS

-- Definisanje signala unutar Registra Bout

SIGNAL BoutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL BoutRegQ : std_logic_vector(7 DOWNTO 0);

BEGIN -- Interni signal BoutRegQ se uvek preslikava-- na izlazne linije Registra Bout

Bout <= BoutRegQ;

-- U okviru ahitetekture Registra Bout (kao i u slucajevima-- Registarova Ain, Aout i Bin) definisemo 2 procesa. U prvom-- procesu definisemo upis ulaznog podatka u Registar Bout, a-- u okviru drugog procesa definisemo "preslikavanje"-- sadrzaja Registra Bout na njegov izlaz

BoutProc1: PROCESS ( BoutLd, BoutRegQ, Din )

BEGIN

IF ( BoutLd = '0') THEN BoutRegD <= Din; ELSE

BoutRegD <= BoutRegQ; END IF;

END PROCESS;

BoutProc2: PROCESS ( Reset, Clk )

BEGIN

IF (Reset = '1') THEN BoutRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN BoutRegQ <= BoutRegD; END IF;

END PROCESS;

34

END rtl;

3.7. PortCout

Port C je definisan kao jedinstven entitet. Ovaj port se koristi kako za podatke, tako i za upravljanje handshake signalima, čime se obezbeđuje «strobovanje» ulaza portova A i B. Struktura i funkcije Porta C su složeniji od portova A i B, pa je samim tim i njegov opis najopširniji.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY PortCout IS PORT( Din : IN std_logic_vector (7 DOWNTO 0); Cin : IN std_logic_vector (7 DOWNTO 0); CtrlReg : IN std_logic_vector (7 DOWNTO 0); Cout : OUT std_logic_vector(7 DOWNTO 0); Ard : IN std_logic; Brd : IN std_logic; Awr : IN std_logic; Bwr : IN std_logic; Reset : IN std_logic; Clk : IN std_logic; Coverride: IN std_logic; CoutLd : IN std_logic_vector (7 DOWNTO 0); CStatus : OUT std_logic_vector(7 DOWNTO 0) );

END PortCout;

ARCHITECTURE rtl OF PortCout IS

-- Definisanje internih signala Porta Cout

SIGNAL CoutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL CoutRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL ModeA : std_logic_vector (1 DOWNTO 0); SIGNAL ModeB : std_logic; SIGNAL PortA_IO : std_logic; SIGNAL PortB_IO : std_logic; SIGNAL RiseAwrQ : std_logic;

35

SIGNAL RiseBwrQ : std_logic; SIGNAL RiseArdQ : std_logic; SIGNAL RiseBrdQ : std_logic; SIGNAL RiseCin6Q : std_logic; SIGNAL RiseCin4Q : std_logic; SIGNAL RiseCin2Q : std_logic; SIGNAL RiseAwr : std_logic; SIGNAL RiseBwr : std_logic; SIGNAL RiseArd : std_logic; SIGNAL RiseBrd : std_logic; SIGNAL RiseCin6 : std_logic; SIGNAL RiseCin4 : std_logic; SIGNAL RiseCin2 : std_logic;

BEGIN

Cout <= CoutRegQ; -- izlaz registra Cout ModeA <= CtrlReg (6 DOWNTO 5); -- mod registra A ModeB <= CtrlReg (2); -- mod registra B PortA_IO <= CtrlReg (4); -- registar A je ulazni ili izlazni PortB_IO <= CtrlReg (1); -- registar B je ulazni ili izlazni

CStatusProc: PROCESS ( ModeA, ModeB, PortA_IO, Cin, CoutRegQ ) BEGIN

CStatus(7) <= Cin(7);

IF (ModeA = "01" AND PortA_IO = '0') THEN -- Mod 1, registar A je izlazni CStatus(6) <= CoutRegQ(6); -- i to se upisuje u Statusni Registar.

ELSIF (ModeA(1) = '1') THEN -- Registar A je u Modu 2 CStatus(6) <= CoutRegQ(6);

ELSE CStatus(6) <= Cin(6);

END IF;

CStatus(5) <= Cin(5);

IF (ModeA = "01" AND PortA_IO = '1') THEN -- Mod 1, registar A je ulazni CStatus(4) <= CoutRegQ(4); --i to se upisuje u Statusni registar

ELSIF (ModeA(1) = '1') THEN -- Registar A je u Modu 2 CStatus(4) <= CoutRegQ(4);

ELSE CStatus(4) <= Cin(4);

END IF;

CStatus(3) <= Cin(3);

36

IF (ModeB = '1') THEN -- Registar B je u Modu 1 i to CStatus(2) <= CoutRegQ(2); -- se upisuje u Statusni Registar

ELSE CStatus(2) <= Cin(2);

END IF; CStatus(1) <= Cin(1); CStatus(0) <= Cin(0);

END PROCESS;

PortCDataProc: PROCESS ( ModeA, PortA_IO, PortB_IO, ModeB, Coverride, Awr, Bwr, Ard, Brd, RiseAwr, RiseBwr, RiseArd, RiseBrd, CoutLd, CoutRegQ, Din, Cin, RiseCin2, RiseCin4, RiseCin6 )

BEGIN

IF (ModeB = '0') THEN -- Registar B je u Modu 0 IF (CoutLd (0) = '0') THEN

CoutRegD (0) <= Din(0); -- Prvi bit signala Din se lecuje. ELSE -- U suprotnom, ranije lecovani bit

CoutRegD (0) <= CoutRegQ (0); -- postaje izlazni END IF;ELSIF (ModeB = '1') THEN -- Registar B je u Modu 1

IF ( CoutLd (0) = '0' AND Coverride = '1') THEN -- Prvi bit signala Din se lecuje. CoutRegD (0) <= Din(0);

ELSIF (PortB_IO = '0') THEN -- Registar B je izlazni u Modu 1 IF (Bwr = '0') THEN -- Resetovanje INTRB kada je prisutan

CoutRegD (0) <= '0'; -- "write strobe" ELSIF (Bwr = '1' AND RiseCin2 = '1' -- Setovanje INTRB na usponsku

AND CoutRegQ (1) = '1') THEN -- ivicu signala ACKB CoutRegD (0) <= CoutRegQ (2);

ELSE CoutRegD (0) <= CoutRegQ (0);

END IF; ELSE -- Mode 1 ulaz IF (Brd = '0' AND CoutRegQ(1) = '1') THEN -- Resetovanje INTRB kada je

CoutRegD (0) <= '0'; -- prisutan "read strobe" ELSIF (RiseCin2 = '1' AND CoutRegQ (1) = '1') THEN-- Setovanje INTRB na usponsku

CoutRegD (0) <= CoutRegQ (2); -- ivicu signala STBB ELSE

CoutRegD (0) <= CoutRegQ (0); END IF;

END IF; ELSE

37

CoutRegD (0) <= CoutRegQ (0); END IF;

IF (ModeB = '0') THEN -- Registar B je u Modu 0 IF (CoutLd (1) = '0') THEN

IF ( Coverride = '1') THEN CoutRegD (1) <= Din(0); -- Lecuje se jedan od 2 bita:

ELSE -- Din(1) ili Din(0) CoutRegD (1) <= Din(1); END IF;

ELSE CoutRegD (1) <= CoutRegQ (1);

END IF; ELSIF (ModeB = '1') THEN -- Registar B je u Modu 1 IF ( CoutLd (1) = '0' AND Coverride = '1') THEN -- Lecovanje CoutRegD (1) <= Din(0);

ELSIF (PortB_IO = '0') THEN -- Registar B je izlazni u Modu 1 IF (RiseBwr = '1') THEN -- Reseovanje OBFB na rastucu

CoutRegD (1) <= '0'; -- ivicu signala "write strobe" ELSIF (Cin(2) = '0') THEN -- Setovanje OBFB kada ACKB

CoutRegD (1) <= '1'; -- postane "nisko" ELSE

CoutRegD (1) <= CoutRegQ (1); END IF; ELSE -- Registar B je ulazni u Modu 1 IF (RiseBrd = '1' AND CoutRegQ(0) = '0') THEN -- Reseovanje IBFB na rastucu ivicu

CoutRegD (1) <= '0'; -- "read strobe" ELSIF (Cin(2) = '0') THEN -- Setovanje IBFB kada STBB

CoutRegD (1) <= '1'; -- postane "nisko" ELSE

CoutRegD (1) <= CoutRegQ (1); END IF;

END IF; ELSE CoutRegD (1) <= CoutRegQ (1); END IF;

IF (CoutLd (2) = '0') THEN -- Svi modovi IF ( Coverride = '1') THEN CoutRegD (2) <= Din(0); -- Lecovanje prvog ili treceg bita

ELSE -- signala Din CoutRegD (2) <= Din(2);

38

END IF; ELSE CoutRegD (2) <= CoutRegQ (2); END IF;

IF (ModeA = "00") THEN -- Mod 0 IF (CoutLd (3) = '0') THEN

IF ( Coverride = '1') THEN CoutRegD (3) <= Din(0); -- Lecovanje prvog ili cetvrtog bita

ELSE -- signala Din CoutRegD (3) <= Din(3); END IF;

ELSE CoutRegD (3) <= CoutRegQ (3);

END IF;ELSIF (ModeA = "01") THEN -- Mod 1

IF ( CoutLd (3) = '0' AND Coverride = '1') THEN CoutRegD (3) <= Din(0); -- "Lecovanje" bita Din(0)

ELSIF (PortA_IO = '0') THEN -- Registar A je izlazni IF (Awr = '0') THEN

CoutRegD (3) <= '0'; -- Resetovanje INTRA sa pojavom ELSIF (Awr = '1' AND RiseCin6 = '1' -- signala "write strobe"

AND CoutRegQ (7) = '1') THEN -- Setovanje INTRA na usponsku CoutRegD (3) <= CoutRegQ (6); -- ivicu signala ACKA

ELSE CoutRegD (3) <= CoutRegQ (3);

END IF; ELSE -- Mode 1, Registar A je ulazni IF (Ard = '0' AND CoutRegQ(5) = '1') THEN

CoutRegD (3) <= '0'; -- Resetovanje INTRA sa pojavom ELSIF (RiseCin4 = '1' AND CoutRegQ (5) = '1') THEN -- signala "read strobe"

CoutRegD (3) <= CoutRegQ (4); -- Setovanje INTRA na usponsku ELSE -- ivicu signala STBA

CoutRegD (3) <= CoutRegQ (3); END IF;

END IF; ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (3) = '0' AND Coverride = '1') THEN CoutRegD (3) <= Din(0); -- "Lecovanje" bita Din(0)

ELSE IF (Awr = '0' OR Ard = '0') THEN -- Resetovanje signala INTRA na

CoutRegD (3) <= '0'; -- svaku Read ili "write strobe" ELSIF (Awr = '1' AND RiseCin6 = '1' -- operaciju

AND CoutRegQ (7) = '1') THEN -- Setovanje INTRA na usponsku CoutRegD (3) <= CoutRegQ (6); -- ivicu signala ACKA

ELSIF (Ard = '1' AND RiseCin4 = '1' -- ILI

39

AND CoutRegQ (5) = '1') THEN -- Setovanje INTRA na rastucu ivicu CoutRegD (3) <= CoutRegQ (4); -- signala STBA

ELSE CoutRegD (3) <= CoutRegQ (3);

END IF; END IF; ELSE CoutRegD (3) <= CoutRegQ (3); END IF;

IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '0')) THEN-- Registar A je izlazni; --Mod 0 i Mod 1

IF (CoutLd (4) = '0') THEN IF ( Coverride = '1') THEN CoutRegD (4) <= Din(0); -- "Lecovanje" bita Din(0) ili

ELSE -- bita Din(4) CoutRegD (4) <= Din(4); END IF; ELSE CoutRegD (4) <= CoutRegQ (4); END IF; -- Mod 1 ili Mod 2 ELSE IF ( CoutLd (4) = '0' AND Coverride = '1') THEN CoutRegD (4) <= Din(0); --"Lecovanje" bita Din(0) ili

ELSE -- ostaje prethodno stanje

CoutRegD (4) <= CoutRegQ (4); END IF; END IF;

IF (ModeA = "00"OR (ModeA = "01" AND PortA_IO = '0')) THEN-- Mod 0 i Mode 1 IF (CoutLd (5) = '0') THEN -- Registar A je izlazni

IF ( Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0)

ELSE -- ili bita Din(5); CoutRegD (5) <= Din(5); END IF;

ELSE CoutRegD (5) <= CoutRegQ (5); -- ili ostaje prethodno stanje

END IF;ELSIF (ModeA = "01") THEN -- Mod 1

IF ( CoutLd (5) = '0' AND Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0)

ELSIF (PortA_IO = '1') THEN -- Registar A je ulazni IF (RiseArd = '1' AND CoutRegQ(3) = '0') THEN

CoutRegD (5) <= '0'; -- Resetovanje IBFA na rastucu

40

ELSIF (Cin(4) = '0') THEN -- ivicu signala "read strobe" CoutRegD (5) <= '1'; -- Setovanje IBFA kada se signal

ELSE -- STBA postavi na "nisko" CoutRegD (5) <= CoutRegQ (5);

END IF; ELSE

CoutRegD (5) <= CoutRegQ (5); END IF;

ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (5) = '0' AND Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0)

ELSE IF (RiseArd = '1' AND CoutRegQ(3) = '0') THEN

CoutRegD (5) <= '0'; -- Resetovanje IBFA na rastucu ELSIF (Cin(4) = '0') THEN -- ivicu signala "read strobe"

CoutRegD (5) <= '1'; -- Setovanje IBFA kada se signal ELSE -- STBA postavi na "nisko"

CoutRegD (5) <= CoutRegQ (5); END IF;

END IF;ELSE

CoutRegD (5) <= CoutRegQ (5);END IF;

IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN -- Mod 0 ili Mod 1; IF (CoutLd (6) = '0') THEN -- Registar A je ulazni

IF ( Coverride = '1') THEN CoutRegD (6) <= Din(0); -- "Lecovanje" bita Din(0) ili

ELSE -- bita Din(6); CoutRegD (6) <= Din(6); END IF;

ELSE CoutRegD (6) <= CoutRegQ (6); -- ili ostaje prethodno stanje

END IF; ELSE IF ( CoutLd (6) = '0' AND Coverride = '1') THEN CoutRegD (6) <= Din(0); -- "Lecovanje" bita Din(0) ili ELSE -- ostaje prethodno stanje CoutRegD (6) <= CoutRegQ (6); END IF; END IF;

IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN-- Mod 0 i Mod 1; IF (CoutLd (7) = '0') THEN -- Registar A je ulazni

41

IF ( Coverride = '1') THEN CoutRegD (7) <= Din(0); -- Lecovanje prvog ili

ELSE -- poslednjeg bita signala Din CoutRegD (7) <= Din(7); END IF;

ELSE CoutRegD (7) <= CoutRegQ (7);

END IF; ELSIF (ModeA = "01") THEN -- Mod 1 IF ( CoutLd (7) = '0' AND Coverride = '1') THEN CoutRegD (7) <= Din(0);

ELSIF (PortA_IO = '0') THEN -- Registar A je izlazni IF (RiseAwr = '1') THEN

CoutRegD (7) <= '0'; -- Resetovanje OBFA na rastucu ELSIF (Cin(6) = '0') THEN -- ivicu signala "write strobe"

CoutRegD (7) <= '1'; -- Setovanje OBFA kada ACKA ELSE -- postane "nisko"

CoutRegD (7) <= CoutRegQ (7); END IF; ELSE

CoutRegD (7) <= CoutRegQ (7); END IF; ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (7) = '0' AND Coverride = '1') THEN CoutRegD (7) <= Din(0); -- "Lecovanje" CoutRegD(7)

ELSE IF (RiseAwr = '1') THEN -- Resetovanje signala OBFA na

CoutRegD (7) <= '0'; -- rastucu ivicu signala "write strobe" ELSIF (Cin(6) = '0') THEN -- Setovanje OBFA

CoutRegD (7) <= '1'; ELSE

CoutRegD (7) <= CoutRegQ (7); END IF;

END IF; ELSE CoutRegD (7) <= CoutRegQ (7); END IF;

END PROCESS;

-- Opisacemo proces koji definise stanje-- Porta Cout

CoutRegSyncProc: PROCESS ( Reset, Clk )

42

BEGIN

IF ( Reset = '1') THEN CoutRegQ <= "00000000";

ELSIF ( Clk'EVENT and Clk = '1') THEN CoutRegQ <= CoutRegD; END IF;

END PROCESS;

-- Sada cemo da definisemo proces koji detektuje-- svaku promenu stanja unutar registara cipa 8255.-- Svakoj promeni cemo dodeliti Registar jedan interni-- signal.

EdgeDetectSyncProc: PROCESS ( Reset, Clk )

BEGIN

IF ( Reset = '1') THEN RiseAwrQ <= '0'; RiseBwrQ <= '0'; RiseArdQ <= '0'; RiseBrdQ <= '0'; RiseCin6Q <= '0'; RiseCin4Q <= '0'; RiseCin2Q <= '0'; ELSIF ( Clk'EVENT and Clk = '1') THEN RiseAwrQ <= Awr; RiseBwrQ <= Bwr; RiseArdQ <= Ard; RiseBrdQ <= Brd; RiseCin6Q <= Cin(6); RiseCin4Q <= Cin(4); RiseCin2Q <= Cin(2); END IF;

END PROCESS;

-- Dodeljivanje signala koji detektuju promene-- stanja registara

43

RiseAwr <= Awr AND NOT RiseAwrQ; RiseBwr <= Bwr AND NOT RiseBwrQ; RiseArd <= Ard AND NOT RiseArdQ; RiseBrd <= Brd AND NOT RiseBrdQ; RiseCin6 <= Cin(6) AND NOT RiseCin6Q; RiseCin4 <= Cin(4) AND NOT RiseCin4Q; RiseCin2 <= Cin(2) AND NOT RiseCin2Q; END rtl;

3.8. Generator takta (CLK_gen)

Čip 8255 ima interni generator takta kojim se definišu trenuci prihvatanja podataka iz «spoljnjeg sveta», kao i trenuci promene signala unutar komponente. Treba naznačiti da je čip 8255 asinhrona komponenta, tj. da se pomenuto «taktovanje» ne vrši eksterno.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY ClkGen IS PORT( nCs: in std_logic; CLK: out std_logic

);

END ClkGen;

-- Definisanje rada untrasnjeg takta

ARCHITECTURE RTC OF ClkGen ISBEGIN

CLK_GEN: process -- Definisemo internu frekvenciju na 10MHzconstant CLK_PERIOD:time:= 100 ns;begin -- Rad internog oscilatora direktno zavisi od signala nCs.-- Kada nCs nije aktivan, stanje signala CLK je '0'. U suprotnom,-- osciluje sa taktom od 100 ns, tj. frekvencijom od 10MHz.

CLK <= '0' and not(nCs); wait for CLK_PERIOD/2;CLK <= '1' and not(nCs);

44

wait for CLK_PERIOD/2;

end process;

END RTC;

3.9. Globalni multiplekser (MUX_global)

Zadatak bloka koga smo nazvali Globalni multiplekser je da obezbedi korespon-denciju između internog modela čipa 8255 i pinova na samom kućištu, kojih ima 40, računajući i pinove Vcc i Gnd.

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

ENTITY MUX_global IS PORT( PA :InOUT std_logic_vector (7 DOWNTO 0); PB :InOUT std_logic_vector (7 DOWNTO 0); PC :InOUT std_logic_vector (7 DOWNTO 0); Ain :OUT std_logic_vector (7 DOWNTO 0); Bin :OUT std_logic_vector (7 DOWNTO 0); Cin :OUT std_logic_vector (7 DOWNTO 0); Aout :IN std_logic_vector (7 DOWNTO 0); Bout :IN std_logic_vector (7 DOWNTO 0); Cout :IN std_logic_vector (7 DOWNTO 0); Cen :IN std_logic_vector (7 DOWNTO 0); Ben :IN std_logic; Aen :IN std_logic );

END MUX_global;

-- Definisanje rada bloka GLOBALNI MULTIPLEKSER, ciji-- je zadatak da obezbedi korespondenciju izmedju pinova-- cipa 8255 i njegovog unutrasnjeg modela -- Tokom jednog taktnog perioda cip 8255 operise samo-- sa jednim portom

ARCHITECTURE MUX_global OF MUX_global IS

-- Definisimo pomocne signale PA_sub, PB_sub i PC_sub

Signal PA_sub : std_logic_vector (7 downto 0);Signal PB_sub : std_logic_vector (7 downto 0);

45

Signal PC_sub : std_logic_vector (7 downto 0);

BEGIN PA_sub <= PA;PB_sub <= PB;PC_sub <= PC;

-- Signali Aen i Ben su aktivni sa '0'

PA <= Aout when Aen='0' and Aout'event; -- Port A je izlazniAin <= PA when Aen='0' and PA_sub'event; -- Port A je ulazniPB <= Bout when Ben='0' and Bout'event; -- Port B je izlazniBin <= PB when Ben='0' and PB_sub'event; -- Port A je ulazni

-- Sada cemo definisati kada se pinovi Porta C ponasaju -- kao izlazni, a kada kao ulazni

PC(0) <= Cout(0) when Cen(0)='0' and Cout(0)'event; PC(1) <= Cout(1) when Cen(1)='0' and Cout(1)'event;PC(2) <= Cout(2) when Cen(2)='0' and Cout(2)'event;PC(3) <= Cout(3) when Cen(3)='0' and Cout(3)'event;PC(4) <= Cout(4) when Cen(4)='0' and Cout(4)'event;PC(5) <= Cout(5) when Cen(5)='0' and Cout(5)'event;PC(6) <= Cout(6) when Cen(6)='0' and Cout(6)'event;PC(7) <= Cout(7) when Cen(7)='0' and Cout(7)'event;

Cin(0)<= PC(0) when Cen(0)='0' and PC_sub(0)'event;Cin(1)<= PC(1) when Cen(1)='0' and PC_sub(1)'event;Cin(2)<= PC(2) when Cen(2)='0' and PC_sub(2)'event;Cin(3)<= PC(3) when Cen(3)='0' and PC_sub(3)'event;Cin(4)<= PC(4) when Cen(4)='0' and PC_sub(4)'event;Cin(5)<= PC(5) when Cen(5)='0' and PC_sub(5)'event;Cin(6)<= PC(6) when Cen(6)='0' and PC_sub(6)'event;Cin(7)<= PC(7) when Cen(7)='0' and PC_sub(7)'event;

END MUX_global;

46

4. SINTEZA I IMPLEMENTACIJA KOLA

Za implementaciju programibilnog periferijskog interfejsa 8255 iskoristićemo čip XC2S30VQ200 iz XILINX-ove familije Spartan. Kolo koristi napajanje od 5V. Sintezu i implementaciju ćemo obaviti u programu FPGA Express, koji je deo XILINX-ovog paketa programa.Na slici 4.1 prikazana je šema sinteze kola na najvišem nivou. Na šemi su prikazani blokovi koji čine čip 8255, kao i veze među njima. Svaki od blokova može da se pregleda «dubinski», kako bi bili prikazani gejtovi od kojih je sastavljeno.

Slika 4.1: Šema sinteze

Sledeći listing nam pokazuje dobijene rezultate POSLE IMPLEMENTACIJE:

Design Summary--------------

47

Number of errors: 0Number of warnings: 42Logic Utilization: Total Number Slice Registers: 411 out of 864 48% Number used as Flip Flops: 154 Number used as Latches: 257 Number of 4 input LUTs: 645 out of 864 75%Logic Distribution: Number of occupied Slices: 419 out of 432 97% Number of Slices containing only related logic: 362 out of 430 84% Number of Slices containing unrelated logic: 57 out of 430 13% *See NOTES below for an explanation of the effects of unrelated logicTotal Number 4 input LUTs: 571 out of 864 64% Number used as logic: 568 Number used as a route-thru: 3 Number of bonded IOBs: 21 out of 60 35% IOB Latches: 4 Number of Tbufs: 62 out of 480 13% Number of GCLKs: 4 out of 4 100% Number of GCLKIOBs: 4 out of 4 100%Total equivalent gate count for design: 7,923Additional JTAG gate count for IOBs: 1,316

Implemetniran čip je zauzeo 7923 ekvivalentnih gejtova, kao i da je pridodato još 1316 gejta koja su neophodna za realizaciju JTAG logike, preko koje se vrši programiranje i testiranje. Maksimalna radna frekvencija kola 73.253MHz.

Na slikama 4.2 i 4.3 vidimo unutrašnju strukturu dobijenu nakon implementacije kola gde se vide zauzeti blokovi unutar kola. Na slici 4.2 prikazan je razmeštaj ćelija gde možemo videti i koji pinovi kola su iskorišćeni. Iako se zapaža da izvodi kola nisu grupisani, to je da bi se postiglo približno isto kašnjenje veza do svih pinova. Izgled povezanosti samih veza prikazan je na slici 4.3

48

Slika 4.2: Šema zauzetoti ćelija FPGA kola

Slika 4.3: Šema veza ćelija FPGA kola

Na kraju izvršena je i analiza potrošnje kola u delu paketa pod imenom XPower, je pokazao totalnu potrošnju od 10.3mW. Pri tome pri temperaturi ambijenta od 25 C, temperatura kućišta je 25,4 C.

Na slici 4.4 prikazan je i sam fizički raspored pinova na FPGA čipu.

49

Slika 4.4: Raspored pinova na FPGA čipu

Program generiše i programski fajl kojim je potrebno isprogramirati FPGA kolo da bi se dobila željena funkcija.

5. TESTIRANJE RADA KOLA

Primer 1 ( mode 0):

a) Pokazaćemo kako se može spregnuti D/A konvertor na 8080 magistralu preko čipa Intel 8255.

b) Kreiraćemo Test_Bench kojim se obezbeđuje generisanje trouganog napona, čija se amplituda menja u 8 koraka.

Rešenje

a)

50

b)

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

entity MOD_0 isend MOD_0;

architecture TB_ARCHITECTURE of MOD_0 is

-- Deklaracija testne jedinice

component a8255PORT( RESET : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0)

);

end component;

51

--Definisanje signala koje cemo da posmatramo

signal RESET : std_logic; signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic;

signal A : std_logic_vector (1 DOWNTO 0); signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0); signal PD : std_logic_vector (7 DOWNTO 0);

begin

--Mapiranje portova

UUT : a8255port map (

RESET => RESET,

nCS => nCS, nRD => nRD,

nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD );

--Dovodjenje pobudnih signala

RESET<='1','0' after 150ns; --Resetovanje na pocetku nCs <='1','0' after 200ns; --Zadavanje signala za selekciju cipa A <="11","00" after 1us; nWr <='0' after 200ns; --Zadavanje operacije upisanRd <='1' after 200ns;

-- Port A se definise kao izlazni.-- 8255 dobija signal sa procesora i -- prosledjuje ga na izlaz PA.

52

-- U cip 8255 najpre treba upisati komandnu-- rec "10000011" pri A="11". PD <= "10000011","00000000" after 1us,"00000001" after 11us,"00000010" after 21us,"00000011" after 31us,"00000100" after 41us,"00000101" after 51us,"00000110" after 61us,"00000111" after 71us,"00001000" after 81us,"00000000" after 91us,"00000001" after 101us,"00000010" after 111us,"00000011" after 121us;

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_a8255 of MOD_0 isfor TB_ARCHITECTURE

for UUT : a8255use entity work.a8255(a8255);

end for;end for;

end TESTBENCH_FOR_a8255;

Test Bench Mod 0

53

Da bi čip 8255 obavljao zadatu funkciju, neophodno je jedan od dva njegova registra (A ili B) bude «transparentan», kako bi se obezbedio rad u Modu 0. Za tu svrhu izabrali smo Registar A .

Onog trenutka kada procesor pošalje sledeću vrednost (koja treba da bude konvertovana) ka čipu 8255, prethodna vrednost se postavlja na izlaz čipa. Transakcije se odvijaju zavisno od stanja signala nCs, nWr,nRd i A.

Primer 2 ( mode 1 strobovani ulaz):

a) Pokazaćemo način sprezanja tastature na 8080 magistralu preko čipa Intel 8255.

54

b) Kreiraćemo Test_Bench kojim se obezbeđuje da procesor prihvati ASCII simbol sa tastature.

Rešenjea)

b)

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

entity MOD1_1 isend MOD1_1;

architecture TB_ARCHITECTURE of MOD1_1 is

-- Deklaracija testne jedinice

component a8255PORT( RESET : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0)

);

end component;

-- Definisanje signala koje cemo da posmatramo signal RESET : std_logic;

55

signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic; signal A : std_logic_vector (1 DOWNTO 0); signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0); signal PD : std_logic_vector (7 DOWNTO 0);

begin

--Mapiranje portova

UUT : a8255port map (

RESET => RESET, nCS => nCS, nRD => nRD, nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD

);

--Dovodjenje pobudnih signala

RESET<='1','0' after 1us; --Resetovanje na pocetku

-- Zadavanje signala za selekciju cipa. Najpre treba selektovati-- cip zbog upisa komande od strane procesora; drugi put se cip-- selektuje da bi se procitao "strobovani" podatak u Portu A

nCs <= '1', '0' after 4us,'1' after 9us, '0' after 5 ms; PD <= "10111000","ZZZZZZZZ" after 9us;A <= "11","00" after 10us; -- Definisanje porta A kao ulaznog.nWr <= '1', '0' after 5us,'1' after 8us; -- On prihvata ASCII karakter, koji se nRd <= '1','0' after 40ms, '1' after 40.2ms ; -- strobuje, a koji kasnije preuzima PA <= "11101110" after 5ms, -- procesor.

56

"UUUUUUUU" after 35 ms; PC(4) <= '1' after 5ms, '0' after 30 ms, -- Ovaj signal generise logika tastature

'1' after 31 ms;

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_a8255 of MOD1_1 isfor TB_ARCHITECTURE

for UUT : a8255use entity work.a8255(a8255);

end for;end for;

end TESTBENCH_FOR_a8255;

Test Bench Mod 1

57

U ovom slučaju čip 8255 radi u Modu 1.Kao što se na slici vidi, ASCII simbol koji generiše tastatura se najpre «strobuje», a procesor ga

prihvata onog trenutka kada bude spreman. Transakcija se odvija zavisno od stanja signala nCs, nWr,nRd, PC(4) i A.

58

Primer 3 ( mode 1 strobovani izlaz):

a) Pokazaćemo način sprezanja stampaca na 8080 magistralu preko čipa Intel 8255.b) Kreiraćemo Test_Bench kojim se obezbeđuje da procesor pošalje ASCII simbol na štampač.

Rešenjea)

b)

LIBRARY ieee;USE ieee.std_logic_1164.ALL;

entity MOD1_2 isend MOD1_2;

architecture TB_ARCHITECTURE of MOD1_2 is-- Deklaracija testne jedinice

component a8255PORT(

RESET : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0)

);

end component;

-- Definisanje signala koje cemo da posmatramo signal RESET : std_logic; signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic;

signal A : std_logic_vector (1 DOWNTO 0);

59

signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0);

signal PD : std_logic_vector (7 DOWNTO 0);

begin

-- Mapiranje portovaUUT : a8255

port map ( RESET => RESET, nCS => nCS, nRD => nRD, nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD

);

-- Dovodjenje pobudnih signala

RESET<='1','0' after 1us; --Resetovanje na pocetku

-- Najpre treba upisati komandni bajt, a zatim-- definisati Port B kao izlazni. Ovaj port -- prihvata "strobovani" ASCII simbol, a-- kasnije ga salje na stampac

nCs <='1','0' after 7 us, '1' after 10 us, '0' after 20 ms, '1' after 22 ms;A <="11", "01" after 20us; nRd <='1'; nWr <='1','0' after 8 us, '1' after 9 us, '0' after 20 ms, '1' after 21 ms;PD <="10000100", --komanda"ZZZZZZZZ" after 10us,"11001100" after 20 ms, -- ASCII simbol"ZZZZZZZZ" after 22 ms;PC(2) <= '1' after 10ms, '0' after 25 ms, '1' after 25.5 ms; -- zahtev logike stampaca

60

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_a8255 of MOD1_2 isfor TB_ARCHITECTURE

for UUT : a8255use entity work.a8255(a8255);

end for;end for;

end TESTBENCH_FOR_a8255;

Test Bench Mod 1

61

Kao i u prethodnom primeru, neophodno je da čip 8255 radi u Modu 1.Port B «strobuje» ASCII simbol koji mu šalje procesor. Kada štampač bude spreman da prihvati

simbol, onda šalje zahtev ka čipu 8255. Transakcija se odvija zavisno od stanja signala nCs, nWr,nRd, PC(2), PC(1), PC(0) i A.

62

6.ZADATAK

Proveriti funkcionalnost čipa 8255 u Modu 0 i Modu 1 na sledeći način:

MOD 0:

1. Pokrenuti program Active-HDL čija se ikonica nalazi na Desktop-u2. Izaberite dizajn 8255a3. Otvoriti listing TestBench-a MOD_0 koji se nalazi u folderu TestBench 4. Uneti zadatu sekvencu podataka koju šalje procesor preko Porta D (PD)5. Izvršiti kompilaciju pritiskom na taster <F11>6. Podesiti entitet Top level desnim klikom na ˝+˝ ispred imena fajla MOD_0.vhd i izaberite Set as

Top-Level 7. Otvoriti Waveform fajl MOD_0.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 100 s9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5>10. Očitajte sekvencu osmobitnih podataka na Portu A (PA), kao i trenutke pojavljivanja svakog

podatka11. Po završetku simulacije potrebno je da se vremenski dijagram uveća ili umanji, radi bolje

preglednosti. 12. Odštampati vremenski dijagram

Grupa 1:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 05h , 06h , 07h , 08h , 09h , 0Ah , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 2:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

06h , 05h , 04h , 03h , 02h , 01h , 00h , 00h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

63

Grupa 3:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 05h , 06h , 07h , 08h , 09h , 0Ah , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 4:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 05h , 04h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 5:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 03h , 03h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 6:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 01h , 02h , 02h , 03h , 03h , 04h , 04h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

64

Grupa 7:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

10h , 0Ch , 08h , 04h , 00h , 04h , 08h , 0Ch , 10h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 8:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 01h , 02h , 02h , 03h , 03h , 02h , 02h , 01h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 9:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

10h , 0Ch , 08h , 04h , 00h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 10:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 01h , 02h , 02h , 03h , 03h , 04h , 04h , 03h , 03h , 02h , 02h , 01h , 01h , 00h ,

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

65

Grupa 11:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

06h , 05h , 04h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 12:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 03h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 13:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 14:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 05h , 00h , 00h , 00h , 00h ,

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

66

___________________________________________________________

Grupa 15:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

04h , 04h , 03h , 03h , 02h , 02h , 01h , 01h , 00h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

Grupa 16:

Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je:

00h , 01h , 02h , 03h , 04h , 04h , 04h , 04h , 03h , 02h , 01h , 00h

Trenutak posle kojeg je podatak prisutan na Portu A (PA)

___________________________________________________________

67

MOD 1 (strobovani ulaz):

1. Pokrenuti program Active-HDL čija se ikonica nalazi na Desktop-u2. Izaberite dizajn 8255a3. Otvoriti listing TestBench-a MOD_1a koji se nalazi u folderu TestBench 4. Uneti binarnu vrednost ASCII karaktera koji generiše tastatura (ovaj podatak se «strobuje»)5. Izvršiti kompilaciju pritiskom na taster <F11>6. Podesiti entitet Top level desnim klikom na ˝+˝ ispred imena fajla MOD_1a.vhd i izaberite Set

as Top-Level 7. Otvoriti Waveform fajl MOD_1a.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 60 ms9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5>10. Očitajte vreme posle kojeg se osmobitni podatak pojavljuje na Portu D (PD)11. Po završetku simulacije potrebno je da se vremenski dijagram uveća ili umanji, radi bolje

preglednosti. 12. Odštampati vremenski dijagram

Grupa 1:

Osmobitni podatak koji «strobuje» Port A (PA):

11100001 (E1)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 2:

Osmobitni podatak koji «strobuje» Port A (PA)

01010101 (55)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

68

Grupa 3:

Osmobitni podatak koji «strobuje» Port A (PA)

10011000 (98)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 4:

Osmobitni podatak koji «strobuje» Port A (PA)

11000111 (C7)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 5:

Osmobitni podatak koji «strobuje» Port A (PA)

11100101 (E5)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 6:

Osmobitni podatak koji «strobuje» Port A (PA)

00111111 (3F)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

69

Grupa 7:

Osmobitni podatak koji «strobuje» Port A (PA)

10111010 (BA)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 8:

Osmobitni podatak koji «strobuje» Port A (PA)

11000100 (C4)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 9:

Osmobitni podatak koji «strobuje» Port A (PA)

00001010 (0A)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 10:

Osmobitni podatak koji «strobuje» Port A (PA)

00110111 (37)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

70

______________________________________

Grupa 11:

Osmobitni podatak koji «strobuje» Port A (PA)

11111111 (FF)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 12:

Osmobitni podatak koji «strobuje» Port A (PA)

01110110 (76)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 13:

Osmobitni podatak koji «strobuje» Port A (PA)

10111011 (BB)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 14:

Osmobitni podatak koji «strobuje» Port A (PA)

10110000 (B0)h

71

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 15:

Osmobitni podatak koji «strobuje» Port A (PA)

11001010 (CA)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

Grupa 16:

Osmobitni podatak koji «strobuje» Port A (PA)

00010010 (12)h

Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD)

______________________________________

72

MOD 1 (strobovani izlaz):

1. Pokrenuti program Active-HDL čija se ikonica nalazi na Desktop-u2. Izaberite dizajn 8255a3. Otvoriti listing TestBench-a MOD_1b koji se nalazi u folderu TestBench 4. Uneti binarnu vrednost ASCII karaktera koji treba da se odštampa na štampaču (ovaj podatak se

«strobuje»)5. Izvršiti kompilaciju pritiskom na taster <F11>6. Podesiti entitet Top level desnim klikom na ˝+˝ ispred imena fajla MOD_1b.vhd i izaberite Set

as Top-Level 7. Otvoriti Waveform fajl MOD_1b.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 60 ms9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5>10. Očitajte vreme posle kojeg se osmobitni podatak pojavljuje na Portu B (PB)11. Po završetku simulacije potrebno je da se vremenski dijagram uveća ili umanji, radi bolje

preglednosti. 12. Odštampati vremenski dijagram

Grupa 1:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

10111010 (BA)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 2:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

11001010 (CA)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

73

Grupa 3:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

11111111 (FF)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 4:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

00010010 (12)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 5:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

01001111 (4F)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 6:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

10101011 (AB)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

74

______________________________________

Grupa 7:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

10000001 (81)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 8:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

11100001 (E1)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 9:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

10111111 (BF)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 10:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

00111101 (3D)h

75

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 11:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

01010101 (55)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 12:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

11110001 (F1)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 13:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

11001011(CB)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 14:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

00001111 (0F)h

76

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 15:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

01110110 (76)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

Grupa 16:

Osmobitni podatak koji šalje procesor preko Porta D (PD)

00010000 (10)h

Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB)

______________________________________

77

7. LITERATURA :

1. INTEL 8255 Programmable Peripheral Interface, 1986.

2. ALTERA a8255 Programmable Peripheral Interface, Sep. 1996.ver1.

3. Mile K. Stojčev, Branislav D. Petrović ARHITEKTURE I PROGRAMIRANJE RAČUNARSKIH SISTEMA ZASNOVANIH NA FAMILIJI PROCESORA 80x86

I izdanje, Elektronski fakultet, Niš, 1999.

78


Recommended