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