150 likes | 257 Views
Curs 02 Sinte za logică a circuitelor combinaţionale. Descrierea R egister T ransfer L evel (RTL) a sistemelor. Sistemul este descris ierarhic prin diviza rea acestuia în blocuri subblocuri componente fundamentale ;
E N D
Descrierea Register Transfer Level (RTL) a sistemelor • Sistemul este descris ierarhic prin divizarea acestuia în blocuri subblocuri componente fundamentale; • Blocurile sunt descrise structural (instanţieri de componente reprezentate de subblocuri); • Subblocurile sunt descrise structural (instanţieri de componente reprezentate de componentele fundamentale) sau comportamental; • Componentele fundamentale sunt descrise comportamental (procese).
CASE semnal_selectie IS WHEN valoare_1 instrucţiuni_1; WHEN valoare_2 instrucţiuni_2; ....... WHEN valoare_n instrucţiuni_n; END CASE; WITH semnal_selectie SELECT semnal_tinta optiune_1 WHEN valoare_1_semnal_selectie, optiune_2 WHEN valoare_2_semnal_selectie, ... optiune_n WHEN valoare_n_semnal_selectie; IF conditie_1 THEN instrucţiuni_1; ELSIF conditie_2 THEN instrucţiuni_2; ... ELSE instrucţiuni_n; END IF; semnal_tinta optiune_1 WHEN conditie_1 ELSE optiune_2 WHEN conditie_2 ELSE ... optiune_n; Specificaţii selecţie vs. condiţionale se introduc numai în interiorul proceselor se introduc numai în exteriorul proceselor
Specificaţii condiţionale se recomandă utilizarea acestora NUMAI pentru descrierea sistemelor digitale a căror comportament depinde de semnale de intrare care influenţează sistemul după grade de prioritate diferită.
Specificaţii de selecţie se utilizează pentru descrierea sistemelor digitale la care semnalele de intrare se monitorizează simultan (în paralel) – nu au grad de prioritate.
Inferarea (generarea) latch-urilor pentru toate combinaţiile posibile dintre stările (valorile) semnalelor de intrare, tuturor semnalelor de ieşire ale sistemului combinaţional trebuie să li se asigure în descrierea HDL a sistemului câte o cale logică, care să permită atribuirea unei valori acestora.
În cazul sistemelor combinaţionale, toate semnalele de intrare ale acestora trebuie introduse în lista de senzitivităţi a procesului care descrie comportamentul sistemului respectiv.
Exemplu de generare a latch-urilor library ieee; use ieee.std_logic_1164.all; entity DCD is port( X : in std_logic; Y : out std_logic_vector(1 downto 0)); end; architecture GRESIT of DCD is begin comb:process(X) begin Y <= “00”’; case X is when ‘0’ => Y(0) <= ’1’; when ‘1’ => Y(1) <= ’1’; when others => Y <= (others=>'0'); end case; end process; end GRESIT;
Exemplu de generare a latch-urilor library ieee; use ieee.std_logic_1164.all; entity DPAR is port( EN : instd_logic; X : in std_logic_vector(1 downto 0); Y : out std_logic); end; architecture GRESIT of DPAR is begin comb:process(X, EN) begin if EN=‘0’ then if (X=“00”) or (X=“11”) then y<=‘0’; elsif (X=“01”) or (X=“10”) then y<=‘1’; end if; end if; end process; end GRESIT; WARNING:Xst:737 - Found 1-bit latch for signal <Y>.
entity MUX is port ( di_mux : in std_logic_vector(3 donto 0); sel_mux: in std_logic_vector (1 downto 0); do_mux : out std_logic); end MUX; architecture beh of MUX is begin comb:process (di_mux, sel_mux)begin case sel_mux is when "00" => do_mux <= di_mux(0); when "01 " => do_mux <= di_mux(1); when "10 " => do_mux <= di_mux(2); when "11 " => do_mux <= di_mux(3); when others => do_mux <= ‘-’; end case; end process; end beh; entity MUX is port ( di_mux : in std_logic_vector(3 donto 0); sel_mux : in std_logic_vector (1 downto 0); do_mux : out std_logic); end MUX; architecture beh of MUX is begin with sel_mux select do_mux<= di_mux(0) when "00", di_mux(1) when "01", di_mux(2) when “10", di_mux(3) when “11", ‘-’ when others; end beh; Descrierea comportamentală a multiplexoarelor
entity COD isport ( di_cod : in std_logic_vector (7 downto 0); do_cod : out std_logic_vector (2 downto 0)); end COD; architecture beh of COD is begin process(di_cod) begin do_cod < ="000"; if di_cod(0)='1'then do_cod <="000"; elsif di_cod(1)='1'then do_cod <="001"; elsif di_cod(2)='1'then do_cod <="010"; elsif di_cod(3)='1'then do_cod <="011"; elsif di_cod(4)='1'then do_cod <="100"; elsif di_cod(5)='1'then do_cod <="101"; elsif di_cod(6)='1'then do_cod <="110"; elsif di_cod(7)='1'then do_cod <="111"; end if; end process; end beh; entity COD isport ( di_cod : in std_logic_vector (7 downto 0); do_cod : out std_logic_vector (2 downto 0)); end COD; architecture beh of COD isbegin do_cod <= "000" when di_cod(0)='1‘else "001" when di_cod(1)='1‘else "010" when di_cod(2)='1‘else "011" when di_cod(3)='1‘else “100" when di_cod(4)='1‘else “101" when di_cod(5)='1‘else “110" when di_cod(6)='1‘else “111" when di_cod(7)='1‘else "000"; end beh; Descrierea comportamentală a codificatoarelor prioritare
Descrierea comportamentală a decodificatoarelor entity DEC is port( di_dcd : in std_logic_vector(1 downto 0); en_dcd: in std_logic; do_dcd : out std_logic_vector(3 downto 0)); end DEC; architecture beh of DEC isbegin comb:process(di_dcd,en_dcd)begin if en_dcd ='1' then do_dcd <= "0000"; -- initializare! case di_dcd is when "00" => do_dcd(0) <= '1'; when "01" => do_dcd(1) <= '1';when "10" => do_dcd(2) <= '1'; when "11" => do_dcd(3) <= '1'; when others => do_dcd <= (others=>’0’); end case; else do_dcd <= "0000"; end if; end process; end beh;
Descrierea comportamentală a bufferelor TS entity MUX is port ( di_mux : in std_logic_vector(1 downto 0); sel_mux : in std_logic; oe_mux : in std_logic; do_mux : out std_logic); end MUX; architecture beh of MUX is signal tmp_mux: std_logic; begin comb:process (di_mux, sel_mux) begin case sel_mux is when ‘0’=> tmp_mux <= di_mux(0); when ‘1’=> tmp_mux <= di_mux(1); when others=> tmp_mux <= ‘-’; end case; end process; do_mux<= tmp_mux WHEN (oe_mux=’1’) ELSE ‘Z’; iesire: process (oe_mux,tmp_mux)begin if (oe_mux=’1’) then do_mux <= tmp_mux; else do_mux <= ’Z’; end if; end process; end BEH;