可程式設計邏輯/Verilog 控制結構
外觀
< 可程式設計邏輯
Verilog 具有許多高階控制結構,可用於執行一定抽象級別上的複雜任務。這些控制結構對於熟悉 C 或 Java 等高階計算機軟體語言程式設計的人來說應該很熟悉。
需要注意的是,並非所有 Verilog 結構都與這些高階控制結構相容。線和連續賦值通常與這些結構不相容,嘗試將它們組合在一起可能會導致編譯錯誤或綜合錯誤。
IF 結構測試特定條件,如果該條件為真,則執行以下程式碼語句。IF 塊之後可以有一個可選的 ELSE 塊,如果條件不為真,則會執行該塊。
IF-ELSE 結構可以透過巢狀擴充套件以考慮超過兩種可能性。下面的虛擬碼示例演示了這一點
if (<condition 1>) <statement 1> else if(<condition 2>) <statement 2> else if(<condition 3>) <statement 3> ... else <statement n>
值得注意的是,將生成額外的資源來處理 IF-ELSE 鏈中未考慮的條件。這意味著,通常,考慮所有可能性比忽略一些可能性更有效。
只要條件為真,WHILE 迴圈就會重複執行。在每次迴圈執行之前都會測試條件。
SWITCH-CASE 結構類似於巢狀的 IF-ELSE 結構,但它們傾向於簡化為更有效的硬體結構。
- SWITCH
- CASE
- CASEX
- CASEZ
程式碼塊透過使用關鍵字 begin 和 end 來指定。程式碼塊可以放在任何單個語句有效的語句處,但需要執行多個語句時除外。
程式碼塊可以巢狀。
在程式碼塊中宣告的變數在詞法上作用域到該塊。
上面描述的程式碼塊可以命名,例如
begin : somename <statement 1> .... <statement n> end
結合前面描述的迴圈結構,Verilog 對 C 中的 break 命令的更高階等效項是 disable,它接收要退出的塊的名稱作為引數
while(1) begin : infiniteLoop <... statements ...> if (somecondition) disable infiniteLoop; <... statements ...> end
在測試臺中,也可以選擇使用 $finish 或 $stop 來中斷執行。