Verilog例化說明
1.什么是模塊例化?為什么要例化?
模塊例化可以理解成模塊調用。對于一個FPGA工程,通常是由一個頂層模塊與多個功能子模塊組成,為了實現頂層模塊與子模塊的連接,需要進行模塊間的例化(或說是調用)。在一個FPGA項目工程中,其輸入、輸出端口命名通常在設計前期就已確定下來,但會存在一些中間變量,一個工程可能會讓不同的工程師在不同的時間段內共同完成,不同的人對于這些變量的命名會有所不同,故例化很有必要。
2.實例說明例化方法
實例:靜態數碼管顯示
根據功能將 FPGA 頂層例化了以下兩個功能子模塊:計時模(time_count)和數碼管靜態顯示模塊(seg_led_static),如下圖所示:
1.計時模塊(僅顯示端口及參數)
module time_count( inputclk , // 時鐘信號 inputrst_n , // 復位信號 output reg flag // 一個時鐘周期的脈沖信號 ); //parameter define parameter MAX_NUM = 25000_000; // 計數器最大計數值 ......(省略功能代碼) endmodule
2.數碼管靜態顯示模塊(僅顯示端口及參數)
module seg_led_static ( input clk , // 時鐘信號 input rst_n , // 復位信號(低有效) input add_flag, // 數碼管變化的通知信號 output reg [5:0] sel , // 數碼管位選 output reg [7:0] seg_led // 數碼管段選 ); ......(省略功能代碼) endmodule
3.頂層模塊(著重看下面“例化計時模塊”、“例化數碼管靜態顯示模塊”)
module seg_led_static_top ( input sys_clk , // 系統時鐘 input sys_rst_n, // 系統復位信號(低有效) output [5:0] sel , // 數碼管位選 output [7:0] seg_led // 數碼管段選 ); //parameter define parameter TIME_SHOW = 25'd25000_000; // 數碼管變化的時間間隔0.5s //wire define wire add_flag; // 數碼管變化的通知信號 //例化計時模塊 time_count #( //參數例化使用’#‘ .MAX_NUM (TIME_SHOW) ) u_time_count( .clk (sys_clk ), .rst_n (sys_rst_n), .flag (add_flag ) ); //例化數碼管靜態顯示模塊 seg_led_static u_seg_led_static ( .clk (sys_clk ), .rst_n (sys_rst_n), .add_flag (add_flag ), .sel (sel ), .seg_led (seg_led ) ); endmodule
上面給出了頂層模塊的完整代碼,子模塊只有模塊的端口和參數定義的代碼。這是因為頂層模塊對子模塊做例化時,只需要知道子模塊的端口信號名,而不用關心子模塊內部具體是如何實現的。
如果子模塊內部使用parameter 定義了一些參數,Verilog 也支持對參數的例化(也叫參數的傳遞),即頂層模塊可以通過例化參數來修改子模塊內定義的參數。
下圖為模塊例化。
上圖右側是例化的數碼管靜態顯示模塊,子模塊名是指被例化模塊的模塊名,而例化模塊名相當于標識,當例化多個相同模塊時,可以通過例化名來識別哪一個例化,我們一般命名為“u_”+“子模塊名”。信號列表中“.”之后的信號是數碼管靜態顯示模塊定義的端口信號,括號內的信號則是頂層模塊聲明的信號,這樣就將頂層模塊的信號與子模塊的信號一一對應起來,同時需要注意信號的位寬要保持一致。
接下來再來介紹一下參數的例化,參數的例化是在模塊例化的基礎上,增加了對參數的信號定義。
下圖為參數例化:
在對參數進行例化時,在模塊名的后面加上“#”,表示后面跟著的是參數列表。計時模塊定義的MAX_NUM 和頂層模塊的 TIME_SHOW 都是等于25000_000,當在頂層模塊定義 TIME_SHOW=12500_000時,那么子模塊的 MAX_NUM 的值實際上是也等于 12500_000。當然即使子模塊包含參數,在做模塊的例化時也可以不添加對參數的例化,這樣的話,子模塊的參數值等于該模塊內部實際定義的值。
值得一提的是,Verilog 語法中的localparam 代表的意思同樣是參數定義,用法和 parameter 基本一致,區別在于 parameter 定義的參數可以做例化,而 localparam 定義的參數是指本地參數,上層模塊不可以對localparam 定義的參數做例化。
-
Verilog
+關注
關注
28文章
1351瀏覽量
110074 -
數碼管顯示
+關注
關注
0文章
63瀏覽量
13815 -
顯示模塊
+關注
關注
1文章
50瀏覽量
23567
原文標題:Verilog例化說明
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論