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

Relevanta dokument
Programmerbara kretsar och VHDL. Föreläsning 10 Digitalteknik, TSEA22 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

Konstruktion av digitala system - VHDL

VHDL 1. Programmerbara kretsar

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

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

Konstruktionsmetodik för sekvenskretsar

VHDL2. Sekvensnätsexemplet

VHDL2. Sekvensnätsexemplet

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

std_logic & std_logic_vector

VHDL och laborationer i digitalteknik

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

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

Simulering med ModelSim En kort introduktion

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

L15 Introduktion modern digital design

DESIGN AV SEKVENTIELL LOGIK

DIGITALTEKNIK. Laboration D172

Digitala projekt Elektro- och informationsteknik

Programmerbar logik och VHDL. Föreläsning 1

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

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

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

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

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

Digital elektronik CL0090

KOMBINATORISKA FUNKTIONER...1

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

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

PARALLELL OCH SEKVENTIELL DATABEHANDLING. Innehåll

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)

KALKYLATOR LABORATION4. Laborationens syfte

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

Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV

Sekvensnät. William Sandqvist

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

LABORATIONSINSTRUKTION LABORATION

Simulering med ModelSim En kort introduktion

Datorkonstruktion. Datorkonstruktion 2018, 8hp

VHDL3. Angående buffer

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

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

Digital elektronik CL0090

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

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

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

Digitalteknik syntes Arne Linde 2012

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

LABORATION TSEA22 DIGITALTEKNIK D

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

TSEA22 Digitalteknik 2019!

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

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

Tenta i Digitalteknik

Programmerbar logik och VHDL. Föreläsning 4

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Omtentamen IE Digital Design Måndag 14/

Tentamen i IE1204/5 Digital Design Torsdag 29/

Översikt, kursinnehåll

Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1

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

IE1204/5 Digital Design typtenta

LAB VHDL-programmering

IE1204/5 Digital Design typtenta

IE1204/IE1205 Digital Design

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

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

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

Sekvensnät i VHDL del 2

Tenta i Digitalteknik

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

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

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

LABORATIONSINSTRUKTION

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

Digital Design IE1204

F5 Introduktion till digitalteknik

Digitala elektroniksystem

Tenta i Digitalteknik

Tentamen i Digitalteknik 5p

Laboration VHDL introduktion

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

Laboration D181. ELEKTRONIK Digitalteknik. Kombinatoriska kretsar, HCMOS v 2.1

Tentamen IE Digital Design Måndag 23/

Tentamen i Digitalteknik, EITF65

TSEA22 Digitalteknik 2019!

IE1205 Digital Design: F9: Synkrona tillståndsautomater

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

INTRODUKTION TILL VIVADO

Digital Design IE1204

Digitalteknik syntes. Digitalteknik syntes Arne Linde 2012

LABORATION TSEA22 DIGITALTEKNIK D

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

Generering av analoga signaler från XSV300

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

Tenta i Digitalteknik

Transkript:

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

3 Dagens föreläsning Programmerbara kretsar Kombinationskretsar i VHDL with-select-when, when-else Sekvenskretsar i VHDL process, if-then-else In-/ut-signaler, datatyper, mm Räknare i VHDL Exempel Blockschema -> VHDL, kodstandard, simulering, programmering, verifiering Lab 3

4 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

5 21/09/16! 11! CPLD -CPLD!E!Complex!Programmable!Logic!Device! konstruktion Grundblocket i en CPLD är oftast en uppsättning av ORgrindar vars ingångar är kopplade till ANDgrindar Grundblocket i en CPLD består oftast av ett AND-OR-nät AND-grindarnas ingångar är programmerbara Ingångarna till ANDgrindarna är programmerbara Kallas Programmable Logic Array (PLA) Kallas Programmable Logic Array (PLA) Macrocell

6 CPLD - konstruktion CPLD!E!Complex!Programmable!Logic!Device! Alltså kan en CPLD Grundblocket i en skapacpld funktioner är oftast en på summa-produktform uppsättning av ORgrindar vars ingångar är kopplade till AND- Samtgrindar invertera dem om det behövs Ingångarna till ANDgrindarna är Och sätta programmerbara en D- vippa på slutet vid Logic Array (PLA) behov Kallas Programmable Macrocell 21/09/16! 11!

CPLD Xilinx 9572 - blockschema 10 4 18 = 72

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

12 VHDL VHDL = VHSIC HDL VHSIC = Very High Speed Integrated Circuits HDL = Hardware Description Language Hardware Description Language = hårdvarubeskrivande språk Hårdvarubeskrivande språk = språk som beskriver hårdvara Beskriver hårdvara Hårdvara (inte mjukvara)

13 VHDL VHDL är ett av två dominerande HDL Det andra är Verilog Verilog används mer i USA VHDL används mer i Europa VHDL uvecklades av USAs försvarsdepartement Lånar mycket syntax från ADA

