320 likes | 501 Vues
Riistvara kirjelduskeel VHDL. L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees. 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
E N D
Riistvara kirjelduskeel VHDL L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees I207 - Digitaalloogika ja -süsteemid - L5
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 ... I207 - Digitaalloogika ja -süsteemid - L5
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 I207 - Digitaalloogika ja -süsteemid - L5
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; end process; I207 - Digitaalloogika ja -süsteemid - L5
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) I207 - Digitaalloogika ja -süsteemid - L5
leia uued väärtused värskenda väärtused Ü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] I207 - Digitaalloogika ja -süsteemid - L5
a b c x1 x2 x1 a y y b t t+1ns t+2ns c x2 x2=1 y=0 c=0 x1=1 b=1 time [ns] Ühikviide X1 <= a and b; x2 <= not c; y <= x1 xor x2; sündmuste jadad I207 - Digitaalloogika ja -süsteemid - L5
leia uus väärtus, eemalda sündmus suurenda simul.aega lisa uus sündmus 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] I207 - Digitaalloogika ja -süsteemid - L5
a b c x1 x2 x1 a y y b t t t t t c x2 x1=1 x2=1 b=1 c=0 b=1 c=0 x2=1 c=0 x1=1 x1=1 x2=1 y=0 y=0 time [ns] Nullviide (#1) X1 <= a and b; x2 <= not c; y <= x1 xor x2; sündmuste jadad I207 - Digitaalloogika ja -süsteemid - L5
a b c x1 x2 x1 a y y b t t t t t c x2 y=1 x2=1 b=1 c=0 b=1 x1=1 c=0 x1=1 y=1 c=0 c=0 x2=1 y=0 time [ns] Nullviide (#2) X1 <= a and b; x2 <= not c; y <= x1 xor x2; sündmuste jadad I207 - Digitaalloogika ja -süsteemid - L5
leia uued väärtused kõikidele jooksvatele sündmustele eemalda vanad ja lisa uued sündmused suurenda simul.aega 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] I207 - Digitaalloogika ja -süsteemid - L5
a b c x1 x2 x1 a y y b t+ t+2 t c x2 b=1 c=0 x1=1 x2=1 y=0 time [ns] Deltaviide X1 <= a and b; x2 <= not c; y <= x1 xor x2; I207 - Digitaalloogika ja -süsteemid - L5
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 I207 - Digitaalloogika ja -süsteemid - L5
Protsess • Andmevoo käsk x <= a and b after 5 ns; • Ekvivalentne protsess process ( a, b ) begin x <= a and b after 5 ns; end process; I207 - Digitaalloogika ja -süsteemid - L5
Protsess • Ekvivalentsed protsessid (järg) process begin wait on a, b; x <= a and b after 5 ns; end process; process variable tmp: bit; begin wait on a, b; tmp := a and b; wait for 5 ns; x <= tmp; end process; I207 - Digitaalloogika ja -süsteemid - L5
Protsess • Tundlikkuse nimistu • sensitivity list process ( a, b ) begin x <= a and b after 5 ns; end process; process begin wait on a, b; x <= a and b after 5 ns; end process; I207 - Digitaalloogika ja -süsteemid - L5
Protsess • Ajakontroll alguses või lõpus? process begin wait on a, b; x <= a and b after 5 ns; end process; process begin x <= a and b after 5 ns; wait on a, b; end process; I207 - Digitaalloogika ja -süsteemid - L5
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; I207 - Digitaalloogika ja -süsteemid - L5
Inertsiaal- ja transportviide output <= input after 10ns; -- VHDL’87 output <= [inertial] input after 10ns; -- VHDL’93 output <= transport input after 10ns; I207 - Digitaalloogika ja -süsteemid - L5
Operatsioonid & avaldised • Omistamised • signaalile x <= avaldis [after aeg]; • muutujale x := avaldis; • avaldised avaldis operatsioon avaldis muutuja | signaal funktsioonipöördus • Kontrollvoo käsud • tingimuslikud – if-then-else, case • tsüklid – for-loop, while-loop • protseduuripöördus • ajakontroll I207 - Digitaalloogika ja -süsteemid - L5
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]; I207 - Digitaalloogika ja -süsteemid - L5
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 | ... I207 - Digitaalloogika ja -süsteemid - L5
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; I207 - Digitaalloogika ja -süsteemid - L5
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) I207 - Digitaalloogika ja -süsteemid - L5
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 I207 - Digitaalloogika ja -süsteemid - L5
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); I207 - Digitaalloogika ja -süsteemid - L5
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; I207 - Digitaalloogika ja -süsteemid - L5
Paketid & teegid • Korduvkasutus • andmetüübid • funktsioonid / protseduurid • komponendid • Pakett (package) • deklaratsioonide kogum • Teek (library) • pakettide kogum • disainiüksuste (entity/architecture) kogum I207 - Digitaalloogika ja -süsteemid - L5
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) I207 - Digitaalloogika ja -süsteemid - L5
Ü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); I207 - Digitaalloogika ja -süsteemid - L5
Disaini struktureerimine • Kergem koodi hallata • Moodulite korduvkasutatavus I207 - Digitaalloogika ja -süsteemid - L5
+ / - < / > RG RG VHDL ja digitaalsüsteem process (a, b, c) begin x <= f (a, b); y <= g (b, c); end process; process (clk) begin if clk’event and clk=’1’ then q <= d; end if; end process; Funktsionaalsed sõlmed Mäluelemendid I207 - Digitaalloogika ja -süsteemid - L5