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

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

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

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

Projektowanie hierarchiczne Mariusz Rawski

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

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

Projektowanie automatów z użyciem VHDL

Projektowanie w VHDL

Układy reprogramowalne i SoC Specjalizowane moduły FPGA

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

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

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

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

Projekt prostego procesora

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Systemy Czasu Rzeczywistego FPGA

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

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

Instrukcje sekwencyjne

Specyfika projektowania Mariusz Rawski

Systemy Czasu Rzeczywistego FPGA

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

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

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

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

PUCY Kolos 2: Reloaded

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

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Programowalne układy logiczne

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

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

Projektowanie Urządzeń Cyfrowych

Systemy Czasu Rzeczywistego FPGA

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

Architektura komputerów Wprowadzenie do algorytmów

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

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

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

Języki opisu sprzętu VHDL Mariusz Rawski

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

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

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Elementy języka VHDL

Synteza strukturalna

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

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

Sposoby projektowania systemów w cyfrowych

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

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.

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

Medical electronics part 9a Electroencephalography (EEG)

VHDL cz.1. Rafał Walkowiak IIn PP Wer

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

dr inż. Małgorzata Langer Architektura komputerów

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

Zaawansowane programowanie w języku C++ Wyjątki

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Krótkie wprowadzenie do ModelSim i Quartus2

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

Projektowanie hierarchiczne Mariusz Rawski

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

Programowalne układy logiczne

Programowalne układy logiczne

Układy Cyfrowe laboratorium

Realizacja logiki kombinacyjnej Mariusz Rawski

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

DOKUMENTACJA PROJEKTU

Język VHDL podstawy Mariusz Rawski

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Podstawy techniki cyfrowej zima 2015 Rafał Walkowiak

Projektowanie układów kryptograficznych Mariusz Rawski

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

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

Zaawansowane programowanie w języku C++ Klasy w C++

PROJEKTOWANIE UKŁADÓW CYFROWYCH Z WYKORZYSTANIEM PAKIETU MULTISIM 2001 ORAZ JĘZYKA OPISU SPRZĘTU VHDL

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

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

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

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.

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

Studia podyplomowe realizowane w ramach zadania 5 Systemy mobilne i techniki multimedialne

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

Synteza strukturalna Mariusz Rawski

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

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

Realizacja stopera na układzie Spartan-II przy uŝyciu pakietu Xilinx ISE

Systemy operacyjne na platformach mobilnych 2 Platforma Maemo

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

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

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

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

Procedury i funkcje składowane

Nauczycielem wszystkiego jest praktyka Juliusz Cezar. Nauka to wiara w ignorancję ekspertów Richard Feynman

Pod o z d ia i ł a r yn y k n u k u ( 2004 r.). źródło: Gartner 3

Transkrypt:

Język VHDL (część 4) Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

2 Stałe Stałe są definiowane przy pomocy słowa kluczowego CONSTANT. CONSTANT name : type := value CONSTANT set_bit : BIT := '1'; CONSTANT datamemory : memory := (('0','0','0','0'), ('0','0','0','1'), ('0','0','1','1')); Stała może być zadeklarowana wewnątrz PACKAGE, ENTITY lub ARCHITECTURE Zadeklarowana w pakiecie jest naprawdę globalna, gdyż pakiet może byc uzywany przez wiele komponentów Zadeklarowana w ENTITY (po deklaracji portów) jest globalna dla wszystkich architektur Zadeklarowana w ARCHITECTURE jest dostępna tylko w kodzie tej architektury

3 Sygnały SIGNAL służy do przekazywania wartości z i do obwodu a także pomiędzy jego elementami Reprezentuje przewody Wszystkie porty są również traktowane jako sygnały SIGNAL control: BIT := '0'; SIGNAL count: INTEGER RANGE 0 TO 100; SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0); Ważną cechą sygnału, użytego wewnątrz sekwencyjnej sekcji kodu jest to, że nie jest on uaktualniany natychmiast, ale dopiero po zakończeniu bieżącej aktywacji procesu Przypisania do sygnału wykonuje się przy pomocy operatora "<=" Wielokrotne przypisania do sygnału są dozwolone tylko wewnątrz jednego procesu Brane jest wówczas pod uwagę ostatnie przypisanie

4 Przykład: zliczanie jedynek 1 --------------------------------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 --------------------------------------- 5 ENTITY count_ones IS 6 PORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); 7 ones: OUT INTEGER RANGE 0 TO 8); 8 END count_ones; 9 --------------------------------------- 10 ARCHITECTURE not_ok OF count_ones IS 11 SIGNAL temp: INTEGER RANGE 0 TO 8; 12 BEGIN 13 PROCESS (din) 14 BEGIN 15 temp <= 0; 16 FOR i IN 0 TO 7 LOOP 17 IF (din(i)='1') THEN 18 temp <= temp + 1; 19 END IF; 20 END LOOP; 21 ones <= temp; 22 END PROCESS; 23 END not_ok; 24 --------------------------------------- Przykład nie zadziała Występuje wielokrotne przypisanie do sygnału temp W celu osiagnięcia oczekiwanego efektu należy użyć zmiennej

