为什么我不能在Verilog的程序块中实例化

时间:2011-08-21 12:45:59

标签: verilog

我需要实例化一些在程序块期间弹出需求的模块。但我不允许在程序块中实例化。我应该在其他地方实例化这些模块,以便我可以在程序块中访问它们。

我只需要1个实例化,所以我没有使用生成语句。我只是使用... Center data_cent(.clk(clk),.dummy_4(dummy_6));

实例化它

但是在检查语法时它会给出一个错误,指出“data_cent不是任务”。我无法弄清楚这个问题。如果有人可以提供帮助,我会很高兴。

2 个答案:

答案 0 :(得分:1)

您可以在模块内实例化它,但在任何程序块之外。如果要访问子实例的内部网络,可以使用分层说明符。例如,如果您的实例包含名为foo的内部网:

module top;

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

initial begin
   $display(data_cent.foo);
end

endmodule

SystemVerilog还提供bind构造。

答案 1 :(得分:0)

根据您的描述,我可以想到两种可能性:

  1. 您可能正在编写通用代码,您需要根据参数值进行实例化。如果是这种情况,您可以使用generate if。
  2. 您可能希望在运行时根据信号值进行实例化。在这种情况下,您认为程序员不是硬件设计师。实例化意味着添加硬件,您无法确定信号值来决定硬件是否存在。硬件是否存在 - 除了FPGA之外没有第三种选择,并不是那么简单 我认为您需要的是始终在外部实例化模块并使内部修改的启用信号始终在满足条件时使模块工作。