Tilbake
2.6
Tellere og registre

2.6 Tellere og registre

Binære tellere, skiftregistre og deres anvendelser i digitale systemer.

55 min
5 oppgaver
Binære tellereSkiftregistreSynkrone tellereAsynkrone tellere
Du leser den lesevennlige versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Når kretsen begynner å huske

Fram til nå har vi sett på kretser som lever helt i nuet – kombinatorisk logikk, der utgangen bare avhenger av inngangene akkurat nå. Men en digital klokke som teller sekunder, eller en datamaskin som vet hvilken instruksjon som kommer neste, må kunne noe mer: de må huske. Kretser med hukommelse kaller vi sekvensiell logikk, og de kan huske hva som skjedde ved forrige klokkepuls.

Grunnsteinen i denne hukommelsen er vippa, eller flip-flopen, som lagrer én eneste bit. Setter vi flere av dem sammen, får vi to svært nyttige kretser. Tellere teller klokkepulser og finnes overalt – i klokker, frekvensmålere og adressetellere inni prosessorer. Registre lagrer flere biter samtidig, og noen av dem kan i tillegg skyve bitene fra plass til plass.

I dette kapittelet skal vi forstå hvordan tellere teller i binært, hva som skiller en asynkron teller fra en synkron, hvordan skiftregistre flytter data bit for bit, og hvordan disse kretsene brukes til alt fra digitale klokker til lysende løpelys.

Tellere som teller i binært

En binær teller er en sekvensiell krets som teller klokkepulser i totallssystemet. En teller med nn bit kan telle fra 0 helt opp til 2n12^n - 1, og så begynner den på nytt. En 3-bits teller går altså 0, 1, 2, ... opp til 7, mens en 4-bits teller når helt til 15 før den ruller rundt.

La oss følge en 3-bits teller med utgangene Q2Q1Q0Q_2 Q_1 Q_0 gjennom de åtte første klokkepulsene. Den starter på 000000, går til 001001, 010010, 011011, 100100 og videre opp til 111111 – altså 0 til 7 i desimal. Etter 111111 ruller den tilbake til 000000. Et fint mønster dukker opp: det minst signifikante bitet Q0Q_0 skifter ved hver puls, Q1Q_1 ved annenhver, og Q2Q_2 ved hver fjerde. Hver bit endrer seg altså halvparten så ofte som naboen til høyre.

Men hvordan får vi bitene til å skifte i riktig takt? Her finnes to ulike strategier. I en asynkron teller, også kalt ripple counter, kobles klokkesignalet bare til den første vippa, og hver vippe trigger den neste. Signalet «bølger» gjennom kretsen som dominobrikker som faller. Det er enkelt å bygge, men tregt – forsinkelsene legger seg oppå hverandre, og utgangene endrer seg ikke helt samtidig, noe som gir risiko for feillesing. I en synkron teller deler derimot alle vippene samme klokkesignal, og ekstra logikk bestemmer når hver vippe skal skifte. Det krever litt mer design, men gir en rask og pålitelig teller der alle utganger endrer seg samtidig. Derfor er den synkrone typen vanligst i praktiske systemer.

📝Oppgave Quiz 1

Skiftregisteret – data på vandring

Den andre store kretsen er skiftregisteret: en rekke vipper der dataene flyttes én posisjon for hver klokkepuls. Tenk på det som en rekke mennesker som langer murstein videre – for hvert klokkeslag flytter hver bit seg ett hakk.

La oss følge data gjennom et 4-bits register som starter tomt, 00000000, der vi skyver inn bitene 1, 0, 1, 1 én etter én fra venstre. Etter første puls: 10001000. Etter andre (vi skyver inn 0): 01000100. Etter tredje (1): 10101010. Etter fjerde (1): 11011101. Nå ligger hele tallet 11011101 i registeret, og vi kan lese alle fire bitene ut samtidig. Vi har altså forvandlet en strøm av biter som kom inn etter hverandre, til fire biter vi kan lese på én gang.

Det er nettopp denne evnen til å konvertere mellom seriell og parallell data som gjør skiftregistre så nyttige, og de finnes i fire varianter etter hvordan data kommer inn og ut. SISO (Serial In, Serial Out) tar data inn serielt og ut serielt, og brukes som en forsinkelseslinje. SIPO (Serial In, Parallel Out) tar data inn serielt men leser alt ut parallelt – akkurat som i eksempelet over. PISO (Parallel In, Serial Out) laster inn alle biter samtidig og skyver dem ut én etter én, perfekt når en mikrokontroller skal sende et byte over en seriell linje. Og PIPO (Parallel In, Parallel Out) tar inn og ut parallelt og fungerer som et vanlig lagringsregister. Skiftregistre er hjertet i seriell kommunikasjon som UART og SPI, og en kjent brikke er 74HC595 som brukes til å styre mange LED-er med få ledninger.

📝Oppgave Quiz 2

Når tellere og registre løser ekte oppgaver

De rene tellerne og registrene blir virkelig nyttige når vi tilpasser dem til en oppgave. Et klassisk eksempel er dekade-telleren, som teller fra 0 til 9 i stedet for hele veien til 15. Hvorfor 0 til 9? Fordi det er nettopp det vi trenger til et siffer i en digital klokke.

En vanlig 4-bits teller ville fortsatt fra 10011001 (9) til 10101010 (10), men det vil vi ikke. Trikset er å kjenne igjen den uønskede tilstanden 10101010 og nullstille telleren idet den dukker opp. I 10101010 er det Q3Q_3 og Q1Q_1 som er 1, så vi kobler en AND-port til disse to. I det øyeblikket begge er høye, sender porten et nullstillingssignal til alle vippene, og telleren hopper rett tilbake til 00000000. Resultatet er en teller med ti tilstander (0 til 9), ofte kalt en BCD-teller, som brukes i klokker og displaydrivere.

Skiftregistre kan på samme måte løse morsomme oppgaver, som et løpelys. Med et 8-bits SIPO-register koblet til åtte LED-er kan vi lage et lys som «løper» fra side til side. Vi mater inn en eneste 1-bit, etterfulgt av nuller. Etter første puls lyser LED 7 (1000000010000000), etter neste flyttes 1-biten ett hakk (0100000001000000), og slik vandrer det tente lyset videre for hver klokkepuls. Det avgjørende er at inngangen settes til 0 etter at 1-biten er lagt inn, slik at bare ett lys er tent om gangen. Etter åtte pulser har 1-biten falt ut, og vi mater inn en ny for å starte forfra. Klokkefrekvensen bestemmer hvor raskt lyset løper. Slik blir abstrakte vipper til noe du faktisk kan se blinke.

📝Oppgave Quiz 3

Oppsummering

Vi har gått fra kretser uten hukommelse til sekvensiell logikk, der vipper husker tilstanden sin fra én klokkepuls til neste. Binære tellere teller klokkepulser i totallssystemet, og en nn-bits teller går fra 0 til 2n12^n - 1. Asynkrone tellere lar signalet bølge gjennom vippene – enkelt, men tregt – mens synkrone tellere klokker alle vippene samtidig og er raske og pålitelige.

Skiftregistre flytter data én posisjon per klokkepuls og finnes i variantene SISO, SIPO, PISO og PIPO, som konverterer mellom seriell og parallell data. Tilpasset til praktiske oppgaver blir dette til en dekade-teller som teller 0 til 9 i en digital klokke, eller et løpelys der en enkelt 1-bit vandrer gjennom åtte LED-er. Bak alt ligger vippa – det lille minneelementet som lar digitale kretser huske.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.