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

Relevanta dokument
LAB VHDL-programmering

DESIGN AV SEKVENTIELL LOGIK

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

std_logic & std_logic_vector

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

VHDL2. Sekvensnätsexemplet

VHDL och laborationer i digitalteknik

VHDL2. Sekvensnätsexemplet

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

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

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

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

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

Konstruktionsmetodik för sekvenskretsar

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

VHDL 1. Programmerbara kretsar

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

KALKYLATOR LABORATION4. Laborationens syfte

Simulering med ModelSim En kort introduktion

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

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

DESIGN AV KOMBINATORISK LOGIK

Konstruktion av digitala system - VHDL

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

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

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

VHDL3. Angående buffer

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

PARALLELL OCH SEKVENTIELL DATABEHANDLING. Innehåll

LABORATIONSINSTRUKTION LABORATION

Digitala projekt Elektro- och informationsteknik

KOMBINATORISKA FUNKTIONER...1

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

Support Manual HoistLocatel Electronic Locks

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

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

Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV

Digital Design IE1204

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

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

DIGITALTEKNIK. Laboration D172

Digital elektronik CL0090

Laboration VHDL introduktion

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

Digitala elektroniksystem

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

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

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

Webbregistrering pa kurs och termin

Isometries of the plane

Webbreg öppen: 26/ /

Tentamen i IE1204/5 Digital Design onsdagen den 5/


Tenta i Digitalteknik

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

Digital Design IE1204

L15 Introduktion modern digital design

Styrteknik: Binära tal, talsystem och koder D3:1

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


Tentamen i IE1204/5 Digital Design onsdagen den 5/

Flödesschema som visar hur man använder Quartus II.

Generering av analoga signaler från XSV300

Exempel på ett litet Ada-program

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

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

Digitalteknik syntes Arne Linde 2012

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Sekvensnät. William Sandqvist

Beijer Electronics AB 2000, MA00336A,

In Bloom CAL # 8, sista varv och ihopsättning / last rows and assemble

Digital Design IE1204

LABORATION TSEA22 DIGITALTEKNIK D

Preschool Kindergarten

Tentamen IE Digital Design Måndag 23/

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

Application Note SW

Boiler with heatpump / Värmepumpsberedare

Översikt, kursinnehåll

BOENDEFORMENS BETYDELSE FÖR ASYLSÖKANDES INTEGRATION Lina Sandström

IE1205 Digital Design: F7 : Kombinatorik

Tenta i Digitalteknik

LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik

1. Unpack content of zip-file to temporary folder and double click Setup

Digital elektronik CL0090

Programable Logic Devices

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Examens arbete 10-poäng C-nivå Mälardalens Högskola Testbed for a semi-full-custom mixed signal ASIC

SkillGuide. Bruksanvisning. Svenska

