Harjoitustyö 3: DLX kontrolli

Samankaltaiset tiedostot
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 2: DLX I - arkkitehtuuri

52480S TIETOKEARKKITEHTUURIT Tentti

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 2: DLX I - Arkkitehtuuri

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

2 Konekieli, aliohjelmat, keskeytykset

Tietokoneen rakenne: Harjoitustyö. Motorola MC prosessori

Kombinatorisen logiikan laitteet

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

TKT-3200 Tietokonetekniikka I. Harjoitustyö 4: Cache - simulaattorin ohje

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

1. Keskusyksikön rakenne

Harjoitustyö: virtuaalikone

Signaalien datamuunnokset. Näytteenotto ja pito -piirit

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

TKT-3201 Tietokonearkkitehtuuri 2

7.4 Sormenjälkitekniikka

TTY TKT-1110 Mikroprosessorit TKT. HEW-ohjeet ver 1.0

DIGITAALISEN TARINAN TUOTTAMINEN MICROSOFT PHOTO STORY 3- OHJELMAN AVULLA VAIHEINEEN

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Luento 1 Tietokonejärjestelmän rakenne

Laskuharjoitus 9, tehtävä 6

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Suorittimen rakenne ja toiminta

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

TAMPEREEN TEKNILLINEN YLIOPISTO

Coolselector Asennusohje

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

ASM-kaavio: reset. b c d e f g. 00 abcdef. naytto1. clk. 01 bc. reset. 10 a2. abdeg. 11 a3. abcdg

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Kamera ohjelmoidaan ensin tunnistamaan kortit ja lähettämään tieto sarjaliikenneporttiin Data-linkin avulla.

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tekniikka ja liikenne (5) Tietoliikennetekniikan laboratorio

TAMPEREEN TEKNILLINEN YLIOPISTO

Zeon PDF Driver Trial

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

11/20: Konepelti auki

Suorittimen rakenne ja toiminta

Monipuolinen esimerkki

Jypelin käyttöohjeet» Ruutukentän luominen

Harjoitus 6: Simulink - Säätöteoria. Syksy Mat Sovelletun matematiikan tietokonetyöt 1

Älykännykät ovat pieneen tilaan paketoituja, mutta suuret ominaisuudet omaavia tietokoneita.

Ohjelmoinnin perusteet Y Python

Laitteistonläheinen ohjelmointi

Jakso 4 Aliohjelmien toteutus

5. HelloWorld-ohjelma 5.1

Luento 4 Aliohjelmien toteutus

Ehto- ja toistolauseet

Signaalien datamuunnokset

Sähköpostitilin käyttöönotto. Versio 2.0

Suorittimen rakenne ja toiminta

Piirien väliset ohjaus- ja tiedonsiirtoväylät H. Honkanen

Harjoitustyön testaus. Juha Taina

Rinnakkaistietokoneet luento S

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 12: Kontrollin toteutus Ch [Sta06] Mikro-operaatiot Ohjaussignaalit Langoitettu ohjaus Mikro-ohjelmoitu ohjaus

Tutoriaaliläsnäoloista

Ohjausyksikkö. Tietokoneen rakenne. Ch [Sta06] Mikro-operaatiot Ohjaussignaalit Langoitettu ohjaus Mikro-ohjelmoitu ohjaus.

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 12: Kontrollin toteutus Luento 12. u Millainen käskykanta käytössä, mitä käskyt tekevät? u Mikä operaatio, missä operandit?

Hakulomakkeen täyttöohjeet

Sisäänkirjaus Uloskirjaus. Yritystieto

Microsoft Security Essentials (MSE) asennuspaketin lataaminen verkosta

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Päivitysohje Opus Dental

Hammastankohissin modernisointi. Heikki Laitasalmi

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

HARJOITUSKERTA 1: SPSS-OHJELMAN PERUSKÄYTTÖ JA MUUTTUJAMUUNNOKSET

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Toinen harjoitustyö. ASCII-grafiikkaa

Hellä ensikosketus. Tomi Kiviniemi

Maha Eurosystem jarrulaskentaohjelman asennusohje versio

Onnittelut PC SpeedCAT perheeseen liittymisestä

6.3. AVR_rauta. EEPROM-muisti pva

811120P Diskreetit rakenteet

