INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 2
Proč HW realizace algoritmu● Vyšší rychlost – paralelní nebo zřetězené zpracování,
přizpůsobení výpočetních jednotek algoritmu– Například jeden FPGA čip je až 800x rychlejší než Pentium Core
2 při analýze DNA sekvencí. Dalším příkladem je analýza paketů na síti, kdy FPGA umožňuje hledat v paketech řetězce až 100x rychleji než PC s Pentium Core 2.
● Nižší spotřeba – snížení pracovní frekvence, dynamická správa napájení a připojování hodin (clock gating)– Všechny vestavěné systémy napájené z baterie. Příkladem může
být mp3 přehrávač, mobilní telefon, inteligentní kamera napájená prostřednictvím z Ethernetu a spousta dalších.
● Menší rozměry – je možné integrovat celý výpočetní systém na jediný čip
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 3
Návrh pro FPGA
0110010 0000101 1011100
library IEEE;use IEEE.std_logic_1164.all;
entity blk4 is port ( i1: in STD_LOGIC; i2: in STD_LOGIC; i3: in STD_LOGIC; i4: in STD_LOGIC; o1: out STD_LOGIC );end blk4;architecture struc of blk4 isbegin o1 <= (i1 or i2) and (i3 and i4);end struc;
Popis obvodu
Vytvořobvod
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 4
Kroky návrhu pro FPGA● Vstup
– odladěný zdrojový kód (např. v jazyce VHDL, Verilog, SystemC, HandelC apod.) nebo schéma zapojení
– požadavek na celkové zpoždění, plochu
– vhodné FPGA (počet CLB, fmax, počet I/O, cena)
● Syntéza– transformace zdrojového kódu na zapojení na úrovni hradel (systém nakreslí schéma
zapojení!)
– mapování na cílovou technologii
– optimalizace/minimalizace
● Rozmístění a propojení elementů v FPGA● Vygenerování konfiguračního souboru● Nahrání konfiguračního souboru do SRAM v FPGA
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 5
Syntéza obvodu
dd.vhd
obvod popsaný ve VHDL
Cílová technologie -
FPGA
16LUT – lze naprogramovat log. funkci 4 proměnných + připojit KO
Programovatelné propojení –
konfigurační bity ovládají spínače
KO
konfig. bit
Syntéza je proces transformace popisu na podrobnější popis.
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 6
Syntéza obvodu● Behaviorální syntéza
– Jedná se o syntézu abstraktního chování, kdy je daný algoritmus popsán na nejvyšší úrovni. K popisu mohou byt použity všechny syntaktické konstrukce, které HDL jazyk poskytuje. Popis je soustředěn na:
● tok dat,● omezení vztahující se na vstup a výstup a ● uživatelská omezení.
– Výstupem behaviorální syntézy je popis na úrovni meziregistrových přenosu, který má stejné chování jako vstupní obvod. Nevýhodou je, že veškeré optimalizace jsou nechány na nástrojích realizujících syntézu. Jediná možnost, jak řídit výsledek syntézy, je správné nastavení omezení a nástrojů.
● RTL syntéza– Jedná se o syntézu na úrovni meziregistrových přenosů. Vstupní obvod je tedy popsán pomocí registrů,
čítačů, automatů atd. Popis se vyznačuje tím, že je od sebe oddělena DATOVÁ a ŘÍDICÍ cesta. ŘÍDICÍ cestou se většinou rozumí FSM automat. DATOVOU cestou pak různé logické sítě, sčítačky, registry, atd. Celá DATOVÁ cesta je pak řízena pomocí signálů z ŘÍDICÍ cesty. Syntezátor z tohoto popisu vygeneruje popis na úrovni hradel. Výsledek syntézy zároveň obsahuje optimalizovanou datovou cestu, paměti a řídicí struktury.
● Logická syntéza– Syntéza na úrovni hradel. Popis je složen pouze z komponent cílové technologie vzájemně propojené
pomocí signálů.
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 7
HDL jazyky● Na rozdíl od schematu návrhář popisuje funkci obvodu
pomocí jazyka– Zařízení je možné modelovat a simulovat– Proces syntézy umožňuje transformovat HDL popis do prvků
cílové technologie
● V praxi se používají zejména jazyky VHDL a Verilog – Oba jazyky mohou být vstupem procesu syntézy– VHDL dominuje v Evropě, Verilog v USA
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 8
Jazyk VHDL● Zkratka VHDL z akronymu:
VHDL = VHSIC Hardware Description Language
● VHSIC je zkratka pro Very High Speed Integrated Circuit● Původně bylo VHDL vyvinuto pro vojenské účely ke specifikaci
číslicových systémů, později se stalo IEEE standardem● Jazyk VHDL není svázán s žádnou cílovou technologií● Umožňuje tři základní úrovně popisu – behaviorální, strukturní a
data flow popis● Existuje spousta nástrojů umožňující syntézu nebo simulaci
obvodů popsaných v jazyku VHDL
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 9
Číslicové zařízení ve VHDL● VHDL popisuje číslicová zařízení a jednotlivé části zařízení
pomocí komponent, které se popisují pomocí:– Entita definuje rozhraní komponenty– Architektura popisuje chování nebo strukturu komponenty
A(7:0)
B(7:0)
Entita
Definicerozhraní
Y(7:0)
Popisfunkce
Architektura
součetJedna entita
může mít více architektur
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 10
Entita● Popisuje rozhraní mezi komponentou a okolím● Rozhraní komponenty se skládá z portů
(signálů rozhraní) a generických parametrů● Signály rozhraní mohou být podle směru
v módu IN, OUT nebo INOUT
entity NAND is
end entity register;
generic (DATA_WIDTH : integer :=8); parametry
port (A : in std_logic_vector(DATA_WIDTH-1 downto 0); B : in std_logic_vector(DATA_WIDTH-1 downto 0); Y : out std_logic_vector(DATA_WIDTH-1 downto 0);); signály rozhraní
Příklad:
A(7:0)
B(7:0)
Entita
Y(7:0)
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 11
Architektura● Definuje chování nebo strukturu komponenty● Architektura je vždy svázána s entitou, která definuje rozhraní s
okolím● Každá komponenta může být popsána na úrovni struktury, chování
nebo dataflow● Různé způsoby popisu je možné kombinovat
Popisarchitekturykomponenty
CHOVÁNÍCo komponenta dělá?
Behaviorální popisSTRUKTURA
Z čeho je komponenta složena?
Strukturní popis DATOVÉ ZÁVISLOTIJaký je datový tok signálů?
Dataflow popis
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 12
Architektura
Architecture name of entity_name isDeklarační část
beginSekce paralelních příkazů
end architecture name;Deklarační část
architekturyje vyhrazena pro pro deklaraci
signálů, konstant nebo typů použitých uvnitř architektury.
Jméno entitypopisující rozhraní architektury.
Architekturu není možné použít s jinou entitou, než je uvedená zde.
Syntax:
Sekce paralelních příkazů● Součástí sekce paralelních příkazů mohou být instance komponent nebo
procesy vzájemně propojené signály– Behaviorální popis – architektura je složena z jednoho nebo více procesů– Strukturní popis – architektura obsahuje pouze instance komponent– V praxi se často používají oba přístupy i v rámci jedné architektury
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 13
Behaviorální popis (jeden proces)● Architektura složena z jednoho nebo více procesů● Proces je popsán na úrovni algoritmu (příkazy, podmínky, cykly, atd.)● Cílem je pouze popsat, jak se mění výstupy v závislosti na změnách
vstupních signálů, nemusí být zřejmá hardwarová realizace
Proces one spočítá počet jedničkových bitů ve
vstupních signálu BUS_IN a výslednou hodnotu přiřadí
do signálu N_ONE
Příklad:
BUS_IN (15:0) N_ONE(3:0)one
N_ONEone: process(BUS_IN) variable count : std_logic_vector(3 downto 0);begin count := “0000“; for i in 0 to 15 loop if BUS_IN(i) = '1' then count := count + '1'; end if; end loop; N_ONE <= count;end process one;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 14
Behaviorální popis (více procesů)● Architektura se může skládat z více procesů:
– Procesy mohou číst/nastavovat vstupními/výstupními signály– Komunikace mezi procesy je realizována prostřednictvím signálů
Příklad: architecture behv of NAND is
signal ab_and : stdl_logic_vector(7 downto 0);
begin
and_proc : process (A, B)
begin
ab_and <= A AND B;
end process and_proc;
not_proc : process (ab_and)
begin
Y <= not ab_and;
end process not_proc;
end behv;
A(7:0)
B(7:0)Y(7:0)
AND NOT
Procesy komunikují prostřednictvím signálu
ab_and
NAND
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 15
Proces ve VHDL
● Proces může popisovat chování celé komponenty nebo pouze její části– Architektury může obsahovat více procesů
komunikujících vzájemně pomocí signálů
name: process (sensitivity list)declarations
beginsequential statements
end process name; Deklarační část procesuje vyhrazena pro deklaraci
proměnných, konstant nebo typů použitých uvnitř procesu
Seznam citlivých proměnných
Kdykoliv se změní signál ze sensitivity listu, je spuštěn proces
a vypočítají se nové hodnoty signálů
Syntax:
Sekvenční příkazyProgram, který popisuje chování dané komponenty nebo její části. Na základě vstupních signálů a vnitřních proměnných program
vypočítá hodnoty signálů
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 16
Řídicí struktury v procesu● Podmíněné vykonání příkazů (if ... then ... )
● Podmíněné vykonání příkazů s alternativou (if ... then ... else ... nebo if ... then ... elsif ... )
● Výběr více příkazů (case ... )
IF <condition> THEN <statements> [ELSIF <statements>] [ELSIF <statements>] END IF;
IF <condition> THEN <statements> END IF;
CASE <condition> IS WHEN <value> => <statements> [WHEN <value> => <statements>]END CASE;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 17
Řídicí struktury v procesu – cykly● Cykly umožňující opakované vykonání sekvence příkazů
– while ... do ...
– for ... loop ...
WHILE <condition> LOOP <statements> END LOOP;
FOR <range> LOOP <statements> END LOOP;
● Příkazy pro přerušení běhu smyčky– NEXT – skok do další iterace
– EXIT – ukončení celé smyčky
next when <condition>;
exit when <condition>;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 18
Senzitivity list procesu● Senzitivity list procesu – proces je „spuštěn“ pokud dojde ke
změně signálu uvedeného na senzitivity listu procesu– Po provedení sekvence příkazů je proces pozastaven a čeká se opět
na změnu signálu ze senzitivity listu
proc_1: process begin
DATA <= “1010“;wait for 10 ns;DATA <= “0101“;wait for 10 ns;
end process proc_1;
● Proces obsahující senzitivity list nemůže obsahovat příkaz WAIT● Příkaz WAIT se používá zejména při tvorbě testbenche
proc_2: process (DATA)begin
statement1;statement2;statement3;
end process proc_2;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 19
Dataflow popis ● Modeluje datové závislosti● Zkrácený zápis chování pomocí paralelních příkazů uvnitř
architektury:– Přiřazovací příkaz
– Podmíněný přiřazovací příkaz
– Výběrový přiřazovací příkaz
Příklad: A(7:0)
B(7:0)Y(7:0)
AND
NANDarchitecture dataflow of NAND isbegin Y <= not (A AND B);end behv;
Y <= B when (A='1') else '0';
Y <= NOT (A AND B);
with S select Y <= A when “0”, B when “1”,
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 20
Strukturní popis● Popisuje z čeho se daný systém (zařízení nebo komponenta) skládá – jakou
má obvod strukturu● Strukturní popis může mít více úrovní hierarchie
– Každá dílčí komponenta může být popsána opět na úrovni struktury nebo na úrovni chování
– Komponenty na nejnižší úrovni jsou vždy popsány behaviorálně
Příklad: A(7:0)
B(7:0)Y(7:0)
AND NOT
Komponenty komunikují prostřednictvím signálu ab_and
architecture struct of NAND is signal ab_and : stdl_logic_vector(7 downto 0);begin and_i: entity work.AND
port map ( In0=>A, In1=>B, Output=>ab_and); not_i: entity work.NOT port map ( In0=>ab_and, Output=>Y);end behv;
NAND
Použité komponenty
AND NOTIn0In1
Output In0 OutputNOTAND
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 21
Signály ve VHDL● Signály slouží pro komunikaci mezi
komponenty nebo procesy● Mohou být implementovány pomocí
vodiče nebo sběrnice (více vodičů)
A B
C
● Signálu je možné přiřadit libovolný datový typ, který definuje charakter přenášených hodnot– Pro reprezentace vodiče se používá typ std_logic– Pro sběrnice se používá typ std_logic_vector(). Šířka sběrnice je
definována šířkou pole.
● Syntax deklarace:
komponenta
signal <jmeno> : <typ> [:= imp_hodnota];
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 22
entity sig_var isport(d1, d2, d3: in std_logic; res1, res2: out std_logic);end sig_var;architecture behv of sig_var is signal sig_s1: std_logic;begin proc1: process(d1, d2, d3) variable var_s1: std_logic; begin var_s1 := d1 and d2; res1 <= var_s1 xor d3; end process; proc2: process(d1,d2,d3) begin sig_s1 <= d1 and d2; res2 <= sig_s1 xor d3; end process;end behv;
Signál vs. Proměnné v procesu
Sledujte rozdíl mezi res1 a res2.
d1d2d3
res1res2
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 23
Komentáře, znaky, řetězce, ...● Komentář – uvozen dvojicí znaků --
● Znak nebo bit – vkládá se do apostrofů '1'
● Řetězec nebo bitový vektor – vkládá se do uvozovek
● Identifikátory – podobná pravidla jako u jiných jazyků
-- Toto je komentář
sig_bit <= '1';
sig_bit_vector <= “0001“;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 24
Příklady rozšiřujících datových typů● Výčtový typ
● Pole
TYPE muj_stav IS (reset, idle, rw, io);signal stav: muj_stav;stav <= reset; -- nelze stav <=“00”;
TYPE data_bus IS ARRAY (0 TO 1) OF BIT;variable x: data_bus;variable y: bit;y := x(12);
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 25
Práce na úrovni bitů
signal a, b: bit_vector (3 downto 0);signal c : bit_vector (7 downto 0);signal clk : bit;
Uvažujme deklarace signálů:
Konkatenace signálů:c <= a & b;
Posun doleva a doprava:b <= b(2 downto 0) & '0'; -- posun dolevab <= '0' & b(3 downto 1); -- posun doprava
Agregace:a <= (others => '0'); -- vše do nulya <= (‘0’, ‘1’, others=>’0’); -- MSB = “01“
1 101
1 0 1 1
&01 1 1
1 0 1 1c
a b
1 1 1 1
1 1 1 0
1 1 1 1
1 1 10doleva doprava
00000010
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 26
Testbench● Testování VHDL komponent v prostředí VHDL
testbench
d1d2
d3
res1
res2UUT UUT
Generovánítestovacích
vektorů
● Testbench obvykle obsahuje:– Instanci vyvíjené komponenty označenou jako UUT (Unit Under Test)– Generátor testovacích vektorů– Monitorování a ověřování reakcí UUT
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 27
Příklad Testbenchentity testbench isend entity testbench;architecture tb_arch of testbench is signal a, b, y : std_logic;begin UUT : entity work.and_gate port map( A => a, B => b, Y => y );
test : process begin a <= 0; b <= 0; wait for 10 ns; a <= 0; b <= 1; wait for 10 ns; a <= 1; b <= 0; wait for 10 ns; a <= 1; b <= 1; wait; end process test;end architecture tb_arch;
Testbench Entity
Instance UUT(napojení testovacích vektorů)
Přikládání testovacích vektorů
Testovací vektory připojené k UUT
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 28
Příklady ve VHDL● Klopný obvod typu D
– Asynchronní– Synchronní
● Multiplexor● Sčítačka● FSM – Handshake
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 29
Klopný obvod typu D
DCLK DOUT
RST
DINlibrary IEEE;use IEEE.std_logic_1164.all;entity dffx isport ( CLK : in std_logic; RST : in std_logic; DIN : in std_logic; DOUT : out std_logic );end dffx;architecture behav of dffx isbegin process (CLK,RST) begin if (RST = '1') then DOUT <= '0'; elsif (CLK'event and CLK = '1') then DOUT <= DIN; end if; end process;end behav;
Asynchronní reset(není synchronizován s hodinovým signálem)
CLK (clock) – hodinový vstupRST(reset) – asynchronní resetDIN (data in) – data přivedená na
vstup retistruDOUT (data output) – hodnota
uložená v registru
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 30
Asynchronní reset u KO typu D process (CLK,RST,DIN) begin if (RST = '1') then DOUT <= '0'; elsif (CLK'event and CLK = '1') then DOUT <= DIN; end if; end process;
CLK
RST
DOUT
DCLK
RST
DIN='1'
DOUT
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 31
Synchronní reset u KO typu D process (CLK,RST,DIN) begin if (CLK'event and CLK = '1') then if (RST = '1') then DOUT <= '0'; else DOUT <= DIN; end if; end if; end process;
CLK
RESET
DOUT
DCLK
RST
DIN='1'
DOUT
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 32
Multiplexor
MUXO
S
library ieee; use ieee.std_logic_1164.all;entity Mux isport( I3: in std_logic_vector(2 downto 0); I2: in std_logic_vector(2 downto 0); I1: in std_logic_vector(2 downto 0); I0: in std_logic_vector(2 downto 0); S : in std_logic_vector(1 downto 0); O : out std_logic_vector(2 downto 0));end Mux; architecture behv1 of Mux isbegin process(I3,I2,I1,I0,S) begin case S is when "00" => O <= I0; when "01" => O <= I1; when "10" => O <= I2; when "11" => O <= I3; when others => O <= "ZZZ"; end case; end process;end behv1;
IN0, IN1, IN2, IN3 – přepínané vstupyS – řídící hradloY – výstup multiplexoru
IN0IN1IN2IN3
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 33
Sčítačka
A
B
Sum
Cout
entity ADDER is port( A, B : in std_logic;
Sum, Cout: out std_logic); end entity ADDER;
Pravdivostní tabulka:
ADDER
Cout=A⋅B
SoučetPřetečenído vyššího řádu
A
B
Cout S
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 34
Sčítačkaa
b
Sum
Cout
Summation : process (A, B)begin Sum <= A XOR B;end process Summation;
Carry : process (A, B)begin Cout <= (A AND B);end process Carry;
ARCHITECTURE behav of ADDER ISBEGIN Summation : process (A, B) begin Sum <= A XOR B; end process Summation; Carry : process (A, B) begin Cout <= (A AND B); end process Carry;END behav;
● Popis s využitím procesů ● Dataflow popisARCHITECTURE dataflow of ADDER ISBEGIN Sum <= A XOR B; Cout <= A AND B;END dataflow;
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 35
FSM – Handshake
RQRQ
FSMACK
DATAdrdy
RST
CLK
DATA
ACK
DATA
idle0,0
dnext
● Předání dat pomocí handshake – Zařízení požádá o data pomocí
signálu RQ– Pokud jsou data uloženy ve frontě
(signál drdy), jsou dány na datovou sběrnici (signály DATA) a potvrzeny signálem ACK
– Signálem next se odstraní vyslaná data z fronty
wait0,0
RQ='1' data1,0
drdy='1'
drdy='0'
next0,1
RQ='0'
RQ
='1'
RQ='0'
stavACK,dnext
značení
INP – Číslicové obvody a jazyk VHDL FIT VUT Brno 36
Konec přednášky
Děkuji za pozornost