bocznej Tabela stanów sterownika Światła na drodze:

Podobne dokumenty
Projektowanie Scalonych Systemów Wbudowanych VERILOG

Synteza logiczna APSC

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

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

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.

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

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

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

Standardowe bloki funkcjonalne

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Wykład 4. Języki Opisu Sprzętu

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Układy cyfrowe w Verilog HDL. Elementy języka z przykładami. wersja: cz.3

Język VERILOG w praktyce

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Laboratorium Podstaw Techniki Cyfrowej

Systemy wbudowane. Projektowanie systemów wbudowanych na bazie układów CPLD/FPGA Język opisu sprzętu Verilog cz.1

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

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

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

Programowanie Mikrokontrolerów

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

Wykład 4. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Struktura i działanie jednostki centralnej

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.

Instrukcja do programu BASIC PR-02

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

Proste układy sekwencyjne

Programowalne układy logiczne kod kursu: ETD Podstawy języka Verilog W

Należy ściągnąć oprogramowanie Apache na platformę

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Układy VLSI Bramki 1.0

Układy sekwencyjne. Wstęp doinformatyki. Zegary. Układy sekwencyjne. Automaty sekwencyjne. Element pamięciowy. Układy logiczne komputerów

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

Cyfrowe układy scalone c.d. funkcje

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

(przykład uogólniony)

Układy kryptograficzne z uŝyciem rejestrów LFSR

Krótkie wprowadzenie do ModelSim i Quartus2

Kurs Podstawowy S7. Spis treści. Dzień 1

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

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

Konwencje językowe Verilog-a APSC

Projekt prostego procesora

Podstawowe części projektu w Javie

Język Verilog w projektowaniu układów FPGA

Programowalne układy logiczne kod kursu: ETD Układy kombinacyjne, przypisania, blokujące i nieblokujące cz.2 W

Część 4 życie programu

Programowany układ czasowy APSC

Sterownik procesorowy S-2 Komunikacja RS485 MODBUS

Automatyzacja i robotyzacja procesów produkcyjnych

Algorytmy sztucznej inteligencji

PROGRAMY STEROWANIA I WIZUALIZACJI II

Wykład 5. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

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

Podstawy programowania w środowisku Totally Integration Automation Portal

Język ludzki kod maszynowy

Sposoby projektowania systemów w cyfrowych

Algorytm. a programowanie -

Architektura komputerów Wykład 2

Zespół Szkół Technicznych. Badanie wyświetlaczy LCD

Wykład 3. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Programowanie mikrokontrolerów - laboratorium

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

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

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

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Ćwiczenie 7 Matryca RGB

Automat skończony FSM Finite State Machine

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Kurs Zaawansowany S7. Spis treści. Dzień 1

Sterowanie wyświetlacza LCD typu HD44780

Wstęp do Techniki Cyfrowej... Synchroniczne układy sekwencyjne

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

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

Programowalne układy logiczne

Opis procedur asemblera AVR

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Kurs Verilog cz.1 wstęp

Technika mikroprocesorowa. Konsola do gier

I - Microsoft Visual Studio C++

Języki projektowania HDL

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Elementy metod numerycznych - zajęcia 9

Konwerter 1 Wire > SPI opisany P R Ow JVerilogu

Przykłady do wykładu Języki modelowania i symulacji

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Statyczne badanie przerzutników - ćwiczenie 3

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

1 second UPS. Poziom trudności: łatwy. Wersja dokumentacji: 1.3. Aktualizacja: Beckhoff Automation Sp. z o. o.

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Uniwersalny asynchroniczny. UART Universal Asynchronous Receier- Transmiter

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

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

WEJŚCIE W TRYB PROGRAMOWANIA

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

Transkrypt:

Sterownik świateł na skrzyżowaniu APSC Specyfikacja: Sygnały świetne dla drogi głównej mają wyższy priorytet tzn. światła dla drogi głównej są domyślnie zielone Od czasu do czasu pojazdy z drogi bocznej nadjeżdżają. Światła musza zmienić się na zielone tylko na czas potrzebny na przejechanie skrzyżowania przez samochody z drogi bocznej. Jak już nie ma samochodów na drodze bocznej to światła dla tej drogi zmieniają się na żółte a potem czerwone przywracając zielone światło na drodze głównej. Istnieje czujnik wykrywający oczekujące samochody na drodze bocznej, który daje sygnał X=1 gdy samochody czekają, X=0 gdy nie ma samochodów. Pomiędzy kolejnymi stanami są opóźnienia, które trzeba dostrajać do potrzeb. S0 S1 S2 S3 S4 Stany Tabela stanów sterownika Zielony Żółty Światła na drodze: głównej Czerwony Czerwony Czerwony bocznej Czerwony Czerwony Czerwony Zielony Żółty

