Projektowanie hierarchiczne Mariusz Rawski

Podobne dokumenty
Projektowanie hierarchiczne Mariusz Rawski

Projektowanie złożonych układów cyfrowych

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

Cyfrowe przetwarzanie sygnałów Mariusz Rawski

Realizacja logiki kombinacyjnej Mariusz Rawski

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

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

Projekt prostego procesora

Synteza strukturalna Mariusz Rawski

Sposoby projektowania systemów w cyfrowych

Specyfika projektowania Mariusz Rawski

Projektowanie automatów z użyciem VHDL

Projektowanie układów kryptograficznych Mariusz Rawski

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

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

Systemy Czasu Rzeczywistego FPGA

PUCY Kolos 2: Reloaded

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

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

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Systemy Czasu Rzeczywistego FPGA

Projektowanie Urządzeń Cyfrowych

Języki opisu sprzętu VHDL 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

Projektowanie w VHDL

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Krótkie wprowadzenie do ModelSim i Quartus2

Układy Cyfrowe laboratorium

Programowalne układy logiczne

DOKUMENTACJA PROJEKTU

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

Synteza strukturalna

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.

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

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

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

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

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

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

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

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

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

KURS Hexcalcul (2) Implementacja kalkulatora kodu BCD na Hex w układzie programowalnym

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

Programowalne układy logiczne

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

Podstawy techniki cyfrowej zima 2015 Rafał Walkowiak

Instrukcje sekwencyjne

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

SART transmisja szeregowa z wykorzystaniem RS-232 Mariusz Rawski

Systemy Czasu Rzeczywistego FPGA

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

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

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

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 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 Specjalizowane moduły FPGA

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

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

Zakład Cyberbezpieczeństwa, Instytut Telekomunikacji, Politechnika Warszawska,

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

VHDL cz.1. Rafał Walkowiak IIn PP Wer

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

Elementy języka VHDL

Układy FPGA w przykładach, część 2

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

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

Bezpieczeństwo informacji oparte o kryptografię kwantową

Programowalne układy logiczne

Język VHDL podstawy Mariusz Rawski

Hexcalcul (1) Implementacja kalkulatora kodu BCD na Hex w układzie programowalnym

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

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Sterowniki Programowalne (SP)

Realizacja własnych modułów IP Cores w srodowisku EDK

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

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

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

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

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

Język AHDL. Synteza strukturalna. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska H D L

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

VHDL. Behawioralny Strukturalny Czasowy. Poziom RTL

Implementacja algorytmu szyfrującego

SPIS TREŚCI. 2. Arytmetyka rozproszona Symulacja układu programowalnego Realizacja algorytmu cyfrowego filtrowania

LCD (Liquid Crystal Display)

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

Elektrotechnika II Stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

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

PROTOTYPOWANIE UKŁADÓW ELEKTRONICZNYCH Programowalne układy logiczne FPGA Maciej Rosół, Katedra Automatyki AGH,

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH

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

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

Architektura systemów komputerowych. Ścieżka danych

Transkrypt:

CAD Projektowanie hierarchiczne rawski@tele.pw.edu.pl http://rawski.zpt.tele.pw.edu.pl/

Zamek elektroniczny: Elektroniczny zamek kod 4 cyfrowy kod wprowadzony z klawiatury ready sygnalizacja gotowości pracy, rozpoczęcie wprowadzania kodu zmienia ten sygnał na nieaktywny open sygnał otwarcia zamka Wprowadzenie poprawnego kodu otwiera zamek na określony czas Sterowanie klawiaturą numeryczna 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D open ready

Elektroniczny zamek schemat blokowy Kontroler klawiatury: podaje sygnał naciśnięcia klawisza podaje kod naciśniętego klawisza Wykrywanie sekwencji: analizuje kody klawiszy i wykrywa sekwencje kodową otwierającą zamek Układ czasowy: odmierza określony czas po otwarciu zamka i wysyła sygnał zamknięcia zamka 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D Kontroler klawiatury kod klawisza naciśnięty zamknij Wykrywanie sekwencji Układ czasowy otwarty open ready

Kontroler klawiatury: Kontroler klawiatury podanie sygnału aktywnego na linie kolejnych wierszy sprawdzanie linii kolumn w celu wykrycia sygnału aktywnego pochodzącego ze zwarcia styków klawisza col[ ] 1 2 3 A 4 5 6 B 7 8 9 C * 0 # D row[ ] Kontroler klawiatury key key_pulse

Kontroler klawiatury schemat blokowy Kontroler klawiatury: licznik generuje liczby 4 bitowe, 2 najstarsze bity sterują dekoderem, wystawiając sygnał aktywny na kolejne linie wierszy klawiatury 2 młodsze bity sterują multiplekserem przeglądając kolejne linie kolumn klawiatury wystąpienie na wyjściu multipleksera sygnału aktywnego sygnalizuje naciśnięcie klawisza zatrzymuje licznik kodem klawisza jest wartość licznika może się okazać konieczne przekodowanie col[ ] 1 2 3 A 4 5 6 B row[ ] q[1..0] q[3..0] key 7 8 9 C * 0 # D q[3..2] q[3..0] Licznik 4-bit stop key_pulse

Dekoder library ieee; use ieee.std_logic_1164.all; entity dec_2x4 is a : in std_logic_vector(1 downto 0 o : out std_logic_vector(3 downto 0) end dec_2x4; architecture data_flow of dec_2x4 is with a select o <= "0001" when "00", "0010" when "01", "0100" when "10", "1000" when "11"; end data_flow; Fitter Summary Top-level Entity Name dec_2x4 Family Stratix Device EP1S10F484C5 Total logic elements 4 / 10,570 ( < 1 % ) Total pins 6 / 336 ( 2 % ) Total virtual pins 0 Total memory bits 0 / 920,448 ( 0 % ) DSP block 9-bit elements 0 / 48 ( 0 % ) Total PLLs 0 / 6 ( 0 % ) Total DLLs 0 / 2 ( 0 % ) 6

Dekoder umieszczenie w bibliotece modułów Stworzenie nowego elementu bibliotecznego reprezentującego zaprojektowany dekoder Element reprezentowany jest przez symbol o takiej nazwie jak nazwa projektu Wykorzystywany w pliku graficznym

Multiplekser library ieee; use ieee.std_logic_1164.all; entity mux_2x4 is sel : in std_logic_vector(1 downto 0 data : in std_logic_vector(3 downto 0 o : out std_logic end mux_2x4; architecture data_flow of mux_2x4 is with sel select o <= data(0) when "00", data(1) when "01", data(2) when "10", data(3) when "11"; end data_flow; Fitter Summary Top-level Entity Name mux_2x4 Family Stratix Device EP1S10F484C5 Total logic elements 2 / 10,570 ( < 1 % ) Total pins 7 / 336 ( 2 % ) Total virtual pins 0 Total memory bits 0 / 920,448 ( 0 % ) DSP block 9-bit elements 0 / 48 ( 0 % ) Total PLLs 0 / 6 ( 0 % ) Total DLLs 0 / 2 ( 0 % )

Licznik 4 bitowy library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cnt_4 is rst clk ena : in std_logic; : in std_logic; : in std_logic; value : out std_logic_vector(3 downto 0) E`nd cnt_4; architecture data_flow of cnt_4 is signal counter : unsigned(3 downto 0 process(rst, clk) if rst = '1' then counter <= "0000"; elsif rising_edge(clk) then if ena = '1' then counter <= counter + 1; else counter <= counter; end if; end if; end process; value <= std_logic_vector(counter end data_flow; Fitter Summary Top-level Entity Name cnt_4 Family Stratix Device EP1S10F484C5 Total logic elements 5 / 10,570 ( < 1 % ) Total pins 7 / 336 ( 2 % ) Total virtual pins 0 Total memory bits 0 / 920,448 ( 0 % ) DSP block 9-bit elements 0 / 48 ( 0 % ) Total PLLs 0 / 6 ( 0 % ) Total DLLs 0 / 2 ( 0 % )

Licznik parametryzowany library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cnt_n is generic( WIDTH : natural := 8 rst : in std_logic; clk : in std_logic; ena : in std_logic; value : out std_logic_vector(width - 1 downto 0) end cnt_n; architecture data_flow of cnt_n is signal counter : unsigned(width - 1 downto 0 process(rst, clk) if rst = '1' then counter <= (others => '0' elsif rising_edge(clk) then if ena = '1' then counter <= counter + 1; else counter <= counter; end if; end if; end process; value <= std_logic_vector(counter end data_flow; Umieszczenie nazwy WIDTH w sekcji GENERIC pozwala na ustalenie tej wartości przez użytkownika Wielkość licznika zależy od wartości parametru WIDTH Wartości parametru WIDTH decyduje o budowie licznika Zapis (others => '0') pozwala uniezależnić się od wielkości licznika

Zalety parametryzacji modułów Stworzenie modułu parametryzowanego jest równoznaczne ze stworzeniem szablonu, na podstawie którego można tworzyć wiele bloków funkcjonalnych o różnej budowie W odróżnieniu od stałych (CONSTANTS) możliwe jest jednoczesne stworzenie różnych modułów wykorzystywanych w tym samym projekcie Do opisu modułów parametryzowanych wykorzystuje się często struktury języka VHDL pozwalające generować warunkowo kod modułu generate_label: for index_variable in range_low to range_high generate statement1; statement2; end generate; generate_label: if expression generate statement1; statement2; end generate;

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.my_std_lib.all; Licznik parametryzowany modulo k (1) entity cnt_mod_k is generic( MOD_VALUE: natural := 10 rst : in std_logic; clk : in std_logic; mode : in std_logic_vector(2 downto 0 value : out std_logic_vector(log2_ceil(mod_value) - 1 downto 0) end cnt_mod_k; architecture data_flow of cnt_mod_k is constant WIDTH : natural := log2_ceil(mod_value constant STOP : std_logic_vector(2 downto 0) := "000"; constant UP : std_logic_vector(2 downto 0) := "001"; constant DOWN : std_logic_vector(2 downto 0) := "010"; constant RESET : std_logic_vector(2 downto 0) := "100"; Umieszczenie nazwy MOD_VALUE w sekcji GENERIC pozwala na ustalenie tej wartości przez użytkownika Funkcja log2_ceil jest zdefiniowana w pakiecie my_std_lib Wartości parametru WIDTH decyduje o budowie licznika i jest obliczana na podstawie MOD_VALUE Stale opisujące tryby pracy signal counter_reg : unsigned(width - 1 downto 0 signal counter_next : unsigned(width - 1 downto 0 process(rst, clk) if rst = '1' then counter_reg <= (others => '0' elsif rising_edge(clk) then counter_reg <= counter_next; end if; end process;

Licznik parametryzowany modulo k (2) process(counter_reg, mode) case mode is when STOP => counter_next <= counter_reg; when UP => if counter_reg = MOD_VALUE - 1 then counter_next <= (others => '0' else counter_next <= counter_reg + 1; end if; when DOWN => if counter_reg = 0 then counter_next <= to_unsigned(mod_value-1, WIDTH) ; else counter_next <= counter_reg - 1; end if; when RESET => counter_next <= (others => '0' when others => counter_next <= counter_reg; end case; end process; value <= std_logic_vector(counter_reg end data_flow; Wartość parametru wykorzystywana jest do prawidłowego opisu modułu

Dekoder parametryzowany library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity dec_n is generic( WIDTH : natural := 2 a : in std_logic_vector(width - 1 downto 0 o : out std_logic_vector(2**width - 1 downto 0) end dec_n; architecture data_flow of dec_n is dec_gen: for i in 0 to 2**WIDTH - 1 generate o(i) <= '1' when a = std_logic_vector(to_unsigned(i, WIDTH)) else '0'; end generate; end data_flow; Umieszczenie nazwy WIDTH w sekcji GENERIC pozwala na ustalenie tej wartości przez użytkownika Wyjście o ma szerokość równą 2 WIDTH Wykorzystanie konstrukcji warunkowej generacji kodu do opisu działania modułu: o(0) <= '1' when a = std_logic_vector(to_unsigned(0, WIDTH)) else '0'; o(1) <= '1' when a = std_logic_vector(to_unsigned(1, WIDTH)) else '0'; o(2) <= '1' when a = std_logic_vector(to_unsigned(2, WIDTH)) else '0'; o(3) <= '1' when a = std_logic_vector(to_unsigned(3, WIDTH)) else '0';

Sterownik klawiatury realizacja Fitter Summary Top-level Entity Name kb_ctrl_sch Family Stratix Device EP1S10B672C6 Total logic elements 11 / 10,570 ( < 1 % ) Total pins 15 / 346 ( 4 % ) Total virtual pins 0 Total memory bits 0 / 920,448 ( 0 % ) DSP block 9-bit elements 0 / 48 ( 0 % ) Total PLLs 0 / 6 ( 0 % ) Total DLLs 0 / 2 ( 0 % )

Sterownik klawiatury działanie Naciśnięcie klawisza row = 0, col = 2 Zatrzymanie licznika i wygenerowanie sygnały naciśnięcia klawisza key_pulse. Numer klawisza dostępny na q Po zwolnieniu klawisza dalsze skanowanie klawiatury Naciśnięcie klawisza row = 3, col = 1

Sterownik klawiatury moduły parametryzowane Fitter Summary Top-level Entity Name kb_ctrl_p_sch Family Stratix Device EP1S10B672C6 Total logic elements 11 / 10,570 ( < 1 % ) Total pins 15 / 346 ( 4 % ) Total virtual pins 0 Total memory bits 0 / 920,448 ( 0 % ) DSP block 9-bit elements 0 / 48 ( 0 % ) Total PLLs 0 / 6 ( 0 % ) Total DLLs 0 / 2 ( 0 % )

Sterownik klawiatury opis VHDL (1) library ieee; use ieee.std_logic_1164.all; entity kb_ctrl is rst : in std_logic; clk : in std_logic; col : in std_logic_vector(3 downto 0 key_pulse : out std_logic; row : out std_logic_vector(3 downto 0 q : out std_logic_vector(3 downto 0) end kb_ctrl; architecture data_flow of kb_ctrl is component cnt_4 rst : in std_logic; clk : in std_logic; ena : in std_logic; value : out std_logic_vector(3 downto 0) end component; component dec_2x4 a : in std_logic_vector(1 downto 0 o : out std_logic_vector(3 downto 0) end component; Deklaracja komponentów wykorzystanych w danym module Sekcja port w deklaracji komponentu musi odpowiadać sekcji port w pliku definicji danego modułu component mux_2x4 sel : in std_logic_vector(1 downto 0 data : in std_logic_vector(3 downto 0 o : out std_logic end component;

Sterownik klawiatury opis VHDL (2) signal key_pulse_i : std_logic; signal q_i : std_logic_vector(3 downto 0 kb_cnt : cnt_4 port map( rst => rst, clk => clk, ena => (not key_pulse_i), value => q_i kb_mux : mux_2x4 port map( q_i(1 downto 0), col, key_pulse_i kb_dec : dec_2x4 port map( a => q_i(3 downto 2), o => row q <= q_i; key_pulse <= key_pulse_i; end data_flow; Sygnały wewnętrzne potrzebne do połączenia komponentów Konkretyzacja komponentu i mapowanie odzwierciedlające połączenie portów komponentu z otoczeniem Możliwe jest mapowanie przez podanie sygnałów podłączanych do portów bez podania nazw portów Ważna jest kolejność sygnałów Możliwe jest mapowanie przez podanie nazwy portów i sygnałów podłączanych do portów Kolejność nie jest ważna

Wykorzystanie modułów parametryzowanych (1) library ieee; use ieee.std_logic_1164.all; entity kb_ctrl is rst : in std_logic; clk : in std_logic; col : in std_logic_vector(3 downto 0 key_pulse : out std_logic; row : out std_logic_vector(3 downto 0 q : out std_logic_vector(3 downto 0) end kb_ctrl; architecture data_flow of kb_ctrl is component cnt_n generic( WIDTH : natural := 8 rst : in std_logic; clk : in std_logic; ena : in std_logic; value : out std_logic_vector(width - 1 downto 0) end component; Deklaracja komponentów wykorzystanych w danym module Komponent parametryzowany component dec_2x4 a : in std_logic_vector(1 downto 0 o : out std_logic_vector(3 downto 0) end component;

Wykorzystanie modułów parametryzowanych (2) signal key_pulse_i : std_logic; signal q_i : std_logic_vector(3 downto 0 kb_cnt : cnt_n generic map( WIDTH => 4 ) port map( rst => rst, clk => clk, ena => (not key_pulse_i), value => q_i Sygnały wewnętrzne potrzebne do połączenia komponentów Konkretyzacja komponentu i mapowanie odzwierciedlające połączenie portów komponentu z otoczeniem jak również mapowanie parametrów kb_mux : mux_2x4 port map( q_i(1 downto 0), col, key_pulse_i

Wykorzystanie pakietów (1) library ieee; use ieee.std_logic_1164.all; package digit_lock is component cnt_n generic( WIDTH : natural := 8 rst : in std_logic; clk : in std_logic; ena : in std_logic; value : out std_logic_vector(width - 1 downto 0) end component; Plik digit_lock definiuje pakiet Deklaracja komponentów component mux_2x4 sel : in std_logic_vector(1 downto 0 data: in std_logic_vector(3 downto 0 o : out std_logic end component; component dec_2x4 a : in std_logic_vector(1 downto 0 o : out std_logic_vector(3 downto 0) end component; end digit_lock; package body digit_lock is Ciało pakietu puste w tym przypadku end digit_lock;

Wykorzystanie pakietów (2) library ieee; use ieee.std_logic_1164.all; use work.digit_lock.all; Wykorzystanie pakietu digit_lock entity kb_ctrl_pckg is rst : in std_logic; clk : in std_logic; col : in std_logic_vector(3 downto 0 key_pulse : out std_logic; row : out std_logic_vector(3 downto 0 q : out std_logic_vector(3 downto 0) end kb_ctrl_pckg; architecture data_flow of kb_ctrl_pckg is Nie ma potrzeby deklaracji komponentów signal key_pulse_i : std_logic; signal q_i : std_logic_vector(3 downto 0 kb_cnt : cnt_n generic map( WIDTH => 4 ) port map( rst => rst, clk => clk, ena => (not key_pulse_i), value => q_i Pozostała część bez zmian