Web Services tietokantaohjelmoinnin perusteet

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

Ohjelmoinnin peruskurssi Y1

Kappale 20: Kantaluvut

HUOMAUTUS! Älä kytke Cometia USB-kaapelilla tietokoneeseesi, kun lataat satunnaiskoodeilla.

BLOGGER. ohjeita blogin pitämiseen Googlen Bloggerilla

Näin saat 365 päivän ajalta Freshest Data sisältöä NavionicsWeb Store nettikaupasta

Käskykannat. Tietokoneen rakenne. Ch [Sta06] Operaatioista Operandeista Osoitustavoista Pentium / PowerPC. Luento 7-1

Tiedonsiirto helposti navetta-automaation ja tuotosseurannan välillä

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Transkriptio:

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 3: DLX kontrolli.. 2005 Ryhmä Nimi Email op. num.

DLX-KONTROLLI Harjoitustyön tarkoitus Tämän työn tarkoitus on auttaa ymmärtämään, kuinka liukuhihnoitetun prosessorin ohjauslogiikka toteutetaan. On erittäin suositeltavaa tehdä DLX-ARKKITEHTUURI-työ ennen tämän harjoituksen tekemistä. Proseduurikutsut liukuhihnoitetussa prosessorissa Liukuhihnoitettu prosessori kuten DLX tukee proseduurikutsuja eri tavalla kuin liukuhihnoittamaton prosessori kuten esimerkiksi M68000 (Motorola 68000). M68000 laittaa paluuhyppyosoitteen aina automaattisesti systeemipinoon, ja yksi prosessorin rekistereistä on varattu tämän pinon osoittamiseen. Ja koska systeemipino on muistissa, proseduurinkutsu aiheuttaa muistiinkirjoituksen ja proseduurista paluu muistista lukemisen. Jos proseduuri ei kutsu toista proseduuria, niin paluuhyppyosoitteen haku muistista voidaan eliminoida varastoimalla paluuhyppyosoite rekisteriin. Tätä menetelmää käyttävät sekä DLX että monet muut liukuhihnaprosessorit. Proseduurikutsuun liittyy tietty rekisteri, johon paluuhyppyosoite tallennetaan. DLX käyttää tähän tarkoitukseen rekisteriä R31. Proseduurinkutsu tapahtuu komennolla 'JAL offset. Esimerkiksi: JAL SUBR Suoritus siirtyy osoitteeseen PC+4+offset ja käskyn osoite (PC) tallennetaan rekisteriin R31. Proseduurinkutsu luokitellaan hyppykäskyksi ja jos käytössä on viivästetty hyppy (delayed branch), niin proseduurinkutsua seuraava käsky suoritetaan myös. Joten talletettava paluuhyppyosoite ei saa osoittaa proseduurinkutsua seuraavaan käskyyn, vaan sitä seuraavaan. Esimerkki: 0020 JAL 10 0024 ADD R1,R2,R3 0028 SUB R1,R2,R3... 0034 ADDI R31,R31,#8 0038 JR R31 Huomaa, että jokainen käsky on neljän tavun mittainen, mikä on tärkeä liukuhihnoitetun prosessorin ominaisuus. Ohjelmassa käsky ADD R1,R2,R3 otetaan suoritukseen ennen kuin ohjelman suoritus jatkuu osoitteesta 20+4+10 = 34. Käsky JAL tallentaa rekisteriin R31 osoitteen 20. Proseduurin suorituksen jälkeen ohjelman suoritus pitäisi jatkua osoitteesta 28, joten ohjelmoijan (tai kääntäjän) pitää korjata rekisterin R31 arvo oikeaksi. Tämän korjauksen tekee ohjelmassa komento ADDI R31,R31,#8. Paluuhyppy suoritetaan komenolla JR siihen osoitteeseen, joka sijaitsee rekisterissä R31. 1/14

