Diseño de un sistema de alarma con lógica programable

33
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 La información contenida en esta obra abarca el diseño de una alarma de 4 bits usando componentes digitales, mediante el uso de un dispositivo lógico programable (PLD) y aplicación de una maquina de estados. Se incluyen ejemplos de una máquina de Mealy y una máquina de Moore. Se incluyen ejemplos de la aplicación del diseño en otros circuitos además de una descripción de la lógica llevada a cabo. Los dispositivos lógicos programables (PLD) favorecen la integración de aplicaciones y desarrollos lógicos mediante el empaquetamiento de soluciones en un circuito integrado. El resultado es la reducción de espacio físico dentro de la aplicación; es decir, se trata de dispositivos fabricados y revisados que se pueden personalizar desde el exterior mediante diversas técnicas de programación. El diseño se basa en bibliotecas y mecanismos específicos de mapeado de funciones, mientras que su implementación tan sólo requiere una fase de programación del dispositivo que se suele realizar en segundos. Se denomina máquina de estados a un modelo de comportamiento de un sistema con entradas y salidas, en donde las salidas dependen no sólo de las señales de entradas actuales sino también de las anteriores. Una máquina de estados puede ser finito o infinito depende su aplicación, así mismo existen diferentes modelos que serán vistos detalladamente. 2. INTRODUCCIÓN Actualmente la humanidad se encuentra sumergida en una nueva etapa evolutiva, la denominada era digital, en la que se vive rodeado de todo tipo de dispositivo

Transcript of Diseño de un sistema de alarma con lógica programable

Page 1: Diseño de un sistema de alarma con lógica programable

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

La información contenida en esta obra abarca el diseño de una alarma de 4 bits usando componentes digitales, mediante el uso de un dispositivo lógico programable (PLD) y aplicación de una maquina de estados. Se incluyen ejemplos de una máquina de Mealy y una máquina de Moore. Se incluyen ejemplos de la aplicación del diseño en otros circuitos además de una descripción de la lógica llevada a cabo.

Los dispositivos lógicos programables (PLD) favorecen la integración de aplicaciones y desarrollos lógicos mediante el empaquetamiento de soluciones en un circuito integrado. El resultado es la reducción de espacio físico dentro de la aplicación; es decir, se trata de dispositivos fabricados y revisados que se pueden personalizar desde el exterior mediante diversas técnicas de programación. El diseño se basa en bibliotecas y mecanismos específicos de mapeado de funciones, mientras que su implementación tan sólo requiere una fase de programación del dispositivo que se suele realizar en segundos.

Se denomina máquina de estados a un modelo de comportamiento de un sistema con entradas y salidas, en donde las salidas dependen no sólo de las señales de entradas actuales sino también de las anteriores. Una máquina de estados puede ser finito o infinito depende su aplicación, así mismo existen diferentes modelos que serán vistos detalladamente.

2. INTRODUCCIÓN

Actualmente la humanidad se encuentra sumergida en una nueva etapa evolutiva, la denominada era digital, en la que se vive rodeado de todo tipo de dispositivo electrónico los cuales dependen de un circuito digital. Esta muy marcada la electrónica digital como el surgimiento de las nuevas tecnologías que permiten al hombre llevar a cabo sus tareas con mayor facilidad y comodidad.

Toda esta revolución tecnológica debe estar a gradecida a la invención del transistor, que fue en 1947 cuando John Bardeen, Walter Brattain y William Shockley descubren el efecto transistor, el cual permite cambios en la conductividad de los materiales mediante el uso de corriente eléctrica. Sumándole el álgebra booleana, es cuando surge la electrónica digital.

Posteriormente a la idea de crear circuitos cada vez más pequeños y con menos costo, surgen los dispositivos programables, con el fin de usar un lenguaje de programación para configurar los arreglos de compuertas en un diseño único y confiable. En la actualidad el nivel de integración en estos circuitos con el desarrollo de la microelectrónica ha hecho posible desarrollar sistemas completos dentro de un solo circuito integrado. Todas estas características es lo que nos lleva a observar a diario sistemas de uso industrial, militar y los de consumo han reducido su tamaño; por ejemplo, los teléfonos celulares, computadoras, calculadoras, relojes, sistemas de telecomunicaciones, etc. No son más que aplicaciones de los circuitos integrados.

Page 2: Diseño de un sistema de alarma con lógica programable

Ahora bien con estas herramientas en evolución, surge la combinación de un circuito programable con una maquina de estados, lo cual simplifica aun mas el trabajo y diseño de sistemas digitales. Por ejemplo, si se requiere un sistema en el cual se deban ejecutar una secuencia de instrucciones las cuales dependen unas de otras, ocupan cierto tiempo de ejecución o necesitan conteos variables, su diseño sería muy complicado usando simple álgebra booleana con arreglo de circuitos combinacionales. Todo esto resulta mucho más sencillo si se utiliza la lógica que implican las maquinas de estados también llamados sistemas secuenciales, cuyo fin es mostrar ciertas salidas de acuerdo a la secuencia que fue diseñada.

La finalidad del artículo es presentar un sistema digital y dar a conocer conocimientos necesarios para continuar por cuenta propia en el diseño de otros sistemas que parecieran complejos pero con las herramientas que se exponen se logran fácilmente. Con la teoría en conjunto, se plantea un circuito de seguridad, útil para restringir el acceso a un cuarto, bodega o automóvil.

