Układy reprogramowalne i SoC Testbenches. Symulacja sterowana zdarzeniami.

Podobne dokumenty
Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

Układy reprogramowalne i SoC Język VHDL (część 4)

Układy reprogramowalne i SoC Implementacja w układach FPGA

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Elementy języka VHDL. obiekty typy danych atrybuty pakiety i biblioteki instrukcje współbieżne instrukcje sekwencyjne. PUE-w3 1

Krótkie wprowadzenie do ModelSim i Quartus2

Modelowanie złożonych układów cyfrowych (1)

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Języki opisu sprzętu VHDL Mariusz Rawski

Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Zaawansowany VHDL. Rajda & Kasperek 2014 Katedra Elektroniki AGH 2

Sposoby projektowania systemów w cyfrowych

Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Zaawansowany VHDL. Rajda & Kasperek 2015 Katedra Elektroniki AGH 1

Układy reprogramowalne i SoC Język VHDL (część 3)

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

VHLD Very High Speed Integrated Circuit (VHSIC) Hardware Description Language (VHDL)

Projektowanie hierarchiczne Mariusz Rawski

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Projekt prostego procesora

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Projektowanie automatów z użyciem VHDL

Projektowanie Urządzeń Cyfrowych

Projektowanie w VHDL

Układy reprogramowalne i SoC Język VHDL (część 5)

Realizacja algorytmu wyznaczania wyrazów ciągu w języku VHDL z zastosowaniem podziału projektu na moduły: FSM i Data Path.

Systemy Czasu Rzeczywistego FPGA

Układy reprogramowalne i SoC Specjalizowane moduły FPGA

Technika cyfrowa projekt: Sumator 4 bitowy równoległy

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

Specyfika projektowania Mariusz Rawski

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYNTEZA UKŁADÓW CYFROWYCH ES2D100005

Projektowanie systemów cyfrowych w językach opisu sprzętu. Studium Zaoczne IV rok kierunek Elektronika i Telekomunikacja. Wykład 2

Układy reprogramowalne i SoC Język VHDL (część 1)

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

Systemy Czasu Rzeczywistego FPGA

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

mgr inż. Maciej Rudek opracował: dr inż. Daniel Kopiec

Sumatory H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Architektura komputerów Wprowadzenie do algorytmów

Układy reprogramowalne i SoC Język VHDL (część 2)

Systemy Czasu Rzeczywistego FPGA

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Technika Cyfrowa. Wprowadzenie do laboratorium komputerowego część II

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

PRZEMYSŁAW SOŁTAN

Programowanie Układów Logicznych kod kursu: ETD6203. VHDL, ISE WebPACK, Plan Ahead, Impact W

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Inżynieria Układów Programowalnych

PUCY Kolos 2: Reloaded

XC4000: LUT jako ROM Układy Cyfrowe i Systemy Wbudowane 2 Układy FPGA cz. 2 ROM32X1 VHDL inference example ROM 16x2b type

VHDL. Zebrał i opracował R.Walkowiak PTC wykład 2013/2014

Synteza strukturalna

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie. Technika Cyfrowa. Wprowadzenie do laboratorium komputerowego część II

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Układy Cyfrowe laboratorium

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Synteza logiczna. Rajda & Kasperek 2015 Katedra Elektroniki AGH 1

Język VHDL podstawy Mariusz Rawski

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH Wydziałowy Zakład Metrologii Mikro- i Nanostruktur SEMESTR LETNI 2016

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Programowanie strukturalne

Programowalne układy logiczne

Wstęp do programowania 2

Programowalne układy logiczne

Zaawansowane programowanie w języku C++ Wyjątki

1. Synteza układów opisanych w języku VHDL Xilinx ISE Design Suite 10.1 VHDL 2. Obsługa przetwornika CA Project Add source...

Metoda Newtona przyjmuje następujące założenia dla funkcji :

Quartus. Rafał Walkowiak IIn PP Wer

Kurs języka VHDL Very High (Speed Integrated Circuits) Description Language

Podstawy techniki cyfrowej zima 2015 Rafał Walkowiak

dr inż. Małgorzata Langer Architektura komputerów

Symulacja systemu z procesorem MicroBlaze w środowisku ActiveHDL

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Systemy Czasu Rzeczywistego FPGA

Podstawy techniki cyfrowej zima 2017 Rafał Walkowiak Synteza strukturalna wyższego poziomu