Proseduurikutsun ja paluuhypyn tukeminen vaatii seuraavia operaatioita: -Rekisteriin R31 pitäisi pystyä lataamaan ohjelmalaskurin arvo -Ohjelmalaskuriin pitäisi pystyä lataamaan jonkin rekisterin arvo Datapolkumalli DLX ei tue kumpaakaan operaatiota, koska tarvittavat väylät puuttuvat. Seuraava malli SUPER DLX sisältää nämä vaaditut väylät. Alla olevasta kuvasta näet SUPER DLX-mallin rakenteen. Miten edellä mainitut operaatiot suoritetaan mallissa SUPER DLX käskyille JAL ja JR Rx? Nyt tiedämme, miten yhden tason proseduurikutsut on toteutettu. Mitä tapahtuu, jos proseduuri kutsuu muita proseduureja? Useamman tason proseduurikutsuja varten tarvitsemme pinon, johon paluuosoitteita tallennetaan. Koska prosessorillamme ei ole systeemipinoa, joudumme itse rakentamaan ja ylläpitämään sellaista käytettävissä olevilla käskyillä. Pinonosoittimeksi voimme valita jonkin rekistereistä, esimerkiksi rekisterin R30. Seuraavalla sivulla oleva ohjelma kutsuu aliohjelmaa KALLE, joka vuorostaan kutsuu aliohjelmaa NISSE. Aliohjelmat vain käsittelevät paluuosoitteita ja pinonosoitinta R30. 2/14

JAL KALLE... KALLE: ADDI R31,R31,#8 SUBI R30,R30,#4 SW 0(R30),R31 JAL NISSE NOP LW R31,0(R30) ADDI R30,R30,#4 JR R31 NISSE: ADDI R31,R31,#8 JR R31 Kerro, mitä ohjelma tekee? Muokkaa proseduuria NISSE sellaiseksi, että se kutsuu proseduuria OLLI: Tutki seuraavaa ohjelmaa: ADD R1,R0,R0 JAL SUBR ADDI R1,R1,#2 ADD R1,R1,R1... SUBR: ADDI R1,R1,#1 ADDI R31,R31,#8 JR R31 NOP Mitä rekisteri R1 sisältää juuri ennenkuin käsky ADDI R1,R1,#1 suoritetaan? (oleta: R0=0) Mitä rekisteri R1 sisältää juuri ennenkuin käsky JR R31 suoritetaan? Mitä rekisteri R1 sisältää, kun käsky ADD R1,R1,R1 on juuri suoritettu? 3/14

Käynnistä simulaattori ja valitse datapolkumalli SUPER DLX. Ohjelma on tiedostossa exempel11.s. Lataa se ja nollaa laskuri. Klikkaa rekisteritiedostoa, jolloin ruudulle ilmestyy ikkuna, jossa on rekisteritiedoston sisältö. Anna kellopulsseja, kunnes käsky JAL haetaan muistista ja sijaitsee IF-vaiheessa. Missä osoitteessa käsky JAL sijaitsee? Anna kellopulsseja, kunnes käsky JAL saavuttaa MEM-vaiheen. Mitä rekisteri R31 sisältää? Anna kellopulssi. Mitä rekisteri R31 nyt sisältää ja miksi? Proseduurin SUBR ensimmäinen käsky on jo haettu sisään, missä osavaiheessa se on? Anna kellopulsseja, kunnes käsky JR R31 sijaitsee ID-vaiheessa. Mistä datapolulta saadaan rekisterin R31 arvo ja miksi? Mikä on paluuhyppyosoite? Anna kellopulssi. Mikä on nyt ohjelmalaskurin arvo? Suorita ohjelma loppuun komennolla Run. Mikä on rekisterin R1 arvo? Onko se sama kuin laskemasi arvo? Nyt tutkimme, miten useamman tason proseduurikutsuja toteutetaan. Lue huolellisesti läpi seuraava ohjelma (koodi jatkuu seuraavalla sivulla): ADDI R1,R0,#1 ADDI R20,R0,#78 ADDI R2,R0,#2 ADD R3,R1,R1 JAL SUBR NOP ADD R4,R3,R0... SUBR: SUBI R2,R2,#1 ADDI R3,R3,#1 BEQZ R2,BACK ADDI R31,R31,#8 4/14

