Está en la página 1de 23

Diseño de un sistema de alarma con Lógica Programable

Facultad de Ciencias Químicas e Ingeniería de la Universidad Autónoma de Baja California

1. RESUMEN Actualmente la humanidad se encuentra


sumergida en una nueva etapa evolutiva,
La información contenida en esta obra
la denominada era digital, en la que se
abarca el diseño de una alarma de 4 bits
vive rodeado de todo tipo de dispositivo
usando componentes digitales, mediante
electrónico los cuales dependen de un
el uso de un dispositivo lógico
circuito digital. Esta muy marcada la
programable (PLD) y aplicación de una
electrónica digital como el surgimiento de
maquina de estados. Se incluyen ejemplos
las nuevas tecnologías que permiten al
de una máquina de Mealy y una máquina
hombre llevar a cabo sus tareas con
de Moore. Se incluyen ejemplos de la
mayor facilidad y comodidad.
aplicación del diseño en otros circuitos
además de una descripción de la lógica
Toda esta revolución tecnológica debe
llevada a cabo.
estar a gradecida a la invención del
transistor, que fue en 1947 cuando John
Los dispositivos lógicos programables
Bardeen, Walter Brattain y William
(PLD) favorecen la integración de
Shockley descubren el efecto transistor, el
aplicaciones y desarrollos lógicos
cual permite cambios en la conductividad
mediante el empaquetamiento de
de los materiales mediante el uso de
soluciones en un circuito integrado. El
corriente eléctrica. Sumándole el álgebra
resultado es la reducción de espacio físico
booleana, es cuando surge la electrónica
dentro de la aplicación; es decir, se trata
digital.
de dispositivos fabricados y revisados que
se pueden personalizar desde el exterior
Posteriormente a la idea de crear circuitos
mediante diversas técnicas de
cada vez más pequeños y con menos
programación. El diseño se basa en
costo, surgen los dispositivos
bibliotecas y mecanismos específicos de
programables, con el fin de usar un
mapeado de funciones, mientras que su
lenguaje de programación para configurar
implementación tan sólo requiere una fase
los arreglos de compuertas en un diseño
de programación del dispositivo que se
único y confiable. En la actualidad el
suele realizar en segundos.
nivel de integración en estos circuitos con
el desarrollo de la microelectrónica ha
Se denomina máquina de estados a un
hecho posible desarrollar sistemas
modelo de comportamiento de un sistema
completos dentro de un solo circuito
con entradas y salidas, en donde las
integrado. Todas estas características es
salidas dependen no sólo de las señales de
lo que nos lleva a observar a diario
entradas actuales sino también de las
sistemas de uso industrial, militar y los de
anteriores. Una máquina de estados puede
consumo han reducido su tamaño; por
ser finito o infinito depende su aplicación,
ejemplo, los teléfonos celulares,
así mismo existen diferentes modelos que
computadoras, calculadoras, relojes,
serán vistos detalladamente.
sistemas de telecomunicaciones, etc. No
son más que aplicaciones de los circuitos
integrados.
2. INTRODUCCIÓN
Ahora bien con estas herramientas en sistemas que emplean circuitos diseñados
evolución, surge la combinación de un para una aplicación en particular.
circuito programable con una maquina de
estados, lo cual simplifica aun mas el Existen destinos arreglos de compuertas
trabajo y diseño de sistemas digitales. Por que componen a los dispositivos
ejemplo, si se requiere un sistema en el programables. Los FPGA por ejemplo
cual se deban ejecutar una secuencia de son arreglos de compuertas programables
instrucciones las cuales dependen unas de en campo y CPLD dispositivos lógicos
otras, ocupan cierto tiempo de ejecución o programables complejos. Ellos ofrecen
necesitan conteos variables, su diseño las mismas ventajas de un ASIC, sólo que
sería muy complicado usando simple a un menor costo.
álgebra booleana con arreglo de circuitos
combinacionales. Todo esto resulta Categoría Características
mucho más sencillo si se utiliza la lógica Diseño totalmente a Total libertad de
que implican las maquinas de estados la medida(full diseño, pero el
también llamados sistemas secuenciales, custom) desarrollo
cuyo fin es mostrar ciertas salidas de requiere todas
acuerdo a la secuencia que fue diseñada. las etapas de
fabricación.
La finalidad del artículo es presentar un Matrices de puertas Sólo necesita las
sistema digital y dar a conocer pre difundidas últimas etapas
conocimientos necesarios para continuar del proceso, y el
por cuenta propia en el diseño de otros diseño está
sistemas que parecieran complejos pero limitado a las
con las herramientas que se exponen se posibilidades de
logran fácilmente. Con la teoría en la estructura
conjunto, se plantea un circuito de prefabricada.
seguridad, útil para restringir el acceso a Celdas estándares Libertad de
un cuarto, bodega o automóvil. pre diseño, pero el
caracterizadas(semi desarrollo exige
custom) un proceso de
3. ASICS fabricación
El diseño y aplicación de sistemas se completo
puede lograr circuitos denominados Lógica programable Dispositivos que
ASICS, pero entra más completo sea el (FPGA, CPLD) se pueden
circuito, mayor complejidad tiene su personalizar
elaboración. En la actualidad, el diseño de desde el exterior
ASIC (circuitos integrados desarrollados mediante
para aplicaciones específicas) domina las programación.
tendencias en el desarrollo de Tabla 1.1 Tecnologías de fabricación de
aplicaciones a nivel de microelectrónica. circuitos integrados.
Este diseño presenta varias opciones de
desarrollo, como se observa en la tabla
1.1. A nivel de ASIC el desarrollo full o 4. PLD
semi custom ofrecen grandes ventajas en En la actualidad existe una gran variedad
de dispositivos lógicos programables, los
cuales se usan para remplazar circuitos densidad, respectivamente. La
SSI (pequeña escala de integración), MSI arquitectura PLD está formada por un
(mediana escala de integración) e incluso arreglo de compuertas AND y OR
circuitos VLSI (muy alta escala de conectadas a las entradas y salidas del
integración), ya que ahorran espacio y dispositivo. La finalidad de cada una de
reducen de manera significativa el ellas se describe a continuación.
número y costo de los diseños. Estos  Arreglo AND: Está formado por
dispositivos, llamados PLD (tabla1.2), se varias compuertas AND
clasifican por su arquitectura (forma interconectadas a través de
funcional en que se encuentran ordenados alambres, los cuales cuentan con
los elementos internos). un fusible en cada punto de
intersección. Para programar se
Dispositivo Descripción funde o apaga el fusible para
PROM Programmable eliminar variables sin utilizar.
Read-Only Memory:
memoria
programable de sólo
lectura.
PLA Programmable Logic
Array: arreglo lógico
programable
PAL Programmable Array
Logic: lógica de
arreglos
programables Fig 1.1 Arreglo AND
GAL Generic Logic  Arreglo OR: Está formado por un
Array: arreglo lógico conjunto de compuertas OR
genérico conectadas a un arreglo
CPLD Complex PLD: programable, el cual contiene un
dispositivo lógico fusible en cada punto de
programable intersección. Este tipo de arreglo
complejo es similar al de compuertas AND.
FPGA Field Program Gate
Array: arreglos de
compuertas
programables en
campo
Tabla 1.2 Dispositivos lógicos
programables.

