0% encontró este documento útil (0 votos)
155 vistas235 páginas

Libro VHDL Lara

Este libro de texto estudia temas relacionados con el diseño de circuitos digitales utilizando VHDL. Cubre desde conceptos básicos de VHDL hasta diseño de circuitos complejos como comunicación serial y buses de comunicación. El libro está diseñado para ser utilizado en la impartición de la materia de Diseño Digital con VHDL en la carrera de Ingeniería Electrónica.

Cargado por

Enrique
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
155 vistas235 páginas

Libro VHDL Lara

Este libro de texto estudia temas relacionados con el diseño de circuitos digitales utilizando VHDL. Cubre desde conceptos básicos de VHDL hasta diseño de circuitos complejos como comunicación serial y buses de comunicación. El libro está diseñado para ser utilizado en la impartición de la materia de Diseño Digital con VHDL en la carrera de Ingeniería Electrónica.

Cargado por

Enrique
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Instituto Tecnológico de Lázaro Cárdenas

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México

Instituto Tecnoló[Link] Lázaro Cárdenas


JOSÉ ARMANDO LARA GONZÁLEZ

Carrera:
Ingeniería Electrónica
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Libro de Texto:
Diseño Digital con VHDL
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Elaboró:
M.C. José Armando Lara González
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Cd. Lázaro Cárdenas, Michoacán a 14 de Agosto de 2018


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONTENIDO
===========================================================

INTRODUCCIÓN………………………………………………………………....... 1
CAPÍTULO 1………………………………………………………………………. 3
Introducción……………………………………………………………………… 3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1.1 Elementos del lenguaje VHDL………………………………………………. 4

1.1.1 Elementos sintácticos del VHDL……………………………………….. 4


1.1.2 Operadores y expresiones en VHDL…………………………………… 6
1.2 Declaración de objetos………………………………………………………. 7
1.2.1 Declaración de señales…………………………………………………. 7
1.2.2 Declaración de ficheros………………………………………………… 8
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1.3 Declaraciones concurrentes……………...…………………………………... 9

1.3.1 Declaración de arquitectura de flujo de datos…………………………… 11

1.3.2 Ejemplos de descripción de flujo de datos……………………………… 13

1.4 Ejemplos de declaraciones secuenciales…………………………………….. 16

1.4.1 Ejemplos de diagramas de máquinas de estado……………………..... 19


1.5 Funciones y subprogramas…………………………………………………... 22
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1.5.1 Declaración de procedimientos y funciones……………………………. 22
1.5.2. Subprogramas………………………………………………………….. 25
1.5.3 Paquetes………………………………………………………………. 26
1.5.4 Bibliotecas…………………………………………………………….... 28

1.6 Programación de FPGA’s ó CPLD’s en diferentes aplicaciones…………….. 29

M.C. JOSÉ2……………………………………………………………………….
CAPÍTULO ARMANDO LARA GONZÁLEZ 36
Introducción……………………………………………………………………… 36
2.1 Modelo de Mealy y Modelo de Moore………………………………………. 41
2.2 Representación de modelos Mealy y Moore en diagramas de estado y ASM. 43

i
2.3 Diseño de FSM tipo Mealy y tipo Moore utilizando VHDL…………………. 49
2.3.1 Obtención de tablas de estado…………………………………………... 49
2.3.2 Obtención de ecuaciones de estado……………………………………... 57
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2.3.3 Programación del archivo .VHD………………………………………... 66
2.3.4 Simulación del archivo .VHD…………………………………………... 82
2.3.5 Obtención del archivo de programación………………………………... 92
2.3.6 Programación de FPGA’s ó CPLD’s…………………………………… 98

CAPÍTULO 3………………………………………………………………………. 100


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Introducción……………………………………………………………………… 100
3.1 Conceptos de memoria……………….……………………………………… 101
3.1.1 Terminología de memorias………………….......……………………… 102
3.1.2 Operación general de memorias………………...……………………… 104
3.1.3 Tipos de memorias………………….......……………………………… 108
3.1.4 Aplicación de memorias en la lógica combinacional y secuencial…..… 125
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

CAPÍTULO 4………………………………………………………………………. 131


Introducción……………………………………………………………………… 131
4.1 Arquitectura Von Neumann………….……………………………………… 132
4.1.1 Arquitectura de microprocesadores...……….......……………………… 132
4.2 Arquitectura Harvard……...………….……………………………………… 133
M.C. JOSÉ ARMANDO LARA GONZÁLEZ 134
4.2.1 Arquitectura de microprocesadores...……….......………………………
4.3 Estructura y funcionamiento de una ALU…………………………………… 135
4.3.1 Registro de estado………………......……….......……………………… 138
4.3.2 operación con datos de memoria y registros.........……………………… 139
4.3.3 Operaciones con punto flotante y fijo……….......……………………… 139
4.4 Descripción de una ALU en VHDL…….…………………………………… 142
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CAPÍTULO 5………………………………………………………………………. 150
Introducción……………………………………………………………………… 150
5.1 Comunicación serial con UART………….……………….………………… 151

ii
5.1.1 Introducción………………………...……….......……………………… 151
5.1.2 Diseño de una UART en VHDL…...……….......……………………… 169
5.2 Comunicación serial por I2C……...………….……………………………… 175
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
5.2.1 .Introducción a I2C..……….......…………………...…………………… 175
5.2.2 Diseño de un módulo para comunicación I2C………….......…………… 178
5.2.3 Comunicación de una FPGA con otro dispositivo por medio de I2C….. 194
5.3 Comunicación por Ethernet utilizando IP cores…….…………………..…… 205
5.3.1 Introducción a Ethernet……………..……….......……………………… 205
5.3.2 Utilización de IP cores para comunicar dos FPGA’s por Ethernet........... 206
M.C. JOSÉ ARMANDO LARA GONZÁLEZ217
5.4 Comunicación por CAN utilizando IP cores….…….…………………..……
5.4.1 Introducción al Bus CAN…………..……….......……………….……… 218
5.4.2 Utilización de IP cores para comunicar dos FPGA’s por Bus CAN........ 223
Referencias……………………………………..….…….…………………..…… 231

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

iii
Introducción

INTRODUCCIÓN
En el presente libro de texto, se estudian temas relacionados con la manera de diseñar
circuitos digitales utilizando un lenguaje de descripción de hardware como VHDL. El libro está
[Link]É
apegado ARMANDO
programa LARA GONZÁLEZ
de estudios de la materia de Diseño Digital con VHDL de la carrera de
Ingeniería Electrónica del Tecnológico Nacional de México. Este trabajo nace por la necesidad
de contar con un instrumento didáctico que permita impartir dicha materia en la carrera
mencionada, ya que debido al rápido avance de las técnicas de desarrollo digital, no se contaba
con un material para la impartición de dicha materia.

El diseño de circuito digitales tradicional empleado a mediados de la década de los 80’s,


consiste en interconectar varios chips, cada uno con unas cuantas compuertas lógicas. Existe
una amplia variedad de chips, con diferentes tipos de compuertas lógicas para este propósito,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
los cuales se conocen como partes de la serie 7400. Este tipo de diseño, si bien es cierto resolvió
muchos problemas por largo tiempo, no permite diseño de circuitos digitales muy complejos,
además que tampoco permite la simulación de los mismos.

Para el diseño de grandes circuitos electrónicos digitales, actualmente se utilizan


modernas técnicas de diseño con herramientas de software de CAD (Diseño Asistido por
Computadora). Por lo que es necesario contar con un lenguaje para la descripción del hardware.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Actualmente existen muchos lenguajes de descripción de hardware para describir
circuitos digitales, siendo el más popular el VHDL (Lenguaje de Descripción de Hardware para
Circuitos Integrados de Muy Alta Velocidad), ya que este lenguaje nació como un estándar de
descripción de circuitos. Los otros lenguajes de descripción de hardware muchas veces son
propios de una determinada herramienta o fabricante de Circuitos Integrados, lo que no les
permite ser considerados como un estándar.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A lo largo de este libro se presenta al lector diversos temas relacionados con el diseño
de circuitos lógicos, tratando de explicar las ideas principales con ejemplos simples, así como
la manera de realizar circuitos lógicos complejos a partir de circuitos simples.

En el Capítulo 1 se inicia con el estudio del lenguaje VHDL. Se identifican las


características principales, como son: modelado estructural, programación de CPLD’s
(Dispositivos Lógicos Programables Complejos) y FPGA’s (Arreglo de Compuertas
Programable en Campo), diseño y comportamiento del hardware de un sistema digital desde un
nivel M.C. JOSÉ ARMANDO
estructural LARA
de compuertas GONZÁLEZ
hasta un alto nivel de abstracción.

Tecnológico Nacional de México 1


Instituto Tecnológico de Lázaro Cárdenas
Introducción

El Capítulo 2 plantea el diseño y la simulación de máquinas de estado finito aplicando


modelos de Moore y Mealy, utilizando el lenguaje VHDL para modelar, simular e implementar
este tipo de sistemas digitales.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Por otro lado en el Capítulo 3 se aborda el estudio de memorias semiconductoras, donde


se estudian los conceptos generales, funcionamiento, programación y aplicación de memorias
semiconductoras, haciendo el modelado de memorias RAM y ROM en VHDL.

En el capítulo 4 del presente trabajo, se tratarán los diferentes tipos de arquitecturas de


los microprocesadores, explicando los principios básicos de operación y arquitectura de los
M.C. JOSÉde
mismos, realizando operaciones entre datos provenientes ARMANDO LARA
la memoria, GONZÁLEZ
registros y puertos de
entrada/salida. De igual manera se estudia en este capítulo, el funcionamiento de una ALU
(Unidad Aritmética y Lógica), destacando las operaciones que realiza y su implementación en
VHDL.

Finalmente en el Capítulo 5 se estudian algunas de las formas de comunicación de la


FPGA. Se tratarán es este capítulo la Comunicación Serial con UART, realizando el diseño de
una interfaz UART en VHDL. Así mismo se verá el Diseño de un módulo para comunicación
I2C, introduciendo
M.C. JOSÉ ARMANDO
además alLARA
lectorGONZÁLEZ
al Bus CAN.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 2


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Capítulo 1

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Programación VHDL
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los elementos básicos de VHDL (Lenguaje de
Descripción de Hardware para Circuitos Integrados de Muy Alta Velocidad), lo que permitirá
al lector conocer la estructura de un programa en dicho lenguaje. En este capítulo se adquirirán
las bases necesarias para realizar un programa en VHDL. Estos conocimientos son básicos para
la comprensión de la operación de circuitos lógicos más complejos, como es el caso de los
Microprocesadores y los Microcontroladores.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


VHDL fue desarrollado como un lenguaje para el modelado y simulación lógica dirigida
por eventos de sistemas digitales y actualmente se utiliza también para la síntesis automática de
circuitos. Uno de los objetivos de dicho lenguaje es el modelado, el cual consiste en el desarrollo
de un modelo para simulación de un circuito.

Unas de las ventajas de VHDL es que los módulos creados en este lenguaje pueden ser
utilizados en diferentes diseños, lo que permite la reutilización de código. Igualmente al estar
basadoM.C.
enJOSÉ ARMANDO
un estándar LARA
(IEEE GONZÁLEZ
Std 1076-1987, IEEE Std 1076-1993) los ingenieros de las
industrias de diseño pueden usar este lenguaje para minimizar errores de comunicación y
problemas de compatibilidad.

Tecnológico Nacional de México 3


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

1.1. ELEMENTOS DEL LENGUAJE VHDL


Debido
M.C. JOSÉaARMANDO
que VHDLLARAes unGONZÁLEZ
lenguaje de descripción de hardware, es un poco diferente a
los demás lenguajes de programación. Pero VHDL realmente es un lenguaje de programación,
por lo que cuenta con sus elementos básicos, tipos de datos, y estructuras como cualquier otro
tipo de lenguaje de programación.

Una de las principales diferencias del lenguaje VHDL con respecto al resto de los
lenguajes es la capacidad de ejecutar instrucciones a la vez de forma concurrente, aunque
también existen otros tipos de lenguaje que tienen esta característica.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


1.1.1 Elementos sintácticos del VHDL
Los elementos sintácticos de VHDL son un conjunto de símbolos y reglas que definen
su estructura y el significado de sus elementos y expresiones. A continuación se mencionan y
se explican algunos de los más importantes elementos sintácticos de VHDL.

 Comentarios: para escribir un comentario se escribirán primero dos guiones “--”, en


M.C.
unaJOSÉ
líneaARMANDO LARA
se ignora todo GONZÁLEZ
lo que se escriba después de los guiones. Para comentar bloques
enteros de programas se hace escribiendo /* al inicio del bloque y */ al final del bloque.

 Símbolos especiales: Además de las palabras reservadas existen símbolos y caracteres


especiales por ejemplo: + - / * ( ) . , : ; & ´ “ < > 0 | # que son de un solo carácter y **
=> := /= >= <= <> -- ?< ?? ?> ?= ?=> ?/= ?>= ?<= que son de dos y tres caracteres.

 Identificadores: son la base de la programación ya que permite nombrar a los diferentes


objetos del lenguaje como las variables, señales y rutinas entre otros. Puede ser cualquier
nombre que contenga letras y números, M.C. incluyendo
JOSÉ ARMANDO guionLARA
bajo GONZÁLEZ
“_”, nunca deberá
contener un símbolo especial o iniciar con un número o subrayado. Tampoco se permite
que el identificador termine con un subrayado o tenga dos seguidos. Lógicamente
tampoco se puede usar como identificador algunas de las palabras claves de VHDL.
Finalmente mayúsculas y minúsculas son consideradas de igual forma, de tal manera
que MUNDO, Mundo y mundo son consideradas el mismo objeto.

 Números: Cualquier número se considerará en base 10. Permite el uso de notación


científica convencional con punto flotante, además de la posibilidad de usar
representaciones
M.C. JOSÉ ARMANDO enLARA
otrosGONZÁLEZ
sistemas numéricos con el símbolo “#”, por ejemplo
2#11000100# y 16#C4# representan el entero 196.

 Caracteres: son cualquier letra o carácter entre comillas simples: ‘1’, ’3’, ‘t’.

Tecnológico Nacional de México 4


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

 Cadenas: es un grupo de caracteres entre comillas dobles: “ejemplo de cadena”.

 M.C.
Cadenas de bits: la LARA
JOSÉ ARMANDO cadena de bits se puede expresar, depende del tipo de base en que
GONZÁLEZ
se especifique el número usando los prefijos (B) para binario, (O) para octal y (X) para
hexadecimal, como se muestra a continuación:

 Para vectores de bits:


o B"01111" binario
o O"17" octal
o X"F" hexadecimal

 Para enteros y reales:


o 2#1100# binario M.C. JOSÉ ARMANDO LARA GONZÁLEZ
o 12 decimal
o 16#C# hexadecimal

 Palabras reservadas: También se conocen como palabras claves de VHDL, como en


todo lenguaje de programación tienen un significado especial. Básicamente son las
instrucciones, órdenes y elementos que permiten definir sentencias. En la Tabla 1.1 se
muestran las palabras reservadas para el VHDL’87:

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Tabla 1.1. Palabras reservadas de VHDL
ABS CONFIGURATION INOUT OR THEN
ACCESS CONSTANT IS OTHERS TO
AFTER DISCONNECT LABEL OUT TRANSPORT
ALIAS DOWNTO LIBRARY PACKAGE TYPE
ALL ELSE LINKAGE PORT UNITS
AND ELSIF LOOP PROCEDURE UNTIL
ARCHITECTURE END MAP PROCESS USE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
ARRAY ENTITY MOD RANGE VARIABLE
ASSERT EXIT NAND RECORD WAIT
ATTRIBUTE FILE NEW REGISTER WHEN
BEGIN FOR NEXT REM WHILE
BLOCK FUNCTION NOR REPORT WITH
BODY GENERATE NOT RETURN XOR
BUFFER GENERIC NULL SELECT
BUS GUARDED OF SEVERITY
CASE IF ON SIGNAL
COMPONENT IN OPEN SUBTYPE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 5


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

1.1.2 Operadores y expresiones en VHDL


LosJOSÉ
M.C. operadores
ARMANDOy expresiones en VHDL son muy semejantes a los de otros lenguajes de
LARA GONZÁLEZ
programación, a continuación se exponen brevemente los operadores y expresiones existentes,
así como su empleo.

Operadores Lógicos.
Estos operadores, actúan sobre los datos tipos bit, bit_vector y boolean. En el caso de
utilizar este tipo de operadores en un vector, la operación se realizará bit a bit. Estos operadores
son: AND, OR, NAND, NOR, XOR, XNOR y NOT.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Operadores Aritméticos.
 + indica suma si se encuentra entre dos operandos e indica signo positivo si se encuentra
al inicio de un operando.
 - indica resta si se encuentra entre dos operandos e indica signo negativo si se encuentra
al inicio de un operando.
 M.C.
*
indica
JOSÉmultiplicación
ARMANDO LARA de dos operandos de tipo numérico.
GONZÁLEZ
 / indica división de dos operandos de tipo numérico.
 ** indica exponencial, la base puede ser entero y real, pero el exponente sólo puede ser
real. Ejemplo: 6**3 sería 63.
 ABS() esta función devuelve el valor absoluto de un argumento tipo numérico.
 MOD calcula en módulo de dos números.
 REM calcula el resto de una división entera.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Operadores Relacionales
Este tipo de operadores devuelven siempre un valor booleano (false o true) y los tipos
de datos que pueden manejar son siempre del tipo escalar o matrices.
 ==igualdad
 /= desigualdad
 > mayor que
 M.C.
>= JOSÉ
mayorARMANDO
o igual queLARA GONZÁLEZ
 < menor que
 <= menor o igual que

Tecnológico Nacional de México 6


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Operadores de concatenación
& indica concatenación, concatena matrices de tal forma que la dimensión de la matriz resultante
es la M.C.
sumaJOSÉ ARMANDO
de las LARAde
dimensiones GONZÁLEZ
las matrices sobre las que opera. Ejemplo: dato<=a&b
construye la matriz dato con la matriz a en las primeras posiciones y la matriz b en las ultimas.

Operadores de desplazamiento
Estos operadores fueron integrados apenas en el VHDL’93 ampliando su funcionalidad
para el corrimiento y desplazamiento de datos.
 SLL n (Shift Left Logic) desplazamiento lógico a la izquierda n veces.
 SRL n (Shift Right Logic) desplazamientoM.C. JOSÉaARMANDO
lógico la derecha nLARA GONZÁLEZ
veces.
 SLA n (Shift Left Arithmetic) desplazamiento aritmético a la izquierda n veces.
 SRA n (Shift Right Arithmetic) desplazamiento aritmético a la derecha n veces.
 ROL n (ROtate Left) rotación circular a la izquierda n veces.
 ROR n (ROtate Right) rotación circular a la derecha n veces.

Ejemplos:
Tomemos en consideración el operando A=1100 1101.
A SLL 4 -- El resultado es 1101 0000
M.C.
A SLA 4 --JOSÉ ARMANDO
El resultado LARA1111
es 1101 GONZÁLEZ
(el último bit se replica)
A SRL 4 -- El resultado es 0000 1100
A SRA 4 -- El resultado es 1111 1100 (el bit más significativo se replica)
A ROL 4 -- El resultado es 1101 1100 (los primeros 4 bits pasan a la última posición)
A ROR 4 -- El resultado es 1101 1100 (los últimos 4 bits pasan a las primeras posiciones)

1.2. DECLARACIÓN DE OBJETOS


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Un objeto en VHDL es un elemento que contiene un valor de tipo específico de dato,
existen tres tipos principales de objetos en VHDL que son las variables, las señales y las
constantes. Las variables y constantes de VHDL se parecen mucho a las variables y constantes
de otros lenguajes de programación por ejemplo a lenguaje “C”. Por otro lado, las señales si
tienen un significado especial que lo hace diferente al ser un lenguaje de descripción de
hardware.

1.2.1 Declaración de señales


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Señales
Las señales se declaran igual que las constantes y variables con la diferencia de que las
señales pueden además, ser de varios tipos que son normal, register y bus. Por defecto son de

Tecnológico Nacional de México 7


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

tipo normal. Al igual que en variables y constantes, a las señales se les puede dar un valor inicial
si se quiere o se les puede asignar un valor en cualquier momento de la ejecución del programa.
Ejemplos:
[Link]:
SIGNAL JOSÉ ARMANDO
bit :=LARA
'0';GONZÁLEZ
SIGNAL valores: bit_vector(7 DOWNTO 0) BUS := B"00000000";

Constantes
Una constante como su nombre lo dice, es un elemento al cual se le asigna un valor
determinado y no puede se puede cambiar una vez que ha sido asignado, por lo tanto conservara
su valor durante todo el programa.
Ejemplos:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONSTANT m: real := 3.14159;
CONSTANT espera: time := 10 ns;
CONSTANT maximo: natural;

En esta última sentencia, la constante maximo no tiene ningún valor asociado. Esto se
es posible siempre y cuando el valor sea declarado en algún otro sitio.

Variables
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Las variables funcionan de la misma manera que una constante, con la única diferencia
de que una variable se puede alterar el valor de la misma en cualquier parte del programa. A las
variables también se les puede asignar un valor inicial.

VARIABLE edades: natural := 0;


VARIABLE datos: bit_vector(31 DOWNTO 0);

También se tiene la posibilidad en las variables, de cambiar el nombre de una variable


definida previamente o ponerle nombre a una parte. Esto se realiza mediante la instrucción
M.C. JOSÉ
ALIAS la cual resulta de gran utilidad en muchos [Link] LARA GONZÁLEZ
Ejemplo:

VARIABLE edades: bit_vector(31 DOWNTO 0);


ALIAS datos: bitvector(7 DOWNTO 0) IS edades(31 DOWNTO 24);

1.2.2 Declaración de ficheros


Los ficheros pueden ser de gran ayuda cuando se requiere guardar información o en un
M.C. dado
momento JOSÉleer
ARMANDO LARAAunque
información. GONZÁLEZsolo es válido su uso dentro de la simulación más no
en la síntesis. Tampoco pueden almacenar matrices multidimensionales.
Para declarar un fichero, primeramente se deberá declarar el tipo de datos que contendrá
el archivo, generando la siguiente estructura con el uso de las palabras claves FILE y TYPE.

Tecnológico Nacional de México 8


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

TYPE fichero_tipo IS FILE OF tipo;


FILE nombre:
fichero_tipo IS [modo] "fichero":-- VHDL'87
[fichero_tipo [OPEN modo] IS "fichero"]-- VHDL'93
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Como se muestra en el código anterior, la estructura de los ficheros será diferente,


dependiendo del compilador que se utilice (VHDL'87 ó VHDL'93). Como se puede ver en el
código, la primera línea es igual, mientras que cuando se indicar el acceso al fichero, la sintáxis
difiere de uno a otro compilador. En VHDL'87 el modo puede ser IN (por default) si se va a leer
y OUT para escribir. Por otro lado, en VHDL'93 el modo es definido mediante un tipo
enumerado declarado en la librería correspondiente (file_open_kind), donde se encuentra
write_mode, read_mode (por default) o append_mode, que indica escritura, lectura y
concatenación respectivamente. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

A diferencia que en el anterior, en este caso no es necesario abrirlo obligatoriamente


en el momento en que se declara. Es posible abrir posteriormente el fichero usando las
instrucciones que se muestran a continuación.

PROCEDURE file_open(status: OUT file_open_status;


FILE f: file_type;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ IN string;
external_name:
open_kind: IN file_open_kind:=read_mode);

1.3. DECLARACIONES CONCURRENTES


La estructura general de un programa en VHDL está formada por módulos o unidades
de diseño, cada uno de ellos compuesto por un conjunto de declaraciones e instrucciones que
definen, describen, estructuran, analizan y evalúan el comportamiento
M.C. JOSÉ ARMANDO LARA de un sistema digital.
GONZÁLEZ

Existen cinco tipos de unidades de diseño en VHDL: declaración de entidad (entity


declaration), arquitectura (architecture), configuración (configuration), declaración del paquete
(package declaration) y cuerpo del paquete (package body). Cuando se hace un programa en VHDL,
el uso de tres de los cinco tipos de unidades es opcional, pero dos de ellos (entidad y arquitectura)
son indispensables en la estructuración de un programa. A continuación se explica la forma de
declarar una entidad y la arquitectura de un programa en VHDL.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Cualquiera que sea el tipo de descripción, ya sea comportamental o estructural, es necesario
primero describir el símbolo o entidad del circuito. Esta parte se declara con la palabra clave entity
como se muestra a continuación:

Tecnológico Nacional de México 9


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

entity mux41 is
Port ( a,b,c,d : in STD_LOGIC;
sel : in STD_LOGIC_VECTOR (1 downto 0);
sal: out std_logic);
end mux41;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta descripción mux41 es el nombre que del circuito, ya que se trata de un multiplexor
de cuatro a uno, es decir, el circuito permite la entrada de cuatro señales diferentes (a, b, c y d) las
cuales son tipo bit, por lo que aparecen como STD_LOGIC, pero el circuito permite solo a una entrada
alcanzar la salida (sal), esto dependiendo del valor de otra entrada de selección (sel), la cual consta
de dos bits, por esta razón aparece como STD_LOGIC_VECTOR.

En otras palabras la entidad denominada mux41 representa al circuito multiplexor de 4


a 1 como a una caja negra como se muestra en la Figura 1.1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

b
mux41 sal
c
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
d

sel (1,0)

Figura 1.1.-Entidad del mux41

Una vez que se ha declarado la entidad,M.C.


comoJOSÉ
ya seARMANDO
mencionó,LARA
la otraGONZÁLEZ
parte indispensable
de un programa en VHDL es la arquitectura. En la parte de la arquitectura es donde se describe
el circuito. Esta descripción puede ser estructural o comportamental, aunque estas dos son
muy diferentes, se puede describir un mismo circuito de ambas formas. A continuación se
muestra la descripción comportamental del mux41.

process(a,b,c,d,sel)
begin
case sel is
when "00" => sal <= a;
when "01" => sal <= b;
M.C.
whenJOSÉ ARMANDO
"10" => sal LARA
<= c;GONZÁLEZ
when others => sal <= d;
end case;
end process;
end Behavioral;

Tecnológico Nacional de México 10


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

En el caso del process, lo veremos únicamente en este momento como una subrutina el
cual se ejecuta únicamente cuando cambie algunas de sus variables sensibles. En este caso las
variables sensibles son: a, b, c, d y sel.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El programa básicamente esta compuesto de una función case dentro de un process, el
cual cuando sel es “00” permite a la entrada a alcanzar la salida del circuito, cuando sel es “01”
la salida será igual a la entrada b, cuando la entrada sel sea “10” la salida será igual a la entrada
c y finalmente cuando la entrada sel sea “11” la salida será igual a la entrada d.

Como se puede observar, la descripción comportamental es relativamente fácil de


entender, ya que se escribe de manera muy semejante a cualquier otro lenguaje de programación
M.C. JOSÉ
sin importar los circuitos electrónicos que intervienen enARMANDO LARA GONZÁLEZ
el propio circuito digital. En otras
palabras en este tipo de descripción no se mencionan los circuitos que componen la entidad ni
la forma en que están conectados unos con otros.

1.3.1 Declaración de arquitectura de flujo de datos


En el ejemplo de la descripción anterior, se presentó una descripción puramente
comportamental, es decir se describe el comportamiento, pero esta descripción está muy alejada
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
de lo que es el circuito físico. Si bien es cierto su relativa facilidad de entenderlo, muchas veces
se requiere aprovechar la característica de VHDL en lo que se refiere a la ejecución de
instrucciones en paralelo. Esto es lo que se conoce como descripción concurrente, también
conocida como flujo de datos ó de transferencia entre registros.

En este orden de ideas se puede decir que VHDL tiene la capacidad de describir circuitos
permitiendo la paralelización de las instrucciones. Estas instrucciones o sentencias secuenciales
se encuentran dentro de los llamados process en VHDL. Los process son ejecutados en paralelo
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a otros
componentes. Las estructuras utilizadas para la descripción de flujo de datos serán mostradas y
explicadas a continuación:

Asignación condicional WHEN….ELSE


Es importante, en toda expresión condicional que describa hardware de forma
concurrente, incluir todas las opciones posibles y contemplar todos los casos posibles de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
variación de una variable. Por eso es necesario terminar esta expresión condicional con un
ELSE. Se pueden anidar varias condiciones en una misma asignación.

Tecnológico Nacional de México 11


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

En el siguiente ejemplo, se verifica sí las entradas a y b de un circuito son iguales, en


caso de ser así, a la salida s se le asigna el valor de “1”. Después sí a es mayor que b a la salida
se le asigna el valor de “0” y finalmente en caso de que ninguna de la dos primeras condiciones
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se cumplan, el valor de la salida no importa.

Ejemplo:

s<='1' WHEN a=b ELSE


'0' WHEN a>b ELSE
'X';

Asignación con selección WITH...SELECT...WHEN


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Es una ampliación del condicional y es similar a las construcciones case o switch del
Pascal o C. La asignación se hace según el contenido de cierto objeto o resultado de cierta
expresión. En las siguientes líneas se presenta un ejemplo de la asignación with…selec…when.
Ejemplo:

WITH estado SELECT


semaforo<="rojo" WHEN "01",
"verde" WHEN "10",
"amarillo"
M.C. JOSÉ ARMANDO LARAWHEN "11",
GONZÁLEZ
"no funciona" WHEN OTHERS;

De la misma manera que en la asignación condicional, se debe incluir todos los posibles
valores que pueda tomar la expresión. Por lo tanto, si no se especifican todos los valores en las
cláusulas WHEN entonces hay que incluir la cláusula WHEN OTHERS.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Bloque concurrente BLOCK
Muchas veces se requiere agrupar sentencias de ejecución concurrente en bloques. Estos
bloques son el mecanismo que tiene VHDL para la realización de diseños modulares. Estos
bloques van a permitir además subdividir un mismo programa en una jerarquía de módulos ya
que estos bloques o módulos pueden estar unos dentro de otros.

Estos bloques están definidos dentro de la arquitectura en entornos de ejecución


concurrente y deARMANDO
M.C. JOSÉ alguna manera sonGONZÁLEZ
LARA equivalentes a entidades ya que se les puede definir entradas
y salidas, aunque quizá su uso más normal es el agrupamiento de instrucciones para separar el
diseño en módulos. A continuación la estructura general de la declaración de bloque se muestra:

Tecnológico Nacional de México 12


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

block_id:
BLOCK(expresion de guardia)
cabecera
declaraciones
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BEGIN
sentencias concurrentes
END BLOCK block_id;

El nombre block_id sirve para nombrar a diferentes bloques en un mismo diseño y


su uso es opcional, este ayuda en la depuración, simulación y sobre todo en la legibilidad del
programa. La cabecera puede tener cláusulas de tipo genérico, declaraciones de puertos de
entrada-salida, es decir, es equivalente a la declaración de entidad y su alcance es el del bloque.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El hecho de poder declararse puertos de entrada y salida en un bloque y así conectarlos
con un nivel superior dentro del programa, es especialmente interesante ya que va a permitir el
uso de un bloque, que por ejemplo teníamos en otro diseño e incorporarlo al nuevo sin necesidad
de cambiar todas las señales internas del bloque.

En otras palabras, imaginemos una memoria ROM (Read Only Memory) definida como
bloque conJOSÉ
M.C. entradas direccion
ARMANDO y enable, y salida dato; entonces estas señales se definen
LARA GONZÁLEZ
con PORT como la entidad y la conexión entre estas señales y todo lo de fuera, que vamos a
suponer que son las señales rom_dir, rom_ena y rom_dato, mediante PORT MAP, como
se muestra en el siguiente código:
rom: BLOCK
PORT(direccion: IN bit_vector(15 DOWNTO 0);
enable: IN bit;
dato: OUT bit_vector(7 DOWNTO 0));
PORT MAP(direccion=>rom_dir,enable=>rom_ena,dato=>rom_dato);
BEGIN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
...
...
END BLOCK rom;

En este ejemplo se ha definido una memoria de solo lectura que es capaz de almacenar
65,536 datos de una longitud de un Byte, ya que su bus de direcciones es de 16 bits y el ancho
del bus de datos es de 8 bits.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


1.3.2 Ejemplos de descripción de flujo de datos.
Para ilustrar la descripción de flujo de datos, analizaremos el siguiente ejemplo el cual
consta de un circuito digital detector de números primos de tres bits, es decir el circuito cuenta

Tecnológico Nacional de México 13


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

con tres entradas (a, b y c) y una salida (sal) misma que proveerá un “1” cada vez que en las
entradas este presente un numero primo (2, 3, 5 y 7).

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Para mostrar la descripción de flujo de datos de una forma más clara nos apoyaremos
con el diagrama esquemático del circuito detector de números primos de tres bits que se muestra
en la Figura 1.2.

a
sand1

b sal GONZÁLEZ
M.C. JOSÉ ARMANDO LARA

sand2
c
Figura 1.2.- Circuito detector de números primos

Como se puede apreciar en la Figura 1.2, a las salidas de las compuertas AND se has
[Link]
definido JOSÉ ARMANDO
señales (sand1LARA GONZÁLEZ
y sand2) que servirán de apoyo para llevar a cabo la descripción
del circuito como flujo de datos. En las siguientes líneas se muestra la descripción de flujo de
datos para el circuito detector de números primos de tres bits mostrado en la Figura 1.2.

architecture Behavioral of flujodatos1 is


signal sand1,sand2: std_logic;
begin
sand1 <= b and not a;
sand2 <= a and c;
sal <= sand1 or sand2; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end Behavioral;

En esta descripción se puede destacar que se han definido las señales sand1 y sand2 con
el uso de la palabra clave signal las cuales son de tipo std_logic. Tambien se puede destacar
que todas las instrucciones son concurrentes, es decir se ejecutan cada vez que cambie algunas
de las señales que intervienen en la asignación.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A continuación se presenta otro ejemplo de descripción de flujo de datos, ahora para un
multiplexor de cuatro a uno que se describió en un ejemplo anterior de forma comportamental,
el cual ahora se describirá como flujo de datos.

Tecnológico Nacional de México 14


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

De igual forma que en el ejemplo anterior se tomara en consideración el diagrama


esquemático de dicho multiplexor el cual se muestra en la Figura 1.3. En esta figura, como se
puede apreciar consta de cuatro entradas (a, b, c, y d) y una salida (sal) y cuenta además con
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
otras dos entradas de selección denominadas s0 y s1. De las entradas de selección depende la
salida del multiplexor, ya que cuando s0=s1=0 la salida será igual a la entrada a, cuando s0=s1=1
la salida será igual a la entrada d, cuando s0=0 y s1=1 la salida será igual a la entrada b y
finamente cuando s0=1 y s1=0 la salida será igual a la entrada c.

a sa

b
sbJOSÉ ARMANDO LARA GONZÁLEZ
M.C.
sal
c sc

d
sd

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


s1 s0
Figura 1.3.- Multiplexor de cuatro a uno

En las siguientes líneas se muestra la descripción de flujo de datos para el circuito


multiplexor de cuatro a uno mostrado en la Figura 1.3.
architecture Behavioral of flujodatos is
signal sa,sb,sc,sd: std_logic;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
begin
sa <= a and not s1 and not s0;
sb <= b and not s1 and not s0;
sc <= c and s1 and not s0;
sd <= d and s1 and s0;
sal <= sa or sb or sc or sd;
end Behavioral;

En esta descripción se hace uso de señales las cuales se han definido como sa, sb, sc y
M.C.
sd, que JOSÉ
son las ARMANDO LARA de
señales de salida GONZÁLEZ
las compuertas AND del circuito de la Figura 1.3. Estas
señales han sido declaradas con la instrucción signal antes de bigin y dentro de la arquitectura.
De igual manera que en el ejemplo anterior, las instrucciones escritas en la descripción son
concurrentes.

Tecnológico Nacional de México 15


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

1.4. EJEMPLOS DE DECLARACIONES SECUENCIALES


Un sistema secuencial está formado por un circuito combinacional y un elemento de
[Link]
memoria JOSÉ ARMANDO LARA GONZÁLEZ
de almacenar de forma temporal las salidas anteriores del sistema. En
esencia, las salidas de un sistema secuencial no sólo dependen del valor presente de las entradas,
sino también de las salidas anteriores del sistema, como se ilustra de manera gráfica en el
diagrama de bloques de la Figura 1.4.

ENTRADAS CIRCUITO SALIDAS


COMBINACIONAL

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


MEMORIA

SALIDAS
ANTERIORES

Figura 1.4.- Estructura de un circuito secuencial.

Los sistemas secuenciales síncronos y los sistemas secuenciales asíncronos son los dos
tipos de sistemas secuenciales que existen básicamente. El comportamiento de los primeros se
M.C. sincronizado
encuentra JOSÉ ARMANDO LARA el
mediante GONZÁLEZ
pulso de reloj del sistema, mientras que el funcionamiento
de los sistemas asíncronos depende del orden y momento en el cual se aplican sus señales de
entrada, por lo que no requieren un pulso de reloj para sincronizar su funcionamiento.

En el diseño de sistemas secuenciales, tanto síncronos como asíncronos el elemento más


empleado es el flip-flop o celda binaria. La característica principal de un flip-flop es mantener
o almacenar un bit de manera indefinida hasta que a través de un pulso o una señal cambie de
estado. Los flip-flops más conocidos son los tipos SR, JK, T y D.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Ejemplo de un Flip-Flop tipo D


En la Figura 1.5 se muestra el símbolo del flip-flop tipo D, el cual será descrito en VHDL.

SET
D Q

CKL
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CLR Q
Figura 1.5.- Símbolo del flip-flop tipo D.

Tecnológico Nacional de México 16


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Por otro lado en el siguiente listado se muestra la declaración secuencial de del flip-flop
de la Figura 1.5.
M.C. JOSÉ ARMANDO
entity LARA
ffd is port ( GONZÁLEZ
D,clk: in std_logic;
Q: out std_logic);
end ffd;

architecture secuencial of ffd is


begin
process (clk) begin
if (clk'event and clk='0') then
Q <= D;
end if ;
end process ; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end secuencial;

Dentro de la entidad de esta declaración se ha agregado la entrada D, la entrada clk y la


salida Q, todas estas definidas como std_logic. Dentro de la arquitectura secuencial se incluye
un process, donde se tiene una variable sensible (clk), de tal manera que cuando exista un flanco
de transición negativa en el pulso de reloj, la salida Q asumirá el valor de D, como se muestra
en la descripción anterior.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Ejemplo de un Flip-Flop tipo RS

El flip-flop RS asíncrono es un dispositivo que no opera en conjunción con un reloj o


dispositivo de temporización. El flip-flop RS síncrono opera en conjunción con un reloj, en otras
palabras opera sincronizadamente. Su símbolo lógico se muestra en la Figura 1.6. Este símbolo
es igual a un flip-flop RS asíncrono, añadiéndole una entrada de reloj. De tal suerte que las
salidas del flip-flop solo podrán cambiar cuando exista un flanco de transición negativa o
positiva en el pulso de reloj. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

SET
S Q

CKL

R CLR Q
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 1.6.- Símbolo del flip-flop tipo RS.

Tecnológico Nacional de México 17


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Para ilustrar la manera de describir un flip-flop RS, en el siguiente listado se muestra la


declaración secuencial de del flip-flop de la Figura 1.6.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity FLIPFLOPRS is
Port ( r : in STD_LOGIC;
s : in STD_LOGIC;
clk : in STD_LOGIC;
q : inout STD_LOGIC;
qn : inout STD_LOGIC);
end FLIPFLOPRS;

architecture Behavioral of FLIPFLOPRS is


begin
process (clk, s, r) M.C. JOSÉ ARMANDO LARA GONZÁLEZ
begin
if (clk'event and clk = '0') then
if (s = '0' and r = '1') then
q <= '0';
qn <= '1' ;
elsif (s = '1' and r = '0') then
q <= '1';
qn <= '0';
elsif (s = '0' and r = '0') then
q <= q;
M.C. JOSÉqnARMANDO
<= qn; LARA GONZÁLEZ
else
q <= '-';
qn <= '-';
end if;
end if;
end process;
end Behavioral;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En esta descripción se han declarado las entradas s, r y clk, mismas que corresponden a
las entradas del flip-flop set, reset y pulsos de reloj respectivamente. Estas entradas son tipo
std_logic. De igual manera se han declarado dentro de la identidad, las dos salidas del flip-flop
q y qn mismas que corresponden a las salidas Q y 𝑸 ̅ , respectivamente.

Dentro de la arquitectura del programa, se verifica primeramente si existe un flanco de


transición negativa en el pulso de reloj (clk), en caso de que no se cumpla esta condición no
hace nada y en caso de que si se cumpla, se inicia la verificación de los valores de r y s para
elegirM.C.
que JOSÉ
datos ARMANDO LARA
sacar a través GONZÁLEZ
de las salidas q y qn. Para elaborar esta descripción en necesario
cumplir los cuatro posibles estados de las entradas de acuerdo con la tabla de verdad del flip-
flop.

Tecnológico Nacional de México 18


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

1.4.1 Ejemplos de diagramas de máquinas de estado.


Una máquina de estado finita o también conocida como FSM por sus siglas en inglés
(finiteM.C.
stateJOSÉ ARMANDO
machine) LARA un
representa GONZÁLEZ
sistema como un conjunto de estados, transiciones entre
estos estados, que dependen de las entradas, conjuntamente con las salidas y las entradas
asociadas. De modo tal que una máquina de estado es una representación, de un circuito
SECUENCIAL particular.

Las máquinas de estado pueden ser:

SÍNCRONAS: Son aquellas que necesitan de la intervención de un pulso de reloj. Si la entrada


participa también en la salida se denomina Máquina de estado de Mealy, y si no participa se
denomina de Moore.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
ASÍNCRONAS: Son aquellas que no necesitan de la intervención de un pulso de reloj. Estos
circuitos evolucionan cuando cambian las entradas que intervienen en dicho circuito.

Las MSF no son diagramas de flujo y no deben confundirse con los mismos. En una
MSF las acciones se asocian con las flechas (transiciones), mientras que un Diagrama de Flujo
las acciones se asocian a los vértices de la flecha o a los bloques de proceso. Cuando una MSF
se encuentra en uno de sus estados, básicamente se encuentra "en reposo" esperando a que
sucedaM.C.
unJOSÉ ARMANDO
evento, mientrasLARA
que GONZÁLEZ
en un Diagrama de Flujo el sistema se encuentra activo
realizando una tarea. En las siguientes páginas se describen dos ejemplos de Diagramas de
Máquinas de Estado.

Ejemplo 1.- Diagrama de Máquina de Estado tipo Moore


El presente ejemplo se trata del diagrama de una máquina de estado tipo Moore que
realiza la función de un elevador. Para esto se M.C. JOSÉelARMANDO
propone LARA
diagrama de GONZÁLEZ
estados de la Figura 1.7,
el cual consta de tres estados s0, s1, y s2, una salida Z y una entrada externa W, como se puede
observar en el diagrama.

En esta FSM los estados s0, s1 y s2, aparecen como nodos en el diagrama. El nodo s0
representa el estado inicial y también el estado en el que entrará el circuito después que se
aplique una entrada W=0. En este estado la salida Z debe ser 0, lo cual se indica como s0/Z=0
en el nodo. El circuito debe permanecer en el estado s0 siempre que W=0, lo que se indica por
medioM.C.
de un
JOSÉarco con una etiqueta
ARMANDO W=0 que se origina y termina en este nodo. La primera
LARA GONZÁLEZ
ocurrencia de W=1 (después de la condición W=0) se registra al pasar del estado s0 al estado
s1.

Tecnológico Nacional de México 19


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

reset W=1

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


W=0
s0/Z=0 s1/Z=0
W=0

W=0 W=1
s2/Z=1

W=1

Figura 1.7.- Diagrama de estados de JOSÉ


M.C. una máquina
ARMANDOtipo Moore.
LARA GONZÁLEZ

Esta transición del estado s0 al estado s1, se indica en la gráfica por medio de un arco
que se origina en s0 y termina en s1. La etiqueta W=1 en este arco denota el valor de entrada
que ocasiona la transición. En el estado s1 la salida permanece en un valor de 0, lo cual se indica
como s1/Z=0 en el nodo.

Cuando
M.C. JOSÉ el circuito seLARA
ARMANDO hallaGONZÁLEZ
en el estado s1, cambiara al estado s2 si W aún es igual a 1
en el siguiente flanco activo del reloj. En el estado s2 la salida Z se vuelve igual a 1. Si W
permanece en 1 durante los ciclos subsiguientes del reloj, el circuito permanecerá en el estado
s2 manteniendo Z=1. No obstante, si W se vuelve 0 cuando el circuito esta ya sea en el estado
s1 ó en el estado s2, el siguiente flanco activo del reloj producirá una transición al estado s0.

En el diagrama se indica que la entrada reset se utiliza para forzar el circuito a entrar en
el estado s0, lo cual es posible independientemente del estado en el que se encuentre el circuito.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En la Tabla 1.2 se muestra la tabla de estados de la máquina de estados de la Figura 1.7,
en la cual se incluyen los estados iniciales, la variable externa, los estados finales y las salidas.

Tabla 1.2.- Tabla de estados de la MSF tipo Moore


ESTADO ESTADO SALIDA
ACTUAL PRÓXIMO Z
W=0 W=1
M.C. JOSÉ ARMANDO LARAs0 GONZÁLEZ s0 s1 0
s1 s0 s2 0
s2 s2 s0 1

Tecnológico Nacional de México 20


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Ejemplo 2.- Diagrama de Máquina de Estado tipo Mealy


El primer paso en el diseño de una máquina de estado finito consiste en determinar
M.C.
cuántos JOSÉ ARMANDO
estados se necesitanLARA GONZÁLEZ
y cuales transiciones son posibles de un estado a otro. No hay un
procedimiento determinado para esta tarea. El diseñador debe pensar detenidamente en lo que
la máquina de estado debe hacer.

En este segundo ejemplo se trata de implementar una máquina de estado finita tipo
Mealy, la cual como se puede ver en la Figura 1.8, cuenta con cuatro estados, siendo estos S0,
S1, S2 y S3, donde el estado S0 será el estado inicial cuando la máquina sea puesta a cero.
También la máquina de estados cuenta con una entrada externa x y una salida s.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

S1

x=0/s=1 1 x=1/s=0
=

x=
/s

0/
1
x=

s=
1
RESET
S0 S3
x=0/s=0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
x=0/s=0
x=1/s=0

S2
x=1/s=1

Figura 1.8.- Diagrama de una máquina de estados tipo Mealy.

La forma de explicar este diagrama deM.C.


estados
JOSÉ es relativamente
ARMANDO LARAsimple, ya que se ha
GONZÁLEZ
planteado una máquina de estado de cuatro estados, que cuando se encuentre en el estado S0, sí
la entrada externa x=1, la maquina deberá permanecer en el mismo estado produciendo una
salida s=0. En el caso de que x=0, la máquina pasará al estado S1, produciendo una salida s=1.

Por otro lado si la FSM se encuentra en el estado S1, sí x=0 pasará al estado S3,
provocando una salida de s=1, en caso de que la entrada sea x=1, la máquina pasará al estado
S0, produciendo una señal de salida s=1.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Bajo este mismo orden de ideas, cuando la máquina de estados se encuentra en el estado
S2 y la entrada externa es x=0, pasará al estado S1 y producirá una salida s=0, pero si x=1, se
quedará en el mismo estado S2 provocando una salida de s=1.

Tecnológico Nacional de México 21


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Finalmente, cuando la máquina de estados se encuentra en el estado S3 y la entrada


externa es x=0, pasará al estado S2 y producirá una salida s=0, pero si x=1, pasará al estado S1
provocando una salida de s=0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez que se tiene el diagrama de estados, se procede a la implementación de la Tabla


de Estados. Con esta tabla de estados es posible continuar con la implementación de un circuito
electrónico digital ya sea con Flips-Flops o a través de un lenguaje de descripción de hardware.

En la Tabla 1.3 se muestra la tabla de estados de la máquina de estados de la Figura 1.8,


en la cual se incluyen los estados iniciales, la variable externa, los estados finales y las salidas.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Tabla 1.3.- Tabla de estados de la MSF tipo Mealy
ESTADO ENTRADAS SALIDAS
x=0 x=1 x=0 x=1
S0 S1 S0 1 0
S1 S3 S0 1 1
S2 S1 S2 0 1
S3 S2 S1 0 0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


1.5. FUNCIONES Y SUBPROGRAMAS.
Cuando los desarrollos en VHDL son demasiado grandes, es decir se maneja una gran
cantidad de código, es necesario contar con una estructura que permita al diseñador trabajar con
grandes cantidades de información. En el presente capitulo, ya se han visto los BLOQUES,
como una manera de estructurar una descripción en forma modular permitiendo establecer una
jerarquía. Hay otras formas de organizar la información y es la introducción de funciones y
procedimientos, que llamaremos subprogramas, estos subprogramas permitirán a cualquier
programador entender un programa. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Por otro lado, y a un nivel más elevado, se pueden agrupar subprogramas, definiciones
de tipos, bloques, entre otros, en estructuras por encima de la propia descripción, esto es lo que
formaría los paquetes que a su vez, junto con otros elementos de configuración, formarían las
librerías.

1.5.1.M.C. JOSÉ ARMANDO


Declaración LARA GONZÁLEZ
de procedimientos y funciones.

En la Tabla 1.4 se muestra la estructura para los procedimientos y las funciones las que
serán explicadas más ampliamente más adelante

Tecnológico Nacional de México 22


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Tabla 1.4.- Estructura de procedimientos y funciones


PROCEDIMIENTOS FUNCIONES
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PROCEDURE nombre(parámetros)IS FUNCTION nombre(parámetros)RETURN tipo IS
declaraciones declaraciones
BEGIN BEGIN
instrucciones instrucciones -- incluye RETURN
END nombre; END nombre;

Tanto en las funciones como en los procedimientos la lista de parámetros es opcional y


si no hay parámetros tampoco es necesario usar los paréntesis. Su significado es el mismo en
procedimientos que en funciones. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Esta lista no es más que el conjunto de parámetros que se le pasan al subprograma y se


declaran de forma muy parecida a como se declaraban los puertos en una entidad, primero se
pone el tipo de objeto que es, es decir, una señal, una variable o una constante, a continuación
se pone el nombre del objeto y después dos puntos seguidos por el tipo de puerto, que sería IN,
OUT o INOUT.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Al igual que en la entidad, el tipo IN solo se puede leer, el tipo OUT solo se puede
escribir y el tipo INOUT se puede escribir y leer. Finalmente se pone el tipo de objeto que es.

Muchas cosas se pueden pasar por alto en la declaración de los parámetros. Por ejemplo
si el puerto es de tipo IN entonces no hace falta poner la palabra CONSTANT adelante puesto
que se sobreentenderá que es una constante, de hecho, y si no se pone nada más, se entenderá
que los objetos son de tipo IN. Para el resto de tipos, y si no se especifica otra cosa, se entenderá
que son de tipo VARIABLE. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En los procedimientos se pueden utilizar los tres tipos de objetos (constantes, variables
y señales), y los tres tipos de puerto (IN, OUT e INOUT). Sin embargo, en las funciones solo
se admiten los objetos de clase constante o señal y como tipo de puerto solo se admite el IN ya
que los parámetros no pueden ser modificados en una función.

Dentro de una función, no está permitido el uso de variables, puesto que la clase
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
constante ya juega el mismo papel. No es aconsejable el uso de señales como parámetros puesto
que pueden llevar a confusión dada la especial forma en que estos objetos se asignan, sin
embargo su uso es posible y hay que tener especial cuidado en el uso de los atributos ya que

Tecnológico Nacional de México 23


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

algunos atributos no están permitidos en el interior de funciones; este es precisamente el caso


de 'STABLE, 'QUIET, 'TRANSACTION y 'DELAYED.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Es importante destacar que en el caso de las funciones se debe especificar, además, el
tipo del objeto que esta devuelve. Como las funciones siempre devuelven algo, esto implica
además, que debe existir una instrucción RETURN en el interior del cuerpo de la función y
además esta instrucción debe estar seguida por una expresión que es precisamente lo que se
devuelve.

Para el caso de la instrucción RETURN, su uso en procedimientos es posible pero no


debe llevar una expresión puesto que los procedimientos no devuelven nada. Si se usa en
M.C. JOSÉ
procedimientos simplemente interrumpe la ejecución ARMANDO LARA
del procedimiento GONZÁLEZ
y vuelve.

Por otro lado las declaraciones dentro de una función o procedimiento pueden incluir las
mismas que incluiría un PROCESS ya que se trata también de bloques de ejecución serie. Por
lo tanto, y al igual que sucede en un proceso, no se pueden declarar señales en una función o
procedimiento. Como es de obviar, todo lo que se declara en esta parte sólo es visible en el
cuerpo de la función.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


La ejecución dentro de los subprogramas es siempre en serie como en un proceso, pero
de todas formas estos pueden ser llamados tanto en entornos serie como en entornos
concurrentes. En el caso de ser invocados en entornos concurrentes, los subprogramas se
ejecutan igual que un proceso cuya lista sensible estuviera compuesta por aquellos argumentos
del subprograma que fueran de tipo IN o INOUT.

Si no existen argumentos en el procedimiento y la llamada se produce en un entorno


concurrente, será necesario incluir una sentencia [Link]É ARMANDO
espera (WAIT) LARA
dentroGONZÁLEZ
del procedimiento,
de lo contrario se entraría en un ciclo infinito.

Quizás en algunas ocasiones resulte útil declarar la función antes de especificar su cuerpo
por motivos de visibilidad, por ejemplo. En estos casos la declaración se hace igual como se ha
visto pero al llegar a la palabra IS, se pone un punto y coma y se termina la declaración.

Es decir:
M.C. JOSÉ
PROCEDURE ARMANDO LARA GONZÁLEZ
nombre(parametros);
FUNCTION nombre(parametros) RETURN tipo;

Tecnológico Nacional de México 24


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

A continuación se presenta un ejemplo donde se define un procedimiento que calcula los


valores máximo y mínimo de los números contenidos en una matriz cuyo rango ha sido definido
en algún sitio como tipo matriz.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

--mas corto: PROCEDURE extremos(conjunto: matriz; min,max:INOUT integer)IS


PROCEDURE extremos(CONSTANT conjunto:IN matriz; VARIABLE min,max:OUT
integer)IS
VARIABLE ind: integer;
BEGIN
min:=conjunto(conjunto'left); -- valores iniciales de min y max
max:=conjunto(conjunto'right);
FOR ind IN conjunto'range LOOP
IF min>conjunto(ind) THEN min:=conjunto(ind); END IF;
M.C. JOSÉ ARMANDO
IF max<conjunto(ind) THEN max:=conjunto(ind); LARA GONZÁLEZ
END IF;
END LOOP;
END extremos;

Como se puede observar en el listado anterior, se muestra el encabezamiento completo


y comentado, otro encabezamiento que también es válido por tomar los valores por defecto. El
funcionamiento es muy simple. Por un lado utiliza la variable de entrada conjunto y no la
modifica puesto que es de entrada. Como devuelve dos resultados, min y max, no se puede
utilizar una función ya que esta sólo puede devolver un resultado, por lo que se debe utilizar un
M.C. JOSÉde
procedimiento ARMANDO
manera queLARA
se leGONZÁLEZ
pasen dos parámetros que se puedan modificar.

1.5.2. Subprogramas.
Un subprograma no es más que una función o procedimiento que contiene una porción
de código. De igual forma que ocurre en la mayoría de los lenguajes de programación, también
el VHDL se puede estructurar mediante el uso de subprogramas.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Resulta bastante simple la forma de invocar un subprograma, se pone el nombre seguido
por los argumentos entre paréntesis, en caso de que tenga argumentos, y eso es todo. A las
funciones sólo se les puede invocar como parte de una expresión, mientras que los
procedimientos se ejecutan como si fueran una sentencia, secuencial o concurrente.

Existen tres formas de pasar parámetros a un subprograma. La primera es poniendo los


parámetros en el mismo orden en que se declaran. Esta es la forma normal en que suelen
M.C. JOSÉ
funcionar ARMANDO
los lenguajes de LARA GONZÁLEZ
programación, pero VHDL permite dos más: una es mediante la
asociación explicita, que permite poner los parámetros en cualquier orden, y la otra permite
dejarse parámetros por especificar de manera que se cogen unos valores por defecto.

Tecnológico Nacional de México 25


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Diferentes posibles llamadas al procedimiento del ejemplo anterior, junto con otro
procedimiento que no tiene parámetros, sería:
M.C. JOSÉ ARMANDOTO
extremos(conj(4 LARA GONZÁLEZ
20),valmin,valmax);
reset; -- llamada a un procedimiento sin argumentos
extremos(min=>valmin,max=>valmax,conjunto=>conj(4 TO 20));

Los procedimientos se pueden llamar, bien desde entornos concurrentes o bien desde
entornos secuenciales. Llamar a un procedimiento desde un entorno secuencial es bien simple,
se llama como se ha visto anteriormente y ya está. Sólo hay que tener cuidado de no incluir
ninguna instrucción WAIT si es que en el proceso que llamó al procedimiento existe una lista
sensible.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

También es posible la ejecución de un procedimiento en entornos concurrentes. En este


sentido, un procedimiento se comporta exactamente igual que un bloque PROCESS de manera
que la ejecución externamente es concurrente, pero internamente la ejecución es en serie. Como
en el PROCESS es necesario incluir algo que permita suspender la ejecución del procedimiento,
de otra manera se ejecutaría indefinidamente. Por defecto se consideran todos los argumentos
de tipo IN o INOUT que se le pasan al procedimiento como la lista sensible. Si no hay
argumentos de este tipo, o sencillamente no hay argumentos, entonces el procedimiento debe
incluirM.C. JOSÉ ARMANDO
al menos LARA
una sentencia GONZÁLEZ
de espera WAIT.

1.5.3. Paquetes.
Un paquete consta de un conjunto de subprogramas, constantes, declaraciones, entre
otros, con la intención de implementar algún servicio. De esta manera se pueden hacer visibles
las interfaces de los subprogramas y ocultar su descripción.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Para definir los paquetes, estos se separan en dos zonas: declaraciones y cuerpo, aunque
esta última puede ser eliminada si no se definen funciones y/o procedimientos. En el siguiente
listado se muestra la estructura de un paquete.

-- Declaración de paquete
PACKAGE nombre IS
declaraciones
END [PACKAGE] [nombre];

-- Declaración del cuerpo


M.C. JOSÉ ARMANDO
PACKAGE LARA
BODY nombre IS GONZÁLEZ
declaraciones
subprogramas
...
END [PACKAGE BODY] [nombre];

Tecnológico Nacional de México 26


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Naturalmente el nombre del PACKAGE y del PACKAGE BODY debe coincidir. A


continuación se muestra un ejemplo de este tipo de declaraciones, donde al principio se declaran
unos tipos y cabeceras de función y a continuación se definen las funciones en un PACKAGE
BODY:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PACKAGE tipos_mios IS
SUBTYPE direcc IS bit_vector(23 DOWNTO 1);
SUBTYPE dato IS bit_vector(15 DOWNTO 0);
CONSTANT inicio: direcc; -- Habra que definirlo en el BODY
FUNCTION datotoint(valor: dato) RETURN integer;
FUNCTION inttodato(valor: integer) RETURN dato;
END tipos_mios;

Como las constantes y las funciones no han sido


M.C. definidas
JOSÉ ARMANDOse debe hacer
LARA esto en el cuerpo
GONZÁLEZ
del paquete, como se muestra en el siguiente listado.

PACKAGE BODY tipos_mios IS


CONSTANT inicio: direcc:=X"FFFF00";
FUNCTION datotoint(valor: dato) RETURN integer IS
--el cuerpo de la funcion datotoint
END datotoint;
FUNCTION inttodato(valor: integer) RETURN dato IS
--el cuerpo de la funcion inttodat
END inttodato;
M.C.
ENDJOSÉ ARMANDO LARA GONZÁLEZ
tipos_mios;

Ya habiendo declarado los paquetes de esta forma, los elementos de los que está
compuesto, se les referencia con el nombre del paquete y del elemento, separados por un punto.
Por ejemplo, para hacer visibles la constante o los tipos del ejemplo anterior se haría
simplemente:

VARIABLE pc: tipos_mios.direcc;


pila:=tipos_mios.inicio+X"FF"; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
desp:=tipos_mios.datotoint(registro);

Aunque esto era una forma posible de referenciar los elementos de un paquete, no es la
forma usual de referenciarlos. Se suele hacer visible el paquete de manera que se puedan
referenciar algunos o todos sus elementos sin necesidad del punto. Los elementos de un paquete
se pueden hacer visibles para el fichero de diseño actual mediante el comando USE tal y como
se había mostrado anteriormente. De esta manera, el ejemplo anterior se puede simplificar
empleando un USE en la cabecera del programa:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
USE tipos_mios.ALL
VARIABLE pc: direcc;
pila:=inicio+X"FF";
desp:=datotoint(registro);

Tecnológico Nacional de México 27


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

1.5.4 Bibliotecas
Hasta ahora se han visto varios elementos del lenguaje, como pueden ser las entidades,
M.C. JOSÉ ARMANDO
las arquitecturas, LARAentre
los paquetes, GONZÁLEZ
otros. Cuando se realiza una descripción en VHDL se
utilizan estas unidades, en uno o más ficheros, éstos se denominan ficheros de diseño.

Posteriormente, estos ficheros serán compilados para obtener una librería o biblioteca
de diseño, de forma que esta biblioteca contiene los elementos que componen el circuito. La
biblioteca donde se guardan los resultados de la compilación se denomina work.

Una librería se compone de dos partes bien diferenciadas, dependiendo de las unidades
que la formen. Por un lado, están las unidadesM.C. JOSÉ ARMANDO
primarias, LARA GONZÁLEZ
que corresponderán a entidades,
paquetes y archivos de configuración. Mientras que las unidades secundarias serán
arquitecturas y cuerpos de paquetes. Por lo tanto, se puede sacar la conclusión de que cada
unidad secundaria deberá estar asociada con una unidad primaria.

Al realizar una compilación se analizarán las unidades que vayan apareciendo en el texto.
Por consiguiente, es importante establecer un orden lógico de las distintas unidades, para que
de esta forma se puedan cumplir las dependencias existentes entre las mismas. La forma que
toma M.C. JOSÉ ARMANDO
la librería una vez LARA GONZÁLEZ
compilada es muy diversa; dependiendo de la herramienta de
compilación utilizada así será el resultado obtenido, esto se debe a que en VHDL no existe un
estándar para crear bibliotecas.

Para incluir una librería a un diseño basta con utilizar la palabra reservada LIBRARY
seguida del nombre de la biblioteca a utilizar. Además, también es posible hacer visibles
elementos internos de estas bibliotecas con el uso de la sentencia USE. En el caso de querer
hacer visible todos los elementos de un paquete se puede utilizar la palabra reservada ALL,
como se muestra en el siguiente listado. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

LIBRARY mis_componentes;
USE mis_componentes.[Link];

En VHDL hay dos librerías que no hacen falta importarlas. Por un lado está la librería
work, que contiene las unidades que se están compilando, y por otro lado, la librería std que
contiene los paquetes standard y textio, las cuales contienen definiciones de tipos y funciones
para el acceso a ficheros de texto.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una de las bibliotecas más utilizadas en el mundo de la industria es la denominada IEEE,


la cual contiene algunos tipos y funciones que completan a las que vienen por defecto en el

Tecnológico Nacional de México 28


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

propio lenguaje. Dentro de la librería existe un paquete denominado std_logic_1164, con el cual
se pueden trabajar con un sistema de nueve niveles lógicos, como puede ser: valor desconocido,
alta impedancia, entre otros. En el siguiente código se muestra parte de este paquete:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

PACKAGE std_logic_1164 IS
TYPE std_ulogic IS('U', -- Indefinido
'X', -- Desconocido
'0', -- 0
'1', -- 1
'Z', -- Alta impedancia
'W', -- Desconocido
'L', -- LOW (weak low o 0 débil)
'H', -- HIGH (weak high o 1 débil)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
'-' -- Desconocido
);
TYPE std_ulogic_vector IS ARRAY(NATURAL RANGE <>) OF std_ulogic;
FUNCTION resolved(s : std_ulogic_vector) RETURN std_ulogic;
SUBTYPE std_logic IS resolved std_ulogic;
TYPE std_logic_vector IS ARRAY (NATURAL RANGE <>) OF std_logic;

Al ser la librería IEEE la librería más empleada en la industria, se hará uso de aquí en
delante de forma indistinta estos tipos y los definidos en la librería std. En todos los ejemplos
M.C. JOSÉ
que siguen ARMANDO
se supondrá por LARA GONZÁLEZ
tanto que la librería IEEE ha sido cargada y que los paquetes std
logic 1164 y std logic 1164 ext son visibles.

1.6. PROGRAMACIÓN DE FPGA’s ó CPLD’s EN DIFERENTES APLICACIONES.


En esta sección se realizará el diseño de circuitos combinacionales y secuenciales a
través de VHDL con la finalidad de programar una FPGA. La herramienta de software utilizada
será el programa ISE Desing Suite donde se editarán, sintetizarán y depurarán los programas
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
desarrollados en esta sección.

ISE (Integrated Synthesis Environment) es una herramienta de software producida por


Xilinx para la síntesis y análisis de diseños de HDL (Lenguajes de descripción de hardware),
permitiendo al desarrollador sintetizar ("compilar") sus diseños, realizar análisis de tiempo,
examinar diagramas RTL, simular la reacción de un diseño a diferentes estímulos y configurar
el dispositivo de destino con el programador.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Xilinx ISE es un entorno de diseño para productos FPGA de Xilinx y está estrechamente
acoplado a la arquitectura de dichos chips y no puede utilizarse con productos FPGA de otros
proveedores.

Tecnológico Nacional de México 29


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

El ISE de Xilinx se utiliza principalmente para la síntesis y el diseño del circuito,


mientras que el ISIM o el simulador de la lógica de ModelSim se utiliza para las pruebas del
sistema-nivel.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En conjunto con el mencionado software, se utilizará una tarjeta de desarrollo que


contiene una memoria ROM y una FPGA, dicha tarjeta, será la Digilent Basys2 Spartan-3E
FPGA Board. Esta tarjeta de evaluación permite ganar experiencia en la construcción de
circuitos digitales reales y probar su funcionamiento real a través de este hardware, ya que
cuenta con entradas y salidas diseñadas para tal caso.

La Digilent Basys2 Spartan-3E FPGA Board, M.C. JOSÉ ARMANDO


cuenta LARA GONZÁLEZ
con 8 switches deslizables como
entradas, o LED´s como salidas, 4 push-bottons como entradas y 4 displays de 7 segmentos
como salidas, 1 puerto USB para la programación de la ROM o la FPGA, memoria ROM tipo
flash, una fuente de reloj configurable a 25, 50 y 100 Mhz, 4 cabezales de 6 pines para expansión
configurables como estradas o salidas, un puerto VGA de 8 bits y un puerto serial. En la Figura
1.9 se muestra un diagrama a bloques de la tarjeta de evaluación mencionada.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 1.9.- Diagrama de bloques de la tarjeta Basys2 Spartan-3E

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En las siguientes líneas se muestran ejemplos para simulación, síntesis y programación de la
FPGA.

Tecnológico Nacional de México 30


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Ejemplo 1.
En este ejemplo se trata de construir un circuito digital comparador de dos señales tipo
[Link]
bus, con JOSÉde
ARMANDO LARA
tres bits cada GONZÁLEZ
una. El circuito deberá tener tres salidas tipo bit donde se podrá
conectar un LED en cada una de ellas para verificar la funcionalidad del circuito.

La primera señal de salida se activará cuando el dato presente en la entrada p sea igual a
q, la segunda salida se activara cuando la entrada p sea mayor que la entrada q y finalmente la
tercera salida se activara cuando p sea menor que q. En la Figura 1.10 se muestra un diagrama
de bloques del circuito comparador que se desea construir.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


p(2:0) p=q
COMPARADOR p>q
q(2:0) p<q

Figura 1.10.- Diagrama de bloques del comparador

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En el siguiente listado se muestra la manera de como editar el programa en VHDL para
realizar el comparador de dos entradas de tres bits.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity COMPATRES is
Port ( p : in STD_LOGIC_VECTOR (2 downto 0);
q : in STD_LOGIC_VECTOR (2 downto 0);
pigualq : out STD_LOGIC;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
pmayorq : out STD_LOGIC;
pmenorq : out STD_LOGIC);
end COMPATRES;

architecture Behavioral of COMPATRES is


begin

process(q,p)
begin
if p>q then
pigualq <= '0';
M.C. JOSÉpmayorq
ARMANDO<= '1';
LARA GONZÁLEZ
pmenorq <= '0';

elsif p<q then


pigualq <= '0';
pmayorq <= '0';

Tecnológico Nacional de México 31


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

pmenorq <= '1';

else
pigualq <= '1';
M.C. JOSÉpmayorq
ARMANDO<= '0';
LARA GONZÁLEZ
pmenorq <= '0';
end if;
end process;
end Behavioral;

Como se puede apreciar en el listado anterior, dentro de la entidad se han definido las
dos entradas del circuito p y q tipo STD_LOGIC_VECTOR (2 downto 0) y las tres salidas
pigualq, pmayorq y pmenorq tipo STD_LOGIC para cumplir con el diseño.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Dentro de la architecture Behavioral, se hace uso de un if para verificar si p es
mayor que q y de esta manera en caso de cumplirse la condición solo activar la salida
correspondiente, lo mismo se hace en la comparación elsif y else.

Ejemplo 2.
M.C.
En JOSÉ ARMANDO
este ejemplo LARAdeGONZÁLEZ
se trata construir un circuito digital multiplexor de 4 a 1, de igual
forma que en el ejemplo anterior, nos apoyaremos con el diagrama de bloques de dicho
multiplexor el cual se muestra en la Figura 1.11, como una caja negra, donde no sabemos que
es lo que tiene adentro. En este diagrama se puede apreciar en consta de cinco entradas (a, b, c,
y d) y sel(1:0) y una sola salida (sal).

a
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
b
MUX 4-1 sal
c

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


sel(1:0)
Figura 1.11.- Multiplexor de cuatro a uno

Tecnológico Nacional de México 32


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

En el siguiente listado se muestra la forma de editar el código para resolver este ejemplo
del multiplexor de cuatro entradas, es conveniente recordar que este circuito acepta cuatro
entradas, pero permite solo a una de ellas alcanzar la salida.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En el listado se puede ver como dentro de la entidad se han definido las entradas a, b, c
y d, como std_logic, así mismo sal se ha definido como salida std_logic ya que es de tipo bit.
También se ha definido sel como entrada tipo std_logic_vector debido a que es un bus de un
ancho de dos bits.

Dentro de la arquitectura comportamental del multiplexor de 4 a 1 se ha descrito un


M.C. JOSÉ
process el cual tiene cinco variables sensibles, como ARMANDO
se puede LARA
ver en el GONZÁLEZ
listado, estas son a, b,
c, d y sel.

Dentro de dicho process se ha descrito un case para la entrada sel, de tal manera que
cuando sel valga “00” a la salida sal se le asigne el valor de la entrada a, cuando sel valga “01”
a la salida sal se le asigne el valor de b y así sucesivamente.

library IEEE;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
use IEEE.STD_LOGIC_1164.ALL;

entity mux41 is
Port ( a,b,c,d : in STD_LOGIC;
sel : in STD_LOGIC_VECTOR (1 downto 0);
sal: out std_logic);
end mux41;

architecture Behavioral of mux41 is ARMANDO LARA GONZÁLEZ


M.C. JOSÉ
begin

process(a,b,c,d,sel)
begin
case sel is
when "00" => sal <= a;
when "01" => sal <= b;
when "10" => sal <= c;
when others => sal <= d;
end case;
M.C. JOSÉ
end ARMANDO
process;LARA GONZÁLEZ
end Behavioral;

Tecnológico Nacional de México 33


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

Ejemplo 3.
En este ejemplo se trata de construir un circuito digital contador cíclico, mismo que
cuenteM.C.
desde 0 aARMANDO
JOSÉ 3, es decir en la salida
LARA se verá reflejada la cuenta desde “00” hasta “11”. En la
GONZÁLEZ
Figura 1.12 se muestra el diagrama de bloques del contador.

Como se puede ver, este circuito consta de tres entradas, la entrada de habilitación ce, la
entrada de reloj clk y la entrada de reset rst. Cuenta también con una salida de dos bits
denominada salida(1:0).

ce
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Salida(1:0)
clk CONTADOR

rst

Figura 1.12.- Diagrama de bloques del contador de 0 a 3.

M.C.
En JOSÉ ARMANDO
el siguiente LARA
listado GONZÁLEZ
se muestra la forma de estructurar el programa en VHDL para el
contador cíclico de la Figura 1.12.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity CUENTA_TRES is
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Port ( clk : in STD_LOGIC;
ce : in STD_LOGIC;
rst : in STD_LOGIC;
salida : out STD_LOGIC_VECTOR (1 downto 0));
end CUENTA_TRES;

architecture Behavioral of CUENTA_TRES is


begin
process(clk)
variable conteo: std_logic_vector (1 downto 0);
begin
if clk'event
M.C. JOSÉ ARMANDO and clk = '1'
LARA GONZÁLEZ
then if rst='1'
then conteo:= "00";
elsif ce = '1'
then conteo := conteo + 1;
end if;

Tecnológico Nacional de México 34


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 1 Programación VHDL

end if;
salida<= conteo;
end process;
end Behavioral;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En el listado anterior se puede ver como dentro de la entidad se han definido las tres
entradas ce, clk y rst como entradas STD_LOGIC, mientras que la salida se ha definido como
STD_LOGIC_VECTOR debido a que consta de dos bits.

Dentro de la descripción comportamental se ha definido una variable conteo donde se


llevara la cuenta de los pulsos de reloj, se ha definido además un process del reloj, dentro del
cual mediante un if se verificará si ha ocurrido un cambio
M.C. en el reloj yLARA
JOSÉ ARMANDO si además se trata de un
GONZÁLEZ
flanco de transición positiva, en caso de ser así, se verifica si existe un reset y en caso de ser así,
a la variable conteo se le carga el número “00”. En caso de que no exista un reset, se verificará
si el dispositivo está habilitado y en caso de ser así se incrementará en uno la variable conteo.

Finalmente el valor de conteo será asignado a la salida para ser despegado al mundo
real, pudiendo conectar de dos diodos emisores de luz, uno para cada bit de la salida.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En el punto 2.3.3 del capítulo II del presente trabajo se explica de manera detallada la
forma de editar, sintetizar, depurar y simular un programa para que se pueda generar el archivo
de programación y programar una FPGA.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 35


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Capítulo 2

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Máquinas de Estados Finitos


=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En este capítulo, se estudian las Maquinas de Estados Finitos (FSM). La primera parte
del capítulo, la constituye la presente introducción, donde se explica la importancia de las
Maquinas de Estados Finitos y por ende, la importancia del capítulo dentro del libro de texto,
de igual modo se trata la teoría básica de las FSM.
Posteriormente se estudias las máquinas de estado de Moore y Mealy, representando
dichas Maquinas de Estado con Diagramas de Estado y además con diagramas ASM (Máquinas
de Estado Algorítmicas) M.C. JOSÉ ARMANDO LARA GONZÁLEZ
También se realizara el diseño de ejemplos de máquinas de estados de Moore y Mealy
utilizando VHDL, obteniendo sus tablas de estado y sus ecuaciones de estado para después
obtener el archivo .VHD para su simulación y finalmente obtener el archivo .BIT para realizar
la programación de una FPGA.
Con la finalidad de entrar en materia, se comenzará comentando que las Máquinas de
Estados Finitos conocidas como Finite State Machines por su traducción al inglés, sirven para
realizar procesos bien definidos en un tiempo discreto. Reciben una entrada, hacen un proceso
y nos M.C.
entregan
JOSÉuna salida. LARA GONZÁLEZ
ARMANDO
Cualquier circuito que contenga cierta cantidad de memoria puede ser considerado como
una Máquina de Estados Finitos. Una computadora puede ser considerada como una gran FSM.

Tecnológico Nacional de México 36


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En otras palabras, imaginemos una máquina capaz de seguir una secuencia finita de
pasos al introducir un conjunto de datos en ella, solo se puede leer un dato en cada paso que se
ejecute, por tanto el número de pasos a seguir está dado por el número de datos a introducir.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cada entrada diferente genera una salida diferente, pero siempre el mismo resultado con
los mismos datos de entrada. Por lo tanto una computación es capaz de resolver un problema, sí
y solo sí tiene una solución algorítmica, es decir, puede ser descrito mediante una secuencia
finita de pasos bien definidos.

Mediante una computación podemos encontrar soluciones a problemas que teóricamente


tienen una representación algorítmica, pero que pueden necesitar tal cantidad de recursos,
factores como el tiempo y el espacio de almacenamiento, que desde el punto de vista práctico
no se puede llegar a la solución. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Diagrama de Estado Finito


Un Diagrama de Estado Finito es un gráfico que representa los diferentes estados de una
MSF y todas las transiciones posibles entre los estados. A continuación se mencionan algunos
conceptos básicos dentro de los diagramas de estados que resulta conveniente recordar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Estados:
Puntos donde la FSM puede estar, se representan mediante bloques cuadrados o círculos.

Transiciones:
Las transiciones se representan mediante flechas que indican la dirección de cambio de
un estado a otro.

Eventos:
Los eventos se anotan en el gráfico por encima de las flechas de transición.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Condiciones de Transición:
Las Condiciones de Transición se anotan por debajo de las flechas de transición, no todas
las transiciones poseen Condiciones de Transición. Una pseudotransición inicial en algunos de
los estados en un diagrama de estados, indica el estado inicial de la MSF.

Vale la pena destacar, que las MSF no son diagramas de flujo y no deben confundirse
con los mismos. En una MSF las acciones se asocian con las flechas (transiciones), mientras
M.C.
que un JOSÉ ARMANDO
Diagrama LARA
de Flujo las GONZÁLEZ
acciones se asocian a los vértices de la flecha o a los bloques de
proceso. Cuando una MSF se encuentra en uno de sus estados, básicamente se encuentra "en
reposo" esperando a que suceda un evento, mientras que en un Diagrama de Flujo el sistema se
encuentra activo realizando una tarea.

Tecnológico Nacional de México 37


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En la Figura 2.1 se muestra un ejemplo de un Diagrama de Estados de una FSM que


cuenta con tres estados S0, S1 y S2. Cuando la FSM se encuentre en el estado S0 y la señal de
M.C.
entrada seaJOSÉ
igualARMANDO LARA GONZÁLEZ
a cero permanecerá en ese mismo estado sin activar alguna de las salidas del
circuito y cuando la máquina de estado se encuentra en el estado S0 y la variable externa X sea
igual a 1, habrá una transición del estado S0 al S1 sin activar alguna de las salidas del circuito.
De igual forma cuando la FSM se encuentra en el estado S1 y X es igual a 1 habrá una transición
de S1 a S2 sin activar alguna salida.

En ese mismo orden de ideas, cuando la FSM se encuentra en el estado S2, si la señal
externa vale 0, se transfiere al estado S0 y durante este estado de enlace se activa la señal de
salida OUT1=1. De igual manera si la FSM estáM.C. en el estado
JOSÉ S2 y la señal
ARMANDO LARAexterna es igual a 1,
GONZÁLEZ
permanecerá en ese mismo estado y activa la salida OUT2.

X=1/0 X=1/0
X=0/0 S0 S1 S2 1/OUT2

M.C. JOSÉ ARMANDO LARA X=0/0


GONZÁLEZ

X=0/OUT1

Figura 2.1. Diagrama de Estados de una FSM.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Diagrama de Estado Algorítmico
Los diagramas de estado vistos anteriormente, resultan prácticos para describir el
comportamiento de las FSM que solo tienen algunas entradas y salidas. Para las maquinas más
grandes los diseñadores a menudo utilizan una forma distinta de representación, Diagrama de
la maquina algorítmica de estados (Diagramas ASM).

Un diagrama ASM (algorithmic state machine) es un tipo de diagrama de flujo que se


[Link]
usa para JOSÉ ARMANDO LARA GONZÁLEZ
las transiciones de estado y las salidas generadas para una FSM.

Existen tres tipos de elementos utilizados en los diagramas ASM los cuales se
mencionaran a continuación:

Tecnológico Nacional de México 38


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Caja de estado:
Básicamente consta de un rectángulo que representa un estado de la FSM. Equivale a un
nodo M.C.
en elJOSÉ ARMANDO
diagrama LARA
de estado ó a GONZÁLEZ
una fila de la tabla de estado. El nombre del estado se indica
fuera de la caja, en la esquina superior izquierda. Las salidas tipo Moore se enumeran dentro de
la caja, como se muestra en la Figura 2.2.

NOMBRE DEL ESTADO

M.C. JOSÉ ARMANDO


SEÑALES DE SALIDA
O ACCIONES
LARA GONZÁLEZ
(TIPO MOORE)

Figura 2.2.- Caja de estado de los diagramas ASM

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Las salidas tipo Moore son las que dependen de los valores de las variables de estado
que definen el estado; nos referiremos a ellas simplemente como salidas Moore. Es habitual
escribir nada más el nombre de la señal que ha de validarse. Por tanto, basta escribir z en vez de
z = 1 para indicar que la salida z debe tener el valor de 1.

Además, tal vez sea útil indicar una acción que debe tomarse; por ejemplo, dato=dato+1
especifica que el contenido de un dato debe incrementarse en 1. Desde luego, esto es únicamente
un modo de decir que la señal de control que hace que el dato se incremente debe validarse.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Caja de decisión:
En este caso el rombo indica que la expresión de condición establecida se va a probar y
la trayectoria de salida se elegirá en consecuencia. La expresión de condición consta de una o
más entradas a la FSM. Por ejemplo, W indica que la decisión se basa en el valor de la entrada
W, mientras que WI • W2 indica que la trayectoria de verdadero se toma si WI = W2 = 1 y la
de falso en caso contrario. En la Figura 2.3 se muestra el diagrama de la caja de decisión utilizada
en losM.C. JOSÉ ARMANDO
diagramas ASM. LARA GONZÁLEZ

Tecnológico Nacional de México 39


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


NO SI
CONDICIÓN

Figura 2.3.- Caja de decisión de los diagramas ASM.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Caja de salida condicional:
Esta salida condicional se representa con un ovalo, este indica las señales de salida que
son tipo Mealy. Estas salidas dependen de los valores de las variables de estado y las entradas
de la FSM, en lo subsecuente nos referiremos a ellas simplemente como salidas Mealy. La
condición que determina si dichas salidas se generan se especifica en una caja de decisión. En
la Figura 2.4 se muestra el diagrama de bloques de la caja de salida condicional utilizado en los
diagramas ASM.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

SALIDAS ADICIONALES O ACCIONES


(TIPO MEALY)

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Figura 2.4.- Caja de salida condicional de los diagramas ASM.

En la Figura 2.5 se muestra un ejemplo de un diagrama ASM para una máquina de estado cuyo
Diagrama de Estado se muestra en la Figura 2.1. Como se puede observar el diagrama ASM
tiene mucha similitud en cuanto al funcionamiento. Estando en el estado S0, se evalúa X y si es
cero se regresa al mismo estado y si X es uno, pasa al estado S2.

[Link]
JOSÉ ARMANDO
la máquinaLARA GONZÁLEZ
de estado en S1 se evalúa X, y si es cero se regresa al estado S0 y
si X es uno, pasa al estado S2. Finalmente, estando en S2, si X es cero se activa la salida OUT1
y se regresa al estado S0 y si no se activa la salida OUT2 y se queda en ese mismo estado S2.

Tecnológico Nacional de México 40


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


S0

0
X

S1

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


0 X

S2

0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ X

OUT1 OUT2

Figura 2.5.- Ejemplo de un diagrama ASM

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


2.1. MODELO DE MEALY Y MODELO DE MOORE.
En esta sección se estudiarán las Maquinas de Estado de Moore y Mealy que son dos de
las más importantes, iniciando con a máquina de Moore.

Máquina de Moore
Es un autómata de estados finitos para el cual la salida en un momento dado sólo depende
M.C. JOSÉ
de su estado en ARMANDO LARA
ese momento, GONZÁLEZ
mientras la transición al siguiente estado depende del estado en
que se encuentre y de la entrada introducida. El diagrama de estados para una máquina Moore
incluirá una señal de salida para cada estado. Comparada con la Máquina de Mealy, la cual
mapea transiciones en la máquina a salidas.

Tecnológico Nacional de México 41


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

El nombre Moore machine lo ha adoptado en honor de su promotor Edward F. Moore,


un estadounidense iniciador de los estudios de las máquinas de estados.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
La mayoría de las máquinas electrónicas están diseñadas como sistemas secuenciales
síncronos. Los sistemas secuenciales síncronos son una forma restringida de máquinas de Moore
donde el estado cambia solo cuando la señal de reloj global cambia. Normalmente el estado
actual se almacena en flip-flops, lo que se conoce como la Memoria de Estados, y la señal de
reloj global está conectada a la entrada CLK de los flip-flops.

En la Figura 2.6 se muestra el diagrama de bloques de una máquina de estados finitos


tipo Moore.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

LÓGICA DE SALIDA SALIDAS


ENTRADAS
MEMORIA DE
LÓGICA DEL ESTADO
SIGUIENTE (CIRCUITO
ESTADO COMBINACIONAL)

ESTADO ACTUAL
(FLIP-FLOPS)

(CIRCUITO
COMBINACIONAL)

M.C. JOSÉ ARMANDO LARA GONZÁLEZ CLK

2.6.- Diagrama de bloque de una FSM tipo Moore.

En este tipo de Máquina de Moore de la Figura 2.6, como ya se ha mencionado, consta


de un circuito secuencial cuyas salidas dependen o son función del estado actual o estado
presente. Estas variables de estado son obtenidas de la lógica del siguiente estado y del circuito
de memoria formados por los flip-flops como se muestra en la Figura 2.6.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Máquina de Mealy
Es un autómata de estados finitos para el cual genera una salida basándose en su estado
actual y una entrada. Esto significa que el Diagrama de Estados incluirá ambas señales de
entrada y salida para cada línea de transición. En contraste, la salida de una máquina de Moore
de estados finitos depende solo del estado actual de la máquina, dado que las transiciones no
tienen entrada asociada.

SinJOSÉ
M.C. embargo, para cada
ARMANDO Máquina
LARA de Mealy hay una máquina de Moore equivalente cuyos
GONZÁLEZ
estados son la unión de los estados de la máquina de Mealy y el Producto cartesiano de los
estados de la máquina de Mealy y el alfabeto de entrada. El nombre "Máquina de Mealy" viene
del Matemático e informático americano George H. Mealy, un pionero de las máquinas de
estados.

Tecnológico Nacional de México 42


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En la Figura 2.7 se muestra el diagrama de bloques de una máquina de estados finitos


tipo Mealy.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
LÓGICA DE SALIDA SALIDAS

(CIRCUITO
COMBINACIONAL)
ENTRADAS
MEMORIA DE
LÓGICA DEL ESTADO
SIGUIENTE
ESTADO

ESTADO ACTUAL
(FLIP-FLOPS)

(CIRCUITO
COMBINACIONAL)

[Link]É ARMANDO LARA GONZÁLEZ


2.7.- Diagrama de bloque de una FSM tipo Mealy.

Como se puede observar en la Figura 2.7 correspondiente al diagrama de bloques de


la Maquina de Estado tipo Mealy, las salidas son función de las entradas y de las variables de
estado presente o actual. En otras palabras, se necesita una lógica de salida para obtener dichas
salidas. De la misma manera que en la Máquina de Moore las variables de estado son obtenidas
de la lógica de estado
M.C. JOSÉ siguiente
ARMANDO LARAy del circuito de memoria en este caso los flip-flops.
GONZÁLEZ

2.2. REPRESENTACIÓN DE LOS MODELOS MEALY Y MOORE EN


DIAGRAMAS DE ESTADO Y DIAGRAMA ASM.

En esta sección del libro, se llevará a cabo el desarrollo de los Diagramas de Estado y
los Diagramas ASM de una máquina de estado tipo Mealy y tipo Moore tomando ejemplos para
realizar dichos diagramas. Para el desarrollo [Link] maquina tipo Mealy
JOSÉ ARMANDO se tomara
LARA un ejemplo de
GONZÁLEZ
un circuido detector de una secuencia de tres bits, mientras que para el desarrollo de la máquina
de estado tipo Moore se tomara de ejemplo un circuito contador ascendente y descendente de
tres bits. Se iniciará con la Maquina de la máquina de estado tipo Mealy.

Ejemplo de FSM tipo Mealy para obtención de Diagramas de Estado y Diagrama ASM.

Se desea representar una máquina de estado tipo Mealy en diagrama de estado y


diagrama ASM para un circuito digital el cual detecte una secuencia de números binarios de tres
M.C.
dígitos. JOSÉ ARMANDO
Considerando LARA GONZÁLEZ
una entrada x y una salida s la cual se activará cuando la secuencia
mencionada sea introducida en x correctamente. Este sistema es para una cerradura electrónica
la cual deberá abrirse cuando se introduzca correctamente la secuencia de números “101”.

Tecnológico Nacional de México 43


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Primeramente debemos saber que el sistema cuenta con tres estados, los cuales se
pueden nombrar S0, S1 y S2, pero considerando que la máquina de estado se fuera a
implementar con flip-flops se tendrían realmente cuatro estados ya que se necesitaría emplear
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
dos flip-flops, por lo que se debe considerar el cuarto estado S3. En ese estado S3, si por alguna
razón callera la máquina de estado es él, sin importar el valor de la variable de entrada x
regresaría inmediatamente al estado S0.

El diagrama de estados para cumplir con el con el planteamiento del problema, quedaría
como se muestra en la Figura 2.8, el cual consta de cuatro estados S0, S1, S2 y S3 como se
puede observar.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


S3
x=0/s=0
x=0/s=0
x=1/s=0
S0
x=1/s=0

x=1/s=1

M.C. JOSÉ ARMANDO LARA GONZÁLEZ x=1/s=0

S2 S1
x=0/s=0

x=0/s=0

Figura 2.8.- Diagrama de estados del detector de secuencia.

Para este ejemplo se requiere una solaM.C. JOSÉexterna


variable ARMANDO LARA
x para queGONZÁLEZ
a través de ella sea
introducida la secuencia de números binarios para que sea detectada por la Maquina de Estado.

El diagrama de la Figura 2.8 se puede interpretar fácilmente considerando que, estando


la máquina en el estado S0 si se introduce un “1” cambiará de estado a S1 y la salida será igual
a cero debido a que no se ha terminado de introducir la secuencia. Ahora si el numero
introducido estando en este mismo estado es un “0” no cambiará de estado y la salida será igual
a cero.

Por otro lado si la máquina de estado se encuentra en el estado S1 y se introduce un “0”


M.C. JOSÉ
en la variable ARMANDO
externa, LARAalGONZÁLEZ
cambiara estado S2 y la salida será igual a cero, ya que tampoco se ha
terminado de introducir la secuencia completa. Pero si el numero introducido es “1” estando aun
en S2, no cambiará de estado y la salida será igual a cero.

Tecnológico Nacional de México 44


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Estando en el estado S2 si se introduce un “1” cambiara al estado S0 y la salida será igual


a “1” debido a que se ha completado la secuencia correctamente, pero si el numero introducido
en este mismo estado es “0” no cambiara de estado y la salida será igual a “0”.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Finalmente si llegase a caer en el estado S3 independientemente del valor de la variable
externa x cambiara al estado inicial S0 y la salida siempre será igual a “0”.

Una vez que se tiene el diagrama de estados, se procede a la implementación del


Diagrama ASM el cual quedara conformado como se muestra en la Figura 2.9.

S3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1
x

S0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


0
x
1

S1

1
x
0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

S2

x 0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.9.- Diagrama ASM de una máquina de estado tipo Mealy

Tecnológico Nacional de México 45


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Como se puede observar e este diagrama ASM de la Figura 2.9, se tiene un diagrama
formado por los tres elementos básicos de un diagrama ASM siendo estos las cajas de estado,
las cajas de decisión y la activación de las señales Mealy.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Resulta relativamente fácil convertir un diagrama de estados a un diagrama ASM y
viceversa solo respetando las reglas mencionadas anteriormente. Para el caso del diagrama ASM
de la Figura 2.9, primeramente se evalúa la variable de entrada en el estado S3 e
independientemente de su valor, hay una transición de S3 a S0.

Del mismo modo estando en el estado S0 se evalúa la variable de entrada x y si es


igual a 1 pasa al estado S1 pero si es cero se regresa al estado S0 debido a que el número no
corresponde a la serie correcta.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cuando la FSM se encuentra en el estado S1 y la variable de entrada es igual a cero,
esta pasa al estado S2 debido a que ese cero de la entrada, corresponde al valor correcto en la
serie, pero si x es igual a uno, permanecerá la maquina en ese estado S1.

Finalmente cuando la máquina de estado se encuentra en el estado S2, si x es igual a


“1” que es el último número correcto de la serie evaluada, activara la salida s y regresara al
estado inicial S0, mientras que si x es igual a cero la maquina permanecerá en el estado S2.

[Link]í
JOSÉ
es ARMANDO LARA
la forma en que se GONZÁLEZ
desarrollan los diagramas de estado y ASM para una máquina
de estado tipo Mealy. A continuación se analizará el mismo proceso con un ejemplo en una
FSM tipo Moore.

Ejemplo de FSM tipo Moore para obtención de Diagramas de Estado y Diagrama ASM.
Se desea representar una máquina de estado tipo Moore en diagrama de estado y
diagrama ASM para un circuito digital. Este circuito deberá desplegar la cuenta binaria de forma
ascendente de 0 a 3 y de forma descendente [Link] 3JOSÉ
a 0 de forma cíclica.
ARMANDO LARASe requiere una sola
GONZÁLEZ
variable externa x y cuatro estados correspondientes a los números que se desean contar de
forma ascendente y descendente. En la Figura 2.10 se muestra en diagrama de estados del
contador ascendente y descendente.

La forma de explicar este diagrama de estados del contador de 0 a 3 ascendente y descendente


es muy simple, ya que en cualquier estado que se encuentre la máquina de estado, ya sea S0,
S1, S2 o S3 y sí la variable de entrada es igual a “0”, la máquina de estado cambiara al estado
superior, por ejemplo, si se encuentra en el estado S2 y la entrada x es igual a “0” entonces
[Link]É
cambiara ARMANDO
estado LARA GONZÁLEZ
S3 y así sucesivamente. En otras palabras cuando la variable de entrada sea
igual a “0” la máquina de estado desplegará la cuenta en forma ascendente y cuando sea igual a
“1” desplegara la cuenta de manera descendente.

Tecnológico Nacional de México 46


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

S1/01

M.C. JOSÉ ARMANDO LARA


x=0 GONZÁLEZ
x=0

x=1 x=1

S0/00 S2/10

x=1 x=1

x=0
x=0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S3/11

Figura 2.10.- Diagrama de estados del contador.

Por otro lado si se encuentra en cualquiera de los cuatro estados posibles y la variable de
entrada x es igual a “1”, entonces la máquina de estado cambiara del estado en que se encuentra
a un estado inferior, por ejemplo si se encuentra en el estado S2 y x es igual a “1” pasará al
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
estado S1 y la salida será la del estado S1.

Una vez que se tiene el diagrama de estados, se procede a la implementación del


Diagrama ASM el cual quedará conformado como se muestra en la Figura 2.11. Como ya se
había comentado es relativamente fácil convertir de un diagrama de estados a un diagrama ASM
y viceversa.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Como se puede observar en la Figura 2.11 correspondiente al diagrama ASM del
ejemplo en cuestión, dicho diagrama esta formado igualmente de cuatro estados S0, S1, S2 y S3
los cuales se representan con rectángulos dentro de los cuales se escribe el valor de las salidas
Moore. En el estado S0 se introduce la variable externa x la cual será evaluada en cada uno de
los cuatro casos, ya que de ella depende que el contador cuente de manera ascendente o
descendente.

Cuando la FSM se encuentra en el estado S0 se evalúa el valor de x y si es igual a “0”


habráM.C.
unaJOSÉ ARMANDO
transición LARA GONZÁLEZ
del estado S0 al estado S1, es decir iniciara la cuenta ascendente
considerando la salida de los estados S0 y S1. En caso de que la variable x sea “1” habrá también
un cambio de estado pero este será de S0 a S3, es decir cuando x sea “1” iniciara la cuenta en
forma descendente.

Tecnológico Nacional de México 47


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Lo mismo sucede cuando el valor de x es evaluado en cualquiera de los otros estados,


si x es “0” la FSM pasará al estado superior siguiente, contando de forma ascendente. Por otro
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
lado cuando la variable de entrada se “1” la FSM cambiará al estado próximo inferior contando
de manera descendente.

S0
Z1Z0=00
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

1 0
x

S1
Z1Z0=01

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

1 0
x

S2
Z1Z0=10

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


1 0
x

S3
Z1Z0=11

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


1 0
x

Figura 2.11.- Diagrama ASM del contador.

Tecnológico Nacional de México 48


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

2.3. DISEÑO DE MÁQUINAS DE ESTADOS FINITOS TIPO MEALY Y TIPO


MOORE UTILIZANDO VHDL.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el punto 2.2 se hizo el desarrollo de los Diagramas de Estado y los Diagramas ASM
de una máquina de estado tipo Mealy y tipo Moore tomando un ejemplo para cada uno, para
realizar dichos diagramas. En esta sección se continúa con esos mismos ejemplos con la
finalidad de obtener ahora las Tablas de Estado y las ecuaciones de estado. De igual modo se
desarrollara el archivo .VHD y la simulación del mismo, para después obtener el archivo de
programación y posteriormente programar una FPGA.

Se hará uso del software ISE (Integrated Synthesis Environment) es una herramienta
de software producida por Xilinx para la síntesisM.C. yJOSÉ ARMANDO
análisis LARAde
de diseños GONZÁLEZ
HDL. Con esta
herramienta se editará, sintetizará y depurará el programa .VHD, así como su simulación y
posterior descarga a la tarjeta de evaluación con la FPGA.

La tarjeta de evaluación de los programas será la Digilent Basys2 Spartan-3E FPGA


Board. Esta tarjeta de evaluación permite la descarga y prueba de los programas haciendo uso
de los recursos de entrada/salida con los que cuenta.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


2.3.1. Obtención de las tablas de estado.

Ejemplo de FSM tipo Mealy para obtención de Tablas de Estado.


Se desea obtener la Tabla de Estado de la máquina de Mealy considerando el diagrama
de estado y diagrama ASM para un circuito digital el cual detecte una secuencia de números
binarios de tres dígitos. Dicho ejemplo fue analizado en la sección 2.2.

Con la finalidad de obtener la Tabla deM.C.


Estado
JOSÉdel ejemplo seLARA
ARMANDO desarrollara
GONZÁLEZ la Tabla de
Estado a partir del diagrama ASM desarrollado anteriormente en el punto 2.2 y que se muestra
nuevamente en la Figura 2.12.

La Tabla de Estados para una FSM, se puede obtener a partir del Diagrama de Estados
o bien del Diagrama ASM. Como ya se mencionó cuando los desarrollos no son muy complejos
resulta relativamente fácil obtener la Tabla de Estados a partir del Diagrama de Estados pero
cuando se tiene una FSM compleja es conveniente partir del Diagrama ASM. En este caso
aunque el problema no es muy complejo se partirá del Diagrama ASM para la obtención de la
Tabla de Estados.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez que se cuenta con el diagrama ASM se procederá a la obtención de la Tabla
de Estados de la Maquina de Mealy detectora de la secuencia de los números “101”. La Tabla
de estados resultante se muestra en la Tabla 2.1

Tecnológico Nacional de México 49


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

S3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1
x

S0

0
M.C.
x JOSÉ ARMANDO LARA GONZÁLEZ
1

S1

1
x
0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S2

x 0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.12.- Diagrama ASM de una máquina de estado tipo Mealy

Como la FSM y el Diagrama ASM está formado por cuatro estados S0, S1, S2, S3 y
una variable de entrada, se han colocado en la Tabla 2.1 dos veces cada estado debido a que se
evalúan con cada uno de los dos valor de la variable de entrada x la cual puede ser “0” o “1”.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


De acuerdo con diagrama ASM de la Maquina de estado, se obtiene la tabla de estado
de la FSM colocando en la primera columna denominada Estado Actual, los cuatro estados dos
veces, para evaluar cada estado cuando x=0 y cuando x=1. En la segunda columna de la tabla
se ha colocado la variable externa x con valor de “0” y “1” para cada estado.

Tecnológico Nacional de México 50


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Tabla 2.1 Tabla de Estado de la FSM tipo Mealy.


Estado Actual x Estado Siguiente Salida
S0 0 S0 0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
S0 1 S1 0
S1 0 S2 0
S1 1 S1 0
S2 0 S2 0
S2 1 S0 1
S3 0 S0 0
S3 1 S0 0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En la tercera columna denominada Estado Siguiente se escribe el siguiente estado
donde se deberá trasladar la máquina de estado. Y finalmente en la cuarta columna llamada
Salida se escribe el valor de la salida para cada estado, la cual como se puede observar solo se
activa cuando hay un cambio de S2 a S0 teniendo x el valor de “1”.

Esta es la manera de crear la Tabla de Estados de una FSM tipo Mealy y


posteriormente se asignarán códigos a los estados determinando también el uso de dos flip-flops
con la fórmula:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2𝑛 = 𝑁𝑢𝑚𝑒𝑟𝑜𝑠 𝑑𝑒 𝑒𝑠𝑡𝑎𝑑𝑜𝑠
Donde:
n=número de flips-flops
Por lo tanto:
22 = 4 𝑒𝑠𝑡𝑎𝑑𝑜𝑠

Por lo que se termina el uso de 2 flips-flops y la asignación de código a los estados


quedaría como se muestra en la Tabla 2.2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tabla 2.2.- Asignación de código a los estados


Código Estado
00 S0
01 S1
10 S2
11 S3

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Una vez que se tiene la asignación de código a los estados se seleccionará el elemento
de memoria, es decir los flip-flops, por lo que se seleccionará el flip-flop JK, debido a por su
versatilidad. En la Tabla 2.3 se muestra la tabla de transición del flip-flop JK.

Tecnológico Nacional de México 51


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Tabla 2.3.- Tabla de transición del flip-flop JK


Qt Qt+1 J K
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0

Una vez que se cuenta con la Tabla de Estado, la Asignación de Código a los Estados
y la Tabla de Transición del flip-flop JK, se procederá a obtener la Tabla de Estados Codificada.
Esta Tabla Codificada se muestra en la Tabla 2.4 donde se puede observar que en la primera
columna denominada Estado Actual se han [Link]
JOSÉ ARMANDO
los estadosLARA
peroGONZÁLEZ
con el código
correspondiente a cada estado, igualmente se has escrito dos veces cada estado para evaluar cada
uno de los estados con cada valor de la variable de entrada.

En la segunda columna llamada x, se ha escrito la variable externa x ocho veces para


evaluar los cuatro estados con los dos posibles valores de la variable de entrada. En la tercera
columna llamada Estado Siguiente se han escrito igualmente es estados siguientes pero
codificados con el código correspondiente a cada estado.

[Link]É
las ARMANDO LARAyGONZÁLEZ
columnas cuatro cinco se has escrito las entradas de los dos flip-flops 0 y 1,
siendo J1 y K1 las entradas del flip-flop 1, mientras que J0 y K0 son las entradas del flip-flop 0.
Estas columnas serán determinadas utilizando la Tabla de transición del flip-flop JK de la Tabla 2.3.
Si analizamos el primer caso cuando Q1t en el Estado Actual cero es “0” y Q1t+1 en el Estado
Siguiente es “0”, de acuerdo con la Tabla de transición del flip-flop JK se tendrá que J1 y K1
serán 0 y X respectivamente, donde X significa no importa.

Tabla 2.4 Tabla de Estados Codificada de la FSM tipo Mealy.


Estado Actual M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Estado Siguiente
Q1t Q0t x Q1t+1 Q0t+1 J1 K1 J0 K0 Salida
0 0 0 0 0 0 X 0 X 0
0 0 1 0 1 0 X 1 X 0
0 1 0 1 0 1 X X 1 0
0 1 1 0 1 0 X X 0 0
1 0 0 1 0 X 0 0 X 0
1 0 1 0 0 X 1 0 X 1
1 1 0 0 0 X 1 X 1 0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 1 1 0 0 X 1 X 1 0

Finalmente la salida solo se cumple cuando la FSM pasa del estado dos “10” al estado
“00” con x=1.

Tecnológico Nacional de México 52


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Ejemplo de FSM tipo Moore para obtención de Tablas de Estado.

Se desea obtener la Tabla de Estado una FSM tipo Moore considerando el diagrama de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
estado y diagrama ASM para un circuito digital el cual deberá desplegar la cuenta binaria de
forma ascendente de 0 a 3 y de forma descendente de 3 a 0 de forma cíclica. Se requiere una
sola variable externa x y cuatro estados correspondientes a los números que se desean contar de
forma ascendente y descendente. Dicho ejemplo fue analizado en la sección 2.2, donde se
obtuvieron los Diagramas de Estado y ASM de dicho ejemplo.

Con la finalidad de obtener la Tabla de Estado del ejemplo se desarrollará la Tabla de


Estado a partir del diagrama ASM desarrollado anteriormente en el punto 2.2 y que se muestra
nuevamente en la Figura 2.13. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En esta Figura 2.13 se puede observar el Diagrama ASM correspondiente al ejemplo


del contador ascendente y descendente. Dicho diagrama está formado igualmente de cuatro
estados S0, S1, S2 y S3 los cuales se representan con rectángulos dentro de los cuales se escribe
el valor de las salidas Moore. En el estado S0 se introduce la variable externa x la cual será
evaluada en cada uno de los cuatro estados, ya que de ella depende que el contador cuente de
manera ascendente o descendente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

A partir de este diagrama ASM se obtendrá la Tabla de Estados correspondiente a la


máquina de estados del ejemplo del contador ascendente y descendente. La Tabla de Estados
contará con cuatro columnas las cuales serán: La columna del Estado Actual, la columna de la
variable de entrada x, la columna del Estado Siguiente y la columna de la salida.

Esta Tabla de Estados es muy importante en el diseño de Máquinas de Estado Finito


ya que en muchas ocasiones es posible partir deM.C.
estaJOSÉ
tablaARMANDO LARA
para el diseño GONZÁLEZ
de la máquina de estado
con VHDL, pero cuando el diseño se debe realizar con circuitos integrados discretos,
forzosamente se requiere plantear la tabla de estados codificada o tabla de excitación para
posteriormente hacer la reducción con mapas de Karnaugh y determinar las ecuaciones de estado
correspondientes a la máquina de estado.

De esta forma, ya que se cuenta con el diagrama ASM se procederá a la obtención de


la Tabla de Estados de la Máquina de Moore que realiza la función de contar de forma
ascendente de 0 a 3 y descendente de 3 a 0. La Tabla de estados resultante se muestra en la Tabla
M.C. JOSÉ
2.5. Como ARMANDO
el Diagrama ASM LARA
está GONZÁLEZ
formado por cuatro estados S0, S1, S2, S3 y una variable de
entrada, se han colocado en la tablas dos veces cada estado debido a que se evalúan con cada
uno de los dos valor de la variable de entrada x la cual puede ser “0” o “1”.

Tecnológico Nacional de México 53


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


S0
Z1Z0=00

1 0
x

S1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Z1Z0=01

1 0
x

S2
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Z1Z0=10

1 0
x

S3
Z1Z0=11
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

1 0
x

Figura 2.13.- Diagrama ASM del contador.

Como ya se mencionó, de acuerdo con diagrama ASM de la Máquina de estado, se


obtiene la tabla de estado de la FSM de la Tabla 2.5, colocando en la primera columna
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
denominada Estado Actual, los cuatro estados dos veces, para evaluar cada estado cuando x=0
y cuando x=1. En la segunda columna de la tabla se ha colocado la variable externa x con valor
de “0” y “1” para cada estado.

Tecnológico Nacional de México 54


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Tabla 2.5 Tabla de Estado de la FSM tipo Moore.


Estado Actual x Estado Siguiente Salidas
S0 0 S1 00
M.C. JOSÉ ARMANDO
S0 LARA GONZÁLEZ
1 S3 00
S1 0 S2 01
S1 1 S0 01
S2 0 S3 10
S2 1 S1 10
S3 0 S0 11
S3 1 S2 11

En la tercera columna denominada Estado M.C. JOSÉ ARMANDO


Siguiente LARA el
se escribe GONZÁLEZ
siguiente estado
donde se deberá trasladar la máquina de estado. Y finalmente en la cuarta columna llamada
Salidas se escribe el valor de las salidas para cada estado, la cual depende únicamente del estado
actual y la cual se puede leer dentro de cada uno de los cuatro estados de la Maquina de Estados
en el Diagrama ASM.

Esta es la manera de crear la Tabla de Estados de una FSM tipo Moore y


posteriormente se asignarán códigos a los estados determinando también el uso de dos flip-flops
con la fórmula:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2𝑛 = 𝑁ú𝑚𝑒𝑟𝑜𝑠 𝑑𝑒 𝑒𝑠𝑡𝑎𝑑𝑜𝑠
Donde:
n=número de flips-flops
Por lo tanto:
22 = 4 𝑒𝑠𝑡𝑎𝑑𝑜𝑠

Por lo que se termina el uso de 2 flips-flops y la asignación de código a los estados


quedaría como se muestra en la Tabla 2.6.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tabla 2.6.- Asignación de código a los estados


Código Estado
00 S0
01 S1
10 S2
11 S3

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Una vez que se tiene la asignación de código a los estados se seleccionará el elemento
de memoria, es decir los flips-flops, por lo que se seleccionará el flip-flop JK, debido a su
versatilidad. En la Tabla 2.7 se muestra la tabla de transición del flip-flop JK.

Tecnológico Nacional de México 55


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Tabla 2.7.- Tabla de transición del flip-flop JK


Qt Qt+1 J K
0 0 0 X
0 1 1 X
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 0 X 1
1 1 X 0

Una vez que se cuenta con la Tabla de Estado, la Asignación de Código a los Estados
y la Tabla de Transición del flip-flop JK, se procederá a obtener la Tabla de Estados Codificada.
Esta Tabla Codificada se muestra en la Tabla 2.8 donde se puede observar que en la primera
columna denominada Estado Actual se han escrito los estados pero con el código
correspondiente a cada estado, igualmente se has escrito dos veces cada estado para evaluar cada
uno de los estados con cada valor de la variable M.C. JOSÉ ARMANDO LARA GONZÁLEZ
de entrada.

En la segunda columna llamada x, se ha escrito la variable externa x ocho veces para


evaluar los cuatro estados con los dos posibles valores de la variable de entrada. En la tercera
columna llamada Estado Siguiente se han escrito igualmente los estados siguientes pero
codificados con el código correspondiente a cada estado.

[Link]É
las ARMANDO LARAyGONZÁLEZ
columnas cuatro cinco se has escrito las entradas de los dos flip-flops 0 y 1,
siendo J1 y K1 las entradas del flip-flop 1, mientras que J0 y K0 son las entradas del flip-flop 0.
Estas columnas serán determinadas utilizando la Tabla de transición del flip-flop JK de la Tabla 2.7.
Si analizamos el primer caso cuando Q1t en el Estado Actual cero es “0” y Q1t+1 en el Estado
Siguiente es “0”, de acuerdo con la Tabla de transición del flip-flop JK se tendrá que J1 y K1
serán 0 y X respectivamente, donde X significa no importa.

Tabla 2.8 Tabla de Estados Codificada de la FSM tipo Moore.


Estado Actual M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Estado Siguiente Salidas
Q1t Q0t x Q1t+1 Q0t+1 J1 K1 J0 K0 S1 S0
0 0 0 0 1 0 X 1 X 0 0
0 0 1 1 1 1 X 1 X 0 0
0 1 0 1 0 1 X X 1 0 1
0 1 1 0 0 0 X X 1 0 1
1 0 0 1 1 X 0 1 X 1 0
1 0 1 0 1 X 1 1 X 1 0
1 1 0 0 0 X 1 X 1 1 1
M.C. 1JOSÉ 1ARMANDO
1 LARA GONZÁLEZ
1 0 X 0 X 1 1 1

Finalmente la salida de la FSM será la salida correspondiente a cada estado


considerando que se trata de una Maquina de Estados tipo Moore.

Tecnológico Nacional de México 56


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

2.3.2. Obtención de las ecuaciones de estado.


En esta sección se obtendrán las ecuaciones de estado para una máquina de estado tipo
MealyM.C. JOSÉ
y una ARMANDO
máquina LARAtipo
de estado GONZÁLEZ
Moore. Estas ecuaciones de estado nos permiten de una
manera más directa desarrollar el circuito digital equivalente a la máquina de estado ya sea
haciendo uso de circuitos integrados discretos, como compuertas lógicas y flip-flops o bien
haciendo uso de un lenguaje de descripción de hardware como el caso de VHDL o Verilog.

De igual manera que en los puntos anteriores se tomaran en consideración los dos
ejemplos que se han venido manejando hasta el momento. Para desarrollar las ecuaciones de
estado de una Maquina de Mealy se empleará el ejemplo que se ha venido desarrollando el cual
se representó en el punto 2.2, la máquina de estado tipo Mealy en diagrama de estado y diagrama
ASM para un circuito digital el cual detecte unaM.C. JOSÉ ARMANDO
secuencia de númerosLARA GONZÁLEZ
binarios de tres dígitos.
A partir de esta tabla de estados se obtendrán las ecuaciones de estado de la FSM.

Considerando una entrada x y una salida s la cual se activará cuando la secuencia


mencionada sea introducida en x correctamente. Este sistema es para una cerradura electrónica
la cual deberá abrirse cuando se introduzca correctamente la secuencia de números “101”. Este
ejemplo se empleó también en el punto 2.3.1 donde se obtuvo la Tabla de Estado de la máquina
de Mealy considerando el diagrama de estado y diagrama ASM.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Por otro lado para determinar de las ecuaciones de estado de una máquina tipo Moore se
empleará el ejemplo, el cual se estudió en el punto 2.2 donde se desarrollaron las
representaciones de la máquina de estado tipo Moore en diagrama de estado y diagrama ASM
para un circuito digital. Este circuito deberá desplegar la cuenta binaria de forma ascendente de
0 a 3 y de forma descendente de 3 a 0. Se requiere una sola variable externa x y cuatro estados
correspondientes a los números que se desean contar de forma ascendente y descendente. Este
mismo ejemplo se empleó en el punto 2.3.1 para determinar la Tabla de Estados de la máquina
M.C.
tipo Moore, de la cual se partirá para obtener las JOSÉ ARMANDO
ecuaciones LARA GONZÁLEZ
de estado.

Ejemplo de FSM tipo Mealy para obtención de Ecuaciones de Estado.


Como ya se había mencionado, en esta sección se empleará el ejemplo de diseño de
una máquina de Mealy que detecte una secuencia de números, siendo estos “101”. Se hará uso
de la Tabla de Estados determinada en el punto 2.3.1. En la Tabla 2.9 se muestra nuevamente la
Tabla de estados para la máquina de Mealy detectora de la secuencia de los números “101”.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
De esta tabla, sería posible extraer las ecuaciones directamente, pero resulta más
conveniente reducir dichas ecuaciones a través de mapas de Kanaugh, también conocidos como
mapas K, con la finalidad de simplificar el circuito.

Tecnológico Nacional de México 57


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Tabla 2.9 Tabla de Estados Codificada de la FSM tipo Mealy.


Estado Actual Estado Siguiente
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Q1t Q0t x Q1t+1 Q0t+1 J1 K1 J0 K0 Salida
0 0 0 0 0 0 X 0 X 0
0 0 1 0 1 0 X 1 X 0
0 1 0 1 0 1 X X 1 0
0 1 1 0 1 0 X X 0 0
1 0 0 1 0 X 0 0 X 0
1 0 1 0 0 X 1 0 X 1
1 1 0 0 0 X 1 X 1 0
1 1 1 0 0 X 1 X 1 0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

A partir de la tabla de estados codificada y excitada de la Tabla 2.9, se puede hacer los
mapas K para las entradas de los Flip-Flops y para la salida de la FSM. Para el ejemplo en
cuestión, se tendrán cinco mapas K ya que tenemos dos entradas de Flip-Flops y una salida
siendo estos mapas para J1, K1, J0, K0 y Salida.

Es conveniente recalcar que las variables de los mapas K serán los Estados Actuales
M.C. JOSÉ
y la variable ARMANDO
externa x, por loLARA
tantoGONZÁLEZ
las estados actuales y la variable externa darán la numeración
de los mapas K.

Por ejemplo para el primer estado de la Tabla 2.9 donde Q1t =0, Q0t =0 y x=0 esa será
la casilla 0 en el mapa K y en el segundo estado, donde Q1t =0, Q0t =0 y x=1 será la casilla 1 y
así sucesivamente. De esta forma al llenar el mapa K para J1, se tendrá un “0”en las casillas 0, 1
y 3 de acuerdo con la columna de J1 de la Tabla 2.9, mientras que en la casilla 2 se tendrá un
“1”. Finalmente en las casillas del 4 al 7 se tendrán X. Es conveniente recordar que X tiene un
valor de “no importa”. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

De acuerdo con lo mencionado anteriormente el mapa K para J1 quedará lleno como


se muestra en la Figura 2.14

Q0X
Q1 00 01 11 10
0 0 0 0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1 X X X X
Figura 2.14.- Mapa K para J1.

Tecnológico Nacional de México 58


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Una vez que ya se ha llenado el mapa K se procederá a vaciarlo para extraer la primera
ecuación de estado correspondiente a J1, agrupando el “1” de la posición 2 del mapa con la X de
la posición 6 como se muestra en la Figura 2.15
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Q0X
Q1 00 01 11 10
0 0 0 0 1

1 X X X X
Figura 2.15.- Mapa K para J1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Como se puede observar en la Figura 2.15, Q1 cambia de “0” a “1” por lo que se
elimina, mientras que Q0 permanece en “1” y x permanece en “0” por lo que la ecuación para la
entrada J1 será la que se escribe en la Ecuación 2.1.

𝐉𝟏 = 𝐐𝟎 𝐱̅ …………….………………….Ecuación 2.1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
De esta misma manera se obtendrán las cuatro ecuaciones faltantes, llenando los
mapas K a partir de la Tabla de Estados y extrayendo la ecuación de estado. A continuación se
obtendrá la ecuación para la entrada K1. Llenando el mapa K quedaría como se muestra en la
Figura 2.16.

Q0X
Q1 00 M.C.
01 JOSÉ
11 ARMANDO
10 LARA GONZÁLEZ
0 X X X X

1 0 1 1 1
Figura 2.16.- Mapa K para K1.

Relacionando dos veces en grupos de cuatro dígitos, se obtendrá la ecuación para K1,
la cual se muestra en la Ecuación 2.2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

𝐊 𝟏 = 𝐱 + 𝐐𝟎 …………………………..Ecuación 2.2

Tecnológico Nacional de México 59


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Para el caso del mapa K de J0, nuevamente tomando en consideración la Tabla de


Estados, mostrada en la Tabla 2.9, en la columna correspondiente a J0, se tendrá el mapa
mostrado en la Figura 2.17.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Q0X
Q1
00 01 11 10
0 0 1 X X

1 0 0 X X
Figura 2.17.- Mapa K para J0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Relacionando el único “1” lógico que hay en el mapa con la X contigua, como se
muestra en la Figura 2.17 se obtiene la Ecuación 2.3

̅̅̅̅𝟏 𝐱………….………………….Ecuación 2.3


𝐉𝟎 = 𝐐

[Link]
JOSÉ ARMANDO LARA GONZÁLEZ
tenemos el mapa K para la entrada K0, tomando en consideración la
tabla de estados en la columna K0, tendremos el mapa mostrado en la Figura 2.18.

Q0X
Q1 00 01 11 10
0 X X 0 1

1 X M.C.
X JOSÉ
1 ARMANDO
1 LARA GONZÁLEZ

Figura 2.18.- Mapa K para K0.

Relacionando los dos “1” lógicos de las casillas 3 y 6 con las “X” de las casillas 0 y 4
se obtendrá el término 𝐱̅. Por otro lado relacionando los dos “1” lógicos de las casillas 6 y 7 con
las “X” de las casillas 4 y 5 se obtiene el término Q1. De esta manera se obtiene en conjunto la
Ecuación 2.4
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
𝐊 𝟎 = 𝐱̅ + 𝐐𝟏 ………….………………….Ecuación 2.4

Tecnológico Nacional de México 60


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Finalmente se plantea el mapa K para la salida denominada Salida como se puede


observar en la Tabla 2.9, la salida únicamente se cumple en la posición 5 es decir habrá un “1”
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
dentro de la casilla 5 del mapa K para la salida, como se muestra en la Figura 2.19.

Q0X
Q1 00 01 11 10
0 0 0 0 0

1 0 1 0 0
M.C. K
Figura 2.19.- Mapa JOSÉ
paraARMANDO
Salida. LARA GONZÁLEZ

En este caso no se puede relacionar ese “1” con ningún otro digito por lo que saldrá
del mapa K de la misma manera como entro, quedando la ecuación para la salida como se
muestra en la Ecuación 2.5.

𝐒 = 𝐐𝟏 ̅̅̅̅
𝐐𝟎 𝐱………….………………….Ecuación 2.5
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez que hemos obtenido las cinco ecuaciones podemos enlistarlas como se
muestra a continuación:

1. 𝐉𝟏 = 𝐐𝟎 𝐱̅
2. 𝐊 𝟏 = 𝐱 + 𝐐𝟎
3. ̅̅̅̅𝟏 𝐱
𝐉𝟎 = 𝐐
4. 𝐊 𝟎 = 𝐱̅ + 𝐐𝟏
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
5. 𝐒 = 𝐐𝟏 ̅̅̅̅
𝐐𝟎 𝐱

Con estas Ecuaciones de Estado es posible proceder al desarrollo de la máquina de


estados físicamente con circuitos integrados discretos o bien haciendo uso de un lenguaje de
descripción de hardware, lo cual se desarrollara más adelante.

[Link]
Ejemplo JOSÉ
FSMARMANDO LARA
tipo Moore GONZÁLEZ
para obtención de Ecuaciones de Estado.
En esta sección se empleará el ejemplo del diseño de una máquina de estado tipo
Moore, consistente en un circuito digital que muestra la cuenta ascendente de 0 a 3 y

Tecnológico Nacional de México 61


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

descendente de 3 a 0. Este ejemplo se ha venido desarrollando en el presente trabajo desde el


punto 2.2 donde se obtuvo el diagrama de estado y el diagrama ASM de dicha máquina.

Posteriormente en el punto 2.3.1 se obtuvo la Tabla de Estados de la FSM para el


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
contador ascendente y descendente de la cual se partirá para la obtención de las ecuaciones de
estado. En la Tabla 2.10 se muestra nuevamente la tabla de Estados codificada y excitada para
la máquina de estado tipo Moore que cuenta de forma ascendente y descendente.

Tabla 2.10 Tabla de Estados Codificada de la FSM tipo Moore.


Estado Actual Estado Siguiente Salidas
Q1t Q0t x Q1t+1 Q0t+1 J1 K1 J0 K0 S1 S0
0 0 0 0 1 0 X 1 X 0 0
0 0 1 1 1 M.C. JOSÉ
1 ARMANDO
X 1 LARA
X GONZÁLEZ
0 0
0 1 0 1 0 1 X X 1 0 1
0 1 1 0 0 0 X X 1 0 1
1 0 0 1 1 X 0 1 X 1 0
1 0 1 0 1 X 1 1 X 1 0
1 1 0 0 0 X 1 X 1 1 1
1 1 1 1 0 X 0 X 1 1 1

[Link]
JOSÉ ARMANDO
esta LARA
tabla, sería GONZÁLEZ
posible extraer las ecuaciones directamente, pero resulta más
conveniente reducir dichas ecuaciones a través de mapas de Kanaugh, también conocidos como
mapas K, con la finalidad de simplificar el circuito y hacer más sencilla su implementación
física o bien para simplificar el código cuando se desarrolla un programa en un lenguaje HDL
(Lenguaje de Descripción de Hardware).

Una vez que se cuenta con la tabla de estados excitada y codificada que se muestra en la
Tabla 2.10, se procederá a la obtención de las ecuaciones de estado de la FSM tipo More, donde
se deben obtener 6 ecuaciones, ya que hay que M.C. JOSÉ ARMANDO
recordar que se haránLARA GONZÁLEZ
mapas K para las cuatro
entradas de los flip-flops y las dos salidas (J1, K1, J0, K0, S1 y S0).

Es conveniente recalcar que las variables de los mapas K serán los Estados Actuales
y la variable de externa x, por lo tanto las estados actuales y la variable externa darán la
numeración de los mapas K.

[Link]
JOSÉ ejemplo
ARMANDOpara el primer
LARA estado de la Tabla 2.10 donde Q1t =0, Q0t =0 y x=0, esa
GONZÁLEZ
será la casilla 0 en el mapa K y en el segundo estado, donde Q1t =0, Q0t =0 y x=1 será la casilla
1 y así sucesivamente. De esta forma al llenar el mapa K para J1, se tendrá un “0”en las casillas
0 y 3 de acuerdo con la columna de J1 de la Tabla 2.10, mientras que en las casillas 1 y 2 se

Tecnológico Nacional de México 62


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

tendrá un “1”. Finalmente en las casillas del 4 al 7 se tendrán X. Es conveniente recordar que X
tiene un valor de “no importa”.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


De acuerdo con lo mencionado anteriormente el mapa K para J1 quedará lleno como
se muestra en la Figura 2.20

Q0X
Q1 00 01 11 10
0 0 1 0 1

1 X X JOSÉ
M.C. X ARMANDO
X LARA GONZÁLEZ
Figura 2.20.- Mapa K para J1.

Una vez que ya se ha llenado el mapa K se procederá a vaciarlo para extraer la primera
ecuación de estado correspondiente a J1, agrupando el “1” de la posición 1 del mapa con la X de
la posición 5 y el “1” de la posición 5 con la X de la posición 6, como se muestra en la Figura
2.21
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Q0X
Q1 00 01 11 10
0 0 1 0 1

1 X X X X

Figura 2.21.- Mapa K para J1.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Como se puede observar en la Figura 2.21, en el par de datos formados por el “1” de
la posición 1 con la X de la posición 5 del mapa, Q1 cambia de “0” a “1” por lo que se elimina,
mientras que Q0 permanece en “0” y x permanece en “1” quedando el termino ̅̅̅̅ 𝐐𝟎 𝐱. Por otro
lado para el par de datos formado por el “1” de la posición 5 con la X de la posición 6, Q1 cambia
también de “0” a “1” por lo que se elimina, mientras que Q0 se mantiene en “1” y X se mantiene
en “0”, quedando el termino 𝐐𝟎 𝐱̅, por lo que la ecuación completa para la entrada J1 será la que
se escribe en la Ecuación 2.6.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
̅̅̅̅𝟎 𝐱 + 𝐐𝟎 𝐱̅ = 𝐐𝟎 ⊕ 𝐱 …………….………………….Ecuación 2.6
𝐉𝟏 = 𝐐

Tecnológico Nacional de México 63


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

De esta misma manera se obtendrán las cinco ecuaciones faltantes, llenando los mapas
K a partir de la Tabla de Estados y extrayendo la ecuación de estado.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A continuación, siguiendo este mismo procedimiento, se procede a llenar el mapa K para la
entrada K1, el cual quedará lleno como se muestra en la Figura 2.22.

Q0 X
Q1 00 01 11 10
0 X X X X

1 0 1 0 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 2.22.- Mapa K para K1.

Relacionando los grupos de datos, como se muestra en la Figura 2.22, se obtendrá la


ecuación para K1, la cual se muestra en la Ecuación 2.7.

̅̅̅̅𝟎 𝐱 + 𝐐𝟎 𝐱̅ = 𝐐𝟎 ⊕ 𝐱 …………….………………….Ecuación 2.7


𝐊𝟏 = 𝐐
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Para el caso del mapa K de J0, nuevamente tomando en consideración la Tabla de


Estados mostrada en la Tabla 2.10, en la columna correspondiente a J0, se tendrá el mapa
mostrado en la Figura 2.23.

Q0X
Q1
00 01 11 10
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0 1 1 X X

1 1 1 X X
Figura 2.23.- Mapa K para J0.

Relacionando los cuatro “1” lógicos de la izquierda del mapa K con las cuatro X de la
derecha del mapa, como se muestra en la Figura 2.23 se obtiene la Ecuación 2.8
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

𝐉𝟎 = 𝐕𝐜𝐜………….………………….Ecuación 2.8

Tecnológico Nacional de México 64


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Posteriormente tenemos el mapa K para la entrada K0, tomando en consideración la


tabla de estados en la columna K0, tendremos el mapa mostrado en la Figura 2.24.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Q0X
Q1
00 01 11 10
0 X X 1 1

1 X X 1 1
Figura 2.24.- Mapa K para K0.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Relacionando los cuatro “1” lógicos de la derecha del mapa K con las cuatro X de la
izquierda del mapa, como se muestra en la Figura 2.24 se obtiene la Ecuación 2.9

𝐊 𝟎 = 𝐕𝐜𝐜………….………………….Ecuación 2.9

Posteriormente se plantea el mapa K para la salida denominada S1, quedando el mapa


M.C.
K como seJOSÉ ARMANDO
muestra LARA
en la Figura GONZÁLEZ
2.25.

Q0X
Q1
00 01 11 10
0 0 0 0 0

1 1 1 1 1
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 2.25.- Mapa K para S1.

En este caso se relacionan los cuatro unos de la parte inferior del mapa, quedando la
ecuación para la salida como se muestra en la Ecuación 2.10.

𝐒𝟏 = 𝐐𝟏 ………….………………….Ecuación 2.10
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Finalmente se plantea el mapa K para la salida S0, tomando de igual manera en
consideración la columna correspondiente a la salida S0 en la Tabla 2.10. De tal manera que el
mapa K para dicha salida, quedará integrado como se muestra en la Figura 2.26.

Tecnológico Nacional de México 65


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

QX
Q1 0
00 01
M.C. JOSÉ ARMANDO LARA GONZÁLEZ 11 10
0 0 0 1 1

1 0 0 1 1
Figura 2.26.- Mapa K para S0.

En este caso se relacionan los cuatro unos de la derecha del mapa, como se muestra en
la Figura 2.26, quedando la ecuación para la salida S0 como se muestra en la Ecuación 2.11.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

𝐒𝟎 = 𝐐𝟎 ………….………………….Ecuación 2.11

Una vez que hemos obtenido las seis ecuaciones podemos enlistarlas como se muestra
a continuación:

1. 𝐉𝟏 = 𝐐𝟎 ⊕ 𝐱
2.M.C.
𝐊 𝟏JOSÉ
= 𝐐𝟎ARMANDO
⊕𝐱 LARA GONZÁLEZ
3. 𝐉𝟎 = 𝐕𝐜𝐜
4. 𝐊 𝟎 = 𝐕𝐜𝐜
5. 𝐒𝟏 = 𝐐𝟏
6. 𝐒𝟎 = 𝐐𝟎

Con estas Ecuaciones de Estado es posible proceder al desarrollo de la máquina de


estados físicamente con circuitos integrados discretos o bien haciendo uso de un lenguaje de
descripción de hardware, lo cual se desarrollara más adelante.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

2.3.3. Programación del archivo .VHD

En esta sección del libro se aborda la implementación de las Maquinas de estado de


Moore y Mealy utilizando un lenguaje de descripción de hardware, el cual en este caso será el
lenguaje VHDL. En otras palabras, se desarrollarán el archivo fuentes en VHDL para dichas
M.C. JOSÉ
maquinas, ARMANDO
los cual LARA GONZÁLEZ
serán sintetizados y depurados y posteriormente en los puntos siguientes
serás simulados y descargados a una FPGA para su implementación. A continuación se
desarrollarán los archivos .VHD para una máquina de Moore y Mealy.

Tecnológico Nacional de México 66


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Obtención del archivo .VHD para una FSM tipo Moore

Para cumplir con lo planteado anteriormente, se desarrollará el archivo .VHD para una
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
FSM tipo Moore, para un circuito digital el cual deberá desplegar la cuenta binaria de forma
ascendente de 0 a 3 y de forma descendente de 3 a 0, dependiendo del valor de x. Se requiere
una sola variable externa x y cuatro estados correspondientes a los números que se desean contar
de forma ascendente y descendente. Dicho ejemplo fue analizado en la sección 2.2, donde se
obtuvieron los Diagramas de Estado y ASM del mismo.

Como se puede apreciar en la Figura 2.27 la máquina de estado en cuestión, está formada
básicamente por tres bloques correspondientes a la lógica del siguiente estado, la memoria de
estado y la lógica de salida. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

D Q
S(1,0)
PROXIMO ACTUAL
LOGICA DEL LOGICA DE SALIDA
SIGUIENTE MEMORIA DE MOORE
X ESTADO ESTADOS

CLK ( FLIP- FLOP )

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


RESET

Figura 2.27.- Diagrama de la máquina de estado tipo Moore.

De esta manera se puede determinar que el diagrama de bloques de la entidad de la


máquina de estado tipo Moore seria el que se muestra en la Figura 2.28.

X M.C. JOSÉ ARMANDO LARA GONZÁLEZ


FSM S(1,0)
CLK
MOORE
RST

Figura 2.28.- Diagrama de bloques de la entidad de la FSM tipo Moore

Como ya se ha mencionado en la entidad se describen las entradas y salidas del circuito.


Cada una de las señales de entrada y salida en una entidad son referidas como puerto, el cual es
M.C.
similar JOSÉterminal
a una ARMANDO(pinLARA GONZÁLEZ
o bus) de un símbolo esquemático. Todos los puertos que son
declarados deben tener un nombre, un modo y un tipo de dato. Para continuar con el desarrollo
del problema, primeramente se describe la entidad de la máquina de estado tipo Moore para el

Tecnológico Nacional de México 67


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

contador ascendente y descendente, la cual quedaría estructurada en VHDL como se muestra en


el siguiente listado.

entity moorelibro is
M.C. JOSÉ ARMANDO
Port ( clk : LARA GONZÁLEZ
in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;

En la entidad descrita anteriormente, se ha declarado como entradas los pines clk, rst y
x (STD_LOGIC), mientras que s se ha descrito como bus (STD_LOGIC_VECTOR (1 downto 0))
de salida de 2 bits.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Posteriormente, se procede a elaborar el registro de estado o memoria de estado,


recordando que este registro consta básicamente de un flip-flop tipo D, el cual quedaría descrito
como se muestra en el listado siguiente.

reg: process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process reg;

Es la descripción de este registro de estado en VHDL del listado anterior, se puede


observar que se encuentra dentro de un process, de igual manera se describirán dentro de un
process la lógica del siguiente estado y la lógica de salida, por lo que el orden en que se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
describan dentro del programa completo no importará.

Como se puede observar también en la descripción del registro de estado, dentro del
process solo se ha considerado una sola variable sensible siendo esta el clk, a pesar de que
existen otras entradas en el flip-flop (próximo y rst), la razón es porque el flip-flop solo tendrá
cambios cuando exista un flanco de transición activo en el pulso de reloj. En este código se
verifica en el primer if si existe un flanco de transición positiva en el pulso de reloj y si esto se
cumple, en el siguiente if se verifica si esta activada la señal de reset y en caso positivo a la
salidaM.C.
se leJOSÉ
asigna el estado LARA
ARMANDO I0 (estado inicial), en caso contrario el dispositivo actúa como un
GONZÁLEZ
registro transparente asignando la D a la salida Q (actual=próximo).

Tecnológico Nacional de México 68


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Posteriormente se desarrollará el código para el bloque de la lógica del estado siguiente,


para su desarrollo es conveniente recordar de acuerdo con el diagrama de bloques de la Figura
2.27 que las entradas de este bloque son el estado actual de la máquina de estado y la variable
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
externa x. De esta manera se hará uso de un process donde las variables sensibles serán las
entradas actual y x, dentro del cual se tendrá un case para evaluar el estado actual de la FSM
en cada uno de los cuatro estados donde esta puede estar. El código correspondiente a la lógica
del estado siguiente es la que se muestra en el siguiente listado.

prox: process(actual, x)
begin
case actual is
when I0 => case x is
when '0' => proximo <= I1; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when others => proximo <= I3;
end case;

when I1 => case x is


when '0' => proximo <= I2;
when others => proximo <= I0;
end case;

when I2 => case x is


when '0' => proximo <= I3;
M.C. JOSÉwhen
ARMANDO
othersLARA GONZÁLEZ
=> proximo <= I1;
end case;

when I3 => case x is


when '0' => proximo <= I0;
when others => proximo <= I2;
end case;
end case;
end process prox;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En el primer case de este listado, se describe que cuando la FSM se encuentre en el
estado I0, verifique la entrada externa y si esta es igual a “0” el próximo estado que deberá tomar
la FSM será I1, lo que indica una cuenta ascendente. Por otro lado si estando en I0 la FSM la
variable externa tiene un valor de “1”, el siguiente estado de la FSM será I3 con lo que se estará
realizando una cuenta descendente. Siguiendo esta misma lógica se evalúan los tres estados
restante (I1, I2 e I3).

Finalmente se desarrolla la lógica de salida de la FSM, para llevar a cabo esta tarea se
M.C.
pueden JOSÉ
usar ARMANDO
muchas LARA de
herramientas GONZÁLEZ
programación en VHDL como es el caso de un with-select
pero en esta ocasión se propone el uso de un case para desarrollar este bloque.

Tecnológico Nacional de México 69


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En este bloque básicamente lo que se hace es asignar un valor de salida a cada uno de
los estados, como se puede apreciar en el siguiente listado correspondiente al código de la lógica
de salida. Por ejemplo cuando la FSM este en el estado I0, la salida s tomará el valor de “00” y
cuando se encuentre la FSM en el estado I1, s tomará el valor de “01” y así sucesivamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
act: process(actual)
begin
case actual is
when I0 => s <= "00";
when I1 => s <= "01";
when I2 => s <= "10";
when I3 => s <= "11";
end case;
end process act;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


De esta manera quedaría terminado el programa para la FSM tipo Moore, que cuenta de
forma ascendente y descendente de 0 a 3 y de 3 a 0 respectivamente. En el siguiente listado se
muestra el programa completo de dicho ejemplo.
-- Company: TECNOLOGICO NACIONAL DE MEXICO
-- Engineer: JOSE ARMANDO LARA GONZALEZ

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity moorelibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;

architecture Behavioral of moorelibro is

type estados is (I0,I1,I2,I3);


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
signal actual, proximo: estados;

begin
prox: process(actual, x)
begin

case actual is
when I0 => case x is
when '0' => proximo <= I1;
when others => proximo <= I3;
end case;
M.C. JOSÉwhen
ARMANDO LARA GONZÁLEZ
I1 => case x is
when '0' => proximo <= I2;
when others => proximo <= I0;
end case;

Tecnológico Nacional de México 70


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

when I2 => case x is


when '0' => proximo <= I3;
when others => proximo <= I1;
end case;
M.C. JOSÉwhen
ARMANDO LARA GONZÁLEZ
I3 => case x is
when '0' => proximo <= I0;
when others => proximo <= I2;
end case;
end case;
end process prox;

act: process(actual)
begin
case actual is
when I0 => s <= "00";
when I1 => s <= "01"; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when I2 => s <= "10";
when I3 => s <= "11";
end case;
end process act;

reg: process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
then actual <= I0;
M.C. JOSÉelse
ARMANDO
actualLARA GONZÁLEZ
<= proximo;
end if;
end if;
end process reg;
end Behavioral;

Una vez que se cuenta con este código, se puede obtener el archivo .VHD, para lo cual
se hará uso, como ya se había mencionado en el capítulo I, del programa ISE Desing Suite
donde se editaran, sintetizaran, depuraran y simularán los programas desarrollados en esta
sección. En la Figura 2.29 se muestra el icono M.C. JOSÉ ARMANDO
correspondiente LARA GONZÁLEZ
al programa que será empleado.
De esta manera se debe de ver el icono del programa una vez que ha sido instalado en la
computadora.

Figura 2.29. Icono del programa


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez instalado el programa se dará doble click en el icono de la Figura 2.29 para
ejecutar dicho programa apareciendo la imagen de la Figura 2.30. En esta pantalla se selecciona

Tecnológico Nacional de México 71


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

en la barra de herramientas la opción File y dentro de este se selecciona New Project, como se
muestra en el recuadro en la pantalla principal de la Figura 2.30. Una vez que se ha realizado lo
anterior aparecerá la ventana de la Figura 2.31 para crear un nuevo proyecto.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.30. Pantalla principal del programa ISE Desing Suite.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En esta ventana de la Figura 2.31, se establecerá el nombre del proyecto, el cual en este
ejemplo se le ha asignado del nombre de FSMmoore como se puede observar en la ventana
mencionada. Así mismo se ha determinado una carpeta donde se guardará dicho proyecto,
siendo esta la ruta C:\PRUEBAS-CURSO. También dentro de esta ventana se puede agregar
de forma opcional un comentario para describir el funcionamiento del proyecto. Finalmente se
define el tipo de fuente para el proyecto como HDL. Posteriormente seleccione Next.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.31. Ventana para crear nuevo proyecto en VHDL.

Tecnológico Nacional de México 72


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Posteriormente aparecerá la ventana project setting en la cual como su nombre lo dice


sirve para la configuración del proyecto, la cual es mostrada en la Figura 2.32, en esta ventana
se describirán el tipo de dispositivo en este caso la FPGA que se va a programar así como el
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
lenguaje de programación.

Como se puede apreciar se establece la categoría del producto, la familia, el número de


parte del dispositivo, el empaquetado, la velocidad, la herramienta de síntesis, el simulador, el
lenguaje preferido, especificaciones de propiedad en el archivo de proyecto y la versión de
VHDL.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

[Link]
Figura 2.32. Ventana para crear JOSÉ proyecto
ARMANDO LARA GONZÁLEZ
en VHDL.

Una vez que se han definido los parámetros de la ventana de la Figura 2.32, se selecciona
la opción Next con lo que emergerá la ventana de Project Summary o ventana de resumen del
proyecto de la Figura 2.33. En esta ventana se muestra un resumen de las especificaciones
hechas por el usuario, donde se podrá verificar si son los datos que el usuario desea especificar.

M.C.
En JOSÉ ARMANDO
caso de que estosLARA
datosGONZÁLEZ
especificados sean correctos, se selecciona la opción Finish
para pasar al siguiente paso y en caso de que exista algún error en las definiciones de estos
parámetros, se selecciona la opción Back para hacer las correcciones pertinentes.

Tecnológico Nacional de México 73


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.33. Ventana de resumen del proyecto

Después de que se haber verificado el resumen y de seleccionar la opción Finish en la


ventana de resumen del proyecto, aparecerá la ventana de la Figura 2.34 correspondiente a la
M.C.
ventana deJOSÉ ARMANDO
trabajo LARAISE
del programa GONZÁLEZ
Desing Suite.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.34. Ventana de trabajo del programa ISE Desing Suite.

Tecnológico Nacional de México 74


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En esta ventana de la Figura 2.34 seleccionamos en la barra de herramientas la opción


Project y luego seleccionamos New Source como se muestra en el recuadro de la figura, con
lo que aparecerá la ventana de la Figura 2.35 correspondiente a la ventana de selección de tipo
de fuente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.35. Ventana de selección de tipo de fuente.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Es esta ventana de selección de tipo de fuente, básicamente se selecciona la opción
VHDL Module y además se establece el nombre del archivo que puede ser igual o distinto al
nombre del proyecto. Como se puede ver en este ejemplo se le ha dado el nombre de moorelibro
mientras que la ruta quedo definida como C:\PRUEBAS-CURSO\FMS-moore mismo que ya
había sido definido al inicio para la ubicación del proyecto. Posteriormente se aplica un click en
la opción Next con lo que aparecerá la ventana de la Figura 3.36 llamada Define Module.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.36. Ventana Define Module.

Tecnológico Nacional de México 75


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En esta ventana de la Figura 2.36 como se puede observar, se definen los puertos para el
modulo el cual consta de tres entradas tipo bit (clk, rst y x) y una salida tipo vector de dos bits
llamada s(1,0). Una vez definidas estas entradas y salidas del módulo se aplica un click en la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
opción Next con lo que aparecerá una ventana de resumen la cual se muestra en la Figura 2.37.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.37. Ventana de resumen de Define Module.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Esta ventana permite al usuario verificar que los puertos de entrada y salida sean los
correctos para el modulo y en ese caso se debe aplicar un click en la opción Finish. En caso de
que los puertos de entrada y salida que aparecen en este resumen sean incorrectos se debe aplicar
un click en la opción Back con la finalidad de regresar a la ventana anterior y corregir los errores
cometidos. Una vez que se ha verificado que los puertos de entrada y salida del módulo sean los
correctos, después de aplicar un click en la opción Finish aparecerá la ventana de la Figura 2.38,
que corresponde al espacio de trabajo del programa ISE Desing Suite. Como se puede observar aparece
ya definida la entidad dentro del espacio de trabajo, soloJOSÉ
M.C. faltaría editar el programa
ARMANDO que se desarrollado
LARA GONZÁLEZ
en el inicio de este tema, el cual sería editado en el área marcada con el texto AGREGAR CODIGO en
el siguiente listado extraído de la ventana de trabajo del programa.

entity moorelibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC_VECTOR (1 downto 0));
end moorelibro;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
architecture Behavioral of moorelibro is
begin
AGREGAR CÓDIGO
end Behavioral;

Tecnológico Nacional de México 76


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.38. Ventana de trabajo del programa ISE Desing Suite.

Ya que el código completo ha sido agregado, se procede a la síntesis del programa, dando
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
un click en la opción Synthesize-XST en la ventana del recuadro 1 de la Figura 3.39.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.39. Síntesis del programa en VHDL.

Tecnológico Nacional de México 77


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Después de unos segundos de síntesis el programa arrojara el mensaje “Process "Synthesize -


XST" completed successfully” en la ventana inferior, denominada Console marcada dentro
del recuadro 2, de la Figura 3.39. Lo anterior indicará que el programa ha sido sintetizado
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
exitosamente y que no tiene errores y por ende se cuenta ya con el archivo .VHD listo para el
proceso de simulación.

Si el programa tuviera un error de sintaxis, en la ventana Console mostraría el mensaje


“Process "Synthesize - XST" failed”. Esto indicará que el programa tiene un error de sintaxis
por lo que no pudo ser sintetizado, es decir, se requiere depurar el error para poder sintetizar el
programa.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En cuanto a los errores de lógica, se requiere el proceso de la simulación con la finalidad
de comprobar el correcto funcionamiento del programa. Este forma de verificar el
funcionamiento del programa será abordado a detalle en el punto 2.3.4 del presente trabajo.

Obtención del archivo .VHD para una FSM tipo Mealy

M.C. JOSÉ ARMANDO


A continuación LARA GONZÁLEZ
se desarrollará el archivo .VHD para una FSM tipo Mealy para un
circuito digital el cual detecte una secuencia de números binarios de tres dígitos. Considerando
una entrada x y una salida s la cual se activará cuando la secuencia mencionada sea introducida
en x correctamente. Este sistema es para una cerradura electrónica la cual deberá abrirse cuando
se introduzca correctamente la secuencia de números “101”. Este ejemplo se ha venido
empleando en los puntos anteriores de este trabajo, donde se determinaron sus diagramas de
estado, diagramas ASM, tabla de estado y ecuaciones de estado.

M.C.
Como se puede apreciar en la Figura 2.40 JOSÉ ARMANDO
la máquina de estadoLARA GONZÁLEZ
en cuestión, está formada
básicamente por tres bloques correspondientes a la lógica del siguiente estado, la memoria de
estado y la lógica de salida.

PROXIMO ACTUAL LÓGICA DE SALIDA


D Q MEALY
S

X MEMORIA DE
ESTADOS
LÓGICA DEL
SIGUIENTE CLK (FLIP- FLOP)
ESTADO
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RESET

Figura 2.40 Diagrama de la máquina de estado tipo Mealy.

Tecnológico Nacional de México 78


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Considerando el diagrama de bloques de la FSM tipo Mealy de la Figura 2.40, se puede


determinar que el diagrama de bloques de la entidad de la máquina de estados, misma que se
muestra en la Figura 2.41.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

FSM S
CLK
MEALY
RST

Figura 2.41.- Diagrama de bloques de la entidad de la FSM tipo Mealy


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Con este diagrama de bloques de la entidad, resulta relativamente fácil continuar con el
desarrollo del problema, primeramente se describe la entidad de la máquina de estado tipo Mealy
para el circuito detector de secuencia de los números digitales “101”, la cual quedaría
estructurada en VHDL como se muestra en el siguiente listado.

entity mealylibro is
Port ( clk : in STD_LOGIC;
M.C. JOSÉ ARMANDO
rst LARA
: in GONZÁLEZ
STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC);
end mealylibro;

En la entidad descrita anteriormente, se ha declarado como entradas los pines clk, rst y
x (STD_LOGIC), mientras que s se ha descrito como un pin de salida también del tipo
(STD_LOGIC). En esta entidad todas las entradas y salidas del circuito, son tipo bit, es decir no
tiene entradas o salidas tipo bus.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Posteriormente, se procede a elaborar el registro de estado o memoria de estado,


recordando que este registro consta básicamente de un flip-flop tipo D, el cual quedaría descrito
como se muestra en el listado siguiente.

process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process;

Tecnológico Nacional de México 79


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Es la descripción de este registro en VHDL del listado anterior, se puede observar que
se encuentra dentro de un process, de igual manera se describirán dentro de un process la lógica
del siguiente estado y la lógica de salida, por lo que el orden en que se describan dentro del
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
programa completo no importará.

Como se puede observar también en la descripción el registro de estado, dentro del


process solo se ha considerado una sola variable sensible siendo esta el clk, a pesar de que
existen otras entradas en el flip-flop (próximo y rst), la razón es porque el flip-flop solo tendrá
cambios cuando exista un flanco de transición activo en el pulso de reloj. En este código se
verifica en el primer if si existe un flanco de transición positiva en el pulso de reloj y si esto se
cumple, en el siguiente if se verifica si esta activada la señal de reset y en caso positivo a la
salida se le asigna el estado I0 (estado inicial), M.C. JOSÉ
en caso ARMANDO
contrario LARA GONZÁLEZ
el dispositivo actúa como un
registro transparente asignando la D a la salida Q (actual=próximo).

Posteriormente se desarrollará el código para el bloque de la lógica del estado siguiente


y la lógica de salida dentro de un mismo process, esto se debe a que en la máquina de Moore
la salida solamente depende del estado actual, mientras que en la Mealy la salida depende del
estado actual y de la entrada externa. En otras palabras, en la máquina de Moore cada estado
tiene asociada un valor de la salida, lo cual no sucede en la máquina de Mealy donde la FSM
puedeM.C. JOSÉ
pasar a unARMANDO LARA GONZÁLEZ
estado específico y tomar valores diferentes en un mismo estado dependiendo
del valor de la entrada.

Continuando con el desarrollo, se hará uso de un process donde las variables sensibles
serán las entradas actual y x, dentro del cual se tendrá un case para evaluar el estado actual y el
valor de la variable de entrada x y en función de esos valores tomar la decisión de cambio de
estado y de activar o no la salida s de la FSM tipo Mealy.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


De esta manera se evalúan los cuatro estados posibles de la máquina de estados (I0, I1,
I2 e I3). El código correspondiente a la lógica del estado siguiente y la lógica de salida para
la FSM tipo Mealy detectora de la secuencia “101”es la que se muestra en el siguiente listado.

En este listado en VHDL se puede ver en el primer case, como se evalúa el estado actual
I0 y si x es igual a “0” la maquina se quedará en el mismo estado y la salida no se activa. De
igual forma estando la maquina en I0 si x es igual a “1” la maquina pasa al estado I1 debido a
que el primer número de la secuencia es “1” pero la salida s no se activa, debido a que
M.C. JOSÉ
únicamente ARMANDO
ha recibido LARAdigito
el primer GONZÁLEZ
correcto de la secuencia.

Tecnológico Nacional de México 80


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

process(actual, x)
begin
case actual is
M.C. JOSÉwhen I0 => LARA GONZÁLEZ
ARMANDO
if x='0' then proximo <= I0; s <= '0';
else proximo <= I1; s <= '0';
end if;

when I1 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I1; s <= '0';
end if;

when I2 =>
if x='0' then proximo <= I2; s <= '0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
else proximo <= I0; s <= '1';
end if;

when I3 =>
if x='0' then proximo <= I0; s <= '0';
else proximo <= I0; s <= '0';
end if;
end case;
end process;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


De esta manera quedaría terminado el programa para la FSM tipo Mealy, que detecta
una secuencia de entrada “101”. En el siguiente listado se muestra el programa completo de
dicho ejemplo.

-- Company: TECNOLOGICO NACIONAL DE MEXICO


-- Engineer: JOSE ARMANDO LARA GONZALEZ

library IEEE;
use IEEE.STD_LOGIC_1164.ALL; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity mealylibro is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
x : in STD_LOGIC;
s : out STD_LOGIC);
end mealylibro;

architecture Behavioral of mealylibro is

type estados is (I0,I1,I2,I3);


M.C. JOSÉ ARMANDO
signal LARA GONZÁLEZ
actual, proximo: estados;
begin

process(actual, x)
begin

Tecnológico Nacional de México 81


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

case actual is
when I0 =>
if x='0' then proximo <= I0; s <= '0';
else proximo <= I1; s <= '0';
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
when I1 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I1; s <= '0';
end if;

when I2 =>
if x='0' then proximo <= I2; s <= '0';
else proximo <= I0; s <= '1';
end if;

when I3 => M.C. JOSÉ ARMANDO LARA GONZÁLEZ


if x='0' then proximo <= I0; s <= '0';
else proximo <= I0; s <= '0';
end if;
end case;
end process;

process(clk)
begin
if clk'event and clk='1'
then if rst = '1'
M.C. JOSÉthen
ARMANDO
actualLARA GONZÁLEZ
<= I0;
else actual <= proximo;
end if;
end if;
end process;
end Behavioral;

Una vez que se cuenta con este código, se puede obtener el archivo .VHD, para lo cual
se harán los mismos pasos que en el ejemplo de la FSM tipo Moore que cuenta de forma
ascendente y descendente, únicamente [Link]É ARMANDO
código LARA GONZÁLEZ
de programación de la máquina de
estado, pero el procedimiento es exactamente el mismo.

2.3.4. Simulación del archivo .VHD.

La simulación de circuitos electrónicos a través de software es una herramienta que


ayuda a crear circuitos electrónicos, los cuales posteriormente se quieren llevar a la práctica real.
Este proceso de simulación de circuitos electrónicos, ayuda a entender mejor el funcionamiento
del circuito, verificar su correcto funcionamiento y ubicar las fallas dentro del mismo de manera
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
sencilla y eficiente, con la finalidad de corregirlas antes de que dicho proyecto sea llevado a la
práctica real. Para el caso de los circuitos que se están trabajando en este libro, se hará uso del
mismo programa ISE Desing Suite el cual cuenta con una herramienta integrada de simulación
llamada Isim.

Tecnológico Nacional de México 82


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Para cumplir con este punto, se hará la simulación de la máquina de Moore, que se ha
venido trabajando, misma que consiste de una máquina de estado que cuenta de forma
ascendente y descendente de 0 a 3 y de 3 a 0, respectivamente. Es conveniente recordar que se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
obtuvo el archivo .VHD para dicha máquina de estado en el punto 2.3.3, el cual será simulado
para comprobar su correcto funcionamiento, en esta sección. En la Figura 2.42 se muestra la
pantalla principal del programa ISE Desing Suite con el programa .VHD de la FSM tipo Moore
mencionada anteriormente.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.42.- Ventana principal del ISE Desing Suite.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como se puede ver en la Figura 2.42 se ha marcado con un recuadro la ventana
denominada View donde se deberá seleccionar la opción Simulation con lo que aparecerá la
ventana de la Figura 2.43.

Para hacer la simulación del programa fuente, se requiere primeramente seleccionar el


programa que se desea simular, aunque en este ejemplo solo existe un solo programa, este debe
ser seleccionado como se muestra en la Figura 2.43 en el recuadro número 1. Posteriormente se
M.C. JOSÉ
dará doble clickARMANDO
en el iconoLARA GONZÁLEZ
llamado Simulate Behavioral Model, mostrado en el recuadro
número 2. Acto seguido aparecerá la ventana de simulación que se muestra en la Figura 2.44.

Tecnológico Nacional de México 83


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.43.- Ventana del ISE Desing Suite para simulación.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.44.- Ventana de simulación del ISE Desing Suite.

Tecnológico Nacional de México 84


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Como se puede observar en la ventana de simulación de la Figura 2.44, se tiene un


recuadro marcado con el número 1, donde se han destacado los puertos de entrada y salida y los
estados de la FSM. Las entradas clk, rst y x inicialmente aparecen con una U lo que indica que
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
inician con un valor desconocido, mientras que la salida s(1,0) inicia con un valor de “00”. Por
otro lado el estado actual inicia en I0 y estado proximo inicia con I3.

Para iniciar con la simulación es necesario forzar el clk y las entradas rst y x como se
explicara a continuación y una vez establecidos los valores deseados para dichas variables, se
da un click en el icono de un paso de simulación (run for the time specified), marcado con el
recuadro número 2 en la Figura 2.44.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Se hará uso de la Figura 2.45 para mostrar la manera de forzar la señal de entrada de
reloj (clk), para esto se coloca el cursor donde está la U del clk, en la posición marcada en el
recuadro número 1 y se aplica un click derecho, para que aparezca la ventana que se muestra en
el centro de la Figura 2.45. En esta ventana central se seleccionará la opción Force Clock
marcada con el recuadro número 2.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.45.- Ventana de simulación para forzar reloj.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez realizadas las acciones descritas anteriormente aparecerá la ventana Define
Clock que se muestra en la Figura 2.46

Tecnológico Nacional de México 85


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.46.- Ventana de simulación Define Clock.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En esta ventana Define Clock, secoloca un “0” en Leading Edge Value y un “1” en
Trailing Edge Value para que el reloj active el circuito con flancos de transición positiva (FTP),
como se muestra en el recuadro número 1. Por otro lado en el Period, el cual es marcado con el
recuadro número 2, se propone un periodo de 100ns para cada pulso de reloj. Por cada paso de
simulación el programa mandará 10 ciclos de reloj. Una vez establecidos estos tres parámetros,
se dará un click en la opción OK, con lo que quedara determinada o forzada la señal de reloj.

[Link]
A continuación se deberá forzar la señal JOSÉ ARMANDO
entrada rst, esLARA
decir GONZÁLEZ
establecer un valor
determinado a dicha entrada, con la finalidad de proceder a la simulación de la FSM. En la
Figura 2.47 se muestra la forma de asignar un valor a la entrada rst.

Para forzar un valor en la entrada rst, primeramente se coloca el cursor donde está la U
del rst, en la posición marcada en el recuadro rojo número 1 de la Figura 2.47 y se aplica un
click derecho, para que aparezca la ventana que se muestra en el centro de la figura. En esta
ventana central se seleccionará la opción Force Constant marcada con el recuadro color rojo
número 2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez que se ha hecho lo anterior, aparecerá la ventana Force Selected Signal que se
muestra en la Figura 2.48.

Tecnológico Nacional de México 86


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.47.- Ventana de simulación para forzar el reset.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.48.- Ventana Force Selected Signal para forzar el reset

Tecnológico Nacional de México 87


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En la ventana Force Selected Signal se coloca un dato binario de “0” o “1” en la ventana
Force to Value del recuadro número 2. En esta ocasión se ha colocado un cero lógico para esa
señal de rst tome el valor de cero lógico. Es posible cambiar el formato de los numero que se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
van a asignar a la constante en la ventana Value Radix marcada con el recuadro número 1. En
esta ventana se puede cambiar de valor binario a Hexadecimal, Decimal sin signo, decimal con
signo, Octal o ASCII. En esta ocasión lo dejamos en binario.

Ya que se han realizado las asignaciones mencionadas, se selecciona la opción OK en


la ventana Force Selected Signal y con eso quedará forzada la señal de reset.

Finamente se procederá a forzar la M.C. JOSÉ


señal ARMANDO
de entrada x, deLARA
formaGONZÁLEZ
muy semejante a
como se forzó la señal de reset, se coloca el cursor donde está la U de la entrada x, en la posición
marcada en el recuadro rojo número 1 de la Figura 2.49 y se aplica un click derecho, para que
aparezca la ventana que se muestra en el centro de la figura. En esta ventana central se
seleccionará la opción Force Constant marcada con el recuadro color rojo número 2.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉFigura
ARMANDO2.49.- LARA GONZÁLEZ
Ventana de simulación para forzar la entrada externa x.

Después de haber seleccionado la opción Force Constant aparecerá la ventana Force


Selected Signal que se muestra en la Figura 2.50 para forzar la señal de entrada x.

Tecnológico Nacional de México 88


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Como se muestra en el recuadro rojo de la Figura 2.50 se ha colocado un cero lógico


dentro de la ventana Force Value. En estas condiciones es conveniente recordar, que la FSM
contará de 0 a 3, es decir contará de forma cíclica ascendente de acuerdo con el diseño de la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
máquina en cuestión.

Una vez que se ha colocado el cero lógico en la señal de entrada x, se aplica un click en
la opción OK, con lo que quedaría forzada la señal x y por ende, quedarían forzadas todas las
señales que intervienen en la máquina de estado, por lo que ya estaría lista para ser simulada.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. Signal
Figura 2.50.- Ventana Force Selected JOSÉ ARMANDO
para forzar laLARA GONZÁLEZ
entrada x.

Para llevar a cabo la simulación, solamente basta con aplicar un click en el icono de paso
de simulación, el cual se ha circulado en la ventana de simulación de la Figura 2.51. Unos
segundos después aparecerán las gráficas resultantes de la simulación como se puede ver en la
mencionada figura.

Como se puede apreciar en las gráficas de salida de la simulación, del tiempo t0 a t1 los
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
valores de las variables corresponden a los valores iniciales por default del programa antes de
aplicar el paso de simulación. En el periodo comprendido de t1 a t2 se presenta el semiciclo
negativo clk, mientras que rst y x toman el valor de “0” habiendo sido forzados anteriormente
con estos valores. Note como s y actual y no sufren cambios aún, debido a que solo cambiarán

Tecnológico Nacional de México 89


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

con el flanco de transición positiva del pulso de reloj. En el caso de la variable próximo, este si
cambia de I3 a I1, esto se debe a que al estar un valor de x igual a “0” entiende que la cuenta
será ascendente y que si el estado actual es I0, el estado próximo será I1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.51.- Corrida de una simulación con x igual a “0”.

Exactamente cuando inicia el tiempo t2 se presenta el primer flanco de transición


positivo del pulso de reloj (FTP), lo que provoca que la salida s pase de “00” a “01”. En el
segundo FTP la salida cambia a “10”, en el tercer FTP la salida cambia a “11”, mientras que en
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
el cuarto FTP la salida se restablece a “00” y en el quinto FTP inicia nuevamente inicia la cuenta,
cambiando el valor de la salida a “01”. Con esto se comprueba parcialmente el correcto
funcionamiento de la FSM ya que falta forzar el valor de x a “1” y verificar que la máquina de
estado cuente de manera descendente.

Para continuar con la simulación será necesario forzar la señal de entrada externa x a un
valor de “1” con la finalidad de que la FSM cuente ahora de forma descendente. Aplicamos los
pasos aprendidos líneas arriba para hacer el forzado de x a un valor de “1”.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez que se ha realizado el forzado de x y aplicando un click en un paso de


simulación, tendremos los resultados mostrados en la Figura 2.52.

Tecnológico Nacional de México 90


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Como se puede apreciar en las gráficas de salida de la simulación de la Figura 2.52., del
tiempo t0 a t1 los valores de las variables corresponden a los valores con x igual a “0” donde la
maquina estaba contando de forma ascendente. Al aplicar el paso de simulación en t1,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
inmediatamente x toma el valor de “1”. En el periodo comprendido de t1 a t2 se presenta el
semiciclo negativo clk, mientras que rst es “0” y x tiene el valor de “1” habiendo sido forzados
anteriormente con estos valores. Note como s y actual y no sufren cambios aún, debido a que
solo cambiaran con FTP. En el caso de la variable próximo, este si cambia a de I2 a I1, esto se
debe a que al estar un valor de x igual a “1” entiende que la cuenta será descendente y que si el
estado actual es I2, el estado próximo será I1.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.52.- Corrida de una simulación con x igual a “1”.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Exactamente cuando inicia el tiempo t2 se presenta el primer FTP, lo que provoca que
la salida s pase de “10” a “01”. En el segundo FTP la salida cambia a “00”, en el tercer FTP la
salida cambia a “11”, mientras que en el cuarto FTP la salida toma el valor de “10” y en el quinto
FTP la salida cambia a “01” y finalmente el sexto FTP la salida cambia a “00”. Con esto se
comprueba finalmente el correcto funcionamiento de la FSM ya que con estos valores se
comporta como un contador cíclico descendente de 3 a 0.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Con este último paso, se puede asegurar que la FSM está funcionando de acuerdo a lo
esperado y puede ser descargada a una FPGA para su operación real.

Tecnológico Nacional de México 91


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

2.3.5. Obtención del archivo de programación.

Para poder descargar un programa hecho en VHDL a un CPLD o a una FPGA,


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se necesita generar un archivo de programación, que en este caso se trata del archivo .BIT. Hasta
el momento se han generado archivos .VHD, el siguiente paso es partir de este archivo .VHD
para generar el archivo de programación .BIT.

Para explicar la forma de generación del archivo .BIT, nuevamente se hará uso de la
máquina de Moore que cuenta de forma ascendente y descendente de 0 a 3 y de 3 a 0,
respectivamente. Es conveniente recordar que se obtuvo el archivo .VHD para dicha máquina
de estado en el punto 2.3.3, el cual fue simulado para comprobar su funcionamiento en el punto
2.3.4. En el presente punto se generará el archivoM.C. JOSÉ ARMANDO
de programación, paraLARA GONZÁLEZ
que este sea descargado
a una FPGA que para este caso, será la Digilent Basys2 Spartan-3E FPGA Board.

Es conveniente recordar que la máquina de estado en cuestión consta de tres entradas


tipo bit y una salida tipo bus de dos bits, como se muestra en la Figura 2.53. Considerando la
tarjeta de evaluación Digilent Basys2 Spartan-3E FPGA cuenta con 8 led’s, podemos usar dos
de ellos para visualizar la salida s(1,0). Del mismo modo para las entradas x, clk y rst podemos
hacer uso de algunos de los 8 switches deslizables o bien algunos de los 4 push-bottons con los
M.C. JOSÉ
que cuenta ARMANDO
la tarjeta, mismoLARA
que seGONZÁLEZ
describieron el punto 1.6 del capítulo I del presente trabajo.

FSM S(1,0)
CLK
MOORE
RST

Figura 2.53.- Diagrama de bloques de la FSM tipo Moore


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Para generar el archivo de programación, se debe generar el Archivo de Restricciones


del Usuario (UCF), el cual establece cuales recursos de la FPGA (led’s, push-bottons, switches
deslizables, entre otros) serán asignados como puertos de entrada salida para el programa.

Lo primero será abrir el archivo .VHD de la máquina de estado tipo Moore de la cual de
desea hacer el archivo de programación y cambiar a modo de implementación como se muestra
en el recuadro número 1 de la Figura 2.54. Posteriormente se deberá colocar el cursor del mouse
sobreM.C. JOSÉ ARMANDO
el nombre LARA
del programa GONZÁLEZcomo se muestra en el recuadro número 2 y dar
(Moorelibro)
doble click para que aparezca la ventana emergente, donde se seleccionará la opción New
Source como se muestra en el recuadro número 3.

Tecnológico Nacional de México 92


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

FiguraARMANDO
M.C. JOSÉ 2.54.- Ventana
LARApara agregar el archivo de restricciones del usuario
GONZÁLEZ

Ya que se seleccionó la opción New Source aparecerá la ventana New Source Type que
se muestra en la Figura 2.55

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.55.- Ventana New Source Type

Tecnológico Nacional de México 93


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Como se muestra en la Figura 2.55, se deberá seleccionar la opción Implementation


Constraints File, para indicar que se agregará una fuente para las restricciones del usuario,
como se muestra en el recuadro número 1. Así mismo se deberá describir un nombre para el
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
archivo de restricciones del usuario sin extensión, el programa le añadirá la extensión .ucf por
default, como se muestra en el recuadro número 2, donde se le ha asignado el nombre de prueba.
Una vez realizada estas acciones se deberá dar un click en Next.

En seguida aparecerá la ventana de resumen de la nueva fuente agregada, la cual se


muestra en la Figura 2.56 donde se muestra que SÍ fue agregada la nueva fuente al proyecto, la
localización de la nueva fuente y el nombre de la nueva fuente, que como se puede apreciar es
[Link], es decir el programa ha agregado la extensión ucf al archivo. Una vez que se ha
M.C.
verificado lo anterior se dará un click en la opción JOSÉ ARMANDO LARA GONZÁLEZ
Finish.

En esta misma ventana de resumen se puede ver en la última línea, como se muestra el
nombre del proyecto al cual fue asociado el archivo de restricciones del usuario, siendo este, el
proyecto denominado moorelibro.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.56.- Ventana de resumen del UCF.

Inmediatamente después de dar un click en la opción Finish, aparecerá la ventana


principal
[Link]
JOSÉprograma,
ARMANDO como
LARAse GONZÁLEZ
puede apreciar en la Figura 2.57. Dentro del recuadro se
muestra como ya se ha agregado el archivo de restricciones [Link] al proyecto. Aplicando
doble click sobre el nombre del archivo [Link] se podrá empezar a editar dicho archivo
como se muestra en la ventana de la Figura 2.58.

Tecnológico Nacional de México 94


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.57.- Ventana de principal para seleccionar el UCF.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Figura 2.58.- Ventana de edición del UCF.

Tecnológico Nacional de México 95


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

En la ventana de edición del UCF de la Figura 2.58, como se puede ver se han editado5
líneas, cada una corresponde a la ubicación de las entradas y salidas de la FSM tipo Moore
dentro de la tarjeta Digilent Basys2 Spartan-3E FPGA. En otras palabras a cada una de las
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entradas y salidas de la maquina se le asigna un pin o pines, por donde entrará o saldrá la
información.

Por ejemplo en la línea uno se ha asignado a la señal de entrada rst el switch deslizable
SW1, mientras que en la línea 2, se describe que en el switch SW0 de la FPGA se aplicará la
señal externa x. Por otro lado en la línea 3, a la señal de entrada de la máquina de estado clk, se
le ha asignado la señal primaria del oscilador interno de la FPGA denominada MCLK. En lo
que se refiere a las líneas 4 y 5 para la salida s(1,0), se ha asignado a s0 el LED6, mientras que
a la salida s1 se le ha asignado el LED7. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Después de haber editado el UCF como se explicó, se puede crear el archivo de


programación .BIT. Como se muestra en la Figura 2.59 solo basta con colocar el cursor sobre
la opción Generate Programming File, marcado en el recuadro 1 y dar un click derecho para
seleccionar Rerun All.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.59.- Ventana para crear el archivo de programación.

Tecnológico Nacional de México 96


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Después de ejecutar la opción Rerun All, se iniciará la generación del archivo de


programación, como se muestra en la Figura 2.60 primeramente se hará la Implementación del
Diseño como se muestra en el recuadro hasta terminar con la generación del archivo .BIT
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.60.- Ventana de implementación de diseño.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Finalmente ya se habrá generado el archivo de programación el cual puede ser localizado
en la ruta establecida dentro del proyecto al cual se asoció dicho programa, como se muestra en
la Figura 2.61, donde se ha marcado el archivo .BIT con un recuadro.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.61.- Ventana de ubicación del archivo .BIT.

Tecnológico Nacional de México 97


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

2.3.6. Programación de FPGA´s ó CPLD´s.

En este punto se verá la forma de programar una FPGA con el fin de poner en
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
funcionamiento la FSM. Cuando se ha generado el programa .BIT resulta relativamente fácil
programar un CPLD ó una FPGA haciendo uso del programa Digilent Adep. En la Figura 2.62
se muestra el icono de la aplicación Digilent Adep. Este programa tienen la función de descargar
el programa .BIT al dispositivo de hardware, que este caso será una FPGA Digilent Basys2
Spartan-3E FPGA Board, la cual deberá ser conectada a la computadora personal donde se ha
instalado previamente el programa para descargar los archivos de programación.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.62.- Icono del programa Digilent Adep

En la Figura 2.63 se muestra una representación de la computadora personal (PC)


conectada a una tarjeta Digilent Basys2, donde la tarjeta de evaluación está conectada a la PC
con una conexión micro USB y por otro lado la computadora personal estará conectada a la
tarjeta por un puerto USB.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 2.63.- Conexión de la computadora personal a la Digilent Basys2.

Ya que se tiene la tarjeta de evaluación conectada a la PC, se deberá ejecutar el programa


Digilent Adep, desde su icono mostrado anteriormente y aparecerá la ventana que se muestra
en la Figura 6.64. Cabe mencionar que la tarjeta utilizada cuenta con una memoria ROM
M.C. JOSÉ
conectada ARMANDO
a la FPGA, mismaLARA GONZÁLEZel programa y lo estará cargando a la FPGA cada
que almacenará
vez que se resetee la tarjeta de evaluación. Por esta razón se programará la memoria ROM par
lo que se debe seleccionar el icono marcado con el recuadro número 1 de la Figura 2.64.

Tecnológico Nacional de México 98


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 2 Máquinas de Estados Finitos

Posteriormente se aplicará un click en el icono Browse del recuadro número 3 con la


finalidad de buscar el archivo de programación llamado [Link] en la ruta donde este ha
sido guardado. Una vez que se ha seleccionado el archivo de programación, desde su ubicación,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
aparecerá en el recuadro número 2, el nombre del programa que se va a descargar, como se
muestra en la figura.

En el recuadro número 5, el programa muestra la ruta de ubicación del archivo de


programación, así como el nombre del programa. Finalmente se activará la opción Program
con lo que el programa estará permitiendo la programación de la tarjeta de evaluación con la
FPGA.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 6.64.- Pantalla principal del programa Digilent Adep.

Ya que se realizaron los pasos mencionados, se puede verificar el correcto


funcionamiento real del programa, colocando el SW0 en cero lógico y verificando como la FSM
cuenta de forma ascendente de cero a tres. Posteriormente colocar el SW0 en uno lógico y
verificar como la FSM cuenta de forma descendente de tres a cero.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 99


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Capítulo 3

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Memorias
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los conceptos básicos sobre las memorias
semiconductoras, así como la terminología empleada en las mismas. Se inicia el capítulo
precisamente con los conceptos básicos, para tener los conocimientos necesarias para la
comprensión de los siguientes temas del capítulo.

Posteriormente se estudia la operación general de las memorias, estudiando las funciones


del Bus de Direcciones, Bus de Control y BusM.C. JOSÉ ARMANDO
de Datos, LARA GONZÁLEZ
haciendo hincapié en la operación de
las memorias RAM (Memoria de Acceso Aleatorio) y las memorias ROM (Memorias de Solo
Lectura).

Al final del capítulo se estudian los diferentes tipos de memorias, y se cierra el capítulo
con la aplicación de las memoria en la lógica combinacional y secuencial. En esta parte del
trabajo, se desarrollaran el diseño de memorias RAM y ROM en VHDL y serán aplicadas en la
solución de problemas prácticos. Estas memorias tendrán la capacidad de almacenar
información de forma
M.C. JOSÉ temporal
ARMANDO LARAo permanente,
GONZÁLEZ dependiendo del tipo de memoria del que se trate.

Finalmente los programas con diseños de memorias serán descargadas a una FPGA.

Tecnológico Nacional de México 100


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

3.1. CONCEPTOS DE MEMORIAS.


Sin duda alguna una de las principales ventajas de los sistemas digitales sobre los
M.C. JOSÉ ARMANDO
sistemas analógicos, LARA GONZÁLEZ
es la capacidad de los sistemas digitales de almacenar gran cantidad de
información de manera temporal ó permanente. Esto es posible gracias a la existencia de
memorias semiconductoras, que tienen la capacidad de almacenar dichos datos.

Dentro del ámbito de la electrónica, una MEMORIA se puede definir como un


dispositivo físico donde se pueden almacenar datos. Actualmente existen muchos tipos de
memorias semiconductoras, las cuales se pueden dividir en dos tipos las Memorias RAM y las
memorias ROM.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una de las unidades fundamentales de la memoria de semiconductor es el Flip-Flop,
cuando se interconectan un número determinado de Flip-Flops se forma lo que se conoce como
registro y es capaz de almacenar datos de mayor capacidad. Por ejemplo, si se interconectan 8
flip-Flops, este registro podrá almacenar un dato de 1 Byte, es decir de 8 bits.

Así mismo, si se interconectan un número considerable de registros en un solo circuito


integrado se crea una memoria. Por ejemplo si se interconectan 16 registros de 8 Flip-Flops, se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
crea una memoria capaz de almacenar 16 datos de un Byte. En otras palabras, esta memoria
tendrá la capacidad de almacenar 16 Bytes o bien se puede decir que la memoria puede
almacenar 128 bits.

Estos Flip-Flops empleados en la construcción de memorias pueden ser tipo bipolar o


MOS y son el tipo de memoria más rápida que existe actualmente y aunque su costo es
relativamente elevado, se ha venido abaratando en los últimos años. Cada una de estas memorias
tienen sus ventajas y sus desventajas, por ejemplo la altaARMANDO
M.C. JOSÉ velocidad de
LARAlas GONZÁLEZ
memorias bipolares
contra su alto costo y baja densidad de integración. Por otro lado la relativamente baja velocidad
de las memorias MOS contra el bajo costo y su alta densidad de integración.

Así mismo, existen memorias que en vez de Flip-Flops, utilizan como unidad
fundamental de almacenamiento un pequeño capacitor MOS donde se almacena un determinado
valor de voltaje el cual representa un dato binario. Por si el capacitor está cargado representara
un valor binario de 1, mientras que si este se encuentra descargado representara un valor binario
de 0. A continuación se estudiaran de manera detallada todos estos tipos de memoria destacando
M.C. JOSÉ
su estructura, ARMANDO
operación LARA GONZÁLEZ
y aplicaciones.

Tecnológico Nacional de México 101


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

3.1.1 Terminología de memorias


La terminología de memorias se refiere a los diversos términos empleados en el estudio
M.C. JOSÉdeARMANDO
y aplicación LARA semiconductoras.
las memorias GONZÁLEZ Existen una gran cantidad de términos
empleados dentro de este ámbito que muchas veces el estudiante se puede ver abrumado con
tantos términos.

Por esta razón resulta de gran importancia conocer esta terminología empleada en las
memorias, para tener una mejor comprensión de dicho tema. A continuación se enlistan algunos
de los términos más importantes dentro del ámbito de las memorias de semiconductor.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Bit.- Digito binario el cual puede tener un valor de 1 ó 0 lógico.

Nibble.- Se denomina así a la mitad de un Byte, es decir, a una palabra de 4 bits (herencia de
los procesadores de 4 bits como el 4004).

Byte.- Término especial que se usa para una palabra de 8 bits.

Celda de Memoria.- Dispositivo o circuito eléctrico que se usa para almacenar un solo bit, ya
sea un cero o un uno lógico, ejemplos de celdas de memoria son: un flip-flop, un capacitor y un
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
solo canal en cinta o en disco magnéticos.

Capacidad de memoria.- Es una manera de especificar cuantos bits pueden almacenarse una
memoria.

Densidad.- Es otra manera de especificar la cantidad de información que puede almacenar una
memoria. Cuando una memoria tiene mayor densidad, puede almacenar mayor cantidad de
información.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Dirección.- Número que identifica la ubicación de un dato en la memoria.

Operación de lectura.- Es el proceso mediante el cual, otro dispositivo conectado a la memoria,


recupera un dato guardado previamente en cierta dirección de la memoria.

Operación de escritura.- Es el proceso mediante el cual otro dispositivo conectado a la


memoria, almacena un dato en cierta dirección de la memoria.

Tiempo de acceso.- Es una medida de la velocidad de operación de las memorias. En otras


[Link]É
palabras ARMANDO
el tiempo LARA
necesario GONZÁLEZ
para realizar una operación de lectura en una memoria.

Memoria de acceso aleatorio.- En esta memoria la ubicación de la información, no tiene efecto


sobre el tiempo que tomen las operaciones de lectura y escritura.

Tecnológico Nacional de México 102


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Memoria de solo lectura (ROM).- Este tipo de memoria solo puede ser leída dentro del proceso
de operación normal.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Memoria de lectura y escritura (RWM).- En este tipo de memoria se pueden leer datos y
escribir datos dentro de su operación normal.

Memoria volátil.- Es una memoria que requiere energía eléctrica para mantener almacenada la
información. Cuando la energía eléctrica es desconectada de esta memoria, la información se
pierde.

Memoria estática.- Memoria que almacena un dato de forma permanente, siempre y cuando se
mantenga activa la alimentación eléctrica. No requiere ser refrescada periódicamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Memoria dinámica.- Memoria que no almacena los datos de forma permanente aun cuando se
le aplique energía eléctrica. En esta memoria los datos se van perdiendo con el tiempo, por lo
que es necesario refrescar los datos periódicamente.

Memoria principal.- Es la memoria de trabajo de una computadora, almacena instrucciones y


datos con los cuales la CPU (Unidad Central de Procesamiento) está trabajando en un
determinado momento.

M.C. auxiliar.-
Memoria JOSÉ ARMANDO LARA GONZÁLEZ
Es la memoria de almacenamiento masivo ya que puede almacenar grandes
cantidades de información aunque es más lenta que la memoria principal. Esta memoria es
externa a la memoria de trabajo.

Palabra de memoria.- Es un grupo de bits que pueden ser almacenados en una memoria y que
representan una instrucción o un dato.

Buses de una memoria.- Son las vías de comunicación de la memoria mediante los cuales se
podrán realizar las operaciones de lectura y escritura.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Bus de datos.- Es el canal por donde van a entrar o salir los datos de una memoria, durante los
procesos de lectura y escritura.

Bus de direcciones.- Es el canal mediante el cual se le indicara a la memoria la ubicación donde


se desea guardar un dato o bien la ubicación donde se desea leer un dato.

Bus de control.- Es el canal mediante el cual se le indica a la memoria, la operación que se va


a realizar en ella, ya sea de lectura o escritura e indica además el momento en que se realizará
una operación en la memoria.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Dispositivo de tres estado.- Dispositivo lógico que cuenta con terminal extra llamada
generalmente habilitación. La salida de este dispositivo puede ser 0 lógico, 1 lógico ó alta
impedancia.

Tecnológico Nacional de México 103


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

3.1.2 Operación general de memorias


Como ya se ha comentado, existen diverso tipos de memorias, en las cuales su operación
M.C. JOSÉ
será diferente enARMANDO LARA GONZÁLEZ
algunos aspectos, pero en general todas las memorias tienen algunos puntos de
operación en común. Esos puntos en común de operación de las memorias, serán descritos en
este punto.

Toda memoria ya sea ROM o RAM para operar adecuadamente, deberá tener tres buses
para permitir el almacenamiento y la recuperación de la información. Eso tres buses, son el bus
de DATOS, de CONTROL y de DIRECIONES, como se ilustra en el diagrama de bloques de
una memoria genérica en la Figura 3.1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

BUS DE CONTROL
BUS DE DATOS
MEMORIA
BUS DE DIRECCIONES

Figura 3.1. Diagrama de bloques de una memoria genérica.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


El bus de datos tiene la función de que a través de él, entrarán los datos cuando se desea
almacenar información dentro de la memoria (proceso de escritura) y también a través de este
bus, saldrán los datos cuando se recupere información proveniente de la memoria (proceso de
lectura). Si este bus tiene ocho líneas se dice que tiene un ancho de bus de 1 Byte, lo que indica
que la memoria almacena palabras de 8 bits.

En el caso del bus de direcciones, tiene la función de establecer en que parte de la


M.C. JOSÉ
memoria se va a leer o escribir un dato. Por ejemplo, ARMANDO
si una LARAun
memoria tiene GONZÁLEZ
bus de direcciones
4
de 4 líneas, indica que dicha memoria puede almacenar 2 = 16 palabras. Esto se debe a que al
tener cuatro líneas de dirección se tienen 16 combinaciones posibles desde “0000” hasta “1111”
lo que hace que el bus de direcciones pueda seleccionar 16 posiciones dentro de la memoria.

Finalmente, el bus de control, tiene la función de informar a la memoria que tipo de


operación se va a realizar en ella, así como el momento en que se llevará a cabo la operación.
Este bus puede tener una o varias líneas dependiendo del tipo de memoria del que se trate.
[Link]É
Algunos las ARMANDO LARA GONZÁLEZ
líneas más comunes de este bus son: 𝑹/𝑾 ̅̅̅̅. La línea
̅̅̅ (lectura/escritura) y 𝑪𝑺
𝑹/𝑾̅̅̅ del bus de control informa a la memoria que se va a llevar a cabo una operación de lectura,
cuando dicha línea tenga un valor lógico de 1. En caso de que dicha línea sea un cero lógico,
indica que se llevará a cabo una operación escritura.

Tecnológico Nacional de México 104


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

̅̅̅̅ del bus de control sirve para habilitar o deshabilitar la memoria


Por otro lado la línea 𝑪𝑺
para que responda ó no, a los buses de datos y de direcciones. Muchas veces esta señal o línea
̅̅̅̅ se le llama E (habilitación) ó ME (habilitación de memoria) o bien CE (habilitación de
𝑪𝑺
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
chip). En este trabajo se estará llamando a esta línea de control, de cualquiera de las formas
mencionadas.

Toda memoria deberá realizar dentro de su operación, los siguientes cinco pasos para
llevar a cabo operaciones de lectura o de escritura.

1. Colocar un número en el bus de direcciones para seleccionar la posición de la memoria


donde se desea escribir un dato ó bien leer un dato.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2. Seleccionar a través del bus de control la operación que se desea realizar, ya sea de
lectura o escritura.

3. Colocar el dato en el bus de datos de la memoria cuando se desea guardar un dato.

4. Retener los datos de salida en el bus de datos de la memoria durante la operación de


lectura.

[Link]
JOSÉ ARMANDO LARA
la memoria paraGONZÁLEZ
que responda a los buses de control y dirección.

Con la finalidad de entender de una forma práctica la operación de los BUSES de una
memoria y en general la operación de la misma, consideremos la memoria de la Figura 3.2
correspondiente a un diagrama de bloques de una memoria de 16 X 8.

D
BUS DE
CONTROL
cs M.C. JOSÉ 0ARMANDO LARA GONZÁLEZ
R/W D1
D2
MEMORIA D3 BUS DE
A0 16 BYTES D4 DATOS
BUS DE A1 D5
DIRECCIONES A2 D6
A3 D7

Figura 3.2. Diagrama de bloques de una memoria 16 x 8.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Como se puede observar en la Figura 3.2, la memoria tiene un ancho de bus de datos de
8 bits y un bus de direcciones de 4 líneas lo que indica que podrá direccionar 24 = 16 posiciones
de memoria.

Tecnológico Nacional de México 105


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Por el momento es posible imaginar la estructura interna de la memoria mostrada en la


Figura 3.2, de la manera como se muestra en la Tabla 3.1 donde se muestra la diferencia entre
los DATOS y las DIRECCIONES a través de una representación de la estructura interna de la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
memoria en cuestión.

En la primera columna (de izquierda a derecha) de la tabla se muestran las 16 direcciones


posibles (desde “0000” hasta “1111”) ya que el bus de direcciones cuenta con 4 líneas de
dirección. En las siguientes 8 columnas se muestran los datos almacenados en la memoria desde
D0 hasta D7. Cada uno de los rectángulos donde están los bits de los datos representa una celda
de memoria. Más adelante se estudiará, la estructura de las celdas donde se guarda cada bit en
una memoria y esto será dependiendo de tipo de memoria.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

De esta forma, por ejemplo podemos decir que en la posición de memoria “0000” se
tiene guardado el dato B816 ó que en la posición de memoria “0111”, se tiene almacenado el
dato FF16. De esta

Tabla 3.1.- Representación del mapa de memoria


DIRECCIONES D7 D6 D5 D4 D3 D2 D1 D0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
0000 1 0 1 1 1 0 0 0
0001 0 1 1 1 0 1 1 1
0010 0 0 0 1 0 0 0 1
0011 1 1 0 0 1 1 0 0
0100 0 0 1 1 0 0 1 1
0101 0 1 1 1 0 1 1 1
0110 0 0 1 1 0 0 1 1
0111 1 1 1 1 1 1 1 1
1000 1 0 1 0 1 0 1 0
1001 1 1 1 0 1 1 1 0
1010 1 0 M.C.
1 JOSÉ
0 ARMANDO
1 0 1LARA
0 GONZÁLEZ
1011 0 1 1 0 0 1 1 0
1100 1 0 1 0 1 0 1 0
1101 0 0 0 0 0 0 0 0
1110 1 1 1 1 1 1 1 1
1111 1 0 0 0 1 0 0 0

Así que si se desea leer un dato almacenado en la posición de memoria “1010”, se


deberán seguir
M.C. JOSÉlos siguientesLARA
ARMANDO pasos:
GONZÁLEZ
1. La Unidad Central de Procesamiento (CPU) coloca en el bus de direcciones que se
muestra en la Figura 3.2, el número “1010”, este número entraría en las líneas A3, A2,
A1 y A0. En este caso A0 sería igual a “0”, A1=“1”, A2=“0” y A3=“1”.

Tecnológico Nacional de México 106


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

2. La CPU coloca un “1” en la entrada de control 𝑹/𝑾̅̅̅ para seleccionar la opción de lectura
̅̅̅̅.
y habilitar la memoria aplicando un “0” en la entrada de control 𝑪𝑺
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
3. Los circuitos internos de la memoria decodifican la dirección “1010” para determinar
que el numero requerido es el “10101010”.

4. Los circuitos internos de la memoria colocan el bus de datos el número “10101010” para
que este sea transferido a la CPU y completar el proceso de lectura de la memoria.

Por otro lado, suponga que se desea guardar (escribir) el número “10111000” en la posición
de memoria “0000”. Se puede afirmar que se deberán
M.C. JOSÉ
seguirARMANDO LARApasos:
los siguientes GONZÁLEZ

1. La CPU suministra en el bus de direcciones que se muestra en la Figura 3.2, el número


“0000”, este número entraría en las líneas A3, A2, A1 y A0. En este caso A0 sería igual a
“0”, A1=“0”, A2=“0” y A3=“0”.

2. La CPU coloca el dato “10111000” en el bus de datos de la memoria el cual se muestra


en la Figura 3.2. este dato entraría por los pines de D0 hasta D7.

3.M.C.
La JOSÉ
CPU ARMANDO
coloca un “0”LARA
enGONZÁLEZ
la entrada de control 𝑹/𝑾̅̅̅ para seleccionar la opción de
̅̅̅̅.
escritura y habilitar la memoria aplicando un “0” en la entrada de control 𝑪𝑺

4. Los circuitos internos de la memoria decodifican la dirección “0000” para determinar en


cual posición de memoria se almacenará el número “10111000”.

5. El número “10111000” colocado en el bus de datos se transfiere hacia la posición de


memoria seleccionada y completar el proceso de escritura de la memoria.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Como se puede observar en cada uno de los pasos anteriores se hace referencia a la CPU
debido a que en la gran mayoría de los casos la memorias son manipuladas por la CPU con la
finalidad de almacenar información y recatarla cuando esta la requiera.

En la Figura 3.3 se muestra la forma en que se pueden conectar dos memorias a la CPU
con la finalidad de aumentar la capacidad de almacenamiento. Como se puede ver el bus de
datos de la CPU va conectado tanto a la MEMORIA 1 como a la MEMORIA 2, lo mismo
sucede conJOSÉ
M.C. el bus de datos yLARA
ARMANDO el busGONZÁLEZ
de control.

Esto es posible porque cada memoria podrá ser seleccionada ya sea a través del bus de
control o también a través del bus de direcciones.

Tecnológico Nacional de México 107


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

De esta forma la CPU podrá tener acceso a cualquiera de las dos memorias, una a la vez
sin tener contienda por el bus de datos por parte de los periféricos de la CPU.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

BUS DE DIRECCIONES

MEMORIA 1 MEMORIA 2

CPU

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


BUS DE DATOS

BUS DE CONTROL

Figura 3.3. Conexión de memorias a la CPU.

3.1.3 M.C.
TiposJOSÉ
de memorias
ARMANDO LARA GONZÁLEZ
La memoria es un bloque de construcción importante, de gran importancia en las
computadoras digitales y sistemas. Una memoria es necesaria para el almacenamiento de
instrucciones (programas de computadoras), datos (operandos) y resultados obtenidos durante
el procesamiento de datos.

Mientras que en el pasado los núcleos de ferrita fueron ampliamente utilizados, en la


mayor parte de los sistemas digitales las memorias semiconductoras han venido a reemplazar a
los núcleos. En una memoria semiconductora,M.C. JOSÉ ARMANDO
los flip-flops LARA
se utilizan paraGONZÁLEZ
almacenar un bit 0
o 1. Los transistores en los flip-flops pueden ser bipolares (BJT) o de efecto de campo
(MOSFET). Esto dependerá del tipo de memoria, lo que se estudiará en el presente capítulo.

En la Tabla 3.2 se muestra un resumen de las memorias que serán estudiadas en este
capítulo. Se han dividido en dos grupos, siendo estos el de las memorias ROM (Read Only
Memory), es decir las memorias de solo lectura y las memorias RAM (Random Access
Memory) Memoria de acceso aleatoria, las cuales se refieren a las memorias de lectura y
[Link]
escritura. JOSÉ ARMANDO
la ROM, LARAseGONZÁLEZ
los datos escriben una sola vez y no pueden ser cambiados después.
Este tipo de memoria, por ejemplo, se puede utilizar para almacenar un programa de
computadora. La información almacenada en la RAM se puede modificar fácilmente en el
procesamiento de los datos.

Tecnológico Nacional de México 108


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Tabla 3.2.- Resumen de memorias semiconductoras


ROM MROM (ROM programada por mascarilla)
PROM
M.C. JOSÉ ARMANDO LARA(ROM programable)
GONZÁLEZ
EPROM (ROM programable y borrable)
EEPROM (ROM programable y borrable eléctricamente)
FLASH (ROM instantánea)
RAM SRAM (RAM estática)
DRAM (RAM dinámica)

Memorias ROM M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Antes de iniciar el estudio de cada una de las memorias ROM incluidas en la Tabla 3.2,
se hará un repaso de la operación de las memoria ROM, ya que todas las ROM operan de manera
semejante, solo cambiara la estructura de las celdas en la que se almacena la información.

Se iniciará comentando que la memoria ROM es una memoria diseñada para almacenar
información que no cambia durante la operación normal del sistema o que casi no cambia con
mucha frecuencia. Generalmente lo que se guarda en este tipo de memorias son programas que
M.C. JOSÉ ARMANDO
las computadoras LARA GONZÁLEZ
deben ejecutar y que se guardan antes de la operación normal de una
computadora.

En la Figura 3.4 se muestra el símbolo de una memoria ROM genérica, es decir, todas
las ROM tendrán esta misma estructura externa y solo cambiara la organización interna de cada
una de ellas.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


D7
A3
D6
D5
A2
D4
ROM
16 X 8 D3
A1
D2
D1
A0
D0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

CS

Figura 3.4. Diagrama de bloques de una memoria 16 x 8.

Tecnológico Nacional de México 109


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Como se muestra en el símbolo de la Figura 3.4 la memoria cuenta con cuatro líneas de
dirección A3, A2, A1 y A0, por lo que puede direccionar 16 registros o posiciones de memoria,
por otro lado la memoria tiene su bus de datos de 8 bits desde D0 hasta D7 y cuenta también con
M.C. JOSÉ ARMANDO LARA GONZÁLEZ ̅̅̅̅
una entrada de selección de chip denominada 𝑪𝑺 .Para tener una idea más clara de la operación
y estructura se una memoria ROM en la Figura 3.5 se muestra un diagrama de bloques de la
estructura interna de una memoria ROM.

SELECTOR DE FILA
0

A0 1
DECODER
REGISTRO 0 REGISTRO 4 REGISTRO 8 REGISTRO 12
1A4 2
A1 LSB E E E E E E E E

3 M.C. JOSÉ ARMANDO LARA GONZÁLEZ

REGISTRO 1 REGISTRO 5 REGISTRO 9 REGISTRO 13

E E E E E E E E

REGISTRO 2 REGISTRO 6 REGISTRO 10 REGISTRO 14

M.C. JOSÉ ARMANDO LARA GONZÁLEZ E E E E E E E E

REGISTRO 3 REGISTRO 7 REGISTRO 11 REGISTRO 15

E E E E E E E E

SELECTOR DE COLUMNA
0
A2
DECODER
1 M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1A4 2
A3 MSB
3

CS BUFFERS DE SALIDA

D7 D6 D5 D4 D3 D2 D1 D0

Figura 3.5. Arquitectura de una memoria ROM de 16 x 8.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta memoria cada uno de los registros tiene la capacidad de almacenar o bits de
información y las salidas cuentan con buffers de tres estados, los cuales se activan con la entrada
̅̅̅̅.
de control 𝑪𝑺

Tecnológico Nacional de México 110


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Para entender de una manera más sencilla la estructura y funcionamiento de la


arquitectura de la memoria ROM, se explicará una operación de lectura en la memoria. En este
ejemplo se hará la lectura del registro 8 de la memoria. Como ya se ha explicado en la memoria
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
genérica, cuando la CPU desea leer un dato de la memoria, se deberán seguir los siguientes
pasos:

1. La Unidad Central de Procesamiento (CPU) coloca en el bus de direcciones el número


“1000”, este número entraría en las líneas A3, A2, A1 y A0. En este caso A0 sería igual a
“0”, A1=“0”, A2=“0” y A3=“1”. En estas condiciones el decodificador superior (LSB) al
cual se le introduce A0=“0”, A1=“0”, activa con un “1” la salida “0” de dicho
decodificador, habilitando una de las habilitaciones de los registros 0, 4, 8 y 12. Es
conveniente recordar que los 16 registrosM.C. JOSÉdos
tienen ARMANDO LARA GONZÁLEZ
habilitaciones, de tal manera que
los registros de la primera fila tienen una sola habilitación, por lo tanto los datos de
ningún registro son depositados en el bus de datos interno de la memoria.

Por otro lado en el decodificador inferior (MSB) se introducen las direcciones A2=“0” y
A3=“1”, lo que provoca que se active con un “1” la salida 2 del decodificador, haciendo
que se habiliten los registros 8, 9, 10 y 11. En estas condiciones el único registro que
tiene las dos habilitaciones activas es el registro 8, por lo tantos los datos contenidos
dentro de dicho registro se depositarán en el bus de datos interno de la memoria.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
2. La CPU coloca un “0” en la entrada de control 𝑪𝑺 ̅̅̅̅ para habilitar los buffers de salida y
permitir que los datos que se encuentran el bus de datos interno provenientes del registro
8 salgan hacia el bus de datos externos de la memoria

3. La CPU lee el dato presente en el bus de datos externo de la memoria para que este sea
transferido hacia la CPU.

Memorias MROM M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Hasta el momento se ha visto la operación genérica de una memoria ROM, lo cual es
muy necesario para entender mejor la arquitectura, funcionamiento y aplicaciones de las
memorias ROM, las cuales se verán a continuación, iniciando por la memoria MROM.

La memoria MROM es una Memoria de Solo Lectura programada por Mascarilla, la


cual es programada utilizando una mascarilla. La memoria es programada por el fabricante
durante el proceso de fabricación del circuito integrado.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La programación (escritura de los datos) de esta memoria se lleva a cabo mediante la


conexión o desconexión de la fuente (source) transistores MOSFET.

Tecnológico Nacional de México 111


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

En la Figura 3.6 se muestra la arquitectura de una pequeña MROM tipo MOS que tiene
la capacidad de almacenar 4 palabras de 4 bits. Como se puede ver se utiliza un MOSFET de
canal N con conexión en emisor común (entrada en la compuerta y salida en la fuente) para
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
cada uno de los bits almacenados, en otras palabras, una celda de memoria está formada por un
MOSFET.

Observe que la fila 0 de transistores conforma el primer registro de la memoria donde se


ha almacenado el numero binario “0001”, ya que Q0, Q1 y Q2 tienen abierta la conexión de la
fuente, mientras que Q3 tiene conectada la terminal de la fuente.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


VCC
FILA 0

Q0 Q1 Q2 Q3

A1
Q7
A0
M.C. JOSÉ ARMANDO
FILA 1
LARA GONZÁLEZ
Q 4 Q5 Q6

DECODER
1A4
FILA 2

EN

Q8 Q9 Q10 Q10

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


FILA 3

Q12 Q13 Q14 Q15

D3 D2 D1 D0

Figura 3.6. Arquitectura de una memoria MROM.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Donde se tiene conexión en la terminal de la fuente del transistor, el transistor guardara
un “1”, por ejemplo en el transistor Q3 y cuando no se tenga conexión en la terminal de la fuente
del transistor, este guardará un “0”, como en el caso de Q0.

Tecnológico Nacional de México 112


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

De esta forma durante el proceso de fabricación se guardan los datos, dejando sin
conexión las terminales de la fuente de los transistores donde se desea guardar los ceros lógicos
y a través de una “mascarilla” se deposita metal de silicio en las conexiones de las fuentes donde
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se requiere hacer una conexión y por ende almacenar un “1”.

La “mascarilla” es muy precisa y costosa y se debe fabricar una para cada programa
específico de los clientes con la información binaria correcta, por esta razón solo se utiliza
cuando se requieren una gran cantidad de memorias idénticas por ejemplo para dispositivos
electrodomésticos o calculadoras. La mayoría de las MROM cuentan con salidas triestado lo
que las hace compatibles con microprocesadores y son fabricadas en ambas tecnologías: Bipolar
y MOS.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La operación de la MROM es igual a la operación de la ROM genérica estudiada


anteriormente, la CPU proporciona las dos líneas de dirección A0 y A1 así como la señal ̅̅̅̅
𝐸𝑁,
dependiendo del valor de las direcciones se selecciona uno de los cuatro renglones de la
memoria. El renglón seleccionado deposita sus datos en el bus de datos de la memoria y estos
van hacia al exterior para ser leídos por la CPU.

M.C.
En JOSÉ ARMANDO
la Figura LARA GONZÁLEZ
3.7 se muestra el símbolo de una memoria MROM de 32KB, el triangulito
dentro de la memoria, indica que el dispositivo cuenta con salida triestado.

A14
A13
MROM
A12
A11 32K X 8 D7
A10
D6
A9
A8 D5
A7 M.C. JOSÉ ARMANDO
D LARA GONZÁLEZ
4
A6 D3
A5
D2
A4
A3 D1
A2 D0
A1
A0
CE (PWR DWN)
OE

Figura 3.7. Símbolo lógico de una memoria MROM.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como se observa en el símbolo de la memoria MROM, se tienen dos señales de control,
̅̅̅̅ ̅̅̅̅
𝑂𝐸 y 𝐶𝐸 . Las cuáles serán también manipuladas por la CPU para llevar a cabo la función de la
memoria.

Tecnológico Nacional de México 113


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Debido a que la memoria MROM tiene salidas triestado, las cuales se pueden habilitar o
deshabilitar, requiere de una entrada de control ̅̅̅̅
𝑂𝐸 (habilitación de entrada) y seguirá contando
con la señal de control 𝐶𝐸 (habilitación de chip). Con esta señal ̅̅̅̅
̅̅̅̅ 𝐶𝐸 se deshabilita el
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
decodificador de direcciones para que no responda a las entradas de dirección, pero además
cuando cuándo esta desactivada, todas las funciones del circuito integrado están deshabilitadas,
incluyendo las salidas tirestados y coloca al chip en un modo de bajo consumo de energía, con
lo que consume menor corriente de la fuente de alimentación.

Memorias PROM
Las memorias PROM son memorias ROM programables, se llaman así debido a que
pueden ser programadas por el usuario para bajos de volúmenes de utilización, no como en el
caso de las memorias MROM que solo se usan en M.C. JOSÉ ARMANDO
grandes masas y queLARA GONZÁLEZ por el
son programadas
fabricante. Sin embargo una vez que se han programado las PROM se parecen a las MROM en
que ya no pueden ser ni borradas ni reprogramadas otra vez. Por eso muchas veces se hace
referencia a estas memorias como dispositivos OTP (programables una sola vez).

Las celdas de las memorias PROM tienen una estructura muy semejante al de la ROM
pero un una conexión fusible en la terminal de la fuente de los transistores como se muestra en
la Figura 3.8.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

VCC/Vpp
FILA 0

Q0 Q1 Q2 Q3

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Fusible Conexión Fusible Conexión
fundido fusible fundido fusible

0 1 0 1
Figura 3.8. Arquitectura de una memoria PROM.

Observe que la fila 0 se ha almacenado el numero binario “0101”, ya que Q1 y Q3 tienen


intacta la conexión fusible de la fuente del transistor, mientras que Q0 y Q2 tiene desconectada
la terminal de la fuente del transistor, debido a que esta conexión ha sido fundida. Este proceso
M.C. JOSÉ ARMANDO
de programación (quemadoLARAde losGONZÁLEZ
fusibles) de la memoria PROM se puede hacer de forma
manual o de manera más practica con un programador de memorias. Estas memorias se fabrican
en tecnología Bipolar y MOS.

Tecnológico Nacional de México 114


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

El proceso de fundición se lleva a cabo seleccionando primeramente una fila a través de


las líneas de direcciones, posteriormente se coloca un valor binario en cada una de las líneas de
datos que para el ejemplo en cuestión de la Figura 3.8 es el número D0=1, D1=0, D2=1 y D3=0
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
y finalmente se aplica un pulso de programación (Vpp) en la terminal dren de los transistores.
Los transistores que tengan un cero lógico en su terminal fuente, proveerán una ruta de alta
corriente a través de la conexión fusible, haciendo que este se queme y se quede abierto.

Por otro lado, los transistores que tengan un uno lógico en su terminal dren, no
permitirán el paso de mucha corriente lo que hará que la conexión fusible quede intacta,
guardando por ende un uno. Una vez que se hayan programado todas las localidades de dirección
de esta forma los datos quedarán almacenados de forma permanente en la memoria y podrán ser
M.C. JOSÉ
leídos las veces que la CPU lo requiera. Es conveniente ARMANDO
recalcar que enLARA
esta GONZÁLEZ
memoria los datos
no se pierden aun cuando se desconecte la fuente de alimentación de la memoria.

Existen diverso circuitos integrados de memoria PROM comerciales por ejemplo una de
las más populares es la TMS27PC256 la cual es de tipo CMOS con una capacidad de 32KB con
tiempos de acceso de entre 100 y 250 ns.

M.C. JOSÉ
Memorias ARMANDO LARA GONZÁLEZ
EPROM
Las memorias EPROM son memorias ROM Programables y Borrables, se llaman así
debido a que pueden ser programadas por el usuario para bajos de volúmenes y además pueden
ser borradas para después ser programadas otra vez. Una vez programada, la EPROM no volátil
ya que almacena los datos guardados en forma indefinida. El proceso de programación de la
EPROM es el mismo que el de la memoria PROM.

La diferencia entre ambas memorias radica en que la memoria EPROM tiene como celda
M.C. de
de memoria un transistor MOS con una compuerta JOSÉ ARMANDO
silicio LARAconexión
que no tiene GONZÁLEZeléctrica, es
decir tienen una compuerta flotante pero con un electrodo muy cercano. En la Figura 3.9 se
muestra una representación de una celda de memoria EPROM.

En su estado normal la compuerta del transistor se encuentra descargada, es decir no hay


carga almacenada en la compuerta flotante, por lo que el transistor producirá un “1” cada vez
que el decodificador de dirección lo seleccione. Durante la programación, al aplicar un pulso de
programación (10 a 25V con tiempos de 50 ms) en la compuerta, la cual queda cargada
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
eléctricamente, haciendo que el transistor se encienda, almacenando de esta forma un “0”. Este
dato queda almacenado de forma permanente, sin necesidad de mantener la tensión en la
compuerta ya que la carga eléctrica en la compuerta puede permanecer por un período
aproximado de 10 años.

Tecnológico Nacional de México 115


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Por otra parte el borrado de la memoria se realiza mediante la exposición del dispositivo
a rayos ultravioleta durante un tiempo aproximado de 10 a 30 minutos. Este tiempo depende del
tipo de fabricante y para realizar el borrado, el circuito integrado dispone de una ventana de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
cuarzo transparente, la cual permite a los rayos ultravioleta llegar hasta el material
fotoconductivo presente en las compuertas aisladas y de esta forma lograr que la carga se disipe
a través de este material apagando el transistor, en cuyo caso todas las celdas de memoria quedan
en “1”.

VCC

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


FILA 0

G Q0

Compuerta
flotante Dato de
salida
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 3.9. Celda de memoria de una EPROM.

Generalmente esta ventana de cuarzo se ubica sobre la superficie del encapsulado y se


cubre con un adhesivo para evitar la entrada de luz ambiente que pueda borrar la información,
debido a su componente UV. En la Figura 3.10 se muestra una fotografía de una memoria
EPROM. La 27C512 es una EPROM común de 64 X 8. La principal desventaja de las EPROM
es el proceso de borrado exponiendo de 20 a 30 minutos la memoria a la luz ultravioleta, lo que
resulta tedioso. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 3.10. Fotografía de una memoria EPROM.

Tecnológico Nacional de México 116


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Memorias EEPROM
Las memorias EEPROM también llamadas E 2 PROM son memorias ROM Programables
M.C. JOSÉ
y Borrables ARMANDO LARA
Eléctricamente, GONZÁLEZ
se llaman así debido a que pueden ser programadas por el usuario
para bajos de volúmenes y además pueden ser borradas a través de pulsos eléctricos los cuales
permiten borrar los datos existentes en la memoria, para que ésta pueda ser reprogramada las
veces que sea necesario.

Las memorias EEPROM tienen la misma estructura de compuerta flotante de la EPROM


con la diferencia que agrega una delgada capa de óxido por encima del DREN de la celda de
memoria de MOSFET. Con esta característica es posible aplicar un alto voltaje (21V) entre la
compuerta y el DREN del MOSFET con lo que se induce una carga en la compuerta flotante la
M.C. se
cual permanecerá por tiempo indefinido aun cuando JOSÉ ARMANDO
corte la energí[Link] GONZÁLEZ

Por otra parte cuando se aplica un alto voltaje (21V) entre la compuerta y el DREN del
MOSFET pero con la polaridad inversa que para programar la celda, se eliminarán las cargas
almacenadas en la compuerta del MOSFET y se borrará la celda. En la Figura 3.11 se muestra
una representación de una celda de memoria EEPROM.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ VCC

FILA0

Delgada capa
G Q0
De óxido

S
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Compuerta
flotante Dato de
salida
Figura 3.11. Celda de memoria EEPROM.

En la Figura 3.12 se muestra el símbolo de una EEPROM 2864 de Intel, la cual se


organiza como un arreglo de 8K X 8, con 13 líneas de direcciones (213 = 8192) y 8 terminales
de entrada-salida de datos. Cuenta además con 3 entradas de control que determinan el modo de
M.C. de
operación JOSÉ ARMANDO LARA GONZÁLEZ
la memoria.

En la Tabla 3.3 se muestra la tabla de los modos de operación de la memoria.

Tecnológico Nacional de México 117


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

+5V

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A12
A11 I/O7
.
. I/O6
. I/O5
. EEPROM
I/O4
A2 8K x 8
A1 2864 I/O3
A0 I/O2
I/O1
OE
I/O0
CE
WE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 3.12. Símbolo de una memoria EEPROM

Tabla 3.3. Modos de operación de la EEPROM


ENTRADAS
M.C. JOSÉ ARMANDO
MODO LARA
̅̅̅̅
𝐶𝐸 GONZÁLEZ
̅̅̅̅
𝑂𝐸 ̅̅̅̅̅
𝑊𝐸 BUS DE DATOS
LECTURA BAJO BAJO ALTO DATOS DE SALIDA
ESCRITURA BAJO ALTO BAJO DATOS DE ENTRADA
SUSPENSIÓN ALTO X X ALTA IMPEDANCIA

Memorias Flash
La memoria Flash es un derivado de laM.C. JOSÉ ARMANDO
memoria [Link] GONZÁLEZ
Se llaman Flash debido a
los tiempos rápidos de borrado y escritura. Es una memoria que tiene gran capacidad como las
EEPROM y es borrable dentro del mismo circuito a través de pulsos eléctricos.

Una celda de memoria Flash es muy semejante a la celda simple de memoria EPROM,
por lo que difiere un poco más de la EEPROM. Tiene una capa de óxido en la compuerta más
delgada, lo que le permite la capacidad de borrarse con electricidad pero puede construirse con
capacidades mucho mayores que la EEPROM.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Tiene un alto nivel de integración de tal manera que se encuentra orientada a realizar el
almacenamiento de grandes cantidades de datos en un espacio reducido, permitiendo la lectura
y escritura de múltiples posiciones de memoria en la misma operación.

Tecnológico Nacional de México 118


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Todo esto gracias a impulsos eléctricos, lo que además le otorga una velocidad de
funcionamiento superior a la que presentaban las memorias del tipo EEPROM, que actuaban
sobre una celda única de memoria por vez. Las memorias Flash comunes tienen tiempos de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
escritura 10µs por byte, en comparación con los 100µs de las EPROM más avanzadas y los 5ms
de las EEPROM.

En la Figura 3.13 se muestra el símbolo lógico de una memoria Flash CMOS 28F256A
de Intel Corporation, con una capacidad de 32 X 8. La memoria tiene 15 entradas de dirección
lo que le permite direccionar 215 =32K=32768 localidades de memoria de 8 bits, es decir puede
almacenar 32KB.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


+Vpp +5V

A14
A13 DQ7
.
. DQ6
. DQ5
.
MEMORIA FLASH
DQ4
32K x 8
M.C. JOSÉ ARMANDOA2LARA GONZÁLEZ
28F256A DQ3
A1
A0 DQ2
DQ1
OE
DQ0
CE
WE

Figura 3.12. Símbolo de una memoria FLASH


M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Por otra parte en la Tabla 3.4 se muestran los modos de operación de la memoria Flash
de la Figura 3.12.

Tabla 3.4. Modos de operación de la Flash


ENTRADAS
MODO ̅̅̅̅
𝐶𝐸 ̅̅̅̅
𝑂𝐸 ̅̅̅̅̅
𝑊𝐸 BUS DE DATOS
M.C. JOSÉ ARMANDO LARA
LECTURA BAJO GONZÁLEZ
BAJO ALTO DATOS DE SALIDA
ESCRITURA BAJO ALTO BAJO DATOS DE ENTRADA
SUSPENSIÓN ALTO X X ALTA IMPEDANCIA

Tecnológico Nacional de México 119


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Memorias RAM
Las memorias RAM (memoria de acceso aleatorio) toman su nombre debido a que se
puedeM.C. JOSÉcon
acceder ARMANDO
la mismaLARA GONZÁLEZ
facilidad a cualquier localidad de memoria del dispositivo. En este
sentido, muchas memorias se pueden llamar memorias RAM, pero cuando se hace referencia a
una memoria semiconductora de acceso aleatorio por lo general se refiere una memoria de
lectura y escritura (RWM). De esta forma en lo subsecuente llamaremos RAM a la memoria
de lectura y escritura (RWM).

La memoria RAM es de gran utilidad en las computadoras para almacenar datos y


programas de forma temporal, de tal manera que cuando un programa este en ejecución se
tendrá acceso a la memoria RAM muchas vecesM.C. y se JOSÉ ARMANDO
almacenaran LARA GONZÁLEZ
resultados de operaciones en
dicha memoria. La principal desventaja es que son volátiles, es decir la información almacenada
se pierde cuando se interrumpe la energía eléctrica de la memoria.

Arquitectura de la memoria RAM


A continuación se considerará la memoria RAM como un conjunto de registro los cuales
almacenas los datos en la memoria y que tienen una dirección para cada registro. En la Figura
3.13 se muestra
M.C. un diagramaLARA
JOSÉ ARMANDO de bloques para representar la arquitectura de una memoria RAM
GONZÁLEZ
genérica.

I3 I2 I1 I0

R/W
BUFFERS DE ENTRADA E

0
REGISTRO 0

A5
1
[Link]
JOSÉ1 ARMANDO LARA GONZÁLEZ
2
REGISTRO 2
A4

.
A3 DECODIFICADOR .
DE 6 A 64 . cs
A2 LÍNEAS .
.
.
A1 .
.

A0 62
REGISTRO 62

63
REGISTRO 63

M.C. JOSÉ ARMANDO LARA GONZÁLEZ BUFFERS DE SALIDA E

03 02 01 00

Figura 3.13. Arquitectura de la memoria RAM

Tecnológico Nacional de México 120


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Generalmente las memorias RAM tienen capacidades de 1K, 4K, 8K, 16K, 64K, 128K,
256K y 1024K, con tamaños de palabras de 1, 4 y 8 bits aunque tanto el tamaño de palabra como
la capacidad de palabras pueden extenderse mediante la interconexión de varias memorias
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RAM. En el caso de la RAM de la Figura 3.13 se puede afirmar que tienen una capacidad de 64
palabras de 4 bits, ya que cuenta con seis líneas de dirección, de tal manera que tendrá 26 = 64
registros para direccionar.

Memorias SRAM
Las memorias SRAM (memoria de acceso aleatorio estática) toman su nombre debido a
que siempre y cuando se mantenga la alimentación de la memoria, los datos no requieren ser
refrescados con cierta frecuencia. La SRAM es una memoria volátil como todas las RAM ya
que los datos almacenados en la memoria seM.C. JOSÉ cuando
pierden ARMANDO LARA GONZÁLEZ
se desconecta la fuente de
alimentación de la memoria. Las celdas de memoria SRAM son en esencia Flips-Flops los
cuales almacenas los datos en la memoria.

Las memorias SRAM están disponibles en disponibles en la tecnología bipolar y MOS,


aunque la mayoría de las aplicaciones utilizan memorias RAM NMOS y CMOS. Como ya se
ha estudiado en el curso de electrónica digital básica, las memorias bipolares tienen la ventaja
de la alta velocidad comparadas con la alta densidad de integración y bajo consumo de potencia
de lasM.C. JOSÉ ARMANDO
memorias MOS, peroLARA GONZÁLEZ
las memorias MOS cada vez se diseñan más rápidas.

Una memoria SRAM comercial es la MCM6264C de 8K x 8 la cual tiene ciclos de ciclos


de lectura y de escritura de 12ns y consumo de energía en suspensión de 100mW. En la Figura
3.14 se muestra el símbolo lógico de la memoria SRAM MCM6264C.

A12
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
A 11 I/O 7
.
. I/O 6
SRAM
. 8 K x8 I/O 5
.
I/O 4
A1
A0 I/O 3
I/O 2
WE MCM6264C
I/O 1
CS1
I/O 0
CS2
M.C. JOSÉ ARMANDO LARA
OE GONZÁLEZ

Figura 3.14. Símbolo lógico de una memoria SRAM

Tecnológico Nacional de México 121


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

La señal ̅̅̅̅̅
𝑊𝐸 es la misma que 𝑅/𝑊 ̅ que se ha venido empleando en los otros ejemplos,
de tal manera que un nivel bajo en esta entrada, indica que se escribirán datos en la memoria,
mientras que un nivel alto indicará que se leerán datos de la memoria. En cuanto a las entradas
M.C. JOSÉ
̅̅̅̅̅1ARMANDO LARA GONZÁLEZ
de selección 𝐶𝑆 y 𝐶𝑆2, ambas deben estar activas para que el chip opere correctamente, siempre
y cuando los buffers de salida estén activos también, mediante la entrada ̅̅̅̅ 𝑂𝐸 = 𝑏𝑎𝑗𝑜. En la
Tabla 3.5 se muestran los modos de operación de la memoria SRAM MCM6264C.

Tabla 3.e. Modos de operación de la SRAM


ENTRADAS
MODO ̅̅̅̅̅
𝑊𝐸 ̅𝐶𝑆
̅̅̅1 𝐶𝑆2 ̅̅̅̅
𝑂𝐸 BUS DE DATOS
LECTURA 1 0 1 0 DATOS DE SALIDA
ESCRITURA 0 0 M.C.
1 JOSÉ
X DATOS DELARA
ARMANDO GONZÁLEZ
ENTRADA
SALIDA
1 X X 1 ALTA IMPEDANCIA
DESHABILITADA
NO
X 1 X X
SELECCIONADO
ALTA IMPEDANCIA
(MODO
X X 0 X
SUSPENDIDO)

M.C.
La JOSÉ ARMANDO
aplicación LARA GONZÁLEZ
de las Memorias SRAM tienen lugar en diseños donde la velocidad sea un
factor determinante, aun considerando los altos costos, alta disipación de potencia y baja
densidad de integración. Generalmente esta memoria es aplicada donde se requiere pequeñas
cantidades de memoria o donde se requiere una alta velocidad. Algunos osciloscopios de alta
velocidad, como los osciloscopios de almacenamiento digital y los analizadores lógicos,
requieren una memoria de muy alta velocidad y en pequeñas cantidades, para aplicaciones tales
como estas, se utilizan las memorias SRAM.

Las computadoras personales (basadas [Link]


JOSÉ ARMANDO
Windows LARA GONZÁLEZ
o MAC) utilizan pequeñas
cantidades de memoria SRAM para funciones que requieren máxima velocidad, como es el caso
de los graficos de video y la memoria caché.

Memorias SRAM
Las memorias DRAM (memoria de acceso aleatorio dinámica) toman su nombre del
hecho de que requieren ser refrescadas periódicamente para que no se pierda la información
M.C. JOSÉ
almacenada ARMANDO
en ellas. LARA GONZÁLEZ
Estas memorias se fabrican en tecnología MOS y tienen las características
de una alta densidad de integración, bajo consumo de energía y velocidades moderadas de
operación.

Tecnológico Nacional de México 122


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Las celdas de memoria de este dispositivo, son básicamente pequeños capacitores MOS,
generalmente de unos cuantos pico-Faradios. Como es de suponer con el paso del tiempo estos
capacitores tienden a descargarse, razón por la cual se requiere refrescar el dato presente en la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
celda de memoria, ya sea un “0” o un “1”.

El hecho de tener que refrescar la memoria DRAM periódicamente representa en si una


desventaja, pero actualmente muchas memorias cuentan con un circuito de soporte que realiza
la función de refresco, para evitar el uso de circuitos externos. Aun y con todo esto, las memorias
DRAM son una buena opción en diseños donde se requieran mantener un bajo consumo de
energía, mayor capacidad de almacenamiento y bajo costo. La memoria de trabajo de las
computadoras personales (basadas en Windows o MAC) es DRAM, debido a su gran capacidad
y bajo consumo de energía.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Arquitectura de la memoria DRAM


A continuación se considerará la memoria DRAM como un arreglo de celdas de un solo
bit, como se muestra en la Figura 3.15, donde se tienen un arreglo de 128 X 128 para que se
puedan seleccionar 16,384 posiciones de memoria de un bit. Como se puede ver se cuenta con
14 líneas de dirección (214 =16384) para poder seleccionar cualquiera de las 16,384 celdas de
memoria. Actualmente existen memorias con un ancho de palabra de 4 bits o más y tienen una
distribución igual a la de 1 bit pero al seleccionar una sola celda de memoria, selecciona grupo
[Link]
de celdas JOSÉ ARMANDO
ejemplo LARA
de cuatro GONZÁLEZ
bits.

Entradas de dirección de columnas

A6 A5 A4 A3 A2 A1 A0

Decodificador 1 de 128
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
A7 A8 A9 A10 A11 A12 A13

Decodificador 1 de 128
Entradas de dirección de fila

128 Filas

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


128
Columnas

Figura 3.15. Distribución de celdas de una memoria DRAM

Tecnológico Nacional de México 123


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

Como ya se había mencionado, las memorias DRAM almacenan los “ceros” y “unos”
en pequeños capacitores MOS, donde se tendrá un uno lógico cuando el capacitor este cargado
hacia el valor del voltaje de alimentación (Vcc) y un cero lógico cuando el capacitor este
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
descargado hacia un valor de voltaje de referencia (Vref) muy cercano a 0 volts. En la Figura
3.16 se muestra una representación de una celda de memoria DRAM.

SW4

DATO DE
ENTRADA
SW1 SW2 SW3
C DATO DE

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


SALIDA

VREF

Figura 3.16. Representación de una celda de una memoria DRAM

En el diagrama de la representación de la celda de memoria DRAM, no se muestran


muchos detalles de la celda pero este diagrama sirve para entender la idea principal respecto al
M.C. JOSÉ ARMANDO
funcionamiento y estructuraLARA GONZÁLEZ
de la celda de memoria.

Los interruptores SW1, SW2, SW3 y SW4, son MOSFET que son controlados por la CPU
̅ y por supuesto el
a través de las salidas de los decodificadores de direcciones y la señal 𝑅/𝑊
capacitor C guarda el dato en la celda de memoria DRAM.

Para escribir un dato, las salidas del decodificador de direcciones y la señal de control
𝑅/𝑊 M.C. JOSÉ ARMANDO
̅ cierran los interruptores SW1 y SW2, manteniendo abiertos losLARA GONZÁLEZ
interruptores SW3 y SW4
lo que hará que se conecte el dato de entrada con el capacitor. Si el dato de entrada es “1” el
capacitor se cargará, mientras que si el dato de entrada es un “0” el capacitor se descargará.
Posteriormente los interruptores SW1 y SW2 se abren quedando aislado el capacitor del resto
del circuito.

Por otra parte, para leer un dato almacenado en la celda, se cierran los interruptores SW2,
SW3 y SW4, manteniendo abierto a SW1, lo que hace que se conecte el voltaje presente en el
capacitor con la entrada no inversora del amplificador operacional, el cual compara dicho voltaje
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
con el valor del voltaje de referencia, generando un valor de voltaje de salida de 0 volts o 5 volts,
dependiendo del valor del voltaje en el capacitor. El voltaje de salida es retroalimentado al
capacitor con lo que además de leerse el dato se refresca la memoria.

Tecnológico Nacional de México 124


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

3.1.4 Aplicaciones de memorias en la lógica combinacional y secuencial.


En este punto se desarrollan dos memorias en VHDL, las cuales son de gran utilidad en
M.C. JOSÉ
aplicaciones de ARMANDO LARA GONZÁLEZ
lógica combinacional y secuencial. Una de las aplicaciones consta de una
memoria ROM de 255 x 12, mientras que la otra consta aplicación consta de una memoria RAM
de 4 x 4.

Las memorias ROM son de gran utilidad en el desarrollo de diseños en VHDL ya que es
en estas memorias donde se almacenan datos que son necesarios para la operación del programa,
estos datos son almacenados de forma permanente y no cambian dentro de la ejecución del
programa.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Por otra parte las memorias RAM también son de gran utilidad en los diseños digitales
en VHDL, ya que en estas memorias se almacenan datos de forma temporal y que está
cambiando constantemente durante la ejecución del programa.

Memoria ROM en VHDL


A continuación se llevará a cabo el desarrollo en VHDL de una memoria ROM de 255
x 12, es decir la memoria tendrá 8 líneas de dirección para direccionar 28 =256 registro de 12
M.C.
bits. La JOSÉ ARMANDO
memoria cuenta conLARA GONZÁLEZ
un bus de datos de 12 bits como se puede observar en la Figura
2.17

address7
address6 dato11
. .
. . dato10
. . . .
. . . .
. . MEMORIA ROMARMANDO
M.C. JOSÉ .
LARA
.
GONZÁLEZ
address0 . .
255 X 12 . .
dato1
dato0
clk

Figura 3.17. Símbolo de una memoria ROM de 255 x 12

M.C. JOSÉde
A partir ARMANDO LARAseGONZÁLEZ
la Figura 3.17 puede iniciar la construcción en VHDL de la memoria ROM
ya que conocemos todos los puertos de entrada y salida de la memoria. Se iniciara el proyecto
con la entidad de la memoria ROM, esta quedaría descrita en VHDL como se muestra en el
siguiente listado.

Tecnológico Nacional de México 125


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

entity ROM_255 is
Port ( clk : in STD_LOGIC;
address : in STD_LOGIC_VECTOR (7 downto 0);
dato
M.C. JOSÉ : out LARA
ARMANDO STD_LOGIC_VECTOR
GONZÁLEZ (11 downto 0));
end ROM_255;

En el listado anterior de la entidad de la memoria, se puede ver como se le ha dado el


nombre de ROM_255 y se describen los puertos de entrada y salida, definiendo la entrada clk
como una entrada simple de un solo bit. Así mismo se describen como entradas las direcciones
que corresponden a la entradas address descritas como un bus de 8 bits. Finalmente se describe
en esta misma entidad la salida dato como una salida tipo bus de 12 bits.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Posteriormente se procede a la descripción del comportamiento de la memoria,
primeramente se define el arreglo correspondiente a la memoria ROM dándole el nombre de
memoria y definiendo el arreglo de 256 filas (0 to 255)y el ancho de la palabra de 12 bits
(11 downto 0)como se muestra en el siguiente listado.

architecture Behavioral of ROM_255 is


type memoria is array (0 to 255) of std_logic_vector(11 downto 0);
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Una vez hecho lo anterior, se define como constante ROM y se le asignan datos a la
memoria, en este caso de le deben asignar 256 valores de 12 bits para cada uno de los 256
registros. En el siguiente listado se observa como se están asignando los 256 datos en
hexadecimal desde el primer valor de X"000" hasta el número X"255"
constant rom:memoria:=(
X"000",X"001",X"002",X"003",X"004",X"005",X"006",X"007",X"008",X"009",
X"010",……………………………………………………………………………………………………………X"244",X"245",X"246",X
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
"247",X"248",X"249",X"250",X"251",X"252",X"253",X"254",X"255");

Finalmente se define el comportamiento de la memoria ROM como se muestra en el


siguiente listado. Primeramente se inicia con el begin y posteriormente dentro del procces del
reloj se define la variable direc que puede tomar un valor desde 0 a 255.

Después de esto, a la variable direc se le asigna el valor de address convertido en un


dato entero, para posteriormente verificar si existe un flanco de transición positiva y en caso de
M.C.
ser así, a laJOSÉ ARMANDO
salida dato se leLARA GONZÁLEZ
asignara el valor del vector donde apunte el valor de direc, mismo
que a su vez es igual a address. Finalmente se tiene el fin de procces y el fin del comportamental
de la memoria ROM.

Tecnológico Nacional de México 126


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

begin

process(clk)
M.C. JOSÉvariable
ARMANDO
begin
direc : integer range 0 to 255;
LARA GONZÁLEZ
direc := conv_integer (address);
if clk'event and clk='1'
then dato <= rom(direc);
end if;
end process;
end Behavioral;

El programa completo correspondiente a la memoria ROM de 256 x 12 se muestra en el


siguiente listado. Este programa está listo para M.C.
ser editado en el programa
JOSÉ ARMANDO ISE Desing Suite
LARA GONZÁLEZ
para su posterior síntesis, depuración, simulación y descarga a la FPGA.

entity ROM_255 is
Port ( clk : in STD_LOGIC;
address : in STD_LOGIC_VECTOR (7 downto 0);
dato : out STD_LOGIC_VECTOR (11 downto 0));
end ROM_255;

M.C. JOSÉ ARMANDO


architecture LARA GONZÁLEZ
Behavioral of ROM_255 is
type memoria is array (0 to 255) of std_logic_vector(11 downto 0);

constant rom:memoria:=(
X"000",X"001",X"002",X"003",X"004",X"005",X"006",X"0
07",X"008",X"009",X"010",………………………………………………………………………
……………………………………X"244",X"245",X"246",X"247",X"248",X"2
49",X"250",X"251",X"252",X"253",X"254",X"255");

begin

process(clk)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
variable direc : integer range 0 to 255;
begin
direc := conv_integer (address);
if clk'event and clk='1'
then dato <= rom(direc);
end if;
end process;
end Behavioral;

M.C. RAM
Memoria JOSÉ ARMANDO
en VHDL LARA GONZÁLEZ
A continuación se llevará a cabo el desarrollo en VHDL de una memoria RAM de 4 x 4,
es decir la memoria tendrá 2 líneas de dirección para direccionar 22 =4 registro de 4 bits.

Tecnológico Nacional de México 127


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

En la Figura 3.18 se muestra el símbolo de la memoria RAM de 4 x 4 la cual cuenta con


un bus de datos de entrada de 4 bits (𝑑𝑖𝑛0 𝑎 𝑑𝑖𝑛3 ), un bus de datos de salida de 4 bits
(𝑑𝑜𝑢𝑡0 𝑎 𝑑𝑜𝑢𝑡3 ), 2 líneas de dirección (𝑎𝑑𝑑𝑟𝑒𝑠𝑠0 𝑎 𝑎𝑑𝑑𝑟𝑒𝑠𝑠1) y dos líneas de control
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
(𝑐𝑙𝑘 𝑎 𝑤𝑒), ambas de una sola línea.

address0
address1

din0 dout0
din1 MEMORIA RAM dout1
din2 4X4 dout2
din3
M.C. JOSÉ ARMANDO
dout
LARA GONZÁLEZ
3

clk
we

Figura 3.18. Símbolo de una memoria RAM de 4 x 4

A partir de la Figura 3.18 se puede iniciar la construcción en VHDL de la memoria RAM


ya que conocemos todos los puertos de entrada y salida de la memoria. Se iniciara el proyecto
con laM.C. JOSÉde
entidad ARMANDO
la memoriaLARA GONZÁLEZ
RAM, esta quedaría descrita en VHDL como se muestra en el
siguiente listado.

entity Memoria_Ram is
generic(n: integer range 2 to 16 := 4; --número de bits
m: integer range 2 to 10 := 2); --líneas de dirección
Port( clk, we : in STD_LOGIC;
din : in STD_LOGIC_VECTOR (n-1 downto 0);
address : in STD_LOGIC_VECTOR (m-1 downto 0);
dout : out STD_LOGIC_VECTOR (n-1 downto
M.C. JOSÉ ARMANDO 0));
LARA GONZÁLEZ
end Memoria_Ram;

En este listado primeramente de definen n y m como variables genéricas, donde n puede


tomar un valor desde 2 a 16 y para este caso se le asigna un valor de 4 igual al ancho del bus de
tatos o tamaño de la palabra. Por otra parte m puede tener un rango desde 2 a 10 y se le asigna
para este ejemplo el número 2 igual al número de líneas de dirección. Posteriormente se definen
las entradas y salidas mencionadas.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Una vez descrita la entidad de la memoria RAM se procede a la descripción
comportamental de la memoria, pero antes del begin se debe definir el arreglo correspondiente
a la memoria RAM de 4 x 4, como se muestra en las siguientes líneas.

Tecnológico Nacional de México 128


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

type arreglo is array (0 to 2**m-1) of std_logic_vector(n-1 downto 0);


signal direc : integer range 0 to 2**m-1;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En esta declaración a una matriz que se le ha puesto el nombre de arreglo tipo array de
0 a 4 por el tamaño de los registros 3 hasta 0. Se ha declarado también una señal llamada direc
con un tamaño de 0 a 3.

Finalmente se tiene la descripción comportamental de la memoria, misma que se muestra


en el listado siguiente. La operación general de la memoria, consiste en verificar al momento
del pulso de reloj, el valor de la señal de lectura/escritura we y en caso de que sea “1” se escribirá
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
dentro de la memoria el dato proveniente del bus de datos de entrada de la memoria en la
dirección establecida por el bus de direcciones. En caso de we sea “0” el dato almacenado en la
posición definida por el bus de direcciones será sacado de la memoria hacia la salida dout.

begin
direc <= conv_integer(address);
process(clk)
variable memoria : arreglo;
M.C. JOSÉbegin
ARMANDO LARA GONZÁLEZ
if clk'event and clk='1'
then if we='1'
then memoria(direc) := din;
end if;
dout <= memoria(direc);
end if;
end process;
end Behavioral;

En esta descripción comportamental M.C. de laJOSÉ ARMANDO


memoria, LARA GONZÁLEZ
primeramente se convierte el
argumento address en un entero y se le asigna a la señal direc, después se define una variable
memoria a la cual se le asigna el valor de arreglo, para posteriormente verificar si existe un
flanco de transición positiva en el pulso de reloj y en caso de ser afirmativo, se verifica si we es
igual a “1” y en caso de ser afirmativo se escribe en la memoria el dato de entrada, en la dirección
definida por address, pero en caso de we sea “0” saca el dato del registro definido por address
hacia la salida dout.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


El programa completo correspondiente a la memoria RAM de 4 x 4 se muestra en el
siguiente listado. Este programa está listo para ser editado en el programa ISE Desing Suite
para su posterior síntesis, depuración, simulación y descarga a la FPGA.

Tecnológico Nacional de México 129


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 3 Memorias

entity Memoria_Ram is
generic(n: integer range 2 to 16 := 4; --número de bits
m: integer range 2 to 10 := 2); --líneas de dirección
M.C. JOSÉPort( clk, LARA
ARMANDO we : GONZÁLEZ
in STD_LOGIC;
din : in STD_LOGIC_VECTOR (n-1 downto 0);
address : in STD_LOGIC_VECTOR (m-1 downto 0);
dout : out STD_LOGIC_VECTOR (n-1 downto 0));
end Memoria_Ram;

architecture Behavioral of Memoria_Ram is


type arreglo is array (0 to 2**m-1) of std_logic_vector(n-1 downto 0);
signal direc : integer range 0 to 2**m-1;

begin
direc <= conv_integer(address);
process(clk) M.C. JOSÉ ARMANDO LARA GONZÁLEZ
variable memoria : arreglo;
begin
if clk'event and clk='1'
then if we='1'
then memoria(direc) := din;
end if;
dout <= memoria(direc);
end if;
end process;
end Behavioral;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 130


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Capítulo 4

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Arquitectura de Procesadores
=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los conceptos básicos sobre la arquitectura interna
de los microprocesadores, destacando las arquitecturas de Von Neumann y la Harvard.

De igual manera se estudia en este capítulo, la estructura y funcionamiento de la Unidad


Aritmética y Lógica (ALU), el Registro de Estado y operaciones con el registro y datos de la
memoria, todo lo anteriormente mencionado, con la finalidad de tener los conocimientos
necesarios para implementar una ALU en VHDL. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Todas las computadoras constan principalmente de dos partes, la CPU que procesa los
datos, y la MEMORIA que guarda los datos. Cuando hablamos de memoria, manejamos dos
parámetros, los datos en sí, y el lugar donde se encuentran almacenados (o dirección). Los dos
son importantes para la CPU, pues muchas instrucciones frecuentes se traducen a algo así como
"Toma los datos de ésta dirección y añádelos a los datos de ésta otra dirección", sin saber en
realidad qué es lo que contienen los datos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Por esta razón en necesario que el lector conozca la diferencia entre la memoria de datos
y la memoria de programas, conociendo a detalle el funcionamiento de cada una de ellas, lo que
podrá lograr estudiando el presente capítulo.

Tecnológico Nacional de México 131


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

4.1. ARQUITECTURA VON NEUMANN.


A continuación se estudia la arquitectura Von Neumann. La Arquitectura de Von
NeumannJOSÉ
M.C. es unaARMANDO
familia de LARA GONZÁLEZ
arquitecturas de computadoras que utilizan el mismo dispositivo de
almacenamiento tanto para las instrucciones como para los datos (a diferencia de la arquitectura
Harvard).

La mayoría de computadoras modernas están basadas en esta arquitectura, aunque


pueden incluir otros dispositivos adicionales, por ejemplo, para gestionar las interrupciones de
dispositivos externos como ratón, teclado, entre otros.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


4.1.1 Arquitectura de los microprocesadores
Las computadoras con esta arquitectura constan de cinco partes: La unidad aritmético y
lógica o ALU, la unidad de control, la memoria, un dispositivo de entrada/salida y el bus de
datos que proporciona un medio de transporte de los datos entre las distintas partes, en la Figura
4.1 se muestra la arquitectura Von Neumann, para una computadora.

M.C. JOSÉ Memoria


ARMANDO LARA GONZÁLEZ Dispositivos de Entrada/Salida
Bus del Sistema

Area de datos
10111011100
10010111001

Area de Codigo Registros


10111011100
10010111001
Unidad de
ALU Control
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 4.1.- Arquitectura Von Neumann

Un ordenador con esta arquitectura realiza o emula los siguientes pasos secuencialmente:

1. Enciende la computadora y obtiene la siguiente instrucción desde la memoria en la


dirección indicada por el contador de programa y la guarda en el registro de instrucción.

2.M.C.
Aumenta el contadorLARA
JOSÉ ARMANDO de programa
GONZÁLEZen la longitud de la instrucción para apuntar a la
siguiente.

3. Decodifica la instrucción mediante la unidad de control. Esta se encarga de coordinar el


resto de componentes del ordenador para realizar una función determinada.

Tecnológico Nacional de México 132


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

4. Se ejecuta la instrucción. Esta puede cambiar el valor del contador del programa,
permitiendo
M.C. así operaciones
JOSÉ ARMANDO repetitivas. El contador puede cambiar también cuando se
LARA GONZÁLEZ
cumpla una cierta condición aritmética, haciendo que el ordenador pueda “tomar
decisiones”, que pueden alcanzar cualquier grado de complejidad, mediante la aritmética
y lógica anteriores.

5. Vuelve al paso 2.

En un sistema con arquitectura Von Neumann el tamaño de la unidad de datos o


instrucciones está fijado por el ancho del bus que comunica la memoria con la CPU. Así un
M.C. JOSÉ
microprocesador de 8 bits con un bus de 8 bits, tendrá que ARMANDO LARA
manejar datos GONZÁLEZ de una
e instrucciones
o más unidades de 8 bits (1 bytes) de longitud. Si tiene que acceder a una instrucción o dato de
más de un byte de longitud, tendrá que realizar más de un acceso a la memoria. El tener un único
bus hace que el microprocesador sea más lento en su respuesta, ya que no puede buscar en
memoria una nueva instrucción mientras no finalicen las transferencias de datos de la
instrucción anterior.

Las principales limitaciones con la arquitectura Von Neumann son:


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 La limitación de la longitud de las instrucciones por el bus de datos, que hace que
el microprocesador tenga que realizar varios accesos a memoria para buscar
instrucciones complejas.

 La limitación de la velocidad de operación a causa del bus único para datos e


instrucciones que no deja acceder simultáneamente a unos y otras, lo cual impide
superponer ambos tiempos de acceso
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

4.2. ARQUITECTURA HARVARD.


El término Arquitectura Harvard originalmente se refería a las arquitecturas de
computadoras que utilizaban dispositivos de almacenamiento físicamente separados para las
instrucciones y para los datos (en oposición a la Arquitectura de Von Neumann).

M.C.
El JOSÉ ARMANDO
término provieneLARA
de GONZÁLEZ
la computadora Harvard Mark I, que almacenaba las
instrucciones en cintas perforadas y los datos en interruptores. La arquitectura Harvard ofrece
una solución particular al problema de la limitación de la velocidad de la memoria. Las
instrucciones y los datos se almacenan en cachés separadas para mejorar el rendimiento.

Tecnológico Nacional de México 133


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Por otro lado, tiene el inconveniente de tener que dividir la cantidad de caché entre los
dos, por lo que funciona mejor sólo cuando la frecuencia de lectura de instrucciones y de datos
es aproximadamente la misma.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

4.2.1 Arquitectura de los Microcontroladores


Muchos de los Microcontroladores comerciales modernos utilizan la arquitectura
Harvard en su estructura interna. Por ejemplo los Microcontroladores PIC utilizan esta
arquitectura, ya que tienen la unidad central de proceso (CPU) conectada a dos memorias, una
con las instrucciones y otra con los datos, por medio de dos buses diferentes.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Una de las memorias contiene solamente las instrucciones del programa por lo que se le
llama también comúnmente Memoria de Programas, y la otra memoria sólo almacena datos
por lo que se le conoce también comúnmente como Memoria de Datos.

Como es lógico suponer la arquitectura cuenta con dos buses distintos, ambos buses son
totalmente independientes lo que permite que la CPU pueda acceder de forma independiente y
simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes
estos pueden tener distintos contenidos en la misma dirección y también distinta longitud.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
También la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso
de la memoria en general.

Esta arquitectura suele utilizarse también en los DSPs (Procesador Digital de Señales),
usados habitualmente en productos para procesamiento de audio y video. En la Figura 4.2, se
muestra la Arquitectura Harvard para un Microcontrolador o Computadora.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Dispositivos de Entrada/Salida

Memoria

Memoria Memoria de
Registros Programas
de Datos

10111011100 10111011100
10010111001 Unidad de 10010111001
ALU Control

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Figura 4.2.- Diagrama a bloques de la Arquitectura Harvard

Tecnológico Nacional de México 134


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Las principales ventajas con la arquitectura Harvard son:

 El tamaño de las instrucciones no está relacionado con el de los datos, y por lo tanto
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
puede ser optimizado para que cualquier instrucción ocupe una sola posición de
memoria de programa, logrando así mayor velocidad y menor longitud de programa.

 El tiempo de acceso a las instrucciones puede superponerse con el de los datos,


logrando una mayor velocidad en cada operación.

4.3. ESTRUCTURA Y FUNCIONAMIENTO DE UNA ALU.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En electrónica digital y computación, una ALU por sus siglas en inglés (arithmetic logic
unit), se define como un circuito digital que realiza operaciones aritméticas como suma, resta,
multiplicación y división, así como operaciones lógicas como OR, NOT, AND y NAND entre
otras.

Todo microprocesador cuenta con una ALU dentro del chip para realizar las operaciones
que el dispositivo necesite. En la Figura 4.3 se muestra el símbolo de una ALU típica. En esta
ALU M.C.
se pueden observar las
JOSÉ ARMANDO entradas
LARA de los operandos A y B, mientras que R representa el
GONZÁLEZ
resultado de salida, S representa los pines de selección de la función que la ALU deberá realizar
ya sea de suma, resta o cualquiera otra operación y C es el acarreo de salida.

Los operandos A y B pueden tener un ancho variable dependiendo del tamaño de la ALU
pudiendo ser de cuatro u ocho bits por ejemplo. En la Figura 4.4 se muestra un ejemplo de una
ALU de cuatro bits para entender mejor la estructura y la operación de la ALU.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A B

S C

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

R
Figura 4.3.- Símbolo de una ALU típica

Tecnológico Nacional de México 135


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

En este ejemplo de una ALU de cuatro bits de la Figura 4.4 se puede apreciar que se
tienen un operando A de entrada, el cual corresponde al número 10, mientras que el número que
se está introduciendo en el operando B corresponde al número 7. Por otra parte la entrada de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
selección de función se está introduciendo el numero 0 equivalente a una suma, por lo que la
ALU deberá sumar los operandos 10+7=17 en binario el resultado sería 10001.

Debido a que la salida de la ALU es de cuatro bits, en la salida se reflejará el número


0001, mientras que el digito más significativo del resultado aparecerá reflejado en el acarreo de
salida, como se muestra en la Figura 4.4.

OPERANDO A M.C. JOSÉ ARMANDO


OPERANDO B LARA GONZÁLEZ
1 0 1 0 0 1 1 1

0 1 ACARREO
SUMA DE SALIDA
0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


0 0 0 1
RESULTADO
Figura 4.4.- Ejemplo de una ALU de cuatro bits

De esta manera opera la ALU ya que en la selección de función se puede determinar la


operación que deberá desarrollar la ALU con los dos operandos de entrada. En este caso la ALU
no cuenta con una entrada de acarreo pero se puede agregar dicha entrada para que la ALU sea
más completa, ya que en muchas ocasiones M.C.
seJOSÉ ARMANDO
requiere sumar LARA GONZÁLEZ
o restar dos operandos,
considerando u acarreo de entrada.

Por otra parte en Figura 4.5 se muestra el diagrama eléctrico de una ALU de dos bits. En
esta ALU se tienen dos operandos de entrada, siendo estos A1A0 y B1B0. Se tiene además una
entrada de acarreo etiquetada como Cin y tres entradas de selección de modo de operación S 2
S1 y S0. Por otra parte la ALU tiene la salida o resultado de las operaciones en los pines R1 y R0
y una salida de acarreo marcado como COUT que vendría representando el bit más significativo
del resultado, es decir vendría representando COUT=R2.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Cada bit de la ALU se procesa de manera idéntica, con la excepción del direccionamiento
del bit del acarreo. El manejo de este bit es explicado más adelante.

Tecnológico Nacional de México 136


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Las entradas A y B van hacia las cuatro puertas de la derecha, de arriba a abajo, XOR, AND,
OR. Las tres primeras compuertas realizan las operaciones XOR, AND, y OR sobre los datos A
y B. La última puerta XOR es la puerta inicial de un sumador completo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

CIN S2 S1 S0

A0
B0 D0
D1 R0
D2
D3
R1

M.C. JOSÉ ARMANDO


A LARA GONZÁLEZ
COUT
B
C

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

A1
B1 D0
D1
D2
D3

M.C. JOSÉ ARMANDO


A LARA GONZÁLEZ
B
C

Figura 4.5.- Diagrama eléctrico de una ALU de dos bits.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El paso final de las operaciones sobre cada bit es la multiplexación de los datos. La
entrada S de 3 bits, S0, S1 y S2 (desde la unidad de control) determina cuál de las funciones se
van a realizar, como se enlistan a continuación:

Tecnológico Nacional de México 137


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

 OP = 000 → XOR
 OP = 001 → AND
 OP = 010 → OR
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 OP = 011 → Adición

Claramente se ve que las otras cuatro entradas del multiplexor están libres para otras
operaciones (sustracción, multiplicación, división, NOT A, NOT B, entre otras). Aunque S2
actualmente no es usada en este montaje (a pesar de estar incluida y conectada), ésta sería usada
en el momento de realizar otras operaciones además de las 4 operaciones listadas arriba.

M.C. de
Los datos de acarreo de entrada y acarreo JOSÉ ARMANDO
salida, LARA
llamados GONZÁLEZ
flags (banderas), son
típicamente conectados a algún tipo de registro de estado.

4.3.1 Registro de estado


Se conoce como registro de estado a los registros de memoria en el cual es posible darse
cuenta del estado que guarda la CPU después de que se realiza una operación en la ALU. En
este registro se deja constancia de algunas condiciones que se dieron en la última operación
realizada y que podrán de ser tenidas en cuenta en operaciones posteriores. Por ejemplo, en el
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
caso de hacer una resta, en el registro de estado queda constancia de si el resultado fue cero,
positivo o negativo, o si se sobrepasó la capacidad de representación.

Cada modelo de procesador tiene sus propios registros de estados, pero en la Figura 4.6 se
muestra uno de los más comunes.

- Z N - V P I C
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Figura 4.6.- Representación de un registro de estado

A continuación se desglosa el significado de cada una de las literales que componen el registro
de estado de la Figura 4.6.

 Z = Zero flag: El resultado es cero.


 N = Negative flag: El resultado es negativo.
 V = Overflow flag: El resultado supera el número de bits de la ALU.
M.C.JOSÉ
P =ARMANDO
Parity flag:LARA GONZÁLEZ
Paridad del número de 1 en los datos.
 I = Interrupt flag: Se ha producido una interrupción.
 C = Carry flag: Acarreo de la operación realizada.

Tecnológico Nacional de México 138


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

4.3.2 Operaciones con datos de memoria y registros.


Es posible para la ALU realizar operaciones con datos almacenados en la memoria y con
M.C. JOSÉ ARMANDO
datos almacenados LARA
en registros. GONZÁLEZ
Por ejemplo supongamos que tenemos una aplicación donde se
requiere sumar datos de la memoria a un registro. En el siguiente listado se tiene un ejemplo
donde se desarrollan dos sumas consecutivas almacenadas en las posiciones de memoria NUM
y NUM+1 del segmento de datos al registro AL.

MOV DI, OFFSET NUMERO


MOV AL, 0
ADD AL, [DI]
ADD AL, [DI+1]

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


La primera instrucción carga el registro Índice de Destino (DI) con la dirección de
desplazamiento NUM. El registro DI que se usa en este ejemplo, direcciona datos en el segmento
de datos que comienza en la posición de memoria NUM. Por otro lado en la segunda línea se
carga el acumulador AL con cero, con la finalidad de resetear la suma.

Posteriormente en la tercera línea, la instrucción ADD AL,[DI], suma el contenido de


la posición de memoria NUM al contenido del registro AL que como ya sabemos estaba en cero.
M.C. JOSÉ
Finalmente en laARMANDO
cuarta líneaLARA GONZÁLEZ
la instrucción ADD AL,[DI+1]suma el contenido de la posición
de memoria NUM mas un byte al registro AL.

Una vez que se han ejecutado todas las instrucciones del listado anterior, el resultado
está disponible en el registro AL y el valor que tendrá dicho registro, será el resultado de sumar
el contenido de la posición de memoria NUM con el contenido de la posición de memoria
NUM+1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
4.3.3 Operaciones con punto flotante y fijo.
Una Unidad de Punto Flotante (Floating Point Unit) es un componente de la CPU
especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda
FPU puede realizar son las aritméticas (suma y multiplicación), si bien algunos sistemas más
complejos son capaces también de realizar cálculos trigonométricos y/o exponenciales.

No todas las CPUs tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar
M.C. JOSÉ
programas ARMANDO LARA
en microcódigo GONZÁLEZ
para emular una función en coma flotante a través de la Unidad
Aritmético Lógica (ALU), la cual reduce el costo del hardware a cambio de una sensible pérdida
de velocidad.

Tecnológico Nacional de México 139


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Un número con punto flotante está formado por dos partes, una mantisa o fracción y un
exponente. En la Figura 4.7 se muestra el formato de 4 bits de los números reales como se
almacenan en un sistema computacional. A formato se le conoce como de precisión simple.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

31 30 23 32 0

S EXPONENTE MANTISA

Figura 4.7.- Numero de punto flotante de cuatro bits.

Por otra parte en la Figura 4.8 se muestra el formato de 8 bits de los números reales como
M.C. JOSÉ
se almacenan en un sistema computacional. A formato ARMANDO
se le conoce comoLARAdeGONZÁLEZ
doble precisión.

63 62 52 51 0

S EXPONENTE MANTISA

Figura 4.8.- Numero de punto flotante de ocho bits.

M.C.
La JOSÉ ARMANDO
aritmética simpleLARA
indicaGONZÁLEZ
que se requieren 33 bits para almacenar las tres piezas de
datos lo cual es erróneo ya que la mantisa de 24 bits contiene un bit oculto o implícito que
permite almacenar números de 24 bits en un espacio de 23 bits. El bit oculto es el primer bit del
número con punto flotante normalizado. Al normalizar un número, se ajusta de tal forma que su
valor sea por lo menos 1, pero menos de 2.

Por ejemplo, si se convierte el 12 en binario se tendría 11002 se normaliza y el resultado


es 1.1 x 23 en este caso el número 1 no se almacena en la parte de la mantisa de 23 bits del
número, ese 1 es el bit oculto. En la Tabla 4.1M.C.
se JOSÉ ARMANDO
muestra LARA
el formato GONZÁLEZ
de precisión simple del
número 12 y de otros números más.

Tabla 4.1 Números reales de precisión simple


DEC BIN NORMAL. SIGNO EXP+DES MANTISA
+12 1100 1.1 x 23 0 10000010 10000000 00000000 00000000
-12 1100 1.1 x 23 1 10000010 10000000 00000000 00000000
+100 1100100 1.1001 x 26 0 10000101 10010000 00000000 00000000
-1.75 1.11 1.11 x 20 1 01111111 11000000 00000000 00000000
M.C.
+0.25JOSÉ ARMANDO
0.01 1.0LARA
x 2-2 GONZÁLEZ
0 01111101 00000000 00000000 00000000
+0.0 0 0 0 00000000 00000000 00000000 00000000

Tecnológico Nacional de México 140


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

El exponente se guarda como un exponente con desviación. Con el formato de precisión


simple del número real, la desviación es 127 (7FH) y con el formato de doble precisión la
desviación es 1027 (3FFH). La desviación y el exponente se suman antes de almacenarse en la
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
porción del exponente del número de punto flotante.

Por ejemplo en la primera fila de la Tabla 4.1 se tiene un exponente de 3 en el término


23 el cual representado como exponente con deviación será 127+3=130 o bien será igual a 82H ó
100000102. Hay dos excepciones a la regla para números de punto flotante. El número 0.0 se almacena
como ceros en todas las posiciones. El número infinito se almacena como unos en el exponente y ceros
en la mantisa. El bit de signo indica un infinito positivo o negativo.

M.C.
De la misma forma que con otros tipos de JOSÉ
datos seARMANDO
puede usar LARA GONZÁLEZ
el lenguaje ensamblador
para definir números con punto flotante en formatos de precisión simple o de doble precisión.
Como los números de precisión simple son de 32 bits se utiliza la directiva DD o la directiva
DQ para definir números de doble precisión de 64 bits. En el siguiente listado se muestra un
ejemplo de números con punto flotante descritos en lenguaje ensamblador.

NUM1 DD 1.234
NUM2 DD -23.4
M.C.
NUM3JOSÉ ARMANDO LARA
REAL4 GONZÁLEZ
4.2E2

En la primera línea del listado se define el numero 1.234 utilizando la directiva DD,
mientras que en la segunda línea se define el -23.4 y finalmente en la línea tres se define el
número 420 utilizando unas de las directivas para números con punto flotante las cuales son
REAL4, REAL8 y REAL10.

Para complementar el tema, se muestra M.C.a JOSÉ ARMANDO


continuación un LARA GONZÁLEZ
ejemplo de definición de
números con punto flotante de precisión simple y otro ejemplo para números de doble precisión
para ser empleados en VISUAL C++.

NÚMEROS CON PUNTO FLOTANTE CON PRECISIÓN SIMPLE


float Num1 = 1.234;
float Num2 = -23.4;
float Num3 = 4.3e2

NÚMEROS CON PUNTO FLOTANTE CON DOBLE PRECISIÓN


M.C. JOSÉNum4
double ARMANDO LARA GONZÁLEZ
= 123.4;
double Num5 = -23.4;

Tecnológico Nacional de México 141


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

4.4. DESCRIPCIÓN DE UNA ALU CON VHDL.


En esta sección se llevara a cabo el diseño de una ALU en VHDL. La ALU constará de
M.C. JOSÉAARMANDO
dos operandos LARAbits.
y B de cuatro GONZÁLEZ
De igual modo constará con una entrada de selección de
función S de tres bits. Por otra parte la ALU tendrá una salida de cuatro bits para el resultado de
las operaciones, una salida de acarreo COUT y una salida para la bandera de la ALU.

En la Figura 4.7 se muestra un diagrama de bloques de la ALU que se desarrollará en este


capítulo, como un diagrama de bloques con sus puertos de entrada salida. La ALU tendrá la capacidad
de desarrollar 8 operaciones diferentes al contar con tres entradas de selección de función (S0, S1 y S2).

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A3
A2
A1 COUT
A0
V

B3
B2
B1
ALU
B0 R3
R2
R1
M.C. JOSÉ ARMANDO
S2
LARA GONZÁLEZ R0
S1
S0

Figura 4.7.- Diagrama de bloques de una ALU de cuatro bits

La ALU es de cuatro bits ya que el bus de los operandos son de cuatro bits (A0, A1, A2,
A3 y B0, B1, B2, B3). Así mismo la salida correspondiente al resultado es de cuatro bits (R0, R1,
R2 y R3) complementado con un bit de acarreo de salida (COUT). El COUT se activara en las sumas
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
con y sin acarreo de entrada, cuando el resultado sobrepase los cuatro bits del bus de resultados.
Finamente V se activara cuando el resultado en una resta sea negativo (A-B con B>A).

Una vez que se conoce el número de pines de entrada y de salida de la ALU es posible
describir la entidad en VHDL como se muestra en el siguiente listado.

entity alu is
Port (A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
M.C. JOSÉ ARMANDO LARA
S : in GONZÁLEZ
STD_LOGIC_VECTOR (2 downto 0);
R : out STD_LOGIC_VECTOR (3 downto 0);
COUT,V : out STD_LOGIC);
end alu;

Tecnológico Nacional de México 142


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Como se puede apreciar en el listado, se han definido A y B como vectores de entradas


de cuatro bits, así mismo, S se ha definido como un vector de entrada de tres bits, mientras que
R se ha descrito como una salida de cuatro bits. Finalmente se han descrito como salidas tipo
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
bit los pines COUT y V.

Una vez que se ha descrito la entidad de la ALU, se procederá a describir el


comportamental de la ALU. Para esto es necesario definir las 8 operaciones que realizará la
ALU, tal como se muestra en la Tabla 4.2. En esta tabla se muestra un resumen del
funcionamiento de la ALU de cuatro bits que se desarrollará en VHDL en esta sección.

Como se puede observar en la tabla, M.C. JOSÉtendrá


la ALU ARMANDO LARA GONZÁLEZ
la capacidad de desarrollar 8
operaciones diferentes, ya que cuenta con tres entradas de selección de operación (S0, S1 y S2) y
en consecuencia 8 posibles combinaciones (desde “000” hasta “111” ).

Tabla 4.2.- Resumen de la operación de la ALU de cuatro bits.


OPERACION RESULTADO BANDERA DESCRIPCIÓN
000 A+B COUT=BIT DE ACARREO SUMA
001 A-B V=1 sí B>A RESTA
M.C. JOSÉ
010 ARMANDO
ALARA
AND GONZÁLEZ
B V=0 AND bit a bit
011 A OR B V=0 OR bit a bit
100 A XOR B V=0 XOR bit a bit
101 NOT A V=0 Inverso A bit a bit
110 NOT B V=0 Inverso B bit a bit
111 A + B+1 COUT=BIT DE ACARREO SUMA con acarreo

Cuando se seleccione la primera función marcada con el numero “000” la ALU realizara la suma
de los dos operandos A y B y la bandera de acarreo M.C.
COUT JOSÉ ARMANDO
se activará LARA
en caso de que GONZÁLEZ
el resultado sobrepase
los cuatro bits del resultado R.

Con la selección de “001” se llevará a cabo la acción de restar el operando B del operando A y
la bandera V se activará en caso de que el resultado de la resta sea negativo, lo que sucederá únicamente
cuando B sea mayor que A.

Por otro lado, cuando la entrada de selección de operación sea “010”, la ALU desarrollará la
M.C.lógica
operación de A AND B
JOSÉ ARMANDO y ambas
LARA banderas tendrán un cero en su salida. De esta manera
GONZÁLEZ
cuando la entrada de selección de operación sea “011” se llevará a cabo la operación lógica A
OR B y ambas banderas tendrán un cero en su salida.

Tecnológico Nacional de México 143


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Cuando la entrada de selección de operación sea “100” se llevará a cabo la operación


lógica A XOR B y ambas banderas tendrán un cero en su salida. De igual forma cuando la
entrada de selección sea “101” en la salida R se tendrá el inverso del operando A, mientras que
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
con “110” en la salida R se tendrá el inverso del operando B.

Finalmente cuando la entrada de selección sea “111” la ALU realizara la suma de los dos
operandos A y B más un bit de acarreo de entrada y la bandera de acarreo C OUT se activará en caso de
que el resultado sobrepase los cuatro bits del resultado R.

Una vez definida la Tabla 4.2 con las operaciones que desarrollará la ALU es posible describir,
con esta información, el comportamiento de la ALU. El programa se explicará parte por parte para
entender mejor su estructura comportamental. La M.C. JOSÉ
primera ARMANDO
parte LARAque
del programa GONZÁLEZ
se muestra en el
siguiente listado corresponde a la definición de señales y asignación de valores y será explicado a
continuación.

architecture Behavioral of alu is


signal A1,B1,R1: std_logic_vector(4 downto 0);
signal SAL: std_logic_vector(3 downto 0);
signal ACA: std_logic;
begin
M.C.
SALJOSÉ
<= ARMANDO LARA
R1 (3 downto GONZÁLEZ
0);
ACA <= R1 (4);

Es este listado se inicia la descripción comportamental de la ALU y se definen como


señales tipo bus de cinco bits A1, B1 y R1. Estas señales servirán para guardar información en
forma temporal que después será transferida a otras variables o salidas de la ALU. También se
ha definido la señal SAL tipo bus de cuatro bits y ACA tipo bit. En este listado también se
observa que se le ha dado a SAL el valor de los cuatro bits menos significativos de R1 y a ACA
el valor del bit más significativo de R1. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La siguiente parte del programa la constituye un process cuyas variables sensibles son
A, B, ACA, SAL, A1, B1 y S, es decir este process se ejecutará cada vez que haya un cambio
en alguna de las variables sensibles. En el siguiente listado se muestra el inicio del process, así
como la subrutina para la operación de suma (A+B) seleccionada con la entrada de selección
de operación S=“000”.

Como se puede ver en el listado, se verifica primeramente si la entrada de selección de


M.C. JOSÉ
operación (S) esARMANDO
“000” y enLARA
casoGONZÁLEZ
de ser un número distinto, no se ejecutará esta operación,
pero en caso de ser cierto, al bit más significativo de la señal A1 se le asigna cero, mientras
que a los cuatro bits menos significativos de A1 se le asigna el valor del operando A.

Tecnológico Nacional de México 144


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

process(A,B,ACA,SAL,A1,B1,S)
begin
if S="000" then
M.C. JOSÉA1(4) <= '0';
ARMANDO LARA GONZÁLEZ
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1;
R<= SAL;
COUT <= ACA;
V <='0';

De manera semejante, posteriormente a al bit más significativo de la señal B1 se le


asigna cero, mientras que a los cuatro bits menos significativos
M.C. JOSÉ ARMANDOde B1 LARA
se le asigna el valor del
GONZÁLEZ
operando B. Acto seguido a R1 se le asigna el valor de la suma de los operandos A1+B1.
Finalmente la señal SAL que tiene el valor de los cuatro bits menos significativos de R1 se saca
por la salida R y la señal ACA que es el valor del bit más significativo de R1 se saca por la
salida de acarreo de salida COUT.

Por otra parte, cuando la entrada de selección de operación S sea igual a “001” se llevará
a cabo a operación de resta de A-B. En el siguiente listado se describe dicha operación,
iniciando
M.C. por
JOSÉverificar
ARMANDO con un if que
LARA S sea igual a “001”. En caso de ser cierta esta aseveración,
GONZÁLEZ
se procede a verificar con otro if, si el sustraendo es mayor que el minuendo y en caso de ser
cierto se activará la bandera de salida V para denotar que el resultado R es negativo.

elsif S="001" then


if B>A then
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
R1 <= A1 - B1;
R<= SAL;
COUT <= '0';
V <='1';

En otras palabras, si B>A al bit más significativo de la señal A1 se le asigna cero y a los
cuatro bits menos significativos de A1 se le asigna el valor del operando A.

M.C. JOSÉ ARMANDO


Posteriormente LARA
a al bit másGONZÁLEZ
significativo de la señal B1 se le asigna cero, mientras que
a los cuatro bits menos significativos de B1 se le asigna el valor del operando B. Acto seguido
a R1 se le asigna el valor de la suma de los operandos A1-B1.

Tecnológico Nacional de México 145


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Finalmente la señal SAL que tiene el valor de los cuatro bits menos significativos de R1
se saca por la salida R y a través de COUT se saca un cero indicando que no existe acarreo y se
activa la bandera de V para indicar que el resultado de la sustracción es negativa.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Pero en caso de que en el if donde se verifica si el sustraendo es mayor que el minuendo


fuera negativa la aseveración, el programa saltaría hacia el else que se muestra en el siguiente
listado en el cual no se activaría la bandera de salida V

else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
B1(3 downto 0) <= B;
R1 <= A1 - B1;
R<= SAL;
COUT <= '0';
V <='0';
end if;

Note que en este listado se sigue exactamente la misma lógica de programación que en
M.C. JOSÉ ARMANDO
el listado anterior, LARA GONZÁLEZ
con la salvedad de que a través de la bandera V se saca un “0” en vez de un
uno lógico.

Para el caso donde la entrada de selección de operación S sea igual a “010” se desarrolla
el siguiente código, en el cual se verifica si S=“010” y en caso de ser afirmativo, al resultado
R se le asigna directamente la operación lógica AND de los operando, además de sacar un cero
lógico a través de COUT y desactivar la bandera V

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


elsif S="010" then
R<= A and B;
COUT <= '0';
V <='0';

La misma lógica de programación se sigue cuando S=“011” con la salvedad de que se


realiza la operación lógica OR en vez de AND como se muestra en el siguiente lostado.

M.C. JOSÉelsif S="011"


ARMANDO then
LARA GONZÁLEZ
R<= A or B;
COUT <= '0';
V <='0';

Tecnológico Nacional de México 146


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

Cuando S=“100” se ejecutará el código del siguiente listado, en el cual primeramente


se verifica que S sea “100” y posteriormente se asigna a la salida del resultado R el valor de la
operación lógica XOR entre los dos operandos A y B. De igual manera que en el caso anterior
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se desactivan las salidas COUT y V.

elsif S="100" then


R<= A xor B;
COUT <= '0';
V <='0';

Siguiendo esta lógica de programación, cuando S=“101” se ejecutará el código del


M.C. JOSÉ
siguiente listado en el cual se sigue la misma lógica ARMANDO
descrita LARA GONZÁLEZ
anteriormente con la diferencia
que la operación lógica que se realiza es la de invertir el operando A.

elsif S="101" then


R<= not A;
COUT <= '0';
V <='0';

M.C.
De JOSÉ
igual ARMANDO
manera en elLARA
casoGONZÁLEZ
cuando S=“110” se ejecutará el código del siguiente listado
en el cual se sigue la misma lógica descrita anteriormente con la diferencia que la operación
lógica que se realiza es la de invertir el operando B.

elsif S="110" then


R<= not B;
COUT <= '0';
V <='0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Finalmente cuando S=“111” se realizará una suma con acarreo de entrada. Es decir a la
suma normal de A+B se le sumara un “1”. En el siguiente listado, se puede observar como
primeramente al bit más significativo de la señal A1 se le asigna cero, mientras que a los cuatro
bits menos significativos de A1 se le asigna el valor del operando A.

De igual forma, al bit más significativo de la señal B1 se le asigna cero, mientras que a
los cuatro bits menos significativos de B1 se le asigna el valor del operando B. Acto seguido a
R1 seM.C. JOSÉ el
le asigna ARMANDO
valor de laLARA
sumaGONZÁLEZ
de los operandos A1+B1+1. Finalmente la señal SAL que
tiene el valor de los cuatro bits menos significativos de R1 se saca por la salida R y la señal
ACA que es el valor del bit más significativo de R1 se saca por la salida de acarreo de salida
COUT.

Tecnológico Nacional de México 147


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

else
A1(4) <= '0';
A1(3 downto 0) <= A;
M.C. JOSÉB1(4) <= '0';
ARMANDO LARA GONZÁLEZ
B1(3 downto 0) <= B;
R1 <= A1 + B1 + 1;
R<= SAL;
COUT <= ACA;
V <='0';
end if;
end process;
end Behavioral;

En este listado se muestra también comoM.C.


la bandera V se hace cero,
JOSÉ ARMANDO LARAse tiene el fin de if,
GONZÁLEZ
el fin del process y el fin de Behavioral o comportamental. En el siguiente listado se muestra
el programa completo para la ALU de cuatro bits del ejemplo en cuestión.

entity alu is
Port (A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
S : in STD_LOGIC_VECTOR (2 downto 0);
R : out STD_LOGIC_VECTOR (3 downto 0);
COUT,V
M.C. JOSÉ ARMANDO : out
LARA STD_LOGIC);
GONZÁLEZ
end alu;

architecture Behavioral of alu is


signal A1,B1,R1: std_logic_vector(4 downto 0);
signal SAL: std_logic_vector(3 downto 0);
signal ACA: std_logic;
begin
SAL <= R1 (3 downto 0);
ACA <= R1 (4);
process(A,B,ACA,SAL,A1,B1,S) M.C. JOSÉ ARMANDO LARA GONZÁLEZ
begin

if S="000" then
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1;
R<= SAL;
COUT <= ACA;
V <='0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif S="001" then
if B>A then
A1(4) <= '0';
A1(3 downto 0) <= A;

Tecnológico Nacional de México 148


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 4 Arquitectura de Procesadores

B1(4) <= '0';


B1(3 downto 0) <= B;
R1 <= A1 - B1;
R<= SAL;
M.C. JOSÉCOUT <= '0';
ARMANDO
V <='1';
LARA GONZÁLEZ

else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 - B1;
R<= SAL;
COUT <= '0';
V <='0';
end if; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif S="010" then
R<= A and B;
COUT <= '0';
V <='0';

elsif S="011" then


R<= A or B;
COUT <= '0';
V <='0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif S="100" then
R<= A xor B;
COUT <= '0';
V <='0';

elsif S="101" then


R<= not A;
COUT <= '0';
V <='0';

elsif S="110" then M.C. JOSÉ ARMANDO LARA GONZÁLEZ


R<= not B;
COUT <= '0';
V <='0';

else
A1(4) <= '0';
A1(3 downto 0) <= A;
B1(4) <= '0';
B1(3 downto 0) <= B;
R1 <= A1 + B1 + 1;
R<= SAL;
M.C. JOSÉCOUT
ARMANDO LARA GONZÁLEZ
<= ACA;
V <='0';
end if;
end process;
end Behavioral;

Tecnológico Nacional de México 149


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Capítulo 5

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Módulos de Interfaz en VHDL


=============================================================
Introducción.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En el presente capítulo se estudian los conceptos básicos sobre las interfaces de
comunicación de una FPGA (Arreglo de Compuertas Programable en Campo), ya sea para
comunicarla con una computadora personal, con otra FPGA o bien con algún otro dispositivo
inteligente.

Se destaca en este capítulo, la comunicación seria UART, estudiando primeramente los


conceptos básicos de dicho periférico y posteriormente diseñando una UART en VHDL. De
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
igual forma manera se estudia en este capítulo, la estructura y funcionamiento de la
comunicación I2C, desarrollando un módulo para la comunicación I2C de una FPGA.

Por otra parte se estudia la comunicación Ethernet, así como la comunicación de la


FPGA por CAN utilizando IP Cores para comunicar dos FPGA’s por Bus CAN. Para cumplir
con estos objetivos, es necesario conocer algunos conceptos básicos de la comunicación serial,
por lo que es de gran importancia mencionar lo que se describe a continuación.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 150


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.1. COMUNICACIÓN SERIAL CON UART.

En esta sección se estudian los conceptos básicos de la comunicación serial, haciendo


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
referencia a uno de los dispositivos de más importancia para realizar comunicación serial, como
lo es la UART (universal asynchronous receiver-transmitter).

5.1.1 Introducción

Cuando se transmite información a través de una línea, es decir cuando se realiza


comunicación serie, es necesario utilizar un sistema de codificación que permita resolver los
siguientes problemas:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1. Sincronización de bits: El receptor necesita saber en que parte comienza y en que parte
termina cada bit en la señal recibida para efectuar el muestreo de la misma en el centro del
intervalo de cada símbolo (bit para señales binarias).

2. Sincronización del carácter: La información serie se transmite por definición bit a bit, pero
la misma tiene sentido en palabras o bytes.

3. Sincronización del mensaje: Es necesario conocer el inicio y fin de una cadena de


M.C. JOSÉpor
caracteres ARMANDO LARA GONZÁLEZ
parte del receptor para, por ejemplo, detectar algún error en la comunicación
de un mensaje.

Por otra parte La velocidad de transmisión de datos es expresada en bits por segundo o
baudios. El baudio es un concepto más general que bit por segundo. El primero queda definido
como el número de estados de la señal por segundo, si sólo existe dos estados (que pueden ser
representados por un bit, que identifica dos unidades de información) entonces baudio es
equivalente a bit por segundo. Baudio y bit por segundo se diferencian cuando es necesario más
M.C.
de un bit para representar más de dos estados de la JOSÉ
señ[Link] LARA GONZÁLEZ

La velocidad de transmisión queda limitada por el ancho de banda, potencia de señal y


ruido en el conductor de señal. La velocidad de transmisión queda básicamente establecida por
el reloj. Su misión es examinar o muestrear continuamente la línea para detectar la presencia o
ausencia de los niveles de señal ya predefinidos. El reloj sincroniza además todos los
componentes internos.

M.C. JOSÉ se
Cuando ARMANDO
establece LARA GONZÁLEZes necesario implementar una base de tiempo que
la comunicación
controle la velocidad. En un Microcontrolador, se utilizaría la base de tiempos del reloj del
sistema, si bien, en términos genéricos se utilizaría uno de los siguientes métodos:

Tecnológico Nacional de México 151


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

a. Mediante la división de la base de reloj del sistema, por ejemplo mediante un contador
temporizador programable.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
b. A través de un oscilador TTL. Para cambiar frecuencia hay que cambiar el cristal.

c. Generador de razón de baudios. Existen diferentes dispositivos especializados que


generan diferentes frecuencias de reloj.

Se pueden establecer canales para la comunicación de acuerdo a tres técnicas, siempre


tomando al Microprocesador o Microcontrolador como referencia, es decir tomándolo como
transmisor y al periférico como destino, es decir considerándolo como receptor, estas tres
técnicas se mencionan a continuación: M.C. JOSÉ ARMANDO LARA GONZÁLEZ

a. Simplex
b. Semi duplex (Half duplex)
c. Totalmente duplex (Full duplex)

Simplex: En esta técnica, la comunicación serie usa una dirección y una línea de comunicación.
Siempre existirá un transmisor y un receptor, no ambos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La ventaja de este sistema consiste en que es necesario sólo un enlace a dos hilos. La
desventaja radica en que el extremo receptor no tiene ninguna forma de avisar al extremo
transmisor sobre su estado y sobre la calidad de la información que se recibe. Esta es la razón
por la cual, generalmente, no se utiliza.

Semi duplex: En esta forma de comunicación, la comunicación serie se establece a través de


una sóla línea, pero en ambos sentidos. En un M.C. JOSÉ el
momento ARMANDO
transmisorLARA GONZÁLEZ
enviará información y en
otro recibirá, por lo que no se puede transferir información en ambos sentidos de forma
simultánea.

Este modo permite la transmisión desde el extremo receptor de la información, sobre el


estado de dicho receptor y sobre la calidad de la información recibida por lo que permite así la
realización de procedimientos de detección y corrección de errores.

M.C. JOSÉ
Full duplex: EnARMANDO
esta formaLARA GONZÁLEZ serial, se utilizan dos líneas, una transmisora y
de comunicación
otra receptora y se transfiere información en ambos sentidos. La ventaja de este método es que
se puede transmitir y recibir información de manera simultánea.

Tecnológico Nacional de México 152


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

La mayoría de los dispositivos especializados para la comunicación pueden transferir


información tanto en full duplex como en half duplex (el modo simplex es un caso especial
dentro de half duplex).
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Por otra parte, es necesario mencionar, que existen dos modos básicos para realizar la
transmisión de datos y son:

 Modo asíncrono.
 Modo síncrono.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Las transmisiones asíncronas son aquellas en que los bits que constituyen el código de un
caracter se emiten con la ayuda de impulsos suplementarios que permiten mantener en
sincronismo los dos extremos.

En las transmisiones síncronas los caracteres se transmiten consecutivamente, no existiendo ni


bit de inicio ni bit de parada entre los caracteres, estando dividida la corriente de caracteres en
bloques, enviándose una secuencia de sincronización al inicio de cada bloque.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Transmisión asíncrona
Cuando se opera en modo asíncrono no existe una línea de reloj común que establezca
la duración de un bit y el caracter puede ser enviado en cualquier momento. Esto conlleva que
cada dispositivo tiene su propio reloj y que previamente se ha acordado que ambos dispositivos
transmitirán datos a la misma velocidad.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


No obstante, en un sistema digital, un reloj es normalmente utilizado para sincronizar la
transferencia de datos entre las diferentes partes del sistema. El reloj definirá el inicio y fin de
cada unidad de información así como la velocidad de transmisión. Si no existe reloj común,
algún modo debe ser utilizado para sincronizar el mensaje.

En realidad, la frecuencia con que el reloj muestrea la línea de comunicación es mucho


mayor que el ritmo con que llegan los datos. Por ejemplo, si los datos están llegando a una
velocidad de 2400 bps, el reloj examinará la línea unas 19200 veces por segundo, es decir, ocho
vecesM.C. JOSÉ ARMANDO
la cadencia binaria. LARA GONZÁLEZ
La gran rapidez con que el reloj muestrea la línea, permite al
dispositivo receptor detectar una transmisión de 1 a 0 o de 0 a 1 muy rápidamente, y mantener
así la mejor sincronización entre los dispositivos emisor y receptor.

Tecnológico Nacional de México 153


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

El tiempo por bit en una línea en que se transfiere la información a 2400 bps es de unos
416 microsegundos (1 seg/2400). Una frecuencia de muestreo de 2400 veces por segundo nos
permitirá muestrear el principio o el final del bit. En ambos casos detectaremos el bit, sin
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
embargo, no es extraño que la señal cambie ligeramente, y permanezca la línea con una duración
un poco más larga o más corta de lo normal.

Por todo ello, una frecuencia de muestreo lenta no sería capaz de detectar el cambio de
estado de la señal a su debido tiempo, y esto daría lugar a que la estación terminal no recibiera
los bits correctamente.

En la transmisión asíncrona un carácter M.C. JOSÉ ARMANDO


a transmitir LARAcon
es encuadrado GONZÁLEZ
un indicador de
inicio y fin de carácter, de la misma forma que se separa una palabra con una letra mayúscula y
un espacio en una oración. La forma estándar de encuadrar un carácter es a través de un bit de
inicio y un bit de parada.

Durante el intervalo de tiempo en que no son transferidos caracteres, el canal debe poseer
un "1" lógico. Al bit de parada se le asigna también un "1". Al bit de inicio del carácter a
transmitir se le asigna un "0". Por todo lo anterior, un cambio de nivel de "1" a "0" lógico le
M.C.
indicará alJOSÉ ARMANDO
receptor LARA carácter
que un nuevo GONZÁLEZserá transmitido, como se muestra en la Figura 5.1.

“1” “0” NUEVO CARACTER “1”

BIT DE INICIO “0” BIT DE PARO “0”


Figura 5.1.- Formato de transmisión asíncrona.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


La transmisión asíncrona que se analiza es la definida por la norma RS232 y que se basa
en las siguientes reglas:

a. Cuando no se envían datos por la línea, ésta se mantiene en estado alto (1).

b. Cuando se desea transmitir un carácter, se envía primero un bit de inicio que pone la
línea a estado bajo (0) durante el tiempo de un bit.

c.M.C.
Durante la transmisión,
JOSÉ ARMANDO LARAsi la línea está a nivel bajo, se envía un 0 y si está a nivel alto se
GONZÁLEZ
envía un 1.

d. A continuación se envían todos los bits del mensaje a transmitir con los intervalos que
marca el reloj de transmisión. Convencionalmente se transmiten entre 5 y 8 bits.

Tecnológico Nacional de México 154


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

e. Se envía primero el bit menos significativo, siendo el más significativo el último en


enviarse.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
f. A continuación del último bit del mensaje se envía el bit (o los bits) del final que hace
que la línea se ponga a 1 por lo menos durante el tiempo mínimo de un bit. Estos bits
pueden ser un bit de paridad para detectar errores y el bit o bits de stop, que indican el
fin de la transmisión de un carácter.

Los datos codificados por esta regla, pueden ser recibidos siguiendo los pasos siguientes:

a. Esperar la transición 1 a 0 en la señal recibida.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
b. Activar el reloj con una frecuencia igual a la del transmisor.

c. Muestrear la señal recibida al ritmo de ese reloj para formar el mensaje.

d. Leer un bit más de la línea y comprobar si es 1 para confirmar que no ha habido error en
la sincronización.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En cuanto a la velocidad de transmisión se puede apuntar que en la transmisión asíncrona


por cada caracter se envía al menos 1 bit de inicio y 1 bit de paro, así como opcionalmente 1 bit
de paridad. Esta es la razón de que los baudios no correspondan con el número de bits de datos
que son transmitidos, como se muestra en la Figura 5.2.

CARACTER TRANSMITIDO
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

N DE BITS DEL CARACTER


BIT DE INICIO BIT DE PARO

Figura 5.2.- Formato básico de transmisión asíncrona.

Para tener una idea más clara de lo explicado anteriormente, se determinará cuántos bits
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
de datos y caracteres son transmitidos de manera asíncrona en 1 segundo si se transmite a una
velocidad de 2400 baudios con 1 bit de inicio, 2 bits de parada, 1 bit de paridad y 6 bits de datos
por carácter.

Tecnológico Nacional de México 155


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Con esta información se puede determinar que para transmitir un caracter se necesitarán:
1 bit inicio + 6 bits datos + 1 bit paridad + 2 bits parada =10 bits.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Como la velocidad de transmisión es 2400 baudios y cada caracter consume 10 bits, se
transmitirán 240 caracteres por segundo (2400/10). Como cada caracter posee 6 bits de datos
serán transmitidos 240 * 6 = 1440 bits de datos por segundo.

La característica fundamental del formato de transmisión asíncrono es su capacidad de


manejar datos en tiempo real, con un intervalo de longitud arbitraria entre caracteres sucesivos.
Al final de cada caracter, la línea va a 1 en el bit de parada y permanece en ese estado durante
un número arbitrario de bits ociosos. El inicio delM.C. JOSÉ
nuevo ARMANDO
caracter LARA GONZÁLEZ
estará definido por la transición
a 0 del bit de inicio, como se puede apreciar de manera gráfica en la Figura 5.3 correspondiente
a la transmisión asíncrona con velocidad menor a la máxima posible.

CARACTER N CARACTER N+1

BIT DE BIT DE BIT DE


INICIO PARIDAD BITS INICIO
OCIOSOS
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BIT
OCIOSO BIT DE
BITS DE DATOS (5 A 8)
PARO

Figura 5.3.- Transmisión asíncrona con velocidad menor a la máxima posible.

Por otro lado en la Figura 5.4 se muestra la mayor velocidad asíncrona posible con el bit
de paridad en una transmisión.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

CARACTER N-1 CARACTER N CARACTER N+1

BIT DE BIT DE BIT DE BIT DE


PARIDAD INICIO PARIDAD INICIO

BIT DE
BIT DE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PARO BITS DE DATOS (5 a 8)
PARO
Figura 5.4.- Transmisión asíncrona con la velocidad máxima posible

Tecnológico Nacional de México 156


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Transmisión síncrona
Es un método más eficiente de comunicación en cuanto a velocidad de transmisión. Ello
vieneM.C.
dadoJOSÉ ARMANDO
porque no existe LARA
ningúnGONZÁLEZ
tipo de información adicional entre los caracteres que serán
transmitidos.

Cuando se transmite de manera síncrona lo primero que se envía es un octeto de


sincronismo ("sync"). El octeto de sincronismo realiza la misma función que el bit de inicio en
la transmisión asíncrona, indicando al receptor que será enviado un mensaje. Este carater,
además, utiliza la señal local de reloj para determinar cuándo y con qué frecuencia será
muestreada la señal, es decir, permite sincronizar los relojes de los dispositivos transmisor y
receptor. En la Figura 5.5 se muestra la idea central de la transmisión sincrónica.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La mayoría de los dispositivos de comunicación llevan a cabo una resincronización


contra posibles desviaciones del reloj, cada uno o dos segundos, insertando para ello caracteres
de tipo "sync" periódicamente dentro del mensaje.

DATOS SYNC CARACTER 1 CARACTER 2 …………………. CARACTER N SYNC

M.C. RELOJ
JOSÉ ARMANDO LARA GONZÁLEZ
Figura 5.5.- Transmisión síncrona.

Los caracteres de sincronismo deben diferenciarse de los datos del usuario para permitir
al receptor detectar los caracteres "sync". Por ejemplo, el código ASCII utiliza el octeto
10010110. Existen ocasiones en que son definidos dos caracteres de sincronismo, ello puede ser
necesario si, por cualquier motivo el caracter "sync" original se desvirtuara, el siguiente
permitirá la reinicialización del receptor.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En segundo lugar, puede ocurrir que el equipo receptor necesite un tiempo adicional para
adaptarse a la señal entrante. Cuando se transmite de forma síncrona, es necesario mantener el
sincronismo entre el transmisor y el receptor cuando no se envían caracteres, para ello son
insertados caracteres de sincronismo de manera automática por el dispositivo que realiza la
comunicación, como se muestra en la Figura 5.6.

DATOS SINCRONIZACIÓN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SYNC CAR1 CAR2 ... CARN SYNC SYNC SYNC SYNC CAR1 CAR2

Figura 5.6.- Inserción automática de caracteres de sincronización

Tecnológico Nacional de México 157


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

El receptor/transmisor síncrono debe indicar además cuándo el sincronismo ha sido


logrado por parte del receptor.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cuando se escriben o se envían datos, pueden producirse errores, entre otras cosas, por
ruidos inducidos en las líneas de transmisión de datos. Es por tanto necesario comprobar la
integridad de los datos transmitidos mediante algún método que permita determina si se ha
producido un error.

En un caso típico, si al transmitirse un mensaje se determina que se ha producido un


error, el receptor solicita de nuevo el mensaje al emisor.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Se pueden detectar errores de acuerdo a la forma de transmisión, siendo uno de los más
útiles a través del control de la paridad, debido a que un error en una transmisión serial solo
afecta a un solo bit.

1. Transmisión asíncrona:
a. Paridad.
b. Sobre escritura.
[Link]É ARMANDO
Error LARA
de encuadre GONZÁLEZ
(framing).

2. Transmisión síncrona:
a. Paridad.
b. Sobre escritura.

Debido a que uno de los métodos más comunes para detectar errores es el control de la
paridad, a continuación se explica este método.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

El control de paridad consiste en añadir un bit, denominado de paridad, a los datos que
se envían o escriben, como se muestra en la Figura 5.7 donde aparte de los cuatro bits del bus
de datos se tienen una línea en el bus. La paridad puede ser par o impar

D0
D1 DATOS
D2
D3
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BIT DE PARIDAD
GENERADOR DETECTOR
ERROR
DE PARIDAD DE PARIDAD

Figura 5.7 Sistema detector de error.

Tecnológico Nacional de México 158


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

El bit de paridad será cero, cuando el número de bit "unos" que contienen los datos a
transmitir sea un número par, y el bit de paridad será uno cuando los datos que se mandan
contienen un número impar de unos, como se muestra en la Tabla 5.1.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tabla 5.1. Paridad de un dato


DATO PARIDAD
0000 0001 1
0101 0001 1
0101 0101 0
0000 0000 0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


La suma de los bits que son unos, contando datos y bit de paridad dará siempre como
resultado un número par de unos.

Como un sistema microprogramable basado en una Unidad Central de Procesamiento


(CPU) es un dispositivo que de forma intrínseca maneja los datos de forma paralela, debe
realizarse una conversión para obtener el formato de datos serie que requiere los dispositivos
periféricos que pueda tener conectados a través de la comunicación serie.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Existen dos formas en se pueden implementar la conversión serie/paralelo. Esta puede


ser conversión por software y conversión por hardware.

CONVERSIÓN POR SOFTWARE


Para este tipo es necesario utilizar un terminal de salida de un puerto conectado al
microprocesador o microcontrolador. De la misma manera para la recepción se necesitará un
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
terminal de entrada. A modo de ejemplo en la siguiente Figura 5.8 se muestra la utilización de
un microcontrolador PIC donde RA0 se utilizará como salida (transmisor) y RA1 como entrada
(receptor). El modo de transmisión será asíncrono.

RA1
CIRCUITO
DISPOSITIVO DE
CONVERTIDOR
MICROCONTROLADOR ENTRADA/SALIDA
TTL, 20 mA o
SERIE
RS232
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RA0

Figura 5.8 Interfaz para la conversión serie-paralelo por software.

Tecnológico Nacional de México 159


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Para ilustrar más a detalle este tipo de conversión, se realizará el ejemplo de una rutina
de conversión para la comunicación asíncrona con 1 bit de inicio y 2 bits de parada con una
velocidad de 300 bauds.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

TRANSMISIÓN DE LOS DATOS


Debe realizarse una rutina que permita la transmisión de datos por el pin RA0 del
microcontrolador. La rutina de transmisión puede ser llamada por interrupción, cada vez que un
dato serie quiera ser transmitido o por que se establezca en una o varias partes del flujo del
programa que ejecuta el microcontrolador.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Se asumirá que serán transmitidos 11 bits. Un bit de inicio, 8 bits de datos y 2 bits de
parada. Se asumirá que los 8 bits a transmitir estarán en el registro de trabajo o acumulador y
que la frecuencia de transmisión será de 300 baudios.

La rutina debe en primer lugar colocar la línea a cero (que debe previamente estar en
"1") durante el tiempo de un bit para establecer el bit de inicio, posteriormente el acumulador
será enviado a puerto RA0, lo que transmitirá el bit menos significativo de datos a través de
RA0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Después de un tiempo equivalente a la duración de 1 bit, un contador debe ser establecido


para controlar el número de veces que el acumulador debe ser rotado a la derecha para transmitir
cada bit, el acumulador es entonces rotado a la derecha y se envía a RA0 su contenido para
transmitir el segundo bit de dato. El bit a ser transmitido estará siempre en el bit menos
significativo del acumulador. El procedimiento de rotación y demora será repetido hasta que los
8 bits de datos sean transmitidos, finalmente la línea (RA0) será colocada a 1 lógico durante el
tiempo de dos bits. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

RECEPCIÓN DE LOS DATOS


En esta sección de debe realizar una rutina de recepción por software, la cual puede ser
llamada cada un milisegundo para detectar la presencia de un bit de inicio, o por interrupción.
La rutina lee la entrada RA1 y monitoriza su estado. Si el valor en RA1 es "1", se debe retornar
al programa principal, si es "0", es indicador de la presencia de un bit de inicio y se deberá
comenzar el ensamblaje del carácter que está transmitiendo el periférico remoto. Cuando el bit
de inicio
[Link]É
detectado,
ARMANDOse espera
LARAelGONZÁLEZ
intervalo de tiempo equivalente a la duración de 1/2 bit para
comprobar nuevamente la entrada RA1, esto se realiza para asegurar el muestreo del bit de inicio
en el centro de su intervalo y evitar iniciar la recepción cuando el "0" haya sido provocado por
ruidos en la línea.

Tecnológico Nacional de México 160


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Para obtener el tiempo de 1/2 bit se tiene en consideración la frecuencia de transmisión.


La duración de un símbolo a transmitir a 300 baudios será 1/300 de segundo, o lo que es lo
mismo 3,33 ms; por ello la duración de 1/2 bit será de 1,667 ms.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Después de haberse asegurado la presencia del bit de inicio, se espera el tiempo de duración de
1 bit para encuestar la primera unidad de información del dato a recibir en la mitad de su
intervalo. Posteriormente, un contador es establecido con el número de bits de datos que serán
recibidos, el cual se decrementará con cada bit recibido.

El bit leído en PA1 pasa al acumulador y se rota a la izquierda a través del acarreo,
M.C. JOSÉ
posteriormente se realiza una rotación a la derecha conARMANDO
el acarreo LARA GONZÁLEZ
al registro donde debe
almacenarse el resultado de la recepción. Esta operación de doble rotación permite que un bit
sea recibido sin que el bit previo sea destruido. El acarreo actúa como almacenador intermedio
entre el acumulador y el registro.

Después que el primer bit de dato es recibido, el contador será decrementado después de
una demora de un bit, que permitirá comprobar el próximo bit de dato a recibir en la mitad del
intervalo. Este proceso continúa hasta que los 8 bits de datos queden almacenados en el registro.
CuandoM.C.
el JOSÉ ARMANDO
proceso LARA GONZÁLEZ
se ha completado, el primer bit recibido estará almacenado en el bit menos
significativo del registro y el último dato en el bit más significativo del registro.

Después de que los bits de datos han sido recibidos, el programa debe chequear los bits
de parada. Para ello el valor presente en RA1 será rotado dos veces a la izquierda con acarreo,
si en algún momento el acarreo no vale "1", habrá existido un error de encuadre (framing) y
deberá ser abortada la recepción. Si los dos bits están presentes, el dato presente en el registro
debe ser salvado por el microcontrolador y retornar al programa principal.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

A la rutina se le puede añadir una sección que compruebe un bit de paridad. Después de
aceptar los 8 datos, se puede tomar un noveno (con información de paridad) y comprobar su
estado de manera tal que si es detectada una paridad incorrecta, sea generado un mensaje de
error y el dato se ignore.

La ventaja de la conversión por software es la simplicidad en el hardware. La desventaja


radica en que existe una pérdida en la eficiencia del trabajo del sistema por el tiempo que se
M.C. JOSÉ
debe tomar en laARMANDO LARA
ejecución de estasGONZÁLEZ
rutinas. También la velocidad de transmisión puede quedar
comprometida. Por todo ello, en la mayoría de los sistemas la conversión serie/paralelo es
implementada en términos de hardware.

Tecnológico Nacional de México 161


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

CONVERSIÓN POR HARDWARE


Como se pudo observar en la conversión por software, el algoritmo se basa simplemente
M.C. JOSÉ ARMANDO
en operaciones de rotaciónLARA GONZÁLEZ de registros. Los elementos que permiten la
o desplazamiento
conversión por hardware se basan en registros de desplazamiento.

Existen tres tipos de dispositivos que permiten la conversión serie/paralelo:

a. El receptor/transmisor asíncrono universal (UART): usado en la transmisión serie


asíncrona.

b. El receptor/transmisor síncrono universal (USRT): usado en la transmisión serie


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
síncrona, usado en la transmisión a alta velocidad.

c. El receptor/transmisor síncrono/asíncrono universal (USART): permite la comunicación


serie de forma tanto asíncrona como síncrona.

En este trabajo únicamente se estudia la UART (receptor/transmisor asíncrono universal)


cuya estructura interna y funcionamiento se muestra a continuación.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Una UART en un dispositivo clave en la comunicación serial. Básicamente se encarga
de convertir los datos de serie a paralelo cuando se están recibiendo datos (datos de entrada) y
de convertir los datos de paralelo a serie cuando se están sacando datos (datos de salida).

Es a través de este dispositivo que se configura el formato de los datos y la velocidad de


transmisión. Las UART actualmente son comúnmente incluidas dentro de muchos modelos de
Microcontroladores. En la Figura 5.9 se muestra el diagrama de bloques general de una UART
con los bloques básicos. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La estructura interna de estos dispositivos puede ser funcionalmente dividida en tres


secciones: sección de transmisión, sección de recepción y sección de estado/control, como se
puede observar en la Figura 5.9.

Los datos paralelos a ser convertidos por la sección de transmisión entran al registro
bufferM.C.
y son transferidos
JOSÉ ARMANDO al registro para la transmisión de datos. Los datos son desplazados a la
LARA GONZÁLEZ
salida a través de la línea de salida serie a una velocidad determinada por el reloj y la sección
de control. Los bits de inicio, parada y bit de paridad serán añadidos automáticamente por la
UART.

Tecnológico Nacional de México 162


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ENTRADA PARALELO
D7 D6 D5 D4 D3 D2 D1 D0

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


REGISTRO BUFFER
TRANSMISOR
RELOJ DEL ESTADO/CONTROL
TRANSMISOR DE LA
TXC TRANSMISIÓN
REGISTRO PARA LA SALIDA SERIE
TRANSMISIÓN DE DATOS TXD

SECCIÓN DE TRANSMISIÓN

SECCIÓN DE RECEPCIÓN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
REGISTRO PARA LA ENTRADA SERIE
RECEPCIÓN DE DATOS RXD
RELOJ DEL ESTADO/CONTROL
RECEPTOR DE LA
RXC RECEPCIÓN
REGISTRO BUFFER
RECEPTOR

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


D7 D6 D5 D4 D3 D2 D1 D0
SALIDA PARALELO
Figura 5.9.- Diagrama de bloques básico de una UART.

Los datos a ser convertidos en paralelo entrarán a través de la línea de entrada serie al
registro para la recepción de datos. Los datos serie serán desplazados en este registro a una razón
determinada por el reloj del receptor y la sección de control. Los bits de inicio y de parada serán
discriminados de los datos asíncronos recibidos y la palabra recibida será transferida al registro
buffer de salida paralelo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

La sección de estado/control no sólo controla la razón de transmisión/recepción, ésta


genera interrupción, comprueba paridad, determina el número de bits de parada, comprueba el
error de encuadre, entre otras funciones.

Existen microcontroladores que incluyen internamente la circuitería equivalente a una


UART, lo que proporciona una mayor eficacia pues el programa se libera de la necesidad de
M.C. JOSÉ
implementar ARMANDOserie/paralelo
la conversión LARA GONZÁLEZ y la detección de errores. También existen UART en
circuitos integrados para ser enlazados a un microprocesador. Este dispositivo implementa la
conversión asíncrona paralelo/serie para convertir el formato de palabra que maneja el
microprocesador y el formato de datos usado en la transmisión serie.

Tecnológico Nacional de México 163


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

A la UART se le deben especificar varios parámetros:


a. Bits de datos por caracter (usualmente de 5 a 8).
b.M.C.
BitsJOSÉ ARMANDO
de parada (1, 1,5LARA
y 2). GONZÁLEZ
c. Bit de paridad, para utilizar su capacidad de detección de error.
d. Velocidad de transmisión.

La UART comprueba de manera automática cuando debe ocurrir la sincronización del


bit de parada. Si en este momento es detectado un 0, un bit de estado (error de encuadre o
framming error) se activará. El sistema podrá leer el estado de este bit después de la lectura de
cada caracter y determinar que hacer.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Otro tipo de error que comprueba el UART es el error de paridad, si es incluido en el
protocolo de comunicación. Cuando se inserta la generación/comprobación de paridad la UART
inserta (después de los bits de datos) un bit adicional, el cual se obtiene realizando una operación
lógica OR exclusiva con los bits de datos que han sido transmitidos dará como resultado un “1”
(paridad impar) o en “0” (paridad par). Por ejemplo, si es establecida la paridad impar el
transmisor insertará un bit de paridad de forma tal que el número de unos de los bits de datos
más el bit de paridad sea una cantidad siempre impar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para realizar la sincronización del dato recibido se debe comprobar el bit en la mitad del
intervalo del tiempo que dura para evitar la lectura de falsas transiciones producto del ruido en
la línea. Para la sincronización se utiliza un reloj externo de período TC que cumple la relación:

Td = K * Tc, donde K, generalmente, toma el valor 16.

Td es el tiempo de duración de cualquier bit de datos transmitidos, bit de paridad, bit de


M.C. JOSÉ
parada o bit de inicio. Para lograr la sincronización ARMANDO
entre LARA
el transmisor y GONZÁLEZ
el receptor tanto Tc
como K deben ser el mismo para ambos, ello permitirá que el bit de datos se compruebe en el
momento preciso sin necesidad de conectar una línea adicional de reloj para lograr el
sincronismo.

A continuación se verá cómo se sincroniza el dato en una transmisión asíncrona. En la


Figura 5.10 se observa como después de detectado el bit de inicio y transcurridas 8 transiciones
de reloj, ha transcurrido un tiempo igual a la mitad del bit de información que establece el inicio
de la M.C. JOSÉ de
recepción ARMANDO
un nuevoLARA GONZÁLEZ
caracter. A partir de ese tiempo se leerán los datos cada 16 pulsos
de reloj. Esto permitirá comprobar la información en la mitad del intervalo de cada bit de
información para evitar leer un dato erróneo provocado por la presencia de ruido.

Tecnológico Nacional de México 164


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

BIT DE INICIO (Td=16Tc) PRIMER BIT


DE DATOS
ENTRADA DEL
RECEPTOR
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RXD

RELOJ DEL
RECEPTOR
RXD Tc CADA BIT SE LEE CADA 16 PERIODOS
DE TC A PARTIR DE ESTE PUNTO

Figura 5.10.- Detección del bit de inicio.

LA NORMA RS232
Esta norma de comunicación es una de las más populares que se utilizan en la
comunicación serie, y es la que se utiliza en lasM.C. JOSÉ ARMANDO
computadoras LARAsiGONZÁLEZ
personales, bien hoy día está
ampliamente superada por la transmisión serie a través de USB, de manera que está remitiendo
su uso (por ejemplo, ya no se implementa en ordenadores portátiles). Se desarrolló en la década
de los 60 para gobernar la interconexión de terminales y MODEM.

La norma RS232 resuelve tres aspectos en la comunicación que se establece entre el


DTE (Equipo Terminal de Datos) por ejemplo un PC y el DCE (Equipo para la comunicación
de datos) por ejemplo un ratón:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1. Características eléctricas de la señal: Se desarrolla a continuación.

2. Características mecánicas de los conectores: Se utiliza un conector de 25 patillas, DB


25, o de 9 patillas, DB 9, donde el conector macho identifica al DTE y el conector
hembra al DCE.

3. Descripción funcional de las señales usadas: Las señales están básicamente divididas
en dos grupos:
M.C. JOSÉ ARMANDO
a. Señales primarias, que son normalmente utilizadas LARA GONZÁLEZ
para la transferencias de
datos.
b. Señales secundarias, utilizadas para el control de la información que será
transferida.

La norma RS232 está definida tanto para la transmisión síncrona como para la asíncrona,
pero cuando se utiliza esta última, sólo un conjunto de terminales (de los 25), es utilizado.

M.C. JOSÉ ARMANDO


CARACTERÍSTICAS LARA GONZÁLEZ
ELÉCTRICAS
Se establece que la longitud máxima del cable no debe ser superior a los 15 metros y la
velocidad máxima de transmisión es, en principio, 128.000 bps. Los niveles lógicos no son
compatibles TTL, considerando:

Tecnológico Nacional de México 165


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

 1 lógico entre -3V y -15V


 0 lógico entre +3V y +15V

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En la Figura 5.11 se muestra el trazado de los niveles de tensión para el caracter ASCII
"K" (0x4b) con 1 bit de inicio, 8 de datos y 1 de stop:

+15V SPACE

LSB MSB
START 1 1 0 1 0 0 1 0 STOP

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

+3V

START B0 B1 B2 B3 B4 B5 B6 B7 STOP

-3V

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


IDLE IDLE

TIME
-15V MARK

Figura 5.11.- Formas de onda para el caracter ASCII “K”.

La velocidad está estandarizada según la norma RS 232C en baudios:


 75 M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 110
 150
 300
 600
 1200
 2400
 4800
 9600
 19200
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Para ilustrar mejor el significado de cada terminal, consideremos a modo de ejemplo


que el DTE podría ser un PC y el DCE un ratón.

Tecnológico Nacional de México 166


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

 TXD (Transmit Data, transmisión de datos, salida, pat. 2): Señales de datos que se
transmiten del DTE al DCE. En principio, los datos no se pueden transmitir si alguno de los
terminales RTS, CTS, DSR ó DTR está desactivado.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 RXD (Receive Data, recepción de datos, entrada, pat. 3): Señales de datos transmitidos desde
el DCE al DTE.

 DTR (Data Terminal Ready, terminal de datos preparado, salida, pat. 20): Señal del DTE
que indica que está conectado, generalmente en "0" indica que el DTE está listo para transmitir
o recibir.

 DSR (Data Set Ready, dispositivo preparado, entrada, pat. 6): Señal del DCE que indica
M.C.
que el dispositivo está en modo de transmisión de JOSÉ ARMANDO LARA GONZÁLEZ
datos.

 RTS (Request To Send, petición de envío, salida, pat. 4): Señal del DTE al DCE, notifica al
DCE que el DTE dispone de datos para enviar. Se emplea en líneas semiduplex para controlar
la dirección de transmisión. Una transición de 1 a 0 avisa al DCE que tome las medidas
necesarias para prepararse para la transmisión.

 CTS (Clear To Send, preparado para transmitir, entrada, pat. 5): Señal del DCE al DTE
indicando que puede transmitirle datos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 CD (Carrier Detect, detección de portadora, entrada, pat. 8): Señal del DCE que ha
detectado la señal portadora enviado por un modem remoto o que la línea telefónica está abierta.

 RI (Ring Indicator, timbre o indicador de llamada entrante, entrada, pat. 22): Señal del
DCE indicando que está recibiendo una llamada por un canal conmutado.

 SG (GND) (System Ground ó Signal Ground, masa de señal, pat. 7): Masa común para todas
las líneas.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
 FG (GND) (Shield ó Protective Ground, tierra de protección, pat. 1): El conductor esta
eléctricamente conectado al equipo.

Analizando una secuencia normal, a través de la RS232, sería la siguiente:

1. Ambos dispositivos son alimentados, indicando encendido (si ha sido establecido en el


equipo). El DTE activa el terminal DTR y el DCE activa el terminal DSR. Una interfase
RS232 bien diseñada no comunicará hasta que estos dos terminales estén activos. El
M.C.
DTE JOSÉ ARMANDO
esperará LARA GONZÁLEZ
la activación del terminal DSR y el DTE la activación del terminal DTR.
Aunque DTR y DSR algunas veces pueden ser utilizados para el control del flujo, estos
terminales solo indican que los dispositivos están conectados.

Tecnológico Nacional de México 167


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

2. El DTE pregunta al DCE si este está listo. El DTE activa la línea RTS. El DCE si está
listo, responde activando la línea CTS. Puestos de acuerdo ambos equipos, se puede
entrar a comunicar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
3. Los datos son transferidos en ambos sentidos. El DTE envía información al DCE a través
del terminal TXD. El DCE envía información al DTE a través del terminal RXD.

Para una comunicación full duplex desde la UART de un microprocesador o


microcontrolador o una PC con un periférico como una FPGA, deben conectarse un mínimo
número de señales, concretamente TXD y RXD así como la masa (GND, SG o Signal Ground),
como se muestra en la Figura 5.12.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

TXD
COMPUTADORA
RXD FPGA
PERSONAL
GND DCE
DTE

Figura 5.12.- Requerimientos de señal para mínima conexión full duplex.

M.C.
SinJOSÉ ARMANDO
embargo LARAtípica
una interfaz GONZÁLEZ
RS232 requiere al menos 7 señales, tal como se muestra
en la Figura 5.13.

TXD

RXD

RTS
COMPUTADORA
CTS
FPGA
PERSONAL
DCE
DTE DSR
M.C.
DTR JOSÉ ARMANDO LARA GONZÁLEZ

GND(SG)

Figura 5.13.- Requerimientos de señal típica para conexión full duplex.

Las líneas adicionales se utilizan para la puesta de acuerdo entre el DTE (por ejemplo
un PC) y el DCE (por ejemplo una FPGA).

M.C. JOSÉ ARMANDO


El terminal LARA GONZÁLEZ
para transmitir datos (TXD) es utilizado para transferir datos del DTE (PC)
al DCE (FPGA), por lo que debe ser conectado a la línea receptora serie de la FPGA. De manera
idéntica la línea receptora de datos (RXD) debe ser conectada a la línea transmisora de la FPGA.

Tecnológico Nacional de México 168


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.1.2 Diseño de una UART en VHDL


En el presente punto, se desarrolla una UART en VHDL para hacer la comunicación
serialM.C.
entreJOSÉ
una ARMANDO
computadoraLARA GONZÁLEZ
personal y una FPGA la cual tiene conectada una LCD (Pantalla
de Cristal Líquido). En esta LCD se mostrarán caracteres que se enviarán desde la computadora
personal hasta la FPGA. En la Figura 5.14 se muestra un diagrama a bloques de la conexión
entre la PC y la FPGA para la comunicación serial.

TXD
COMPUTADORA
RXD FPGA
PERSONAL
GND DCE
DTE

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


L C D

Figura 5.14.- Diagrama de la comunicación serial

Para cumplir con este enunciado se desarrolla un programa en VHDL el cual será
descargado a la FPGA para que esta reciba los datos provenientes de la computadora personal,
los procese y los despliegue en la LCD conectada a la misma.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

En el siguiente listado se presenta la entidad del programa, como ya se ha mencionado


la entidad describe los puertos de entrada y salida del sistema. En este caso se describe CLK
como una entrada std_logic ya que es de un solo pin.

entity SERIAL_LIBRO is
PORT( CLK: IN STD_LOGIC;
RS : OUT STD_LOGIC; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
RW : OUT STD_LOGIC;
ENA : OUT STD_LOGIC;
DATA_LCD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
RX: IN STD_LOGIC;
TX: OUT STD_LOGIC);
end SERIAL_LIBRO;

Así mismo se describe como salida RS que sirve para especificar a la LCD si están
enviando datos o comandos. Por otra parte la señal de salida ENA sirve para la habilitación del
LCD,M.C. JOSÉ que
mientras ARMANDO
la salidaLARA GONZÁLEZ
DATA_LCD de cuatro bits es el medio a través del cual serán
enviados los datos y los comandos a la LCD. Los pines RX y TX sirven para la recepción y
transmisión de datos entre la PC y la FPGA respectivamente y son de un solo pin.

Tecnológico Nacional de México 169


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Posteriormente se describen algunas señales que servirán para llevar a cabo el programa,
las cuales se enlistan a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL TX_INI_S : std_logic ;
SIGNAL TX_FIN_S : std_logic ;
SIGNAL RX_IN_S : std_logic ;
SIGNAL DATAIN_S : std_logic_vector(7 downto 0);
SIGNAL DOUT_S : std_logic_vector(7 downto 0);
SIGNAL ESTADO : INTEGER RANGE 0 TO 1 := 0;
SIGNAL DATO : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL FILA,COLUMNA : INTEGER RANGE 1 TO 16 := 1;

M.C. JOSÉ RX_IN_S,


Las primeras 5 señales TX_INI_S, TX_FIN_S, ARMANDODATAIN_S
LARA GONZÁLEZ
y DOUT_S
serán empleadas para la comunicación serial, mientras que la señal ESTADO servirá para una
máquina de estados que será desarrollada para escribir los datos la LCD. En la señal DATO se
asignara el dato proveniente de la PC, mientras que en FILA y COLUMNA se usará para
posicionar el cursor en la LDC.

Se ha agregado un programa para la comunicación serial, por lo que se ha copiado solo


la entidad del programa y se ha agregado como componente. En el siguiente listado se muestra
M.C. del
la entidad JOSÉ ARMANDO
programa paraLARA GONZÁLEZ serial agregado como componente.
la comunicación

COMPONENT RS232 IS
port (CLK : in std_logic ;
RX : in std_logic ;
TX_INI : in std_logic ;
TX_FIN : out std_logic ;
TX : out std_logic ;
RX_IN : out std_logic ;
DATAIN : M.C. JOSÉ ARMANDO
in std_logic_vector(7 downto 0);LARA GONZÁLEZ
DOUT : out std_logic_vector(7 downto 0)
);
end COMPONENT RS232;

En este listado, en el pin CLK se aplicará la señal de reloj de la FPGA, mientras que RX
será el pin para la recepción de los datos desde la FPGA. El pin TX_INI deberá ponerse a “1”
para iniciar la transmisión, mientras que TX_FIN se pondrá a “1” cuando termina la transmisión.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


El pin TX es el pin de transmisión RS232 a través del cual se enviaran datos desde la PC
hasta la FPGA, mientras que RX_IN se pone a “1” cuando se ha recibido un Byte.

Tecnológico Nacional de México 170


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Finalmente los buses de ocho bits DATA_IN y DOUT son los puertos de entrada para
la transmisión y de salida para la recepción respectivamente.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para continuar con el programa se hace el mapeo de puertos del componente para la
comunicación serial, el cual se ha etiquetado como U3 y que se muestra en el siguiente listado.
En este listado se puede ver como a los pines CLK, RX y TX se les ha asignado el mismo valor,
mientras que el valor de los otros pines se ha asignado a señales con el mismo nombre con una
“s” para identificarlas como señales.

U3: RS232 PORT MAP (


CLK => CLK,
RX => RX, M.C. JOSÉ ARMANDO LARA GONZÁLEZ
TX_INI => TX_INI_S,
TX_FIN => TX_FIN_S,
TX => TX,
RX_IN => RX_IN_S,
DATAIN => DATAIN_S,
DOUT => DOUT_S);

Una vez mapeado el componente U3 se procede a la elaboración del PROCESS para el


M.C. JOSÉ
despliegue ARMANDO
de los datos enLARA GONZÁLEZ
la LDC conectada a la FPGA provenientes del teclado de la
computadora. En el siguiente listado se muestra el PROCESS, dentro del cual se verifica
primeramente si existe un flanco de transición positiva del pulso de reloj y en caso de ser existir,
el programa entra a un CASE. Básicamente se trata de una máquina de estados.

Cuando la máquina de estado se encuentra en el estado “0”, se verifica si RX_IN es


activo, ya que este pin se pone a '1' cuando se ha recibido un Byte y en caso de ser “1” la máquina
de estado pasa al estado 1 y en caso contrario permanece en el estado 0.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
CASE ESTADO IS

WHEN 0 =>
IF RX_IN_S = '1' THEN
ESTADO <= 1;
ELSE
M.C. JOSÉ ARMANDO LARA
ESTADO <= GONZÁLEZ
0;
END IF;

Tecnológico Nacional de México 171


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Cuando la máquina de estado se encuentra en el estado 1 se verifica si la bandera del


BLCD=X"05". Algunas funciones generan un vector ("BLCD") cuando se terminó de ejecutar
dicha función y que puede ser utilizado como una bandera. En este caso la bandera avisaría que
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se ha terminado de ejecutar la INSTRUCCION(3)<=CHAR_ASCII(DATO) y la máquina de
estado pasaría al estado 0 ya que el dato se habría terminado de escribir en la LCD.

También se limpia la LCD con DATO <= X"00" y se incrementa el valor de columna en
1 y si columna ha llegado a 16 se cambia de renglón con la instrucción FILA <= FILA+1.

WHEN 1 =>
IF BLCD = X"05" THEN
ESTADO <= 0;
DATO <= X"00"; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
COLUMNA <= COLUMNA+1;
IF COLUMNA = 16 THEN
FILA <= FILA+1;
END IF;

Finalmente en caso de que la bandera BLCD=X"05" no se cumpla, indicará que no se


ha escrito el dato en la LCD y se signara el dato proveniente de la computadora al bus de datos
de la LCD para que este sea escrito, con la instrucción DATO<=DOUT_S.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

ELSE
DATO <= DOUT_S;
ESTADO <= 1;
END IF;

WHEN OTHERS => NULL;


END CASE;
END IF;
END PROCESS;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

El programa total finaliza con las instrucciones utilizadas para el manejo de la LCD, que
se refiere al envío de comandos para la inicialización de la LDC y envío de datos que serán
escritos en la misma. En el siguiente listado se muestran dichas instrucciones.

INSTRUCCION(0) <= LCD_INI("00");


INSTRUCCION(1) <= BUCLE_INI(1);
INSTRUCCION(2) <= POS(FILA,COLUMNA);
M.C. JOSÉ ARMANDO
INSTRUCCION(3) <=LARA GONZÁLEZ
CHAR_ASCII(DATO);
INSTRUCCION(4) <= BUCLE_FIN(1);

Tecnológico Nacional de México 172


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En el siguiente listado se muestra el programa completo para la comunicación serial entre la PC


y una FPGA.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity SERIAL_LIBRO is
PORT(CLK: IN STD_LOGIC;
RS : OUT STD_LOGIC;
RW : OUT STD_LOGIC;
ENA : OUT STD_LOGIC;
DATA_LCD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
RX: IN STD_LOGIC;
TX: OUT STD_LOGIC);
end SERIAL_LIBRO;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

architecture Behavioral of SERIAL_LIBRO is


SIGNAL TX_INI_S : std_logic ;
SIGNAL TX_FIN_S : std_logic ;
SIGNAL RX_IN_S : std_logic ;
SIGNAL DATAIN_S : std_logic_vector(7 downto 0);
SIGNAL DOUT_S : std_logic_vector(7 downto 0);
SIGNAL ESTADO : INTEGER RANGE 0 TO 1 := 0;
SIGNAL DATO : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL FILA,COLUMNA : INTEGER RANGE 1 TO 16 := 1;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

COMPONENT RS232 IS
port (CLK : in std_logic ;
RX : in std_logic ;
TX_INI : in std_logic ;
TX_FIN : out std_logic ;
TX : out std_logic ;
RX_IN : out std_logic ;
DATAIN : in std_logic_vector(7 downto 0);LARA GONZÁLEZ
M.C. JOSÉ ARMANDO
DOUT : out std_logic_vector(7 downto 0)
);
end COMPONENT RS232;

U3: RS232 PORT MAP (


CLK => CLK,
RX => RX,
TX_INI => TX_INI_S,
TX_FIN => TX_FIN_S,
M.C. JOSÉTXARMANDO
=> TX, LARA GONZÁLEZ
RX_IN => RX_IN_S,
DATAIN => DATAIN_S,
DOUT => DOUT_S);

Tecnológico Nacional de México 173


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

PROCESS(CLK)

BEGIN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

IF RISING_EDGE(CLK) THEN
CASE ESTADO IS

WHEN 0 =>
IF RX_IN_S = '1' THEN
ESTADO <= 1;
ELSE
ESTADO <= 0; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
END IF;

WHEN 1 =>
IF BLCD = X"05" THEN
ESTADO <= 0;
DATO <= X"00";
COLUMNA <= COLUMNA+1;
IF COLUMNA = 16 THEN
M.C. JOSÉFILA
ARMANDO LARA GONZÁLEZ
<= FILA+1;
END IF;

ELSE
DATO <= DOUT_S;
ESTADO <= 1;
END IF;

WHEN OTHERS => NULL; M.C. JOSÉ ARMANDO LARA GONZÁLEZ


END CASE;
END IF;
END PROCESS;

INSTRUCCION(0) <= LCD_INI("00");


INSTRUCCION(1) <= BUCLE_INI(1);
INSTRUCCION(2) <= POS(FILA,COLUMNA);
INSTRUCCION(3) <= CHAR_ASCII(DATO);
INSTRUCCION(4) <= BUCLE_FIN(1);
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

end Behavioral;

Tecnológico Nacional de México 174


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.2 COMUNICACIÓN SERIAL POR I2C.


En esta sección se estudia el protocolo de comunicación serial I2C también llamado IIC,
ya queM.C.
esteJOSÉ
tipo ARMANDO LARA serial
de comunicación GONZÁLEZ
resulta de gran importancia sobre todo cuando se desea
comunicar varios dispositivos con otro dispositivo para el intercambio de información. Esto se
debe a que cuenta con la ventaja de la comunicación full-duplex y altas velocidades.

Sin duda la comunicación UART es la más empleada de las comunicaciones seriales,


pero tiene la desventajas de que solo se puede tener comunicación con dos dispositivos por cada
puerto, aunque técnicamente si es posible tener comunicación con más de dos dispositivos por
puerto, no es una práctica muy recomendable.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Para solucionar este problema se usa la comunicación serial I2C desarrollada por Philips
en los años 90’s. A continuación se explica la teoría básica sobre el funcionamiento de este
protocolo de comunicación serial.

5.2.1. Introducción a I2C.


El protocolo I2C también llamado IIC (Inter Integrated Circuit) es un protocolo especial
M.C. JOSÉ
para crear ARMANDO
una red LARA
de conexión deGONZÁLEZ
diversos periféricos con un master. Para llevar a cabo esta
comunicación solo se usan dos pines de comunicación, siendo estos los pines SDA (serial data)
y SCL (serial clock). En la Figura 5.15 se muestra un diagrama de bloques simplificado de la
comunicación serial I2C.

10KΩ
VCC
VCC
SDA
SDA
MAESTRO SCL

GND
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL

GND

ESCLAVO ESCLAVO ESCLAVO


DAC ADC LCD

Figura 5.15.- Diagrama de bloques de la comunicación serial I2C.

En este protocolo de comunicación, si se encuentra presente la señal de reloj (CLK) para


poderM.C.
sincronizar la comunicación
JOSÉ ARMANDO entre todos los dispositivos. Claro ésta que con esta
LARA GONZÁLEZ
estructura solo se puede hacer comunicación half duplex. Lo anterior significa que se puede
enviar y recibir datos por el pin SDA pero solo una a la vez. En otras palabras, no se puede
mandar y recibir datos simultáneamente. Por esta razón UART es más rápida que I2C.

Tecnológico Nacional de México 175


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

La operación de la comunicación I2C es simple ya que esta formada por dos partes, por
un lado la parte del MAESTRO y por otra parte el ESCLAVO, este tipo de comunicación
permite el intercambio de información entre muchos dispositivos a una velocidad aceptable, de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
unos 100 Kbits por segundo, aunque hay casos especiales en los que el reloj llega hasta los 3,4
MHz. En este esquema tanto el maestro como los esclavos tienen la capacidad de enviar y recibir
datos, la diferencia radica en que el maestro decide en que momento los esclavos van a enviar o
recibir datos.

De esta forma, mientras que el maestro no de la orden a los esclavos de enviar o recibir
información, estos no podrán hacer ninguna acción. Por esta razón el maestro puede
comunicarse con múltiples periféricos, ya que controla el flujo de los datos. En la Figura 5.15
se muestran las señales que intervienen en laM.C. JOSÉ ARMANDO
comunicación I2C lasLARA GONZÁLEZ
cuales se describen a
continuación.

 SCL (System Clock) es la línea de los pulsos de reloj que sincronizan el sistema.
 SDA (System Data) es la línea por la que se mueven los datos entre los dispositivos.
 GND (Masa) común de la interconección entre todos los dispositivos "enganchados"
al bus.

M.C.
Las JOSÉ
líneasARMANDO
SDA y SCL LARA
sonGONZÁLEZ
del tipo drenaje abierto, es decir, un estado similar al de
colector abierto, pero asociadas a un transistor de efecto de campo (FET). Se deben polarizar
en estado alto (conectando a la alimentación por medio de resistores "pull-up") lo que define
una estructura de bus que permite conectar en paralelo múltiples entradas y salidas.

Las dos líneas del bus están en un nivel lógico alto cuando están inactivas. En principio,
el número de dispositivos que se puede conectar al bus no tiene límites, aunque hay que
observar que la capacitancia máxima sumada de todos los dispositivos no supere los 400 pF. El
M.C. crítico
valor de los resistores de polarización no es muy JOSÉ ARMANDO LARA GONZÁLEZ
y puede ir desde 1.8KΩ a 47KΩ. Un
valor menor de resistencia incrementa el consumo de los integrados pero disminuye la
sensibilidad al ruido y mejora el tiempo de los flancos de subida y bajada de las señales.

Habiendo varios dispositivos conectados sobre el bus, es lógico que para establecer una
comunicación a través de él se deba respetar un protocolo. Digamos, en primer lugar, lo más
importante es que el dispositivo maestro es el único que puede iniciar una comunicación. La
condición inicial, de bus libre, es cuando ambas señales están en estado lógico alto. En este
estado cualquier dispositivo maestro puede ocuparlo, estableciendo la condición de inicio
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
(start). Esta condición se presenta cuando un dispositivo maestro pone en estado bajo la línea
de datos (SDA), pero dejando en alto la línea de reloj (SCL). En la Figura 5.16 se muestra la
condición de inicio.

Tecnológico Nacional de México 176


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

SECUENCIA
DE INICIO

SDA

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

SCL

Figura 5.16.- Secuencia de inicio de la comunicación serial I2C.

El primer byte que se transmite luego de la condición de inicio contiene siete bits que
componen la dirección del dispositivo que se desea seleccionar, y un octavo bit que corresponde
[Link]É
a la operación que se quiere realizar con él (lectura ARMANDO LARA GONZÁLEZ
escritura).

Si el dispositivo cuya dirección corresponde a la que se indica en los siete bits (A0-A6)
está presente en el bus, éste contesta con un bit en bajo, ubicado inmediatamente luego del
octavo bit que ha enviado el dispositivo maestro. Este bit de reconocimiento (ACK) en bajo le
indica al dispositivo maestro que el esclavo reconoce la solicitud y está en condiciones de
comunicarse. Aquí la comunicación se establece en firme y comienza el intercambio de
información entre los dispositivos, lo cual se muestra en la Figura 5.17.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

SDA A6 A5 A4 A3 A2 A1 A0 R/W ACK

SCL 1 2 3 4 5 6 7 8 9

Figura 5.17.- Comunicación serial I2C.

Si el bit de lectura/escritura (R/W) fue puesto en esta comunicación a nivel lógico bajo
M.C.
(escritura), el dispositivo maestro envía datos al JOSÉ ARMANDO
dispositivo esclavo. LARA
Esto seGONZÁLEZ
mantiene mientras
continúe recibiendo señales de reconocimiento, y el contacto concluye cuando se hayan
transmitido todos los datos.

En el caso contrario, cuando el bit de lectura/escritura esta a nivel lógico alto (lectura),
el dispositivo maestro genera pulsos de reloj para que el dispositivo esclavo pueda enviar los
datos. Luego de cada byte recibido el dispositivo maestro (quien está recibiendo los datos)
genera un pulso de reconocimiento.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El dispositivo maestro puede dejar libre el bus generando una condición de parada
(stop), como se ilustra en la imagen de la Figura 5.18.

Tecnológico Nacional de México 177


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

SECUENCIA
DE PARO

SDA
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

SCL

Figura 5.17.- Secuencia de paro de la comunicación serial I2C.

Si se desea seguir transmitiendo, el dispositivo maestro puede generar otra condición de


inicio en lugar de una condición de parada. Esta nueva condición de inicio se denomina "inicio
reiterado" y se puede emplear para direccionar unM.C. JOSÉ ARMANDO
dispositivo LARA GONZÁLEZ
esclavo diferente o para alterar el
estado del bit de lectura/escritura.

5.2.2. Diseño de un módulo para comunicación I2C.


En el presente punto, se desarrolla un módulo para comunicación con el protocolo I2C.
El programa es muy extenso, por esa razón se explicará dicho programa por bloques funcionales
como se desarrolla a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta primera parte del programa se definen los puertos de entrada/salida del módulo
de comunicación I2C la cual se ha denominado entity IIC. Se establecen los pines como inicio
de la comunicación, fin de la comunicación, los pines de datos y de reloj de la comunicación
I2C, así como el reloj de esclavo a maestro entre otros pines.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity IIC is
M.C. JOSÉ
generic (FREC_IIC :INTEGER := 250-1 ; ARMANDO LARA GONZÁLEZ
MAX_IIC_BYTES :INTEGER := 10
);
Port (CLK :IN STD_LOGIC ;
IIC_INI :IN STD_LOGIC ;
IIC_FIN :OUT STD_LOGIC ;
SCL :OUT STD_LOGIC ;
SDA :INOUT STD_LOGIC ;
SDA_X :OUT STD_LOGIC ;
IIC_REG_IN_UP :OUT STD_LOGIC ;
IIC_ADDRESS :IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
IIC_REG_IN :IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IIC_REG_OUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;
IIC_BYTES :IN INTEGER RANGE 0 TO MAX_IIC_BYTES := 1
);
end IIC;

Tecnológico Nacional de México 178


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En el siguiente listado se muestra la arquitectura comportamental del módulo de


comunicación I2C donde primeramente se definen las señales que serán utilizadas dentro del
programa.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

architecture Behavioral of IIC is


CONSTANT TSU_TIEMPO : integer := 249 ;
signal sda_ack : std_logic ;
signal SCL_gen : std_logic ;
signal SCL_gen_fin : std_logic ;
signal b_inc : std_logic ;
signal b_restart : std_logic ;
signal conta_bytes_reini : std_logic := '1';
signal conta_bytes_up : std_logic := '0';
signal iic_op : M.C. JOSÉ; ARMANDO LARA GONZÁLEZ
std_logic
signal iic_proceso : std_logic ;
signal iic_proceso_fin : std_logic ;
signal tsu_ini : std_logic ;
signal tsu_fin : std_logic ;
signal iic_reg_up : std_logic ;
signal iic_data_up : std_logic ;
signal sda_esc : std_logic ;
signal sda_en : std_logic ;
signal st_repeat : std_logic ;
signal iic_data_in : std_logic_vector(7 downto 0) ;
M.C. JOSÉ ARMANDO
signal edo, edo_fLARA GONZÁLEZ
:integer range 0 to 15 := 0;
signal edo_iic, edo_iic_f : integer range 0 to 7 := 0;
signal b :integer range 0 to 8 := 0;
signal SCL_conta :integer range 0 to FREC_IIC := 0;
signal conta_bytes :integer range 0 to MAX_IIC_BYTES := 0;
signal iic_bytes_sig :integer range 0 to MAX_IIC_BYTES := 1 ;
signal tsu_conta :integer range 0 to TSU_TIEMPO +1:= 0;

M.C. JOSÉ ARMANDO


En la siguiente parte del programa, prácticamente LARA GONZÁLEZ
inicia la estructura comportamental
después de haber definido las señales del programa. Esta parte básicamente la conforma una
máquina de estado para el control de la comunicación I2C. La máquina de estado espera el bit
de inicio de la comunicación y reinicia todas las señales.

begin
process(edo_iic, IIC_INI, IIC_ADDRESS,iic_proceso_fin, tsu_fin)

begin
--ESPERA BIT DE INICIO Y REINICIA TODAS LAS SEÑALES
M.C. JOSÉifARMANDO
edo_iic LARA GONZÁLEZ
= 0 then
if IIC_INI = '1' then
edo_iic_f <= 1;
else
edo_iic_f <= 0;

Tecnológico Nacional de México 179


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

end if;
IIC_FIN <= '0';
tsu_ini <= '0';
iic_op <= '0';
M.C. JOSÉiic_proceso <= '0';
ARMANDO LARA GONZÁLEZ
iic_reg_up <= '0';
iic_bytes_sig <= 0;
st_repeat <= '0';

Dado el bit de inicio, revisa el bit 0 de la dirección para saber si se trata de una operación
de escritura o de lectura.

elsif edo_iic = 1 then


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if IIC_ADDRESS(0) = '0' then
edo_iic_f <= 2;
else
edo_iic_f <= 3;
end if;
IIC_FIN <= '0';
tsu_ini <= '0';
iic_op <= '0';
iic_proceso <= '0';
iic_reg_up <= '0';
iic_bytes_sig <= 0;
M.C. JOSÉst_repeat
ARMANDO<= LARA GONZÁLEZ
'0';

En esta sección del programa se describe la operación de escritura, esta inicia procesos
de control de IIC poniendo iic_proceso a '1'. La señal iic_bytes_sig se usa para decir cuántos
bytes se quieren escribir, para esta versión, está amarrado a 1 byte, pero se puede usar junto con
el puerto iic_bytes para escribir en más de un byte consecutivamente. Por otra parte, iic_op se
pone a '1' para indicar que se trata de una escritura en los procesos.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


elsif edo_iic = 2 then
if iic_proceso_fin = '1' then
edo_iic_f <= 6;
else
edo_iic_f <= 2;
end if;
iic_proceso <= '1';
iic_op <= '1';
iic_bytes_sig <= 1;
IIC_FIN <= '0';
M.C. JOSÉtsu_ini
ARMANDO<= LARA
'0'; GONZÁLEZ
iic_reg_up <= '0';
st_repeat <= '0';

Tecnológico Nacional de México 180


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Para el proceso de lectura se describe el siguiente listado del programa, este proceso de
lectura es más largo. Se debe enviar un proceso de escritura para indicarle al dispositivo a que
registro se quiere acceder y después se debe enviar una condición de repetición de inicio.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Finalmente, se envía nuevamente la dirección junto con el bit de lectura para que sea el
esclavo el que envía la información de vuelta al igual que la operación de escritura, iic_proceso
se debe poner a '1'. Así mismo, se usa iic_op a '1' para iniciar con una operación de escritura,
pero se pone st_repeat a '1' para indicar que termine la escritura con una condición de repetición
de inicio en vez de la condición de paro de la comunicación.

elsif edo_iic = 3 then M.C. JOSÉ ARMANDO LARA GONZÁLEZ


if iic_proceso_fin = '1' then
edo_iic_f <= 4;
else
edo_iic_f <= 3;
end if;
iic_op <= '1';--INDICA QUE ES UNA OPERACION DE ESCRITURA
iic_bytes_sig <= 0;
iic_reg_up <= '0';
iic_proceso <= '1';
st_repeat <= '1';--INCIDA QUE DEBE HABER UNA CONDICION DE
M.C. JOSÉREPETICIO
ARMANDODE INCIIO
LARA GONZÁLEZ
IIC_FIN <= '0';
tsu_ini <= '0';

Cuando termina la escritura del registro usando la condición de repetición de se espera


un tiempo de 5 us.

elsif edo_iic = 4 then


if tsu_fin = '1' then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
edo_iic_f <= 5;
else
edo_iic_f <= 4 ;
end if;
tsu_ini <= '1';
iic_reg_up <= '0';
iic_op <= '0';
IIC_FIN <= '0';
iic_proceso <= '0';
iic_bytes_sig <= 0;
st_repeat <= '0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 181


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Seguido del tiempo de 5 us, inicia el proceso de lectura, poniendo iic_op a '0'. La señal
iic_bytes indica cuantos bytes debe leer. Esta versión solo soporta la lectura de un byte, a
diferencia del proceso de escritura, no se puede usar iic_bytes para incrementar el número de
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
bytes que se van a leer.

elsif edo_iic = 5 then


iic_op <= '0';
iic_bytes_sig <= 1;
IIC_FIN <= '0';
tsu_ini <= '0';
iic_proceso <= '1';
st_repeat <= '0';
if iic_proceso_fin = '1' then
edo_iic_f <= 6; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
iic_reg_up <= '1';
else
edo_iic_f <= 5;
iic_reg_up <= '0';
end if;

Cuando termina la lectura o escritura, el modulo espera un tiempo de 5 us antes de


acabar. Este tiempo debe ser de 4.7 us de acuerdo a la especificación de iic y es un tiempo de
esperaM.C. JOSÉ
entre ARMANDO
transmisión LARA GONZÁLEZ
y transmisión.

elsif edo_iic = 6 then


if tsu_fin = '1' then
edo_iic_f <= 7;
else
edo_iic_f <= 6;
end if;
tsu_ini <= '1';
iic_reg_up <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
iic_op <= '0';
IIC_FIN <= '0';
iic_proceso <= '0';
iic_bytes_sig <= 0;
st_repeat <= '0';

Cuando el tiempo de espera ha terminado, entonces solo espera a que iic_ini sea '0' y
pone a '1' iic_fin. La finalidad es que no se reenvíe la información si el usuario no pone iic_ini
a '0' antes de que termine el proceso
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

else
iic_op <= '0';

Tecnológico Nacional de México 182


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

iic_bytes_sig <= 0;
tsu_ini <= '0';
iic_proceso <= '0';
M.C. JOSÉiic_reg_up <= '0';
ARMANDO LARA GONZÁLEZ
st_repeat <= '0';
IIC_FIN <= '1';
if IIC_INI = '1' then
edo_iic_f <= 7;
else
edo_iic_f <= 0;
end if;
end if;
end process;

process(CLK)
begin M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if rising_edge(CLK) then
edo_iic <= edo_iic_f ;
end if;
end process;

--REGISTRO PARA SALIDA DE INFORMACION


process(CLK)
begin
if rising_edge(CLK) then
if iic_reg_up = '1' then
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IIC_REG_OUT <= iic_data_in;
end if;
end if;
end process;

En el siguiente listado se describe el retardo que necesita el iic entre transferencias. El


tiempo mínimo es de 4.7us, pero es calculado a 5 us

process(CLK) M.C. JOSÉ ARMANDO LARA GONZÁLEZ


begin
if rising_edge(CLK) then
if tsu_ini = '1' then
tsu_conta <= tsu_conta + 1;
tsu_fin <= '0';
if tsu_conta = TSU_TIEMPO then
tsu_conta <= TSU_TIEMPO;
tsu_fin <= '1';
end if;
else
tsu_fin
M.C. JOSÉ ARMANDO <=GONZÁLEZ
LARA '0';
tsu_conta <= 0;
end if;
end if;
end process;

Tecnológico Nacional de México 183


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Por otra parte en el siguiente listado se muestra la máquina de estados para procesos de IIC, esta
es a través de un process, con las variables sensibles que se muestran a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(edo, iic_proceso, SCL_gen_fin,IIC_ADDRESS, IIC_REG_IN, b,
iic_op, conta_bytes, iic_bytes_sig, st_repeat)
begin
if edo = 0 then
SCL <= '1';
sda_esc <= '1';
sda_en <= '0';
sda_ack <= '0';
scl_gen <= '0';
b_inc <= '0';
b_restart <= '1'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
conta_bytes_up <= '0';
conta_bytes_reini <= '1';
iic_proceso_fin <= '0';
iic_data_up <= '0';
if iic_proceso = '1' THEN
edo_f <= 1;
else
edo_f <= 0;
end if;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Posteriormente se desarrolla el listado que genera la condición de inicio (start condition).
La condición de inicio indica el comienzo de una transferencia de lectura o escritura y es iniciada
por el maestro y consiste en poner a '0' sda mientras scl es '1', como ya se explico en la
introducción del presente capitulo.

elsif edo = 1 then


sda_esc <= '0';
sda_en <= '1'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL <= '1';
b_inc <= '0';
b_restart <= '1';
conta_bytes_reini <= '1';
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
sda_ack <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 2;
M.C. JOSÉelse
ARMANDO LARA GONZÁLEZ
SCL_gen <= '1';
edo_f <= 1;
end if;

Tecnológico Nacional de México 184


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En el listado que se muestra a continuación el maestro envía la dirección al esclavo. La


dirección esclava consiste en 7 bits que son exclusivos de cada dispositivo más un octavo bit,
en la posición menos significativa, que indica si se trata de un proceso de escritura ('0') o lectura
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
('1').

elsif edo = 2 then --ENVIA BITS DE DIRECCION


SCL <= '0';
b_inc <= '0';
b_restart <= '0';
conta_bytes_reini <= '1';
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
sda_ack <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
sda_en <= '1';
if b = 8 then
edo_f <= 4 ;
sda_esc <= '0';
SCL_gen <= '0';
else
if b<7 then
sda_esc <= IIC_ADDRESS(7-b);
else
if iic_op = '1' then
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
sda_esc <= '0';
else
sda_esc <= '1';
end if;
end if;
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 3;
else
SCL_gen <= '1';
edo_f <= 2;
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
elsif edo = 3 then
if b<7 then
sda_esc <= IIC_ADDRESS(7-b);
else
if iic_op = '1' then
sda_esc <= '0';
else
sda_esc <= '1';
end if;
M.C. JOSÉend
ARMANDO
if; LARA GONZÁLEZ
sda_en <= '1';
SCL <= '1';
b_restart <= '0';
iic_proceso_fin <= '0';

Tecnológico Nacional de México 185


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

conta_bytes_up <= '0';


iic_data_up <= '0';
conta_bytes_reini <= '1';
sda_ack <= '0';
M.C. JOSÉifARMANDO
SCL_gen_fin = '1' then
LARA GONZÁLEZ
b_inc <= '1';
SCL_gen <= '0';
edo_f <= 2;
else
b_inc <= '0';
SCL_gen <= '1';
edo_f <= 3;
end if;

A continuación se desarrolla la rutina para la condición acknowledge de esclavo a


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
maestro. La señal ack de esclavo a maestro es enviado cuando se hace un proceso de escritura.
Después de enviar los ocho bits de datos al esclavo, este responde poniendo a '0' sda durante un
ciclo de reloj. El '0' en sda indica que el esclavo ha recibido la información correctamente y se
puede terminar el proceso o escribir más información.

elsif edo = 4 then--LEE ACK


sda_en <= '0';
sda_esc <= '0';
M.C. JOSÉsda_ack
ARMANDO<= LARA
'1'; GONZÁLEZ
SCL <= '0';
b_inc <= '0';
b_restart <= '0';
conta_bytes_up <= '0';
iic_proceso_fin <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 5;
else M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL_gen <= '1';
edo_f <= 4;
end if;
elsif edo = 5 then--LEE ACK
sda_en <= '0';
sda_esc <= '0';
sda_ack <= '1' ;
SCL <= '1';
b_inc <= '0';
b_restart <= '1';
iic_proceso_fin <= '0';
M.C. JOSÉiic_data_up
ARMANDO LARA GONZÁLEZ
<= '0';
conta_bytes_reini <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';
if IIC_OP = '1' then

Tecnológico Nacional de México 186


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

if conta_bytes = iic_bytes_sig + 1 then


if st_repeat = '1' then
edo_f <= 15 ;
else
edo_f <= 12 ;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
conta_bytes_up <= '0';
else
edo_f <= 6 ;
conta_bytes_up <= '1';
end if;
else
edo_f <= 8;
conta_bytes_up <= '0';
end if;
else
SCL_gen <= '1'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
edo_f <= 5;
conta_bytes_up <= '0';
end if;

Posteriormente de se desarrolla la subrutina para el proceso de escritura en la


comunicación I2C.

M.C. JOSÉedo
elsif ARMANDO LARA GONZÁLEZ
= 6 then
SCL <= '0';
b_inc <= '0';
b_restart <= '0';
conta_bytes_up <= '0';
iic_proceso_fin <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
sda_ack <= '0';
sda_en <= '1';
if b = 8 then
edo_f <= 4; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
sda_esc <= IIC_REG_IN(0);
SCL_gen <= '0';
else
sda_esc <= IIC_REG_IN(7-b);
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 7;
else
SCL_gen <= '1';
edo_f <= 6;
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
elsif edo = 7 then
sda_esc <= IIC_REG_IN(7-b);
sda_en <= '1';
SCL <= '1';

Tecnológico Nacional de México 187


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

b_restart <= '0';


iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
M.C. JOSÉconta_bytes_reini <= '0';
ARMANDO LARA GONZÁLEZ
sda_ack <= '0';
if SCL_gen_fin = '1' then
b_inc <= '1';
SCL_gen <= '0';
edo_f <= 6;
else
b_inc <= '0';
SCL_gen <= '1';
edo_f <= 7;
end if;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Posteriormente de se desarrolla la subrutina para el proceso de lectura en la
comunicación I2C.

elsif edo = 8 then


SCL <= '0';
b_inc <= '0';
b_restart <= '0';
sda_en <= '0';
M.C. JOSÉsda_esc
ARMANDO<= LARA
'0'; GONZÁLEZ
iic_proceso_fin <= '0';
conta_bytes_reini <= '0';
conta_bytes_up <= '0';
sda_ack <= '0';
if b = 8 then
edo_f <= 10 ;
iic_data_up <= '0';
SCL_gen <= '0';
else
if SCL_gen_fin = '1' then
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL_gen <= '0';
edo_f <= 9;
iic_data_up <= '1';
else
SCL_gen <= '1';
edo_f <= 8;
iic_data_up <= '0';
end if;
end if;

elsif edo = 9 then


M.C. JOSÉsda_en <= '0';
ARMANDO LARA GONZÁLEZ
sda_esc <= '0';
SCL <= '1';
iic_data_up <= '0';
b_restart <= '0';
iic_proceso_fin <= '0';

Tecnológico Nacional de México 188


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

conta_bytes_up <= '0';


conta_bytes_reini <= '0';
sda_ack <= '0';
if SCL_gen_fin = '1' then
b_inc <= '1';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL_gen <= '0';
edo_f <= 8;
else
b_inc <= '0';
SCL_gen <= '1';
edo_f <= 9;
end if;

En esta parte del programa, se describe la condición nacknowledge, la condición de


nack es enviar una señal por parte del maestroM.C.
y seJOSÉ
usa para terminar
ARMANDO un proceso
LARA GONZÁLEZde lectura.
Básicamente esta condición consiste en poner a '1' sda después de haber recibido los 8 bits de
información

elsif edo = 10 then


sda_esc <= '1';
sda_en <= '1';
SCL <= '0';
b_inc <= '0';
M.C. JOSÉb_restart
ARMANDO<= '0';
LARA GONZÁLEZ
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
sda_ack <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 11;
else
SCL_gen <= '1';
edo_f <= 10; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
elsif edo = 11 then
sda_esc <= '1';
sda_en <= '1';
SCL <= '1';
b_inc <= '0';
b_restart <= '1';
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
M.C. JOSÉsda_ack
ARMANDO<= LARA
'0'; GONZÁLEZ
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 12;
else

Tecnológico Nacional de México 189


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

SCL_gen <= '1';


edo_f <= 11;
end if;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En la siguiente parte del programa, se describe la condición de repetición de inicio (start
repeat) la condición de repetición de inicio es enviada por el maestro después de hacer el proceso
de escritura inicial. Consiste en poner sda a '1' mientras scl es '0' después de recibir el ack por
parte del esclavo. Posteriormente pone scl a '1' mientras sda sigue siendo '1' y, finalmente, se
pone sda a '0' mientras scl es '1'.

elsif edo = 15 then


sda_esc <= '1';
sda_en <= '1'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SCL <= '0';
b_inc <= '0';
b_restart <= '0';
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '0';
sda_ack <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';
M.C. JOSÉ ARMANDO
edo_fLARA GONZÁLEZ A SALIDA (ELSE)
<= 14;--SALTA
else
SCL_gen <= '1';
edo_f <= 15;
end if;

Por otra parte en el listado siguiente se describe la condición de paro (stop condition).
La condición de paro consiste en poner a '1' scl del iic mientras sda es '0' y posteriormente se
pone sda a '1' mientras scl sigue siendo '0'.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

elsif edo = 12 then


sda_esc <= '0';
sda_en <= '1';
sda_ack <= '0' ;
SCL <= '0';
b_inc <= '0';
b_restart <= '1';
conta_bytes_up <= '0';
iic_proceso_fin <= '0';
M.C. JOSÉiic_data_up
ARMANDO LARA GONZÁLEZ
<= '0';
conta_bytes_reini <= '1';
sda_ack <= '0';
if SCL_gen_fin = '1' then
SCL_gen <= '0';

Tecnológico Nacional de México 190


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

edo_f <= 13;


else
SCL_gen <= '1';
edo_f <= 12;
end if;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
elsif edo = 13 then
sda_esc <= '0';
sda_en <= '1';
sda_ack <= '0' ;
SCL <= '1';
b_inc <= '0';
b_restart <= '1';
iic_proceso_fin <= '0';
conta_bytes_up <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '1';
sda_ack <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if SCL_gen_fin = '1' then
SCL_gen <= '0';
edo_f <= 14;
else
SCL_gen <= '1';
edo_f <= 13;
end if;
else
sda_esc <= '1';
sda_en <= '1';
M.C. JOSÉsda_ack
ARMANDO<= LARA
'0' ;GONZÁLEZ
SCL <= '1';
b_inc <= '0';
b_restart <= '1';
conta_bytes_up <= '0';
iic_data_up <= '0';
conta_bytes_reini <= '1';
sda_ack <= '0';
SCL_gen <= '0';
if iic_proceso = '1' then
edo_f <= 14;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
iic_proceso_fin <= '1';
else
edo_f <= 0;
iic_proceso_fin <= '0';
end if;
end if;
end process;

En esta parte se describe la parte secuencial de la máquina de estados para la


comunicación IIC.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

process(CLK)
begin
if rising_edge(CLK) then

Tecnológico Nacional de México 191


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

edo <= edo_f ;


end if;
end process;

process(CLK)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
begin
if rising_edge(CLK) then
if SCL_gen = '1' then
SCL_conta <= SCL_conta + 1;
SCL_gen_fin <= '0';
if SCL_conta = FREC_IIC-1 then
SCL_conta <= FREC_IIC-1 ;
SCL_gen_fin <= '1';
end if;
else
SCL_conta <= 0;
SCL_gen_fin <= '0'; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end if;
end if;
end process;

En esta parte del programa se genera un contador, el cual es usado en los registros de
corrimiento de entrada y salida, para incrementar la posición de entrada-salida a nivel bit.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


process(CLK)
begin
if rising_edge(CLK) then
if b_inc = '1' then
b <= b + 1;
elsif b_restart = '1' then
b <= 0;
end if;
end if;
end process;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En el siguiente listado, se muestra como el programa realiza el incremento de acuerdo al
número de bytes que se quieren recibir/enviar.

process(CLK)
begin
if rising_edge(CLK) then
if conta_bytes_up = '1' then
conta_bytes <= conta_bytes + 1;
M.C. JOSÉelsif
ARMANDO LARA GONZÁLEZ= '1' then
conta_bytes_reini
conta_bytes <= 0;
end if;
end if;
end process;

Tecnológico Nacional de México 192


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Posteriormente, el puerto de tres estados sda como entrada, recibe la información y la


guarda en un registro temporal.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(CLK)
begin
if rising_edge(CLK) then
if iic_data_up = '1' then
iic_data_in(7-b) <= SDA ;
end if;
end if;
end process;

Posteriormente, el puerto de tres estadosM.C. JOSÉ ARMANDO


sda como LARA
entrada recibe GONZÁLEZ
y actualiza ack

process(CLK)
begin
if rising_edge(CLK) then
if sda_ack = '1' then
SDA_X <= SDA ;
end if;
end if;
M.C.
endJOSÉ ARMANDO LARA GONZÁLEZ
process;

En esta pequeña parte del programa se realiza el control de puerto de tres estados sda
como salida

process(CLK)
begin
if rising_edge(CLK) then
if sda_en = '1' then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SDA <= sda_esc ;
else
SDA <= 'Z';
end if;
end if;
end process;

Aquí se describe un puerto usado para actualizar informacion de escritura en iic y finaliza
la descripción
M.C. JOSÉcomportamental
ARMANDO LARA delGONZÁLEZ
programa.

IIC_REG_IN_UP <= conta_bytes_up when conta_bytes > 0 else


'0';
end Behavioral;

Tecnológico Nacional de México 193


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.2.3. Comunicación de un FPGA con otro dispositivo por medio de I2C.


En el presente punto, se desarrolla la conexión de un ACELEROMETRO DIGITAL
M.C. JOSÉ
MMA8452Q conARMANDO
una FPGA, LARA GONZÁLEZ
los cuales se comunican a través del protocolo de comunicación
2
serial I C. Para esto es necesario la elaboración de un programa en VHDL para llevar a cabo
dicha comunicación. En la Figura 5.18 se muestra el diagrama de conexiones de la FPGA
Spartan 6 con el acelerómetro digital.

DISPLAY(0:7)
SDA F1

SCL G1 FPGAM.C. JOSÉ ARMANDO LARA GONZÁLEZ


ACELEROMETRO SPARTAN 6
DIGITAL
GND GND
8452
VCC 3.3V
TRANSISTORES (3:0)

Figura 5.18.- Diagrama de conexiones de la FPGA y el Acelerómetro.

Las direcciones de los registros de inicialización del acelerómetro para entender que fue
lo queM.C.
se desarrolla en el programa
JOSÉ ARMANDO en VHDL. En la Tabla 5.2 se muestran las DIRECCIONES
LARA GONZÁLEZ
ESCLAVAS del acelerómetro, sin bit de lectura y escritura, siendo esta la dirección 0x1D.

Tabla 5.2. Direcciones esclavas del acelerómetro


DIRECCIÓN DATO
0x2a 0x30
0x2b 0x19
0x2c 0x02
0x2d M.C. JOSÉ0x01
ARMANDO LARA GONZÁLEZ
0x2e 0x01
0x2a 0x31

Con estas condiciones se procede al desarrollo del programa iniciando por la entidad de
dicho programa como se muestra en el siguiente listado.

entity TOP is
PORT( CLK : IN STD_LOGIC;
M.C. JOSÉSDA
ARMANDO
: INOUTLARA GONZÁLEZ
STD_LOGIC;
SCL : OUT STD_LOGIC;
LEDS : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
end TOP;

Tecnológico Nacional de México 194


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En esta entidad llamada TOP se agrega como pin de entrada la señal CLK que es la señal
que sincroniza la operación de los módulos del programa. Por otra parte la señal SDA se declara
como un pin de entrada-salida a través del cual entrarán y saldrán los datos desde la FPGA hasta
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
el acelerómetro y desde el acelerómetro hasta la FPGA.

Por otra parte la señal SCL se declara como pin de salida, esta corresponde a una señal
de reloj de sincronización de los esclavos conectados a la FPGA. Finalmente la señal LEDS de
ocho bits se ha declarado como salida y es la señal que proviene del acelerómetro y será
empleada para alimentar un decodificador de BCD a siete segmentos para que el valor del
acelerómetro sea desplegado en los displays de siete segmentos.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En la siguiente parte del programa se muestra que, se ha agregado como un componente
el programa en VHDL correspondiente al módulo de comunicación serial I2C

COMPONENT IIC is
PORT (CLK : IN STD_LOGIC ;
IIC_FIN : OUT STD_LOGIC ;
SCL : OUT STD_LOGIC ;
SDA : INOUT STD_LOGIC ;
M.C. JOSÉ ARMANDO LARA
BUS_IIC : GONZÁLEZ
IN STD_LOGIC_VECTOR(23 DOWNTO 0) ;
IIC_DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
IIC_ERROR : OUT STD_LOGIC
);
end COMPONENT IIC;

Es este componente se ha descrito la señal de entrada de reloj CLK, así como la señal
IIC_FIN, la cual indica el fin de operación. De igual manera las señales SDA y SCL las cuales
ya se han explicado a detalle anteriormente. Por otro lado la señal BUS_IIC con una longitud
M.C.
de 24 bit es la que contienen la información para laJOSÉ ARMANDO
operación que se LARA
va ha GONZÁLEZ
llevar a cabo.

La señal IIC_DATA_OUT es el registro de la salida de la comunicación I2C, mientras


que la salida IIC_ERROR será una bandera que indique si existe un error en la comunicación.

Para continuar con el programa se has descrito cinco señales las cuales serán empleadas
en la elaboración de una máquina de estado que básicamente programará el acelerómetro.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL EDO : INTEGER RANGE 0 TO 50 := 0;
SIGNAL IIC_FIN : STD_LOGIC := '0';
SIGNAL BUS_IIC : STD_LOGIC_VECTOR(23 DOWNTO 0):= (OTHERS => '0');
SIGNAL IIC_ERROR : STD_LOGIC := '0';
SIGNAL CONTA : INTEGER RANGE 0 TO 4_999 := 0;

Tecnológico Nacional de México 195


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Una vez que se ha descrito las señales mostradas anteriormente, se hace el mapeo de
puertos del componente U1 como se puede observar en el siguiente listado.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
U1: IIC PORT MAP(
CLK,
IIC_FIN,
SCL,
SDA,
BUS_IIC,
LEDS,
IIC_ERROR
);

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Finalmente en el siguiente listado se inicia el desarrollo de la máquina de estado que
controla la comunicación I2C entre la FPGA y el acelerómetro mencionado. Esta máquina de
estados consta de 13 estados, mediante los cuales se realiza la inicialización de los registros del
acelerómetro, la lectura de la información del acelerómetro y el despliegue de los datos en los
displays de 7 segmentos.

Como se puede ver en este listado, se inicia un process del reloj donde se verifica
M.C. JOSÉsiARMANDO
primeramente LARA GONZÁLEZ
existe un flanco de transición positiva en el pulso de reloj y en caso de que
exista ese flanco, se verifica si la máquina de estado se encuentra en el estado cero y de ser así
se verifica sí se indica un fin de operación para pasar la máquina de estado al estado uno, en
caso de que no exista un fin de operación la maquina se quedará en el estado cero y
posteriormente se envía los datos en X"3A", X"2A" y X"30" al acelerómetro con la finalidad
de programar el primer registro del mismo.

PROCESS(CLK)
BEGIN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF RISING_EDGE(CLK) THEN
IF EDO = 0 THEN
IF IIC_FIN = '1' THEN
EDO <= 1;
ELSE
EDO <= 0;
END IF;
BUS_IIC <= X"3A" & X"2A" & X"30";

M.C. JOSÉ24
El dato ARMANDO LARAalGONZÁLEZ
bits enviados acelerómetro (X"3A" & X"2A" & X"30") corresponde a la
configuración del primer registro del acelerómetro. Donde X"3A" corresponde a la dirección
esclava del acelerómetro X“1D” más el corrimiento del bit de escritura, quedando X"3A".

Tecnológico Nacional de México 196


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Por otra parte el número X"2A" corresponde a la dirección del registro a configurar y
finalmente el número X"30" es el dato que se debe mandar a dicho registro de acuerdo con la
hoja de datos técnicos del acelerómetro.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Una vez que se ha enviado ese primer comando de programación del acelerómetro, se
requiere de la elaboración de una subrutina de retardo con la finalidad de que los datos enviados
al acelerómetro se estabilicen dentro de los registros del mismo, antes de mandar los otros
comandos de programación. En el siguiente listado se muestra dicho retardo.

ELSIF EDO = 1 THEN


IF CONTA = 4_999 THEN
EDO <= 2; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 1;
END IF;
BUS_IIC <= (OTHERS => '0');

En este retardo se ha calculado el número 4999 para obtener un tiempo de retardo de


M.C.
100µs. EnJOSÉ ARMANDO
esta subrutina seLARA GONZÁLEZ
verifica primeramente si la señal CONTA ha llegado al calor de
4999 y de ser así la máquina de estado pasaría al estado dos y se resetea CONTA. En caso
contrario la señal CONTA de incrementa en uno y la máquina de estado pasa al estado uno.
Finalmente se resetea la señal BUS_IIC.

Ahora si la máquina de estado se encuentra en el estado 2 se verifica sí se indica un fin


de operación para pasar la máquina de estado al estado tres, en caso de que no exista un fin de
operación la maquina se quedará en el estado dos y posteriormente se envía los datos en X"3A",
X"2B" y X"19" al acelerómetro con la finalidadM.C.
de JOSÉ ARMANDO
programar LARAregistro
el segundo GONZÁLEZdel mismo.

ELSIF EDO = 2 THEN


IF IIC_FIN = '1' THEN
EDO <= 3;
ELSE
EDO <= 2;
END IF;
BUS_IIC <= X"3A" & X"2B" & X"19";

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A continuación se hará uso de la subrutina de retardo creada anteriormente para
estabilizar la programación del primer registro del acelerómetro y que tiene un tiempo de retardo
de 100µs, la cual se enlista a continuación.

Tecnológico Nacional de México 197


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ELSIF EDO = 3 THEN


IF CONTA = 4_999 THEN
EDO <= 4;
CONTALARA
M.C. JOSÉ ARMANDO <= 0;
GONZÁLEZ
ELSE
CONTA <= CONTA+1;
EDO <= 3;
END IF;
BUS_IIC <= (OTHERS => '0');

A continuación, si la máquina de estado se encuentra en el estado 4 se verifica sí se indica


un fin de operación para pasar la máquina de estado al estado cinco, en caso de que no exista un
M.C. cuatro
fin de operación la maquina se quedará en el estado JOSÉ ARMANDO LARA GONZÁLEZ
y posteriormente se envía los datos
en X"3A", X"2C" y X"02" al acelerómetro con la finalidad de programar el tercer registro del
mismo.

ELSIF EDO = 4 THEN


IF IIC_FIN = '1' THEN
EDO <= 5;
ELSE
EDO <= 4;
M.C. JOSÉEND
ARMANDO
IF; LARA GONZÁLEZ
BUS_IIC <= X"3A" & X"2C" & X"02";

Nuevamente se hará uso de la subrutina de retardo creada anteriormente para estabilizar


la programación de los registros del acelerómetro y que tienen un tiempo de retardo de 100µs,
la cual se enlista a continuación.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


ELSIF EDO = 5 THEN
IF CONTA = 4_999 THEN
EDO <= 6;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 5;
END IF;
BUS_IIC <= (OTHERS => '0');

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Posteriormente, estando la FSM en el estado 6 se verifica sí se indica un fin de operación
para pasar al estado 7, en caso contrario se quedará en el estado 6 y posteriormente se envía los
datos en X"3A", X"2D" y X"01" al acelerómetro con la finalidad de programar el cuarto registro
del mismo, como se muestra en el siguiente listado.

Tecnológico Nacional de México 198


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ELSIF EDO = 6 THEN


IF IIC_FIN = '1' THEN
EDO <= 7;
ELSE
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
EDO <= 6;
END IF;
BUS_IIC <= X"3A" & X"2D" & X"01";

Nuevamente se hará uso de la subrutina de retardo creada anteriormente para estabilizar


la programación de los registros del acelerómetro y que tienen un tiempo de retardo de 100µs,
la cual se enlista a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
ELSIF EDO = 7 THEN
IF CONTA = 4_999 THEN
EDO <= 8;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 7;
END IF;
BUS_IIC <= (OTHERS => '0');
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Posteriormente, estando la FSM en el estado 8 se verifica sí se indica un fin de operación


para pasar al estado 9, en caso contrario se quedará en el estado 8 y posteriormente se envía los
datos en X"3A", X"2E" y X"01" al acelerómetro con la finalidad de programar el quinto registro
del mismo, como se muestra en el siguiente listado.

ELSIF EDO = 8 THEN


IF IIC_FIN = '1' THEN
EDO <= 9; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
ELSE
EDO <= 8;
END IF;
BUS_IIC <= X"3A" & X"2E" & X"01";

De manera semejante a los casos anteriores se hará uso de la subrutina de retardo creada
anteriormente para estabilizar la programación de los registros del acelerómetro y que tienen un
tiempo de retardo de 100µs, la cual se enlista a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

ELSIF EDO = 9 THEN


IF CONTA = 4_999 THEN
EDO <= 10;

Tecnológico Nacional de México 199


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 9;
END IF;
M.C. JOSÉBUS_IIC
ARMANDO LARA GONZÁLEZ
<= (OTHERS => '0');

Para finalizar con la programación, se evalúa la FSM en el estado 10, donde se verifica
sí se indica un fin de operación para pasar al estado 11, en caso contrario se quedará en el estado
10 y posteriormente se envía los datos en X"3A", X"2A" y X"31" al acelerómetro con la
finalidad de programar el sexto registro del mismo, como se muestra en el siguiente listado.

ELSIF EDO = 10 THEN


IF IIC_FIN = '1' THEN
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
EDO <= 11;
ELSE
EDO <= 10;
END IF;
BUS_IIC <= X"3A" & X"2A" & X"31";

En el siguiente listado se muestra la subrutina de retardo de 100µs que se empleó para


dar tiempoJOSÉ
M.C. ARMANDO LARA
a la estabilización de laGONZÁLEZ
información dentro de los registros del acelerómetro.

ELSIF EDO = 11 THEN


IF CONTA = 4_999 THEN
EDO <= 12;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 11;
END IF; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC <= (OTHERS => '0');

En el estado 12 de la FSM se establece obtener los datos del eje X del acelerómetro por
lo que se inicializa el registro correspondiente con el dato X"3B" & X"01" & X"00".

ELSIF EDO = 12 THEN


IF IIC_FIN = '1' THEN
EDO <=
M.C. JOSÉ ARMANDO 13;GONZÁLEZ
LARA
ELSE
EDO <= 12;
END IF;
BUS_IIC <= X"3B" & X"01" & X"00";

Tecnológico Nacional de México 200


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Finalmente se vuelve a usar la subrutina de 100µs para terminar con la programación y


con el final de process.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

ELSIF EDO = 13 THEN


IF CONTA = 4_999 THEN
EDO <= 12;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 13;
END IF; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC <= (OTHERS => '0');

END IF;
END IF;
END PROCESS;

A continuación se muestra el programa completo de la FSM que realiza la comunicación


de la FPGA con un acelerómetro a través del protocolo de comunicación serial I2C.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity TOP is
PORT(
CLK : IN STD_LOGIC;
SDA : INOUT STD_LOGIC;
SCL : OUT STD_LOGIC;
M.C. JOSÉ
LEDS : OUT STD_LOGIC_VECTOR(7 ARMANDO
DOWNTO 0) LARA GONZÁLEZ
);
end TOP;

architecture Behavioral of TOP is

COMPONENT IIC is
PORT (CLK : IN STD_LOGIC ;
IIC_FIN : OUT STD_LOGIC ;
SCL : OUT STD_LOGIC ;
SDA : INOUT STD_LOGIC ;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC : IN STD_LOGIC_VECTOR(23 DOWNTO 0) ;
IIC_DATA_OUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
IIC_ERROR : OUT STD_LOGIC
);
end COMPONENT IIC;

Tecnológico Nacional de México 201


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

SIGNAL EDO : INTEGER RANGE 0 TO 50 := 0;


SIGNAL IIC_FIN : STD_LOGIC := '0';
SIGNAL BUS_IIC : STD_LOGIC_VECTOR(23 DOWNTO 0):= (OTHERS => '0');
SIGNAL IIC_ERROR : STD_LOGIC := '0';
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL CONTA : INTEGER RANGE 0 TO 4_999 := 0;

begin

U1: IIC PORT MAP(


CLK,
IIC_FIN,
SCL,
SDA,
BUS_IIC, M.C. JOSÉ ARMANDO LARA GONZÁLEZ
LEDS,
IIC_ERROR
);

PROCESS(CLK)

BEGIN

M.C.
IF JOSÉ ARMANDO LARA
RISING_EDGE(CLK) GONZÁLEZ
THEN
IF EDO = 0 THEN
IF IIC_FIN = '1' THEN
EDO <= 1;
ELSE
EDO <= 0;
END IF;
BUS_IIC <= X"3A" & X"2A" & X"30";

ELSIF EDO = 1 THEN


IF CONTA = 4_999 THEN
EDO <= 2; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 1;
END IF;
BUS_IIC <= (OTHERS => '0');

ELSIF EDO = 2 THEN


IF IIC_FIN = '1' THEN
EDO <= 3;
ELSE
M.C. JOSÉ ARMANDO LARA
EDO GONZÁLEZ
<= 2;
END IF;
BUS_IIC <= X"3A" & X"2B" & X"19";

Tecnológico Nacional de México 202


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ELSIF EDO = 3 THEN


IF CONTA = 4_999 THEN
EDO <= 4;
CONTA <= 0;
M.C. JOSÉ ARMANDO
ELSE
LARA GONZÁLEZ
CONTA <= CONTA+1;
EDO <= 3;
END IF;
BUS_IIC <= (OTHERS => '0');

ELSIF EDO = 4 THEN


IF IIC_FIN = '1' THEN
EDO <= 5;
ELSE
EDO <= 4;
END IF; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC <= X"3A" & X"2C" & X"02";

ELSIF EDO = 5 THEN


IF CONTA = 4_999 THEN
EDO <= 6;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 5;
END IF;
M.C. JOSÉ ARMANDO LARA
BUS_IIC <=GONZÁLEZ
(OTHERS => '0');

ELSIF EDO = 6 THEN


IF IIC_FIN = '1' THEN
EDO <= 7;
ELSE
EDO <= 6;
END IF;
BUS_IIC <= X"3A" & X"2D" & X"01";

ELSIF EDO = 7 THEN


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF CONTA = 4_999 THEN
EDO <= 8;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 7;
END IF;
BUS_IIC <= (OTHERS => '0');

ELSIF EDO = 8 THEN


IF IIC_FIN = '1' THEN
EDO <= 9;
M.C. JOSÉ ARMANDO
ELSE LARA GONZÁLEZ
EDO <= 8;
END IF;
BUS_IIC <= X"3A" & X"2E" & X"01";

Tecnológico Nacional de México 203


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ELSIF EDO = 9 THEN


IF CONTA = 4_999 THEN
EDO <= 10;
CONTA <= 0;
M.C. JOSÉ ARMANDO
ELSE
LARA GONZÁLEZ
CONTA <= CONTA+1;
EDO <= 9;
END IF;
BUS_IIC <= (OTHERS => '0');

ELSIF EDO = 10 THEN


IF IIC_FIN = '1' THEN
EDO <= 11;
ELSE
EDO <= 10;
END IF; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BUS_IIC <= X"3A" & X"2A" & X"31";

ELSIF EDO = 11 THEN


IF CONTA = 4_999 THEN
EDO <= 12;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 11;
END IF;
M.C. JOSÉ ARMANDO LARA
BUS_IIC <=GONZÁLEZ
(OTHERS => '0');

ELSIF EDO = 12 THEN


IF IIC_FIN = '1' THEN
EDO <= 13;
ELSE
EDO <= 12;
END IF;
BUS_IIC <= X"3B" & X"01" & X"00";

ELSIF EDO = 13 THEN


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF CONTA = 4_999 THEN
EDO <= 12;
CONTA <= 0;
ELSE
CONTA <= CONTA+1;
EDO <= 13;
END IF;
BUS_IIC <= (OTHERS => '0');

END IF;
END IF;
END PROCESS;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
end Behavioral;

Tecnológico Nacional de México 204


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.3 COMUNICACIÓN POR ETHERNET UTILIZANDO IP CORES.


La tecnología Ethernet provee comunicación entre computadoras personales y cualquier
otro M.C.
tipo JOSÉ ARMANDO LARA
de dispositivos GONZÁLEZen forma autónoma, como es el caso de los
que funcionen
microcontroladores y FPGA’s, entre otros dispositivos inteligentes, ya sea en ámbitos locales o
a través de Internet.

Si utilizamos conexiones cableadas, estamos limitados por el número de puertos que


tiene para conectar nuestro router o tenemos que colocar un switch en la red. De todas formas
tenemos que diferenciar entre equipos que vamos a utilizar en movilidad y otros que más o
menos siempre tenemos en el mismo lugar de nuestro hogar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
No se puede negar que una ventaja que tiene la red cableada sobre el WiFi es el
aprovechamiento del ancho de banda. La velocidad de conexión con el router va a ser mucho
mejor. Si lo conectamos mediante un cable de red nuestro ancho de banda será mucho mejor,
mientras que si lo hacemos con WiFi, aunque ambos equipos estén uno al lado del otro
tendremos pérdidas. A medida que nos alejamos del router o pasamos a otra habitación, la
calidad del ancho de banda desciende.

M.C. JOSÉ
Como ARMANDO LARA
inconveniente GONZÁLEZ
de la red cableada se puede mencionar que tiene un alcance máximo
de 100 metros, que habría que limitar en la práctica a 90 metros. La red WiFi puede llegar a
distancias de 300 metros pero con pérdida en la calidad de la señal a medida que nos vamos
alejando del router. Además tenemos que tirar el cable, algo que a muchas personas les puede
resultar incómodo o simplemente no quiere que se vean por la pared.

5.3.1. Introducción a Ethernet.


En muchas de las pláticas sobre RedesM.C.
deJOSÉ ARMANDOmás
comunicación, LARA GONZÁLEZ sobre
específicamente
conexiones de Redes de Área Local conocida también como LAN (Local Area Network)
aparece el término que es conocido como Ethernet, siendo un estándar de redes que emplea el
método CSMA/CD (Acceso Múltiple por Detección de Portadora con Detector de Colisiones)
que mejora notoriamente el rendimiento de dicha conectividad.

Se trata de un estándar que define no solo las características de los cables que deben
utilizarse para establecer una conexión de Red, sino también todo lo relativo a los niveles físicos
de dicha conectividad, además de brindar los formatos necesarios para las tramas de datos de
M.C. JOSÉ
cada nivel. ARMANDO
El estándar LARA
que rige GONZÁLEZ
algunas las conexiones Ethernet es el IEEE 802.3, de alcance a
nivel internacional, por lo que a veces es frecuente encontrar que éste es nombrado directamente
de esta forma, aunque difieren justamente en las tramas de datos y sus respectivos campos
aplicados.

Tecnológico Nacional de México 205


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

El desarrollo de esta conectividad ha tenido un fuerte apoyo de las compañías Digitales,


Intel y Xerox, siendo actualmente el método más popular que es empleado en el mundo para
establecer Conexiones de Red de Área Local teniendo como una de las ventajas de que puede
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
alcanzar una conexión de hasta 1024 nodos a una velocidad de 10 Mbps (Mega bits Por
Segundo) y pudiendo utilizar desde un Cable Coaxial hasta la tecnología de Fibra Óptica para
establecer un enlace.

Los equipos que son susceptibles a conectarse a Ethernet tienen que ser equipos que
permanezcan estáticos, o que siempre los utilicemos por lo general en el mismo sitio. A
continuación se muestra una lista de los equipos más exigentes en su ancho de banda por la
conexión Ethernet:
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

 Pc o portátiles que siempre vamos a utilizar en el mismo sitio. El portátil lo podemos mover,
pero más o menos, casi siempre lo utilizamos en los mismos sitios, en la mesa del comedor, en
nuestro cuarto de estudio o despacho, entre otros espacios. Aquí un cable amigo siempre será
recibido. Por supuesto, para los equipos de sobremesa no hay ningún problema, ya que en
principio no se van a mover.

 NAS (Network Attached Storage) que al igual que los portátiles y sobremesas, será raro que
M.C. JOSÉ
lo estemos ARMANDO
moviendo de un LARA GONZÁLEZ
lado para otro. Si tenemos un disco duro de red, mejor conectado
por cable para sacarle todo el partido entre los diferentes equipos que tenemos conectados en la
misma.

 Impresoras, aunque es cierto que la conexión WiFi se ha popularizado mucho, lo cierto es que
la velocidad de impresión merma si nos conectamos a través de WiFi. Lo más rápido es la
conexión directa USB, pero la conexión de red será muy fácil de configurar y facilitará el uso
de la impresora a todos los dispositivos de la red.

 La Smart TV es uno de los dispositivos dondeM.C.


más JOSÉ
vamos ARMANDO LARA
a agradecer GONZÁLEZ
un buen ancho de banda.
La conexión cableada nos va a permitir disfrutar de contenidos en streaming, pero también de
los contenidos de nuestro disco de red a través de aplicaciones como Plex. Lo cierto es que al
final si lo que buscamos es sacar el máximo partido a nuestra banda ancha, una combinación de
equipos conectados mediante red Ethernet y el WiFi para Smartphones y Tablets será la mejor
opción. Si sabemos situar el Router el sitio adecuado, tirar las conexiones cableadas no
supondrán ningún problema.

5.3.2. Utilización de IP Cores para comunicar dos FPGA´s por Ethernet.


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En esta parte del trabajo se realizó la conexión de dos FPGA’s entre sí, conectando una
de ellas como receptor y la otra como transmisor, a través de una conexión inalámbrica WiFi,
haciendo uso de dos chips Wi-Fi del tipo ESP8266.

Tecnológico Nacional de México 206


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Las direcciones IP (Internet Protocol) son un número único e irrepetible con el cual se
identifica una computadora conectada a una red que corre el protocolo IP. Una dirección IP es
un conjunto de cuatro números del 0 al 255 separados por puntos. Por ejemplo, [Link]
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tiene la dirección IP siguiente: [Link].

En realidad una dirección IP es una forma más sencilla de comprender números muy
grandes, la dirección [Link] es una forma más corta de escribir el número 3357835048.
Esto se logra traduciendo el número en cuatro tripletes.

En el presente trabajo se usan dos FPGA conectadas entre sí, se usa como transmisor
una Xilinx Spartan 6 (XC6SLX9) y como receptor M.C. JOSÉ
una ARMANDO
Xilinx Spartan LARA GONZÁLEZPara la
3E (XC3S100C).
conexión de las FPGA’s del presente trabajo se ha definido la IP [Link] a través de la cual
la FPGA conectada como transmisor tendrá comunicación con la FPGA conectada como
receptor.

En la Figura 5.19 se muestra un diagrama de bloques de la conexión de las dos FPGA´s


mencionadas. Para este ejercicio se usan como entrada de datos de 8 bits, los ocho switches
deslizables (BOTON(0:7)) de la FPGA Spartan 6, la cual actúa como transmisor. Esa palabra
de 8 M.C. JOSÉrecibida
bits será ARMANDO porLARA GONZÁLEZ
la FPGA Spartan 3E, la cual actúa como receptor, misma que
desplegará el dato recibido en ocho LED’s (LEDS(7:0)) conectados a la FPGA receptora.

TRANSMISOR RECEPTOR
FPGA XILINX SPARTAN 6 FPGA XILINX SPARTAN 3E
XC6SLX9 XCS100E
m13
p14

n14

e14

d13

b14
c14
f13

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


m11

m5
n4
g1

p4

n5

p6

p7
BOTON6
BOTON5

BOTON1
BOTON7

BOTON4

BOTON3

BOTON2

BOTON0

LEDS0
LEDS7
LEDS6

LEDS5

LEDS4

LEDS3

LEDS2

LEDS1

Figura 5.19.- Diagrama de conexiones de dos FPGA’s

Básicamente, para visualizar la comunicación de las dos FPGA’s se establece un número


de entrada entre 0 y 255 haciendo uso de los switches deslizables de la FPGA transmisora
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
(BOTON(0:7)) de la FPGA Spartan 6 y este valor establecido sea visualizado en los ocho leds
de la FPGA receptora (LEDS(7:0) de la FPGA Spartan 3E. Por ejemplo si todos los switches
deslizables de la FPGA transmisora se ponen a ‘1’, se deberán encender los ocho leds de la
tarjeta receptora como se muestra en la Figura 5.19.

Tecnológico Nacional de México 207


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

La información que proveniente de los switches deslizables de la tarjeta transmisora es


procesada para posteriormente ser enviada a un módulo de comunicación serial UART para que
sea convertida en información serial y enviada al ESP8266 para su transmisión a la otra FPGA,
como se muestra en la Figura 5.20 la cual corresponde al circuito esquemático elaborado para
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
la parte de la transmisión de la información.

dato
RS232
RELOJ CLK
ACTIVAR CLK RX_IN RX_in

ACTIVAR HABILITAR TX_INI TX RX

RX RX DOUT(7:0) Salida(7:0)
BOTON(7:0) MENSAJE(7:0)
MSN_MENSAJE(7:0)
M.C. JOSÉ ARMANDOTX_FIN
DATO_IN(7:0)
LARA GONZÁLEZ
PERMITE

Figura 5.20.- Diagrama esquemático de la parte transmisora

Esta información es recibida por otro ESP8266 configurado como receptor, el cual pasa
la información a un módulo de comunicación serial UART para convertirla en información
paralela y transferirla a otro módulo donde será desplegada en los LED’s de la FPGA receptora,
comoM.C.
se puede
JOSÉ observar
ARMANDO en la Figura
LARA 5.21. Esta figura muestra un diagrama esquemático de la
GONZÁLEZ
parte receptora del proyecto.

RS232
dato
RELOJ CLK TX_FIN
CLK
LEDS(7:0)
TX LEDS(7:0)
RX RX
RX_IN RECEPCION
TX_INI M.C. JOSÉ ARMANDO LARA GONZÁLEZ
DOUT(7:0) DATO(7:0)

DATAIN(7:0)

Figura 5.21.- Diagrama esquemático de la parte receptora

A continuación se describen los programas realizados en VHDL para cumplir con el


propósito de conectar las dos FPGA’s mencionadas anteriormente. Primeramente se describe
el programa para el esquemático marcado como RS232.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Primeramente se describe la entidad del esquemático RS232 el cual se muestra en el
siguiente listado y se explica después del listado, cabe mencionar que este código se usa para
las dos FPGA´s.

Tecnológico Nacional de México 208


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Primeramente se puede observar dentro de la entidad, el generic, el cual es útil cuando


RS232 es parte de un TOP. Sí no es parte de un TOP entonces se deben poner tanto la frecuencia
del FPGA como los BAUDIOS como valores contantes en el generic.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity RS232 is
generic(FPGA_CLK : INTEGER := 50000000;
BAUD_RS232: INTEGER := 9600);

Posteriormente se describen las entradas y salidas de la entidad iniciando con la entrada


de reloj CLK de la FPGA, además de RX como pin de recepción de RS232, TX_INI la cual
debe ponerse a '1' para iniciar la transmisión. De igual manera se describe la salida TX_FIN la
cual se pone '1' cuando termina la transmisión. Por otra parte la salida TX corresponde al pin de
transmisión de RS232, mientras que RX_IN se M.C. JOSÉ
pone a ARMANDO
'1' cuando seLARA
ha GONZÁLEZ
recibido un Byte,
DATAIN es el puerto de datos de entrada para transmisión y finalmente DOUT es el puerto de
datos de salida para recepción.

port
(CLK : in std_logic ;
RX : in std_logic ;
TX_INI: in std_logic ;
TX_FIN : out std_logic:='0';
TX : out std_logic ;
M.C. JOSÉ RX_IN
ARMANDO LARA
: out GONZÁLEZ
std_logic ;
DATAIN : in std_logic_vector(7 downto 0);
DOUT : out std_logic_vector(7 downto 0)
);
end RS232;

Una vez descrita la entidad se inicia con la arquitectura comportamental del programa,
donde se definen primeramente las constantes y señales que serán empleadas dentro del
programa.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

architecture Behavioral of RS232 is

CONSTANT FPGA_CLK2: INTEGER := FPGA_CLK;


CONSTANT BAUD_RS2322: INTEGER := BAUD_RS232 ;
CONSTANT BAUD_FPGA2: INTEGER := FPGA_CLK2/BAUD_RS2322 ;
CONSTANT CLKBAUD2: INTEGER := BAUD_FPGA2/2 ;

signal flanco_bajada : std_logic := '0';


signal clk_ini : std_logic := '0';
M.C. JOSÉ ARMANDO
signal clk_tx_iniLARA
: GONZÁLEZ
std_logic := '0';
signal clk_flanco : std_logic := '0';
signal clk_tx_flanco : std_logic := '0';
signal rx_vector : std_logic_vector(4 downto 0) ;
signal rx_vector2 : std_logic_vector(4 downto 0) ;

Tecnológico Nacional de México 209


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

signal tx_data : std_logic_vector(7 downto 0) ;


signal tx_data2 : std_logic_vector(7 downto 0) ;
signal dout_paralelo : std_logic_vector(9 downto 0) ;
signal clk_baud : natural range 0 to CLKBAUD2 - 1;
signal clk_tx_baud : natural range 0 to BAUD_FPGA2 - 1;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
signal paralelo_paso : natural range 0 to 6 := 0 ;
signal tx_maquina : natural range 0 to 6 := 0 ;
signal n : natural range 0 to 10 := 0 ;
signal tx_n : natural range 0 to 10 := 0 ;

Dentro begin de la descripción comportamental, se inicia con un registro de corrimiento


el cual tiene la función de muestrear RX en busca de la condición de INICIO, como se muestra
en las siguientes líneas.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


begin
rx_vector <= rx_vector2(3 downto 0) & RX;

process(CLK)
begin
if rising_edge(CLK) then
rx_vector2 <= rx_vector;
end if;
end process;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
En la siguiente línea se genera un flanco de bajada siempre que la condición "1100" se
cumpla.

flanco_bajada <= '1' when rx_vector(4 downto 1) = "1100" else '0';

En el siguiente código, se describe una máquina de estados que controla la recepción de


1 byte de información. M.C. JOSÉ ARMANDO LARA GONZÁLEZ

RECEPCION: process(CLK)
begin
if rising_edge(CLK) then
if paralelo_paso = 0 then
n <= 0;
if flanco_bajada = '1' then
paralelo_paso <= 1;
else
paralelo_paso <= 0;
M.C. JOSÉend
ARMANDO
if; LARA GONZÁLEZ
RX_IN <= '0';
--RX_INS <= '0';
elsif paralelo_paso = 1 then

Tecnológico Nacional de México 210


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En esta parte del programa se describe el desarrollo del reloj de BAUDIOS

clk_ini
M.C. <= '1'; LARA GONZÁLEZ
JOSÉ ARMANDO
paralelo_paso <= 2;
elsif paralelo_paso = 2 then
if clk_flanco = '1' then
paralelo_paso <= 5 ;
else
paralelo_paso <= 2;
end if;
elsif paralelo_paso = 3 then
if clk_flanco = '1' then
paralelo_paso <= 4;
else
if n < 10 then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 3;
else
n <= 10;
paralelo_paso <= 6;
end if;
end if;
elsif paralelo_paso = 4 then
if clk_flanco = '1' then
paralelo_paso <= 5 ;
else
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 4;
end if;
elsif paralelo_paso = 5 then

Posteriormente en el siguiente listado se recibe bit a bit la información de entrada. "n"


debe contar hasta 8.

n <= n + 1;
dout_paralelo(n) <= RX; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
paralelo_paso <= 3;
else

DOUT<= dout_paralelo(8 downto 1);


clk_ini <= '0';
n <= 0;
paralelo_paso <= 0;
RX_IN <= '1';
end if;
end if;
end process;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
process(CLK)
begin
if rising_edge(CLK) then
if clk_ini = '1' then

Tecnológico Nacional de México 211


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

if clk_baud < (CLKBAUD2-1) then


clk_baud <= clk_baud + 1;
clk_flanco <= '0';
else
clk_baud <= 0;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
clk_flanco <= '1';
end if;
else
clk_flanco <= '0';
clk_baud <= 0;
end if;
end if;
end process;

TRANSMICION: process(CLK)
begin
if rising_edge(CLK) then M.C. JOSÉ ARMANDO LARA GONZÁLEZ
if tx_maquina = 0 then
TX <= '1';
clk_tx_ini <= '0';
tx_n <= 0;
TX_FIN <= '0';

Para iniciar la transmisión, se debe poner TX_INI a '1' manualmente o a través de otro
modulo. Cuando se pone TX_INI a '1' se carga la información que se necesita enviar en tx_data
usando el puerto DATAIN.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

if TX_INI = '1' then


tx_maquina <= 1;
tx_data <= DATAIN ;
else
tx_maquina <= 0;
tx_data <= "00000000";
end if;
elsif tx_maquina = 1 then
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Posteriormente se hace TX = '0', es decir, es el bit de inicio. También se inicia el reloj
para BAUDIOS de transmisión

TX <= '0';
clk_tx_ini <= '1';
tx_maquina <= 2;
elsif tx_maquina = 2 then

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


El reloj de BAUDIOS indica cuando se ha enviado un bit completo. Cuando este bit ha
sido enviado, entonces se carga en TX el siguiente bit usando la instrucción TX<=tx_data(0) y
se pasa al estado 3, como se muestra en el siguiente listado.

Tecnológico Nacional de México 212


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

if clk_tx_flanco = '1' then


tx_maquina <= 3 ;
TX <=tx_data(0);
else
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tx_maquina <= 2;
end if;
elsif tx_maquina = 3 then

Se utiliza un registro de corrimiento para recorrer la información del registro tx_data.


Tx_data2 es un registro auxiliar que recibe la información recorrida un lugar a la derecha. Antes
de recorrer la información se compara tx_n para saber cuántos bits ya se han enviado.

if tx_n < 9 then


tx_n <= tx_n + 1; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tx_data2 <= '1' & tx_data(7 downto 1);
tx_maquina <= 4;

En caso de que ya se haya enviado el bit de paro, entonces la máquina de estados se va


al último estado.

else
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tx_maquina <= 5;
end if;
elsif tx_maquina = 4 then

En caso de que aún no se hayan enviado los 10 bits (8 de información, 1 de inicio y 1 de


paro), entonces se actualiza el registr tx_data con el valor de tx_data2 (mismo que tiene la
información recorrida un lugar a la derecha) y regresa al estado 2.

tx_data <= tx_data2; M.C. JOSÉ ARMANDO LARA GONZÁLEZ


tx_maquina <= 2;
else

Si ya se encuentra en el último estado, espera a que pongamos TX_INI a '0' antes de


regresar al estado inicial. Eso ha sido implementado como protección contra posibles colisiones
de BYTES

M.C. JOSÉifARMANDO
TX_INI =LARA
'1' GONZÁLEZ
then
TX_FIN <= '1' ;
tx_maquina <= 5 ;
else
TX_FIN <= '0' ;

Tecnológico Nacional de México 213


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

tx_maquina <= 0;
end if;
end if;
M.C. JOSÉend if;
ARMANDO LARA GONZÁLEZ
end process;

Finalmente se describe el reloj de Baudios para el proceso de transmisión.

process(CLK)
begin
if rising_edge(CLK) then
if clk_tx_ini = '1' then
if clk_tx_baud < (BAUD_FPGA2-1) then
clk_tx_baud <= M.C. JOSÉ ARMANDO
clk_tx_baud + 1; LARA GONZÁLEZ
clk_tx_flanco <= '0';
else
clk_tx_baud <= 0;
clk_tx_flanco <= '1';
end if;
else
clk_tx_flanco <= '0';
clk_tx_baud <= 0;
end if;
end if;
M.C.
endJOSÉ ARMANDO LARA GONZÁLEZ
process;
end Behavioral;

Con esta parte se concluye la descripción del programa del esquemático RS232 el cual
es utilizado para las dos FPGA´s (FPGA Spartan 3E y FPGA Spartan 6).

A continuación se describe el código correspondiente al esquemático denominado


DATO en el diagrama esquemático del TRANSMISOR de la Figura 5.20. Como ya se mencionó
M.C. JOSÉ
anteriormente, este programa tiene la función de procesar ARMANDOproveniente
la información LARA GONZÁLEZ
de los switches
deslizables de la FPGA transmisora (BOTON(0:7)) de la FPGA Spartan 6 para posteriormente
ser enviada a un módulo de comunicación serial UART para que sea convertida en información
serial. A continuación se describe la entidad del módulo denominado DATO. En ella se
muestran las entradas-salidas del módulo de acurdo con el diagrama esquemático mencionado.

entity dato is
Port (CLK : in STD_LOGIC;
PERMITE: in STD_LOGIC;
M.C. JOSÉHABILITAR: in STD_LOGIC;
ARMANDO LARA GONZÁLEZ
MENSAJE: in STD_LOGIC_VECTOR (7 DOWNTO 0);
ACTIVAR: out STD_LOGIC;
MSN_SALIDA: out STD_LOGIC_VECTOR (7 DOWNTO 0)
);
end dato;

Tecnológico Nacional de México 214


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Posteriormente se describe la arquitectura comportamental del módulo DATO de la


tarjeta transmisora de la información. Primeramente dentro de la descripción comportamental
se describen las señales de conteo, como se muestra a continuación.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
architecture Behavioral of dato is

CONSTANT ESCALA_RETARDO: INTEGER:= 1_999_999;


SIGNAL CONTA_RETARDO: INTEGER RANGE 0 TO ESCALA_RETARDO:= 0;
SIGNAL CONTADOR: INTEGER RANGE 0 TO 255:= 0;
SIGNAL OK: STD_LOGIC:= '0';
SIGNAL INI_CONTEO: STD_LOGIC:= '0';
SIGNAL EDO: INTEGER RANGE 0 TO 10:= 0;
begin

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


A continuación se desarrolla un proceso que cual se encarga de hacer el retardo para
llevar a cabo el conteo.

PROCESS(CLK)
BEGIN

Después del inicio del process se verifica si existe un flanco de transición positiva en el
pulso del reloj y en cada flanco de subida incrementamos al contador para el retardo.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF RISING_EDGE(CLK) THEN
CONTA_RETARDO <= CONTA_RETARDO+1;
IF CONTA_RETARDO < ESCALA_RETARDO THEN

Se mantiene la bandera en '0' hasta que ya haya transcurrido un segundo


OK <= '0';

Posteriormente, si el contador llega aM.C. JOSÉ ARMANDO


su valor máximo se LARA GONZÁLEZ
reinicia el contador y se
incrementa el contador principal. Posteriormente se indica a través de la instrucción OK <= '1',
que ya pasó un segundo y si el contador principal llega a su valor máximo que es 255 entonces
se reinicia el contador principal.

ELSIF CONTA_RETARDO = ESCALA_RETARDO THEN


CONTA_RETARDO <= 0;
CONTADOR <= CONTADOR+1;
OK <= '1';
IF CONTADOR = 255 THEN
M.C. JOSÉ ARMANDO
CONTADOR <= 0; LARA GONZÁLEZ
END IF;
END IF;
END IF;
END PROCESS;

Tecnológico Nacional de México 215


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Finalmente se desarrolla el process para llevar a cabo la transmisión de datos.


Básicamente se cargan el dato de CONTADOR y se convierte a un vector de 8 bits.
Primeramente en este process, se verifica si el pin habilitar es ‘1’ para verificar posteriormente
[Link]É
si existe ARMANDO
flanco LARApositiva
de transición GONZÁLEZdel pulso de reloj, para verificar posteriormente si la
máquina de entrada se encuentra en el estado 0 y finalmente se verifica si ha transcurrido un
segundo en la bandera OK y en caso de que se cumplan estas cuatro condiciones, se asigna el
dato a la salida.

PROCESS (CLK)
BEGIN
IF HABILITAR = '1' THEN
IF RISING_EDGE (CLK) THEN
IF EDO = 0 THEN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IF OK = '1' THEN
msn_salida <= MENSAJE;
EDO <= 1;
ELSE
EDO <= 0;
END IF;
ELSIF EDO <= 1 THEN
IF PERMITE = '1' THEN
EDO <= 0;
ACTIVAR <= '0';
M.C. JOSÉ ARMANDO
ELSE LARA GONZÁLEZ
EDO <= 1;
ACTIVAR <= '1';
END IF;
END IF;
END IF;
END IF;
END PROCESS;
end Behavioral;

[Link]É
Finalmente se muestra el programa para ARMANDO
esquemático LARA GONZÁLEZ
denominado DATO para el
RECPTOR. Primeramente se muestra la entidad, con la descripción de los pines de entrada y
salida del módulo.

entity dato is
Port (CLK : in STD_LOGIC;
RECEPCION: in STD_LOGIC;
DATO: in STD_LOGIC_VECTOR(7 DOWNTO 0);
LED: out STD_LOGIC_VECTOR(7 DOWNTO 0)
);
M.C. JOSÉend
ARMANDO
dato; LARA GONZÁLEZ

Tecnológico Nacional de México 216


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Por otro lado y para finalizar con el programa de la parte de recepción, se tiene en el
código siguiente, la descripción comportamental del módulo. En esta descripción, se verifica
primeramente si existe un flanco de transición positiva y si se encuentra activada la recepción
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
se encenderán los LED’s de la tarjeta receptora con los digitos enviados desde los swiches de la
tarjeta transmisora.

architecture Behavioral of dato is


begin

PROCESS (CLK)
BEGIN
IF RISING_EDGE (CLK) THEN
IF RECEPCION = '1' THEN
LED <= DATO;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
END IF;
END IF;
END PROCESS;
end Behavioral;

5.4 COMUNICACIÓN POR CAN UTILIZANDO IP CORES.


Se inicia el presente tema describiendo el significado etimológico de CAN, él cual es el
M.C. de
acrónimo JOSÉ ARMANDO
Controller LARA
Area GONZÁLEZ
Network. Lo se podría traducir como Controlador de Red de
Área. Lo de BUS, significa que se tiene una topología en forma de bus, lo cual significa que
hay un solo conductor que recorre un módulo o entidad, de varios líneas. Generalmente esta
área es un vehículo al que se van conectando los diferentes dispositivos electrónicos que
necesiten comunicarse. De esta forma se reduce la cantidad de cables que se necesitan en el
coche con el uso de ese medio de comunicación.

Cualquier dispositivo electrónico conectado al bus puede mandar información, misma


M.C. JOSÉ
que podrá ser recibida por cualquier otro dispositivo ARMANDO
conectado LARA
al bus. GONZÁLEZ
Cada tipo de mensaje
lleva un identificador, a través del cual será seleccionado por alguno de los dispositivos
conectados al bus. En este tipo de comunicación solo un dispositivo podrá tener acceso al bus
en un momento determinado.

Dentro de un automóvil, los dispositivos que se pueden conectar al bus son por ejemplo:
los elevadores de los vidrios eléctricos, el aire acondicionado, el cierre de puertas automático o
manual, el techo solar, los asientos eléctricos, el sistema de inyección electrónica y todos sus
[Link]
sensores, JOSÉ ARMANDO
panel LARA GONZÁLEZ
de instrumentos, los mandos en el volante, los sistemas multimedia, entre
otros dispositivos. En esta sección del trabajo se realiza a comunicación de dos FPGA’s a través
de este tipo de comunicación. Para esta razón es necesario conocer las bases de la comunicación
por Bus CAN

Tecnológico Nacional de México 217


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

5.4.1. Introducción al Bus CAN.


El Bus Can como su nombre lo dice es un canal de comunicación entre varios
M.C. JOSÉ
dispositivos ARMANDOque
electrónicos LARAcomparten
GONZÁLEZinformación. Debido a sus características de
simplicidad y velocidad, este bus es utilizado en el control de los diversos dispositivos de
muchos automóviles modernos. De hecho, tal es la cantidad de dispositivos que están
conectados entre sí en un automóvil en la actualidad, que se requiere garantizar la rapidez y
robustez de las comunicaciones, que muchas veces no suele haber un solo bus CAN, si no que
hay varios sub-buses en el vehículo. Por ejemplo bus para la gestión electrónica del motor, otro
para climatización y entretenimiento, otro para temas de seguridad (alarmas, cierre centralizado,
ABS), entre otros. Este bus fue desarrollado por la empresa Bosch en el año 2011 con una
evolución del CAN.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Otro uso de este protocolo se usa para el diagnóstico del vehículo, así como para conocer
el estado de los dispositivos conectados en el vehículo. Los coches tienen un conector especial
llamado OBD, que son las iniciales de On-board diagnostics, lo que se puede traducirse como
diagnostico a bordo, que suele encontrarse debajo del volante. Este conector nos permite acceder
a los buses CAN del automóvil. Con un adaptador podemos conectar una computadora o similar
y así nos enteraremos de todo lo que se ocurre en el interior del coche.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


El cable que se emplea es un par trenzado por el cual se transmiten señales diferenciales
para minimizar los efectos del ruido. Además todos los datos se verifican por todos los
dispositivos conectados al bus. Si alguno de estos dispositivos detecta que hay errores en la
transmisión, hace caso omiso al resto de la información y se descarta el mensaje enviado. La
velocidad del Bus CAN va desde 40 Kbps en distancias de un kilómetro hasta 1Mbps, siempre
que el cable no mida más de 40 metros. En la práctica, en los automóviles se emplean
velocidades entre 125 Kbps hasta 500 Kbps, ya que cuanto más rápido se realice la
comunicación, habrá mayor margen de error.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
El sistema de comunicación a través de Bus CAN se basa en el modelo
productor/consumidor, el cual es un concepto de comunicaciones de datos, que describe una
relación entre un productor y uno o más consumidores. Bus CAN es un protocolo orientado a
mensajes, es decir la información que se va a intercambiar se integra en mensajes, a los cuales
se les asigna un identificador y se encapsulan en tramas para su transmisión. Cada mensaje tiene
un identificador único dentro de la red, con el cual los nodos deciden aceptar o no dicho mensaje.

M.C. JOSÉCAN
El Bus ARMANDO LARA GONZÁLEZ
fue desarrollado inicialmente para aplicaciones en los automóviles y por lo
tanto la plataforma del protocolo es resultado de las necesidades existentes en el área del
automovilismo.

Tecnológico Nacional de México 218


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En la Figura 5.22 se muestra un diagrama esquemático simplificado del Bus CAN, como
se puede ver consta básicamente de una topología en forma de bus, donde únicamente se
requieren dos cables trenzados con una impedancia de 120Ω, mediante los cuales se
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
interconectan todos los dispositivos en una misma red. Estos cables de denominan CAN-H y
CAN-L y dependiendo del voltaje de los mismos, el bus puede encontrarse en modo recesivo,
lo que también se conoce como modo común, con ambos cables con el mismo nivel de tensión
o en modo dominante, con una diferencia de potencial entre los cables de 1.5 Volts por lo menos.
Este tipo de conexión tiene como objetivo brindar la mayor protección contra el ruido
electromagnético.

SENSOR SENSOR SENSOR


1 2 M.C. JOSÉ ARMANDO
n LARA GONZÁLEZ

CAN-Hi
120Ω

120Ω
CAN-Low
Figura 5.22.- Diagrama esquemático simplificado del Bus CAN.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Esta protección tiene como soporte el hecho de que la lectura de los bits se basa en la
diferencia de potencial entre los dos cables trenzados, por lo que en caso de que ambos cables
sean sometidos a la misma interferencia electromagnética, seguirán manteniendo constante la
misma diferencia de potencial. En la Figura 5.23 se muestra un diagrama con los niveles de
voltaje del Bus CAN.

V
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
1µs
3.5V
CAN-H

2.5V

CAN-L
1.5V

M.C. JOSÉ ARMANDO LARA


0V
GONZÁLEZ RECESIVO DOMINANTE RECESIVO
t

Figura 5.23.- Niveles de voltaje del Bus CAN.

Tecnológico Nacional de México 219


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En lo que se conoce como modo común, el voltaje puede estar, en cualquier punto entre
-2 y 7V, según como se especifique. La tensión diferencial del bus, la cual sería la diferencia
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entre CAN_H y CAN_L, en modo dominante debe estar entre 1,5 y [Link] tiempo mínimo que
el bus debe estar activo es de 1µs . No se especifica, en cambio, que la tensión de modo común,
cuando el bus está en modo recesivo, deba estar comprendida entre la tensión de CAN_L y la
tensión de CAN_H cuando el bus está en modo dominante.

Por lo que hace a la sincronización de los bits, todos los nodos de un bus CAN deben
trabajar con la misma tasa de transferencia nominal. Dado que el bus CAN no usa una señal de
reloj separada, factores como la deriva de reloj y la tolerancia de los osciladores causan que
haya una diferencia entre la tasa de transferenciaM.C. JOSÉ
real de los ARMANDO LARAPor
distintos nodos. GONZÁLEZ
ello es necesario
un método de sincronización entre los nodos. La sincronización es especialmente importante en
la fase de arbitraje ya que durante el arbitraje cada nodo debe ser capaz de observar tanto los
datos por él como los datos transmitidos por los demás nodos.

El requisito mínimo para un bus CAN es que dos nodos, estando en sendos extremos de
la red con el máximo retardo de propagación entre ellos, y cuyos controladores CAN tienen unas
frecuencias de reloj en los límites opuestos de la tolerancia de frecuencia especificada, sean
M.C.
capaces deJOSÉ ARMANDO
recibir LARA GONZÁLEZ
y leer correctamente todos los mensajes transmitidos por la línea. Esto incluye
que todos los nodos muestreen el valor correcto de cada bit.

Para llevar a cabo lo anteriormente mencionado, el controlador CAN espera que una
transición del bus de recesivo a dominante ocurra en un determinado intervalo de tiempo. Si la
transición no ocurre en el intervalo esperado, el controlador reajusta la duración del siguiente
bit en consecuencia. Dicho ajuste se lleva a cabo dividiendo cada bit en intervalos o cuantos de
tiempo (del latín quantum) y asignando los intervalos a los cuatro segmentos de cada bit:
sincronización, propagación, segmento de fase M.C.
1 yJOSÉ ARMANDO
segmento LARA
de fase GONZÁLEZ
2. En la Figura 5.24 se
muestra un diagrama d tiempo de la sincronización de los bits del Bus CAN.

TIEMPO DEL BIT NOMINAL

BIT PREVIO SINC PROPAGACIÓN FASE 1 FASE 2 BIT PRÓXIMO

PUNTO DE MUETREO

TIEMPO DEL CUANTO


M.C. JOSÉ ARMANDO LARA
Figura GONZÁLEZ
5.24.- Sincronización de bits del Bus CAN.

Tecnológico Nacional de México 220


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Como se puede ver en la Figura 5.24, el segmento de sincronización es el intervalo de


tiempo en el que se supone que ocurren las transiciones de recesivo a dominante, mientras que
el segmento de propagación es el intervalo de tiempo que compensa los retardos de propagación
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
a lo largo de la línea.

Por otra parte, los segmentos de fase 1 y 2 e usan para llevar a cabo la resincronización
de los nodos. El segmento de fase 1 puede ser alargado o el 2 acortado para la resincronización.
El punto de muestreo del bit se encuentra inmediatamente después del segmento de fase 1. El
punto de muestreo se encuentra habitualmente cerca del 75 % de la duración total del bit.

La configuración de los segmentos del bitM.C. JOSÉsobre


se hace ARMANDO
la baseLARA GONZÁLEZde reloj
de la frecuencia
de cada controlador CAN. Los segmentos se configuran individualmente para cada controlador
en un mismo bus. A efectos prácticos, la configuración de los segmentos del bit supone un
compromiso entre la tasa de transferencia y tolerancia de los osciladores.

Respecto a la Capa de Enlaces de Datos se puede apuntar que el protocolo CAN


proporciona un acceso multimaestro al bus con una resolución determinista de las colisiones.
La capa de enlace de datos define el método de acceso al medio así como los tipos de tramas
M.C.
para el JOSÉ
envío de ARMANDO
mensajes. LARA GONZÁLEZ

Respecto al acceso al medio, lo que se conoce también como arbitraje, la especificación


del CAN usa los términos “dominante” y “recesivo” para referirse a los bits, donde un bit
dominante equivale al valor lógico 0 y un bit recesivo equivale al valor lógico 1. El estado
inactivo del bus es el estado recesivo o valor lógico 1.

Cuando dos nodos intentan transmitir [Link]


JOSÉ ARMANDO LARAcolisión
se denomina GONZÁLEZy el valor del
bit dominante prevalece sobre el valor del bit recesivo. En ese caso el nodo que intentaba
transmitir el valor recesivo detecta la colisión y pasa a modo pasivo, es decir, deja de transmitir
para escuchar lo que transmite el otro nodo. Por esta razón es importante que todos los nodos
estén sincronizados y muestreen todos los bits del bus simultáneamente.

El arbitraje se produce durante los primeros bits de una trama o mensaje, durante la
transmisión de lo que se conoce como identificador del mensaje. Al final del proceso de arbitraje
sólo debe quedar un nodo con el control del bus. Por ello cada nodo debe manejar identificadores
M.C.
únicos. JOSÉ ARMANDO
Cuando LARA
un nodo pierde el GONZÁLEZ
arbitraje aplaza la transmisión de su trama para intentarlo de
nuevo cuando finalice la trama actual.

Tecnológico Nacional de México 221


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Conociendo los identificadores de todas las tramas que intentan ser transmitidas, se
puede establecer de manera determinista el orden en el que son transmitidas. Así, una trama
CAN con identificador más bajo (mayor número de bits dominantes en las primeras posiciones)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
tiene más prioridad que una trama con identificador más alto.

Es conveniente mencionar que existen cuatro tipos de tramas CAN, siendo estas: la trama
de datos conocida como data frame, la trama remota conocida como remote frame, la trama
de error también llamada error frame y la trama de sobrecarga llamada también overload
frame.

M.C.
Una trama de datos CAN puede ser de uno de los dosJOSÉ ARMANDO
siguientes LARA GONZÁLEZ
formatos:

 Formato base: con identificador de 11 bits.


 Formato extendido: con identificador de 29 bits.

El estándar dice que un controlador CAN debe aceptar tramas en formato base, y puede
o no aceptar tramas en formato extendido. Pero en cualquier caso debe tolerar tramas en formato
extendido. Es decir, que si un controlador está configurado para que sólo acepte tramas en
M.C.
formato JOSÉ
base noARMANDO
debe lanzarLARA GONZÁLEZ
un error cuando reciba una trama en formato extendido, sino que
simplemente no transmitirá el mensaje al procesador central.

Para el presente trabajo, se ha elegido el formato base de 11 bits, por lo cual en la Figura
5.25 se muestra la gráfica de la trama CAN en formato base.

TRAMA CAN COMPLETA

CAMPO DE ARBITRAJE CONTROL DATOS


M.C. JOSÉ ARMANDO
CAMPO CRC LARA GONZÁLEZ
FIN TRAMA

11 4 8 15
DELIMITADOR ACK
BIT EXT. DE IDENT.
PETICION DE T. R.
INICIO DE TRAMA

BIT RESERVADO

HUECO ACUSE
CRC DEL.
CRC14
CRC13
CRC12
CRC11
CRC10
CRC9
CRC8
CRC7
CRC6
CRC5
CRC4
CRC3
CRC2
CRC1
CRC0

EOF6
EOF5
EOF4
EOF3
EOF2
EOF1
EOF0
IFS2
IFS1
IFS0
ID10

DL3
DL2
DL1
DL0
ID9
ID8
ID7
ID6
ID5
ID4
ID3
ID2
ID1
ID0

D7

D5
D4
D3
D2
D1
D0
D6

DATOS 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1

CAN Hi

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


CAN Lo

Figura 5.25.- Trama CAN con formato base.

Tecnológico Nacional de México 222


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En la Tabla 5.3 se muestra la descripción de los campos, longitud y finalidad de cada


uno de ellos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Tabla 5.3.- Campos de la trama CAN en formato base,
NOMBRE DEL CAMPO LONGUITUD FINALIDAD
(BITS)
Inicio de trama 1 Marca el inicio de la transmisión
Identificador ID 11 Un identificador (único) que también
representa la prioridad de la trama.
Petición de transmisión 1 Dominante (0) para tramas de datos y
remota RTR recesivo (1) para tramas de peticiones
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
remotas.
Bit de extensión de 1 Dominante (0) para el formato base
identificador IDE (identificador de 11 bits).
Bit reservado. Debe ser dominante (0), pero
Bit reservado (r0) 1
aceptado tanto dominante como recesivo.
Número de bytes de datos en el mensaje, entre 0 y
Código de longitud de datos
4 8. Si este campo es mayor que 8 el mensaje será
DLC (amarillo)
de 8 bytes como máximo de cualquier modo.
Datos de la trama (la longitud del campo viene
Campo de datos (rojo) 0–64 (0-8 bytes)
dada por el código de longitud de datos o DLC).
M.C. JOSÉ ARMANDO LARA GONZÁLEZ Verificación por redundancia cíclica. Código que
CRC 15 verifica que los datos fueron transmitidos
correctamente.
Delimitador CRC 1 Debe ser recesivo (1).
Hueco de acuse de recibo El transmisor emite recesivo (1) y cualquier
1
ACK receptor emite dominante (0).
Delimitador ACK 1 Debe ser recesivo (1).
Fin de trama EOF 7 Debe ser recesivo (1).

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


5.4.2. Utilización de IP cores para comunicar dos FPGA’s por bus CAN.
Para llevar a cabo este punto se hizo la conexión de dos FPGA’s a través de los pines
TX y RX para llevar a cabo la transmisión BUS CAN. Se conectó una FPGA XILINX
SPARTAN XC6SLX9 la cual enviará la información hasta otra FPGA donde se encenderán
ocho led´s de acuerdo con la información que se establecerá en ocho switches de la tarjeta
transmisora. La tarjeta receptora de la información es una FPGA XILINX SPARTAN
XC6SLX16. En la Figura 5.26 se muestra el diagrama de conexiones de las dos FPGA’s, donde
estas están conectadas a través de la comunicación serial para aplicar la comunicación CAN. En
[Link]
la tarjeta JOSÉ ARMANDO
XC6SLX9LARAseGONZÁLEZ
colocan los bits en la ocho switches y ese dato será enviado
a la FPGA SPARTAN XC6SLX16, donde será desplegado el dato en los ocho led’s de la tarjeta
como se muestra en la figura.

Tecnológico Nacional de México 223


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

RX RX
C10 L7

FPGA XILINX SPARTAN 6 FPGA XILINX SPARTAN 6


M.C. JOSÉ ARMANDO
XC6 SLX9 LARA GONZÁLEZ
D11
TX TX N6
XC6SLX16

m13
p14

n14

e14

d13

b14
c14
f13

R1

R2

R5

R7
T4

T5

T8

T9
BOTON6

BOTON5

BOTON1
BOTON7

BOTON4

BOTON3

BOTON2

BOTON0

LEDS0
LEDS7
LEDS6

LEDS5

LEDS4

LEDS3

LEDS2

LEDS1
Figura 5.26.- Conexión de las FPGA’s para la comunicación CAN.

A la SPARTAN XC6SLX16 se le cargo [Link]É ARMANDO


programa LARA GONZÁLEZ
en VHDL el cual se le ha
denominado NODO MAESTRO, solo por llamarle de alguna manera ya que el BUS CAN no
funciona como maestro-esclavo. A continuación en el siguiente listado se muestra el código de
dicho programa.

Primeramente se tiene la descripción de la entidad, en la cual se han definido las entradas


y salidas de la tarjeta. Se destaca la entrada RX y la salida TX para llevar a cabo la comunicación.
De igual manera se destacan las salidas LEDS de ocho bits para poder desplegar la información
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
recibida.

entity NODO_MAESTRO is
PORT(
CLK : IN STD_LOGIC;
RX : IN STD_LOGIC;
TX : OUT STD_LOGIC;
LEDS : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
);
end NODO_MAESTRO;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Posteriormente se tiene la descripción comportamental, primeramente se establece la


frecuencia del reloj de la FPGA de 50,000,000 hertz y la frecuencia de transmisión y recepción
del CAN de 100,000 hertz. De igual manera se define en esta parte del programa, el número del
identificador del nodo, siendo este el número "00000001010".

architecture Behavioral of NODO_MAESTRO is

COMPONENT LIBRERIA_CAN_INTESC_REVA
M.C. JOSÉ ARMANDO LARA GONZÁLEZ is

GENERIC( FREC_FPGA : INTEGER := 50_000_000;


FREC_CAN : INTEGER := 100_000;
IDENTIFICADOR:STD_LOGIC_VECTOR(10 DOWNTO 0):= "00000001010"
);

Tecnológico Nacional de México 224


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

PORT( CLK : IN STD_LOGIC;


RX : IN STD_LOGIC;
TX : OUT STD_LOGIC;
M.C. JOSÉINI_TRANS
ARMANDO:LARA
IN STD_LOGIC;
GONZÁLEZ
ERROR_RX : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
CAN_DATAIN : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
CAN_DATAOUT : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
RTR : IN STD_LOGIC;
DLC : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
NO_RESPUESTA: OUT STD_LOGIC;
OCUPADO : OUT STD_LOGIC;
TX_FIN : OUT STD_LOGIC;
RX_FIN : OUT STD_LOGIC
);
end COMPONENT LIBRERIA_CAN_INTESC_REVA;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Posteriormente se describen las señales y constantes que serán empleadas en la
transmisión de los datos.

CONSTANT DLC : STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');


SIGNAL INI_TRANS : STD_LOGIC := '0';
SIGNAL ERROR_RX : STD_LOGIC_VECTOR(2 DOWNTO 0) := (OTHERS => '0');
SIGNAL CAN_DATAIN : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0');
SIGNAL CAN_DATAOUT : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0');
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL RTR : STD_LOGIC := '1';--GENERAMOS REMOTE FRAMES
SIGNAL NO_RESPUESTA: STD_LOGIC := '0';
SIGNAL TX_FIN : STD_LOGIC := '0';
SIGNAL RX_FIN : STD_LOGIC := '0';
SIGNAL OCUPADO : STD_LOGIC := '0';
SIGNAL LEDS_S : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
SIGNAL EDO : INTEGER RANGE 0 TO 3 := 3;
SIGNAL CONTA : INTEGER RANGE 0 TO 150_000_000 := 0;

begin
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
U1: LIBRERIA_CAN_INTESC_REVA

GENERIC MAP( FREC_FPGA => 50_000_000,


FREC_CAN => 100_000,
IDENTIFICADOR => "00000001010"
)

En esta parte del programa se realiza el mapeo de los puertos de la entidades que se
incluyen en el programa top.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
PORT MAP(
CLK,
RX,
TX,
INI_TRANS,

Tecnológico Nacional de México 225


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

ERROR_RX,
CAN_DATAIN,
CAN_DATAOUT,
RTR,
M.C. JOSÉDLC,
ARMANDO LARA GONZÁLEZ
NO_RESPUESTA,
OCUPADO,
TX_FIN,
RX_FIN
);

Finalmente se tiene una máquina de estados de cuatro estados la cual realiza la


comunicación entre el nodo transmisor y el nodo receptor.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


En esta primera parte de la máquina de estado, se verifica si existe un flanco de transición
positiva en el reloj y en caso de que así sea, se verifica si la máquina de estado se encuentre en
el estado 0 se inicia la transferencia de datos y se manda la máquina al estado 1 y en caso de que
la máquina este en el estado 1 se para la transferencia de datos. Posteriormente se verifica si el
bit de fin de transmisión es 1 y en caso de ser así la máquina pasará al estado 2.

PROCESS(CLK)
BEGIN
M.C.
IF JOSÉ ARMANDO LARA
RISING_EDGE(CLK) GONZÁLEZ
THEN
IF EDO = 0 THEN
INI_TRANS <= '1';
EDO <= 1;
ELSIF EDO = 1 THEN
INI_TRANS <= '0';
IF TX_FIN = '1' THEN
EDO <= 2;
ELSE
EDO <= 1;
END IF;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
Cuando la máquina de estado se encuentra en el estado 2, se verifica si ya se termino la
recepción y en caso de ser cierto, a la salida LEDS se le asigna el valor del dato guardado en
CAN_DATAOUT que es el puerto que muestra el valor de los datos que se recibieron.
Posteriormente la máquina de estado pasará al estado 3.

ELSIF EDO = 2 THEN


IF RX_FIN = '1' THEN
LEDS_S <= CAN_DATAOUT(7 DOWNTO 0);
M.C. JOSÉ ARMANDO LARA
EDO GONZÁLEZ
<= 3;
ELSE
EDO <= 2;
END IF;

Tecnológico Nacional de México 226


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Cuando la máquina de estado se encuentra en el estado 3, se estará incrementando un


contador denominado CONTA desde cero hasta 15,000 antes de mandar la máquina de estado
al estado 0 e iniciar otra transmisión.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

ELSIF EDO = 3 THEN


CONTA <= CONTA+1;
IF CONTA = 15_000 THEN
CONTA <= 0;
EDO <= 0;
ELSE
EDO <= 3;
END IF;
END IF;
END IF;
END PROCESS; M.C. JOSÉ ARMANDO LARA GONZÁLEZ

LEDS <= LEDS_S WHEN SW = "000" ELSE


"00000"&ERROR_RX WHEN SW = "001" ELSE
"0000000"&NO_RESPUESTA;
end Behavioral;

Finalmente a la FPGA SPARTAN XC6SLX9 se le cargo un programa en VHDL el cual


M.C. JOSÉ ARMANDO
se le ha denominado NODOLARA GONZÁLEZ
ESCLAVO, y como ya se explicó anteriormente, solo por llamarle
de alguna manera ya que el BUS CAN no funciona como maestro-esclavo. A continuación en
el siguiente listado se muestra el código de dicho programa.

Primeramente se tiene la descripción de la entidad, en la cual se han definido las entradas


y salidas de la tarjeta. Se destaca la entrada RX y la salida TX para llevar a cabo la comunicación.
De igual manera se destacan las salidas SW de ocho bits para poder recibir el dato que se desea
comunicar.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
entity NODO_ESCLAVO is
PORT(
CLK : IN STD_LOGIC;
RX : IN STD_LOGIC;
TX : OUT STD_LOGIC;
SW : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
);
end NODO_ESCLAVO;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ


Posteriormente se tiene la descripción comportamental, primeramente se establece la
frecuencia del reloj de la FPGA de 50,000,000 hertz y la frecuencia de transmisión y recepción
del CAN de 100,000 hertz. De igual manera se define en esta parte del programa, el número del
identificador del nodo, siendo este el número "00000001010".

Tecnológico Nacional de México 227


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

architecture Behavioral of NODO_ESCLAVO is


COMPONENT LIBRERIA_CAN_INTESC_REVA is
GENERIC( FREC_FPGA : INTEGER := 50_000_000;
FREC_CAN : INTEGER := 100_000;
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IDENTIFICADOR:STD_LOGIC_VECTOR(10 DOWNTO 0):= "00000001010"
);

PORT( CLK : IN STD_LOGIC; --RELOJ FPGA


RX : IN STD_LOGIC; --PIN DE RECPCIÓN
TX : OUT STD_LOGIC;--PIN DE TRANSMISIÓN
INI_TRANS : IN STD_LOGIC;
ERROR_RX : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
CAN_DATAIN : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
CAN_DATAOUT : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
RTR: IN STD_LOGIC;
[Link]
DLC : IN STD_LOGIC_VECTOR(3 JOSÉ ARMANDO
0); LARA GONZÁLEZ
NO_RESPUESTA: OUT STD_LOGIC;
OCUPADO : OUT STD_LOGIC;
TX_FIN : OUT STD_LOGIC;
RX_FIN : OUT STD_LOGIC
);
end COMPONENT LIBRERIA_CAN_INTESC_REVA;

Posteriormente se describen las señales y constantes que serán empleadas en la


transmisión de los datos.
M.C. JOSÉ ARMANDO LARA GONZÁLEZ

CONSTANT DLC : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0001";


SIGNAL INI_TRANS : STD_LOGIC := '0';
SIGNAL ERROR_RX : STD_LOGIC_VECTOR(2 DOWNTO 0) := (OTHERS => '0');
SIGNAL CAN_DATAIN : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0');
SIGNAL CAN_DATAOUT : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0');
SIGNAL RTR : STD_LOGIC := '0';
SIGNAL NO_RESPUESTA: STD_LOGIC := '0';
SIGNAL TX_FIN : STD_LOGIC := '0';
SIGNAL RX_FIN : STD_LOGIC := '0';
SIGNAL OCUPADO : STD_LOGIC := M.C.
'0';JOSÉ ARMANDO LARA GONZÁLEZ
SIGNAL LEDS_S : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
SIGNAL EDO : INTEGER RANGE 0 TO 3 := 0;
SIGNAL CONTA : INTEGER RANGE 0 TO 50_000_000 := 0;

begin

U1: LIBRERIA_CAN_INTESC_REVA

GENERIC MAP( FREC_FPGA => 50_000_000,


FREC_CAN => 100_000,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
IDENTIFICADOR => "00000001010"
)

Tecnológico Nacional de México 228


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

En esta parte del programa se realiza el mapeo de los puertos de la entidades que se
incluyen en el programa top.
PORT MAP(
M.C. JOSÉCLK,
ARMANDO LARA GONZÁLEZ
RX,
TX,
INI_TRANS,
ERROR_RX,
CAN_DATAIN,
CAN_DATAOUT,
RTR,
DLC,
NO_RESPUESTA,
OCUPADO,
TX_FIN,
RX_FIN M.C. JOSÉ ARMANDO LARA GONZÁLEZ
);

Para terminar con el programa se tiene la máquina de estado, donde primeramente se


verifica si existe un flanco de transición positiva en el reloj y en caso de que así sea, se verifica
si la máquina de estado se encuentre en el estado 0, de ser así se verifica si se ha terminado la
recepción y se manda la máquina al estado 1.
PROCESS(CLK)
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
BEGIN
IF RISING_EDGE(CLK) THEN
IF EDO = 0 THEN
IF RX_FIN = '1' THEN
EDO <= 1;
ELSE
EDO <= 0;
END IF;

Cuando la máquina de estado se encuentra en el estado 1, se incrementa un contador


M.C. JOSÉ ARMANDO LARA GONZÁLEZ
denominado conta hasta que alcance un valor de 50,000,000 y posteriormente se resetea dicho
contador para iniciar la transferencia y asignar al registro CAN_DATAIN el valor de los
switches que será leído. Posteriormente la máquina de estado se manda al estado 2, en caso
contrario la máquina de estado permanece en el estado 1.
ELSIF EDO = 1 THEN
conta <= conta+1;
if conta = 50_000_000 then
conta <= 0;
INI_TRANS <= '1';
CAN_DATAIN(7
M.C. JOSÉ ARMANDO LARA GONZÁLEZDOWNTO 0) <= SW;
EDO <= 2;
else
edo <= 1;
end if;

Tecnológico Nacional de México 229


Instituto Tecnológico de Lázaro Cárdenas
Capítulo 5 Módulos de Interfaz en VHDL

Finalmente cuando la máquina de estado se encuentra en el estado 2 se inicia la


transmisión y posteriormente se verifica si el bit de fin de transmisión indica que se ha terminado
la transmisión para mandar la máquina de estado al estado 0, en caso contrario la máquina de
estadoM.C. JOSÉ ARMANDO
permanecerá [Link]ÁLEZ
en el estado

ELSIF EDO = 2 THEN


INI_TRANS <= '0';
IF TX_FIN = '1' THEN
EDO <= 0;
ELSE
EDO <= 2;
END IF;
END IF;
END IF; M.C. JOSÉ ARMANDO LARA GONZÁLEZ
END PROCESS;
leds <= error_rx;
end Behavioral;

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 230


Instituto Tecnológico de Lázaro Cárdenas
Referencias

Bibliografía

Morris Mano M. (2005) Fundamentos de Diseño Lógico y de Computadoras, Tercera edición, Pearson,
M.C. JOSÉ ARMANDO LARA GONZÁLEZ
México.

Tocci R. J. (2007), Sistemas digitales Principios y Aplicaciones, 10ª edición, Pearson, México.

Marcovitz, A. B. (2005). Diseño Digital, Segunda Edición. Mc Graw Hill.

Wakerly, J. F. (2002), Diseño Digital Principios y Aplicaciones, segunda edición, Pearson, México.

Maxinez, D. G. (2002), VHDL: El Arte de Programar Sistemas Digitales, CECSA.


M.C. JOSÉ
Pardo. F. Boluda, J. A. (2003), VHDL Lenguaje para Síntesis ARMANDO
y modelado LARA GONZÁLEZ
de Circuitos. Segunda Edición.
RA-MA, México.

Brown S. y Vranesic Z.G. (2006), Fundamentos de lógica digital con diseño VHDL, Segunda Edición, Mc
Graw Hill, México.

Ciletti, M. D. Advanced Digital Design with the Verilog HDL, Segunda edición, Ed. Prentice Hall.

Ashenden, P. J. (2008), The Designer's Guide to VHDL, Volume 3, Third Edition, Morgan Kaufmann
M.C. JOSÉ ARMANDO
Publishers, Australia. LARA GONZÁLEZ

Chu P. P. (2008), FPGA Prototyping by VHDL Examples: Xilinx Spartan-3, Primera Edición,Wiley &
Sons.

Douglas P. L, (2002), VHDL Programming by example, Cuarta Edición, McGraw Hill, USA.

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

M.C. JOSÉ ARMANDO LARA GONZÁLEZ

Tecnológico Nacional de México 231


Instituto Tecnológico de Lázaro Cárdenas

También podría gustarte