Tillämpad digitalteknik med PIC-processor för Fort och Vidareutbildning. Häfte: Digitalteknik

Relevanta dokument
IE1204 Digital Design

IE1205 Digital Design: F9: Synkrona tillståndsautomater

Maurice Karnaugh. Karnaugh-diagrammet gör det enkelt att minimera Boolska uttryck! William Sandqvist

IE1205 Digital Design: F4 : Karnaugh-diagrammet, två- och fler-nivå minimering

Mintermer. SP-form med tre mintermer. William Sandqvist

IE1204 Digital Design

Digital Design IE1204

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Omtentamen med lösningar i IE1204/5 Digital Design Fredag 10/

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Låskretsar och Vippor

Tentamen med lösningar i IE1204/5 Digital Design Måndag 27/

Digital Design IE1204

Digital Design IE1204

IE1204/5 Digital Design typtenta

Sekvensnät. William Sandqvist

Tentamen med lösningar för IE1204/5 Digital Design Torsdag 15/

IE1204/5 Digital Design typtenta

Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1

Tentamen i Digital Design

Omtentamen IE Digital Design Måndag 14/

Tentamen i IE1204/5 Digital Design måndagen den 15/

TSEA22 Digitalteknik 2019!

DIGITALTEKNIK I. Laboration DE2. Sekvensnät och sekvenskretsar

Asynkrona sekvensmaskiner

Digital- och datorteknik

Sekvensnät Som Du kommer ihåg

Laboration i digitalteknik Introduktion till digitalteknik

Repetition och sammanfattning av syntes och analys av sekvensnät

Tentamen i IE Digital Design Fredag 21/

Tentamen i IE1204/5 Digital Design Torsdag 29/

Repetition TSIU05 Digitalteknik Di/EL. Michael Josefsson

Försättsblad till skriftlig tentamen vid Linköpings universitet

F5 Introduktion till digitalteknik

Tentamen i Digitalteknik, TSEA22

Digital- och datorteknik

IE1205 Digital Design: F10: Synkrona tillståndsautomater del 2

Digital Design IE1204

Digital Design IE1204

TSEA22 Digitalteknik 2019!

Tentamen IE Digital Design Måndag 23/

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

Tentamen IE Digital Design Fredag 15/

Tentamen i Digitalteknik TSEA22

IE1204/IE1205 Digital Design

Omtentamen med lösningar IE Digital Design Måndag 14/

Grundläggande Datorteknik Digital- och datorteknik

Tenta i Digitalteknik

Tentamen med lösningar i IE Digital Design Fredag 21/

Laboration Kombinatoriska kretsar

Digital Design IE1204

Digital Design IE1204

Tentamen med lösningar IE Digital Design Måndag 23/

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Digital Design IE1204

IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare

Digital- och datorteknik

Laboration D181. ELEKTRONIK Digitalteknik. Kombinatoriska kretsar, HCMOS v 2.1

Tentamen med lösningar i IE Digital Design Fredag 15/

Grundläggande digitalteknik

Digital Design IE1204

Digital Design IE1204

EDA451 - Digital och Datorteknik 2010/2011. EDA Digital och Datorteknik 2010/2011

Ett minneselements egenskaper. F10: Minneselement. Latch. SR-latch. Innehåll:

Digital elektronik CL0090

Tenta i Digitalteknik

Laboration Kombinatoriska kretsar

Sekvensnät vippor, register och bussar

Tentamen med lösningar i IE1204/5 Digital Design Torsdag 29/

Digital elektronik CL0090

Digitalteknik F9. Automater Minneselement. Digitalteknik F9 bild 1

DIGITALA TAL OCH BOOLESK ALGEBRA

Definition av kombinatorisk logik Olika sätt att representera kombinatorisk logik Minimering av logiska uttryck

Digital elektronik CL0090

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

Tentamen i Digitalteknik, EITF65

Minneselement,. Styrteknik grundkurs. Digitala kursmoment. SR-latch med logiska grindar. Funktionstabell för SR-latchen R S Q Q ?

Tentamen IE Digital Design Fredag 13/

DIGITALTEKNIK I. Laboration DE1. Kombinatoriska nät och kretsar

Laboration D151. Kombinatoriska kretsar, HCMOS. Namn: Datum: Epostadr: Kurs:

F5 Introduktion till digitalteknik

Digital- och datorteknik

Digital Design IE1204

IE1205 Digital Design: F13: Asynkrona Sekvensnät (Del 2)

Repetition delay-element

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

PARITETSKONTROLL. Om generatorn i vidstående exempel avkänner ett jämt antal ettor ger den en nolla ut. Detta innebär att överföringen

Tenta i Digitalteknik

Konstruktionsmetodik för sekvenskretsar. Föreläsning 7 Digitalteknik Mattias Krysander Institutionen för systemteknik

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

SMD033 Digitalteknik. Digitalteknik F1 bild 1

Introduktion till digitalteknik

Digitala system EDI610 Elektro- och informationsteknik

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

Kortlaboration DIK. Digitalteknik, kombinatorik.

Tenta i Digitalteknik

Institutionen för systemteknik, ISY, LiTH. Tentamen i. Tid: kl

Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit

5:2 Digitalteknik Boolesk algebra. Inledning OCH-funktionen

Transkript:

Tillämpad digitalteknik med PIC-processor för Fort och Vidareutbildning Häfte: Digitalteknik William Sandqvist 2004 1

2

Binärkod och Graykod Vinkelmätare med kodskiva. Till vänster binärkod, till höger Graykod. Figuren ovan visar en kodskiva för avkodning av vridningsvinkel. Skivans vridningsvinkel finns tryckt som binära tal längs radien och dessa tal kan "läsas" med hjälp av kontaktborstar. De vita ytorna är ledande och de svarta är isolerande. En kontaktborste ( gemensam ledare ) spänningssätter skivan. De restrerande 8 borstarna kan avläsa det binära talet och därmed vridningsvinkeln. Det vanligaste utförandet nuförtiden har en kodskiva av glas med svärtade fält och avläsningen sker då med fotoceller i stället för kontaktborstar. För linjär rörelse används kodlinjaler. Överst binärkodad eller nederst Graykodad. Om man vill avkoda en linjär förflyttning kan man använda den linjära motsvarigheten till kodskivan, kodlinjalen. Det är naturligt att representera tal med binärkoden eftersom det är den koden som används i datorer, men det kan vara olämpligt att mata in talen till datorn på detta sätt. Både med kodskivan och med kodlinjalen kan man råka ut för ett inneboende problem med den binära avkodningen. Antag att vi har en kodskiva med fyra bitars binärkod ( figurens kodskiva har åtta bitar och kodlinjalerna sex bitar ) och att kodskivan befinner sig mitt emellan två binärkodade kodord, tex. mellan 1 (0001) och 2 (0010). Eftersom de två kodorden skiljer sig i två av bitarna, finns det - beroende på tillverkningstoleranser - en osäkerhet om vinkelläget. I gränsen mellan kodorden kan även 0 (0000) och 3 (0011) komma att uppträda. Störst osäkerhet finns det mellan kodorden 15 (1111) och 0 (0000), här kan vilken som helst av de övriga kodorden uppträda! Genom att ändra om den inbördes ordningen mellan kodorden kan man hitta koder där det aldrig är mer än en bit i taget som ändras vid övergångarna från ett kodord till nästa. Sådan koder kallas för Graykoder. 3

Binär-kod Gray-kod Binär-kod Gray-kod 0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000 Tabell med Binärkod och Graykod. Vindriktningsmätaren är en av de givare som använder Graykod för att ge säker vinkelinformation. Den mottagande utrustningen omvandlar sedan Graykoden till binärkod. Första gången en "Graykod" användes var 1878 i en telegraf som konstruerats av den franske ingenjörn Émile Baudot ( som senare konstruerade teleprintern, därav beteckningen Baud för överföringshastighet i bitar/sekund ). Patentet på Gray-koden sträcker sig tillbaka till 1953 då Frank Gray ( vid Bell-laboratoriet ) patenterade kodens användning vid pulskodsmodulation. Om man vill konstruera en N-bitars Gray-kod kan man göra detta ur koden för N-1 bitar. Först följer N-1 bitskoden med "0" som bit N, därefter fortsätter man nästa halva med N-1 koden en gång till men med kodorden i omvänd ordning och med "1" som bit N. Detta är en "speglad binärkod". Graykod som "speglad" binärkod Ex. Så här gör man 3-bits Graykod från 2-bits Graykod: 00 01 11 10 är en 2-bits Graykod. 000 001 011 010 är koden kompletterad "0" som bit 3. 10 11 01 00 är 2-bits koden i omvänd ordning. 110 111 101 100 är den omvända koden kompletterad med "1" som bit 3. Sammantaget blir 3-bits Graykoden: 000 001 011 010 110 111 101 100 Detta är inte den enda tänkbara 3-bits Graykoden, en annan möjlig kod för tre bitar är tex. 000 010 011 001 101 111 110 100. ( men i allmänhet är det just den "speglade binärkoden" man menar när man talar om Graykod ). 4

