**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
---------------------

D-triger
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 Qon 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.

1. **Järjestiksisend-järjestikväljund** ehk SISO (*serial in serial out*)
2. **Paralleelsisend-järjestikväljund** ehk PISO (*parallel in serial out*)
3. **Järjestiksisend-paralleelväljund** ehk SIPO (*serial in parallel out*)
4. **Universaalne paralleelsisend – paralleelväljund** ehk PIPO (*parallel in parallel out*)
5. **Ringloendur** (*ring counter*)

### Järjestiksisend-järjestikväljund

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

4-bitine järjestiksisend järjestikväljund tüüpi D-trigeritest koostatud nihkeregister

Olekutabel| Taktimpulss | QA  | QB  | QC  | QD, Väljund |
| --- | --- | --- | --- | --- |
| 1. | 1 |  |  |  |
| 2. |  | 1 |  |  |
| 3. |  |  | 1 |  |
| 4. |  |  |  | 1 |

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.

4-bitine järjestiksisend paralleelväljund nihkeregister

Olekutabel| Taktimpulss | Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- | --- |
| 1. | 1 |  |  |  |
| 2. | 1 | 1 |  |  |
| 3. | 0 | 1 | 1 |  |
| 4. | **0**  | **0**  | **1**  | **1** |

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 LAENIHUTA väärtus määrabki ära, kummast allikast signaal trigeri sisendisse pääseb. Kui LAENIHUTA on madalas olekus, valitakse sisend paralleelsetest sisenditest, kui kõrges olekus, siis järjestiksisendist või eelmistest registritest.

4-bitine paralleelsisend järjestikväljund nihkeregister

Olekutabel| Taktimpulss | QA  | QB  | QC  | QD, Väljund |
| --- | --- | --- | --- | --- |
| 1. | 1 | 0 | 0 | **1** |
| 2. |  | 1 | 0 | **0** |
| 3. |  |  | 1 | **0** |
| 4. |  |  |  | **1** |

Olekutabel kujutab olukorda, kus sisendites S1–S4 on väärtused 1001. Et väärtusi paralleelselt trigeritesse laadida, olgu sisend LAENIHUTA madal. Esimese taktimpulsi ajal laaditakse sisendites S1–S4 olevad väärtused trigerite A–D väljunditesse. Et väärtusi järjestikkujul edasi nihutada, paneme LAENIHUTA 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.

4-bitine paralleelsisend paralleelväljund nihkeregister
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.

4-bitine otsese tagasisidega ringloendur

Olekutabel| Taktimpulss | Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- | --- |
| 0. Algseis | 1 | 0 | 0 | 0 |
| 1. | 0 | 1 | 0 | 0 |
| 2. | 0 | 0 | 1 | 0 |
| 3. | 0 | 0 | 0 | 1 |
| 4. | **1**  | **0**  | **0**  | **0** |
| ... |

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.

4-bitine inverteeritud tagasisidega ringloendur ehk Johnsoni loendur

Olekutabel| Taktimpulss | Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- | --- |
| 0. Algseis | 0 | 0 | 0 | 0 |
| 1. | 1 | 0 | 0 | 0 |
| 2. | 1 | 1 | 0 | 0 |
| 3. | 1 | 1 | 1 | 0 |
| 4. | 1 | 1 | 1 | 1 |
| 5. | 0 | 1 | 1 | 1 |
| 6. | 0 | 0 | 1 | 1 |
| 7. | 0 | 0 | 0 | 1 |
| 8. | **0**  | **0**  | **0**  | **0** |
| ... |

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
------

1. 1 2 3 4 5 6 7 8  Anil K. Maini. *Digital electronics: principles, devices and applications* Chichester: Wiley, 2008, lk 398–449
2. 1 2 3  "*Shift registers: Introduction*". *www.allaboutcircuits.com* (inglise). Vaadatud 05.10.2014.
3. ↑  "*74HC/HCT194: 4-bit bidirectional universal shift register*" (PDF). *www.datasheetcatalog.com* (inglise). Vaadatud 05.10.2014.
4. 1 2  Ronald J. Tocci, Neal S. Widmer *Digital systems: principles and applications* Upper Saddle River (N.J.); Columbus (Ohio): Prentice Hall, 2001, lk 372, 191
5. 1 2  "*Synchronous counters – Final report: Ring Counters*". *London Imperial College, Department of Computing, SURPRISE 96 Surveys* (inglise). Originaali arhiivikoopia seisuga 1.02.2010. Vaadatud 05.10.2014.
6. ↑  Vallaste, H.: Nihkeregister e-Teatmik: IT ja sidetehnika seletav sõnaraamat, 2014
7. ↑  "*Serial to Parallel Shifting-Out with a 74HC595*". *arduino.cc* (inglise). Vaadatud 06.10.2014.
8. ↑  "*74HC595; 74HCT595: Product data sheet*" (PDF). *www.nxp.com* (inglise). Originaali (PDF) arhiivikoopia seisuga 16.02.2015. Vaadatud 06.10.2014.
9. 1 2  Flowers Thomas H. *D-Day at Bletchley Park* Harvnb: Copeland, 2006, lk 78–83

Välislingid
-----------

* Järjendloogikalülitused