VHDL. Behawioralny Strukturalny Czasowy. Poziom RTL

Projektowanie systemów cyfrowych w językach opisu sprzętu. Studium Zaoczne IV rok kierunek Elektronika. Wykład 4

PROJEKTOWANIE UKŁADÓW CYFROWYCH Z WYKORZYSTANIEM PAKIETU MULTISIM 2001 ORAZ JĘZYKA OPISU SPRZĘTU VHDL

Technika cyfrowa. Laboratorium nr 7. Liczniki synchroniczne. Mirosław Łazoryszczak. Temat:

MentorGraphics ModelSim

Kodery, dekodery, transkodery Synteza sprzętu przy pomocy VHDL

Medical electronics part 9a Electroencephalography (EEG)

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Realizacja logiki kombinacyjnej Mariusz Rawski

Wstęp do programowania

Programowanie Układów Logicznych kod kursu: ETD6203. Komunikacja z układami cyfrowymi W dr inż. Daniel Kopiec

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

LABORATORIUM OPTOELEKTRONIKA I SENSORYKA Oprogramowanie bariery podczerwieni w układzie CPLD

Łukasz Januszkiewicz Technika antenowa

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Studia podyplomowe realizowane w ramach zadania 5 Systemy mobilne i techniki multimedialne

Projektowanie hierarchiczne Mariusz Rawski

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH

Transkrypt:

Testbenches. Symulacja sterowana zdarzeniami. Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

2 Testbenches W celu przetestowania zaprojektowanego kodu odpowiednią sekwencję testową wejść można wygenerować posługując się symulatorem Inną możliwością jest napisanie odpowiedniego kodu testującego w języku VHDL Można w nim nie tylko wymuszać sygnały na wejściach testowanego układu, ale również odczytywać wyjścia i reagować na ich zmiany Testbench Tester tester.vhd Model Under Test model.vhd testbench.vhd

