Skifteregister

Fra Holstebro HTX Wiki
(Omdirigeret fra Skifteregistre)
Skift til: navigering, søgning

Et skifteregister består af en række flip-flops der er forbundet i serie. Ideen i det er at man kan skifte et bit-mønster gennem skifteregisteret ved hjælp af en clock-puls.

Det indre i et skifteregister kan se ud som følger:

Skifteregister.gif

Som det er illustreret herunder, så kan et signal skiftes ind, så det ligger i de 8 flip-flops i skifteregisteret. Det illustrerede er som et eksempel på skifteregisteret herover, der er af typen 74LS164.

Skifte-puls.png

Som det kan ses på pulsplanen, så kan man ikke vide hvad registrene står på fra starten. En enkel løsning til det er at man starter med at skifte noget ind i registeret, så man har styr på hvad der ligger - det er den løsning der er valgt i det output-modul der er skrevet til JAL.

Hvis det er kritisk hvad der ligger på udgangene fra starten kan man anvende Reset (MR), som det er illustreret i pulsplanen. Det nulstiller indholdet af skifteregisteret, men det ville også kræve et ekstra ben på PIC'en, så det er sparet væk.

Herefter skiftes de 8 bit ind i registeret, en ad gangen.

Man starter med at sætte et bit (her høj) på indgangen (A & B), og derefter kommer man med en positiv gående clock - på denne positivt gående clock skiftes det høje niveau ud på Q0.

Den næste bit der skiftes ind er også høj, så på den næste positivt gående clock forbliver Q0 høj, og nu går Q1 også høj.

Den tredje bit der skiftes ind er lav, så på den tredje positivt gående clock bliver Q0 lav. Q1 får det høje signal der lå på Q0, og nu går Q2 høj, da den får det høje signal der lå på Q1.

På den måde fortsættes der indtil man har skiftet alle 8 bit ind, med det resultat at udgangen kommer til at se ud som følger, når clocken falder til ro:

Q7 - Q0 = 1 1 0 1 1 0 0 1

Dette er blot for at illustrere den grundlæggende ide i et skifteregister, men det er grundlæggende set den måde alt skiftes på.

Der findes mange forskellige varianter af skifteregistre, men de kan grundlæggende opdeles i to forskellige typer, nemlig dem der har parallelt input og dem der har parallelt output.

Skifteregister med parallelt input

Det indre af et skifteregister med parallelt input kan se ud som følger:

Skifteregister-pi.png

Princippet er at man kan sætte 8 niveauer op på indgangene P0 til P7, og med /PL kan man læse de 8 niveauer ind i de 8 flip-flops. Ved at sende et clock-signal ind på clock-indgangen (her opdelt i CP1 og CP2) kan man clocke de 8 bit ud på Q7, og aflæse dem et af gangen, så man ved hjælp af 3 signaler kan læse 8 parallelle bit.

Udvidelse af skifteregisteret

To skifteregistre med parallelt input koblet i serie

Samtidigt med at man clocker de 8 bit ud, så skiftes der 8 nye bit ind i skifteregisteret fra indgangen DS. Hvis man vil udnytte det, så kan man koble et skifteregister mere på, så clocken og PL er fælles og Q7 forbindes til DS på det skifteregister man læser fra, som det er vist her.

Det der sker er, at alle 16 bit loades samtidigt med parallel load, og når man har skiftet de første 8 bit ud, så ligger de næste 8 bit klar i skifteregisteret til at læse ind, så alle 16 bit kan læses i rækkefølge. Teknikken kan udvides med så mange skifteregistre man kan holde styr på, og stadigvæk ved hjælp af kun 3 signaler.

Skifteregister med parallelt output

Det indre af et skifteregister med parallelt output kan se ud som følger:

Skifteregister.gif

Princippet er at man kan sætte 1 bit op på indgangen (her delt i en A og en B indgang, der er AND-et inden det går ind i selve skifteregisteret). Ved at clocke på CP kommer bittet på indgangen nu ud på udgangen Q0. Så sættes den næste bit op på indgangen, og der clockes på CP, så den nye bit kommer ud på Q0, mens den bit der stod på Q0 skiftes over til Q1. Ved at clocke i alt 8 gange, så den først indskiftede bit kommer ud på Q7 kan man clocke de 8 bit ud, så de står på Q0 til Q7. Det kan man gøre ved hjælp af bare 2 signaler, så man kan udlæse 8 parallelle bit.

Udvidelse af skifteregisteret

To skifteregistre med parallelt output koblet i serie

Når man har clocket de 8 bit ud, så kan man skifte 8 nye bit ud i skifteregisteret, og ved at koble den næste indgang (A og B) til udgangen Q7, så kan man skifte de første 8 bit videre ind i det næste skifteregister. Hvis man vil udnytte det, så skal man koble et skifteregister mere på, så clocken er fælles og Q7 forbindes til indgang A og B på det næste skifteregister, som det er vist her.

Det der sker er, at alle 16 bit bliver læst ud gennem det første skifteregister og de første 8 af dem ender i det sidste skifteregister. Teknikken kan udvides med så mange skifteregistre man kan holde styr på, og stadigvæk ved hjælp af kun 2 signaler.

Ulemper ved det parallel output

Når man anvender et skifteregister med parallelt output på denne måde, så er der en ulempe ved det, nemlig at mens man skifter ud i skifteregisteret, så vil udgangene vise alle de bit der kommer forbi.

Effekten af det kan selvfølgelig løses ved at man skifter ud så hurtigt som muligt, og hvis det blot er til visuel visning, så vil det kunne virke fint, men der vil altid være noget der ligner et svagt signal i de udgange der skal være slukket, når der bliver skiftet udgange forbi der er tændt. Det vil også være problematisk at anvende udgangene til noget der skal behandles videre digitalt.

Løsningen er at sætte et hukommelses-element ekstra på, så der først sendes signaler til den hukommelse, når udgangene af skifteregisteret ligger stabilt som de skal.

Skifteregister med parallelt output og hukommelse på Outputtet

Det indre af et skifteregister med parallelt output og hukommelse på outputtet kan se ud som følger:

Shift-memory.png

Denne hukommelse kan fjerne ulemperne ved det parallel output, da de skift der ellers ville ske på udgangene, nu sker inde i kredsen i den nederste række flip-flop. Rækken af flip-flops ovenover er hukommelsen, der skal aktiveres med strobe, så når man er færdig med at skifte bit ud til skifteregisteret (evt. til en række af dem), så rykker man i strobe, så resultatet kan komme igennem til udgangen. I denne kreds er der desuden Output Enable, der kan tri-state outputtet, så det ikke er aktivt - hvis man ikke ønsker at bruge denne mulighed, så har man bare outputtet enablet hele tiden.

Hvis man vil koble dette skifteregister sammen med andre, så skal man være opmærksom på at man ikke bare kan tage det serielle input (data) til næste skifteregister fra Q8 som man gjorde før, da dette output ikke skifter - der er et specielt output til dette, nemlig QS der er beregnet til det.