2017-01-01 120 views
2

假設我有以下實例
first_mux_input=top.middle.down[i]; second_mux_input=top.middle.down[i+1]; assign down = (select[i])? first_mux_input:second_mux_input;使用在VERILOG

假設有很多個多路複用器和它們的輸出去的輸入被放置在它們下面複用器後面定義條件變量。

我在定義它之前使用變量「down」。這是合法的,因爲verilog隨後編譯所有行,而不是按順序編譯(在這種情況下)?
謝謝

回答

0

這取決於你的合成器。我只與Xilinx合作。在我的情況下,賽靈思接受這種類型定義進行仿真。但是對於綜合來說,你需要在實例化之前定義一個wire/reg。

0

assign語句不是一個聲明。一個聲明是:

wire down; 

如果你從來沒有聲明下來像這樣,將隱式聲明。 第IEEE 1800年至2012年的狀態6.10:

如果一個標識符出現在連續的賦值語句的左手側,並且該標識符 先前尚未在範圍連續賦值語句出現在那裏宣佈或 在任何範圍內,其聲明可以從連續 賦值語句出現的範圍直接引用(參見23.9),那麼默認淨類型的隱式標量淨應爲 。有關連續賦值語句的討論,請參見10.3。

然後:

見22.8爲用'default_nettype 編譯器指令隱式聲明蚊帳類型的控制的討論。

這(I相信)典型地是指用Verilog一個邏輯 SystemVerilog中。

現在,只要使用之前的值是分配,這是完全合法的。只要在使用或分配後不宣佈。