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.

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

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

W przypadku spostrzeżenia błędu proszę o przesłanie informacji na adres

Systemy Czasu Rzeczywistego FPGA

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

Krótkie wprowadzenie do ModelSim i Quartus2

Podstawowe elementy układów cyfrowych układy sekwencyjne. Rafał Walkowiak

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

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY

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

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

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.

1. Poznanie właściwości i zasady działania rejestrów przesuwnych. 2. Poznanie właściwości i zasady działania liczników pierścieniowych.

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

UKŁADY SEKWENCYJNE Opracował: Andrzej Nowak

Projektowanie hierarchiczne Mariusz Rawski

Programowany układ czasowy APSC

Programowalne układy logiczne

Podstawowe elementy układów cyfrowych układy sekwencyjne Rafał Walkowiak Wersja

Odbiór i dekodowanie znaków ASCII za pomocą makiety cyfrowej. Znaki wysyłane przez komputer za pośrednictwem łącza RS-232.

Ćw. 7: Układy sekwencyjne

ćw. Symulacja układów cyfrowych Data wykonania: Data oddania: Program SPICE - Symulacja działania układów liczników 7490 i 7493

Automatyzacja i robotyzacja procesów produkcyjnych

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

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

Wstęp działanie i budowa nadajnika

Systemy Czasu Rzeczywistego FPGA

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Podstawy Elektroniki dla Elektrotechniki. Liczniki synchroniczne na przerzutnikach typu D

Programowany układ czasowy

MIKROPROCESORY architektura i programowanie

Standardowe bloki funkcjonalne

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

Hardware mikrokontrolera X51

Układy Cyfrowe projekt. Korekcja jasności obrazów w 24-bitowym formacie BMP z użyciem funkcji gamma. Opis głównych modułów sprzętowych

Podstawowe moduły układów cyfrowych układy sekwencyjne cz.2 Projektowanie automatów. Rafał Walkowiak Wersja /2015

Synteza strukturalna automatów Moore'a i Mealy

Układy asynchroniczne

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

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

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

Tab. 1 Tab. 2 t t+1 Q 2 Q 1 Q 0 Q 2 Q 1 Q 0

Przerzutnik ma pewną liczbę wejść i z reguły dwa wyjścia.

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

Specyfika projektowania Mariusz Rawski

interfejs szeregowy wyświetlaczy do systemów PLC

Zapoznanie się z podstawowymi strukturami liczników asynchronicznych szeregowych modulo N, zliczających w przód i w tył oraz zasadą ich działania.

STEROWANIE MASZYN I URZĄDZEŃ I. Laboratorium. 4. Przekaźniki czasowe

CZ1. Optymalizacja funkcji przełączających

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

Systemy wbudowane Wykład 6 - transmisje szeregowe: UART i pochodne. Komunikacja szeregowa Notes. Rodzaje transmisji Notes. Rodzaje transmisji Notes

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

Programowalne układy logiczne

Plan wykładu. Architektura systemów komputerowych. Cezary Bolek

Ćwiczenie Technika Mikroprocesorowa komputery 001 Układy sekwencyjne cz. 1

Układy czasowo-licznikowe w systemach mikroprocesorowych

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Projektowanie automatów z użyciem VHDL

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

Systemy Czasu Rzeczywistego FPGA

Układy asynchroniczne

Ćwiczenie 7 Matryca RGB

LICZNIKI PODZIAŁ I PARAMETRY

Liczniki, rejestry lab. 07 Układy sekwencyjne cz. 1

Elementy struktur cyfrowych. Magistrale, układy iterowane w przestrzeni i w czasie, wprowadzanie i wyprowadzanie danych.

Zwory na płycie z łączem szeregowym ustawienie zworek dla programowania.

Układy sekwencyjne. Podstawowe informacje o układach cyfrowych i przerzutnikach (rodzaje, sposoby wyzwalania).

Opis czytnika TRD-80 CLASSIC ver Moduł czytnika transponderów UNIQUE z wbudowaną anteną

