x - Mariusz Rawski

Transkrypt

x - Mariusz Rawski
CAD
Języki opisu sprzętu
– VHDL
Mariusz Rawski
[email protected]
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
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:
– 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
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óźnienia 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
Przykład
• Układ detektora parzystości:
– wejścia x2, x1, x0,
– wyjście even
• Wejścia zgrupowane w szynę
• Wyjście aktywne, gdy w wektorze
wejściowym jest parzysta liczba
jedynek (0 lub 2)
x2
x1
x0
even
0
0
0
1
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
0
• 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
library ieee;
use ieee.std_logic_1164.all;
-- deklaracja jednostki
entity even_detector_sop is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_sop ;
-- definicja architektury
architecture sop_arch of even_detector_sop is
signal p1, p2, p3, p4
: std_logic;
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));
even <= p1 or p2 or p3 or p4;
end sop_arch;
Mariusz Rawski
Deklaracja jednostki projektowej
Specyfikuje wejścia i wyjścia układu. Opisuje interfejs
projektowanego urządzenia.
X
even
3
Architektura układu
Między słowami kluczowymi begin i end specyfikuje
działania i wewnętrzną organizację układu.
Architektura skojarzona jest z konkretną jednostką
projektową :
architecture sop_arch of even_detector_sop is
8
Koncepcja realizacji architektury SOP
library ieee;
use ieee.std_logic_1164.all;
Wprowadzenie sygnałów wejściowych do wnętrza układu
-- deklaracja jednostki
entity even_detector_sop is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_sop ;
Deklaracja sygnałów – połączeń między wewnętrznymi
elementami
-- definicja architektury
architecture sop_arch of even_detector_sop is
signal p1, p2, p3, p4
: std_logic;
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));
even <= p1 or p2 or p3 or p4;
end sop_arch;
Mariusz Rawski
X
x(2)
x(1)
x(0)
3
(not x(2)) and
(not x(1)) and
(not x(0))
p1
(not x(2)) and
x(1) and
x(0);
p2
even
p1 or p2 or
p3 or p4
x(2) and
(not x(1)) and
x(0);
p3
x(2) and
x(1) and
(not x(0))
p4
Współbieżne operacje wyobrażają części układu działające
równolegle w układzie. Połączone przy wykorzystaniu
sygnałów tworzą sieć.
Kolejność tych operacji nie ma znaczenia
9
Działania architektury SOP
Inaczej niż w przypadku wykonania instrukcji w
tradycyjnym języku programowania, operacje
współbieżne są niezależne i mogą być aktywowane
równolegle. Gdy tylko wejścia takiej ‘operacji’ się
zmienią operacja się ‘budzi’ i oblicza odpowiedź na
nowe wartości wejściowe. Wynik obliczeń jest
widoczny na wyjściu z pewnym opóźnieniem.
Zmiana sygnału wyjściowego może z kolei
aktywować dalsze elementy układu.
Mariusz Rawski
Zmiana na wejściach
układu uruchamia
elementy układu, które
generują nowe
odpowiedzi
pobudzając do
działania kolejne
części systemu
10
Wynik kompilacji kodu VHDL
Dokładnie jak
zapisaliśmy.
Mariusz Rawski
11
Koncepcja realizacji architektury XOR
library ieee;
use ieee.std_logic_1164.all;
Wprowadzenie sygnałów wejściowych do wnętrza układu
-- deklaracja jednostki
entity even_detector_xor is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_xor ;
Deklaracja sygnału – połączeń między wewnętrznymi
elementami
-- definicja architektury
architecture xor_arch of even_detector_xor is
signal odd : std_logic;
begin
odd <= x(2) xor x(1) xor x(0);
even <= not odd;
end xor_arch ;
X
x(2)
x(1)
x(0)
x(2) xor
x(1) xor
x(0)
even
odd
not odd
3
Współbieżne operacje wyobrażają części układu działające
równolegle w układzie
Mariusz Rawski
12
Wynik kompilacji kodu VHDL
Dokładnie jak
zapisaliśmy.
Mariusz Rawski
13
Opis strukturalny
library ieee;
use ieee.std_logic_1164.all;
-- deklaracja jednostki
entity even_detector_str is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_str ;
-- definicja architektury
architecture structure of even_detector_str is
-- deklaracja komponentow
component not1
port(
i1 : in std_logic;
o1 : out std_logic
);
end component;
component xor2
port(
i1, i2 : in std_logic;
o1
: out std_logic
);
end component;
signal s1, s2 : std_logic;
begin
-- konkretyzacja pierwszej bramki xor
xorgate1 : xor2
port map(i1 => x(2), i2 => x(1), o1 => s1);
-- konkretyzacja drugiej bramki xor
xorgate2 : xor2
port map(i1 => x(0), i2 => s1, o1 => s2);
-- konkretyzacja bramki not
notgate1 : not1
port map(i1 => s2,o1 => even);
end structure ;
Konkretyzacja komponentów
X
x(2)
x(1)
i1
i2
xor2
x(0)
o1
even
i1
i2
xor2
o1
i1
not1
o1
3
Deklaracja komponentów
Mariusz Rawski
14
Opis strukturalny
library ieee;
use ieee.std_logic_1164.all;
-- deklaracja jednostki
entity not1 is
port(
i1 : in std_logic;
o1 : out std_logic
);
end not1 ;
library ieee;
use ieee.std_logic_1164.all;
-- deklaracja jednostki
entity xor2 is
port(
i1, i2 : in std_logic;
o1
: out std_logic
);
end xor2 ;
-- definicja architektury
architecture structure of not1 is
begin
o1 <= not i1;
end structure ;
-- definicja architektury
architecture structure of xor2 is
begin
o1 <= i1 xor i2;
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)
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
entity even_detector_beh1 is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_beh1 ;
-- definicja architektury
architecture behavior of even_detector_beh1 is
-- deklaracja sygnalu
signal odd : std_logic;
begin
even <= not odd;
process (x)
variable tmp : std_logic;
begin
tmp := '0';
for i in 2 downto 0 loop
tmp := tmp xor x(i);
end loop;
odd <= tmp;
end process;
end behavior ;
Mariusz Rawski
X
x(2)
x(1)
x(0)
3
process (x)
variable tmp : std_logic;
begin
tmp := '0';
for i in 2 downto 0 loop
tmp := tmp xor x(i);
end loop;
odd <= tmp;
end process;
even
not odd
Jak mam zdecydować o tym
czy liczba jedynek w wektorze
binarnym jest parzysta to
sprawdzając kolejne bity, z
każdym razem gdy znajdę
jedynkę zmieniam decyzję.
Proces opisujący sposób
obliczenia nieparzystości liczby
jedynek w wektorze
wejściowym
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;
-- deklaracja jednostki
entity even_detector_beh2 is
port(
x
: in std_logic_vector(2 downto 0);
even : out std_logic
);
end even_detector_beh2 ;
-- definicja architektury
architecture behavior of even_detector_beh2 is
begin
process (x)
variable sum, r : integer;
begin
sum := 0;
for i in 2 downto 0 loop
if (x(i) = '1') then
sum := sum + 1;
end if;
end loop;
r := sum mod 2;
if (r = 0) then
even <= '1';
else
even <= '0';
end if;
end process;
end behavior ;
Mariusz Rawski
X
x(2)
x(1)
x(0)
3
process (x)
variable sum, r : integer;
begin
sum := 0;
for i in 2 downto 0 loop
if (x(i) = '1') then
sum := sum + 1;
end if;
end loop;
r := sum mod 2;
if (r = 0) then
even <= '1';
else
even <= '0';
end if;
end process;
even
Wystarczy policzyć ile jest
jedynek w wektorze i liczbę
która wyjdzie wziąć modulo 2.
Jak będzie 0 tzn. parzysta jak
nie to nieparzysta
Proces opisujący sposób
obliczenia nieparzystości liczb
jedynek w wektorze
wejściowym
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
process
process
begin
test_vector <= "000";
wait for 100 ns;
test_vector <= "001";
wait for 100 ns;
test_vector <= "010";
wait for 100 ns;
test_vector <= "011";
wait for 100 ns;
test_vector <= "100";
wait for 100 ns;
test_vector <= "101";
wait for 100 ns;
test_vector <= "110";
wait for 100 ns;
test_vector <= "111";
wait for 100 ns;
end process;
Mariusz Rawski
UUT
(Unit Under Test)
variable error_response : boolean;
begin
wait on test_vector;
wait for 100 ns;
if ((test_vector = "000" and response = '1') or
(test_vector = "001" and response = '0') or
(test_vector = "010" and response = '0') or
(test_vector = "011" and response = '1') or
(test_vector = "100" and response = '0') or
(test_vector = "101" and response = '1') or
(test_vector = "110" and response = '1') or
(test_vector = "111" and response = '0'))
then
error_response := false;
else
error_response := true;
end if;
-- raportowanie bledu
assert not error_response
report "Test zakonczyl sie niepowidzeniem."
severity note;
end process;
end testbench;
22
Testbench
entity even_detector_testbench is
end even_detector_testbench;
architecture testbench of even_detector_testbench is
-- deklaracja modulu poddanego testowi
component even_detector
port (
x
: in std_logic_vector (2 downto 0);
even : out std_logic
);
end component;
-- deklaracja sygnalow testow i odpowiedzi
signal test_vector : std_logic_vector (2 downto 0);
signal response
: std_logic;
begin
-- konkretyzacja modułu poddanego testowi
uut : even_detector
port map (x => test_vector, even => response);
-- generator testow
process
begin
test_vector <= "000";
wait for 100 ns;
test_vector <= "001";
wait for 100 ns;
test_vector <= "010";
wait for 100 ns;
test_vector <= "011";
wait for 100 ns;
test_vector <= "100";
wait for 100 ns;
test_vector <= "101";
wait for 100 ns;
test_vector <= "110";
wait for 100 ns;
test_vector <= "111";
wait for 100 ns;
end process;
-- weryfikator
process
variable error_response : boolean;
begin
wait on test_vector;
wait for 100 ns;
if ((test_vector = "000" and response = '1') or
(test_vector = "001" and response = '0') or
(test_vector = "010" and response = '0') or
(test_vector = "011" and response = '1') or
(test_vector = "100" and response = '0') or
(test_vector = "101" and response = '1') or
(test_vector = "110" and response = '1') or
(test_vector = "111" and response = '0'))
then
error_response := false;
else
error_response := true;
true
end if;
-- raportowanie bledu
assert not error_response
report "Test zakonczyl sie niepowidzeniem."
severity note;
end process;
end testbench;
Konkretyzacja modułu
poddawanego testowi i
deklaracja sygnałów testów
i odpowiedzi.
Mariusz Rawski
Generator testów generuje
kolejne wektory testowe w
zadanym rytmie
Weryfikator porównuje
odpowiedzi modułu
poddawanego testowi ze
wzorcami i w razie wykrycia
niezgodności generuje
raport
23
Konfiguracja
•
•
W języku VHDL istnieje możliwość
przypisania do jednostki projektowej
entity wielu architektur
Na etapie symulacji czy syntezy
można wybrać która architektura ma
być ‘podłączona’ do jednostki
projektowej.
entity
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

Podobne dokumenty