Digitalteknik F8 Shannonexpansionen och NOR-labben Digitalteknik F8 bild 1
Shannonexpansionen En flernivå - syntesmetod! Progammässigt: En naturlig rekursiv tillämpning Digitalteknik F8 bild 2
Grundide : Mycket enkel! ƒ Digitalteknik F8 bild 3
grundide : ƒ Digitalteknik F8 bild 4
grundide : ƒ Digitalteknik F8 bild 5
Fortsätt på samma sätt: Enkla! Digitalteknik F8 bild 6
Slutresultatet (den naiva varianten) Hur många nivåer max? 0 1 0 1 1 0 0 1 1 0 0 1 0 1 1 0 Digitalteknik F8 bild 7
Med lite optimering...... kan vi vika ihop ett träd och spara en massa grindar! 1 0 1 0 Digitalteknik F8 bild 8
Shannonexpansionen Den formella biten Digitalteknik F8 bild 9
Shannonexpansionen Givet en funktion ƒ: ƒ(a,b,c,...,x,...z) Välj en invariabel (Vi väljer X här) ƒ = X * ƒ Den negativa cofaktorn + X * ƒ x=0 x=1 Den positiva cofaktorn Digitalteknik F8 bild 10
Cofaktorerna Negativ cofaktor: Ta uttrycket för f: ƒ(a,b,...,x,...z) och ersätt alla X f = ƒ(a,b,...,0,...z) x=0 med 0 Positiv cofaktor: Ta uttrycket för f: ƒ(a,b,...,x,...z) och ersätt alla X f = ƒ(a,b,...,1,...z) x=1 med 1 Digitalteknik F8 bild 11
Så här blir den fullständiga funktionen: f X X * + X * f x=0 f x=1 Digitalteknik F8 bild 12
Ett exempel: f = (A + B) * (A + C) f A=0 f A=1 (0 + B) * (0 + C) (1 + B) * C 1 * C C (1 + B) * (1 + C) (0 + B) * 1 0 + B B Digitalteknik F8 bild 13
Shannon ger att f = A * f A=0 + A * f A=1 dvs f = A C + AB Utgångsfunktionen: f = (A + B) * (A + C) f = A A + A C + AB + BC =0 f = A C + AB konsensus Digitalteknik F8 bild 14
Summering: 1. Varje cofaktor har en variabel mindre än ursprungsfunktionen -> processen måste terminera 2. Cofaktorerna klistras samman med hjälp av den borttagna variabeln Fråga att besvara: Hur ser klistret ut? Digitalteknik F8 bild 15
Klisterfunktionen f Vad är detta? X X * + X * Negativ cofaktor Positiv cofaktor Digitalteknik F8 bild 16
Vi ritar om lite... Positiv cofaktor & 1 f Negativ cofaktor & X 1 Digitalteknik F8 bild 17
... och lite till: Positiv cofaktor Negativ cofaktor 1 0 f En 2:1-multiplexer (enkel att bygga med 2-ing. NOR) X Digitalteknik F8 bild 18
Slutträdet då? f 1 0 1 0 C D 1 0 C En riktig flernivåkrets 1 0 A 1 0 A 1 0 1 0 1 0 0 1 B Digitalteknik F8 bild 19
Utgå från en funktionstabell: f: 1 0 1 1 1 0 0 0 1 1-0 1. Välj en variabel. Valet är viktigt - men det finns inte någon god regel... Digitalteknik F8 bild 20
Beräkna cofaktorerna till variabeln: f: 1 0 1 1 1 0 0 0 1 1-0 f B=0 f B=1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 Digitalteknik F8 bild 21
Hur tolkar man... 1. Om mängden rader en tom mängd? dvs inga rader där f = 1, dvs f = 0! 0 2. Vad betyder det om vi har valt samtliga variabler men mängden rader inte är tom? dvs f = 1! 1 Digitalteknik F8 bild 22
Exempel 1 A - f A=0 f A=1 0 1 Resultat: f 0 1 A En rad - men inga variabler kvar En rad - men inga variabler kvar 1 1 Det är uppenbart att detta kan optimeras! f = 1 A=0 f = 1 A=1 1 f Digitalteknik F8 bild 23
Exempel 2: A 1 f A=0 f A=1 Resultat: f Tom! 1 0 1 A Tom mängd! En rad - men inga variabler kvar Optimera! 0 1 f = 0 A=0 f = 1 A=1 A f Digitalteknik F8 bild 24
Sammanfattning: Givet en tabell: 1 0 1 1 1 0 0 0 1 1-0 1. Välj en invariabel - och håll reda på att den valts 2. Använd den valda variabeln och dela upp tabellen 3. Upprepa steg 1 och steg 2 tills invariablerna är slut Digitalteknik F8 bild 25
Äntligen - Ett vettigt exempel på en rekursiv tillämpning - En chans att öva lite! Digitalteknik F8 bild 26
Huvudprogrammet 1. Initiera (töm) MUX-samlingen 2. work(f, out, -); 3. Eventuella optimeringar 4. Spotta ut grindarna Digitalteknik F8 bild 27
Work Work( Tabell_in Namn_förslag Egentligt_namn) (funktionstabell in) (in) (ut) Vi skall se hur detta kan se ut... Digitalteknik F8 bild 28
work - fall 1-2 work ( Tabell, Namn_in, Namn_ut ); 1. Tom? Då: Strunta i Namn_in! Namn_ut := 0 Avsluta. 2. Redan valt alla variabler? Då: Strunta i Namn_in! Namn_ut := 1 ; Avsluta. Digitalteknik F8 bild 29
work - 3:e fallet work ( Tabell, Namn_in, Namn_ut ); 3:e fallet: måste räkna vidare: A: Välj en ledig variabel B: f0 <-- negativa cofaktorn C: f1 <-- positiva cofaktorn D: Hitta på ett namn --> LO E: Hitta på ett namn --> HI Två anrop: F: work( f0, LO, RES_0 ); G: work( f1, HI, RES_1 ); H: Namn_ut := New_Mux (namn_förslag_in, Hjälpfunktion vald_var, RES_0, RES_1); Digitalteknik F8 bild 30
WORK är klar...... men vad gör New_Mux??? Digitalteknik F8 bild 31
Vi har skapat: men vilket namn har denna ledare? Vald variabel 0 1 RES_0 RES_1 Digitalteknik F8 bild 32
Vi måste lagra våra muxar: Var In_0 In_1 Utnamn Mux-tabellen fylls efterhand med muxar! Vi skapar aldrig en ny mux om vi kan dela en befintlig. (Vi delar på utgångar.) Digitalteknik F8 bild 33
New_Mux New_mux ( Förslag, Var, In_0, In_1 ); 1: Använd bara dessa tre parametrar för att söka i tabellen efter matchande mux. 2a: Vi hittar en match: - Strunta i föreslaget namn. - Returnera namnet från tabellen! 2b: Vi hittar ingen match: - Lägg till en ny mux i tabellen. - Använd det föreslagna namnet till den nya muxen. Digitalteknik F8 bild 34
Optimeringar? Internt i New_Mux: m A K K Detta är slöseri med komponenter! Skapa inte någon mux! Returnera K! Digitalteknik F8 bild 35
Sista steget: Omvandla mux-tabellen till en (förmodligen större) NOR-grindtabell Undvik redundanta grindar! Digitalteknik F8 bild 36
Tänk på vad ni gör... Borde ni lägga till lite Quine-McClusky? Digitalteknik F8 bild 37
Det som är mest avgörande? Den ordning som ni väljer variabler i! Digitalteknik F8 bild 38