Accès Verilog genvar instances générées dans le code de simulation
-
27-10-2019 - |
Question
Ceci est une question releated Verilog. Je travaille avec Xilinx ISE comme environnement de développement.
Je suis en train de variables d'accès à la simulation qui sont générés automatiquement à l'aide genvar mais je reçois l'erreur suivante -> HDLCompiler: 71
Problème Exemple:
genvar i;
generate
for(i=0; i < N; i=i+1)
begin:Sys_Modules
TypeXModule #(.width(10)) xmod(.dataY(dataY)));
end
endgenerate
Quand je courais la synthèse ou la simulation, je peux voir que Sys_Modules [0..n-1] instances .xmod sont créés.
Lorsque je tente d'ajouter une ligne à la simulation d'accéder au tableau Sys_Modules:
Sys_Modules [i] .xmod.dataY
je reçois l'erreur suivante:
HDLCompiler: 71 dataY n'est pas déclarée en préfixe xmod
Y at-il moyen d'accéder à des valeurs générées automatiquement dans la simulation?
Merci!
La solution
Il est possible d'écrire une référence hiérarchique à une instance générée. La fonctionnalité est décrite dans les sections 2.7.2 et 12.1.3 de la norme IEEE Verilog. Cependant, l'indice d'instance doit être une constante pour qu'il puisse être résolu au moment de la compilation.
Autres conseils
Vous ne pouvez pas utiliser des références croisées hiérarchiques exemple dans Verilog synthétisé.
Je pense que vous êtes hors de la chance. Simulateurs ne semblent pas comme hors de module références (OOMRs) pointant en blocs générés que vous avez découvert.
J'ai rencontré un problème similaire récemment lors d'un moniteur de banc d'essai paramétrable. Je serais un nombre variable de sous-blocs instancié en fonction d'un parameter
. Dans ce cadre, je devais avoir une tâche .start()
de premier niveau qui a appelé les tâches de .start()
dans chacun des modules instanciés. Je ne pouvais pas utiliser une boucle de for
faire cela à cause de ce problème de OOMR.
Je fini par avoir à:
- définir une
reg
que la tâche.start()
de toplevel Bascule - écrire un bloc
always @
déclenché sur cettereg
- write autre section
generate
dans ce bloc toujours appeler.start()
sur chacun des sous-modules.
Si vous avez vraiment besoin de jeter un regard dans vos modules generate
d, vous pourriez peut-être essayer une solution de contournement comme ci-dessus? Par exemple, un bus au premier niveau, et l'utilisation de la déclaration agenerate
à coup d'oeil dans votre instanciations generate
d original à copier / Assign des signaux intéressants à ce bus de premier niveau.