SUBI R20,R20,#4 SW 0(R20),R31 JAL SUBR NOP LW R31,0(R20) ADDI R20,R20,#4 BACK: JR R31 Mikä rekisteri toimii pinonosoittimena? kuinka monta kertaa proseduuria SUBR kutsutaan? Mitä rekisteri R4 sisältää välittömästi käskyn ADD R4,R3,R0 suorituksen jälkeen? Ohjelma on tiedostossa exempel12.s. Lataa se ja nollaa laskuri. Anna kellopulsseja, kunnes käsky JAL haetaan muistista ja se sijaitsee IF-vaiheessa. Määritä ohjelmalaskurin arvon perusteella paluuhyppyosoite? Anna kellopulsseja, kunnes käsky ADD R31,R31,#8 saavuttaa EX-vaiheen. Mikä on ALU:n ulostulon arvo? Vertaa sitä paluuhyppyosoitteeseen. Mikä on nyt pino-osoittimen arvo? Anna kellopulsseja, kunnes proseduurin käsky JAL haetaan muistista ja se sijaitsee IF-vaiheessa. Mikä tulisi olla paluuhyppyosoitteen arvo? Anna kellopulsseja, kunnes proseduurin käsky JAL saavuttaa EX-vaiheen. Mikä on pinonosoittimen arvo ja miksi? Anna kellopulsseja, kunnes käsky JR R31 saavuttaa ID-vaiheen. Mikä on rekisterin R31 arvo nyt? Mihin osoitteeseen paluuhyppy tapahtuu ja miksi? Mistä saadaan paluuhypyn osoite? Anna kellopulsseja kunnes JR R31 saavuttaa uudelleen ID-vaiheen. Mihin osoitteeseen paluuhyppy nyt tapahtuu ja miksi? Mistä saadaan paluuhypyn osoite? Suorita ohjelma loppuun komennolla Run. Mikä on rekisterin R4 arvo? 5/14

Tarkista, että se on sama kuin laskemasi! Syy, minkä takia pinomekanismia ei tueta on se, että pino- operaatiot saattaisivat aiheuttaa hazardeja liukuhihnassa. Silloin suorituskyky huonontuisi. Liukuhihnoitetun prosessorin ohjaus Nyt olemme opiskelleet mitä toimintoja liukuhihnoitetun prosessorin datapolku sisältää. Seuraavaksi perehdymme datapolun ohjauksen periaatteisiin. Liukuhihnan ohjaaminen on melko yksinkertaista. Tästä huolimatta sinun on syytä tutustua muutamaan peruskäsitteeseen, joihin ohjaus perustuu. Ne ovat käskyformaatti ja ohjaussignaalit. Käskyformaatti Käskyformaatti määrittelee kuinka, prosessorin käskyt koodataan. Koodattu tieto sisältää kaiken tarpeellisen informaation (ohjeet), joka tarvitaan käskyn suorittamiseen. Lue tämän harjoitustyön seittisivulla olevan linkin Computer Architecture Tutorial kohdat, joissa kuvataan DLXprosessorin käskykanta (instruction set) ja käskyformaatit (instruction format). Liukuhihnoitetulle prosessorille on erittäin tärkeää, että kaikki käskyt ovat yhtä pitkiä. Jos näin ei ole, niin liukuhihnaan syntyy "kuplia" (bubbles) seuraavasta syystä: Oletetaan, että käsky i on yhden sanan pituinen ja käsky i+1 neljä sanaa. Kun käsky i on haettu, tarvitaan neljä kellojaksoa ennen kuin käsky i+1 on haettu. Liukuhihnassa on käskyn i+1 haun aikana näin ollen osavaiheita, jotka eivät tee mitään hyödyllistä. Liukuhihnan osavaiheiden rinnakkaista suoritusta ei toisin sanoen käytetä täysin hyväksi. Käskyn dekoodaus ja ohjaussignaalit Ohjaus voidaan ajatella rakennettavan siten, että jokaiseen liukuhihnan osavaiheeseen lisätään 32- bitin rekisteri, johon voidaan varastoida käsky. Käskydekooderin avulla voisimme muodostaa ohjaussignaalit kussakin liukuhihnan osavaiheessa oleville toiminnallisille yksikölle. Esimerkiksi EX-vaihe: Sekä ALU:a ja multipleksereitä MX4 ja MX5 varten pitää muodostaa ohjaussignaalit. Tähän voimme käyttää PLA:ta (Programmable Logic Array) tai ROM:ia, jotka käskyformaatin mukaisesti muodostaisivat sisääntulosignaalien perusteella ohjaussignaalit ALU:a ja multipleksereitä varten. Tämä ei olisi kuitenkaan hyvä idea. Prosessorilla DLX on noin 100 käskyä. PLA:n läpi kulkevan signaalin viive on voimaakkaasti riippuvainen kytkentäfunktioiden (switch-function) mintermien lukumäärästä. Kutsutaan tätä aikaa T PLA :si. Jos ALU:n viivettä kutsutaan T ALU :si, niin kestää ainakin T PLA +T ALU, ennenkuin ALU tuottaa stabiilit ulostuloarvot. Liukuhihnan kellotaajuuden määrää sen hitain osavaihe, ja usein ALU sattuu olemaan se hitain, joten käskyn dekoodausta ei voida tehdä tässä osavaiheessa. Käskyn dekoodaus pitää tehdä ID-vaiheessa kaikille liukuhihnan osavaiheille (tästä osavaiheen nimi). Käskyformaatin nerokkaan muotoilun ansiosta voidaan käskyn dekoodaus ja rekisterien luku tehdä rinnakkain ID-vaiheessa. Miksi tämä on mahdollista? (tutki käskyformaatteja!) Käskyn dekoodaus tehdään usein siten, että kaikki tarvittavat ohjaussignaalit luodaan jo IDvaiheessa. 6/14

Ohjaussignaaleja kuljetetaan liukuhihnassa ohjaussignaalirekisterien avulla, joita on jokaisessa liukuhihnan osavaiheessa. Prosessori SUPER DLX, jota tutkimme tässä labrassa, käyttää 36 ohjaussignaalia. Tutkimme vain osaa näistä ohjaussignaaleista. Seuraavassa kuvassa on prosessorin SUPER DLX käskydekooderi, ohjaussignaalirekisterit sekä joitakin valittuja ohjaussignaaleja merkittynä. ID-vaiheessa sijaitsee käskyn dekooderi, joka on toteutettu PLA:lla. Se dekoodaa käskyn kentät Opcode ja Func. Näistä kentistä PLA muodostaa ne 36 ohjaussignaalia, jotka seuraavat käskyä liukuhihnalla. Tämän mahdollistaa liukuhihnan jokaisella kellolinjalla sijaitsevat 36-bittiset ohjausrekisterit. EX- vaiheessa ohjaussignaaleista käytetään kolmea ohjausryhmää. Niitä kutsutaan ohjausryhmiksi, koska ne voivat sisältää useamman kuin yhden ohjaussignaalin. ALU:n ohjausryhmä sisältää neljä ohjaussignaalia, jotka määritellään taulukossa 1. Ohjausryhmät MX4 ja MX5 ohjaavat EX-vaiheen multipleksereitä, nämä ohjaussignaalit on määritelty taulukossa 2. MEM-vaiheessa ohjataan muistia signaaleilla WRITE ja READ. Näiden lisäksi ohjataan multiplekseriä MX6 nimensä mukaisella ohjaussignaalilla. Lopuksi WB-vaiheessa tarvitaan ohjaussignaali käskyjä varten, jotka kirjoittavat rekisteritiedostoon (REG_WRITE). Tämä ei kuitenkaan riitä. Meidän pitää huolehtia, että kohderekisterin osoitetta kuljetetaan liukuhihnassa. Tämän takia jokaisella kellolinjalla on 5-bittinen rekisteri, jossa on käskyn kohderekisterin osoite. Valitettavasti jokaiselle käskylle ei aina ole määritelty kohderekisteriä explisiittisesti käskyssä. Hyvä esimerkki on proseduurinkutsu JAL, joka aina kirjoittaa paluuhyppyosoitteen rekisteriin R31. Tämän takia ID-vaiheessa on multiplekseri, jota dekooderi ohjaa. Tällä multiplekserillä voidaan ladata rekisterin R31 osoite 5-bittiseen rekisteriin, johon käskyn kohderekisterin arvo tallennetaan. Tällä multiplekserillä on myös toinen tärkeä funktio: sen avulla voidaan vastaavasti valita latausta varten käskyn rekisterikentistä kohderekisterin arvo. Käskyformaateissa I ja R kohderekisterin arvo on nimittäin eri kentissä. Multiplekseriä ohjaa dekooderin ohjausryhmä RD (katso taulukko 3). Tärkeää: Ehkä ihmettelet miksi rekisteri R0 tarvitaan kohderekisteriksi. Se selviää, kun tutkitaan hazardien havaitsemista liukuhihnassa, jolloin niiden käskyjen, jotka eivät kirjoita rekisteritiedostoon, tulee käyttää kohderekisterinä rekisteriä R0. Tätä tulet pohtimaan, kun määrittelet ohjaussignaaleja. 7/14

