Julio. [ Programación en VHDL ] Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / a s i g n a t u r a s / d s d.

Documentos relacionados
PRACTICA 3. Lenguaje de descripción de hardware VHDL.

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Septiembre 2016

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2013, Segunda Semana

PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO MEDIANTE LENGUAJES DE DESCRIPCIÓN HARDWARE

SISTEMAS DIGITALES VHDL

VHDL. VHDL: VHSIC Hardware Description Language VHSIC: Very High Speed Integrated Circuits

DISEÑODE SISTEMAS ELECTRÓNICOS DIGITALES AVANZADOS.

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 4

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 1

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) SEGUNDA CLASE DE VHDL

SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO

Ejemplos y tipos de datos 4.1 Ejemplos simples 4.2 Definición de nuevos tipos de datos 4.3 Ejemplos de máquinas de estados 4.

UNIVERSIDAD CARLOS III DE MADRID. Ejercicios de VHDL. Circuitos Integrados y Microelectrónica. Luis Entrena. Celia López.

INTRODUCCIÓN AL LENGUAJE VHDL PARA CIRCUITOS

4.3. Lenguaje VHDL Declaración de Packages

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 8

VHDL. Lenguaje de descripción hardware

Netlist: conjunto de instrucciones que indican el interconexionado entre los componentes de un diseño (lista de conexiones).

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2014, Primera Semana

UNIVERSIDAD DE SEVILLA Dpto. de Ingeniería Electrónica. Introducción a los lenguajes HDL y conceptos. Octubre de 2007

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2014

VHDL: Código Secuencial. Arquitectura del Computador 2017

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 10

VII. Múltiples Procesos en una Arquitectura. F. Santiago E.

VHDL. Lenguaje de descripción hardware Estructura Básica de diseño

VHDL Y FPGA LENGUAJE VHDL

+ Máquinas de Estado Finitas

Tema 3 - Modelado con HDL a nivel RTL

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2017, Primera Semana

Recursos y Metodologías. Función. Programas

Objetos de VHDL.! Un objeto en VHDL es un elemento que contiene. un valor de tipo específico de dato

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) QUINTA CLASE DE VHDL

Objetos de VHDL. Un objeto en VHDL es un elemento que contiene un valor de tipo específico de dato

Sesión 6: Diseño Lógico con VHDL

PLANTILLA. [t], Maximino Peña Guerrero,

Introducción al VHDL. VHDL orientado a la síntesis de circuitos en Dispositivo Lógicos Programables

LENGUAJE VHDL. Ing. Wilmer Naranjo 1

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 5

VHDL. Very. High. speed integrated circuit Hardware. Description. Language. Digital II Ingeniería Electrónica. Rosa Corti

Diseño de Sistemas Electrónicos Digitales Avanzados

Índice. VHDL Lección 2.9 Máquinas de Estados Finitos (FSM) 1

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 3

Sistemas Electrónicos Digitales Curso de adaptación al Grado

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2015, Segunda Semana

PRÁCTICA: LENGUAJE VHDL

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 6

Prof. Dr.-Ing. F. Schubert VHDL

Practica 9 Estilos de codificar a estados FCE

TEMA 1 FUNDAMENTOS DEL DISEÑO DEL HARDWARE DIGITAL

Tema 2. Funciones Lógicas. Algebra de Conmutación. Representación de circuitos digitales. Minimización de funciones lógicas.

SECUENCIA: A BASE DE LOS 3 TIPOS DE F/F

DISEÑO DE CIRCUITOS SECUENCIALES

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA ELECTRÓNICA TRABAJO TUTORADO DE VHDL. Primer Cuatrimestre Curso 2005/2006.

DE INGENIERÍA TÉCNICA INDUSTRIAL. ESPECIALIDAD EN ELECTRÓNICA INDUSTRIAL

Sesión 1: Introducción al lenguaje VHDL. S1 1 Laboratorio de Estructura de Computadores Curso 04 / 05