Tre bitars Graykod kan användas till att numrera en kubs hörn på ett sådant sätt att "grannhörnens" nummer aldrig skiljer sig åt mer än med en bit. Detsamma gäller en N-bitars Graykod och en N-dimensionell "hyperkub" ( fast det blir betydligt svårare att föreställa sig). Graykoden är också till stor hjälp för den som vill lösa spelet "Tower of Hanoi". konstruerat av matematikern Edouard Lucas år 1883. Enligt legenden ska tre munkar flytta 64 gyllene brickor, av olika storlek, från en stapel till en annan. Brickorna ska flyttas en och en, och de måste alltid placeras så att en mindre bricka hamnar på en större bricka. När munkarna är klara med arbetet kommer jorden att gå under - det kommer att ta 2 64 flyttningar, så det hela kommer nog att dröja ett tag... Tower of Hanoi. Bitförändringarna i Graykoden anger vilken av brickorna som står i tur att flyttas. Regeln att en större bricka aldrig får placeras över en mindre avgör var brickan kan placeras. 5

Omvandling mellan Binärkod och Graykod Graykoden kan härledas ur binärkoden på följande sätt: För varje kodord gäller att om Binärkodens bit b n och bit b n-1 är lika, är Graykodens bit g n-1 "0", annars "1". Omvändningen av denna regel, att härleda Binärkod från Graykod, är den vanligaste omvandlingsriktningen. Här gäller: Om Binärkodens bit b n och Graykodens bit g n-1 är lika blir Binärkodens bit b n-1 "0", annars "1". För båda fallen behöver man en logisk krets som kan tala om när två bitar är lika eller olika. Vi kommer senare att se att en så kallad EXOR-grind har denna egenskap. 6

Booles algebra George Boole, engelsk matematiker (1815-1864) Boole's främsta bidrag till matematiken är den Boolska algebran ( 1847, 1854 ). Genom att representera logiska uttryck på matematisk form, där sammanfogningsorden OR och AND motsvarade ett slags addition och multiplikation, blev det möjligt att med en algebra undersöka om komplicerade logiska utsagor och resonemang, i slutändan var sanna eller falska. Booles algebra användes länge bara för studier av symbolisk logik, som är ett mycket smalt ämnesområde. Först när Claude E. Shannon vid MIT 1938 skrev en avhandling som visade hur Booles algebra kunde användas för att representera elektriska kontaktnät, "dammades" algebran av för att sedan dess bli det huvudsakliga verktyget för all digital konstruktion. Algebran bygger på ett talsystem med bara två tal, 1 och 0. Inom logiken motsvarar dessa tal sant/falskt, och för kontaktnät motsvarar de sluten/bruten kontakt. Logikens sammanfogningsord OR ("+") och AND (" ") motsvarar parallellkoppling och seriekoppling i kontaktnätet. Den boolska algebran innehåller också en inversoperator för logikens sammanfogningsord NOT ("!"). För kontaktnät motsvarar detta en brytande kontakt i stället för en normalt slutande kontakt. För inversoperatorn gäller: Logisk addition "+", OR, och logisk multiplikation " ", AND, följer i stort sätt de vanliga normala algebraiska distributiva, kommutativa och associativa lagarna (med ett "udda" undantag). För att komma underfund med den Boolska algebran behöver man räkna igenom ett stort antal övningsexempel. 7

A ( B + C ) = A B + A C Distributiva lagarna A + ( B C ) = ( A + B ) ( A + C ) Undantaget! A B = B A Kommutativa lagarna A + B = B + A ( A B ) C = A ( B C ) Associativa lagarna ( A + B ) + C = A + ( B + C ) Förenklingsregler Några teorem Absorbtionslagarna Koncensuslagen de Morgans lagar Grindar och kontaktnät Grundläggande funktioner Benämning Grindfunktion Kontaktfunktion OR "+" AND " " NOT "!" 8

Sammansatta funktioner Benämning Grindfunktion EXOR " " EXNOR EXOR-funktionen betecknas ibland med en egen symbol " " trots att funktionen går att uttrycka med de grundläggande funktionerna "+" och " ". Benämning Grindfunktion NAND NOR 9

Logiknät Alla logiska funktioner kan realiseras med hjälp av grindtyperna AND och OR kombinerade i två steg. Det förekommer grindnät med fler steg än två, men det är således inte nödvändigt. Vi förutsätter här att ingångsvariablerna även finns i inverterad form. ( Om ingångsvariablerna inte finns att tillgå i inverterad form, så kan man behöva extra inverterare till detta ). AND-OR logik, SP-form En logisk funktions sanningstabell till vänster, dess realisering i form av ett grindnät i mitten, och till höger funktionsuttrycket uttryckt med den boolska algebran. Man anger ofta den logiska funktionens sanningstabell genom att räkna upp de mintermer som ingår i funktionen. Ex. f (a,b) = Σ (1,2). En sanningstabell är en tabell med funktionsvärdet för alla kombinationer av ingångsvariablerna. Ofta binärkodar man ingångskombinationerna. Man kan realisera ett grindnät direkt från sanningstabellen. Om funktionen ska vara "1" för en viss variabelkombination (a,b) tex. (0,1) så kan man åstadkomma detta genom att bilda produkten av a:s invers och b. Den produkten är ju bara "1" för kombinationen (0,1). En sådan produkt kallas för en minterm. Funktionen kan sedan uttryckas som en summa av alla sådana mintermer. Varje minterm bidrar med en etta från sanningstabellen. Om någon term är 1 blir hela summan 1 ( 1 + 1 = 1 ). Man säger att funktionen är uttryckt på SP-form ( Summa av Produkter ). Grindnätets mintermer bildas med AND-grindar och dessa summeras med en OR-grind. Denna metod att översätta en sanningstabell till ett grindnät kan alltid användas, men lösningen är inte optimal, det kan finnas mycket enklare grindnät med färre grindar som gör samma arbete (detta exempel har dock ingen enklare lösning). OR-AND logik, PS-form Man anger ofta den logiska funktionens sanningstabell genom att räkna upp de maxtermer som ingår i funktionen. Ex. f (a,b) = Π (0,3). 10

Alternativt kan man inrikta sig på sanningstabellens 0:or. Om ett grindnät återger funktionens 0:or korrekt så är ju även 1:orna rätt! Om således funktionen ska vara "0" för en viss variabelkombination (a,b) tex. (0,0) så bildar man summan ( a + b ). Den summan kan ju bara bli "0" för kombinationen (0,0). En sådan summa kallas för en maxterm. Funktionen uttrycks som en produkt av alla sådana maxtermer. Varje maxterm (faktor) bidrar med en 0:a från sanningstabellen. Om någon faktor i en produkt är "0" så blir ju hela produkten "0" ( 0 0 = 0 ). Funktionen sägs då vara uttryckt på PS-form ( Produkt av Summor ). Grindnätets maxtermer bildas med OR-grindar och dessa multipliceras med varandra med en AND-grind. Även denna metod är generellt användbar, men inte optimal. Om sanningstabellen innehåller många ettor och få nollor är PS-formen gynnsam. Om sanningstabellen har få ettor är i stället SP-formen gynnsam. Dessutom är i allmänhet möjligheten att göra förenklingar av grindnäten med hjälp av Boooles algebra stor. Kommentar: Sanningstabellen i detta exempel kan inte realiseras med enklare grindnät än de ovan visade. PS-formen och SP-formen har i detta fall precis samma kostnad ( i dioder räknat ). Exempel på förenkling av funktionsuttryck med Booles algebra En funktion av två variabler har tre ettor i sanningstabellen. Man kan då uttrycka funktionen på SP-form med tre mintermer. Detta är långt ifrån det enklaste uttrycket för denna funktion ( du kanske redan har känt igen funktionen som OR-funktionen? ). Med Booles algebra kan funktionen förenklas. Koncensuslagen innebär att man man får lägga till en term till funktionen. Det kan verka "bakvänt" att lägga till en term när man är ute efter att förenkla funktionen, men som synes så underlättar detta den vidare förenklingen ner till slutresultatet a+b. Slutresultatet kan man också nå direkt genom att uttrycka sanningstabellens enda nolla som en maxterm ( a + b ). Slutresultatet kan också nås genom att man tittar på den motsatta funktionen, den som skulle ha en ensam etta för a = 0 och b = 0. Om denna ( motsatta ) funktion inverteras för att bli vår sökta funktion, så får man med hjälp av de Morgans lag a + b. 11

