Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Seminario I
El lenguaje VHDL.
Modelado en VHDL.
La entidad.
La arquitectura.
Operaciones más comunes.
Instrucciones concurrentes.
Instrucciones secuenciales.
Formas de descripción en VHDL.
Simulación en VHDL.
Sistema de simulación o de test.
Definición de estímulos.
Ejemplo de diseño simple.
Ejemplo de diseño jerárquico.
Modelado de sistemas secuenciales.
Circuito de realimentación directa.
Autómata de Mealy asíncrono.
Autómata de Moore asíncrono.
Autómata de Mealy síncrono.
Latches.
Flip-flops.
Registros.
Contadores.
Sistemas Digitales I 1
Seminario I: Introducción al lenguaje VHDL
El lenguaje VHDL
VHDL: VHSIC (Very High Speed Integrated Circuits) Hardware Description Language.
Características principales:
Permite diseñar, modelar y comprobar sistemas desde casi todos los niveles en los
que se pueden describir.
Sistemas Digitales I 2
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL
ENTIDAD ARQUITECTURA
Estructura
Entradas Salidas y/o
comportamiento
Entradas / Salidas
Sistemas Digitales I 3
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (La entidad)
Entidad
Interfaz del circuito con el exterior.
Otras características generales del circuito.
Estructura general de la entidad:
entity nombre_entidad is
generic (propiedad: tipo := valor;
propiedad: tipo := valor);
port (señal: sentido tipo;
señal: sentido tipo);
end nombre_entidad;
Sistemas Digitales I 4
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (La entidad)
Entidad
Campos obligatorios:
Nombre de la entidad.
Fin de la entidad.
Elementos opcionales:
Descripción de propiedades genéricas.
Descripción de puertos.
Ejemplo de entidad:
-- Declaración de la entidad
entity sumador is
port (a, b: in std_logic_vector (1 downto 0);
-- Declara dos datos de entrada (a y b) como buses con un tamaño de dos bits (a1a0 y b1b0)
sum: out std_logic_vector (2 downto 0));
-- Declara un dato de salida (sum) como un bus con un tamaño de tres bits (sum2 sum1 sum0)
end sumador;
Sistemas Digitales I 5
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (La arquitectura)
Arquitectura.
Elementos de la arquitectura:
Nombre.
Parte declarativa:
Declaración de señales internas.
Declaración de componentes.
Instrucciones secuenciales.
Fin de la arquitectura.
Sistemas Digitales I 6
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (La arquitectura)
Arquitectura.
Formato de una arquitectura:
Architecture nombre_arquitectura of nombre_entidad is
-- Declaración de señales internas
signal señal: tipo;
signal señal: tipo;
-- Declaración de componentes
component nombre_componente
port (señal: sentido tipo;
señal: sentido tipo);
end component;
begin
-- Componentes instanciados
…
-- Instrucciones concurrentes
…
-- Instrucciones secuenciales
…
end nombre_arquitectura;
Sistemas Digitales I 7
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Operaciones más comunes en VHDL)
Asignamientos.
Sirven para asignar a las señales valores concretos, secuencias de valores, valores
de otras señales o resultados de operaciones.
Formato:
señal <= valor o expresión;
Ejemplos:
B <= '1';
1
A <= '0', '1' after 10 ns, '0' after 20 ns; Señal A
0
10 ns 20 ns
C <= F;
C <= F or A;
Otros operadores.
Operadores lógicos: Not, and, nand, or, nor, xor, xnor.
Señal <= V and W and X and Y and Z;
Operadores aritméticos: +, -, *, /.
Operadores de comparación: =, /=, <, >, <=, >=.
Operador de inicialización: :=.
Operador de concatenación: &.
Vector de cuatro bits <= D & C & B & A;
Sistemas Digitales I 8
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones concurrentes)
Sobre una misma señal no se pueden ejecutar dos asignaciones concurrentes distintas,
pues se produciría un error al intentar asignar dos valores diferentes a ésta.
Fijas.
Condicionales.
Múltiples.
Sistemas Digitales I 9
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones concurrentes)
Instrucciones concurrentes fijas: Asignan a una señal un valor fijo, el valor de otra
señal o el resultado de una operación.
Formato:
señal <= valor_a_asignar;
Ejemplos:
A <= '1';
B <= "1011";
F <= G;
H <= I OR J;
L <= M - N;
K <= S(4);
Sistemas Digitales I 10
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones concurrentes)
Sistemas Digitales I 11
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones concurrentes)
Sistemas Digitales I 12
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)
Sistemas Digitales I 13
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)
Fijas.
Condicionales.
Múltiples.
Las instrucciones condicionales fijas tienen el mismo formato que las concurrentes. A
continuación se analizarán las instrucciones secuenciales condicionales y las
múltiples.
Sistemas Digitales I 14
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)
Sistemas Digitales I 15
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)
Ejemplo:
process (A)
begin
case A is
when "0110" => B <= "1001";
when "1010" | "1111" => B <= "0011";
when others => B <= "0000";
end case;
end process;
Sistemas Digitales I 16
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)
En VHDL existen tres formas básicas de describir un circuito, que son las siguientes:
Descripción estructural:
El circuito se define especificando las conexiones entre varias partes más simples, especificadas como
componentes.
Sistemas Digitales I 17
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)
entity MUX_1_DFD is
port (C0, C1, S: in std_logic; Y: out std_logic);
end MUX_1_DFD;
architecture A_MUX_1_DFD of MUX_1_DFD is
begin
Y <= C0 when S='0' else C1;
end A_MUX_1_DFD;
MUX
0
1
S
Sistemas Digitales I 18
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)
MUX
0
1
S
Sistemas Digitales I 19
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)
N3
AND_2
C1
Sistemas Digitales I 20
Seminario I: Introducción al lenguaje VHDL
Simulación en VHDL (Sistema de simulación o de test)
Características:
Carece de comunicación con el exterior, es decir, no posee ningún tipo de puerto.
Contiene únicamente un componente, que es el circuito a simular.
Tiene los puertos del circuito a simular definidos como señales internas (signal).
Debe proporcionar algún mecanismo para introducir los patrones de simulación.
Esquema:
Sistemas Digitales I 21
Seminario I: Introducción al lenguaje VHDL
Simulación en VHDL (Sistema de simulación o de test)
Sistemas Digitales I 22
Seminario I: Introducción al lenguaje VHDL
Simulación en VHDL (Definición de estímulos)
Modo 1: Se crea un proceso sin lista de sensibilidad, y dentro del mismo se van asignando
diferentes valores a las variables de entrada, introduciendo tiempos de espera entre cada
combinación y la siguiente.
estimulos: process
begin
C B A S
C <= '0'; B <= '0'; A <= '0'; wait for 100 ns;
0 0 0 1
C <= '0'; B <= '0'; A <= '1'; wait for 100 ns;
0 0 1 0
C <= '0'; B <= '1'; A <= '0'; wait for 100 ns; 0 1 0 1
C <= '0'; B <= '1'; A <= '1'; wait for 100 ns; 0 1 1 0
C <= '1'; B <= '0'; A <= '0'; wait for 100 ns; 1 0 0 1
C <= '1'; B <= '0'; A <= '1'; wait for 100 ns; 1 0 1 0
C <= '1'; B <= '1'; A <= '0'; wait for 100 ns; 1 1 0 0
C <= '1'; B <= '1'; A <= '1'; wait; 1 1 1 0
end process;
Sistemas Digitales I 23
Seminario I: Introducción al lenguaje VHDL
Simulación en VHDL (Definición de estímulos)
Modo 2:
En primer lugar, en la parte declarativa de la arquitectura de test se crea un nodo para definir los
diferentes valores de la combinación de entrada.
signal entrada: std_logic_vector (2 downto 0) := "000";
A continuación, también dentro de la parte declarativa, se puede definir una constate para especificar
el tiempo que se debe mantener estable cada combinación de entrada.
constant tiempo: time := 100 ns;
Por último, en el cuerpo de la arquitectura de test se introduce el siguiente código:
estimulos: process
C B A S
begin
entrada <= "000"; wait for tiempo; 0 0 0 1
entrada <= "001"; wait for tiempo; 0 0 1 0
entrada <= "010"; wait for tiempo; 0 1 0 1
entrada <= "011"; wait for tiempo;
entrada <= "100"; wait for tiempo; 0 1 1 0
entrada <= "101"; wait for tiempo; 1 0 0 1
entrada <= "110"; wait for tiempo; 1 0 1 0
entrada <= "111"; wait; 1 1 0 0
end process;
1 1 1 0
C <= entrada(2); B <= entrada(1); A <= entrada(0);
Sistemas Digitales I 24
Seminario I: Introducción al lenguaje VHDL
Ejemplo de diseño simple (Modelado)
Circuito a modelar.
C N2
N1 8 ns
5 ns
B 10 ns F
N3
8 ns
A
Sistemas Digitales I 25
Seminario I: Introducción al lenguaje VHDL
Ejemplo de diseño simple (Simulación)
Sistema de simulación
entity T_CIRCUITO is end T_CIRCUITO;
architecture A_T_CIRCUITO of T_CIRCUITO is
signal NC, NB, NA, NF: std_logic;
component CIRCUITO
port (C, B, A: in std_logic; F: out std_logic);
end component;
begin
C1: CIRCUITO port map (NC, NB, NA, NF);
NC <= '0', '1' after 200 ns, '0' after 400 ns;
NB <= '0', '1' after 100 ns, '0' after 200 ns, '1' after 300 ns, '0' after 400 ns;
NA <= '0', '1' after 50 ns, '0' after 100 ns, '1' after 150 ns, '0' after 200 ns,
'1' after 250 ns, '0' after 300 ns, '1' after 350 ns, '0' after 400 ns;
end A_T_CIRCUITO;
Resultado de la simulación
Sistemas Digitales I 26
Seminario I: Introducción al lenguaje VHDL
Ejemplo de diseño jerárquico (Modelado)
Circuito a modelar
MUX
A0 0
B0 1 Y0
S
MUX
A1 0
B1 1 Y1
S
MUX
A2 0
B2 1 Y2
S
MUX
A3 0
B3 1 Y3
S S
Sistemas Digitales I 27
Seminario I: Introducción al lenguaje VHDL
Ejemplo de diseño jerárquico (Modelado)
Sistemas Digitales I 28
Seminario I: Introducción al lenguaje VHDL
Ejemplo de diseño jerárquico (Simulación)
Sistema de simulación
entity T_MUX_4 is end T_MUX_4;
architecture A_T_MUX_4 of T_MUX_4 is
signal S: std_logic;
signal A, B, Y: std_logic_vector (3 downto 0);
component MUX_4
port (A, B: in std_logic_vector (3 downto 0); S: in std_logic;
Y: out std_logic_vector (3 downto 0));
end component;
begin
C1: MUX_4 port map (A, B, S, Y);
A <= "0010";
B <= "1101";
S <= '0', '1' after 100 ns;
end A_T_MUX_4;
Resultado de la simulación
Sistemas Digitales I 29
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Circuito de realimentación directa)
Resultado de la simulación.
Sistemas Digitales I 30
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Mealy asíncrono)
E/S
signal PRESENTE: estado := B;
signal SIGUIENTE: estado;
begin
process (E, PRESENTE)
begin
case PRESENTE is 0/1
B 1/0
when A => if E = '0' then SIGUIENTE <= B; S <= '1';
else SIGUIENTE <= D; S <= '0';
end if;
when B => if E = '0' then SIGUIENTE <= B; S <= '1';
else SIGUIENTE <= C; S <= '0';
end if; A C
when C => SIGUIENTE <= D;
if E = '0' then S <= '1';
else S <= '0'; 0/0 1/0
end if;
1/0 0/1
D
when D => S <= '0';
if E = '0' then SIGUIENTE <= A;
else SIGUIENTE <= C;
1/0
end if;
end case;
end process;
-- Actualización del estado presente.
PRESENTE <= SIGUIENTE after 50 ns;
end A_MEALY_A;
Sistemas Digitales I 31
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Mealy asíncrono)
Resultado de la simulación:
Sistemas Digitales I 32
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Moore asíncrono)
Sistemas Digitales I 33
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Moore asíncrono)
0
Modelado del sistema de simulación:
E/S
entity T_MOORE_A is end T_ MOORE_A;
Y 1 Z
architecture A_T_MOORE_A of T_MOORE_A is 0
1 0
signal E, S: std_logic; 1
X 1 1 0
component MOORE_A 0
0
1
port (E: in std_logic; S: out std_logic); W K
end component; 0 1
0
begin
C1: MOORE_A port map (E, S);
E <= '0', '1' after 100 ns, '0' after 300 ns,'1' after 500 ns, '0' after 550 ns, '1' after 650 ns;
end A_T_MOORE_A;
Resultado de la simulación:
Sistemas Digitales I 34
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Mealy síncrono)
E/S
signal SIGUIENTE: estado;
begin
process (E, PRESENTE)
begin
case PRESENTE is
when A => if E = '0' then SIGUIENTE <= B; S <= '1';
0/1
B 1/0
else SIGUIENTE <= D; S <= '0';
end if;
when B => if E = '0' then SIGUIENTE <= B; S <= '1';
else SIGUIENTE <= C; S <= '0';
end if;
when C => SIGUIENTE <= D;
if E = '0' then S <= '1'; A C
else S <= '0';
end if;
when D => S <= '0'; 0/0 1/0
if E = '0' then SIGUIENTE <= A;
else SIGUIENTE <= C; 1/0 0/1
end case;
end if;
D 1/0
end process;
-- Actualización del estado presente.
process (CLK)
begin
if CLK’event and CLK = '1' then PRESENTE <= SIGUIENTE after 10 ns;
end if;
end process;
end A_MEALY_S;
Sistemas Digitales I 35
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Autómata de Mealy síncrono)
Resultado de la simulación:
Sistemas Digitales I 36
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Latches)
Resultado de la simulación.
Sistemas Digitales I 37
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Flip-flops)
D
end if;
end process;
end A_FF_D;
entity T_FF_D is end T_FF_D;
Resultado de la simulación.
Sistemas Digitales I 38
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Flip-flops)
Resultado de la simulación.
Sistemas Digitales I 39
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Registros)
Modelado de un registro de dos bits con entrada de reset y del sistema de simulación.
entity REGISTRO is
port (R, CLK: in std_logic; D: in std_logic_vector (1 downto 0); Q: out std_logic_vector (1 downto 0));
end REGISTRO;
architecture A_REGISTRO of REGISTRO is
begin
process (R, CLK)
begin
if R = '0' then Q <= "00";
elsif CLK'event and CLK = '0' then Q <= D after 10 ns;
end if;
end process; REG
end A_REGISTRO;
R
D0 Q0
entity T_REGISTRO is end T_REGISTRO;
architecture A_T_REGISTRO of T_REGISTRO is
signal R, CLK: std_logic;
signal D, Q: std_logic_vector (1 downto 0); D1 Q1
component REGISTRO
port (R, CLK: in std_logic; D: in std_logic_vector (1 downto 0); Q: out std_logic_vector (1 downto 0));
end component;
begin
C1: REGISTRO port map (R, CLK, D, Q);
R <= '0', '1' after 175 ns,'0' after 540 ns;
CLK <= '0', '1' after 50 ns, '0' after 100 ns, '1' after 150 ns, '0' after 200 ns, '1' after 250 ns,
'0' after 300 ns, '1' after 350 ns, '0' after 400 ns, '1' after 450 ns, '0' after 500 ns;
D <= "01", "11" after 150 ns, "10" after 250 ns,"00" after 350 ns,"01" after 450 ns;
end A_T_REGISTRO;
Resultado de la simulación.
Sistemas Digitales I 40
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Contadores)
Modelado de un contador de dos bits con carga paralela y del sistema de simulación.
entity CONTADOR is
port (CLK, NP_C: in std_logic; D: in std_logic_vector (1 downto 0); Q: buffer std_logic_vector (1 downto 0));
end CONTADOR;
architecture A_CONTADOR of CONTADOR is
begin
process (CLK)
begin
if CLK’event and CLK = '1' then
if NP_C = '0' then Q <= D after 10 ns;
elsif Q = "00" then Q <= "01" after 10 ns;
elsif Q = "01" then Q <= "10" after 10 ns;
elsif Q = "10" then Q <= "11" after 10 ns;
else Q <= "00" after 10 ns;
CTR
end if;
end if;
P/C
D0 Q0
end process;
end A_CONTADOR;
Resultado de la simulación.
Sistemas Digitales I 41