Projektowanie w VHDL

Podobne dokumenty
Projektowanie automatów z użyciem VHDL

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

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

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

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

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

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

Instrukcje sekwencyjne

Projektowanie hierarchiczne Mariusz Rawski

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

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

Język VHDL podstawy Mariusz Rawski

Synteza strukturalna

PUCY Kolos 2: Reloaded

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Projekt prostego procesora

Specyfika projektowania Mariusz Rawski

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

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

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

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

Programowalne układy logiczne

Sposoby projektowania systemów w cyfrowych

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

VHDL cz.1. Rafał Walkowiak IIn PP Wer

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

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

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

Podstawy techniki cyfrowej zima 2015 Rafał Walkowiak

Projektowanie Urządzeń Cyfrowych

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

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

Języki opisu sprzętu VHDL Mariusz Rawski

Systemy Czasu Rzeczywistego FPGA

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

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

Szkolenia specjalistyczne

Systemy Czasu Rzeczywistego FPGA

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

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. Automaty stanów

Systemy Czasu Rzeczywistego FPGA

Krótkie wprowadzenie do ModelSim i Quartus2

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.

Elementy języka VHDL

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

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

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

Realizacja logiki kombinacyjnej Mariusz Rawski

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

VHDL. Behawioralny Strukturalny Czasowy. Poziom RTL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

PODSTAWY BAZ DANYCH 13. PL/SQL

Układy Cyfrowe laboratorium

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

Kiedy i czy konieczne?

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

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

ELECTRIC IMPULSE DURATION MEASUREMENT USING VHDL LANGUAGE

Programowalne układy logiczne

Bloki anonimowe w PL/SQL

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

Projektowanie hierarchiczne Mariusz Rawski

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

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Instrukcje cykliczne (pętle) WHILE...END WHILE

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

Inżynieria Układów Programowalnych

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

DOKUMENTACJA PROJEKTU

Programowalne układy logiczne

Architektura komputerów Wykład 2

CZ1. Optymalizacja funkcji przełączających

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Projektowanie układów kryptograficznych Mariusz Rawski

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Układy reprogramowalne i SoC Specjalizowane moduły FPGA

Synteza strukturalna Mariusz Rawski

Podstawy Informatyki Elementarne podzespoły komputera

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

MMfpga01. MMfpga11. Instrukcja konfiguracji środowiska, przykładowy projekt oraz programowanie układu

LABORATORIUM ELEKTRONIKA Projektowanie koderów, transkoderów i dekoderów w języku VHDL

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Lista Rozkazów: Język komputera

1. ELEMENTY JĘZYKA PL/SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Właściwości i metody obiektu Comment Właściwości

Wstęp do programowania. Różne różności

Oracle PL/SQL. Paweł Rajba.

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

Programowalne układy logiczne

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

Transkrypt:

Projektowanie w VHDL powtórka wiadomości o języku VHDL słowa zastrzeżone typy danych, deklaracje obiektów instrukcje współbieżne i sekwencyjne pętle for, while typowe bloki układów cyfrowych przykłady syntezy układów cyfrowych Wykorzystano przykłady z: The Low-Carb VHDL Tutorial 24 by Bryan Mealy (8-27-24) PUE-w6 1

Słowa kluczowe (zastrzeżone) w VHDL access exit mod return while after file new signal with alias for next shared all function null then attribute generic of to block group on type body in open until buffer is out use bus label range variable PUE-w6 2

Operatory w VHDL logiczne not and or nand nor xor xnor relacji = /= < <= > >= przesunięć sll srl sla sra rol ror arytmetyczne + - * / mod rem ** abs konkatenacji & PUE-w6 3

Operatory przesunięć w VHDL Operator Nazwa Przykład Wynik simple ssl shift left wynik <= "11111" ssl 2 "111" arithmetic ssr shift right wynik <= "11111" ssr 3 "11" sla sra shift left arithmetic shift right arithmetic wynik <= "1111" sla 2 "111" wynik <= "1111" sra 3 "11" rotate rol rotate left wynik <= "11" rol 2 "11" ror rotate right wynik <= "111" ror 2 "111" PUE-w6 4

Często używane typy danych Typ Przykład std_logic signal my_sig : std_logic; std_logic_vector signal busa : std_logic_vector(3 downto ); wyliczeniowy type state_type is (ST,ST1,ST2,ST3); boolean variable my_test : boolean := false; integer signal iter_cnt : integer := ; PUE-w6 5

