Riistvara kirjelduskeel VHDL  L4, L5. Riistvara kirjelduskeel VHDL  L6. Mäluga süsteemid VHDL-s  L7.

Download Report

Transcript Riistvara kirjelduskeel VHDL  L4, L5. Riistvara kirjelduskeel VHDL  L6. Mäluga süsteemid VHDL-s  L7.

Riistvara kirjelduskeel VHDL
 L4, L5. Riistvara kirjelduskeel VHDL
 L6. Mäluga süsteemid VHDL-s
 L7. VHDL ja süntees
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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 ...
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
2
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
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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;
end process;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
4
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)
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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
© Peeter Ellervee
värskenda
väärtused
I207 - Digitaalloogika ja -süsteemid - L5
6
Ühikviide
a
X1 <= a and b;
x2 <= not c;
y <= x1 xor x2;
b
c
x1
a
b
x2
x1
c
y
y
t
x2
sündmuste
jadad
© Peeter Ellervee
t+1ns t+2ns
b=1
x1=1
c=0
x2=1
I207 - Digitaalloogika ja -süsteemid - L5
y=0
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
© Peeter Ellervee
lisa uus
sündmus
I207 - Digitaalloogika ja -süsteemid - L5
suurenda
simul.aega
8
Nullviide (#1)
a
X1 <= a and b;
x2 <= not c;
y <= x1 xor x2;
b
c
x1
a
b
x2
x1
c
y
y
x2
sündmuste
jadad
t
t
t
b=1
b=1
c=0
c=0
c=0
I207 - Digitaalloogika ja -süsteemid - L5
t
x1=1 x2=1
x1=1 x2=1
x1=1 x2=1
© Peeter Ellervee
t
time
[ns]
y=0
y=0
9
Nullviide (#2)
a
X1 <= a and b;
x2 <= not c;
y <= x1 xor x2;
b
c
x1
a
b
x2
x1
c
y
y
x2
sündmuste
jadad
© Peeter Ellervee
t
t
b=1
b=1
x1=1
y=1
x2=1
c=0
x1=1
y=1
c=0
y=0
c=0
c=0
x2=1
I207 - Digitaalloogika ja -süsteemid - L5
t
t
t
time
[ns]
10
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
© Peeter Ellervee
eemalda
vanad ja
lisa uued
sündmused
I207 - Digitaalloogika ja -süsteemid - L5
suurenda
simul.aega
11
Deltaviide
a
X1 <= a and b;
x2 <= not c;
y <= x1 xor x2;
b
c
x1
a
b
x2
x1
c
© Peeter Ellervee
y
x2
y
t
t+
b=1
x1=1
c=0
x2=1
I207 - Digitaalloogika ja -süsteemid - L5
t+2 
y=0
time
[ns]
12
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
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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;
end process;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
14
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;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
15
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;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
16
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;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
17
Ajakontroll
 Omistamise viivitamine -- “ … after T; ”
 Tundlikkuse nimistu
 Ootekäsud
oota signaali sündmust:
oota tingimuse täitumist:
oota määratud aeg:
oota (igavesti):
wait on x;
wait until x=’1’;
wait for 20 us;
wait;
kombineeritult:
wait on clk until clk=’1’ and
ready=’1’ for 1 us;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
18
Inertsiaal- ja transportviide
output <= input after 10ns;
output <= [inertial] input after 10ns;
-- VHDL’87
-- VHDL’93
output <= transport input after 10ns;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
20
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];
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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 ::=
© Peeter Ellervee
avaldis to avaldis |
avaldis downto avaldis |
tüüp’range | ...
I207 - Digitaalloogika ja -süsteemid - L5
22
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;
© Peeter Ellervee
 loop
loop
exit when not a<10;
a := a + 1;
end loop;
I207 - Digitaalloogika ja -süsteemid - L5
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)
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
24
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
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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);
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
26
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;
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
27
Paketid & teegid
 Korduvkasutus
 andmetüübid
 funktsioonid / protseduurid
 komponendid
 Pakett (package)
 deklaratsioonide kogum
 Teek (library)
 pakettide kogum
 disainiüksuste (entity/architecture) kogum
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
28
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)
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
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);
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
30
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
© Peeter Ellervee
I207 - Digitaalloogika ja -süsteemid - L5
31
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;
© Peeter Ellervee
Funktsionaalsed sõlmed
+/-
</>
RG
RG
Mäluelemendid
I207 - Digitaalloogika ja -süsteemid - L5
32