FPGA基礎 -- Verilog 行為級建模之條件語句

Verilog 的行為級建模(Behavioral Modeling)中的條件語句(Conditional Statements),逐步從基礎到實際工程應用,適合有RTL開發基礎但希望深入行為建模的人。


一、行為級建模簡介

行為級建模(Behavioral Modeling) 是 Verilog 中最接近軟件編程風格的建模方式,描述的是“做什么(What)”,而不是“如何實現(How)”,相比于結構建模、門級建模,它更適合實現復雜控制邏輯、狀態機、時序響應等功能。

通常使用如下塊結構:

  • always @(*) (組合邏輯)
  • always @(posedge clk)(時序邏輯)

二、條件語句概述

條件語句用于在不同條件下執行不同的邏輯,Verilog 中主要包括:

語句類型用途
if / else判斷單個或多個條件
case / casex / casez多條件選擇分支
?: 三元運算符簡化 if 判斷,適合組合邏輯
unique / priority caseSystemVerilog 新特性,幫助合成優化

三、基礎語法講解

1. if / else 語句(最常用)

always @(*) beginif (sel == 1'b0)out = a;elseout = b;
end

多條件嵌套:

always @(*) beginif (a == 1'b1)y = 1;else if (b == 1'b1)y = 2;elsey = 0;
end

注意:組合邏輯中要考慮覆蓋所有條件,否則綜合器可能插入鎖存器(LATCH)。


2. case 語句

always @(*) begincase (sel)2'b00: out = a;2'b01: out = b;2'b10: out = c;default: out = d;endcase
end

適合多分支判斷。優勢在于易讀性與綜合后邏輯優化(如查找表、編碼器等)。


3. casez / casex(支持通配符)

// casez 中 z 表示可以匹配 ‘z’ 或 ‘?’
casez(opcode)6'b1??_??? : action = 1; // 通配6'b000_001: action = 2;default   : action = 0;
endcase

?? 警告:casex 會忽略所有 X/Z 位,可能隱藏 bug,建議僅在數據確實存在不確定位時使用。


4. 三元運算符 ?:

assign out = (sel == 2'b00) ? a :(sel == 2'b01) ? b :(sel == 2'b10) ? c : d;

適合結構簡單的組合邏輯,綜合后效率高。


四、工程實踐細節

(1)時序邏輯中使用條件語句

always @(posedge clk or negedge rst_n) beginif (!rst_n)cnt <= 0;else if (cnt_en)cnt <= cnt + 1;
end

使用 if 實現控制狀態機或計數器,是行為級時序邏輯建模的核心方法。


(2)避免鎖存器

以下代碼就會產生 latch(組合邏輯中未覆蓋所有條件):

always @(*) beginif (sel == 2'b00)out = a; // 若 sel 不等于 00,則 out 沒有賦值 -> latch
end

? 正確方式:

always @(*) beginout = 0; // 預設默認值if (sel == 2'b00)out = a;
end

(3)SystemVerilog 推薦用法(可選)

always_comb beginunique case (sel) // 合成優化:編譯器能確定只有一個有效條件2'b00: out = a;2'b01: out = b;default: out = d;endcase
end

uniquepriority 可以提升綜合效率并生成告警(未覆蓋等),但需綜合工具支持(如Vivado、Quartus Prime)。


五、對比表:行為級條件語句使用建議

類型建議場景優勢注意事項
if/else控制邏輯、狀態機簡單直觀注意不要遺漏條件,防 latch
case多分支選擇易讀、綜合優化要加 default
?:簡短條件賦值合成效率高結構復雜時可讀性差
unique分支互斥選擇自動檢測遺漏分支綜合器是否支持

六、結語與拓展

行為級建模是實現 狀態控制、數據流選擇、算法判斷邏輯 的基礎,條件語句的正確使用能:

  • 避免不必要的鎖存器
  • 提高可綜合性與時序優化潛力
  • 保持邏輯的簡潔清晰

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux618 NFS web.cn NFS.cn backup.cn

權限問題 推測 ssh root登錄失敗 root192.168.235.100s password: ???????? root192.168.235.100s password: ???????? root192.168.235.100s password: ???????? root192.168.235.100s password: ???????? root192.168.235.100s password: …

氧化鐿:稀土科技的“夜視高手”

氧化鐿&#xff08;Yb?O?&#xff09;是一種重要的稀土氧化物&#xff0c;這種略帶黃色的粉末&#xff0c;既不像黃金那樣耀眼&#xff0c;也不像稀土家族里的“明星”如釹、鋱那樣廣為人知&#xff0c;卻在背后默默支撐著許多高科技產業&#xff0c;特別是在紅外技術領域&am…

class對象【C#】2025復習

對象 西方思想是&#xff1a;復雜的事讓秘書去做就行。老板只需簡單的下達命令。 代碼格式如下 秘書類型 秘書A new 秘書類型(); . 秘書A.開始工作(); // 調用實例對象的方法。 特別注意的是&#xff0c;程序只會用到 秘書A&#xff0c;秘書B&…

Qt程序啟動動畫

一、Qt有3種方式實現程序啟動動畫&#xff08;介紹&#xff09; 1、QSplashScreen 靜態圖片(png、jpg等格式) 2、QMovie 動態圖片(gif格式) 3、QAxWidget 視頻(swf格式) 1.QSplashScreen 靜態圖片(png、jpg等格式) //創建啟動動畫類實例 QSplashScreen splash(QPixmap(&qu…

貪心算法經典問題

目錄 貪心思想 一、Dijkstra最短路問題 問題描述&#xff1a; 貪心策略&#xff1a; 二、Prim 和 Kruskal 最小生成樹問題 Prim 算法&#xff1a; Kruskal 算法&#xff1a; 三、Huffman樹問題 問題描述&#xff1a; 貪心策略&#xff1a; 四、背包問題 問題描述&a…

零知開源——STM32F4實現ILI9486顯示屏UI界面系列教程(一):電子書閱讀器功能

本教程將詳細介紹如何在零知增強板上使用3.5寸ILI9486顯示屏實現電子書閱讀器功能。我們將使用LVGL庫構建用戶界面&#xff0c;并實現翻頁、進度顯示等核心功能。 目錄 一、硬件連接 二、軟件UI組件實現 三、零知IDE配置 四、演示效果 五、常見問題解決 六、總結與擴展 一…

支持selenium的chrome driver更新到137.0.7151.119

最近chrome釋放新版本&#xff1a;137.0.7151.119 如果運行selenium自動化測試出現以下問題&#xff0c;是需要升級chromedriver才可以解決的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…

架構下的最終瓶頸:數據庫如何破局?

在分布式系統和云原生架構逐漸成熟的當下&#xff0c;我們已能夠靈活擴展計算資源、水平擴展服務節點、拆分業務模塊等。然而&#xff0c;在經歷過多輪架構優化之后&#xff0c;數據庫常常成為系統的“最后瓶頸”。尤其當數據量、并發量、實時性要求劇增時&#xff0c;數據庫即…

湖北理元理律師事務所小微企業債務重組方案:司法與經營的共生邏輯

小微企業債務問題常陷入“救企業還是保老板”的困局。湖北理元理律師事務所為某汽車零部件供應商設計的“經營性債務重組”方案&#xff0c;提供了創新解題思路。 核心矛盾拆解 該企業面臨三重困境&#xff1a; 矛盾類型 具體表現 法律風險等級 擔保鏈危機 老板個人擔保牽…

FastAdmin退出登錄不提示的修改方法

修改退出登錄后的提示行為 在FastAdmin中&#xff0c;默認退出登錄后會顯示"退出成功"的提示信息并跳轉頁面。要實現不顯示提示信息直接跳轉&#xff0c;可以通過以下方式修改&#xff1a; 方法一&#xff1a;修改控制器邏輯 找到application/admin/controller/Log…

工信部發布《中國工業軟件產業發展研究報告(2025)》:PLM壟斷加劇,Ai為國產PLM軟件發展契機

在6月17日上午舉行的2025南京軟件大會開幕式上&#xff0c;工信部電子第五研究所現場發布《中國工業軟件產業發展研究報告&#xff08;2025&#xff09;》&#xff08;以下簡稱《研究報告》&#xff09;&#xff0c;并從工業軟件產業發展現狀、產業發展趨勢&#xff0c;以及我國…

Flutter JSON解析全攻略:使用json_serializable實現高效序列化

引言&#xff1a;為什么我們需要JSON序列化工具&#xff1f; 在現代移動應用開發中&#xff0c;與服務器進行數據交互是必不可少的功能。JSON&#xff08;JavaScript Object Notation&#xff09;作為一種輕量級的數據交換格式&#xff0c;因其易讀性、簡潔性和廣泛支持性&…

shelve模塊的使用

shelve模塊的使用 1. 什么是Shelve2. Shelve模塊的數據存儲與讀取3. Shelve的讀取數據4. Shelve模塊的高級操作_ Shelve的數據更新和刪除5. 刪除操作可以使用del語句&#xff1a;6. Shelve的數據查詢和處理_使用for循環來遍歷Shelve對象中的所有鍵值對&#xff1a;7. Shelve模塊…

python大學校園舊物捐贈系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

Python爬蟲實戰:研究eventlet庫相關技術

1. 引言 在當今信息爆炸的時代,網絡上的數據量呈現出指數級增長的趨勢。從海量的網絡信息中獲取有價值的數據并進行分析,對于企業決策、學術研究以及個人興趣等方面都具有重要意義。網絡爬蟲作為一種自動化獲取網頁內容的技術手段,應運而生并得到了廣泛的應用。 網絡爬蟲(…

文字識別接口-智能文本處理-文字提取技術

文字識別接口&#xff0c;顧名思義&#xff0c;就是一種將圖像文字或手寫文字轉換為可編輯文本的技術。文字識別接口&#xff0c;基于深度學習算法與自主ocr核心實現多種場景字符的高精度識別與結構化信息提取&#xff0c;現已被廣泛應用于銀行、醫療、財會、教育等多個領域。 …

Redis的持久化機制詳細解析

Redis的持久化機制詳細解析 今天我們來聊聊Redis的持久化機制。想象一下&#xff0c;你正在玩一個非常精彩的游戲&#xff0c;突然斷電了&#xff0c;如果沒有存檔功能&#xff0c;所有的進度都會丟失&#xff0c;是不是很崩潰&#xff1f; Redis作為內存數據庫&#xff0c;同…

2025年SYN-CC混合攻擊防御實戰:某金融平臺抵御800Gbps雙重風暴實錄

“你以為防住SYN Flood就能高枕無憂&#xff1f;新型SYN-CC混合鏈正在撕裂傳統防御體系&#xff01;” 一、事件現場&#xff1a;一場精準的“協議層絞殺” 2025年5月&#xff0c;某跨境支付平臺遭遇史上首次SYN-CC混合攻擊&#xff0c;峰值流量達 800Gbps&#xff0c;核心交易…

JSON 編輯器:從語法到數據處理(二)

JSON 編輯器&#xff1a;從語法編寫到結構可視化&#xff08;一&#xff09;-CSDN博客 在上一篇中&#xff0c;我們了解了 JSON 的語法和編輯器&#xff0c;解決了 “怎么寫對 JSON” 的問題。 而實際開發中&#xff0c;更關鍵的是 “怎么高效處理 JSON 數據” —— 如何從商品…

按鍵開關的結構、功能與環保安全?

工業控制的核心觸手&#xff1a;深度解析按鍵開關的結構、功能與環保安全 一、 結構基石&#xff1a;雙觸點轉換機制 按鍵開關的核心在于其精妙的觸點系統。絕大多數按鍵開關都配備有兩對獨立的觸點&#xff0c;這是實現復雜控制邏輯的基礎。每一對觸點并非隨意組合&#xff…