2011年8月12日 星期五

Verilog - blocking & non - blocking

在我研替的面試經驗中,因為投的是數位IC的工程師,因此所謂verilog的blocking & non-blocking的觀念,幾乎是每一家公司的必考題,因此我以我的見解做一個解釋,如有錯誤歡迎指正

顧名思義,所謂的blocking就是verilog大括號所刮起來的敘述中,每個敘述是必須依序執行的,例如:

always @(a or b) begin
a=#1 b;
c=#2 a;
end

這邊在always使用的是=的operator,也就是blocking的敘述。這段程式碼模擬的時候,a會在b的值變動後的一個時間單位被賦予b的值,而c會在a被賦予b的值之後的兩個時間單位,被賦予a的值。也就是說c會在b的值變動後的三個時間單位才會被賦予b的值。這是因為blocking的敘述,將每個敘述都視為要依序執行的,因此必須等前一個敘述完成之後才會執行下一個敘述。

那如果使用non-blocking的operator(<=),程式改寫如下
always@(a or b)begin
a<=#1 b;
c<=#2 a;
end

這段程式碼,會在b的值變動的一個時間單位之後,將b的值賦予給a,不過在b的值變動的第二個時間單位之後,a的值就會傳給了c,而不會到第(1+2)個時間單位過後才給值。看得出來嗎? 差別就在使用non-blocing的敘述,括號內的所有敘述都是"同時"執行的,不會有先後關係。這主要是為了硬體的特性,許多資工背景的同學,這地方就會比較難理解,因為軟體主要都是依序執行的,這種平行的觀念比較常在硬體出現。

1 則留言:

  1. 您好, 我最近也正在學習verilog
    有個問題想請教您, 就如以上您的範例, 如果初始值
    a=1,b=0
    在non-blocking中, 請問c在第二個時間單位之後, 得到的值會是"1" or "0"

    回覆刪除

勒式交易策略

權證的交易策略有一種操作方法叫做勒式交易策略(其實這種交易策略跟選擇權是一樣的),今天來介紹一下這種操作的方法。 首先這種交易策略,適合在你 預期你的連結標的會在未來有個大趨勢 (無論是大跌或是大漲),例如總統大選,或是希臘債務 到期日等等。此時你可以買進不同履約價但是到期日一...