UMEÅ UNIVERSITET Tillämpad fysik och elektronik 2014 John Berge et al. DIGITAL ELEKTRONIK Laboration DE3 VHDL 1 Namn... Personnummer... Epost-adress... Datum för inlämning...
Introduktion Syftet med denna laboration är att ge en första inblick i hur det hårdvarubeskrivande språket VHDL kan användas för att konfigurera programmerbar logik i form av en FPGA (Field Programmable Gate Array). Förberedelser Läs s. 1-10 i Introducing the Spartan 3E FPGA and VHDL. Följ instruktionerna och exempelprojektet på s.12-23 i Introducing the Spartan 3E FPGA and VHDL. Redovisning Laborationen redovisas med en skriftlig rapport. Vissa av uppgifterna ska även redovisas praktiskt i labbet. Se respektive uppgift för mer info. Laboration DE3 2
Uppgift 1 Beskriv följande black-box-diagram med var sin VHDL-entity. (Free Range VHDL kapitel 3.) a) b) Redovisa din kod i den skriftliga rapporten. Uppgift 2 Beskriv följande VHDL-entity med ett black-box-diagram. (Free Range VHDL kapitel 3.) Redovisa i den skriftliga rapporten. Uppgift 3 Skriv en VHDL-modell som implementerar följande funktion med hjälp av concurrent signal assignments. (Free Range VHDL kapitel 4.) Redovisa din kod i den skriftliga rapporten (komplett med entity/architecture). Laboration DE3 3
Uppgift 4 Beskriv nätet nedan med VHDL i data-flow-stil (Free Range VHDL kapitel 5.1). Använd de inbyggda logiska operatorerna, och signaler för att binda samman de olika grindarna. Redovisa din kod i den skriftliga rapporten (komplett med entity/architecture). Uppgift 5 - Kodlås Realisera kodlåset från Laboration DE1 med hjälp av VHDL och Basys2-kortet. Använd kortets åtta switchar (SW7..SW0) till insignalerna och två lysdioder (LD1..LD0) för att indikera utsignalerna. Redovisa ditt kodlås för labhandledare. Beskriv/diskutera kortfattat din lösning i den skriftliga rapporten. Bifoga även VHDL-kod, constraints-fil, samt bit-fil som separata filer (.vhd,.ucf,.bit). Laboration DE3 4
Uppgift 6 Flip-flop Beskriv följande D-flip-flop med hjälp av VHDL i behavioral-stil (Free Range VHDL kapitel 5.2-5.6, 6.8-6.11). Antag att: a) S och R är aktivt låga asynkrona SET och RESET-signaler. b) S och R är aktivt låga synkrona SET och RESET-signaler. Redovisa din kod i den skriftliga rapporten (komplett med entity/architecture för båda deluppgifterna). Laboration DE3 5
Uppgift 7 Räknare med LED Läs igenom kapitel 10 i Introducing the Spartan 3E FPGA and VHDL. Genomför därefter Project Binary up/down counter, s. 38. Inspireras gärna av den givna koden för en åtta bitars räknare, men använd inte det ickestandardiserade biblioteket ieee.std_logic_unsigned. Använd istället ieee.numeric_std (Free Range VHDL kapitel 10.9). På vilket sätt lagras din räknares värde i FPGAn? Redovisa din räknare för labhandledare. Beskriv/diskutera kortfattat din lösning i den skriftliga rapporten. Bifoga även VHDL-kod, constraints-fil, samt bit-fil som separata filer (.vhd,.ucf,.bit). Uppgift 8 ISim Modifiera din lösning från uppgift 7 så att du får en åtta bitars räknare. Lysdioderna kommer nu att blinka så snabbt att ögat inte hinner uppfatta det. För att analysera detta snabba förlopp kan koden simuleras med hjälp av simulatorn ISim. (Introducing the Spartan 3E FPGA and VHDL, kapitel 12.) Skapa en test-bench och simulera din up/down-räknare. Lägg till stimuli så att up/downswitchens funktion syns tydligt i simuleringsresultatet. Redovisa genom att kortfattat beskriva/diskutera din lösning i den skriftliga rapporten. Inkludera även en tydlig, kommenterad skärmdump av din simulering. (Exempel från en upp-räknare visas nedan.) Laboration DE3 6
Uppgift 9 ALU I denna uppgift ska en aritmetisk logisk enhet (ALU) beskrivas med en strukturell VHDLmodell (Free Range VHDL, kapitel 8). Läs igenom ALU_bilaga1. Din ALU-design ska följa Figur 5.28, som även visas nedan. Insignalen 1/Y och utsignalen C behöver ej implementeras. Av figuren framgår att konstruktionen baseras på en aritmetisk enhet (AU), en logisk enhet (LU) samt en multiplexer (MUX). Varje enhet (AU, LU, MUX) ska beskrivas med VHDL som en fristående komponent som ska kunna återanvändas i andra projekt. VHDL-koden ska alltså skrivas med en enskild entity och architecture för varje enhet. Dessa sub-enheter kopplas sedan samman med komponent-instansieringar i beskrivningens huvud-entity. Insignaler: X fyra bitars binärt tvåkomplement-tal Y fyra bitars binärt tvåkomplement-tal SUB/ADD en-bits styrsignal: 1 => subtraktion 0 => addition m två bitars styrsignal för val av logiska operationer (se ALU_bilaga1, Figur 5.23) A/L en-bits styrsignal: 1 => aritmetisk operation 0 => logisk operation Utsignaler: U fyra bitars binärt resultat (tvåkomplement) OF overflow Z zero P paritet S tecken Laboration DE3 7
Simulera din ALU med ISim-simulatorn. Lägg till stimuli i din test-bench så att du kan verifiera funktionen. Koppla ALU-modulen till Basys2-kortets expansions-kontakter och programmera FPGAn. Constraints-fil finns tillgänglig på kurshemsidan. Verifiera funktionen. Redovisa din fungerande ALU för labhandledare. Beskriv/diskutera kortfattat din lösning i den skriftliga rapporten. Inkludera en tydlig, kommenterad skärmdump av din simulering, som visar att din ALU-design fungerar som den ska. Bifoga VHDL-kod (inklusive simuleringskod), constraints-fil, samt bit-fil som separata filer (.vhd,.ucf,.bit). Laboration DE3 8
Spetsuppgift Räknare med 7-seg-display I denna uppgift ska du bygga ut LED-räknaren från uppgift 7 så att den även visar det decimala värdet (av de åtta högsta bitarna i 30-bitars-räknaren) på tre av Basys2-kortets fyra 7-segments-displayer 1. Blockschemat nedan beskriver en konstruktion som kan användas för att åstadkomma detta. Implementera konstruktionen med hjälp av strukturell VHDL (Free Range VHDL, kapitel 8). Varje block/komponent (indikerade med fet stil) ska beskrivas i en egen entity, för att sedan instansieras och bindas samman i en huvud-entity (counter_sseg_top). counter: 30-bitars räknare med ingångar för clk, upp/ner-kontroll, samt reset. Utgång: räknevärde. bin_to_bcd: Binär-till-bcd-omvandlare. Kod finns på kurshemsidan. Ingång: 8-bitars binärt tal. Utgångar: tre stycken 4-bitars bcd-kodade siffror. mux_31: dec_24: Multiplexer, 3-till-1. Välj x i blockschemat ovan så att lämplig multiplex-frekvens erhålles. Dekoder 2-4, för att sätta anod-nivåerna på de fyra 7-segments-displayerna. bcd_to_sseg: Bcd-till-7-segments-omvandlare. Observera att det inte är nödvändigt att förstå exakt hur bin_to_bcd fungerar internt. Detta demonstrerar en av de stora fördelarna med strukturell VHDL. Man kan återanvända komponenter som man tidigare har designat själv, eller fått/köpt från en annan källa. 1 För en kort introduktion till 7-segments-displayer, se Basys2 Reference Manual, s. 4-5. Se även Wikipedia: http://en.wikipedia.org/wiki/seven-segment_display Laboration DE3 9
Koppla de externa signalerna enligt nedan (Basys2): clk: switch: reset: an(3..0): sseg(6..0): LEDs(7..0): 50 MHz klocksignal, B8 Upp/ner-switch, P11 Reset, A7 Anoder, 7-segments-displayer, K14, M13, J12, F12 Segment, 7-segments-displayer, M12, L13, Lysdioder, G1, P4, Redovisa i labbet för handledare. Beskriv/diskutera kortfattat din lösning i den skriftliga rapporten. Bifoga komplett VHDL-kod, constraints-fil, samt bit-fil som separata filer (.vhd,.ucf,.bit). Laboration DE3 10