Digitální obvody
Doc. Ing. Lukáš Fujcik, Ph.D.
Obvody s třístavovým výstupem dva tranzistory: vodivostní kanál typ N vodivostní kanál typ P
CS X
Y logika
P
3 stavový výstup
X
W
CS
N
3 stavový sa o ý výstup
Obvody s třístavovým výstupem Vlastnosti třístavových výstupů : řízení výběrovým signálem CS - Chip Select při CS = 1 => W = 0 Y=1 tranzistory jsou uzavřené vysoká impedance Z při CS = 0 => W = Y = not Xna výstupu je signál X Využití třístavových výstupů: propojování obvodů pomocí společných sběrnic efektivní implementacemultiplexorů s mnoha vstupy multiplexování p LED diod - 3 p piny y řídí 6 LED (charlieplexing)
Obvody s třístavovým výstupem Charlieplexing: Prahové napětí LED diody je např. UT=2 V FPGA/MCU
LED6
LED2 L LED4
LED5
LED1 L LED3
N pinů uřídí N(N-1) LED diod
Dvojsměrný budič sběrnice S jedním 3-stavovým budičem – výstupním
Dvojsměrný budič sběrnice S dvěma 3-stavovými budiči – vstupním a výstupním FPGA/ASIC di dir
logika
sig_out
logika
sig_in
sig_inout
Dvojsměrný port v jazyce VHDL Popis dvojsměrného portu v jazyce VHDL entity bidir is port( pin_IO: inout std_logic; ... begin sig_out <= vyraz_pro_vystupni_signal; ... vnitrni_signal <= vyraz_se_sig_in; ... pin_IO <= sig_out when dir = '1' else 'Z'; sig_in <= pin_IO; ...
Dvojsměrný port v jazyce VHDL Pro použití zapojení se dvěma budiči je potřeba poslední řádek upravit: entity bidir is port( pin_IO: inout std_logic; ... begin sig_out <= vyraz_pro_vystupni_signal; ... vnitrni_signal <= vyraz_se_sig_in; ... pin_IO <= sig_out when dir = '1' else 'Z'; sig_in <= pin_IO when dir = '0' else 'Z'; ...
zakkončení
Sběrnice s třístavovými členy
X1
X2 CS1
Xn CS2
CSn
Sběrnice s třístavovými členy Vlastnosti sběrnice s třístavovými členy B dič jsou Budiče j obvykle b kl výkonové ýk é Výstupy členů jsou pospojovány paralelně Současně může být aktivní maximálně jeden budič sběrnice Přijímací členy mají hysterezní charakteristiku potlačující rušení Zakončení sběrnice s třístavovými členy Zakončení sběrnice definuje napětí na sběrnici v případě ří dě všech š h členů čl ů v Z by b byla b l sběrnice bě i bez b napětí ětí Obvody zakončující sběrnici se označují terminátory Zakončení potlačuje efekty dlouhého vedení
Přechodné děje v kombinačních obvodech Zpoždění Č Časový ý rozdíl díl mezii změnou ě výstupního ý t íh signálu i ál vůči ůči vstupnímu Změna vstupního stavu do ustálení výstupního stavu, stavu tj. všech výstupních signálů Zpoždění p v kombinačních obvodech můžou být ý kritická pro správnou činnost dalších obvodů Měla by být známá maximální a minimální doba hodnota zpoždění poždění V katalogovém listu se udávají zpravidla jen maximalní doby zpoždění Skutečná hodnota zpoždění je tedy neznámá – je závislá na typu součástky, nap. napětí, teplotě, délce spojů apod.
Přechodné děje v kombinačních obvodech Časová zpoždění tPHL a tPLH určují zpoždění signálu ze vstupu na výstup během změny z log.0 log 0 do log.1 log 1 a z log.1 log 1 do log.0 log 0 Vin [V]
ideální vstupní signál i ál
VDD
V50%
0
t
Vout [V] tPLH
tPHL VDD
V50%
0 t0
t1
t2 t3
t
tPHL ≠ tPLH
Přechodné děje v kombinačních obvodech Obvod s různými dobami zpoždění
b=0, c=0 a d=1
tp(a,y)=2tPLH+tPHL=2*5+3=13 ns když a↓ tp(a,y) (a y)=2t 2tPHL+tPLH=2*3+5=11 2 3+5 11 ns
když a↑
Hazardní stavy Velmi často zamlžovaná problematika ☺ Sledovaný výstupní signál má být konstantní při změně signálu na vstupu Při některých změnách se objeví falešné impulzy Vznikají j při změně úrovně na vstupních signálech g Jsou tvořeny zpožděním Hazardní stav je přechodný a neplatí při něm pravidla booleovy algebry Falešné impulsy se mohou, ale také nemusí vyskutnout Nesprávné chování následujících obvodů
Hazardní stavy Vznik falešných impulzů u obvodu AND a OR předcházející obvody
a
a y
y
b
b
a
a
b
b
y
y t
t
Hazardní stavy Hazardní stavy Funkci některých obvodů neovlyvní: Relé - dlouhá časová odezva Indikační LED - impulz namenat lidským okem Ve většině případů jsou nežádoucí Blokující obvody – odstraňují hazardní stavy Přídavná logika, logika která po dobu trvání hazardu blokuje výstup Musí být součástí návrhu logické funkce
Hazardní stavy Blokování hazardu signálem s hodnotou 1
y = bc + ac + ab
y = bc + ac + ab + bc
Hazardní stavy Hledání hazardních stavů pomocí karnaug. map smyčky odpovídají členům výrazu popisujícího funkci přeskok ř k k mezii členy čl může ůž
a
způsobit p hazardní stav přeskoky uvnitř smyček nezpůsobují hazardní stav
b
c
1
1
0
1
0
1
1
1
odstranění hazardu se provede překrytím přeskoků mezi členy redundantními smyčkami
y = bc + ac + ab + bc
Hazardní stavy Překrytí přeskoků nadbytečnými smyčkami výsledná funkce je ekvivalentní
a
f k i původní funkci ů d í obsahuje j redundantní členyy
b
c
toto řešení není univerzální
1
1
0
1
0
1
1
1
překrytí funguje pouze v případě, že se mění jedna vstupní proměnná y = bc b + ac + ab b + ac + ab b + bc b
Hazardní stavy Potlačení hazardních stavů pomocí registrů vložením registrů (paměťových obvodů) před vstup a za výstup kombinační logiky lze odstranit hazardní stavy registr je řízen náběžnou hranou hodinového signálu falešné impulzy musí odeznít před příchodem náběžné hrany hodinového signálu maximální frekvence hodinového signálu závisí na maximálním zpoždění kombinačního obvodu BUDE
PODROBNĚJI
PROBRÁNO
V
POZDĚJŠÍCH
PŘEDNÁŠKÁCH – JEDNÁ SE UŽ O SEKVENČNÍ SYSTÉMY !!!
Hazardní stavy Potlačení hazardních stavů pomocí registrů vstupy a b c d
D
D a_clk b_clk c_clk d_clk
kombinační logika
xx_clk clk y_clk z_clk
výstupy
x y z
tclk
clk
a
th - maximální doba trvání hazardu tclk - perioda hodinového signálu musí platit tclk > th
clk a_clk x_clk x th
th
Strukturální popis v jazyce VHDL Jedná se o skládání jednotlivých komponent Jednotlivé komponenty mohou být popsány např. behaviorálním nebo dataflow způsobem Jedná se o přehledný popis Podobné netlistu Vhodné pro složitější systémy => může dojít k lepšímu výsledku po syntéze Složitý systém popsán behaviorálním způosbem může být nepřehledný a složitý pro syntetizér
Detektor sudé parity – strukturální popis
Detektor sudé parity – strukturální popis -- samostatny vhd soubor entity parita is Port (a : in std std_logic_vector(2 logic vector(2 downto 0); even : out std_logic); end parita; architecture Behavioral of parita is -- deklarace hradla xor2 component xor2_gate Port ( a,b : in std_logic; y : out std_logic); end component; -- deklarace hradla invertor component inv_gate Port ( a : in std_logic; y : out std std_logic); logic); end component; -- interni signaly signal sig1, sig2 : std_logic; begin unit1: xor2_gate – instance prvni xor2 port map(a=>a(0), b=>a(1), y=>sig1); unit2: xor2_gate -- instance druhy xor2 port map(a=>sig1 map(a=>sig1, b=>a(2) b=>a(2), y=>sig2); unit3: inv_gate -- instance invertoru port map(a=>sig2, y=>even); end Behavioral;
-- samostatny vhd soubor entity xor2_gate is Port ( a,b , : in std_logic; g ; y : out std_logic); end xor2_gate; architecture rtl of xor2_g gate is begin y <= a xor b; end rtl;
-- samostatny vhd soubor entity inv_gate is Port( ( a : in std_logic; g y : out std_logic); end inv_gate; architecture rtl of inv_g gate is begin y <= not a; end rtl;
MUX 16-to-1 – strukturální popis
MUX 16-to-1 – strukturální popis entity mux16_1 Port ( a : s : y : end mux16_1;
is in std_logic_vector(15 downto 0); in std std_logic_vector(3 logic vector(3 downto 0); out std_logic);
architecture Behavioral of mux16_1 mux16 1 is component mux4_1 is Port (a : in std_logic_vector(3 downto 0); s : in std std_logic_vector(1 logic vector(1 downto 0); y : out std_logic); end component mux4_1; SIGNAL m0 m0,m1,m2,m3: m1 m2 m3: std std_logic; logic; SIGNAL m : std_logic_vector(3 downto 0); begin m <= m0&m1&m2&m3; mux1: mux4_1 port mux2: mux4_1 port mux3: mux4_1 port mux4: mux4 mux4_1 1 port mux5: mux4_1 port end Behavioral;
map(a=>a(3 downto 0),s=>s(1 downto 0),y=>m0); map(a=>a(7 downto 4),s=>s(1 downto 0),y=>m1); map(a=>a(11 downto 8),s=>s(1 downto 0),y=>m2); map(a=>a(15 downto 12) 12),s=>s(1 s=>s(1 downto 0) 0),y=>m3); y=>m3); map(a=>m,s=>s(3 downto 2),y=>y);