02. Verilog インスタンス化命令

目次

1. Verilog インスタンス化命令

2. インターフェース(インターフェース)のインスタンス化の説明

3. SV(クラス)の実体化記述

1. Verilogインスタンス化命令

1.モジュールのインスタンス化とは何ですか? なぜインスタンス化するのでしょうか?

モジュールのインスタンス化は、モジュール呼び出しとして理解できます。FPGAプロジェクトの場合、通常、トップレベル モジュールと複数の機能的なサブモジュールで構成されますが、トップレベル モジュールとサブモジュール間の接続を実現するには、それらの間でインスタンス化 (または呼び出し) する必要があります。モジュール。FPGA プロジェクトでは、入力ポートと出力ポートの名前は通常、設計の初期段階で決定されますが、いくつかの中間変数が存在します。プロジェクトは、異なる期間に異なるエンジニアによって完了する場合があります。これらの変数には異なる名前が付けられます。 , そのためインスタンス化が必要です。

注: 最上位モジュールは、その中で複数の同一モジュールをインスタンス化できます。

2.インスタンス化方法を説明する例

例: 静的デジタル チューブ表示
関数に従って、次の 2 つの機能サブモジュールが FPGA の最上層でインスタンス化されます: タイミング モジュール (time_count) とデジタル チューブ静的表示モジュール (seg_led_static)。

 1. タイミングモジュール (ポートとパラメータのみが表示されます)

module time_count(
	input		clk ,                       // 时钟信号
	input		rst_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

トップレベル モジュールの完全なコードは上に示されており、サブモジュールにはモジュールのポートとパラメータによって定義されたコードのみが含まれます。これは、トップレベル モジュールがサブモジュールをインスタンス化するときに、必要なのはサブモジュールのポート信号名だけであり、サブモジュールがどのように実装されているかを気にする必要がないためです。

一部のパラメータがパラメータを使用してサブモジュール内で定義されている場合、Verilog はパラメータのインスタンス化 (パラメータ転送とも呼ばれる) もサポートします。つまり、トップレベル モジュールはパラメータをインスタンス化することで、サブモジュール内で定義されたパラメータを変更できます。

次の図は、モジュールのインスタンス化を示しています。

 ​

上図の右側はインスタンス化されたデジタル チューブ スタティック ディスプレイ モジュールです。サブモジュール名はインスタンス化されたモジュールのモジュール名を指し、インスタンス化されたモジュール名はロゴに相当します。複数の同一モジュールをインスタンス化する場合、次のことができます。インスタンス化された名前を使用して識別する どのインスタンス化かを識別するには、通常、 「u_」+「サブモジュール名」という名前を付けます信号リストの「.」以降の信号はデジタル管スタティックディスプレイモジュールによって定義されたポート信号であり、括弧内の信号は最上位モジュールによって宣言された信号であるため、最上位モジュールの信号はとサブモジュールの信号は 1 つずつ対応しており、同時に信号のビット幅も一致している必要があることに注意してください。

次にパラメータのインスタンス化を紹介します. パラメータのインスタンス化はモジュールのインスタンス化に基づいており、パラメータの信号定義が追加されます。

次の図は、パラメータのインスタンス化を示しています。

パラメータをインスタンス化するときは、モジュール名の後に「#」を追加して、以下がパラメータ リストであることを示します。タイミング モジュールによって定義された MAX_NUM と最上位モジュールの TIME_SHOW は両方とも 25000_000 に等しくなります。最上位モジュールで TIME_SHOW=12500_000 が定義されている場合、サブモジュールの MAX_NUM の値は実際には 12500_000 に等しくなります。もちろん、サブモジュールにパラメータが含まれている場合でも、モジュールのインスタンス化時にパラメータのインスタンス化を追加する必要はなく、この場合、サブモジュールのパラメータ値は、実際にモジュール内で定義されている値と同じになります。

Verilog 構文の localparam はパラメータ定義も意味しており、その使用法は基本的にパラメータと同じです。違いは、パラメータで定義されたパラメータはインスタンス化できるのに対し、localparam で定義されたパラメータはローカル パラメータを参照するため、インスタンス化できないことです。 localparam で定義されたパラメータをインスタンス化します。

注: 上記は、Punctual Atom FPGA 開発ドキュメントを参照しています。

2.インターフェース(インターフェース)のインスタンス化の説明

3. SV(クラス)の実体化記述

参考:最強のVerilogインスタンシエーション解説_Singularity FPGAブログ-CSDNブログ_verilogインスタンシエーション

おすすめ

転載: blog.csdn.net/Arvin_ing/article/details/127093691