Назначение проводов глубоко во вложенном наборе модулей - PullRequest
0 голосов
/ 01 февраля 2010

У меня есть провод глубиной около 4-х уровней, и я действительно не хочу, чтобы его распространяли по иерархии. Есть ли способ назначить провод, используя какие-то ссылки? Я знаю, что могу получить доступ к телеграмме, набрав:

cca.cpu0.cca3_cpu.nc1_cp_checkpoint 

но

assign cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;

не работает

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2010

Поскольку вы не указали достаточный код, чтобы кто-либо мог воспроизвести вашу проблему, и при этом вы не раскрыли никаких подробностей, касающихся вашей проблемы, все, что мы можем сделать, - это угадать.

Я предполагаю, что nc1_cp_checkpoint объявлено как reg внутри вашего cca3_cpu экземпляра. Вы не можете присвоить значение reg, используя непрерывное назначение. Попробуйте использовать процедурное назначение (внутри блока initial или always), например:

initial begin
    cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
end

Если это не решит вашу проблему:

  1. Показать больше актуально код
  2. Разработка "не работает". Покажите ваше сообщение об ошибке, если есть.

Обновление: другая потенциальная проблема возникает, если nc1_cp_checkpoint - это непрерывно управляемый wire внутри вашего cca3_cpu экземпляра. В этом случае ваш второй assign может вызвать конфликт, что сделает значение неизвестным (x). Вы можете избежать этой проблемы, используя force и release.

2 голосов
/ 01 февраля 2010

Из вашего тега вы, похоже, указываете, что используете VCS. Вы получаете:

Error-[XMRE] Cross-module reference resolution error
Cross module resolution failed, token BLAH'. 
Originating module 'foo'. "foo.v", 666: 

Это указывало бы на то, что ваш путь неверен.

Межмодульные ссылки работают, но они могут быть не включены, если вы ограничиваете свой дизайн синтезируемыми конструкциями. Посмотрите "межмодульную ссылку" в руководстве пользователя VCS.

...