目錄
- 1.塊語句
- 2.延遲賦值語句
微信公眾號獲取更多FPGA相關源碼:
1.塊語句
塊語句用來將多個語句組織在一起,使得他們在語法上如同一個語句。
塊語句分為兩類:
- 順序塊:語句置于關鍵字begin和end之間,塊中的語句以順序方式執行。
- 并行塊:關鍵字fork和join之間的是并行塊語句,塊中的語句并行執行。
Fork和join語句常用于test bench描述。這是因為可以一起給出矢量及其絕對時間,而不必描述所有先前事件的時間。
- 在順序塊中,語句一條接一條地計算執行。
- 在并行塊中,所有語句在各自的延遲之后立即計算執行。
begin#5 a = 3;#5 a = 5;#5 a = 4;
end
fork#5 a = 3;#15 a = 4;#10 a = 5;
join
上面的兩個例子在功能上是等價的。Fork-join例子里的賦值故意打亂順序是為了強調順序是沒有關系的。
注意fork-join塊是典型的不可綜合語句,并且在一些仿真器時效率較差。
2.延遲賦值語句
語法:
LHS = <timing_ control> RHS;
- 時序控制延遲的是賦值而不是右邊表達式的計算。
- 在延遲賦值語句中RHS表達式的值都有一個隱含的臨時存儲。
- 可以用來簡單精確地模擬寄存器交換和移位。
- LHS: Left-hand-side
- RHS: Right-hand-side
并行語句在同一時間同步發生,但由仿真器在另外一個時間執行。
例1:b值拷貝到a然后回傳
begina = #5 b;b = #5 a;#10 $diplay(a, b);
end
b的值被立即采樣(時刻0),這個值在時刻5賦給a。a的值在時刻5被采樣,這個值在時刻10賦給b。
注意,另一個過程塊可能在時刻0到時刻5之間影響b的值,或在時刻5到時刻10之間影響a的值。
例2:a和b值安全交換
forka = #5 b;b = #5 a;#10 $diplay(a, b);
join
b和a的值被立即采樣(時刻0),保存的值在時刻5被賦值給他們各自的目標。這是一個安全傳輸。注意,另一個過程塊可以在時刻0到時刻5之間影響a和b的值。
微信公眾號獲取更多FPGA相關源碼: