Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D.
Realizace kombinačních logických funkcí Realizace kombinační logické funkce = sestavení zapojení obvodu, který ze vstupních proměnných vytvoří výstupní proměnné v souhlasu se zadanou logickou funkcí. použití moderních mikroelektronických součástek často stačí jediný IO (katalog nebo PROM nebo PLD) základní způsob realizace kombinační logické funkce = pomocí kombinačních logických obvodů představujících realizaci základních logických členů v integrované podobě, kdy se vychází ze zápisu logické funkce v některém z výše uvedených tvarů součtu součinů nebo součinu součtů.
Realizace kombinačních logických funkcí Při realizaci - zápis funkce v součtovém nebo součinovém tvaru výhodné použít logické členy téhož typu, tj. buď součinové nebo součtové y = a c + a b c
Realizace kombinačních logických funkcí Zápis v součtovém tvaru y = a c + a b c y ( a c ) ( a b c) ) = y = ( a + c) + ( a + b + c ) 3 hradla, 14 tranz. 4 hradla, 16 tranz., větší zpoždění Realizace funkce y na základě součtového tvaru zápisu
Realizace kombinačních logických funkcí Zápis v součinovém tvaru ( a + b) ( a + c ) ( a c) y = + ( a + b) + ( a + c ) + ( a c) ) = y = ( a b ) ( a c) ( a c ) y + 4 hradla, 18 tranz. 5 hradel, 20 tranz., větší zpoždění Realizace funkce y na základě součinového tvaru zápisu
Realizace kombinačních logických funkcí Realizace FPGA nebo CPLD y součtový tvar = a c + a b c nebo součinový tvar ( a + b) ( a + c ) ( a c) y = + NA ZPŮSOBU ZÁPISU NEZÁLEŽÍ!!!! NÁVRHOVÝ SYSTÉM DANOU FUNKCI UPRAVÍ A ZMINIMALIZUJE!!!!
Realizace kombinačních logických funkcí 2-to-1 MUX y = AS + BS S A B Y 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1
Realizace kombinačních logických funkcí 4-to-1 MUX y = AS + 1S0 + BS1S0 + CS1S0 DS1S0 S 1 S 0 Y 0 0 A 0 1 B 1 0 C 1 1 D
Realizace logických funkcí pomocí MUX A B C Y 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 A B Y 0 0 0 0 1 C 1 0 C 1 1 1 A Y 0 BC 1 B+C Vyjádřete výslednou logickou funkci!!!
Realizace logických funkcí pomocí MUX Závěr: Realizace logické funkce s využitím multiplexoru je jen dalším způsobem, jak vyjádřit logickou funkci. S obecné rovnice multiplexoru se dá následně elegantně vyjádřit výsledná logická funkce.
VHDL popis MUX 2-to-1 komb. log. funkce 2-to-1 MUX VHDL popis entity mux_2 is Port (A,B,C,D : in STD_LOGIC; S : in STD_LOGIC); Y : out STD_LOGIC); end mux_2; architecture Behavioral of mux_2 is begin Y <= (A and not S) or (B and S); end Behavioral;
VHDL popis MUX 4-to-1 komb. log. funkce 4-to-1 MUX VHDL popis entity mux_4 is Port (A,B,C,D : in STD_LOGIC; S : in STD_LOGIC_VECTOR (1 downto 0); Y : out STD_LOGIC); end mux_4; architecture Behavioral of mux_4 is begin y <= (A and not S(1) and not S(0)) or (B and S(1) and not S(0)) or (C and not and S(1) S(0)) or (D and S(1) and S(0)); end Behavioral;
Typy dat Standard IEEE 1076 definuje dále typy (pole) std_ulogic_vector a std_logic_vector, některé další subtypy a také funkce pro přetížení operátorů, konverzní funkce a další užitečné pomůcky S typem std_logic a s odpovídajícím složeným typem std_logic_vector pracujeme při syntéze nejčastěji. Celočíselné typy - SIGNAL a: integer RANGE 0 TO 255; Typy pole -Nejběžnější typy tohoto druhu jsou definovány ve standardech 1076 a 1164 TYPE bit_vector IS ARRAY (natural RANGE <>) OF bit; TYPE std_logic_vector IS ARRAY (natural RANGE <>) OF std_logic;
Signály typu std_logic, std_logic_vector Standard IEEE 1164 definuje typ std_logic type std_logic is ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't Care ); Vnitřní signál signál vyskytující se pouze uvnitř obvodu, není definován v entitě!!!! Př.: Vytvoření vnitřního 1-bitového signálu x - vni SIGNAL x: std_logic; Př.: Vytvoření vnitřního 8-bitového signálu x SIGNAL x: std_logic_vector (7 downto 0); Použití typů std_logic, std_logic_vector před deklaraci entity je nutné zapsat library IEEE; use IEEE.STD_LOGIC_1164.ALL;
VHDL popis MUX 2-to-1 komb. log. funkce Použití vnitřních signálů entity mux_2 is Port (A,B S Y end mux_2; : in STD_LOGIC; : in STD_LOGIC); : out STD_LOGIC); architecture Behavioral of mux_2 is signal x1, x2 : std_logic; begin Y <= x1 or x2; x1 <= A and not S; -- vnitrni signal x1 x2 <= B and S; -- vnitrni signal x2 end Behavioral;
Příklad - Nádrž v chemické továrně Zadání: Nádrž v chemické továrně je potřeba vybavit ochranným systémem. V nádrží je nutné sledovat teplotu, tlak a úroveň hladiny kyseliny. Ochranný systém je zobrazen na obrázku. Obsahuje tři senzory a tři indikační diody. D1 A B C teplotní senzor tlakový senzor senzor úrovně hladiny ochranný systém D2 D3
Příklad - Nádrž v chemické továrně Vlastnosti: 1) Dioda D1 indikuje stav, kdy je v nádrži vše v pořádku a může dojít k překroční hodnot pouze jedné sledované veličiny. 2) Dioda D2 indikuje stav, kdy dojde k překročení pouze dvou hodnot sledovaných veličin. 3) Dioda D3 indikuje stav, pokud všechny tři senzory detekují, že došlo k překročení hodnot sledovaných veličin. Možnosti realizace: 1) Pravdivostní tabulka + diskrétní dig. součástky minimalizace, realizace pomocí diskrétních digitálních součástek řady 74.. nebo 40.. 2) Pravdivostní tabulka + obvod CPLD nebo FPGA není potřeba minimalizace, realizace v návrhovém systému ISE Webpack v jazyce VHDL do obvodu CPLD nebo FPGA (návrhový systém má v sobě zabudované minimalizační a optimalizační algoritmy) 3) Behaviorální popis + obvod CPLD nebo FPGA behaviorální popis systému v jazyce VHDL, není potřeba pravdivostní tabulka
Příklad - Nádrž v chemické továrně Řešení 1 pravdivostní tabulka + diskrétní dig. součástky: A B C D1 D2 D3 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 1 Minimalizace - DeMorganovy zákony A D2 = D3 = D1 = A C + B C + A B C B 0 0 1 0 0 1 0 1 A B C + A B C + A B C A B C
Příklad - Nádrž v chemické továrně Řešení 2 pravdivostní tabulka + obvody CPLD nebo FPGA: 1) Možnost realizovat minimalizovanou funkci 2) Možnost realizovat přímo z pravdivostní tabulky (minimalizační a optimalizační algoritmy zabudované v ISE WebPack) entity digi_top is Port ( a,b,c : in STD_LOGIC; d1,d2,d3 : out STD_LOGIC); end digi_top; architecture Behavioral of digi_top is signal x1,x2,x3 : std_logic; -- vnitrni signaly begin -- detekce prekroceni maximalne jedne sledovane veliciny -- (neminimalizovana funkce) d1 <= (not a and not b and not c) or (not a and not b and c) or (not a and b and not c) or (a and not b and not c);
Příklad - Nádrž v chemické továrně -- detekce prekroceni dvou sledovanych velicin x1 <= not(a) and b and c; x2 <= a and b and not(c); x3 <= a and not(b) and c; d2 <= x1 or x2 or x3; -- detekce prekroceni vsech tri sledovanych velicin d3 <= a and b and c; end Behavioral; not a bc & x1 a b not c & x2 1 d1 a not b c & x3
Příklad - detektor sudé parity
Příklad - detektor sudé parity
Detektor sudé parity využití hradla XOR
Souběžné příkazy v jazyce VHDL when-else Výraz boolean_expr_i (i=1,2,3,,n) je Boolean výraz a vrací hodnotu true nebo false Tyto Boolean výrazy se provádějí postupně dokud není jeden z těchto výrazu nenabývá logickou hodnotu true Signálu signal_name se následně přiřadí příslušná hodnota value_expr_i (i=1,2,3,,n) podle Boolean výrazu Poslední hodnota value_expr_n se přiřadí, pokud ani jeden z Boolean výrazů nenabývá logickou hodnotu true Záleží na pořadí řádku, je zde definována priorita!!!!!!!!!!!
Souběžné příkazy v jazyce VHDL when-else Koncepční schéma s využitím MUX pro souběžný příkaz when-else
Souběžné příkazy v jazyce VHDL when-else Koncepční schéma s využitím jednoho when-else Koncepční schéma s využitím dvou when-else
Souběžné příkazy v jazyce VHDL when-else Koncepční schéma s využitím třech when-else
Souběžné příkazy v jazyce VHDL when-else Schéma na hradlové úrovni 1-bit MUX 2-1 Schéma na hradlové úrovni 3-bit MUX 2-1
Souběžné příkazy v jazyce VHDL when-else Příklad: mějme následující popis v jazyce VHDL Koncepční schéma Schéma na hradlové úrovni
Souběžné příkazy v jazyce VHDL when-else Příklad: 1-bit MUX 4-1 entity mux_4 is Port (A,B,C,D : in STD_LOGIC; S : in STD_LOGIC_VECTOR (1 downto 0); Y : out STD_LOGIC); end mux_4; architecture Behavioral of mux_4 is begin y <= A when (S="00") else B when (S="01") else C when (S="10") else D; end Behavioral;
Souběžné příkazy v jazyce VHDL when-else Příklad: dekodér 1z4, funkce je dána pravdivostní tabulkou
Praktické využití dekodéru 1z4 Řízení komunikace čtyř zařízení s nadřazeným systémem dev0 dev1 dev2 nadřazený systém (např. mikrokontrolér) dev3 y0 y1 y2 y3 dekodér 1z4 en a b
Souběžné příkazy v jazyce VHDL when-else Příklad: prioritní enkodér, funkce je dána pravdivostní tabulkou
Souběžné příkazy v jazyce VHDL when-else Příklad: prioritní enkodér 4-to-2, funkce je dána pravdivostní tabulkou
Příklad - Nádrž v chemické továrně Vlastnosti: 1) Dioda D1 indikuje stav, kdy je v nádrži vše v pořádku a může dojít k překroční hodnot pouze jedné sledované veličiny. 2) Dioda D2 indikuje stav, kdy dojde k překročení pouze dvou hodnot sledovaných veličin. 3) Dioda D3 indikuje stav, pokud všechny tři senzory detekují, že došlo k překročení hodnot sledovaných veličin.
Souběžné příkazy v jazyce VHDL when-else Příklad: chemická nádrž ze snímku 14 entity nadrz is Port ( a,b,c : in STD_LOGIC; d1,d2,d3 : out STD_LOGIC); end nadrz; architecture Behavioral of nadrz is signal abc : std_logic_vector(2 downto 0); Begin abc <= a&b&c; --parametr slouceni, vytvoreni vektoru -- detekce prekroceni maximalne jedne sledovane veliciny d1 <= 1 when (abc= 100 or abc= 010 or abc= 001 or abc= 000 ) else 0 ; -- detekce prekroceni dvou sledovanych velicin d2 <= 1 when (abc= 110 or abc= 101 or abc= 011 ) else 0 ; -- detekce prekroceni vsech tri sledovanych velicin d3 <= 1 when (abc= 111 ) else 0 ; end Behavioral;