Konstruktion av digitala system - VHDL

Relevanta dokument
Programmerbara kretsar och VHDL. Föreläsning 10 Digitalteknik, TSEA22 Mattias Krysander Institutionen för systemteknik

VHDL 1. Programmerbara kretsar

Programmerbara kretsar och VHDL 1. Föreläsning 9 Digitalteknik, TSEA22 Oscar Gustafsson, Mattias Krysander Institutionen för systemteknik

Programmerbara kretsar och VHDL. Föreläsning 9 Digitalteknik Mattias Krysander Institutionen för systemteknik

Programmerbara kretsar och VHDL. Föreläsning 9 Digitalteknik Mattias Krysander Institutionen för systemteknik

Konstruktionsmetodik för sekvenskretsar. Föreläsning 7 Digitalteknik, TSEA22 Mattias Krysander Institutionen för systemteknik

VHDL2. Sekvensnätsexemplet

Konstruktionsmetodik för sekvenskretsar

VHDL2. Sekvensnätsexemplet

Programmerbara kretsar och VHDL 2. Föreläsning 10 Digitalteknik, TSEA22 Oscar Gustafsson Institutionen för systemteknik

Design av mindre digitala system. Föreläsning Digitalteknik, TSEA52 Mattias Krysander Institutionen för systemteknik

VHDL och laborationer i digitalteknik

Digitalteknik, fortsättningskurs Föreläsning VHDL Very High Speed Integrated Circuit Hardware Description Language

Angående buffer. clk clear >=1 =9?

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

std_logic & std_logic_vector

DESIGN AV SEKVENTIELL LOGIK

Chalmers ekniska Högskola Institutionen för Data- och Informationsteknik. EDA 321 Digitalteknik syntes Laboration 2 - VHDL

DIGITALTEKNIK. Laboration D172

D2 och E3. EDA321 Digitalteknik-syntes. Fredag den 13 januari 2012, fm i M-salarna

FÖRELÄSNING 8 INTRODUKTION TILL DESIGN AV DIGITALA ELEKTRONIKSYSTEM

Simulering med ModelSim En kort introduktion

LABORATIONSINSTRUKTION LABORATION

Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD

Laboration D159. Sekvensnät beskrivna med VHDL och realiserade med PLD. Namn: Datum: Epostadr: Kurs:

Digital elektronik CL0090

LABORATION TSEA22 DIGITALTEKNIK D TSEA51 DIGITALTEKNIK Y. Konstruktion av sekvenskretsar med CPLD. Version: 2.2

L15 Introduktion modern digital design

Sekvensnät. William Sandqvist

Programmerbar logik och VHDL. Föreläsning 1

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Tentamen i IE1204/5 Digital Design onsdagen den 5/

Hjälpmedel: Appendix A. VHDL-syntax. (bifogas detta prov) Appendix B.2. IEEE-package (bifogas detta prov)

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

PARALLELL OCH SEKVENTIELL DATABEHANDLING. Innehåll

Digitala projekt Elektro- och informationsteknik

KALKYLATOR LABORATION4. Laborationens syfte

Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV

KOMBINATORISKA FUNKTIONER...1

IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare

Datorkonstruktion. Datorkonstruktion 2018, 8hp

VHDL3. Angående buffer

Digital elektronik CL0090

LABORATION TSEA22 DIGITALTEKNIK D

Lösningförslag till Exempel på tentamensfrågor Digitalteknik I.

LABORATION DATORKONSTRUKTION TSEA83 UART. Namn och personnummer. Version: (OS)

-c wc. Pre- Next state Out- Vi ser att tillstånden är redan sorterade i grupper med olika utsignaler,

Försättsblad till skriftlig tentamen vid Linköpings universitet

DIGITAL ELEKTRONIK. Laboration DE3 VHDL 1. Namn... Personnummer... Epost-adress... Datum för inlämning...

Konstruktionsmetodik för sekvenskretsar. Föreläsning 7 Digitalteknik Mattias Krysander Institutionen för systemteknik

Digital Konstruktion TSEA43. Ingemar Ragnemalm 2001, Olle Seger 2003-,

Digitalteknik syntes Arne Linde 2012

Chalmers Tekniska Högskola Institutionen för Data- och Informationsteknik. EDA 321 Digitalteknik syntes Laboration 1 - VHDL

Omtentamen IE Digital Design Måndag 14/

Digital- och datorteknik, , Per Larsson-Edefors Sida 1

Simulering med ModelSim En kort introduktion

IE1205 Digital Design: F11: Programmerbar Logik, VHDL för Sekvensnät

LABORATIONSINSTRUKTION LABORATION. Räknare och skiftregister med sekvensiell VHDL. LAB NR Ver KURS. Digitalteknik INNEHÅLL. 1.

TSEA22 Digitalteknik 2019!

VHDL testbänk. Mall-programmets funktion. Låset öppnas när tangenten 1 trycks ned och sedan släpps. William Sandqvist

IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare

IE1204/5 Digital Design typtenta

Tentamen i IE1204/5 Digital Design måndagen den 15/

Tentamen i IE1204/5 Digital Design Torsdag 29/

Sekvensnät i VHDL del 2

Programmerbar logik och VHDL. Föreläsning 4

Tentamen IE Digital Design Måndag 23/

IE1204/5 Digital Design typtenta

Tentamen med lösningar för IE1204/5 Digital Design Torsdag 15/

Digital Design IE1204

LABORATIONSINSTRUKTION

LAB VHDL-programmering

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

LABORATION TSEA22 DIGITALTEKNIK D

IE1204/IE1205 Digital Design

VHDL Basics. Component model Code model Entity Architecture Identifiers and objects Operations for relations. Bengt Oelmann -- copyright

Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I

Tentamen i Digitalteknik 5p

Strukturell VHDL. Grundläggande kunskaper om. och TESTBÄDD. UMEÅ UNIVERSITET Tillämpad fysik och elektronik Lars Wållberg ver 1.

Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1

F5 Introduktion till digitalteknik

Kombinationskretsar. Föreläsning 4 Digitalteknik Mattias Krysander Institutionen för systemteknik

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Tentamen med lösningar IE Digital Design Måndag 23/

Tenta i Digitalteknik

IE1205 Digital Design: F9: Synkrona tillståndsautomater

Digital Design IE1204

Tentamen i IE Digital Design Fredag 21/

Översikt, kursinnehåll

F5 Introduktion till digitalteknik

Omtentamen med lösningar i IE1204/5 Digital Design Fredag 10/

TSEA22 Digitalteknik 2019!

Tenta i Digitalteknik

Tentamen med lösningar i IE1204/5 Digital Design Torsdag 29/

Digitala elektroniksystem

Omtentamen med lösningar IE Digital Design Måndag 14/

Tentamen i Digitalteknik, EITF65

Laboration VHDL introduktion

Digitalteknik syntes. Digitalteknik syntes Arne Linde 2012

Digital Design IE1204

Transkript:

Konstruktion av digitala system - VHDL Digitalteknik - Föreläsning 10 Mattias Krysander Institutionen för systemteknik

Dagens föreläsning Programmerbara kretsar Kombinationskretsar i VHDL with-select-when, when-else Sekvenskretsar i VHDL process, case-when, if-then-else Moder, portsatser, datatyper, mm Räknare i VHDL Exempel Blockschema -> VHDL, kodstandard, simulering, programmering, verifiering Lab 4 2

Programmerbara kretsar PLD = programmable logic device CPLD = complex PLD, i princip flera PLD-er på ett chip ex: 108 vippor + 540 produkttermer FPGA = field programmable gate array 5 000 000 vippor 2 000 000 Look-up-tables (LUT) 500 Mb RAM Digital Signal Processing (DSP) Processor 3

Notation x y & xy betyder x y & xy 4

x 0 x 1 x 2 clk Princip för en PLD 3 produkttermer ELLER-plan 1 1 1 q 1 q 0 x & 0 x 1 & q 0 x 0 x 2 & q 0 OCH-plan 1 1 >=1 >=1 q 0 + = x 0 x 1 +q 0 x 0 x 2 q 0 + u u = x 0 x 1 +q 0 5

En allmän CPLD En samling PLDer på ett chip med programmerbara hopkopplingar 6

7 CPLD Xilinx 9572 - blockschema

VHDL VHDL = VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuit Ett programspråk för att: Syntetisera (Xilinx) Simulera (ModelSim) Hårdvara Kurvor 8

Varför VHDL? Hantera komplexitet VHDL-koden kan simuleras Beskrivning på flera olika abstraktionsnivåer Ökad produktivitet Snabbare än schemaritning Återanvändbar kod Modernt programmeringsspråk Rikt, kraftfullt Parallellt, starkt typat, overloading Ej objektorienterat 1) a+b 2) Kedja av heladderare 3) Bygg adderare med NANDgrindar 9

