Nihkeregister

**Nihkeregister** (inglise *shift register*) on arvutitehnikas kasutatav digitaalne elektroonikalülitus, mida kasutatakse bittide hoidmiseks ning kus toimub sisendisse antud bittide nihutamine väljundisse.

## Ehitus ja tööpõhimõte

Nihkeregistrid koosnevad järjestikku ühendatud sünkroonsetest D-trigeritest. Kuigi mõnede integraallülituste tootjate nihkeregistrite elektriskeemidest võib leida nii RS- kui ka JK-trigereid, on need siiski ühendatud D-trigerile ekvivalentset ülesannet täitma.

Nihkeregistrites kasutatavad trigerid kujutavad endast ühe biti suurusi mälusid, mis hoiavad oma hetkelist väärtust väljundis pingena.

Lisaks andmete sisendile D (*data*), väljundile Q ja inverteeritud väljundile on neil alati olemas kolmnurgaga tähistatud taktsignaali sisend (*clock*). Vahel kasutatakse ka asünkroonseid eelseadistamise ning lähtestamise sisendeid S (*set*) ja R (*reset*), mis seavad olenemata teistest sisenditest väljundi vastavalt kõrgesse ja madalasse olekusse.

Taktimpulsi saabumisel vaadatakse, mis väärtus on sisendis, ning uuendatakse selle väärtusega väljundi olekut. Vastavalt trigeri taktsignaali sisendi polaarsusele võib uuendamine toimuda taktimpulsi tõusva või langeva frondi hetkel.
Nihkeregistrites on iga järgneva trigeri sisend ühendatud talle eelneva trigeri väljundiga. Kõik trigerid jagavad ühte taktsignaali, mille abil takteeritakse nihutamist. Kuna taktimpulss jõuab kõikidesse trigeritesse üheaegselt, toimub kõikide trigerite väljundis olevate väärtuste uuendamine samal hetkel. See tekitab efekti, kus iga taktimpulsi ajal liiguvad kõikide trigerite väljundis olevad väärtused ühe võrra edasi.

Nihkeregistri andmemahutavus on võrdeline üksteisega järjestikku ühendatud trigerite arvuga.

Vastavalt sellele, mis kujul andmeid sisendist loetakse ja väljundisse antakse, saab nihkeregistreid liigitada viieks. Nende kohta on üldiselt kasutusel ka ingliskeelsed lühendid.
# **Järjestiksisend-järjestikväljund** ehk SISO (*serial in serial out*)
# **Paralleelsisend-järjestikväljund** ehk PISO (*parallel in serial out*)
# **Järjestiksisend-paralleelväljund** ehk SIPO (*serial in parallel out*)
# **Universaalne paralleelsisend – paralleelväljund** ehk PIPO (*parallel in parallel out*)
# **Ringloendur** (*ring counter*)

### Järjestiksisend-järjestikväljund
Järjestiksisendi-järjestikväljundi nihkeregister on kõige lihtsama ehitusega nihkeregister.

Olekutabelist on näha sisendisse antud väärtuse 1 liikumine väljundisse. Sisendis olev loogiline 1 nihutatakse esimese taktimpulsi tõusva frondi ajal trigeri A väljundisse. Järgmise taktimpulsiga liigub A väljundis olev väärtus edasi trigerisse B. Nihutamine toimub edasi, kuni neljandal taktimpulsil jõuab esialgselt sisendisse antud väärtus väljundisse.
### Järjestiksisend-paralleelväljund
Järjestiksisendi-paralleelväljundi nihkeregister sarnaneb ehituselt väga järjestiksisendi-järjestikväljundi nihkeregistriga. Ainus erinevus on see, et paralleelväljundi nihkeregistri väljundiks pole ainult viimase trigeri väljund, vaid kõikide trigerite väljundid.

Olekutabel kirjeldab olukorda, kus järjestiksignaal 0011 muudetakse paralleelseks. Kui esimesel taktimpulsil anda sisendisse väärtus 1, liigub see trigeri A väljundisse. Järgmisel taktimpulsil anname sisendisse jälle väärtuse 1. Nüüd liigub trigerisse A 1 ning enne A-s olnud 1 trigerisse B. Järgneval kahel taktimpulsil anname sisendisse väärtuse 0. Nüüd trigerites A ja B olevad ühed nihkuvad kaks kohta edasi ning ongi saavutatud olukord, kus Q1=Q2=0, Q3=Q4=1.

### Paralleelsisend-järjestikväljund
Paralleelsisendi-järjestikväljundi nihkeregister muudab paralleelselt sisenditesse antud loogilised väärtused järjestiksignaaliks. Jooniselt võib näha, et seda tüüpi nihkeregistri elektriskeem sisaldab peale trigerite ka AND- ja OR-loogikaväravaid. Need on vajalikud, kuna iga trigeri sisendil on kaks signaaliallikat: paralleelselt trigeritesse laaditavad väärtused sisenditest S1–S4 ning nihutamisel tekkivad väärtused eelnevate trigerite väljunditest. Sisendi NIHUTA väärtus määrabki ära, kummast allikast signaal trigeri sisendisse pääseb. Kui NIHUTA on madalas olekus, valitakse sisend paralleelsetest sisenditest, kui kõrges olekus, siis järjestiksisendist või eelmistest registritest.

