You are on page 1of 7

Nociones bsicas de VHDL

y diseo de hardware digital


LCSE, Introduccin

Curso 2012-13

Introduccin


Lenguaje de descripcin Hardware (HDL)

Sirve para describir a distintos niveles






Comportamiento
Flujo de datos
Estructural

Abstraccin

Muy complejo!


Restringido para sntesis

Ejemplo sencillo
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mi_mux IS
-- Multiplexor 2a1
PORT( a: in std_logic;
b: in std_logic;
sel: in std_logic;
z: out std_logic );
END;
ARCHITECTURE dataflow OF mi_mux IS
BEGIN

mi_
mux

z <=a WHEN sel = '0' ELSE b;


END dataflow;

b
sel

Ejemplo sencillo
Librera
Entidad

Arquitectura

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

Final de sentencia
Comentario

ENTITY mi_mux IS
-- Multiplexor 2a1
PORT( a: in std_logic;
b: in std_logic;
sel: in std_logic;
z: out std_logic );
a
END;

mi_
mux

ARCHITECTURE dataflow OF mi_mux IS


BEGIN
z <=a WHEN sel = '0' ELSE b;
END dataflow;

b
sel

Libreras
Hace visible la librera IEEE
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

Hace visibles todos


los componentes
del package

Hace visible el
package std_logic_1164
USE WORK.TYPES.ALL;

Entidad
Define la interfaz externa del diseo
Caja negra (nica)
ENTITY mi_entity IS

entradas

mi_entity

salidas

PORT ( entrada: IN tipo;


...
salida: OUT tipo;
ent_sal: INOUT tipo;
... );
END;

ent_sal

Arquitectura
Especifica la funcionalidad del diseo

ARCHITECTURE dataflow OF mi_mux IS


... (declaracin de seales)
BEGIN
z <=a WHEN sel = '0' ELSE b;
... (otras sentencias)
...
END dataflow;

Puede haber varias para la misma entidad

configuration

Sentencias de asignacin y operadores




Asignacin de seales:
nuevo_estado <= S0;

Operadores matemticos:
+, -, *
Operadores lgicos:
and, or, not, nand, nor, xor
Comparaciones:
Igualdad, desigualdad: =, /=
Mayor que, menor que: >, <
 Mayor o igual que, menor o igual que: >=, <=



Procesos
clock: PROCESS
BEGIN
WAIT FOR 50 ns;
clk <= NOT clk;
END PROCESS;

valor

wait explcito

decoder: PROCESS (sel, enable)


lista de sensibilidad
BEGIN
z <= "1111";
IF (enable = '1') THEN
CASE sel IS
por defecto
WHEN "00" => z(0) <= '0';
WHEN "01" => z(1) <= '0';
WHEN "10" => z(2) <= '0';
WHEN "11" => z(3) <= '0';
WHEN others => z <= "XXXX";
END CASE;
END IF;
END PROCESS;

Secuencialidad y Concurrencia

Todos las sentencias de una arquitectura se ejecutan


concurrentemente

Dentro de un proceso la ejecucin es


secuencial

Sentencias bsicas (I)




Sentencia if
IF X = '0' THEN
nuevo_estado <= S0;
ELSE
nuevo_estado <= S2;
END IF;

Sentencia for
FOR i IN 15 DOWNTO 0
IF data_in(i) =
pb_temp
ELSE
pb_temp
END IF;
END LOOP;

LOOP
'0' THEN
<= '0';
<= '1';

Sentencias bsicas (y II)




Sentencia case
CASE current_state IS
WHEN RESET =>
count_end <=
...
WHEN RAMPA1 =>
count_clk_en
...
WHEN others =>
count_end <=
up_down
<=
END CASE;

'0';

<= NOT end_counter;

'-';
'-';

Bancos de pruebas


Necesarios para simulacin


No sintetizables (sin restricciones)
comprobar

testbench

Estmulos

entradas

mi_entity

salidas

You might also like