Está en la página 1de 42

Sistemas Digitales I

2º curso del Grado en Ingeniería Electrónica Industrial

Seminario I

Introducción al lenguaje VHDL

Curso 2018 - 2019 Departamento de Ingeniería Electrónica,


de Sistemas Informáticos y Automática
Seminario I: Introducción al lenguaje VHDL
Contenido del seminario

 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.

 Fue creado por el Departamento de Defensa de USA.

 Características principales:

 Es modular y jerárquico, es decir, permite dividir el diseño y centrarse en las partes


más pequeñas de forma independiente.

 Permite diseñar, modelar y comprobar sistemas desde casi todos los niveles en los
que se pueden describir.

 Permite la descripción de circuitos a nivel de estructura y a nivel de


comportamiento.

 Existen herramientas capaces de crear circuitos a partir de un modelo,


denominadas herramientas de síntesis.

 Se trata de un estándar libre, por lo que existen muchas herramientas de diseño


basadas en él.

Sistemas Digitales I 2
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL

 Partes de un modelo en VHDL.

ENTIDAD ARQUITECTURA

Estructura
Entradas Salidas y/o
comportamiento

Entradas / Salidas

 Algunos datos sintácticos del lenguaje VHDL.


 Toda línea que comienza por “--” es un comentario.
 Todas las instrucciones acaban en “;”.
 El compilador no distingue entre minúsculas y mayúsculas.

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;

 Posibles sentidos de las señales:


 In, out, inout y buffer.

 Tipos de señales más usuales:


 Bit (0, 1) , std_logic (0, 1, X, Z, U, -, L, H, W).
 Bit_vector (a to b), std_logic_vector (a to b).
 Bit_vector (b downto a), std_logic_vector (b downto a).

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.

 Descripción del circuito:


 Descripción de la estructura.

 Descripción del comportamiento.

 Posibilidad de varios tipos de descripción en una misma arquitectura.

 Elementos de la arquitectura:
 Nombre.

 Parte declarativa:
 Declaración de señales internas.

 Declaración de componentes.

 Descripción del circuito:


 Instrucciones concurrentes.

 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)

 Las instrucciones concurrentes son aquellas que se ejecutan siempre directamente


sobre una señal.

 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.

 El orden en que se colocan las instrucciones concurrentes en el código es irrelevante.

 Las instrucciones concurrentes pueden ser de tres tipos:

 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)

 Instrucciones concurrentes condicionales: Asignan a una señal diferentes valores


según se cumplan o no una serie de condiciones.
 Formato:
señal <= valor_1 when condición_1 else
valor_2 when condición_2 else
valor_n when condición_n else
valor_por_defecto;
 Ejemplo:
V <= "1011" when B < 3 else
"0111" when A = '0' and C = '1' else
"0100" when D /= 5 else
"1001";

Sistemas Digitales I 11
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones concurrentes)

 Instrucciones concurrentes múltiples: Asignan a una señal diferentes valores según el


valor de otra señal que se toma como referencia.
 Formato:
with señal_referencia select
señal <= valor_1 when v_referencia_1,
valor_2 when v_referencia_2,
valor_n when v_referencia_n,
valor_por_defecto when others;
 Ejemplos:
with P select
T <= '1' when "0011",
'1' when "1011",
'0' when others;
Otra forma equivalente de expresarlo:
with P select
T <= '1' when "0011" | "1011",
‘0' when others;

Sistemas Digitales I 12
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)

 Las instrucciones secuenciales son aquellas que se insertan dentro de un módulo


denominado proceso (process) y no se ejecutan hasta que se ha terminado de leer
todo el módulo.

 Al contrario de lo que ocurre con las instrucciones concurrentes, el orden en que se


colocan las instrucciones secuenciales en el código es importante.

 Si dentro de un proceso existen varias asignaciones secuenciales a una misma señal


sólo es válida la última de ellas. En el caso de asignaciones condicionales (lo más
usual), será válida la última asignación cuyas condiciones se cumplen.

 Los procesos se declaran según el siguiente formato:


nombre_del_proceso (opcional): process (lista de sensibilidades)
begin
instrucciones secuenciales;
end process;

Sistemas Digitales I 13
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)

 La lista de sensibilidades determina cuando se ejecuta el proceso. En esta lista se


colocan los nombres de aquellas señales cuyo cambio de valor debe provocar la
ejecución del proceso, separadas por comas.

 Cada proceso completo es equivalente a una instrucción concurrente. Por tanto, no


pueden realizarse asignaciones a una misma señal en dos procesos distintos.

 Las instrucciones secuenciales también pueden ser:

 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)

 Instrucciones secuenciales condicionales: Asignan a una o varias señales diferentes


