Jezyki opisu sprzetu VHDL


CAD
Języki opisu sprzętu
 VHDL
Mariusz Rawski
rawski@tele.pw.edu.pl
http://rawski.zpt.tele.pw.edu.pl/
Języki opisu sprzętu
" System cyfrowy może być opisany na różnych poziomach abstrakcji i z
wykorzystaniem różnych sposobów reprezentacji.
" Wraz z postępem procesu projektowego może to ulegać zmianie.
" Wymagany jest sposób reprezentacji projektowanego systemu tak, by
można było wymieniać informacje o projektowanym systemie między
członkami grupy projektowej i komputerowymi narzędziami wspomagania
członkami grupy projektowej i komputerowymi narzędziami wspomagania
projektowania CAD.
" Języki opisu sprzętu HDL (Hardware Description Languages) służą
temu celowi.
Mariusz Rawski
2
Ograniczenia tradycyjnych języków programowania
" Tradycyjne języki programowania ogólnego przeznaczenia modelują
proces sekwencyjny.
" W procesie sekwencyjnym operacje wykonywane są w kolejności  jedna
na jednostkę czasową.
" Operacje często zależą od wyników wcześniej wykonanych operacji,
kolejność wykonania nie może zostać zmieniona  kolejność operacji
ma znaczenie.
" Zalety:
" Zalety:
 możliwość tworzenia algorytmu krok po kroku,
 proces sekwencyjny odpowiada sposobowi działania komputerów.
" Sposób działania systemu cyfrowego jest całkowicie inny niż w modelu
sekwencyjnym:
 wiele mniejszych elementów połączonych w sieć,
 zmiany sygnałów aktywują połączone z nimi elementy do wykonania operacji,
 operacje wykonywane współbieżnie.
Mariusz Rawski
3
Zastosowania języków HDL
" Program HDL wykorzystywany jest do:
 dokumentacji  specyfikacja formalna sytemu i dokumentacja dla celów
wymiany informacji między projektantami, użytkownikami i systemami CAD,
 symulacji  dla celów weryfikacji działania projektowanego układu bez
konieczności jego realizacji; symulator HDL pozwala modelować współbieżne
operacje; program HDL wraz z generatorem testów i kodem kolekcjonującym
odpowiedzi tworzy tzw. testbench który wykorzystywany jest przez
odpowiedzi tworzy tzw. testbench który wykorzystywany jest przez
symulator HDL do weryfikacji działania projektowanego układu,
 syntezy  nowoczesny proces projektowy oparty jest na koncepcji
transformacji wysokopoziomowego opisu funkcjonalnego na niskopoziomowy
opis strukturalny; niektóre z etapów przekształcania opisu projektu mogą być
wykonywane przez oprogramowanie do syntezy; oprogramowanie takie na
podstawie kodu HDL realizuje projektowany układ z wykorzystanie elementów
z biblioteki; wynikiem jest kod HDL opisujący strukturę syntetyzowanego
układu.
Mariusz Rawski
4
Cechy języka HDL
" Charakterystyka układu cyfrowego opiera się na pojęciach jednostki
projektowej, połączenia, współbieżności i zależności czasowych.
" Podstawowe cechy nowoczesnego języka HDL to:
 semantyka zawierająca koncepcję jednostki projektowej, połączenia,
współbieżności i zależności czasowych,
 możliwość opisu opóznienia w propagacji sygnału i zależności czasowych,
 konstrukcje umożliwiające opis realizacji strukturalnej,
 udostępnianie instrukcji umożliwiających opis funkcjonalny układu w sposób
znany z tradycyjnych języków programowania
 możliwość efektywnego opisu operacji i struktur danych na poziomie bramek i
przesłań między rejestrowych,
 posiadanie konstrukcji umożliwiających projektowania w sposób hierarchiczny.
Mariusz Rawski
5
VHDL
" Very high speed integrated Hardware Description Language
" Przyjęty jako przemysłowy standard języka HDL (IEEE Std 1076)
" Modyfikowany w 1987, 1993 i 2001 (VHDL-87, -93, -2001)
" Rozszerzenia (wybrane):
 IEEE Std 1076.2-1996, VHDL Mathematical Packages  definiuje dodatkowe
