KANDIDAATINTYÖ Tuukka Junnikkala SÄHKÖTEKNIIKAN KOULUTUSOHJELMA 2015 KANDIDAATINTYÖ Tuukka Junnikkala Ohjaajat: Kari Määttä, Antti Mäntyniemi SÄHKÖTEKNIIKAN KOULUTUSOHJELMA 2015 Junnikkala T. (2015) Kandidaatintyö. Oulun yliopisto, sähkötekniikan osasto, sähkötekniikan koulutusohjelma. Kandidaatintyö, 96 s. TIIVISTELMÄ Tämä kandidaatintyö koostuu Analogiatekniikan työt ja Ohjelmoitava elektroniikka kurssien kirjallisista osista. Analogiatekniikan töiden osuus koostuu suunnitteluharjoitusta edeltävistä kirjallisista esitehtävistä. Niissä perehdytään elektronisten piirien suunnitteluun ja niiden toiminnan varmentamiseen piirisuunnittelutyökalujen avulla. Tarkastelun kohteena ovat pääasiassa yksinkertaiset passiiviset ja aktiiviset komponentit. Ohjelmoitavan elektroniikan kurssissa puolestaan suunniteltiin jaksollisen digitaalisen signaalin kellotaajuutta mittaava laite, joka toteutettiin ohjelmoitavan FPGA-piirin (fieldprogrammable gate array) avulla. Avainsanat: tekniikan kandidaatintyö, analogiatekniikka, digitaalitekniikka, taajuusmittari, field-programmable gate array. Junnikkala T. (2015) Bachelorβs Thesis. University of Oulu, Department of Electrical Engineering, Degree Programme in Electrical Engineering. Bachelorβs Thesis, 96 p. ABSTRACT This Bachelorβs Thesis consists of the written portions for the courses Laboratory Exercises on Analogue Electronics and Programmable Electronics. The analogue electronics portion consists of the written pre-exercises preceding the design exercise. In them one gains more familiarity with designing electronic circuits and how to verify their operation using circuit simulation software. Chiefly simple passive and active components are reviewed. In the Programmable Electronics course the task was to design a device that can measure the frequency of a periodic digital signal. The design was realised using a programmable FPGA (field-programmable gate array) chip. Keywords: Bachelor of Science thesis, analogue electronics, digital electronics, frequency meter, field-programmable gate array. SISÄLLYSLUETTELO TIIVISTELMÄ ABSTRACT SISÄLLYSLUETTELO 1. ANALOGIATEKNIIKAN TYÖT..........................................................................5 1.1. Passiiviset komponentit ja diodit.....................................................................5 1.1.1. Vastusjaon analysoiminen.......................................................................5 1.1.2. AC-kytketyn vastusjaon analysoiminen..................................................7 1.1.3. Alipäästävän vastusjaon analysoiminen................................................10 1.1.4. Puoliaaltotasasuuntaajan analysoiminen...............................................13 1.1.5. Yksinkertaisen AC/DC-muuntimen analysoiminen..............................15 1.1.6. Kaksipuolisen DC-jännitelähteen suunnitteleminen.............................16 1.2. BJT-vahvistin.................................................................................................18 1.2.1. Heikosti biasoidun BJT-vahvistimen analysoiminen............................18 1.2.2. Yhteisemitterikytketyn vahvistinasteen analysoiminen........................25 1.3. Operaatiovahvistin.........................................................................................37 1.3.1. Avoimen silmukan toiminta..................................................................37 1.3.2. Suljetun silmukan toiminta...................................................................39 1.4. Differentiaalipari............................................................................................46 1.4.1. Takaisinkytkemättömän vahvistimen toiminta.....................................46 1.4.2. Takaisinkytketyn vahvistimen toiminta................................................55 2. OHJELMOITAVA ELEKTRONIIKKA..............................................................64 2.1. Vaatimusmäärittely........................................................................................64 2.1.1. Suorituskyky ja reunaehdot...................................................................64 2.1.2. Toimintaperiaate...................................................................................66 2.1.2.1. Taajuuden mittaaminen................................................................66 2.1.2.2. Sisäinen signaaligeneraattori.......................................................67 2.1.3. Käyttöliittymä.......................................................................................68 2.1.4. Testattavuus...........................................................................................68 2.1.5. Toteutettavuusanalyysi..........................................................................68 2.2. Rekisterisiirtotason kuvaus............................................................................69 2.2.1. Rakennelohkot.......................................................................................69 2.2.2. Lohkojen rakenne ja toimintaperiaate...................................................69 2.2.2.1. Ohjausosa.....................................................................................69 2.2.2.2. Taajuusmittari..............................................................................72 2.2.2.3. Signaaligeneraattori.....................................................................73 2.3. Käytännöntoteutus.........................................................................................74 3. LIITTEET.............................................................................................................80 1. ANALOGIATEKNIIKAN TYÖT Tämä ensimmäinen osa kandidaatintyöstä sisältää kuvaukset Analogiatekniikan työt kurssin esitehtävissä esitetyistä kysymyksistä ja vastaukset kuhunkin niistä. Tehtävien tarkoituksena on perehtyä elektronisten piirien suunnitteluun ja niiden toiminnan varmentamiseen piirisuunnittelutyökalujen avulla. Tarkastelun kohteena ovat pääasiassa yksinkertaiset passiiviset ja aktiiviset komponentit. Harjoituksissa vaaditut simuloinnit suoritettiin käyttäen OrCAD-piirisuunnitteluohjelman ilmaista 9.2 Lite versiota. 1.1. Passiiviset komponentit ja diodit 1.1.1. Vastusjaon analysoiminen Tehtävässä 1.1 esitettiin kuvan 1 mukainen kytkentä, jonka DC-toimintapiste eli lähtöjännite ja vastusten läpi kulkeva virta pyydettiin laskemaan, kun jännitelähteen DC-komponentti on 5 V ja AC-jännite 0 V. Vastuksien läpi kulkeva virta saadaan laskettua jakamalla niiden yli oleva jännite vastuksien yhteisresistanssilla: πΌπ·πΆ = ππ·πΆ 5π = β 1,67 ππ΄ π 1 + π 2 1 ππΊ + 2 ππΊ (1) Piirin lähtöjännite puolestaan voidaan laskea vähentämällä viidestä voltista vastuksen R1 yli jäävä jännite: ππππ = ππ·πΆ β π 1 πΌπ·πΆ = 5 π β 1 ππΊ β 1,67 ππ΄ = 3,33 π (2) 6 Kuva 1. Vastusjako. Seuraavaksi tehtävässä pyydettiin tarkistamaan saatu tulos simuloimalla kytkennän DC-toimintapiste. Simulointitulokset on esitetty kuvassa 2 ja ne vastaavat käsin laskettuja arvoja. Toisena simulointina haluttiin suoritettavan transienttianalyysi kymmenen jaksonpituuden ajalta käyttäen signaalilähteen DC-jännitteenä 5 volttia AC-komponentin amplitudin ollessa 1 V ja taajuus 1 kHz. Tulo- ja lähtösignaali on tulostettu kuvaan 3, josta nähdään AC-signaalin amplitudin olevan lähdössä noin 0,67 V. Kuva 2. Vastusjaon DC-toimintapiste. 7 Kuva 3. Vastusjaon tulo- ja lähtöjännite. 1.1.2. AC-kytketyn vastusjaon analysoiminen Kuvan 4 mukaista AC-kytkettyä vastusjakoa pyydettiin analysoimaan tehtävässä 1.2 käyttäen tulosignaalina 1 kHz taajuista sakara-aaltoa, jonka jännite vaihtelee välillä ±2,5 V. Signaalin nousu- ja laskuaika ovat 1 µs, periodi 1 ms, pulssinleveys puolet periodista ja alkamisviive 10 ms. Kuvassa näkyvän DC-jännitelähteen arvo on puolestaan 5 V. Kytkennälle tuli suorittaa transienttianalyysi 50 millisekunnin ajalta ja selittää kuvaajassa havaittava alkutransientti sekä signaalin aaltomuoto. Tulokset ovat nähtävissä kuvassa 5, jossa tulosignaali on sijoitettu ylös ja lähtö sen alapuolelle. 8 Kuva 4. AC-kytketty vastusjako. Kuva 5. AC-kytketyn vastusjaon tulo- ja lähtöjännite. Kuvasta nähdään, että lähtösignaalin DC-taso on signaalin alettua aluksi korkeampi kuin kohdassa 1.1.1. laskettu vastusjaon asettama 3,33 V, mutta se asettuu kohtalaisen nopeasti kyseiselle tasolle. Alkutransientti aiheutuu kytkennässä siitä, että kondensaattori C1 on ehtinyt varautua 10 ms ajan ennen kuin AC-signaalia aletaan 9 syöttää piirin. Tämän takia AC-signaali summautuu aluksi suoraan lähdön DCjännitteen päälle, mutta tarpeeksi monen jatkon kuluttua kondensaattorin varaus päätyy tasapainotilaan ja lähdön DC-taso asettuu kohdalleen. Toisena seikkana huomataan, että sakara-aallon harjat eivät ole lähdössä enää tasahuippuisia, vaan huipun amplitudi pienenee kohti sakaran jälkimmäistä reunaa. Ilmiö johtuu siitä, että kondensaattori tilanteesta riippuen joko purkautuu tai latautuu niin kauan kun AC-signaali pysyy vakioarvossa, vieden lähdön arvoa hiljalleen kohti DC-komponentin jännitettä. Seuraavaksi kytkentää piti myös simuloida kapasitanssin arvoilla 30 µF ja 50 µF. Kyseisten simulointien tulokset on esitetty kuvissa 6 ja 7. Voidaan havaita kondensaattorin arvon kasvattamisen pidentävän alkutransientin kestoa. Tämä johtuu siitä, että kapasitanssin kasvaessa kondensaattoriin voidaan kerätä suurempi varaus ja tämän ylimääräisen varauksen purkautuminen vaatii kauemmin kuin pienemmän kapasitanssin kun tilanne on muuten identtinen. Positiivisena puolena suuremman kondensaattorin käyttäminen parantaa sakara-aallon aaltomuodon säilymistä, kuten kuvia vertailemalla voidaan todeta. Amplitudin hitaampi pieneneminen johtuu niin ikään siitä, että suuremman kondensaattorin purkaminen ja lataaminen vaatii pidemmän ajanjakson loiventaen täten lähdön huippujen vaimenemista. Kuva 6. AC-kytketyn vastusjaon tulo- ja lähtöjännite kapasitanssin arvolla 30 µF. 10 Kuva 7. AC-kytketyn vastusjaon tulo- ja lähtöjännite kapasitanssin arvolla 50 µF. 1.1.3. Alipäästävän vastusjaon analysoiminen Tehtävässä 1.3 tarkasteltiin kuvan 8 vastusjakoa, jossa maata vasten olevan vastuksen rinnalle on kytketty kondensaattori. Piirille haluttiin suoritettavan kolme transienttianalyysiä signaalin taajuuksilla 1 kHz, 10 kHz ja 100 kHz simulointien kestäessä viiden sinijakson verran. Signaalilähteen DC- ja AC-jännitteiden arvot olivat samat kuin kohdassa 1.1.1. eli 5 V ja 1 V. Simulointien tulokset ovat nähtävillä kuvissa 9, 10 ja 11 tulostettuna samalle amplitudiasteikolle vertailun helpottamiseksi. 11 Kuva 8. Alipäästävä vastusjako. Kuva 9. Alipäästävän vastusjaon lähtöjännite taajuudella 1 kHz. 12 Kuva 10. Alipäästävän vastusjaon lähtöjännite taajuudella 10 kHz. Kuva 11. Alipäästävän vastusjaon lähtöjännite taajuudella 100 kHz. 13 Kuvista nähdään lähtösignaalin amplitudin pienenevän taajuuden kasvaessa. Ilmiö johtuu piirissä olevasta kondensaattorista, jonka impedanssi pienenee taajuuden kasvaessa lähestyen oikosulkua mentäessä riittävän suurille taajuuksille. Koska kondensaattorin toinen puoli on kytketty maihin, lähdön jännite lähenee maapotentiaalia taajuuden kasvaessa. Transienttianalyysien lisäksi piirille ajettiin AC-analyysi taajuusalueella 1 Hzβ 10 MHz käyttäen edelleen samoja DC- ja AC-jännitteitä. Kuvaan 12 on tulostettu saatu amplitudivaste logaritmiselle taajuusakselille. Kuvasta havaitaan lähdön vaimenevan voimakkaasti noin kymmentä kilohertsiä suuremmilla taajuuksilla. Kyseessä on siis alipäästävä piiri ja sen rajataajuus muodostuu kondensaattorin arvosta yhdessä vastuksien rinnankytkennän kanssa. Kuva 12. Alipäästävän vastusjaon lähdön taajuusvaste. 1.1.4. Puoliaaltotasasuuntaajan analysoiminen Kuvassa 13 näkyy yksinkertainen diodin ja vastuksen kytkentä johon kytketyn jännitelähteen DC-jännite on 0 V, AC-jännite 5 V ja taajuus 1 kHz. Piirin transienttivastetta simuloitiin 5 ms ja tulokset on esitetty kuvassa 14. Tehtävässä 1.4 kysyttiin, minkä käytännön funktion kytkentä suorittaa sekä kuinka suuri on tulon ja lähdön positiivisen puolijakson jännite-ero ja mistä se aiheutuu. 14 Kuva 13. Puoliaaltotasasuuntaaja. Kuva 14. Puoliaaltotasasuuntaajan tulo- ja lähtöjännite taajuudella 1 kHz. Kuten simulointituloksista voidaan nähdä, kytkentä toimii puoliaaltotasasuuntaajana. Käyttäytyminen johtuu piirissä olevasta diodista, joka johtaa vain tulosignaalin positiivisten puolijaksojen aikana diodin ollessa myötäsuuntaan kytketty. Lähtösignaalin huippuarvo on noin 4,36 V, joten lähdön ja tulon jännite-ero on noin 0,64 V. Se aiheutuu diodin yli jäävästä kynnysjännitteestä, joka on tyypillisesti puolijohde- 15 diodeilla luokkaa 0,6 Vβ¦0,7 V. 1.1.5. Yksinkertaisen AC/DC-muuntimen analysoiminen Edellisen tehtävän kytkentään lisätään tehtävässä 1.5 kondensaattori kuvan 15 mukaisesti ja kysytään kuinka lähtösignaali muuttuu edellisestä tilanteesta. Lisäksi halutaan vastaus siihen mihin kytkentää voidaan käyttää. Kuva 15. Kondensaattorilla varustettu puoliaaltotasasuuntaaja. Piirin tulo- ja lähtösignaali ovat nähtävillä kuvassa 16, josta voidaan havaita lähdön laskevan lisätyn kondensaattorin takia paljon hitaammin tulosignaalin alkaessa lähestyä nollaa sinin positiivisen huipun jälkeen. Lähtö jatkaa hiljalleen vähenemistään, kunnes tulojännite nousee taas tarpeeksi korkeaksi ladaten kondensaattoria seuraavaan positiiviseen huippuun saakka. Tuloksesta voidaan todeta, että tarkasteltavaa kytkentää on mahdollista käyttää erittäin yksinkertaisena tapana tuottaa vaihtojännitteestä tasajännitettä, jossa esiintyy jonkin verran rippeliä. 16 Kuva 16. Kondensaattorilla varustetun puoliaaltotasasuuntaajan tulo- ja lähtöjännite taajuudella 1 kHz. 1.1.6. Kaksipuolisen DC-jännitelähteen suunnitteleminen Tehtävässä 1.6 pyydettiin suunnittelemaan kokoaaltotasasuuntaajaan perustuva kaksipuolinen DC-jännitelähde, jossa on kolme ulostuloa: +, - ja maa. Jännitelähteen tuloon kytketään väliulosotolla varustettu verkkovirtamuuntaja, joka muuntaa 50 Hz taajuisen 230 V:n suuruisen jännitteen vaihtojännitteeksi, jonka amplitudi on 15 V. Piirisimulaattorissa muuntajan tilalla käytettiin kahta 15 voltin sinijännitelähdettä. Tehtävässä vaadittiin mitoittamaan jännitelähteen suodatinkondensaattorit siten, että lähtöjännite ei 100 mA:n maksimikuormituksellakaan laske alle 12 voltin. Simuloinneissa kuormana käytettiin virtalähteitä. Suodatinkondensaattoreiden mitoituksessa käytetään hyväksi tietoa siitä, että piirin aikavakion ollessa paljon suurempi kuin puolet jakson periodista, lähtöjännitteen voidaan olettaa laskevan lähes lineaarisesti. Näin ollessa voidaan rippelijännitteelle käyttää approksimaatiokaavaa πππππππ β πΌππππ , 2ππΆ (3) 17 josta ratkaisemalla C voidaan laskea sopiva kapasitanssin arvo kondensaattoreille: πΆβ πΌππππ 100 ππ΄ = β 430 ππΉ 2ππππππππ 2 β 50 π»π§ β (15 π β 0,7 π β 12 π) (4) Neljällä diodilla ja kahdella samansuuruisella suodatinkondensaattorilla toteutetun DC-jännitelähteen piirikaavio on esitetty kuvassa 17. Kuva 17. Kokoaaltotasasuuntaajaan perustuva kaksipuolinen DC-jännitelähde. Kytkennälle suoritetun transienttianalyysin tulokset on tulostettu kuvaan 18 muutaman sinijakson pituudelta. Kuvaajasta nähdään jännitelähteen molempien lähtöjen täyttävän niille asetetun vaatimuksen pysyä absoluuttiselta arvoltaan suurempana kuin 12 V. 18 Kuva 18. Suunnitellun jännitelähteen lähtöjännitteet muutaman jakson ajalta. 1.2. BJT-vahvistin 1.2.1. Heikosti biasoidun BJT-vahvistimen analysoiminen Tehtävässä 2.1 tarkastelun kohteena oli yksinkertainen BJT-vahvistinkytkentä, jonka piirikaavio on esitetty kuvassa 19. Ensimmäisenä tehtävänä pyydettiin laskemaan BJT-vahvistimen toimintapiste eli IC ja VCE olettaen virtavahvistuskertoimen Ξ² olevan 100. Kollektorivirran selvittämiseksi lasketaan ensin vastuksen RB läpi kulkeva virta, joka on samalla vahvistimen kantavirta: πΌπ΅ = 10 π β 0,7 π = 9,3 ππ΄ 1 ππΊ (5) Kysytty kollektorivirta on yksinkertaisesti virtavahvistus kertaa kantavirta, josta saadaan tulokseksi 0,93 mA. Koska vahvistimen emitteri on maapotentiaalissa, VCE on tässä tapauksessa sama kuin kollektorilla oleva jännite, joka on helppo laskea nyt kun kollektorivirta on tiedossa: ππΆπΈ = 10 π β π πΆ πΌπΆ = 10 π β 1,3 ππΊ β 0,93 ππ΄ β 8,8 π (6) 19 Toimintapiste piti lisäksi varmentaa simuloimalla se piirisimulaattorilla. Saatu tulos on näkyvillä kuvassa 20 ja toimintapiste vastaa laskettuja arvoja. Kuva 19. Yksinkertaisesti biasoitu BJT-vahvistin. Kuva 20. Vahvistinkytkennän toimintapiste virtavahvistuksen arvolla 100. Seuraavaksi tehtävässä pyydettiin arvioimaan toimintapisteen perusteella lähtösignaalin lineaarista maksimiamplitudia. Alhaaltapäin rajan lähtösignaalin maksimiamplitudille asettaa transistorin pysyminen poissa saturaatiosta, eli kollektorijännitteen täytyy pysyä vähintään noin 0,2 V emitterijännitteen yläpuolella. Ylhäältä- 20 päin rajan puolestaan asettaa käyttöjännite 10 V, jonka yli kollektorijännite ei pysty menemään. Kollektorin DC-jännite on asettunut tasolle 8,8 V, joten käyttöjännite on tässä tilanteessa lähdön maksimiamplitudia rajoittava tekijä sen tullessa aiemmin vastaan kuin transistorin saturoituminen. Lähtösignaalin amplitudi voi siis maksimissaan olla noin 1,2 V ennen kuin sen positiiviset huiput alkavat leikkautumaan. Transistorin virtavahvistuskertoimeksi piti tämän jälkeen vaihtaa arvo 500. Piiri simuloitiin uudestaan ja saatu toimintapiste on tulostettu kuvaan 21. Kollektorivirta on nyt viisinkertainen aiempaan verrattuna ja VCE on pudonnut 8,8 voltista noin neljään volttiin. Tehtävässä kysytään kuinka muutos vaikuttaa lähtösignaaliin. Tarkastelemalla kytkentää voidaan johtaa piirin lähtöjännitteelle yhtälö π£ππ’π‘ = βππ (π πΆ βπ πΏ ) = β π½πΌπ΅ (π πΆ βπ πΏ ) π£ππ . ππ (7) Johdettua lauseketta tarkastelemalla voidaan todeta lähtöjännitteen muuttuvan suoraan verrannollisesti virtavahvistukseen nähden. Koska virtavahvistus nostettiin viisinkertaiseksi, myös lähtöjännite on nyt viisinkertainen aiempaan verrattuna. Tehtävässä tiedustellaankin seuraavaksi, mitä ongelmia voi aiheutua siitä, että käytetään kuvan 19 mukaista biasointikytkentää. Ongelmaksi muodostuu se, että valmistettaessa useita piirejä käyttäen samantyyppisiä BJT-vahvistimia, kunkin piirin lähdön signaalitaso on todennäköisesti keskenään eriävä ja ennalta arvaamaton niiden erisuurien virtavahvistuksien takia. Lisäksi jos virtavahvistuskerroin muuttuu esim. lämpötilamuutoksen takia, myös vahvistimen vahvistus muuttuu. Kuva 21. Vahvistinkytkennän toimintapiste virtavahvistuksen arvolla 500. 21 Tehtävässä täytyi seuraavaksi palauttaa virtavahvistus arvoon 100 ja suorittaa simuloinnit 10 kHz:n tulosignaalilla amplitudin arvoilla 1 mV ja 20 mV. Lähtösignaalien muotoa pyydettiin vertaamaan keskenään. Kyseiset signaalit ovat nähtävillä kuvissa 22 ja 23. Amplitudin ollessa 1 mV lähdössä näkyy puhdas sinisignaali, mutta kun tulo nostetaan 20 millivolttiin, lähdön aaltomuoto on selvästi vääristynyt. Havaittu ilmiö johtuu siitä, että tulosignaali on niin suuri että transistori ei toimi enää tarpeeksi pienellä alueella ollakseen riittävän lineaarinen. Tästä seuraa, että signaalin kokema vahvistus riippuu sen kunkin hetkisestä amplitudista muokaten lähdössä näkyvän signaalin muotoa. Kuva 22. Vahvistinkytkennän tulo- ja lähtöjännite tulosignaalin amplitudilla 1 mV. 22 Kuva 23. Vahvistinkytkennän tulo- ja lähtöjännite tulosignaalin amplitudilla 20 mV. Tehtävän seuraavassa kohdassa pyydettiin laskemaan kytkennän tulo- ja lähtöimpedanssi. Lähtöimpedanssi on erittäin helppo selvittää, koska keskitaajuuksilla kondensaattorin CC ollessa periaatteessa oikosulussa, se on yksinkertaisesti vastuksen RC ja kollektorille päin katsottaessa näkyvän impedanssin rinnankytkennän arvo. Koska kollektorilla näkyvä impedanssi on erittäin suuri, voidaan approksimoida lähtöimpedanssin olevan yksinkertaisesti RC eli 1,3 kΞ©. Tuloimpedanssin selvittämiseksi toimintataajuuksilla sovelletaan transistorin kannan solmupisteeseen Kirchhoffin virtalakia ja siitä ratkaistaan tulojännitteen ja -virran osamäärä: π£ππ π£ππ + π π΅ (π½ + 1)ππ 1 πΌπ΅ β1 1 9,3 ππ΄ β1 =( + ) =( + ) β 2,8 ππΊ π π΅ ππ 1 ππΊ 26 ππ πππ = β πππ π£ππ = πππ (8) Lasketut tulo- ja lähtöimpedanssin arvot tuli myös varmentaa simulointien avulla. Tuloimpedanssi simuloitiin jakamalla jännitelähteen jännite piirin siitä ottamalla virralla. Lähtöimpedanssi puolestaan saatiin kytkemällä jännitelähde kuormavastuksen RL tilalle ja asettamalla tulossa olevan jännitelähteen DC- ja AC-jännite nollaksi. Simuloidut impedanssit näkyvät kuvissa 24 ja 25 ja ne vastaavat laskettuja arvoja. 23 Kuva 24. Piirin tuloimpedanssi. Kuva 25. Piirin lähtöimpedanssi. 24 Edellä käytetyn ideaalisen transistorin rinnalle täytyi lopuksi kytkeä kondensaattorit CΟ = 4 pF ja Cµ = 1 pF mallintamaan kantaβemitteri- ja kantaβkollektori -liitosten välisiä hajakapasitansseja ja piirin taajuusvaste pyydettiin laskemaan. Alarajataajuuden laskemisessa käytetään siihen vaikuttavien kondensaattoreiden CB ja CC aikavakioita: π1,πΏ = πΆπ΅ [π π΅ β(π½ + 1)ππ ] β 1 ππΉ β 2,79 ππΊ = 2,79 ππ (9) π2,πΏ = πΆπΆ (π πΆ + π πΏ ) β 1,00 π (10) ππΏ β 1 1 1 ( + ) β 57 π»π§ 2π π1,πΏ π2,πΏ (11) Ylärajataajuuteen puolestaan vaikuttaa vain kapasitanssi Cµ, koska korkeilla taajuuksilla kondensaattori CB vastaa oikosulkua ja CΟ näkee näin ollen molemmilla puolillaan maapotentiaalin. Kapasitanssiin Cµ liittyvä aikavakio on ππ» = πΆπ (π πΆ βπ πΏ ) β 1,30 ππ (12) ja näin ollen kytkennän ylärajataajuudeksi saadaan ππ» = 1 β 123 ππ»π§. 2πππ» (13) Viimeinen taajuusvasteen määrittämiseen tarvittava tieto on vahvistus keskitaajuuksilla. Vahvistus saadaan jakamalla edellä esitetty yhtälö (7) piirin lähtöjännitteelle puolittain tulojännitteellä, jolloin saadaan π΄π = π£ππ’π‘ π½πΌπ΅ (π πΆ βπ πΏ ) = (β) β (β)46,4 β‘ 33,3 ππ΅, π£ππ ππ (14) missä miinusmerkki tarkoittaa sitä, että kyseessä on vaiheen kääntävä vahvistin. Laskettu taajuusvaste piti myös tarkistaa simuloinnin avulla ja tehtävässä kysyttiin kuinka taajuusvaste muuttuu verrattuna ideaalisen transistorin tapaukseen. Simuloitu taajuusvaste on tulostettu kuvaan 26 ja sen ominaisuudet vastaavat laskettuja arvoja. Ideaalisen transistorin tapaukseen verrattuna taajuusvasteella on pelkän alarajataajuuden lisäksi nyt myös ylärajataajuus. 25 Kuva 26. Hajakapasitansseilla varustetun piirin taajuusvaste. 1.2.2. Yhteisemitterikytketyn vahvistinasteen analysoiminen Tehtävässä 2.2 tarkasteltiin kuvan 27 mukaista yhteisemitterikytkettyä BJT-vahvistinta. Kuten edellisessä tehtävässä, transistorin virtavahvistuskertoimeksi asetettiin 100 ja kytkennän analysoiminen aloitettiin laskemalla vahvistimen toimintapiste. Ensimmäisenä lasketaan BJ-transistorin kannalla oleva jännite: 10 π β ππ΅ ππ΅ β 0,7 π ππ΅ = π π΅2 ( β ) (π½ + 1)π πΈ1 π π΅1 10 π 0,7 π + π π΅1 (π½ + 1)π πΈ1 β ππ΅ = β 3,17 π 1 1 1 + + π π΅1 π π΅2 (π½ + 1)π πΈ1 (15) Emitterin jännite on yksinkertaisesti kannan jännite miinus diodin kynnysjännite ππΈ = ππ΅ β 0,7 π = 2,47 π, jonka avulla on helppo laskea emitterivirta: (16) 26 πΌπΈ = ππΈ = 2,47 ππ΄ π πΈ1 (17) Ensimmäiseen kysyttyyn arvoon IC päästään nyt käsiksi käyttäen hyväksi tietoa siitä, että kollektorivirta on parametri Ξ± kertaa emitterivirta, jolloin saadaan kollektorivirraksi πΌπΆ = πΌπΌπΈ = π½ πΌ β 2,45 ππ΄. π½+1 πΈ (18) Seuraava looginen askel on laskea kollektorilla oleva jännite ja sen avulla päästään toiseen kysyttyyn arvoon, joka on kollektoriβemitteri -jännite: ππΆ = 10 π β π πΆ πΌπΆ β 6,82 π (19) ππΆπΈ = ππΆ β ππΈ = 4,35 π (20) Tulos piti myös tarkistaa piirisimulaattorilla. Simuloitu toimintapiste näkyy kuvassa 28 ja saadut arvot ovat lähellä käsin laskettuja arvoja. Kuva 27. Yhteisemitterikytketty BJT-vahvistin. 27 Kuva 28. Yhteisemitterikytketyn vahvistimen DC-toimintapiste. Vahvistimelle piti edellistä tehtävää mukaillen laskea myös sen tulo- ja lähtöimpedanssi. Molemmat ominaisuudet haluttiin myös simuloitavan ja saatuja arvoja pyydettiin vertaamaan kohdan 1.2.1. heikosti biasoidun vahvistimen vastaaviin arvoihin. Toimintataajuuksilla tuloimpedanssi muodostuu vastuksien RB1 ja RB2 rinnankytkennästä rinnan transistorin kannalle päin katsottaessa näkyvän impedanssin kanssa. Piensignaalimallin resistanssi re ja emitterillä olevat impedanssit näkyvät erisuurista virroista johtuen Ξ²+1 -kertaisina kannalta päin katsottuna. Tarpeeksi alhaisilla taajuuksilla emitterillä näkyy vain vastus RE1, koska kondensaattori CE edustaa tällöin erittäin suurta impedanssia. Taajuuden kasvaessa kondensaattori alkaa kuitenkin johtaa ja suurilla toimintataajuuksilla emitterillä näkyy vastuksien RE1 ja RE2 rinnankytkentä. Näiden tietojen avulla voidaan laskea arvio tuloimpedanssille alhaisilla ja korkeilla toimintataajuuksilla: πππ,πΏ = π π΅1 βπ π΅2 β(π½ + 1)(ππ + π πΈ1 ) β 6,3 ππΊ (21) πππ,π» = π π΅1 βπ π΅2 β(π½ + 1)(ππ + π πΈ1 βπ πΈ2 ) β 4,0 ππΊ (22) Vahvistinkytkennän lähtöimpedanssin voi sanoa olevan yksinkertaisesti vastuksen RC arvo eli 1,3 kΞ©, koska BJ-transistorin kannalle päin katsottaessa näkyy erittäin suuri impedanssi, joka vaikuttaa vastuksen RC rinnalla erittäin vähän piirin lähtöimpedanssiin. 28 Kummankin impedanssin simuloinnit suoritettiin vastaavalla tavalla kuin edellisessä tehtävässä ja saadut kuvaajat on tulostettu kuviin 29 ja 30. Käyriä tarkastelemalla voidaan todeta simuloitujen impedanssien vastaavan laskettuja arvoja. Vertaamalla tuloksia heikosti biasoidun piirin tapaukseen nähdään lähtöimpedanssin pysyneen samana, mutta tuloimpedanssin kasvaneen noin 2,8 kΞ©:sta yli neljään kiloohmiin koko toiminta-alueella. Kuva 29. Yhteisemitterikytketyn vahvistimen tuloimpedanssi. 29 Kuva 30. Yhteisemitterikytketyn vahvistimen lähtöimpedanssi. Seuraavaksi laskettiin kytkennän jännitevahvistus. Koska emitterin AC-virta on muotoa ππ = π£ππ ππ + π πΈ1 βπ πΈ2 (23) ππ = πΌππ , (24) ja kollektorivirta saadaan kytkennän lähtöjännitteelle johdettua yhtälö π£ππ’π‘ = β(π πΆ βπ πΏ )ππ = β πΌ(π πΆ βπ πΏ ) π£ . ππ + π πΈ1 βπ πΈ2 ππ (25) Jakamalla yhtälö puolittain tulojännitteellä saadaan jännitevahvistukseksi π΄π = π£ππ’π‘ π½ π πΆ βπ πΏ = (β) β β (β)12,7 β‘ 22,1 ππ΅. π£ππ π½ + 1 ππ + π πΈ1 βπ πΈ2 (26) 30 Tulos pyydettiin tarkistamaan simuloimalla ja saatu vahvistus on luettavissa kuvasta 31, josta nähdään 1 mV:n signaalin tuottavan lähdössä noin 12,5 mV:n vastakkaisvaiheisen jännitteen, joka vastaa laskettua arviota. Kuva 31. Vahvistinkytkennän tulo- ja lähtöjännite taajuudella 10 kHz. Ohjeissa haluttiin seuraavaksi nostaa virtavahvistuskerroin arvoon 500, kuten tehtiin edellisessä tehtävässä ja simuloida toimintapiste uudelleen. Lisäksi pyydettiin vertaamaan tuloksia heikosti biasoidun piirin tapaukseen. Kuvassa 32 näkyy saatu uusi DC-toimintapiste ja kun sitä verrataan edelliseen tulokseen, voidaan todeta toimintapisteen muuttuneen hieman, mutta ei läheskään yhtä radikaalisti kuin heikosti biasoidussa vahvistimessa. 31 Kuva 32. Vahvistimen toimintapiste virtavahvistuksen ollessa 500. Toimintapisteen simuloinnin jälkeen virtavahvistus palautettiin sen alkuperäiseen arvoon ja kytkennälle suoritettiin transienttianalyysi tulosignaalin amplitudin ollessa 100 mV. Kuten kuvasta 33 nähdään, vahvistin pystyy vahvistamaan signaalin ongelmitta. Tehtävässä kysytäänkin miksi näin on, kun edellisen tehtävän eritavalla biasoitu vahvistin ei kykene samaan. Vastaus kysymykseen käy selväksi, kun tarkastellaan vahvistinpiirin emitteriä. Edellisessä tehtävässä emitteri oli kytketty maahan, joten transistorin kannan ja emitterin välinen AC-jännite oli suoraan piirin tulojännite. Nyt tarkasteltavassa biasointitavassa emitterillä on kuitenkin kaksi vastusta eikä emitterijännite ole enää vakio, vaan se riippuu tulosta. Kuten aiemmin tehtävässä todettiin, emitterin AC-virralle voidaan johtaa yhtälö π£ππ ππ + π πΈ1 βπ πΈ2 (27) π£π = (π πΈ1 βπ πΈ2 )ππ . (28) ππ = ja lisäksi tiedetään, että Näiden kahden tiedon avulla saadaan johdettua vbe:ksi 32 π£ππ = π£ππ β π£π = (1 β π πΈ1 βπ πΈ2 ) π£ β 0,104π£ππ . ππ + π πΈ1 βπ πΈ2 ππ (29) Jännite vbe on nyt siis vain noin kymmenesosa tulojännitteestä, mikä tarkoittaa että tulojännite voi olla noin kymmenenkertainen heikosti biasoidun piirin tapaukseen verrattuna ennen kuin bipolaaritransistorin epälineaarisuus asettuu ongelmaksi. Tämä selittää miksi 100 mV:n signaali vahvistuu ongelmitta kun kohdan 1.2.1. tapauksessa jo 20 mV:n signaali vääristyi näkyvästi. Kuva 33. Tulo- ja lähtöjännite taajuudella 10 kHz tulojännitteen ollessa 100 mV. Seuraavaksi tehtävässä haluttiin, että kuormavastus R L muutetaan kollektorivastuksen RC suuruiseksi. Kytkentä tuli sitten simuloida ja tehtyjen havaintojen perusteella pyydettiin selittämään kuinka RC tulisi mitoittaa suhteessa kuormavastuksen arvoon. Simulointitulos on tulostettu kuvaan 34 ja siitä nähdään piirin vahvistuksen pudonneen noin puoleen siitä mitä se oli kuvassa 31. Tarkastelemalla edellä lausekkeessa 26 piirille johdettua jännitevahvistusta, nähdään että vahvistimen vahvistus on kollektorilla oleva resistanssi jaettuna emitterillä olevalla resistanssilla. Kollektorilla on kollektorivastuksen ja kuormavastuksen rinnankytkentä. Kuormavastuksen ollessa erittäin suuri verrattuna kollektorivastukseen kollektorilla näkyvä impedanssi on noin RC. Kuitenkin jos kuormavastus on samansuuruinen kuin RC, kollektorilla oleva resistanssi puolittuu ja näin ollen myös vahvistus putoaa puoleen. Jotta signaali vaimenisi mahdollisimman vähän, vastuksen RC tulee täten olla mahdollisimman pieni 33 suhteessa kuormaimpedanssiin. Kuva 34. Tulo- ja lähtöjännite kuormavastuksen ollessa 1,3 kΞ©. Kuormavastus palautettiin edellisen simuloinnin jälkeen takaisin alkuperäiseen arvoonsa ja lähtökondensaattorin CC arvo vaihdettiin 10 pF:iin ja piirille ajettiin uusi transienttianalyysi, jonka tulokset näkyvät kuvassa 35. Todetaan kondensaattorin pienentämisen vähentäneen tulon ja lähdön välistä vaihe-eroa sekä vaimentaneen kytkennästä saatavaa vahvistusta. Ilmiö johtuu siitä, että kondensaattori aiheuttaa piirissä ylipäästävän vasteen ja sen arvon muuttaminen siirtää sen aiheuttaman nurkkataajuuden 0,16 hertsistä noin 16 kilohertsiin, jolloin sen vaikutus alkaa näkyä käytetyssä 10 kHz:n testisignaalissa. 34 Kuva 35. Tulo- ja lähtöjännite kondensaattorin CC arvolla 10 pF. Seuraavaa simulointia varten kondensaattorin CC arvo palautettiin takaisin yhteen mikrofaradiin ja signaaligeneraattorin lähtöön lisättiin 1 kΞ©:n vastus kuvaamaan sen lähtöimpedanssia. Kytkennän jännitevahvistus selvitettiin samalla tavalla kuin aiemmin käyttäen 10 kHz:n tulosignaalia ja tulokset on esitetty kuvassa 36. Kun kuvaajaa verrataan kuvaan 31, nähdään vahvistuksen pudonneen noin kahdestatoista ja puolesta lähelle kymmentä. Signaalin vaimeneminen johtuu signaalilähteen lähtöresistanssin ja vahvistinkytkennän tuloimpedanssin muodostamasta jännitejaosta, jonka vaikutusta voidaan vähentää kasvattamalla piirin tuloimpedanssia. Simuloinnin tulos pyydettiin varmentamaan laskutoimituksin käyttäen apuna kytkennän tuloimpedanssia. Koska piirin jännitevahvistus ideaalisen signaalilähteen tapauksessa on jo laskettu aiemmin, se tarvitsee vain kertoa tulossa tapahtuvan vaimenemisen vaikutuksella: π΄π = πππ,π» 4039 πΊ π΄π,πππππ = β (β12,67) β β10,2 πππ,π» + π π 4039 πΊ + 1 ππΊ Laskettu arvo ja simulointitulos siis tukevat toisiaan. (30) 35 Kuva 36. Tulo- ja lähtöjännite kun piirissä mukana lähdeimpedanssi. Seuraavaksi signaaligeneraattorin lähtöresistanssi poistettiin kytkennästä ja piirin alarajataajuus pyydettiin selvittämään sekä laskemalla että suorittamalla AC-analyysi välillä 100 Hzβ¦100 kHz. Kukin kolmesta piirissä olevasta kondensaattorista vaikuttaa alarajataajuuteen ja niihin liittyvät aikavakiot saadaan selville tarkastelemalla niiden näkemiä resistansseja muiden kondensaattoreiden ollessa oikosuljettuina: π1,πΏ = πΆπ΅ [π π΅1 βπ π΅2 β(π½ + 1)(ππ + π πΈ1 βπ πΈ2 )] β 4,04 ππ (31) π2,πΏ = πΆπΆ (π πΆ + π πΏ ) β 1,00 π (32) π3,πΏ = πΆπΈ (π πΈ2 + ππ βπ πΈ1 ) β 0,110 ππ (33) Kun lasketaan aikavakioiden yhteisvaikutus, saadaan kytkennän alarajataajuudeksi ππΏ β 1 1 1 1 ( + + ) β 1,49 ππ»π§. 2π π1,πΏ π2,πΏ π3,πΏ (34) Pyydetyn taajuusanalyysin tulos käy ilmi kuvassa 37 ja siitä nähdään alarajataajuuden -3 dB:n pisteen olevan noin 1,44 kHz, mikä vastaa laskettua tulosta. 36 Kuva 37. Yhteisemitterikytketyn vahvistimen alarajataajuus. Viimeisenä yhteisemitterikytkettyyn BJT-vahvistimeen liittyvänä tehtävänä vastuksen RE2 arvo piti vaihtaa 10 Ξ©:iin ja kuormavastuksen RL arvo 200 Ξ©:iin, jolloin kytkennän AC-vahvistus on edelleen samaa suuruusluokkaa kuin aiemmissa kohdissa. Kytkentä piti simuloida aikatasossa ja simuloinnin antamat käyrät on esitetty kuvassa 38, josta nähdään vahvistuksen olevan noin 6,5 ja lähtö on selvästi kokenut pientä vaihesiirtoa. Laskemalla uudet komponenttiarvot huomioonottaen odotettavissa oleva vahvistus keskitaajuuksilla käyttäen samaa kaavaa kuin aiemmin, saadaan tulokseksi noin 8,4, mikä tarkoittaa saadun jännitevahvistuksen olevan noin kaksi desibeliä odotettua pienempi. Lähdön lievästä vaiheen siirtymisestä voidaan päätellä ilmiön todennäköisesti liittyvän kytkennän päästökaistan sijaintiin taajuustasossa. Kun lasketaan aiemman kohdan tapaan kytkennän alarajataajuus ottaen huomioon uudet RE2:n ja RL:n arvot, saadaan tulokseksi 8,3 kHz, joka on tarpeeksi lähellä käytettyä 10 kHz:iä aiheuttaakseen signaalin vaimenemista. 37 Kuva 38. Tulo- ja lähtöjännite taajuudella 10 kHz RE2:n ollessa 10 Ξ© ja RL:n 200 Ξ©. 1.3. Operaatiovahvistin 1.3.1. Avoimen silmukan toiminta Tehtävässä 3.1 haluttiin analysoitavan kuvan 39 mukaista ideaalisilla jänniteohjatuilla jännitelähteillä ja passiivisilla komponenteilla toteutettua operaatiovahvistimen sijaiskytkentää. Kytkennälle piti laskea sen avoimen silmukan vahvistus ja napataajuudet, sekä ajaa AC-analyysi ja tulostaa saadut Bode-kuvaajat. Kuva 39. Operaatiovahvistimen sijaiskytkentä. Piirin siirtofunktio voidaan johtaa seuraten seuraavia vaiheita: 38 π£πΈ1,πππ = 1000π£πΌπ π£πΈ2,πΌπ = (35) ππΆ1 1000π£πΌπ π£πΈ1,πππ = ππΆ1 + π 1 π π 1 πΆ1 + 1 (36) π£πΈ2,πππ = 1000π£πΈ2,πΌπ (37) ππΆ2 106 π£πΌπ π£πΈ2,πππ = (π π 1 πΆ1 + 1)(π π 2 πΆ2 + 1) ππΆ2 + π 2 π£πππ 106 β π»(π ) = = (π π 1 πΆ1 + 1)(π π 2 πΆ2 + 1) π£πΌπ π£πππ = π£πΈ3,πΌπ = (38) Siirtofunktiossa esiintyvä termi 106 on kytkennän avoimen silmukan DC-vahvistus, joka on desibeleinä ilmaistuna 120 dB. Operaatiovahvistimen sijaiskytkennällä on kaksi napaa, joiden taajuudet ovat 1 1 = β 10,6 π»π§ 2ππ 1 πΆ1 2π β 1 ππΊ β 15 ππΉ (39) 1 1 = β 106 ππ»π§. 2ππ 2 πΆ2 2π β 1 ππΊ β 1,5 ππΉ (40) ππ1 = ja ππ2 = Saadut Bode-kuvaajat on esitetty kuvassa 40 ja ne tukevat yllä laskettuja arvoja. 39 Kuva 40. Operaatiovahvistimen sijaiskytkennän Bode-kuvaajat. 1.3.2. Suljetun silmukan toiminta Tehtävässä 3.2 edellisen tehtävän operaatiovahvistimeen lisätään takaisinkytkentä kuvan 41 esittämällä tavalla. Vastuksien R3 ja R4 arvot pyydettiin valitsemaan siten, että vahvistus asettuu 20 dB:iin. Koska kyseessä on suora vahvistin, sen suljetun silmukan vahvistus on π΄ππ = 1 + π 3 = 10 β‘ 20 ππ΅, π 4 (41) josta saadaan vastuksien arvoille yhtälö π 3 = 9π 4 . (42) Valitsemalla vastuksen R4 arvoksi 1 kΞ© saadaan R3:n arvoksi 9 kΞ©. Kytkentä pyydettiin simuloimaan näillä komponenttiarvoilla ja sen Bode-kuvaajat tuli tulostaa, jotta niitä voi verrata edellisen tehtävän avoimen silmukan tilanteeseen. Kuva 42 sisältää molemmat pyydetyistä käyristä ja niistä nähdään vahvistimen olevan nyt paljon laajakaistaisempi kuin avoimen silmukan tapauksessa. Lisäksi takaisinkytke- 40 tyn vahvistimen vaste piikittää ylärajataajuudellaan. Laajakaistaisuus selittyy sillä, että takaisinkytkennässä vahvistuksen ja kaistanleveyden tulo on vakio, joten koska kytkennältä pyydettiin nyt vähemmän vahvistusta, sen kaistanleveys kasvoi vastaavasti samassa suhteessa. Kuvaajassa näkyvä piikitys puolestaan johtuu siitä, että vahvistimen vaihevara on sen ylärajataajuudella nyt pienempi kuin aiemmassa tehtävässä, jossa napataajuudet olivat kaukana toisistaan ja vaste tästä johtuen aika sileästi viettävä. Kuva 41. Takaisinkytketty operaatiovahvistin. 41 Kuva 42. Takaisinkytketyn vahvistimen Bode-kuvaajat vahvistuksen ollessa 20 dB. Vahvistus piti seuraavaksi muuttaa 60 dB:iin ja simuloinnin tuloksia täytyi verrata edelliseen kohtaan. Lineaariasteikolla pyydetty vahvistus on nyt 1000 ja vastuksien suhteeksi saadaan π 3 = 999π 4 . (43) Kun R4:ksi valitaan jälleen 1 kΞ©, R3:n arvoksi saadaan 999 kΞ© eli noin 1 MΞ©. Näillä arvoilla simuloidut Bode-kuvajat on esitetty kuvassa 43. Vertaamalla tulosta edelliseen kohtaan havaitaan kaistanleveyden pienentyneen odotetusti, mutta lisäksi aiemmin havaittu piikitys on poissa. Tämä johtuu siitä, että vahvistimen vaihe ei muutu yhtä jyrkästi kuin edellä, jonka takia vaihevara on parempi vasteen alkaessa viettää alaspäin. 42 Kuva 43. Takaisinkytketyn vahvistimen Bode-kuvaajat vahvistuksen ollessa 60 dB. Kytkennän askelvasteen simulointia varten vahvistus palautettiin takaisin 20 dB:iin ja signaalilähde asetettiin tuottamaan sakara-aaltoa, jonka jännite vaihteli välillä 0 Vβ¦0,1 V. Signaalin nousu- ja laskuaika olivat 100 ps, pulssin leveys 100 µs ja periodin pituus 200 µs. Tulo- ja lähtösignaali on tulostettu kuvaan 44. Lähtöjännitteessä esiintyy nousevien ja laskevien reunojen kohdalla soimista, joka kuitenkin vaimenee kohtalaisen nopeasti. Askelvasteen simulointi suoritettiin seuraavaksi uudelleen sillä erolla, että takaisinkytkentävastuksen rinnalle lisättiin 70 pF:n kondensaattori. Saatu vaste näkyy kuvassa 45 ja siinä ei enää esiinny mainittavaa soimista, tosin askelten reunat ovat myös kohtalaisen loivia. 43 Kuva 44. Takaisinkytketyn operaatiovahvistimen askelvaste. Kuva 45. Askelvaste kun takaisinkytkennässä on 70 pF:n kondensaattori. 44 Kuvassa 44 näkyvä signaalin soiminen johtuu siitä, että vahvistimella on kaksi napaa, jonka takia tarpeeksi korkeille taajuuksille mentäessä piirin vaihevara putoaa olemattomaksi, mikä ei vielä tee kytkennästä epästabiilia, mutta aiheuttaa havaittua soimista. Kondensaattorin lisääminen muuttaa takaisinkytkennän taajuusriippuvaiseksi pienentäen kytkennästä saatavan vahvistuksen kohti ykköstä mentäessä tarpeeksi suurille taajuuksille. Tästä johtuen kaikista korkeimmat syötetyn sakara-aallon taajuudet, jotka aiheuttivat soimista, vaimenevat poistaen soimisen lähes kokonaan. Tehtävässä pyydettiin seuraavaksi toteamaan takaisinkytketyn vahvistimen vahvistuksen ja kaistanleveyden tulon olevan vakio simuloimalla kytkentää kolmella eri vahvistuksen arvolla ja laskemalla tuloksista kyseinen suhde GBW. Simuloitavien vahvistuksien arvoiksi valittiin 70 dB, 80 dB ja 90 dB. Vastuksen R4 resistanssiksi valittiin jokaisessa kohdassa 1 kΞ©, jolloin vastukselle R3 saatiin arvot 3,16 MΞ©, 10,0 MΞ© ja 31,6 MΞ©. Saadut taajuusvasteet on tulostettu kuviin 46, 47 ja 48. Kuvien perustella -3 dB:n pisteet kullekin tilanteelle ovat 3,46 kHz, 1,09 kHz ja 346 Hz. Näitä arvoja käyttäen saadaan GBW:lle kolme arvoa, jotka ovat πΊπ΅π1 = 1070 ππ΅β20 ππ΅ β 3,46 ππ»π§ β 10,9 ππ»π§, (44) πΊπ΅π2 = 1080 ππ΅β20 ππ΅ β 1,09 ππ»π§ = 10,9 ππ»π§ (45) πΊπ΅π3 = 1090 ππ΅β20 ππ΅ β 346 π»π§ β 10,9 ππ»π§. (46) ja Lukuja vertaamalla nähdään, että takaisinkytketyn vahvistimen GBW näyttäisi todellakin pysyvän vakiona kun vahvistusta muutetaan. 45 Kuva 46. Takaisinkytketyn vahvistimen taajuusvaste vahvistuksella 70 dB. Kuva 47. Takaisinkytketyn vahvistimen taajuusvaste vahvistuksella 80 dB. 46 Kuva 48. Takaisinkytketyn vahvistimen taajuusvaste vahvistuksella 90 dB. Tehtävän viimeisessä kohdassa kysytään vastaavatko lasketut GBW arvot kuvaajista nähtäviä arvoja eli taajuuksia, joilla vasteet leikkaavat 0 dB:n vahvistuksen. Tarkastelemalla kaikkia kolmea tapausta nähdään jokaisen käyrän leikkaavan 0 dB:n noin taajuudella 1 MHz eli noin dekadin ennustettua aiemmin. Ero johtuu siitä, että vahvistimella on yhden navan sijasta kaksi napaa ja vahvistuksen ja kaistanleveyden tulo kertoo vahvistimen yksikkökaistaleveyden oikein vain yksinapaisille kytkennöille. Kyseinen tulo pysyy kyllä vakiona vahvistusta muutettaessa, mutta sen arvo kertoo millä taajuudella -20 dB viettävä käyrä saavuttaa ykkösvahvistuksen. 1.4. Differentiaalipari 1.4.1. Takaisinkytkemättömän vahvistimen toiminta Tehtävässä 4.1 tarkasteltavana oli kuvan 49 mukainen differentiaalisella tuloasteella varustettu kaksiasteinen vahvistin. Piirin analysoiminen aloitettiin laskemalla kunkin transsitorin DC-toimintapiste eli niiden solmupistejännitteet ja kollektorivirrat. 47 Kuva 49. Differentiaalisella tuloasteella varustettu kaksiasteinen vahvistin. Transistorin Q1 kantavirta on sama kuin vastuksen RB1 läpi kulkeva virta eli πΌπ΅1 = β ππ΅1 . π π΅1 (47) Tämän tiedon avulla voidaan ratkaista vastuksen RBIAS yli jäävän jännitteen yhtälöstä transistorien Q1 ja Q2 yhteinen emitterijännite: 2(π½ + 1)π π΅πΌπ΄π (ππΈ1 + 0,7 π) π π΅1 2(π½ + 1)π π΅πΌπ΄π β 0,7 π 5π+ π π΅1 =β β β0,72 π 2(π½ + 1)π π΅πΌπ΄π 1+ π π΅1 ππΈ1 β (β5 π) = π π΅πΌπ΄π β 2πΌπΈ1 = β β ππΈ1 (48) Kummankin differentiaaliparin transistorin kantajännite on diodin kynnysjännitteen verran emitterijännitteen yläpuolella, joten kantajännitteiksi saadaan ππ΅1 = ππ΅2 = ππΈ1 + 0,7 π = β20 ππ. (49) Kytkennän symmetrian takia differentiaaliparin kantavirrat ovat identtiset ja siten myös niiden kollektorivirrat ovat samat. Koska BJ-transistorin kollektorivirta on yksinkertaisesti virtavahvistuskerroin kertaa kantavirta, saadaan kollektorivirroiksi 48 πΌπΆ1 = πΌπΆ2 = π½πΌπ΅1 = 100 β (β β19,7 ππ ) β 0,99 ππ΄. 2 ππΊ (50) Transistorin Q1 kollektori on kytketty 5 V:n käyttöjännitteeseen, joten sen kollektoriβ emitteri -jännite on ππΆπΈ1 = 5 π β ππΈ1 = 5,72 π. (51) Transistorin Q2 kollektorijännite puolestaan täytyy laskea käyttäen hyväksi laskettua kollektorivirtaa. Kun oletetaan vastuksen RC2 läpi kulkeva virta kutakuinkin yhtä suureksi kuin virta IC2, saadaan kollektorijännitteeksi ππΆ2 β 5 π β π πΆ2 πΌπΆ2 β 0,76 π (52) ππΆπΈ2 = ππΆ2 β ππΈ2 = 1,48 π. (53) ja näin ollen Transistorin Q3 kantajännite on myös transistorin Q2 kollektorijännite, joten transistorin Q3 emitterijännitteeksi saadaan ππΈ3 = ππΆ2 β 0,7 π β 62 ππ. (54) Koska transistorin kollektori on kytketty positiiviseen käyttöjännitteeseen, sen kollektoriβemitteri -jännite on ππΆπΈ3 = 5 π β ππΈ3 β 4,94 π. (55) Viimeiseen kysyttyyn parametriin eli kollektorivirtaan IC3 päästään käsiksi laskemalla ensin emitterivirta eli vastuksen RE3 läpi kulkeva virta ja kertomalla se termillä Ξ±: πΌπΆ3 = πΌπΌπΈ3 = π½ ππΈ3 β (β5 π) β β 2,0 ππ΄ π½+1 π πΈ3 (56) Kytkennän DC-toimintapiste piti myös simuloida ja saatu tulos käy ilmi kuvasta 50, josta nähdään simuloitujen virtojen ja jännitteiden olevan lähellä edellä laskettuja arvoja. Tehtävässä kysytään miksi piirin lähtöjännite eli vastuksen RL yli oleva jännite on 0 V ja vastaus tähän on, että lähdön kondensaattori CE3 poistaa lähtösignaalista sen DC-tason, jolloin lähdön AC-signaali vaihtelee nollan voltin ympäristössä. 49 Kuva 50. Takaisinkytkemättömän kaksiasteisen vahvistimen DC-toimintapiste. Seuraavaksi tehtävässä täytyi arvioida laskemalla vahvistimen jännitevahvistus, ylärajataajuus, alarajataajuus, tuloimpedanssi ja lähtöimpedanssi. Piirikaaviota tarkastelemalla voidaan muodostaa tuloimpedanssille yhtälö πππ β π π΅1 β(π½ + 1)(ππ1 + ππ2 ) = π π΅1 β(2 β (π½ + 1) ππ βπΌπΈ1 ) β 1,45 ππΊ. (57) Tarkastelemalla puolestaan piirin lähtöä voidaan nähdä lähtöimpedanssin olevan πππ’π‘ = π πΈ3 β (ππ3 + π πΆ2 ) π½+1 (58) β1 = [(2,5 ππΊ) β1 26 ππ 4,3 ππΊ β1 +( + ) ] 2,02 ππ΄ 100 + 1 β 54,2 πΊ. Seuraavaksi tarkastellaan piirin jännitevahvistusta. Edellä lasketun tuloimpedanssin avulla on mahdollista esittää lähdejännitteen ja vahvistinkytkennän näkemän tulojännitteen välinen yhteys, joka on muotoa π£ππ = πππ π£. πππ + π π π (59) Seuraavaksi selvitetään transistorin Q1 emitterillä kulkeva AC-virta muodostamalla yhtälöpari, josta sen pystyy ratkaisemaan. Ensimmäinen yhtälö kertoo transistorin Q1 dynaamisen resistanssin yli olevan jännitteen: 50 π£ππ β π£π1 = ππ1 ππ1 (60) Yhtälöparin jälkimmäinen yhtälö on muodostettu differentiaaliparin emitterijännitteelle ja siinä approksimoidaan vastuksen RBIAS vaikuttavan transistorin Q2 dynaamisen resistanssin rinnalla niin vähän, että molempien differentiaaliparin transistorien läpi kulkee suunnilleen sama emitterivirta: π£π1 = (π π΅πΌπ΄π βππ2 )ππ1 β ππ1 ππ1 (61) Kun jälkimmäinen yhtälö sijoitetaan ensimmäiseen emitterijännitteen paikalle ja yhtälö ratkaistaan emitterivirran suhteen, saadaan ππ1 = π£ππ . 2ππ1 (62) Nyt kun transistorin Q2 emitterivirta on tiedossa, sen avulla on helppo laskea vastaava kollektorivirta, joka on ππ2 = βπΌππ1 . (63) Edelleen kollektorivirran avulla saadaan kollektorijännitteeksi π£π2 = β[π πΆ2 β(π½ + 1)(ππ3 + π πΈ3 βπ πΏ )]ππ2 β βπ πΆ2 ππ2 . (64) Viimeinen tarvittava vaihe jännitevahvistuksen ratkaisemiseen vaatii sellaisen yhtälön muodostamista, jossa esiintyy termi vout ja kaikki muut parametrin ovat tunnettuja. Muodostetaan jälleen kaksi yhtälöä, joista ensimmäinen kertoo transistorin Q3 kantaβemitteri -jännitteen, joka on muotoa π£π2 β π£ππ’π‘ = ππ3 ππ3 . (65) Jälkimmäinen yhtälö on puolestaan ππ3 = π£ππ’π‘ π πΈ3 βπ πΏ (66) ja kun se sijoitetaan ensimmäiseen, saadaan π£π2 = ( ππ3 + 1) π£ππ’π‘ . π πΈ3 βπ πΏ (67) 51 Kun tähän sijoitetaan kaikki edellä ratkaistut parametrit ja yhtälöstä ratkaistaan lähtöja lähdejännitteen suhde, kytkennän jännitevahvistukseksi saadaan π£ππ’π‘ πππ π½ π πΆ2 π πΈ3 βπ πΏ = β β β π£π πππ + π π π½ + 1 2ππ1 π πΈ3 βπ πΏ + ππ3 1,45 ππΊ 100 4,3 ππΊ 2,5 ππΊβ10 ππΊ = β β β 1,45 ππΊ + 100 πΊ 101 2 β 26,12 πΊ 2,5 ππΊβ10 ππΊ + 12,84 πΊ β 75,8 β‘ 37,6 ππ΅. π΄π = (68) Vahvistimen alarajataajuus lasketaan käyttäen aikavakioita. Alarajataajuuteen vaikuttavat kondensaattorit CB1 ja CE3. CB2:n vaikutus on pieni, koska vastus RB2 näkyy differentiaaliparin emitterille jaettuna termillä Ξ²+1 eli noin 20 Ξ©:n resistanssina virtavahvistuksen ollessa 100. Taajuuden kasvaessa CB2 alkaa johtaa ohittaen lopulta vastuksen RB2 ja kasvattaen siten virtaa, mutta vaikutuksen voi arvioida olevan niin pieni, että sen voi jättää huomioimatta. Myös kondensaattorin CE3 vaikutuksen voi arvella jäävän pieneksi sen suuren kapasitanssin takia, mutta sen aikavakio päätettiin kuitenkin laskea ja ottaa huomioon alarajataajuuden arvioinnissa. Tulokondensaattorin CB1 aikavakioksi saadaan laskemalla π1,πΏ β πΆπ΅1 [π π + π π΅1 β(2 β (π½ + 1)ππ1 )] = 10 ππΉ β [100 πΊ + 2 ππΊβ(2 β 101 β 26,12 πΊ)] β 15,5 ππ . (69) Kondensaattorin CE3 aikavakio on puolestaan π πΆ2 )] π½+1 4,3 ππΊ = 1 ππΉ β [10 ππΊ + 2,5 ππΊβ (12,84 πΊ + )] β 10,05 π 100 + 1 π2,πΏ = πΆπΈ3 [π πΏ + π πΈ3 β (ππ3 + (70) ja aikavakioiden yhteisvaikutuksesta saadaan piirin alarajataajuuden arvioksi ππΏ β 1 1 1 1 1 1 ( + )= ( + ) β 10,3 π»π§. 2π π1,πΏ π2,πΏ 2π 15,5 ππ 10,05 π (71) Vahvistinkytkennän ylärajataajuus määräytyy käytettyjen transistorien sisäisistä kapasitansseista. Kuten aiemmissakin kohdissa, kullekin kapasitanssille lasketaan sen aikavakio: π1,π» β πΆπ΅πΆ1 [π π βπ π΅1 β(π½ + 1)(ππ1 + ππ2 )] β 93,5 ππ (72) 52 π2,π» = πΆπ΅πΈ1 {(π π βπ π΅1 ) + [(ππ βπΌπΆ2 )βπ π΅πΌπ΄π β(π½ + 1)ππ2 ]} β β1 π π βπ π΅1 ππ πΌπΆ1 1 [1 + + ( βπ π΅πΌπ΄π β(π½ + 1)ππ2 ) ( + )] (π½ + 1)ππ1 πΌπΆ2 ππ (π½ + 1)ππ1 β 4 ππΉ β 59,8 πΊ β 239 ππ π3,π» = πΆπ΅πΆ2 [π πΆ2 β(π½ + 1)(ππ3 + π πΈ3 βπ πΏ )] β 4,21 ππ πΌπΆ1 π π βπ π΅1 1 (2 β )+ (π½ + 1)ππ1 + (π π βπ π΅1 ) (π½ + 1)ππ2 ππ β1 1 1 + + ] β 52,8 ππ π π΅πΌπ΄π (π½ + 1)ππ1 + π π βπ π΅1 (73) (74) π4,π» = πΆπ΅πΈ2 [ π5,π» = πΆπ΅πΆ3 [π πΆ2 β(π½ + 1)(ππ3 + π πΈ3 βπ πΏ )] β 4,21 ππ π6,π» = πΆπ΅πΈ3 π πΆ2 + π πΈ3 βπ πΏ β 158 ππ πΌπΆ3 π πΆ2 + π πΈ3 βπ πΏ 1 + π (π πΈ3 βπ πΏ ) + (π½ + 1)ππ3 π (75) (76) (77) Kannan ja emitterin välisten kapasitanssien näkemien resistanssien johtamisessa on edellä sijoitettu tarkasteltavan kapasitanssin tilalle testijännite vΟ ja selvitetty sen ja siitä vedetyn virran iΟ suhde vΟ/iΟ=RΟ. Lopuksi aikavakiot summataan yhteen ja näin saadaan kytkennän ylärajataajuudelle arvioksi ππ» β 1 1 1 β 6 = β 17,8 ππ»π§. 2π βπ=1 ππ,π» 2π β 8,9633 ππ (78) Vahvistimen avainominaisuuksien laskemisen jälkeen tehtävässä pyydetään kertomaan mikä on komponenttien CB1, CB2, RB1 ja RB2 merkitys kytkennässä ja miten ne tulee mitoittaa. Tulossa oleva kondensaattori CB1 poistaa tulosignaalista sen DCtason. Sen koko vaikuttaa vahvistinkytkennän alarajataajuuteen, joten se tulee mitoittaa riittävän isoksi, jotta haluttu alarajataajuus toteutuu. Vastuksen RB1 arvolla puolestaan vaikutetaan transistorin Q1 DC-toimintapisteeseen, joten se tulee mitoittaa siten, että transistori tulee biasoitua halutulla tavalla. Lisäksi on huomioimisen arvoista, että vastus vaikuttaa myös kytkennän tuloimpedanssiin sekä ylä- ja alarajataajuuteen. Kondensaattorin CB2 virka on ohittaa RB2 tehden transistorista Q2 laajakaistainen yhteiskantakytketty vahvistinaste käyttötaajuuksilla. Symmetrisen DCtoimintapisteen haluttaessa molemmat komponentit tulisi mitoittaa samansuuruisiksi kuin niiden vastineet transistorin Q1 kannalla. Tehtävässä kysytään seuraavaksi mitä vaikutusta signaalilähteen lähderesistanssilla RS on vahvistimen toimintaan. Lisäksi tiedustellaan miten edellä lasketut arvot 53 muuttuvat, jos lähderesistanssiksi vaihdetaan 1 kΞ©. Lähderesistanssin kasvaessa tulosignaali pienenee ja siten myös kytkennän jännitevahvistus pienenee. Lisäksi lähderesistanssi vaikuttaa sekä vahvistimen ala- ja ylärajataajuuksiin, sen kasvattamisen pienentäessä molempia ja pienentämisen tehdessä päinvastoin. Jos aiemmin esitetyissä kaavoissa käytetään RS:n paikalla arvoa 1 kΞ©, saadaan jännitevahvistukseksi 47,9 eli noin 33,6 dB, alarajataajuudeksi 1 1 1 ( + ) β 6,5 π»π§ 2π 24,5 ππ 10,05 π (79) 1 1 β 2π 592ππ + 1,24ππ + 4,21ππ + 57,7ππ + 4,21ππ + 157ππ β 15,2 ππ»π§. (80) ππΏ β ja ylärajataajuudeksi ππ» β Lopuksi lasketut impedanssit, rajataajuudet ja jännitevahvistus täytyi tarkistaa AC-analyysien avulla. Tuloimpedanssia mitatessa vastus RS ohitettiin, koska se ei kuulu vahvistimeen vaan on jännitelähteen ominaisuus. Vahvistinkytkennän taajuusvaste näkyy kuvassa 51, josta voidaan lukea jännitevahvistuksen olevan noin 37,25 dB, mikä vastaa edellä laskettua arvoa 37,6 dB. Samaan kuvaan on myös merkitty markkereilla A1 ja A2 pisteet, joissa vaste on laskenut noin kolme desibeliä. Niiden perusteella kytkennän alarajataajuus on noin 13,3 Hz ja ylärajataajuus 18,6 MHz. Molemmat arvot ovat samaa suuruusluokkaa edellä laskettujen 10,3 Hz:n ja 17,8 MHz:n kanssa. Tulo- ja lähtöimpedanssit on esitetty taajuuden funktiona kuvissa 52 ja 53. Simulointien perusteella tuloimpedanssi on keskitaajuuksilla noin 1,45 kΞ© ja lähtöimpedanssi on puolestaan noin 54,4 Ξ©. Molemmat arvot ovat todella lähellä käsin laskettuja arvoja, joiksi saatiin 1,45 kΞ© ja 54,2 Ξ©. 54 Kuva 51. Vahvistimen taajuusvaste sekä rajataajuudet markkereilla merkittynä. Kuva 52. Takaisinkytkemättömän kaksiasteisen vahvistimen tuloimpedanssi. 55 Kuva 53. Takaisinkytkemättömän kaksiasteisen vahvistimen lähtöimpedanssi. 1.4.2. Takaisinkytketyn vahvistimen toiminta Edellisen kohdan vahvistimeen lisätään tehtävässä 4.2 takaisinkytkentä poistamalla kytkennästä kondensaattori CB2 ja lisäämällä vastus RFB. Saatu takaisinkytketty vahvistin näkyy kuvassa 54, missä vastukset RFB ja RB2 toimivat takaisinkytkentävastuksina. 56 Kuva 54. Takaisinkytketty kaksiasteinen vahvistin. Tehtävänannossa kytkennän analysoiminen pyydettiin aloittamaan muodostamalla ensin vahvistimelle avoimen silmukan vastinpiiri ja laskemalla sille avoimen silmukan vahvistus Av, ylärajataajuus fH ja alarajataajuus fL. Tämä tapahtuu katkaisemalla transistorin Q2 kannan ja transistorin Q3 emitterin välinen takaisinkytkentä ja huomioimalla takaisinkytkentäverkon aiheuttama kuormitus kummastakin suunnasta nähden lisäämällä transistorin Q2 kannalta maihin vastus π 11 = π πΉπ΅ βπ π΅2 = ( 1 1 β1 + ) = 1,8 ππΊ 18 ππΊ 2 ππΊ (81) ja transistorin Q3 emitteriltä vastaavasti vastus π 22 = π πΉπ΅ + π π΅2 = 18 ππΊ + 2 ππΊ = 20 ππΊ. (82) Avoimen silmukan vastinpiirin analysoiminen alkaa laskemalla sen DCtoimintapiste. Transistorien Q1 ja Q2 kantajännitteiden oletetaan olevan noin 0,7 V niiden yhteisen emitterijännitteen yläpuolella. Koska kyseisten transistorien kantavirrat ovat πΌπ΅1 = β ππ΅1 π π΅1 (83) 57 ja πΌπ΅2 = β ππ΅2 , π 11 (84) vastuksen RBIAS yli jäävän jännitteen lausekkeesta ππΈ1 β (β5 π) = π π΅πΌπ΄π (πΌπΈ1 + πΌπΈ2 ) (85) voidaan ratkaista yhteiseksi emitterijännitteeksi ππΈ1 1 1 0,7 π β (π½ + 1)π π΅πΌπ΄π (π + π ) + 5 π π΅1 11 =β β β0,72 π. 1 1 (π½ + 1)π π΅πΌπ΄π ( π π΅1 + π 11 ) + 1 (86) Emitterijännitteen avulla transistorien Q1 ja Q2 emitterivirroiksi saadaan nyt πΌπΈ1 = β (π½ + 1)(ππΈ1 + 0,7 π) β 0,94 ππ΄ π π΅1 (87) πΌπΈ2 = β (π½ + 1)(ππΈ1 + 0,7 π) β 1,05 ππ΄. π 11 (88) ja Tekemällä oletus transistorin Q3 kantavirran olemisesta hyvin pieni verrattuna transistorin Q2 kollektorivirtaan, vastuksen RC2 läpi kulkevan virran voidaan olettaa olevan noin IC2 ja transistorin Q2 kollektorijännitteeksi voidaan näin ollen ratkaista ππΆ2 β 5 π β π πΆ2 π½ πΌ β 0,54 π. π½ + 1 πΈ2 (89) Edelleen tämän jännitteen avulla transistorin Q3 emitterivirraksi saadaan πΌπΈ3 = ππΆ2 β 0,7 π ππΆ2 β 0,7 π β (β5 π) + β 1,93 ππ΄. π 22 π πΈ3 Piirin bipolaaritransistorien dynaamisiksi resistansseiksi saadaan nyt (90) 58 ππ1 = ππ 26 ππ = β 27,6 πΊ, πΌπΈ1 0,943 ππ΄ (91) ππ2 = ππ 26 ππ = β 24,8 πΊ πΌπΈ2 1,048 ππ΄ (92) ππ3 = ππ 26 ππ = β 13,5 πΊ. πΌπΈ3 1,927 ππ΄ (93) ja Avoimen silmukan vahvistuksen ratkaiseminen aloitetaan selvittämällä jännitteen vb1 arvo piirin tuloresistanssin avulla. Tarkastelemalla kytkentää nähdään tuloresistanssi olevan π ππ β π π΅1 β(π½ + 1) (ππ1 + ππ2 + π 11 ) β 1,56 ππΊ. π½+1 (94) Tästä edelleen voidaan ratkaista transistorin Q1 kantajännitteelle likiarvo π£π1 = π ππ π£ β 0,94π£π . π ππ + π π π (95) Kantavirraksi ib1 saadaan nyt puolestaan ππ1 β π£π1 (π½ + 1) (ππ1 + ππ2 + π 11 ) π½+1 β 0,13 ππ β π£π (96) ja tästä edelleen emitterijännitteeksi ππ1 = πΌπΆ1 π½ππ1 ππ (π£π1 β π£π1 ) = π½ππ1 β π£π1 = π£π1 β β 0,57π£π . ππ πΌπΆ1 (97) Vastuksen RBIAS läpi kulkeva virta on yhtä suuri kuin transistorien Q1 ja Q2 emitterivirtojen summa, joten virraksi ie2 voidaan ratkaista π£π1 π£π1 = ππ1 + ππ2 β ππ2 = β (π½ + 1)ππ1 β β13,1 ππ β π£π . π π΅πΌπ΄π π π΅πΌπ΄π (98) Emitterivirran ie2 ollessa tiedossa kollektorijännitteeseen vc2 päästään käsiksi soveltamalla Kirchhoffin virtalakia kyseiseen solmupisteeseen: 59 π£π2 π£π2 = ππ2 + (π½ + 1)(ππ3 + π 22 βπ πΈ3 βπ πΏ ) π πΆ2 π½ β π π½ + 1 π2 = β 54,6π£π 1 1 π πΆ2 + (π½ + 1)(ππ3 + π 22 βπ πΈ3 βπ πΏ ) β β π£π2 (99) Tämän jännitteen avulla päästään viimein käsiksi piirin lähtöjännitteeseen ja näin myös jännitevahvistukseen: π£π2 β π£ππ’π‘ π£ππ’π‘ = ππ3 π 22 βπ πΈ3 βπ πΏ π£π2 βπ£π = β 54,2 β‘ 34,7 ππ΅ ππ3 1+ π 22 βπ πΈ3 βπ πΏ ππ3 = β π΄π£ = π£ππ’π‘ π£π (100) Avoimen silmukan alarajataajuus lasketaan käyttäen aikavakioita. Kytkentäkondensaattorin CB1 aikavakio on π1,πΏ β πΆπ΅1 [π π + π π΅1 β(π½ + 1) (ππ1 + ππ2 + π 11 )] β 16,6 ππ π½+1 (101) ja kondensaattorin CE3 puolestaan π2,πΏ = πΆπΈ3 [π πΏ + π 22 βπ πΈ3 β (ππ3 + π πΆ2 )] β 10,1 π . π½+1 (102) Alarajataajuudeksi saadaan näin ollen ππΏ β 1 1 1 ( + ) β 9,60 π»π§. 2π π1,πΏ π2,πΏ (103) Ylärajataajuus lasketaan niin ikään aikavakioiden avulla kuten aiemmissakin kohdissa: π 11 )]} β 94,0 ππ π½+1 (104) πΌπΆ2 π 11 (π ) ππ (1 β (π½ + 1)ππ2 + π 11 ) π βπ π΅1 + 1 β πΆπ΅πΈ1 β 217 ππ πΌπΆ2 π 11 πΌπΆ1 (1 β ) + ππ ππ (π½ + 1)ππ2 + π 11 (105) π1,π» β πΆπ΅πΆ1 {π π βπ π΅1 β [(π½ + 1) (ππ1 + ππ2 + π2,π» 60 π3,π» β πΆπ΅πΆ2 β {π πΆ2 + π4,π» (π½ + 1)ππ2 πΌπΆ2 πΌπΆ2 [π πΆ2 (1 β ) + 1]} (π½ + 1)ππ2 πΌπΆ2 ππ πΌπΆ1 + πΌπΆ2 βπΌ +πΌ +1 π 11 πΆ1 πΆ2 β 1 ππΉ β 115 ππΊ = 115 ππ πΌπΆ1 π +1 ππ 11 β πΆπ΅πΈ2 β 4 ππΉ β 646 πΊ β 2,58 ππ πΌπΆ1 π 11 πΌπΆ2 (1 + ) + ππ ππ (π½ + 1)ππ2 π5,π» = πΆπ΅πΆ3 {π πΆ2 β[(π½ + 1)(ππ3 + π 22 βπ πΈ3 βπ πΏ )]} β 4,20 ππ π6,π» = πΆπ΅πΈ3 π πΆ2 + (π 22 βπ πΈ3 βπ πΏ ) π πΆ2 πΌ 1 1+ + (π 22 βπ πΈ3 βπ πΏ ) ( ππΆ3 + ) (π½ + 1)ππ3 (π½ + 1)ππ3 π β 4 ππΉ β 44,0 πΊ = 176 ππ (106) (107) (108) (109) Koska signaali vahvistuu kapasitanssin CBC2 yli, sen vaikutus kasvaa vahvistukseen verrannollisesti Millerin teoreeman mukaisesti ja se siis selvästi dominoi piirin ylärajataajuutta, joksi saadaan nyt ππ» β 1 1 1 1 β 6 β β β 1,30 ππ»π§. 2π βπ=1 ππ,π» 2π 122 ππ (110) Saatuja arvoja pyydettiin vertaamaan kohdassa 1.4.1. laskettuihin. Vahvistus on pudonnut 3 desibeliä arvosta 37,6 dB arvoon 34,7 dB ohituskondensaattorin CB2 poistamisen seurauksena. Tilanne alarajataajuuteen vaikuttavien kondensaattorien kannalta ei ole merkittävästi muuttunut kohdan 1.4.1. tilanteesta, joten ei ole yllätys että lasketut taajuudet 10,3 Hz ja 9,60 Hz eroavat toisistaan hyvin vähän. Ohituskondensaattorin CB2 puuttumisen takia kapasitanssin CBC2 yli on nyt vahvistusta ja se näkyy sen takia efektiivisesti paljon suurempana pienentäen ylärajataajuuden aiemmasta 17,8 megahertsistä 1,30 megahertsiin. Seuraavaksi piirille pyydettiin laskemaan takaisinkytketyn silmukan vahvistus Avfb, ylärajataajuus fHfb ja alarajataajuus fLfb. Takaisinkytketyn vahvistimen taajuusvaste pyydettiin myös simuloimaan. Vahvistus saadaan laskettua avoimen silmukan vahvistuksen ja takaisinkytkentäkertoimen avulla, joka on π½πΉπ΅ = π π΅2 2 ππΊ 1 = = = 0,1. π π΅2 + π πΉπ΅ 2 ππΊ + 18 ππΊ 10 (111) 61 Takaisinkytketyn vahvistimen vahvistukseksi saadaan siis nyt π΄π£ππ = π΄π£ 54,2 = β 8,44 β‘ 18,5 ππ΅. 1 + π΄π£ π½πΉπ΅ 1 + 54,2 β 0,1 (112) Takaisinkytkennän lisääminen ei vaikuta DC-biasvirtoihin ja täten bipolaaritransistorien dynaamisiin resistansseihin merkittävästi, joten suljetun silmukan rajataajuuksia laskettaessa käytetään yksinkertaisuuden vuoksi avoimelle silmukalle laskettuja arvoja. Alarajataajuuteen vaikuttavat aikavakiot ovat π1,πΏππ β πΆπ΅1 [π π + π π΅1 β(π½ + 1) (ππ1 + ππ2 + π π΅2 βπ πΉπ΅ )] π½+1 (113) β 10 ππΉ β 1,66 ππΊ = 16,6 ππ ja π2,πΏππ β πΆπΈ3 [π πΏ + π πΈ3 β (ππ3 + π πΆ2 )] β 10,1 π . π½+1 (114) Niiden yhteisvaikutuksesta saadaan arvioksi piirin alarajataajuudelle ππΏππ β 1 1 1 1 1 1 ( + )= ( + ) β 9,60 π»π§. 2π π1,πΏππ π2,πΏππ 2π 16,6 ππ 10,1 π (115) Kondensaattori CB1 dominoi edelleen piirin alarajataajuutta. Avoimen silmukan tapauksessa havaittiin jo, että kapasitanssin CBC2 aiheuttama napa selvästi dominoi vahvistinpiirin ylärajataajuutta, joten suljetulle silmukalle lasketaan tilanteen yksinkertaistamiseksi ainoastaan kyseisen kapasitanssin vaikutus sillä oletuksella, että se on tarpeeksi hyvä approksimaatio piirin ylärajataajuudelle. Transistorin Q3 muodostamasta asteesta ei oteta vahvistusta, joten sen kannalla olevan AC-jännitteen oletetaan olevan hyvin lähellä piirin lähtöjännitettä. Tätä käytetään hyväksi kytkennän analyysin helpottamisessa korvaamalla kapasitanssi CBC2 transistorin Q2 kannalla maata vasten olevalla kapasitanssilla (1+Avfb)CBC2 ja samaisen transistorin kollektorilla maata vasten olevalla kapasitanssilla (1+1/Avfb)CBC2 käyttäen hyväksi Millerin teoreemaa. Ensimmäisen kapasitanssin muodostama aikavakio on π1,π»ππ β (1 + π΄π£ππ )πΆπ΅πΆ2 π π βπ π΅1 β [π π΅2 βπ πΉπ΅ β(π½ + 1) (ππ2 + ππ1 + )] β 12,7 ππ π½+1 (116) 62 ja jälkimmäinen 1 ) πΆ [π β(π½ + 1)(π πΏ βπ πΈ3 βπ πΉπ΅ )] π΄π£ππ π΅πΆ2 πΆ2 β 1,12 β 1 ππΉ β 4,20 ππΊ β 4,70 ππ . π2,π»ππ β (1 + (117) Näiden yhteisvaikutuksesta saadaan nyt arvioksi piirin ylärajataajuudelle ππ»ππ = 1 1 β β 9,15 ππ»π§. 2π π1,π»ππ + π2,π»ππ (118) Takaisinkytketylle vahvistimelle simuloitu taajuusvaste on esitetty kuvassa 55. Kuvaajasta luettu suljetun silmukan vahvistus on noin 18,1 dB ja ala- ja ylärajataajuudet 8,0 Hz ja 9,5 MHz. Arvot ovat yhteneviä käsin laskettujen arvioitten kanssa. Kuva 55. Takaisinkytketyn vahvistimen taajuusvaste. Viimeisenä kohtana esitehtävissä pyydettiin vastaamaan vaikuttaako takaisinkytkennän lisääminen ylä- ja alarajataajuuksiin ja perustelemaan annetut vastaukset. Takaisinkytkennän lisääminen pienentää hieman vahvistinkytkennän alarajataajuutta, koska alarajataajuutta dominoivan kondensaattorin CB1 näkemä tuloimpedanssi kasvaa hieman takaisinkytkentäverkon lisäämisen seurauksena. Kohdassa 1.4.1. takai- 63 sinkytkemättömän vahvistimen alarajataajuudeksi saatiin simulaatiossa noin 13,3 Hz ja takaisinkytketylle piirille tässä tehtävässä noin 8,0 Hz. Ylärajataajuudessa takaisinkytkennän aiheuttama muutos on huomattavasti suurempi. Kohdan 1.4.1. differentiaaliparin tapauksessa transistorin Q2 kanta on korkeilla taajuuksilla maissa ohituskondensaattorin CB2 seurauksena. Takaisinkytketyn vahvistinpiirin tapauksessa näin ei kuitenkaan ole ja kapasitanssin CBC2 yli on nyt vahvistusta. Millerin teoreeman mukaisesti tämä kapasitanssi näkyy nyt efektiivisesti paljon suurempana laskien huomattavasti kytkennän ylärajataajuutta. Takaisinkytkentäverkolla asetettu vahvistus siis nyt vaikuttaa myös suoraan vahvistimen ylärajataajuuteen. Tehtävässä 4.1 ylärajataajuudeksi simuloitu arvo oli noin 18,6 MHz. Tässä tehtävässä takaisinkytketylle piirille vastaavaksi arvoksi puolestaan saatiin simulaatiossa noin 9,5 MHz, joka on noin puolet takaisinkytkemättömän vahvistimen kaistanleveydestä. Haluttaessa takaisinkytketystä piiristä enemmän vahvistusta, tämä tehdään kaistanleveyden kustannuksella. 64 2. OHJELMOITAVA ELEKTRONIIKKA Toisen puoliskon kandidaatintyöstä muodostaa Ohjelmoitava elektroniikka kurssin harjoitustyö, jossa suunnitellaan digitaalinen järjestelmä, joka pystyy mittaamaan jaksollisen logiikkasignaalin taajuuden. Jopa yhden jakson mittaisen signaalin hetkellinen taajuus on myös kyettävä määrittämään. Mittauksen erottelutarkkuus on 1 Hz ja tulos päivitetään noin kolme kertaa sekunnissa nelinumeroiselle 7-segmenttinäytölle. Laitetta pitää pystyä testaamaan ilman ulkoista signaalia sisäisellä signaaligeneraattorilla, jonka taajuus voidaan asettaa 1 Hz:n tarkkuudella. Suunniteltu digitaalinen järjestelmä toteutettiin ohjelmoitavalla FPGA-piirillä, joka löytyy osana työssä käytettyä Alteran DE2-evaluointikorttia. Piiri on malliltaan Cyclone II 2C35. Ulkoinen mitattava signaali kytketään piirin tuloon PIN_D25 ja sisäinen signaaligeneraattori liittimeen PIN_K25. 2.1. Vaatimusmäärittely 2.1.1. Suorituskyky ja reunaehdot DE2-evaluointikortilta löytyy 50 MHz:n oskillaattori, jota käytetään tässä työssä digitaalilogiikan kellosignaalina. Tulosignaalista voidaan siis ottaa rekisteriin talteen näytteitä 50 MHz:n taajuudella eli 20 ns:n välein. Laite laskee kuinka monta kellojaksoa kuluu kahden tulosignaalin nousevan reunan välissä, joten mittauksen välituloksena saadaan luku N, joka on positiivinen ykköstä suurempi kokonaisluku. Koska taajuus on jaksonpituuden käänteisarvo, yhden jakson hetkellinen taajuus voidaan laskea seuraavanlaisesti: ππππ‘ππ‘π‘π’ = 1 ππππππ = π β ππππππ π (119) Mittaukselta vaaditaan 1 Hz:n erottelutarkkuus, joten määritetään millä N:n arvoilla N:llä ja N+1:llä lasketut taajuudet eroavat toisistaan vähemmän kuin yhden hertsin verran: 65 ππππππ ππππππ β β€ 1 (π»π§) π π+1 ππππππ β (π + 1) β ππππππ β π β β€1 π β (π + 1) β ππππππ β€ π 2 + π β π 2 + π β ππππππ β₯ 0 βπ= (120) β1 ± β12 β 4 β 1 β (βππππππ ) β1 ± β1 + 4 β 50 β 106 = 2β1 2 7070,57 β{ (β7071,57) Kyseessä on ylöspäin aukeava paraabeli, joten toisen asteen yhtälö on positiivinen N:n ollessa suurempi tai yhtä suuri kuin 7071. Saadun ehdon avulla on helppo määrittää suurin taajuus johon asti tulosignaali voidaan mitata 1 Hz:n erottelutarkkuudella: ππππππ β₯ 7071 ππππ‘ππ‘π‘π’ ππππππ 50 β 106 π»π§ β€ = β 7071,14π»π§ 7071 7071 π= β ππππ‘ππ‘π‘π’ (121) Tulosignaali voidaan siis mitata 1 Hz:n erottelutarkkuudella 7071 Hz:n taajuuteen asti ja sen jälkeen erottelutarkkuus on huonompi. Nelinumeroinen näyttö on täten riittävä esittämään koko taajuusalueen jossa vaadittu erottelutarkkuus täyttyy. Kymmenjärjestelmää käyttäen näytöllä voidaan kuitenkin esittää lukuja aina arvoon 9999 Hz saakka, joten laite saturoi vasta tämän arvon yli menevät tulokset maksimiarvoon. Välin 7071 Hzβ¦9999 Hz kaikki arvot eivät kuitenkaan ole käytössä riittämättömän erottelutarkkuuden takia. Varsinaista alarajataajuutta tulosignaalille ei ole. On kuitenkin loogista, että 0,5 Hz:n signaalia kauemmin kestänyt mittaus pyöristetään suoraan nollaksi. Tämän tiedon perusteella voidaan laskea kuinka monta bittiä N:n arvoa mittaavassa laskurissa tarvitaan: ππππππ 50 β 106 π»π§ = = 100 β 106 < 227 β 1 ππππ 0,5π»π§ (122) Kellojaksojen laskentaan tarvitaan siis 27-bittinen laskuri. Laskuri käsittelee etumerkittömiä binäärilukuja. Yhden jakson hetkellisen taajuuden tuottavan jakolaskun tulos on korkeintaan 9999 Hz, jonka esittämiseen binäärimuodossa tarvitaan 14 bittiä. Jakolasku on ehdittävä suorittaa ennen kuin tulosignaalissa ehtii näkyä uusi jakso. 66 Nopein hyväksyttävä taajuus on 9999 Hz ja sitä vastaava N on 5000,5, joten jakolasku on laskettava nopeammin kuin 5000 kellojaksossa. Näyttöä päivitetään noin kolme kertaa sekunnissa, joten tarvitaan laskuri joka kertoo digitaalilogiikalle milloin on kulunut noin sekunnin kolmasosa. Lasketaan kuinka monta kellojaksoa mahtuu kolmasosasekuntiin: 1β π 3 = 1β π β π 6 1 πππππ = β3 π β 50 β 10 π»π§ β 16.666.666,67 3 ππππππ (123) Ajoituksen ei tarvitse olla mahdollisimman tarkka, joten tarkka kellojaksojen määrä voidaan valita kohtalaisen vapaasti. Päätetään, että näyttöä päivitetään 16.666.666 kellojakson välein. Laskurin tarvitsee olla näin ollen 24-bittinen. Käytetty käyttöjännite on 3,3 V, joka on DE2-evaluointikortilla käytössä oleva jännitetaso. Laitteen tehonkulutuksen vaaditaan olevan alle 500 mW ja toimintalämpötila-alueen 10 ºCβ¦40 ºC. Koska työn toteutus on kiinnitetty Alteran evaluointikorttiin, lopullisen laitteen fyysisiin mittoihin voidaan vaikuttaa hyvin vähän. 2.1.2. Toimintaperiaate 2.1.2.1. Taajuuden mittaaminen Taajuusmittarin sisääntulosignaali valitaan yksinkertaisesti multiplekserillä. Käyttäjä voi itse vaihtaa lähdettä tai käynnistää build-in self-testin (BIST), jonka toiminnan ajan sisäinen signaaligeneraattori on automaattisesti valittuna ja käyttäjän yritykset vaihtaa lähdettä jätetään huomiotta. Signaalissa havaitaan tapahtuneen nouseva reuna tallettamalla signaalista muistiin sen uusin ja tätä edeltävä arvo. Jos vanha arvo on 0 ja uusi arvo 1, todetaan signaalissa tapahtuneen nousu. Kun tämä havainto tehdään, asetetaan kuluneita kellojaksoja laskevan laskurin arvoksi 1. Laskenta aloitetaan ykkösestä, koska kun noussut reuna on tunnistettu, laskuri alustetaan vasta seuraavalla nousevalla kelloreunalla, jolloin on kulunut jo yksi kellojakso. Lisäksi laskuri laitetaan laitteen resetoinnin jälkeen käyntiin vasta, kun ensimmäinen nouseva reuna on havaittu. Kohdassa 2.1.1. määritettiin, että laskurin tarvitsee olla 27-bittinen. Sen lähtö on sen tämänhetkinen sisältö. Laskurin lähtöön on kytketty niin ikään 27-bittinen rekisteri, johon laitetaan talteen laskurin arvo kun havaitaan seuraava signaalin nouseva reuna. Siihen ei siis talleteta vielä ensimmäisellä resetoinnin jälkeisellä nousevalla reunalla mitään. Jos laskurin arvo on 100β106, sen seuraava arvo on 1 ja se kytketään pois päältä. Rekisteriin talletetaan tällöin arvo 0. Kun yhteen jaksoon kuluneiden kellojaksojen lukumäärä N on tiedossa, jaetaan 67 kellosignaalin taajuus 50 MHz sillä. Jos N on suurempi kuin 50β106, jakolaskua ei tehdä, vaan tulokseksi pyöristetään suoraan 1 Hz. N:n ollessa 0, jakolaskua ei myöskään suoriteta, vaan tulokseksi saadaan 0 Hz. Jakolaskussa N:n eniten merkitsevä bitti jätetään pois, koska jos jako suoritetaan, N on korkeintaan 50β106 ja eniten merkitsevä bitti on tällöin aina 0. Lopputulos saturoidaan arvoon 9999 jakolaskun antaessa sitä suuremman arvon. Systeemissä on 24-bittinen laskuri, joka käy läpi arvoja nollasta lukuun 16.666.665 saakka, jonka jälkeen se palaa nollaan. Laskurin lähtö on aktiivinen laskurin sisällön ollessa 16.666.665 ja tämä kertoo muulle logiikalle milloin kolmasosasekunti on kulunut. Laitteen resetoiminen ja build-in self-testin alkaminen nollaavat laskurin. Kun laskurin lähtö on aktiivinen, viimeisimmän havaitun jakson taajuus luetaan talteen 14-bittiseen rekisteriin. Tämän kolmasosasekunnin välein päivittyvän rekisterin sisältö muunnetaan 7-segmenttimuotoon ja viedään käytetyille 7segmenttinäytöille. 2.1.2.2. Sisäinen signaaligeneraattori Normaalissa toiminnassa signaaligeneraattorin taajuus valitaan evaluointikortin liukukytkimillä. Taajuus syötetään BCD-muodossa, joten se täytyy muuntaa binäärimuotoon. Kun BIST aktivoidaan, sen toimintaan valmiiksi ohjelmoidut taajuusarvot ohittavat liukukytkimillä syötetyn arvon. Suurin syötettävissä oleva taajuus on 9999 Hz, jonka esittäminen vaatii 14 bittiä. Valinnan nykyinen arvo ja edellisellä kellojaksolla ollut arvo talletetaan kahteen 14-bittiseen rekisteriin. Syötetyn taajuuden perusteella pitää selvittää kuinka monta kellojaksoa halutun signaalin jakso on. Tähän tulokseen päästää jakamalla kellon taajuus halutulla taajuudella. Jakaminen tehdään vain halutun taajuuden uuden arvon ollessa nollasta eroava. Kun jakolasku on suoritettu, tulos tallennetaan 26-bittiseen rekisteriin ja samalla käynnistetään 26-bittinen laskuri siten, että se alkaa laskea nollasta ylöspäin saaden arvon yksi kellojakson kuluttua tuloksen taltioimisesta rekisteriin. Signaaligeneraattorin lähtö on nolla, mikäli halutun taajuuden uusi arvo on 0 Hz. Muussa tapauksessa lähtö on yksi laskurin arvon ollessa pienempi kuin puolet talletetusta signaalin jaksonpituudesta. Laskurin ollessa kyseistä arvoa suurempi tai yhtä suuri sen kanssa, signaaligeneraattorin lähtö on nolla. Kun laskurin arvo on yhden laskettua jaksonpituutta pienempi, se palaa seuraavalla nousevalla kellonreunalla arvoon 0. Näin saadaan generoitua signaali, joka on puolet halutusta jaksosta ykkönen ja loput jaksosta nolla. Jos halutun taajuuden uusi arvo eroaa edellisestä arvosta, niin tallennettu jaksonpituus ja taajuussignaalia generoiva laskuri nollataan. 68 2.1.3. Käyttöliittymä Virtojen päälle laittamisen sekä resetoinnin jälkeen laite aloittaa toimintansa mitaten oletusarvoisesti ulkoisen signaalin taajuutta. Mittauskohdetta voidaan vaihtaa painamalla vasemmanpuoleisinta neljästä evaluointikortin painonapista. Mitattaessa sisäisen signaaligeneraattorin taajuutta kyseisen napin yläpuolella oleva vasen vihreä ledi palaa. Mittaustulos esitetään neljällä oikeanpuoleisimmalla kahdeksasta evaluointikortin 7-sekmenttinäytöstä. Toinen nappi vasemmalta käynnistää build-in self-testin, joka kestää noin sekunnin. Kyseisen napin päällä oleva vasen vihreä ledi syttyy kun BIST-tila on päällä. Jos testi suoritettiin onnistuneesti, myös oikeanpuoleinen ledi syttyy. Testin päätyttyä palataan normaaliin toimintaan painamalla samaa nappia uudestaan, jolloin molemmat ledit sammuvat. Laitteen voi resetoida painamalla oikeanpuoleisinta nappia. Sen yläpuolinen vasen ledi palaa niin kauan kuin nappi on painettuna. Signaaligeneraattorin taajuus asetetaan kuudellatoista oikeanpuoleisimmalla liukukytkimellä. Kytkimen ollessa alhaalla sen arvo on 0 eikä sen päällä oleva punainen ledi pala. Yläasennossa kytkimen arvo on 1 ja ledi on päällä. Taajuus syötetään BCD-koodattuna siten, että neljä vasemmanpuoleisinta kytkintä määrittää tuhannet, neljä seuraavaa sadat ja niin edelleen. Jos BCD-koodiksi annetaan jokin muu kuin luku väliltä 0β¦9, niin se tulkitaan nollaksi. 2.1.4. Testattavuus Laitteen oikeellista toimintaa on helppo testata joko ulkoisella signaalilähteellä, jonka taajuus tiedetään tai sisäisellä signaaligeneraattorilla, jonka taajuus voidaan valita itse. Kolmantena vaihtoehtona on BIST, joka testaa automaattisesti laitteen toiminnan. Testi on kolmiosainen ja kaikki vaiheet kestävät noin kolmasosasekunnin. Jokaisen vaiheen ajan sisäinen signaaligeneraattori synnyttää yhtä kolmesta vapaasti valitusta taajuudesta, jotka ovat 3742 Hz, 5136 Hz ja 681 Hz. Vaiheiden lopussa näytön ohjaamiseen käytetyn rekisterin sisältöä verrataan generoituun taajuuteen. Jos kaikki kolme vaihetta suoritettiin onnistuneesti, testin käynnistävän napin yläpuolella oleva oikeanpuoleinen ledi syttyy. 2.1.5. Toteutettavuusanalyysi Käytetyltä FPGA-piiriltä löytyy 33.216 LE:tä. Tarvittavat aritmeettiset operaatiot onnistuvat helposti käytettävissä olevilla resursseilla. Suoritettavat jakolaskut ovat laskennallisesti vaativimmat toiminnot, mutta kriittinen polku pysyy kuitenkin lyhy- 69 ehkönä, koska niiden kanssa ei suoriteta sarjassa muita monimutkaisia toimenpiteitä. Tarvittavien D-kiikkujen lukumäärä on muutamien satojen kiikkujen luokkaa, joten käytettävissä olevien D-kiikkujen määrä on täysin riittävä laitteen toteuttamiseen. 2.2. Rekisterisiirtotason kuvaus Alla esitetään seuraavaksi suunnitellun vaatimusmäärittelyn toteuttavan logiikan rekisterisiirtotason kuvaus sekä kuvaus sen toiminnasta. 2.2.1. Rakennelohkot Laitteen toteutus on jaettu kolmeen lohkoon, jotka ovat ohjausosa, taajuusmittari ja signaaligeneraattori. Ohjausosa pitää muistissa nykyiseen toimintatilaan liittyvät arvot ja generoi ohjaussignaalit pohjautuen laitteen nykyiseen tilaan ja painonapeilta saapuviin painalluksiin. Taajuusmittari puolestaan mittaa joko ulkoisen signaalin tai sisäisen signaaligeneraattorin taajuutta ohjausosan ohjauksen mukaisesti. Sen laskema tulos näkyy laitteen näytöllä ja build-in self-testin ollessa käynnissä ohjausosa myös käyttää tätä tulosta määrittämään toimiiko laite oikein. Signaaligeneraattori generoi halutun taajuista signaalia. Normaalin toiminnan aikana taajuus valitaan liukukytkimien avulla, mutta BIST-tilassa käytetään ohjausosan määräämiä arvoja. 2.2.2. Lohkojen rakenne ja toimintaperiaate 2.2.2.1. Ohjausosa Ohjausosan RTL-kuvaus on esitetty kuvassa 56. Evaluointikortin painonapit 0, 2 ja 3 on kytketty pinneihin PIN_G26, PIN_P23 ja PIN_W26. Vihreät ledit 1, 4, 5 ja 7 on puolestaan kytketty pinneihin PIN_AF22, PIN_U18, PIN_U17 ja PIN_Y18. Painonapit syöttävät signaalia, jonka logiikkataso on 1 kun ne eivät ole painettuina ja nollaa ollessaan painettuina. Ledit palavat kun niihin kytkettyihin pinneihin tuodaan signaali, jonka arvo on 1. Lisäksi evaluointikortilta löytyvä 50 MHz:n oskillaattori on kytketty pinniin PIN_N2 ja sitä käytetään kellosignaalina kaikelle käytetylle digitaalilogiikalle. 70 Kuva 56. Ohjausosan RTL-kuvaus. Painonappi 0 on kytketty asynkroniseen reset signaaliin A_RESET, joka menee kaikkiin rekistereihin. Lisäksi painonapin invertoitu arvo ajaa vihreää lediä 1, joka on toinen painonapin 0 päällä olevista ledeistä. Näin ledi palaa painonapin ollessa painettuna. Signaalia ei ole synkronoitu kelloon, koska kyseessä on asynkroninen signaali. Painonapilta 3 tuleva signaali synkronoidaan kelloon ja napin painalluksesta generoidaan yhden kellojakson mittainen pulssi invertoimalla ensin signaali ja tuomalla se kaksipaikkaiseen siirtorekisteriin. Uuden arvon ollessa 1 ja vanhan 0 todetaan, että nappia on painettu ja tulos viedään rekisteriin. Painonappi 2 synkronoidaan samalla tavalla. Napilla 2 ohjataan rekisteriä, johon on talletettu 0 BIST-tilan ollessa pois päältä ja 1 sen ollessa päällä. Napin painaminen vaihtaa rekisterin arvoa näiden kahden tilan välillä. Kun BIST-tila ei ole päällä, napin painaminen muuttaa aina rekisterin arvon nollasta ykköseksi, mutta BIST-tilan ollessa aktivoituna napin painaminen ei tee mitään, jos laitteen testaaminen on vielä kesken. Rekisterin arvo ajaa suoraan vihreätä lediä 5 ja signaalia MODE_SELECT, joka ohjaa signaaligeneraattorin toimintaa. Vihreä ledi 5 sijaitsee napin 2 yläpuolella ja sen palaessa BIST-tila on aktivoituna. BIST-rekisteri on kytketty siirtorekisteriin, jonka avulla havaitaan sen arvon muuttuneen nollasta ykköseksi. Kun näin tapahtuu, generoitunut pulssi kasvattaa kaksibittisen rekisterin arvoa nollasta ykköseen. Tämän rekisterin arvo ohjaa multiplekseriä, jonka lähtö ajaa signaalia BIST_VALUE, joka on yksi signaaligeneraattorin ohjaussignaaleista. Kolme multiplekseriin tuotavaa nollasta eroavaa arvoa vastaavat kolmea testin aikana generoitavaa taajuutta. Kun tiedon BIST-tilan nykyisestä vaiheesta sisältävän rekisterin arvo ei ole nolla, sen sisältö kasvaa yhdellä ohjausosasta löytyvän sekunnin kolmasosan välein pulssin generoivan laskurin toimesta. 71 Näin nelitilainen rekisteri vaihtaa tilaansa kolmasosasekunnin välein, kunnes sen arvo on jälleen 0, jolloin BIST-tila on mahdollista kytkeä pois päältä painamalla nappia 2. Mainittu noin kolmasosasekunnin välein kellojakson pituisen ykköspulssin synnyttävä laskuri laskee kellojaksoja nollasta arvoon 16.666.665 saakka, jolloin sen lähtö on yksi ja aloittaa sitten jälleen nollasta. BIST-rekisterin arvon muuttuminen nollasta ykköseksi nolla laskurin, jotta signaaligeneraattori generoi kutakin testitaajuutta noin kolmasosasekunnin ajan. Lisäksi laskurin lähtö on kytketty signaaliin UPDATE_SCREEN, joka on yksi taajuusmittarin ohjaussignaaleista. Painonapilla 3 ohjataan rekisteriä johon on talletettu tieto siitä, kumpi taajuusmittarin tuloista on valittuna. Nolla vastaa ulkoista signaalilähdettä ja ykkönen sisäistä signaaligeneraattoria. Nappia painettaessa rekisterin tila vaihtuu, mutta vain jos BIST-tila ei ole päällä. Testauksen ollessa käynnissä napin 3 painaminen ei tee mitään ja rekisterin sisällöstä riippumatta taajuusmittarin valituksi tuloksi pakotetaan sisäinen signaaligeneraattori. Signaali SOURCE_SELECT välittää tiedon valitusta lähteestä taajuusmittarille ja sen arvon ollessa yksi vihreä ledi 7 palaa merkkinä siitä, että signaaligeneraattori on valittuna. Viimeisenä toimintona ohjausosa osaa määrittää suoritettiinko build-in self-test onnistuneesti. Tähän käytetään kolmituloista AND-porttia, jonka ensimmäinen tulo on kolmasosasekunteja laskevan laskurin lähtö. Toinen tulosignaali on invertoitu arvo neljä BIST-tilaa läpi käyvän rekisterin arvosta verrattuna komparaattorin avulla nollaan. Se on siis yksi kun kyseisen rekisterin sisältö on 1, 2 tai 3. Molempia näistä kahdesta tulosta on viivästetty yhdellä kellojaksolla ennen AND-porttiin tuomista, koska kolmas tulo saa kiinnostavan arvon vasta sillä kellojaksolla, kun kaksi muuta ehtivät päivittyä uuteen arvoon. Tämä kolmas tulo on kytketty komparaattorin lähtöön, joka vertaa taajuusmittarilta tulevaa signaalia MEASUREMENT yhden kellojakson viivästettyyn arvoon multiplekserin avulla valitusta BIST_VALUE:sta, joka edustaa päättyneen testivaiheen aikana generoitua taajuusarvoa. Käytännössä mainitun AND-portin lähtö on siis yksi, jos näyttöä käskettiin juuri päivittää, jolloin signaali MEASUREMENT on saanut uuden arvon ja tämän arvon täytyy olla sama kuin generoitu testitaajuus. Lisäksi kyseessä täytyi olla ajanjakso, jolloin lähetettiin jotain kolmesta testitaajuudesta. Ehtojen täyttyessä kaksibittisen rekisterin arvoa kasvatetaan yhdellä merkiksi yhdestä onnistuneesti suoritetusta testivaiheesta. Rekisteri nollataan aina BIST-rekisterin ollessa nolla joten, kun BIST-tila käynnistetään, sen lähtöarvo on aina nolla. Jos rekisterin sisältö saavuttaa testin aikana arvon 3, vihreä ledi 4 syttyy merkiksi testin onnistumisesta. Kyseinen ledi on oikeanpuoleinen kahdesta napin 2 yllä olevasta ledistä ja molempien pitäisi palaa testin onnistuttua sekä sammua, kun BIST-tila kytketään pois päältä painamalla nappia. 72 2.2.2.2. Taajuusmittari Taajuusmittarin rekisterisiirtotason kuvaus on esitetty kuvassa 57. Ulkoinen signaalilähde kytketään pinniin PIN_D25 ja sisäinen signaaligeneraattori pinniin PIN_K25. Multiplekseri valitsee halutun tulon ohjaussignaalin SOURCE_SELECT mukaisesti. Ulkoinen signaalilähde on synkronoitu kelloon kolmipaikkaisella siirtorekisterillä. Valittu tulosignaali tallennetaan kaksipaikkaiseen siirtorekisteriin. Signaalin uuden arvon ollessa yksi ja edellisen arvon nolla todetaan tapahtuneen nouseva reuna. Kuva 57. Taajuusmittarin RTL-kuvaus. Taajuusmittarista löytyy yksibittinen rekisteri, joka varastoi tiedon siitä onko mitattavan signaalin jaksonpituutta laskeva laskuri käynnissä. Sen sisältö on aluksi nolla, mutta se vaihtuu ykköseksi kun ensimmäinen nouseva reuna on havaittu, mikä käynnistää 27-bittisen laskurin. Laskurin ollessa käynnissä sen sisältö kasvaa yhdellä joka kellojakso, kunnes havaitaan seuraava nouseva reuna mitattavassa signaalissa, jolloin se jatkaa laskemista arvosta yksi. Vaihtoehtoisesti laskuri palautetaan arvoon yksi sen saavuttaessa arvon 100β106, jolloin se myös kytketään pois päältä. Samoin tapahtuu havaittaessa muutos signaalissa SOURCE_SELECT, jolloin signaalilähde vaihtuu ja jäädään odottamaan ensimmäistä nousevaa reunaa. Jaksonpituutta mittaavan laskurin arvo on kytketty 27-bittisen rekisterin tuloon. Rekisteriin talletetaan uusi arvo vain kun havaitaan mitattavassa signaalissa tapahtuneen nouseva reuna laskurin ollessa käynnissä. Laskurin saavuttaessa arvon 100β106 rekisteri nollataan, koska taajuus pyöristyy tällöin nollaksi. Rekisteri nollataan myös signaalilähteen vaihtuessa. Käytetty kellotaajuuden arvo 50 MHz jaetaan tallennetun jaksonpituuden 26:lla vähiten merkitsevällä bitillä. Tämän jakolaskun tulosta ei kuitenkaan viedä suoraan kolmasosasekunnin välein päivittyvään 14-bittiseen rekisteriin. Sen sijaan kolmen 73 komparaattorin ja kolmen multiplekserin avulla tulos saatetaan pakottaa arvoon 0, 1 tai 9999. Nollaan se pakotetaan tallennetun jaksonpituuden ollessa nolla, ykköseen sen ollessa suurempi kuin 50β106 kellojaksoa ja arvoon 9999 jakolaskun tuloksen ollessa suurempi kuin 9999. Viimeisenä vaiheena taajuusmittariin talletettu taajuuden arvo viedään ohjausosalle MEASUREMENT nimisenä signaalina sekä evaluointikortin neljälle oikeanpuoleisimmalle 7-segmenttinäytölle. Niitä varten taajuuden arvo muunnetaan ensin binääriluvusta 7-segmenttimuotoon ja tuloksen kaikki bitit invertoidaan, koska evaluointikortin näyttöjen segmentit palavat kun niille tuo signaalin, jonka looginen tila on 0 ja päinvastoin. Selkeyden takia signaaligeneraattorin RTL-kuvaukseen ei ole merkitty erikseen kaikkia pinnejä joihin näyttöjen segmentit on kytketty, vaan ne on koottu yhdeksi 28-bittiseksi signaaliksi TO_7SEGS. 2.2.2.3. Signaaligeneraattori Kuvassa 58 on esitetty signaaligeneraattorin RTL-kuvaus. Pinnejä, joihin evaluointikortin 16 oikeanpuoleisinta liukukytkintä on kytketty, ei ole esitetty erikseen, vaan ne on ilmaistu yksinkertaisemmin signaalina SELECTED_FREQUENCY. Kytkimillä valittu arvo synkronoidaan kelloon kolmipaikkaisen 16-bittisen siirtorekisterin avulla. Kukin kytkimistä sytyttää yllään olevan punaisen ledin ollessaan yläasennossa. Pinnejä, joihin nämä 16 lediä on kytketty, ei myöskään ole merkitty RTLkuvaukseen erikseen, vaan niitä vastaa signaali TO_RED_LEDS. Kuva 58. Signaaligeneraattorin RTL-kuvaus. 74 Liukukytkimiltä tuleva taajuus on ilmaistu BCD-muodossa. Vaatimusmäärittelyssä on päätetty, että muut kuin välillä 0β¦9 olevat arvot tulkitaan nolliksi, joten syötettyä taajuutta tarkastellaan neljän bitin ryhminä ja lukua 9 suuremmat arvot korvataan nollilla. Sitten nämä 16 bittiä muunnetaan binääriluvuksi muuta logiikkaa varten. Ohjaussignaalin MODE_SELECT ohjaamana käyttäjän syöttämä taajuusarvo ohitetaan, kun BIST-tila on kytketty päälle. Tällöin generoidaan signaalin BIST_VALUE määräämää taajuutta. Taajuusarvo tallennetaan kaksipaikkaiseen siirtorekisteriin. Käytetty kellotaajuus 50 MHz jaetaan uusimmalla siirtorekisterissä olevalla taajuusarvolla, mutta sen ollessa nolla jakolaskun tulokseksi valitaan suoraan multiplekserillä nolla ja lisäksi signaaligeneraattorin pinniin PIN_K25 kytketty lähtö pakotetaan vastaavalla tavalla nollaksi. Jakolaskun tulos tallennetaan 26-bittiseen rekisteriin. Signaaligeneraattorissa on niin ikään 26-bittinen laskuri, joka kasvattaa arvoaan yhdellä joka kellojakso. Sekä rekisteri että laskuri nollataan, jos siirtorekisteriin talletettu uusin ja sitä edeltävä arvo eroavat toisistaan. Tämän lisäksi signaaligeneraattorissa on yksibittinen rekisteri, joka pitää 26-bittisen laskurin nollattuna yhden kellojakson pitempään. Näin tehdään sen takia, että jakolaskun tallentaminen rekisteriin vie yhden kellojakson siitä kun siirtorekisterin molemmat talletetut arvot muuttuvat samoiksi. Kun tulos talletetaan rekisteriin, laskurin arvo kasvaisi samalla nollasta ykköseksi, mutta sen halutaan alkavan laskemaan vasta kun jakolaskun tulos on tiedossa. Signaaligeneraattorin lähtö generoidaan vertaamalla laskurin arvoa rekisteriin talletettuun arvoon. Laskurin arvon ollessa pienempi kuin puolet rekisteriin talletetusta arvosta, generoidun signaalin arvo on yksi ja muulloin sen arvo on nolla. Kun laskurin arvo on yhden rekisterissä olevaa arvoa pienempi, laskurin arvo palaa nollaan ja alkaa alusta. 2.3. Käytännöntoteutus Suunnitellun rekisterisiirtotason mallin rakennekuvaus laadittiin käyttäen apuna Alteran Quartus II -ohjelman lohkokaaviotyökalua. Lohkojen käyttäytymiskuvaukset toteutettiin VHDL-kielellä. Toiminnaltaan yksinkertaisimmat lohkot kuten vakiot, komparaattorit ja multiplekserit luotiin käyttäen ohjelmasta löytyvää MegaWizard Plug-In Manager -toimintoa. Lohkot pyrittiin sijoittelemaan lohkokaavioihin mahdollisimman samaan tapaan kuin ne esiintyvät edellä esitetyissä RTL-kaavioissa. Funktiolohkojen nimeämisessä pyrittiin hyvin systemaattiseen esitystapaan. Yleisimmin esiintyvissä lohkoissa CONST-etuliite tarkoittaa lohkon generoivan haluttua vakiota. Ensimmäinen etuliitettä seuraava numero ilmoittaa kyseisen vakion arvon kymmenjärjestelmän lukuna ja vapaaehtoinen jälkimmäinen numero luvun ilmaisemiseen käytettyjen bittien lukumäärän. COMP-etuliite tarkoittaa kyseessä olevan 75 komparaattori. Tätä seuraavat kirjaimet EQ tarkoittavat sen vertaavan yhtäsuuruutta, NE erisuuruutta, GRE tulon A olemista suurempi kuin tulo B ja LES tulon A olemista pienempi kuin B. Komparaattorin tyypin kertovien kirjaimien jälkeinen numero ilmoittaa lohkon tulojen bittimäärän. Multipleksereitten nimet puolestaan alkavat kirjaimilla MUX ja tätä seuraa tulojen määrä sekä niiden bittileveys. Moninaisten suunnitelmassa käytettyjen rekisterien ja siirtorekisterien VHDLkoodit kirjoitettiin itse. Etuliite REG viittaa rekisteriin ja SRG siirtorekisteriin. Nimestä löytyvä sana ENABLE tarkoittaa rekisterissä olevan sallintatulo ja SRESET puolestaan viittaa synkroniseen nollaustuloon. Esimerkki siirtorekisteriä varten kirjoitetusta VHDL-kuvauksesta on esitetty liitteenä 1. Myös työssä tarvittavat laskurit toteutettiin itse ja niiden nimestä löytyy sana COUNTER. Yksinkertaisen laskurin koodiesimerkki löytyy liitteenä 2. Edellä mainittujen lisäksi laitteesta löytyy myös erityistä tehtävää suorittavia rekistereitä ja laskureita, joille on annettu lohkokaaviossa oma uniikki nimensä. Näistä puhutaan tarkemmin käytäessä läpi lohkokaavioitten toimintaa tarkemmin yksi kerrallaan. VHDL-koodit BCD-koodatun luvun muuntamiseksi binääriluvuksi, binääriluvun muuntamiseksi BCD-koodiksi ja BCD-muotoisen luvun muuntamiseksi 7segmenttimuotoon annettiin työssä valmiina ja ne löytyvät mainitussa järjestyksessä liitteistä 3β5. Lohkokaavioissa näistä lohkoista käytetään nimityksiä bcd_bin_two_nested_loops, bin_bcd_two_nested_loops ja hex27seg. Koko systeemin ylimmän tason lohkokaavio on esitetty kuvassa 59. Siinä laitteen kolme rakennelohkoa on kytketty toisiinsa ja evaluointikortin pinneihin. Kaikille laitteen rekistereille tulee yhteinen kellosignaali ja asynkroninen nollaustulo. Kuva 59. Suunnitellun laitteen ylimmän tason lohkokaavioesitys. Kuvasta 60 nähdään laitteen ohjausosan lohkokaavio. Tarkastelun helpottamiseksi kaavio on myös esitetty kahteen osaan jaettuna kuvissa 61 ja 62. Kokonainen lohkokaavio on myös esitetty sivulle pystysuuntaan tulostettuna liitteessä 6. 76 Kuva 60. Ohjausosan lohkokaavio. Kuva 61. Vasen puolisko ohjausosan lohkokaaviosta. Kuva 62. Oikea puolisko ohjausosan lohkokaaviosta. Piiristä löytyvä DETECT_RISE-lohko koostuu kaksipaikkaisesta siirtorekisteristä, jonka lähdössä suoritetaan looginen JA-operaatio uusimmalle arvolle ja sitä edeltävän arvon negaatiolle nousevan reunan havaitsemiseksi. Lohkon VHDL-kuvaus on 77 esitetty liitteessä 7. BIST_PHASE on kaksibittinen sallintatulolla varustettu laskuri, joka sisältää tiedon BIST-tilan nykyisestä vaiheesta. Laskurin sisältö kasvaa yhdellä sallintasignaalin ollessa yksi. Arvosta 3 se palaa arvoon 0. SUCCESSFUL_TESTS puolestaan pitää kirjaa onnistuneesti suoritettujen BIST-vaiheiden lukumäärästä ja se eroaa BIST_PHASE-lohkosta ainoastaan sillä, että siitä löytyy myös synkroninen nollaustulo. Kuvasta 63 näkyy taajuusmittarille piirretty lohkokaavio. Tarkastelun helpottamiseksi kaavio on myös esitetty kolmeen osaan jaettuna kuvissa 64β66. Tämän lisäksi täysi kaavio löytyy myös sivulle pystysuuntaan tulostettuna liitteestä 8. Kuva 63. Taajuusmittarin lohkokaavio. Kuva 64. Ensimmäinen kolmannes taajuusmittarin lohkokaaviosta. Kuva 65. Toinen kolmannes taajuusmittarin lohkokaaviosta. 78 Kuva 66. Kolmas kolmannes taajuusmittarin lohkokaaviosta. Piirikaaviossa esiintyvä lohko SRG3_SYNC on yksinkertaisesti vain yksibittinen siirtorekisteri, joka synkronoi tulosignaalin laitteen kelloon kolmen rekisterin avulla. DETECT_CHANGE-lohko on muuten samanlainen kuin edellä esitelty DETECT_RISE-lohko, mutta se suorittaa siitä löytyvän siirtorekisterin kahdelle lähdölle XOR-operaation tulosignaalissa tapahtuneen muutoksen havaitsemiseksi. CLOCK_CYCLE_COUNTER on 27-bittinen laskuri, joka laskee ulkoisen signaalin jaksonpituutta laitteen kellojaksoina. Siitä löytyvät ohjaustulot COUNTER_ON ja RISE_OR_RESET, joista ensimmäinen sallii laskurin laskemisen ylöspäin ja jälkimmäinen nollaa laskurin riippumatta signaalin COUNTER_ON arvosta. Laskurin VHDL-kuvaus on esitetty liitteessä 9. STORED_N on 27-bittinen rekisteri, joka varastoi CLOCK_CYCLE_COUNTER:in arvon sen tuloon RISE_COUNTER_ON tulevan signaalin arvon ollessa 1. ROUND_TO_ZERO-tulolla rekisterin sisällöksi voidaan pakottaa 0. Lohko UNSIGNED_DIVIDE_26BIT_CUSTOM on Quartus-ohjelmasta löytyvästä geneerisestä jakajasta muokattu 26-bittinen lohko, joka suorittaa tuoduille arvoille jakolaskun ja pyöristää tarvittaessa tulosta yhdellä ylöspäin, jos jakolaskun jakojäännös on suurempi tai yhtä suuri kuin jakajan arvo jaettuna kahdella eli toisin sanoen, jos jakojäännös kerrottuna kahdella on suurempi tai yhtä suuri kuin jakaja. Tämä ei ole resurssien käytön kannalta kaikista tehokkain toteutus, mutta sillä ei ole tässä tapauksessa väliä, koska käytetyn FPGA-piirin logiikkaelementtien määrä on enemmän kuin riittävän suunnitellun laitteen realisoimiseen. Muokatun lohkon VHDLkoodi löytyy liitteestä 10. STORE_RESULT puolestaan on yksinkertainen 14bittinen sallintatulolla varustettu rekisteri, johon talletetaan mitatusta jaksonpituudesta laskettu taajuus. Signaaligeneraattorille laadittu lohkokaavioesitys löytyy kuvasta 67. Helpompaa tarkastelua varten piirikaavio on myös jaettu kahteen osaan kuviin 68 ja 69. Lisäksi kokonainen lohkokaavio löytyy myös tulostettuna pystysuuntaan liitteestä 11. 79 Kuva 67. Signaaligeneraattorin lohkokaavio. Kuva 68. Vasen puolisko signaaligeneraattorin lohkokaaviosta. Kuva 69. Oikea puolisko signaaligeneraattorin lohkokaaviosta. COMP_HALFQ on erityinen vertailulohko, joka vertaa onko tulo P pienempi kuin tulo Q jaettuna kahdella eli toisin sanoen onko P kerrottuna kahdella pienempi kuin Q. COMP_QMIN1 on puolestaan vastaavanlainen lohko, joka vertaa onko P yhden Q:ta pienempi. Molempien komparaattoreitten VHDL-kuvaukset on esitetty liitteissä 12 ja 13. 80 3. LIITTEET Liite 1 Esimerkki siirtorekisterille kirjoitetusta VHDL-kuvauksesta Liite 2 Esimerkki laskurille kirjoitetusta VHDL-kuvauksesta Liite 3 Valmiiksi annettu VHDL-koodi BCDβBIN -muunnosta varten Liite 4 Valmiiksi annettu VHDL-koodi BINβBCD -muunnosta varten Liite 5 Valmiiksi annettu VHDL-koodi BCDβ7SEG -muunnosta varten Liite 6 Ohjausosan lohkokaavio Liite 7 Lohkon DETECT_RISE VHDL-kuvaus Liite 8 Taajuusmittarin lohkokaavio Liite 9 Lohkon CLOCK_CYCLE_COUNTER VHDL-kuvaus Liite 10 Lohkon UNSIGNED_DIVIDE_26BIT_CUSTOM VHDL-kuvaus Liite 11 Signaaligeneraattorin lohkokaavio Liite 12 Lohkon COMP_HALFQ VHDL-kuvaus Liite 13 Lohkon COMP_QMIN1 VHDL-kuvaus Liite 1. Esimerkki siirtorekisterille kirjoitetusta VHDL-kuvauksesta -- 14-bittinen siirtorekisteri. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity SRG2X14 is port( CLK : in STD_LOGIC; A_RESET : in STD_LOGIC; DATA_IN : in STD_LOGIC_VECTOR(13 downto 0); DATA_OUT_0 : out STD_LOGIC_VECTOR(13 downto 0); DATA_OUT_1 : out STD_LOGIC_VECTOR(13 downto 0) ); end SRG2X14; architecture RTL of SRG2X14 is signal REG0 : STD_LOGIC_VECTOR(13 downto 0); signal REG1 : STD_LOGIC_VECTOR(13 downto 0); begin SRG: process (CLK, A_RESET) begin if (A_RESET = '0') then REG0 <= (others => '0'); REG1 <= (others => '0'); elsif rising_edge(CLK) then REG1 <= REG0; REG0 <= DATA_IN; end if; end process SRG; DATA_OUT_0 <= REG0; DATA_OUT_1 <= REG1; end RTL; 81 Liite 2. Esimerkki laskurille kirjoitetusta VHDL-kuvauksesta -- 26-bittinen laskuri. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity COUNTER_26B is port( CLK : in STD_LOGIC; RESET : in STD_LOGIC; A_RESET : in STD_LOGIC; DATA_OUT : out STD_LOGIC_VECTOR(25 downto 0) ); end COUNTER_26B; architecture RTL of COUNTER_26B is signal COUNTER_VALUE : UNSIGNED(25 downto 0); begin COUNT_UP: process (CLK, A_RESET) begin if (A_RESET = '0') then COUNTER_VALUE <= (others => '0'); elsif rising_edge(CLK) then if (RESET = '1') then COUNTER_VALUE <= (others => '0'); else COUNTER_VALUE <= COUNTER_VALUE + 1; end if; end if; end process COUNT_UP; DATA_OUT <= std_logic_vector(COUNTER_VALUE); end RTL; 82 Liite 3. Valmiiksi annettu VHDL-koodi BCDβBIN -muunnosta varten -- Title: BCD-to-BinaryConverter library IEEE; use IEEE.std_logic_1164.all; use ieee.numeric_std.all; use IEEE.std_logic_unsigned.all; entity bcd_bin_two_nested_loops is generic( width_B: positive := 19; width_P: positive := 16); port ( B: in std_logic_vector (width_B - 1 downto 0); P: out std_logic_vector (width_P - 1 downto 0) ); end bcd_bin_two_nested_loops; architecture behavior of bcd_bin_two_nested_loops is begin process(B) variable z: unsigned (width_B + width_P - 4 downto 0); variable zz: unsigned (width_B + width_P - 4 downto 0); begin z := (others=>'0'); z(width_B + width_P - 4 downto width_P - 3) := unsigned(B); zz := z; for i in 0 to width_P - 4 loop for j in 0 to (((width_B + width_P) / 8) - 1) loop if z((width_P + 1) + j * 4 downto (width_P + 1) + j * 4 - 3) > 7 then z((width_P + 1) + j * 4 downto (width_P + 1) + j * 4 - 3) := z((width_P + 1) + j * 4 downto (width_P + 1) + j * 4 - 3) - 3; else z((width_P + 1) + j * 4 downto (width_P + 1) + j * 4 - 3) := z((width_P + 1) + j * 4 downto (width_P + 1) + j * 4 - 3); end if; end loop; z := z srl 1; end loop; P <= std_logic_vector(z(width_P - 1 downto 0)); end process; end behavior; 83 Liite 4. Valmiiksi annettu VHDL-koodi BINβBCD -muunnosta varten -- Title: Binary-to-BCD Converter library IEEE; use IEEE.std_logic_1164.all; use ieee.numeric_std.all; use IEEE.std_logic_unsigned.all; entity bin_bcd_two_nested_loops is generic( width_B: positive := 16; width_P: positive := 19); port ( B: in std_logic_vector (width_B - 1 downto 0); P: out std_logic_vector (width_P - 1 downto 0) ); end bin_bcd_two_nested_loops; architecture behavior of bin_bcd_two_nested_loops is begin process(B) variable z: unsigned (width_B + width_P - 1 downto 0); --variable loop_max_i : integer range 0 to width_B - 4; --variable loop_max_j : integer range 0 to (width_P / 4) - 1; --variable loop_max_i := width_B - 4; --variable loop_max_j := (width_P / 4) - 1; begin z := (others=>'0'); z(width_B + 2 downto 3) := unsigned(B); for i in 0 to width_B - 4 loop for j in 0 to ((width_P / 4) - 1) loop if z(width_B + j * 4 + 3 downto width_B + j * 4) > 4 then z(width_B + j * 4 + 3 downto width_B + j * 4) := z(width_B + j * 4 + 3 downto width_B + j * 4) + 3; else z(width_B + j * 4 + 3 downto width_B + j * 4) := z(width_B + j * 4 + 3 downto width_B + j * 4); end if; end loop; 84 85 z(width_B + width_P - 1 downto 1) := z(width_B + width_P - 2 downto 0); -- shift left end loop; P <= std_logic_vector(z(width_B + width_P - 1 downto width_B)); end process; end behavior; Liite 5. Valmiiksi annettu VHDL-koodi BCDβ7SEG -muunnosta varten -- bcd to 7-segment coder, active low outputs in de2 style library ieee; use ieee.std_logic_1164.all; entity hex27seg is port ( hex : in std_logic_vector(3 downto 0); segment : out std_logic_vector(6 downto 0) ); end hex27seg; architecture design of hex27seg is begin process (hex) is begin case hex is -- display segment order when "0000" => segment <= "1000000"; when "0001" => segment <= "1111001"; when "0010" => segment <= "0100100"; when "0011" => segment <= "0110000"; when "0100" => segment <= "0011001"; when "0101" => segment <= "0010010"; when "0110" => segment <= "0000010"; when "0111" => segment <= "1111000"; when "1000" => segment <= "0000000"; when "1001" => segment <= "0010000"; when "1010" => 86 87 segment <= "0001000"; when "1011" => segment <= "0000011"; when "1100" => segment <= "1000110"; when "1101" => segment <= "0100001"; when "1110" => segment <= "0000110"; when "1111" => segment <= "0001110"; when others => segment <= "1111111"; end case; end process; end design; Liite 6. Ohjausosan lohkokaavio 88 Liite 7. Lohkon DETECT_RISE VHDL-kuvaus -- Tämä lohko havaitsee onko tulosignaali noussut nollasta ykköseksi. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity DETECT_RISE is port( CLK : in STD_LOGIC; A_RESET : in STD_LOGIC; DATA_IN : in STD_LOGIC; DATA_OUT : out STD_LOGIC ); end DETECT_RISE; architecture RTL of DETECT_RISE is signal SRG_CONTENT : STD_LOGIC_VECTOR(1 downto 0); begin SRG2: process (CLK, A_RESET) begin if (A_RESET = '0') then SRG_CONTENT <= "00"; elsif rising_edge(CLK) then SRG_CONTENT(1) <= SRG_CONTENT(0); SRG_CONTENT(0) <= DATA_IN; end if; end process SRG2; DATA_OUT <= SRG_CONTENT(0) and (not SRG_CONTENT(1)); end RTL; 89 Liite 8. Taajuusmittarin lohkokaavio 90 Liite 9. Lohkon CLOCK_CYCLE_COUNTER VHDL-kuvaus 91 -- 27-bittinen laskuri joka laskee laitteen tulosignaalin jaksonpituutta kellojaksoina. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity CLOCK_CYCLE_COUNTER is port( CLK : in STD_LOGIC; COUNTER_ON : in STD_LOGIC; RISE_OR_RESET : in STD_LOGIC; A_RESET : in STD_LOGIC; DATA_OUT : out STD_LOGIC_VECTOR(26 downto 0) ); end CLOCK_CYCLE_COUNTER; architecture RTL of CLOCK_CYCLE_COUNTER is signal COUNTER_VALUE : UNSIGNED(26 downto 0); begin MEASURE_N: process (CLK, A_RESET) begin if (A_RESET = '0') then COUNTER_VALUE <= (others => '0'); elsif rising_edge(CLK) then if (RISE_OR_RESET = '1') then COUNTER_VALUE <= (0 => '1', others => '0'); elsif (COUNTER_ON = '1') then COUNTER_VALUE <= COUNTER_VALUE + 1; else COUNTER_VALUE <= COUNTER_VALUE; end if; end if; end process MEASURE_N; DATA_OUT <= std_logic_vector(COUNTER_VALUE); end RTL; Liite 10. Lohkon UNSIGNED_DIVIDE_26BIT_CUSTOM VHDL-kuvaus 92 -- Tämä pyöristävä jakaja on muokattu Quartus II:n valmiista pohjasta -- etumerkittömälle jakajalle. -- Quartus II VHDL Template -- Unsigned Divide library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity UNSIGNED_DIVIDE_26BIT_CUSTOM is generic ( DATA_WIDTH_NUMER : natural := 26; DATA_WIDTH_DENOM : natural := 26 ); port ( NUMER : in std_logic_vector((DATA_WIDTH_NUMER - 1) downto 0); DENOM : in std_logic_vector((DATA_WIDTH_DENOM - 1) downto 0); QOUT : out std_logic_vector((DATA_WIDTH_NUMER - 1) downto 0) ); end UNSIGNED_DIVIDE_26BIT_CUSTOM; architecture RTL of UNSIGNED_DIVIDE_26BIT_CUSTOM is signal Q : unsigned((DATA_WIDTH_NUMER - 1) downto 0); signal RESULT : unsigned((DATA_WIDTH_NUMER - 1) downto 0); begin ROUNDING_DIVISION: process (NUMER, DENOM, Q, RESULT) begin Q <= unsigned(NUMER) / unsigned(DENOM); if (2*(unsigned(NUMER) rem unsigned(DENOM))) >= unsigned(DENOM) then 93 RESULT <= Q + 1; else RESULT <= Q; end if; end process ROUNDING_DIVISION; QOUT <= std_logic_vector(RESULT); end RTL; Liite 11. Signaaligeneraattorin lohkokaavio 94 Liite 12. Lohkon COMP_HALFQ VHDL-kuvaus -- Tämä lohko vertaa onko P vähemmän kuin puolet Q:sta. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity COMP_HALFQ is port( P : in STD_LOGIC_VECTOR(25 downto 0); Q : in STD_LOGIC_VECTOR(25 downto 0); DATA_OUT : out STD_LOGIC ); end COMP_HALFQ; architecture RTL of COMP_HALFQ is begin COMP: process (P, Q) begin if (2*unsigned(P) < unsigned(Q)) then DATA_OUT <= '1'; else DATA_OUT <= '0'; end if; end process COMP; end RTL; 95 Liite 13. Lohkon COMP_QMIN1 VHDL-kuvaus -- Tämä lohko vertaa onko tulo P yhden pienempi kuin tulo Q. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity COMP_QMIN1 is port( P : in STD_LOGIC_VECTOR(25 downto 0); Q : in STD_LOGIC_VECTOR(25 downto 0); DATA_OUT : out STD_LOGIC ); end COMP_QMIN1; architecture RTL of COMP_QMIN1 is begin COMP: process (P, Q) begin if (unsigned(P) = (unsigned(Q)-1)) then DATA_OUT <= '1'; else DATA_OUT <= '0'; end if; end process COMP; end RTL; 96
© Copyright 2024