3 Przykład: sumator Testbench zazwyczaj nie ma żadnych wejść ani wyjść Mogą wystąpić problemy z oglądaniem wyjść, jeżeli nie są do niczego wykorzystywane Optymalizacja może je usunąć Rozwiązanie: użyć opcji +acc programu vopt library ieee; use ieee.std_logic_1164.all; entity full_adder is port ( a, b, cin: in std_logic; s, cout: out std_logic end full_adder; -------------------------------------- architecture dataflow of full_adder is s <= a xor b xor cin; cout <= (a and b) or (a and cin) or (b and cin end dataflow; vlib work vcom adder.vhd vcom adder_tb.vhd vopt +acc+full_adder_tb full_adder_tb -o opt vsim opt do wave.do run 200 ns library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity full_adder_tb is end entity; architecture a of full_adder_tb is component full_adder is port ( a, b, cin: in std_logic; s, cout: out std_logic end component; signal a: unsigned(2 downto 0 signal o: unsigned(1 downto 0 uut: full_adder port map ( a => a(0), b => a(1), cin => a(2), s => o(0), cout => o(1) test: process for i in 0 to 7 loop a <= to_unsigned(i,3 wait for 20 ns; end loop; wait; end architecture a;

4 Pliki Czasami zamiast oglądać przebiegi na ekranie, wolimy je wpisać do pliku Przy definicji typu plikowego podajemy, co plik przechowuje type text is file of string; type IntegerFileType is file of integer; Operacje na plikach: file_open(), file_close(), endfile(), read(), write()

5 Przykład: zapis do pliku -- -- test of binary file I/O -- entity io_write_test is end io_write_test; architecture behavioral of io_write_test is process type IntegerFileType is file of integer; file dataout :IntegerFileType; variable check :integer :=0; variable fstatus : file_open_status; file_open(fstatus,dataout,"data.out",write_mode for count in 1 to 10 loop check := check + 1; write(dataout, check end loop; file_close(dataout wait; end behavioral;

Pliki tekstowe - pakiety TEXTIO i STD_LOGIC_TEXTIO 6 line read(buf,c) write(buf,arg) writeline() file line line line Plik tekstowy jest zorganizowany jako sekwencja linii Procedury read() oraz write() operują na liniach hread()/hwrite() do operacji w zapisie szesnastkowym oread()/owrite() do operacji w zapisie ósemkowym Procedury readline() i writeline() przesyłają dane między liniami i plikami Procedury zawarte w pakiecie TEXTIO biblioteki STD oraz pakiecie STD_LOGIC_TEXTIO biblioteki IEEE Umożliwiają zapis i odczyt standardowych typów do/z linii

7 Przykład - test sumatora z zapisem do pliku library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_textio.all; library std; use std.textio.all; entity full_adder_tb is end entity; architecture a of full_adder_tb is component full_adder is port ( a, b, cin: in std_logic; s, cout: out std_logic end component; signal a: unsigned(2 downto 0 signal o: unsigned(1 downto 0 uut: full_adder port map ( a => a(0), b => a(1), cin => a(2), s => o(0), cout => o(1) test: process file outfile: text; variable fstatus: file_open_status; variable buf: line; file_open(fstatus,outfile,"myfile.txt",write_mode write(buf, string'("simulation of full adder") writeline(outfile,buf for i in 0 to 7 loop a <= to_unsigned(i,3 wait for 20 ns; write(buf, std_logic_vector(a) write(buf, string'(" --> ") write(buf, to_integer(o) writeline(outfile,buf end loop; file_close(outfile wait; end architecture a;

Przykład - weryfikacja sumatora na podstawie pliku 8 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_textio.all; library std; use std.textio.all; entity full_adder_tb is end entity; architecture a of full_adder_tb is component full_adder is port ( a, b, cin: in std_logic; s, cout: out std_logic end component; signal a: std_logic_vector(2 downto 0 signal o: std_logic_vector(1 downto 0 uut: full_adder port map ( a => a(0), b => a(1), cin => a(2), s => o(0), cout => o(1) test: process file infile: text; variable fstatus: file_open_status; variable buf: line; variable stimulus: std_logic_vector(2 downto 0 variable expected_o: integer; variable vector_valid: boolean; file_open(fstatus,infile,"infile.txt",read_mode while not endfile(infile) loop readline(infile, buf read(buf, stimulus, good => vector_valid next when not vector_valid; read(buf, expected_o a <= stimulus; wait for 20 ns; assert to_integer(unsigned(o)) = expected_o report "Simulation mismatch!"; end loop; file_close(infile assert false report "Simulation OK!"; wait; end architecture a; # test vectors 000 0 001 1 010 1 011 2 100 1 101 2 110 2 111 3

9 Przykład: test nadajnika RS232 library ieee; use ieee.std_logic_1164.all; use work.rs_test_interface.all; entity rs_tb is end entity rs_tb; architecture a of rs_tb is component TxUnit is port ( Clk : in Std_Logic; -- Clock signal Reset_n : in Std_Logic; -- Reset input, active low Load : in Std_Logic; -- Load transmit data TxD : out Std_Logic; -- RS-232 data output TRegE_n : out Std_Logic; -- Tx register empty, active low TBufE_n : out Std_Logic; -- Tx buffer empty, active low DataO : in Std_Logic_Vector(7 downto 0) end component; signal clk: std_logic := '0'; signal reset_n: std_logic; signal load: std_logic; signal txd: std_logic; signal buf_empty_n: std_logic; signal data: std_logic_vector (7 downto 0 signal treg_empty_n: std_logic; tx: TxUnit port map ( Clk => clk, Reset_n => reset_n, Load => load, TxD => txd, TRegE_n => treg_empty_n, TBufE_n => buf_empty_n, DataO => data clkgen: process wait for 1000 ms / 9600 / 2; clk <= not clk; test: process reset_n <= '0'; load <= '0'; wait until clk'event and clk='1'; reset_n <= '1'; PROC_RS_WRITE_BYTE (x"aa", buf_empty_n, clk, load, data PROC_RS_WRITE_BYTE (x"66", buf_empty_n, clk, load, data wait until treg_empty_n = '0' and buf_empty_n = '0'; assert false report "Simulation finished" severity failure; end architecture a;

10 Przykład: test nadajnika RS232 (c.d.) library ieee; use ieee.std_logic_1164.all; package rs_test_interface is procedure PROC_RS_WRITE_BYTE ( val : in std_logic_vector (7 downto 0 signal buf_empty_n : in std_logic; signal clk : in std_logic; signal load : out std_logic; signal data : out std_logic_vector (7 downto 0) end package rs_test_interface; -- Package Body package body rs_test_interface is procedure PROC_RS_WRITE_BYTE ( val : in std_logic_vector (7 downto 0 signal buf_empty_n : in std_logic; signal clk : in std_logic; signal load : out std_logic; signal data : out std_logic_vector (7 downto 0) ) is while true loop wait until clk'event and clk = '1'; if buf_empty_n = '0' then load <= '1'; data <= val; wait until clk'event and clk = '1'; load <= '0'; exit; end if; end loop; end PROC_RS_WRITE_BYTE; end package body rs_test_interface;

11 Opóźnienia w języku VHDL W języku VHDL występują dwa rodzaje opóżnień Inercyjne Nie uwzględnia impulsów krótszych niż podane opóźnienie C <= A and B after 5ns; C <= inertial A and B after 5ns; Transportowe Uwzględnia wszystkie impulsy C <= transport A and B after 5ns;

Opóźnienia w języku VHDL Kolejna konstrukcja umożliwia wyeliminowanie krótkich impulsów 12 Z3 <= reject 2 ns inertial X after 5 ns; równoważne Zm <= X after 2 ns; Z3 <= transport Zm after 3 ns;

13 Opóźnienia w języku VHDL Z1 <= transport X after 10 ns; Z2 <= X after 10 ns; Z3 <= reject 4 ns inertial X after 10 ns;

14 Symulacja Proces symulacji składa się z dwóch faz Faza inicjalizacji - przypisanie wartości początkowych Faza symulacji właściwej VHDL używa modelu symulacji sterowanego zdarzeniami Czas jest podzielony na dyskretne kroki Wykonanie instrukcji powoduje, że w pewnym czasie w przyszłości szeregowana jest transakcja Transakcja niekoniecznie zmienia wartość sygnału Jeżeli transakcja zmienia wartość sygnału, zwana jest zdarzeniem

15 Symulacja Inicjalizacja Wartości początkowe podawane są w kodzie VHDL Jeżeli ich nie podano, symulator przyjmie wartości domyślne, zależnie od typu Może to spowodować niezgodność z wynikami syntezy Czas symulacji ustawiony na zero Aktywowane wszystkie procesy

16 Przykład A <= B or C after 2 ns; D <= A after 3 ns; process (A) E <= A or B after 1 ns; process C <= not C after 3 ns; wait on D; B <= E after 3 ns;

Delta delay 17 Jeżeli instrukcja ma opóźnienie zerowe Symulator używa nieskończenie małego opóźnienia, (delta) Czas symulacji nie ulega zmianie Używane tylko do umieszczania transakcji w kolejce Licznik opóźnień delta kasowany, gdy nastąpi zmiana czasu o skończoną wartość

18 Przykład delta delay A <= B or C; D <= A; process (A) E <= A or B; process C <= not C after 3 ns; wait on C; B <= E;

19 Symulacja wielu procesów Jeżeli model zawiera wiele procesów, wszystkie są wykonywane współbieżnie Instrukcje współbieżne poza procesami są również wykonywane współbieżnie Instrukcje wewnątrz procesu wykonywane sekwencyjnie Proces wykonuje się w zerowym czasie chyba że zawiera instrukcję wait wait for 10 ns; wait on E; Jeżeli nie podano opóźnienia, wartości sygnałów zostaną uaktualnione po czasie delta

20 Symulacja sterowana zdarzeniami Zdarzenie - zmiana wartości sygnału Po każdym zdarzeniu Wszystkie procesy czekające na zdarzenie wykonują się natychmiast, w zerowym czasie Zmiany sygnałów z tego wynikające zostaną umieszczone w kolejce zdarzeń w jakiejś przyszłej chwili czasowej Po zakończeniu wykonywania wszystkich aktywnych procesów Czas symulacji zmienia się na czas najbliższego zdarzenia w kolejce Symulator przetwarza to zdarzenie Proces kontynuowany dopóki Są zdarzenia w kolejce Nie przekroczono zadanego czasu symulacji

21 Perfidny błąd Nie wykonywać przypisań sygnałów zegarowych! library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity ff_tb is end entity; architecture a of ff_tb is component ff is port ( d, clk: in std_logic; q: out std_logic end component; signal a,b,c,d: std_logic := '0'; signal clk,clk2: std_logic := '0'; uut1: ff port map ( d => a, q => b, clk => clk uut2: ff port map ( d => b, q => c, clk => clk uut3: ff port map ( d => b, q => d, clk => clk2 clk2 <= clk; gena: process a <= not a; wait for 7 ns; genclk: process clk <= not clk; wait for 10 ns; end architecture a;

Testbenches. Symulacja sterowana zdarzeniami. Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego