FPGA基礎 -- Verilog語言要素之變量類型

Verilog 變量類型(Variable Types)


一、什么是變量類型?

在 Verilog 中,變量類型用于保存過程賦值結果(由 always 或 initial 塊賦值),通常用于建模寄存器、狀態、計數器等“帶記憶”的硬件行為。

它與 wire 不同,變量不代表電路連接線,而是代表一個可以存儲值的邏輯存儲單元


二、常見變量類型一覽表

變量類型位寬支持默認值可綜合用途說明
reg?x?最常用,建模時序邏輯
integer?(固定32位)x?(有限支持)仿真用的整數、循環變量
real?0.0?浮點數仿真使用,不可綜合
realtime?0.0?精確時間建模(和 real 相同)
time?(64位)x?(有限)表示時間戳
genvar?(宏展開)?generate 塊中用于宏生成的變量

三、重點變量類型詳解

1. reg 類型(最常用)

? 用途:
  • 建模寄存器或組合邏輯的中間變量
  • 必須在過程塊中賦值:always, initial
? 示例:
reg [7:0] counter;always @(posedge clk or posedge rst)if (rst)counter <= 8'd0;elsecounter <= counter + 1;
?? 注意:
  • reg ≠ “寄存器” → 它是過程變量綜合后是否為寄存器取決于賦值方式
  • reg 不能在連續賦值中使用(如 assign

2. integer 類型(32 位有符號)

? 用途:
  • 用于循環變量、調試計數器、文件操作等仿真環境
  • 不能聲明位寬
  • signed 類型
? 示例:
integer i;initial beginfor (i = 0; i < 10; i = i + 1)$display("i = %d", i);
end
?? 注意:
  • 綜合工具對 integer 支持有限,推薦用于仿真或將其替換為 reg [31:0]

3. realrealtime

? 用途:
  • 表示小數、浮點數(如仿真中的模擬溫度、噪聲等)
  • 不能進行按位操作
? 示例:
real pi;
initial beginpi = 3.1415926;$display("PI = %f", pi);
end
?? 不可綜合

4. time 類型(64 位無符號)

? 用途:
  • 表示時間單位,如延遲、時間戳
time t_start, t_end;initial begint_start = $time;#100;t_end = $time;$display("Elapsed time = %0t", t_end - t_start);
end

5. genvar(生成變量)

? 用途:
  • generate-for 塊中,用于宏展開
  • 不能用于仿真運算,僅用于代碼生成時的循環變量
genvar i;
generatefor (i = 0; i < 8; i = i + 1) begin : gen_blkassign y[i] = a[i] & b[i];end
endgenerate

四、變量賦值類型:阻塞與非阻塞

1. 阻塞賦值 =

  • 按順序執行,一條語句執行完才執行下一條
  • 用于組合邏輯建模
a = b;
b = a;  // b 會等于原始 b,而不是 a

2. 非阻塞賦值 <=

  • 同步更新,常用于時序邏輯(always @(posedge clk))
  • 表示“值將在時鐘沿之后統一更新”
a <= b;
b <= a;  // 同一時刻交換

🚨 常見誤用

always @(posedge clk) begina = b;  // ? 錯誤:應使用非阻塞賦值
end

五、變量類型的可綜合性對比

類型可綜合常見用法
reg?狀態寄存器、計數器
integer?(有限)仿真循環變量
real?仿真模型
time?(有限)延遲監測、時間戳
genvar?(宏生成)結構展開、模塊實例化

? 總結:變量與線網類型對比表

屬性Net (wire)Variable (reg, integer, …)
可用于 assign??
可用于 always??
表示含義連接信號線存儲狀態
初始值zx(除 integer)
多驅動支持不支持
合成為電路?(組合邏輯)?(組合或時序邏輯)

? 建議實踐風格

場景推薦使用
寄存器、狀態機、計數器reg
循環變量、仿真測試integer
組合中間變量(always)reglogic
時序邏輯建模非阻塞 <=
組合邏輯建模阻塞 =
generate-for 宏生成genvar

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

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

相關文章

使用Haporxy搭建Web群集

目錄 一、案例分析 1.案例概述 2.案例前置知識點 2.1 HTTP請求 2.2 負載均衡常用調度算法 2.3常見的Web群集調度器 3.案例環境 3.1本案例環境 二、案例實施 1.搭建兩臺web服務器 2.安裝Haproxy 3.haproxy服務器配置 修改haproxy的配置文件 4.測試web群集 5.haproxy的日…

pikachu靶場通關筆記38 目錄遍歷(路徑遍歷)

目錄 一、目錄遍歷 二、源碼分析 三、目錄遍歷與文件包含 四、實戰滲透 1、進入靶場 2、目錄遍歷 &#xff08;1&#xff09;訪問ace.min.css &#xff08;2&#xff09;訪問fileinclude.php 本系列為《pikachu靶場通關筆記》滲透實戰&#xff0c;本文通過對目錄遍歷源…

現代C++:std::string全方位碾壓C字符串

在 C 中引入的 std::string 是對 C 語言中 char* 和 const char* 的一種現代化封裝和增強。它不僅解決了 C 字符串的許多缺陷&#xff08;如安全性、內存管理、易用性等&#xff09;&#xff0c;還提供了豐富的 API 來簡化字符串操作。本文將從多個維度詳細對比 std::string 與…

20250619周四:Atlassian

今天主要把conference上的A xxx的所有資料大體看了一遍&#xff0c;花了兩個多小時。 公司的這個conference系統&#xff0c;共實就是一個大型的可多人在線編輯的文件系統。差不多所有的資料都共享在上面。這對于多人參與的項目管理&#xff0c;還是相當方便的。 Atlassian最特…

通過CDH安裝Spark的詳細指南

通過CDH安裝Spark的詳細指南 簡介 Cloudera Distribution of Hadoop (CDH) 是一個企業級的大數據平臺,它集成了多個開源組件,包括Hadoop、Spark、Hive等。本文將詳細介紹如何通過CDH安裝和配置Spark。 前提條件 在開始安裝之前,請確保滿足以下條件: 已安裝CDH集群具有管…

GitLab CVE-2025-5121 安全漏洞解決方案

本分分享極狐GitLab 補丁版本 18.0.2, 17.11.4, 17.10.8 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼&#xff0c;我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS&#xff0c;技術團隊已經進行了升級&#xff0c;無需用戶采取任…

【八股消消樂】Elasticsearch優化—檢索Labubu

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本專欄《八股消消樂》旨在記錄個人所背的八股文&#xff0c;包括Java/Go開發、Vue開發、系統架構、大模型開發、具身智能、機器學習、深度學習、力扣算法等相關知識點&#xff…

如何實現基于場景的接口自動化測試用例?

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 自動化本身是為了提高工作效率&#xff0c;不論選擇何種框架&#xff0c;何種開發語言&#xff0c;我們最終想實現的效果&#xff0c;就是讓大家用最少的代碼&…

FreeRTOS 任務管理學習筆記

FreeRTOS 任務管理學習筆記 引言 本文檔旨在通過在STM32微控制器上使用FreeRTOS來理解和實現任務管理。實驗的重點是創建和管理多個任務、處理任務同步以及通過簡單的硬件接口控制任務狀態。 實驗概述 實驗涉及創建三個任務&#xff1a; LED1_Task: 每300毫秒切換一次LED。…

c++set和pair的使用

set是C中的一種關聯容器&#xff0c;具有以下特點&#xff1a; 存儲唯一元素&#xff08;不允許重復&#xff09; 元素自動排序&#xff08;默認升序&#xff09; 基于紅黑樹實現&#xff08;平衡二叉搜索樹&#xff09; 插入、刪除和查找的時間復雜度為O(log n) 前言 在C…

終端命令行執行具體的方法名測試用例

你可以使用如下命令單獨執行 test_mutation_login_by_email 方法:python3 manage.py test apps.login.test_client.LoginTestCase.test_mutation_login_by_email 注意事項: 路徑 apps.login.test_client 要與你項目實際的 Python 包路徑一致(即 test_client.py 文件所在的包…

20250620在Ubuntu20.04.6下編譯KickPi的K7的Android14系統

【處理SDK】 rootrootrootroot-X99-Turbo:~/Android14$ tar zxvf rk3576-android14.0-20250217.tar.gz rootrootrootroot-X99-Turbo:~/Android14$ ll rootrootrootroot-X99-Turbo:~/Android14$ rm rk3576-android14.0-20250217.tar.gz rootrootrootroot-X99-Turbo:~/Android1…

碳中和時代的家電革命,從華為智選IAM看科技企業的環保擔當

在"雙碳"戰略與品質消費浪潮的雙重加持下&#xff0c;家電產業正經歷一場前所未有的綠色革命。華為智選與空凈十大品牌IAM的深度協同&#xff0c;不僅構建了智能家電領域的技術新高地&#xff0c;更通過系統性創新持續拓展著行業可持續發展的想象空間。從凈水科技的突…

(C語言)Map數組的實現(數據結構)(鏈表)(指針)

源代碼&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>// 鍵值對節點 typedef struct Node {char* key;int value;struct Node* next; } Node;// Map結構 typedef struct {Node* buckets[100]; // 固定大小的哈希桶&#xff08;…

Logback示例解析

<configuration><!-- 環境變量 --><springProperty scope"context" name"app.name" source"spring.application.name" defaultValue"application"/><!-- 日志存放路徑 --><property name"log.path&qu…

elementui響應式數據類型變更情況

背景。vue2。data中定義的響應數據類型是[]數組。應用在el-select中&#xff08;非multiple情況&#xff09;。當發生響應數據有變更渲染視圖時&#xff0c;發現定義的數組轉換成了字符串。 本身不是問題。但因為疏忽引發了watch監聽formData數據時產生了產生了多次監聽事件。…

人機融合智能 | 人智交互語境下的設計新模態

本章旨在探討技術與設計領域在人智交互語境下的關系及其影響,討論通過傳統設計對人智交互的優化方法。通過回顧大數據和發展趨勢,以 AI技術作為重要的技術推力,我們認為 AI技術將會在未來成為設計領域不可缺少的重要環節,并能夠幫助設計師更加高效、準確地開展設計工作。本章著…

C++設計模式分類(GOF-23種設計模式)

文章目錄 GOF-23 設計模式分類一、從目的分類1. 創建型&#xff08;Creational&#xff09;模式2. 結構型&#xff08;Structural&#xff09;模式3. 行為型&#xff08;Behavioral&#xff09;模式 二、從范圍分類1. 類模式&#xff08;Class Pattern&#xff09;2. 對象模式&…

AbMole| LY294002(M1925)

LY294002是一種廣譜的PI3K抑制劑&#xff0c;對PI3Kα/δ/β的IC50分別為0.5 μM/0.57 μM/0.97 μM。LY294002 也可以抑制 CK2 的活性&#xff0c;IC50 為 98 nM。LY294002 還是一種競爭性 DNA-PK 抑制劑&#xff0c;可逆結合 DNA-PK 的激酶結構域&#xff0c;IC50 為 1.4 μM…

第1章,[標簽 Win32] :第一個 WIn32 程序,MessageBox 函數

專欄導航 上一篇&#xff1a;第1章&#xff0c;[標簽 Win32] &#xff1a;第一個 WIn32 程序&#xff0c;程序入口 回到目錄 下一篇&#xff1a;無 本節前言 本節的學習&#xff0c;需要前兩節的內容作為先修知識。如果還沒有去看本專欄的前兩節&#xff0c;請你先去學習它…