NAND-NAND och NOR-NOR är komplett logik Om man använder NAND-grindar, eller NOR-grindar, behöver man inga andra grindtyper. Båda grindtyperna är komplett logik, det vill säga det är tillräckligt med endera typen för att realisera en valfri logikfunktion. I allmänhet kostar det heller inte fler grindar att realisera logikfunktioner på detta sätt. NAND-NAND OR AND och INV går att framställa med NAND-grindar. För logikfunktioner på SPform kan man byta AND-OR grindarna mot NAND-NAND "rakt av". Ett AND-OR nät kan ersättas med ett NAND-NAND nät. De NAND-grindar som används som inverterare uppträder i par som tar ut varandra och kan därför ersättas med en ledningstråd. 12

NOR-NOR OR AND och INV går även att framställa med NOR-grindar. För logikfunktioner på PS-form kan man byta OR-AND grindarna mot NOR-NOR grindar "rakt av". Ett OR-AND nät kan ersättas med ett NOR-NOR nät. De NOR-grindar som används som inverterare uppträder i par som tar ut varandra och kan därför ersättas med en ledningstråd. Komplikationer med tillämpningen av dessa ekvivalensprinciper uppstår vid mer komplicerade nät, så man behöver gå igenom några övningsexempel för att bli säker på metoden. De Morgans teorem NAND = BubbelOR En grafisk tillämpning av De Morgans teorem är bubbelgrindar dvs grindar med inverterade ingångar. En NAND-grind är samma sak som en BubbelOR. Man kan se det som att NAND-grindens inverteringsring dragits igenom grinden. Grindfunktionen byts då från AND till OR och ingångarna får inverteringsringar. ( En motsvarande regel finns för NOR och bubbeland ). 13

Karnaughdiagrammet Matematikern Maurice Karnaugh, har konstruerat ett diagram-hjälpmedel för minimering av Boolska funktioner, Karnaugh-diagrammet. ( The Map for Synthesis of Combinational Logic Circuits, AIEE, Nov. 1953 ). Karnaughdiagrammet utnyttjar det faktum att vi människor är duktiga på att känna igen mönster, och på så sätt med diagrammets hjälp kan bestämma vilka termer i en Boolesk funktion som ska kombineras för att ge det enklaste uttrycket. Karnaughdiagrammet kan enkelt användas för funktioner med upp till fyra variabler, och med lite träning upp till sex variabler. För funktioner med fler än sex variabler får datorprogram ta över, och sådana finns det idag gott om. ( Vi kommer att begränsa oss till maximalt fyra variabler - så att ingen behöver bli "yr i huvudet" ). Exempel. En funktion av fyra variabler a b c d. Sanningstabellen ovan innehåller 11 st 1:or och 5 st 0:or. Enligt tidigare vet vi att funktionen då kan uttryckas på SP-form med 11 st mintermer eller på PS-form med 5 st maxtermer. Den som använt Booles algebra vet att det därefter följer ett mödosamt arbete för att ta fram enklare uttryck. Mintermerna kan kombineras på många olika sätt som alla resulterar i olika förenklade uttryck - hur vet man om man har funnit det enklaste? I stället för att förenkla funktionen med Booles algebra ska vi här använda den grafiska metoden med Karnaughdiagram. Karnaughdiagrammet är den logiska funktionens sanningstabell uppställd på ett annat sätt. En logisk funktion av fyra variabler har en sanningstabell med 16 rader och dessa avbildas i ett Karnaughdiagram som 16 rutor. ( Ettorna/nollorna i Karnaughdiagrammet kommer således från sanningstabellen ). Karnaughdiagrammets rutor är numrerade efter Graykoden så att två rutor som är "grannar" ligger på "enhetsavstånd". De skiljer sig således bara åt i en variabel. 14

Två "grannar" Rutorna "5" och "13" är "grannar" i Karnaughdiagrammet ( fast det är långt mellan dem i sanningstabellen ). De svarar mot två mintermer med fyra variabler, och i figuren visas hur de med Booles algebra, kan reduceras till en term med tre variabler. Det de två rutorna har gemensamt är att b=1, c=0 och d=1, och den reducerade termen uttrycker precis detta. ( Termen är en produkt av b, d och c:s invers ). Överallt i Karnaughdiagrammet där man hittar två ettor som är "grannar" ( vertikalt eller horisontellt ) kan man reducera de mintermerna till det som är gemensamt för de två rutorna. Detta kallas för en hoptagning. Fyra "grannar" Rutorna "1" "3" "5" "7" är en grupp av fyra rutor med ettor som ligger som "grannar" till varandra. Även här går de fyra mintermerna att reducera till en term som uttrycker det som är gemensamt för rutorna, nämligen att a=0 och d=1. Överallt i Karnaughdiagrammet där man hittar sådana grupper av fyra ettor kan man göra sådana förenklingar, hoptagningar. 15

Åtta "grannar" Alla grupper av 2, 4, 8, (... 2 N dvs. med jämna 2-potenser ) rutor som innehåller ettor kan reduceras till en term, med "det som är gemensamt", en hoptagning. Karnaugh-toroid Egentligen bör man avbilda Karnaughdiagrammet på en toroid ( en donut ). Når man en kant, så börjar diagrammet om från den motsatta sidan! Ruta 0 är således "granne" med ruta 2, men även "granne" med ruta 8 som är granne med ruta 10. De fyra ettorna i hörnen har b=0 och d=0 gemensamt och kan därför bilda en hoptagning. Vid lektionen skickar vi runt en Karnaugh-toroid, därefter bör det vara helt klart vad som menas med detta! Bästa hoptagningar? Man söker efter så stora hoptagningar som möjligt. I exemplet finns det en hoptagning med åtta ettor ( rutorna 0,1,3,2,4,5,7,6 ). Hörnen ( 0,2,8,10 ) är en hoptagning av fyra ettor. Två av rutorna ( 0,10 ) har redan tagits med i den första hoptagningen, men inget hindrar att en ruta blir medtagen flera gånger. Alla ettor måste med i funktionen, antingen i en hoptagning, eller som en minterm. 16

Ettan i ruta 13 kan bilda en hoptagning med ettan i ruta 5, någon större hoptagning finns tyvärr inte för denna etta. Den resulterande funktionen innebär som synes en mycket stor förenkling jämfört med den ursprunkliga funktionen med de 11 mintermerna. Hoptagning av 0:or Karnaughdiagrammet är också användbart för hoptagning av 0:or. Hoptagningarna kan omfatta samma antal rutor som i fallet med hoptagning av 1:or. I detta exempel kan 0:orna tas ihop i par med sina "grannar". Maxtermerna förenklas till det som är gemensamt för rutorna. Det förenklade uttrycket med produkten av tre summor innebär en mycket stor förenkling av den ursprungliga funktionens fem maxtermer. Efter att ha löst ett antal övningsexempel med Karnaughdiagram brukar man inse metodens överlägsenhet! 17

Kombinatoriska grundkretsar Vid konstruktion av större digitala system använder man förutom de vanliga grindarna, även olika kombinatoriska grundkretsar i form av sammansatta kompletta funktionsenheter. Dessa kan i allmänhet hantera 4, 8, eller 16 parallella signaler, och detta är kretsens bitbredd. Det är vanligt att kretsarna har speciella ingångar/utgångar för att man enkelt ska kunna koppla ihop flera kretsar för att öka "bredden". Även om kretsarna då arbetar bredvid varandra i parallell, är det vanligt att någon av signalerna måste passera i serie genom alla kretsarna. Man brukar därför i stället använda uttrycket att kretsarna är kaskadkopplade. Exempel på några vanliga kombinatoriska grundkretsar är avkodare, multiplexor, demultiplexor, paritetskrets, adderare och jämförare. Avkodare Vid datorkommunikation används ASCII-koden. Det är en 7-bitskod för alfanumeriska tecken. Förutom dessa finns det även ett antal styr- eller kontrolltecken. Tecknen DC1, DC2, DC3 och DC4 är sådana styrtecken för att slå på/av tillsatsutrustningar. Antag att ett digitalt system använder ASCII-koden, och att styrtecknet DC1 ( med binärkoden: 0010001 ) är "ledigt". Nu vill man använda det tecknet till att "slå på" en viktig tillsatsutrustning, tillexempel en kaffebryggare (vad kan vara viktigare?). Man behöver då ett logiknät som ger "1" för denna unika kombination av ingångsvariablerna. Man kallar ett sådant nät för en avkodare ( eng. decoder ), och det består i princip av en enda minterm. ( Fråga. Hur ser en avkodare för styrtecknet DC3 ut? Det tecknet skulle man kunna använda för att "slå av" kaffebryggaren med. ) 18