Elementy oprogramowania sterowników. Instrukcje podstawowe, funkcje logiczne, układy czasowe i liczenia, znaczniki

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10.

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

Projekt prostego procesora

Architektura mikrokontrolera MCS51

Architektura mikrokontrolera MCS51

Opis czytnika TRD-FLAT 2LN ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

dwójkę liczącą Licznikiem Podział liczników:

Sposoby projektowania systemów w cyfrowych

Przerzutniki RS i JK-MS lab. 04 Układy sekwencyjne cz. 1

Definicje. Algorytm to:

1.Wprowadzenie do projektowania układów sekwencyjnych synchronicznych

TEMAT: PROJEKTOWANIE I BADANIE PRZERZUTNIKÓW BISTABILNYCH

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

MIKROPROCESORY architektura i programowanie

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Układy sekwencyjne. 1. Czas trwania: 6h

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

Cyfrowe Elementy Automatyki. Bramki logiczne, przerzutniki, liczniki, sterowanie wyświetlaczem

Przemysłowe sieci informatyczne

PROGRAMOWANIE Z LICZNIKIEM CYKLI

Krótkie przypomnienie

Projektowanie układów na schemacie

Transmisja danych cyfrowych

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Magistrala I 2 C. Podstawy systemów mikroprocesorowych. Wykład nr 5 Interfejsy szeregowe c.d.

Języki opisu sprzętu VHDL Mariusz Rawski

Uniwersalny asynchroniczny. UART Universal Asynchronous Receier- Transmiter

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

(przykład uogólniony)

Transkrypt:

Generowanie sygnałów testowych VHDL Wariant współbieżny (bez procesu): sygnał <= stan początkowy, stan_1 after time_1, stan_2 after time_2,... ; time_n - punkty czasowe podawane narastająco Wariant sekwencyjny (wewnątrz procesu): sygnał <= stan_1; wait for delay_1; sygnał <= stan_2; wait for delay_2; delay_n - opóźnienie pomiędzy kolejnymi zmianami W wariancie z wektorem i pętlą for wykonywane są konwersje typów, wymagające użycia odpowiedniej biblioteki. Należy sprawdzić, czy w nagłówku pliku znajduje się instrukcja: USE ieee.numeric_std.all; Przykład 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. Wariant 1 (współbieżny) IN_0 <= IN_1 <= IN_2 <= Wariant 2 (jeden proces) tb : process '0', '1' after 100 ns, '0' after 200 ns, '1' after 300 ns, '0' after 400 ns, '1' after 500 ns, '0' after 600 ns, '1' after 700 ns, '0' after 800 ns; '0', '1' after 200 ns, '0' after 400 ns, '1' after 600 ns, '0' after 800 ns; '0', '1' after 400 ns, '0' after 800 ns; IN_2 <= '0'; IN_1 <= '0'; IN_0 <= '0'; IN_2 <= '0'; IN_1 <= '0'; IN_2 <= '0'; IN_1 <= '1'; IN_0 <= '0'; IN_2 <= '0'; IN_1 <= '1'; IN_2 <= '1'; IN_1 <= '0'; IN_0 <= '0'; IN_2 <= '1'; IN_1 <= '0'; IN_2 <= '1'; IN_1 <= '1'; IN_0 <= '0'; IN_2 <= '1'; IN_1 <= '1'; IN_2 <= '0'; IN_1 <= '0'; IN_0 <= '0'; -- opcja (końcowy stan wejść = 000) 1

Wariant 3 (jeden proces, pominięte nadmiarowe przypisania) tb : process IN_2 <= '0'; IN_1 <= '0'; IN_0 <= '0'; IN_1 <= '1'; IN_0 <= '0'; IN_2 <= '1'; IN_1 <= '0'; IN_0 <= '0'; IN_1 <= '1'; IN_0 <= '0'; IN_2 <= '0'; IN_1 <= '0'; IN_0 <= '0'; -- opcja (końcowy stan wejść = 000) W pokazanych powyżej przykładach pełna sekwencja testowa generowana jest jednokrotnie. W wariantach z procesami można uzyskać powtarzanie sekwencji w nieskończoność przez usuniecie instrukcji wait na końcu procesu. Poniżej przedstawione są warianty z niezależnymi procesami dla wszystkich wejść z powtarzaniem sekwencji testowej w nieskończoność. W tym przypadku dodanie instrukcji wait na końcu procesów nie dałoby oczekiwanych sekwencji sygnałów testowych. Wariant 4 (niezależne procesy dla wejść) in_0_tb : process -- proces dla wejścia IN_0 IN_0 <= '0'; in_1_tb : process IN_1 <= '0'; IN_1 <= '1'; in_2_tb : process IN_2 <= '0'; IN_2 <= '1'; wait for 200 ns; wait for 200 ns; wait for 400 ns; wait for 400 ns; -- proces dla wejścia IN_1 -- proces dla wejścia IN_2 W wariancie z niezależnymi procesami można w razie potrzeby wygenerować sekwencję testową zawierającą zadaną liczbę zmian sygnałów. Przykład z użyciem pętli for przedstawiony jest poniżej. 2

Wariant 5 (niezależne procesy dla wejść, zadana liczba powtórzeń) in_0_tb : process -- proces dla wejścia IN_0 for i in 1 to 4 loop IN_0 <= '0'; in_1_tb : process for i in 1 to 2 loop IN_1 <= '0'; wait for 200 ns; IN_1 <= '1'; wait for 200 ns; -- proces dla wejścia IN_1 in_2_tb : process IN_2 <= '0'; IN_2 <= '1'; wait for 400 ns; wait for 400 ns; -- proces dla wejścia IN_2 3

W przypadku, gdy czasy stanu niskiego i wysokiego sygnałów testowych są jednakowe można ustawić stan początkowy sygnału a następnie cyklicznie zmieniać go na przeciwny. Wariant taki przedstawiono poniżej. Wariant 6 (niezależne procesy dla wejść, zadana liczba powtórzeń, negacja sygnału) in_0_tb : process -- proces dla wejścia IN_0 IN_0 <= '0'; for i in 1 to 8 loop IN_0 <= not IN_0; -- stan początkowy -- zmiana stanu na przeciwny in_1_tb : process -- proces dla wejścia IN_1 IN_1 <= '0'; for i in 1 to 4 loop wait for 200 ns; IN_1 <= not IN_1; -- stan początkowy -- zmiana stanu na przeciwny in_2_tb : process -- proces dla wejścia IN_2 IN_2 <= '0'; for i in 1 to 2 loop wait for 400 ns; IN_2 <= not IN_2; -- stan początkowy -- zmiana stanu na przeciwny Przykład 2 Układ o trzech wejściach w postaci wektora IN_V (na schemacie użyta magistrala). 4

Wariant 1 (współbieżny) IN_V <= 000, 001 after 100 ns, 010 after 200 ns, 011 after 300 ns, 100 after 400 ns, 101 after 500 ns, 110 after 600 ns, 111 after 700 ns, 000 after 800 ns; Wariant 2 (proces) tb : process IN_V <= 000 ; IN_V <= 001 ; IN_V <= 010 ; IN_V <= 011 ; IN_V <= 100 ; IN_V <= 101 ; IN_V <= 110 ; IN_V <= 111 ; IN_V <= 000 ; -- opcja Wariant 3 (proces z pętlą) tb : process for i in 0 to 7 loop IN_V <= std_logic_vector(to_unsigned(i, 3)); IN_V <= 000 ; -- opcja Przykład 3 Dla licznika chcemy wygenerować sygnał zerujący (impuls o długości 50 ns, początek w punkcie 50 ns) oraz dwa impulsy zegarowe o okresie 50 + 50 ns, początek pierwszego 150 ns) CLR sygnał zerujący CLK sygnał zegarowy 5

