Buscar este blog

jueves, 20 de noviembre de 2014

Interfaz Handel-C con Xilinx CoreGen

  • Introducción.

La utilidad de Xilinx CoreGen contiene muchos diseños que a menudo puede ahorrar tiempo para un programador que buscan implementar una determinada función de registro como multiplicadores, sumadores, los controladores de SDRAM, y así sucesivamente. En este apartado se describe, paso a paso, cómo integrar los bloques de Xilinx CoreGen con un programa en Handel-C utilizando como ejemplo un multiplicador core de punto flotante.

  • Prerrequisitos.

Ø  Xilinx Design Tools ISE Suite 14.7
Ø  DK Desing suite  5.0 SP5
Ø  Synplify Pro H-2013.03
Ø  Tarjeta Spartan 3AN (XC3S700AN)

  • Operación Coregen

Iniciar Core generator:
inicio/programas/Xilinx Design Tools/ISE desing suite 14.7/ISE Design Tools/32-bit Tools


  • Hacer un nuevo proyecto en FILE/New Project
  Características del dispositivo FPGA


opciones de generación de bus format VHDL 


·         Seleccion Floating-point 5.0 (multiply)
·         Precisión single

·         Usar MULT18x18 Full usage
·         Seleccionar RDY en Handshaking signals
·         Clic en Generate


  • Creando la interfaz en Handel-C


En el siguiente código se muestra como crear la interface entre la IP core de la multiplicación de punto flotante generada por Coregen y Handel-C:


set clock = external "E12"; // 50 Mhz
unsigned 32 n;
unsigned 32 m;
interface floating_point_v5_0(unsigned 1 rdy, unsigned 32 result)
floating_point_v5_0(unsigned 32 a = n, unsigned 32 b = m, unsigned 1 clk =__clock) with {busformat="B<I>"};
void main(void)
{  
    unsigned 32 c;
   par
   {
       n=0x4091EB85;  // 4.56  formato IEEE 754     (31)Sign   (30-23)Exponent   (22-0)Mantissa http://www.zator.com/Cpp/E2_2_4a1.htm
       m=0xC22ECCCC;  // -43.7
   }
   while(!floating_point_v5_0.rdy){delay;}
    c = floating_point_v5_0.result; // c = a*b = -199.272  c = C34745A1  ok  :)
}


Hay que tener cuidado en la declaración de la interfaz ya que especifica explícitamente el formato de bus y que debe ser igual al generado por coregen de xilinx. Las salidas de bus de Handel-C por default es un formato no reconocido.

·         interface floating_point_v5_0(unsigned 1 rdy, unsigned 32 result) à Crea un tipo de celda llamada floating_point_v5_0 con dos puertos de salida de anchura de 1 bits y 32 bits respectivamente.
·         floating_point_v5_0(unsigned 32 a = n, unsigned 32 b = m, unsigned 1 clk =__clock) à Crea un identificador definido por el usuario con 3 entradas a, b de 32 bits y clk de un  bit, este último se le asigna al reloj global del sistema que son los 50 mhz.
·         with {busformat="B<I>"}; à La definición del busformat define el formato de los nombre de la interfaz y esta debe ser igual que los especificados y generados por Coregen.


Propiedades de DK design suite


  • Síntesis e implementación Xilinx

Ø  Crear un nuevo proyecto en ISE de Xilinx para la tarjeta spartan 3AN
Ø  Especificar como herramienta de síntesis a synplify pro
Ø  Buscar en la carpeta de proyecto de coregen el archivo creado floating_point_v5_0.NGC y copiarlo a la carpeta de proyecto de xilinx.
Ø  Agregar la librería agility.vhd y los códigos vhdl generados por Handel-C.
Ø  Programar la tarjeta spartan 3AN vía iMPACT 

Configuración en Xilinx

Librería y códigos VHDL agregados


Resultado de la síntesis del proyecto


Multiplicación corriendo en la Spartan 3AN




No hay comentarios.:

Publicar un comentario