x/y-avkodare Ofta samlar man många avkodare till ett funktionsblock. En x/y-avkodare har x ingångssignaler som avkodas till y utsignaler. I figuren visas en 3/8-avkodare, även kallad BIN/OCT-avkodare. En våningsindikator till en hiss i ett hus med totalt 13 plan. Ledningsdragningen mellan våningarna och våningsindikatorerna förenklas om våningsnumren binärkodas ( 4 signaler räcker till 16 våningar = ledningsbesparing ). Våningsnumret avkodas sedan med logikkretsar till våningsindikatorernas lampor. En tillämpning för denna krets skulle kunna vara i en hiss. Hissen känner av våningsplanen med hjälp av en tre bitars binärkodsgivare ( se avsnittet om kodlinjal ), och avkodaren används till att tända en indikatorlampa för varje våning, 0... 7. 7-segmentavkodare En speciell typ av avkodare är 7-segmentavkodaren. Den används för att presentera numerisk information på en 7-segmentdisplay. Vanligt är BCD/7SEG-avkodare. En sådan avkodar siffrorna 0... 9 som föreligger på BCD-form ( Binary Coded Decimal ) på ingångarna A B C D, och presenterar siffrorna på displayen. 19

( För ingångskombinationerna 10... 15 som inte ingår i BCD-koden visar displayen meningslösa tecken). I figuren visas symbolen för en avkodare för BIN/7SEG. En sådan visar hex-tecken, dvs. bokstäverna A... F för ingångskombinationerna 10... 15. 7-segmentavkodaren består av 7 olika kombinatoriska nät, ett för varje segment. I figuren visas hur man med ett Karnaughdiagram kan finna bästa hoptagningarna för segmentet "g". Man bör emellertid titta på Karnaughdiagrammen för alla segmenten samtidigt. Det kan finnas hoptagningar som är gemensamma för flera segment och som därför bör påverka arbetet med hur hoptagningarna görs. ( 7-segmentavkodare finns som färdiga kretsar, så arbetet med att ta fram det optimala grindnätet har förmodligen redan gjorts för länge sedan ). Multiplexor, demultiplexor 20

Multiplexorn, dataväljaren, och demultiplexorn, datafördelaren, hör hemma på digitalteknikens "rangerbangård". Det är med dessa grundkretsar som "data" styrs mellan olika funktionsenheter i styrsystem och datorer. Multiplexorn och demultiplexorn kan ses som styrda omkopplare. Med binärkod ( S 1 S 0 ) väljer man väg genom omkopplaren. Multiplexorn och demultiplexorn är uppbyggda av avkodande AND-grindar. Styrkoden ( S 1 S 0 ) "öppnar" en av grindarna för signalen. I multiplexorn samlar en OR-grind upp den "utvalda" signalen, i demultiplexorn nås alla AND-grindar av samma insignal, men bara den "utvalda" grinden släpper den vidare. Ett annat viktigt användningsområde för multiplexorn är som boolsk funktionsgenerator. En 4-1 multiplexor kan generera alla ( 16 st. ) funktioner av två variabler direkt från sanningstabellen. Om multiplexorns styringångar används till funktionens ingångsvariabler, så placerar man sanningstabellens 1:or och 0:or på dataingångarna. För varje ingångskombination "hämtas" då rätt värde 1/0 från dataingångarna och förs till multiplexorns utgång. 21

Komparator Ibland behöver man kontrollera om två binära tal är lika. Det gör man med en krets som kallas för komparator ( eng. comparator ). Gäller det att jämföra två bitar så gör en EXNOR-grind precis detta. Endast om båda ingångarna har samma värde 1/0 får man 1 på EXNOR-grindens utgång. Gäller det att jämföra två binära tal med flera bitar så kan man jämföra "bit för bit" med EXNOR-grindar, för att sedan med en AND-grind bilda vilkoret att alla bitpar måste vara lika om de binära talen ska kunna vara lika. Kretsen 74HC85 Om två binära tal inte är lika, behöver man ofta veta vilket av talen som är störst. Kretsen 7485 är en komparator som jämför två binära fyrbitstal P och Q. Den har tre utgångar, P=Q P>Q samt P<Q, och kallas därför för en "magnitude comparator". Flera kretsar av denna typ kan kombineras för att jämföra binära tal med flera bitar. Ingångarna märkta P=Q P>Q samt P<Q tas då från motsvarande utgångar från en krets som jämför mindre signifikanta bitar. En ensam krets, eller den minst signifikanta kretsen, ska ha ingången P=Q ansluten till "1" och ingångarna P>Q och P<Q anslutna till "0" för att kunna fungera. 22

Kretsen 7485 är en magnitude comparator. Det är en komplex krets uppbyggd av 31 grindar som här ritats med amerikanska symboler. Den kan expanderas till valfri bitbredd. Paritet Vid datakommunikation finns det ett begrepp som brukar kallas för paritet. Ett dataord sägs ha jämn paritet om antalet ingående 1:or är ett jämnt tal, udda paritet annars. Pariteteten kan "beräknas" med hjälp av ett antal EXOR-grindar. Se figuren nedan. Med två EXOR-grindar beräknar man pariteten för tre bitar p 3, med n-1 st beräknar man p n. 23

Paritetsfunktionen är digitalteknikerns mardröm. En titt i Karnaughdiagrammet visar att inga hoptagningar överhuvudtaget är möjliga. Paritetskontroll Vid dataöverföring över större avstånd måste man alltid räkna med möjligheten att dataöverföringen störs. En sedan länge använd metod för feldetektering är den s.k. paritetskontrollen. Till den byte som överförs lägger man en extra s.k. paritetsbit som är så vald att det totala antalet ettor är jämnt vid jämn paritet (J), eller udda vid udda paritet (U). Sedan det överenskommits om vilken paritet J/U som ska gälla, kan mottagaren upptäcka om någon av de överförda bitarna "bytt" värde till följd av en störning. (Om störningen drabbat två bitar kan dock felet passera obemärkt). En bit av en hålremsa. På remsan är stansad en 7-bitskod som kompletterats med en åttonde paritetsbit. De små hålen är perforeringshål för matningen av remsan genom remsläsaren. Är det jämn eller udda paritet som gäller här? Paritetsbiten härstammar från automatiseringsteknikens barndom, då data överfördes med stansade hålremsor av pappersmaterial. De mekaniska stansutrustningarna "hängde sig" ibland, men sannolikheten för att två stanspinnar skulle kärva samtidigt var obefintlig, så paritetskontrollen utgjorde då ett fullgott skydd mot felstansade koder. En modernare metod för att gardera sig mot dataöverföringsfel går ut på att beräkna en kontrollsumma ur det block av bytes som ska överföras (ett block är tex 256 bytes). Denna kontrollsumma översändes sedan tillsammans med datablocket. På mottagarsidan jämför man kontrollsumman med den kontrollsumma man själv kan räkna fram ur de data man mottagit. Man kan med kontrollsummemetoder upptäcka överföringsfel med färre överförda kontrollbitar än vad som är fallet med paritetskontroll. Paritetskontroll är trots detta en vanlig metod för feldetektering. 24

Addition av binärtal Med hjälp av logiknät kan man utföra aritmetiska operationer med binära tal. Vi ska här titta på kretsar för addition av flersiffriga binära tal. Adderaren utgör hjärtat i alla datorer. Addition av binära tal kan ske "bit för bit". Vi kallar de båda bitar som ska adderas för A och B. Resultatet, summan, kallar vi för Σ. Om A=B=1 blir summan (1)0 och för det fallet blir det således en minnessiffra. Minnessiffran kallar vi för C OUT. Sanningstabellen för Σ(A,B) överenstämmer med en EXOR-grind, och sanningstabellen för C OUT (A,B) överenstämmer med en AND-grind. Dessa grindnät utgör en halvadderare. Heladderaren kan addera tre bitar. Vid addition av flersiffriga tal kan minnessiffror uppkomma i alla positioner. Dessa ska då tas med i additionen i nästföljande position. Det behövs därför kretsar som kan addera tre bitar, heladderare, halvadderaren adderar bara två. 25

