Diseño de Sistemas Moore utilizando lenguaje VHDL_CD25
JavierPalacios810767
0 views
25 slides
Oct 07, 2025
Slide 1 of 25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.
Size: 1.14 MB
Language: es
Added: Oct 07, 2025
Slides: 25 pages
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.