为什么可以';在Verilog中的过程块内实例化

为什么可以';在Verilog中的过程块内实例化,verilog,Verilog,我需要实例化一些模块,这些模块的需求会在过程块中弹出。但是我不允许在过程块内部实例化。我还应该在哪里实例化这些模块,以便在过程块中访问它们 我只需要1个实例化,所以我不使用generate语句。我只是使用…Center data_cent(.clk(clk),.dummy_4(dummy_6))实例化它 但在检查语法时,会出现一个错误,说明“数据不是任务”。我想不出这个问题。如果有人能帮上忙,我会很高兴。您可以在模块内实例化它,但在任何过程块之外。如果要访问子实例的内部网络,可以使用层次说明符。

我需要实例化一些模块,这些模块的需求会在过程块中弹出。但是我不允许在过程块内部实例化。我还应该在哪里实例化这些模块,以便在过程块中访问它们

我只需要1个实例化,所以我不使用generate语句。我只是使用…
Center data_cent(.clk(clk),.dummy_4(dummy_6))实例化它


但在检查语法时,会出现一个错误,说明“数据不是任务”。我想不出这个问题。如果有人能帮上忙,我会很高兴。

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

module top;

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

initial begin
   $display(data_cent.foo);
end

endmodule

SystemVerilog还提供了绑定结构。

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

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

  • 这是用于合成还是模拟?请在你的问题中加入更多的代码,以便我们看到你正在尝试做什么。我在for循环中使用它一个接一个地传递1000个值,但它给出了相同的错误“数据不是任务”。我感到困惑。