Taulukko: 1 ALU 0peraatio Ohjaussignaalit 1-4 ADD 0000 SUB 0001 OR 0010 AND 0011 XOR 0100 LHI 0101 SLL 0110 SRL 0111 SRA 1000 EQ 1001 NE 1010 LT 1011 GT 1100 LE 1101 GE 1110 PASS_A 1111 Taulukko: 2 Ohjausryhmä Ohjaussignaali nro Arvo Funktio Arvo Funktio MX4 16 0 Rekisteritiedosto 1 PC MX5 6 0 Rekisteritiedosto 1 Immediate MX6 26 0 ALU 1 Memory WRITE 10 0 Ei kirjoitusta 1 Kirjoitus READ 11 0 Ei lukua 1 Luku REG-WRITE 17 0 Ei kirjoitusta 1 Kirjoitus 8/14

Taulukko: 3 RD-operaatio Ohjaussignaalit 27-28 R0 00 R31 01 I-FORMAT 10 R-FORMAT 11 Laboratorion loppuosassa tulet toteuttamaan käskyn dekoodauksen muutamalle käskylle. Tämän vuoksi toiminnallisten yksiköiden ohjaussignaalit on määritelty taulukoissa 1-3. Taulukossa 4 näytetään mitkä ohjaussignaalien arvot pitäisi olla käskylle ADD. Täydennä nyt taulukko 4 määrittemällä muiden käskyjen ohjaussignaalien arvot käyttäen apuna taulukoita 1-3. Taulukko 1: Osavaihe ID EX MEM WB Ohjausryhmä RD ALU MX5 MX4 WRITE READ MX6 REG_WRITE ADD 11 0000 0 0 0 0 0 1 ADDI SUB SUBI OR LW SW BNEZ BEQZ Tehtäväsi on ohjelmoida DECODE PLA:n sisältö taulukon 4 mukaiseksi. Se tehdään käyttämällä kuvauskieltä labalaba, jolla määritellään in/out funktiot jokaiselle käskylle. Tiedostossa decode.ipf on malli labalaba-koodista, jossa funktio on tehty valmiiksi ADD-käskylle. Labalaba-direktiivin input:in jälkeen luetellaan kaikki sisääntulovektorit, joihin vertaamalla haettu käsky tunnistetaan (tunnistuksessa ei tarvita vältämättä kaikkia bittejä, jolloin niitä merkataan tavuviivalla). Labalaba-direktiivin output:in jälkeen nimetään ja ryhmitellään ulostulosignaalit, jolloin funktoiden muodostaminen on helpompaa. Labalaba-direktiivin function jälkeen ovat kaikki funktiot. Jokaista määriteltyä sisääntulovektoria kohden pitää olla funktio, joka kertoo vastaavat ulostulosignaalit käyttäen kohdassa output nimettyjä signaaleja tai signaaliryhmiä. 9/14

Labalaba-spesifikaation malli sijaitsee tiedostossa decode.ipf. Täydennä muiden käskyjen funktiot editoimalla ks. tiedostoa. Käännä sen jälkeen labalaba-specifikaatiosi antamalla komento: labalaba decode.ipf Korjaa mahdolliset syntaktiset virheet. Kun labalaba ei enää valita virheista, se luo tiedoston decode.opf. Valitse valikosta View Control, jolloin saat näkyviin datatiemallin DLX SUPER ohjauslogiikan. Tunnista DECODE PLA, kaikki ohjaussignaalirekisterit ja ne ohjaussignaalit, joita käytät. Käskyrekisteri on jaettu osiin käskyformaatin R mukaisesti. Kaikki näkyvissä olevat ohjaussignaalit näytetään binaarisessa muodossa. Näpäytä DECODE-PLA:ta, jolloin ruudulle aukeaa latausikkuna. Lataa labalaba-spesifikaatiosi (decode.opf) sisään. Nyt testataan jokainen käsky erikseen. Aloitamme käskystä ADDI R2,R0,#4. Käsky on tiedostossa addi.s. Lataa se, nollaa laskuri. Anna kellopulsseja, kunnes käsky sijaitsee ID-vaiheessa. Yksi rekisteri luetaan ID-vaiheessa, mikä? Anna kellopulssi. Missä kohderekisterin osoite sijaitsee? Missä tiloissa MX4 ja MX5 ovat? Mitkä arvot ohjausryhmillä MX4 ja MX5 pitäisi olla taulukon 2 mukaan? Onko ALU:n ulostulon arvo oikea? Jos ei ole, niin mikä on ohjausryhmän ALU arvo? Anna kellopulssi, jolloin käsky saavuttaa MEM-vaiheen. Mikä muistioperaatio tehdään? Onko MX6 oikeassa tilassa? Jos ei ole, niin mikä on ohjausryhmän MX6 arvo? Anna kellopulssi.onko ohjaussignaali REG_WRITE aktiivinen? 10/14