I figuren ovan har heladderarens funktioner Σ(A,B,C IN ) och C OUT (A,B,C IN ) förts in i två Karnauhdiagram. Summafunktionen Σ(A,B,C IN ) känns igen som paritetsfunktionen, och den kan som tidigare realiseras med två EXOR-grindar. När det gäller carryfunktionen C OUT (A,B,C IN ) så skulle det gå att göra bättre hoptagningar än vad som visas i figuren, men här har man sneglat på summafunktionen som innehåller A B och därför avstått från detta. De två mintermerna kan uttryckas som (A B) C IN, och det EXOR-uttrycket finns redan med i summafunktionen. När man på detta sätt bygger en heladderare, så ser man att den kan betraktas som sammansatt av två halvadderare och en OR-grind. Adderaren i en dator kan således konstrueras med endast två olika slags byggblock, halvadderarkretsar och OR-grindar. Heladderaren kan ses som sammansatt av två halvadderare och en OR-grind. En additionskrets för binära fyrbitstal består således av fyra heladderarkretsar. En sådan 4-bitsadderare är kretsen med beteckningen 74283. Till en 8-bitarsdator behöver man två sådana 4-bitsadderare, eller 8 st halvadderare. 26

Subtraktion Subtraktion av binära tal sker i allmänhet genom sk. komplementräkning. Man behöver då ingen subtraktionskrets, utan utnyttjar additionskretsen även till detta. Negativa tal representeras av sannkomplementet, vilket innebär att alla bitar inverteras och en etta adderas till talet. Rent kretsmässigt löser man inverteringen med EXOR-grindar och man adderar en etta till talet genom att låta C IN = 1. ( om EXOR-grinden har "1" på ena ingången så får man på utgången den andra ingångens inverterade värde ). 4-bitsadderare med tillsatsanordning för subtraktion. 27

Minneskretsar, låskretsar och klockade vippor Förutom kombinatoriska kretsar behöver de flesta digitala styrsystem även minneskretsar. En enkel minneskrets är ett relä "med självhållning". En av reläets egna kontakter parallellkopplas med tryck-knappen TILL, och då behöver man bara trycka helt kort på denna för att reläet ska förbli i till-läge. Denna koppling förekommer som motorskydd, eftersom den förhindrar att motorer startar "av sig själva" när strömmen plötsligt kommer tillbaks efter ett strömavbrott. I digitaltekniken kallas detta för en SR-låskrets ( eng. SR-latch ). Strömställaren TILL kallas för S ( Set ) och strömställaren FRÅN för R ( Reset ), utsignalen från kretsen kallas för Q. SR-låskretsen Man kan göra en SR-latch av två NOR-grindar. Se figuren nedan. Genom att återföra signalerna från utgångarna till ingångarna blir det självhållning i nätet. Nätet analyseras enklast om man tänker på att NOR-grinden har "1" som låsande insignal. Detta innebär att om någon ingång är "1" så blir därför utgången "0" oavsett vad den andra ingången har för värde! SR-låskrets av NOR-grindar. Fet ledning betecknar "1". Den övre raden visar hur låskretsen "ettställs" så att Q=1. Om S=1 och R=0 låses den övre grinden till "0". Den undre grindens ingångar får då 00 vilket ger utgången Q=1. Eftersom den övre grinden nu får "1" från två håll, gör det inget om nu S=0. Q fortsätter att vara "1". Det räcker således med att S=1 helt kort för att Q ska bli "1" och fortsätta att vara det. 28

Den nedre raden visar hur låskretsen "återställs" så att Q=0. Om R=1 och S=0 låses den nedre grinden till "0". Utgången blir Q=0. Den övre grindens ingångar får 00 vilket ger "1" på utgången och "1" på ingången till den nedre grinden. Eftersom den nedre grinden nu får "1" från två håll, gör det inget om nu R=0. Q fortsätter att vara "0". Sammanfattningsvis: En kort "puls" S=1 "ettställer" låskretsen och en kort "puls" R=1 "återställer" den. Så länge S=0 och R=0 behåller låskretsen sitt värde. I sanningstabellen anges insignalkombinationen S=1 och R=1 som förbjuden!. Vad skulle hända om man använde den insignalskombinationen? Om SR-låskretsen är uppbyggd av NOR-grindar som ju har "1" som låsande insignal, så skulle båda grindarnas utgångar bli "0" på en gång. För de övriga insignalkombinationerna gäller att de båda utgångarna är varandras inverser, men detta gäller inte för den förbjudna kombinationen. Ofta behöver man både variabler och dess inverser i kombinatoriska nät. Kan man inte lita på att låskretsens andra utgång alltid har det inverterade värdet, måste man använda extra inverterare. Det är således av omtanke till "kretsekonomin" som man förbjuder "S=1 och R=1". Låskrets med NAND-grindar För NAND-grinden är "0" låsande insignal. Om en av ingångarna är "0" så låses grindens utgång till "1". En låskrets med NAND-grindar "ettställs" med en kort puls S=0 och "återställs" med en kort puls R=0. Så länge S=1 och R=1 behåller låskretsen sitt värde. Låskretsens förbjudna ingångskombination är "S=0 och R=0". 29

En tillämpning - Avstudsning av växlingskontakt med låskrets Ofta måste elektroniska styrsystem kombineras med elektromekaniska komponenter som strömställare och reläer. Eftersom elektroniken är "blixtsnabb" - en nanosekund kort puls kan räcka för att "ställa" en låskrets - måste man studera hur de elektromekaniska komponenterna egentligen uppför sig. En mekanisk kontakt studsar vid tillslag ( och frånslag ). Det elektroniska styrsystemet riskerar att felaktigt registrera många knapp-tryckningar. Figurerna visar övergången från "0" till "1" när man trycker på två olika exemplar av samma sorts tryck-knapp. Som synes är skillnaderna stora! Avstudsning av kontakter kan ske på flera sätt, men det bästa sättet är att använda strömställare med växlingskontakter och en låskrets som i figuren ovan. Kontakten avbildas i opåverkat läge. När man trycker på kontakten ansluts den till den nedre NAND-grinden. Den första kontaktslutningen ger "0" till ingången och "ettställer" direkt låskretsen. De efterföljande kontaktstudsarna får ingen verkan eftersom den första pulsen redan "ettställt" kretsen. När man släpper knappen "återställs" på samma sätt låskretsen. När kontaktarmen befinner sig mellan de två kontaktlägena kommer resistorerna att hålla båda ingångarna på "1", så låskretsen behåller då sitt värde. Den förbjudna insignalen "00" förekommer ej. 30

Grindad låskrets D-låskrets Symbol för D-latch. Ingången C1 är en styringång och den styr dataingången D1 ( en ingång märkt C2 skulle styra en ingång märkt D2 ). När C=1 följer utsignalen Q insignalen D. När C=0 låses Q till sitt senaste värde. Därav beteckningen Follow/Latch för C-ingången. Genom att komplettera SR-låskretsen med två AND-grindar och en inverterare, får man en så kallad D-låskrets. C är en styringång och D ( Data ) är den styrda ingången. När C=1 följer låskretsen insignalen D ( kretsen är "transparent" ). När C blir "0" låses utgången Q till det senaste D-värdet, och så länge som C=0 är utsignalen Q opåverkad av D. Denna låskrets har ingen förbjuden ingångskombination. D-låskretsen är världens vanligaste krets eftersom det är den som utgör minnescellerna i våra datorer. Med hjälp av en avkodare som ansluts till styringången C kan man ge minnescellen en "adress". Klockade vippor Inom digitaltekniken brukar man skilja på enkla låskretsar ( latch ) och klockade vippor ( flip-flop ). De enkla låskretsarnas begränsning ligger i att man inte kan mata in ett nytt värde till ingången "samtidigt" som man läser av utgångsvärdet. De elektroniska kretsarnas snabbhet har gjort det nödvändigt att utveckla mer sofistikerade kretsar. Figuren visar symbolen för en D-vippa. De klockade vipporna är betydligt mer komplicerade än låskretsarna, i allmänhet innehåller en vippa två eller tre låskretsar och någon extra grind. En låskrets används för att "hålla" utgångsvärdet, och en annan "tar emot" ett nytt ingångsvärde. En klockpuls på styringången verkställer att det nya ingångsvärdet överförs till låskretsen på utgången. D-vippan används för att synkronisera signalflödet mellan ett styrsystems olika delar. Figuren visar en flanktriggad D-vippa. D-ingången är som tidigare dataingång, C- ingången är klockpulsingång, därav beteckningen CP. I symbolen har styringången C försetts med ett flanktriggningstecken, en triangel. Detta innebär att pulser på C1- ingången styr D1, men bara när C-ingången nås av en positiv flank, det vill säga under den korta tid då C går från "0" till "1". 31