3. ASICS

El diseño y aplicación de sistemas se puede lograr circuitos denominados ASICS, pero entra más completo sea el circuito, mayor complejidad tiene su elaboración. En la actualidad, el diseño de ASIC (circuitos integrados desarrollados para aplicaciones específicas) domina las tendencias en el desarrollo de aplicaciones a nivel de microelectrónica. Este diseño presenta varias opciones de desarrollo, como se observa en la tabla 1.1. A nivel de ASIC el desarrollo full o semi custom ofrecen grandes ventajas en sistemas que emplean circuitos diseñados para una aplicación en particular.

Existen destinos arreglos de compuertas que componen a los dispositivos programables. Los FPGA por ejemplo son arreglos de compuertas programables en campo y CPLD dispositivos lógicos programables complejos. Ellos ofrecen las mismas ventajas de un ASIC, sólo que a un menor costo.

Categoría CaracterísticasDiseño totalmente a la medida(full custom)

Total libertad de diseño, pero el desarrollo requiere todas las etapas de fabricación.

Matrices de puertas pre difundidas

Sólo necesita las últimas etapas del proceso, y el diseño está limitado a las posibilidades de la estructura prefabricada.

Celdas estándares pre caracterizadas(semi custom)

Libertad de diseño, pero el desarrollo exige un proceso de fabricación completo

Page 3: Diseño de un sistema de alarma con lógica programable

Lógica programable (FPGA, CPLD)

Dispositivos que se pueden personalizar desde el exterior mediante programación.

Tabla 1.1 Tecnologías de fabricación de circuitos integrados.

4. PLD

En la actualidad existe una gran variedad de dispositivos lógicos programables, los cuales se usan para remplazar circuitos SSI (pequeña escala de integración), MSI (mediana escala de integración) e incluso circuitos VLSI (muy alta escala de integración), ya que ahorran espacio y reducen de manera significativa el número y costo de los diseños. Estos dispositivos, llamados PLD (tabla1.2), se clasifican por su arquitectura (forma funcional en que se encuentran ordenados los elementos internos).

Dispositivo DescripciónPROM Programmable

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

GAL Generic Logic Array: arreglo lógico genérico

CPLD Complex PLD: dispositivo lógico programable complejo

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 estructurados mediante bloques lógicos configurables y celdas lógicas de alta densidad, respectivamente. La arquitectura PLD está formada por un arreglo de compuertas AND y OR conectadas a las entradas y salidas del dispositivo. La finalidad de cada una de ellas se describe a continuación.

Arreglo AND: Está formado por varias compuertas AND interconectadas a través de alambres, los cuales cuentan con un fusible en cada punto de intersección. Para programar se funde o apaga el fusible para eliminar variables sin utilizar.

Fig 1.1 Arreglo AND Arreglo OR: Está formado por un

conjunto de compuertas OR conectadas a un arreglo programable, el cual contiene un fusible en cada punto de intersección. Este tipo de arreglo es similar al de compuertas AND.

Page 4: Diseño de un sistema de alarma con lógica programable

Fig 1.2 Arreglo OREste es el principio básico para los circuitos PLD, a continuación se presenta en detalle la arquitectura del dispositivo a utilizar, el GAL. Por su bajo costo, pequeño tamaño y adaptarse al trabajo realizado, se utilizó dicho circuito.

4.2 GAL

Arreglo lógico genérico (GAL) se forma con arreglos AND programable y OR fijo, con una salida lógica programable. Este dispositivo es reprogramable y contiene configuraciones de salida programables. Los dispositivos GAL se pueden programar una y ora vez ya que usan la tecnología E2 CMOS (borrable eléctricamente CMOS) (Fig 1.1).

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.

Fabricante: Lattice Semiconductor Corporation

4 ns máximo de retraso en propagación

Fmax = 250 MHz 3.5 ns máximo tiempo de

propagación de la entrada de reloj al dato de salida

Voltaje de entrada soportado entre 3.5V y 6V

90mA de consumo de corriente Rapidez de borrado 100ms 20 años de retención de los datos 10 macroceldas lógicas de salida

(OLMC) Temperatura de operación 0 a

75ºCEste circuito cuenta con 22 líneas de entrada y sus complementos, lo que da un total de 44 líneas de entrada a cada compuerta AND (estas entradas se encuentran representadas por las líneas verticales en el diagrama).

El gal tiene la siguiente configuración en sus terminales.

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

Page 5: Diseño de un sistema de alarma con lógica programable

Fig 2.2 CI de un GAL 22v10

La intersección que forman las líneas de entrada con los términos producto (líneas horizontales), representa cada una de las celdas que se pueden programar para conectar una variable de entrada a una línea de término producto (fig 2.3).

Fig 2.3 Realización de una suma de productos dentro de un GAL.

Macroceldas lógicas de salida. Una macrocelda lógica de salida (OLMC) está formada por circuitos lógicos que se pueden programar como lógica combinacional o secuencial. Las configuraciones combinacionales se implementan por medio de programación, mientras que en las secuenciales la salida resulta de un flip-flop. En la figura 2.4 se observa la arquitectura de una macrocelda del dispositivo GAL22v10, la cual está formada por un flip-flop y dos multiplexores.

Fig 2.4 Arquitectura de una macrocelda OLMC 22v10.

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 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

