Programowanie Układów Logicznychw12.pwr.wroc.pl/mikro/PUL_V/Wyklad/W2-PUL.pdfVHDL – logika...

Post on 06-Feb-2020

4 views 0 download

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