miércoles, 2 de marzo de 2016

Error (en algunas versiones): "undefined reference to Xil_ICacheDisable"

Introducción


Cuando comencé mis primeros pasos con Vivado-SDK me encontré con un problema bastante raro, y aún hoy me preguntan por ese problema, así es que aquí lo publico. 
Resulta que tratando de hacer el proyecto mas simple de todos, el famoso Hello World, me encontré con 10 errores en el SDK... ! Como a pesar de seguir todos los pasos de distintos tutoriales puedo generar diez errores con el proyecto Hello World... ??!!

Encontrando y Solucionando el Problema


Siguiendo los pasos descritos en distintos tutoriales genere el proyecto Hello World en Vivado. Acá ven una captura de pantalla del diseño (creo que es lo mas simple que se puede hacer en Vivado ! :) ) ... : 


Una vez generado el diseño, seguí todos los pasos para primero Export Hardware, y luego invocar SDK
En el entorno SDK, cree una nueva Application Project basada en el patrón (template) Hello World. Luego ejecuto Build Project, y acá aparecen los errores: 


Entonces, lo primero que hago (lo que uno casi siempre hace :) )... es buscar ayuda en la web...., busqué, busqué, y ... nada encontré... Así es que empece a investigar por mi lado y descubrí lo que parece ser un 'bug' en la versión 2015.1 de Vivado: aún cuando la interface DDR no está configurada en hardware, es generada incompletamente en software. 

En un proyecto tan simple como el Hello World, no hay ninguna necesidad de usar la memoria externa DDR disponible en el ZedBoard. Por lo que no hay necesidad de habilitar la interface DDR en el Zynq. Sin embargo, para solucionar los errores presentados anteriormente es necesario habilitar la interface DDR, aún cuando no se vaya a realizar ninguna Rd/Wr en la DDR. 
Nota importante: otras versiones de Vivado no generar estos errores. 

Una vez que se  agrega la interface DDR (en el entorno Vivado, ver figura debajo) y se regenera el hardware y el Application Project, los errores no vuelven a aparecer cuando se ejecuta Build Project.


En un próximo post detallo como se fuerza al linker para usar la OCM (On Chip Memory) para ejecutar el Hello World.

No hay comentarios:

Publicar un comentario