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

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

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

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

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

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

Projektowanie w VHDL

Projektowanie hierarchiczne Mariusz Rawski

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

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

VHDL. Behawioralny Strukturalny Czasowy. Poziom RTL

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

Sposoby projektowania systemów w cyfrowych

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

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

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

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Projektowanie automatów z użyciem VHDL

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

Programowalne układy logiczne

Języki opisu sprzętu VHDL Mariusz Rawski

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

Język VHDL podstawy Mariusz Rawski

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

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

Projekt prostego procesora

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

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

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.

Specyfika projektowania Mariusz Rawski

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.

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Systemy Czasu Rzeczywistego FPGA

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

Systemy Czasu Rzeczywistego FPGA

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

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

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

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

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

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

Systemy Czasu Rzeczywistego FPGA

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów

Instrukcje sekwencyjne

Projektowanie Urządzeń Cyfrowych

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

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

Krótkie wprowadzenie do ModelSim i Quartus2

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

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

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

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Wstęp do programowania

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

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

Elementy języka VHDL

VHDL cz.1. Rafał Walkowiak IIn PP Wer

LibreOffice Calc VBA

Programowanie obiektowe

Programowanie strukturalne

PUCY Kolos 2: Reloaded

Układy reprogramowalne i SoC Specjalizowane moduły FPGA

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

DZIESIĘTNY SYSTEM LICZBOWY

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

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

Wstęp do programowania 2

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

Programowanie RAD Delphi

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

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Podstawy programowania skrót z wykładów:

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

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

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

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

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

Bloki anonimowe w PL/SQL

Technologie informacyjne (3) Zdzisław Szyjewski

ARCHITEKTURA KOMPUTERÓW. Reprezentacja danych w komputerach

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

Inżynieria Układów Programowalnych

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

Technologie informacyjne (3) Zdzisław Szyjewski

Realizacja logiki kombinacyjnej Mariusz Rawski

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

DOKUMENTACJA PROJEKTU

Programowalne układy logiczne

1. ELEMENTY JĘZYKA PL/SQL

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

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Transkrypt:

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

Program wykładu VHDL przykłady VHDL jednostki projektowe VHDL pojęcia leksykalne VHDL opis strukturalny 2

VHDL przykład: licznik entity Counter is port ( CLK: in STD_LOGIC; RESET: in STD_LOGIC; Q: out STD_LOGIC_VECTOR (3 downto 0) ); end Counter; architecture Counter_Arch of Counter is begin process (CLK, RESET) variable Qint: STD_LOGIC_VECTOR (3 downto 0); begin if RESET='1' then Qint := "0000"; elsif CLK'event and CLK='1' then if Qint < 9 then Qint := Qint + 1; else Qint := "0000"; end if; end if; Q <= Qint; end process; end Counter_Arch ; 3

VHDL jednostki projektowe Jednostki projektowe Biblioteki entity architecture configuration package kompilator VHDL entity architecture configuration package 4

Deklaracje entity i architecture -- deklaracja entity definiuje komponent -- i jego połączenie ze światem zewnętrznym entity ENTITY_NAME is port ( < PORT_NAME: <mode> <type>; > ); end ENTITY_NAME; -- deklaracja architecture definiuje sposób działania -- komponentu, do którego się odwołuje architecture ARCH_NAME of ENTITY_NAME is begin <statements> end ARCH_NAME; 5

Deklaracje entity i architecture entity xyz architecture beh of xyz (behavioral) architecture dat of xyz (dataflow) architecture str of xyz (structural) -- Przykład komparator entity COMPARE is port (A,B: in bit; C: out bit); end COMPARE; 6

Deklaracja architecture behavioral -- Przykład komparator entity COMPARE is port (A,B: in bit; C: out bit); end COMPARE; -- deklaracja architecture (behavioral style) architecture arch_behavioral of COMPARE is begin -- współbieżne operatory przypisań process (A,B) -- A,B - sygnały aktywujące process begin -- sekwencyjne operatory przypisań if (A=B) then C <= 1 after 1 ns; else C <= 0 after 1 ns; end if; end process; end arch_behavioral; Zespół sekwencyjnych operacji, 7 opisujących zachowanie modelu.

Deklaracja architecture dataflow -- Przykład komparator entity COMPARE is port (A,B: in bit; C: out bit); end COMPARE; -- deklaracja architecture (dataflow style) architecture arch_dataflow of COMPARE is begin -- współbieżne operatory przypisań C <= not (A xor B) after 1 ns; end arch_dataflow ; Zespół współbieżnych przypisań, 8 opisujących przepływ danych.

