Доступ к сгенерированным Genil экземплярам Verilog в коде моделирования - PullRequest
0 голосов
/ 07 сентября 2011

Это вопрос, выпущенный Verilog.Я работаю с XILINX ISE в качестве среды разработки.

Я пытаюсь получить доступ к переменным в моделировании, которые автоматически генерируются с использованием genvar, но я получаю следующую ошибку -> HDLCompiler: 71

Пример проблемы:

genvar i;

generate

for(i=0; i < N; i=i+1)

begin:Sys_Modules

  TypeXModule #(.width(10)) xmod(.dataY(dataY)));

end

endgenerate 

Когда я запускаю синтез или моделирование, я вижу, что создаются экземпляры Sys_Modules [0..N-1] .xmod.

Когда я пытаюсь добавить строкук симуляции, обращающейся к массиву Sys_Modules:

Sys_Modules [i] .xmod.dataY

Я получаю следующую ошибку:

HDLCompiler: 71 dataY не объявлено под префиксом xmod

Есть ли способ получить автоматически сгенерированные значения в симуляции?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Нельзя использовать иерархические ссылки между экземплярами в синтезированном Verilog.

1 голос
/ 08 сентября 2011

Допустимо писать иерархическую ссылку на сгенерированный экземпляр.Функциональность описана в разделах 2.7.2 и 12.1.3 стандарта IEEE Verilog.Однако индекс экземпляра должен быть константой, чтобы его можно было разрешить во время компиляции.

1 голос
/ 08 сентября 2011

Я думаю, тебе не повезло.Имитаторам, похоже, не нравятся ссылки вне модуля (OOMR), указывающие на сгенерированные блоки, как вы обнаружили.

Недавно я столкнулся с подобной проблемой при создании параметризуемого монитора testbench.Я бы назначил переменное количество подблоков в зависимости от parameter.В рамках этого мне нужно было иметь задачу .start() верхнего уровня, которая вызывала бы задачи .start() в каждом из созданных экземпляров модулей.Я не мог использовать цикл for, чтобы сделать это из-за этой проблемы OOMR.

Так что мне пришлось:

  • определить reg, что верхний уровень .start() задание переключено
  • записать always @ блок, запущенный в этом reg
  • записать другой generate раздел в этом всегда блоке, чтобы вызвать .start() onкаждый из подмодулей.

Если вам действительно нужно заглянуть в свои generate d модули, может быть, вы могли бы попробовать обходной путь, как описано выше?Например, имейте шину на верхнем уровне и используйте оператор generate, чтобы заглянуть в ваши исходные generate d экземпляры, чтобы скопировать / назначить интересные сигналы на эту шину верхнего уровня.

...