在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在verilog中使用If語句和case語句?

Hack電子 ? 來源:IC設計er ? 2023-04-18 09:45 ? 次閱讀

在這篇文章中,我們討論了verilog中最常用的兩個結構-if語句和case語句。

我們在上一篇文章中已經看到了如何使用程序塊(例如 always 塊來編寫按順序執行的 verilog 代碼。 我們還可以在程序塊中使用許多語句來控制在我們的verilog設計中信號賦值的方式。

這些語句統稱為順序語句。case 語句和 if 語句都是 verilog 中順序語句的示例。在這篇文章的其余部分,我們將討論如何在verilog中使用這兩個語句。

然后,我們考慮這兩個結構的簡短示例,以說明我們如何在實踐中使用它們。

Verilog If 語句

if 語句是一個條件語句,它使用布爾條件來確定要執行哪些verilog代碼塊。只要條件的計算結果為 true,就會執行與該條件關聯的代碼分支。此語句類似于其他編程語言(如 C)中使用的 if 語句。

下面的 verilog 代碼片段顯示了 if 語句的基本語法。

1 if()begin
2 // Code to execute
3 end
4 elseif()begin
5 // Code to execute
6 end
7 elsebegin
8 // Code to execute
9 end

如果我們不需要 else 和 else 分支,我們可以從語句中刪除它們。事實上,我們已經在關于always塊的帖子中看到了這一點,我們在其中使用 posedge 宏來檢測時鐘信號的上升沿。如果需要,我們可以包含盡可能多的其他分支,以正確建模底層電路。

if 語句使用布爾條件來確定要執行的代碼行

在上面的代碼段中,這些表達式由 給出。這些表達式按順序計算,如果表達式的計算結果為 true,則執行與表達式關聯的代碼。 if 語句只有一個分支將執行。這通常是計算結果為 true 的第一個表達式。唯一的例外情況是,當所有表達式都不為 true 時。在這種情況下,將執行 else 分支中的代碼。當我們在 if 語句代碼中省略 else 分支時,在這種情況下不會執行任何分支。

與每個分支關聯的代碼可以包含任何有效的 verilog 代碼,包括進一步的 if 語句。此方法稱為嵌套 if 語句。 在 verilog 中使用這種類型的代碼時,我們應該注意限制嵌套語句的數量,因為它可能會導致滿足時間的困難。

If 語句示例

我們已經看到了 if 語句的實際示例,當在 verilog always塊的帖子中對觸發器進行建模時。為了更徹底地演示此結構,讓我們考慮一個時鐘多路復用器的示例。

在本例中,我們將使用異步復位的 D 類型觸發器來保存多路復用器的輸出。下面的電路圖顯示了我們將在本例中使用的電路。

31358a3e-dd86-11ed-bfe3-dac502259ad0.png

下面的代碼片段顯示了我們如何使用單個 always 塊和 if 語句來實現這一點。

1 always@(posedgeclock,posedgereset)begin
2 if(reset)begin
3 Q <=?1'b0;
4 end
5 elsebegin
6 if(addr)begin
7 Q <= b;
8 end
9 elsebegin
10 Q <= a;
11 end
12 end
13 end

在此示例中,我們使用第一個if語句在復位時觸發,輸出0。當復位無效時,always塊已由時鐘的上升沿觸發。我們使用第一個 if 語句的 else 分支來被觸發,我們使用第二個if語句來模擬多路復用電路的行為。這是 verilog 中嵌套 if 語句的示例。

當 addr 信號為 0b時,我們使用嵌套 if 語句的第一個分支被觸發,將輸入a賦值給輸出。然后,我們使用嵌套 if 語句的 else 分支來捕獲 addr信號為1b 時的情況。 我們也可以在這里使用 else-if 類型語句,但 else 語句更簡潔。這兩種情況下的行為是相同的,因為信號在實際電路中只能是0b或1b。

Verilog case語句

我們使用 verilog case 語句根據設計中給定信號的值選擇要執行的代碼塊。當我們在verilog中編寫語句時,我們指定了一個要監視和評估的輸入信號。然后將該信號的值與case語句的每個分支中指定的值進行比較。找到輸入信號值的匹配項后,將執行與該值關聯的分支。 verilog case語句執行的功能 C語言中的switch語句相同。下面的代碼片段顯示了 verilog 中case語句的一般語法。

1 case()
2 :begin
3 // This branch executes when =
4 end
5 :begin
6 // This branch executes when =
7 end
8 default:begin
9 // This branch executes in all other cases
10 end
11 endcase

可以刪除語句的默認分支,盡管這是不可取的。如果刪除默認分支,則<變量>的所有有效值都必須具有自己的分支。與 if 語句一樣,與每個分支關聯的代碼可以包含任何有效的 verilog 代碼。這包括進一步嵌套順序語句,例如if或case語句。同樣,我們應該嘗試限制嵌套語句的數量,因為它可以更輕松地滿足我們的計時要求。

case語句示例 為了更好地演示erilog中使用case語句的使用方式,讓我們考慮一個基本示例。在本例中,我們將介紹一個簡單的四比一多路復用電路。 我們經常使用 case 語句在 verilog 中對大型多路復用器進行建模,因為它生成的代碼比基于連續賦值的實現更具可讀性。下面的電路圖顯示了我們將在本例中使用的電路。

下面的代碼片段顯示了我們將如何使用 case 語句實現此電路。

31493f20-dd86-11ed-bfe3-dac502259ad0.png

1 always@(*)begin
2 case(addr)
3 2'b00:begin
4 q = a;
5 end
6 2'b01:begin
7 q = b;
8 end
9 2'b10:begin
10 q = c;
11 end
12 default:begin
13 q = d;
14 end
15 endcase
16 end

此示例顯示了使用 verilog中的case語句對多路復用器進行建模是多么簡單。事實上,case語句提供了在 verilog 中對多路復用器進行建模的最直觀方法。 雖然這個例子很簡單,但有幾個要點我們應該更詳細地考慮。在這個例子中首先要注意的是,我們使用阻塞賦值。這樣做的原因是我們正在對組合邏輯進行建模,而非阻塞分配通常會導致在我們的設計中放置觸發器。

這里要注意的另一件事是,我們可以從此示例中刪除默認關鍵字。然后,我們將顯式列出輸出d 值所需的 addr 值。但是,我們在此示例中包含了默認關鍵字,以演示應如何使用它。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110190
  • 編程語言
    +關注

    關注

    10

    文章

    1947

    瀏覽量

    34848
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61256
  • 時鐘信號
    +關注

    關注

    4

    文章

    449

    瀏覽量

    28610

原文標題:Verilog中的If語句和case語句

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    何在bash中使用條件語句

    今天我們介紹一下如何在 bash 中使用條件語句
    的頭像 發表于 12-09 17:27 ?2180次閱讀
    如<b class='flag-5'>何在</b>bash<b class='flag-5'>中使</b>用條件<b class='flag-5'>語句</b>

    verilog中generate語句的用法分享

    generate為verilog中的生成語句,當對矢量中的多個位進行重復操作時,或者當進行多個模塊的實例引用的重復操作時,或者根據參數的定義來確定程序中是否應該包含某段Verilog代碼的時候
    發表于 12-23 16:59

    開關語句和循環語句

    switch/case開關語句是一種多分支選擇語句,是用來實現多方向條件分支的語句。雖然從理論上講采用條件語句也可以實現多方向條件分支,但是
    發表于 07-15 14:26 ?18次下載

    verilog中if與case語句不完整產生鎖存器的原因分析

      在很多地方都能看到,verilog中if與case語句必須完整,即if要加上else,case后要加上default語句,以防止鎖存器的
    發表于 09-16 09:29 ?24次下載

    Verilog可綜合的循環語句

    Verilog中提供了四種循環語句,可用于控制語句的執行次數,分別為:for,while,repeat,forever。其中,for,while,repeat是可綜合的,但循環的次數需要在編譯之前就確定,動態改變循環次數的
    發表于 10-13 12:23 ?2w次閱讀

    FPGA代碼經驗 case,casez,casex語句

    使用case語句代替嵌套的if-else將會產生更易讀的代碼,更好的邏輯利用率和更高的性能。
    的頭像 發表于 12-11 10:42 ?6304次閱讀

    CASE語句的執行規則是什么?

    CASE語句用來選擇幾個分支程序部分之一。選擇是基于選擇表達式當前值的。
    的頭像 發表于 10-09 09:26 ?5461次閱讀
    <b class='flag-5'>CASE</b><b class='flag-5'>語句</b>的執行規則是什么?

    Verilog教程之Verilog HDL程序設計語句和描述方式

    本文檔的主要內容詳細介紹的是Verilog教程之Verilog HDL程序設計語句和描述方式。
    發表于 12-09 11:24 ?47次下載
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL程序設計<b class='flag-5'>語句</b>和描述方式

    verilog中的initial語句說明

    解釋verilog HDL中的initial語句的用法。
    發表于 05-31 09:11 ?0次下載

    簡述Verilog HDL中阻塞語句和非阻塞語句的區別

    ? 在Verilog中有兩種類型的賦值語句:阻塞賦值語句(“=”)和非阻塞賦值語句(“=”)。正確地使用這兩種賦值語句對于
    的頭像 發表于 12-02 18:24 ?6277次閱讀
    簡述<b class='flag-5'>Verilog</b> HDL中阻塞<b class='flag-5'>語句</b>和非阻塞<b class='flag-5'>語句</b>的區別

    什么是SystemVerilog-決策語句-if-else語句

    決策語句(Decision statements)允許程序塊的執行流程根據設計中信號的當前值分支到特定語句。SystemVerilog有兩個主要的決策語句:if…else語句
    的頭像 發表于 02-09 14:15 ?1210次閱讀
    什么是SystemVerilog-決策<b class='flag-5'>語句</b>-if-else<b class='flag-5'>語句</b>?

    Verilog中的If語句case語句介紹

    。這些語句統稱為順序語句case 語句和 if 語句都是 verilog 中順序
    的頭像 發表于 05-11 15:37 ?4676次閱讀
    <b class='flag-5'>Verilog</b>中的If<b class='flag-5'>語句</b>和<b class='flag-5'>case</b><b class='flag-5'>語句</b>介紹

    Verilog常用的循環語句及用途

    本文主要介紹verilog常用的循環語句,循環語句的用途,主要是可以多次執行相同的代碼或邏輯。
    的頭像 發表于 05-12 18:26 ?2604次閱讀

    case后邊可以跟多個語句

    是的,"case" 后面可以跟多個語句。在編程語言中,"case" 通常被用于 switch 語句中,用于檢查一個變量或表達式是否匹配某個特定的值。當匹配成功時,可以執行一個或多個
    的頭像 發表于 11-30 14:19 ?6957次閱讀

    java中的switch語句 case的取值

    Java中的switch語句是一種用于多重條件判斷的語句,用于根據不同的條件執行不同的代碼塊。在switch語句中,case關鍵字用來指定不同的取值。 在Java中,switch
    的頭像 發表于 11-30 16:05 ?1215次閱讀
    主站蜘蛛池模板: 她也啪97在线视频| 人人搞人人干| 免费人成网555www| 免费日本黄色| 精品视频卡1卡2卡3| 九色综合久久综合欧美97| 国产精品99r8免费视频2022| 国产一级片免费看| 99久久无色码中文字幕| 午夜在线播放| 精品女同| h网站在线免费观看| 九九久久久久午夜精选| 伊人久久大香线蕉综合亚洲| 婷婷色激情| 女人张开腿让男人捅爽| 国产嫩草影院精品免费网址| 伊人网在线免费视频| 人人草人| 91亚洲国产成人久久精品网站| 日本不卡视频免费| 天堂网资源| 欧美艹逼视频| 777国产精品永久免费观看| 狼人狠狠干| 一区在线观看视频| 国产美女亚洲精品久久久综合 | 五月情视频在线观看| 日韩一级高清| 国产美女精品在线| 三a大片| 岛国大片在线播放| 亚洲综合色婷婷中文字幕| 拍拍拍美女黄色1000视频| 国产精品主播在线观看| 日韩一级片在线免费观看| 高清xxx| 推倒都市极品贵妇| 噜啪啪| 天堂网在线最新版www| 天天干天天插天天射|