Upload
hadar
View
66
Download
0
Embed Size (px)
DESCRIPTION
Riistvara kirjelduskeel VHDL. L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees. Modelleerimine. J.F. Wakerly “Digital Design: Principles and Practices” – 7.12, 8.7 - 8.9 Mäluga süsteemide modelleerimine Musta kasti mudel Väljundi väärtus - PowerPoint PPT Presentation
Citation preview
1I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Riistvara kirjelduskeel VHDLRiistvara kirjelduskeel VHDL
L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-sL6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees
2I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
ModelleerimineModelleerimine
J.F. Wakerly “Digital Design: Principles and Practices” – 7.12, 8.7 - 8.9
Mäluga süsteemide modelleerimine Musta kasti mudel Väljundi väärtus
sõltub sisendi(te) väärtus(t)est sõltub signaali (muutuja) eelmisest
väärtusest Kuidas kirjeldada osalist sõltuvust sisendi
muutustest?
3I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Kombinatoorsed ja mäluga skeemidKombinatoorsed ja mäluga skeemid
Kombinatoorsed skeemid skeemi väljund sõltub ainult sisendist atsüklilise topoloogiaga skeem on
kombinatoorne
Mäluga skeemid eksisteerivad mäluelemendid tagasiside on vajalik väljundi väärtus sõltub signaali (muutuja)
eelmisest väärtusest
4I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
Protsess aktiveeritakse sisendsignaali(de) muutumisel
Tundlikkuse nimistus võivad olla loetletud ainult osad sisendsignaalidest pole tundlik mitte-loetletud signaalidele vihje mäluelemendile (või puhvrile)
Simuleerimine ja süntees erinevused mitte-loetletud signaalide
interpretatsioonil
5I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
process (a, b) begin
x1 <= a and b;
end process;
ehk x1 <= a and b;
ab
x1
process (a) begin
x2 <= a and b;
end process;
b vajab puhvrit!
ab
x2D
C
Pole hea…
6I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
process (a, b, c) begin
if a=’1’ and b=’1’ then x <= c;
else x <= ’0’;
end if;
end process;
c
ab
x
7I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
process (a, b, c) begin
if a=’1’ and b=’1’ then x <= c;
end if;
end process;
else haru katmata → mälu (latch)
c
ab
xD
C
latch
8I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
process (a, b) begin
if a=’1’ and b=’1’ then x <= c;
end if;
end process;
Pole enamasti sünteesitav!
c
ab
xD
C
flip-flop
9I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL – tundlikkuse nimistuVHDL – tundlikkuse nimistu
process (a) begin
if a’event and a=’1’ then x <= c;
end if;
end process;
Kokkuleppeline interpretatsioon et sünteesi tulemus oleks üheselt mõistetav…
c
a
xD
C
flip-flop
10I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Atribuudid ‘event’ ja ‘stable’Atribuudid ‘event’ ja ‘stable’
Atribuut väärtus, funktsioon, tüüp, vahemik, signaal
või konstant, mida võib siduda ühe või enama märgendiga VHDL kirjelduses
event muutus signaali väärtuses (-tsüklis)
stable(T) signaali väärtus pole muutunud viimase T
ajaühiku jooksul
11I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Mäluelement – D-flip-flopMäluelement – D-flip-flop
P1_FF: process -- behavioral begin wait on CLK until CLK=’1’; Q<=D; end process P1_FF;
P2_FF: process (CLK) -- ”classical” begin if CLK=’1’ and CLK’event then Q<=D; end if; end process P2_FF;
D
CLK
Q
12I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Mäluelement – D-latchMäluelement – D-latch
P1_L: process (CLK, D) -- ”classical” begin if CLK=’1’ then Q<=D; end if; end process P1_L;
D-flip-flop & andmevookäsud
Q <= D when CLK’event and CLK = ’1’ else Q’DRIVING_VALUE; Q <= D when CLK’event and CLK = ’1’ else unaffected; Q <= D when CLK’event and CLK = ’1’;
D
CLK
Q
13I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
flip-flop – reset & enableflip-flop – reset & enable
P4_FF: process (CLK) begin
if CLK=’1’ and CLK’event then
if RES=’1’ then Q<=(others=>’0’);
elsif ENA=’1’ then Q<=D;
end if;
end if;
end process P4_FF;
Sünkroonne nullimine “clk’event” ja selle järel “res”
14I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
flip-flop – asynchronous resetflip-flop – asynchronous reset
P5_FF: process (RESET,CLK) begin
if RESET=’1’ then -- asynchronous reset
Q<=(others=>’0’);
elsif CLK=’1’ and CLK’EVENT then
if ENA=’1’ then Q<=D; end if;
end if;
end process P5_FF;
Asünkroonne nullimine “reset” esimesena ja
“clk’event” elsif-harus takti tunnusena
15I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Taktsignaali stiilidTaktsignaali stiilid
Frondi tunnus ja signaali uus väärtus järjekord pole oluline
if CLK=’1’ and CLK’event then ... if CLK=’1’ and not CLK’stable then ...
wait on CLK until CLK=’1’; wait until CLK=’1’ and CLK’event; wait until CLK=’1’ and not CLK’stable;
16I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL ja digitaalsüsteemVHDL ja digitaalsüsteem
+ / - < / >
RG RG
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
17I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Näide - loendurNäide - loendur
4 bitti:algus (strt)lõpp (stp)
1-suunaline
2-suunaline
18I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Loendur – üks protsessLoendur – üks protsess
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;
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all;
architecture one_process of agener is
signal count: unsigned(bitwidth-1 downto 0);
begin
process begin
wait on clock until clock='1';
if reset='1' then count<=start_address;
elsif enable='1' and count/=stop_address then count<=count+'1';
end if;
end process;
address<=count;
end one_process;
liide
skä
itum
ine
19I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
Loendur – kaks protsessiLoendur – kaks protsessi
architecture two_process of agener is
signal count, new_count: unsigned(bitwidth-1 downto 0);
begin
process (reset, enable, start_address, stop_address, count) begin
new_count<=count;
if reset='1' then new_count<=start_address;
elsif enable='1' then
if start_address<=stop_address then
if count<stop_address then new_count<=count+'1'; end if;
else if count>stop_address then new_count<=count-'1'; end if;
end if;
end if;
end process;
process begin
wait on clock until clock='1'; count<=new_count;
end process;
address<=count;
end two_process;
kom
bina
tsio
onsk
eem
regi
ster
20I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL & valgusfoorVHDL & valgusfoor
Kogutsükkel 30 sek., andurid puuduvad roheline 12 sek. punane kollane 3 sek. kollane+punane punane 12 sek. roheline kollane+punane 3 sek. kollane
Käitumuslik kood ajakontrolli-käsud – eeldab sisemist taimerit for-tsükkel ja 1 sek. timer – samm loenduri poole
Sünteesitav kood eraldi loendur (andmeosa) ja kontroller (automaat)
21I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL & valgusfoorVHDL & valgusfoor
Ajakontrolli-käsud
entity TLC is port ( R1, Y1, G1, R2, Y2, G2: out bit );end entity TLC;
architecture behave of TLC isbegin process begin R1 <= '0'; Y1 <= '0'; G1 <= '1'; R2 <= '1'; Y2 <= '0'; G2 <= '0'; wait for 12 sec; R1 <= '0'; Y1 <= '1'; G1 <= '0'; R2 <= '1'; Y2 <= '1'; G2 <= '0'; wait for 3 sec; R1 <= '1'; Y1 <= '0'; G1 <= '0'; R2 <= '0'; Y2 <= '0'; G2 <= '1'; wait for 12 sec; R1 <= '1'; Y1 <= '1'; G1 <= '0'; R2 <= '0'; Y2 <= '1'; G2 <= '0'; wait for 3 sec; end process;end architecture behave;
Test-pink
entity test_tlc isend entity test_tlc;
architecture bench of test_tlc is signal road1, road2: bit_vector (1 to 3);
component TLC port ( R1, Y1, G1, R2, Y2, G2: out bit ); end component;begin
U1: TLC port map (road1(1),road1(2),road1(3), road2(1),road2(2),road2(3));
end architecture bench;
22I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL & valgusfoorVHDL & valgusfoor
for-tsükkelentity TLC2 is port ( timer: in bit; R1, Y1, G1, R2, Y2, G2: out bit );end entity TLC2;architecture behave of TLC2 isbegin process begin R1 <= '0'; Y1 <= '0'; G1 <= '1'; R2 <= '1'; Y2 <= '0'; G2 <= '0'; for i in 1 to 12 loop wait on timer until timer='1'; end loop; R1 <= '0'; Y1 <= '1'; G1 <= '0'; R2 <= '1'; Y2 <= '1'; G2 <= '0'; for i in 1 to 3 loop wait on timer until timer='1'; end loop; R1 <= '1'; Y1 <= '0'; G1 <= '0'; R2 <= '0'; Y2 <= '0'; G2 <= '1'; for i in 1 to 12 loop wait on timer until timer='1'; end loop; R1 <= '1'; Y1 <= '1'; G1 <= '0'; R2 <= '0'; Y2 <= '1'; G2 <= '0'; for i in 1 to 3 loop wait on timer until timer='1'; end loop; end process;end architecture behave;
Test-pink
entity test_tlc2 isend entity test_tlc2;
architecture bench of test_tlc2 is signal road1, road2: bit_vector (1 to 3); signal timer: bit := '1'; component TLC2 port ( timer: in bit; R1, Y1, G1, R2, Y2, G2: out bit ); end component;begin
timer <= not timer after 500 ms;
U1: TLC2 port map (timer, road1(1),road1(2),road1(3), road2(1),road2(2),road2(3));
end architecture bench;
23I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
VHDL & valgusfoorVHDL & valgusfoor
Simulatsioonide tulemused
TLC
TLC2
24I207 - Digitaalloogika ja -süsteemid - L6© Peeter Ellervee
KonfigureerimineKonfigureerimine
Komponendid entity AD2 is port (A1, A2: in BIT; Y: out BIT); end;architecture B of AD2 is begin Y <= A1 and A2; end;entity XR2 is port (X1, X2: in BIT; Y: out BIT); end;architecture B of XR2 is begin Y <= X1 xor X2; end;
Komponentide deklaratsioonid ja konfiguratsiooni spetsifikatsioon entity Half_Adder is port (X, Y: BIT; Sum, Cout: out BIT); end;architecture Netlist of Half_Adder is use work.all; component MX port (A, B: BIT; Z:out BIT); end component; component MA port (A, B: BIT; Z:out BIT); end component; for G1:MX use entity XR2(B) port map(X1 => A,X2 => B,Y => Z);begin G1:MX port map (X, Y, Sum); G2:MA port map (X, Y, Cout);end;
Konfiguratsiooni deklaratsioon, ploki konfiguratsioon, komponendi konfiguratsioon configuration C1 of Half_Adder is use work.all; for Netlist for G2:MA use entity AD2(B) port map(A1 => A,A2 => B,Y => Z); end for; end for; end;
Allikas – http://www10.edacafe.com/book/ASIC/ASICs.php