Deklaracja architecture structural -- Przykład komparator entity COMPARE is port (A,B: in bit; C: out bit); end COMPARE; -- deklaracja architecture (structural style) architecture arch_structural of COMPARE is signal I: bit; component XOR2 port (x,y: in bit; z: out bit); end component; component INV port (x:in bit; z: out bit); end component; begin U0: XOR2 port map (A,B,I); U1: INV port map (I,C); end arch_structural; Zespół połączonych elementów, 9 opisujących strukturę modelu.

PRZYKŁAD zespół czterech komparatorów entity COMPARE is port (A,B: EQL: ); end COMPARE; architecture MY_FIRST of COMPARE is begin end MY_FIRST; A 4bity B 4bity COMPARE EQL(0) EQL(1) EQL(2) EQL(3) 10

PRZYKŁAD zespół czterech komparatorów entity COMPARE is port (A,B: in std_logic_vector (3 downto 0); EQL: out std_logic_vector (3 downto 0) ); end COMPARE; architecture MY_FIRST of COMPARE is begin EQL <= not (A xor B); end MY_FIRST; A 4bity B 4bity COMPARE EQL(0) EQL(1) EQL(2) EQL(3) 11

PRZYKŁAD dekoder kodu BCD entity BCD_DECODER is port (D: NINE,EIGHT,ONE,ZERO: ); end BCD_DECODER; architecture MY_FIRST of BCD_DECODER is begin D(3) NINE end MY_FIRST; D(2) D(1) D(0) DECODER EIGHT ONE ZERO 12

PRZYKŁAD dekoder kodu BCD entity BCD_DECODER is port (D: in std_logic_vector (3 downto 0); NINE,EIGHT,ONE,ZERO: out boolean); end BCD_DECODER; architecture MY_FIRST of BCD_DECODER is begin NINE <= (D= 1001 ); EIGHT <= (D= 1000 ); D(3) ONE <= (D= 0001 ); D(2) ZERO <= (D= 0000 ); end MY_FIRST; D(1) D(0) DECODER NINE EIGHT ONE ZERO 13

Jednostki projektowe: entity -- deklaracja entity definiuje komponent -- i jego połączenie ze światem zewnętrznym entity ENTITY_NAME is -- parametryzacja projektu <generic ( generic_interface_list );> -- deklaracje obiektów i typów dla danego entity -- (komponenty,podprogramy,funkcje,typy, podtypy,stałe) <entity item declarations>; -- deklaracja połączenia ze światem zewnętrznym port ( < PORT_NAME: <mode> <type_spec>; > < PORT_NAME: <mode> <type_spec>; > ); --(bardzo rzadko stosowane) <begin> -- pasywne procesy end <entity> <ENTITY_NAME>; 14

Jednostki projektowe: entity -- przykład deklaracji generic entity CPU is generic (BusWidth : Integer :=16); port(databus : inout Std_Logic_Vector(BusWidth-1 downto 0));... -- definicja sygnału wejściowego: -- tylko do odczytu czyli po prawej stronie przypisań port_signal_name : in port_signal_type := initial_value -- definicja sygnału wyjściowego: -- tylko do zapisu czyli po lewej stronie przypisań port_signal_name : out port_signal_type := initial_value -- definicja sygnału dwukierunkowego port_signal_name : inout port_signal_type := initial_value -- definicja sygnału dwukierunkowego ale sterowanie tylko -- z jednego źrodła (niesytezowalne) port_signal_name : buffer port_signal_type := initial_value -- definicja sygnału dwukierunkowego ale sterowanie tylko -- z innego portu typu linkage (niesytezowalne i NIE UŻYWAĆ) port_signal_name : linkage port_signal_type := initial_value 15

Przykład entity ------------------------------------------------------------------------------- -- Copyright (c) 1999 by Alatek. All rights reserved. -- DESIGN : AL8051 -- FILE NAME : AL8051.vhd -- AUTHOR : Anatoli Sergyienko, Volodymir Lepekha -- HISTORY : ------------------------------------------------------------------------------- library IEEE; use IEEE.Std_Logic_1164.all; library work; use work.registers.all; --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- I/O wires of the I8051 are the following --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ entity AL8051 is Port ( Port0: inout Std_Logic_Vector (7 downto 0); Port1: inout Std_Logic_Vector (7 downto 0); Port2: inout Std_Logic_Vector (7 downto 0); Port3: inout Std_Logic_Vector (7 downto 0); CLK: in Std_Logic; ALE: out Std_Logic; PSEN: out Std_Logic; EA: in Std_Logic; RST: in Std_Logic ); 16 end AL8051;