Olekutabel kujutab olukorda, kus sisendites S1–S4 on väärtused 1001. Et väärtusi paralleelselt trigeritesse laadida, olgu sisend NIHUTA madal. Esimese taktimpulsi ajal laaditakse sisendites S1–S4 olevad väärtused trigerite A–D väljunditesse. Et väärtusi järjestikkujul edasi nihutada, paneme NIHUTA sisendi kõrgeks. Järgnevate taktimpulsside ajal toimub andmete nihutamine paremale, mille käigus kõik sisendisse antud väärtused jõuavad ühekaupa väljundisse.

### Universaalne paralleelsisend – paralleelväljund
Paralleelsisendi-paralleelväljundi nihkeregister sarnaneb ehituselt väga paralleelsisendi-järjestikväljundi nihkeregistriga. Ainus erinevus on see, et paralleelväljundi nihkeregistri väljundiks pole ainult viimase trigeri väljund, vaid kõikide trigerite väljundid.

Tööpõhimõttelt on seda tüüpi nihkeregister identne eelmisega, kuid väljundit saab lugeda nii järjestikkujul väljundist V4 kui ka paralleelselt väljunditest V1–V4.

**Universaalne nihkeregister** kujutab endast nihkeregistrit, mida saab kasutada kõikides eelmainitud konfiguratsioonides. See tähendab, et universaalsel nihkeregistril on sisend ja väljund mõlemad saadaval nii järjestik- kui ka paralleelkujul. Kusjuures nihutamine saab toimuda tänu loogikaväravatest koostatud ahelale nii paremale kui ka vasakule. Üks selliste omadustega nihkeregister on näiteks integraallülitus 74HC194.

### Ringloendur
Ringloendur on nihkeregister, mille väljund on ühendatud sisendiga. Trigeritesse alglaadimise ajal laaditud väärtused läbivad nihkeregistri, liiguvad väljundisse jõudes uuesti sisendisse ning sama tegevus kordub taktimpulsside olemasolul lõpmatuseni.
Ringloendurite puhul on väga oluline trigerite alglaadimine õigete andmetega, kuna trigeri väljundid jäävad toitepinge külgeühendamisel määramata olekusse.
Ringloendureid jagatakse vastavalt tagasisidestatud signaali polaarsusele kaheks.

**Otsese tagasisidega ringloendur**, mille korral nihkeregistri sisend on ühendatud viimase trigeri väljundiga.

Olekutabel kirjeldab ringloenduri tööd. Eeldame, et trigerid nihkeregistris on alglaaditud väärtustega Q1=1, Q2=Q3=Q4=0. Siis nihkub trigeris A olev loogiline 1 iga taktsignaaliga ühe koha võrra edasi, kuni jõuab trigerisse D. Kuna trigeri D väljund on ühendatud trigeri A sisendiga, liigub väärtus 1 uuesti sisendisse ning kogu protsess kordub.

**Inverteeritud tagasisidega ringloendur** ehk Johnsoni loendur, mille korral nihkeregistri sisend on ühendatud viimase trigeri inverteeritud väljundiga.

Olekutabel kirjeldab ringloenduri tööd. Eeldame, et kõik trigerid nihkeregistris on alglaaditud loogilise väärtusega 0. Esimese taktsignaaliga liigub viimase trigeri inverteeritud väljundist väärtus 1 trigerisse A. Saame väljundite Q1–Q4 väärtusteks 1000. Järgmisel taktsignaalil liigub uuesti viimase trigeri väljundis oleva väärtuse inversioon esimesse trigerisse, saame väljunditesse väärtused 1100. Eelpool kirjeldatud protsess kordub kuni väärtusteni 1111. Edasi nihkub jälle viimase trigeri väljundis oleva väärtuse inversioon ehk 0 trigerisse A, saame väärtused 0111. Protsess kordub kuni väärtusteni 0000, mil hakatakse uuesti ühtesid esimesele kohale viima.

## Kasutusvaldkonnad

Mikroprotsessorites kasutatakse nihkeregistreid binaararitmeetiliste tehete sooritamiseks ning andmete järjestikkujult paralleelkujule teisendamiseks..

Järjestikandmeliinid kasutavad nihkeregistreid andmete paralleelkujult järjestikkujule teisendamisel.

Paljud mikrokontrolleri külge ühendatavad seadmed: analoog-digitaalmuundurid, digitaal-analoogmuundurid, ekraanidraiverid ja mälud kasutavad nihkeregistreid, et vajalike sisendite ja väljundite hulka vähendada.

Eraldiseisvate integraallülitustena kasutatakse nihkeregistreid mikrokontrolleri digitaalsete väljundite arvu suurendamiseks.
Üks levinud integraallülitus selle tarbeks on 8-bitine järjestiksisend paralleelväljundi tüüpi nihkeregister 74HC595, mis sisaldab peale nihkeregistri ka väljundandmete hoiustamise registrit ning 3-olekulisi väljundpuhvreid.

Järjestiksisend järjestikväljund nihkeregistreid kasutatakse digitaalsetes süsteemides signaali hilistuse tekitamiseks.

## Ajalugu
Nihkeregistrid võeti kasutusele 1944. aastal valminud superarvutil Colossus Mark 2, mida kasutati Teise maailmasõja ajal andmete dekrüpteerimiseks. Tänu nihkeregistrite kasutamisele suurenes arvuti arvutusvõimsus võrreldes eelmise versiooniga Colossus Mark 1 viis korda, ulatudes 25 000 sümbolini sekundis.

## Vaata ka
*Loogikavärav
*Register
*Triger

## Viited

## Välislingid
* Järjendloogikalülitused