Deklaracje obiektów (danych) Obiekt Forma deklaracji sygnał signal nazwa_sygnału : typ_sygnału := wartość_początkowa; zmienna variable nazwa_zmiennej : typ_zmiennej := wartość_początkowa; stała constant nazwa_stałej : typ_stałej := wartość_początkowa; Obiekt Przykłady deklaracji sygnał signal sig_var1 : std_logic := ; signal tmp_bus : std_logic_vector( 3 downto ) := "11"; signal tmp_int : integer range -128 to 127 := ; signal my_int : integer; zmienna variable my_var1, my_var2 : std_logic; variable index_a : integer range ( to 255) := ; variable index_b : integer := -34; stała constant sel_val : std_logic_vector(2 downto ) := "1"; constant max_cnt : integer := 12; PUE-w6 6

Instrukcje współbieżne i sekwencyjne w VHDL Instrukcje współbieżne Współbieżne przypisanie sygnału sygnał <= wyrażenie DAT <= (D AND E) OR (F AND G); Warunkowe przypisanie sygnału sygnał <= wyrazenie when warunek else wyrazenie when warunek else wyrazenie; F3 <= '1' when (L='' AND M='') else '1' when (L='1' AND M='1') else ''; <-> <-> Instrukcje sekwencyjne Przypisanie sygnału sygnał <= wyrażenie DAT <= (D AND E) OR (F AND G); Instrukcja if if warunek then instrukcje elsif warunek then instrukcje else instrukcje end if; if (S = "11") then F <= D(3); elsif (S = "1") then F <= D(2); elsif (S = "1") then F <= D(1); else F <= D(); end if; PUE-w6 7

Instrukcje współbieżne i sekwencyjne w VHDL Instrukcje współbieżne Selektywne przypisanie sygnału with (wybór ) select sygnał <= wyrażenie whenwartosci_wyboru, wyrażenie whenwartosci_wyboru; wyrażenie when others; with SEL select MX_OUT <= D3 when "11", D2 when "1", D1 when "1" "", '' when others; <-> Instrukcje sekwencyjne Instrukcja case case (wyrazenie ) is when wartosci_wyboru => {instrukcje sekwencyjne} when wartosci_wyboru => {instrukcje sekwencyjne} when others => -- (opcja) {instrukcje sekwencyjne} end case; case (ABC) is when "1" => F <= "1"; when "11" => F <= "1"; when "111" => F <= "11"; when others => F <= ""; end case; PUE-w6 8

Instrukcje współbieżne i sekwencyjne w VHDL Instrukcje współbieżne Instrukcje sekwencyjne Instrukcja process <-> etykieta: process(lista_wrażliwości ) {instrukcje_sewencyjne } end process etykieta; proc1: process( A, B, C ) if ( A = '1' and B = '' ) then F_OUT <= '1'; elsif (B = '1' and C = '1') then F_OUT <= '1'; else F_OUT <= ''; end if; end process proc1; PUE-w6 9

Pętle for, while ; instrukcja exit Pętla for etykieta: for index in zakres loop instrukcje sekwencyjne... end loop etykieta; p1: for i in to A'length -1 loop end loop p1; B(i) <= not A(i); variable suma : integer := ; for licznik in to 5 loop end loop; if (suma = 2) then exit; end if; suma := suma + 1; Pętla while etykieta: while (warunek) loop instrukcje sekwencyjne... end loop etykieta; zegar: while flaga loop zegar <= not zegar; wait for okres_zegara/2; end loop zegar; variable suma : integer := ; while (suma < 3) loop exit when (suma = 2); suma := suma + 1; end loop; PUE-w6 1

Typowe bloki cyfrowe: rejestr równoległy -- Rejestr 8-bitowy, z sygnałem ChipSelect (CS) -- sygnały: -- CLK,CS: in STD_LOGIC; -- D_IN: in STD_LOGIC_VECTOR(7 downto ); -- D_OUT: out STD_LOGIC_VECTOR(7 downto ); process (CLK,CS) if (CS = '1' and rising_edge(clk)) then D_OUT <= D_IN; end if; end process; PUE-w6 11