4.1 Estructura interna de un PLD


Los dispositivos PLD están formados por
arreglos o matrices que pueden ser fijos o
programables, se encuentran Fig 1.2 Arreglo OR
estructurados mediante bloques lógicos Este es el principio básico para los
configurables y celdas lógicas de alta circuitos PLD, a continuación se presenta
en detalle la arquitectura del dispositivo a  90mA de consumo de corriente
utilizar, el GAL. Por su bajo costo,  Rapidez de borrado 100ms
pequeño tamaño y adaptarse al trabajo  20 años de retención de los datos
realizado, se utilizó dicho circuito.  10 macroceldas lógicas de salida
(OLMC)
 Temperatura de operación 0 a
4.2 GAL 75ºC
Este circuito cuenta con 22 líneas de
Arreglo lógico genérico (GAL) se forma
entrada y sus complementos, lo que da un
con arreglos AND programable y OR fijo,
total de 44 líneas de entrada a cada
con una salida lógica programable. Este
compuerta AND (estas entradas se
dispositivo es reprogramable y contiene
encuentran representadas por las líneas
configuraciones de salida programables.
verticales en el diagrama).
Los dispositivos GAL se pueden
programar una y ora vez ya que usan la
El gal tiene la siguiente configuración en
tecnología 𝐸 2 𝐶𝑀𝑂𝑆 (borrable
sus terminales.
eléctricamente CMOS) (Fig 1.1).
 Pin 1. Entrada de CLK o puede
ser Entrada
 Pin 2 a 11 entradas fijas
 Pin 12 gnd y 24 vcc
 Pin 14 a 23 terminales
programables OLMC
 Pin 13 entrada de control
Fig 2.1 Diagrama de bloques del arreglo
GAL.

De acuerdo al número de macro celdas


lógicas contenidas en el gal se le atribuye
a su nombre, por ejemplo el GAL22v8
tiene 8 macro celdas lógicas. Para nuestro
diseño usaremos un GAL22v10, el cual
contiene 10 OLMC (macro celdas de
lógicas de salida). Para efectos didácticos
se enlistan las especificaciones más
relevantes del circuito.
Fig 2.2 CI de un GAL 22v10
 Fabricante: Lattice Semiconductor
Corporation La intersección que forman las líneas de
 4 ns máximo de retraso en entrada con los términos producto (líneas
propagación horizontales), representa cada una de las
 Fmax = 250 MHz celdas que se pueden programar para
 3.5 ns máximo tiempo de conectar una variable de entrada a una
propagación de la entrada de reloj línea de término producto (fig 2.3).
al dato de salida
 Voltaje de entrada soportado entre
3.5V y 6V
se determina por medio de S1. Cada una
de las líneas de selección se programa
mediante un grupo de celdas especiales
que se encuentran en el arreglo AND.

5. CAPTURA ESQUEMÁTICA

Fig 2.3 Realización de una suma de Ahora corresponde el turno de la


productos dentro de un GAL. programación del dispositivo, como se
menciono la finalidad de usar el GAL es
Macroceldas lógicas de salida. Una programar un circuito que nos simplifique
macrocelda lógica de salida (OLMC) está y permita cumplir con el objetivo del
formada por circuitos lógicos que se sistema. En primera opción tenemos
pueden programar como lógica hacer uso de la captura esquemática, el
combinacional o secuencial. Las que consiste en crear el circuito en modo
configuraciones combinacionales se gráfico para después grabarse en el GAL.
implementan por medio de programación,
mientras que en las secuenciales la salida Los programas de captura esquemática
resulta de un flip-flop. En la figura 2.4 se son aplicaciones creadas para armar
observa la arquitectura de una macrocelda circuitos electrónicos y exportar los
del dispositivo GAL22v10, la cual está esquemas como archivos fuente, los
formada por un flip-flop y dos cuales satisfacen en la sintaxis de algún
multiplexores. núcleo de simulación, en este caso será
para el GAL22v10.

Para poder hacer uso de esta


programación se debe conocer
completamente los operadores lógicos
AND, OR, Nand, Nor, Exor, etc., conocer
las características del 22v10 y saber
identificar las terminales de un circuito
integrado a partir del archivo pin out.

Un ejemplo para este tipo de


Fig 2.4 Arquitectura de una macrocelda
programación, se tiene el “Schematic”, el
OLMC 22v10.
cual esta descrito a continuación:
El área punteada está formada por 2
multiplexores y un flip-flop; el
multiplexor 1 de 4 conecta una de sus
cuatro líneas de entrada al buffer triestado
de salida, en función de las líneas de
selección S0 y S1. Por otro lado, el
multiplexor de 1 de 2 conecta por medio
del buffer la salida del flip-flop o la salida
del buffer triestado al arreglo AND; esto
La desventaja surge en los diseños
grandes, los cuales son difíciles de
comprender a causa de que hay
demasiados componentes e
interconexiones.