Jednostki projektowe: architecture -- deklaracja architecture definiuje sposób działania -- komponentu, do którego się odwołuje architecture ARCH_NAME of ENTITY_NAME is -- deklaracje obiektów i typów dla danej architecture: -- komponenty,podprogramy,funkcje,typy,podtypy,stałe. < architecture item declarations>; begin -- instrukcje współbieżne <statements> -- instrukcje: process, block,współbieżne przypisania -- osadzanie komponentów (ang. component instantiation) -- współbieżne wywołania podprogramów funkcji itp.. end < architecture > < ARCH_NAME>; 17

Przykład architecture -- D Flip-Flop -- CLK: in STD_LOGIC; -- DIN: in STD_LOGIC; -- DOUT: out STD_LOGIC; process (CLK) begin if CLK'event and CLK='1' then DOUT <= DIN; end if; end process; Przerzutnik D Konwerter kodu --HEX-to-seven-segment decoder -- HEX:in STD_LOGIC_VECTOR (3 downto 0); -- LED:out STD_LOGIC_VECTOR (6 downto 0); -- segment encoding -- 0 -- --- -- 5 1 -- --- <- 6 -- 4 2 -- --- -- 3 with HEX select LED<= "1111001" when "0001", --1 "0100100" when "0010", --2 "0110000" when "0011", --3 "0011001" when "0100", --4 "0010010" when "0101", --5 "0000010" when "0110", --6 "1111000" when "0111", --7 "0000000" when "1000", --8 "0010000" when "1001", --9 "0001000" when "1010", --A "0000011" when "1011", --B "1000110" when "1100", --C "0100001" when "1101", --D "0000110" when "1110", --E "0001110" when "1111", --F "1000000" when others; --0 18

Jednostki projektowe: configuration Deklaracja configuration pozwala na wybranie jednej z architektur dla danej entity. stanowi wygodny sposób dokumentowania wersji projektu. likwiduje konieczność rekompilacji całego projektu gdy wymagana jest zmiana tylko kilku komponentów. nazwa konfiguracji konfigurowana entity configuration MY of ALGORITHM is for STRUCT for U0:COMPARE use entity WORK.COMPARE(arch_dataflow); end for; end for; end MY; konfigurowany komponent konfigurowana architektura nazwa biblioteki wybrana architektura 19

Jednostki projektowe: package Deklaracja package Grupuje używane wspólnie deklaracje stałych, podprogramów, komponentów czy typów zmiennych. package my_constans is constant unit_delay: time := 1 ns; end my_constans; Y <= 0 after work.my_constans.unit_delay; package STANDARD W każdej implementacji VHDL pakiet ten definiuje m.in. typy danych, jak : bit, boolean, bit_vector, character, string, itp. 20

Przykład: package STANDARD -- This is Package STANDARD as defined in the VHDL 1992 Language Reference Manual. package standard is type boolean is (false,true); type bit is ('0', '1'); type character is ( nul, soh, stx, etx, eot, enq, ack, bel, bs, ht, lf, vt, ff, cr, so, si, dle, dc1, dc2, dc3, dc4, nak, syn, etb,... 'đ', 'ń', 'ň', 'ó', 'ô', 'ő', 'ö', ' ', 'ř', 'ů', 'ú', 'ű', 'ü', 'ý', 'ţ', ' ' ); type severity_level is (note, warning, error, failure); type integer is range -2147483647 to 2147483647; type real is range -1.0E308 to 1.0E308; type time is range -2147483647 to 2147483647 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min; end units; subtype delay_length is time range 0 fs to time'high; impure function now return delay_length; subtype natural is integer range 0 to integer'high; subtype positive is integer range 1 to integer'high; type string is array (positive range <>) of character; type bit_vector is array (natural range <>) of bit; type file_open_kind is ( read_mode, write_mode, append_mode); type file_open_status is ( open_ok, status_error, name_error, mode_error); attribute foreign : string; end standard; 21

Pojęcia leksykalne literały napisy reprezentujące dane - ze sposobu ich zapisu wynikają ich wszystkie właściwości, w tym ich wartości identyfikatory (nazwy) ciągi liter i cyfr, rozpoczynające się od litery obiekty sygnały, zmienne, stałe, pliki wyrażenia wzory ujmujące operatory i argumenty, określające sposób obliczenia lub określenia wartości 22

