Почему я не могу создать экземпляр внутри процедурного блока в Verilog - PullRequest
0 голосов
/ 21 августа 2011

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

Мне просто нужен 1 экземпляр, и поэтому я не использую оператор generate. Я просто создаю его экземпляр, используя ... Center data_cent(.clk(clk),.dummy_4(dummy_6));

Но после проверки синтаксиса выдается сообщение о том, что data_cent не являетсязадача".Я не могу понять проблему.Я был бы рад, если бы кто-нибудь мог помочь.

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Вы можете создать его экземпляр внутри модуля, но вне каких-либо процедурных блоков. Если вы хотите получить доступ к внутренним сетям вашей субстанции, вы можете использовать иерархические спецификаторы. Например, если ваш экземпляр содержит внутреннюю сеть с именем foo:

module top;

Center data_cent(.clk(clk),.dummy_4(dummy_6));

initial begin
   $display(data_cent.foo);
end

endmodule

SystemVerilog также предлагает конструкцию bind.

0 голосов
/ 12 ноября 2017

Из вашего описания я могу представить две возможности:

  1. Возможно, вы пишете универсальный код, и вам нужно создать экземпляр согласно значениям параметра.Если это так, вы можете использовать генерировать, если.
  2. Вы можете создать экземпляр в соответствии со значением сигнала во время выполнения.В этом случае вы думаете как программист, а не как аппаратный дизайнер.Инстанцирование означает добавление оборудования, и вы не можете сделать так, чтобы значение сигнала решало, существует ли оборудование или нет.Аппаратное обеспечение просто есть или нет - третьего выбора нет, кроме FPGA, и это не так просто.
    Я думаю, что вам нужно всегда создавать экземпляр модуля снаружи и выдавать сигнал разрешения, который вы всегда можете изменить внутри,работа модуля при выполнении условия.
...