Det värde som D-ingången har kort före flanken ( c:a 5 ns före ) blir till utgångsvärdet Q efter flanken ( efter c:a 5 ns ). Utgångsvärdet är sedan låst tills det inkommer en ny flank på klockpulsingången. ( Observera att klockpulsingången måste återgå till "0" för att det ska kunna bli en en ny positiv flank ). Om skillnaden mellan D-låskretsen och D-vippan Ett antal D-vippor i serie bildar ett så kallat skiftregister. Tanken är att värdet på vippornas utgångar, Q, ska "förflyttas" ett steg per klockpuls. Skiftregister kan användas vid multiplikation och division av binära tal, och till serie/parallellomvandling vid seriekommunikation. Endast vippor, inte låskretsar kan användas till skiftregister. Överst i figuren visas tre D-låskretsar i serie. Från början när C=0 är låskretsarna låsta och innehåller "1" "0" "1". När C=1 följer låskretsarna sina insignaler. Den första låskretsen har insignalen D=0 och denna signal "rusar" genom låskretsarna och nollställer dessa, "0" "0" "0". Det blir inget skiftregister med D-låskretsar! Nederst i figuren visas tre D-vippor. Från början har D-vipporna värdet "1" "0" "1". När klockpulsen har sin positiva flank, kopieras innehållet från vippa till vippa, med resultatet "0" "1" "0". Skulle det komma ytterligare en positiv flank skulle resultatet bli "0" "0" "1", så skiftregistret med D-vippor fungerar som avsett. Kombinationskrets, D-vippa och låskrets Eftersom en D-vippa i sig innehåller flera låskretsar, så kan man till samma kostnad förse den med låskretsingångar av SR-typ. Klockpulsflankerna och D- ingången styr vippan, men bara om SR-ingångarna "tillåter" det. SR-ingångarna är Asynkrona, direktverkande, oberoende av klockan, medan D- ingången är synkron, och beroende av klockpulserna. Sådana R-ingångar brukar ofta användas till nollställning av kretsarna vid systemstart. ( PR står för Preset och CLR för Clear ) 32

JK-vippan, universalvippan SR-låskretsens motsvarighet bland vipporna är en "förbättrad SR-vippa" den så kallade JK-vippan. J motsvarar S och K motsvarar R. Två AND-grindar i JK-vippan förhindrar att någon otillåten insignalkombination påverkar vippan. Om J=1 och K=1 kommer AND-grindarna bara att släppa fram den av J eller K som förändrar vippans värde. Vippan kommer således att byta värde för varje klockpuls så länge denna insignalkombination består. Man säger att vippan togglar ( eng. toggle, kasta om ). Sanningstabellen kan delas upp i två delar som svarar mot två olika sätt att koppla vippan. Om J och K är sammanbundna, dvs J=K, brukar man kalla insignalen för T och den resulterande vippan för T-vippa. Med T=1 togglar vippan, och med T=0 ligger värdet fast. T-vippor används ofta till räknare. Det finns inga T-vippor att köpa, utan detta är bara ett ritsätt för den här kopplingen. Om J och K är sammanbundna, men med en inverterare mellan ingångarna så att J är K:s invers, kallar man den resulterande ingången för D. Detta är JK-vippan kopplad som D-vippa. JK-vippan är således den universalvippa som enkelt kan "förvandlas" till de övriga vipp-typerna. Vill man göra ett skiftregister med JK-vippor, behöver man ingen inverterare mellan J och K. Eftersom vipporna har både utgången Q och dess invers så kopplar man bara JK-vipporna i serie. De uppför sig då som D-vippor. Användningen av JK-vippor har ofta i praktiken visat sig ge enklare nät än vad som kan åstadkommas med de övriga vipptyperna. 33

Systematisk konstruktion av sekvensnät Vad är ett sekvensnät? Ett sekvensnät kännetecknas av att nätets utsignalerna inte endast beror av det just rådande tillståndet hos insignalerna utan även av tidigare tillstånd. Nedanstående figur exemplifierar detta. Det enklaste nätet med denna egenskap är SR-låskretsen, eller SR-latchen. En sådan kan byggas med två NOR-grindar. NOR-grindens funktion kan sammanfattas med att dess samtliga ingångar måste vara 0 för att utgången ska kunna bli 1. I figuren nedan visas omslagsförloppet hos SR-latchen. De ledningar som är logiskt höga (=1) har ritats med fetare streck. En l:a på S-ingången resulterar i att Q=1. Om S-ingången därefter återgår till 0, fortsätter ändå Q=1. Först när R=1, 0-ställs Q. Nätet har tydligen "självhållning" eller "minne". (Observera att kombinationen SR=11 är otillåten för en SR-latch). Tillstånd hos en SR-låskrets. Fet ledning är "1". Det som skiljer uppbyggnaden av ett sekvensnät ifrån ett kombinatoriskt nät är tydligen att utgångarna är "återkopplade" till nätets ingångssida. Figur nedan visar ett allmänt sekvensnät. Genom att en del av det kombinatoriska nätets utgångar återmatas till nätets ingångssida, uppkommer självhållningseffekter i nätet på samma sätt som hos SR- latchen. Man säger att nätet kan befinna sig i ett antal olika inre tillstånd; det har förmåga att "minnas" tidigare passerade tillstånd. Det är förklaringen till att en och samma insignal kan ge upphov till skilda utsignaler vid olika tillfällen. 34

Asynkrona sekvensnät Nätet i figuren är ett asynkront sekvensnät. Ett sådant besväras av en del praktiska svårigheter, varför man oftast avstår från att bygga sekvensnät på detta sätt. Om två eller fler av de utgångsignaler som återförs till ingången ändrar sig samtidigt blir nätets funktion osäker. Man säger att det råder "kapplöpning" (eng. race), mellan signalerna om vilken ändring som skall nå ingången först. Detta leder i sin tur till att det mycket väl kan vara slumpen som avgör vilket tillstånd nätet intar. Det senare kallas för "hasard", (eng. hazard). Man måste därför se till att konstruera nät av denna typ så att man undviker att fler än en signal ändrar sig vid varje tillståndsövergång. Synkrona sekvensnät Tillståndsmaskiner (Automater) En praktiskt användbar form för sekvensnät är den så kallade MOORE-automaten. Denna är en generell modell efter vilken man kan konstruera varje tänkbart sekvensnät. (En annan liknande modell är den sk MEALY -automaten). Hos MOORE-automaten har man infört ett tillståndsregister (State Register) där nätets återkopplade utsignaler måste passera varsin flanktriggad D-vippa innan de når ingångarna. D-vippan fungerar så att den signal som finns på D-ingången något innan klockpulsens aktiva flank kopieras över till Q- utgången omedelbart efter den aktiva flanken. D och Q är åtskilda från varandra under hela förloppet. Tillståndsmaskin/automat av MOORE typ. Sekvensnätet blir synkront, eftersom tillståndsövergångarna på detta sätt styrs av klockpulserna. Signalerna i nästa tillståndsavkodaren kan stabilisera sig under ett helt klockpulsintervall efter varje tillståndsövergång. Klockpulsfrekvensen är inte kritisk, den måste dock väljas så hög att sekvensnätet 35