Sterownik świateł na skrzyżowaniu APSC Tabela stanów sterownika Stany Światła na drodze: głównej bocznej S0 zielony czerwony S1 Żółty Czerwony S2 Czerwony Czerwony S3 Czerwony Zielony S4 Czerwony Żółty X=0 S0 X=1 S4 S1 X=0 S3 S2 X=1

Sterownik świateł na skrzyżowaniu APSC `define TRUE 1'b1 `define FALSE 1'b0 `define RED 2'd0 `define YELLOW 2'd1 `define GREEN 2'd2 //DG - Droga Glowna //DB - Droga Boczna //definicje stanow DG DB `define S0 3'd0 //GREEN RED `define S1 3'd1 //YELLOW RED `define S2 3'd2 //RED RED `define S3 3'd3 //RED GREEN `define S4 3'd4 //RED YELLOW //opoznienia `define Y2RDELAY 3 //z zoltego do czerwonego `define R2GDELAY 2 //z czerwonego do zielonego

Sterownik świateł na skrzyżowaniu APSC module sig_control (dg, db, X, clock, clear); //porty output [1:0] dg, db; //2-bitowe wyjscie dla trojstanowych swiatel reg [1:0] dg, db; //deklaracja rejestrow input X; //X=1 oznacza, ze samochody czekaja na drodze bocznej input clock, clear; //zmienne wewnetrzne reg [2:0] state; reg [2:0] next_state; //stan poczatkowy to S0 initial state = `S0; next_state = `S0; dg = `GREEN; db = `RED; //zmiana stanu tylko na narastajacym zboczu zegara always @(posedge clock) state = next_state;

Sterownik świateł na skrzyżowaniu APSC always @(state) //obliczanie wartosci swiatel na obu drogach case(state) `S0: dg = `GREEN; db = `RED; `S1: dg = `YELLOW; db = `RED; `S2: dg = `RED; db = `RED; `S3: dg = `RED; db = `GREEN; `S4: dg = `RED; db = `YELLOW; case

Sterownik świateł c.d. APSC always @(state or clear or X) //automat skonczony if (clear) next_state = `S0; else case(state) `S0: if (X)next_state = `S1; else next_state = `S0; `S1: repeat(`y2rdelay) @(posedge clock); next_state = `S2; `S2: repeat(`r2gdelay) @(posedge clock); next_state = `S3; `S3: if (X) next_state = `S3; else next_state = `S4; `S4: repeat(`y2rdelay) @(posedge clock); next_state = `S0; default: next_state = `S0; case module

Sterownik świateł c.d. APSC module stimulus; //modul testowy wire [1:0] DG_SIG, DB_SIG; reg SAM_NA_DB; reg CLOCK, CLEAR; //konkretyzacja sterownika swiatel sig_control SC(DG_SIG, DB_SIG, SAM_NA_DB, CLOCK, CLEAR); initial //monitoring $monitor($time, "Droga Glowna = %b Droga Boczna = %b Samochody na bocznej = %b", DG_SIG, DB_SIG, SAM_NA_DB); initial //zegar CLOCK = `FALSE; forever #5 CLOCK = ~CLOCK; initial //kasowanie CLEAR = `TRUE; repeat (5) @(negedge CLOCK); CLEAR = `FALSE;

Sterownik świateł na skrzyżowaniu APSC initial //wymuszenie SAM_NA_DB = `FALSE; //na początku nie ma samochodów na bocznej #200 SAM_NA_DB = `TRUE; //w czasie 200 pojawiły się samochody #100 SAM_NA_DB = `FALSE; //po 100 jed. czasu odjechały #200 SAM_NA_DB = `TRUE; //w czasie 500 pojawiły się samochody #100 SAM_NA_DB = `FALSE; //w chwili 600 już odjechały #200 SAM_NA_DB = `TRUE; //w czasie 800 pojawiły się znów samochody #100 SAM_NA_DB = `FALSE; //w chwili 800 już odjechały #100 $stop; module

Sterownik świateł wyniki APSC 0 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 0 200 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 1 205 Droga Glowna = 01 Droga Boczna = 00 Samochody na bocznej = 1 235 Droga Glowna = 00 Droga Boczna = 00 Samochody na bocznej = 1 265 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 1 300 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 0 305 Droga Glowna = 00 Droga Boczna = 01 Samochody na bocznej = 0 335 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 0 500 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 1 505 Droga Glowna = 01 Droga Boczna = 00 Samochody na bocznej = 1 535 Droga Glowna = 00 Droga Boczna = 00 Samochody na bocznej = 1 565 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 1 600 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 0 605 Droga Glowna = 00 Droga Boczna = 01 Samochody na bocznej = 0 635 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 0 800 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 1 805 Droga Glowna = 01 Droga Boczna = 00 Samochody na bocznej = 1 835 Droga Glowna = 00 Droga Boczna = 00 Samochody na bocznej = 1 865 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 1 900 Droga Glowna = 00 Droga Boczna = 10 Samochody na bocznej = 0 905 Droga Glowna = 00 Droga Boczna = 01 Samochody na bocznej = 0 935 Droga Glowna = 10 Droga Boczna = 00 Samochody na bocznej = 0