VHDL nackdelar? Svårt att lära sig? Delmängd för syntes 1-2 dagar! Avancerade simuleringar 1-2 månader Nytt sätt att tänka Lätt att hamna i mjukvarutänkande! FPGA-n, CPLD-n är inte en processor för VHDL VHDL är inte sekvensiellt utan parallellt Tilldelning, variabler betyder inte samma sak som i andra prog.språk Gör så här: Tänk hårdvara och gör ett blockschema Översätt till VHDL 10

Hur ser ett VHDL-program ut? entity namn1 is -- beskrivning av in- och utgångar end entity namn1; Gränssnitt mot omvärlden architecture namn2 of namn1 is -- beskrivning av interna signaler begin Innehåll -- beskrivning av funktion end architecture namn2; VHDL är inte case sensitive, små eller stora bokstäver spelar ingen roll, ej heller mellanslag. 11

VHDL för kombinatoriska kretsar entity knet is port(a,b: in std_logic; c: out std_logic); end entity knet; a b & y x c architecture firsttry of knet is signal x,y : std_logic; begin c <= x nor y; x <= a and b; y <= a or b; end architecture firsttry; Parallellt exekverande satser. Om a ändras så körs x <= a and b och y <= a or b, vilket gör att c <= x nor y körs. Ordningen spelar ingen roll. 12 12

Vad betyder ett VHDL-program? Syntetisering (Xilinx) x <= a and b; betyder att en OCH-grind kopplas in mellan trådarna a, b och x Endast en tilldelning på x tillåten. Simulering (ModelSim) x <= a and b; är en parallellt exekverande sats körs om a eller b ändras Än så länge är ordningen mellan satserna oviktig Programmera aldrig i VHDL! Tänk hårdvara => översätt till VHDL 13

VHDL för kombinatoriska kretsar Kombinationskretsar implementeras med vanlig signaltilldelning c <= a and b; with-select-when är en mux (använt för minne i lab 2). when-else är en generaliserad mux. 14

En multiplexer entity mux is port( d: in std_logic_vector(0 to 3); s: in std_logic_vector (1 downto 0); y: out std_logic); end entity mux; d(0) d(1) d(2) d(3) y s(1) s(0) 15

Multiplexern, forts VHDL har en sats som precis motsvarar en mux: architecture behavior1 of mux is begin with s select y <= d(0) when 00, d(1) when 01, d(2) when 10, d(3) when others; end architecture behavior1; Lägg märke till: det finns enn <= i satsen. enn rad är sann d(0) d(1) d(2) d(3) s(1) s(0) y 16

with-select-when Är en parallell sats, concurrent statement Endast utanför process with (styrsignal) select (utsignal) <= (uttryck 1) when (signalvärde 1), (uttryck 2) when (signalvärde 2),... (uttryck n-1) when (signalvärde n-1), (uttryck n) when others; OBS: samtliga värden på styrsignal måste täckas! 17

Multiplexern, forts architecture behavior2 of mux is begin y <= d(0) when s = 00 else d(1) when s = 01 else d(2) when s = 10 else d(3); end architecture behavior2; d(0) d(1) d(2) d(3) y s(1) s(0) 18

when-else Är en parallell sats, concurrent statement Endast utanför process signal <= uttryck 1 when villkor 1 else Lägg märke till: Det finns enn <= i satsen. uttryck 2 when villkor 2 else... uttryck n-1 when villkor n-1 else uttryck n; Noll eller flera villkor är sanna s = u 1 v 1 + u 2 v 1 v 2 + + u n-1 v 1 v 2 v n-2 v n-1 + u n v 1 v 2 v n-2 v n-1 Både with-select-when och when-else kan uttrycka vilken Boolesk funktion som helst! 19

Exempel u = 1 omm x = (x(2), x(1), x(0)) innehåller 2 eller 3 ettor. signal x: std_logic_vector(2 downto 0); signal u: std_logic; -- man kan skriva så här with x select u <= 1 when "011", -- 3 1 when "101", -- 5 1 when "110", -- 6 1 when "111", -- 7 0 when others; x[0] x[1] x[2] >= 2 u -- eller så här u <= 1 when x=3 else 1 when x>4 else 0 ; 20 -- eller så här

