2011-08-21 74 views
0

我需要实例化一些在过程块中弹出需求的模块。但我不允许在过程块内部实例化。还有其他地方应该实例化这些模块我可以在程序块中访问它们。为什么我不能在Verilog中的程序块内部实例化

我只需要1个实例,因此,我不使用产生statement.I很简单地使用实例吧... Center data_cent(.clk(clk),.dummy_4(dummy_6));

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

+0

这是用于合成还是模拟? – 2011-08-21 14:32:35

+3

请在你的问题中加入一些代码,以便我们看到你想要做的事情。 – George

回答

1

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

module top; 

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

initial begin 
    $display(data_cent.foo); 
end 

endmodule 

的SystemVerilog还提供了bind结构。

+0

我在for循环中使用它来逐个传递1000个值,但它给出了相同的错误“data_cent不是任务”。我很困惑。 – optimus

+0

@ Adam12它用于合成。 – optimus

0

从你的描述,我能想到的两种可能性:

  1. 你可能会写一个通用的代码,你需要根据参数值来实例化。如果是这种情况,你可以使用generate if。
  2. 您可能想要在运行时根据信号值进行实例化。在这种情况下,你认为程序员不是硬件设计师。实例化意味着添加硬件并且不能使信号值决定硬件是否存在。硬件就在那里或不在那里 - 除了FPGA之外没有第三选择,它并不那么简单。
    我认为你需要的是在总是外部实例化模块,并且在内部总是可以修改使能信号,以使模块在条件满足时工作。
相关问题