Signaalinkäsittelytekniikan laboratorio
Digitaalitekniikan perusteet - luento 12


Muistit

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

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:



Vaihtomuistin rakenne

kahvia 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)

Vaihtomuistin piirrosmerkki

kahvia

Jos piiri on iso, voidaan dataotot ja -annot yhdistää.

Vaihtomuisti koostuu seuraavista osista:

  • muistisolut (kuvassa BC)
  • dekooderi (ohjaa muistien osoitusta, kuvassa vasemmalla)
  • ohjauslogiikka (R/W')
  • ottojen / antojen muodostuslogiikka

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.

kahvia

Esimerkki: 4 x 4 RAM


Vaihtomuistin laajentaminen

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.

Osoiteavaruuden laajentaminen dekooderilla

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.

osoiteavaruuden laajentaminen

Sananpituuden lisääminen

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ä:

sananpituuden lisääminen

Kiintomuistit

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

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ä.

a) Ohjelman säilyvyyden perusteella: b) Toteutusteknologian perusteella: c) Arkkitehtuurin perusteella (joista enemmän seuraavilla sivuilla):

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.


Kombinaatiopiiriverkot

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:


Esimerkit

Toteutetaan seuraavat lausekkeet PAL piirinä:
W = ABC’ + A’B’CD’
X = A + BCD
Y = A’B + CD + B’D’
Z = ABC’ + A’B’CD’ + AC’D’ + A’B’C’D
  = W + AC’D’ + A’B’C’D
(Huomataan, että Z:n lausekkeessa voidaan käyttää hyväksi W:n lauseketta.) Luodaan lausekkeista taulukko sen mukaan, mitä muuttujia tarvitaan mihinkin termeihin:

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:


Paluu päävalikkoon

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.