Digital elektronik CL9 Föreläsning 3 27--29 8.5 2. My Talsystem Binära tal har basen 2 Exempel Det decimala talet 9 motsvarar 2 Den första ettan är MSB, Most Significant Bit, den andra ettan är LSB Least Significant Bit. Hexadecimala tal har basen 6. För att uttrycka ett hexadecimalt tal behöver man 6 stycken symboler. Man använder siffrorna 9 samt bokstäverna A,B,C,D, E och F. Omvandlingen mellan binära och hexadecimala tal är enkel. Exempel talet F3 6 omvandlas till 2 F motsvarar 2 och 3 motsvarar 2 Det binära talet skall omvandlas till ett hexadecimalt tal. Börja med att gruppera i grupper om fyra från höger mot vänster. Översätt sedan varje grupp till en hexdecimal siffra. C 5 3 D Talet motsvarar C53D 6 ( Den decimala motsvarigheten är 856 269 ) Antag att man har ett mätinstrument som skall mäta en position. Det analoga mätvärdet omvandlas till ett binärt tal med fyra siffror. För varje steg åt höger ökar mätvärdet med en enhet. Antalet siffror som ändras i det digitala talet är en eller två eller tre. 27--29 F3 /
Antag att mätresultatet är men ett fel gör att man avläser. Mätningen gav värdet 3 men man uppfattar det som 7. Ännu värre blir det om mätresultatet är men avläsningen ger. Det här gör att man vid mätning ofta använder Gray-kod. En kod som endast ändrar en bit mellan två närliggande värden. Binär Gray Graykod kan konstrueras med hjälp av spegling. Se Hemert sid 29-4 Decimalt Binärt Gray x 3 x 2 x x y 3 y 2 y y 2 3 4 5 6 7 8 9 2 3 4 5 Gör en krets som omvandlar från binärkod till graykod. Detta ger fyra st Karnaughdiagram. Ett för varje variabel i graykoden. 27--29 F3 2/
x 3 x 2 x x x 3 x 2 x x y = x + x y = x2 x + x2 x x 3 x 2 x x x 3 x 2 x x y 2 = x3 x2 + x3 x2 y 3 = x3 Här ser man att alla ekvationer utom den sista representerar xor-grindar x3 x2 x = y = y = y 2 = y 3 GND 27--29 F3 3/
För att göra en omvandlare från binärkod till graykod så behöver man bara en TTL-krets. 7486 innehåller fyra stycken xor-grindar. Den här funktionen kan beskrivas i VHDL library ieee; use ieee.std_logic_64.all; entity bin_gray is port( x3,x2,x, : in std_logic; y3,y2,y,y : out std_logic); end bin_gray; architecture funktion of bin_gray is begin y <= xor x; y <=x xor x2; y2 <=x2 xor x3; y3 <=x3; end funktion ; För att kunna ladda ner denna beskrivning till en FPGA-krest så måste man tillfoga information om vilka pinnar som skall vara ingångar respektive utgångar. Negativa tal Negativa tal anges med tvåkomplement. Det positiva talet 3 anges med tre bitar. Binärt blir det 2 Det negativa talet -3 bildas genom invertering av det binära talet. -komplement. Genom att sedan lägga till en etta får man 2-komplement. Det sista steget ger -3. inverteras till Lägg till en etta + = 27--29 F3 4/
Om det positiva talet 3 anges med fem bitar så får man: inverteras till Lägg till en etta + = Det är viktigt att veta hur många bitar som skall användas. Inledande nollor måste vara med. Ett negativt tal börjar alltid med en etta. Tabellen nedan visar de tal som kan anges med 3 bitar och med 4 bitar Tre bitar Fyra bitar Decimalt Med 2-komp Decimalt Med 2.-komp 3 7 2 6 5 4-3 -2 2-3 -4 - -2-3 -4-5 -6-7 -8 Med tre bitar kan man ange 2 3 = 8 olika tal. Använder man bara positiva tal så blir talområdet 7. Använder man både positiva och negativa tal blir talområdet -4 till plus 3, men det är fortfarande bara 8 olika tal. För fyra bitar blir det 2 4 = 6 olika tal. Talområdet blir till 5 respektive -8 till +7. Jämför med C-språket. unsigned int och int. Alla beräkningar är korrekta så länge som talen finns inom talområdet. 27--29 F3 5/
Exempel Med tre bitar addera två plus två. + = Har man angett att talen skall vara 2-komplement så tolkas resultatet som -4- Med fyra bitar går det bättre. + = Den inledande nollan anger att det är ett positivt tal. För att addera två tal behöver man en adderingskrets. En krets som adderar två bitar. y Adderare summa Om man adderar två bitar kan summan bli eller eller. x y Carry c Sum s Man behöver kunna ange en minnessiffra. Två utgångar på kretsen. Detta ger en s.k. halvaddeerare. y Halv adderare c Tabellen ovan anger att man kan konstruera en halvadderare men en and-grind och en xor-grind. y & c = 27--29 F3 6/
En heladderare skall även ta emot en carry. Tre ingångar och två utgångar. c y c c xy c xy c = y + c + c y = y + y + c Ovanstående är skrivet som Summor av Produkter. Man kan också skriva funktionerna som Summor av Produkter Då blir c = ( c + ) ( c + y) ( + y) s = ( + y) ( c + + y) Hemert har på sid 73 visat hur man kan bygga en heladderare med enbart NANDgrindar. Det går lika bra att bygga med enbart NOR-grindar. Två halvadderare kan också kopplas ihop till en heladderare. y c Halvadderare Halvadderare carry sum carry c 27--29 F3 7/
Heladderare brukar benämnas ( full adder ) Flera en-bits adderare kan kopplas ihop. Nedan visas en fyra-bit adderare. x3 y3 x2 y2 x y y c4 c3 c2 c c s3 s2 s För att skapa en subtraktion använder man en adderare och skapar ettkomplent med xorgrindar. Ettan som behövs för att skapa tvåkomplement adderas till genom c. x3 y3 x2 y2 x y y = = = = S c4 c3 c2 c c s3 s2 s S= ger en subtraktion x y. Då S = har man en vanlig additon. Multiplexer Förkortas MUX Välj av två möjliga 2 MUX & Utgång x x & Adressingång 27--29 F3 8/
Så här fungerar den: Adress Ingång Utgång X X X X 4 MUX x x2 x3 2 3 2 Utgång s Det är viktigt att hålla reda på ordningen så att man pekar ut rätt ingång. Adress Ingång Utgång s x x x2 x2 x3 x3 Till sist, konstruera en 4 MUX av 2 MUX:ar 27--29 F3 9/
x A x2 x3 C B Muxen längst till höger avgör vilken signal från de andra två muxarna som skall passera. Adressingång C är mest signifikant Adresserna A och B har samma signifikans. Dessa två adresser kopplas ihop. Adress C motsvarar s och A och B motsvarar. 27--29 F3 /