FPGA基礎 -- Verilog語言要素之值集合

一、Verilog 值集合(Value Set)

Verilog 是一種面向硬件建模的描述語言,為了更真實地模擬硬件行為,它并不僅僅像 C 語言那樣只有 01 兩種值,而是采用了四值邏輯(Four-valued logic system),這也是 Verilog 的重要特性之一。

1. Verilog 的四值邏輯

名稱含義
0邏輯 0表示低電平、電路導通、布爾“假”
1邏輯 1表示高電平、電路導通、布爾“真”
x未知(unknown)邏輯沖突、驅動不確定或無定義值,例如多個驅動沖突時產生 x
z高阻(high-impedance)表示高阻態(不驅動電路),常用于三態緩沖器的輸出或總線釋放狀態

這四個值組成 Verilog 的 值集合(Value Set),用于表示**邏輯變量(reg、wire 等)**的取值狀態。


二、四值邏輯的作用與意義

1. 為什么需要 xz

在真實硬件中,電路的狀態不僅僅是 01,比如:

  • 競爭條件導致的信號值不確定;
  • 某模塊沒有驅動總線,線被置為高阻;
  • 初始化階段還未賦值;
  • 多個驅動器驅動同一總線,但電平沖突。

這些場景都不能僅用 0 和 1 表達,因此引入 xz 是為了:

  • 更真實地模擬電路行為
  • 在仿真階段暴露潛在的設計 Bug
  • 建模總線、電平懸空、多驅動等場景

2. 示例說明

module tristate_example (input wire en,input wire data,output wire bus
);assign bus = en ? data : 1'bz;
endmodule
  • en = 1 時,bus = data
  • en = 0 時,bus = z,表示此時該模塊不驅動總線。

三、四值邏輯的運算規則簡述

運算中涉及 xz 時,結果往往是 x,表示無法確定。例如:

1'bx & 1'b1 → 1'bx
1'bx | 1'b0 → 1'bx
1'bz & 1'b1 → 1'bx

這是因為:

  • x 可能是 0 也可能是 1,無法判斷;
  • z 表示不確定狀態,參與邏輯運算也通常返回 x

四、在仿真與綜合中的差異

仿真行為綜合行為
0, 1正常正常
x仿真引擎將其視為未知,用于暴露競態、未初始化等問題綜合工具會忽略 x,只看驅動條件邏輯
z表示高阻態,通常用于建模三態緩沖器一般只在支持三態的目標器件中綜合保留,否則會被等效處理為 mux

所以,在仿真中 x/z 極具診斷價值,而綜合中則需要謹慎使用。


五、工程實踐建議

  1. x 做初始化測試

    reg [3:0] state = 4'bx; // 仿真時暴露未初始化的狀態機錯誤
    
  2. 總線建模使用 z

    assign bus = (enable) ? data : 1'bz;
    
  3. 避免在 RTL 中使用 x 參與運算,否則綜合結果可能與仿真不一致。

  4. 邏輯覆蓋檢查工具(如 Vivado Coverage) 可幫助分析 x 傳播路徑。


六、進階:強制賦值(force)與釋放(release)可用于調試 x/z

initial beginforce signal = 1'bx;#10 release signal;
end

總結

Verilog 的 值集合(0, 1, x, z) 提供了對真實硬件行為的強表達能力,是進行準確電路建模和驗證的基礎。

類型描述
0/1硬件中真實存在的電平
x表示無法確定,暴露潛在問題
z模擬高阻或總線釋放狀態

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

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

相關文章

開源一個芯片自由的脫機下載器

一、什么是脫機下載器 簡單來說,脫機下載器就是在不連接電腦、不用專業軟件的情況下,也能幫你把程序燒錄進芯片的工具。只要插上電源、按個按鈕,固件就自動下載進 MCU,非常適合量產、售后、維修等場景。 二、芯片自由的背后&…

Rust 學習筆記:關于模式匹配的練習題

Rust 學習筆記:關于模式匹配的練習題 Rust 學習筆記:關于模式匹配的練習題問題一問題二問題三 Rust 學習筆記:關于模式匹配的練習題 參考視頻: https://www.bilibili.com/video/BV1YxojYJESm 問題一 以下代碼能否通過編譯&…

利用tkinter函數構造MD5加密的可視化操作界面

GitHub文檔地址: https://github.com/gao7025/auto_entry_md5.git 引言 利用tkinter構造一個圖形界面的創建函數,主要實現了文件選擇、MD5加密處理、結果預覽和下載等功能。下面是主要涉及的功能模塊:主框架、文件選擇部分、MD5加密部分、結…

ICEM CFD網格生成 | 基本概念與界面工具

基本概念◆ 名稱定義 網格:網格是空間離散的單元,用于如下數值仿真 結構 流體 電磁 其他 單元 0D – 節點單元 質量點 約束,加載位置 1D –線單元 Bars, beams, rods, springs 2D 網格邊界 2D – 表面/殼單元 - 四邊形 - 三角…

簡化您的工作流程:在 Azure 中構建高效的邏輯應用程序

簡介 在當今的數字化環境中,自動化工作流程和服務集成對于追求效率和敏捷性的企業至關重要。Azure Logic Apps 使開發人員和 IT 專業人員能夠創建集成應用、數據、服務和系統的自動化工作流程。在本文中,我們將逐步講解使用 Azure 門戶創建 Logic Apps 的過程,并通過演示來說…

AI 技術落地實戰:開發流程優化、行業場景重塑與前沿應用洞察

