Verilog 多路分支語句簡介
case 語句是一種多路條件分支的形式,可以解決 if 語句中有多個條件選項時使用不方便的問題。 |
case 語句是一種多路條件分支的形式,可以解決 if 語句中有多個條件選項時使用不方便的問題。
case 語句格式如下:
case(case_expr) condition1 : true_statement1 ; condition2 : true_statement2 ; …… default : default_statement ; endcase
case 語句執行時,如果 condition1 為真,則執行 true_statement1 ; 如果 condition1 為假,condition2 為真,則執行 true_statement2;依次類推。如果各個 condition 都不為真,則執行 default_statement 語句。
default 語句是可選的,且在一個 case 語句中不能有多個 default 語句。
條件選項可以有多個,不僅限於 condition1、condition2 等,而且這些條件選項不要求互斥。雖然這些條件選項是併發比較的,但執行效果是誰在前且條件為真誰被執行。
ture_statement1 等執行語句可以是一條語句,也可以是多條。如果是多條執行語句,則需要用 begin 與 end 關鍵字進行說明。
下面用 case 語句代替 if 語句實現了一個 4 路選擇器的功能。模擬結果與 testbench 可參考條件語句一章,兩者完全一致。
例項
module mux4to1( input [1:0] sel , input [1:0] p0 , input [1:0] p1 , input [1:0] p2 , input [1:0] p3 , output [1:0] sout); reg [1:0] sout_t ; always @(*) case(sel) 2'b00: begin sout_t = p0 ; end 2'b01: sout_t = p1 ; 2'b10: sout_t = p2 ; default: sout_t = p3 ; endcase assign sout = sout_t ; endmodule
case 語句中的條件選項表單式不必都是常量,也可以是 x 值或 z 值。
當多個條件選項下需要執行相同的語句時,多個條件選項可以用逗號分開,放在同一個語句塊的候選項中。
但是 case 語句中的 x 或 z 的比較邏輯是不可綜合的,所以一般不建議在 case 語句中使用 x 或 z 作為比較值。
例如,對 4 路選擇器的 case 語句進行擴充套件,舉例如下:
例項
case(sel) 2'b00: sout_t = p0 ; 2'b01: sout_t = p1 ; 2'b10: sout_t = p2 ; 2'b11: sout_t = p3 ; 2'bx0, 2'bx1, 2'bxz, 2'bxx, 2'b0x, 2'b1x, 2'bzx : sout_t = 2'bxx ; 2'bz0, 2'bz1, 2'bzz, 2'b0z, 2'b1z : sout_t = 2'bzz ; default: $display("Unexpected input control!!!"); endcase
casex、 casez 語句是 case 語句的變形,用來表示條件選項中的無關項。
casex 用 "x" 來表示無關值,casez 用問號 "?" 來表示無關值。
兩者的實現的功能是完全一致的,語法與 case 語句也完全一致。
但是 casex、casez 一般是不可綜合的,多用於模擬。
例如用 casez 語句來實現一個 4bit 控制端的 4 路選擇選擇器。
例項
module mux4to1( input [3:0] sel , input [1:0] p0 , input [1:0] p1 , input [1:0] p2 , input [1:0] p3 , output [1:0] sout); reg [1:0] sout_t ; always @(*) casez(sel) 4'b???1: sout_t = p0 ; 4'b??1?: sout_t = p1 ; 4'b?1??: sout_t = p2 ; 4'b1???: sout_t = p3 ; default: sout_t = 2'b0 ; endcase assign sout = sout_t ; endmodule
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2731418/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Verilog HDL迴圈語句簡介
- python分支語句Python
- 分支語句和迴圈語句
- 運算子、分支語句
- if 多分支語句和 switch 多分支語句的異同之處
- mysql 常用sql語句 簡介MySql
- Verilog 編譯指令簡介編譯
- Git(12)-- Git 分支 - 分支簡介Git
- JavaScript return語句簡單介紹JavaScript
- 分支、迴圈語句動態展示
- 理解Java中的switch分支語句Java
- AWK if(條件)語句與迴圈簡介
- Python:條件分支 if 語句全講解Python
- 【分支流程控制語句、迴圈流程控制語句】的學習
- Python基礎入門知識點——if 語句簡介Python
- goto語句簡整Go
- 英語簡單句
- Python常見的三種分支語句詳解!Python
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- 簡單介紹Lua中三種迴圈語句的使用
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.4. 條件語句(分支語句)OracleSQL
- C++移動建構函式以及move語句簡單介紹C++函式
- 課時34:豐富的else語句以及簡潔的with語句
- 【測試平臺開發】Vue雙向資料繫結、分支語句與遍歷語句學習教程Vue
- yaml語音簡介YAML
- 超詳細的介紹Python語句Python
- MySQL的簡單查詢語句MySql
- 簡單的SQL語句學習SQL
- MySql和簡單的sql語句MySql
- Java簡單迴圈語句案例Java
- 『忘了再學』Shell流程控制 — 35、多分支case條件語句
- 簡單介紹Git合併分支的流程步驟Git
- flask之控制語句 if 語句與for語句Flask
- go 流程控制之switch 語句介紹Go
- 8 語言模型簡介模型
- SQL Server-簡單查詢語句SQLServer
- 常識:Verilog語法-generate-for
- 常識:Verilog語法-取模