Numeerisesti ohjatun oskillaattorin toteutus FPGA:lle ja vertailu avoimen lähdekoodin toteutukseen
Lemmetty, Olli (2021)
Lemmetty, Olli
2021
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. Only for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-04-28
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202104273983
https://urn.fi/URN:NBN:fi:tuni-202104273983
Tiivistelmä
Digitaalitekniikassa tulee usein vastaan tarve muodostaa aaltomuotoisia signaaleja. Yhden ratkaisun aaltomuotoisten signaalien muodostamiseen tarjoaa numeerisesti ohjattu oskillaattori. Rakenteensa takia numeerisesti ohjattu oskillaattori on hyvin mukautuva signaaligeneraattori. Tämän suuren muokattavuuden takia lohkoa käytetään useissa digitaalisissa kommunikaatiojärjestelmissä. Tässä kandidaatintyössä suunnitellaan ja toteutetaan numeerisesti ohjattu oskillaattori -lohko FPGA-alustalle (engl. Field Programmable Gate Array) ja verrataan suunniteltua toteutusta avoimen lähdekoodin toteutukseen.
Numeerisesti ohjatun oskillaattorin suunnittelu aloitetaan käsittelemällä oskillaattorin taustaa ja rakennetta. Numeerisesti ohjattu oskillaattori on yksinkertainen lohko. Sen rakenne koostuu vain kolmesta osasta: vaiherekisteristä, vaiheakkumalaattorista ja hakutaulukosta. Vaiherekisteri ja vaiheakkumalaattori yhdessä vaihesanan avulla määrittävät signaalin taajuuden. Hakutaulukkoon on tallennettu signaalin näytteiden arvot. Digitaalisen järjestelmän, kuten suunnitellun numeerisesti ohjatun oskillaattorin, toiminta pitää mallintaa laitteistokuvauskielellä, jotta se voidaan implementoida FPGA-alustalle. Suunniteltu lohko toteutettiin VHDL-laitteistokuvauskielellä (engl. Very High speed integrated circuit Design Language). Lohkon suunnittelun tavoitteena on luoda vastaavanlainen toiminta kuin avoimen lähdekoodin lohkossa, mutta toteuttaa toiminta käyttämällä neljäsosaa avoimen lähdekoodin hakutaulukoiden koosta. Tämän mahdollistama logiikka on toteutettu suunnitellussa lohkossa tilakoneen avulla. Tilakone muokkaa hakutaulukon näytteitä, siten että neljäsosalla näytteistä saadaan lopputuloksena kokonaisia aaltoja aikaiseksi. Suunnitellun ja avoimen lähdekoodin lohkojen pinta-alaa, suurinta kellotaajuutta ja tehonkulutusta FPGA-alustalla vertaillaan. Näiden lisäksi simuloinnista saatujen tuloksien avulla verrattiin lohkojen luomien signaalien hyvyyttä THD-arvon (engl. Total Harmonic Distortion) avulla.
Mittaustuloksien vertailusta saatiin lopputulemaksi, että suunniteltu lohko käyttää FPGA-alustan hakutauluja ja kiikkuja enemmän kuin avoimen lähdekoodin toteutus, mutta toisaalta suunniteltu lohko säästää BRAM-muistien (engl. Block Random Access Memory) käytössä. Tehonkulutus oli suunnitellulla lohkolla hieman pienempi kuin avoimen lähdekoodin lohkolla. Lohkojen muodostamien signaalien THD-arvot olivat hyvin samanlaiset. Suurimmaksi eroksi lohkojen välillä jäi suurin mahdollinen kellotaajuus. Suunniteltu lohko saavutti 72,8 MHz matalamman kellotaajuuden kuin avoimen lähdekoodin lohko.
Lopputuloksena suunniteltu numeerisesti ohjattu oskillaattori -lohko saavuttaa suunnittelutavoitteet. Samat signaalit saatiin muodostettua vastaavilla signaalien hyvyyksillä kuin avoimen lähdekoodin toteutuksessa.
Numeerisesti ohjatun oskillaattorin suunnittelu aloitetaan käsittelemällä oskillaattorin taustaa ja rakennetta. Numeerisesti ohjattu oskillaattori on yksinkertainen lohko. Sen rakenne koostuu vain kolmesta osasta: vaiherekisteristä, vaiheakkumalaattorista ja hakutaulukosta. Vaiherekisteri ja vaiheakkumalaattori yhdessä vaihesanan avulla määrittävät signaalin taajuuden. Hakutaulukkoon on tallennettu signaalin näytteiden arvot. Digitaalisen järjestelmän, kuten suunnitellun numeerisesti ohjatun oskillaattorin, toiminta pitää mallintaa laitteistokuvauskielellä, jotta se voidaan implementoida FPGA-alustalle. Suunniteltu lohko toteutettiin VHDL-laitteistokuvauskielellä (engl. Very High speed integrated circuit Design Language). Lohkon suunnittelun tavoitteena on luoda vastaavanlainen toiminta kuin avoimen lähdekoodin lohkossa, mutta toteuttaa toiminta käyttämällä neljäsosaa avoimen lähdekoodin hakutaulukoiden koosta. Tämän mahdollistama logiikka on toteutettu suunnitellussa lohkossa tilakoneen avulla. Tilakone muokkaa hakutaulukon näytteitä, siten että neljäsosalla näytteistä saadaan lopputuloksena kokonaisia aaltoja aikaiseksi. Suunnitellun ja avoimen lähdekoodin lohkojen pinta-alaa, suurinta kellotaajuutta ja tehonkulutusta FPGA-alustalla vertaillaan. Näiden lisäksi simuloinnista saatujen tuloksien avulla verrattiin lohkojen luomien signaalien hyvyyttä THD-arvon (engl. Total Harmonic Distortion) avulla.
Mittaustuloksien vertailusta saatiin lopputulemaksi, että suunniteltu lohko käyttää FPGA-alustan hakutauluja ja kiikkuja enemmän kuin avoimen lähdekoodin toteutus, mutta toisaalta suunniteltu lohko säästää BRAM-muistien (engl. Block Random Access Memory) käytössä. Tehonkulutus oli suunnitellulla lohkolla hieman pienempi kuin avoimen lähdekoodin lohkolla. Lohkojen muodostamien signaalien THD-arvot olivat hyvin samanlaiset. Suurimmaksi eroksi lohkojen välillä jäi suurin mahdollinen kellotaajuus. Suunniteltu lohko saavutti 72,8 MHz matalamman kellotaajuuden kuin avoimen lähdekoodin lohko.
Lopputuloksena suunniteltu numeerisesti ohjattu oskillaattori -lohko saavuttaa suunnittelutavoitteet. Samat signaalit saatiin muodostettua vastaavilla signaalien hyvyyksillä kuin avoimen lähdekoodin toteutuksessa.