Está en la página 1de 16

UNIVERSIDAD YACAMB VICE-RECTORADO ACADMICO FACULTAD DE INGENIERA

JHDL (Just-Another Hardware Description Language).

Autores: Gustavo Majano Osiel Cordones

Cabudare, noviembre de 2013

Introduccin Lo que se ha visto de plataformas de desarrollo de hardware/software hasta ahora es la utilizacin de micro-controladores y en particular la serie PIC16 de la compaa Microchip, pero este campo existen muchas herramientas que permiten realizar los mismos trabajos e incluso en algunos casos permite un mayor manejo de perifricos y la creacin aplicaciones con mayor paralelismo. Una de estas plataformas son los FPGA (del ingls Field Programmable Gate Array) los cuales son actualmente muy utilizados en aplicaciones mdicas, de procesamiento digital de seales, bioinformtica, entre otros. Como toda plataforma de desarrollo, los FPGA tienen varias de maneras para programarlos, uno de ellos es JHDL (del ingls: Just-Another Hardware Description Language) el cual ofrece un entorno de programacin basado en Java, lo que facilita en gran medida el desarrollo en esta plataforma debido a que este es un lenguaje bastante familiar en el rea de programacin.

JHDL (Just-Another Hardware Description Language) (En espaol SoloOtro Lenguaje de Descripcin de Hardware): es Lenguaje de Descripcin de Hardware (HDL) de bajo nivel, enfocado en crear circuitos utilizando la programacin Orientada a Objetos, donde las colecciones de paquetes de compuertas lgicas son objetos en Java. Se implementa como una caja de herramientas y libreras bajo el lenguaje de programacin Java, su uso principal es para el diseo de circuitos digitales para la implementacin de Arreglos de Compuertas Programables en Ejecucin (FPGA). Este lenguaje prestaba particularmente atencin a los chips de la compaa Xilinx. Cuando el diseo ya est finalizado, el desarrollador crea un archivo con el formato .EDIF (Electronic Desing Interchange Format) y lo importa a su herramienta de desarrollo deseada. Luego se transfiere usando un cable tipo JTAG (Joint Test Action Group) hacia el Arreglo de Compuertas Programables en Ejecucin, algunos FPGA que soportan este formato son XC4000, Virtex y Virtex-II de la compaa Xilinx. JHDL fue desarrollado por BYU (Brigham Young University) en el Laboratorio de Computacin Configurable, el proyecto inicio en 1997 y su ltima actualizacin fue en Mayo de 2006. El JHDL incluye herramientas para la depuracin y modelado de circuitos, simulaciones mediante software y permite hacer cambios al programa durante la ejecucin del hardware. Todas las herramientas tradicionales de FPGA presentan mtodos para el diseo del circuito de la estructura. Algunos de estos tambin permiten al usuario ejecutar el esquemtico del circuito pero deben ser diseados en otras herramientas no integradas. Pero casi ninguna herramienta provee una manera natural para la comunicacin entre la ejecucin del software y la ejecucin del hardware de la mquina. Este es un problema a considerar ya que los sistemas basados en FPGA operan en conjunto tanto software como hardware y eso debe ser capaz de simularse para asegurar que el diseo realizado funciona como es deseado.

Informacin general del diseo y el sistema JHDL La coleccin de libreras de JHDL provee la base para el diseo. Estas libreras contienen a lo mnimo las clases Java que representan primitivamente los elementos del circuito. Encima de estas libreras hay otras que contienen subrutinas para generar circuitos de alto nivel. Una vez que el programa en Java fue escrito y compilado este se puede ejecutar. El resultado es una estructura de datos en memoria que representan la construccin del circuito en formas de grficas, en los cuales los nodos representan los elementos del circuito y cableado. Luego que la estructura de los datos se construy, varias herramientas del tipo CAD (Computer-Aided Design) pueden ser utilizadas para lograr la simulacin, descripcin del circuito, y otras actividades. Es de inters que las herramientas pueden ser usadas para modificar los datos del circuito JHDL antes de la descripcin del circuito o simulacin. Figura 1.

