今回は、verilog HDLでのモジュールでのパラメータ定義について説明します。個人的には、ユーザー変更を要するパラメータは上位モジュールから継承して下位モジュールで使用する方にした方がいいと思います。
基礎知識
- パラメータの型は指定しなければ32bit。
- パラメータをローカルで使うなら、モジュールでの定義は不要。
書き方の例
例えば、上位モジュールで使っている2つのパラメータ(param1とparam2)を使いたい場合、下位モジュールで使用する場合、以下のように定義。
1.下位モジュールでのパラメータ定義
下位モジュールsub.v
module sub
\#( // パラメータ引数
parameter param1=100,
parameter param2=200
)
( // ポート引数
...
)
あるいは、ローカルでそのまま使うなら以下の通り(一番シンプル)。
module sub
( // ポート引数
...
)
parameter param1=100;
parameter param2=200;
2. 上位モジュールでのパラメータ定義
上位モジュール(top)における下位モジュール(sub)パラメータの定義方法は、使い方に応じて、3パターンあり。
使い方①
上位モジュールで使っている2つのパラメータ(param1とparam2)を、下位モジュールでそのまま使いたい場合(上位から下位へパラメータを継承する場合)
上位モジュール(top.v)
module top
(
...
)
parameter param1=100; // 下位モジュール(sub)で使いたいパラメータ1
parameter param2=200; // 下位モジュール(sub)で使いたいパラメータ2
sub
\#( // パラメータ引数
.param1(param1), //上位モジュール(top)のparam1を下位モジュールのparam1でそのまま使用
.param2(param2) //上位モジュール(top)のparam1を下位モジュールのparam1でそのまま使用
)
( // ポート引数
...
)
使い方②
上位モジュールで、下位モジュール のパラメータをいじりたいとき(上位から下位へパラメータを継承しない場合1)
上位モジュール(top.v)
module top
(
...
)
// 下位モジュールに使用しないので上位で定義する必要なし
//parameter param1=100;
//parameter param2=200;
sub
\#( // パラメータ引数
.param1(100), //ここで下位モジュールのparam1の値を設定
.param2(200) //ここで下位モジュールのparam2の値を設定
)
( // ポート引数
...
)
使い方③
下位モジュールのパラメータを上位モジュールで直接変更する場合(ただし、上位から下位へパラメータを継承しない場合2)
上位モジュール(top.v)
module top
(
...
)
// 下位モジュールに使用しないので上位で定義する必要なし
//parameter param1=100;
//parameter param2=200;
sub
//\#( // パラメータ引数をここで定義する必要なし。この場合、下位モジュールで定義した値がそのまま使用される。
// .param1(100), //ここで下位モジュールのparam1の値を設定
// .param2(200) //ここで下位モジュールのparam2の値を設定
//)
( // ポート引数
...
)