Signaalinkäsittelytekniikan laboratorio
		Digitaalitekniikan perusteet - luento 12
	Muisti on olennainen osa digitaalista tietokonetta ja on tärkeässä asemassa kaikissa digitaalisysteemeissä.
 	Keskeiset muistityypit ovat vaihtomuisti (esim. RAM, RWM) ja kiintomuisti (ROM). Vaihtomuistissa pidetään 
	suorituksen aikaisia välituloksia ja lopputuloksia. Vaihtomuistista tieto häviää, kun syöttöjännite katkaistaan.
	Vaihtomuistiin voidaan kirjoittaa ja siitä voidaan lukea. Kiintomuistin muistiaines on pysyvää, eikä asiakas
	pääse muuttelemaan sen sisältöä. Kiintomuistissa pidetään ohjelmatietoja. Kiintomuistin sisältö ohjelmoidaan 
	muistiin ja ohjelma säilyy, vaikka syöttöjännite katkaistaan. 	ROMmin käyttö on yksi tapa tehdä ohjelmoitavaa 
	logiikkaa (PLD - Programmable Logic Device). 																				
	
	Vaihtomuisti koostuu muistisoluista ja solujen käsittelyyn tarvittavasta logiikasta. Jokainen muistisolu tallettaa
	yhden bitin verran tietoa. Solut on ryhmitelty kokonaisuuksiksi, joita nimitetään muistipaikoiksi ja sanoiksi. Yksi muisti
	sisältää useita tällaisia muistipaikkoja (eli sanoja). Sanan pituus on yleensä n x 8 bittiä. 8 bitin ryhmää nimitetään 
	tavuksi (byte) ja sen puolikasta puolitavuksi (nibble). Jokaisella sanalla on osoite, jonka avulla se voidaan osoittaa
	muistista. Muistipaikan sisältämää tietosisältöä puolestaan käsitellään dataväylien kautta, jokaiselle bitille on oma väylänsä. 
	Tieto kulkee siis rinnakkaismuotoisesti muistiin ja muistista ulos. 
	Osoitetietoja varten on osoiteväylät.
	
	Vaihtomuistin luku antaa ulos muistipaikan sisällön muuttamatta sitä. Kirjoitus asettaa muistipaikan sisällön halutuksi.
	Vaihtomuistin lukeminen:
	
Vaihtomuistin kirjoitus:
	 Vaihtomuistissa on seuraavia liitäntöjä:
  	Vaihtomuistissa on seuraavia liitäntöjä: 
	
Muistin koon mittayksiköissä käytetään tavallisia etuliitteitä. HUOM ! Tässä tapauksessa, (kuten usein muulloinkin tietokonetekniikassa), etuliitteet viittaavat kuitenkin kakkosen potensseihin, eivätkä suoraan kymmenen kertoimiin (kuten on ehkä totuttu):
	Muistin koko voidaan ilmoittaa eri tavoin. Havainnollista on kertoa, montako sanaa muistissa on ja miten pitkiä
	yksittäiset sanat ovat. Esimerkiksi muistin koko ilmoitetaan usein lausekkeella s x n, mikä tarkoittaa, 
	että muistissa on s kappaletta sanoja, ja että jokaisen yksittäisen sanan pituus on n bittiä. 
	Toisaalta muistin koko voidaan ilmoittaa pelkästään bitteinä tai tavuina.
	
	Esim. Jos muistin koko on 1k x 8 on siinä 210 x 8 = 8192 bittiä 
	
	Muistin sanojen lukumäärä määrää samalla muistin osoiteottojen [ADDRESS] määrän ja osoiteavaruuden. s sanaa -> log2s osoiteottoa
	ylöspäin pyöristettynä. Edelleen, jos käytössä on s sanaa, on osoiteavaruus 0... s-1. 
	
	Esim 1. Muistissa olevien sanojen määrä on 1k = 1024. Tällöin tarvitaan siis log21024 = 10 osoitelinjaa.
	Esim 2. Jos muistissa olevien sanojen määrä on 25. Tällöin tarvitaan log225 = 4,6439 --> Tarvitaan 5 osoitelinjaa (25 = 32 osoitetta)
	
	
	