Diseo utilizando el lenguaje JHDL JHDL usa dos mecanismos para crear la ilusin de que es un lenguaje para diseo de circuitos personalizado. Las clases predefinidas que vienen del JHDL representan elementos primitivos tales como compuertas lgicas y cables, por ende la manera para disear es simplemente el crear instancias usando el comando de construccin new de Java. Luego de esto, la ejecucin de funciones provee una abstraccin de mayor nivel, lo que permite al diseador llamar funciones parametrizables que construyen el circuito deseado a con los objetos primitivos. Para esto se ha descrito el proceso en diferentes niveles: Nivel 1. Instanciacin Primitiva Se trabaja con un paquete de clases de Java donde cada clase corresponde a un circuito primitivo (ej. AND, OR). Teniendo en cuenta que dicha librera es el nivel ms bajo de diseo en JHDL este es instanciado usando la llamada new. En el Ejemplo 1 se muestra un diseo usando instancias primitivas. Las primeras dos lneas se utilizan para importar las libreras de JHDL que son necesarias para todos los diseos. La tercera importacin se usa para llamar las libreras que manejan la construccin del diseo usando el hardware Xilinx Virtex. La clase mux es declarada por la subclase (que extiende) de la clase lgica de JHDL. Los puertos de interface (las llamadas entradas y salidas de la celda) son declarados usando el mecanismo CellInterface donde, por ejemplo, in (sel,1) declara un puerto de entrada, llamado sel y de valor 1 y out (q,1) declara un puerto de salida llamado q que tambin es de valor 1. Ejem 1. Multiplexado

La declaracin del constructor para la clase mux es lo que sigue a continuacin. Este constructor es un mtodo estndar de Java que puede ser llamado para construir una nueva instancia de mux. El uso de connect ( ) permite asociar un cable a un puerto especifico; por ejemplo el cable parmetro w est asociado (conectado) con el puerto a. La seccin final del constructor, instancia los cables y las puertas necesarias para implementar la multiplexacin lgica usando la llamada en Java new Los objetos creados para construir el circuito son implementados por las clases de Java desde el paquete byucc.jhdl.Xilinx.Virtex y representa los cables y las compuertas lgicas. El problema de usar las instanciaciones primitivas es que el diseo resultante es especfico a una librera primitiva particular (contenido en el paquete byucc.jhdl.Xilinx.Virtex). El disear de esta manera limita la portabilidad del diseo entre tecnologas, inclusive cuando estn basados en las construcciones de bloques tan simples como compuertas Booleanas individuales. Otro problema con este estilo de diseo es que fue escrito especficamente para una multiplexacin que tiene una entrada y salida de un bit. Las Clases Lgicas son capaces de solventar estas limitaciones. Continuacin del Ejemplo 1:

Nivel 2. Usando la Clase Lgica (Logic) y los mtodos proporcionados La clase Logic consiste en una larga coleccin de subrutinas que pueden ser llamadas para crear una lgica de usuario. En el Ejemplo 2 se muestra el mismo diseo anterior del Ejemplo 1 escrito usando el mtodo de las clases Logic. La diferencia entre este y el diseo anterior esta al final del constructor y no en la instanciacin primitiva, esta versin usa el mtodo de llamadas para construir el circuito MUX. Estos mtodos son variables para nuestro uso porque la clase mux extiende la clase predefinida Logic. En el Ejemplo 2, los cambios del ejemplo anterior son subrayados para mostrar como el cdigo de construccin ha sido cambiado. Ejemplo 2:

Usando and (a,b) se llama a byucc.jhdl.Logic.and(a,b), la cual es una subrutina que construye la compuerta lgica AND y retorna una referencia (indicador) a la salida del cable. Este cable tambin puede ser usado como una entrada con la llamada or_o ( ) la cual crea una compuerta OR de 2 entradas. (Cabe notar que algunas llamadas tienen un sufijo, esto se hace para evitar tener que declarar construir cables intermedios entre compuertas). Adems de reducir la cantidad de instrucciones, el usar mtodos (subrutinas) crear compuertas OR con la cantidad de entradas deseadas. La subrutina or ( ) permite manejar pedidos de compuertas OR de desde 2 entradas y salidas de 1 bit hasta compuertas OR de 8 entradas con entradas y salidas de 32bits. La clase Logic contiene otros mtodos para construir compuertas, cables, registros, memorias, multiplexores, sumadores, sustractores, shifters, as como otros mtodos para manejar cables: concatenacin, cortes, etc. La instanciacin primitiva es utilizada solamente para usar caractersticas particulares del hardware tales como controladores de relojes y memorias, para todo lo dems la clase logic es una herramienta que facilita en gran medida la programacin. Nivel 3. Generacin de Circuitos Programticos (Generador de mdulos) La creacin de Generadores de Circuitos Programticos es una extensin natural de las tcnicas utilizadas por la clase Logic. Esto son subrutinas de Java que inteligentemente crea mdulos de hardware basados en parmetros suministrados en el momento y que pueden ser creados por cualquier usuario de JHDL. Un ejemplo de esto es el Ejemplo 3:

Ejemplo 3. Sumador de n-bits

Este programa es un sumador de n-bits que programticamente construye un sumador de varios bit usando un sumador de celdas previamente diseado (no mostrado). En la declaracin CellInterface, la primera lnea, param (n, INTEGER), declara un parmetro n del tipo INTEGER. Para ms precisin, n es declarado para ser una instancia de Java como clase INTEGER.

Todas las declaraciones de puertos en el CellInterface usa un n o n+1 como su valor. Cuando NBitAdder es construido, la llamada bind ( ) verificara el valor de n para el cable a. Basado en esta informacin, la llamada connect () verificara que los cables que pasan por el constructor son del valor correcto, Finalmente el cuerpo del acarreador ser construido usando el ciclo for de Java que creara y se interconectara con las celdas de FullAdder. La llamada final buf_o ( ) conecta el bit acarreador con el bit ms significativo de la suma.

Sistema CAD (Computer-Aided Design) para JHDL Como ya se haba explicado antes, la ejecucin de un diseo compilado de JHDL crea una representacin estructural en memoria del circuito. Esta representacin grfica del circuito est representada por los objetos en Java. Utilizando la API (Application Program Interface) se puede realizar una simulacin y manipular la estructura de los datos durante su ejecucin. Como el diseo en JHDL se basa en la programacin en Java, este necesita una rutina main ( ). Esta rutina es la que usualmente trabaja como herramienta de prueba para los diseos de JHDL. En el Ejemplo 4 se puede ver como la rutina main ( ) funciona. La mayora de las herramientas de prueba para JHDL hacen 3 cosas principalmente: Primero, crea un objeto HWSystem que es el objeto que contiene los circuitos y la lista de componentes del simulador. El diseo entero existe como un nodo resultante del HWSystem. Segundo, se crea el objeto de herramienta de prueba (testbench).Tercero, una vez que la data de la estructura del circuito ha sido creado, la rutina main ( ) puede hacer una de las siguientes opciones: (1) empezar una simulacin por lotes, (2) llamar la lista de componentes del diseo, o (3) crear una interface GUI (Graphic User Interface) que habilita al usuario a interactuar con el circuito. En el Ejemplo 4 la rutina main ( ) inicia el cvt, el cual es un entorno grafico para ver el circuito, la simulacin y la lista de componentes.

Ejemplo 4. Ejemplo de una herramienta de pruebas (testbench) en JHDL