Ahora corresponde el turno de la programación del dispositivo, como se menciono la finalidad de usar el GAL es programar un circuito que nos simplifique y permita cumplir con el objetivo del sistema. En primera opción tenemos hacer uso de la captura esquemática, el que consiste en crear el circuito en modo gráfico para después grabarse en el GAL.

Los programas de captura esquemática son aplicaciones creadas para armar circuitos electrónicos y exportar los esquemas como archivos fuente, los cuales satisfacen en la sintaxis de algún

Page 6: Diseño de un sistema de alarma con lógica programable

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 programación, se tiene el “Schematic”, el cual esta descrito a continuación:

Fig 3.1 Hoja de trabajo Schematic

Los cuatro componentes básicos de la captua esquemática son los símbolos, los conectores, las etiquetas y los puertos de entrada y/o salida:

Los símbolos son una representación gráfica de los componentes

Los conectores sirven para la interconexión entre terminales

Las etiquetas variables para la identificación de entrada o salida

Los puertos definen un puerto entrada, salida o bidireccional.

El proceso de grabado resulta sencillo una vez construido el diagrama, simplemente se genera un archivo SCH, posteriormente un linker (enlazador) para generar un archivo .jed, el cual se le pasará al programador que se encargara de configurar el gal a lo capturado anteriormente.

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 programación, no soluciona mucho el problema de la complejidad a la hora de implementar un circuito ya que se emplea el álgebra booleana en esencia. Lo que nos trae a la siguiente etapa los HLD (lenguajes de descripción de hardware) cuyo objetivo es simplificar el trabajo aun más y realizar tareas con mayor complejidad.

Como consecuencia de la creciente necesidad de integrar un mayor número de dispositivos en un solo circuito integrado, se desarrollaron nuevas herramientas de diseño en un solo circuito integrado, se desarrollaron nuevas herramientas que auxilian al ingeniero a integrar sistemas muy completos. Esto permitió que en la década de los 50 aparecieran los HDL como una opción de

Page 7: Diseño de un sistema de alarma con lógica programable

diseño para el desarrollo de sistemas 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: ABEL, Advanced Boolean

Expression Language. VHDL, Very High Hardware

Description Language VERILOG

Una de las principales características de estos lenguajes radica en su capacidad para describir en distintos niveles de abstracción (funcional, transferencia de registros y lógico o nivel de compuertas). Dichos niveles sirven para clasificar modelos HDL según el grado de detalle y precisión de sus descripciones.

Los niveles de abstracción descritos desde el punto de vista de simulación y síntesis del circuito pueden definirse como sigue:

Algorítmico: Se refiere a la relación funcional entre las entradas y salidas del circuito o sistema, sin hacer referencia a la realización final.

Transferencia de registros (RT): Consiste en la participación del sistema en bloques funcionales sin considerar a detalle la realización final de cada bloque.

Lógico o de compuertas: El circuito se expresa en términos de ecuaciones lógicas o de compuertas.

Debido a una similitud con el lenguaje de programación visual basic y algunos otros, se optó por VHDL, el cual nos proporciona una alta confiabilidad y se notará que su uso no requiere de muchos conocimientos nuevos ni conceptos difíciles.

7. VHDL

En la actualidad, el lenguaje de descripción en hardware más utilizado a nivel industrial es VHDL, que apareció la década de los ochenta como un lenguaje estándar, capaz de soportar el proceso de diseño de sistemas electrónicos complejos, con propiedades para reducir el tiempo de diseño y los recursos tecnológicos requeridos. El departamento de la defensa de Estados Unidos creó el lenguaje VHDL; luego de varias versiones revisadas, el IEEE(Instituto de Ingenieros Electrónicos y Eléctricos) publicó en diciembre de 1987 el estándar IEEEstd.

7.1 Ventajas del desarrollo de circuitos integrados con VHDLA continuación se exponen las ventajas de usar VHDL en un circuito integrado:

Notación formal. Los circuitos permite su uso en cualquier diseño electrónico.

Disponibilidad pública. Es un estándar no sometido a patente, por lo que cualquiera puede utilizarla sin restricciones.

Independencia tecnológica de diseño. Se diseñó para soportar diversas tecnologías. (PLD, FPGA, ASIC, etc.).

Independencia de la tecnología y proceso de fabricación. Se creó para que fuera independiente de la tecnología y el proceso de fabricación del circuito.

Capacidad descriptiva en distintos niveles de abstracción. Consta con varios niveles de detalla, desde la especificación hasta la implementación; se

Page 8: Diseño de un sistema de alarma con lógica programable

pueden combinar a lo que se le conoce simulación multinivel.

Uso como formato de intercambio de información. Permite el intercambio de información a o largo de todas las etapas del proceso.

Independencia de los proveedores. Permite que las descripciones sean accesibles desde cualquier lugar.

Reutilización del código. Permite reutilizar los códigos en diversos diseños, sin importar si es (CMOS, bipolar, etc.) o implementado en (FPGA, ASIC, etc.).

Facilitación de la participación en proyectos internacionales.

7.2 Unidades básicas de diseñoLa estructura general de un programa en VHDL está formada por módulos o unidades de diseño, cada uno de ellos 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 elementos electrónicos (sumadores, contadores, compuertas, flip-flop, memorias, mux, etc.) que forman un sistema digital.

Arquitectura (architecture) Configuración (configuration) Declaración del paquete

(package declaration) Cuerpo del paquete (package

body)

