FPGA基礎 -- Verilog 結構建模之模塊參數值

Verilog 中模塊參數值(parameter)的使用,這是結構建模和模塊可配置設計的核心機制,廣泛應用于 總線寬度配置、流水線級數、功能開關、模塊復用 等場景。


一、什么是模塊參數值(parameter

parameter 是 Verilog 提供的一種 常量配置機制,用于模塊內部邏輯和端口定義中,支持在模塊 例化時被覆蓋,實現可配置模塊設計。

它使模塊更靈活、更易復用,是構建可拓展 FPGA 系統的關鍵。


二、parameter 的定義與使用

1. 在模塊中定義參數

module my_module #(parameter WIDTH = 8,parameter DEPTH = 16
)(input  wire [WIDTH-1:0] data_in,output wire [WIDTH-1:0] data_out
);
  • #(...)參數聲明塊
  • 在模塊體中,WIDTHDEPTH 就可以像常量一樣使用

2. 在模塊內部使用參數

reg [WIDTH-1:0] buffer [0:DEPTH-1];  // 定義寬度為 WIDTH、深度為 DEPTH 的 FIFO

可用于:

  • 定義端口位寬
  • 控制內部寄存器數量、計數器終值
  • 實現功能切換(例如 parameter MODE = "FIFO"

三、在模塊實例中賦予新參數值

? 命名參數覆蓋(推薦):

my_module #(.WIDTH(16),.DEPTH(32)
) u_my_module (.data_in(data),.data_out(result)
);

?? 位置參數覆蓋(不推薦):

my_module #(16, 32) u_my_module (...);
  • 順序必須完全一致,否則容易出錯;
  • 無法明確表達含義。

四、parameterlocalparam 的區別

類型是否可被外部覆蓋用途
parameter? 可以供模塊實例時動態傳參,支持靈活配置
localparam? 不可模塊內局部常量,計算衍生參數、保護內部結構不被外部影響

例子:

module alu #(parameter WIDTH = 8,localparam MSB = WIDTH - 1
)( ... );

五、復雜參數用法:條件控制、函數計算等

? 1. 條件控制功能

parameter USE_PIPELINE = 1;generateif (USE_PIPELINE) begin// 實現流水線邏輯end else begin// 非流水線版本end
endgenerate

? 2. 參數依賴計算(合法范圍)

parameter DATA_WIDTH = 16;
localparam ADDR_WIDTH = $clog2(DATA_WIDTH); // Vivado/Quartus支持

六、常見應用場景舉例

場景使用方式示例
FIFO、RAM 寬度配置parameter DATA_WIDTH = 32
AXI 總線位寬控制parameter AXI_DATA_WIDTH = 64
圖像處理分辨率設置parameter IMG_WIDTH = 1920, IMG_HEIGHT = 1080
多通道流水線模塊parameter NUM_CHANNELS = 4 配合 generate 使用
協議模式切換parameter PROTOCOL = "AXI4"

七、設計規范與工程建議

項目建議
命名規范大寫字母 + 下劃線,如 DATA_WIDTH, BUF_DEPTH
參數默認值所有參數建議提供默認值,便于模塊獨立仿真
避免硬編碼盡量用參數控制所有涉及位寬、深度、模式的常量
保護內部參數使用 localparam 限制外部訪問
參數繼承與層級傳遞在頂層通過 parameter 向下傳遞子模塊參數,統一配置管理
非常量表達式某些工具不支持 parameter = a + b,建議用 localparam 衍生

八、進階設計:可復用的參數化模塊封裝模板

module generic_fifo #(parameter DATA_WIDTH = 8,parameter DEPTH = 16,localparam ADDR_WIDTH = $clog2(DEPTH)
)(input  wire clk,input  wire rst_n,input  wire wr_en,input  wire rd_en,input  wire [DATA_WIDTH-1:0] data_in,output wire [DATA_WIDTH-1:0] data_out,output wire full,output wire empty
);// FIFO 實現邏輯
endmodule

? 在頂層例化時只需改 .DATA_WIDTH.DEPTH,FIFO模塊就自動適配。


總結