Tema 7. Análisis de Circuitos Secuenciales

Código concurrente en VHDL [5]

Electrónica Digital Departamento de Electrónica VHDL. Bioingeniería Facultad de Ingeniería - UNER

Operadores y atributos en VHDL [1]

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) CUARTA CLASE DE VHDL

Tipos de datos en VHDL

Titulación: Ingeniería Informática Asignatura: Fundamentos de Computadores

INGENIERÍA DE COMPUTADORES III. Solución al examen de Junio 2012, Segunda Semana

Introducción a VHDL. Por: Carlos A. Fajardo UIS - Sistemas Digitales

DESCRIPCIÓN DE CIRCUITOS DIGITALES

Titulación: Ingeniería Informática Asignatura: Fundamentos de Computadores. Bloque 3: Sistemas secuenciales Tema 9: Módulos secuenciales básicos

DISEÑO DE PROCESADORES DEDICADOS. Práctica 6 LCD de Propósito General

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Septiembre de 2016

SENTENCIA LOOP 1.- Implementar y simular el siguiente circuito que cuenta el número de bits 1 que ingresan

Lattice isplever. Características. Gestión de proyectos

VHDL. Laboratorio de Arquitectura de Computadores. Curso I. T. Informática de Gestión I. T. Informática de Sistemas

Practica No. 8 Introducción a las Máquinas de Estados. 1. En la figura 1 se muestra el comportamiento de un robot que evade obstáculos.

Practicas tuteladas VHDL (curso 04-05)

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2014, Segunda Semana

INGENIERÍA DE COMPUTADORES III. Solución al examen de Junio 2012, Primera Semana

Tema 2. Funciones Lógicas. Algebra de Conmutación. Minimización de funciones Lógicas. Introducción al VHDL.

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2012

Diseño Lógico I Facultad de Ciencias Exactas y Tecnología UNT. LENGUAJES DE DESCRIPCIÓN DE HARDWARE

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

Lenguaje de descripción de Hardware VHSIC

A (A3, A2, A1, A0) B (B3, B2, B1, B0) A (A0, A1, A2, A3) B (B0, B1, B2, B3) 0 to 3. 3 downto 0

Universidad Autónoma de Querétaro Facultad de Ingeniería

Diseño de Sistemas Embebidos en FPGA Curso de Posgrado Facultad de Ciencias Exactas y Tecnología UNT.

Tema 4 - Bloques combinacionales

MICROPROCESADOR (CÓDIGO EN VHDL) TOMADO DEL LIBRO PARDO Y BOLUDA

VHDL. Carlos Andrés Luna Vázquez. Lección 10 Problemas

Practica No. 5 Diseño de un Multiplicador

El código concurrente está destinado para el diseño de circuitos combinacionales.

CIRCUITOS MULTIPLEXORES Y DEMULTIPLEXORES

Asignatura: Tecnología de Computadores. Bloque 1: Introducción Tema 3: Introducción a los lenguajes de descripción de hardware

INTRODUCCIÓN A LA PROGRAMACIÓN EN VHDL

Departamento de Sistemas e Informática. Digital II - ECA VHDL. Very High speed integrated circuit Hardware Description Language.

Tutorial 2: Pasar de diagrama ASM a un circuito

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2017

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA INDUSTRIAL. ESPECIALIDAD ELECTRÓNICA BOLETÍN 2. CURSO 2003/04

8. Multiplexores Digitales

Transcripción:

Julio 09 [ Programación en VHDL ] Guía rápida [ h t t p : / / w w w. o p e n b o x e r. 2 6 0 m b. c o m / a s i g n a t u r a s / d s d. h t m l ]