hinner registrera ändringar hos insignalen. (En tumregel säger att klockfrekvensen ska väljas tre gånger högre än den högsta förekommande frekvensen hos insignalerna). Man kan säga att införandet av tillståndsregistret har lyft ut sekvensnätets "minnesfunktion" från det kombinatoriska nätet till D-vipporna. För att konstruera en MOORE-automat krävs det därför endast att man kan konstruera rent kombinatoriska nät, en nästa tillståndsavkodare och en utgångsavkodare. Utgångssignalerna kan många gånger tas direkt från tillståndsregistret och i så fall slipper man ju konstruera utgångsavkodaren. För att kunna ställa upp sanningstabellerna för de kombinatoriska näten behöver man känna till alla tillståndsövergångar hos sekvensnätet. Den informationen kan man enkelt ta fram med ett så kallat tillståndsdiagram (eng. Statechart). Det är lätt att konstruera synkrona sekvensnät. Ett asynkront sekvensnät blir visserligen alltid något snabbare än motsvarande synkrona nät, men de extra svårigheterna med de asynkrona sekvensnäten innebär att de bör konstrueras av erfarna digitaltekniker med kraftfulla datorhjälpmedel. Vi ska nu med ett exempel visa hur man konstruerar ett sekvensnät efter MOOREmodellen. Exempel: en kaffeautomat Tillståndsdiagram till ett sekvensnät för en tänkt (hypotetisk) kaffeautomat. Snygga tillståndsdiagram kan man rita med ett enkelt JAVA-applet som finns tillgängligt på webben. Tre cirklar representerar tre tillstånd Z0, Z1, och Z2 (Z, State = tillstånd) som automaten kan befinna sig i. Inuti cirklarna anger man också utgångstillståndet, eller om man har ont om plats skriver man utsignalernas värden bredvid respektive tillståndscirkel. Sekvensnätets två utsignaler är, drop_cup till en matarenhet för plastmuggar, och coffee till en magnetventil för kaffet. Mataren matar fram en mugg var gång drop_cup blir "1", och kaffe fylls på så länge som coffee = 1. Sekvensnätet har två insignaler. Den ena är coin från myntinkastet som anger att ett mynt eller en pollett passerat en fotocell där. coin = 1 när myntet passerar. 36

Den andra insignalen är full från en givare som "väger" plastmuggen under fyllningen. full = 1 när muggen blir full. Mellan tillståndscirklarna går pilar som visar vilka övergångar mellan tillstånden som är möjliga, och vid varje pil finns angivet vilket Boolskt vilkor som ska gälla för tillståndsövergången. För att underlätta inmatning i dator av de Boolska vilkoren använder man utropstecken! istället för vektorstreck för att beteckna negering, icke, och & för logiskt "och". För första tillståndet, Z0, gäller för utsignalerna att man inte släpper någon kopp (!drop_cup), och inte häller i någon dryck (!coffee). Man blir kvar i detta tillstånd så länge automaten väntar på betalningen (insignalen!coin). Så fort man betalat för drycken (coin) lämnas tillståndet. I andra tillståndet, Z1, har en av utgångssignalerna ändrats så att plastmuggen släpps (drop_cup). För att lämna detta tillstånd finns inget vilkor (eftersom "1" betyder alltid uppfyllt). Det som då styr tillståndsövergången är tillståndsklockan (klockpulserna till tillståndsregistret), den brukar aldrig ritas med i tillståndsdiagrammet utan är underförstådd. Efter en klockpuls lämnar man således Z1 för Z2. I denna tillämpning kan det vara lämpligt att välja tillståndsklockans periodtid av storleksordningen 1 sek. Koppen hinner i så fall på plats innan tillståndet Z2. I det tredje tillståndet, Z2, återställs mataren för plastmuggar (!drop_cup) och koppen börjar fyllas med dryck (!coffee). Detta pågår tills muggen är full (full). Vi hamnar då åter i utgångsläget. Denna form av tillståndsdiagram med beskrivande signalnamn ger en överskådlig bild av sekvensnätets beteende. Kaffeautomaten som MOORE-automat Kaffeautomaten som MOORE-automat. Framtagandet av det kombinatoriska nätet "nästa tillståndsavkodaren" beskrivs i texten. Vi ska nu realisera detta sekvensnät med en MOORE-automat. Eftersom tillståndsdiagrammet har tre tillstånd, måste tillståndsregistret kunna innehålla minst tre olika kombinationer (koder). Vi behöver således två D-vippor till detta register ( 2 2 =4>3 ). 37

I figuren ovan betecknas D-vippornas utgångar med q l q 0, ingångarna, som bär nästa tillstånds signalen, brukar betecknas q + l q + 0 där plustecknet står för det "kommande" tillståndet. Sekvensnätets utgångar och ingångar betecknas u l u 0, i l i 0. Man börjar med att ställa upp en kodad tillståndstabell. Denna innehåller (q + l q + 0 ) = f ( q l q 0, i l i 0 ) och (u l u 0 ) = f (q l q l ) i tabellform. Se nedan. Koden för de olika tillstånden q l q 0 kan väljas godtyckligt, man kan tex binärkoda tillstånden. ( Valet av kod kommer dock att i hög grad påverka de kombinatoriska nätens komplexitet. För små sekvensnät kan man för säkerhets skull prova igenom några olika val av tillståndskodning för att hitta den mest ekonomiska lösningen. För stora sekvensnät krävs det datorhjälpmedel. ) Om det går att välja tillståndskod så att (u l u 0 ) = (q l q 0 ) slipper man som tidigare nämnts nätet för utgångsavkodning. Det är så vi valt tillståndskod och utgångskod till detta exempel. Tips! För att underlätta det forsatta framtagandet av de kombinatoriska näten är det lämpligt att ställa upp tabellen i form av ett Karnaughdiagram. Kodad tillståndstabell för kaffeautomaten. Pilarna symboliserar tillståndsövergångarna. Så här kan man resonera sig fram till den kodade tillståndstabellen: Z0: Tillstånd Z0 är tabellens första rad.!full och!coin är insignalkombinationen för den första kolumnen. Vi väntar på betalning och det finns inte någon full kopp i automaten. Nästa tillstånd blir att stanna kvar, det vill säga q l + q 0 + = 00.!full och coin. Den andra kolumnen innebär att betalningen har kommit, nästa tillstånd blir således Z1, q l + q 0 + = 01. full och coin. Tredje kolumnen innebär att betalningen har kommit men att en gammal kopp tydligen finns kvar. Det är inte säkert att någon hinner att avlägsna den; nästa tillstånd blir därför att stanna kvar i Z0 (00). full och!coin. Full kopp (gamla) och inget mynt; stanna kvar i Z0 (00). 38

Z1: Enligt det tidigare presenterade tillståndsdiagrammet ska man från Z1 gå direkt till Z2. Är detta så välbetänkt?!full och!coin. Gå till Z2 (10).!full och coin. Gå till Z2 (10). full och coin. En gammal full mugg finns kvar. Släpp inte ner den nya muggen i den gamla! Stanna kvar i Z1 (01). full och!coin. En gammal full mugg finns kvar. Släpp inte ner den nya muggen i den gamla! Stanna kvar i Z1 (01).??: Z2: I tillståndsdiagrammet har vi glömt bort ett fjärde tillstånd! Det ska normalt inte kunna inträffa, men sekvensnätet kan naturligtvis utsättas för en störning. Tillståndet innebär att automaten kontinuerligt "fyller" kaffe, varför det måste förhindras. Att gå till Z0 (00) oavsett insignal är mest lönsamt för automatägaren. I de två sista kolumnerna har koppen blivit full och vi ska gå till Z0 (00). I de två första kolumnerna stannar man kvar i Z2 (10) och fortsätter att fylla på dryck. Redan detta enkla exempel visar den stora fördelen med en systematisk syntesmetod; man tvingas överväga alla möjligheter för att därmed se till att sekvensnätet gör det bästa av varje situation, även sådana som "egentligen" inte ska kunna hända. Med hjälp av tabellen kan vi nu "rätta till" det ursprungliga tillståndsdiagrammet. Ett mer genomtänkt tillståndsdiagram för kaffeautomaten. 39

Karnaughdiagram för de kombinatoriska näten Nu är det dax att dra nytta av att den kodade tillståndstabellen är uppställd som ett Karnaughdiagram. Tabellen kan nu enkelt splittras upp i två Karnaughdiagram, ett för q l + = f ( q l q 0, i l i 0 ) och ett för q 0 + = f ( q l q 0, i l i 0 ). Tillståndstabellen innehåller "nästa tillståndsavkodarens" Karnaughdiagram. Med hoptagningar i de två Karnaughdiagrammen finner man till sist det bästa logik-nätet. Slutligen kan nästatillstånds-avkodarens nät ritas in i figuren. Den innehåller sex grindar och en inverterare. Hela sekvensnätet kan realiseras med 3-4 kretsar ur 74- serien till en komponentkostnad runt 30:-. Den färdiga kaffeautomaten. MOORE-modell med nästatillstånds-avkodare. 40