Pojęcia leksykalne - literały Literały pojedyncze (skalary) character - pojedynczy znak objęty apostrofami, np: A lub a bit - reprezentuje wartość binarną 1 lub 0 std_logic - reprezentuje wartość sygnałów wg. IEEE 1164: U niezainicjalizowany X nieznany (forcing an unknown) 0 silne zero (forcing 0) 1 silne jeden (forcing 1) Z wysoka impedancja (Hi-Z) W słaby nieznany (weak unknown) L słabe zero (weak 0) H słabe jeden (weak 1) - nieistotny (don t care) Poza pakietem STANDARD 23

Pojęcia leksykalne - literały boolean - reprezentuje dwie dyskretne wartości: true TRUE True false FALSE False real - reprezentuje wartość zmiennoprzecinkową, np: 1.3 lub -344.0E+23, typowo od -1.0E+308 do 1.0E+308 z precyzją co najmniej sześciu cyfr po przecinku integer - reprezentuje wartość całkowitą, np.: +1, 862 lub -257, +123_456, 16#00FF#, typowo od -2,147,483,647 do + 2,147,483,647 time - reprezentuje jedyną zdefiniowaną wielkość fizyczną, to jest czas: 62 fs, (ps, ns, us, ms, sec, min, hr) Literały wielokrotne (tablice) string - ciąg znaków objęty cudzysłowami, n.p.: x, hold time bit_vector - 0001_1100, x 00FF std_logic_vector - 101Z, UUUUUU 24

Pojęcia leksykalne - literały Literały dziesiętne: 14 7755 156E7 188.993 88_670_551.453_909 44.99E-22 Literały wielkości fizycznych: 60 sec 100 m 5 kohm 177 A Literały o innych podstawach: 16#FE# -- 254 2#1111_1110# -- 254 8#376# -- 254 16#D#E1 -- 208 16#F.01#E+2 -- 3841.00 2#10.1111_0001#E9 -- 1506.00 b"11111110" - reprezentacja binarna B"1111_1110" - równoważna reprezentacja binarna x"fe" - równoważna reprezentacja szesnastkowa Bardzo wygodna ALE tylko dla obiektów o szerokości mod 4!! O"376" - równoważna reprezentacja ósemkowa 25

Pojęcia leksykalne identyfikatory Podstawowe: Muszą zaczynać się od litery. Potem mogą następować litery, cyfry lub podkreślnik ( _ underscore). Podkreślnik nie może być ostatni, ani nie może występować w sąsiedztwie innego podkreślnika. VHDL nie rozróżnia wielkości liter (case insensitive): XyZ <=> xyz. Identyfikatory nie mogą być takie jak słowa kluczowe (około 100). Przykłady: XYZ, X3, S(3), S(1 to 4), my_defs. Rozszerzone: Zawarte pomiędzy dwoma znakami łamania ( \ backslash). Mogą w nich występować wszelkie znaki, takie jak:.! @ $ itd. Identyfikatory rozszerzone rozróżniają wielkość liter (case sensitive). Przykłady: \TEST\, \-25\, \2FOR$\, \process\, \--\\--\, \COunt\, \COUNT\. 26

Pojęcia leksykalne deklaracje Większość obiektów musi być deklarowana w sposób jawny. Niektóre obiekty (np.: identyfikatory iteracji w pętli, sygnały powstałe z innych sygnałów w wyniku użycia atrybutów) deklarowane są w sposób domyślny. Do deklaracji obiektów (ich nazwy i typu) należą deklaracje: stałych, zmiennych, sygnałów lub plików. Zakres wartości sygnałów i zmiennych można ograniczać: range {low_val to high_val high_val downto low_val} np: integer range 1 to 10; real range 1.0 to 10.0; 27

Pojęcia leksykalne deklaracje Deklaracje stałych skalarnych: constant name: type := expression; tablicowych: constant name: array_type [(index)] := expression; np: constant Vcc: real := 5.0; constant Cycle: time := 50 ns; constant five: bit_vector := 0101 ; constant SIX: std_logic_vector (8 to 11):= 0110 ; Deklaracje sygnałów skalarnych: signal name(s): type[range][:= expression]; tablicowych: signal name(s): array_type [(index)][:= expression]; entity: port (name(s): direction type [range][:= expression]); 28

