Services on Demand
Journal
Article
Indicators
-
Cited by SciELO
-
Access statistics
Related links
-
Similars in SciELO
uBio
Share
Universidad, Ciencia y Tecnología
Print version ISSN 1316-4821On-line version ISSN 2542-3401
uct vol.13 no.52 Puerto Ordaz Sept. 2009
Diseños de circuitos electrónicos digitales utilizando la tecnología FPGA
Rojas, Leireny; Franco M, Zulay E; Pateti M, Antonio S
La Ing. Rojas Leireny, La MSc. Zulay Franco y el MSc. Antonio Pateti, desempeñan sus actividades en el Centro de Diseño Microelectrónica, Departamento de Electrónica en la Universidad Nacional Experimental Politécnica Antonio José de Sucre (UNEXPO) Vicerrectorado Puerto Ordaz, Venezuela. Correos electrónicos lrojas@poz.unexpo.edu.ve; zfranco@poz.unexpo.edu.ve; apateti@gmail.com. respectivamente.
Resumen:
El objetivo fundamental de esta investigación fue implementar en la tarjeta XSV-800 una interfaz teclado PS/2-monitor VGA, utilizando la tecnología FPGA y el lenguaje VHDL. Para su realización el procedimiento básico seguido fue establecer las bases teóricas sobre estas tecnologías y la tarjeta XSV-800, tal que permitieran construir los diseños necesarios para lograr la aplicación deseada. La investigación llevada a cabo propone alternativas de cambio en las herramientas utilizadas para efectuar los diseños electrónicos. El desarrollo de esta investigación permitió comprobar que las tecnologías FPGA y el lenguaje VHDL constituyen unas herramientas versátiles y flexibles de diseño, permitiéndole al que las maneja realizar complejos diseños electrónicos en menor tiempo.Palabras clave: XSV-800/ Interfaz/ Teclado PS/2/ Monitor VGA/ Tecnología/ FPGA/ VHDL.
Design of digital electronic circuits using FPGA technology and VHDL language
Abstract: The primary objective of this research was to implement on the card XSV-800 VGA PS/2-monitor keyboard interface, using FPGA technology and VHDL language. To realise the basic procedure followed was to establish the theoretical underpinnings of these technologies and XSV-800 card, allowing it to build the designs necessary to achieve the desired application. An investigation conducted proposed options for change in the tools used for making electronic designs. The development of this investigation revealed that the technologies and FPGA VHDL language tools are versatile and flexible design, allowing it to perform complex that handles electronic designs in less time.
Keywords: XSV-800/ Interface/ PS / 2/ VGA Monitor/ FPGA/ VHDL.
Manuscrito finalizado en Ciudad Guayana, Venezuela, el 2009/02/05, recibido el 2009/03/23, en su forma final (aceptado) el 2009/03/30.
I.- INTRODUCCIÓN
En la actualidad, el requerimiento es integrar diseños complejos en espacios cada vez más pequeños y hacerlo en el menor tiempo posible. Por esta razón, es importante la enseñanza de nuevas tecnologías de diseño que permitan concentrar una gran lógica digital en un único circuito integrado y manejar tiempos de respuesta instantáneos. Dos de estas tecnologías son los dispositivos lógicos programables, FPGA (Field Programmable Gate Array) y el lenguaje de descripción de hardware, VHDL (Very High Speed Integrated Circuits Hardware Description Language).
Para estudiar estas tecnologías FPGA y VHDL se implementó una interfaz que permite manejar los puertos PS/2 y VGA de la tarjeta de desarrollo XSV-800, a través de un teclado y un monitor.
II. DESARROLLO
1. Etapas del proceso de diseño con dispositivos lógicos programables
El proceso de diseño con dispositivos lógicos programables o PLDs, utilizando como lenguaje de descripción de hardware el VHDL, se puede dividir en cinco etapas bien definidas, como se observan en la Figura 1.
1.1 Definición de los requerimientos del diseño
Antes de empezar a escribir líneas de código, lo primero es tener una idea clara de los objetivos y requerimientos o especificaciones del diseño, lo cual se logra respondiendo preguntas como las siguientes: ¿qué funcionalidad debe tener el diseño?, ¿para qué sirve?, ¿cuáles son los tiempos requeridos para la inicialización o la relación reloj-salida?, ¿cuál es la frecuencia máxima de operación?, ¿cuáles son los caminos críticos?... Responder de forma apropiada a éstas y otras preguntas permite elegir una metodología de diseño y una arquitectura de dispositivo adecuada.
1.2 Descripción del diseño en VHDL
La descripción del diseño se subdivide en dos fases: formulación y codificación del diseño.
Formulación del diseño
A partir de las especificaciones se debe decidir una metodología para describir el diseño más eficientemente. Existen tres tipos de metodología de diseño: top-down, bottom-up y flat. Las dos primeras implican el crear estructuras jerárquicas, mientras que la última ve el diseño como un todo. La explicación de ellas es la siguiente:
Metodología top-down: divide el diseño en componentes funcionales. Cada componente tiene entradas y salidas específicas y desarrolla una determinada función. Cada componente se describe mediante cajas y existen diferentes niveles. Los niveles permiten clarificar la interconexión entre los diferentes componentes.
Metodología bottom-up: supone exactamente lo contrario que la metodología top-down, definiendo y diseñando componentes individuales, se van uniendo para componer el diseño completo.
Metodología flat: es aquella en la que los detalles de los componentes son definidos en el mismo nivel que las interconexiones entre ellos. Es la que se considera más apropiada para diseños pequeños, donde el disponer de los detalles de la estructura interna de un componente funcional no distrae del diseño global a nivel de chip.
Codificación del diseño
Seguidamente a la decisión de la metodología a ser aplicada, se describen diagramas de flujo o de bloque, con el lenguaje de descripción elegido, cuidando la sintaxis y la semántica utilizadas.
1.3 Simulación del código fuente
La simulación del código fuente permite depurar errores funcionales antes de la implementación o síntesis final del diseño.
1.4 Síntesis, optimización y ajuste del diseño
Síntesis
Se define como la traducción de la descripción de un diseño a una representación de circuito de bajo nivel, como un netlist, es decir, es el proceso por el cual se crean netlist o ecuaciones a partir de descripciones de diseño, en principio abstractas. El proceso de síntesis depende de la tecnología empleada, lo que significa que el paso de una descripción en VHDL hacia un conjunto de netlist es diferente de un dispositivo a otro. El proceso de síntesis convierte el diseño a unas estructuras de datos internas, traduciendo el comportamiento descrito en alto nivel a una descripción de nivel de transferencia de registros (register-transfer level: RTL). La descripción RTL especifica registros, señales de entrada y salida con la respectiva lógica combinacional entre ellas. Algunas herramientas de síntesis traducen estructuras de datos en funciones lógicas optimizadas según la arquitectura elegida, buscando qué partes de la lógica diseñada se puede sustituir por estas estructuras.
Optimización
El proceso de optimización depende de tres variables o constraints: la forma de las expresiones booleanas, el tipo de recursos disponibles y las directivas de síntesis utilizadas, tanto automáticas como propias del usuario. Algunas formas funcionales se implementan mejor en unos recursos que en otros. La optimización de estructuras PLD implica la simplificación de las expresiones lógicas a una suma mínima de términos producto, además también se optimiza el número de literales. Para ello se utilizan técnicas de simplificación de la forma canónica en una suma de términos producto.
La optimización para FPGAs típicamente requiere que la lógica se exprese en otra forma. Se busca entonces factores comunes que se puedan utilizar en diferentes partes del diseño.
Ajuste del diseño
El ajuste es el proceso por el que se toma la lógica producida por la síntesis y la optimización y se coloca en un dispositivo lógico, transformando la lógica, de ser necesario, para obtener el mejor ajuste. Ajuste es un término utilizado habitualmente para describir el proceso de colocar los recursos en arquitecturas del tipo CPLD. Cuando la arquitectura es una FPGA el proceso se suele denominar Placing and Routing, ya que se colocan bloques lógicos en diferentes células de la FPGA y posteriormente se interconectan entre sí o hacia bloques de entrada/salida (I/O).
1.5 Programación del dispositivo
La programación del dispositivo es la etapa final del proceso de diseño con dispositivos lógicos programables. A través de esta fase se programa el PLD con el diseño realizado en lenguaje de descripción de hardware, colocando en funcionamiento la aplicación deseada.
2. Diseño de una interfaz que permite manejar los puertos PS/2 y VGA de la tarjeta de desarrollo XSV-800
La metodología seguida se basó en cumplir con las etapas que definen el proceso de diseño con dispositivos lógicos programables descrito en la sección anterior.
2.1 Definición de los requerimientos del diseño
La vista frontal del teclado utilizado en este diseño se muestra en la Figura 2.
De las teclas admitidas, la implementación no contempla aquellos caracteres que para obtenerlos requieren que la tecla Alt Gr sea presionada previamente. La aplicación acepta con su funcionamiento normal el uso de las teclas Bloq Mayus, Backspace, Enter e Intro. También acepta las teclas Shft derecho, Shft izquierdo y Bloq Num pero no con su modo de operación normal.
En lo referente a las características de los caracteres al ser mostrados en el monitor VGA, son de un tamaño de 16x16 píxeles, de color negro y se muestran sobre un fondo blanco. Por otro lado, la resolución de la pantalla del monitor VGA utilizada es de 800x600 píxeles y la frecuencia máxima de operación para el diseño es de 50 MHz.
Con las especificaciones del diseño se procedió a puntualizar la idea general de cómo desarrollar la implementación, que fue básicamente la siguiente: guardar en la memoria SRAM de la tarjeta los datos, en formato hexadecimal, que representan a los caracteres admitidos por la aplicación, y crear un módulo que se encargue de leer los que corresponden a la tecla presionada, previamente identificada por su scancode, para luego escribirlos en el espacio de memoria destinado para almacenar la información a mostrar en el monitor VGA. De modo general, este proceso se presenta en la Figura 3.
La metodología utilizada para realizar el diseño fue la metodología top-down, ya que para lograr la aplicación planteada lo más conveniente fue dividir el diseño en componentes, cada uno de los cuales con una función específica, de forma tal que la interconexión de éstos constituyera el módulo de mayor jerarquía de la implementación. De esta manera, el diseño se separó en los siguientes bloques:
Un componente cuya función es obtener el código scancode de la tecla presionada.
Un componente cuya función es obtener la dirección de la memoria SRAM de la tarjeta XSV-800 a partir de la cual se encuentran los datos que representan al carácter de la tecla presionada.
Un componente cuya función es escribir la información del carácter de la tecla presionada en el área de la memoria SRAM que corresponde al monitor VGA.
Un componente cuya función es generar las señales que permitan visualizar en el monitor VGA los caracteres escritos con el teclado PS/2.
Un componente cuya función es generar automáticamente la señal de reset de entrada a los demás componentes.
2.2 Codificación del diseño
Una vez conocidas las especificaciones del diseño y la metodología a emplear, se procede a describir en lenguaje VHDL los componentes diseñados para construir la aplicación. Para esto se utilizó el software Webpack 4.1, iniciando por el módulo de mayor jerarquía y continuando con los de menor jerarquía.
En la Figura 4 se muestra el módulo principal del proceso y, por tanto, representa el top. Tiene por función interconectar los bloques que componen el diseño de modo de construir la aplicación. Teclado.vhd trabaja a la frecuencia máxima de operación de 50 MHz. El símbolo esquemático de este módulo se muestra en la Figura 4 y la explicación de los puertos de entrada y salida que lo definen se da a continuación.
Puertos de entrada:
clk: es la entrada del reloj principal de la tarjeta XSV-800.
ps2_clk: a través de este entra la señal de reloj del teclado de puerto PS/2 que tiene frecuencia de 10 kHz.
ps2_datos: esta entrada acepta los datos enviados serialmente desde el teclado de puerto PS/2.
Puertos de salida:
cs: señal de activación de la memoria SRAM de la tarjeta XSV-800.
oe: señal de activación de la memoria en modo de lectura.
we: señal de activación de la memoria en modo de escritura.
blankn: pulso de blanqueo dirigido al monitor VGA.
RDn: habilita la lectura de datos en la memoria interna de la RAMDAC y es activo en bajo. Siempre se mantiene en 1 pues para programar la RAMDAC no es necesario leer datos.
WRn: es activo en bajo y habilita la escritura de datos en la memoria interna de la RAMDAC para la programación de ésta.
hsync: pulso de sincronización horizontal del monitor VGA.
vsync: pulso de sincronización vertical del monitor VGA.
triste: señal para desactivar el puerto ethernet PHY de la tarjeta XSV-800.
pixelclk: señal de reloj de la RAMDAC.
banme_izq: deshabilita el banco izquierdo de memoria de la tarjeta XSV-800.
flash: deshabilita la memoria flash de la XSV-800.
p_cargado: indica que el programa esta cargado en la FPGA.
direccion(18:0): es la dirección, bien sea para la lectura o para la escritura, de la memoria SRAM de la tarjeta XSV-800. 0 es la posición menos significativa.
Puertos de entrada-salida:
datos(7:0): son los datos leídos desde la memoria o a escribir, correspondientes a la información de los píxeles de cada carácter a mostrar. 0 es la posición menos significativa.
RAMDACD(7:0): los datos de 8 bits son transferidos dentro y fuera de la RAMDAC sobre este bus bidireccional para la programación de ésta. 0 es la posición menos significativa.
RS(2:0): la combinación de los tres bits que lo conforman especifica a qué registro direcciona la interfaz MPU de la RAMDAC para la programación de ésta.
En la Figura 5 se muestran los bloques que forman a Teclado.vhd.
Adicionalmente al diseño anterior fue necesario desarrollar dos bloques que no forman parte del top del diseño Teclado.vhd. Grabar_sram_fondo.vhd que tiene por función grabar a partir de la dirección cero del banco derecho de la memoria SRAM de la tarjeta XSV-800 el fondo blanco sobre el que se ven los caracteres en la pantalla del monitor VGA y . Grabar_sram_letras.vhd que tiene como finalidad grabar a partir de la dirección 490.000 del mismo banco de memoria la lista que contiene los datos de los caracteres válidos para mostrar .Estos módulos operan a una frecuencia de 1 MHz la cual se obtiene a través de un divisor de la señal de reloj de 50 Mhz.
Además de crear los módulos Grabar_sram_fondo.vhd y Grabar_sram_letras.vhd fue necesario desarrollar en Labview 7 interfaces que proporcionarán comunicación entre la PC y la FPGA, de modo que junto con estos bloques se lograra grabar y leer el fondo blanco de la pantalla del monitor VGA y los caracteres en la memoria de la tarjeta XSV-800.
2.3 Simulación del código fuente
Luego de la codificación de los diseños realizados, el paso siguiente fue la simulación para corregir los errores funcionales antes de la implementación. Esta simulación se realizó a través del software Modelsim 5.7c con los vectores de prueba construidos utilizando la interfaz gráfica que para ello ofrece Webpack 4.1.
2.4 Síntesis, optimización y ajuste del diseño
Seguidamente a la simulación, se realizó la fase de conversión del lenguaje de descripción de hardware de los correspondientes módulos a lógica de compuertas, haciendo uso de la herramienta FPGA Express del software Foundation 4.1i. El éxito de esta conversión depende del modo de descripción del bloque.vhd. El software FPGA Express permite verificar si hubo errores en la síntesis del diseño y la lógica utilizada. Como resultado de este paso, luego del chequeo y corrección de las fallas encontradas, se obtuvo el archivo .edf.
Por otro lado, se creó el archivo .ucf que contiene la configuración de los pines asignados a los puertos de entrada y salida del módulo top del diseño. Los archivos .edf y .ucf se utilizaron para generar el archivo de programación .bit con la herramienta Design Manager de Foundation 4.1i.
2.5 Programación del dispositivo
El archivo .bit obtenido en la fase anterior fue cargado a la FPGA de la tarjeta XSV-800, con el software XSTOOLs 4.0, para su programación a través del puerto paralelo.
La programación del dispositivo constituye la última etapa del proceso, la de implementación, que es la que se repite en cada puesta en marcha de la aplicación. Para esta fase es necesario tener los siguientes materiales:
1 tarjeta XSV-800.
1 teclado de puerto PS/2.
1 monitor VGA de 15 pulgadas.
1 fuente de computadora ATX, es la más recomendada, o una fuente que suministre 9 VDC y al menos 1.5 A, con conector de 2.1 mm de diámetro y centro positivo.
1 PC con los softwares utilizados.
1 cable de puerto paralelo.
Archivo .bit del top del diseño.
Archivo .bit de Grabar_sram_fondo.vhd.
Archivo .bit de Grabar_sram_letras.vhd.
Archivo .txt con los caracteres en formato hexadecimal a grabar en la memoria de la tarjeta XSV-800.
Archivo .bmp con la imagen del fondo a mostrar en el monitor VGA.
Las interfaces Grabar_fondo.vi y Grabar a la sram.vi, y la función Grabar Sram.vi.
Los pasos para la implementación del diseño son:
Paso 1: Suministrarle energía a la tarjeta XSV-800.
Paso 2: Configurar el oscilador programable de la tarjeta XSV-800, con GXSSETCLK, para que su frecuencia de trabajo sea de 50 MHz.
Paso 3: Realizar un test a la tarjeta con GXSTEST para verificar su correcto funcionamiento.
Paso 4: Luego de superado el paso anterior, descargar a la tarjeta XSV-800 el archivo dwnldpar.svf para programar la CPLD que contiene.
Paso 5: Descargar a la tarjeta XSV-800 el archivo .bit de Grabar_sram_fondo.vhd.
Paso 6: Ejecutar la interfaz Grabar_fondo.vi para grabar en la memoria SRAM de la tarjeta el fondo a mostrar en la pantalla del monitor VGA.
Paso 7: Descargar a la tarjeta XSV-800 el archivo .bit de Grabar_sram_letras.vhd.
Paso 8: Ejecutar la interfaz Grabar a la sram.vi para grabar en la memoria SRAM de la tarjeta los caracteres a mostrar en el monitor VGA.
Paso 9: Descargar a la tarjeta XSV-800 el archivo .bit del top del diseño.
Paso 10: Conectar el teclado de puerto PS/2 y el monitor VGA a la tarjeta sin desconectar el cable que la comunica con la PC pues se desprogramaría la FPGA.
Paso 11: ¡Iniciar la escritura de caracteres con el teclado!
Los pasos 5 y 6 pueden intercambiarse con los pasos 7 y 8 sin problema, siempre que estos cuatro se realicen antes del paso 9, de no ser así se vería cualquier tipo de imagen en la pantalla del monitor VGA menos la esperada. La Figura 5 muestra los dispositivos conectados a la tarjeta XSV-800 en la etapa de implementación.
3. Resultados y discusión
El desarrollo de esta investigación trajo como resultado la implementación de una interfaz que permite manejar el puerto PS/2 y el VGA de la tarjeta XSV-800, a través de un teclado y un monitor. Esta interfaz admite la posibilidad de escribir caracteres desde el teclado y mostrarlos en el monitor VGA en tiempo real, usando como medio de comunicación entre ambos la XSV-800. En la Figura 6 se observa la implementación en funcionamiento junto con los equipos básicos por los que físicamente esta constituida, el teclado PS/2, el monitor VGA, la fuente de poder de 9 VDC y la tarjeta XSV-800.
En el desarrollo de la aplicación también se obtuvo como resultado dos interfaces entre la FPGA de la XSV-800 y la PC: Grabar_fondo.vi que permite grabar en la memoria SRAM de esta tarjeta el fondo blanco sobre el que se muestran los caracteres en el monitor VGA, y Grabar a la sram.vi que permite grabar en la memoria los caracteres a mostrar. Los paneles frontales de estas interfaces se muestran en las Figuras 7 y 8. Funcionan automáticamente con sólo presionar el botón Grabar fondo o Grabar los caracteres, según sea el caso, y elegir en la ventana de diálogo que aparece el archivo que contiene la información a guardar.
El desarrollo de esta investigación permitió comprobar que las tecnologías FPGA y el lenguaje VHDL constituyen unas herramientas de diseño versátiles y flexibles, permitiéndole al que las maneja realizar complejos diseños electrónicos en menor tiempo.
III.- CONCLUSIONES
1. Posterior al análisis del funcionamiento de los distintos dispositivos involucrados en este proyecto, como son el teclado PS/2, el monitor VGA y el puerto PS/2, los bancos de memoria SRAM, el puerto VGA y la RAMDAC de la tarjeta XSV-800, se consiguió diseñar los diversos módulos en VHDL que permitieron finalmente la implementación en el sistema de desarrollo XSV-800 de una interfaz que admite la posibilidad de escribir caracteres en un teclado de puerto PS/2 y mostrarlos en un monitor VGA en tiempo real, utilizando para el diseño las tecnologías FPGA y el lenguaje de descripción de hardware VHDL. De esta manera, se logró cumplir los objetivos trazados al inicio de esta investigación.
2. Adicionalmente, también se logró la implementación de dos interfaces entre la FPGA de la XSV-800 y la PC que permiten grabar datos en la memoria SRAM de esta tarjeta. La primera, Grabar_fondo.vi, permite grabar el fondo blanco sobre el que se muestran los caracteres en el monitor VGA, y la segunda, Grabar a la sram.vi, permite grabar los caracteres a mostrar.
3. A través de la aplicación realizada se pudo constatar que para una misma tecla existe diferencia entre el código scancode enviado por un teclado y el enviado por otro, lo cual depende de la marca del teclado, su lugar de fabricación y el número de teclas que éste contenga.
IV. BIBLIOGRAFÍA
1. Universidad de Zaragoza. (2000a). Circuitos lógicos programables. Disponible: http://eupt2.unizar.es/asignaturas/ittse/sistemas_electronicos_digitales/Cuatrimestre1/04tema/04teoria.pdf (Consulta: 2005, Septiembre 17). (Documento en línea) [ Links ]
2. Aguirre Echánove, M. Á., Noel Tombs, J. y Muñoz Chavero, F. (s.f.). Lenguajes de alto nivel para diseño de circuitos integrados digitales (Documento en línea). Disponible: http://www.gte.us.es/usr/aguirre/Apuntes.pdf (Consulta: 2005, Septiembre 17). [ Links ]
3. Boluda, J. A. (2004). Periféricos I: Controlador de pantalla VGA (Documento en línea). Disponible: http://mural.uv.es/justcal/AEC0405/p1/P1_AEC_04_05.pdf (Documento en línea) (Consulta: 2005, Mayo 20) [ Links ]
4. Brooktree Corporation. (1996). Bt481A Disponible: http://alaxy.uci.agh.edu.pl/~jamro/xsv/org/RamDAC.pdf (Consulta: 2005, Julio 12) [ Links ]
5. Chapweske, A. (2003). The PS/2 mouse/keyboard protocol (Documento en línea). Disponible: http://www.computer-engineering.org/ps2protocol (Consulta: 2005, Mayo 24) Escuela Politécnica Superior UAM. (2004). [ Links ]
6. Partis, A. y Peddersen, J. (2001). VHDL XSV board interface projects: VGA out (Documento en línea). Disponible: http://www.itee.uq.edu.au/~peters/xsvboard/index.html (Consulta: 2005, Mayo) [ Links ]
7. Torres Valle, F. J. (s.f.). Dispositivos lógicos programables [Documento en línea]. Universidad autónoma de Guadalajara Disponible: http://www.uag.mx/214/II_DISPOSITIVOS_LOGICOS_PROGRAMABLES.pdf (Consulta: 2005, Septiembre 17) [ Links ]
8. Universidad de Zaragoza. (1999). Lenguaje VHDL (Documento en línea). Disponible: http://eupt2.unizar.es/asignaturas/ittse/sistemas_electronicos_digitales/Cuatrimestre1/05tema/05anexo.pdf (Consulta: 2005, Septiembre 17) [ Links ]
9. Universidad de Zaragoza. (2000b). Diseño con PLD (Documento en línea). Disponible: http://eupt2.unizar.es/asignaturas/ittse/sistemas_electronicos_digitales/Cuatrimestre1/05tema/05teoria.pdf (Consulta: 2005, Septiembre 17) [ Links ]
10. Vanden Bout, D. (2004). VGA generador for the XSA boards (Documento en línea). Disponible: http://www.xess.com/appnotes/an-101204vgagen.pdf (Consulta: 2005, Mayo 19) [ Links ]
11. XESS Corporation. (2001). XSV board V1.1 manual (Documento en línea). Disponible: http://www.xess.com/manuals/xsv-manual-v1_1.pdf (Consulta: 2005, Julio 08) [ Links ]
12. XESS Corporation. (2005). XSV-800 Virtex prototyping board with 2.5V, 800,000-gate FPGA (Página Web en línea) Disponible: http://www.xess.com/prod014_4.php3 [ Links ]