Vad har vi så långt? entity beskriver gränssnittet architecture beskriver innehållet Mellan begin och end har vi parallella satser. vanlig signaltilldelning c <= a and b; with-select-when är en mux. when-else är en generaliserad mux. Ovanstående används för kombinatorik utanför processsatsen 21

VHDL för sekvenskretsar process-satsen case-when if-then-else Endast inuti process-sats! 22

process Process-satsen exekveras sekventiellt. Här exempel på D-vippa: entity de is port(d,clk: in STD_LOGIC; q: out STD_LOGIC); end de; architecture d_vippa of de is begin process(clk) begin if rising_edge(clk) then q <= d; end if; end process; end d_vippa; Processen exekveras när clk ändras sensitivity list q uppdateras på positiv clk-flank Det gamla värdet på q ligger kvar om ett nytt ej specas. 23

Vad blir detta? process(clk) begin if rising_edge(clk) then y <= x; z <= y; end if; end process; Låt z = y = 0. Sätt x = 1 och klocka en gång. Då blir väl z = y = 1? 24

Så här blir det! Tavlan! Inuti klockad process x y z y <= x; z <= y; y + = x; z + = y; y = y+; z = z+; 25

case-when Endast inuti process Måste beskriva vad som händer för alla värden på styrsignal Motsvarar with-select-when case (styrsignal) is when (värde 1) => (sats 1); when (värde 2) => (sats 2);... when (värde n-1) => (sats n-1); when others => (sats n); end case; 26

if-then-else if (uttryck 1) then (sats 1) elsif (uttryck 2) then (sats 2) elsif (uttryck n-1) then (sats n-1) else (sats n) end if; Endast inuti process Motsvarar when-else Observera stavning på elsif 27

Exempel Bygg en sekvenskrets som ger utsignalen 1 i samma klockintervall som var tredje 1:a. x/u 0/0 0/0 0/0 1/0 1/0 00 01 11 start 1/1 VHDL-beskrivning som liknar grafen. 28

Sekvenskretsar Utsignal Gör kombinatorik av detta x/u 0/0 0/0 0/0 1/0 1/0 00 01 11 start 1/1 Tillståndsuppdatering Gör en process(clk) av detta. 29

Sekvenskrets entity skrets is port(x, clk: in std_logic; u: out std_logic); end skrets; architecture graf of skrets is signal q: std_logic_vector(1 downto 0); begin -- q+ = f(q,x): tillståndsuppdatering -- u = g(q,x) : utsignal x/u 0/0 0/0 0/0 end graf; 1/0 1/0 00 01 11 start 1/1 30

Tillståndsuppdatering -- q+ = f(q,x): tillståndsuppdatering process(clk) begin if rising_edge(clk)then case q is when 00 => if x= 1 then q <= 01 ; else q <= 00 ; end if; when 01 => if x= 1 then q <= 11 ; else q <= 01 ; end if; when 11 => if x= 1 then q <= 00 ; else q <= 00 ; end if; when others => q <= 00 ; end case; end if; end process; x/u 0/0 0/0 0/0 00 1/0 01 1/0 11 start 1/1 31

Utsignal K-krets utanför processen u <= 1 when q= 11 and x= 1 else 0 ; -- alternativt u <= x and q(1) and q(0); x/u 0/0 0/0 0/0 1/0 1/0 00 01 11 start 1/1 32

33 entity skrets is port(x, clk: in std_logic; u: out std_logic); end skrets; architecture graf of skrets is signal q: std_logic_vector(1 downto 0); begin -- q+ = f(q,x): tillståndsuppdatering process(clk) begin if rising_edge(clk)then case q is when 00 => if x= 1 then q <= 01 ; else q <= 00 ; end if; when 01 => if x= 1 then q <= 11 ; else q <= 01 ; end if; when 11 => if x= 1 then q <= 00 ; else q <= 11 ; end if; when others => q <= 00 ; end case; end if; end process; -- u = g(q,x) : utsignal u <= x and q(1) and q(0); end graf; Komplett kod

VHDL beskriver hårdvara! 1. En VHDL-modul består av två delar a) entity, som beskriver gränssnittet b) architecture, som beskriver innehållet 2. För att göra kombinatorik används a) Booleska satser: z <= x and y; b) with-select-when-satser c) when-else-satser 3. För att göra sekvensnät används (en eller flera) process(clk)-satser a) enn if rising_edge(clk) end if; b) Booleska satser: z <= x and y; c) case-when-satser d) if-then-else-satser Samtidiga satser VL får vippa på sig Alla klockas samtidigt 34

