William Sandqvist william@kth.se Simulera med ModelSim ModelSim kan användas till att simulera VHDL-kod, för att avgöra om den är "rätt" tänkt. Man kan.

Slides:



Advertisements
Liknande presentationer
Redigerings kurs med PowerDirektor 5 NE Express Del 1.
Advertisements

Klicka på ”Verktyg” i menyn, välj ”Alternativ”..
BANLÄGGNING I OCAD-8 Närpes OK.
Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
Välkommen till internet för nybörjare
Word Word är ett av de vanligaste ordbehandlingsprogrammen. Vi skall idag gå igenom de vanligaste funktionerna i programmet. Fördelarna med att använda.
Klicka på Aktivera redigering i meddelandefältet,
Access med Sebastian och Robert
Digitalteknik 7.5 hp distans: VHDL del 1 V:1.1
Digitalteknik, fortsättningskurs 2012 Föreläsning 16 Inför tentan
Bildfabriken kan ställas in på olika sätt - se några exempel
Många studenter använder en LCD-display till sin programmeringsuppgift
Enkel dator teknik Tips och tricks.
Funktionen SA10-Grupper. Följande typer av grupper finns: - Grupp i kurs hör alltid ihop med en kurskod - Grupp i program hör alltid ihop med en programkod.
William Sandqvist Maurice Karnaugh Karnaugh-diagrammet gör det enkelt att minimera Boolska uttryck! William Sandqvist
Inloggning till Landstinget Kronoberg via Citrix
Tryck på den stora knappen på datorns front. Då startar datorn.
2. Utveckla en presentation
PICKit2 programmer-to-go
Kretselement på grafisk form
William Sandqvist Blanda R och G William Sandqvist
Föreläsning 2 Datalogi för E1 2D1343
William Sandqvist PSpice – hemma Som simuleringsprogramvara använder vi Orcad PSpice, samma program kommer sedan att användas I elektronikkurserna.
Nätverk Logistikprogrammet 2012.
i olika programmeringsspråk
WMS i Google Earth Öppna Google Earth, (version 4 eller högre!)
En presentation av iPad -appar och funktioner
Sektorn för Socialtjänst
1.Öppna först googlekartfilen du fått av byNet i googleearth genom att dubbelklicka på den. Notera att du måste ha installerat google earth. Detta görs.
Powerpoint …är ett program som du använder till att: …är bra till att
Klicka på Aktivera redigering i meddelandefältet
OPERATIVSYSTEM WINDOWS
Bildfabriken kan ställas in på olika sätt - se några exempel
Fortlöpande chatt Skapa ämnesfeeds och spåra aktivitet
William Sandqvist Kodlåsmall lockmall.vhd William Sandqvist
KONFIDENTIELLT. Distribution endast till partners enligt sekretessavtal. Microsoft utfäster inga garantier, varken uttryckliga eller underförstådda. ©
Lync-möten Ansluta till ett Lync-möte Schemalägga ett Lync-möte
Integrera mp3 i hotpotatoes.  Se hur test-övningen kommer att se ut: N1_Audio_01.htm
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Java paket och jar-filer
KONFIDENTIELLT. Distribution endast till partners enligt sekretessavtal. Microsoft utfäster inga garantier, varken uttryckliga eller underförstådda. ©
Vad kännetecknar ett sekvensnät?
William Sandqvist PIC-programmeringsmiljön i skolan Datorerna i skolans labsalar är centralt underhållna. Du har inte rättigheter att installera.
Snabbreferens för Lync 2013 KONFIDENTIELLT. Distribution endast till partners enligt sekretessavtal. Microsoft utfäster inga garantier, varken uttryckliga.
Din rapport ? Beskriv din applikation.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */
© CGI Group Inc Lyft av användaradministrationen (Användarföreningen) Annelie Holmer Mars 2015.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
XML, scheman och mappningar
William Sandqvist LP-filter, simulering med PSpice.
Shannon dekomposition
Tommy Nilson Föreningen DIS Datorhjälp i Släktforskningen © Bengt Kjöllerström | Modul 31.
Enkel dator teknik Tips och tricks. Välja storlek och radavstånd Här väljer du storlek på texten vi vill att ni använder 14 p till rubriker och 12 p till.
Kom igång med Disgen 5 - röd Skriv ut en ansedel Distanskurs med Bengt Kjöllerström E-post: Kurs.dis.se Kom igång med Disgen 1.
© Hanken Svenska handelshögskolan / Hanken School of Economics,
Ändra sökordsmallen i GynOp
KPP053, HT2015 MATLAB, Föreläsning 4
Genomgång av Automation Builder
Validera hjärtstartare i Sveriges Hjärtstartarregister
Komma igång med Scratch
Så här infogar du den här bilden i presentationen
Bengt Oelmann -- copyright 2002
Konstruktion av kombinatorisk och sekventiell logik
Du kan vara några till lags ibland…
Så här infogar du den här bilden i en egen presentation
Jag såg en ängel i marmorn och högg i stenen tills han blev fri.
Framgångar är inte definitiva, misslyckanden är inte livshotande: det är modet att gå vidare som räknas. Så här infogar du den här bilden i en egen presentation.
Så här infogar du den här bilden i en egen presentation
Så här infogar du den här bilden i en egen presentation
Presentationens avskrift:

William Sandqvist william@kth.se Simulera med ModelSim ModelSim kan användas till att simulera VHDL-kod, för att avgöra om den är "rätt" tänkt. Man kan göra simuler-ingar som tar hänsyn till "tidsfördröjningar" och andra fenomen inuti den tänkta målkretsen.  Starta ModelSim. Klicka på Jumpstart för att få hjälp med att sätta upp ett projekt. William Sandqvist william@kth.se

William Sandqvist william@kth.se Skapa projekt Project Name MAXsim   kan vara ett lämpligt namn Project location H:/MAXwork   bläddra dig fram till samma arbetsmapp som Du använde för Quartus William Sandqvist william@kth.se

William Sandqvist william@kth.se Lägg till VHDL-filen Vi väljer "Add Existing File" för att lägga till en VHDL-fil till projektet.  "Bläddra" fram till filen  codelock.vhd  som vi tidigare skapade med Quartus. William Sandqvist william@kth.se

Kodlåskoden i ModelSim William Sandqvist william@kth.se

Kompilera för simulering ModelSim har en  egen  kompilator för att ta fram simuleringen ur VHDL-koden. Fast vi har kompilerat VHDL-koden i Quartus måste vi trots det kompilera den igen för ModelSim. Välj Compile menyn, alternativet Compile All. Nu är VHDL-koden också kompilerad för Modelsim.  Statussymbolen ändras från ett blått frågetecken till en grön bock! William Sandqvist william@kth.se

Simulera kodlås-mallen Ladda Designen till simulatorn.  Välj fliken Library, och öppna mappen work. Dubbelklicka på "Entity" codelock. William Sandqvist william@kth.se

William Sandqvist william@kth.se Transcript-fönstret En serie kommandon utförs nu som resulterar i att designen laddats in till simulatorn. I Transcript-fönstret kan man följa vilka kommandon det är som utförts. Transcript-fönstret är ett terminalfönster där man ger kommandon, men man kan även ge de flesta kommandon genom menyval, eller genom att klicka på knappar. Kommandon skrivs dock ut i ut Transcript-fönstret, oavsett hur dom givits. William Sandqvist william@kth.se

William Sandqvist william@kth.se Förbered simulering Vi behöver ha ett antal fönster öppna för att kunna följa simuleringen. Ge kommandon i Transcript-fönstret  eller klicka för i View-menyn. VSIM> view objects VSIM> view locals VSIM> view source VSIM> view wave -undock Modelsim består av "fönster". Det kan vara svårt att se allt på en gång. Med knappen Zoom/Unzoom förstorar man fönstret. Med knappen Dock/Undock kan fönstret flyttas till valfri plats. Med knappen Close stänger man fönster. William Sandqvist william@kth.se

Signaler i Wave-fönstret Signaler i Wave  Har man många signaler är det en bra idé att välja ut de signaler man är intresserad av att följa i Wave-fönstret, men här väljer vi att följa alla: add wave * Det finns flera sätt att lägga till signaler till Wave-fönstret:  Välj signaler i Object-fönstret och "dra och släpp" urvalet till Wave-fönstret.  Högerklicka i Object-fönstret och välj Add to Wave. William Sandqvist william@kth.se

Format, Radix, Hexadecimal Tillståndsvariabeln q  har 32 olika tillstånd, en sådan variabel är lättare att följa om den anges som en hexa-decimal siffra,   00 ... 1F  i stället för som ett femsiffrigt binärtal. UUUUU byts mot XX i Wave-fönstret. Övriga variabler passar bäst som binärtal. William Sandqvist william@kth.se