|   | 
	Jos piiri on iso, voidaan dataotot ja -annot yhdistää. 
	
| Vaihtomuisti koostuu seuraavista osista: 
 
		Prosessori tai kontrolleri ohjaa vaihtomuistin toimintaa. Se siis lukee tai kirjoittaa muistiin. Vaihtomuisti
		toimii prosessorin kellon tahdissa. Prosessori antaa osoitteen ja ohjaussignaalit, muisti antaa tai ottaa dataa.
		 | 
 | 
| Esimerkki: 4 x 4 RAM | 
	Vaihtomuistia laajentaessa voidaan laajentaa kahta eri ominaisuutta: voidaan joko kasvattaa muistiin talletettavien 
	sanojen määrää (osoiteavaruuden laajentaminen) tai pidentää yksittäisen sanan pituutta (sananpituuden 
	laajentaminen). Osoiteavaruuden laajentamista tarvitaan tilanteessa, jossa monta pientä
	muistia yhdistetään yhdeksi suureksi: tällöin osoiteottojen määrä pienissä ei riitä. Osoiteavaruus voidaan 
	tuplata invertterillä. Jos halutaan suurempaa laajennusta, joudutaan käyttämään dekooderia. 
	
	Tehdään neljästä 1k x 8 vaihtomuistista yksi isompi, 4k x 8 kokoinen muisti. Käytännössä tämä tarkoittaa, että
	osoitelinjojen kaksi eniten merkitsevää bittiä (A10 ja A11) ohjataan dekooderiin (Nythän meillä on oltava 12 osoitelinjaa [A0:A11], jotta saataisiin 4K = 4096 eri osoitetta (212 = 4096)). Dekooderi taas valitsee, mitä
	pienistä piireistä kulloinkin käytetään (Dekooderiin menevällä kahdella osoitelinjalla saadaan muodostettua 4 kombinaatiota, eli voidaan valita yksi neljästä vaihtoehtoisesta muistipiiristä. Jokaiseen pikkupiiriin menee 10 osoitelinjaa -> 1024 osoitetta). Tällöin kokonaisuus toimii, kuten yksi suurempi muisti.
	
Käytännössä on valittu mukavasti, joko pienten piirien koko (1k X 8) tai halutun suuren muistipiirin koko (4k x 8), koska osoiteavaruuden laajentaminen menee näin mukavasti.
	
	
|   | 
	Sananpituuden lisäämiseksi kytketään piirejä rinnakkain tarvittava määrä ja ohjataan kaikkiin samat ohjaussignaalit.
	Tämä on siis paljon helpompaa kuin osoiteavaruuden laajentaminen. Esimerkkinä on muodostettu 1k x 16 -vaihtomuisti 1k x 8 piireistä:
	
|   | 
Kiintomuisti (ROM) on muistipiiri, jonka sisältöä ei käytön aikana muuteta lainkaan tai muutetaan vain hyvin harvoin. Kiintomuistin muuttaminen tapahtuu ohjelmoimalla se uudestaan. Kiintomuisti säilyttää sisältönsä, vaikka syöttöjännite katkaistaan. Kiintomuistin sisältö kirjoitetaan muistiin eli muisti ohjelmoidaan jollakin seuraavista tavoista:
	Kiintomuistissa muistisolujen paikalla on joko sulakkeet tai eristeen sisäiset kondensaattorit. 
	Muistipaikan valintaan käytetään dekooderia kuten vaihtomuisteissakin. Antosignaalien muodostukseen käytetään
	TAI (OR) -piirejä.
	
	Kiintomuistin ohjelma esitetään taulukkona. Taulukko on itse asiassa kiintomuistin totuustaulu. 
	Esimerkkinä esitetään 32 x 8 -ROM piirin ohjelma. Piiri ohjelmoidaan taulukon mukaan:
	
|   |   | 
	Kiintomuisteja jaetaan eri tyyppeihin toteutusteknologian ja ohjelmointiominaisuuksien mukaan. Tyyppejä
	ovat esimerkiksi: Maski-ROM, PROM, OTPROM, EPROM, FLASH ja EEPROM. Kiintomuistin piirrosmerkki esitellään alla:
	
