2017-08-11 24 views
1

我們如何判斷$ cast的調用是函數還是任務。每個人的電話會有什麼不同?我理解的一件事是通過函數調用,我可以使用assert()。但除此之外,什麼告訴我們該電話是$ cast函數還是$ cast任務?無論哪種情況,我們都會做類似$ cast(pkt,pkt1);

LRM給出了$的語法投功能

function int $cast(singular dest_var, singular source_exp); 

$投任務,

task $cast(singular dest_var, singular source_exp); 

,並接着解釋說,

使用$ cast作爲任務或者一個函數確定處理無效分配的方式。

作爲任務調用時,$ cast會嘗試將源表達式 分配給目標變量。如果分配無效,則會發生運行時 錯誤,並且目標變量保持不變。

作爲函數調用時,$ cast會嘗試將源表達式 分配給目標變量,如果轉換是合法的,則返回1。如果 轉換失敗,則該功能不會進行賦值並返回0. 作爲函數調用時,不會發生運行時錯誤,並且目標變量保持不變。

請說明。

+0

或者是LRM鬆散地試圖說,使用assert()或者如果block在$ cast周圍會選擇$ cast函數,否則$ cast任務? –

回答

1

你的評論是正確的:如果$ cast被用作表達式的一部分,它被認爲是一個函數。該語句源自Verilog術語,因爲函數只能用於表達式,並且永遠不能像任務調用一樣以簡單語句的形式存在。但是一旦SystemVerilog添加了無效返回類型的函數,該措辭就不再適用了。