Escolar Documentos
Profissional Documentos
Cultura Documentos
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL
LGICA COMBINACIONAL
Asignacin concurrente a seal La seal destino no debe intervenir en la forma de onda de ninguna asignacin asignacin.
a <= b and c when e=0 else 1; b c e a <= b and c when a=0 else 1; a <= b and c when e=0 else a; b c d D d a
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL El operador de concatenacin (&) no infiere lgica y se utiliza para agrupar seales.
entity concatena is port ( p (a, , b, , c : in std_logic; g ; z : out std_logic_vector (2 downto 0)); end concatena; architecture FlujoDatos of concatena is begin z <= not (a) ( ) & not (b) & not (c); ( ) end FlujoDatos;
sel <= sel1 & sel0; with sel select z<= d0 when "00", d1 when "01" , d2 when "10", d3 when "11", 'X' when others;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Asignacin condicional
z<= d0 when (sel="00") else d1 when (sel="01") else d2 when (sel="10") else d when (sel="11") d3 ( l " ") else 'X'; ' '
d0 d1 d2 d3 z sel[1:0]=10 sel[1:0] sel[1:0]=01 sel[1:0]=00
Mejor utilizar asignaciones seleccionadas frente a condicionales. Se debe especificar el valor de la seal asignada para todas las combinaciones de las seales de entrada.
Los bloques con seal de guarda se pueden usar en descripcin de buses con control triestado:
signal z : . bus; tri : block (en=1) begin z<= guarded entrada; end block tri;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Modelado mediante procesos Todas las seales utilizadas en las formas de onda de las asignaciones secuenciales de seal o variables deben incluirse en la lista de sensibilidad del proceso.
process (a, b) begin if (a=1 and b=1) then z<=1; else z<=0 end if; end process;
Algunas herramientas permiten sustituir la lista de sensibilidad por la sentencia wait on equivalente.
process begin if (a=1 (a 1 and b=1) b 1) then z<=1; else z<=0 end if; wait on a, b; end process;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Bajo cualquier condicin de ejecucin del proceso todas las variables y seales de salida o intermedias deben ser asignadas.
process (b, c, e) variable d: begin if (b=1) then d:=c; else d:=0 d:= 0 end if; a<=d or e; end process; process (b, c, e) variable d: begin if (b=1) then d:=c; end if; a<=d or e; end process;
latch
Conviene evitar los procesos en los que una variable se utiliza antes de ser asignada.
process (entrada) variable var: std_ulogic; begin output <= var; var := entrada; end process; process (entrada) variable var: std_ulogic; begin var := entrada; output <= var; end process;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL La sentencia case infiere un multiplexor.
process (sel, d0, d1, d2, d3) begin case sel is when "00" " " => z<= d d0; when "01" => z<= d1; when "10" => z<= d2; when "11" => z<= d3; when others => z<= '0'; end case; end process;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Cuando se modelan circuitos que realizan funciones aritmticas es importante utilizar tcnicas de comparticin de recursos para reducir el rea consumida.
entity y sumador is port (A,B,C,D : in integer range 0 to 15; sel : in std_logic; S : out integer range 0 to 15); end sumador; architecture FlujoDatos of sumador is begin process (A,B,C,sel) begin if (sel='1') then S<=A+B; else S<= A+C; end if; end process; end FlujoDatos;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL
entity sumador is port (A,B,C,D : in integer range 0 to 15; sel : in std_logic; S : out integer range 0 to 15); end d sumador; d architecture FlujoDatos of sumador is begin process (A,B,C,sel) variable aux: integer range 0 to 15; begin if (sel='1') then aux:=B; else aux:=C; end if; S<= A+aux; end process; end FlujoDatos;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL El uso de parntesis puede mejorar la estructura del hardware generado reduciendo los caminos crticos.
architecture FlujoDatos of sumador is begin g process (A,B,C,D) begin S<= A+B+C+D; end process; end FlujoDatos;
architecture FlujoDatos of sumador is begin process (A,B,C,D) (A B C D) begin S<=(A+B)+(C+D); end process; end FlujoDatos;
10
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL
LGICA SECUENCIAL
Modelado de latches Los sintetizadores generan latchs mediante el uso de expresiones condicionales incompletas. incompletas
process (D, enable) begin if enable=1 then Q<= D; end if; end process; Q<= D when (enable=1); b1: block (enable=1) begin Q<= guarded D; end block; ;
Latchs indeseados
process (a,b,c,d) begin if (a='1') then z <= c; elsif (b='1') then z<= d; end if; end process;
process (a,b,c,d) begin z<=0; if (a='1') then z <= c; elsif (b='1') then z<= d; end if; end process;
process (a,b,c,d) begin if (a (a='1') 1 ) then z <= c; elsif (b='1') then z<= d; else z<=0; end if; end process; 11
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL
process (sel, a,b,c) begin case sel is when "00" => z<=a; when "01" 01 => z<=b; when "10" => z<=c; when others => null; end case; end process;
process (sel, a,b,c) begin z <= 0; case sel is when "00" => z<=a; when "01" => z<=b; when "10" => z<=c; when others => null; end case; end process;
process (sel, a,b,c) begin case sel is when "00" => z<=a; when "01" => z<=b; when "10" => z<=c; when others => z <=0; end case; end process;
12
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Circuitos secuenciales sncronos Dos tipos de construcciones:
process (reloj,seales_asncronas) {declaracin de variables}; begin if (seales_asncronas_activas) then {asignaciones_asncronas}; elsif (deteccin_de_flanco) then {algoritmo_de_funcionamiento_sncrono}; end if; end process; process {declaracin de variables}; begin wait until (deteccin_de_flanco) {algoritmo de funcionamiento sncrono}; {algoritmo_de_funcionamiento_sncrono}; . wait until (deteccin_de_flanco) {algoritmo_de_funcionamiento_sncrono}; . end process;
Construcciones de deteccin de flanco: clkevent and clk=1 not clkstable and clk=1 funciones rising_edge y falling_edge del paquete de sntesis Slo se admite la especificacin de un reloj por proceso
process () if (clkaevent and clka=1) then .; end if; end process;
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Registros Con seales de inicializacin asncronas:
process (clk, reset) begin if (reset=1) then Q<=0; elsif (clkevent and clk=1) then Q<=D; end if; end process;
process begin if (reset=1) then Q<=0; else wait until (clkevent and clk=1); Q<=D; Q ; end if; end process;
process (clk) begin if (clkevent and clk=1) then if (reset=1) then Q<=0; else e se Q<=D; end if; end if; end process;
14
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Si se accede a una variable antes de asignarle un nuevo valor se generan biestables para dicha variable.
process (clk) variable a, , b : std_logic; g ; begin if (clkevent and clk=1) then salida <=b; b := a; a := entrada; end if; end process;
process (clk) variable a, b : std_logic; begin if (clkevent and clk=1) then a := entrada; t d b := a; salida <=b; end if; end process;
15
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Modelado de registros mediante bloques con guarda:
block (clkevent and clk=1) begin g Q<= guarded 0 when reset=1 else D; end block;
16
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Registro de desplazamiento universal
ENTRADAS CLR L H H H H H H H S1 S0 X X H L L H H L X X H H H L L L CLK X L X SLI SRI X X X X X H L X X X X H L X X X D3 D2 D1 D0 X X a X X X X X X X b X X X X X X X c X X X X X X X d X X X X X SALIDAS Q3 Q2 Q1 Q0
L L L L QA0 QB0 QC0 QD0 a b c d H QAn QBn QCn L QAn QBn QCn QBn QCn QDn H QBn QCn QDn L QA0 QB0 QC0 QD0
library ieee; use ieee.std_logic_1164.all; entity shift_reg is generic (N: positive :=3); port (clk, clr, sli, sri: in std_logic; S0, , S1 : in std_logic; g ; D : in std_logic g _vector ( (N-1 downto 0); ); Q : out std_logic_vector(N-1 downto 0)); end shift_reg; architecture rtl of shift_reg is signal aux : std_logic_vector (N-1 downto 0); signal sel : std_logic_vector (1 downto 0); begin Q <= aux; sel <=S1&S0; process (clk, clr) begin if (clr='0') then aux <=(others => '0'); elsif (clk'event and clk='1') then case sel is when h "00" => null ll; when "01" => aux <= sri & aux (N-1 downto 1); when "10" => aux <= aux(N-2 downto 0)&sli; when "11" => aux <=D; when others => null; end case; end if; end process; end rtl;
17
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Contadores Se basa en el uso de incrementadores/decrementadores Ejemplo: contador binario up/down de 4 bits con seal de reset asncrona, asncrona carga sncrona y habilitacin de cuenta. cuenta
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cont4b is generic i (N: (N positive i i :=3); 3) port (clk, rst, enable, cuenta, carga: in std_logic; dato : in unsigned(3 downto 0); salida : out unsigned(3 downto 0)); end cont4b; architecture rtl of cont4b is signal cnt : unsigned (3 downto 0); begin salida <= cnt; process (clk, rst) begin if rst='1' then cnt <="0000"; 0000 ; elsif (clk'event and clk='1') then if (carga ='1') then cnt <=dato; else if (cuenta='1' and enable ='1') then cnt <= cnt + 1 mod 16; elsif (cuenta='0' and enable ='1') then cnt <= cnt - 1 mod 16; end if; end if; end if; end process; d rtl; l end
METODOLOGAS Y HERRAMIENTAS PARA EL DISEO DE SISTEMAS DIGITALES
18
Microelectrnica
ITT-Sistemas Electrnicos
EL LENGUAJE VHDL
SNTESIS VHDL Conversor paralelo-serie de N bits
library ieee; use ieee.std_logic_1164.all; entity par2serie is generic (N: positive :=3); port (data_in : in std_logic_vector(N-1 downto 0); clk, data_rdy : in std_logic; data_out : out std_logic); end par2serie; architecture rtl of par2serie is signal aux : std_logic_vector (N-1 downto 0); begin data_out <= aux(N-1); process (clk) begin if(clk'event and clk='1') then if (data_rdy (d d ='1') '1') then h aux <= data_in; d i else aux (N-1 downto 1) <=aux (N-2 downto 0); end if; end if; end process; end rtl;
19