Zadania i funkcje APSC Zadania (tasks) i funkcje to mechanizmy umożliwiające podzielenie dużych behawioralnych projektów na mniejsze kawałki - podprogramy, które mogą być wywoływane w różnych miejscach zamiast powtarzać fragmenty kodu. Funkcje Zadania Mogą udostępniać inne funkcje Zawsze wykonują się w chwili 0 Nie mogą zawierać opóźnień ani sterowania zdarzeniami Muszą posiadać co najmniej jeden argument wejściowy Zawsze zwracają pojedynczą wartość (nie posiadają argumentów typu wyjście lub wej-wyj) Mogą udostępniać zarówno funkcje jak i zadania Mogą wykonywać się w dowolnej chwili Mogą zawierać opóźnienia i sterowanie zdarzeniami Mogą nie mieć argumentów lub ich dowolną ilość zarówno typu wejściowego, wyjściowego lub wej-wyj. Nie zwracają wartości ale dostarczają wartości argumentów typu wyjście lub wej-wyj Funkcje i zadania nie mogą używać zmiennych typów węzłowych ani instrukcji initial i always.

Zadania APSC module operation; parameter delay = 10; reg [15:0] A, B; reg [15:0] AB_AND, AB_OR, AB_XOR; always @(A or B) bitwise_oper(ab_and, AB_OR, AB_XOR, A, B); //definicja zadania bitwise_oper task bitwise_oper; output [15:0] ab_and, ab_or, ab_xor; input [15:0] a, b; #delay ab_ = a & b; ab_or = a b; ab_xor = a ^ b; task module

Zadania APSC module sequence; reg clock; initial init_sequence; always asymmetric_sequence; //definicja zadania inicjującego task init_sequence; clock = 1 b0; task //wywołanie zadania inicjującego //wywołanie zadania skwencera //definicja zadania generującego sekwencję zegara task asymmetric _sequence; #12 clock = 1 b0; #5 clock = 1 b1; #3 clock = 1 b0; #1 clock = 1 b1; task module W tym przykładzie zadania działają bezpośrednio na zmiennej clock zdefiniowanej w module.

Funkcje APSC module parity; reg [31:0] addr; reg parity; //oblicz nową parzystość zawsze gdy zmieni się wartość adresu always @(addr) parity = calc_parity(addr); //wywołanie funkcji $display( obliczoan parzystość = %b, calc_parity(addr)); //definicja funkcji obliczającej parzystość function calc_parity; input [31:0] address; calc_parity = ^address; //xor wszystkich bitów w addr function module

Funkcje APSC module shifter; reg [31:0] addr; reg parity; `define LEFT_SHIFT 1 b0 `define RIGHT_ SHIFT 1 b1 reg [31:0] addr, left_addr, right_addr; reg control; //oblicz wartości przesunięte w prawo i w lewo //zawsze gdy zmieni się wartość adresu always @(addr) left_addr = shift(addr, LEFT_SHIFT); //wywołanie funkcji right_addr = shift(addr, RIGHT_SHIFT); //definicja funkcji shift zwraca 32-bitowa wartość function shift; input [31:0] address; input control; shift = (control == LEFT_SHIFT?(address<<1):(address>>1); function module

Obserwacja przebiegów czasowych Wynikiem symulacji są przebiegi czasowe. Obserwacja i analiza przebiegów czasowych wymaga użycia programu wyświetlającego je. W pakiecie LDV firmy Cadence jest nim Wyświetlacz Przebiegów (Waveform Viewer) stanowiący część większego środowiska analitycznego o nazwie SimVision. Zadania programu przygotowania danych SHM Program zarządzający wynikami z symulacji SHM (Simulation History Manager) jest grupą zadań systemowych służących do sterowania komunikacją między symulacjami Verilog-XL i bazą danych przechowującą dane dla programu wyświetlającego przebiegi czasowe, którym jest SimVision. Oznacza to,że musimy używać SHM jeśli chcemy przygotować wyniki symulacji do oglądania w postaci grafiki. Mamy do dyspozycji następujące zadania systemowe SHM: Zadania SHM $shm_open $shm_probe $shm_close $shm_susp $shm_resume Usługi oferowane przez zadania systemowe SHM Otwarcie bazy danych Specyfikacja sygnałów, których zmiany chcemy notwać w bazie danych Zamknięcie połączenia symulacji z bazą danych Czasowe zawieszenie zapisywania wartości do bazy Wznowienie zapisywania wartości do bazy danych