在人工智能技術如火如荼發展的當下,AI 工具、大模型以及它們在各行業的應用,正以前所未有的態勢重塑著開發者的工作模式和各領域的發展格局。從智能編碼助手讓編程變得高效便捷,到自動化測試平臺提升軟件質量,從大模型在垂直行業的…

文本生成AI+圖像識別:電商詳情頁信息提取實戰

行業問題:傳統采集難以應對“圖文視頻化”的電商信息 在電商平臺不斷“視頻化”的趨勢下,傳統的網頁采集手段正逐漸失效。以抖音為例,商品信息已不僅限于圖文詳情,而是通過短視頻、圖像混排、語音解說等形式呈現。商品的名稱、優…

linux權限基礎

權限的概念 linux中,權限是用于控制【用戶】對 【文件】進行操作控制的工具。用戶權限文件權限 用戶權限 用戶 用戶組:具有相同特性的用戶的集合體。 文件權限 linux中,一切皆文件,包括普通文件,目錄,文件…

讓C++處理JSON類型配置文件更輕松-Hjson-cpp詳解

讓C處理JSON類型配置文件更輕松-Hjson-cpp詳解 一、Hjson-Cpp簡介Hjson-Cpp簡介核心特性安裝與集成基本用法示例常用API說明與JSON互轉錯誤處理性能建議高級特性1. 類型安全訪問2. 文件操作3. 自定義解析規則 二、使用教程下載使用 一、Hjson-Cpp簡介 Hjson-Cpp簡介 Hjson-Cp…

單例模式的好處

為什么要使用單例模式 1.資源管理: 唯一性:某些資源在整個應用程序中只需要一個實例,例如日志記錄器、配置管理器、數據庫連接池等。單例模式可以確保這些資源的唯一性,避免重復創建和管理。 全局訪問:單例模式提供了…

LangChain 結構化輸出指南

LangChain 結構化輸出指南 概述 對于許多應用程序(如聊天機器人),模型需要直接用自然語言回應用戶。然而,在某些場景下,我們需要模型以結構化格式輸出。例如,我們可能希望將模型輸出存儲在數據庫中&#…

探究webView與html的通訊

最近出來個新需求: 需求描述: 將uniapp的代碼打包成一個app,并實現原本的功能。 原uniapp是一個H5項目,主要的步驟流程是上傳用戶的身份證進行二要素認證,成功后再進行三方活體認證,然后三方回跳到項目中的…

高級定時器TIM1、TIM8

高級定時器在通用定時器的基礎上增加了一些功能,如:重復計數器、帶死區控制的互補輸出通道、斷路輸入等。 捕獲/比較通道的輸出部分(通道1至3) 捕獲/比較通道的輸出部分(通道4) ①重復計數器RCR 基本和通用定時器發生溢出時,會直接生成更新時…

搭建簡易采購系統:從需求分析到供應商數據庫設計

一、需求分析框架(4大核心模塊) 關鍵需求清單: 需求提報(含審批流) 供應商準入與評估 比價與訂單生成 基礎報表功能 二、技術選型方案 組件推薦方案替代方案前端框架Vue.js ElementUIReact Ant Design后端語言P…

基于LSTM-GARCH混合模型的“獲利了結”量化解析:黃金單日1.27%跌幅的技術性歸因

摘要:本文通過多維度量化指標、結合地緣風險溢價因子、貨幣政策預期指數及貿易摩擦不確定性指數,構建動態情景分析框架。 一、黃金價格技術面解析 周一(6月16日)現貨黃金呈現"沖高回落-獲利了結"典型特征,日…

【AI】Spring AI Alibaba 的介紹

目錄 一、Spring AI Alibaba 的介紹 1.1 什么是 Spring AI Alibaba? 1.2 Spring AI 項目簡介 二、核心概念 2.1 模型 2.2 提示(Prompt) 2.3 提示詞模板(Prompt Template) 2.4 嵌入(Embedding&#x…

從main()函數的執行發散開來

大多數程序員的第一行代碼可能都是從輸出“Hello&#xff0c;World!開始的吧。如果請你寫一個c程序&#xff0c;在屏幕上打印“Hello&#xff0c;World!”&#xff0c;下面的代碼對擁有扎實編程基本功的你而言肯定so easy&#xff1a; #include <stdio.h>int main() {pr…

(16)java+ selenium->自動化測試-元素定位之By xpath下篇

1.簡介 老規矩,我們還是接著前面兩篇的Xpath 5.自動測試實戰 以百度首頁為例,將xpath的各種定位方法一一講解和分享一下。 5.1大致步驟 1.訪問百度首頁。 2.通過xpath定位到元素,點擊一下。 5.2模糊定位starts-with關鍵字 有一種特殊的情況:頁面元素的屬性值會被動態…

45-Oracle 索引的新建與重建

小伙們日常里有沒有被業務和BOSS要求新建索引或是重建索引&#xff1f;他們都想著既快又穩&#xff0c;那么索引在在Oracle上如何實現、新建、重建。原則是什么&#xff1a; 1、新建索引&#xff0c;查詢是否高頻且慢&#xff0c;索引列是否高選擇性&#xff0c;新增索引對寫負…

使用 Rust Clippy 的詳細方案

使用 Rust Clippy 的詳細方案 Rust Clippy 是一個強大的靜態分析工具&#xff0c;幫助開發者識別代碼中的潛在問題并改善代碼質量。以下是如何充分利用 Clippy 的方法&#xff1a; 安裝 Clippy 確保 Rust 工具鏈已安裝。通過以下命令安裝 Clippy&#xff1a; rustup compon…