Acceso a las instancias generadas por Verilog Genvar en el código de simulación
-
27-10-2019 - |
Pregunta
Esta es una pregunta relatada de Verilog. Estoy trabajando con Xilinx ISE como un entorno de desarrollo.
Estoy tratando de acceder a las variables en la simulación que se generan automáticamente usando Genvar, pero recibo el siguiente error -> HDLCompiler: 71
Ejemplo del problema:
genvar i;
generate
for(i=0; i < N; i=i+1)
begin:Sys_Modules
TypeXModule #(.width(10)) xmod(.dataY(dataY)));
end
endgenerate
Cuando ejecuté síntesis o simulación, puedo ver que se crean sys_modules [0..n-1] .xmod instancias.
Cuando intento agregar una línea a la simulación que accede a la matriz sys_modules:
Sys_modules [i] .xmod.datay
Obtuve el siguiente error:
HDLCOMPILER: 71 Datay no se declara en prefijo XMOD
¿Hay alguna forma de acceder a valores generados automáticamente en la simulación?
¡Gracias!
Solución
Es legal escribir una referencia jerárquica a una instancia generada. La funcionalidad se describe en las Secciones 2.7.2 y 12.1.3 del estándar IEEE Verilog. Sin embargo, el subíndice de instancia debe ser una constante para que pueda resolverse en el momento de la compilación.
Otros consejos
No puede usar referencias jerárquicas de intervención cruzada en Verilog sintetizado.
Creo que no tienes suerte. Los simuladores no parecen gustarles las referencias fuera del módulo (OOMR) que apuntan a bloques generados como descubrió.
Recientemente encontré un problema similar al hacer un monitor de TestBench de parametrizable. Sería un número variable de sub-blocks instanciados dependiendo de un parameter
. Dentro de esto, necesitaba tener un nivel superior .start()
tarea que llamó al .start()
tareas en cada uno de los módulos instanciados. No pude usar un for
Luce para hacer esto debido a este problema de OOMR.
Entonces terminé teniendo que:
- Definir un
reg
que el toplevel.start()
tarea alternativa - escribe un
always @
bloque activado en estereg
- escribe otro
generate
sección dentro de este bloque siempre para llamar.start()
en cada uno de los submódulos.
Si realmente necesitas echar un vistazo a tu generate
D módulos, ¿tal vez podrías probar una solución como arriba? Por ejemplo, tenga un autobús en el nivel superior y use ungenerate
declaración para echar un vistazo dentro de su original generate
D Instantiaciones para copiar/asignar señales interesantes en este bus Toplevel.