valores según se cumplan o no una serie de condiciones.
 Formato:
process (lista de sensibilidades)
begin
if condición_1 then instrucción_1; instrucción_2;
elsif condición_2 then instrucción_3; instrucción_4;
else instrucciones_por_defecto;
end if;
end process;
 Ejemplo:
process (A, B, C)
begin
if A = '1' then F <= '1'; G <= '0';
elsif B = '0' then G <= '1';
else F <= '1'; G <= '0';
end if;
end process;

Sistemas Digitales I 15
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Instrucciones secuenciales)

 Instrucciones secuenciales multiples: Asignan a una o varias señales diferentes valores


según el valor de otra señal que se toma como referencia.
 Formato:
process (lista de sensibilidades)
begin
case señal_referencia is
when v_referencia_1 => instrucción_1; instrucción_2;
when v_referencia_2 => instrucción_3; instrucción_4;
when others => instrucciones_por_defecto;
end case;
end process;

 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 de flujo de datos:

 Se especifican las relaciones entre los objetos mediante instrucciones concurrentes.

 Descripción comportamental o algorítmica:

 El circuito se especifica mediante un conjunto de instrucciones secuenciales incluidas en un proceso.

 Cada proceso es equivalente a una instrucción concurrente.

 Descripción estructural:

 El circuito se define especificando las conexiones entre varias partes más simples, especificadas como
componentes.

 Permite la incorporación al diseño de elementos de librería.

 Permite la realización de diseños jerárquicos.

 Normalmente no se utiliza un solo tipo de descripción, sino una combinación de ellos.

Sistemas Digitales I 17
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)

 Ejemplo de descripción de flujo de datos:

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)

 Ejemplo de descripción comportamental o algorítmica:


entity MUX_1_DCA is
port (C0, C1, S: in std_logic; Y: out std_logic);
end MUX_1_DCA;
architecture A_MUX_1_DCA of MUX_1_DCA is
begin
M1: process (C0, C1, S)
begin
if S='0' then Y <= C0;
else Y <= C1;
end if;
end process;
end A_MUX_1_DCA;

MUX
0
1
S
Sistemas Digitales I 19
Seminario I: Introducción al lenguaje VHDL
Modelado en VHDL (Formas de descripción en VHDL)

 Ejemplo de descripción estructural:


-- Declaración de la biblioteca de componentes que contiene las puertas a usar.
library BIBLIOTECA;
-- Activación de todos los componentes del paquete “PUERTAS” de BIBLIOTECA.
use BIBLIOTECA.PUERTAS.all;
entity MUX_1_DE is
port (C0, C1, S: in std_logic; Y: out std_logic); MUX
end MUX_1_DE; 0
1
architecture A_MUX_1_DE of MUX_1_DE is S
signal N1, N2, N3: std_logic;
begin
I1: INV port map (S, N1);
A1: AND_2 port map (C0, N1, N2);
C0
A2: AND_2 port map (S, C1, N3); N1 AND_2
N2

O1: OR_2 port map (N2, N3, Y); INV


S Y
end A_MUX_1_DE; OR_2

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)

 Formato típico de un sistema de simulación:


-- Declaración de la entidad de testado.
entity nombre_e.testado is end nombre_e.testado;
-- Declaración de la arquitectura de testado.
architecture nombre_a.testado of nombre_e.testado is
-- Declaración de las señales del circuito.
signal señal_1: tipo;
signal señal_n: tipo;
-- Declaración como componente del circuito a simular.
component nombre_componente
port (señal_1: sentido tipo;
señal_n: sentido tipo);
end component;
-- Comienzo de la arquitectura.
begin
-- Instanciación del componente.
C1: nombre_componente port map (señal_1, señal_n);
-- Asignación de los patrones de entrada.
-- En las señales de tipo vector, los valores se ponen entre comillas dobles (")
señal_1 <= '0', '1' after 10 ns;
señal_n <= '0', '1' after 20 ns;
end nombre_a.testado;

Sistemas Digitales I 22
Seminario I: Introducción al lenguaje VHDL
Simulación en VHDL (Definición de estímulos)

 Definición de estímulos: A continuación se muestran varios modos de definir los


estímulos de entrada para chequear una tabla de verdad mediante un proceso.

 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

 Modelado del circuito


entity CIRCUITO is
port (C, B, A: in std_logic; F: out std_logic);
end CIRCUITO;
architecture A_CIRCUITO of CIRCUITO is
signal N1, N2, N3: std_logic;
begin
N1 <= not B after 5 ns;
N2 <= C and N1 after 8 ns;
N3 <= B and A after 8 ns;
F <= N2 or N3 after 10 ns;
end A_CIRCUITO;

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)

 Modelado del circuito