Onko kohderekisterin osoite oikea? Saako rekisteri R2 oikean arvon? Jos käskynsuoritus ei toiminut oikein, niin etsi virheet ja korjaa PLA-spesifikaatio. Nyt testaat muut käskyt samalla tavalla. Käytä seuraavia testitiedostoja: Käsky SUB R1,R0,R0, tiedosto sub.s Käsky SUBI R1,R0,#2, tiedosto subi.s Käsky OR R20,R0,R0, tiedosto or.s Käsky LW R1,C(R2), tiedosto lw.s Käsky SW C(R2),R1, tiedosto sw.s Käsky BNEZ R0,4, tiedosto bnez.s Käsky BEQZ R0,4, tiedosto beqz.s Täytä samalla seuraava taulukko: Osavaihe ID EX MEM WB Ohjausryhmä RD ALU MX5 MX4 WRITE READ MX6 REG_WRITE ADD 11 0000 0 0 0 0 0 1 ADDI SUB SUBI OR LW SW BNEZ BEQZ Vertaa tuloksia taulukkoon 4. Nyt olemme toteuttaneet ohjauksen joillekin DLX:n käskyille. Muiden käskyjen toteutuksessa ei pitäisi tulla mitään erityisiä hankaluuksia. Olemme jättäneet huomioimatta tärkeän seikan: Miten hazardit havaitaan liukuhihnassa. Emme myöskään ole tutkineet multipleksereiden MX2 ja MX3 ohjaamista. Nämä multiplekserit huolehtivat siitä, että Bypassing toimii. Entä miten liukuhihna pysäytetään hazardin tapahtuessa? Seuraavaksi tutkimme näitä seikkoja. 11/14

Hazardi-logiikka Bypassing-tekniikkaa on käytettävä tai liukuhihna pitää pysäyttää, jos EX- tai MEM-vaiheessa olevan käskyn kohderekisteri on ID-vaiheessa olevan käskyn lähderekisteri. Aloitamme Bypassing-tekniikasta. Kuljettamalla kohderekisterien osoitteita liukuhihnalla voimme vertailla niitä vertailijoiden avulla ID-vaiheessa olevan käskyn lähderekisteriin. Lähdeoperandi sijaitsee käskyn kentässä RS1. Alla olevassa kuvassa nähdään, miten datahazardi havaitaan ID-vaiheessa olevan käskyn lähdeoperandille vertailujen avulla. Hazardi-logiikan sisäänmenona on 5 signaalia: USE_RS1, EQ_EX, EQ_MEM, EQ_R0 ja LOAD. Ulostulona on 3 signaalia: MX2 (2 signaalia) ja STALL. Ulostuloilla valitaan oikea arvo multiplexerille MX2 (valinta taulukon 5 mukaan) ja voidaan tarvittaessa pysäyttää liukuhihna. Liukuhihnan pysäyttäminen tapahtuu seuraavasti: IF- ja ID-vaiheiden väliset D-kiikut kytketään pois päältä (ei lueta uutta arvoa sisään) ja tämän lisäksi liukuhihnaan syötetään vaaratonta "käskyä" nimeltään STALL. Vaarattomalla käskyllä tarkoitetaan, että käsky ei suorita kirjoitusta MEM- tai WB-vaiheessa. Taulukko 1: MX2-operaatio Arvo Rekisteritiedosto 00 Bypass EX-vaiheelta 01 Bypass MEM-vaiheelta 10 Nyt tutkimme havaitaanko kaikki samanaikaiset hazardit käyttämällä seuraavaa testiohjelmaa: ADDI R1,R0,#1 ; R1 <- 1 ADD R2,R1,R0 ; R2 <- R1+R0 ADD R3,R1,R0 ; R3 <- R1+R0 ADD R4,R1,R0 ; R4 <- R1+R0 Lataa ohjelma sisään (exempel13.s). 12/14