La clase cvt La clase cvt es un sistema GUI (Graphic User Interface) con aplicaciones para navegar por la jerarqua del diseo, comenzar la simulacin del circuito, generar lista de componentes del circuito, etc. Las clases simulacin y las listas de componentes son accesadas por medio de la clase HWSystem, cvt hace la llamada a la clase HWSystem para satisfacer los requerimientos del usuario. La clase cvt implementa un sistema GUI basados en eventos llamado Swing, que es distribuido como parte del lenguaje JHDL. Swing fue elegido por la portabilidad y la disponibilidad en todas las plataformas. La clase cvt usa el sistema Swing como un sistema de eventos para su propia comunicacin interna. En la Figura 1 se muestra una captura de pantalla del GUI cvt. En la parte superior izquierda de la ventana de consola de texto donde los comandos pueden ser introducidos. Los mens y botones de abajo pueden ser accesados desde la ventana. Abajo de la consola esta la jerarqua de las herramientas de navegacin. A la izquierda est la jerarqua de bsqueda; en la derecha est la lista de puertos de la celda seleccionada actualmente junto a los valores actuales (si se est simulando en el momento). Debajo del buscador esta un visualizador de forma de onda; y en la parte inferior izquierda de la mitad de la figura esta dos maneras de visualizar el esquemtico. Esta imagen muestra que varias partes del GUI contienen una sola cara pero cada una puede ser separada en ventanas individuales si es deseado. A diferencia de la mayora de las herramientas CAD, no existe un sistema JHDL CAD estndar. Ms bien, la estructura API (Application Programming Interface) de los datos del circuito provee un mecanismo para que cualquier usuario pueda escribirlo e interactuar con el circuito.

Figura 1.

Modo hardware de JHDL JHDL soporta depuracin del hardware en corrida, a esto se le llama modo hardware. El modo hardware es basado en la observacin de cuanta data se crea cuando el circuito JHDL es construido y simulado. El simulador es usado para computar el estado esttico de todos los nodos combinacionales en el circuito como una funcin de estos valores, y una completa ejecucin de hardware est presente en la estructura de los datos del circuito JHDL. Como resultado, cvt puede consultar y mostrar estos estados del circuito tal y como si se estuviese simulando. En este caso, sin embargo, las pantallas de los valores del hardware seran las reales y no simuladas. El modo hardware de JHDL es fcilmente adoptado por las plataformas nuevas de hardware debido a los mtodos programticos que existen para comunicarse con la tarjeta. Las siguientes capacidades requieren ser fijadas:

Configuracin: Esto es necesario para configurar el hardware de los FPGA (Field Programmable Gate Array) con respecto a la velocidad de los datos. Control de Reloj: una o ms subrutinas son requeridas para para una tarjeta de un reloj simple o de multi-pasos. Lectura de data guardada: Esto es necesario para leer los estados de los FPGA de la tarjeta.

Dada esta capacidad, el JHDL puede ser fcilmente ampliado para comunicar con otras tarjetas operacin de modo hardware. Esto es llevado a cabo modificando el cdigo Java para que los mtodos estndar de JHDL puedan comunicarse con cualquier dispositivo que base su programacin en C.

Conclusin El JHDL es una herramienta que brinda la oportunidad para trabajar con los FPGA utilizando un entorno familiar como es el lenguaje Java. Adems ofrece la capacidad de simular tanto el hardware como el software en un solo sistema, lo que evitara el estar trabajando con varios programas para probar y as verificar la correcta ejecucin de nuestro programa tanto en hardware como en software. El nico inconveniente que posee este lenguaje es que se est restringido solamente a los chips XC4000, Virtex y Virtex-II de la compaa Xilinx los cuales ya dejaron de fabricarse hace ya mucho tiempo, por lo que la compaa en la actualidad no ofrece soporte. La interfaz grfica cvt podra servir para la visualizacin del hardware durante la ejecucin pero no se podra hacer modificaciones al mismo, adems de que algunas caractersticas internas de la arquitectura de hardware se perderan por la limitante de que JHDL est hecha para una serie especifica de chips. Para resolver este problema la IEEE creo VHDL (que es la unin de dos acrnimos: VHSIC es el acrnimo de Very High Speed Integrated Circuit y HDL es a su vez el acrnimo de Hardware Description Language.) el cual es muy utilizado con los equipos actuales de FPGA.

Referencias bibliogrficas

S. Hauck y A. DeHon. Reconfigurable Computing: The Theory And Practice Of FPGA-Based Computation. 2008. Cap. 12 http://www.jhdl.org - Pgina de soporte para JHDL hecha por la BYU. http://en.wikipedia.org/wiki/JHDL - Pgina de la enciclopedia Wikipedia sobre JHDL.