跳轉到內容

可程式設計邏輯/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

[編輯 | 編輯原始碼]

SWITCH-CASE 結構類似於巢狀的 IF-ELSE 結構,但它們傾向於簡化為更有效的硬體結構。

SWITCH
CASE
CASEX
CASEZ

程式碼塊

[編輯 | 編輯原始碼]

程式碼塊透過使用關鍵字 beginend 來指定。程式碼塊可以放在任何單個語句有效的語句處,但需要執行多個語句時除外。

程式碼塊可以巢狀。

在程式碼塊中宣告的變數在詞法上作用域到該塊。

程式碼塊的命名和退出

[編輯 | 編輯原始碼]

上面描述的程式碼塊可以命名,例如

 begin : somename
   <statement 1>
   ....
   <statement n>
 end

結合前面描述的迴圈結構,Verilog 對 C 中的 break 命令的更高階等效項是 disable,它接收要退出的塊的名稱作為引數

 while(1) begin : infiniteLoop
   <... statements ...>
   if (somecondition) disable infiniteLoop;
   <... statements ...>
 end

在測試臺中,也可以選擇使用 $finish 或 $stop 來中斷執行。

華夏公益教科書