內容要點
參數定義方式使用 #(parameter NAME = VALUE) 寫在模塊頭部
參數使用范圍端口位寬、內部寄存器大小、功能開關、結構生成等
參數設置方式實例時可用 #(.NAME(VALUE)) 覆蓋默認值
局部參數保護使用 localparam 計算中間量,防止外部更改
常見工程用法配置總線、FIFO、圖像尺寸、功能控制、通道數量等

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

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

相關文章

Skrill是什么?中國用戶能用嗎?安全嗎?完整指南

什么是Skrill? Skrill 前身為 Moneybookers,成立于 2001 年,總部位于英國倫敦,目前隸屬于 Paysafe 集團。作為一個多功能電子支付平臺,Skrill 支持全球 100 多個國家和地區、40 多種貨幣,被廣泛用于&#…

java+vue+SpringBoo校園部門資料管理系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔(1萬字以上)開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言:后端:Java 前端:vue框架:springboot數據庫:mysql 開發工具 JDK版本:JDK1.…

Java中的Map實現類詳解

Java中的Map實現類詳解 Java集合框架提供了多種Map接口的實現,每種實現都有其特定的使用場景和特點。以下是主要的Map實現類及其特性分析: 1. 通用Map實現 HashMap 特點:基于哈希表的實現,允許null鍵和null值線程安全&#xf…

Pytorch Lightning 進階 1 - 梯度檢查點(Gradient Checkpointing)

梯度檢查點(Gradient Checkpointing)是一種在深度學習訓練中優化顯存使用的技術,尤其適用于處理大型模型(如Transformer架構)時顯存不足的情況。下面用簡單的例子解釋其工作原理和優缺點: 核心原理 深度學…

SpreadJS 迷你圖:數據趨勢可視化的利器

引言 在數據處理和分析領域,直觀地展示數據趨勢對于理解數據和做出決策至關重要。迷你圖作為一種簡潔而有效的數據可視化方式,在顯示數據趨勢方面發揮著重要作用,尤其在與他人共享數據時,能夠快速傳達關鍵信息。SpreadJS 作為一款…

GESP2024年12月認證C++一級( 第三部分編程題(1)溫度轉換)

參考程序1&#xff1a; #include <cstdio> using namespace std;int main() {double K;scanf("%lf", &K);double C K - 273.15; //轉換為攝氏溫度 double F 32 C * 1.8; //轉換為華氏溫度 if (F > 212) //條件判斷 print…

從零開始手寫redis(18)緩存淘汰算法 FIFO 優化

項目簡介 大家好&#xff0c;我是老馬。 Cache 用于實現一個可拓展的高性能本地緩存。 有人的地方&#xff0c;就有江湖。有高性能的地方&#xff0c;就有 cache。 v1.0.0 版本 以前的 FIFO 實現比較簡單&#xff0c;但是 queue 循環一遍刪除的話&#xff0c;性能實在是太…

用Zynq實現脈沖多普勒雷達信號處理:架構、算法與實現詳解

用Zynq實現脈沖多普勒雷達信號處理:架構、算法與實現詳解 脈沖多普勒(PD)雷達是現代雷達系統的核心技術之一,廣泛應用于機載火控、氣象監測、交通監控等領域。其核心優勢在于能在強雜波背景下檢測運動目標,并精確測量其徑向速度。本文將深入探討如何利用Xilinx Zynq SoC(…

OpenCV CUDA模塊設備層-----線程塊級別的一個內存填充工具函數blockFill()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在同一個線程塊&#xff08;thread block&#xff09;內&#xff0c;將 [beg, end) 范圍內的數據并行地填充為指定值 value。 它使用了 CUDA 線程…

SAP-ABAP:如何查詢 SAP 事務碼(T-Code)被包含在哪些權限角色或權限對象中

要查詢 SAP 事務碼&#xff08;T-Code&#xff09;被包含在哪些權限角色或權限對象中&#xff0c;可使用以下專業方法&#xff1a; &#x1f50d; 1. 通過權限瀏覽器 (SUIM) - 最推薦 事務碼&#xff1a;SUIM (權限信息系統) 操作步驟&#xff1a; 執行 SUIM → 選擇 “角色…

MySQL 多列 IN 查詢詳解:語法、性能與實戰技巧

在 MySQL 中&#xff0c;多列 IN 查詢是一種強大的篩選工具&#xff0c;它允許通過多字段組合快速過濾數據。相較于傳統的 OR 連接多個條件&#xff0c;這種語法更簡潔高效&#xff0c;尤其適合批量匹配復合鍵或聯合字段的場景。本文將深入解析其用法&#xff0c;并探討性能優化…

自由學習記錄(63)

編碼全稱&#xff1a;AV1&#xff08;Alliance for Open Media Video 1&#xff09;。 算力消耗大&#xff1a;目前&#xff08;截至 2025 年中&#xff09;軟件解碼 AV1 的 CPU 開銷非常高&#xff0c;如果沒有專門的硬件解碼單元&#xff0c;播放高清視頻時會很吃 CPU&#…

日本生活:日語語言學校-日語作文-溝通無國界(4)-題目:喜歡讀書

日本生活&#xff1a;日語語言學校-日語作文-溝通無國界&#xff08;4&#xff09;-題目&#xff1a;喜歡讀書 1-前言2-作文原稿3-作文日語和譯本&#xff08;1&#xff09;日文原文&#xff08;2&#xff09;對應中文&#xff08;3&#xff09;對應英文 4-老師評語5-自我感想&…

C++優化程序的Tips

轉自個人博客 1. 避免創建過多中間變量 過多的中間變量不利于代碼的可讀性&#xff0c;還會增加內存的使用&#xff0c;而且可能導致額外的計算開銷。 將用于同一種情況的變量統一管理&#xff0c;可以使用一種通用的變量來代替多個變量。 2. 函數中習慣使用引用傳參而不是返…

C#Blazor應用-跨平臺WEB開發VB.NET

在 C# 中實現 Blazor 應用需要結合 Razor 語法和 C# 代碼&#xff0c;Blazor 允許使用 C# 同時開發前端和后端邏輯。以下是一個完整的 C# Blazor 實現示例&#xff0c;包含項目創建、基礎組件和數據交互等內容&#xff1a; 一、創建 Blazor 項目 使用 Visual Studio 新建項目 …

前端的安全隱患之API惡意調用

永遠不要相信前端傳來的數據&#xff0c;對于資深開發者而言&#xff0c;這幾乎是一種本能&#xff0c;無需過多解釋。然而&#xff0c;初入職場的開發新手可能會感到困惑&#xff1a;為何要對前端傳來的數據持有如此不信任的態度&#xff1f;難道人與人之間連基本的信任都不存…

基于 Spark 實現 COS 海量數據處理

上周在組內分享了一下這個主題&#xff0c; 我覺得還是摘出一部分當文章輸出出來 分享主要包括三個方面&#xff1a; 1. 項目背景 2.Spark 原理 3. Spark 實戰 項目背景 主要是將海量日志進行多維度處理&#xff1b; 項目難點 1、數據量大&#xff08;壓縮包數量 6TB,60 億條數…

Unity3D 屏幕點擊特效

實現點擊屏幕任意位置播放點擊特效。 屏幕點擊特效 需求 現有一個需求&#xff0c;點擊屏幕任意位置&#xff0c;播放一個點擊特效。 美術已經做好了特效&#xff0c;效果如圖&#xff1a; 特效容器 首先&#xff0c;畫布是 Camera 模式&#xff0c;畫布底下有一個 UIClic…

MCU編程

MCU 編程基礎&#xff1a;概念、架構與實踐 一、什么是 MCU 編程&#xff1f; MCU&#xff08;Microcontroller Unit&#xff0c;微控制器&#xff09; 是將 CPU、內存、外設&#xff08;如 GPIO、UART、ADC&#xff09;集成在單一芯片上的小型計算機系統。MCU 編程即針對這些…

Go語言--語法基礎6--基本數據類型--數組類型(1)

Go 語言提供了數組類型的數據結構。 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列&#xff0c;這種類型可以是任意的 原始類型例如整型、字符串或者自定義類型。相對于去聲明number0,number1, ..., and number99 的變量&#xff0c;使用數組形式 numbers[0], …