Wariant 1 (współbieżny) CLR <= 0, 1 after 50 ns, 0 after 100 ns; CLK <= 0, 1 after 150 ns, 0 after 200 ns, 1 after 250 ns, 0 after 300 ns; Wariant 2 (jeden proces) tb_clr_clk : process CLR <= 0 ; CLK <= 0 ; CLR <= 1 ; CLR <= 0 ; CLK <= 1 ; CLK <= 0 ; CLK <= 1 ; CLK <= 0 ; -- proces dla sygnałów CLR i CLK Wariant 3 (niezależne procesy dla CLR i CLK) tb_clr : process CLR <= '0'; CLR <= '1'; CLR <= '0'; -- proces dla sygnału CLR -- czas rozpoczęcia zerowania -- czas sygnału zerującego tb_clk : process CLK <= '0'; wait for 150 ns; for i in 1 to 2 loop CLK <= '1'; CLK <= '0'; -- proces dla sygnału CLK -- czas do pierwszego zbocza narastającego -- pętla określająca liczbę impulsów -- czas poziomu wysokiego impulsu -- czas poziomu niskiego impulsu 6

Symulacja odbioru danych RS232 Symulacja jest możliwa również przy testowaniu układów zawierających układ odbiornika RS (moduł RS232_RX). Załóżmy, że układ testowy zawiera moduł RS232_RX podłączony jak na poniższym schemacie: Aby przeprowadzić symulację takiego układu konieczne będzie wygenerowanie na linii odbiornika RS_RX przebiegów testowych, odzwierciedlających dane odbierane w postaci szeregowej: RS_RX D0 D1 D2 D3 D4 D5 D6 D7 START Odbiór bajtu rozpoczyna się po zmianie stanu linii RS_RX z 1 (stan pasywny) na 0 (bit START = 0). Po bicie startu odbierane są kolejne bity danych (8 bitów, w kolejności od najmłodszego do najstarszego) oraz bit STOP = 1. Po bicie stopu może od razu pojawić się bit startu kolejnego bajtu, ale linia odbiornika może również utrzymywać się w stanie pasywnym przez dowolnie długi czas (brak transmisji danych). Symulacja odbioru kilku bajtów wymaga wygenerowania odpowiednich przebiegów na trzech liniach: CLR - reset odbiornika (jednorazowo) CLK_XT - zegar sterujący pracą modułu RS232_RX (przebieg okresowy) RS_RX - przebiegi symulujące odbierane dane Aby symulować odbiór danych trzeba znać powiązanie częstotliwości taktującej moduł RS232_RX z prędkością transmisji (liczbę taktów zegara przypadającą na jeden bit). W układzie docelowym (na płytce ZL-9572) mamy: CLK_XT = 1.8432 MHz (okres zegara = 542 534 ps) prędkość transmisji szeregowej BAUD = 115 200 bps Wynika z tego, że liczba okresów zegara przypadająca na jeden bit jest równa: BIT_CLOCKS = 1 843 200 Hz / 115 200 bps = 16 STOP Poniżej podane zostaną wskazówki jak zmodyfikować wygenerowany automatycznie wzorzec modułu testowego (VHDL Test Bench). Dla przejrzystości podane poniżej parametry zostaną zdefiniowane jako stałe: 7

constant BIT_CLOCKS : positive := 16; constant CLK_XT_PERIOD : time := 542534 ps; constant BIT_PERIOD : time := BIT_CLOCKS * CLK_XT_PERIOD; constant SIM_CLOCKS : positive := 810; Stała SIM_CLOCKS określa długość symulacji w cyklach zegarowych i powinna być dostosowana do liczby symulowanych bajtów. Każdy bajt zawiera 10 bitów (8 bitów danych oraz bity startu i stopu). Zakładając, że pomiędzy odbieranymi bajtami nie ma dodatkowych opóźnień czas odbioru n bajtów jest równy: SIM_CLOCKS = n * 10 * BIT_CLOCKS = n * 160 Wartość tę trzeba zwiększyć o czas wymagany na reset układu i ewentualną zwłokę przed rozpoczęciem symulacji odbioru danych (przeliczone na okresy zegara). Aby symulacja odbioru kilku różnych bajtów była prosta i wygodna zdefiniowana została procedura sim_rx_byte. Jako argumenty procedura przyjmuje wartość odbieranego bajtu oraz linię, na której powinien być wystawiony w postaci szeregowej podany bajt. ------------------------------------------------------------------------------------------------------ -- Simulate received byte: RX_BYTE - received byte, RX_LINE - receiver line ------------------------------------------------------------------------------------------------------ procedure sim_rx_byte (constant RX_BYTE : in STD_LOGIC_VECTOR; signal RX_LINE : out STD_LOGIC) is RX_LINE <= '0'; wait for BIT_PERIOD; -- START bit for i in RX_BYTE'reverse_range loop RX_LINE <= RX_BYTE(i); wait for BIT_PERIOD; -- DATA bit i = 0.. 7 RX_LINE <= '1'; wait for BIT_PERIOD; end procedure sim_rx_byte; -- STOP bit Definicje stałych oraz procedury należy umieścić w bloku architektury (po definicji COMPONENT i sygnałów a przed blokiem BEGIN... END. Wewnątrz bloku powinny być umieszczone definicje procesu tb_clk (symulacja CLK_XT) oraz głównego procesu tb_rx. tb_clk : process CLK_XT <= '0'; for i in 1 to SIM_CLOCKS loop CLK_XT <= '0'; wait for CLK_XT_PERIOD/2; CLK_XT <= '1'; wait for CLK_XT_PERIOD/2; 8

tb_rx : process RS_RX <= '1'; CLR <= '1'; CLR <= '0'; wait for 500 ns; -- RS_RX w stanie pasywnym -- czas sygnału zerującego sim_rx_byte(x"30", RS_RX); -- '0' 30h sim_rx_byte(x"41", RS_RX); -- 'A' 41h sim_rx_byte(x"31", RS_RX); -- '1' 31h sim_rx_byte(x"52", RS_RX); -- 'R' 52h sim_rx_byte(x"39", RS_RX); -- '9' 39h Poniżej pokazano dwa fragmenty wyników symulacji, kolejność sygnałów od góry: CLR CLK_XT RS_RX DO RDY Pierwszy fragment pokazuje końcowy etap odbioru pierwszego bajtu (30h). Na wykresie widać, że w trakcie odbioru dane na magistrali DO zmieniają się. Można zauważyć, że impuls RDY pojawia się jeszcze przed rozpoczęciem bitu stopu, z niewielkim przesunięciem w stosunku do środka najstarszego bitu danych. Widać również, że dane na magistrali DO (30h) utrzymują się aż do początku transmisji kolejnego bajtu (na początku bitu startu zmieniają się na FFh). Zmierzona długość impulsu RDY, zgodnie z oczekiwaniem, jest równa jednemu okresowi zegara CLK_XT. 9

Drugi fragment wyników symulacji ilustruje końcowy etap odbioru przedostatniego bajtu (52h) i pełny cykl odbioru ostatniego bajtu (39h). Pierwsza jedynka na linii RS_RX to bit stopu bajtu 52h, druga to bit D0 wartości 39h a trzecia jedynka o długości trzech bitów reprezentuje bity D3 - D4 - D5 bajtu 39h. Na wykresie zmierzony został czas pomiędzy kolejnymi impulsami RDY, czyli całkowity czas transmisji jednego bajtu. Jest on zgodny z oczekiwanym na podstawie teoretycznych obliczeń: 10 * BITS_CLOCKS * CLK_XT_PERIOD = 10 * 16 * 0.542534 µs = 86.80544 µs Warto zauważyć, że moduł RS232_RX dostępny jest tylko w postaci skompilowanej (pliki.ngc i.sym) dlatego opisane symulacje można przeprowadzić tylko w wariancie Post-Fit. Przy próbie symulacji typu Behavioral uzyskuje się stany niezdefiniowane na wyjściach modułu. 10