FC2カウンター FPGAの部屋 Verilogでincludeを使用せずにパラメータをポート宣言に使う
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Verilogでincludeを使用せずにパラメータをポート宣言に使う

なつたんさん”Verilog のポート宣言にパラメータを使う”で、Verilogのポート宣言にパラメータを遣うときにinclude文でparameter値をインクルードしないで、モジュールの後に直接parameterを記述する記述方法の紹介があった。(下に引用させていただきます)

module add   #(parameter width = 8)


上のモジュールから使用するときはparameter文に値を入れるのと同様に書けばよいとのこと。(またまた下に引用させていただきます)

add #(.width(4) ) add_u(.clk(clk), .a(a), .b(b), .c(c));


知らなかった。
今まで、私はインクルード用のファイルにparameter文を書いて、それをmodule宣言の後でインクルードしていた。こんな感じ。

module ddr2_sdram_cont (clk_in, clk_out, reset, input_data, input_mask...);
    `include "./ddr2_cont_parameters.vh"
    
    input clk_in; // クロック入力
    output clk_out; // クロック出力
    input reset;
    input [INTERFACE_DATA_WIDTH-1 : 0] input_data;
    input [INTERFACE_MASK_WIDTH-1 : 0] input_mask;


インクルードされたddr2_cont_parameter.vhにはparameter文が書いてある。

parameter DDR2_DATA_WIDTH = 16; // DDR2 SDRAMのデータ幅
parameter INTERFACE_DATA_WIDTH = DDR2_DATA_WIDTH*2; // DDR2 SDRAMは4バースト、2倍データ幅で2回書き込む
parameter INTERFACE_MASK_WIDTH = INTERFACE_DATA_WIDTH/8; // BEの幅


今まではこのインクルード方式しかないと思っていた。
共通に使いまわす値でなければ、これからはなつたんさんが紹介された書き方で書こうと思う。
なつたんさんありがとうございました。勉強になりました。
  1. 2008年09月12日 05:32 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:2

コメント

実際に使ったことはないのですが、verilog 2001だと、
defparam add.width = 4;
add add_u(.clk(clk), .a(a), .b(b), .c(c));
というのもできるらしいです。また、外から書き換えのできないlocalparamというのもあるみたいです。

  1. 2008/09/12(金) 22:14:07 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

Simさん、こんにちは。

defparamは使っていて知っていたのですが、localparamは知りませんでした。調べてみます。
  1. 2008/09/13(土) 06:45:08 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/881-014a4acd
この記事にトラックバックする(FC2ブログユーザー)