A atribuição de fios profundidade em um conjunto de módulos aninhados
-
24-09-2019 - |
Pergunta
Eu tenho um cabo que é de cerca de 4 níveis de profundidade e eu realmente não quero ter o incómodo de propagá-lo para cima na hierarquia.Existe alguma maneira de atribuir a fio usando algum tipo de referência?Eu sei que eu posso acessar o fio digitando:
cca.cpu0.cca3_cpu.nc1_cp_checkpoint
mas
assign cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
não funciona
Alguém sabe de alguma maneira de fazê-lo?
Solução
Desde que você não se têm mostrado suficientes código para qualquer um, para reproduzir o problema, nem revelou qualquer detalhe sobre o seu problema, tudo o que podemos fazer é adivinhar.
Meu palpite é que nc1_cp_checkpoint
é declarado como um reg
dentro da sua cca3_cpu
instância.Você não pode atribuir um valor a uma reg
usando um contínuo de atribuição.Tente usar uma processuais de atribuição (dentro de um initial
ou always
bloco), por exemplo:
initial begin
cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
end
Se isto não resolver o seu problema:
- Mostrar mais relevante código
- Elaborado em "não funciona".Mostrar a mensagem de erro, se houver.
Atualização:Outro potencial problema surge se nc1_cp_checkpoint
é um continuamente orientado wire
dentro da sua cca3_cpu
instância.Nesse caso, a sua segunda assign
pode causar contenção, o que tornaria o valor desconhecido (x
).Você pode ser capaz de evitar esse problema usando force
e release
.
Outras dicas
Na sua tag, você parece estar indicando que está usando VCs. Você está recebendo um:
Error-[XMRE] Cross-module reference resolution error
Cross module resolution failed, token BLAH'.
Originating module 'foo'. "foo.v", 666:
Isso indicaria que seu caminho não está correto.
As referências de módulos cruzados funcionam, mas podem não estar ativados se você estiver restringindo seu design a construções sintetizáveis. Procure "Referência de Módulo Cross" no Guia do Usuário do VCS.