Svenska()(Bruksanvisning(för(handdukstork()(1400(x(250(mm(

Förändrade förväntningar

Sensorsystem till hinderhanterande robot

Imperativ programmering. Föreläsning 2

Kvalitetsarbete I Landstinget i Kalmar län. 24 oktober 2007 Eva Arvidsson

Dokumentnamn Order and safety regulations for Hässleholms Kretsloppscenter. Godkänd/ansvarig Gunilla Holmberg. Kretsloppscenter

PORTSECURITY IN SÖLVESBORG

Tenta i Digitalteknik

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

INSTALLATION INSTRUCTIONS

Transkript:

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

Keypad och Statecounter Bra val av datatyper gör koden självförklarande! K: in std_logic_vector(1 to 3); R: in std_logic_vector(1 to 4); R4 R3 R2 R1 K3 K2 K1 1 2 3 K ="001" K(3)= 1 bitvector bit 1 2 3 4 R ="0001" R(4)= 1 bitvector bit 4 3 2 1 0 Statecounter: q ="00001" q(0)= 1 bitvektor bit

lockmall.vhd This code is given library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity codelock is port( clk: in std_logic; K: in std_logic_vector(1 to 3); R: in std_logic_vector(1 to 4); q: out std_logic_vector(4 downto 0); UNLOCK: out std_logic ); end codelock; architecture behavior of codelock is subtype state_type is integer range 0 to 31; signal state, nextstate: state_type; nextstate_decoder: -- next state decoding part process(state, K, R) case state is It s easy to see that this is correct! when 0 => if (K = "100" and R ="0001") then nextstate <= 1; else nextstate <= 0; when 1 => if (K = "100" and R ="0001") then nextstate <= 1; elsif (K = "000" and R = "0000") then nextstate <= 2; else nextstate <= 0; when 2 to 30 => nextstate <= state + 1; when 31 => nextstate <= 0; end case; end process; output_decoder: -- output decoder part process(state) case state is when 0 to 1 => UNLOCK <= '0'; when 2 to 31 => UNLOCK <= '1'; end case; end process; state_register: -- the state register part (the flipflops) process(clk) if rising_edge(clk) then state <= nextstate; end process; end behavior; debug_output: -- display the state q <= conv_std_logic_vector(state,5);

lockmall_with_error.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; debug_output: -- display the state q <= conv_std_logic_vector(state,5); entity codelock is port( clk: in std_logic; K: in std_logic_vector(1 to 3); R: in std_logic_vector(1 to 4); q: out std_logic_vector(4 downto 0); UNLOCK: out std_logic ); end codelock; architecture behavior of codelock is subtype state_type is integer range 0 to 31; signal state, nextstate: state_type; nextstate_decoder: -- next state decoding part nextstate_decoder: -- next state decoding part process(state, K, R) case state is when 0 => if(((r(2)='0') and (R(3)='0') and (K(2)='0') and (K(3)='1')) and ( not (( not ((K(1)='0') and (R(1)='0') and (R(4)='1'))) and ( not ((K(1)='1') and (R(1)='1') and (R(4)='0')))))) then nextstate <= 1; else nextstate <= 0; when 1 => if(((r(2)='0') and (R(3)='0') and (K(2)='0') and (K(3)='1')) and ( not (( not ((K(1)='0') and (R(1)='0') and (R(4)='1'))) and ( not ((K(1)='1') and (R(1)='1') and (R(4)='0')))))) then nextstate <= 1; elsif (K = "000" and R = "0000") then nextstate <= 2; else nextstate <= 0; when 2 to 30 => nextstate <= state + 1; when 31 => nextstate <= 0; end case; end process; output_decoder: -- output decoder part process(state) case state is when 0 to 1 => UNLOCK <= '0'; when 2 to 31 => UNLOCK <= '1'; end case; end process; state_register: -- the state register part (the flipflops) process(clk) if rising_edge(clk) then state <= nextstate; end process; end behavior; Now it s hard to see if this is correct or not?

lockmall_with_error.vhd Betyder båda uttrycken samma sak? ( K = "100" and R ="0001" ) Är verkligen detta samma sak? (((R(2)='0') and (R(3)='0') and (K(2)='0') and (K(3)='1')) and ( not (( not ((K(1)='0') and (R(1)='0') and (R(4)='1'))) and ( not ((K(1)='1') and (R(1)='1') and (R(4)='0')))))) Någon lovar att koden är korrekt men hur kan man veta att detta är absolut sant?

Testbench thank s to: Francesco Robino tb_lockmall.vhd

tb_lockmall.vhd Vi behöver skriva en VHDL-testbench Ett testbänksprogram kan testa alla möjliga tangentkombinationer och rapportera om det uppstår något problem Det kan automatiskt loopa igenom all möjliga tangenttryckningar och rapportera om om låset försöker att öppna. Det finns 2 7 = 128 möjliga tangentkombinationer och vi skulle bli helt uttröttade om vi försökte att prova dem alla för hand.

entity en testbänk har inga portar entity tb_codelock is -- entity tb_codelock has no ports -- because it's for simulation only end tb_codelock;

Några interna signaler behövs signal clk : std_logic := '0'; signal K_test : std_logic_vector(1 to 3); signal R_test : std_logic_vector(1 to 4); signal prev_k_test : std_logic_vector(1 to 3); signal prev_r_test : std_logic_vector(1 to 4); signal q : std_logic_vector(4 downto 0); signal unlock : std_logic;

Vårt codelock används som component -- we use our codelock as a component component codelock port( clk : in std_logic; K : in std_logic_vector(1 to 3); R : in std_logic_vector(1 to 4); q : out std_logic_vector(4 downto 0); UNLOCK : out std_logic ); end component;

Genera en simuleringsklocka -- generate a simulation clock clk <= not clk after 10 ns;

Instantiatiering och signal mapping -- instantiation of the device under test, -- mapping of signals inst_codelock: codelock port map ( clk => clk, K => K_test, R => R_test, q => q, UNLOCK => unlock );

En nästlad slinga skapar tangenttryckningarna 8 process for k in 0 to 7 loop 16 K_test <= conv_std_logic_vector(k,3); for r in 0 to 15 loop prev_k_test <= K_test; prev_r_test <= R_test; R_test <= conv_std_logic_vector(r,4); wait until CLK='1'; end loop; end loop; end process; 8 16=128 turns

report, severity note, severity error Tests if state q = 00001 will be reached by any combination. check: process(q) if ((q = "00001") and (prev_k_test = conv_std_logic_vector(1,3)) and (prev_r_test = conv_std_logic_vector(1,4))) then assert false report "Lock tries to open for the right sequence! severity note; else if ((q = "00001")) then assert false report "Lock tries to open with the wrong sequence! severity error; else report "Lock closed!" severity note; end process check;

Simulera och hitta felet! Vad annat än att trycka på 1 tangenten skulle kunna öppna låset??