指定 Assign
Verilog基本語法型態全域變數基本元件多樣的寫法指定assignalwaysinitial運算式分枝迴圈模組函數Task陣列輸出入觀察真值表測試程式訊息顯示注意事項模擬程序硬體工程程式範例XorXor3全加器加法器加減器快速加法器乘法器ALU閂鎖器脈衝偵測計數器多工器暫存器群記憶體延遲問題浮點數狀態機程式計數器CPU0-MiniCPU0pipeline工具QuartusIIIcarusVeritek訊息相關網站參考文獻最新修改簡體版English |
assign 與 always 之不同以下程式的 seg = tseg 部分只能用 assign,因為 always 區塊中等號左邊只能是 reg 型態的變數,但 assign 中也可以是 output 型態的變數。
指定的方法兩種 Assign :Blocking v.s. Nonblockinga = b ; // Blocking assignment : 執行順序不一定, a <= b; // Nonblocking assignment : 所有可同時值行的東西都要執行完一次後,才會前進到下一個時間點。 兩種執行方式:Sequential v.s. Concurrent兩種時間控制:Delayed evaluations v.s. Delayed assignments指定的範例
注意:像 sum = a + b + cin 這樣的語句,x = y 左邊的 x 必須是暫存器 (reg) 型態,不可以是線路 (wire) 型態 (除非是 primitives 或 continuous assignment 兩者的左邊才能是 wire 型態)。 Block 與 Nonblocking 的比較範例比較一:以下程式採用 Blocking assignment (=),其執行順序不一定,因此 d2, d3, d4 最後的結果值將會不固定,這是一個不好的程式。
以下的程式採用 NonBlocking assignment (<=),所有同時的事件必須全部執行完一遍後才能開始執行下一個時間點的事件,因此 d2, d3, d4 分別會得到上一輪的 d1, d2, d3。
比較二:Blocking Assignment: 執行結果相當於 a=1, b=1, c=1
NonBlocking Assignment: 執行結果相當於 a=1; b = 上一輪的 a; c=上一輪的 b;
參考文獻
|
page revision: 9, last edited: 02 Apr 2012 01:58
assign dc_div_w = { 1'b0 ,dc_div_i };
這個{} 的用法,不太了解…
Post preview:
Close preview