6. LENGUAJES DE DESCRIPCIÓN
DE HARDWARE

Como se apreció en el método anterior de


Fig 3.1 Hoja de trabajo Schematic programación, no soluciona mucho el
problema de la complejidad a la hora de
Los cuatro componentes básicos de la implementar un circuito ya que se emplea
captua esquemática son los símbolos, los el álgebra booleana en esencia. Lo que
conectores, las etiquetas y los puertos de nos trae a la siguiente etapa los HLD
entrada y/o salida: (lenguajes de descripción de hardware)
 Los símbolos son una cuyo objetivo es simplificar el trabajo aun
representación gráfica de los más y realizar tareas con mayor
componentes complejidad.

Como consecuencia de la creciente


necesidad de integrar un mayor número
 Los conectores sirven para la de dispositivos en un solo circuito
interconexión entre terminales integrado, se desarrollaron nuevas
herramientas de diseño en un solo circuito
integrado, se desarrollaron nuevas
herramientas que auxilian al ingeniero a
 Las etiquetas variables para la integrar sistemas muy completos. Esto
identificación de entrada o salida permitió que en la década de los 50
aparecieran los HDL como una opción de
 Los puertos definen un puerto diseño para el desarrollo de sistemas
entrada, salida o bidireccional. electrónicos elaborados. Por poseer una
sintaxis parecida a la de un lenguaje de
alto nivel, éste tipo de descripción es muy
aceptado por diseñadores.

Los HDL más utilizados son:


El proceso de grabado resulta sencillo una
 ABEL, Advanced Boolean
vez construido el diagrama, simplemente
Expression Language.
se genera un archivo SCH,
 VHDL, Very High Hardware
posteriormente un linker (enlazador) para
Description Language
generar un archivo .jed, el cual se le
 VERILOG
pasará al programador que se encargara
de configurar el gal a lo capturado
anteriormente.
Una de las principales características de tecnológicos requeridos. El departamento
estos lenguajes radica en su capacidad de la defensa de Estados Unidos creó el
para describir en distintos niveles de lenguaje VHDL; luego de varias
abstracción (funcional, transferencia de versiones revisadas, el IEEE(Instituto de
registros y lógico o nivel de compuertas). Ingenieros Electrónicos y Eléctricos)
Dichos niveles sirven para clasificar publicó en diciembre de 1987 el estándar
modelos HDL según el grado de detalle y IEEEstd.
precisión de sus descripciones.
7.1 Ventajas del desarrollo de circuitos
Los niveles de abstracción descritos desde integrados con VHDL
el punto de vista de simulación y síntesis A continuación se exponen las ventajas
del circuito pueden definirse como sigue: de usar VHDL en un circuito integrado:
 Algorítmico: Se refiere a la  Notación formal. Los circuitos
relación funcional entre las permite su uso en cualquier diseño
entradas y salidas del circuito o electrónico.
sistema, sin hacer referencia a la  Disponibilidad pública. Es un
realización final. estándar no sometido a patente,
 Transferencia de registros (RT): por lo que cualquiera puede
Consiste en la participación del utilizarla sin restricciones.
sistema en bloques funcionales sin  Independencia tecnológica de
considerar a detalle la realización diseño. Se diseñó para soportar
final de cada bloque. diversas tecnologías. (PLD,
 Lógico o de compuertas: El FPGA, ASIC, etc.).
circuito se expresa en términos de  Independencia de la tecnología
ecuaciones lógicas o de y proceso de fabricación. Se creó
compuertas. para que fuera independiente de la
tecnología y el proceso de
Debido a una similitud con el lenguaje de fabricación del circuito.
programación visual basic y algunos  Capacidad descriptiva en
otros, se optó por VHDL, el cual nos distintos niveles de abstracción.
proporciona una alta confiabilidad y se Consta con varios niveles de
notará que su uso no requiere de muchos detalla, desde la especificación
conocimientos nuevos ni conceptos hasta la implementación; se
difíciles. pueden combinar a lo que se le
conoce simulación multinivel.
 Uso como formato de
7. VHDL intercambio de información.
Permite el intercambio de
información a o largo de todas las
En la actualidad, el lenguaje de
etapas del proceso.
descripción en hardware más utilizado a
 Independencia de los
nivel industrial es VHDL, que apareció la
proveedores. Permite que las
década de los ochenta como un lenguaje
descripciones sean accesibles
estándar, capaz de soportar el proceso de
desde cualquier lugar.
diseño de sistemas electrónicos
 Reutilización del código. Permite
complejos, con propiedades para reducir
reutilizar los códigos en diversos
el tiempo de diseño y los recursos
diseños, sin importar si es
(CMOS, bipolar, etc.) o
implementado en (FPGA, ASIC,  Modo in. Se refiere a las señales
etc.). de entrada a la entidad.
 Facilitación de la participación  Modo out. Indica las señales de
en proyectos internacionales. salida de la entidad.
 Modo inout. Permite declarar a un
7.2 Unidades básicas de diseño puerto de forma bidireccional.
La estructura general de un programa en  Modo buffer. Permite hacer
VHDL está formada por módulos o retroalimentación internas dentro
unidades de diseño, cada uno de ellos de la entidad.
compuestos por un conjunto de
declaraciones e instrucciones que definen,
describen, estructuran, analizan y evalúan
el comportamiento de un sistema digital.

Existen cinco tipos de unidades de


diseño:
 Declaración de entidad (entity
declaration). Es un bloque
elemental de diseño, son todos los Fig 5.1 Modos y el curso de sus señales.
elementos electrónicos
(sumadores, contadores,
compuertas, flip-flop, memorias, 7.3 Tipos de datos
mux, etc.) que forman un sistema Los tipos de valores que se pueden
digital. establecer dentro de una entidad son:
 Arquitectura (architecture)  Bit, abarcando 0 y 1
 Configuración (configuration)  Boolean, define valores verdadero
 Declaración del paquete o falso.
(package declaration)  Integer, representa un número
 Cuerpo del paquete (package entero.
body)
7.4 Declaración de entidades
En el desarrollo de programas pueden La declaración de una entidad consiste en
utilizarse o no tres de los cinco módulos, la descripción de las entradas y salidas de
pero entidad y arquitectura son un circuito de diseño identificado como
indispensables. Las declaraciones de entity; es decir, la declaración señala las
entidad son de diseño primarias, mientras terminales o pines de entrada y salida con
que la arquitectura y el cuerpo son de que cuenta la entidad de diseño (ver fig
diseño secundarias porque dependen de 5.2).
una entidad.

Modos
Como ya se mencionó, uno puede definir
la dirección en el cual el dato es
transferido a través de un puerto. Un
modo puede tener uno de cuato valores:
vectores de bits. Tome el siguiente
ejmplo.

Vector_A = [A3,A2,A1,A0]
Vector_B = [B3,B2,B1,B0]
Vector_SUMA = [S3,S2,S1,S0]

Como ahora las entradas A,B y salida


SUMA incorporan un vector, la entidad
cambia de la siguiente forma.
Fig 5.2 Declaración de la entidad
sumador
Como cualquier lenguaje, éste tiene una
regla para los identificadores, la cual es
simple de deducir teniendo la siguiente
tabla.

Regla Incorrecto Correcto


El primer 4suma Suma4
carácter SUMA4 Fig 5.3 Declaración de vectores en una
siempre es entidad
una letra
Como se observa se esta utilizando la
mayúscula o
minúscula sentencia bit_vector especificando que
El segundo S_4bits S4_bits será un arreglo de bits con 3 down 0
carácter no agrupa en orden descendente dicho
puede ser vector.
guión bajo
Dos guiones Resta__4 Resta_4_ 7.6 Declaración de entidades mediante
juntos no son librerías y paquetes
permitidos Una parte importante radica en el uso de
Un Clear#8 Clear_8 librerías y paquetes que permiten declarar
identificador y almacenar estructuras lógicas,
no puede seleccionadas o completas que facilitan el
utilizar diseño. En VHDL se encuentran definidas
símbolos dos librerías ieee y work(fig 5.4). Para
Tabla 5.1 Especificaciones para la declarar la librería hay que usar library
escritura de identificadores. ieee;

7.5 Diseño de entidades mediante


vectores
La entidad sumador realizada usa bits
individuales, pero que pasaría si se
utilizan conjuntos de bits (palabras). Pues
en VHDL se pueden agrupar como
Fig 5.4 Contenido de las librerías importantes para el diseño del circuito
presentado en este texto:
El paquete std_logic_1164 que se  Descripción funcional:
encuentra en la librería ieee contiene Una sencilla forma de apreciar éste estilo,
todos los tipos de datos que suelen es mediante el diseño de un comparador
emplearse en VHDL. El acceso a la de entradas de 2 bits, se realiza una
información en un paquete es por medio descripción que relacionan las entradas
de la sentencia use, seguida del nombre con las salidas del circuito sin importar
de la liberia y paquete. cómo esté organizado en su interior.

use nombre_librería.nombre_paquete.all; si a = b then c = 1


si a <> b then c = 0
Ahora una forma de la declaración de una
entidad haciendo uso de la librería Ahora el código que representa el
descrita anteriormente (fig 5.5): circuito:

1. --Ejemplo de una descripción


funcional
2. library ieee;
3. use ieee.std_logic_1164.all;
4. entity comp is
5. port (a,b: in bit_vector (1 downto 0
);
6. c: out bit);
Fig 5.5 Entidad usando librería std_logic
7. architecture funcional of comp is

7.7 Arquitectura 8. begin


Una arquitectura (architecture) se define 9. compara: process(a,b)
como la estructura que describe el 10. begin
funcionamiento de una entidad, de tal 11. if a = b then
forma que permita el desarrollo de los 12. c <= '1';
procedimientos que se llevarán a cabo
13. else
con el fin de que la entidad cumpla las
14. c <= '0';
condiciones de funcionamiento deseadas.
Aquí es donde radica la gran ventaja de 15. end if;
VHDL ya que se describen los diseños 16. end process compara;
mediante un algoritmo de programación, 17. end funcional;
este punto será abordado detalladamente
para la descripción del motor principal En la primera sección del código consta
que hace posible la construcción del en la declaración de la entdidad, aquí no
circuito de alarma. hay problema. Posteriormente se describe
la arquitectura (línea 7-17) en la cual se
Se describirá brevemente los estilos de
programación utilizados en el diseño de observa como se declara asignándole
arquitecturas, enfocándose en los nombre e indicando que incluye la
entidad comp se le indica que ha
terminado la arquitectura con la palabra 10. c <= '1' when (a = b) else '0';
reservada end nombrearquitectura. Ahora 11. end f_datos;
prestar atención al uso de la palabra
process con la que se indicara que señales Como es notable, la diferencia radica en
se involucrarán en el proceso. Al seguir el la eliminación del proceso y se hace sin
declaraciones if-then-else.
análisis puede notarse las sentencias if-
El estilo de diseño utilizado en la
then-else. Interpretando esto en el código programación del circuito depende del
dice, si la señal a es igual a la señal b diseñador y de la complejidad del
entonces c cambia a 1 (mediante el proyecto. Por ejemplo, si un sistema se
símbolo <= que indica asignación). Una requiere diseñar cuyo funcionamiento
vez definido el proceso, se termina con dependa sólo de sus entradas y salidas, es
end process nombreproceso. Con ello se conveniente utilizar la descripción
funcional, la cual presenta la ventaja de
parecía que la descripción funcional se
requerir menos instrucciones y el
basa en el uso de procesos y diseñador no necesita un conocimiento
declaraciones secuenciales, lo que previo de cada componente del circuito.
permiten modelar la función con rapidez.
8. SISTEMAS SECUENCIALES
 Estilo por flujo de datos:
