Verilog關(guān)鍵詞的條件語(yǔ)句實(shí)例詳解
關(guān)鍵詞:if,選擇器
條件語(yǔ)句
條件(if)語(yǔ)句用于控制執(zhí)行語(yǔ)句要根據(jù)條件判斷來(lái)確定是否執(zhí)行。
條件語(yǔ)句用關(guān)鍵字 if 和 else 來(lái)聲明,條件表達(dá)式必須在圓括號(hào)中。
條件語(yǔ)句使用結(jié)構(gòu)說(shuō)明如下:
if (condition1) true_statement1 ; else if (condition2) true_statement2 ; else if (condition3) true_statement3 ; else default_statement ;
- if 語(yǔ)句執(zhí)行時(shí),如果 condition1 為真,則執(zhí)行 true_statement1 ;如果 condition1 為假,condition2 為真,則執(zhí)行 true_statement2;依次類推。
- else if 與 else 結(jié)構(gòu)可以省略,即可以只有一個(gè) if 條件判斷和一組執(zhí)行語(yǔ)句 ture_statement1 就可以構(gòu)成一個(gè)執(zhí)行過(guò)程。
- else if 可以疊加多個(gè),不僅限于 1 或 2 個(gè)。
- ture_statement1 等執(zhí)行語(yǔ)句可以是一條語(yǔ)句,也可以是多條。如果是多條執(zhí)行語(yǔ)句,則需要用 begin 與 end 關(guān)鍵字進(jìn)行說(shuō)明。
下面代碼實(shí)現(xiàn)了一個(gè) 4 路選擇器的功能。
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 @(*) begin if (sel == 2'b00) sout_t = p0 ; else if (sel == 2'b01) sout_t = p1 ; else if (sel == 2'b10) sout_t = p2 ; else sout_t = p3 ; end assign sout = sout_t ; endmodule
testbench 代碼如下:
`timescale 1ns/1ns module test ; reg [1:0] sel ; wire [1:0] sout ; initial begin sel = 0 ; #10 sel = 3 ; #10 sel = 1 ; #10 sel = 0 ; #10 sel = 2 ; end mux4to1 u_mux4to1 ( .sel (sel), .p0 (2'b00), //path0 are assigned to 0 .p1 (2'b01), //path1 are assigned to 1 .p2 (2'b10), //path2 are assigned to 2 .p3 (2'b11), //path3 are assigned to 3 .sout (sout)); //finish the simulation always begin #100; if ($time >= 1000) $finish ; end endmodule
仿真結(jié)果如下。
由圖可知,輸出信號(hào)與選擇信號(hào)、輸入信號(hào)的狀態(tài)是相匹配的。
事例中 if 條件每次執(zhí)行的語(yǔ)句只有一條,沒有使用 begin 與 end 關(guān)鍵字。但如果是 if-if-else 的形式,即便執(zhí)行語(yǔ)句只有一條,不使用 begin 與 end 關(guān)鍵字也會(huì)引起歧義。
例如下面代碼,雖然格式上加以區(qū)分,但是 else 對(duì)應(yīng)哪一個(gè) if 條件,是有歧義的。
if(en) if(sel == 2'b1) sout = p1s ; else sout = p0 ;
當(dāng)然,編譯器一般按照就近原則,使 else 與最近的一個(gè) if(例子中第二個(gè) if)相對(duì)應(yīng)。
但顯然這樣的寫法是不規(guī)范且不安全的。
所以條件語(yǔ)句中加入 begin 與 and 關(guān)鍵字就是一個(gè)很好的習(xí)慣。
例如上述代碼稍作修改,就不會(huì)再有書寫上的歧義。
if(en) begin if(sel == 2'b1) begin sout = p1s ; end else begin sout = p0 ; end end
以上就是Verilog關(guān)鍵詞的多條件語(yǔ)句實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Verilog關(guān)鍵詞條件語(yǔ)句的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用命令進(jìn)行簡(jiǎn)單的增量文件夾備份(win/linux)
這兩天突然看到一個(gè)需求點(diǎn),需要實(shí)現(xiàn)增量備份的功能,找了一些資料,記錄一下如下命令,該命令可以利用命令行進(jìn)行簡(jiǎn)單的增量備份功能2013-03-03基于canvas剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果
這篇文章主要介紹了基于canvas剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03Verilog關(guān)鍵詞的多分支語(yǔ)句實(shí)例詳解
這篇文章主要為大家介紹了Verilog關(guān)鍵詞的多分支語(yǔ)句實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04在InstallShield中引用WINSOCK 的示例代碼
在InstallShield中引用WINSOCK 的示例代碼...2007-03-03服務(wù)啟動(dòng)項(xiàng)Start類型詳解
這篇文章主要介紹了服務(wù)啟動(dòng)項(xiàng) Start類型詳解,需要的朋友可以參考下2022-11-11