Назначение проводов глубоко в вложенном наборе модулей
-
24-09-2019 - |
Вопрос
У меня есть провод, который глубоко составляет около 4 уровней, и я действительно не хочу, чтобы хлопотать необходимость распространять ее иерархии. Есть ли способ назначить провод, используя какую-то ссылку? Я знаю, что могу получить доступ к проволоке, набрав:
cca.cpu0.cca3_cpu.nc1_cp_checkpoint
но
assign cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
не работает
Кто-нибудь знает какого-либо способа сделать это?
Решение
Поскольку вы не показали достаточный код для всех, чтобы воспроизвести вашу проблему, и вы не раскрывали никаких деталей относительно вашей проблемы, все, что мы можем сделать, это догадаться.
Я думаю, что nc1_cp_checkpoint
объявлен как reg
Внутри вашего cca3_cpu
пример. Вы не можете назначить значение reg
используя постоянное назначение. Попробуйте использовать процессуальное задание (внутри initial
или always
Блок), например:
initial begin
cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
end
Если это не решит вашу проблему:
- Показать больше актуальны код
- Разработать «не работает». Покажите свое сообщение об ошибке, если есть.
Обновление: еще одна потенциальная проблема возникает, если nc1_cp_checkpoint
это постоянно wire
Внутри вашего cca3_cpu
пример. В этом случае ваша вторая assign
может вызвать утверждение, которое сделало бы стоимость неизвестной (x
). Вы можете избежать этого вопроса, используя force
а также release
.
Другие советы
Из вашего метка вы, кажется, указываете, что вы используете VCS. Вы получаете:
Error-[XMRE] Cross-module reference resolution error
Cross module resolution failed, token BLAH'.
Originating module 'foo'. "foo.v", 666:
Это будет указывать, что ваш путь не является правильным.
Ссылки с перекрестными модулями работают, но они не могут быть включены, если вы ограничиваете свой дизайн на синтезируемые конструкции. Посмотрите вверх «Перекрестный модуль» в руководстве пользователя VCS.