lu.se

Datavetenskap

Lunds Tekniska Högskola

Denna sida på svenska This page in English

Laboration 2 - Digitalteknik

Mål

Laborationen ska ge insikt i hur digitala grindar kan användas för att realisera logiska funktioner i hårdvara i form av så kallade kombinatoriska nät. Vidare illustreras hur feedback kan användas för att konstruera enkla tillståndsmaskiner. Laborationen ska peka på sambandet mellan den Booleska algebran och dess praktiska användning inom digitaltekniken.

Referenser

Under laborationen använder ni ett verktyg för simulering av enkla digitala kretsar som heter LogicSim.

Hemarbete

  1. Gå till kursens webbsida, http://cs.lth.se/edaa05. Gå till undersidan som handlar om föreläsningar.
  2. Repetera innehållet ur föreläsningsbilderna från föreläsning 4.

Starta och testa LogicSim

  1. Logga in på en av Linuxmaskinerna i laborationssalen.
  2. Starta ett terminalfönster och skapa därifrån en arbetskatalog för laborationen. Om du inte redan har en katalog för kursen kan det vara lämpligt att skapa en sådan:

    mkdir edaa05

    Skapa sedan arbetskatalogen:

    cd edaa05
    mkdir lab2
    cd lab2

  3. Hämta och packa upp logiksimulatorn:

    unzip /usr/local/cs/EDAA05/LogicSim.zip

  4. Gå ner i den nyskapade katalogen och starta simulatorn:

    cd LogicSim
    java -jar LogicSim.jar

    Det är normalt att ni får ett felmeddelande vid start.

  5. Prova att skapa en enkel krets enligt nedan. Läs vid behov den korta bruksanvisningen.

    1. Skapa en AND-grind.
    2. Skapa två switchar.
    3. Skapa en LED.
    4. Koppla switcharnas utgångar till AND-grindens ingångar.
    5. Koppla AND-grindens utgång till ingången på LED:en.
    6. Tryck på "simulate" för att starta/stoppa simuleringen.
    7. Testa grindens funktion genom att variera switcharnas lägen och observera resultatet på LED:en.

    Grattis - ni har nu designat och testat er första digitala krets!

Kombinatoriska nät - XOR-grinden

I övning 2 (uppgift Ö6) utgick ni från nedanstående sanningstabell och tog fram Booleska uttryck för variablerna x och y uttryckta som funktioner av a och b.

abxy
0001
0110
1011
1100


Uttrycken ni fick var följande:

x = (¬a ∧ b) ∨ (a ∧ ¬b)
y= ¬b

  1. Töm innehållet i simulatorns ritfönster genom att välja "New" i menyn "File".
  2. Realisera de två Booleska funktionerna ovan med hjälp av AND-, OR- och NOT-grindar. Använd switchar för att ange värden på a och b samt LED:ar för att visa värdena på x och y.
  3. Uttrycket för x implementerar funktionen exklusiv eller. Det finns en särskild grindtyp för denna vanliga funktion - XOR-grinden. Symbolen vi använder för funktionen i den Booleska algebran är "⊕". Koppla upp ytterligare ett kombinatoriskt nät parallellt med det ni skapade under punkt 2 som med hjälp av en XOR-grind implementerar funktionen a ⊕ b. Verifiera att det nya nätet ger samma utsignaler som er tidigare realisation av x med hjälp av AND-, OR- och NOT-grindar.
  4. SPARA er färdiga design till fil för att senare kunna redovisa den för er handledare.

Tillstånd och D-element

Som nämndes i övning 2 (uppgift Ö6) kan funktionerna

x = (¬a ∧ b) ∨ (a ∧ ¬b)
y= ¬b

ses som en beskrivning för hur man adderar 1 till ett binärt tal. Talet som vi ska addera 1 till representeras av a och b (a är den mest signifikanta siffran och b är den minst signifikanta siffran) och resultatet av additionen representeras av x och y.

Vi kan konstruera en krets som räknar upp från noll (00) till 3 (11) för att sedan börja om från början igen genom att använda oss av återkoppling. Därvid kopplar vi tillbaka utsignalerna från det kombinatoriska nätet (x och y) till ingångarna (a och b) via ett par D-element (kallade "D FlipFlop" i LogicSim). D-elementen lagrar då det som vi kallar kretsens tillstånd och det kombinatoriska nätet används för att beräkna kretsens nästa tillstånd.

  1. Ta bort switcharna från kretsen ni skapade i förra avsnittet av laborationen.

  2. Koppla det kombinatoriska nätets utsignaler (x och y) till kretsens ingångar via ett par D-element som ersättning för de försvunna switcharna.

  3. D-elementen behöver en klocksignal. Anslut en switch, eller en färdig klockpulsgenerator (kallad "Clock" i LogicSim) till klockingångarna på D-elementen.

  4. Testa kretsen genom att trycka på switchen eller betrakta pulserna från klockpulsgeneratorn. Påminnelse: Du kan behöva starta/stoppa simuleringen genom att trycka på "simulate". Studera hur utsignalerna från kretsen förändras efter hand som klockpulserna anländer.

  5. SPARA er färdiga design till fil för att senare kunna redovisa den för er handledare.

Realisering av tillståndsmaskin

Bland bilderna som visades på föreläsning 5 förekom det en tillståndsmaskin som genererade en utsignal varannan gång en strömbrytare aktiverades.

Se föreläsningsbilderna!

Tillstånden representerades med de två variablerna s1 och s2. Till det kom insignalen i. Utsignalen o och de nya tillstånden s1' och s2' kunde skrivas som:

o = i ∧ s1
s1' = i ∧ s1 ∨ ¬i ∧ (s1 ⊕ s2)
s2' = i

  1. Radera arbetsytan i LogicSim (välj "New" i menyn "File").

  2. Koppla upp ett kombinatoriskt nät som utgående från tre insignaler (i, s1 och s2) beräknar de tre utsignalerna ovan (o, s1' och s2').

  3. Komplettera tillståndsmaskinen genom att via ett par D-element ("D FlipFlop") koppla utsignalerna s1' och s2' till ingångarna s1 och s2. Använd en klockpulsgenerator ("Clock") för att förse D-elementen med en klocksignal.

  4. Använd en switch för att generera insignalen i. Koppla utsignalen o till en LED.

  5. Starta simuleringen och testa tillståndsmaskinen. Fungerar den som avsett?

  6. SPARA er färdiga design till fil för att senare kunna redovisa den för er handledare.

Modulär design

 

 Uppgift för er som har tid över.

Vid design av digitala system använder man sig av färdiga moduler som i sig kan vara uppbyggd av ett antal grindar. Dessa moduler kan sedan användas som byggstenar i ännu mer komplexa moduler, osv. På detta sätt kan även mycket komplicerade system, som t.ex. en dator, konstrueras utan att systemet blir helt oöverskådligt. I denna deluppgift ska vi prova att skapa en enkel modul som sedan används som byggsten i en större krets.

Som ni förhoppningsvis kommer ihåg från övning 1 (om binära tal) utför man en addition av två binära tal genom att summera en sifferposition i taget och sedan ta med oss en eventuell minnessiffra till nästa sifferposition och låta den ingå i additionen på den platsen.

Vårt mål är att konstruera ett kombinatoriskt nät som utför additionen av två fyrsiffriga binära tal. Vi gör detta genom att först konstruera en enkel krets som kan addera två ensiffriga binära tal och generera resultat och eventuell minnessiffra (carry på engelska). Sedan skapar vi en modul av denna krets. Denna modul använder vi sedan genom att vi seriekopplar fyra stycken instanser av modulen och åstadkommer därigenom vår färdiga krets.

  1. En så kallad heladderare är en krets som kan addera två ensiffriga binära tal och samtidigt ta hänsyn till en eventuell inkommande minnessiffra. Heladderaren kan beskrivas med följande två Booleska uttryck (s = summa, c = minnessiffra - carry). De två talen som ska adderas representeras av a och b. Inkommande minnessiffra kallas cin och utgående minnessiffra kallas cout.

    s = (a ⊕ b) ⊕ cin
    cout = (a ∧ b) ∨ (cin ∧ (a ⊕ b))

    Töm arbetsytan i LogicSim och koppla upp de två funktionerna ovan. Testa din konstruktion genom att ansluta lämpliga switchar och LED:ar. Fungerar additionen som den ska?

  2. När vi kontrollerat att adderaren räknar rätt är det dags att skapa modulen. Välj "Create module" i Menyn "Module". Kalla modulen "Heladderare" och ange "HE" som label. Klicka på "Use".

  3. Nu ska två grå block märkta "INPUT" respektive "OUTPUT" ha dykt upp. Ta bort dina switchar och LED:ar och koppla istället insignalerna a, b och cin från de tre översta utgångarna på INPUT-blocket. Gör motsvarande för utsignalerna s och cout och OUTPUT-blocket.

  4. Spara din nyskapade modul genom att klicka på diskettsymbolen under menyraden. Det ska nu dyka upp en ny modul kallad "Heladderare" bland komponenterna i vänsterkolumnen i LogicSim-fönstret.

  5. Töm innehållet i LogicSim-fönstret ("New" i menyn "File").

  6. Skapa fyra stycken heladderare. Koppla ihop dem i serie genom att ansluta cout till cin på efterföljande heladderare. Koppla in switchar till a- och b-ingångarna på respektive heladderare. Koppla utsignalerna s till LED:ar.

  7. Testa din krets genom att ställa in ett binärt tal på switcharna som är kopplade till a-ingångarna och ett annat tal på switcharna som är kopplade till b-ingångarna. Resultatet ska visas på LED:arna.

  8. SPARA er färdiga design till fil för att senare kunna redovisa den för er handledare.

Redovisning

Redovisa era resultat för er laborationshandledare genom att visa honom/henne era sparade kretsdesigner.