-- Multiplexor de dos canales.
entity MUX_1 is
port (C0, C1, S: in std_logic; Y: out std_logic);
end MUX_1;
architecture A_MUX_1 of MUX_1 is
begin
Y <= C0 when S = '0' else C1;
end A_MUX_1;

-- Cuádruple multiplexor de dos canales.


entity MUX_4 is
port (A, B: in std_logic_vector (3 downto 0); S: in std_logic;
Y: out std_logic_vector (3 downto 0));
end MUX_4;
architecture A_MUX_4 of MUX_4 is
component MUX_1
port (C0, C1, S: in std_logic; Y: out std_logic);
end component;
begin
C1: MUX_1 port map (A(0), B(0), S, Y(0));
C2: MUX_1 port map (A(1), B(1), S, Y(1));
C3: MUX_1 port map (A(2), B(2), S, Y(2));
C4: MUX_1 port map (A(3), B(3), S, Y(3));
end A_MUX_4;

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)

 Modelado un circuito de realimentación directa y del sistema de simulación.


entity R_DIRECTA is
port (A, B: in std_logic; F: buffer std_logic);
end R_DIRECTA;
architecture A_ R_DIRECTA of R_DIRECTA is
signal N1, N2, N3: std_logic;
begin
N1 <= A and B after 8 ns;
N2 <= A and F after 8 ns; A N1
N3 <= B and F after 8 ns; B
F <= N1 or N2 or N3 after 10 ns;
end A_R_DIRECTA;
N2
entity T_R_DIRECTA is end T_R_DIRECTA; F
architecture A_T_R_DIRECTA of T_R_DIRECTA is
signal TA, TB, TF: std_logic;
component R_DIRECTA N3
port (A, B: in std_logic; F: buffer std_logic);
end component;
C1: R_DIRECTA port map (TA, TB, TF);
TA <= '0', '1' after 100 ns, '0' after 400 ns;
TB <= '0', '1' after 200 ns, '0' after 300 ns;
end A_T_R_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)

 Modelado del funcionamiento de un autómata de MEALY asíncrono:


entity MEALY_A is
port (E: in std_logic; S: out std_logic);
end MEALY_A;
architecture A_MEALY_A of MEALY_A is
-- Definición del tipo “estado”.
type estado is (A, B, C, D); 0/1
-- Declaración de señales internas del tipo estado.

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)

 Modelado del sistema de simulación: 0/1

entity T_MEALY_A is end T_MEALY_A; E/S


architecture A_T_MEALY_A of T_MEALY_A is 0/1
B 1/0
signal E, S: std_logic;
component MEALY_A A C
port (E: in std_logic; S: out std_logic);
0/0 1/0
end component;
1/0 0/1
begin D 1/0
C1: MEALY_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_MEALY_A;

 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)

 Modelado del funcionamiento de un autómata de MOORE asíncrono:


entity MOORE_A is
port (E: in std_logic; S: out std_logic);
end MOORE_A;
architecture A_MOORE_A of MOORE_A is
type estado is (X, Y, Z, W, K);
signal PRESENTE: estado:= Y;
signal SIGUIENTE: estado; 0
begin
process (E, PRESENTE)
begin
case PRESENTE is
E/S
when X => S <= '0';
Y 1 Z
if E = '0' then SIGUIENTE <= Y; else SIGUIENTE <= W;
end if; 0
1 0
when Y => S <= '1'; 1
if E = '0' then SIGUIENTE <= Y; else SIGUIENTE <= Z;
end if; X 1 1 0
0
when Z => S <= '0'; 0
if E = '0' then SIGUIENTE <= K; else SIGUIENTE <= W; 1
end if; W K
when W => S <= '0';
if E = '0' then SIGUIENTE <= X; else SIGUIENTE <= Z; 0 1
end if; 0
when K => S <= '1';
if E = '0' then SIGUIENTE <= X; else SIGUIENTE <= Z;
end if;
end case;
end process;
PRESENTE <= SIGUIENTE after 50 ns;
end A_MOORE_A;

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)

 Modelado del funcionamiento de un autómata de MEALY síncrono:


entity MEALY_S is
port (CLK, E: in std_logic; S: out std_logic);
end MEALY_S;
architecture A_MEALY_S of MEALY_S is
-- Definición del tipo “estado”.
type estado is (A, B, C, D);
-- Declaración de señales internas del tipo estado.
0/1
signal PRESENTE: estado := B;

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)

 Modelado del sistema de simulación:


entity T_MEALY_S is end T_MEALY_S;
0/1
architecture A_T_MEALY_S of T_MEALY_S is
signal CLK, E, S: std_logic;
component MEALY_S
E/S
port (CLK, E: in std_logic; S: out std_logic);
end component; 0/1
B 1/0
begin
C1: MEALY_S port map (CLK, E, S);
CLK <= '0', '1' after 50 ns, '0' after 100 ns,'1' after 150 ns, '0' after 200 ns, A C
'1' after 250 ns, '0' after 300 ns,'1' after 350 ns, '0' after 400 ns,
'1' after 450 ns, '0' after 500 ns, '1' after 550 ns, '0' after 600 ns, 0/0 1/0
'1' after 650 ns, '0' after 700 ns,'1' after 750 ns, '0' after 800 ns, 1/0 0/1
'1' after 850 ns; D 1/0
E <= '0', '1' after 100 ns, '0' after 400 ns,'1' after 600 ns,'0' after 700 ns;
end A_T_MEALY_S;

 Resultado de la simulación:

Sistemas Digitales I 36
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Latches)

 Modelado un latch tipo D y del sistema de simulación.


entity LATCH_D is
port (C, D: in std_logic; Q: out std_logic);
end LATCH_D;
architecture A_LATCH_D of LATCH_D is
begin
process (C, D)
begin
if C = '1' then Q <= D after 10 ns;
end if;
end process; D
end A_LATCH_D;

entity T_LATCH_D is end T_LATCH_D;


C
architecture A_T_LATCH_D of T_LATCH_D is
signal C, D, Q: std_logic;
component LATCH_D
port (C, D: in std_logic; Q: out std_logic);
end component;
begin
C1: LATCH_D port map (C, D, Q);
C <= '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 <= '0', '1' after 70 ns, '0' after 120 ns, '1' after 220 ns, '0' after 380 ns;
end A_T_LATCH_D;

 Resultado de la simulación.

Sistemas Digitales I 37
Seminario I: Introducción al lenguaje VHDL
Modelado de sistemas secuenciales (Flip-flops)

 Modelado un flip-flop tipo D y del sistema de simulación.


entity FF_D is
port (CLK, D: in std_logic; Q: out std_logic);
end FF_D;
architecture A_FF_D of FF_D is
begin
process (CLK)
begin
if CLK’event and CLK = '1' then Q <= D after 10 ns;

D
end if;
end process;
end A_FF_D;
entity T_FF_D is end T_FF_D;

architecture A_T_FF_D of T_FF_D is


signal CLK, D, Q: std_logic;
component FF_D
port (CLK, D: in std_logic; Q: out std_logic);
end component;
begin
C1: FF_D port map (CLK, D, Q);
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 <= '0', '1' after 70 ns, '0' after 120 ns, '1' after 220 ns, '0' after 380 ns;
end A_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)

 Modelado de un flip-flop tipo D con entrada de reset y del sistema de simulación.


entity FF_D_R is
port (R, CLK, D: in std_logic; Q: out std_logic);
end FF_D_R;
architecture A_FF_D_R of FF_D_R is
begin
process (R, CLK)
begin
if R = '0' then Q <= '0';
elsif CLK'event and CLK = '1' then Q <= D after 10 ns;
end if;
end process;
D
end A_FF_D_R;

entity T_FF_D_R is end T_FF_D_R;


architecture A_T_FF_D_R of T_FF_D_R is
signal R, CLK, D, Q: std_logic; R
component FF_D_R
port (R, CLK, D: in std_logic; Q: out std_logic);
end component;
begin
C1: FF_D_R port map (R, CLK, D, Q);
R <= '0', '1' after 200 ns,'0' after 425 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 <= '0', '1' after 75 ns, '0' after 225 ns,'1' after 325 ns;
end A_T_FF_D_R;

 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;

entity T_CONTADOR is end T_CONTADOR; D1 Q1


architecture A_T_CONTADOR of T_CONTADOR is
signal CLK, NP_C: std_logic;
signal D, Q: std_logic_vector (1 downto 0);
component CONTADOR
port (CLK, NP_C: in std_logic; D: in std_logic_vector (1 downto 0); Q: buffer std_logic_vector (1 downto 0));
end component;
begin
C1: CONTADOR port map (CLK, NP_C, D, Q);
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, '1' after 550 ns;
NP_C <= '0','1' after 100 ns,'0' after 540 ns;
D <= "10", "00" after 300 ns;
end A_T_CONTADOR;

 Resultado de la simulación.

Sistemas Digitales I 41

También podría gustarte