Lösningförslag till Exempel på tentamensfrågor Digitalteknik I.. 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) CD 00 0 0 00 0 0 AB 0 0 0 0 0 0 0 0 0 0 c) F = B D + C D 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 D 2 = q i + q i = q i I 0 00 0 q 2 q 0 0 0 0 0
Minimering 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. Karnaughdiagram) 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 ((B2 B3 B4)+ (B B2 B4)+ (B B2 B3)) När V=0 och samtidigt något av 3 3B-kombinationer: V /V2 ((B2 B3 B4)+ (B 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). -- Lösning med booleska funktioner. 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 ((B2 AND B3 AND B4) OR (B AND B2 AND B4))) OR (NOT V AND V2 AND B AND B2 AND B3) 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 <= '' WHEN "00" AND (B = '000' OR B =... OR...); -- Ofullständig. Alla utom '000'. 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 <= '0' 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. Entity tarning is port( clk: in bit; i: in bit_vector( downto 0); u: out bit_vector(3 downto 0)); end; Architecture dioder of tarning is signal ut: bit_vector(3 downto 0):="0000"; begin u<=ut; --uppdaterar utgangen process(clk) begin if clk'event and clk='' then --varje gang klockan gar fran lag-hog case i is when "0" => -raknemod case ut is when "000" => ut<="000"; when "000" => ut<="00"; when "00" => ut<="00"; when "00" => ut<="0"; when "0" => ut<="0"; when "0" => ut<="000"; when others => ut<="000"; end case; when "0" => ut<=""; -testmod when "" => ut<="0000"; -offmod when "00" => ut<=ut; -vilomod end case; end if; end process; end;
9. 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
0. Enskilda kapslar med grindar eller vippor är billigare än PLD-kapslar. För mycket enkla konstruktioner kan det därför vara värt att ta till diskreta komponenter. PLD är internt uppbyggda av AND- och OR-grindar plus vippor och logik för att kunna välja olika funktionalitet (i GAL22V0 s.k.olmc). I stort sett är därför konstruktioner med diskreta komponenter och programmerade PLD likvärdiga när det gäller hastighet och funktionssätt. Så fort det blir fråga om lite större konstruktioner finns det vinster med PLD vad gäller kostnad (komponenter + utvecklings- och konstruktionstid) och flexibilitet (PLD kan relativt enkelt programmeras om; diskreta komponenter måste kopplas om).. 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.