Mostrando entradas con la etiqueta DSP. Mostrar todas las entradas
Mostrando entradas con la etiqueta DSP. Mostrar todas las entradas

jueves, 19 de enero de 2012

Problemas con System Generator / Simulink - 2

Problema 2 - Importando Múltiples Sistemas generados por SysGen en un modulo top en ISE


Cuando se trabaja con sistemas complejos puede suceder que se genere el sistema Simulink-SysGen para cada uno de ellos, y luego en el ambiente ISE escribir el modulo (entity-architectura) que interconecta los diferentes sistemas. Teóricamente este proceso debería hacerse sin problemas, sin embargo HAY PROBLEMAS no documentados, q llevaron largas horas de debug  hasta encontrar primero la fuente del problema y luego la solución. 
El siguiente gráfico detalla los distintos archivos y flujo de síntesis en el caso de que múltiples sistemas generados por separado por System Generator desean ser integrados en un solo modulo de mas alto nivel. 




System Generator crea un archivo de proyecto con la extensión .sgp que puede agregarse como una fuente a Project Navigator en el ISE. Este archivo contiene toda la información necesaria sobre el diseño en System Generator.
Sin embargo, cuando se realiza un diseño jerárquico teniendo dos o más diseños de System Generator como componentes del modulo de mayor jerarquía, se deben renombrar las librerías HDL (autmaticamente generadas por System Generator) para evitar conflictos de nombres y otros comportamientos no deseados durante la simulación. 
System Generator tiene un comando que cambia los nombres de la librería para todos los archivos relacionados en el diseño de un proyecto de System Generator. Además, también hace una copia de seguridad en el caso de que se quiera recuperar el nombre de la biblioteca original. La siguiente es la sintaxis de este comando:

XLSWITCHLIBRARY (target_dir, FROM_LIB, TO_LIB)

Reemplaza todas las bibliotecas HDL referidas como FROM_LIB con TO_LIB en un diseño de System Generator ubicado en la carpeta target_dir.
Importante: este comando se debe ejecutar desde la consola de Matlab.


Modo de Uso 
Suponiendo que se tienen dos proyectos de System Generator cuyos nombres son 'delay_bram' y 'eco_bram', la ejecución del comando XLSWITCHLIBRARY para el cambio del nombre de la librería 'work' (nombre dado por defecto por SysGen) a otro nombre (dado por el usuario) se detalla a continuación: 



Una ejecutado este comando, los sistemas generados por SysGen pueden ser usados como componentes en ISE sin tener problemas.

PD: de nuevo gracias a Layla y Esteban por este aporte. 

miércoles, 30 de noviembre de 2011

Problemas con System Generator / Simulink - 1

Hace poco terminé de dictar uno de mis cursos favoritos basado en el flujo de diseño DSP/FPGA. El curso tuvo mucho éxito, pero como siempre que se implementa algo surgen problemas que solo aparecen cuando uno hace algo.... la teoría es muy linda hasta que  se tiene que implementar.... :) . . . 

Uno de los grupos de alumnos, Layla y Esteban, tuvieron problemas que no estaban documentados por ningún lado, y a fin de que Uds. no gasten tanto tiempo como ellos en encontrar soluciones, decidieron compartir problemas con soluciones. 

Problema 1- Error Debido a la Configuración de Idiomas de la PC
Dentro de un bloque Simulink cuando se le asigna una constante expresada en decimal a un bloque 'CMult' de System Generator, y luego al querer simular el sistema aparece un error relacionado al bloque pero cuyo mensaje es bastante encriptado.... 




Seguramente este mensaje de error es generado porque existe un problema de 'mal entendimiento' en la representación de números decimales: System Generator lo representa de un modo diferente al modo representado por el sistema operativo de la PC. Esto es muy común que nos pase a los que tenemos la PC configurada para el idioma español. Por defecto el número decimal, en todas las opciones del español, se representa con una coma. Mientras que System Generator lo representa con un punto. entonces !, existe una incongruencia que el compilador no sabe que hacer y genera el mensaje de error encriptado. En el ejemplo mostrado en la figura arriba el error se genera por querer asignar un valor de 2,3 a CMult. Si en su lugar se asigna 2.3  no existe ningún error. 

Solución
Cambiar la configuración regional de su PC a Inglés: Panel de Control -> Opciones Regionales y Lenguaje.

miércoles, 10 de agosto de 2011

System Generator: Co-Simulación en Hardware

La idea de este blog es presentar los pasos necesarios para llevar a cabo la Co-Simulación en Hardware (CSH) de un sistema construido en Simulink usando los bloques del Xilinx Blockset. La teoría detrás de todo esto está bastante detallada en los documentos provistos por Xilinx, así es que no abarcaré la misma. 
Qué es CSH? 
Es una herramienta disponible en el ambiente de desarrollo Simulink/System Generator que permite co-simular en hardware lo que se simula en software. Veamos que significa esto: En primer lugar cuando uno trabaja en el entorno Simulink/System Generator los sistemas que se construyen son simulados en ese mismo entorno, es decir TODO se realiza en software. Sin embargo se puede fácilmente construir el hardware equivalente de ese sistema (construido en software), configurar el FPGA respectivo, y simular en hardware lo mismo que se simular en software e incluso al mismo tiempo. Por eso, este proceso es justamente llamado 'Co-Simulación', porque se simulan ambos sistemas, hardware y software, al mismo tiempo. 
Pasos a seguir:

Paso 1:
Sigue los pasos que normalmente ejecutas para construir tu sistema en Simulink. A modo de ejemplo, supongamos que ya he construido el siguiente sistema y lo quiero co-simular. 




Paso 2:
Compilar el sistema para CSH: abrir el bloque 'System Generator', y en 'Compilation' seleccioná 'Hardware Co-Simulation'. Aparecerá un menú de los boards que por defecto trae instalado System Generator, tal como se muestra en la siguiente figura. 




En este paso debes, cuidadosamente, seleccionar el board que va ser usado para la co-simulación, y a su vez que tipo de conexión usarás para comunicar el board (JTAG o Ethernet) con la PC. En caso de que el board no aparezca dentro del listado de los boards que vienen por defecto, deberás seguir todo un procedimiento para agregar el board a la lista de boards disponibles. Este procedimiento ya lo expliqué en un blog anterior "Como agregar el XUPV5 board para Co-Simulación en Hardware".
Como voy a usar el XUPV5 para la Co-Simulación, y además como ya seguí los pasos del blog mencionado anteriormente (que buen blog !!! :) ), selecciono XUPV5 JTAG para la compilación del sistema. 






Paso 3:
Presionar 'Generate' para comenzar la 'Compilación del Sistema'. Qué genera 'Generate'? 
  • El hardware asociado con el sistema en Simulink
  • La interface física para la comunicación entre la PC y el board XUPV5.
Si una presiona la opción 'Show Details' de la ventana de compilación, se puede ver los diferentes pasos que se ejecutan durante 'Generate'. En sí lo que se ejecuta es un script que invoca todas las herramientas del ISE necesarias para llegar finalmente al archivo de configuración del FPGA. Es decir herramientas como XST, Translate, MAP, P&R, TRACE, y BitGen. 


Paso 4:
Terminada la compilación System Generator crea un nuevo bloque. Este bloque es la versión 'hardware' del sistema en Simulink (versión software). 
Este bloque hardware se usará en el sistema que se desea co-simular. Debes copiar y pegar este bloque tal como muestra la siguiente figura. 


Este bloque se usa igual que cualquier otro bloque del sistema, es decir se pueden excitar sus entradas y leer sus salidas. Durante la co-simulación el bloque CSH interactúa con el board para:
  • Configurar el FPGA
  • Control del reloj del board.
  • Transmisión y Recepción de datos a y desde el FPGA por medio del cable JTAG
Este bloque tiene unos parámetros de configuración que es conveniente modificarlos tal como se detalla en el siguiente paso. 



Paso 5:
Abrí el bloque CSH, comúnmente llamado 'JTAG Cosim', presionando dos veces el mouse sobre el bloque. La ventana de configuración del bloque aparecerá tal como se muestra a continuación. 


Dejar las opciones que por defectos son mostradas. 
En la opción de 'Cable' usá la siguiente configuración: 
  • Type: Xilinx Platform USB (o el tipo de cable que usa para la conexión PC-Board).
  • Speed: 1.5MHz


Si durante este paso el board está conectado, puedes usar la opción 'Blink Cable LED' para comprobar si la conexión PC-Board es correcta. 

Paso 6:
Volviendo al sistema en Simulink, conectá la(s) entrada(s) del bloque CSH o JTAG Cosim, a lo(s) mismo(s) estímulos usados para los otros bloques. La salida conéctela a un 'Sink' similar al usado para el sistema, facilitando así la comparación. Debajo puede observar el sistema que he completado en este paso. 


Paso 7:
Verificá que el board esté conectado a la PC por medio del cable oportunamente seleccionado en la configuración del bloque JTAG Cosim (Paso 5), y que el board esté encendido.
Ejecutá  la simulación como siempre lo haces.
Los dos sistemas son simulados al mismo tiempo, y como 'teóricamente' son los mismos sistemas, uno en software y otro en hardware, las formas de ondas vistas en los bloques 'Sink' deberían ser las mismas tal como se muestra en la siguiente figura. 



Si has llegado a este punto solo leyéndo,.... bueno es hora de 'meterle manos' al hardware y animarte a hacer una Co-Simulación... eso sí, me contas como salió todo ! :) ... 

Hasta la próxima...


Version .pdf del blog? presiona acá :) 

Como agregar el XUPV5 board para Co-Simulación en Hardware con System Generator/Simulink