En el desarrollo de programas pueden utilizarse o no tres de los cinco módulos, pero entidad y arquitectura son indispensables. Las declaraciones de entidad son de diseño primarias, mientras que la arquitectura y el cuerpo son de diseño secundarias porque dependen de una entidad.

ModosComo 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:

Modo in. Se refiere a las señales de entrada a la entidad.

Modo out. Indica las señales de salida de la entidad.

Modo inout. Permite declarar a un puerto de forma bidireccional.

Modo buffer. Permite hacer retroalimentación internas dentro de la entidad.

Fig 5.1 Modos y el curso de sus señales.

7.3 Tipos de datosLos tipos de valores que se pueden establecer dentro de una entidad son:

Bit, abarcando 0 y 1 Boolean, define valores verdadero

o falso. Integer, representa un número

entero.

7.4 Declaración de entidades

Page 9: Diseño de un sistema de alarma con lógica programable

La declaración de una entidad consiste en la descripción de las entradas y salidas de un circuito de diseño identificado como entity; es decir, la declaración señala las terminales o pines de entrada y salida con que cuenta la entidad de diseño (ver fig 5.2).

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 CorrectoEl primer carácter siempre es una letra mayúscula o minúscula

4suma Suma4SUMA4

El segundo carácter no puede ser guión bajo

S_4bits S4_bits

Dos guiones juntos no son permitidos

Resta__4 Resta_4_

Un identificador no puede utilizar símbolos

Clear#8 Clear_8

Tabla 5.1 Especificaciones para la escritura de identificadores.

7.5 Diseño de entidades mediante vectoresLa entidad sumador realizada usa bits individuales, pero que pasaría si se utilizan conjuntos de bits (palabras). Pues en VHDL se pueden agrupar como 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.3 Declaración de vectores en una entidad

Como se observa se esta utilizando la sentencia bit_vector especificando que será un arreglo de bits con 3 down 0 agrupa en orden descendente dicho vector.

7.6 Declaración de entidades mediante librerías y paquetesUna parte importante radica en el uso de librerías y paquetes que permiten declarar y almacenar estructuras lógicas, seleccionadas o completas que facilitan el diseño. En VHDL se encuentran definidas dos librerías ieee y work(fig 5.4). Para declarar la librería hay que usar library ieee;

Page 10: Diseño de un sistema de alarma con lógica programable

Fig 5.4 Contenido de las librerías

El paquete std_logic_1164 que se encuentra en la librería ieee contiene todos los tipos de datos que suelen emplearse en VHDL. El acceso a la información en un paquete es por medio de la sentencia use, seguida del nombre de la liberia y paquete.

use nombre_librería.nombre_paquete.all;

Ahora una forma de la declaración de una entidad haciendo uso de la librería descrita anteriormente (fig 5.5):

Fig 5.5 Entidad usando librería std_logic

7.7 ArquitecturaUna arquitectura (architecture) se define como la estructura que describe el funcionamiento de una entidad, de tal forma que permita el desarrollo de los procedimientos que se llevarán a cabo con el fin de que la entidad cumpla las condiciones de funcionamiento deseadas. Aquí es donde radica la gran ventaja de VHDL ya que se describen los diseños mediante un algoritmo de programación, este punto será abordado detalladamente para la descripción del motor principal

que hace posible la construcción del circuito de alarma.

Se describirá brevemente los estilos de programación utilizados en el diseño de arquitecturas, enfocándose en los importantes para el diseño del circuito presentado en este texto:

Descripción funcional: Una sencilla forma de apreciar éste estilo, es mediante el diseño de un comparador de entradas de 2 bits, se realiza una descripción que relacionan las entradas con las salidas del circuito sin importar cómo esté organizado en su interior.

si a = b then c = 1si a <> b then c = 0

Ahora el código que representa el 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 downt

o 0);

6.                 c: out bit);

7. architecture funcional of comp is

8. begin

9. compara: process(a,b)

10. begin

11.         if a = b then

12.                 c <= '1';

13.         else   

14.                 c <= '0';

15.         end if;

16. end process compara;

17. end funcional;

En la primera sección del código consta en la declaración de la entdidad, aquí no

Page 11: Diseño de un sistema de alarma con lógica programable

hay problema. Posteriormente se describe la arquitectura (línea 7-17) en la cual se observa como se declara asignándole nombre e indicando que incluye la entidad comp se le indica que ha terminado la arquitectura con la palabra reservada end nombrearquitectura. Ahora prestar atención al uso de la palabra process con la que se indicara que señales se involucrarán en el proceso. Al seguir el análisis puede notarse las sentencias if-then-else. Interpretando esto en el código dice, si la señal a es igual a la señal b entonces c cambia a 1 (mediante el símbolo <= que indica asignación). Una vez definido el proceso, se termina con end process nombreproceso. Con ello se parecía que la descripción funcional se basa en el uso de procesos y declaraciones secuenciales, lo que permiten modelar la función con rapidez.

Estilo por flujo de datos: En este estilo, se indica la forma en que los datos se pueden transferir de una señal a otra sin necesidad de declaraciones secuenciales (if-then-else). Este tipo de descripciones permite definir el flujo que tomarán los datos entre módulos encargados de realizar operaciones. Se describe a continuación mediante instrucciones when-else. Para entenderlo mejor se coloca como queda el código siguiendo dicho estilo para hacer el 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;

4. entity comp is

5. port (a,b: in bit_vector (1 downt

o 0);

6.                 c: out bit);

