1(45) 2019 Mattias Krysander Ingemar Ragnemalm D D 1(45)
Föreläsning 4. Komb2. Denna föreläsning: Labb 1 Adderare Lite mer om kombinationskretsar 2(45)2(45)
Förra föreläsningen: Några kombinationskretsar. Karnaughdiagram. "Don't care" 3(45)3(45)
Förra föreläsningen: Karnaughdiagram konsten att ringa 4(45)4(45)
Sanningstabell till Karnaughdiagram a 0 bc 00 01 11 10 0 1 3 2 i a b c f 1 4 5 7 6 0 0 0 0 1 1 2 0 0 0 1 1 1 0 0 3 4 0 1 1 0 1 1 0 0 1 1 1 0 5 6 7 1 1 1 0 1 1 1 1 0 0 1 1 0 1 1 0 5(45)5(45)
5 variabler de a = 0 00 01 11 10 a = 1 de 00 01 11 10 00 0 1 3 2 00 16 17 19 18 bc 01 11 4 5 7 6 12 13 15 14 bc 01 11 20 21 23 22 28 29 31 30 10 8 9 11 10 10 24 25 27 26 6(45)6(45)
ab 00 01 11 cd 00 01 11 10 0 0 0 1 0 1 1 0 1 1 1 1 Stora ringar Få ringar Börja med uppenbart nödvändiga små, t.ex. ettor med många 0- grannar Överlapp är inget fel om det ger en större ring ab + c'd'a + bd + a'b'cd' 10 1 0 0 0 7(45)7(45)
Stora ringar Stor ring = färre beroenden = mindre grind Få ringar Varje ring ger en grind till Ringen definierar de variabler som inte varierar inom ringen 8(45)8(45)
Wrap-around Du får alltid ringa runt kanten cd cd 00 01 11 10 00 01 11 10 00 0 0 0 0 00 1 0 0 1 ab 01 11 1 0 0 1 1 0 0 1 ab 01 11 0 0 0 0 0 0 0 0 10 0 0 0 0 10 1 0 0 1 bd' b'd' 9(45)9(45)
Don't care SP-normalform: f(a,b,c) = (3,4,6,12,14,15) + d(2,7,8,10,11,13) PS-normalform: f(a,b,c) = (0,1,5,9) + d(2,7,8,10,11,13) 00 01 11 10 00 01 11 10 0 0 1-1 0-1 1-1 1-0 - - 10(45)10(45
Labb 1a Att göra: Förbered minst uppgift 1-4 Tag med numrerade kopplingsscheman till laborationen Få godkänt på 1a 11(45)11(45
"Öppet labb" Labbet "Ginden" tillgängligt när ej schemalagt, men enbart kursregistrerade access fr 1:a februari bygg inte labben i förväg på denna tid, lös labben på labbtid 12(45)12(45
"Drop-in" Obokad? Missade deadline? På väntelista? Drop-in på labben i mån av plats. Fria platser släpps 10 minuter efter start Väntelista? Nästa måndag vet vi hur full kursen är 13(45)13(45
+5 0 +5 0 7-segment 7-segment Skjutomkopplare Skjutomkopplare 74LS00 74LS00 74LS04 74LS10 74LS153 74LS157 +5 0 7-segment Klockpulsgenerator 74LS00 74LS10 74LS160 +5 0 7-segment Minne 74LS00 74LS109 74LS160 +5 0 Lysdioder Minne 74LS02 74LS109 74LS160 +5 0 Tryckomkopplare Förgrening 74LS04 74LS109 74LS669 Labbutrustningen 14(45)14(45
Genomförande Förberedelse 15(45)15(45
Exempel: OR med NAND och inverterare Sanningstabell Karnaughdiagram Boolesk funktion Kretsschema Sanningstabell a b y 0 0 0 Karnaugh b 0 1 Boolesk funktion: y = a + b = (a + b)'' = (a'b')' Kretsschema: 0 1 1 1 0 1 1 1 1 a 0 1 0 1 1 1 y 16(45)16(45
Var kopplar vi in det? Styr insignaler, läs av utsignaler Insignaler: Skjutomkopplare Utsignaler: Visa med lysdioder Matningsskenan +5V = 1 GND = 0 Skjutomkopplare y +5V = 1 = Vcc = Matningsspänning GND = 0 = jord Lysdioder 17(45)17(45
1 Numrering Var är grindarna anslutna i kapslarna? 2 1 2 2 Matningsspänning på ben 14 och jord på ben 7 på båda 18(45)18(45
Fysisk uppkoppling och färgkonventioner Uppkoppling av OR-funktionen. I bilden: Insignal 11 ger utsignal 1. I ringen: Logikprob för felsökning. Färgkonvention för sladdar: Röd: Fast 1:a (kopplad till Vcc) Svart: Fas 0:a (kopplad till GND) Övriga: gul/blå/vit Placera komponenter som skall kopplas ihop nära varandra. Börja med Vcc och GND radvis. Rörigt? Det blir lätt stökigt när man "labbkopplar". 19(45)19(45
Exempel på vanliga fel Nätaggregatet är påslaget men inget lyser. - Har du kortslutning mellan Vcc och GND? Utsignalen lyser alltid. - Har du glömt att jorda NAND-grinden? Utsignalen lyser svagt 1 0 odef Tyder på odefinierad spänningnivå. - Har du kopplat lysdioden till en oanvänd 0 NAND-grind? 0 Utsignalen lyser inte när ab = 10 - Glapp i den rödmarkerade sladden? 20(45)20(45
Vidare på "Komb2" Adderare Tag två signaler (xn xn-1... x2, x1, x0), (yn yn-1... y2, y1, y0) som representerar binära tal. Bilda summan av dem. 21(45)21(45
xn xn-1... x2, x1, x0 yn yn-1... y2, y1, y0 ADD sn sn-1... s2, s1, s0 22(45)22(45
Adderare med flera bitar Addera 2-bitarstal In: x1, x0, y1, y0 Ut: u2, u1, u0 Fullt lösbart med tre Karnaughdiagram Tre bitar? Fyra 6-variabels Karnaughdiagram Fyra bitar? Fem 8-variabels Karnaughdiagram Men jag vill ju addera 32 bitar... 23(45)23(45
Men, problemet har en iterativ struktur Addera en siffra i taget, samma sak i varje steg I basen 10: Si = (Xi + Yi + minnessiffra Ci) mod 10 Ci+1 = (Xi + Yi + minnessiffra Ci) div10 Lösning: Bryt ner problemet i delsteg Sekvens av 1-bits-adderare "Halvadderare": Adderar två enbitarstal. Ger två bitar ut. "Heladderare": Adderar tre enbitarstal Ger två bitar ut. 24(45)24(45
xi yi =1 Heladderaren ci =1 si xi yi yi xi 1 ci+1 ci+1 FA ci xi ci si yi ci 25(45)25(45
Så nu kan jag addera godtyckligt stora tal y5 x5 y4 x4 y3 x3 y2 x2 y1 x1 y0 x0 c6 FA c5 FA c4 FA c3 FA c2 FA c1 FA c0 s5 s4 s3 s2 s1 s0 Trodde jag... 26(45)26(45
Problem: Tidsfördröjning Det tar en viss liten tid att ställa om en grind. Med 2-3 grindar djup: Inget problem. Men med en 64-bitarsadderare...? 27(45)27(45
Grinddjup för adderare: 2 för carry (2 steg AND) 3 för summa (2 steg XOR kräver extra inverterare) Ger 2(n-1) + 3 = 2n+1 grindars djup för n bitar. 28(45)28(45
Lösning: Carryaccelerator: Gör ett grindnät som beräknar enbart carry för ett antal bitar. 29(45)29(45
Carryacceleratorn är ett vanligt grindnät, 2 nivåer plus inverterare. Carryaccelerator y4 x4 y3 x3 y2 x2 y1 x1 y0 x0 c5 FA c4 FA c3 FA c2 FA c1 FA c0 s4 s3 s2 s1 s0 30(45)30(45
Aritmetisk logisk enhet (ALU) Större krets som kan utföra flera olika aritmetiska och logiska operationer på flerbitarstal. Ingår i alla CPUer. Enkel CPU: Mikrokod (programkod) anger register som in- och utsignaler till en ALU. Dessutom flyttningar av data till och från minne. 31(45)31(45
74181 ALU i en TTL-kapsel Kan en massa logiska och aritmetiska operationer i 4-bitarsgrupper: Addition, subtraktion, inkrement, dekrement, AND, OR, NOT... och detta är en liten krets idag. SN54/74LS181 MODE SELECT INPUTS S3 S2 S1 S0 LOGIC (M = H) FUNCTION TABLE ACTIVE LOW INPUTS OUTPUTS ARITHMETIC** (M = L) (Cn = L) LOGIC (M = H) ACTIVE HIGH INPUTS OUTPUTS ARITHMETIC** (M = L) (Cn = H) L L L L A A minus 1 A A L L L H AB AB minus 1 A + B A + B L L H L A + B AB minus 1 AB A + B L L H H Logical 1 minus 1 Logical 0 minus 1 L H L L A + B A plus (A + B) AB A plus AB L H L H B AB plus (A + B) B (A + B) plus AB L H H L A B A minus B minus 1 A B A minus B minus 1 L H H H A + B A + B AB AB minus 1 H L L L AB A plus (A + B) A + B A plus AB H L L H A B A plus B A B A plus B H L H L B AB plus (A + B) B (A + B) plus AB H L H H A + B A + B AB AB minus 1 H H L L Logical 0 A plus A* Logical 1 A plus A* H H L H AB AB plus A A + B (A + B) plus A H H H L AB AB plus A A + B (A + B) Plus A H H H H A A A A minus 1 L = LOW Voltage Level H = HIGH Voltage Level* *Each bit is shifted to the next more significant position 24 1 VCC A1 B1 A2 B2 A3 B3 G Cn+4 A=BP F3 24 23 22 21 20 19 18 17 16 15 14 13 1 2 3 4 5 6 7 8 B0 A0 S3 S2 S1 S0 Cn M 9 10 11 12 F0 F1 F2 GND **Arithmetic operations expressed in 2s complement notation 32(45)32(45
Datorsystem CPU Centralenhet Minne(RAM) Program och data In/Utenheter CPU x ALU y Intern buss Instruktionsregister Instruktions- avkodare Register A B C D Instruktioner: Läses från RAM Ladda register från RAM Skriv register till RAM Lägg A+B i C Hoppa till adressen X Instruktionsräknare Till huvudbussen u 33(45)33(45
Grinddelning Två delnät i samma konstruktion kan ibland innehålla samma grindar y1 cd 00 01 11 10 y2 cd 00 01 11 10 00 0 0 0 1 00 0 1 0 1 ab 01 0 0 1 0 ab 01 0 1 1 0 11 0 0 1 1 11 0 0 1 1 10 1 1 0 0 10 0 0 0 0 34(45)34(45
1 y1 a c b a c b b d c a c b d 1 y2 a d c a c b b d c a c b d De två funktionerna kan nu realiseras med tre grindar färre 35(45)35(45
Nyttan av optimeringarna Diskreta grindar: Färre komponenter. Programmerbar logik: Lättare att få plats i kretsen ASIC: Lättare att få plats på chipytan, lägre effekt. 36(45)36(45
Hasard, kapplöpning Tidsförskjutningar kan ge egendomliga effekter a c z1 1 y b 1 z2 a b c z1 z2 z1 och z2 momentant 0 y "Glitch" i utsignal 37(45)37(45
Typer av hasard "Statisk 1-hasard" "Statisk 0-hasard" Felaktigt värde när signalen inte skall ändras. "Dynamisk hasard" "Fladder" vid övergång mellan 1 och 0 38(45)38(45
Åtgärd av hasard "Onödiga" grindar för att "lappa hålet" Följande löser problemet förut: bc a c z1 a 0 0 0 1 0 1 1 1 b 1 z2 1 y Jo, det finns faktiskt fall då det kan vara värt att ha extra grindar 39(45)39(45
I 2 I 1 I 0 Programmerbar logik: PROM, PLD, FPGA... Ersätter oftast diskreta grindar. Optimera för att utnyttja den så väl som möjligt. O O O 3 2 1 O 0 Källa: http://www.eng.ucy.ac.cy/theocharides/courses/ece210/plds.pdf 40(45)40(45
PROM Lagrar ett ord per kombination av insignaler. Kan ses som en lagring av data. Kan också ses som en krets där vi programmerar in sanningstabellen direkt i kretsen. Ett alternativ som ofta bör övervägas. Exempel: Heladderare x y c 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 1 c+ s 41(45)41(45
Paritetkrets Felupptäckande och felrättande kod Felupptäckande av enkelfel (en bit) enkelt Bättre koder kan rätta fel av en storlek och upptäcka fel av en annan. Mycket stor sak i osäkra lagringsmedia eller osäker dataöverföring d0 =1 d1 d2 =1 d3 =1 d4 =1 d5 En serie av XOR räknar udda/jämnt Ger paritetsbit. Testa med denna efter transmission/läsning. =1 y 42(45)42(45
Ett par ord om elektroniken: Varför måste jag koppla in Vcc och GND hela tiden? Vad blir utspänningen om Vcc och GND inte är anslutna? Svar: Det beror på kretsen - som vi oftast inte har så mycket insikt i 43(45)43(45
Pull-up-motstånd Vanligt trick i digitalteknik Ett motstånd drar svagt åt noll eller ett. Vcc Kondensator på reset Vissa kretsar har en nollställningsport, som bör aktiveras vid uppstart. En kondensator kan ge en kort puls. Vcc u u 44(45)44(45
NÄSTA FÖRELÄSNING Vippor Sekvenskretsar 45(45)45(45