Pojęcia leksykalne deklaracje Deklaracje zmiennych (w zakresie procesu) skalarnych: variable name(s): type[(range)][:= expression]; tablicowych: variable name(s): array_type [(range)][:= expression]; np: variable Index: integer range 1 to 50; variable Cycle: time range 10 ns to 50 ns := 10 ns; variable MEMORY: bit_vector (0 to 7); variable x,y: integer; W VHDL 92 wprowadzono zmienne globalne do komunikacji pomiędzy procesami. type ram_type is array (1023 downto 0) of std_logic_vector (7 downto 0); shared variable RAM: ram_type; --w części deklaratywnej architektury DO <= RAM(conv_integer(ADDR)) ; 29

Pojęcia leksykalne wyrażenia W języku VHDL argumenty wyrażeń muszą sobie odpowiadać pod względem typów Konwersje typów: integer (3.0) real (3) integer * time nanos + picos nanos / picos integer real time time integer variable My_Data, My_Sample: integer;... My_Data := integer(74.94 * real(my_sample) ); Vector <= CONV_STD_LOGIC_VECTOR(Integer_Argument, Size); Integer_Result <= CONV_INTEGER(Vector_Argument); 30

Pojęcia leksykalne operatory Operatory wyrażeń: logiczne and or nand nor xor not relacji = /= < <= > >= połączenia & arytmetyczne + - * / ** mod rem abs VHDL 92 sll srl sla sra rol ror xnor Typy argumentów: takie same : and or nand nor xor not = /= < <= > >= + - * / integer : mod rem integer exp : ** numeryczny : abs 31

Pojęcia leksykalne parametry Deklaracje parametrów generic (generic_interface_list); generic ( name: type := expression); Deklaruje statyczną wartość podobnie jak stała, ale wartość ta może być zmieniana z zewnątrz. Może być deklarowany w: entities (dostępny we wszystkich architekturach z nią skojarzonych), blokach i komponentach.wykorzystywany do parametryzacji modelów (szerokość magistral, czasy opóźnień itp.) np: entity CPU is generic (BusWidth : integer := 16) port ( DataIn : in bit_vector(buswidth-1 downto 0); DataOut : out bit_vector(buswidth-1 downto 0);... 32

Opis strukturalny instrukcja map RESET U1 Q SET U2 Q_INV architecture STRUCT of RS_FLOP is --deklaracja komponentu (component declaration) component NOR2 port (A,B: in bit; X: out bit); end component; begin --podstawienie komponentu (component instantiation) U1: NOR2 port map (RESET,Q_INV,Q); U2: NOR2 port map (Q,SET,Q_INV); --notacja pozycyjna end STRUCT; -- lub notacja specyfikacyjna, np: -- U1: NOR2 port map (A => RESET, X => Q, B => Q_INV); 33

Opis strukturalny Opis strukturalny jest bardzo często generowany automatycznie przez narzędzia HDL konwertery SCH -> HDL 34

Opis strukturalny: TestBench Opis strukturalny jest bardzo często generowany automatycznie przez narzędzia HDL Process Component generatory TestBench library IEEE; use IEEE.std_logic_1164.all; TestBench use IEEE.std_logic_unsigned.all; entity Test_Bench is end Test_Bench; architecture Struct of Test_Bench is signal Test_Output : STD_LOGIC_VECTOR (9 downto 0); signal Clock,Clear : STD_LOGIC; begin Signals component Top is port ( CLK : in STD_LOGIC; RESET : in STD_LOGIC; Output : out STD_LOGIC_VECTOR (9 downto 0) ); end component; Project:Top port map(clock,clear,test_output); UUT 35

Opis strukturalny - instrukcja generate Składnia: [etykieta:] {[for instrukcja if warunek]} generate {instrukcje_współbieżne} end generate; U0 U1 U2 U3 X0 X1 X2 X3 X4 D Q D Q D Q D Q CLK CLK CLK CLK Przykład: gen1: for i in 0 to 3 generate U: DFF port map (X(i), clk, X(i+1)); end generate; 36

Opis strukturalny - instrukcja generate U0 U1 U2 U3 SIN X1 X2 X3 SOUT D Q D Q D Q D Q CLK CLK CLK CLK for i in 0 to 3 generate e1: if (i=0) generate UA: DFF port map (SIN, CLK, X(i+1)); end generate; e2: if ((i>0) and (i<3)) generate UB: DFF port map (X(i), CLK, X(i+1)); end generate; e3: if (i=3) generate UC: DFF port map (X(i), CLK, SOUT); end generate; end generate; 37

Ciąg dalszy nastąpi... 38