2011-08-21 47 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之外沒有第三選擇,它並不那麼簡單。
    我認爲你需要的是在總是外部實例化模塊,並且在內部總是可以修改使能信號,以使模塊在條件滿足時工作。
相關問題