Räknare Binärräknare En räknare är en speciell typ av sekvensnät som registrerar antalet inkommande klockpulser. Registreringen sker efter någon kod, oftast binärkod. Efter ett visst antal pulser tar räknarens tillstånd slut och den börjar om från början igen. Man talar om räknarens modul ( dvs. hur många tillstånd räknecykeln innehåller ). Räknaren behöver inte ha någon insignal utom klockpulserna ( som kan ses som insignalen ). Ett sådant sekvensnät kallas för autonomt. Det går naturligtvis bra att konstruera alla tänkbara räknare som Moore-automater, men litteraturen är full av exempel på "fiffiga" räknare uppbyggda bara av vippor ( och ibland någon grind ). Dessa lösningar är antingen speciellt komponentsnåla eller optimala ur någon annan aspekt, och därför värda att känna till. Det finns två olika "regler" för att konstruera binärkoden ur mindre signifikanta bitar. Ex. med binärkoden 0... 15. Om man studerar en tabell över binärkoden så upptäcker man lätt vissa regelbundenheter. Till exempel så ser man att det i första kolumnen är varannan "1" och varannan "0". I kolumnen därefter upprepas mönstret, men nu med två rader "1" innan det kommer två rader med "0" osv. Detta utnyttjas hos de asynkrona räknarna. 41

Figuren ovan visar en binärräknare med tre vippor, räknecykeln har åtta tillstånd så det är en Modulo-8 räknare. Räknaren är uppbygd av T-vippor, de har alla T=1 och "togglar" därför vid varje klockpuls. Den första vippan Q 0 "togglar" för varje klockpuls. Vippan därefter Q 1 klockas av den första vippan. Den kommer därför bara att "toggla" för varannan klockpuls. Den tredje vippan Q 2 kommer "toggla" för varannan varannan klockpuls. Enligt binärtabellen kommer räknaren därför att räkna i binärkod. ( Q 2 Q 1 Q 0 : 000 001 010 011 100 101 110 111 000... ). Klock-kristall 32,768 khz. Om man bygger ut raden av vippor ökar man räknemodulen så att N st vippor ger modulen 2 N. Samtidigt delar man ned klockfrekvensen. Den sista vippan Q N slår om med frekvensen f = CP/2 N [Hz]. Ditt armbandsur har en oscillator med en klockkristall med resonansfrekvensen 32,768 khz. I klockan finns en räknare med 15 vippor. Dessa delar ned klockfrekvensen till 1 Hz, precis lagom för sekundvisaren. Asynkronräknarens svaghet Asynkronräknaren har den enklast tänkbara uppbyggnaden. Eftersom klockpulserna tar vägen genom vipporna så kan dessa inte slå om exakt samtidigt. Om man läser av den binära koden på vippornas utgångar för att invänta ett visst räknevärde kan man bli "lurad". Vipporna slår om en efter en och man säger att klockpulsen "ripplar" genom vipporna ( asynkronräknare kallas därför ibland för rippelräknare. Ripple = vågskvalp ). Medan detta pågår kan det kortvarigt förekomma felaktiga räknevärden ( så kallade "räknespikar" ). Detta problem har man löst med de synkrona räknarna. Figuren ovan visar en synkronräknare. Klockpulserna går direkt till alla vippor och därför slår de om samtidigt. Vilka vippor som ska slå om eller ej styrs med T- ingångarna. Den första vippan har T=1 och den slår om för varje klockpuls. Ur binärtabellen kan man se att en viss vippa ska slå om när alla vippor som är före den 42

står på "1". Det vilkoret får man från AND-grindarna i den sk. Carrykedjan och det är dessa som styr T-ingångarna. Vill man utöka räknaren sker det med en vippa och en AND-grind per steg. Om räknaren är lång och består av många steg, måste informationen om att den första vippan står på "1" färdas genom många AND-grindar. Denna signal som kallas för RC, RippleCarry, begränsar räknaren högsta användbara frekvens. ( RCO står för RippleCarryOutput ). För att öka räknarens snabbhet kan man införa en "Carrylookahead"-grind. Genom att avläsa många vippors utgångar på en gång med en ensam AND-grind får man snabbare reda på ifall alla tidigare vippor står på "1". Nedräkning Hur gör man en räknare för nedräkning? Vad vore en raketuppskjutning eller en tidsstyrd bomb utan nedräkning ( Countdown )? Antag att man använder vippornas inversutgångar i stället för de vanliga utgångarna. En modulo-8 räknare räknar då: 111 110 101 100 011 010 001 000 111... det vill säga nedräkning! En reversibel räknare har en styringång för att välja upp/nerräkning. Ett grindnät ( multiplexor-kretsar ) växlar då mellan vippornas utgångar och inversutgångar. Olika räkne-moduler En räknare för vår vanliga tideräkning dvs år, månader, dagar, timmar, minuter och sekunder behöver vara sammansatt av en mängd olika typer modulo-räknare. ( Modulo- 365/366, 31/30/29/28, 2, 12, 60, 60, 10... ). Trots många försök från Franska revolutionens dagar och framåt att förändra tideräkningen till ett decimalt system är vår "krångliga" tideräkning här för att stanna, och därmed behovet av alla modulo-räknarkretsar. Skiftregister-räknare Ringräknaren Om ett skiftregisters serieutgång ansluts till dess serieingång säger man att skiftregistret "roterar" ett tal. En ringräknare är ett sådant återkopplat skiftregister. Man ser från början till att bara en av vipporna innehåller "1" ( vanligen den första ), och därefter skiftas denna 1:a runt mellan vipporna. Räknekoden är inte binärkod, 43

utan den brukar kallas för "one hot". Vill man tex räkna modulo-4 har man fyra vippor och kan direkt, utan logikkretsar, se på vippornas utgångar hur långt räknaren hunnit. Det är viktigt att det bara är en av vipporna som är "1" från början. Nedan visas att räknare i annat fall "fastnar" i andra räknecykler. Om vipporna har direktverkande asynkrona SR-ingångar kan man låta en Reset-puls initiera vipporna innan man startar räknaren. Det är också möjligt att utföra vipporna så att de startar med "0", och att en av dem startar med "1", vid spänningstillslaget. Fördel: Enkel uppbyggnad, repeterbart mönster. Fördel: Ingen avkodning av räknaren behövs. ( Onehot-code ) Nackdel: Extremt många vippor, N räknetillstånd kräver N vippor! Nackdel: Risk att räknaren "hakar upp sig". Möbius räknaren Man kan göra en ring av ett band genom att sammanfoga bandets ändar. Om man istället vrider ena änden 180 innan man sammanfogar ändarna får man en Möbiusring ( efter matematikern August Ferdinand Möbius 1790-1868 ). Av detta 44

skäl kallar man en ett skiftregisters där man återför serieutgångens inverterade värde till serieingången för en sk. Möbiusräknare. Trots den tillsynes obetydliga skillnaden mellan räknarna blir räknesekvenserna mycket olika. På samma sätt brukar den som för första gången ser och klipper isär en Möbiusring bli mycket förvånad! Räknekoden brukar kallas för "creeping Code". För varje räknesteg tillkommer en 1:a tills registret är fullt, då försvinner i stället en 1:a för varje steg. I likhet med Graykoden förändras bara en position åt gången. Räknemodulen blir 2 ggr antalet vippor, vilket är mer "ekonomiskt" än vad gäller ringräknaren. Även för denna räknare är det viktigt att den startar i ett tillstånd som ingår i räknecykeln, annars fastnar den i en annan räknecykel. Eftersom "0000" ingår i cykeln brukar man "resetta" alla vippor innan räknaren startas, alternativt tillverkar man vippor som startar med "0" vid spänningstillslag. Johnsonavkodningen Möbius-räknaren är även känd som Johnsonräknare efter Robert Johnson vid University of Utah som utvecklade ett "fiffigt" avkodarschema för "creeping code". Med bara 2-ingångars AND-grindar kan alla räknepositioner avkodas. Johnsonräknaren kan byggas som ett repeterbart mönster på IC-kretsens yta ( en vippa och två AND-grindar ), vilket gör den totalt sett ekonomisk trots den stora åtgången på vippor. Fördel: Enkel uppbyggnad, repeterbart mönster. Fördel: Enkel avkodning av räknaren. Nackdel: Många vippor, N räknetillstånd kräver N/2 vippor! Nackdel: Risk att räknaren "hakar upp sig". 45