funkcje matematyczne dla liczb rzeczywistych i zespolonych,
 IEEE Std 1076.3-1997, Synthesis Packages  definiuje arytmetyczne operacje
na zestawach bitów,
 IEEE Std 1076.6-1999, VHDL Register Transfer Level (RTL) Synthesis 
definiuje podzbiór języka odpowiedni dla procesów syntezy,
 IEEE Std 1164-1993 Multivalue Logic System for VHDL Modeling
Interoperability (st_logic_1164)  definiuje nowe typy danych dla celów
modelowania logiki wielowartościowej,
 IEEE Std 1029.1-1998 VHDL Waveform and Vector Exchange to Support
Design and Test Verification (WAVES)  definiuje sposób wykorzystania języka
VHDL do wymiany danych w środowisku symulacyjnym.
Mariusz Rawski
6
Podstawowe koncepcje języka VHDL
x2 x1 x0 even
Przykład
0 0 0 1
" Układ detektora parzystości:
0 0 1 0
 wejścia x2, x1, x0,
0 1 0 0
 wyjście even
0 1 1 1
1 0 0 0
" Wejścia zgrupowane w szynę
1 0 1 1
" Wyjście aktywne, gdy w wektorze
1 1 0 1
wejściowym jest parzysta liczba
1 1 1 0
1 1 1 0
jedynek (0 lub 2)
jedynek (0 lub 2)
" Wyrażenie boolowskie opisujące układ
even = x2 x1 x0 + x2 x1 x0 + x2 x1 x0 + x2 x1 x0
Mariusz Rawski
7
Opis ogólny SOP (Sum-of-Product)
Wykorzystywane biblioteki
Wykorzystywane biblioteki
library ieee;
use ieee.std_logic_1164.all;
Deklaracja jednostki projektowej
Deklaracja jednostki projektowej
Specyfikuje wejścia i wyjścia układu. Opisuje interfejs
Specyfikuje wejścia i wyjścia układu. Opisuje interfejs
projektowanego urządzenia.
projektowanego urządzenia.
-- deklaracja jednostki
entity even_detector_sop is
port(
x : in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_sop ;
X
even
even
-- definicja architektury
architecture sop_arch of even_detector_sop is
signal p1, p2, p3, p4 : std_logic;
3
begin
p1 <= (not x(2)) and (not x(1)) and (not x(0));
p2 <= (not x(2)) and x(1) and x(0);
p3 <= x(2) and (not x(1)) and x(0);
p4 <= x(2) and x(1) and (not x(0));
Architektura układu
Architektura układu
even <= p1 or p2 or p3 or p4;
Między słowami kluczowymi begin i end specyfikuje
Między słowami kluczowymi begin i end specyfikuje
end sop_arch;
działania i wewnętrzną organizację układu.
działania i wewnętrzną organizację układu.
Architektura skojarzona jest z konkretną jednostką
Architektura skojarzona jest z konkretną jednostką
projektową :
projektową :
architecture sop_arch of even_detector_sop is
architecture sop_arch of even_detector_sop is
Mariusz Rawski
8
Koncepcja realizacji architektury SOP
Wprowadzenie sygnałów wejściowych do wnętrza układu
library ieee; Wprowadzenie sygnałów wejściowych do wnętrza układu
use ieee.std_logic_1164.all;
-- deklaracja jednostki
Deklaracja sygnałów  połączeń między wewnętrznymi
Deklaracja sygnałów  połączeń między wewnętrznymi
entity even_detector_sop is
elementami
elementami
port(
x : in std_logic_vector(2 downto 0);
(not x(2)) and
p1
(not x(1)) and
even : out std_logic
(not x(0))
);
end even_detector_sop ;
X
(not x(2)) and
p2
x(1) and
x(0);
x(0);
even
even
x(2)
-- definicja architektury
p1 or p2 or
x(1)
p3 or p4
architecture sop_arch of even_detector_sop is
x(0)
x(2) and
p3
(not x(1)) and
signal p1, p2, p3, p4 : std_logic;
x(0);
3
begin
p1 <= (not x(2)) and (not x(1)) and (not x(0));
x(2) and
p4
x(1) and
p2 <= (not x(2)) and x(1) and x(0);
(not x(0))
p3 <= x(2) and (not x(1)) and x(0);
p4 <= x(2) and x(1) and (not x(0));
even <= p1 or p2 or p3 or p4;
Współbieżne operacje wyobrażają części układu działające
Współbieżne operacje wyobrażają części układu działające
end sop_arch;
równolegle w układzie. Połączone przy wykorzystaniu
równolegle w układzie. Połączone przy wykorzystaniu
sygnałów tworzą sieć.
sygnałów tworzą sieć.
Kolejność tych operacji nie ma znaczenia
Kolejność tych operacji nie ma znaczenia
Mariusz Rawski
9
Działania architektury SOP
Inaczej niż w przypadku wykonania instrukcji w
Inaczej niż w przypadku wykonania instrukcji w
Zmiana na wejściach
tradycyjnym języku programowania, operacje
układu uruchamia
współbieżne są niezależne i mogą być aktywowane
elementy układu, które
równolegle. Gdy tylko wejścia takiej  operacji się
generują nowe
zmienią operacja się  budzi i oblicza odpowiedz na
odpowiedzi
pobudzając do
nowe wartości wejściowe. Wynik obliczeń jest
działania kolejne
widoczny na wyjściu z pewnym opóznieniem.
części systemu
Zmiana sygnału wyjściowego może z kolei
aktywować dalsze elementy układu.
Mariusz Rawski
10
Wynik kompilacji kodu VHDL
Dokładnie jak
zapisaliśmy.
Mariusz Rawski
11
Koncepcja realizacji architektury XOR
Wprowadzenie sygnałów wejściowych do wnętrza układu
library ieee; Wprowadzenie sygnałów wejściowych do wnętrza układu
use ieee.std_logic_1164.all;
-- deklaracja jednostki
Deklaracja sygnału  połączeń między wewnętrznymi
Deklaracja sygnału  połączeń między wewnętrznymi
entity even_detector_xor is
elementami
elementami
port(
x : in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_xor ;
X
even
even
x(2)
x(2)
x(2) xor
odd
-- definicja architektury
x(1)
x(1) xor not odd
x(0)
x(0)
architecture xor_arch of even_detector_xor is
signal odd : std_logic;
3
begin
odd <= x(2) xor x(1) xor x(0);
even <= not odd;
end xor_arch ;
Współbieżne operacje wyobrażają części układu działające
Współbieżne operacje wyobrażają części układu działające
równolegle w układzie
równolegle w układzie
Mariusz Rawski
12
Wynik kompilacji kodu VHDL
Dokładnie jak
zapisaliśmy.
Mariusz Rawski
13
Opis strukturalny
library ieee; begin
use ieee.std_logic_1164.all; -- konkretyzacja pierwszej bramki xor
xorgate1 : xor2
-- deklaracja jednostki port map(i1 => x(2), i2 => x(1), o1 => s1);
entity even_detector_str is
port( -- konkretyzacja drugiej bramki xor
x : in std_logic_vector(2 downto 0); xorgate2 : xor2
even : out std_logic port map(i1 => x(0), i2 => s1, o1 => s2);
);
end even_detector_str ; -- konkretyzacja bramki not
notgate1 : not1
-- definicja architektury port map(i1 => s2,o1 => even);
architecture structure of even_detector_str is end structure ;
-- deklaracja komponentow
component not1
component not1
port(
Konkretyzacja komponentów
Konkretyzacja komponentów
i1 : in std_logic;
o1 : out std_logic
);
end component;
x(2)
i1
o1
xor2
x(1)
component xor2
i2
X
even
port(
i1
i1, i2 : in std_logic;
o1 i1 o1
x(0) xor2 not1
i2
o1 : out std_logic
);
3
end component;
signal s1, s2 : std_logic;
Deklaracja komponentów
Deklaracja komponentów
Mariusz Rawski
14
Opis strukturalny
library ieee; library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_1164.all;
-- deklaracja jednostki -- deklaracja jednostki
entity not1 is entity xor2 is
port( port(
i1 : in std_logic; i1, i2 : in std_logic;
o1 : out std_logic o1 : out std_logic
); );
end not1 ; end xor2 ;
-- definicja architektury -- definicja architektury
architecture structure of not1 is architecture structure of xor2 is
begin begin
o1 <= not i1; o1 <= i1 xor i2;
end structure ; end structure ;
end structure ; end structure ;
" Konkretyzacja komponentów jest jedną z instrukcji współbieżnych
" Architektura zawierająca jedynie instrukcje konkretyzacji jest swoistym sposobem
tekstowego opisu schematu blokowego
" Komponent może być istniejącym modułem lub hipotetycznym systemem, którey jest
jeszcze niezaprojektowany
" Opis strukturalny pozwala na projektowanie hierarchiczne  złożony system może być
podzielony na mniejsze podsystemy, które są projektowane niezależnie i które mogą być
dalej dzielone.
" Strukturalna reprezentacja pozwala opisać rezultat syntezy  sieć bramek lub komórek
Mariusz Rawski
15
Wynik kompilacji kodu VHDL
Dokładnie jak
zapisaliśmy. Jest
nawet zachowana
hierarchia.
Mariusz Rawski
16
Abstrakcyjny opis funkcjonalny
" W przypadku dużych systemów implementacja może być bardzo skomplikowana
" W początkowej fazie projektowania istnieje raczej potrzeba zbadania działania
projektowanego systemu niż wymóg stworzenia rzeczywistego układu
" Z tego względu, iż rozumowanie człowieka przypomina proces sekwencyjny, lepiej
to odzwierciedlają klasyczne języki programowania
" VHDL udostępnia konstrukcję reprezentującą sekwencyjny proces z możliwością
zastosowania zmiennych
process (lista_czułości)
process (lista_czułości)
variable definicja;
begin
instrukcje sekwencyjne;
end process;
" Lista czułości zawiera sygnały, których zmiana aktywuje proces
" Instrukcje wewnątrz procesu są podobne do tradycyjnych języków programowania
" Można wykorzystywać zmienne a wykonanie instrukcji jest sekwencyjne
Mariusz Rawski
17
Opis funkcjonalny
library ieee;
use ieee.std_logic_1164.all;
-- deklaracja jednostki
process (x)
variable tmp : std_logic;
entity even_detector_beh1 is
begin
even
x(2)
port(
X
tmp := '0';
x(1)
for i in 2 downto 0 loop not odd
x : in std_logic_vector(2 downto 0);
x(0) tmp := tmp xor x(i);
even : out std_logic
end loop;
odd <= tmp;
);
3 end process;
end even_detector_beh1 ;
-- definicja architektury
architecture behavior of even_detector_beh1 is
-- deklaracja sygnalu
signal odd : std_logic;
signal odd : std_logic;
begin
Jak mam zdecydować o tym
Jak mam zdecydować o tym
even <= not odd;
czy liczba jedynek w wektorze
czy liczba jedynek w wektorze
process (x)
variable tmp : std_logic;
binarnym jest parzysta to
binarnym jest parzysta to
begin
sprawdzając kolejne bity, z
sprawdzając kolejne bity, z
tmp := '0';
każdym razem gdy znajdę
każdym razem gdy znajdę
for i in 2 downto 0 loop
jedynkę zmieniam decyzję.
jedynkę zmieniam decyzję.
tmp := tmp xor x(i);
end loop;
odd <= tmp;
end process;
end behavior ;
Proces opisujący sposób
Proces opisujący sposób
obliczenia nieparzystości liczby
obliczenia nieparzystości liczby
jedynek w wektorze
jedynek w wektorze
wejściowym
wejściowym
Mariusz Rawski
18
Wynik kompilacji kodu VHDL
" "
x(0) x(2) x(0)
Wygląda to dobrze.
Mariusz Rawski
19
Opis funkcjonalny
library ieee;
use ieee.std_logic_1164.all;
process (x)
variable sum, r : integer;
begin
-- deklaracja jednostki
sum := 0;
for i in 2 downto 0 loop
entity even_detector_beh2 is
if (x(i) = '1') then
even
x(2)
port(
X sum := sum + 1;
x(1)
end if;
x : in std_logic_vector(2 downto 0);
end loop;
x(0)
even : out std_logic
r := sum mod 2;
if (r = 0) then
);
even <= '1';
3
end even_detector_beh2 ;
else
even <= '0';
end if;
-- definicja architektury
end process;
architecture behavior of even_detector_beh2 is
begin
process (x)
process (x)
variable sum, r : integer;
begin
Wystarczy policzyć ile jest
Wystarczy policzyć ile jest
sum := 0;
jedynek w wektorze i liczbę
jedynek w wektorze i liczbę
for i in 2 downto 0 loop
która wyjdzie wziąć modulo 2.
która wyjdzie wziąć modulo 2.
if (x(i) = '1') then
Jak będzie 0 tzn. parzysta jak
Jak będzie 0 tzn. parzysta jak
sum := sum + 1;
nie to nieparzysta
end if; nie to nieparzysta
end loop;
r := sum mod 2;
if (r = 0) then
even <= '1';
else
Proces opisujący sposób
Proces opisujący sposób
even <= '0';
obliczenia nieparzystości liczb
obliczenia nieparzystości liczb
end if;
jedynek w wektorze
jedynek w wektorze
end process;
wejściowym
wejściowym
end behavior ;
Mariusz Rawski
20
Wynik kompilacji kodu VHDL
Jak to właściwie działa?
Mariusz Rawski
21
Testbench
" Jednym z podstawowych zastosowań języka VHDL jest symulacja, gdzie bada się
działanie układu dla zweryfikowania poprawności projektu.
" Symulację można porównać do badania fizycznego układu, którego wejścia
podłączamy do stymulatora (generatora testów) i obserwujemy wyjścia.
" Symulacja kodu VHDL to wykonywanie wirtualnego eksperymentu, w którym
fizyczny układ zastąpiono opisem VHDL.
" Dodatkowo można wykorzystać VHDL do opisu generatora testów i modułu
kolekcjonującego odpowiedzi układu i porównującego je ze wzorcem.
" Mechanizm taki nosi nazwę testbench
" Mechanizm taki nosi nazwę testbench
process
process
variable error_response : boolean;
variable error_response : boolean;
process
process
begin
begin
begin
begin
wait on test_vector;
wait on test_vector;
test_vector <= "000";
test_vector <= "000";
wait for 100 ns;
wait for 100 ns;
wait for 100 ns; if ((test_vector = "000" and response = '1') or
wait for 100 ns; if ((test_vector = "000" and response = '1') or
(test_vector = "001" and response = '0') or
(test_vector = "001" and response = '0') or
test_vector <= "001";
test_vector <= "001";
(test_vector = "010" and response = '0') or
(test_vector = "010" and response = '0') or
wait for 100 ns;
wait for 100 ns;
(test_vector = "011" and response = '1') or
(test_vector = "011" and response = '1') or
UUT
test_vector <= "010";
test_vector <= "010";
(test_vector = "100" and response = '0') or
(test_vector = "100" and response = '0') or
wait for 100 ns;
wait for 100 ns;
(test_vector = "101" and response = '1') or
(test_vector = "101" and response = '1') or
test_vector <= "011";
test_vector <= "011";
(test_vector = "110" and response = '1') or
(test_vector = "110" and response = '1') or
(Unit Under Test)
wait for 100 ns; (test_vector = "111" and response = '0'))
wait for 100 ns; (test_vector = "111" and response = '0'))
then
then
test_vector <= "100";
test_vector <= "100";
error_response := false;
error_response := false;
wait for 100 ns;
wait for 100 ns;
else
else
test_vector <= "101";
test_vector <= "101";
error_response := true;
error_response := true;
wait for 100 ns;
wait for 100 ns;
end if;
end if;
test_vector <= "110";
test_vector <= "110";
wait for 100 ns; -- raportowanie bledu
wait for 100 ns; -- raportowanie bledu
assert not error_response
assert not error_response
test_vector <= "111";
test_vector <= "111";
report "Test zakonczyl sie niepowidzeniem."
report "Test zakonczyl sie niepowidzeniem."
wait for 100 ns;
wait for 100 ns;
severity note;
severity note;
end process;
end process;
end process;
end process;
end testbench;
end testbench;
Mariusz Rawski
22
Testbench
entity even_detector_testbench is
-- generator testow -- weryfikator
end even_detector_testbench;
process process
begin variable error_response : boolean;
architecture testbench of even_detector_testbench is
test_vector <= "000"; begin
-- deklaracja modulu poddanego testowi
wait for 100 ns; wait on test_vector;
component even_detector
test_vector <= "001"; wait for 100 ns;
port (
wait for 100 ns; if ((test_vector = "000" and response = '1') or
x : in std_logic_vector (2 downto 0);
test_vector <= "010"; (test_vector = "001" and response = '0') or
even : out std_logic
wait for 100 ns; (test_vector = "010" and response = '0') or
);
test_vector <= "011"; (test_vector = "011" and response = '1') or
end component;
wait for 100 ns; (test_vector = "100" and response = '0') or
test_vector <= "100"; (test_vector = "101" and response = '1') or
-- deklaracja sygnalow testow i odpowiedzi
wait for 100 ns; (test_vector = "110" and response = '1') or
signal test_vector : std_logic_vector (2 downto 0);
test_vector <= "101"; (test_vector = "111" and response = '0'))
signal response : std_logic;
wait for 100 ns; then
test_vector <= "110"; error_response := false;
begin
wait for 100 ns; else
-- konkretyzacja modułu poddanego testowi
-- konkretyzacja modułu poddanego testowi
test_vector <= "111"; true
test_vector <= "111"; error_response := true;
uut : even_detector
wait for 100 ns; end if;
port map (x => test_vector, even => response);
end process;
-- raportowanie bledu
assert not error_response
report "Test zakonczyl sie niepowidzeniem."
severity note;
end process;
end testbench;
Weryfikator porównuje
Weryfikator porównuje
Konkretyzacja modułu odpowiedzi modułu
Konkretyzacja modułu odpowiedzi modułu
Generator testów generuje
Generator testów generuje
poddawanego testowi i poddawanego testowi ze
poddawanego testowi i poddawanego testowi ze
kolejne wektory testowe w
kolejne wektory testowe w
deklaracja sygnałów testów wzorcami i w razie wykrycia
deklaracja sygnałów testów wzorcami i w razie wykrycia
zadanym rytmie
zadanym rytmie
i odpowiedzi. niezgodności generuje
i odpowiedzi. niezgodności generuje
raport
raport
Mariusz Rawski
23
Konfiguracja
" W języku VHDL istnieje możliwość
przypisania do jednostki projektowej
entity
entity wielu architektur
" Na etapie symulacji czy syntezy
można wybrać która architektura ma
być  podłączona do jednostki
projektowej.
architecture
architecture
architecture
configuration config of even_detector_testbench is
for testbench
for uut : even_detectod
use entity work.even_detrector(xor_arch);
end for;
end for;
end config;
Mariusz Rawski
24


Wyszukiwarka

Podobne podstrony:
Język opisu sprzętu VHDL
Język opisu sprzętu VHDL
sprzęt wędkarski cz 1
59 Języki świata bez odpowiedzi
SIMULINK MATLAB to VHDL Route
Rozdział 04 System obsługi przerwań sprzętowych
03 PEiM Met opisu ukł elektr doc (2)
Wymagania zasadnicze i procedura oceny zgodności sprzętu elektrycznego
05 KARTY SIECIOWE SPRZĘTOWE SERCE SIECI LAN
07 lotniska i sprzet lotniskowo hangarowy
sprzet
Karta izolacyjnego sprzętu ochronnego używanego w
7 Ratownictwo Górnicze Sprzęt Ochronny
dysleksja a języki obcepdf
Radziecki sprzęt, polski bałagan

więcej podobnych podstron