Programowanie Układów Logicznychw12.pwr.wroc.pl/mikro/PUL_V/Wyklad/W2-PUL.pdfVHDL – logika...
Transcript of Programowanie Układów Logicznychw12.pwr.wroc.pl/mikro/PUL_V/Wyklad/W2-PUL.pdfVHDL – logika...
Programowanie Układów Logicznych
kod kursu: ETD6203
VHDL, ISE WebPACK, Plan Ahead,
Impact
W2 – 06.03.2019
mgr inż. Maciej Rudek opracował: dr inż. Daniel Kopiec
Plan wykładu
2
• VHDL – powtórka ważniejszych zagadnień
• Architektura układów FPGA
• Ise WebPACK
• Plan Ahead
• Impact
• Podsumowanie
1
2
3
4
5
6
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)
4
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.
Poziom abstrakcji systemów opisu
sprzętu
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.
6
VHDL - kodowanie
• 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. 7
Słowa kluczowe, identyfikatory,
obiekty danych (zastrzeżone)
8
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
VHDL – poziom abstrakcji
9
Poziom abstrakcji – diagram „Y”
10
Reprezentacja
strukturalna
Reprezentacja
funkcjonalna
Reprezentacja
fizyczna
algorytmy
operacje przesłań
międzyrejestrowych
równania Boolowskie
równania różniczkowe
procesor, pamięć,
interfejs
sumator, rejestr,
multiplekser
bramki, przerzutniki
tranzystory, rezystory,
kondensatory
rozkład tranzystorów
rozkład komórek rozkład bloków
funkcjonalnych
rozkład modułów IP
VHDL – logika wielowartościowa
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ęć
13
Operatory
14
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)
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);
• 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 15
SEKWENCYJNE
Układy
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 …
• 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 …
16
Instrukcje
WSPÓŁBIERZNE (równoległe)
Zachowanie układu jest niezależne od
kolejności instrukcji
przyporządkowania sygnałów.
Stosowane w specyfikacji typu „data
flow description”
- instrukcje przypisanie sygnałów,
- realizacja procesu,
- konkretyzacja składnik,
- instrukcja „with select”,
- instrukcja „for”,
SEKWENCYJNE (krokowe)
Stosowane w specyfikacji
behawioralnej, przede wszystkim w
procesach. Porządek zapisu instrukcji
sekwencyjnych zmienia działanie
układu.
- instrukcja oczekiwania,
- instrukcja warunkowa „if”,
- instrukcja wyboru „case”,
- instrukcja pętli „while loop”.
17
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
18
Struktura programu VHDL
19
library IEEE; use IEEE.std_logic_1164.all;
Deklaracje bibliotek
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;
20
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;
Definicja jednostki projektowej
• 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.
• 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.
21
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
• 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. 22
Półsumator - realizacja
23
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; architecture Behavioral of HALF_ADDER is begin sum <= a xor b; carry <= a and b; end architecture Behavioral;
Realizacja półsumatora
Licznik z resetem asynch.
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 ( CLK_50MHz: in std_logic;
LED : out std_logic
);
end LED_blink;
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 24
Zalecenia
25
• 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.
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
26
• 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.
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;
27
„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
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
Tak nie robimy !!!
28
Szkic architektury układów FPGA
PROCESOR,
MIKROKONTROLER
FPGA
FPGA – od środka
29
FPGA – od środka
FPGA – od środka
30
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
31
Realizacja w FPGA
Uproszczona struktura komórki
programowalnej - LUT Sposób dołączenie LUT-ów do
traktów połączeniowych
LUT – Look-Up Table, tablica
wartości funkcji, oraz multiplekser
wielowejściowy jako blok logiczny
32
LUT – tablica wartości funkcji
Uproszczona struktura komórki programowalnej - LUT 33
34
Schemat blokowy komórki
SLICEM z uwzględnieniem LUT źródło: http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf
35
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
36
Oznaczenia układów Xilinx
Typ układu
Obudowa
Klasa szybkości
Zakres temperatur
Pin 1
znacznik
Kod maski
Kod wykonania
Proces technologiczny
Kod daty Kod partii
37
Zestawienie parametrów
Zestawienie najważniejszych parametrów układów z rodziny Spartan–3
38
Xilinx Ise WebPACK
Zintegrowane środowisko Xilinx Ise WebPACK:
- implementacja układów cyfrowych,
- oraz złożonych funkcjonalności.
39
Xilinx Ise WebPACK
40
Tworzenie opisu sprzętu na
podstawie:
- VHDL,
- Verilog,
- Schematu.
Testowanie funkcjonalności:
- Test Bench
Łączenie funkcjonalności:
- pakiety,
- moduły
- systemy wbudowane np.
PicoBlaze
Xilinx ISE – we/wy - Plan Ahead
Processes
User Constraints
I/O Pin Planning
Zintegrowane
środowisko
projektowania,
planowania rozkładu
pinów, analizy
czasowej , lokowania
zasobów 41
Plan Ahead - I/O Planner View
Rozmieszczenie pinów I/O układu,
- odwzorowanie rzeczywiste
Widok wnętrza struktury układu
FPGA, zasoby 42
Znaczenie symboli pinów I/O S
yg
nał
GN
D
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
Zas
ila
nie
VC
C
Pin
og
óln
eg
o
prz
ezn
ac
zen
ia z
mo
żli
wo
ścią
dys
try
bu
cji
sy
gn
ału
zeg
aro
weg
o
Pin
og
óln
eg
o
prz
ezn
aczen
ia
Pin
ko
nfi
gu
racyjn
y
Pin
nie
po
dłą
czo
ny d
o
str
uktu
ry w
ew
nętr
zn
ej
Pin
in
terf
ejs
u J
TA
G
(TM
S,
TD
O,
TC
K,
TD
I)
43
Plan Ahead – RTL – diagram
Symboliczna reprezentacja zawartości
struktury programowalnej 44
Plan Ahead – konfiguracja I/O
Możliwe opcje konfiguracji portów, linii
wejścia/wyjścia
45
Poziomy logiczne I/O
Prąd wyjściowy dla
określonych standardów
46
Stany I/O
Możliwe opcje konfiguracji portów, linii
wejścia/wyjścia
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
sterowalny „pull up”
sterowalny „pull down”
stan pływający
„weak keeper”
47
Opcje we/wy - Netlista
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. 48
Opcje we/wy - Netlista
49
Tworzenie netlisty: sieć połączeń wewnętrznych
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
50
Xilinx ISE – programowanie - JTAG
51
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
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
9. Wyjaśnij znaczenie pojęcia Boundary-Scan 52