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迴圈語句簡介
- Javase—分支語句Java
- python分支語句Python
- if 多分支語句和 switch 多分支語句的異同之處
- SQL語句的分類簡介SQL
- Verilog 編譯指令簡介編譯
- 理解Java中的switch分支語句Java
- Python常見的三種分支語句詳解!Python
- mysql 常用sql語句 簡介MySql
- JavaScript return語句簡單介紹JavaScript
- javascript with()語句用法簡單介紹JavaScript
- 多路徑軟體介紹
- AWK if(條件)語句與迴圈簡介
- javascript流程控制語句簡單介紹JavaScript
- Laravel多路由檔案,路由分組Laravel路由
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.4. 條件語句(分支語句)OracleSQL
- Verilog 過程結構簡述
- solr以及ik分詞器簡介Solr分詞
- js如何退出迴圈語句簡單介紹JS
- 《從零開始學Swift》學習筆記(Day 18)——有幾個分支語句?Swift筆記
- javascript的分號(;)用法簡單介紹JavaScript
- Python線性分類模型簡介Python模型
- Python打包分發工具setuptools簡介Python
- Python基礎入門知識點——if 語句簡介Python
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- javascript for in語句瀏覽器相容問題簡單介紹JavaScript瀏覽器
- js使用與或運算子替代if語句簡單介紹JS
- 大資料分類和架構簡介大資料架構
- 同步阻塞、同步非阻塞、多路複用的介紹
- ProxySQL簡介原理及讀寫分離應用SQL
- pyhanlp 中文詞性標註與分詞簡介HanLP詞性標註分詞
- SQL分頁語句SQL
- 專用IE瀏覽器的if判斷語句簡單介紹瀏覽器
- 大資料簡介,技術體系分類整理大資料
- mongodb常用語句介紹MongoDB
- 精妙SQL語句介紹SQL
- C++移動建構函式以及move語句簡單介紹C++函式
- 用if條件語句來實現瀏覽器相容簡單介紹瀏覽器