Programowanie Układów Logicznych kod kursu: ETD6203 VHDL, ISE WebPACK, Plan Ahead, Impact W2 28.02.2018 mgr inż. Maciej Rudek opracował: dr inż. Daniel Kopiec
Plan wykładu 1 2 3 4 5 6 VHDL powtórka ważniejszych zagadnień Architektura układów FPGA Ise WebPACK Plan Ahead Impact Podsumowanie 2
Z poprzedniego wykładu 1. Ogólna klasyfikacja układów programowalnych. 2. Wskazać zasadnicze różnice między układami PLA oraz PAL. 3. Który typ połączenia traktów zapewnia największą niezawodność? 4. Wskazać różnicę między mikrokontrolerem a procesorem. 3
Geneza języka VHDL VHDL (VHSIC Hardware Descrption Language, gdzie VHSIC - Very High Speed Integrated Circuit Symulacja układów cyfrowych projekt Departamentu Obrony USA Rok 1987 zatwierdzony standard IEEE1076 (Institute of Electrical and Electronics Engineers) Standard języka VHDL był rewidowany trzykrotnie: w latach 1993, 2002 i 2008. Wersja z roku 1993 (IEEE 1076-1993) jest obecnie najpopularniejsza - większość narzędzi jest zgodna z tym standardem. Z początkiem roku 2009 opublikowano najnowszą wersję standardu: IEEE 1076-2008. 4
Cechy języka VHDL równoległość, strukturalność oznaczająca możliwość hierarchicznego opisywania projektów. "redesign" - typowy projekt cyfrowego układu elektronicznego zawiera w sobie do 80% fragmentów z innych projektów, możliwość wykonywania instrukcji sekwencyjnie, zdolność do jednolitego opisywania struktury, możliwość symulowania projektowanych układów; możliwość tworzenia sekwencji sygnałów testujących, możliwość wbudowania sygnałów testowych w projekt, "samodokumentowanie" osiągnięte dzięki prostej i przejrzystej strukturze, modelowanie układów z uwzględnieniem upływającego czasu. 5
VHDL - kodowanie 6 Język VHDL nie interpretuje wielkości liter. Elementy języka posiadają takie samo znaczenie niezależnie od tego czy pisane są małymi czy dużymi literami. Znakiem komentarze jest podwójny ciąg znaków minus: '--'. Pojawienie się tego ciągu w programie powoduje, że pozostała część linii programu traktowana jest jako komentarz. Typowym rozszerzeniem plików zawierających programy w języku VHDL jest *.vhd. Kompilatory języka na podstawie plików źródłowych tworzą pliki binarne, które mogą służyć do symulacji lub programowania układów programowalnych. Najmniejsza kompilowalna jednostka nosi nazwę projektu. VHDL traktuje wektor jako zbiór elementów tego samego typu, zgrupowanych razem dla wygody. Wektor (np. bitów) nie jest równoważny żadnej liczbie. Dlatego nie można wykonywać na wektorze bitów operacji arytmetycznych, a operacje relacyjne mają sens tylko wówczas gdy wektory są tej samej długości.
Słowa kluczowe, identyfikatory, obiekty danych (zastrzeżone) 7 abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant disconnect downto else elsif end entity exit file for function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process pure range record register reject return rol ror select severity signal shared sla sli sra srl subtype then to transport type unaffected units until use variable wait when while with xnor xor
8 VHDL poziom abstrakcji
Poziom abstrakcji diagram Y Reprezentacja funkcjonalna algorytmy operacje przesłań międzyrejestrowych równania Boolowskie równania różniczkowe Reprezentacja strukturalna procesor, pamięć, interfejs sumator, rejestr, multiplekser bramki, przerzutniki tranzystory, rezystory, kondensatory rozkład modułów IP rozkład tranzystorów 9 rozkład bloków funkcjonalnych Reprezentacja fizyczna rozkład komórek
VHDL logika wielowartościowa 10 Logika wielowartościowa posiada więcej typów niż tylko 0 i 1 logiczne. Pakiet Std_Logic_1164 wchodzący w skład języka VHDL zawiera definicję typów std_logic (typ "resolved") oraz std_ulogic (typ "unresolved") o podanych wyżej wartościach.
11 Operatory
12 Operatory przesunięć
Operatory W wypadku równoprawnych operacji wykonywanie odbywa się od lewej do prawej. a + b 1 > c or a < d Wykorzystując nawiasy można ustalić kolejność wykonywania operacji. (a and b) or (a and d) 13
Wektory Wektory są jednowymiarowymi tablicami: signal x : std_logic_vector (7 downto 0); x <= "11001010"; Powyższa linia jest równoważna z zapisem: x(7) <= '1'; x(6) <= '1'; x(5) <= '0'; x(4) <= '0'; x(3) <= '1'; x(2) <= '0'; x(1) <= '1'; x(0) <= '0'; signal y : std_logic_vector (0 to 7); 14 dla wektora x najbardziej znaczący bit MSB ma indeks 7 najmniej 0, dla wektora y najbardziej znaczący bit MSB ma indeks 0 najmniej 7. Możliwy jest dostęp do poszczególnych elementów: - x(7) najbardziej znaczący bit MSB, - x (3 downto 0) najmłodsze 4 bity
Układy 15 KOMBINACYJNE logika jest logiką kombinacyjna jeśli wartość wyjść w danej chwili zależy wyłącznie od wartości wejść w danej chwili, układ kombinacyjny nie posiada wewnętrznej pamięci ani pętli sprzężenia zwrotnego, przykładami funkcji kombinacyjnych są: dekodery, multipleksery, sumatory SEKWENCYJNE stan wyjść y zależy od stanu wejść x oraz od poprzedniego stanu, zwanego stanem wewnętrznym, pamiętanego w zespole rejestrów, synchroniczne, zmiana stanu podyktowana sygnałem zegara, asynchroniczne, zmiana stanu następuję natychmiast, podatne na zjawisko hazardu i wyścigu, przykład: przerzutniki, rejestry, liczniki
Instrukcje WSPÓŁBIERZNE (równoległe) SEKWENCYJNE (krokowe) Zachowanie układu jest niezależne od kolejności instrukcji przyporządkowania sygnałów. Stosowane w specyfikacji typu data flow description Stosowane w specyfikacji behawioralnej, przede wszystkim w procesach. Porządek zapisu instrukcji sekwencyjnych zmienia działanie układu. - instrukcje przypisanie sygnałów, - realizacja procesu, - konkretyzacja składnik, - instrukcja with select, - instrukcja for, - instrukcja oczekiwania, - instrukcja warunkowa if, - instrukcja wyboru case, - instrukcja pętli while loop. 16
Sygnał zegarowy if (clk'event and clk = '1') then if rising_edge(clk) then if (clk'event and clk = '0') then if falling_edge(clk) then 17
18 Struktura programu VHDL
Deklaracje bibliotek library IEEE; use IEEE.std_logic_1164.all; deklaracja użycia biblioteki IEEE, - uczyń bibliotekę dostępną użycie pakietu std_logic_1164 all użycie wszystkich składników pakietu Inne często używane biblioteki: IEEE.std_logic_signed.all; IEEE.std_logic_unsigned.all; IEEE.std_logic_arith.all; IEEE.numeric_std.all; std.text_io.all; 19
Definicja jednostki projektowej entity multiplexer is port ( s : in std_logic; x0, x1 : in std_logic_vector (7 downto 0); y : out std_logic_vector (7 downto 0) ); end entity multiplexer; 20 std_logic - podstawowy typ opisujący sygnał logiczny ( 0 i 1 ), std_logic_vector (7 downto 0) - wektorowa wersja sygnału std_logic pozwalająca opisywać np. magistrale, podany zakres indeksów wektora ma 8-bitów, in, out, inout, buffer, linkage - definicja wejść oraz wyjść, port odnosi się do końcówek I/O układu programowalnego. Każdy projekt musi składać się z co najmniej jednej jednostki projektowej (entity), Jednostek może być więcej zawsze jednak jest tylko jedna jednostka nadrzędna (top-level), znajdująca się na szczycie hierarchii.
Definicja architektury architecture data_flow of multiplexer is begin y <= x1 when ( s = '1' ) else x0; end architecture data_flow; nazwa architektury często wiele mówi o poziomie abstrakcji realizacji danej architektury ciało architektury, - instrukcje przypisania, - procesy, komponenty 21 Możliwe jest zdefiniowanie kilku architektur dla każdej jednostki projektowej. O tym, która z tych architektur jest następnie podana do syntezy czy symulacji decydują tzw. konfiguracje. Ciało architektury zawiera opis sprzętu, który ma sens instrukcji realizowanych współbieżnie. Kolejność umieszczenia tych instrukcji w ciele nie ma znaczenia.
Półsumator - realizacja library IEEE; use IEEE.std_logic_1164.all; entity HALF_ADDER is port ( a, b : in std_logic; sum, carry : out std_logic ); end entity HALF_ADDER; Realizacja półsumatora architecture Behavioral of HALF_ADDER is begin sum <= a xor b; carry <= a and b; end architecture Behavioral; 22
Licznik z resetem asynch. 23 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LED_blink is Port ( ); end LED_blink; CLK_50MHz: in std_logic; LED : out std_logic architecture Behavioral of LED_blink is signal Counter: std_logic_vector (24 downto 0); signal CLK_1Hz: std_logic := '0'; begin Prescaler: process (CLK_50MHz) is begin if rising_edge(clk_50mhz) then if Counter < "111111111111111111111111" then Counter <= Counter + 1; else CLK_1Hz <= not CLK_1Hz; Counter <=(others => '0'); end if; end if; end process Prescaler; LED <= CLK_1Hz; end Behavioral; a co z resetem? Prescaler: process (CLK_50MHz, nreset) is begin if (nreset = '0') then Counter <=(others => '0'); CLK_1Hz <= '0 ; elseif rising_edge(clk_50mhz) then if Counter < "111111111111111111111111" then Counter <= Counter + 1; else CLK_1Hz <= not CLK_1Hz; Counter <=(others => '0'); end if; end if; end process Prescaler; LED <= CLK_1Hz; end Behavioral; Jeżeli model zawiera wiele procesów, wszystkie są wykonywane współbieżnie Instrukcje współbieżne poza procesami są również wykonywane współbieżnie Instrukcje wewnątrz procesu wykonywane sekwencyjnie
Zalecenia Każda instrukcja if jest kodowana jako enkoder priorytetowy. Zagnieżdżanie instrukcji if zwiększa zajętość zasobów oraz zwiększa opóźnienia. Zagnieżdżanie powinno być zastępowane instrukcją case. Instrukcja case nie koduje warunków priorytetowo. Rejestry typu Latch, powstają najczęściej wskutek występowania niekompletnych wyrażeń warunkowych. 24 LATCH: process (GATE, DATA) begin if (GATE = '1' ) then Q <= DATA; end if end process D_REG: process (CLK, DATA) begin if (CLK event and CLK = '1' ) then Q <= DATA; end if end process
Zalecenia Każda instrukcja if jest kodowana jako enkoder priorytetowy. Zagnieżdżanie instrukcji if zwiększa zajętość zasobów oraz zwiększa opóźnienia. Zagnieżdżanie powinno być zastępowane instrukcją case. Instrukcja case nie koduje warunków priorytetowo. Rejestry typu Latch, powstają najczęściej wskutek występowania niekompletnych wyrażeń warunkowych. 25 LATCH: process (GATE, DATA) begin if (GATE = '1' ) then Q <= DATA; end if ; end process; D_REG: process (CLK, DATA) begin if (CLK event and CLK = '1' ) then Q <= DATA; else Q <= 0 ; end if; end process;
Clock Enable i Gated Clocks Zaleca się stosowanie globalnych sygnałów zegarowych jako wejść zegarowych przerzutników, - jeżeli nie jest to możliwe i sygnał zegarowy tworzony jest jako funkcja innych sygnałów wykorzystuje się sygnały Clock Enable Tak nie robimy!!! 26 GATECLK <= (IN1 and IN2 and CLK); GET_PR: process (GATECLK, DATA, LOAD) begin if (GATECLK event and GATECLK = '1' ) then if (LOAD = '1' ) then OUT <= DATA; end if end if end process ENABLE <= (IN1 and IN2 and LOAD); EN_PR: process (ENABLE, DATA, CLK) begin if (CLK event and CLK = '1' ) then if (ENABLE = '1' ) then OUT <= DATA; end if end if end process
FPGA od środka Szkic architektury układów FPGA PROCESOR, MIKROKONTROLER 27 FPGA
28 FPGA od środka
29 FPGA od środka
CLB a pamięć Skąd te liczby. ktoś się orientuje? LUT: 8 ROM: 8LUT * 16 bitów = 128 bitów Single-RAM: 4LUT * 16 bitów = 64 bity Dual-RAM: 2LUT * 16 bitów = 32 bity 30
Realizacja w FPGA LUT Look-Up Table, tablica wartości funkcji, oraz multiplekser wielowejściowy jako blok logiczny 31 Uproszczona struktura komórki programowalnej - LUT Sposób dołączenie LUT-ów do traktów połączeniowych
LUT tablica wartości funkcji 32 Uproszczona struktura komórki programowalnej - LUT
33 źródło: http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf Schemat blokowy komórki SLICEM z uwzględnieniem LUT
34
Architektura bloku logicznego Komórka zawiera kilka elementów: kombinacyjnych, sekwencyjnych (przerzutniki), pamięć konfigurowalną (RAM, ROM, FIFO), Specjalizowane funkcje Złożoność bloku: od komórki do matrycy komórek 35
Oznaczenia układów Xilinx Kod maski Kod wykonania Typ układu Obudowa Klasa szybkości Zakres temperatur Proces technologiczny Kod daty Kod partii Pin 1 znacznik 36
Zestawienie parametrów Zestawienie najważniejszych parametrów układów z rodziny Spartan 3 37
Xilinx Ise WebPACK Zintegrowane środowisko Xilinx Ise WebPACK: - implementacja układów cyfrowych, - oraz złożonych funkcjonalności. 38
Xilinx Ise WebPACK Tworzenie opisu sprzętu na podstawie: - VHDL, - Verilog, - Schematu. Testowanie funkcjonalności: - Test Bench Łączenie funkcjonalności: - pakiety, - moduły - systemy wbudowane np. PicoBlaze 39
Xilinx ISE we/wy - Plan Ahead Processes User Constraints I/O Pin Planning 40 Zintegrowane środowisko projektowania, planowania rozkładu pinów, analizy czasowej, lokowania zasobów
Plan Ahead - I/O Planner View 41 Rozmieszczenie pinów I/O układu, - odwzorowanie rzeczywiste Widok wnętrza struktury układu FPGA, zasoby
Sygnał GND Zasilanie VCC Pin ogólnego przeznaczenia z możliwością dystrybucji sygnału zegarowego Pin ogólnego przeznaczenia Pin konfiguracyjny Pin nie podłączony do struktury wewnętrznej Pin interfejsu JTAG (TMS, TDO, TCK, TDI) Znaczenie symboli pinów I/O 42 Dystrybucja zegara: dedykowane linie i wejścia układu do dystrybucji szybkich sygnałów zegarowych zapewniające minimalne nierównomierności czasów pojawienie się zboczy zegara. Możliwy jest dostęp do linii zegarowych poprzez globalne bufory z wyprowadzeń układu lub z linii połączeniowych ogólnego przeznaczenia
Plan Ahead RTL diagram 43 Symboliczna reprezentacja zawartości struktury programowalnej
Plan Ahead konfiguracja I/O Możliwe opcje konfiguracji portów, linii wejścia/wyjścia 44
Poziomy logiczne I/O Prąd wyjściowy dla określonych standardów 45
Stany I/O Schemat połączeń wewnętrznych w obrębie portów wejścia/wyjścia Pin wejścia/wyjścia - możliwość komunikacji ze światem zewnętrznym stan pływający weak keeper sterowalny pull up sterowalny pull down 46 Możliwe opcje konfiguracji portów, linii wejścia/wyjścia
Opcje we/wy - Netlista 47 Wymagania dla projektu są zadawane w pliku UCF (User Constraints File): - wyprowadzenia układu (który sygnał na której końcówce), - wymagania czasowe (częstotliwość zegara, maksymalne opóźnienia), - wymagania na rozmieszczenie komponentów.
Opcje we/wy - Netlista Tworzenie netlisty: sieć połączeń wewnętrznych 48 NET sygnał, LOC lokalizacja wewnątrz układu, IOSTANDARD standard sygnału wyjściowego itp. PULLUP, PULDOWN - sposób podciągania we/wy do potencjału
Xilinx ISE programowanie - Impact Programowanie: polega na zapisie tzw. bitstream a do pamięci konfiguracyjnej układu FPGA, tryby konfiguracyjne: slave serial, master serial, slave parallel oraz boundary-scan, boundary-scan umożliwia skanowanie wszystkich we/wy układu, odczyt konfiguracji z pamięci FLASH lub PROM, wykorzystanie protokołu JTAG, IEEE 1149 readback możliwość odczytania danych konfiguracyjnych układu wraz ze stanem wszystkich przerzutników, pamięci RAM, LUT 49
Xilinx ISE programowanie - JTAG 50 TDI Test Data Input - szeregowe wejście danych do testowania i konfiguracji TMS Test Mode Select - wejście sterujące pracą automatu TAP TCK Test Clock Input - wejście sygnału zegarowego TRST Test Reset - wejście asynchroniczne sygnału zerującego automat TAP TDO Test Data Output - szeregowe wyjście danych z rejestru BST lub pamięci konfiguracji
51 Operatory przesunięć - rozwiązanie
Przykładowe pytania 1. Na co wpływają priorytety operatorów 2. Znaczenie skrótu LUT 3. Różnica w układach sekwencyjnych a kombinacyjnych 4. Realizacja współbieżna a sekwencyjna 5. Poziomy sygnałów wyjściowych 6. Zadania NETLISTY 7. Konfiguracja rzeczywistego układu FPGA 8. Wyjaśnij znaczenie pojęcia REDBACK 52 9. Wyjaśnij znaczenie pojęcia Boundary-Scan