Zadania systemowe SHM $shm_open Otwarcie bazy danych za pomocą $shm_open $shm_open (["db_name"], [<is_sequence_time>], [<database_size>], [<is_compression>]) Argumenty: "db_name" Nazwa pliku z bazą danych. Jeśli ta nazwa nie jest podana przyjmowana jest domyślna waves.shm w bieżącym katalogu <is_sequence_time> Wyświetlaj wszystkie zdarzenia i przejścia sygnałów zachodzące w tym samy okresie czasu. Wartość 1 włącza tę cechę, 0 (domyslne) wyłącza. <database_size> Specyfikacja maksymalnej wielkości pliku przejść.trn (w bajtach) generowanego przez Verilog-XL. Co najmniej 2MB Wartość rekomowana to 10MB. Jeśli mu braknie to nadpisuje plik przejść. <is_compression> Wartość jeden powoduje kompresowanie pliku.trn generowanego przez Verilog-XL. Wartość domyślna 0 brak kompresji.

Zadania systemowe SHM $shm_probe Wybieranie sygnałów za pomocą $shm_probe $shm_probe( [scope1, "node_specifier1", scope2, "node_specifier2", ] ) Argumenty są nie obowiązkowe, ale nawiasy są konieczne. Brak argumentów oznacza, że notowane będą zmiany wszystkich zmiennych typu input, output i inout w bieżącym module. Argumentami mogą być: scope1, scope2, określenie zakresów (poziomów hierarchii lub urealnień), z których sygnały mają być zapamietywane. Domyślny jest zakres bieżący czuli moduł w którym zanjaduje się zadanie SHM. "node_specifier1", "node_specifier2", Jeden z pięciu znaczników, określających węzły, w których zmiany wartości są odnotowywane w SHM: A All nodes (including inputs, outputs and inouts) of the specified scope. S Inputs, outputs, and inouts of the specified scope, and in all instantiations below it, except inside library cells. C Inputs, outputs, and inouts of the specified scope, and in all instantiations below it, including inside library cells. AS All nodes (including inputs, outputs and inouts) of the specified scope, and in all instantiations below it, except inside library cells. AC All nodes (including inputs, outputs and inouts) in the specified scope and in all instantiations below it, even inside library cells.

Zadania systemowe SHM $shm_probe Zapisywanie zmian wartości wszystkich zmiennych typu input, output, i inout w bieżącym zakresie: $shm_probe(); Zapisywanie zmian wartości we wszystkich węzłach w bieżącym zakresie: $shm_probe( A ); Zapisywanie zmian wartości wszystkich zmiennych typu input, output, i inout w bieżącym zakresie alu i adder: $shm_probe(alu, adder); Zapisywanie zmian wartości wszystkich zmiennych typu input, output, i inout w bieżącym zakresie i poniżej wykluczając komórki biblioteczne. Dodatkowo zapamiętuj zmian wartości we wszystkich węzłach w zakresie top.alu i poniżej, włączając w to biblioteki: $shm_probe( S, top.alu, AC );

Wyświetlanie sygnałów jako graficznych przebiegów Analiza wejściowych i wyjściowych sygnałów w formie graficznej Przykład demonstruje jak stworzyć bazę SHM i wybrane sygnały zapisywać do niej w celu późniejszego analizowania za pomocą przeglądarki przebiegów z pakietu Simvision module test_flop; //moduł testowy dla przerzutnika reg data, clock; flipflop f1 (clock, data, qa, qb); initial clock = 0; data = 0; #10000 $shm_close(); //zamknij bazę po czasie 10000 $finish; initial $shm_open("db1.shm"); //otwarcie bazy SHM o nazwie db1.shm $shm_probe(clock); $shm_probe(data,qa,qb); $shm_probe(f1.nt1); always #100 clock = ~clock; always #300 data = ~data; module Zadanie $shm_probe specyfikuje, które sygnały mają być zapamiętywane w bazie SHM przez podanie nazw węzłów lub hierarchicznych nazw instansów, które zawierają węzły przeznaczone do analizy. Argumentami $shm_probe nie mogą być komórki prymitywne.

Wyświetlanie sygnałów jako graficznych przebiegów //model przerzutnika RS module flipflop (clock, data, qa, qb); input clock,data; output qa, qb; nand #10 nd1 (a, data, clock), nd2 (b, ndata, clock), nd3 (qa, a, qb), nd4 (qb, b, qa); mynot nt1 (ndata, data); module module mynot (out, in); output out; input in; not(out,in); module // mynot Moduł testowany w module z poprzedniego slajdu % verilog test_flop.v flipflop.v //symulacja % ls db1.shm //sprawdzenie czy baza SHM powstała db1.trn db1.dsn % simvision -waves db1.shm //wywołanie przeglądarki i //załadowanie bazy SHM