14 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

15 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 parallellt, inte sekvensiellt Tilldelning, variabler betyder inte samma sak som i andra programmeringsspråk (för det är inte ett prog.språk) Gör så här: Tänk hårdvara och gör ett blockschema Beskriv hårdvaran med VHDL

16 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 skiftlägeskänsligt (case sensitive), små eller stora bokstäver spelar ingen roll, ej heller mellanslag (förutom i namn och nyckelord då..)

17 VHDL för kombinatoriska kretsar a b & 1 y x 1 c entity knet is port(a, b: in std_logic; c: out std_logic); end entity knet; architecture firsttry of knet is signal x, y : std_logic; begin c <= not (x or 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.

Titel/föreläsare 2019-02-25 18 Datatyper VHDL innehåller nästan inga datatyper Det är mycket hårt typat, inga underförstådda typkonverteringar här inte I princip är nästan alla typer som används definierade ovanpå VHDL, men det har så klart skapats standarder som används Följdaktligen kan ni i princip glömma det som står här, förutom komma ihåg att det är hårt typat när ni råkar ut för det

Titel/föreläsare 2019-02-25 19 Datatyper Samt att det innebär att om ni söker efter information på nätet så kan ni få information om gamla datatyper och liknande Så viktigt att veta vilka som är relevanta

Titel/föreläsare 2019-02-25 20 Datatyper std_logic är datatypen som används för att representera bitar Kan anta följande värden: 01uxz-wlh U : Uninitialized I simulering innan annat värde antagits X : Forcing Unknown I simulering när flera utgångar försöker driva signalen

Titel/föreläsare 2019-02-25 21 Datatyper 0 : Forcing 0 1 : Forcing 1 Z : High impedance Tri-state - : Don t care Precis lika smidigt som när ni gör Karnuaghdiagram W : Weak Unknown, L : Weak 0, H : Weak 1 Inget vi behöver bry oss om i denna kursen

Titel/föreläsare 2019-02-25 22 Datatyper std_logic_vector används för vektorer/arrayer av std_logic Storleken anges efter, t ex std_logic_vector(0 to 2) std_logic_vector(5 downto 2) För std_logic och std_logic_vector måste paketet std_logic_1164 importeras från biblioteket ieee library ieee; use ieee.standard_logic_1164.all;

23 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 som körs om a eller b ändras Än så länge är ordningen mellan satserna oviktig Programmera aldrig i VHDL! Tänk hårdvara => beskriv hårdvaran med VHDL

Titel/föreläsare 2019-02-25 24 Två grundläggande typer av satser Sekventiella satser: process Parallella satser: allt annat Alla sekventiella satser är parallella gentemot varandra och alla parallella satser

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

26 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)

27 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

28 with-select-when Är en parallell sats Kan ej användas i en sekventiell sats (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!

29 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) s(1) s(0) y

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

31 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; -- kan skrivas 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 2 u -- eller så här u <= 1 when x(0) and x(1) or x(0) and x(2) or x(1) and x(2) else 0 ;

32 Vad har vi så långt? entity beskriver gränssnittet architecture beskriver innehållet Mellan begin och end har vi parallella satser. Tilldelning med Booleska uttryck c <= a and b; with-select-when är en mux when-else är en generaliserad mux Allt sker parallellt

33 VHDL för sekvenskretsar process-satsen if-then-else Endast inuti process-sats! (Fler nästa föreläsning)

34 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; Det gamla värdet på q ligger kvar om ett nytt ej specas. Processen exekveras när signaler i känslighetslistan ändras, i detta fallet clk q uppdateras på positiv clk-flank

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

40 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.

41 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åndsberäkning Gör kombinatorik av detta. Tillståndsuppdatering Gör en process(clk) av detta.

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

43 Tillståndsuppdatering sekventiell sats -- q = q+: tillståndsuppdatering process(clk) begin if rising_edge(clk)then q <= qplus end if; end process; x/u 0/0 0/0 0/0 1/0 1/0 00 01 11 start 1/1

44 Tillståndsberäkning parallell sats -- q+ = f(q,x): tillståndsberäkning qplus <= 00 when q = 00 and x= 0 else 01 when q = 00 and x= 1 else 01 when q = 01 and x= 0 else 11 when q = 01 and x= 1 else 11 when q = 11 and x= 0 else 00 ; Alternativt -- q+ = f(q,x): tillståndsberäkning qx <= q & x; -- Behöver definieras with qx select qplus <= 00 when 000, 01 when 001, 01 when 010, 11 when 011, 11 when 110, 00 when others; x/u start 0/0 0/0 0/0 1/0 1/0 00 01 11 1/1

