Asignación de cables de profundidad en un conjunto anidado de módulos
-
24-09-2019 - |
Pregunta
Tengo un cable que se trata de 4 niveles de profundidad y yo realmente no quiero la molestia de tener que propagarla arriba en la jerarquía. ¿Hay alguna manera de asignar el alambre utilizando algún tipo de referencia? Sé que puedo acceder al alambre escribiendo:
cca.cpu0.cca3_cpu.nc1_cp_checkpoint
y
assign cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
Por qué no funciona
Alguien sabe de alguna manera de hacerlo?
Solución
Ya que no han mostrado código suficiente para que cualquiera pueda reproducir su problema, ni habéis revelado ninguna información respecto a su problema, lo único que podemos hacer es adivinar.
Mi conjetura es que nc1_cp_checkpoint
está declarada como una reg
dentro de su instancia cca3_cpu
. No se puede asignar un valor a una reg
utilizando una asignación continua. Trate de usar una asignación de procedimiento (dentro de un bloque de initial
o always
), por ejemplo:
initial begin
cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
end
Si esto no resuelve su problema:
- Mostrar más relevante código
- Elaborar en "no funciona". Mostrar su mensaje de error, si lo hay.
Actualización: Otro posible problema surge si nc1_cp_checkpoint
es un wire
impulsado continuamente dentro de su instancia cca3_cpu
. En ese caso, su segundo assign
podría causar contención, lo que haría que el valor desconocido Go (x
). Usted puede ser capaz de evitar ese problema usando force
y release
.
Otros consejos
A partir de su etiqueta, que parece estar indicando que está utilizando VCS. ¿Usted está consiguiendo un:
Error-[XMRE] Cross-module reference resolution error
Cross module resolution failed, token BLAH'.
Originating module 'foo'. "foo.v", 666:
Esto indicaría que el camino no es correcta.
Referencias cruzadas a los módulos funcionan, pero no se pueden activar si está limitando su diseño para construcciones sintetizables. Mirar hacia arriba "de referencia módulo de cruz" en la guía del usuario de VCS.