Riistvara kirjelduskeel VHDL L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees 1 Atribuudid Atribuut on väärtus, funktsioon, tüüp, vahemik, signaal või konstant, mida võib siduda ühe või enama märgendiga VHDL kirjelduses Ilma atribuutideta signal s: bit_vector (sz-1 downto 0);... for i in 0 to sz-1 loop... Atribuutidega signal s: bit_vector (7 downto 0);... for i in s low to s high loop... for i in s reverse_range loop... 2 1
Atribuutide kasutamine Seade- ja hoideajad mäluelementides seadeaeg (setup time) sisendsignaal peab olema stabiilne juba mingi aeg enne taktsignaali aktiivset fronti hoideaeg (hold time) sisendsignaal peab jääma stabiilseks mingi aeg pärast taktsignaali aktiivset fronti Põhjuseks signaaliteede erinevad pikkused Võib põhjustada metastabiilsust väljund ei 0 ega 1 metastabiilsus 3 Atribuutide kasutamine seadeaeg 3 ns & hoideaeg 5 ns process (clock,data_in) begin if clock'event and clock='1' then assert data_in'last_event >= 3 ns report "setup time violation" severity warning; data_out <= data_in; end if; if data_in'event and clock='1' then assert clock'last_event >= 5 ns report "hold time violation" severity warning; end if; 4 2
Digitaalsed simulaatorid Sama-aegsed operatsioonid modelleerimine järjestikulises süsteemis Simulatsioonitsükkel signaalide järgmiste väärtuste leidmine signaalide jooksvate väärtuste värskendamine Tsükkelpõhised ja sündmustepõhised cycle-based vs. event-based Viite modelleerimine ühikviide (unit-delay) nullviide (zero-delay) deltaviide (delta-delay) 5 Ühikviide Peamiselt tsükkelpõhised simulaatorid Igas simulatsioonitsüklis arvuta (kõigi) signaalide uued väärtused värskenda signaalide väärtused suurenda simulatsiooniaega ühe ühiku võrra [ja korda tsüklit 1-st alates] leia uued väärtused värskenda väärtused 6 3
Ühikviide X1 <= a and b; x2 <= not c; y <= x1 xor x2; a b c x1 a b x1 y x2 y c x2 sündmuste jadad t b=1 c=0 t+1ns t+2ns x1=1 y=0 x2=1 time [ns] 7 Nullviide Sündmustepõhised simulaatorid Simulatsioonitsükkel - tsükkel tsüklis sündmuse alusel arvuta uus väärtus, eemalda sündmus lisa uus sündmus sündmuste jadasse korda 1-st alates kuni leidub jooksvale simulatsiooniajale planeeritud sündmusi suurenda simulatsiooniaega ühe ühiku võrra [ja korda tsüklit 1-st alates] leia uus väärtus, eemalda sündmus lisa uus sündmus suurenda simul.aega 8 4
Nullviide (#1) X1 <= a and b; x2 <= not c; y <= x1 xor x2; a b c x1 a b x1 y x2 y c x2 sündmuste jadad t t t b=1 c=0 b=1 c=0 c=0 x1=1 x1=1 x2=1 t x1=1 x2=1 y=0 t x2=1 y=0 time [ns] 9 Nullviide (#2) X1 <= a and b; x2 <= not c; y <= x1 xor x2; a b c x1 a b x1 y x2 y c x2 sündmuste jadad t t t b=1 c=0 b=1 x1=1 x1=1 y=1 c=0 c=0 t y=1 c=0 x2=1 t x2=1 y=0 time [ns] 10 5
Deltaviide VHDL VHDL Δ-viide ( Δ-delay, δ-delay ) Simulatsioonitsükkel - tsükkel tsüklis tsüklis kõikide sündmuste jaoks arvuta uued väärtused (1. tsükkel) eemalda kasutatud ja lisa uued sündmused sündmuste jadasse korda 1-st alates kuni leidub jooksvale simulatsiooniajale planeeritud sündmusi suurenda simulatsiooniaega ühe ühiku võrra [ja korda tsüklit 1-st alates] leia uued väärtused kõikidele jooksvatele sündmustele eemalda vanad ja lisa uued sündmused suurenda simul.aega 11 Deltaviide X1 <= a and b; x2 <= not c; y <= x1 xor x2; a b c x1 a b x1 y x2 y c x2 t t+δ t+2 Δ b=1 x1=1 y=0 c=0 x2=1 time [ns] 12 6
Protsess entity / architecture / component struktuuri elemendid process mudeli käitumine sisaldab ajastuse kontrolli sama-aegselt täidetav käsk (ehk andmevoo käsk) == tundlikkuse nimistuga protsess 13 Protsess Andmevoo käsk x <= a and b after 5 ns; Ekvivalentne protsess process ( a, b ) begin x <= a and b after 5 ns; 14 7
Protsess Ekvivalentsed protsessid (järg) process begin wait on a, b; x <= a and b after 5 ns; process variable tmp: bit; begin wait on a, b; tmp := a and b; wait for 5 ns; x <= tmp; 15 Protsess Tundlikkuse nimistu sensitivity list process ( a, b ) begin x <= a and b after 5 ns; process begin wait on a, b; x <= a and b after 5 ns; 16 8
Protsess Ajakontroll alguses või lõpus? process begin wait on a, b; x <= a and b after 5 ns; process begin x <= a and b after 5 ns; wait on a, b; 17 Ajakontroll Omistamise viivitamine -- after T; Tundlikkuse nimistu Ootekäsud oota signaali sündmust: wait on x; oota tingimuse täitumist: wait until x= 1 ; oota määratud aeg: wait for 20 us; oota (igavesti): wait; kombineeritult: wait on clk until clk= 1 and ready= 1 for 1 us; 18 9
Inertsiaal- ja transportviide output <= input after 10ns; output <= [inertial] input after 10ns; -- VHDL 87 -- VHDL 93 output <= transport input after 10ns; 19 Operatsioonid & avaldised Omistamised signaalile muutujale avaldised x <= avaldis [after aeg]; x := avaldis; avaldis operatsioon avaldis muutuja signaal funktsioonipöördus Kontrollvoo käsud tingimuslikud if-then-else, case tsüklid for-loop, while-loop protseduuripöördus ajakontroll 20 10
Kontrollvoo käsud Tingimuslikud käsud if-then-else [märgend:] if tingimusavaldis then operatsioonide jada elsif tingimusavaldis then operatsioonide jada else operatsioonide jada end if [märgend]; tingimusavaldis - tõeväärtustüüpi case [märgend:] case avaldis is when väärtus [ väärtus] => operatsioonide jada when others => null end case [märgend]; 21 Kontrollvoo käsud Tsüklid [kordusmärgend:] [iteratsiooniskeem] loop operatsioonide jada end loop [kordusmärgend]; iteratsiooniskeem ::= while tingimusavaldis for loendur in vahemik exit [kordusmärgend] [when tingimusavaldis]; next [kordusmärgend] [when tingimusavaldis]; vahemik ::= avaldis to avaldis avaldis downto avaldis tüüp range... 22 11
Kontrollvoo käsud for-loop for I in my_array range loop next when I<lower_limit; exit when I>upper_limit; sum := sum + my_array(i); end loop; while-loop while a<10 loop a := a + 1; end loop; loop loop exit when not a<10; a := a + 1; end loop; 23 Funktsioonid & protseduurid Käitumuslik hierarhia funktsioon (function) kasutatav avaldistena ei tohi sisaldada ajakontrolli käske ainult sisendparameetrid (konstantidena) protseduur (procedure) kasutatav operatsioonina (lausena) võib sisaldada ajakontrolli käske sisendparameetrid (konstandid) väljundparameetrid (muutajad/signaalid) 24 12
Funktsioonid & protseduurid Deklareerimine paketid (pakage) arhitektuuri, protsessi, funktsiooni, protseduuri jne. deklaratiivne osa Sisu paketikeha (pakage body) arhitektuuri, protsessi, funktsiooni, protseduuri jne. deklaratiivne osa koos deklareerimisega 25 Funktsioonid --... function conv_boolean (a: signed) return boolean is begin if to_bit(a(a low))= 1 then return TRUE; else return FALSE; end if; end conv_boolean; --... function and (l,r: signed) return signed is begin return signed(std_logic_vector(l) and std_logic_vector(r)); end; --... --... signal a, b, x: signed (7 downto 0); signal y: boolean; --... X <= a and b; --... y <= conv_boolean(a); 26 13
Protseduurid PACKAGE adder_elements IS -- full_adder : 1-bit full adder (declaration) PROCEDURE full_adder (CONSTANT a0, b0, c0: IN bit; VARIABLE o0, c1: OUT bit); END adder_elements; PACKAGE BODY adder_elements IS PROCEDURE half_adder (CONSTANT a0, b0: IN bit; VARIABLE o0, c1: OUT bit) IS BEGIN o0 := a0 XOR b0; c1 := a0 AND b0; END half_adder; PROCEDURE full_adder (CONSTANT a0, b0, c0: IN bit; VARIABLE o0, c1: OUT bit) IS VARIABLE c_1, c_2, o_1: bit; BEGIN half_adder ( a0, b0, o_1, c_1 ); half_adder ( o_1, c0, o0, c_2 ); c1 := c_1 or c_2; END full_adder; END adder_elements; 27 Paketid & teegid Korduvkasutus andmetüübid funktsioonid / protseduurid komponendid Pakett (package) deklaratsioonide kogum Teek (library) pakettide kogum disainiüksuste (entity/architecture) kogum 28 14
IEEE standardloogika mudel Std_Ulogic Type (IEEE 1164) U uninitialized mudeli käitumine X forcing unknown mudeli käitumine 0 forcing 0 loogikanivoo ( transistor ) 1 forcing 1 loogikanivoo ( transistor ) Z high impedance ühendamata W weak unknown mudeli käitumine L weak 0 loogikanivoo ( takisti ) H weak 1 loogikanivoo ( takisti ) - don t care (optimeerimiseks) 29 Üldistatud parameetrid generics -- moodus parameetrite edastamiseks -- Address generator - entity library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity agener is generic ( bitwidth: positive ); port ( clock: in bit; reset, enable: in std_logic; start_address, stop_address: in unsigned(bitwidth-1 downto 0); address: out unsigned(bitwidth-1 downto 0) ); end agener; --... and somewhere in the architecture signal count: unsigned(bitwidth-1 downto 0); 30 15
Disaini struktureerimine Kergem koodi hallata Moodulite korduvkasutatavus granulaarsus struktuuriüksus VHDL konstruktsioon jäme entity / architecture vastavused configuration jäme primaarne disainiüksus entity / architecture jäme/keskmine sama-aegsete käskude kordamine for / if - generate jäme/keskmine sama-aegsete käskude grupeerimine block keskmine järjestikuliste käskude grupeerimine process peen alamprogramm procedure / function 31 VHDL ja digitaalsüsteem steem process (a, b, c) begin x <= f (a, b); y <= g (b, c); Funktsionaalsed sõlmed process (clk) begin if clk event and clk= 1 then q <= d; end if; + / - < / > RG RG Mäluelemendid 32 16