Typowe bloki cyfrowe: licznik -- Licznik synchroniczny 2-kierunkowy z asynchronicznym -- zerowaniem i synchronicznym ładowaniem równoległym. -- CLK, RESET, LOAD, UP: in STD_LOGIC; -- DIN : in STD_LOGIC_VECTOR(7 downto ); -- COUNT : inout STD_LOGIC_VECTOR(7 downto ); process (CLK, RESET) if (RESET = '1') then COUNT <= ""; elsif (rising_edge(clk)) then if (LOAD = '1') then COUNT <= DIN; else if (UP = '1') then COUNT <= COUNT + 1; end if; end if; end process; else COUNT <= COUNT - 1; end if; PUE-w6 12

Typowe bloki cyfrowe: rejestr przesuwny -- Jednokierunkowy rejestr przesuwny z synchronicznym -- ładowaniem równoległym -- CLK, D_IN, P_LOAD: in STD_LOGIC; -- P_LOAD_DATA: in STD_LOGIC_VECTOR(7 downto ); -- D_OUT: out STD_LOGIC; signal REG_TMP: STD_LOGIC_VECTOR(7 downto ); process (CLK) if (rising_edge(clk)) then if (P_LOAD = '1') then else end if; end if; REG_TMP <= P_LOAD_DATA; REG_TMP <= REG_TMP(6 downto ) & D_IN; D_OUT <= REG_TMP(3); end process; PUE-w6 13

Typowe bloki cyfrowe: komparator -- Komparator 8-bitowy, zrealizowany sekwencyjnie (!) -- CLK: in STD_LOGIC; -- A_IN, B_IN : in STD_LOGIC_VECTOR(7 downto ); -- ALB, AGB, AEB : out STD_LOGIC process(clk) if (rising_edge(clk)) then if ( A_IN < B_IN ) then ALB <= '1'; else ALB <= ''; end if; if ( A_IN > B_IN ) then AGB <= '1'; else AGB <= ''; end if; if ( A_IN = B_IN ) then AEB <= '1'; else AEB <= ''; end if; end if; end process; PUE-w6 14

Typowe bloki cyfrowe: dekoder BCD na 7seg. -- Dekoder BCD na 7-segmentowy (implementacja kombinacyjna) -- Wyjscia aktyne stanem niskim; -- BCD_IN : in STD_LOGIC_VECTOR(3 downto ); -- SSEG : out STD_LOGIC_VECTOR(6 downto ); --a,b,c,..g with BCD_IN select SSEG <= "1" when "", -- "11111" when "1", -- 1 a "11" when "1", -- 2 "11" when "11", -- 3 "111" when "1", -- 4 f g b "11" when "11", -- 5 "1" when "11", -- 6 "1111" when "111", -- 7 "" when "1", -- 8 "1" when "11", -- 9 "1" when "11", -- A "11" when "111", -- b "111" when "11", -- C "11" when "111", -- d "11" when "111", -- E "111" when "1111", -- F e d c "1111111" when others; -- wylacza wszystkie LED PUE-w6 15

Typowe bloki cyfrowe: multiplekser -- Multiplekser 4:1,implementacja z CASE (inne: w PUE_w4) -- SEL: in STD_LOGIC_VECTOR(1 downto ); -- A, B, C, D : in STD_LOGIC; -- MUX_OUT : out STD_LOGIC; process (SEL, A, B, C, D) case SEL is when "" => MUX_OUT <= A; when "1" => MUX_OUT <= B; when "1" => MUX_OUT <= C; when "11" => MUX_OUT <= D; when others => NULL; end case; end process; PUE-w6 16

Typowe bloki cyfrowe: dekoder -- Dekoder 3/8 (implementacja z przypisaniem selektywnym) --------------------------------------------------- -- D_IN: in STD_LOGIC_VECTOR (2 downto ); -- FOUT: out STD_LOGIC_VECTOR(7 downto ); --------------------------------------------------- with D_IN select F_OUT <= "1" when "", "1" when "1", "1" when "1", "1" when "11", "1" when "1", "1" when "11", "1" when "11", "1" when "111", "" when others; PUE-w6 17