William Sandqvist william@kth.se Skapa stimuli Stimuli. Insignaler som klock-pulser eller knapptryckningar, skapas med kommandot  force  i  Transcript-fönstret. Den förinställda tidsupplösningen i Wave är nanosekunder, ns. En lämplig klockfrekvens för ett kodlås kan däremot vara så låg som 5 Hz, dvs. en periodtid om 0,2 sek.  Vi skalar därför om till hög klockfrekvens med periodtiden 20 ns force codelock/clk 1 0ns, 0 10ns -repeat 20ns  Genererar klockpulser för evigt. William Sandqvist william@kth.se

Simulera knapptryckningen force codelock/k 000 force codelock/r 0000 run 100ns force codelock/k 001 force codelock/r 0001 run 30ns force codelock/k 000 force codelock/r 0000 run 800ns William Sandqvist william@kth.se

William Sandqvist william@kth.se Hitta i Wave-fönstret Lägg till en Cursor. Sök efter ”Signal Value”. Öva hemma inför laborationen. William Sandqvist william@kth.se

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

Keypad och Statecounter Bra val av datatyper gör koden själv-förklarande! K1 K2 K3 R4 R3 R2 R1 K: in std_logic_vector(1 to 3); R: in std_logic_vector(1 to 4); K ="001" K(3)=’1’ bitvector bit 1 2 3 1 2 3 4 R ="0001" R(4)=’1’ bitvector bit 4 3 2 1 0 Statecounter: q ="00001" q(0)=’1’ bitvektor bit William Sandqvist william@kth.se

William Sandqvist william@kth.se 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; begin nextstate_decoder: -- next state decoding part process(state, K, R) case state is when 0 => if (K = "100" and R ="0001") then nextstate <= 1; else nextstate <= 0; end if; when 1 => if (K = "100" and R ="0001") then nextstate <= 1; elsif (K = "000" and R = "0000") then nextstate <= 2; when 2 to 30 => nextstate <= state + 1; when 31 => nextstate <= 0; end case; end process; debug_output: -- display the state q <= conv_std_logic_vector(state,5); output_decoder: -- output decoder part process(state) begin 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 if; end behavior; It’s easy to see that this is correct! William Sandqvist william@kth.se

William Sandqvist william@kth.se lockmall_with_error.vhd 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; begin 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; end if; when 1 => if(((R(2)='0') and (R(3)='0') and (K(2)='0') and (K(3)='1')) and elsif (K = "000" and R = "0000") then nextstate <= 2; end if; when 2 to 30 => nextstate <= state + 1; when 31 => nextstate <= 0; end case; end process; debug_output: -- display the state q <= conv_std_logic_vector(state,5); output_decoder: -- output decoder part process(state) begin 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 if; end behavior; Now it’s hard to see if this is correct or not? William Sandqvist william@kth.se

William Sandqvist william@kth.se 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? William Sandqvist william@kth.se

Testbench thank’s to: Francesco Robino tb_lockmall.vhd William Sandqvist william@kth.se

William Sandqvist william@kth.se tb_lockmall.vhd Vi behöver skriva en VHDL-testbench Ett testbänksprogram kan testa alla möjliga tangentkombina-tioner och rapportera om det uppstår något problem … Det kan automatiskt loopa igenom all möjliga tangent-tryckningar och rapportera om om låset försöker att öppna. Det finns 27 = 128 möjliga tangentkombinationer och vi skulle bli helt uttröttade om vi försökte att prova dem alla för hand. William Sandqvist william@kth.se

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; William Sandqvist william@kth.se

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; William Sandqvist william@kth.se

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; William Sandqvist william@kth.se

Genera en simuleringsklocka -- generate a simulation clock clk <= not clk after 10 ns; William Sandqvist william@kth.se

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 ); William Sandqvist william@kth.se

En nästlad slinga skapar tangenttryckningarna process begin for k in 0 to 7 loop 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 816=128 turns William Sandqvist william@kth.se

report, severity note, severity error Tests if state q = ”00001” will be reached by any combination. check: process(q) begin 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 if; end if; end process check; William Sandqvist william@kth.se

Simulera och hitta felet! Vad annat än att trycka på ”1” tangenten skulle kunna öppna låset? ? William Sandqvist william@kth.se