- 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