Moder - portsatsen OBS, om en utsignal också används inuti nätet, så ska den deklareras som buffer. in & & out buffer in & inout in & out 35

Datatyper VHDL är ett mycket starkt typat språk! Inbyggda typer är bl a: Typ Möjliga värden operatorer integer -2147483647 2147483647 ABS ** * / MOD REM + - (tecken) + - = /= < <= > >= bit boolean 0, 1 false, true NOT = /= < <= > >= AND NAND OR NOR XOR XNOR 36 bit_vector Obegränsad vektor av bit NOT & SLL SRL SLA SRA ROL ROR = /= < <= > >= AND NAND OR NOR XOR XNOR

std_logic signal reset: std_logic; Reset kan nu anta följande värden: simulering ej i denna kurs t ex för att speca sanningstabell U : Uninitialized X : Forcing Unknown 0 : Forcing 0 1 : Forcing 1 Z : High impedance W : Weak Unknown L : Weak 0 H : Weak 1 - : Don t care tristate 37

STD_LOGIC_UNSIGNED use IEEE.STD_LOGIC_UNSIGNED.ALL - lägger till paket signal q: std_logic_vector(3 downto 0); -- 4 bit ctr... q <= q + 1; if q = 10... q <= 0011 ; q(0) <= 1 ; Dvs vi kan hantera q både som en boolesk vektor och som ett tal på intervallet [0,15]; VHDL är ett språk som har operator overloading. Notera hur värdet av decimalt tal, std_logic_vector samt std_logic anges 38

Vi rekommenderar Använd endast std_logic och std_logic_vector Vill ni räkna inkludera STD_LOGIC_UNSIGNED -biblioteket Skippa integer. Går ej att indexera på bit-nivå. Skippa bit. Tristate och don t care saknas. 39

4-bits dekadräknare med synkron clear clear library IEEE; use IEEE.STD_LOGIC_1164.ALL; use STD_LOGIC_UNSIGNED.ALL; clk entity counter is port(clk, clear: in std_logic; q: buffer std_logic_vector(3 downto 0)); end counter; architecture simple of counter is begin process(clk) begin if rising_edge(clk) then if clear= 1 then q <= 0000 ; elsif q=9 then q <= 0000 ; else q <= q + 1; end if; end if; end process; end simple; 40 +1 clk 0 0 1 4 q q 4 >=1 clear =9?

Några praktiska småsaker Konstanter signal bus: std_logic_vector(3 downto 0); constant max: std_logic_vector(3 downto 0) := 1111 ;... if bus = max then... Alias signal address: std_logic_vector (31 downto 0); alias top_ad: std_logic_vector (3 downto 0) is address(31 downto 28); Concatenation signal bus: std_logic_vector (1 downto 0); signal a,b: std_logic; bus <= a & b; 41

4-bitsadderare a b 4 4 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use STD_LOGIC_UNSIGNED.ALL; Adderare 5 s = a + b entity adder is port(a,b: in STD_LOGIC_VECTOR(3 downto 0); s: out STD_LOGIC_VECTOR(4 downto 0)); end adder; architecture simple of adder is begin -- zero extension s <= ( 0 & a) + ( 0 & b); end simple; 42

Asynkron/synkron reset process(clk,reset) begin if reset= 1 then q <= 0 ; elsif rising_edge(clk) then q <= q and x; end if; end process; process(clk) begin if rising_edge(clk) then if reset= 1 then q <= 0 ; else q <= q and x; end if; end if; end process; 43

Blockschema => VHDL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity pulsdetektor is port( clk, x : in std_logic; reset : in std_logic; L : in std_logic_vector(3 downto 0); u : out std_logic); end pulsdetektor; architecture Behavioral of pulsdetektor is signal q : std_logic_vector(3 downto 0); signal CLR, CE, k: std_logic; begin -- hela vår konstruktion & u end Behavioral; x 1 reset clk CLR CE reset clk räknare q 4 k komparator = L 4 L 44

