Implementación en la FPGA Spartan 3E Starter Board a partir de MatLab y Simulink

=1. Instalación de Xilinx ISE® y MatLab=

En primer lugar se recomienda revisar en este link System Generator for DSP la compatibilidad entre las versiones de MatLab, Xilinx ISE, Windows o Linux. Es importante realizar la instalación de los dos programas en el mismo directorio, el cual no debe tener espacios (Por ejemplo C:\Archivos de programa no es un directorio válido). Todos los programas y el sistema operativo instalado deben ser el mismo tipo de sistema, todos de 32 bits o todos de 64 bits.

Posteriormente a la instalación se debe asociar la versión de MatLab con System Generator de Xilinx. En Windows se sigue la ruta Inicio > Todos los programas > Xilinx ISE Design Suite > System Generator > System Generator MATLAB Configurator y en la ventana emergente se escoge la versión de MatLab.

En el directorio C:\Xilinx/Version Xilinx ISE/ISE_DS/ISE/sysgen/help/pdf_doc se podrán encontrar las guias de uso del tool System Generator de Xilinx.

=2. Flujo de diseño con Xilinx System Generator=

1. Elaboración del diagrama de bloques en Simulink
El tool System Generator funciona dentro del entorno de programación visual Simulink, dentro de la librería Xilinx Blockset se pueden encontrar los bloques propios del diseño en hardware como contadores, acumuladores, sumadores etc. Estos bloques también pueden conectarse con bloques propios de Simulink para efectos de simulación del sistema diseñado. Para separar los elementos de Simulink y los elementos del System Generator de utilizan gateways de entrada y salida, en otras palabras, estos puertos delimitarán las entradas y las salidas de la caja negra que encierra todo el sistema, el grupo de componentes que serán sintetizados en HDL.

A través del bloque de Simulink MCode se pueden agregar funciones de MatLab. El lenguaje empleado por MatLab es un lenguaje interpretado de alto nivel que admite ejecución de script, es decir empleando ficheros .m. Sin embargo, al emplear el System Generator de Xilinx las funciones y comandos que normalmente se utilizarían en la programación por medio de estos ficheros se limitan. En el siguiente link Funciones permitidas para ficheros .m se pueden encontrar las funciones y tipo de variables permitidas al usar el tool. Es importante mencionar que la herramienta unicamente admite variables de punto fijo definidas como xfix.

2. Generación de archivos en HDL
Una vez se ha diseñado el conjunto de bloques y realizado las respectivas simulaciones, se procede a generar el Proyecto (conjunto de archivos) que podrá ser abierto en Xilinx ISE. Para esto se coloca el bloque System Generator dentro del archivo de Simulink (símbolo de Xilinx), esta acción debe hacerse al inicio del diseño. En este bloque se escoge el dispositivo programable en este caso, FPGA Spartan 3E Starter Board (XC3S500E -4 FG320C), se configura el pin del reloj, se elige crear un Test bench y se escoge el periodo en ns del reloj, este periodo pasa a la implementación de Xilinx por medio del archivo UCF.



Para generar el conjunto de archivos en HDL se oprime Apply y posteriormente Generate. En la carpeta C:\Xilinx/Version Xilinx ISE/ISE_DS/ISE/sysgen/examples/mcode_block/netlist se encuentra el Proyecto para abrir en ISE.

Es posible que el tool presente el siguiente error cuando se compila:

"Error reported by S-function 'sysgen' in ' nombre del archivo ': An internal error occurred in the Xilinx Blockset Library"

En este caso se recomienda tomar una o varias de las acciones presentadas en este link An internal error occurred in the Xilinx Blockset Library según sea el caso.

3. Creación de archivo UCF y Test bench
El archivo UCF generado solo contiene la asignación del pin para el reloj, es necesario por tanto asignar las entradas y salidas del sistema. El nombre de estas variables es el mismo que se otorgó en el archivo en Simulink. Dentro del Proyecto tambien se encuentra el Test bench generado en MatLab, con las mismas condiciones de simulación asignadas en Simulink.

4. Implementación del diseño y generación de archivo .bit
Por último se implementa el diseño y se obtiene el archivo de programación .bit, como se haría de manera regular en Xilinx ISE.

=3. Ejemplo: Compuerta XOR=

A continuación se muestra la función de MatLab que se implementó dentro del bloque MCode, para una compuerta XOR:

function a = selector_prueba(x, y) if x == y   a = 0; else a = 1; end

El diseño en bloques se muestra en la figura a continuación:



En la figura de la izquierda se muestra el bloque MCode con sus respectivas salidas y entradas, este bloque se encuentra dentro del bloque xor de la figura de la derecha, en esta imagen se observan los gateways(en amarillo) que delimitan los componentes de Xilinx de los de Simulink. Los archivos del proyecto generado se muestran en la imagen a continuación: