DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb, som givet 2 binære tal, kan sammenligne dem og beregne 6 "condition codes". LT LE EQ NE GE GT < = > Disse returneres i et 6 bits register, hvor hvert bit har værdien true, så frem betingelsen er opfyldt. Dette kan f.eks. bruges til at implementere instruktionen COMPARE, så et efterfølgende kald til JUMP<cc>, vil hoppe såfremt det pågældende bit i registeret er sat. (cc betegner en af de 6 condition codes). Kredsløbet skal designes vha. "devide-and-conquer"-princippet, så beregningen bliver i logaritmisk tid. 2. Princip Ved at opbygge kredsløbet i en træstruktur, bruger vi "devide-and-conquer"-princippet, da vi deler problemet op. Vi starter med at sammenligne de enkelte bit i de to binære tal. Når vi så har sammenlignet de enkelte bit, sammenligner vi resultatet af to sammenligninger osv. op igennem træet til vi til sidst har en sammenligning, som vi så vil bruge til at sætte de respektive bit i vores 6 bit register. For at dette kan lade sig gøre, er vi nød til at finde en måde at kode sammenligningen. Dette gøres ved to bit som sendes videre. Det er her vi finder ud af at det faktisk kun er nødvendigt at kode for 3 tilstande, nemlig LT EQ GT < = > da vi ud fra disse nemt kan beregne alle 6 condition codes ud fra disse 3. Jeg har valgt at kode de 3 tilstande på følgende måde Condition code Bit 1 Bit 2 < 0 1 = 1 1 > 1 0 Tabel 1 Jeg har valgt ikke at bruge 00, da jeg kun har brug for 3 tilstande, men har 4 tilrådighed. I alle diagrammer herfra, er 00 bevidst undladt, da ingen af delkredsløbene vil aflevere 00 til det næste. For at finde ud af, hvordan de enkelte delkredsløb skal se ud, bruger jeg Karnaugh kort. Disse er ikke gennemgået i dette kursus, DM13, men i kurset DIG på IOT, Ingeniørhøjskolen Odense Teknikum, som jeg tidligere har fulgt. Vi kigger nærmere på de Karnaugh kort, jeg har stillet op for mine delkredsløb i afsnittet "Karnaugh kort". For at kunne løse problemet, er vi nød til at designe 3 forskellige delkredsløb. Et der sammenligner et bit fra hvert binært tal og som sender en af de 3 tilstande videre. Dette delkredsløb betegnes med tallet 1. Det andet skal tage to tilstande og sende en tilstand videre. Hvilke der skal sendes videre, ses i tabel 2 nedenfor.
Input 1 Input 2 Output < < < < = < < > < = < < = = = = > > > < > > = > > > > Tabel 2 Dette delkredsløb betegnes med tallet 2. Det sidste delkredsløb, skal ud fra en tilstand, sende de respektive condition codes til vores 6 bit register. Dette delkredsløb betegnes med tallet 3. Ved at sætte disse 3 delkredsløb sammen i en træstruktur, opnår vi det vi er ude efter, nemlig et kredsløb, som kan beregne de 6 condition codes i logaritmisk tid. Fig. 1 - Kredsløbets træstruktur opbygning Vi går ud fra i resten af dette skrift at alle binære tal er af power 2, da dette vil give et balanceret træ.
3. Karnaugh kort For at finde frem de boolske ligninger, som vi skal bygge vores delkredsløb fra, bruger jeg som tidligere nævnt Karnaugh kort. Først opstilles sandhedstabellen og derefter opstilles Karnaugh kortet. Sandhedstabellen og Karnaugh kortet for kredsløb 1 ses nedenfor. A B C D 1 1 1 1 1 0 1 0 0 1 0 1 0 0 1 1 Tabel 3 Fig. 2 - Karnaugh kort over delkredsløb 1 I delkredsløb 1 og 2, betegner henholdsvis bit C og bit D, første og andet bit i den tilstands kode, som viser de to binære tals inbyrdes forhold. Ud fra de to Karnaugh kort får vi følgende to boolske ligninger, for C og D. C = A + B D = A + B Understregningen gør det ud for en negering, da M$ Word 97 ikke har mulighed for at lave overstregning. Ud fra disse to boolske ligninger fås følgende kredsløb.
Fig. 3 - Delkredsløb 1 Delkredsløb 2 designes på samme måde. A B C D 01 01 0 1 01 11 0 1 01 10 0 1 11 01 0 1 11 11 1 1 11 10 1 0 10 01 1 0 10 11 1 0 10 10 1 0 Tabel 4
Dette giver følgende to boolske ligninger. Fig. 4 - Karnaugh kort over delkredsløb 2 C = A 1 B 1 + B 2 A 1 A 2 D = A 2 B 2 + B 1 A 1 A 2 A 1 betegner bit C fra tidligere delkredsløb og A 2 bit D. Dette samme gælder for B 1 og B 2. Disse to boolske ligninger giver os følgende. Fig. 5 - Delkredsløb 2
Til sidst gøres det samme for delkredsløb 3 A B C D E F G H 1 1 0 1 1 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 Tabel 5 Fig. 6 - Karnaugh kort over delkredsløb 3 Hvor de 6 output er henholdsvis LT, LE, EQ, NE, GE og GT, som svare til C, D, E, F, G og H. Dette giver anledning til 6 bolske ligninger. C = AB D = B E = AB F = AB + AB G = A H = AB
Dette føre til delkredsløb 3. Fig. 7 - Delkredsløb 3 Når disse 3 delkredsløb sættes sammen, som vist i fig. 1, vil kredsløbet beregne det som vi var ude efter, nemlig et 6 bit register, hvor de førnævnte condition codes er sat. 4. 2's komplement Ind til nu har vi taget de binære tal uden fortegn, og ikke negative. Vi vil nu kigge på biære tal i 2's komplement. I 2's komplement vil 0 have prioritet over 1, dvs. at 0 er større end 1. For at vores kredsløb skal kunne klare 2's komplement binære tal, er vi nød til at ændre det. En mulighed var at lave et fjedre delkredsløb, som omdannede 2's komplement binære tal til almindelige tal binære tal og så sende dem igennem resten af kredsløbet. Dette giver dog problemer, da vi ikke har designet kredsløbet til at klare negative tal. En anden mulighed var bare at negere alle indgange. Jeg har dog i stedet valgt bare bytte om på den rækkefølge som kredsløbet får de enkelt bit. I stedet for at få A og så B, så giver vi kredsløbet B og så A. På den måde vil kredsløbet give prioritet til 0 i stedet for 1. Et eksempel ses på fig. 8 nedenfor.
Fig. 8 - Kredsløbets træstruktur opbygning, ved 2's komplement 5. Konklusion Vi har ved hjælp 3 små delkredsløb, konstrueret et større kredsløb, som kan sammenligne to binære tal, og sætte 6 bit i et register, alt efter hvilke conditions der gælder mellem de to binære tal. Desuden har vi vist at der ved meget lille anstrengelse også kan bruges binære tal i 2's komplement, så det er muligt at sammenligne negative tal. Dog vil det kræve at der kommer noget logik før vores kredsløb eller der laves to, næsten, identiske kredsløb. Kredsløbet som vi har designet er skalerbart til, næsten, uendelighed, da det bare er spørgsmålet om at bruge flere delkredsløb. Dette vil dog i den virkelige verden, give fysiske problemer, f.eks. størrelse og spænding.