Projekt detektora ciągu bitów Zadanie: zaprojektować detektor ciągu bitów : 1,,1, pojawiających się szeregowo na wejściu danych x. 1. "Czarna skrzynka" i opis jednostki w VHDL x clk reset det11 y ------------------------------------------------- -- Projekt det11: detektor ciagu bitow : 1,,1, -- (przyklad z [1],L8.4) -- library ieee; use ieee.std_logic_1164.all; entity det11 is port ( x,clk,reset : in std_logic; y : out std_logic); end entity det11; PUE-w6 18

Projekt detektora ciągu bitów (2) 2. Graf stanów detektora (automat Moore'a): stany: s - nie wystąpił pierwszy element ciągu; y= s1 - wystąpił pierwszy element ciągu; y= s2 - wystąpiły dwa elementy ciągu; y= s3 - wystąpiły trzyi elementy ciągu; y= s4 - wystąpił cały ciąg; y=1 reset 1 1 s 1 s1 s2 1 s3 s4 1 1 PUE-w6 19

Projekt detektora ciągu bitów (3) 3. Architektura: - deklaracje stanów, - funkcja wyjścia reset s 1 1 1 s1 s2 1 s3 s4 1 1 architecture det11a1 of det11 is type stan is (s, s1, s2, s3, s4); signal s : stan; wyjscia: process( s ) case s is when s4 => y <= '1'; when others => y <= ''; end case; end process wyjscia; --stany : process(clk, x, reset); -- na nastepnym slajdzie PUE-w6 2

Projekt detektora ciągu bitów (4) 4. Architektura - funkcje przejść stanów reset s 1 1 1 s1 s2 1 s3 s4 1 1 stany : process(clk, x, reset) if reset='1' then s <= s; end if; case s is when s=> if x='1' then s<=s1; else s<=s; end if; when s1=> if x='' then s<=s2; else s<=s1; end if; when s2=> if x='1' then s<=s3; else s<=s; end if; when s3=> if x='' then s<=s4; else s<=s1; end if; when s4=> if x='1' then s<=s1; else s<=s; end if; when others => s <= s; --(awaryjnie) end case; end process stany; end architecture det11a1; PUE-w6 21

Projekt sygnalizatora świateł (1) Zadanie: Zaprojektować (uproszczony) system sygnalizatora świateł na skrzyżowaniu tramwaju z przejściem dla pieszych. Każdy sygnalizator ma dwa światła: czerwone (TC, PC) i zielone (TZ, PZ). Normalnie piesi mają światło zielone (PZ), tramwaj czerwone (TC). Gdy tramwaj zbliża się do przejścia, światła zmieniają się na przeciwne i pozostają tak, aż tramwaj nie opuści skrzyżowania po przeciwnej stronie. W podtorzu, w odpowiedniej odległości po obu stronach przejścia umieszczone są czujniki CL, CP sygnalizujące stanem wysokim obecność tramwaju. Założyć, że tramwaj może nadjechać tylko z lewej strony. Rozszerzenia: 1. Uwzględnić możliwość ruchu dwukierunkowego tramwajów 2. Uwzględnić stan awaryjny (wszystkie światła wyłączone) PC,PZ TC,TZ CL TC,TZ PC,PZ CP PUE-w6 22

Projekt sygnalizatora świateł (2) -------------------------- -- CzeZie: swiatla na CL TC CzeZie -- przejsciu przez tory CP TZ ------------------------- clk PC library ieee; (reset) PZ use ieee.std_logic_1164.all; entity CzeZie is port ( CL,CP,clk,reset : in std_logic; TZ,TC,PZ,PC : out std_logic); end entity CzeZie; architecture CzeZieMin of CzeZie is type stan is ( STZ, SPZ ) ; --StanTramwajZielone, signal s : stan; signal CLP : std_logic_vector(1 downto ); swiatla: process(s) -- wyjścia Moore'a if s=stz then TZ<='1'; TC<=''; PZ<=''; PC<='1'; else TZ<=''; TC<='1'; PZ<='1'; PC<=''; end if; end process swiatla; PUE-w6 23

Projekt sygnalizatora świateł (3) CL,CP reset 1 (inne) SPZ 11 STZ 11 (inne) stan TZ,TC,PZ,PC 1 stany: process(clk, CL, CP, reset) if reset then s<= SPZ; end if; CLP <= CL & CP; case s is when SPZ => if CLP="1" then s<=stz ; end if; when STZ => if CLP="1" then s<=spz; end if; end case; end process stany; end architecture CzeZieMin; PUE-w6 24