5 VARIABLE Zmienne reprezentują jedynie lokalną informację Mogą być zadeklarowane i użyte tylko wewnątrz procesu, funkcji lub procedury Uaktualnienie wartości zmiennej jest natychmiastowe - można korzystać z nowej wartości zaraz po przypisaniu VARIABLE name : type [range] [:= init_value]; VARIABLE control: BIT := '0'; VARIABLE count: INTEGER RANGE 0 TO 100; VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000";

6 Przykład: zliczanie jedynek 1 --------------------------------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 --------------------------------------- 5 ENTITY count_ones IS 6 PORT ( din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); 7 ones: OUT INTEGER RANGE 0 TO 8); 8 END count_ones; 9 --------------------------------------- 10 ARCHITECTURE ok OF count_ones IS 11 BEGIN 12 PROCESS (din) 13 VARIABLE temp: INTEGER RANGE 0 TO 8; 14 BEGIN 15 temp := 0; 16 FOR i IN 0 TO 7 LOOP 17 IF (din(i)='1') THEN 18 temp := temp + 1; 19 END IF; 20 END LOOP; 21 ones <= temp; 22 END PROCESS; 23 END ok; 24 ---------------------------------------

7 Sygnał a zmienna Zastosowanie SIGNAL Reprezentuje połączenia w obwodzie VARIABLE Reprezentuje lokalną informację Zasięg Globalny Lokalny (widoczny wewnątrz procesu, procedury i funkcji Zachowanie Uaktualnienie nie jest natychmiastowe w kodzie sekwencyjnym Uaktualniana natychmiast Użycie W PACKAGE, ENTITY lub ARCHITECTURE Tylko w kodzie sekwencyjnym: procesie, funkcji lub procedurze

8 Przykład: multiplekser 1 -- Solution 1: using a SIGNAL (not ok) -- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 ----------------------------------------- 5 ENTITY mux IS 6 PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; 7 y: OUT STD_LOGIC); 8 END mux; 9 ----------------------------------------- 10 ARCHITECTURE not_ok OF mux IS 11 SIGNAL sel : INTEGER RANGE 0 TO 3; 12 BEGIN 13 PROCESS (a, b, c, d, s0, s1) 14 BEGIN 15 sel <= 0; 16 IF (s0='1') THEN sel <= sel + 1; 17 END IF; 18 IF (s1='1') THEN sel <= sel + 2; 19 END IF; 20 CASE sel IS 21 WHEN 0 => y<=a; 22 WHEN 1 => y<=b; 23 WHEN 2 => y<=c; 24 WHEN 3 => y<=d; 25 END CASE; 26 END PROCESS; 27 END not_ok; 28 ----------------------------------------- s 1 s 0

9 Przykład: multiplekser 1 -- Solution 2: using a VARIABLE (ok) ---- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 ----------------------------------------- 5 ENTITY mux IS 6 PORT ( a, b, c, d, s0, s1: IN STD_LOGIC; 7 y: OUT STD_LOGIC); 8 END mux; 9 ----------------------------------------- 10 ARCHITECTURE ok OF mux IS 11 BEGIN 12 PROCESS (a, b, c, d, s0, s1) 13 VARIABLE sel : INTEGER RANGE 0 TO 3; 14 BEGIN 15 sel := 0; 16 IF (s0='1') THEN sel := sel + 1; 17 END IF; 18 IF (s1='1') THEN sel := sel + 2; 19 END IF; 20 CASE sel IS 21 WHEN 0 => y<=a; 22 WHEN 1 => y<=b; 23 WHEN 2 => y<=c; 24 WHEN 3 => y<=d; 25 END CASE; 26 END PROCESS; 27 END ok; 28 --------------------------------------- s 1 s 0

Przykład: przerzutnik z wyjściem prostym i zanegowanym 10 1 ---- Solution 1: not OK --------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 --------------------------------------- 5 ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; 10 --------------------------------------- 11 ARCHITECTURE not_ok OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'event AND clk='1') THEN 16 q <= d; 17 qbar <= NOT q; 18 END IF; 19 END PROCESS; 20 END not_ok; 21 ---------------------------------------

Przykład: przerzutnik z wyjściem prostym i zanegowanym 11 1 ---- Solution 2: OK ------------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 --------------------------------------- 5 ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; 10 --------------------------------------- 11 ARCHITECTURE ok OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'event AND clk='1') THEN 16 q <= d; 17 END IF; 18 END PROCESS; 19 qbar <= NOT q; 20 END ok; 21 ---------------------------------------

