Professional Documents
Culture Documents
-- Ejemplo de comentario
-- Otro comentario
instrucción;
declaración(argumento1; argumento2; …);
Tipo Descripción
Integer, Signed,
Valores numéricos enteros, con y sin signo
Unsigned
Tipos Std_Logic y Std_Logic_Vector
• Los tipos std_logic y std_logic_vector están contenidos en el
paquete IEEE std_logic_1164
• Aceptan 9 valores posibles:
{’U’, ’X’, ’0’, ’1’, ’Z’, ’W’, ’L’, ’H’, ’-’}
• Las variables almacenan valores que puede cambiar según sea necesario durante la
descripción del diseño
– Se utilizan solo en el contexto de procesos o subprogramas, generalmente como
índices en instrucciones de bucle o para almacenamiento temporal de valores
Declaración:
Modo Descripción
Representa un terminal de entrada; se puede leer
IN desde el puerto, pero no escribir en el
Representa un terminal de salida; se puede
OUT escribir en el puerto, pero no leer de el
Puerto bidireccional (entrada y salida); permite
INOUT tanto lectura como escritura
Usado como almacenamiento temporal con
BUFFER retroalimentación interna
Declaración y Manejo de Vectores de Bits
• Bit_Vector y Std_Logic_Vector son arreglos de elementos de tipo Bit o Std_Logic
– Colección indexada de varios elementos del tipo asociado
• Pueden declararse en forma descendente o ascendente
– La forma descendente es la más apropiada para representar números binarios
Declaración:
A4A3A2A1A0
-- Ejemplos
signal A: std_logic_vector(4 downto 0); -- MSB es el 4, LSB es el 0 MSB LSB
signal B: std_logic_vector(0 to 4); -- MSB es el 0, LSB es el 4
B0B1B2B3B4
• Especificadores de posición:
– Permiten especificar posiciones para la asignación de valores a los
elementos de un vector
library nombre_biblioteca;
use biblioteca.paquete.componente;
entity nombre_entidad is
port(
nombre_puerto: modo tipo_dato;
nombre_puerto: modo tipo_dato;
... -- Ejemplo de declaración de entidad
); entity Componente is
end nombre_entidad; port(
a: in STD_LOGIC;
b: in STD_LOGIC_VECTOR (2 downto 0);
f: out STD_LOGIC
);
end Componente;
Arquitectura
• En la arquitectura se describe el comportamiento o funcionamiento interno
del componente o circuito
• La arquitectura está asociada a la entidad que describe
– Pueden existir varias arquitecturas asociadas con una misma entidad
• Existen dos partes dentro del código de una arquitectura:
– El área comprendida entre la cabecera y begin está destinada para declarar
objetos que serán utilizados en la descripción
– El área delimitada entre begin/end que es donde se realiza la descripción del
diseño
• Instrucciones Secuenciales
– Son ejecutadas una a continuación de la otra, de acuerdo con un orden
específico
• En VHDL solo pueden utilizarse dentro de un proceso (bloque process)
process (lista_de_sensitividad)
… -- Declaraciones de señales o variables -- Ejemplo de proceso
begin process(clk, clr)
… -- Instrucciones secuenciales signal q : STD_LOGIC;
begin
end process;
if clr = ‘1’ then
q <= ‘0’;
elsif clk’event AND clk = ‘1’ then
q <= D;
end if;
end process;
Estilos de Descripción
• VHDL soporta tres estilos para la descripción del diseño
en el cuerpo de una arquitectura:
– Flujo de datos (Data Flow): se representa como fluyen los
valores que transportan las señales desde las entradas hacia las
salidas del circuito
– Estructural (Structural): el diseño se describe en base a la
existencia de componentes o módulos que realizan funciones
específicas y la forma como se interconectan entre sí a través
de sus puertos para obtener las salidas deseadas
– Comportamiento (Behavioral): se utilizan los elementos e
instrucciones del lenguaje para expresar en forma algorítmica la
forma como se comporta o funciona el circuito
-- Descripción de la arquitectura
architecture Circuito1 of Circuito is
signal S1, S2, S3 : STD_LOGIC;
begin
S3 <= Sel and B;
S2 <= S1 and A;
S1 <= not(Sel);
F <= S2 or S3;
end Circuito1;
Descripción Estructural
• Una descripción estructural se realiza usando el concepto de
“componente”
– Un circuito está constituido por componentes más pequeños que realizan
funciones específicas y especializadas
– La descripción indica los tipos de componentes y sus conexiones
– Es esencialmente una descripción textual de un diseño esquemático
• El diseño se realiza en dos fases:
1. Se declaran los componentes; instrucción component
2. Se instancian los componentes; instrucción port map
• La instanciación de componentes es un tipo de instrucción concurrente y puede ser
mezclada con otros tipos de instrucciones
Declaración de componentes
Instancia de componentes
component nombre_componente
port( [etiqueta :] nombre_componente
nombre_puerto: modo tipo_dato; port map(
nombre_puerto: modo tipo_dato; nombre_puerto => señal,
... nombre_puerto => señal,
); ...
end component; );
Ejemplo de Declaración Estructural
-- Ejemplo de descripción estructural
-- Descripción de la arquitectura
architecture Circuito2 of Circuito is
-- Descripción de la arquitectura
architecture Circuito3 of Circuito is
begin
process (Sel, A, B)
0F=A if (Sel = ‘0’) then
F <= A;
Sel = else
F <= B;
1F=B end if;
end process;
end Circuito3;
Formatos de Instrucciones Usuales
Asignaciones Condicionales Instrucciones de Selección
(Concurrentes) (Secuenciales)
case señal_condición is
when valor1 =>
Instrucciones de Repetición
… -- instrucciones
(Secuenciales)
when valor2 =>
Ciclo For/Loop Ciclo While/Loop
… -- instrucciones
for variable in rango loop while condición loop when others =>
… -- instrucciones … -- instrucciones … -- instrucciones
end loop; end loop; end case;
Ejemplos de Entidades
a -- Declaración de la entidad
Componente1
d entity Componente1 is
port(a, b, c : in std_logic;
b d, e : out std_logic);
c e end Componente1;
a1 -- Declaración de la entidad
Componente2
Componente2
2
a 2 a0 c1
entity Componente2 is
≡
port(a : in std_logic_vector(1 downto 0);
c b : in std_logic_vector(1 downto 0);
2 b1 c0
b c : out std_logic_vector(1 downto 0));
b0 end Componente2;
Q3 -- Declaración de la entidad
Componente3
Componente3
rst rst
4 Q2 entity Componente3 is
up Q≡ up
Q1
port(rst, up, clk : in std_logic;
Q : out std_logic_vector(3 downto 0));
clk clk end Componente3;
Q0
Programa Ejemplo
-- Encabezado -- -- … continuación
library IEEE;
use IEEE.std_logic_1164.all; -- Declaración de señales --
signal digit : STD_LOGIC_VECTOR (3 downto 0);
-- Declaración de entidad -- signal s : STD_LOGIC_VECTOR (1 downto 0);
entity mux7seg is signal x : STD_LOGIC_VECTOR (15 downto 0);
port( begin
btn : in STD_LOGIC_VECTOR(3 downto 0); x <= X"1234";
a_to_g : out STD_LOGIC_VECTOR(6 downto 0);
an : out STD_LOGIC_VECTOR(3 downto 0) -- Instancias de componentes --
); U1 : mux44 port map(s => s, x => x, z => digit);
end mux7seg; U2 : hex7seg port map(a_to_g => a_to_g, x => digit);