En este estilo, se indica la forma en que
los datos se pueden transferir de una señal Con las bases establecidas previamente,
a otra sin necesidad de declaraciones hemos llegado a la descripción de un
secuenciales (if-then-else). Este tipo de sistema secuencial que bien está formado
descripciones permite definir el flujo que por un circuito combinacional y un
tomarán los datos entre módulos elemento de memoria encargado de
encargados de realizar operaciones. Se almacenar de forma temporal la historia
describe a continuación mediante del sistema. En esencia, la salida de un
instrucciones when-else. Para entenderlo sistema secuencial depende de las
mejor se coloca como queda el código entradas y de la historia del sistema (fig
siguiendo dicho estilo para hacer el 6.1).
comparador de 2 señales descritos en la
descripción anterior.

1. --Ejemplo descripción por flujo


mediante when-else
2. library ieee;
3. use ieee.std_logic_1164.all;
Fig 6.1 Estructura de un sistema
4. entity comp is
secuencial
5. port (a,b: in bit_vector (1 downto 0
); Básicamente hay dos tipos de sistemas
6. c: out bit); secuenciales: síncronos y asíncronos; el
7. end comp; comportamiento de los primeros se
8. architecture f_datos of comp is encuentra sincronizado mediante el pulso
de reloj, mientras que el otro depende del
9. begin
orden y momento en el cual se aplican su con un contador de 4 bits (fig 6.3).
señales de entrada, por lo que no
requieren un pulso de reloj para
sincronizar sus acciones. Cabe mencionar
que en el artículo solamente se estudiará
los sistemas síncronos puesto que se
requiere de un evento arrojado al
momento de presionar una tecla y con el
sincronizar el circuito.

8.1 Flip-flops
El elemento de memoria utilizado Fig 6.3 Diagrama de tiempos contador
indistintamente del tipo de sistema binario 4 bits
secuencial se conoce como flip-flop, cuya
característica es mantener un bit de La presentación del diagrama de tiempos
manera indefinida hasta que a través de de este circuito tiene la finalidad de
una señal cambie de estado. Los más ilustrar el procedimiento que se sigue en
conocidos son SR, JK, T(fig 6.2) y D. la programación, ya que puede observarse
con claridad el incremento que presentan
las salidas cuando se aplica un pulso de
reloj en la entrada.

Traduciendo el contador a lenguaje


VHDL

1. library ieee;
2. use ieee.std_logic_1164.all;
Fig 6.2 Tabla de verdad flip-flop T
3. use work.std_arith.all;

En la figura anterior cabe destacar que Q 4. entity cont4 is port(

= estado actual y 𝑄𝑡+1 = estado futuro 5. clk: in std_logic;


6. Q: inout std_logic_vector(3
8.2 Contadores downto 0));
Los contadores son entidades muy 7. end cont4
utilizadas en el diseño lógico. La forma 8. architecture arqcont of cont4 is
usual para escribirlos en VHDL es
9. begin
mediante operaciones de incremento,
decremento o ambas. Para un ejemplo 10. process(clk)

rápido y fácil de entender trabajaremos 11. begin


12. if(clk'event and clk
= '1') then
13. Q <= Q + 1;
14. end if;
15. end process;
16. end arqcont;
Se aprecia se esta usando de la librería sólo cuando ocurre un cambio de valor; es
ieee, el paquete work.std_arith.all esto decir, un suceso de la señal clk. Como se
nos permite poder usar números el aprecia la declaración if-then no maneja
operador +, para indicarle un incremento la condición else, debido a que el
de 1 al nuestro contador. compilador mantiene el valor de Q hasta
Cuando requerimos la que no exista un cambio de valor en la
retroalimentación de una señal Q<= Q + señal clk.
1, utilizamos el modo inout la cual se
aprecia en la declaración de la variable Q,
9. SISTEMAS SECUENCIALES
ya que se retroalimenta en cada pulso de
SÍNCRONOS
reloj.
Atributo ‘event. En VHDL los atributos
definen características que se asocian con Llego la hora de presentar los sistemas
cualquier tipo de datos o entidades. El secuenciales de tipo síncrono, se vera
atributo ‘event se utiliza para describir un enfocado hacia las maquinas de estado ya
hecho u ocurrencia de una señal en que aquí es donde recae todo el análisis y
particular. Con ello podemos observar diseño del circuito alarma presentado al
que en la condición if clk’event es cierta final.

Como ya se mencionó, la estructura de


los sistemas secuenciales síncronos basa
su funcionamiento en los elementos de
memoria conocidos como flip-flop. La
palabra síncrona se refiere a que cada uno
de estos elementos de memoria que
interactúan en un sistema se encuentran
conectados a la misma señal de reloj, de
forma tal que sólo se producirá un cambio
de estado en el sistema cuando ocurra un
flanco de disparo o un pulso en la señal
de reloj. Arquitectura secuencial tipo
Mealy
Existe una división en el diseño de los
sistemas secuenciales que se refiere al  Moore. La señal de salida sólo
momento en que se producirá la salida del depende del estado en que se
sistema. Son las maquinas de estado tipo: encuentra.
 Mealy. Las señales de salida
dependen tanto del estado en que
se encuentra el sistema, como de
la entrada que se aplica en
determinado momento.
Fig 7.1 Detector de secuencia

9.1 Diagramas de estado


Arquitectura secuencial tipo El uso de diagramas de estados en lógica
Moore programable facilita de manera
significativa la descripción de un diseño
secuencial, ya que no es necesario seguir
Observando la simple diferencia entre la metodología tradicional de diseño.
ambos diseños en un sistema secuencial, VHDL nos permite utilizar un modelo
se describirán 2 diseños de maquinas de funcional que indique la transición que
siguen los estados y condiciones que
estados para el sistema de alambra, donde controlarán el proceso. Aplicando un
lo único que se requiere cambiar es el poco de lógica, vemos que el sistema se
programa del GAL22v10, el alambrado y puede presentar por medio del diagrama
número de pines quedara definido de de estados (fig 7.2) arquitectura Mealy. Y
igual forma. A continuación se describe lo que advierte es que el sistema cuenta
de manera general como es el análisis y con una señal de entrada denominada X y
una de salida Z, las cuales determinan el
diseño para un problema que requiera un
estado presente y próximo que seguirá la
circuito secuencial programado en maquina de estados.
VHDL.

Un sistema secuencial se desarrolla a


través de una serie de pasos generalizados
que comprenden el enunciado del
problema, diagrama de estados, tabla de
estados, asignación de estados,
ecuaciones de entrada a los elementos de
memoria y diagrama electrónico del
circuito. Como ejemplo se plantea un
sistema (fig 7.1) en el cual se emite un
pulso de salida (Z=1) cuando la línea de
entrada X se reciben cuatro unos en forma
consecutiva; en caso contrario (Z=0).
Fig 7.2 Diagrama de estados

Cuando se está en el estado d0 y la señal


X es 1, se avanza al siguiente estado, y al
llegar al tercer estado siendo X=1 en la del proceso que definirá el
salida Z se coloca 1, en caso contrario se comportamiento del sistema. En éste debe
quedará en el estado actual para X=0. Un considerarse edo_futuro depende de
análisis usando la tabla de estados se edo_presente y la entrada X. El código
percata rápidamente de como quedara el quedaría así.
programa en VHDL.
Edo. Edo. Futuro Salida Z 1. proceso1: process(edo_presente,
Presente X=0 X=1 X=0 X=1 X) begin
d0 d0 d1 0 0 2. case edo_presente is
d1 d1 d2 0 1 3. when d0 => Z<='0';
d2 d2 d3 0 1 4. if X='1' then
d3 d3 d0 0 1
5. edo_futuro <=d1;
6. else
Ahora si, codificar se facilita mediante
7. edo_futuro <= d0;
una descripción de alto nivel en VHDL.
Esta descripción supone el uso de las 8. end if;
declaraciones case-when las cuales
determinan, en un caso particular, el valor Dentro del proceso se describe la
que tomará el siguiente estado. Por otro transición del edo_presente al edo_futuro.
lado, la transición entre estados se realiza Primero se inicia con la declaración case
por medio de declaraciones if-then-else, que especifica el primer estado que se va
de tal forma que éstas se encargan de
a evaluar, posteriormente con la sentencia
establecer la lógica que seguirá el
programa para realizar la asignación del if se compara la señal de entrada X la cual
estado. indica cual será el edo_futuro. A
continuación se muestra el código
Introducción del diseño al código. completo.
Como primer paso en el diseño, se
consideraron los estados d0,d1,d2 y d3. 1. library ieee;
Para representarlos en VHDL, hay que 2. use ieee.std_logic_1164.all;
definirlos dentro de un tipo de datos
3. entity diagram is port(
mediante el uso de la sentencia type.
4. clk,x: in std_logic;
5. z: out std_logic);
1. type estadis is (d0,d1,d2,d3);
6. end diagrama;
2. signal edo_presente,
7. architecture arq_diagrama of diagram
edo_futuro: estados;
a is
Obsere la forma en la que se listan los 8. type estados is (d0,d1,d2,d3);
estados, posteriormente con la sentencia 9. signal edo_presente,
signal declaramos donde se guardara el edo_futuro: estados;
estado en el que se encuentra la maquina, 10. begin
es decir por que camino se dirige. Para
11. proceso1: process(edo_presente,x) be
ello necesitamos una signal que
gin
represente el estado presente y otra que
represente el estado futuro o próximo. El 12. case edo_presente is
siguiente paso consiste en la declaración 13. when d0 => z<= '0';
14. if x='1' then dicha transición. En el segundo, proceso2
15. edo_futuro <=d1;
se lleva a cabo de manera síncrona la
asignación del estado futuro al estado
16. else
presente, de suerte que cuando se aplica
17. edo_futuro <=d0;
un pulso de reloj, el proceso se ejecuta.
18. end if; Se muestra lo forma de programar la
19. when d1 => z<='0'; salida Z en el estado d3 cuando éste
20. if x='1' then obtiene el valor de 0 o 1, según el valor
21. edo_futuro <= d2; de la entrada X.
22. else
Con la explicación detallada de cada
23. edo_futuro <=d1;
segmento de información, se da por hecho
24. end if;
que se encuentra listo el lector para
25. when d2 => z<= '0'; comprender con una muy breve
26. if x='1' then explicación la composición y estructura
27. edo_futuro <= d3; del circuito de alarma.
28. else
29. edo_futuro <=d0;
30. end if;
31. when d3 =>
10. SISTEMA DE ALARMA DE 4
32. if x='1' then
DÍGITOS
33. edo_futuro <= d0;
Se necesita de un sistema digital para
34. z<='1'; controlar accesos a un compartimiento o
35. else cuarto, la idea es pedirle a la persona que
36. edo_futuro <=d3; solicite el acceso, una cifra que consta de
37. z <= '0'; 4 dígitos la cual se compara con una
38. end if; predefinida por quien regula la entrada a
39. end case;
dicho lugar; de resultar correcta la cifra
deberá abrirse la puerta o
40. end process proceso1;
compartimiento, de ser incorrecto
41.
simplemente permanecerá cerrado. En
42. proceso2: process(clk) begin respuesta a esta situación, se plantea un
43. if(clk'event and clk='1') then sistema el cual permite grabar un numero
44. edo_presente <= edo_futuro; de 4 cifras, para establecer la clave de
45. end if; acceso, posteriormente colocarla en modo
46. end process proceso2;
de operación para que trabaje como le es
requerido.
47. end arq_diagrama;

El primer paso es definir que circuitos se


Hay que notar que en cada estado debe
necesitan, para lograr esta tarea.
indicarse el valor de la salida (Z<=0)
Primeramente nos enfocaremos en la
después de la condición when, siempre y
captura de datos, cada cifra consta de un
cuando la variable Z no cambie de valor.
valor de 0 al 9 en decimal, por lo que
En el primer proceso1, se describe la
implica que se trabajará con cuatro bits en
transición que sufren los estados y las
binario para cada dígito presionado. Esto
condiciones necesarias que determinan
implica la necesidad de utilizar un teclado
matricial y un decodificador.
Posteriormente queda la parte de la
memoria, aquí puede quedar a decisión
del diseñador, ya que se pueden utilizar
diferentes tipos; para el diseño se utilizará
una memoria RAM de 4 bits de la cual se
ocuparan únicamente 4 localidades de
memoria, cada localidad representa 1
cifra de la clave de acceso. Y por último
queda un circuito el cual acceda a los
datos en la memoria, los compare con los
capturados del teclado, los compare y
mande una señal para indicar que se dio
permiso de acceso. Suena difícil lo que se
describió, pero en realidad es muy Fig 8.2 Introducción de datos y
sencillo conseguirlo, aplicando el almacenamiento
conocimiento adquirido anteriormente.
U2 es el circuito integrado 74c922 que se
encarga de decodificar la tecla presionada
a un número de 4 bits, se colocaron 2
capacitores (véase hoja de
especificación). U1 es la memoria RAM
circuito integrado 74189(donde las
salidas salen en forma negada), nótese
que tiene un switch en el pin de escritura,
esto para elegir se el numero será escrito
Fig 8.1 Esquema a bloques de como se o leído en la memoria.
plantea el sistema.
Con este avance conectado, el resto es
La conexión de la sección introducción de sencillo, puesto que del resto del
datos y memoria es muy simple, funcionamiento se encargara un
constamos con un teclado matricial que GAL22v10. A éste circuito le
va a un decodificador, tomamos los 4 bits conectaremos las salidas de U1 y las
de salida y se dirigen a la memoria, salidas de U2, luego saldrán 4 bits de
también son tomadas las salidas en el dirección hacia la memoria RAM, para
circuito de control, y las salidas de la acceder a las distintas localidades como
RAM, son tomadas al circuito de control. se comento anteriormente, y el ultimo pin
Cuando se apruebe el código, mediante el se conectará a un led para saber cuando
cable “permiso de acceso” se mandara un fue concedido el permiso (enciende led).
1 lógico para indicar que se proceda a El bosquejo final a bloques nos queda de
abrir. Véase la figura 8.2 para verificar la siguiente forma.
como es la conexión de la primera etapa.
Fig 8.3 Diagrama a bloques del bosquejo final del circuito

El led enciende siempre y cuando los 4 Para atender el asunto de las direcciones y
dígitos insertados sean iguales a los estado final, se tienen planteados 2
almacenados en la memoria. diseños que se conectan de igual forma en
Ahora la parte que resultaría compleja el mismo numero de pines, pero con
sino contáramos con un PLD. Como la distinta lógica, aquí solo se describirá en
descripción dice que el GAL debe que consiste uno de ellos, el segundo
comparar las salidas de 2 circuitos lo cual diseño podrá ser consultado en un link
serían entradas para el GAL, y en cada externo que se coloca al final del
acierto cambiar de transición o estado documento, el cual solo requiere análisis
para que al llegar a la meta final se de por del código mientras que el alambrado
encendido el led. Además debe genera sigue intacto.
direcciones para saltar entre localidades.
De acuerdo con el análisis requerimos de Generar direcciones para localidades
una maquina tipo Mealy, ya que la salida de memoria
(LED) dependerá de las entradas (A y B). Se plantea utilizar un contador de 4 bits,
Otro punto a destacar es la salida que inicia en 00, el cual su programación
(direcciones) las cuales deberán cambiar y secuencia no es nada nuevo. Con ello
cada que se presiona una tecla, un detalle cada que hay un flanco de subida en el
que se tiene sin cuidado, puesto a que se clock del GAL, cambie de dirección y
trabajara con un sistema síncrono en asegurarse que se guardan o comparan
donde el Ouput Enable del teclado siempre los dígitos siguientes de la clave
actuará como pulso de reloj. de acceso. Independientemente del estado
en que se encuentre el sistema, seguirá
generando direcciones (contando). (ver
figura 8.4)
Diagrama maquina de estados cualquiera de los 4, se debe regresar al
Ahora la descripción de la secuencia. estado inicial puesto que ya no esta
Tenemos que un usuario introduce 4 permitido acceder al sistema. En caso de
números, en cada número se hace una acertar los 4 dígitos, se tiene que pasar de
comparación si lo presionado es igual a la 0 a 1 la salida (LED) que indica permitir
salida de memoria, de ser así pasar a un acceso. Para visualizar esta descripción
siguiente estado, si se equivoca en (ver figura 8.4).

Ahora vallamos a la descripción del


código que hace posible funcionar este
mecanismo.

1. library ieee;
2. use ieee.std_logic_1164.all;
3. use ieee.std_logic_arith.all;
4. use work.std_arith.all;
5. entity alarm is port (
6. clk: in std_logic;
7. a: in std_logic_vector(3 dow
nto 0);
8. b: in std_logic_vector(3 dow
nto 0);
9. ledOn: out std_logic;
Fig 8.4 Maquina de estados
10. x: inout std_logic_vector(1
downto 0));
Observe que el camino rojo se toma
siempre y cuando A y B sean iguales, en 11. attribute pin_numbers of alarm: ent
caso contrario se regresa al estado inicial ity is
para así asegurarse de no dar acceso. Para 12. --inputs
el último estado si no coinciden las 13. "b(0):6 b(1):5 b(2):4 b(3):3 "
entradas, el led no enciente, pero si son 14. &
iguales como se llego al último estado,
15. "a(0):10 a(1):9 a(2):8 a(3):7 "
proceden a encenderse.
16. --outputs

Tabla de estados 17. &

Estado Estado futuro Salida (LED) 18. "x(0):15 x(1):16 "


presente A=B A!=B A=B A!=B 19. &

S0 S1 S0 0 0 20. "ledOn:17";
S1 S2 S0 0 0 21. end alarm;
S2 S3 S0 0 0 22.
S3 S0 S0 1 0 23. architecture arch_alarm of alarm is
24. type states is (state0,
state1, state2, state3 );
25. signal stado_pres,
stado_fut: states;
26. begin 56. p_reloj: process(clk,x) begin

27. 57. if(clk'event and clk= '1') then

28. p_estados: process(stado_pres,a,b) b 58. stado_pres <= stado_fut;

egin 59. x <= x + 1;

29. case stado_pres is 60. end if;

30. when state0 => 61. end process p_reloj;

31. ledOn <= '0'; 62. end arch_alarm;

32. if a = NOT(b) then


Como se puede observar es muy parecido
33. stado_fut <= state1;
al código explicado anteriormente, lo cual
34. else no hace falta detallar que se hace en cada
35. stado_fut <= state0; caso, sino únicamente destacar lo más
36. end if; importante.
37. when state1 =>
38. if a = NOT(b) then
39. stado_fut <= state2; 63. attribute pin_numbers of alarm: enti

40. else ty is

41. stado_fut <= state0; 64. --inputs

42. end if; 65. "b(0):6 b(1):5 b(2):4 b(3):3 "

43. when state2 => 66. &

44. if a = NOT(b) then 67. "a(0):10 a(1):9 a(2):8 a(3):7 "

45. stado_fut <= state3; 68. --outputs

46. else 69. &

47. stado_fut <= state0; 70. "x(0):15 x(1):16 "

48. end if; 71. &

49. when state3 => 72. "ledOn:17";

50. if a = NOT(b) then


En esta sección vamos a definir que pines
51. ledOn <= '1';
queremos que sean las entradas (A y B),
52. end if;
las salidas (LED) y las direcciones a la
53. stado_fut <= state0;
memoria, esto se definió para que si el
54. end case;
diseñador hacer modificaciones no sea
55. end process p_estados;
necesario re alambrar o restructurar el
circuito, simplemente baste con
reprogramar el GAL.
Ahora definiendo el proceso para realizar
Un vistazo a las declaraciones de los
los cambios.
estados.
73. type states is (state0, state1, 81. p_reloj: process(clk,x) begin
state2, state3 ); 82. if(clk'event and clk= '1') then
74. signal stado_pres, 83. stado_pres <= stado_fut;
stado_fut: states; 84. x <= x + 1;
85. end if;
Se definen los estados tal y como se 86. end process p_reloj;
presentaron en el diagrama (fig 8.4)
stado_pres y stado_fut, es para saber en Y como se había establecido X sería un
que transición se encuentra, según el contador que generaría las direcciones
camino que se haya seguido. para las localidades de memoria, por ello
de la línea 85. Por último cada pulso de
75. when state3 => reloj (tecla presionada), se dirige hacia el
76. if a = NOT(b) then estado siguiente. Con todo lo anterior,
77. ledOn <= '1'; solo falta revisar el archivo rpt generado
78. end if; por el compilador de vhdl, para saber
79. stado_fut <= state0; como lograr las conexiones. Con ello el
80. end case; alambrado se deja en manos del diseñador
y se espera un resultado satisfactorio. Se
Dirigiéndonos a al ultimo estado, si se recuerda al final del documento se
llego a este estado y las entradas (A y B) colocan 2 links uno para acceder al diseño
son iguales, corresponde a prender LED, alterno y otro para acceder al alambrado
luego regresarse al estado 0. Hay que completo.
recordar que las salidas de la memoria
son negadas, por ende se debe usar la
palabra not para obtener las entradas
correctas.
11. CONCLUSIONES cubre mas sistemas, lo que implica a que
se esta volviendo parte de nuestra etapa
Si se tiene conocimiento básico sobre los evolutiva.
circuitos digitales, se pudo notar la gran
ventaja que se tiene al usar dispositivos No es necesario mucho conocimiento
programables, con el beneficio de realizar previo para la compresión del documento
descripciones en alto nivel para que se o la realización del sistema expuesto,
comporten como se le es requerido. Los basta con saber las definiciones básicas
diseños que se pueden lograr con la como bit, binario, etc., además del
información expuesta pueden llegar a conocimiento de las compuertas lógicas
grandes cosas, un ejemplo es el diseño de básicas. Se espera haber sido de gran
un procesador de 4 bits, en el cual su ayuda para cualquier diseñador y que le
máxima complejidad surge al momento haya resultado grata la lectura, se recalca
de diseñar la unidad de control, sería un que la aplicación de estos conocimientos
trabajo exhaustivo usando únicamente en un sistema secuencial, va más allá de
circuitos con baja escala de integración, una alamra con comparador.
pero usando un PLD y la lógica
secuencial, resulta bastante sencillo una 12. RECURSOS EXTRA
implementación de este tipo. Se  http://robingk.imeev.com/alarm
recomienda tener siempre en cuenta estos a.png
tipos de integrados que nos pueden
 http://pastebin.com/EUVmk0qF
resolver muchos problemas con menor
costo.

Un obstáculo que pueden presenciar 13. REFERENCIAS


diseñadores principiantes, al utilizar éste
tipo de sistemas, es la simulación de Libros:
VHDL El arte de programar sistemas
ellos, puesto a que como constan de un
digitales, David G. MAxinez, Jessica
programa personalizado, se requiere
Alcalá. CECSA primera edición,2002.
indicarle a la computadora como es que
funciona. Por ello se hace recomendación Fundamentos de Sistemas Digitales - 7ma
de uso del software Proteus ISIS, el cual Edición - Thomas L. Floyd.
permite simular PLD y micro
controladores cargándoles el software de Paginas web
diseño propio.
http://digitales.itam.mx/Cursos/nuevos
Cabe destacar la importancia que toma _cursos/Circuitos%20logicos/practicas/
hoy en día los niveles de abstracción en la practicas%20nuevas/Practica%2006_
evolución de software computacional, ya %20VHDLn.pdf
que con ello se logra definir con lenguaje
http://dsid.escom.ipn.mx/julio/cursos/p
de alto nivel, la secuencia que sigue el
resen/elec_dig/capitulo4.pdf
diseño. Cada día la electrónica digital