viernes, 12 de octubre de 2018

"[Common 17-69] Command Failed: '-scan_for_includes' and 'copy_to' are mutually exclusive and cannot be paired together."

Este es un error generado por vivado cuando uno está tratando de hacer un 'add sources'. La ventana de error que aparece es:



El mensaje no es claro en lo que respecta cual es el problema que origina ese mensaje de error. Por ejemplo en la figura de arriba estaba tratando de agregar (Add) el archivo pwm_ip_top.vhd usando el dialogo que aparece para esa tarea. Tal como se ve en la siguiente figura:



La fuente del mensaje de error, es que por defecto, los dos opciones, 'Scan ... ' y 'Copy ...' están seleccionadas por defecto. Para poder solucionar el problema se debe seleccionar una sola:


Hacer click en Finish, el archivo se agregará al proyecto, y no se generará el mensaje de error.






viernes, 28 de septiembre de 2018

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. 
a- Target Board Identification: Board Name: puede usarse cualquier nombre. Convenientemente use uno que facilite la identificación del board. Por ejemplo, XUPV5.
b- 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.
c- 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.



d- 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: 


e- 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'.


f- Con toda la configuración ya escrita la figura siguiente debería ser similar a la que tienes en tu computadora. 




fig




Si es así, presionar 'Install' para instalar la configuracion del XUPV board en el directorio de plug-in de SysGen.




g- 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. 


i- Para probar que todo esta instalado correctamente, abra el bloque System Generator, y seleccione en 'Compilation', 'Hardware Co-Simulation'. Ahora deberia aparecer en la lista XUPV5 JTAG. 




j- Listo ! ... el XUPV5 puede ahora usarse para correr Co-Simulación en Hardware de su sistema Simulink. Documento pdf

Quartus-ModelSim: Como 'ver' mejor las formas de ondas y facilitar el debug

En un blog anterior (link) describí la personalización de las formas de ondas visualizadas en ModelSim en el entorno ISE de Xilinx. Debido al pedido de muchos de Uds. les presento ahora lo mismo para para los usuarios de Quartus de Altera. Como ya leerán en la nota de aplicación que presento, cuando se invoca cualquier tipo de simulación desde el Quartus, ModelSim es automáticamente abierto, mostrando las formas de ondas resultantes del test bench en el panel llamado Wave View. Debido a la configuración de ModelSim (detallada en un archivo tipo script) que por defecto se invoca, solo las señales de la entidad de mayor jerarquía son mostradas, y ... nada más... Entonces, una vez abierta esta ventana Wave View si se desean ver señales internas del diseño bajo test, o cambiar la posición y/o color de las señales mostradas, o agregar divisores, y tantas otras características que ofrece ModelSim para hacer, es posible llevarlas a cabo, pero una vez cerrado ModelSim todas las modificaciones realizadas se pierden!. Así, cuando se corra la misma simulación de nuevo, se deberá empezar otra vez con las modificaciones. Les suena familiar el problema?????

En la 'Application Note' que les presento se detallan los pasos a seguir, para que cuando se invoque ModelSim desde Quartus, la simulación, y específicamente, el Wave View contenga toda la información que uno desea/necesita para una buena verificación y un fácil debug.

Aqui esta el link para bajar la 'Application Note', que por ahora está en Inglés, pero si hay unos cuantos pedidos, la pasaré al Español: 


Hasta la próxima ! 

miércoles, 26 de septiembre de 2018

Como añadir variables en el Waveform window de ModelSim

Necesitas debug el valor de alguna variable? ModelSim te da la opción de poder añadir una o más variables al Waveform window. 
Sin embargo es dificil encontrar info de como 'ver' una variable. Dentro de Modelsim hay que hacer una serie de pasos para poder agregar una variable el Waveform window:
  • Cargá la simulación de tu diseño en ModelSim siguiendo el proceso que usualmente haces (ya sea desde ISE, ModelSim stand-alone, Quartus, etc.)
  • En caso que aún no esté abierto, abre el Waveform window: del menú principal selecciona View y luego Wave.
  • En el Worksapce window de ModelSim seleccioná (highlight) el dispositivo que se quiere simular (DUT en este ejemplo).


  • Tal como se vé en la figura anterior en ModelSim en la Objects window NO se muestran las variables. 
  • Para habilitar la visualización de las variables, primero se debe habilitar la visualización de los procesos del proyecto general. Para eso, sobre el dispositivo a simular, DUT en este ejemplo, presioná botón derecho, y seleccioná Show, y luego Process



  • Ahora debajo del nombre del componente que se quiere simular (DUT en este ejemplo) deberán aparecer varios otros nombres/números. Entre ellos en nombre del proceso en el cual está definida la variable que se quiere agregar al Waveform window.  Por eso la IMPORTANCIA de poner nombre a los procesos.
  • Tal como se aprecia en la figura, el proceso que nos interesa se llama pwm_pr.  Este nombre viene del .vhd.
  • Próximo paso es seleccionar View en el menú principal y luego Locals. Ya que las variables son locales al proceso, es decir no existen fuera del proceso.
  • Luego seleccioná el nombre del proceso (highlight), pwm_pr en este caso, y entonces deberá aparecer una nueva ventana donde se mostrará el nombre del proceso, y debajo las variables definidas en el.
  • Seleccioná la variable (counter en este ejemplo) y luego Add Wave para que aparezca en el Waveform window. 
  • Grabá la nueva configuración del Waveform window, así la próxima vez que corras la simulación la(s) variable(s) estarán disponibles. Si trabajás con Quartus usá esta nota técnica C7T_AN08_Customized_WaveView_ModelSim_Quartus. Si trabajas con ISE usá esta C7T_AN05_Customized_WaveView_ModelSim_ISE_2.