Anna kellopulsseja, kunnes käsky ADD R2,R1,R0 sijaitsee ID-vaiheessa. Saako käsky rekisterin R1 oikean arvon? Mitkä ovat ohjausryhmän MX2 signaalien arvot (vertaa taulukon 5 arvoihin)? Anna kellopulssi. Mistä saa ID-vaiheessa oleva käsky nyt rekisterin R1 oikean arvon? Seuraavaksi tutkimme liukuhihnan pysäyttämistä seuraavalla testiohjelmalla: LW R1,18(R0) ; R1 <- M[18] ADD R2,R1,R0 ; R2 <- R1+R0 ADD R3,R1,R0 ; R3 <- R1+R0 ADD R4,R1,R0 ; R4 <- R1+R0 Missä vaiheessa liukuhihnan pitäisi pysähtyä? Lataa ohjelma sisään (exempel14.s). Missä sijaitsee LOAD-käsky, kun HAZARD-PLA:n ulostulo STALL saa arvon 1? Anna kellopulssi. Vieläkö STALL-signaali on aktiivinen? Varmista ohjelman oikea suoritus. Tutki seuraavaa ohjelmaa: LW R1,18(R0) ; R1 <- M[18] ADD R1,R1,R1 ; R1 <- R1+R1 ADD R1,R1,R1 ; R1 <- R1+R1 ADD R4,R1,R1 ; R4 <- R1+R1 Mitä tulee hazardin havaitsemiseen, mikä on tämän ja edellisen ohjelman (exempel14.s) olennainen ero? Lataa ohjelma (exempel14b.s). Tarkkaile toimiiko ohjelma oikein. 13/14

Seuraavaksi tutkimme vielä DECODE-PLA:n spesifikaatiota. Miksi ADD-käsky aktivoi sekä USE_RS1 että USE_RS2 ohjaussignaalit? Miksi ADDI-käsky aktivoi ainoastaan USE_RS1 ohjaussignaalin? Nimeä käsky, joka ei aktivoi ohjaussignaaleja USE_RS1 ja USE_RS2 Nyt lopuksi tehtävänäsi on toteuttaa ohjaus käskyille, jotka mahdollistavat proseduurinkutsumisen ja paluun proseduurista. Proseduurinkutsussa pitää rekisteriin R31 tallentaa käskyn JAL (tai JALR) osoite, jossa käsky sijaitsee. Tämä saadaan ohjelmalaskurista. Jotta rekisteriin R31 voitaisiin kirjoittaa, niin kohderekisterin tunniste pitää olla 31 10 =11111 2, joka saadaan aikaan muodostamalla sopivia arvoja ohjausryhmän RD signaaleille (katso taulukko 3). Lisäksi pitäisi huolehtia, siitä että ohjelmalaskurin arvon tulisi läpäistä ALU ilman ALU-operaation suorittamista. Tällainen ALUoperaatio on nimeltään PASS_A. Täytä seuraava taulukko: Osavaihe ID EX MEM WB Ohjausryhmä RD ALU MX5 MX4 WRITE READ MX6 REG_WRITE JAL JR Täydennä nyt käskyjä JAL ja JR vastaavat funkiot tiedostoon decode.ipf. Käännä tiedosto. Testaa käskyt ajamalla testiohjelma exempel11.s ja tee tarvittavat korjaukset. Anna kellopulsseja, kunnes käsky ADDI R1,R1,#2 sijaitsee MEM-vaiheessa. Mitä rekisteri R31 sisältää? Onko sen arvo oikea? Jos ei ole, niin korjaa virheet spesifikaatiosta. Suorita ohjelma loppuun asti. Varmista, että rekisteri R1 sisältää oikean arvon! Olet nyt tehnyt DLX-KONTROLLI-harjoitustyön. Palauta tämä harjoitustyöpaperi annetun kansilehden kanssa. 14/14