Estoy creando una CPU personalizada y me gustaría que fuera programable sobre la marcha en lugar de un código duro en VHDL. El problema que tengo es que sin el código inicial para que se ejecute la CPU, el ISE recortará grandes cantidades de mi lógica. He intentado usar el atributo 'S' para declarar mis señales y variables como 'no recortable', pero eso no funciona en todas las señales. También he intentado configurar la opción de mantener la jerarquía en XST, pero incluso eso falla a veces (se queja de que hay un conflicto con la configuración de KEEP y que se recortará de todos modos). ¿Hay alguna manera de que le diga a ISE que no recorte nada sin tener que crear un programa predeterminado que se ejecute a través de cada código de operación?
Aquí está uno de los errores que estoy viendo:
WARNING:Xst:638 - in unit cpu_instructor_copy Conflict on KEEP property on signal brain.current_opcode<0> and brain.stack_pointer<14> brain.stack_pointer<14> signal will be lost.
Sin el atributo S, el stack_pointer solo se eliminará.
Tengo lo siguiente en la parte superior de mi proceso 'cerebral'
variable stack_pointer : integer range 0 to (2**mem_addr'length) - 1 := stack_origin;
attribute S : string;
attribute S of stack_pointer : variable is "YES";
¡Gracias de antemano!
Editar: Aquí es el código real (no hay atributos en él actualmente como están en mi copia de prueba personal)
Edición 2: el problema se solucionó cambiando mi programa de una constante a una señal, agregando un nuevo proceso que podría "programar" la CPU con una serie (al menos eso es lo que piensa el diseño) y configurando el proceso del Mapa para No recortar señales desconectadas. Voy a publicar el código un poco más tarde. ¡Gracias a todos!