Programación en VHDL Guia rapida [ INDICE ] I. Programación en VHDL II. Elemnetos básicos de VHDL 2.1 Identificadores 2.2 Operadores III. Estructura básica de un archivo fuente en VHDL 3.1 Entidades (Entity) 3.2 Arquitectura (Architecture) 3.3 Sentencias de descripción 3.4 Descripción por comportamiento(behavioural IV. Descripción de Lógica Secuencial V. Diseño de una Máquina de Estados I. Programación en VHDL VHDL es un lenguaje de descripción de circuitos electrónicos digitales que utiliza distintos niveles de abstracción. El significado de las siglas VHDL es VHSIC (Very High Speed Integrated Circuits). VHDL no es un lenguaje de programación, por ello conocer su sintaxis no implica necesariamente saber diseñar con él. VHDL es un lenguaje de descripción de hardware genérico, que permite describir circuitos síncronos y asíncronos. Para realizar esto debemos: Pensar en puertas y biestables, no en variables ni funciones. Evitar bucles combinacionales y relojes condicionados. Saber quó parte del circuito es combinacional y cuál secuencial. Los circuitos descritos en VHDL pueden ser simulados utilizando herramientas de simulación para reproducir el funcionamiento del circuito. Además utilizando herramientas de síntesis se puede implementar dicho circuito en un dispositivo lógico programable o en un circuito integrado. II. Elemnetos básicos de VHDL VHDL es un lenguaje y como tal, posee sus tipos de datos y operadores. Los datos se almacenan en objetos que contienen valores de un tipo dado. 2.1 Identificadores

Constant Los objetos de esta clase tienen un valor inicial que es asignado de forma previa a la simulación y que no puede ser modificado durante ésta. constant identificador: tipo:= valor; Variable Los objetos de esta clase contienen un único valor que puede ser cambiado durante la simulaciún con una sentencia de asignación. Las variables generalmente se utilizan como índices, principalmente en instrucciones de bucle, o para tomar valores que permitan modelar componentes. Las variables NO representan conexiones o estados de memoria. variable identificador: tipo := valor; Signal Los objetos de esta clase contienen una lista de valores que incluye el valor actual y un conjunto de valores futuros. Las señales representan elementos de memoria o conexiones y si pueden ser sintetizadas. Los puertos de una entidad son implícitamente declarados como señales en el momento de la declaración, ya que estos representan conexiones. También pueden ser declaradas en la arquitectura antes del BEGIN, lo cual nos permite realizar conexiones entre diferentes módulos. signal identificador: tipo; VHDL permite utilizar tipos predefinidos, así como otros definidos por el usuario. Tipo Valor Se escribe con: Ejemplo: BIT 0 o 1 Comillas simples '0','1' STD_LOGIC U, X, 0,1, Z, W, L,H Comillas simples 'X','0','1','Z' INTEGER Números enteros sin comillas 4095, 7, 120, 1 BIT_VECTOR Múltiples casos de 0 o 1 Comillas dobles "1100110" STD_LOGIC_VECTOR múltiples casos de U,X,0,1,Z,W,L,H, Comillas dobles "100011", "00ZZ11", "ZZZZZZ" Donde: U, no inicializada X, Forzado desconocido 0, forzado a cero 1, forzado a 1 Z, alta impedancia W, desconocido débil L, débil 0

H, débil 1 -, Dont care STD_LOGIC Tipo predefinido en el estándar IEEE 1164. Este tipo representa una lógica multivaluada de 9 valores. Además del '0' lógico y el '1' lógico, posee alta impedancia 'Z', desconocido 'X' ó sin inicializar 'U' entre otros. Igual que se permite crear un vector de bits se puede crear un vector de std_logic, STD_LOGIC_VECTOR. Para poder utilizar el tipo std_logic hay que añadir la librería que lo soporta. Para poder utilizar el tipo: use ieee.std_logic_1164.all. Para poder utilizar las funciones aritmeticológicas definidas (suma, resta, multiplicación): use ieee.std_logic_arith.all. Si los vectores están en representación binaria pura: use ieee.std_logic_unsigned.all. Tipo Enumerado (type) Es un tipo de dato con un grupo de posibles valores asignados por el usuario. Los tipos enumerados se utilizan principalmente en el diseño de máquinas de estados type nombre is (valor1, valor2,...); Los tipos enumerados se ordenan de acuerdo a sus valores. Los programas de síntesis automáticamente codifican binariamente los valores del tipo enumerado para que estos puedan ser sintetizados. Algunos programas lo hacen mediante una secuencia binaria ascendente, otros buscan cual es la codificación que mejor conviene para tratar de minimizar el circuito o para incrementar la velocidad del mismo una vez que la descripción ha sido sintetizada. También es posible asignar el tipo de codificación mediante directivas propias de la herramienta de síntesis. Tipos compuestos Un tipo compuesto es un tipo de dato formado con elementos de otros tipos, existen dos formas de tipos compuestos, arrays y records. Un array es un objeto de datos que consiste en una "colección" de elementos del mismo tipo. type nombre is array (rango) of tipo; Un record es un objeto de datos que consiste en una "colección" de elementos de distintos tipos.

type nombre is record elemento1: tipo_de_dato1; elemento2: tipo_de_dato2; end record; Ejemplos: constant DATA_WIDTH: integer := 8; signal CTRL: bit_vector(7 downto 0); variable SIG1, SIG2: integer range 0 to 15; type color is (rojo, amarillo, azul); signal BMP: color; color <= rojo; type word is array (0 to 15) of bit_vector (7 downto 0); signal palabra: word; word(0) <= "00111110"; word(1) <= "00011010";... word(15) <= "11111110"; 2.2 Operadores Un operador nos permite construir diferentes tipos de expresiones mediante los cuales podemos calcular datos utilizando diferentes objetos de datos con el tipo de dato que maneja dicho objeto. En VHDL existen distintos operadores de asignación con lo que se transfieren valores de un objeto de datos a otro, y operadores de asociación que relacionan un objeto de datos con otro, lo cual no existe en ningún lenguaje de programación de alto nivel. Por ejemplo; abs *, /, mod, rem +, -, & and, or, nand, nor, xor := asignación de valores a constantes y variables. <= asignación de valores a señales. Ejemplos: y <= (x1 and x2) or d(0); y(1) <= x1 and not x2; y <= x1&x2; -- y='x1x2' Este es un comentario se utiliza "--" c := 27 + r; III. Estructura básica de un archivo fuente en VHDL

El archivo VHDL contiene la descripción del circuito que se quiere implementar. 3.1 Entidades ( Entity ) Una entidad es la abstracción de un circuito, ya sea desde un complejo sistema electrónico hasta una simple compuerta lógica. La entidad únicamente describe la forma externa del circuito, aquí se enumeran las entradas y las salidas del diseño. Una entidad es análoga a un símbolo esquemático de los diagramas electrónicos, el cual describe las conexiones del dispositivo hacia el resto del diseño. ENTITY Define externamente al circuito o subcircuito. Nombre y número de puertos, tipos de datos de entrada y salida. Tienes toda la información necesaria para conectar tu circuito a otros circuitos. entity F is port (A, B: in bit; Y out bit); end F; Los puertos pueden ser de entrada in, salida out, entrada-salida inout o un buffer. 3.2 Arquitectura ( Architecture ) Los pares de entidades y arquitecturas se utilizan para representar la descripción completa de un diseño. Una arquitectura describe el funcionamiento de la entidad a la que hace referencia. Si una entidad la asociamos con una "caja" en la que se enumeran las interfaces de conexión hacia el exterior, entonces la arquitectura representa la estructura interna de esa caja. ARCHITECTURE Define internamente el circuito. Señales internas, funciones, procedimientos, constantes... La descripción de la arquitectura puede ser estructural o por comportamiento. architecture arch_name of entity_name is -- declaraciones de la arquitectura -- tipos

-- señales -- componentes -- código de descripción -- instrucciones concurrentes -- ecuaciones booleanes process -- código de descripción end process; end arch_name; Una arquitectura se describe por comportamiento o por estructura. Una entidad puede tener más de una arquitectura, pero cuando se compile se indica cual es la arquitectura que queremos utilizar. PROCESS Cuando en VHDL se escribe un process, dentro de él aparece la parte secuencial del circuito. La simulación no entra en el process hasta que no haya variado alguna de las señales o variables de su lista de sensibilidad independientemente de lo que este contenido dentro del process. Por otro lado únicamente dentro de un process pueden aparecer las sentencias de tipo if y y nunca puede aparecer una sentencia del tipo wait. 3.3 Sentencias de descripción IF - THEN - ELSE Solo son aplicables dentro de un process if condición then... --Sentencia 1 elsif otra_condición then... --Sentencia 2... --Sentencia 3 CASE - WHEN Solo son aplicables dentro de un process case expresión is when alternativa_l =>... --Sentencia 1... when alternativa_n =>... --Sentencia n when others =>... --Sentencia n+1 end case;

FOR - LOOP Solo son aplicables dentro de un process for var_loop in rango loop... Secuencia de instrucciones end loop; WHILE - LOOP solo son aplicables dentro de un process while condición loop... Secuencia de instrucciones end loop; WHEN ELSE Signal_name <= valor_1 when condición_1 valor_2 when condición_2... valor_n when condición_n otro_valor; WITH - SELECT WHEN with identificador select Signal_name <= valor_1 when valor_identificador_1, valor_2 when valor_identificador_2,... valor_n when valor_identificador_n, otro_valor when others; 3.4 Descripción por comportamiento ( behavioral ) Las descripciones comportamentales son similares a un lenguaje de programación de alto nivel por su alto nivel de abstracción. Más que especificar la estructura o la forma en que se deben conectar los componentes de un diseño, nos limitamos a describir su comportamiento. Una descripción comportamental consta de una serie de instrucciones, que ejecutadas modelan el comportamiento del circuito. La ventaja de este tipo de descripción es que no necesitamos enfocarnos a un nivel de compuerta para implementar un diseño. Los módulos que se suelen describir mediante comportamiento suelen ser: Módulos que están al final de la jerarquía en una descripción estructural. o Paquetes CI de una librería. Módulos cuyo comportamiento es complicado para poderlo describir mediante una estructura. o Process con wait, if,, when, case...

Muchas veces las funciones dependen del tiempo, VHDL resuelve este problema permitiendo la descripción del comportamiento en la forma de un programa tradicional. 3.5 Ejemplos MULTIPLEXOR 2x1: Un multiplexor 2x1 se correspondería con el siguiente módulo visto desde fuera: Por lo que su entidad correspondiente sería: entity mux2 is port (D0, D1, S0: in std_logic; O out std_logic); end mux2; La descripción de lo que hace internamente se puede realizar de varias maneras, así pues un multiplexor es un módulo que hace: Lo cual podría corresponder perfectamente a la siguiente arquitectura: architecture behavioral1 of mux2 is O <= D1 when (S0 = '1') D0; end behavioral1; ó a esta otra: architecture behavioral2 of mux2 is multiplexor: process(d0,d1,s0) if (S0 = '1') then O <= D1; O <= D0;

end process; end behavioral2; IV. Descripción de Lógica Secuencial Para la descripción de biestables y registros utilizaremos procesos en los que la señal de reloj CLK será la que actúe por flanco. Podemos utilizar dos sentencias que representan una señal de reloj. if (CLK'event and CLK='1') then... wait until CLK'event and CLK='1'; Ambos casos representan una lógica secuencial que cambia con el flanco de subida. Así pues si se quiere representar un biestable deberíamos añadir el siguiente process: entity Biestable_D is port(in1, clk: in bit; out1: out bit); end Biestable_D; architecture ARCH of Biestable_D is process (clock) if (clock = '1') then out1 <= in1; end process end ARCH; Biestable tipo D con reset asíncrono. El proceso se activa cuando hay eventos en las señales de reset o clock como indica su lista de sensibilidad. La primera sentencia del proceso comprueba si la señal de reset está a 1. Si esta señal se ha activado el biestable se pone a cero. Si no se ha activado, el proceso funciona como el proceso descrito anteriormente. entity Biestable_rD is port(in1, clk, reset: in bit; out1: out bit); end Biestable_rD; architecture ARCH of Biestable_rD is process (clock,reset) if (reset = '1') then out1 <= '0'; elsif clock = '1' and clock'event then out1 <= in1; end process end ARCH;

FLIP FLOP D library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity F_F_D is port(d, CLK, reset : in STD_LOGIC; Q : out STD_LOGIC); end F_F_D; architecture behavioral of F_F_D is process(reset, CLK) if reset='0' then Q<='0'; elsif (CLK' event and CLK='1') then Q<='D'; end process; end behavioral; CONTADOR DE 4 BITS library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity conta is port(clk : in STD_LOGIC; Quo : inout STD_LOGIC_VECTOR(3 donwto 0)); end conta; architecture behavioral of conta is process(clk) if clk' event and clk='1' then Quo <= Quo+1; end process; end behavioral;

V. Diseño de una Máquina de Estados VHDL permite realizar descripciones algorítmicas de alto nivel de máquinas de estados. De esta forma, el diseñador se evita tareas como generar la tabla de transición de estados o la obtención de las ecuaciones de excitación basadas en tipo de biestable. Una Máquina 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 biestables de estado; 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). Para ilustrar la descripción de máquinas de estados veamos dos ejemplos de una máquina tipo Mealy y una tipo Moore.

Máquina tipo MOORE Diagrama de estados Para la implementación en VHDL. Primero definimos un tipo enumerado, formado por los nombres de los estados y se declara una señal de este tipo: type estado is (a,b,c,d,e); signal state:estado; A continuación creamos un proceso combinacional en el que se determina el siguiente estado (state) y la salida "z" en función del estado actual (estado). El programa quedaría al final de la siguiente manera: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity moorefsm is Port ( clk : in STD_LOGIC; reset : in STD_LOGIC; w : in STD_LOGIC; z : out STD_LOGIC); end moorefsm; architecture Behavioral of moorefsm is type estado is (a,b,c,d,e); signal state:estado;

process (reset, clk) if reset='0' then state <=a; elsif (clk'event and clk = '1') then case (state) is when a => if w = '0' then state <= b; state <= d; when b => if w = '0' then state <= c; state <= d; when c => if w = '0' then state <= c; state <= d; when d => if w = '0' then state <= b; state <= e; when e => if w = '0' then state <= b; state <= e; end case; end process; z <= '1' when (state = c or state = e) '0'; end Behavioral;

Máquina tipo MEALY Diagrama de estados Para la implementación en VHDL. Primero definimos un tipo enumerado, formado por los nombres de los estados y se declara una señal de este tipo: type estado is (a,b,c); signal state: estado; El programa quedaría al final de la siguiente manera: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mealyfs is Port ( clk : in STD_LOGIC; reset : in STD_LOGIC; w : in STD_LOGIC; z : out STD_LOGIC); end mealyfs; architecture Behavioral of mealyfs is type estado is (a,b,c); signal state: estado; process(clk,reset) if (reset = '0') then state <= a;

elsif (clk'event and clk = '1') then case (state) is when a => if w = '0' then state <= b; state <= c; when b => if w = '0' then state <= b; state <= c; when c => if w = '0' then state <= b; state <= c; end case; end process; process (state, w) case state is when a =>z <= '0'; when b =>z <= w; when c =>z <= not w; end case; end process; end Behavioral;