Diseño de Sistemas Moore utilizando lenguaje VHDL_CD25

JavierPalacios810767 0 views 25 slides Oct 07, 2025
Slide 1
Slide 1 of 25
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25

About This Presentation

Diseño de sistemas secuenciales tipo Moore con VHDL. Se realiza el diseño y la programación para FSM. Diversos ejemplos de diseño e implementación.


Slide Content

El VHDL en máquinas de estado finito de Moore
CIRCUITOS DIGITALES

La mayoría de los sistemas digitales que se encuentran en la práctica incluyen
elementos de memoria, los cuales requieren que el sistema se describa en
términos de lógica secuencial.
Introducción

•Un sistema secuencial está formado por un circuito combinacional y un elemento
de memoria encargado de almacenar de forma temporal la historia del sistema.
•En esencia, la salida de un sistema secuencial no sólo depende del valor presente en
las entradas en un instante determinado, sino también de la historia del sistema.
•Se dice que los secuenciales son circuitos con memoria, mientras que los
combinacionales no tienen memoria.
Diseño lógico secuencial
Básicamente hay dos tipos de sistemas secuenciales:
–Síncronos: su comportamiento se encuentra sincronizado mediante el pulso de reloj
del sistema (CLK).
–Asíncrono: Su funcionamiento depende del orden y momento en el que se aplican
las señales de entrada.
Tipos

Descripción VHDL de lógica secuencial
•Uno de los conceptos nuevos que aparece en VHDL a la hora de
describir sistemas secuenciales es la forma de describir la
activación por flanco de reloj.
•Atributo ‘EVENT.
•En el lenguaje VHDL los atributos sirven para definir
características que se pueden asociar con cualquier tipo de datos,
objeto o entidades.
•El atributo ‘event (evento, donde ‘ indica que se trata de un
atributo) se utiliza para describir un hecho u ocurrencia de una
señal particular.

Atributos de las señales
•S´EVENT: Retorna verdadero si ocurrió un evento en S durante el
corriente delta, de lo contrario devuelve falso.
•S´ESTABLE: Retorna verdadero si no hay evento en S.
•S´ACTIVE: Retorna verdadero si S=1.
•S´LAST_EVENT: Retorna el tiempo transcurrido desde la transición
previa de la señal S.
•S´LAST_VALUE: Retorna el valor previo de S antes del último evento.
•S´LAST_ACTIVE : Retorna el tiempo transcurrido desde la
transacción previa de la señal.

Atributo ‘EVENT
•Considerando una señal de reloj (CLK), la sentencia CLK ’event es
cierta sólo cuando ocurre un cambio de valor (paso de ‘0’ a ‘1’ o de
‘1’ a ‘0’). Combinándola con una sentencia de comprobación de
igualdad del nuevo valor es posible definir la activación por el tipo
de flanco que se desee:

Modelado VHDL de la activación por flanco
•La principal opción que ofrece VHDL para modelar la activación por flanco en
los circuitos secuenciales es mediante el atributo ‘event. Sin embargo, es
posible modelarlos también mediante dos formas adicionales:
–Dentro de un proceso con la sentencia WAIT UNTIL.
–Usando las macros VHDL’93 rising_edge(señal) y falling_edge(señal);

Ejm1: Flip-Flop D activo en flanco de
subida

Ejm2: Flip-Flop D activo en flanco de
subida con RESET

Ejm3: Flip-Flop D activo en flanco de
subida con CLEAR

Registros de almacenamiento
Presentan una estructura similar a los flip-flops. Almacenan el estado de un
vector de bits en lugar de un solo bit.

Diseño de una Máquina de Estados
•Una Maquina de Estados Finita (FSM) se puede describir en VHDL de varias
formas.
•En primer lugar en la sección de declaraciones de la arquitectura, se define un
tipo enumerado en el que se asignan identificadores a cada estado.
•Suele ser recomendable utilizar identificadores ilustrativos para los estados.
•La herramienta de síntesis será la encargada de codificar estos estados.
Posteriormente, en el cuerpo de la arquitectura se define la función de
transición de estados (F) y la función de salida (G) en uno o varios procesos.
•Por lo tanto tenemos:
–Un proceso secuencial que modela los estados. Por lo tanto que actualiza el
estado (ESTADO).
–Un proceso combinacional que modela las funciones F y G; por lo tanto
deriva el siguiente estado (ESTADO_SIG) y actualiza las salidas (O).

Ejemplo
Se trata de diseñar una maquina de estados que active una salida S cuando se
detecta la secuencia …001... en una línea de datos E sincronizada con un reloj.
Este detector de secuencia se puede realizar con una máquina de Moore de
cuatro estados.
–S1: Esperar el primer cero de la secuencia.
–S2: Esperar el segundo cero de la secuencia.
–S3: Esperar el uno de la secuencia y activar la salida S cuando llega.