Co-Simulación en Hardware (Hardware Co_Simulation) es una poderosa herramienta en el ambiente de desarrollo Simulink-System Generator. Permite al diseñador simular en 'paralelo' en real-hardware, lo mismo que se simula en software usando los bloques de SysGen. 
Cando uno installa la version full de ISE, al instalar System Generator por defecto se instalan lo que se llaman 'plug-in' de los boards DSP de Xilinx. Sin embargo, dado que el XUPV5 board no es considerado un 'board DSP' no aparece en la lista de opciones de los boards para llevar a cabo co-simulation. Si aparece el ML505 board, que CASI igual que el XUPV5, pero con una 'pequeña' diferencia: el ML505 tiene un Virtex 5 XC5VLX50T, mientras que el XUPV5 tiene un XC5VLX110T. Pequeña gran diferencia que hace que NO se pueda usar el plug-in del board ML505 para el board XUPV5. Entonces... cual es la salida/solución si uno tiene el XUPV5 y quiere hacer Co-Simulación?????? 

Agregando el XUPV5 a la Lista de Boards de Co-Simulación
Paso 1:
Una vez abierto Simulink y abriendo colocado el bloque 'System Generator' en un diseño cualquiera, abrir el bloque 'System Generator' (doble click sobre el bloque). La ventana de configuración del bloque 'SysGen' aparecerá. Seleccione en 'Compilation' la opción 'Hardware Co-Simulation', y luego en el menú siguiente seleccione 'New Compilation Target'. 




Paso 2:
La ventana 'System Generator Board Description Builder' se abrirá. 




En esta ventana hay varios elementos a configurar. 
Paso 3: 
'Target Board Identification': Board Name: puede usarse cualquier nombre. Convenientemente use uno que facilite la identificación del board. Por ejemplo, XUPV5.
Paso 4:
'System Clock': 1- Frequency(MHZ): escribir la frecuencia del reloj del board que se usará normalmente como fuente de reloj para el FPGA. El oscilador de entrada al LX110T es de 100MHz. 2- Pin Location: el pin de E/S por el cual entra el oscilador el FPGA: AH15.
Paso 5:
'JTAG Options': por defecto la comunicación entre el board y el PC es hara usando JTAG. Hay otra opción que es la de usar Ethernet, pero como la configuración es mas complicada explicare ahora la de JTAG, después, de acuerdo a los pedidos, puedo explicar la de Ethernet. Las opciones de la configuración JTAG son: 1- Boundary Scan Position: esta es la posición del FPGA en la cadena JTAG de dispositivos en el board. El valor a introducir acá es 5, es decir es el quinto dispositivo de la cadena. Usando iMPACT es posible 'ver' la cadena y deducir la posición del FPGA. 2- IR Length: este es un parámetro necesario para la comunicación a través de JTAG. Si está el board conectado a su PC/Laptop por medio del cable JTAG, presione 'Detect' para que automáticamente se invoque iMPACT y llene los datos requeridos. Sino tiene el board conectado directamente escriba: 16,16,8,8,10.


Paso 6:
'Targetable Devices': en esta sección se debe introducir el FPGA que usa el board XUPV5. Click 'Add' y seleccione: Virtex 5, XC5VLX110T, Speed -1, package ff1136. Click OK.
Hasta acá la configuración de esta ventana debería ser similar a la mostrada a continuación: 


Paso 7:
En la sección 'Non-Memory Mapped Ports' click el botón 'Add' para agregar algunos puertos de E/S del FPGA que considere necesarios. La ventana 'Configure a Port' aparecerá. Introduzca el nombre del puerto de E/S, seleccione la direccion del mismo, y la ubicacion (Location). Opcionalmente puede tambien seleccionar si el puerto deber ser configurado con el resistor de Pullup o Pulldown. Una vez terminado con estas configuraciones, Click 'Add Pin'. El puerto de E/S configurado sera ahora mostrado en la parte llamada 'Pin List'. Para introducir otro puerto seleccione 'Save and Starte New'. Se pueden introducir tantos puertos como hagan falta. Una vez concluida esta tarea, presione 'Save and Close'.




Nota importante: Se aclara que este paso es totalmente OPCIONAL para la Co-Simulación. 


Paso 8:
Una vez completados los pasos anteriores, la siguiente figura debería ser similar a la que tienes en tu computadora (excepto por los 'Non-Memory Mapped Ports', que pueden no estar o pueden ser otros)




Paso 9:
Presionar 'Install' para instalar la configuracion del XUPV board en el directorio de plug-in de SysGen.




Navegue hasta el directorio:  ../Xilinx/
 En ese directorio debería ahora aparecer el directorio XUPV5 JTAG, tal como muestra la siguiente figura: 




Paso 10:
Finalizada la instalación un ventana de Simulink aparecerá con los puertos de E/S configurados. 




Grabe la librería de los puertos de E/S. Estos puertos pueden ahora usarse en cualquier sistema con System Generator. 

Paso 11:
Para probar que todo esta instalado correctamente. Cierre Matlab y luego ábralo nuevamente. En cualquier sistema de Simulink con el bloque System Generator, abra el bloque System Generator, y seleccione en 'Compilation', 'Hardware Co-Simulation'. Ahora deberia aparecer en la lista XUPV5 JTAG. 




Paso 12:
Listo ! ... el XUPV5 puede ahora usarse para correr Co-Simulación en Hardware de su sistema Simulink. 

Versión pdf   :)