. a) Kriittisen polun mukaan (DFF - DFF): (DFF = D Flip-Flop = D-kiikku) T clk > t DFF t critical t setup -> T clk > ns () ns ns > 9 ns -> F clk <. MHz. t DFF t critical t setup LK 544 N N ns ns ns ns b) Nopeimman polun mukaan (DFF - DFF): KEVÄT Ilman kellopoikkeamaa kiikuilla on tarjolla ns:n hold-aika (kiikun viive). Kellopoikkeama syö kiikun DFF hold-aikaa, jota on jäätävä vähintään ns -> kellopoikkeamaa (clock skew) saa olla siis korkeintaan ns. Ilman kellopoikkeamaa: LK,LK,D LSKUHJOITUSTEHTÄVI Kellopoikkeaman kanssa: LK t hold MLLITKISUT LK,D skew ns t hold ns. a) T clk > t DFF t critical t setup -> t DFF < T clk - t critical - t setup = ( - () - ) ns = 7 ns Kiikun maksimiviive on 7 ns. Kts. myös luentomoniste s. 9. b) Ensisijaisesti haettiin sitä, että mikäli kiikun viive on hyvin lyhyt, saattaa kellopoikkeaman tapauksessa edellisen kiikun lähtö asettua niin nopeasti, että seuraava kellopoikkeamasta kärsivä kiikku saada napattua edellisen kiikun uuden muuttuneen datan jo saman kellojakson sisällä, sen sijaan että data olisi viivästynyt kellojaksolla. Vähintäänkin edellisen kiikun viiveen on oltava niin suuri, että seuraavan kiikun pitoaikavaatimuksia ei rikota. Otetaan siis lyhin polku, eli esim. toisen kiikun lähdöstä kolmannen tuloon, ja oletetaan näiden kiikkujen kellotulojen välille ns:n kellopoikkeama. Mikäli toisen kiikun viive on alle ns, rikotaan pitoaikavaatimuksia. opyright ntti Mäntyniemi /6 opyright ntti Mäntyniemi /6
Mutta, en suosittele kellopoikkeaman hyödyntämistä antamalla lisäaikaa edellisen asteen asettumiselle. On kuitenkin lämpötilasta riippuvainen ja vaihtelee yksilöstä toiseen. Toisaalta, jos kiikun kolme lähtö myöhästyy kellopoikkeaman takia, kiikun kaksi datalle jää ns vähemmän aikaa asettua, joten kiikun maksimiviive 5 ns.. a) T clk > t DFF t critical t setup -> T clk > (86)ns > 4 ns -> F clk < 9.4 MHz. Koska kiikun asettumisajaksi on määrätty 6 ns, on myös kellosignaalin oltava nollana vähintään 6 ns ennen nousevaa reunaa. Eli kellojakson minimipituus on 4 ns ja positiivisen jakson minimipituus 4 ns (hold-ajan rajoittama) ja maksimipituus 4-6 = 8 ns (kellojakso - setup-aika). 6. LK 4 - --- - - - --- - - 8 6 8 6 b) Latchin asettumisaika kellosignaalin takareunaan verrattuna on 6 ns, joten kellosignaalin positiivisen osan minimipituus on myös 6 ns. Kuvasta nähdään, että viive kiikun lähdön tilanvaihdosta NND-portin läpi takaisin kiikun tuloon on oltava asettunut 6 ns ennen kellosignaalin takareunaa. Mutta, kun latchin tapauksessa kellopulssin pituutta kasvatetaan törmätään hold-ajan rikkomiseen, mikä rajoittaa kellon positiivisen jakson pituuden 4 ns:iin = t DL t L -t hold.. - - -- - 8 6 8=NND 4=hold 4. Kun tarkastellaan lähtökiikun datatulon loogista funktiota Karnaugh n kartan avulla voidaan todeta, että Muuttujan vaihtaessa tilaansa ykkösestä nollaan Z:n datatulossa näkyy invertterin viiveen mittainen staattinen hasardi, koska K-kartassa on yhdistelemättömiä ykkösiä (termi ), mista tosin ei ole haittaa, koska kiikkua on tarkoitus kellottaa vasta sitten, kun kiikkujen tulot ovat asettuneet. joituskaavio on monisteessa sivulla 5 kuva.5. 5. Minimoitu F:n lauseke = PI PI PI4 PI6 = D E E D E E - -/ - 4 5 opyright ntti Mäntyniemi /6 opyright ntti Mäntyniemi 4/6
7. Laaditaan toimintakuvuksen perusteella tilansiirtotaulukko, josta K-kartan avulla kiikun herätetulon yhtälö. Nykytila K-kartta S Seuraava tila tulojen D LE S funktiona D LE LE S D LE S D = LE S D LE S 8. a) Kuten monisteen kuvasta 5.9.a sivulla 6 nähdään, pahimmillaan voi kertyä N:n kiikun viive ennen kuin laskurin tila asettuu. Jotta laskurin tilaa tarkkailevien kiikkujen asettumisaikaa ei rikota on laskurilla aikaa saavuttaa stabiili tila T clk - t setup. I: Nt DF 99.5 ns -> N 99.5 ns /.5 ns -> N 99 bittiä. I: Nt DF 9.5 ns -> N 9.5 ns /.5 ns -> N 9 bittiä. I: Nt DF.5 ns -> N.5 ns /.5 ns -> N bitti. > D LE G D b) periaatteessa ei ole mitään rajoituksia. Vaikka laskuri olisi hyvin pitkä ja sen viive ylittäisi kellojakson, laskurin kellotuksen loputtua laskuri asettuisi aikanaan tilaan, joka kuvaa saapuneiden kellopulssien lukumäärää. S D D = ( LE D LE) S 9. a) Jos syntyvää jaettua taajuutta käytetään kellosignaalina kiikuille, niin pulssisuhteella ei ole niin väliä. Mutta, jos syntyvä jaettu taajuus on luonteeltaan synkronisen järjestelmän sallintasignaali, joka sallii esim. laskurin toiminnan yhden pääkellon jakson ajan, on tarpeen tuottaa yhden pääkellon jakson mittainen pulssi. Hahmotellaan tilannetta ajoituskaaviolla: LK T LK/8 4 5 6 7 4 5 6 7 4 5 6 7 4 5 I :Eräänä vaihtoehtona voidaan käyttää synkronista binäärilaskuria, joka käy läpi tilat,,,,4,5,6,7,... Totea tilakonesynteesin avulla, että laskurin kiikkujen herätetulojen yhtälöiksi tulee: D =. D = =, D = = ( ) = D = D = Jos laskurissa on sallintatulo ja neljäs bitti, ovat yhtälöt seuraavat: D =. D = = ΕΝ, D = D = Lisätään laskuriin lähtökooderi, joka tässä tapauksessa tunnistaa laskurin viimeisen tilan 7 = T (Terminal ount), niin saadaan kellojakson mittainen pulssi joka kahdeksas kellojakso. Lähdöstä saadaan myös 5/5- pulssisuhteella oleva kahdeksalla jaettu taajuus. T = = = LK / 8 LK opyright ntti Mäntyniemi 5/6 opyright ntti Mäntyniemi 6/6
b) Jos ajoitusvaatimukset estävät logiikan sijoittamisen tilakoneen takaisinkytkentäpoluille, on käytettävä esim. rengaslaskuria tai kierrettyä rengaslaskuria (Johnson-laskuri, Möbius-laskuri). engaslaskurissa tarvitaan k kpl kiikkuja k:n tilan esittämiseen. Kuvassa on esitetty laskurin rakenne ja ajoituskavio. Ensimmäinen kiikku asetetaan ykköseksi ja loput nollataan, minkä jälkeen laskuri alkaa toistaa sekvenssiään eli ykkönen kiertää kiikusta toiseen, eli saadaan kellojakson mittainen pulssi joka kahdeksas kellojakso jokaisen kiikun lähdöstä, tosin eri vaiheissa. Itsekorjaavan rakenteen vaatimaa logiikkaa ei tosin ole varaa lisätä ajoitusvaatimusten takia.. S 7 LK INIT LK INIT 4 5 6 7 4 5 6 7 4 5 6 7 4 5 Kierretyssä rengaslaskurissa tarvitaan k kpl kiikkuja k:n tilan esittämiseen. Kuvassa on esitetty laskurin rakenne ja ajoituskavio. Kaikki kiikut voidaan vaikka nollata, koska tila kuuluu sekvenssiin, minkä jälkeen laskuria alkaa toistaa sekvenssiään eli kiikujen lähdöissä on 5/5-pulssisuhteella kahdeksalla jaettu kello, tosin eri vaiheissa. Itsekorjaavan rakenteen vaatimaa logiikkaa ei tosin ole tässäkään varaa lisätä ajoitusvaatimusten takia. LK INIT LK INIT 4 5 6 7 4 5 6 7 4 5 6 7 4 5 4 5 6 7 opyright ntti Mäntyniemi 7/6 opyright ntti Mäntyniemi 8/6
. a, b) Tehdään tilansiirtotaulukko. Merkitään oikeaan sekvenssiin kuulumattomien tilojen seuraavaksi tilaksi Don t care, jotta saadaan minimitoteutus. Minimoidaan K-kartoilla.. Väärä sekvenssi Oikea sekvenssi Nykytila c) Itsekorjauksen aikaan saamiseksi tarvitaan D :n lausekkeeseen lisätermi, joka tunnistaa väärän tilan ja pakottaa D:n ykköseksi. Lisätermi saadaan seuraavasta säännöstä: D = m- m-... m--p, missä p = int(m/) (kokonaisosa m/:sta), missä m on kiikkujen lkm. Kiikut numeroidaan nollasta m-:teen. Siis, jos m on tässä tapauksessa 4, siitä seuraa, että p = int(4/) =. Eli D :ksi saadaan: D =. des. 7 5 4 8 5 6 4 9 Seuraava tila D D D D Don t care d d d d d d d d D = d d d d d d d d D = d d d d d d d d D = d d d d d d d d D =. Polynomin D D esitys LFS rakenteena on seuraavanlainen: = = lustetaan LFS tilaan (D D D), jotta se ei jää jumiin tilaan (kiikuissa latauksensallintatulot). Data scramblataan modulo--summaamalla se LFS:n tuottaman bittikuvion kanssa. Syötetään data sekoituspiiriin LS edellä. Vastaanottimessa lähettimessä scramblattu data descramblataan takaisin alkuperäiseksi bittijonoksi. Todetaan tämä myös rekisteritasolla tutkimalla kellojakso kellojaksolta rekisterien tiloja ja lähetettävää ja vastaanotettua dataa. Lähettimessä: datain D D D dataout LS Sekvenssi alkaa toistua. DD D datain Vastaanottimessa: datain D D D dataout LS Palautui alkuperäiseksi bittijonoksi! dataout 4-bittinen Johnson-laskuri itsekorjauksella on siis seuraavan näköinen: > LK INIT Jos m olisi vaikkapa 7, siitä seuraisi, että p = int(7/) =. Eli D :ksi saadaan: D = 6 5 4. (D = 7-7-... 7-- ). Kiikkujen määrän kasvaessa myös korjaustermien määrä kasvaa. opyright ntti Mäntyniemi 9/6 opyright ntti Mäntyniemi /6
. - -polynomi d 4 d, eli bitteinä - data d 7 d 6 d 5 d, bitteinä (tehtävän scramblattu data) - polynomin asteluku 4 -> 4-bittinen - kun jaetaan polynomilla, jonka asteluku on 4, voi jakojäännöksessä olla astelukuna korkeintaan, mikä vastaa 4-bittistä lukua. (Jos jakojäännöksenä olisi polynomi, jonka asteluku on 4, sen voisi vielä jakaa 4:n asteen polynomilla, eikä se silloin olisi vielä jakojäännös) - Koska -tarkistussumma on siis nelibittinen, kerrotaan lähetettävä data d 4 :lla jolloin saadaan lähetettäväksi dataksi -bittisenä d 4 (d 7 d 6 d 5 d ) = d d d 9 d 7, eli - Suoritetaan polynomien jakolasku jakokulmassa: d 7 d 5 d 4 d d d 4 d d d d 9 d 7 d d d 7 d 9 d 9 d 8 d 5 d 8 d 8 d 7 d 5 d 4 d 7 d 5 d 4 d 7 d 6 d d 6 d 5 d 4 d d 6 d 5 d d 4 d d d 4 d d jakojäännös Jakojäännös on d, eli nelibittisenä lukuna (jakojäännöksen korkein mahdollinen termi d puuttuu, kuten myös termi d eli d ). Lähetetään siis data d d d 9 d 7 d =. Vastaanottimessa suoritetaan jakolasku, jossa datan mukana : d 7 d 5 d 4 d d d 4 d d d d 9 d 7 d d d d 7 d 9 d d 9 d 8 d 5 d 8 d 8 d 7 d 5 d 4 d d 7 d 5 d 4 d d 7 d 6 d d 6 d 5 d 4 d d d 6 d 5 d d 4 d d 4 d jakojäännös nolla, ei virheitä. opyright ntti Mäntyniemi /6 -laskennan arkkitehtuuri polynomilla d 4 d on oheisen kuvan mukainen. mux_sel = = DD datain dataout Tarkistetaan toiminta lähettimessä rekisteritasolla. ekisterit on nollattu (tai alustettu sekvenssiin kuuluvaan tilaan). mux_sel-valintasignali on. Sitten kellotetaan 8 kertaa: din d d d d4. kellon jälkeen 8. kellon jälkeen Sitten mux_sel-valintasignali on nollaksi ja kellotetaan 4 kertaa -> jakojäännös datan perään. Takaisinkytkentälenkin katkaiseminen ja nollaaminen tekee rekistereistä siirtorekisterin, koska nollaamalla EXO-portin toinen tulo toisen tulon signaali näkyy lähdössä sellaisenaan. Lopussa nelibittisen rekisterin sisältö vastaa polynomia d (vähiten merkitsevä rekisteri d antaa termin ja toiseksi eniten rekisteri d termin d ). (Se tietenkin hämää, että rekisterit on numeroitu d d d d4, vaikka vastaavat termit polynomissa ovat d d d.) Vastaanottimessa rekisterit on nollattu (tai alustettu sekvenssiin kuuluvaan tilaan, samaan kuin lähettimessä). mux_sel-valintasignali on. Sitten kellotetaan kertaa: din d d d d4. kellon jälkeen. kellon jälkeen. Jakojäännös nolla, ei ollut bittivirheitä. D opyright ntti Mäntyniemi /6 D4 mux_sel
. Kuten kuvasta nähdään, tilakaaviossa on 8 tilaa, joten tilojen One hot-koodauksella tarvitaan 8 kiikkua. Kiikut alustetaan tilaan esim. resetoimalla seitsemän kiikkua ja asettamalla (set) yksi kiikku. Mikäli toteutusteknologiassa ei ole mahdollista valita kiikkujen resetoinnin ja asettamisen välillä, voidaan kaikki kiikut myös resetoida. Siinä tapauksessa yhden kiikun tulo ja lähtö invertoidaan riippuen siitä, mikä on haluttu ensimmäinen tila. D D 6 D 7 5 D D D D 4 D = D D D D D D D D 4. loitetaan m:n määrittämisestä. Koska lähtötaajuudelle on 55 eri vaihtoehtoa, tarvitaan 8-bittinen sana taajuudenvalintaan, eli m=8. Maksimitaajudella f 55, jolloin vaiheeseen summataan joka kierroksella 55, pitää yhteen syntyvään kellojaksoon saada vähintään kaksi näytettä sinitaulukosta Nyquistin säännön mukaisesti. L x 55. L log log5. L log5/log. L 8.99. Taulukon osoitteen L on siis oltava 9-bittinen. Peruslähtötaajuudella f (freq = ) käydään läpi kaikki taulukon L = 5 osoitetta, jolloin vaiheeseen summataan joka kierroksella. Jotta nämä kaikki osoitteet tulisi käytyä läpi 4.5 khz:n taajuudella on tulotaajuuden LK oltava 5 x 4.5 khz =.8 MHz. ekisterissä EG_m on siis 8-bittinen taajuudenvalintasana, joka määrää vaiherekisteriin EG_L kullakin kierroksella summattavan vaiheinkrementin. ekisterissä EG_L on 9-bittinen sen hetkinen vaiheen arvo, jota kumuloidaan summaimella, joka ylivuototapauksessa pyörähtää ympäri, eli saa aikaan modulo-5 operaation. Jos tulevan kellon LK taajuus on peruskellotaajuutta suurempi, tarvitaan jakaja, joka generoi halutuin välein kellojakson mittaisen sallintapulssin next_angle rekisterin EG_L päivittämiseksi, tässä esimerkissä jakajana on 8, eli tulevan kellon LK taajuus on 8 x.8 MHz = 7.664 MHz. Lähtötaajuudelle pätee kaava f out = (f LK / 9 ) freq. rkkitehtuurin toimintaa voi simuloida matlabilla käyttämällä dds.m-tiedoston matlab-kielistä käyttäytymiskuvausta ja sine_lut.dat sini-taulukkoa, jotka löytyvät kurssin kotisivulta. Kopioi nämä tiedostot työhakemistoosi unix-ympäristössä ja käynnistä matlab-ohjelma komennolla. > matlab ja dds.m antamalla matlabissa komento >> dds (jolloin ohjelma kysyy) nna ohjaussana freq? (kokeile tähän eri arvoja) ja tulostaa lähtösignaalista 5 näytettä. Normaalin tilakonesynteesin tapaan tilakaaviosta voisi laatia tilansiirtotaulukon, josta luettaisiin K-karttaan kiikkujen herätetulojen tilat. One hot -koodatun tilakoneen kiikkujen yhtälöt voi kuitenkin lukea suoraan tilakaaviosta. Koska vain yhden kiikun lähtö voi kerrallaan olla ykkönen, on helppo todeta tilakaaviosta ne ehdot, joilla kunkin kiikun seuraava tila on ykkönen. Kiikkujen herätetuloille saadaan siis seuraavat yhtälöt: D = D D D D 4 D 5 D 6 D 7 D = D D = D D = D D 4 = 4 D D 5 = 5 4 D D 6 = 6 D D 7 = 7 6 D. sel_freq LK freq m TDIV8 T= EG_m T T next_angle m P EG_L L T T L OM L x L - sin φ Tässä tapauksessa tilakoneessa on siis 8 laillista ja 8-8 = 48 laitonta tilaa. sel_freq freq LK sin φ opyright ntti Mäntyniemi /6 opyright ntti Mäntyniemi 4/6
5. Käytetään kosinin generointiin tehtävän 4 DDS:n NO-periaatetta (Numerically ontrolled Oscillator). Taulukkoon talletetaan kosinin arvot. Tunnistetaan algoritmista tarvittavat operaatiot. Tarvitaan kertoja ja summain sekä rekisteri, johon kumuloituva kertolaskujen summa talletetaan. Toiseen rekisteriin talletetaan lopullinen tulos jatkokäsittelyä varten, jolloin uusi integrointi voi alkaa seuraavalle symbolille. Mikäli käytetään etumerkittömien binäärilukujen kertojaa, tarvitaan lohkot, jotka muuntavat kahden komplementtiluvun etumerkittömäksi binääriluvuksi. Power-up-reset tehdään signaalilla async_reset. Signaali next_symbol sallii tuloksen lataamisen lähtörekisteriin ja clear_previous nollaa summarekisterin synkronisesti. Signaali integrate sallii summan tallentamisen summarekisteriin. -bittisen kahden komplementtiluvun lukualue on -48-47, eli kertolaskun maksimitulos etumerkittömänä voi olla 48, mihin riittää bittiä etumerkki kahden komplementissa. Näitä summataan 5 kpl, jolloin maksimi summa on 48 5, mihin tarvitaan bittiä etumerkin kanssa. (Kun tiedetään, että laskettavat luvut ovat sinejä/kosineja, maksimissaan tulokset mahtuvat -bittiseen lukuun.) Lähtöön X otetaan riittävästi bittejä estimaattia varten, jotta voidaan määrittää vastaanotetun symbolin konstellaatio. sel_freq freq x(k).8 Msps sel_freq freq LK cos φ X 6. a) 4:n kiikun kellotulon ohjaamiseen tarvitaan 4 / 6 = 64 puskuria, joiden ohjaamiseen tarvitaan 64 / 8 = 8 puskuria, joita ohjaa yksi puskuri. puskuri 8 puskuria 64 puskuria 4 kiikkua 6 kiikkua 6 kiikkua johdotuksen kapasitanssi ff 6 ff kiikun tuloja johdotuksen kapasitanssi 5 ff 6 ff puskureiden tuloja next_symbol cosφ(:) x(k)(:) cosφ() x(k)() integrate s complement to unsigned s complement to unsigned = P Π Π unsigned to s complement EG P /T= G EG T T X(?:) Tämä puskuri kaikille yhteinen johdotuksen kapasitanssi 5 ff 6 ff puskureiden tuloja b) ensimmäisellä puskurilla kuormanaan 8 puskurin tuloa ja johdotuskapasitanssia 5 ff => 8 ff 5 ff = 75 ff. Toisilla puskureilla (8 kpl) kullakin kuormanaan myös 8 puskurin tuloa ja 5 ff johdotuskapasitanssia => 8 75 ff = 4 ff. Kolmansilla puskureilla (64 kpl) kullakin kuormanaan 6 kiikun tuloa ja johdotuskapasitanssia ff => 6 ff ff => 64 8 ff = 5 ff. Kaikkien puskureiden kuormakapasitanssi yhteensä,95 pf. Kuormakapasitanssin lataamisesta ja purkamisesta johtuva tehonkulutus voidaan laskea kaavalla: P = V f, missä on kuormakapasitanssi, V on käyttöjännite ja f on kellotaajuus, jonka tahtiin kapasitansseja ladataan ja puretaan. async_ reset clear_prev next_symbol clk, esim. 7.664 MHz = 8näytetahti T T P =.95e-. e6 = 4.6 mw. c) Yhteisen puskurin jälkeen kaikilla kellopoluilla kaksi puskuria. Pahimmassa tapauksessa eri haarojen välillä voi olla kahden puskurin maksimiviive-ero = 4 ps = 8 ps. opyright ntti Mäntyniemi 5/6 opyright ntti Mäntyniemi 6/6
7. Kuten kuvasta nähdään alkuperäinen summaimen kaikki osasummat eivät ehdi valmistua saman kellojakson aikana. b) Piirretään liukuhihnasummaimen ajoituskaavio, jossa näkyy eri summainasteiden tulosten ja tulosignaalien eteneminen liukuhihnassa: LK (:),(:) 4 5 6 LK Summattavat (:),(:) 4 5 6 S (), o () S (), o () S () a) Lisätään summaimeen liukuhihnarekisterit (pipeline), joiden avulla laskenta jaetaan kellojakson aikana ehdittäviin palasiin. ekistereihin talletetaan välituloksia ja rekistereillä ajoitetaan datan saapumista eri asteisiin. (), () S (), o () () () () () () () S () S () i P o o () S () o () i () P o () () () o () () o () () i P o o () S () S () S () S S S S (), o () (), () (), () S (), o () Synkronoitu lähtösumma Eri asteet samassa vaiheessa, synkronoidaan kelloon S(:), o LK opyright ntti Mäntyniemi 7/6 opyright ntti Mäntyniemi 8/6
8. a) tietoriippuvuuskaavio (kts. esim. luentomoniste s. 88, kuva 9..) D E F D E F - - b) ja c) toimintojen sijoittuminen ohjausaskelille: X D E F -. kellojakso. kellojakso. kellojakso ja laaditaan tietovuotaulukko taulukon 9. mukaan: esurssi DD/SU MUL logiikka-arkkitehtuuri Ohjausaskel 4 4 5 DD MUL MUL DD SU D 4 E 5 F bus(,,5, DD/SU) -> DD -> DD 5 -> DD bus(,,4, DD/SU) bus(dd,mu L, ) US(,DD, ) -> DD -> DD 4 -> DD DD -> MUL -> -> DD -> DD -> -> MUL -> MUL -> MUL -> MUL -> MUL -> MUL X b) X c) 4. kellojakso F 5 /- X Luentomonisteen s. 95, kuvan 9. tyyliin varataan rekistereitä: D Muuttujien elinajat ekisterit Operaatio E 4 D E F E F - 4 5 D E F E F - /- (,) -> (,) -> (,) -> (4,5) -> (,) -> opyright ntti Mäntyniemi 9/6 opyright ntti Mäntyniemi /6
d) logiikka-arkkitehtuuri ohjaussignaaleineen: ld_ mux_ add_sub mux_add(:) ld_5 [EG5] MUX G 9. a) Tarkastellaan ensin logiikan toimintaa ajoituskaavion avulla: TIL: LK datain_valmis ld_, ld_4, ld_5 ld_ F ld_ D ld_4 E ld_ T T T [EG] T T [EG4] T MUX G Laskee -P, kun I / N = P I / N MUX G [EG] T T X ld_ mux_ mux_ add_sub mux_add(:) _D _ dataout_valmis mux_ MUX G [EG] T T P Π Π dataout_valmis_sync data luettavissa rekisteristä seuraavalla kellon reunalla sallittuna dataout_valmis_sync llä LK Muutamia tarkennuksia ennen tilansiirtotaulukon laatimista: - ld_:n pitää olla ykkönen tilassa, muuten voi olla don t care (d), rekisteriä ei tarvita enää - ld_4, ld_5, pitää olla ykkönen tilassa ja nolla tilassa, muuten voi olla don t care - ld_ voi olla don t care tilassa - mux_ voi olla don t care tilassa, silloin rekisteriin ei ladata uutta arvoa - mux voi olla don t care tilassa, rekisteriä ei tarvita enää - add_sub voi olla don t care tilassa, summain lohkoa ei tarvita enää - mux_add(:) voi olla don t care tilassa, mutta tulkitaan kuitenkin ykköseksi, jolloin tilamuuttujat ohjaavat suoraan muxin osoitebittejä Kuten kuvasta nähdään rekisterin lähdössä _ on valmista dataa tilassa, mutta vasta sitten kun tilaan tultiin tilasta kolme, eli tilassa dataout_valmis ei aina voi olla ykkönen. atkaistaan asia siten, että koodataan signaali dataout_valmis tilasta ja synkronoidaan ja samalla viivästetään se kellojakson verran kiikulla signaaliksi dataout_valmis_sync, joka on ykkönen tilan aikana, mutta vain tilan jälkeen. opyright ntti Mäntyniemi /6 opyright ntti Mäntyniemi /6
Nykytila Seuraava tila datain_valmis (di_v) Taulukko : tilansiirtotaulukko ja lähtösignaalien totuustaulut ld_ ld_ ld_ ld_4 d d d d d D D D D d d d d d d /dd minimoitu signaali ctrl() ctrl() ctrl() ctrl() ctrl() Tilakonesynteesin mukaisesti laaditaan tilamuuttujien ja kiikkujen herätetulojen D ja D K-kartat. Samoin minimoidaan lähtösignaalien loogiset funktiot. Kun lähtösignaalien koodauksessa otetaan huomioon don t care - termit, huomataan että lähtösignaaleja voidaan yhdistellä ja koodattavien termien määrää vähentää, jolloin selvitään kolmella koodattavalla termillä ctrl(:) ja tilamuuttujilla kytkettynä sopivasti laskentalogiikanohjaustuloihin. di_v D di_v D ld_5 mux_ mux_ D = ( = ) D = di_v ld_ = ld_4 = ld_5 = = = ctrl() ld_ = ld_ =, kun don t care tulkitaan ykköseksi mux_ =, kun don t care tulkitaan nollaksi mux_ = = = ctrl(), kun don t care tulkitaan ykköseksi add_sub =, kun don t care tulkitaan ykköseksi mux_add() = mux_ = add_sub = mux_add() = dataout_valmis = = ctrl() > ctrl() di_v LK > D > D D D > ctrl() ctrl() D add_sub mux_add(:) di_v dataout_valmis di_v dataout_valmis_sync b) ohjausosa mikrokoodattuna: sovelletaan luentomonisteen s. kuvan..a) rakennetta. Kohdan a) laskuria voidaan käyttää osoitesekvensserinä, joka käynnistyy datain_valmis-signaalilla. Laskurilla valitaan ohjelmamuistin osoitteet. Muistin sisältö kussakin osoitteessa vastaa haluttua ohjausvektoria, eli kohdan a) totuustaulua. Jos halutaan, että kaikki lähtösignaalit ovat toisistaan riippumattomia, valitaan muistin sananleveydeksi lähtöjen lukumäärä, muuten riittää vähempikin kuten kohdassa a) havaittiin. LK datain_valmis. Kuten taulukosta nähdään scramblerin kanssa samassa vaiheessa käynnistynyt descrambler alkaa heti tuotaa oikeaa dataa. Väärässä vaiheessa oleva descrambler tuotaa oikeaa dataa vasta kolmen kellojakson jälkeen synkronoiduttuaan. Vertaa scramblerin ja descramblerin rekisterien tiloja, jotka ovat samat kolmen kellojakson jälkeen myös eri vaiheessa käynnistyneillä scramblerilla ja descramblerilla. SMLE alkutila D D D = scrambler datain rekisterit scrambler D D D osoitesekvensseri scrambler dataout descrambler datain OM 4x DESMLE alkutila D D D = rekisterit descrambler D D D descrambler dataout scrambler dataout descrambler datain DESMLE alkutila D D D = rekisterit descrambler D D D descrambler dataout ctrl(:) D dataout_valmis_sync opyright ntti Mäntyniemi /6 opyright ntti Mäntyniemi 4/6
. Kahden komplementtilukujen vähennyslaskua varten toinen operandeista muutetaan kahden komplementiksi, minkä jälkeen suoritetaan yhteenlasku. Muuntaminen kahden komplementiksi tapahtuu siten, että muunnettavan luvun kaikki bitit invertoidaan ja saatuun lukuun lisätään. Oheisessa kuvassa invertoidaan bitit - MODEn ohjaamilla EXO-porteilla ja ensimmäisen summaimen carry in -tuloon I tuodaan ykkönen = MODE, eli lisätään ykkönen. EXO-portti toimii tässä ohjattuna invertterinä, eli toisen tulon ollessa ykkönen, lähtö on toisen tulon inversio, eli invertoidaan bitit -. Ylivuoto (overflow OF) havaitaan vertaamalla viimeisen summaimen carry in I ja carry out O signaaleja, jotka ovat ylivuodon sattuessa erisuuria. S S S S MODE Β Α P I O Α P I O P I O P I O = Β = Β = Β = =. Kytketään kiikun tuloon 4-tuloinen multiplekseri, jolla valitaan kiikulle haluttu tulosignaali. S S KELLO G Α D Α OF c) Laaditaan tietovuotaulukko vasemman puoleisen tietoriippuvuuskaavion mukaan, koska siinä tarvitsee tallettaa vain yksi tulosignaali. Varataan rekistereitä minimimäärä =, koska yhtäaikaa täytyy pitää tallessa kahta välitulosta/muuttujaa, ja multipleksataan vain toisen rekisterin tuloa: Muuttujien elinajat ekisterit Operaatio esurssi DD MUL Ohjausaskel /- (,) -> (,) -> (,) -> MUL DD MUL bus(,mul,dd,) -> MUL -> DD -> bus(,,mul) -> MUL -> MUL bus(,,mul) -> MUL -> MUL MUL -> MUL -> -> DD -> DD -> DD -> DD. a) Laskentaan tarvitaan kolme kellojaksoa, kuten kohdan b) tietoriippuvuuskaaviosta havaitaan. Yhden kellojakson sisällä ei ehdi sekä kertoa että summata, koska kertojan ja summaimen yhteenlaskettu viive ylittää kellojakson ja kiikkujen asettumisajan. b) c) M M M rekisteriin kolmen kellojakson jälkeen TI opyright ntti Mäntyniemi 5/6 opyright ntti Mäntyniemi 6/6