-- insignaler till räknare CE <= x; CLR <= not x; Räknaren -- räknare ctr16: process(clk,reset) begin if reset = '1' then -- asynkron clear q <= "0000"; elsif rising_edge(clk) then if CLR = '1' then -- synkron clear q <= "0000"; elsif CE = '1' then -- count enable if q = 15 then -- övergång från 15->0 q <= "0000"; else q <= q + 1; end if; end if; end if; end process ctr16; x 1 reset clk CLR CE reset clk räknare q 4 k komparator = L & 4 u 45

-- komparator k <= '1' when L = q else '0'; -- utsignal u <= CLR and k; Komparator och utsignal & u x 1 CLR k reset clk CE reset clk räknare q 4 komparator = L 4 46

Blockschema ->VHDL library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity pulsdetektor is... end pulsdetektor; Varje block har motsvarande kod. Överensstämmande signalnamn i blockschema och kod. architecture Behavioral of pulsdetektor is... begin -- insignaler till räknare CE <= x; CLR <= not x; -- räknare ctr16: process(clk,reset)... end process ctr16; -- komparator k <= '1' when L = q else '0'; -- utsignal u <= CLR and k; end Behavioral; x 1 reset clk CLR CE reset clk räknare q 4 k komparator = L & 4 u L 47

Simulering i ModelSim Utdrag ur fil för att definiera insignaler och köra en simulering. # sim.do... # clk Periodtid 100 ns force -freeze sim:/pulsdetektor/clk 1 0, 0 {50 ns} -r 100 # reset force -freeze sim:/pulsdetektor/reset 0 0 force -freeze sim:/pulsdetektor/reset 1 50 force -freeze sim:/pulsdetektor/reset 0 90 # x force -freeze sim:/pulsdetektor/x 0 0 force -freeze sim:/pulsdetektor/x 1 105 force -freeze sim:/pulsdetektor/x 0 505 force -freeze sim:/pulsdetektor/x 1 705 force -freeze sim:/pulsdetektor/x 0 1005 # L force -freeze sim:/pulsdetektor/l 0011 0 run 1300 Starta simulering i transcriptfönstret VSIM > do sim.do 48

49 ModelSim

Initiering av värden Initiera värden för simuleringen i vhd-filen: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity pulsdetektor is port( clk, x : in std_logic; CLRa : in std_logic; L : in std_logic_vector(3 downto 0) := 0011 ; u : out std_logic); end pulsdetektor; architecture Behavioral of pulsdetektor is signal q : std_logic_vector(3 downto 0) := 0000 ; signal CLR, CE, k: std_logic; begin -- hela vår konstruktion end Behavioral; 50

Slutsatser Vi ritade blockschema först! Vi har samma struktur på koden som på blockschemat! Alltså: små processer som precis motsvarar ett block. Vi har bra koll på mängden hårdvara Använda resurser i CPLD XC9536: Använda produkttermer L3-L0, x, u, clk, reset Beräkning av 4 tillstånd + 1 utsignal 4 D-vippor i 4-bitsräknaren L3-L0, q3-q0, x 51

Får det plats? functional block inputs! produkttermer! 5 AND/vippa pinnar! Vad kan ta slut? Pinnar Vippor Produkttermer vippor! makrocell! 52

Lab 4 Bland annat konstruera ett digitalt tidtagarur. Olika klockor Systemklocka 8 MHz Klocka som styr uppdateringsfrekvens på display (variabel frekvens) Klocka som styr tidräkning 100 Hz Synkronisera klockpulser till systemklockan: synkronisering + enpulsning 53

Inför Lab 4 Obligatorisk lektion i ModelSim. Det finns ett antal valfria uppgifter. Om ni vill göra VGA-uppgift (mer utmanande) så kontakta: olov.andersson@liu.se Förberedelseuppgifter: Blockschema för uppgifterna ModelSim-simulering av två kaskadkopplade BCD-räknare för minutvisning. Ska redovisas vid laborationens start. ModelSim finns installerat på datorerna i Freja (och i Grinden). 54

Examination Vid examination ska blockschema, VHDL-kod samt korrekt fungerande krets uppvisas. Blockschema Block ska bestå av väldefinierad hårdvara: räknare, register, enpulsare, synkroniseringsvippor, sekvenskretsar (med tillståndsdiagram) MUX, DMUX, adderare, komparatorer, kombinatoriska kretsar (minne, Booleska funktioner) VHDL-kod Varje block ska motsvara ett kodavsnitt, t ex en process-sats/ sekvenskrets Överensstämmande signalnamn i blockschema och kod. 55

www.liu.se