45 Utsignal parallell sats Parallell sats u <= 1 when q= 11 and x= 1 else 0 ; -- alternativt u <= 1 when q= 11 and x else 0 ; x/u 0/0 0/0 0/0 u <= 1 when q(1) = 1 and q(0) = 1 and x else 0 ; 1/0 1/0 00 01 11 u <= 1 when q(1) and q(0) and x else 0 ; u <= x and q(1) and q(0); start 1/1

entity skrets is port(x, clk: in std_logic; u: out std_logic); end skrets; architecture graf of skrets is signal q, qplus: std_logic_vector(1 downto 0); signal qx : std_logic_vector(2 downto 0); begin -- q+ = q: tillståndsuppdatering process(clk) begin if rising_edge(clk) then q <= qplus; end if; end process; -- q+ = f(q,x): tillståndsberäkning qx <= q & x; -- konkatenering with qx select qplus <= 00 when 000, 01 when 001, 01 when 010, 11 when 011, 11 when 110, 00 when others; -- u = g(q,x) : utsignal u <= x and q(1) and q(0); end graf; Komplett kod 46

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 Parallella 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; VL får värdet när c) if-then-else-satser 4. Parallella och sekventiella satser exekveras parallellt gentemot varandra processen avslutas 47

48 In/utsignaler OBS, om en utsignal också används inuti nätet, så ska den deklareras som buffer. in & out & buffer in & inout in & out

Titel/föreläsare 2019-02-25 49 In/utsignaler Oftast bättre att undika buffer och ha en extra intern signal entity example is port (a, b : in std_logic; c, d : out std_logic); end entity example; architecture basic of example is signal cint : std_logic; begin cint <= a and b; d <= cint xor a; c <= cint; end architecture basic;

52 Numeric_std use ieee.numerc_std.all - lägger till paket signal q: unsigned(3 downto 0); -- 4 bit ctr... q <= q + 1; Notera hur värdet av if q = 10... heltal, bitvektor samt q <= 0011 ; bit anges q(0) <= 1 ; Dvs vi kan hantera q både som en boolesk vektor och som ett tal på intervallet [0,15]; unsigned och signed är std_logic_vector som går att räkna med

4-bits dekadräknare med synkron clear 53 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity counter is port(clk, clear: in std_logic; q: out std_logic_vector(3 downto 0)); end counter; architecture simple of counter is signal q_int, q_p: unsigned (3 downto 0)); begin process(clk) begin if rising_edge(clk) then q_int <= q_p; end if; end process; q_p <= to_unsigned(0, 4) when clear or q_int = 9 else q_int+1; -- to_unsigned(0, 4) = 0000 q <= std_logic_vector(q_int); -- Hårt typat som sagt end simple; +1 clk clk 0 0 1 q 4 1 clear clear =9? q 4

54 Typkonvertering Bitvektorer med ett specificerat antal bitar V: std_logic_vector(3 downto 0) unsigned(v) std_logic_vector(u) U : unsigned(3 downto 0) to_integer(u) to_unsigned(i,4) Heltal I : integer

55 Konkatenering signal bus: std_logic_vector (1 downto 0); signal a, b: std_logic; bus <= a & b;

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

59 Asynkron reset process(clk, reset) begin if reset = 1 then q <= 0 ; elsif rising_edge(clk) then q <= x; end if; end process; Synkron reset process(clk) begin if rising_edge(clk) then if reset = 1 then q <= 0 ; else q <= x; end if; end if; end process; Känslighetslistan (ändringar på signaler exekverar processen): clk ska alltid vara med Ev. asynkrona insignaler till vippa/räknare/register Andra signaler ska ej vara med.

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

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

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

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

Simulering i ModelSim 64 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 -r 100 # reset force -freeze sim:/pulsdetektor/reset 0 0, 1 50, 0 90 # x force -freeze sim:/pulsdetektor/x 0 0, 1 105, 0 505, 1 705, 0 1005 # L force -freeze sim:/pulsdetektor/l 0011 0 run 1300 Starta simulering i transcriptfönstret VSIM > do sim.do

ModelSim 65

67 Slutsatser Vi ritar logiska blockscheman först! Vi har samma struktur på koden som på blockschemat! Alltså: små process-satser 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

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

71 Inför Lab 3 Obligatorisk lektion i ModelSim Fyra uppgifter: enkel prova-på-uppgift, kodlåset i VHDL, två olika räknarrelaterade uppgifter Förberedelseuppgifter: Logiska blockscheman till uppgifterna Förbered så mycket kod som går ModelSim finns installerat på datorerna i Freja (och i Grinden).

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

75 Rekommendation Använd endast std_logic och std_logic_vector library ieee; use ieee.std_logic_1164.all; Vill ni räkna inkludera NUMERIC_STD biblioteket library ieee; -- behövs en gång use ieee.numeric_std.all; Skriv logik och vippor separat Undvik integer. Går ej att indexera på bit-nivå.

Digitalteknik Oscar Gustafsson, Mattias Krysander www.liu.se