120 likes | 259 Views
Curs 03 Sinte za logică a circuitelor secvenţiale. Descrierea VHDL a circuitelor elementare secven ţiale. Bistabile Registre Numărătoare. Descrierea VHDL a bistabilului D. library ieee; use ieee.std_logic_1164.all; entity dff is port ( clk : in std_logic; d : in std_logic;
E N D
Descrierea VHDL a circuitelor elementare secvenţiale • Bistabile • Registre • Numărătoare
Descrierea VHDL a bistabilului D library ieee; use ieee.std_logic_1164.all; entity dff is port ( clk : in std_logic; d : in std_logic; q : out std_logic); end dff; architecture beh of dff is begin process (clk) begin if (rising_edge(clk)) then q <= d; end if; end process; end beh; procesul este controlat NUMAI de semnalul de ceas: nu este transparent la variaţiile datei de intrare comportamentul circuitului este controlat de FRONTUL activ al semnalului de ceas; pe frontul activ al semnalului de ceas circuitul trece într-o nouă stare, altfel rămâne în vechea stare prin generarea unei celule de memorie. Logica sincronă a circuitului
Descrierea VHDL a unui latch library ieee; use ieee.std_logic_1164.all; entity d_latch is port ( clk : in std_logic; d : in std_logic; q : out std_logic); end d_latch; architecture beh of d_latch is begin process (clk,d) begin if (clk=’1’) then q <= d; end if; end process; end beh; procesul este controlat de semnalul de ceas ŞI de data de intrare: este transparent atât la variaţiile semnalului de ceas cât şi ale datei de intrare tranziţia în noua stare se face pe PALIERUL activ al semnalului de ceas; altfel, se rămâne în vechea stare prin generarea unei celule de memorie.
Inserarea semnalelor de inţializare SINCRONE semnal de iniţializare entity dff_rsinc is port ( clk : in std_logic; reset : in std_logic; d : in std_logic; q : out std_logic); end dff_rsinc; architecture beh of dff_rsinc is begin process (clk) begin if (rising_edge(clk)) then if (reset=’1’) then q <= ’0’; else q <= d; end if; end if; end process; end beh; procesul este controlat NUMAI de semnalul de ceas: procesul NUeste transparent la variaţia semnalelor sincrone (iniţializare şi data de intrare) comportamentul circuitului este controlat de FRONTUL activ al semnalului de ceas semnalul de iniţializare este PRIORITAR descrie logica sincronă: controlată de semnalul de ceas
Inserarea semnalelor de inţializare ASINCRONE procesul este controlat de semnalul de ceas ŞI de semnalele de iniţializare architecture beh of dff_rasinc is begin process (clk, reset) begin if (reset=’1’) then q <= ’0’; elsif (rising_edge(clk)) then q <= d; end if; end process; end beh; descrie logica ASINCRONĂ: nu este controlată de semnalul de ceas; este PRIORITARĂ descrie logica SINCRONĂ: este controlată de semnalul de ceas
Inserarea a 2 semnalelor de inţializare architecture beh of dff_rpasinc is begin process (clk, reset, preset) begin if (reset=’1’) then q <= ’0’; elsif (preset=’1’) then q <= ’1’; elsif (rising_edge(clk)) then .... end if; end process; end beh; logica ASINCRONĂ: se impune pentru semnalele de iniţializare o anumită prioritate (nu se utilizează CASE) logica SINCRONĂ
Descrierea VHDL a registrului paralel-paralel library ieee; use ieee.std_logic_1164.all; entity reg_p8 is generic (size: natural :=8); port ( clk : in std_logic; reset : in std_logic; -- asincron load : in std_logic; -- sincron d : in std_logic_vector (size-1 downto 0); q : out std_logic_vector (size-1 downto 0)); end reg_p8; architecture beh of reg_p8 is begin process (clk, reset) begin if (reset=’1’) then q <=(others=>’0’); elsif (rising_edge(clk)) then if (load = ‘1’) then q <= d; end if; end if; end process; end beh; logica ASINCRONĂ: logica SINCRONĂ:semnalul de încărcare load - prioritar
Descrierea VHDL a operaţiei de deplasare, respectiv de rotire în registre 1. se declară un semnal intern tmp care stochează starea curentă a registrului: DEPLASARE DREAPTA: tmp <= ’0’ & tmp(size-1 downto 1); ROTIRE DREAPTA: tmp <= tmp(0) & tmp(size-1 downto 1); 2. valoarea lui tmp se atribuie ieşirii registrului în exteriorul procesului care descrie comportamentul registrului
Exemplu VHDL de registru de deplasare stânga architecture beh of reg_p8 is signal tmp : std_logic_vector(size-1 downto 0); begin process (clk, reset) begin if (reset=’1’) then tmp <=(others=>’1’); elsif (rising_edge(clk)) then if (load = ‘1’) then tmp <= d; else tmp <= tmp(size-2 downto 0) & ‘0’;end if; end if; end process; q <= tmp; end beh;
Generarea accidentală a registrelor COD VHDL SCHEMA GENERATĂ DUPĂ SINTEZA LOGICĂ
în proces se precizează modul în care numărătorul îşi schimbă starea valorile semnalelor de ieşire se precizează în exteriorul procesului Descrierea VHDL a numărătoarelor binare conţine “+” pt. tipul std_logic library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter is generic (size: natural :=4); port ( clk,rst : in std_logic; d : in std_logic_vector (size-1 downto 0); q : out std_logic_vector (size-1 downto 0)); end counter; architecture beh of counter is signal tmp : std_logic_vector (size-1 downto 0); begin process (clk,rst) begin if (rst='1') then tmp <= (others=>’0’); elsif (rising_edge(clk)) then tmp <= tmp+1; end if; end process; q <= tmp; q <= tmp WHEN (oe=’1’) ELSE (others =>’Z’); end beh; semnal intern – specifică starea curentă a numărătorului operaţia de numărare starea numărătorului se atribuie ieşirii în EXTERIORUL procesului buffer TS