7. end comp;

8. architecture f_datos of comp is

9. begin

10. c <= '1' when (a = b) else '0';

11. end f_datos;

Como es notable, la diferencia radica en la eliminación del proceso y se hace sin declaraciones if-then-else.El estilo de diseño utilizado en la programación del circuito depende del diseñador y de la complejidad del proyecto. Por ejemplo, si un sistema se requiere diseñar cuyo funcionamiento dependa sólo de sus entradas y salidas, es conveniente utilizar la descripción funcional, la cual presenta la ventaja de requerir menos instrucciones y el diseñador no necesita un conocimiento previo de cada componente del circuito.

8. SISTEMAS SECUENCIALES

Con las bases establecidas previamente, hemos llegado a la descripción de un sistema secuencial que bien está formado por un circuito combinacional y un elemento de memoria encargado de almacenar de forma temporal la historia del sistema. En esencia, la salida de un sistema secuencial depende de las entradas y de la historia del sistema (fig 6.1).

Page 12: Diseño de un sistema de alarma con lógica programable

Fig 6.1 Estructura de un sistema secuencial

Básicamente hay dos tipos de sistemas secuenciales: síncronos y asíncronos; el comportamiento de los primeros se encuentra sincronizado mediante el pulso de reloj, mientras que el otro depende del orden y momento en el cual se aplican su 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-flopsEl elemento de memoria utilizado indistintamente del tipo de sistema secuencial se conoce como flip-flop, cuya característica es mantener un bit de manera indefinida hasta que a través de una señal cambie de estado. Los más conocidos son SR, JK, T(fig 6.2) y D.

Fig 6.2 Tabla de verdad flip-flop T

En la figura anterior cabe destacar que Q = estado actual y Qt+1 = estado futuro

8.2 ContadoresLos contadores son entidades muy utilizadas en el diseño lógico. La forma usual para escribirlos en VHDL es mediante operaciones de incremento, decremento o ambas. Para un ejemplo rápido y fácil de entender trabajaremos

con un contador de 4 bits (fig 6.3).

Fig 6.3 Diagrama de tiempos contador binario 4 bits

La presentación del diagrama de tiempos de este circuito tiene la finalidad de ilustrar el procedimiento que se sigue en 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;

3. use work.std_arith.all;

4. entity cont4 is port(

5.         clk: in std_logic;

6.        

Q: inout std_logic_vector(3 down

to 0));

7. end cont4

8. architecture arqcont of cont4 is

9. begin

10.         process(clk)

11.         begin

12.              

if(clk'event and clk = '1') then

13.                        

Q <= Q + 1;

14.                 end if;

15.         end process;

Page 13: Diseño de un sistema de alarma con lógica programable

16. end arqcont;

Se aprecia se esta usando de la librería ieee, el paquete work.std_arith.all esto nos permite poder usar números el operador +, para indicarle un incremento de 1 al nuestro contador. Cuando requerimos la retroalimentación de una señal Q<= Q + 1, utilizamos el modo inout la cual se aprecia en la declaración de la variable Q, ya que se retroalimenta en cada pulso de reloj. Atributo ‘event. En VHDL los atributos definen características que se asocian con cualquier tipo de datos o entidades. El atributo ‘event se utiliza para describir un hecho u ocurrencia de una señal en particular. Con ello podemos observar

que en la condición if clk’event es cierta sólo cuando ocurre un cambio de valor; es decir, un suceso de la señal clk. Como se aprecia la declaración if-then no maneja la condición else, debido a que el compilador mantiene el valor de Q hasta que no exista un cambio de valor en la señal clk.

9. SISTEMAS SECUENCIALES SÍNCRONOS

Llego la hora de presentar los sistemas secuenciales de tipo síncrono, se vera enfocado hacia las maquinas de estado ya que aquí es donde recae todo el análisis y diseño del circuito alarma presentado al 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.

Existe una división en el diseño de los sistemas secuenciales que se refiere al momento en que se producirá la salida del sistema. Son las maquinas de estado tipo:

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.

Arquitectura secuencial tipo Mealy

Moore. La señal de salida sólo depende del estado en que se encuentra.

Page 14: Diseño de un sistema de alarma con lógica programable

Arquitectura secuencial tipo Moore

Observando la simple diferencia entre ambos diseños en un sistema secuencial, se describirán 2 diseños de maquinas de estados para el sistema de alambra, donde lo único que se requiere cambiar es el programa del GAL22v10, el alambrado y número de pines quedara definido de igual forma. A continuación se describe de manera general como es el análisis y diseño para un problema que requiera un circuito secuencial programado en 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.1 Detector de secuencia

9.1 Diagramas de estadoEl uso de diagramas de estados en lógica programable facilita de manera significativa la descripción de un diseño secuencial, ya que no es necesario seguir la metodología tradicional de diseño. VHDL nos permite utilizar un modelo funcional que indique la transición que siguen los estados y condiciones que controlarán el proceso. Aplicando un poco de lógica, vemos que el sistema se puede presentar por medio del diagrama de estados (fig 7.2) arquitectura Mealy. Y lo que advierte es que el sistema cuenta con una señal de entrada denominada X y una de salida Z, las cuales determinan el estado presente y próximo que seguirá la maquina de estados.

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

Page 15: Diseño de un sistema de alarma con lógica programable

llegar al tercer estado siendo X=1 en la salida Z se coloca 1, en caso contrario se quedará en el estado actual para X=0. Un análisis usando la tabla de estados se percata rápidamente de como quedara el programa en VHDL.Edo. Presente

Edo. Futuro Salida ZX=0 X=1 X=0 X=1

d0 d0 d1 0 0d1 d1 d2 0 1d2 d2 d3 0 1d3 d3 d0 0 1

Ahora si, codificar se facilita mediante una descripción de alto nivel en VHDL. Esta descripción supone el uso de las declaraciones case-when las cuales determinan, en un caso particular, el valor que tomará el siguiente estado. Por otro lado, la transición entre estados se realiza por medio de declaraciones if-then-else, de tal forma que éstas se encargan de establecer la lógica que seguirá el programa para realizar la asignación del estado.

Introducción del diseño al código.Como primer paso en el diseño, se consideraron los estados d0,d1,d2 y d3. Para representarlos en VHDL, hay que definirlos dentro de un tipo de datos mediante el uso de la sentencia type.

1. type estadis is (d0,d1,d2,d3);

2. signal edo_presente,

edo_futuro: estados;

Obsere la forma en la que se listan los estados, posteriormente con la sentencia signal declaramos donde se guardara el estado en el que se encuentra la maquina, es decir por que camino se dirige. Para ello necesitamos una signal que represente el estado presente y otra que represente el estado futuro o próximo. El siguiente paso consiste en la declaración

del proceso que definirá el comportamiento del sistema. En éste debe considerarse edo_futuro depende de edo_presente y la entrada X. El código quedaría así.

1. proceso1: process(edo_presente,

X) begin

2.    case edo_presente is

3.    when d0 => Z<='0';

4.        if X='1' then

5.            edo_futuro <=d1;

6.        else

7.            edo_futuro <= d0;

8.        end if;

Dentro del proceso se describe la transición del edo_presente al edo_futuro. Primero se inicia con la declaración case que especifica el primer estado que se va a evaluar, posteriormente con la sentencia if se compara la señal de entrada X la cual indica cual será el edo_futuro. A continuación se muestra el código completo.

1. library ieee;

2. use ieee.std_logic_1164.all;

3. entity diagram is port(

4.         clk,x: in std_logic;

5.         z:      out std_logic);

6. end diagrama;

7. architecture arq_diagrama of diag

rama is

8. type estados is (d0,d1,d2,d3);

9. signal edo_presente,

edo_futuro: estados;

10. begin

11. proceso1: process(edo_presente,x) 

begin

12.         case edo_presente is

13.         when d0 => z<= '0';

Page 16: Diseño de un sistema de alarma con lógica programable

14.  if x='1' then

15.       edo_futuro <=d1;

16.  else

17.       edo_futuro <=d0;

18.  end if;

19. when d1 => z<='0';

20. if x='1' then

21.       edo_futuro <= d2;

22.  else

23.       edo_futuro <=d1;

24.  end if;

25. when d2 => z<= '0';

26.  if x='1' then

27.       edo_futuro <= d3;

28.  else

29.       edo_futuro <=d0;

30.  end if;

31. when d3 =>

32.  if x='1' then

33.      edo_futuro <= d0;

34.      z<='1';

35.  else

36.     edo_futuro <=d3;

37.     z <= '0';

38. end if;

39. end case;

40. end process proceso1;

41.  

42. proceso2: process(clk) begin

43. if(clk'event and clk='1') then

44.        

edo_presente <= edo_futuro;

45. end if;

46. end process proceso2;

47. end arq_diagrama;

Hay que notar que en cada estado debe indicarse el valor de la salida (Z<=0) después de la condición when, siempre y cuando la variable Z no cambie de valor. En el primer proceso1, se describe la transición que sufren los estados y las

condiciones necesarias que determinan dicha transición. En el segundo, proceso2 se lleva a cabo de manera síncrona la asignación del estado futuro al estado presente, de suerte que cuando se aplica un pulso de reloj, el proceso se ejecuta. Se muestra lo forma de programar la salida Z en el estado d3 cuando éste obtiene el valor de 0 o 1, según el valor de la entrada X.

Con la explicación detallada de cada segmento de información, se da por hecho que se encuentra listo el lector para comprender con una muy breve explicación la composición y estructura del circuito de alarma.

10. SISTEMA DE ALARMA DE 4 DÍGITOS

Se necesita de un sistema digital para controlar accesos a un compartimiento o cuarto, la idea es pedirle a la persona que solicite el acceso, una cifra que consta de 4 dígitos la cual se compara con una predefinida por quien regula la entrada a dicho lugar; de resultar correcta la cifra deberá abrirse la puerta o compartimiento, de ser incorrecto simplemente permanecerá cerrado. En respuesta a esta situación, se plantea un sistema el cual permite grabar un numero de 4 cifras, para establecer la clave de acceso, posteriormente colocarla en modo de operación para que trabaje como le es requerido.

El primer paso es definir que circuitos se necesitan, para lograr esta tarea. Primeramente nos enfocaremos en la captura de datos, cada cifra consta de un valor de 0 al 9 en decimal, por lo que implica que se trabajará con cuatro bits en

Page 17: Diseño de un sistema de alarma con lógica programable

binario para cada dígito presionado. Esto 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 sencillo conseguirlo, aplicando el conocimiento adquirido anteriormente.

Fig 8.1 Esquema a bloques de como se plantea el sistema.

La conexión de la sección introducción de datos y memoria es muy simple, constamos con un teclado matricial que va a un decodificador, tomamos los 4 bits de salida y se dirigen a la memoria, también son tomadas las salidas en el circuito de control, y las salidas de la RAM, son tomadas al circuito de control. Cuando se apruebe el código, mediante el cable “permiso de acceso” se mandara un 1 lógico para indicar que se proceda a abrir. Véase la figura 8.2 para verificar como es la conexión de la primera etapa.

Fig 8.2 Introducción de datos y almacenamiento

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 o leído en la memoria.

Con este avance conectado, el resto es sencillo, puesto que del resto del funcionamiento se encargara un GAL22v10. A éste circuito le conectaremos las salidas de U1 y las salidas de U2, luego saldrán 4 bits de dirección hacia la memoria RAM, para acceder a las distintas localidades como se comento anteriormente, y el ultimo pin se conectará a un led para saber cuando fue concedido el permiso (enciende led). El bosquejo final a bloques nos queda de la siguiente forma.

Page 18: Diseño de un sistema de alarma con lógica programable

Fig 8.3 Diagrama a bloques del bosquejo final del circuito

El led enciende siempre y cuando los 4 dígitos insertados sean iguales a los almacenados en la memoria.Ahora la parte que resultaría compleja sino contáramos con un PLD. Como la descripción dice que el GAL debe comparar las salidas de 2 circuitos lo cual serían entradas para el GAL, y en cada acierto cambiar de transición o estado para que al llegar a la meta final se de por encendido el led. Además debe genera direcciones para saltar entre localidades. De acuerdo con el análisis requerimos de una maquina tipo Mealy, ya que la salida (LED) dependerá de las entradas (A y B). Otro punto a destacar es la salida (direcciones) las cuales deberán cambiar cada que se presiona una tecla, un detalle que se tiene sin cuidado, puesto a que se trabajara con un sistema síncrono en donde el Ouput Enable del teclado actuará como pulso de reloj.

Para atender el asunto de las direcciones y estado final, se tienen planteados 2 diseños que se conectan de igual forma en el mismo numero de pines, pero con distinta lógica, aquí solo se describirá en que consiste uno de ellos, el segundo diseño podrá ser consultado en un link externo que se coloca al final del documento, el cual solo requiere análisis del código mientras que el alambrado sigue intacto.

Generar direcciones para localidades de memoriaSe plantea utilizar un contador de 4 bits, que inicia en 00, el cual su programación y secuencia no es nada nuevo. Con ello cada que hay un flanco de subida en el clock del GAL, cambie de dirección y asegurarse que se guardan o comparan siempre los dígitos siguientes de la clave de acceso. Independientemente del estado en que se encuentre el sistema, seguirá

Page 19: Diseño de un sistema de alarma con lógica programable

generando direcciones (contando). (ver figura 8.4)Diagrama maquina de estadosAhora la descripción de la secuencia. Tenemos que un usuario introduce 4 números, en cada número se hace una comparación si lo presionado es igual a la salida de memoria, de ser así pasar a un siguiente estado, si se equivoca en

cualquiera de los 4, se debe regresar al estado inicial puesto que ya no esta permitido acceder al sistema. En caso de acertar los 4 dígitos, se tiene que pasar de 0 a 1 la salida (LED) que indica permitir acceso. Para visualizar esta descripción (ver figura 8.4).

Fig 8.4 Maquina de estados

Observe que el camino rojo se toma siempre y cuando A y B sean iguales, en caso contrario se regresa al estado inicial para así asegurarse de no dar acceso. Para el último estado si no coinciden las entradas, el led no enciente, pero si son iguales como se llego al último estado, proceden a encenderse.

Tabla de estadosEstado presente

Estado futuro Salida (LED)A=B A!=B A=B A!=B

S0 S1 S0 0 0S1 S2 S0 0 0S2 S3 S0 0 0S3 S0 S0 1 0

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 downto 

0);

8.        

b: in std_logic_vector(3 downto 

0);

9.         ledOn: out std_logic;

10.        

x: inout std_logic_vector(1 downt

o 0));

