Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I Flervalsfrågor. A 2. C 3. B 4. D 5. A 6. B 7. C 8. D 9. C 0. B. B 2. C 3. A 4. C 5. A Problemuppgifter. Uttryckt i decimal form: A=28+32+8 + 2 =70 B=59 C=7 A+B+C=246 2. Jag låter A' betyda "icke A" A'B'C'D'+ABC'D'+A'BCD'+AB'CD'=D'(A'(B'C'+BC)+A(BC'+B'C))= =D'(A'(B' C)+A(B C))=D'(A'(B C)'+A(B C))=D'(A' B C) Det finns även andra lösningar - exempelvis någon av följande: D'(A B' C) eller D'(A B C') eller D'(A' B' C') 3. Jag vill få räknaren att nollställa sig själv omedelbart när det kommet till värdet 5. 4 a) F = CD(A B) + CD(A B) + (B+C+D)
b) A B C D F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c) F = BD + CD AB CD 00 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 d) B F C D 5 a) 00 0 0 0 0 0 0
Tillståndstabell för Nästa tillstånd q + + 2 q I 0 00 0 0 q 2 q 0 00 0 0 0 00 q 2+ q + q 2+ q + Minimering Minimering D 2 = q i + q i = q i I 0 00 0 q 2 q 0 0 0 0 0 D = q 2 i + q 2 i = q 2 i I 0 00 0 q 2 q 0 0 0 0 0 b) i _ i q _ q q 2 _ q 2 Q q 2 D C Q q D C Clk u2 u
6 a. Sekvensen 0,, 2, 3, 4, 5, 6, 7, 8, 9, 0,, (binärt 0000 000 000 000 00, 0000, 000) innebär en 0-räknare. Kretsen är byggd för att kunna användas som en 0- räknare (en 2-räknare i serie med en 5-räknare blir en 2x5=0-räknare). Därför behöver inte RESET-ingången användas. Den kopplas till jord för att aldrig aktiveras. Seriekoppling av de två räknarna innebär att utgången från den ena klockar den andra. Kapseln innehåller två identiska räknar-uppsättningar. Jag väljer den "högra". (I princip kan man seriekoppla tvärtom, dvs ben 2 blir klockingång och 2-räknaren klockas med Q D. Q B blir då LSB (Ut 0) och Q A blir MSB (Ut 3 ).) 74HC390 CK 5 /2 COUNTER 3 Qa = Ut0 2 /5 COUNTER 0 9 Qb = Ut Qc = Ut2 Qd = Ut3 4 6. Vcc 8. GND b. Här är räknesekvensen 0,, 2, 0,, 2, dvs en 3-räknare. Den ska alltså räkna binärt 00, 0, 0, nollställas på, för att börja om 00, 0... Signalbilden ska alltså generera ett RESET. I uppgiften specificerades det att klockpulsen skulle anslutas till ben 2. Det betyder att det blir den "vänstra" 5-räknaren som ska användas. Jag låter då Q B vara Ut 0 och Q C vara Ut, och triggar en RESET med logiskt Q B + Q C. Det vara bara NAND-grindar som fick användas. Jag använder 2, varav som inverterare. 74HC390 3 NC /2 COUNTER (alt. GND) Qa (NC) CK 4 /5 COUNTER 5 6 7 Qb = Ut0 Qc = Ut Qd (NC) 2 6. Vcc 8. GND (I denna uppgift var det specificerat att klockpulsen skulle anslutas till ben 2. Annars kunde man teoretiskt tänkas sig att få en 3-räknare genom att koppla ihop båda räknarna som i uppgift a., använda Q A som Ut 0 och Q B som Ut, och trigga en RESET med logiskt Q A + Q B.) 7. (I min text använder jag notationen att /X betecknar NOT X.) 6 st ingångar: Apparat/anordning levererar logisk :a när den slås på. (Tex V= betyder att V är påslagen, B3=0 betyder att B3 är avslagen.) 6 st ingångar ger 2 6 = 64 möjliga insignalskombinationer. utgång: Jag väljer att när L blir logiskt hög (L=) aktiveras larmet. Sanningstabell och/eller logiskt resonemang visar att 23 inkombinationer ger larm (23 st L) och 4 inkombinationer ger inte larm (4 st /L). För att inte måsta koda alla 64 kombinationer kan jag välja att inrikta mej på L eller /L. Inriktning på L.
(Jag anger värden för V och B i ordningsföljden: V V2 B B2 B3 B4.) Studerar man de logiska villkoren för larm, kan man gruppera dem efter de fyra fallen som ges av V och V2. Man finner att för V=00 blir det aldrig larm; för V= ger alla kombinationer av B utom B=0000 larm (5 st); för V=0 ger 4 kombinationer av B larm (0, 0, 0, ); och för V=0 ger 4 kombinationer av B larm (0, 0, 0, ). Minimerar man (tex m.h.a. Karnaugh-diagram) kombinationerna av B för de tre fallen av V som ger larm, får man tre grupper av logiska uttryck som ger larm: När båda V är påslagna och något B samtidigt är påslaget: V V2 (B+B2+B3+B4) När V=0 och samtidigt något av 3 3B-kombinationer: V /V2 ((B B2 B3)+(B2 B3 B4)+(B B3 B4)) När V=0 och samtidigt något av 3 3B-kombinationer: /V V2 ((B B2 B3)+(B2 B3 B4)+(B B2 B4)) De två senare kan arbetas ihop om man vill: Två av 3B-kombinationerna är gemensamma för V och V2, dvs ger larm antingen om bara V är påslagen eller bara V2 är det. Övriga två är unika och måste kodas specifikt. Alternativ som jobbar med bitvärden och [totalt] logiskt uttryck. -- Lösningsförslag till uppgift 2 i tentamen i Digitalteknik I 00026 -- hj v.0 00025 -- Tänkt för att implementeras i tex en GAL22V0 pld-krets. -- Larmanordning åt Iris Grönkvist. -- 2 ingångsbitar från varsin värmeslinga V, V2). -- 4 ingångsbitar från varsin bevattningsslinga B-B4). -- utgångsbit (L). ENTITY green_alarm IS PORT (V, V2, B, B2, B3, B4 :IN bit; L :OUT bit); END; ARCHITECTURE alarm OF green_alarm IS BEGIN L <= (V AND V2 AND (B OR B2 OR B3 OR B4)) OR (V AND NOT V2 XOR (NOT V AND V2) AND ((B AND B2 AND B3) OR (B2 AND B3 AND B4))) OR (NOT V AND V2 AND B AND B2 AND B4) OR (V AND NOT V2 AND B AND B3 AND B4); END; Alternativ med signaler som tilldelas bitvärden från Iris elektriska enheter. Kan ha samma ENTITY som ovan och sedan tex: ARCHITECTURE alarm OF green_alarm IS SIGNAL V : bit_vector ( downto 0); SIGNAL B : bit_vector (3 downto 0); BEGIN V() <= V; V(0) <= V2; B(3) <= B; B(2) <= B2; B() <= B3; B(0) <= B4; WITH V() SELECT L <= '0' WHEN "00" AND (B = '000' OR B =... OR...); -- Ofullständig. WHEN "0" AND (B = "0" OR B = "0" OR B = "0" OR B = ""); WHEN "0" AND (B = "0" OR B = "0" OR B = "0" OR B = ""); L <= '' WHEN OTHERS; END ARCHITECTURE; Alternativ med bit-vektorer. (Möjlig om man tolkar att direktiven i uppgiften ["beteckningarna V,... B, ska ovillkorligt användas"] medger det.) I denna variant tar jag fasta på kombinationerna som inte ger larm, alltså Inriktning på /L. ENTITY green_alarm IS PORT( V :IN bit_vector( TO 2); B :IN bit_vector( TO 4); L :OUT bit ); END; ARCHITECTURE alarm OF green_alarm IS BEGIN
PROCESS begin if (V = "00" OR B = "0000" -- Bara värme eller bara vatten. OR (V = "0" AND B = "000") -- 0 vattenkombinationer med ena värmen. OR (V = "0" AND B = "000") OR (V = "0" AND B = "000") OR (V = "0" AND B = "000") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "000") -- 0 vattenkombinationer med andra värmen. OR (V = "0" AND B = "000") OR (V = "0" AND B = "000") OR (V = "0" AND B = "000") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "00") OR (V = "0" AND B = "0") -- Sist 2 specialfall. OR (V = "0" AND B = "0")) then L <= '0'; -- Alla fall som inte ger larm. else L <= ''; -- Övriga kombinationer larmar. end if; END PROCESS; END ARCHITECTURE; 8. Ett klurproblem. Syntes. Generell angreppsmodell: identifiera insignaler och utsignaler. Utsignal ganska given: väckningslarm går igång - tydligen av brandlarmsmodell med sirener och klockor i hela huset så att alla vaknar på en gång. Utsignal ska aktiveras i ett antal olika fall. För varje fall finns det specifika villkor (insignalskombinationer). a) Insignaler i systemet hör ihop med händelser. Beteckn. Sanningshalt Logisk nivå Veckodagar Lö Det är inte lördag 0 Det är lördag Sö Det är inte söndag 0 Det är söndag Klockslag Kl_6 Det är inte klockan 6 0 Det är klockan 6 Kl_7 Det är inte klockan 7 0 Det är klockan 7 Kl_8 Det är inte klockan 8 0 Det är klockan 8 Kl_9 Det är inte klockan 9 0 Det är klockan 9 Väderlek Regn Smaskens väder 0 Regnväder Farmors födelsedag Farm Farmor fyller inte år 0 Farmor fyller år b) Med så många insignaler blir det tungt att ställa upp en sanningstabell. Dessutom är det svårt att minimera på sedvanligt sätt med så många insignaler. Jag väljer att söka samverkande villkor och gruppera i fall. Alltså: larmet aktiveras i ett antal olika fall. () Vardag + (2) Vanl lö + (3) Vanl sö + (4) Farmor föd.d
Lö Sö Kl_6 Kl_7 Kl_8 Kl_9 Regn Farm () (2) (3) Larm (4) c) Larm = Lö Sö Kl_6 + Lö Kl_9 Farm + Sö Kl_7 Regn Farm + (Lö + Sö) Kl_8 Farm d) Sö Regn 9. Jag väljer att låta hela PortA vara ingång, eftersom den består av 5 bitar. Jag väljer att låta PortB vara utgång, alla bitar. ;Program som implementerar den logiska funktionen ;F = A/BCDE + /ABC/D list P=PIC6F84 #include <P6F84.INC> org 0x00 goto init ;--Initiera---------------- init clrf PORTB bsf STATUS,RP0 ;Till Bank clrf TRISA ;Denna och nästa rad onödiga comf TRISA ;TRISA ettställd vid Reset ;Hela PortA = ingångar clrf TRISB ;PortB = utgång bcf STATUS,RP0 ;Tillbaka till Bank 0 ;--Huvudprogram------------ start movf PORTA,W ;Läs PortA sublw b'0000' ;Kolla insignal, jämför ;med ena funktionstermen btfsc STATUS,2 goto one-out ;Om lika, gå till utskrift movf PORTA,W ;Förnya PortA-värdet i W andlw b'0000' ;Vaska fram intressanta bitarna sublw b'000000' ;Jämför med andra ;funktionstermen btfsc STATUS,2 goto one-out ;Om lika goto zero-out ;Om olika one_out bsf PORTB,0 Funktionsresultat: sant goto start zero-out bcf PORTB,0 Funktionsresultat: falskt goto start
0. Diskreta kretsar. Snabba. Enda tidsåtgången är elektriska fördröjningarna genom nätet. Kräver rätt mycket arbete och material, ger därmed ganska dyra lösningar. Lämpar sig bäst numera för mycket små funktioner. PLD. Snabba. Fungerar i praktiken som nät av enskilda vippor och grindar, men utan att man behöver göra omfattande ledningsdragningar. Ganska billiga. Lämpliga för många kombinatoriska och sekvensfunktioner. Dessa kan vara ganska omfattande. Kan modifieras eller helt programmeras om. Mikroprocessor. Flexibla som PLD. Men långsammare, eftersom de fungerar sekventiellt: instruktion efter instruktion ska utföras. Ganska billiga. Kan ibland på ett fiffigt sätt förverkliga ganska komplicerade operationer som skulle kräva mycket av en PLD eller ett grindnät.. Jag lägger den önskade signalföljden på ingångarna till multiplexern och låter en räknare välja insignalerna i rätt följd.