12 Przykład: dzielnik częstotliwości 1 ----------------------------------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 ----------------------------------------- 5 ENTITY freq_divider IS 6 PORT ( clk : IN STD_LOGIC; 7 out1, out2 : BUFFER STD_LOGIC); 8 END freq_divider; 9 ----------------------------------------- 10 ARCHITECTURE example OF freq_divider IS 11 SIGNAL count1 : INTEGER RANGE 0 TO 7; 12 BEGIN 13 PROCESS (clk) 14 VARIABLE count2 : INTEGER RANGE 0 TO 7; 15 BEGIN 16 IF (clk'event AND clk='1') THEN 17 count1 <= count1 + 1; 18 count2 := count2 + 1; 19 IF (count1 =? ) THEN 20 out1 <= NOT out1; 21 count1 <= 0; 22 END IF; 23 IF (count2 =? ) THEN 24 out2 <= NOT out2; 25 count2 := 0; 26 END IF; 27 END IF; 28 END PROCESS; 29 END example; 30 ----------------------------------------- Co wpisać zamiast '?'

13 Sygnały i zmienne a przerzutniki Sygnał generuje przerzutnik kiedy wykonywane jest do niego przypisanie na zboczu innego sygnału - podczas synchronicznego przypisania. Może to nastąpić wewnątrz procesu, funkcji lub procedury Zmienna nie generuje przerzutnika, jeżeli jej wartość nie opuszcza procesu. Jeżeli na zboczu jakegoś sygnału do zmiennej jest przypisywana wartość, a następnie zmienna jest przypisana do sygnału, przerzutnik może zostać wygenerowany. Zmienna wygeneruje przerzutnik, gdy jest użyta przed przypisaniem do niej wartości

14 Przykłady -- output1 and output2 will both be stored -- (that is, infer flip-flops) PROCESS (clk) BEGIN IF (clk'event AND clk='1') THEN output1 <= temp; -- output1 stored output2 <= a; -- output2 stored END IF; END PROCESS; -- only output1 will be stored -- (output2 will make use of logic gates) PROCESS (clk) BEGIN IF (clk'event AND clk='1') THEN output1 <= temp; -- output1 stored END IF; output2 <= a; -- output2 not stored END PROCESS; -- temp (a variable) will cause x -- (a signal) to be stored. PROCESS (clk) VARIABLE temp: BIT; BEGIN IF (clk'event AND clk='1') THEN temp := a; END IF; x <= temp; -- temp causes x to be stored END PROCESS;

Przerzutnik z wyjściem prostym i zanegowanym 15 1 ---- Solution 1: Two DFFs --------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 ----------------------------------------- 5 ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; 10 ----------------------------------------- 11 ARCHITECTURE two_dff OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'event AND clk='1') THEN 16 q <= d; -- generates a register 17 qbar <= NOT d; -- generates a register 18 END IF; 19 END PROCESS; 20 END two_dff; 21 -----------------------------------------

Przerzutnik z wyjściem prostym i zanegowanym 16 1 ---- Solution 2: One DFF ---------------- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 ----------------------------------------- 5 ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; 10 ----------------------------------------- 11 ARCHITECTURE one_dff OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'event AND clk='1') THEN 16 q <= d; -- generates a register 17 END IF; 18 END PROCESS; 19 qbar <= NOT q; -- uses logic gate (no register) 20 END one_dff; 21 -----------------------------------------

17 Przykład: licznik 1 ------ Solution 1: With a VARIABLE -------- 2 ENTITY counter IS 3 PORT ( clk, rst: IN BIT; 4 count: OUT INTEGER RANGE 0 TO 7); 5 END counter; 6 -------------------------------------------- 7 ARCHITECTURE counter OF counter IS 8 BEGIN 9 PROCESS (clk, rst) 10 VARIABLE temp: INTEGER RANGE 0 TO 7; 11 BEGIN 12 IF (rst='1') THEN 13 temp:=0; 14 ELSIF (clk'event AND clk='1') THEN 15 temp := temp+1; 16 END IF; 17 count <= temp; 18 END PROCESS; 19 END counter; 20 --------------------------------------------

18 Przykład: licznik 1 ------ Solution 2: With SIGNALS only ------- 2 ENTITY counter IS 3 PORT ( clk, rst: IN BIT; 4 count: BUFFER INTEGER RANGE 0 TO 7); 5 END counter; 6 -------------------------------------------- 7 ARCHITECTURE counter OF counter IS 8 BEGIN 9 PROCESS (clk, rst) 10 BEGIN 11 IF (rst='1') THEN 12 count <= 0; 13 ELSIF (clk'event AND clk='1') THEN 14 count <= count + 1; 15 END IF; 16 END PROCESS; 17 END counter; 18 --------------------------------------------

19 Przykład: rejestr przesuwny 1 -------- Solution 1: ----------------- 2 ENTITY shift IS 3 PORT ( din, clk: IN BIT; 4 dout: OUT BIT); 5 END shift; 6 -------------------------------------- 7 ARCHITECTURE shift OF shift IS 8 BEGIN 9 PROCESS (clk) 10 VARIABLE a, b, c: BIT; 11 BEGIN 12 IF (clk'event AND clk='1') THEN 13 dout <= c; 14 c := b; 15 b := a; 16 a := din; 17 END IF; 18 END PROCESS; 19 END shift; 20 --------------------------------------

20 Przykład: rejestr przesuwny 1 -------- Solution 2: ----------------- 2 ENTITY shift IS 3 PORT ( din, clk: IN BIT; 4 dout: OUT BIT); 5 END shift; 6 -------------------------------------- 7 ARCHITECTURE shift OF shift IS 8 SIGNAL a, b, c: BIT; 9 BEGIN 10 PROCESS (clk) 11 BEGIN 12 IF (clk'event AND clk='1') THEN 13 a <= din; 14 b <= a; 15 c <= b; 16 dout <= c; 17 END IF; 18 END PROCESS; 19 END shift; 20 --------------------------------------

21 Przykład: rejestr przesuwny 1 -------- Solution 3: ----------------- 2 ENTITY shift IS 3 PORT ( din, clk: IN BIT; 4 dout: OUT BIT); 5 END shift; 6 -------------------------------------- 7 ARCHITECTURE shift OF shift IS 8 BEGIN 9 PROCESS (clk) 10 VARIABLE a, b, c: BIT; 11 BEGIN 12 IF (clk'event AND clk='1') THEN 13 a := din; 14 b := a; 15 c := b; 16 dout <= c; 17 END IF; 18 END PROCESS; 19 END shift; 20 --------------------------------------

22 Przykład: rejestr przesuwny z resetem 1 ---- Solution 1: With an internal SIGNAL --- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 -------------------------------------------- 5 ENTITY shiftreg IS 6 PORT ( d, clk, rst: IN STD_LOGIC; 7 q: OUT STD_LOGIC); 8 END shiftreg; 9 -------------------------------------------- 10 ARCHITECTURE behavior OF shiftreg IS 11 SIGNAL internal: STD_LOGIC_VECTOR (3 DOWNTO 0); 12 BEGIN 13 PROCESS (clk, rst) 14 BEGIN 15 IF (rst='1') THEN 16 internal <= (OTHERS => '0'); 17 ELSIF (clk'event AND clk='1') THEN 18 internal <= d & internal(3 DOWNTO 1); 19 END IF; 20 END PROCESS; 21 q <= internal(0); 22 END behavior; 23 --------------------------------------------

23 Przykład: rejestr przesuwny z resetem 1 -- Solution 2: With an internal VARIABLE --- 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 -------------------------------------------- 5 ENTITY shiftreg IS 6 PORT ( d, clk, rst: IN STD_LOGIC; 7 q: OUT STD_LOGIC); 8 END shiftreg; 9 -------------------------------------------- 10 ARCHITECTURE behavior OF shiftreg IS 11 BEGIN 12 PROCESS (clk, rst) 13 VARIABLE internal: STD_LOGIC_VECTOR (3 DOWNTO 0); 14 BEGIN 15 IF (rst='1') THEN 16 internal := (OTHERS => '0'); 17 ELSIF (clk'event AND clk='1') THEN 18 internal := d & internal(3 DOWNTO 1); 19 END IF; 20 q <= internal(0); 21 END PROCESS; 22 END behavior; 23 --------------------------------------------

24 Problem: programowalny układ opóźniający

25 Który program działa poprawnie? --------------------------------------- ENTITY dff IS PORT ( d, clk: IN BIT; q: BUFFER BIT; qbar: OUT BIT); END dff; -------- Solution 1 ------------------- ARCHITECTURE arch1 OF dff IS BEGIN PROCESS (clk) VARIABLE temp: BIT; BEGIN IF (clk'event AND clk='1') THEN temp := d; q <= temp; qbar <= NOT temp; END IF; END PROCESS; END arch1; -------- Solution 2 ------------------- ARCHITECTURE arch2 OF dff IS BEGIN PROCESS (clk) VARIABLE temp: BIT; BEGIN IF (clk'event AND clk='1') THEN temp := d; q <= temp; qbar <= NOT q; END IF; END PROCESS; END arch2; -------- Solution 3 ------------------- ARCHITECTURE arch3 OF dff IS BEGIN PROCESS (clk) VARIABLE temp: BIT; BEGIN IF (clk'event AND clk='1') THEN temp := d; q <= temp; END IF; END PROCESS; qbar <= NOT q; END arch3; ---------------------------------------

Język VHDL (część 4) Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego