Posts Issued on November 22, 2023

Parameterについて

posted by sakurai on November 22, 2023 #700

Parameterについて

Verilogにおいてparameterという機能があります。これは動的に定数を変更することができ便利な機能ですが、ソースを修正することからあまり使用していませんでした。

ところがIPインテグレータを使用すれば、ソースを修正することがなく再合成だけで仕様を変更することができます。今回テスト回路を作成し、BSVからFPGAまでの繋がりを確認します。

BSVにおいてのparameter

BSVリファレンスガイド5.3モジュールにパラメータの文法が書かれています。これを用いたテスト回路を作成します。

図%%.1
図700.1 BSVリファレンスガイド5.3モジュール

文法を見るとわかるようにデフォルト値を設定する機能はありません。'='記号の使用等でそれが可能であればよかったのですが。

以下に具体的なBSVコードを示します。ボタンを押すとパラメータで指定された数だけパルスを出力するFSMです。ポートリストというかメソッドリストの直前にカッコ書きで記述するようです。

import StmtFSM::*;
   
interface FSM_ifc;
   method Action button(Bool flag);
   method Bool lrclk();
endinterface

(* synthesize,always_ready,always_enabled *)
module mkTestParam #(
   parameter Int#(32) count
) (FSM_ifc);
  
   Reg#(Bool) outPulse <- mkReg(False),
              buttonf <- mkReg(True);
   //  Mainloop
   Stmt main = seq
      while(True) seq
         outPulse <= False;
         await(!buttonf);
         await(buttonf);
            repeat (unpack(pack(count))) seq
               outPulse <= True;
               outPulse <= False;
            endseq 
      endseq
   endseq;
   mkAutoFSM(main);

   method Bool lrclk();
      return outPulse;
   endmethod
   method Action button(Bool flag);
      buttonf <= flag;
   endmethod

endmodule: mkTestParam

パルスの出力回数を表すcountをパラメータ化しました。


左矢前のブログ 次のブログ右矢