|   | 
	Ohjelmoitava logiikkaverkko on integroitu piiri, jossa on siis tavallaan ristiin menevä matriisi (vaaka- ja pystysuunnat, kuten ROM-piirissä aiemmin), 
	Ohjelmoitavassa logiikkaverkossa on logiikkaportteja ja/tai erilaisia kytkentämahdollisuuksia. Ohjelmoitava logiikkaverkko ohjelmoidaan valmiiksi (esim. sulakkeita polttamalla) käyttöä varten. Matriisin ansiosta voidaan 
	ohjelmoitava logiikkaverkko ohjelmoida eri käyttötarkoituksia varten eri tavoin kuitenkin niin, että 
	lähtökohta on aina sama (eli verkko, josta ei ole vielä yhtään sulaketta poltettu [tässä esimerkissä. ks. ryhmittely alta]).
	
Ohjelmoitavia logiikkaverkkoja voidaan ryhmitellä eri tavoin. Alla on esitelty yleisimpiä 
ryhmittelyjä.
	Ohjelmoitavat logiikkapiirit ovat ns. asiakaskohtaisia logiikkapiirejä (ASIC = Application Specific 
	Integrated Circuit). Ne luokitellaan allaolevan
	kaavion mukaisesti.
	
|   | 
ASIC -piirien suunnittelua opetetaan tämän laboratorion kurssilla S-88.3134 - ASIC-suunnittelun perusteet.
Ohjelmoitavilla logiikkapiireillä, joilla muodostetaan kombinaatiopiirejä on kolme eri perusarkkitehtuuria: PROM (Programmable read-only memory, PAL (Pragrammable array logic) ja PLA (Programmable logic array). Kaikki sisältävät JA-sekä TAI- verkot. Erona on, että kummatkin verkot voivat olla joko kiinteitä tai ohjelmoitavia:
|   |   | 
|   | 
| Jos halutaan tarkastella tavallista rekisterillä varustetun verkon arkkitehtuuria, voidaan se esittää oheisen kuva mukaan. (Tässä on huomattava, että antolohko eli kiikut eivät ole välttämätön ominaisuus: saman perusrakenteen voi hyvin esittää ilman antolohkoa. Tällöin se on ehkä helpompi mieltää ylempänä esiteltyjen kombinaatiopiiriverkkojen yleiseksi kaavioksi.) |   | 
	Ohjelmoitavissa logiikkapiireissä kombinaatioverkkojen suunnittelu on suoraviivaista: ensin poltetaan funktion lausekkeiden mukaiset sulakkeet ja 
	sitten syötetään saadut tulokset mahdolliseen kiinteään verkkoon jäljempänä. Huomattavaa suunnittelussa 
	on se, että verkkojen perusrakenteesta (JA-TAI) johtuen, on halutusta funktiosta muodostettava SOP-muotoinen 
	funktio, jotta sen ohjelmoiminen onnistuisi. Tämä siis johtuu siitä, että ohjelmoitavassa logiikkaverkossa 
	(PLA, PAL ja PROM) tulevat ensin JA-portit ja vasta sitten TAI-portit. Alla esitellään PAL -piirin rakennetta lähemmin:
	
|   | 
| 
			Toteutetaan seuraavat lausekkeet PAL piirinä: |   | 
	Tämän jälkeen muodostetaan tarvittavat kytkennät: jos lankojen välillä on kytkentä, siinä on kaaviossa pallo.
	Muussa tapauksessa kosketuspintaa ei ole:
	
|   | 
	Kuvassa on selkeästi näkyvissä PAL -piirin rakenne: Ensin ohjelmoitava JA -verkko, sitten kiinteä TAI -verkko.
	PLA-piirien rakenne on muuten saman kaltainen, mutta siinä on käytännössä kolme eri ohjelmoitavaa verkkoa: 
	ensin ohjelmoitava JA -verkko, sitten ohjelmoitava TAI -verkko ja lopuksi ohjelmoitava invertointi:
	
|   | 
| Tämän sivun sisällöstä vastaa  
	aura@wooster.hut.fi URL: http://signal.hut.fi/digis/printtaa/luento12/luento12.html Sivua on viimeksi päivitetty 23.9.2004. |