常規延遲和內嵌延遲

2021-06-23 06:56:25 字數 1154 閱讀 7779

常規延遲和內嵌延遲

sun_403

延遲時序控制

在**中使用關鍵字#和延遲的時間,就可以通過延遲來進行時序控制。延遲的時間可以是數字、變數或者表示式。延遲時序控制又分為兩種:常規延遲和內嵌延遲。

常規延遲在賦值語句的左邊,系統執行到這一行**時,系統先進行延遲,延遲完成後,再計算表示式,並將結果賦值給左邊的變數;而內嵌延遲在賦值語句的右邊,系統執行到這一行**時,系統先立即計算表示式,再進行延遲,最後把表示式的結果賦值給左邊的變數。在上述兩種延遲方式中,設計人員需要注意表示式的自變數在延遲過程中可能發生變化。常規延遲是先延遲再計算表示式,這時表示式的自變數可能已經發生了變化;而內嵌延遲在延遲前就已經進行了計算,表示式的自變數在延遲過程中發生的變化,對已經計算的表示式結果沒有影響,延遲只是指這個結果需要等待一段時間再賦值給左邊的變數。

下面的**片段分別展示了常規延遲和內嵌延遲:

parameter latency =8;

initial

begin

x =1;

y =2;

#5 x =3;

//使用常規延遲:等待5個系統週期後對x賦值

#latency y =4;

//使用變數進行常規延遲,再等待8個系統週期後對y賦值

z =#10

(x+y)

;//使用內嵌延遲:先用零時刻的x、y數值計算(x+y),再等待10個系統週期後對z賦值

end//z的最終數值為3

在順序語句塊(begin...end)中,由於語句是從上到下、一行一行地執行,而所有常規延遲時間都是實際執行時間相對於這一句本來應該開始執行的時間(也是上一句執行完成之時)的延遲值。因此,在上面的**示例中,對變數y的賦值時間相對於上一句結束延遲了8個系統週期,而上一句相對系統零時刻已經延遲了5個系統週期,因此對y的賦值發生在第13個系統週期。不過,如果順序語句塊中存在非阻塞賦值,由於這個結構有著類似並行語句塊的特點,因此需要特別考慮。

在並行語句塊(fork...join)中,由於所有語句都是併發執行的,而所有常規延遲時間都是實際執行時間相對於這一句本來應該開始執行的時間(也是上一句執行完成之時)的延遲值,因此各個常規延遲所指的時間都是相對於系統零時刻。

延遲和吞吐

延遲關注個體感受,吞吐衡量總體效率。我家小區樓下的那個十字路口的紅綠燈設計的就比較好,它的綠燈順序是 無論我什麼時候到,總是能有大於50 50 的概率直接過馬路,然後當我過完馬路,側向就會秒綠,這意味著你可以一次性通過對角線!沒錯,這就是深圳市寶安區寶源路銀田路交叉路口。這一點給我的體驗超好。現在說...

延遲和吞吐

延遲關注個體感受,吞吐衡量總體效率。我家小區樓下的那個十字路口的紅綠燈設計的就比較好,它的綠燈順序是 無論我什麼時候到,總是能有大於50 50 的概率直接過馬路,然後當我過完馬路,側向就會秒綠,這意味著你可以一次性通過對角線!沒錯,這就是深圳市寶安區寶源路銀田路交叉路口。這一點給我的體驗超好。現在說...

python的延遲函式 python 延遲繫結

def multipliers n funcs for i in range n def f x return x i return funcs g0,g1,g2,g3 mutipliters 4 print g0 10 30 print g1 10 30 print g1 10 30 print ...