TKT-1220 Tietokonearitmetiikka I PC-harjoitus 1 Tehtävä 1: Sekventiaalisen right-shift-kertolaskijan tutkiminen Tämä tehtävä esittelee kahden kertolaskijan eroja FPGA-piirillä. Pyri vastaamaan kysymyksiin lyhyesti. Pura kurssin sivulta ladattava tiedostopaketti (aritmetiikka_fpga_1.zip) tekemääsi hakemistoon kotihakemistosi alle. Avaa terminaali (Apuohjelmat -> Terminaali) ja käynnistä Quartus antamalla seuraavat komennot: source /share/tktprog/altera/quartus-12.0-sp2/qii.sh quartus & Avaa projekti (File -> Open Project) aritmetiikka_fpga_1. Avaa projektin tiedostoista (Files-välilehti) aritmetiikka_fpga_1.bdf, joka on projektin ylimmän tason suunnittelu. Ensimmäinen kertolaskija on yksinkertainen yhden bitin kerrallaan skannaava sekventiaalinen right-shiftalgoritmia käyttävä kertoja (mul.vhd), toinen kaksi bittiä kerrallaan skannaava (mul2scan.vhd). Kertolaskijat sytyttelevät status-ledejä kertomisen edetessä. Havainnollistuksen vuoksi yhteenlaskua ja shiftausta ei tehdä samalla kellojaksolla vaan vuorotellen. Lisäksi kertojilla on kahden kellojakson lisäviive (yksi ylimääräinen kellojakso alussa ja yksi lopussa). Ylimmän tason suunnittelussa generoidaan havainnollinen 5 hertsin kellosignaali, joka syötetään kertolaskijalohkolle. Halutessasi voit tutustua kertolaskijoiden VHDL-koodiin. 1.1 Kuinka monta kellojaksoa yllä esitellyltä 1-bittisesti skannaavalta kertojalta kestää kertoa kaksi 8-bittistä lukua? 1.2 Kuinka paljon nopeampi kaksi bittiä kerrallaan skannaava teoriassa on? Käännä projekti valitsemalla Processing -> Start Compilation (CTRL + L). Kun käännös on valmis, laita virta FPGA-lautaan ja avaa Tools -> Programmer ja klikkaa start. Voit joutua valitsemaan Hardware setupista USB-Blaster-vaihtoehdon ja/tai irrottamaan FPGA-laudan USB-johdon koneesta muutamaksi sekunniksi.
Kokeile kertolaskijan toimivuus muutamilla erityyppisillä lähtöarvoilla. 8-bittiset syötearvot annetaan kytkimillä SW0 - SW7 ja SW8 - SW15. Syötearvot näkyvät myös 7-segmentti-LED-näytöillä heksadesimaalimuodossa. SW17 on alhaalla aktiivinen reset. KEY0-painokytkin antaa kertolaskijalle aloituskäskyn. Punaiset ledit syttyvät yksi kerrallaan aina, kun yksi bitti on käsitelty ja tehdään shiftaus. 7-segmenttinäytöillä HEX0-HEX3 näkyy kertolaskijan lähtö eli peräkkäin liitetyt AC- ja B-rekisterit. Kun kertolasku on valmis, syttyy vihreä led LEDG8. Tutustu Compilation Reportiin ja ota ylös, montako logiikkaelementtiä suunnittelu yhteensä vaati (Fitter - > Summary). Valitsemalla Tools -> Chip Planner näet, miten Fitter sijoitteli logiikkaelementit FPGApiirille. (Osa logiikkaelementeistä toteuttaa oheistoimintoja kuten LED-näyttöjen ohjausta.) Sulje Chip Planner. Nyt poista ylimmän tason suunnittelusta kertolaskijalohko "mul" ja lisää tilalle 2 bittiä kerrallaan skannaava (radix-4) kertolaskija: klikkaa kakkosnäppäimellä suunnittelua, Insert -> Symbol -> project -> mul2scan. Käännä projekti taas ja ohjelmoi se uudelleen FPGA-laudalle. 1.3 Mitä havaitset kertolaskun valmistumisnopeudessa ja miksi? 1.4 Kuinka monta logiikkaelementtiä suunnittelussa oli 1-bittisesti skannaavalla kertolaskijalla, entä 2-bittisesti skannaavalla? 1.5 Mistä ero johtuu? FPGA:lla porttiviiveiden lisäksi reititysviiveellä on suuri merkitys kytkennän maksiminopeuteen, sillä reitityksen on oltava muunneltava ja se kiertää useiden ohjelmoitavien reititinlohkojen kautta. Nämä reitittimet ovat ikään kuin multipleksereitä, joilla on oma viiveensä. Koska 2-bittisesti skannaava kertolaskija on loogisesti hieman monimutkaisempi, se ei välttämättä kykene aivan samaan kellotaajuuteen kuin 1-bittisesti skannaava. Seuraavaksi kokeillaan, millä kellotaajuuksilla kertolaskijat lakkaavat toimimasta tai alkavat toimia väärin.
Pidä 2 bittiä skannaava kertolaskija suunnittelussa ja poista kellosignaalin välistä "kellojakaja"-lohko. Tuplaklikkaa kellogen-lohkoa ja klikkaa 3 kertaa next. Säädä kellon jakajaa (clock division factor) ja kertojaa (clock multiplication factor) siten, että saat taajuudeksi (Actual settings) 500 MHz, joka on Quartuksen tukema maksimiarvo. Klikkaile Finish ja anna korvata vanha kellogen-lohko uudella. Käännä jälleen projekti ja katso Compilation Reportista, mitä ajoitusanalysaattorilla on sanottavaa. Se ilmoittaa kriittisen polun rikkovan kiikun setup-aikaa ja arvionsa siitä, mikä olisi suurin toimiva kellotaajuus. Ohjelmoi tästä huolimatta suunnittelu FPGA-kortille. 1.6 Mikä on arvioitu maksimikellotaajuus? 1.7 Muuttele em. tavalla kellokerrointa kääntäen projekti aina uudestaan ja etsi 50 MHz:n tarkkuudella kellotaajuus, jolla suunnittelu toimii oikein FPGA:lla. Kokeile muutamaa erityyppistä lähtöarvoa ja varmista että oikea tulos tulee joka kerta. Vaihda mul2scanin tilalle taas yhden bitin kerrallaan skannaava lohko ("mul") ja tee sama testi (etsi 50 MHz tarkkuudella suurin kellotaajuus.) Jos 500 MHz, suurin Quartuksen tukema arvo, vielä toimii, voit joutua huijaamaan Quartusta saadaksesi suurempia kellotaajuuksia käyttöösi. Tuplaklikkaa kellogen-lohkoa ja ensimmäisellä sivulla vastaa kysymykseen inclock0:n taajuudesta 25 MHz. Tämä ei vaikuta oikeaan kellotaajuuteen, vaan esim. multiplication factor 12 tuottaa nyt 600 MHz:n kellon, vaikka Actual Settings -kohdassa lukeekin 300 MHz. (Huom. nyt ajoitusanalysaattori ei osaa laskea oikein maksimikellotaajuutta.)
1.8 Millä kellotaajuudella yhden bitin kerrallaan skannaava kertolaskija vielä toimii? 1.9 Mikä on kertolaskijoiden throughput suurimmalla toimivalla kellotaajuudellaan, ts. kuinka monta laskutoimitusta sekunnissa kertolaskijat pystyvät suorittamaan? 1.10 Luottaisitko oikeassa tilanteessa piirin toimintaan näillä kellotaajuuksilla, vai noudattaisitko ajoitusanalysaattorin arviota kriittisen polun viiveestä? Miksi/miksi et? Tehtävä 2: Kombinatorinen kertolaskija ja FPGA:n sisäinen kertolaskija Edellisen tehtävän sekventiaalisen kertolaskijan lisäksi kertolaskija voidaan toteuttaa myös kombinatorisena, jolloin kertolaskuoperaatio ei vie useita kellojaksoja, mutta kriittinen polku on pidempi, mikä johtaa pidempään läpimenoviiveeseen ja pienempään maksimikellotaajuuteen. Nykyaikaisissa FPGA-piireissä on ns. hard macroja eli kiinteitä, monimutkaisempia logiikkayksiköitä, joita tarvitaan usein. Tyypillisimmät tällaiset yksiköt ovat muisti- ja kertolaskijayksiköt. Yksiköt ovat hyvin optimoituja, ja koska ne ovat kiinteitä, ei niiden sisäisestä rakenteesta koidu ylimääräistä reititystai logiikkaviivettä kuten muuten FPGA:lla. Edellisessä tehtävässä purkamassasi paketissa annetaan valmiina kombinatorinen, 5-bittinen kertolaskija comb_5bit_mul.vhd, ja koodi, joka saa synteesityökalun käyttämään sisäistä kertolaskijaa, embedded_mul.vhd. Käynnistä Quartus kuten edellisessä tehtävässä. Avaa projekti comb_vs_emb, joka löytyy samasta hakemistosta edellisen tehtävän tiedostojen kanssa. Projekti sisältää vain lähdetiedostot ilman graafista näkymää ja ilman ylintä tasoa. Klikkaa oikealla näppäimellä tiedostoa comb_5bit_mul.vhd Files-välilehdellä ja valitse Set as Top-Level Entity. Tämä tekee 5-bittisestä kombinatorisesta kertolaskijasta ylimmän tason suunnittelun. Käännä projekti (compile design, CTRL + L). Kun käännös on valmis, tutki Compilation Reportia. 2.1 Kuinka monta logiikkaelementtiä (LE) tarvitaan tähän 5-bittiseen kombinatoriseen kertojaan? Ota esille Timing Analyzer -> tpd nähdäksesi listan kriittisimmistä poluista ajoituksen näkökulmasta. Kriittinen polku, joka heikoimpana lenkkinä määrittää samalla koko kertolaskijan viiveen, on ensimmäisenä listassa. 2.2 Mikä on tämän kertolaskijan viive? Seuraavaksi tutustumme, mitä FPGA-piirille tarkalleen ottaen menee ja mistä viiveet siis johtuvat. Quartuksessa on muutama työkalu, joilla polkuja voidaan tarkastella. RTL Viewer: Avaa RTL Viewer valitsemalla Tools -> Netlist Viewers -> RTL Viewer. RTL Viewer näyttää synteesityökalun VHDL-koodin perusteella tekemän digitaalilogiikan. Lohkojen sisään pääsee tuplaklikkaamalla. Chip Planner: Avaa Chip Planner valitsemalla Tools -> Chip Planner (Floorplan and chip editor). Chip Planner näyttää koko FPGA-piirin ja logiikkaelementtien sijainnin siellä. Valitsemalla "Task: Post- Compilation Editing" (ikkunan oikeasta yläkulmasta) voit nähdä myös reititetyt johtimet keltaisina. Zoomaa lähemmäs tutustuaksesi siihen, miten Fitter (eli Place & Route) on sijoitellut ja reitittänyt logiikkaelementit piirille. Logiikkaelementtiinkin pääsee sisälle. Kun Compilation Reportin ajoitusanalysaattorin polkulistassa klikkaat jotakin polkua, vaikkapa kriittistä polkua, hiiren kakkosnäppäimellä, voit Locate-toiminnon avulla etsiä polun em. työkalujen avulla piiriltä. Kokeile etsiä kriittinen polku RTL Vieweristä ja Chip Plannerista tämän toiminnon avulla.
Seuraavaksi klikkaa kakkosnäppäimellä projektin tiedostoista embedded_mul.vhd:tä ja tee siitä Top- Level Entity. Nyt synteesityökalu käyttää sitä suunnitteluna, ja aiempi vhdl-tiedosto yksinkertaisesti jää käyttämättä. Käännä projekti jälleen (CTRL + L). 2.3 Kuinka monta logiikkaelementtiä tarvitaan, kun käytetään sisäänrakennettua kertolaskijaa? 2.4 Kuinka monta sisäänrakennettua kertolaskijaa piiriin jää vielä jäljelle? 2.5 Mikä on tämän kertolaskijan viive? Katso vielä RTL Vieweristä ja Chip Plannerista, miltä tämäntyyppinen kertolaskija näyttää. 2.6 Kumpaa kertojaa sinä käyttäisit?