Ejemplo

Lógica secuencial
•Es necesario conocer el tipo de descripción
concreto a realizar para que se reconozca un
elemento secuencial
•Es obligado el uso de procesos (excepto latches),
y recomendable que incluyan lista de sensibilidad
•Diferencia entre variables y señales
•Aconsejable incluir siempre un reset global que
aplique un valor de inicialización.
entity latch is
port (a, b: in std_logic;
d: out std_logic);
end latch;
architecture l_a of latch is
begin
process (a,b)
begin
if b=’1’ then d <= a; end if;
end process;
end l_a;
entity latch is
port (a, b: in std_logic;
d: out std_logic);
end latch;
architecture l_a of latch is
begin
d <= a when b=’1’;
end l_a;

Inferencia de registros activos por flanco
•Es el método más habitual de describir sistemas síncronos
•Los dispositivos lógicos incluyen registros activos por flanco (generalmente de tipo D)
•Existen varias formas de especificar la llegada de un flanco:
Descripción genérica
entity registro is
port (d, reset, preset, reloj: in std_logic;
q: out std_logic);
end registro;
architecture r_a of registro is
begin
process (d, reset, preset, reloj)
begin
if reset = ’1’ then q <= ‘0’;
elsif preset = ‘1’ then q <= ‘1’;
elsif rising_edge(reloj) then q <= d;
end if;
end process;
end r_a;
rising_edge(reloj)
if reloj’event and reloj=‘1’
if reloj’event and reloj=‘1’ and
reloj’last_value=‘0’

•No emplear más condiciones else ó elsif en la misma sentencia if..then..else después de la condición de
evaluación del reloj
•En la misma evaluación if del reloj no se deben comparar otras señales o variables
•La sentencia if del reloj no puede estar dentro de un bucle
•La sentencia if del reloj no debe estar anidada, se pueden incluir más if dentro de ella
•Sólo se puede incluir una evaluación de flanco por proceso: varios relojes → varios procesos
•En comparaciones múltiples, emplear la sentencia case
•No utilizar relojes derivados, alternativamente, emplear habilitación de reloj.
r_derivado<= not a and (b or c);
process (d, reset, preset, reloj, r_derivado)
begin
if reset = ’1’ then q <= ‘0’;
elsif preset = ‘1’ then q <= ‘1’;
elsif rising_edge(reloj) then
if r_derivado= ‘1’ then
q <= d;
end if;
end if;
end process;
end r_a;
Inferencia de registros activos por flanco

Módulos funcionales específicos
•En sistemas complejos es necesaria una correcta partición del diseño (Top-Down)
•Las descripciones de mayor nivel suelen ser estructurales (componentes y subprogramas)
•Aconsejable emplear módulos del fabricante (generadores automáticos, módulos IP, ...)
•Consultar documentación del software de síntesis → Herramientas y atributos especiales
•Módulos específicos usuales: Multiplicadores, RAM, ROM, UART, filtro FIR, interface PCI, ...
•Necesaria la utilización del tipo std_logic ó std_ulogic que define el estado 'Z‘
•Basta con incluir una condición en la que uno de los resultados ('True' o 'False') deja la salida en alta impedancia.
Puertas triestado
architecture hab_bof habis
begin
process (entrada, oe) begin
if (oe= ’1’) then salida <= entrada;
else salida <= ’Z’;
end if;
end process;
end hab_b;

•Para puertos bidireccionales la descripción es similar a los triestado: Tipo
inout.
entity bidiris
port ( bid : inoutstd_logic ;
a, b, c, oe: in std_logic;
salida: out std_logic);
end bidir;
architecture bidir_aof bidiris
signal interna1, interna2 : std_logic ;
begin
bid <= interna1 when oe= '1' else 'Z';
interna2 <= bid;
interna1 <= (a and b) nor c;
salida<= (c xorinterna2) when oe='0' else 'Z';
end bidir_a;
Módulos funcionales específicos

Máquinas de estados
•Es necesaria una descripción específica con definición de un tipo enumerado.
•Hay que hacer una división de la descripción en dos procesos distintos:
1. Cambio síncrono de estado.
2. Evaluación de condiciones para dirigirse a un estado.

Máquinas de estados

Ejemplo

Ejercicio
Recordar:
•Usar 2 procesos.
•Definir tipo de dato TYPE.

•Si el tamaño de la memoria es reducido, ésta puede
implementarse mediante recursos lógicos comunes
(funciones lógicas y registros)
•Habitualmente, existen en hardware estructuras
regulares que las implementan y donde se sintetizan si
la descripción VHDL es apropiada.
Memorias

Memorias
En el caso de RAM, es necesario comprobar que el dispositivo incorpora este
recurso lógico.