11.  attribute pin_numbers of alarm: 

entity is

12.     --inputs

13.     "b(0):6 b(1):5 b(2):4 b(3):3

"

14.     &

15.     "a(0):10 a(1):9 a(2):8 a(3):7

"

16.     --outputs

17.     &

18.     "x(0):15 x(1):16 "

19.     &

Page 20: Diseño de un sistema de alarma con lógica programable

20.     "ledOn:17";

21. end alarm;

22.  

23. architecture arch_alarm of alarm 

is

24.         type states is (state0,

state1, state2, state3 );

25.         signal stado_pres,

stado_fut: states;

26. begin

27.  

28. p_estados: proces

s(stado_pres,a,b) begin

29.  case stado_pres is

30.  when state0 =>

31.   ledOn <= '0';

32.     if a = NOT(b) then

33.         stado_fut <= state1;

34.     else

35.         stado_fut <= state0;

36.    end if;

37.  when state1 =>

38.    if a = NOT(b) then

39.         stado_fut <= state2;

40.    else

41.         stado_fut <= state0;

42.    end if;

43.  when state2 =>

44.    if a = NOT(b) then

45.         stado_fut <= state3;

46.    else

47.         stado_fut <= state0;

48.    end if;

49.  when state3 =>

50.    if a = NOT(b) then

51.         ledOn <= '1';

52.    end if;

53.         stado_fut <= state0;

54.  end case;

55.  end process p_estados;

Ahora definiendo el proceso para

realizar los cambios.

56.  p_reloj: process(clk,x) begin

57.    

if(clk'event and clk= '1') then

58.           

stado_pres <= stado_fut;

59.                      x <= x + 1;

60.      end if;

61.   end process p_reloj;

62. end arch_alarm;

Como se puede observar es muy parecido al código explicado anteriormente, lo cual no hace falta detallar que se hace en cada caso, sino únicamente destacar lo más importante.

63. attribute pin_numbers of alarm: e

ntity is

64.   --inputs

65.   "b(0):6 b(1):5 b(2):4 b(3):3 "

66.    &

67.    "a(0):10 a(1):9 a(2):8 a(3):7

"

68.    --outputs

69.    &

70.   "x(0):15 x(1):16 "

71.    &

72.    "ledOn:17";

En esta sección vamos a definir que pines queremos que sean las entradas (A y B), las salidas (LED) y las direcciones a la

Page 21: Diseño de un sistema de alarma con lógica programable

memoria, esto se definió para que si el diseñador hacer modificaciones no sea necesario re alambrar o restructurar el circuito, simplemente baste con reprogramar el GAL.

Un vistazo a las declaraciones de los estados.

73. type states is (state0,

state1, state2, state3 );

74. signal stado_pres,

stado_fut: states;

Se definen los estados tal y como se presentaron en el diagrama (fig 8.4) stado_pres y stado_fut, es para saber en que transición se encuentra, según el camino que se haya seguido.

75.        when state3 =>

76.           if a = NOT(b) then

77.                  ledOn <= '1';

78.            end if;

79.               

stado_fut <= state0;

80.       end case;

Dirigiéndonos a al ultimo estado, si se llego a este estado y las entradas (A y B) son iguales, corresponde a prender LED,

luego regresarse al estado 0. Hay que recordar que las salidas de la memoria son negadas, por ende se debe usar la palabra not para obtener las entradas correctas.

81. p_reloj: process(clk,x) begin

82.  if(clk'event and clk= '1') th

en

83.       

stado_pres <= stado_fut;

84.        x <= x + 1;

85.  end if;

86. end process p_reloj;

Y como se había establecido X sería un contador que generaría las direcciones para las localidades de memoria, por ello de la línea 85. Por último cada pulso de reloj (tecla presionada), se dirige hacia el estado siguiente. Con todo lo anterior, solo falta revisar el archivo rpt generado por el compilador de vhdl, para saber como lograr las conexiones. Con ello el alambrado se deja en manos del diseñador y se espera un resultado satisfactorio. Se recuerda al final del documento se colocan 2 links uno para acceder al diseño alterno y otro para acceder al alambrado completo.

Page 22: Diseño de un sistema de alarma con lógica programable

11. CONCLUSIONES

Si se tiene conocimiento básico sobre los circuitos digitales, se pudo notar la gran ventaja que se tiene al usar dispositivos programables, con el beneficio de realizar descripciones en alto nivel para que se comporten como se le es requerido. Los diseños que se pueden lograr con la información expuesta pueden llegar a grandes cosas, un ejemplo es el diseño de un procesador de 4 bits, en el cual su máxima complejidad surge al momento de diseñar la unidad de control, sería un trabajo exhaustivo usando únicamente circuitos con baja escala de integración, pero usando un PLD y la lógica secuencial, resulta bastante sencillo una implementación de este tipo. Se recomienda tener siempre en cuenta estos tipos de integrados que nos pueden resolver muchos problemas con menor costo.

Un obstáculo que pueden presenciar diseñadores principiantes, al utilizar éste tipo de sistemas, es la simulación de ellos, puesto a que como constan de un programa personalizado, se requiere indicarle a la computadora como es que funciona. Por ello se hace recomendación de uso del software Proteus ISIS, el cual permite simular PLD y micro controladores cargándoles el software de diseño propio.

Cabe destacar la importancia que toma hoy en día los niveles de abstracción en la evolución de software computacional, ya que con ello se logra definir con lenguaje de alto nivel, la secuencia que sigue el diseño. Cada día la electrónica digital

cubre mas sistemas, lo que implica a que se esta volviendo parte de nuestra etapa evolutiva.

No es necesario mucho conocimiento previo para la compresión del documento o la realización del sistema expuesto, basta con saber las definiciones básicas como bit, binario, etc., además del conocimiento de las compuertas lógicas básicas. Se espera haber sido de gran ayuda para cualquier diseñador y que le haya resultado grata la lectura, se recalca que la aplicación de estos conocimientos en un sistema secuencial, va más allá de una alamra con comparador.

12. RECURSOS EXTRA

http://robingk.imeev.com/ alarma.png

http://pastebin.com/EUVmk0qF

13. REFERENCIAS

Libros:VHDL El arte de programar sistemas digitales, David G. MAxinez, Jessica Alcalá. CECSA primera edición,2002.

Fundamentos de Sistemas Digitales - 7ma Edición - Thomas L. Floyd.

Paginas web

http://digitales.itam.mx/Cursos/nuevos_cursos/Circuitos%20logicos/practicas/practicas%20nuevas/Practica%2006_%20VHDLn.pdf

http://dsid.escom.ipn.mx/julio/cursos/presen/elec_dig/capitulo4.pdf

Page 23: Diseño de un sistema de alarma con lógica programable