溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Verilog關(guān)鍵詞的條件語句怎么使用

發(fā)布時(shí)間:2023-04-11 14:58:32 來源:億速云 閱讀:106 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Verilog關(guān)鍵詞的條件語句怎么使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Verilog關(guān)鍵詞的條件語句怎么使用文章都會(huì)有所收獲,下面我們一起來看看吧。

關(guān)鍵詞:if,選擇器

條件語句

條件(if)語句用于控制執(zhí)行語句要根據(jù)條件判斷來確定是否執(zhí)行。

條件語句用關(guān)鍵字 if 和 else 來聲明,條件表達(dá)式必須在圓括號(hào)中。

條件語句使用結(jié)構(gòu)說明如下:

if (condition1)       true_statement1 ;
else if (condition2)        true_statement2 ;
else if (condition3)        true_statement3 ;
else                      default_statement ;
  • if 語句執(zhí)行時(shí),如果 condition1 為真,則執(zhí)行 true_statement1 ;如果 condition1 為假,condition2 為真,則執(zhí)行 true_statement2;依次類推。

  • else if 與 else 結(jié)構(gòu)可以省略,即可以只有一個(gè) if 條件判斷和一組執(zhí)行語句 ture_statement1 就可以構(gòu)成一個(gè)執(zhí)行過程。

  • else if 可以疊加多個(gè),不僅限于 1 或 2 個(gè)。

  • ture_statement1 等執(zhí)行語句可以是一條語句,也可以是多條。如果是多條執(zhí)行語句,則需要用 begin 與 end 關(guān)鍵字進(jìn)行說明。

下面代碼實(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),        //path2 are assigned to 1
        .p2     (2'b10),        //path3 are assigned to 2
        .p3     (2'b11),        //path4 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)是相匹配的。

Verilog關(guān)鍵詞的條件語句怎么使用

事例中 if 條件每次執(zhí)行的語句只有一條,沒有使用 begin 與 end 關(guān)鍵字。但如果是 if-if-else 的形式,即便執(zhí)行語句只有一條,不使用 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ī)范且不安全的。

所以條件語句中加入 begin 與 and 關(guān)鍵字就是一個(gè)很好的習(xí)慣。

例如上述代碼稍作修改,就不會(huì)再有書寫上的歧義。

if(en) begin
    if(sel == 2'b1) begin
        sout = p1s ;
    end
    else begin
        sout = p0 ;
    end
end

關(guān)于“Verilog關(guān)鍵詞的條件語句怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Verilog關(guān)鍵詞的條件語句怎么使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI