Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Bluespec SystemVerilog : StmtFSMパッケージ(その2)

Verification Engineerの戯言

StmtFSMパッケージには、次のようなモジュールが定義されています。

    ・mkFSM
  ・mkFSMWithPred
    ・mkAutoFSM
    ・mkOnce

各モジュールの定義は、
    module mkFSM#(Stmt seq_stmt)(FSM);
  module mkFSMWithPred#(Stmt seq_stmt,
             Bool pred)(FSM);
  module mkAutoFSM#(Stmt seq_stmt)();
  module mkOnce#( Action a )( Once );
のようになっています。

mkFSM, mkFSMWithPred, mkAutoFSMは、FSMインターフェースで、
mkOnceは、Onceインターフェースです。


mkFSMモジュールの例として、
リファレンス・ガイドのP.254の例題( Initializing a single-ported SRAM )を見ていきましょう!

    Reg#(int) i, j; // instantiate two register interfaces
    mkRegU ri (i); // create register with interface i
    mkRegU rj (j); // create register with interface j

    // Define fsm behavior
    Stmt s = seq
                for (i <= 0; i < M; i <= i + 1)
                    for (j <= 0; j < N; j <= j + 1)
                        sram.write (i, j, i+j);
             endseq

    FSM fsm(); // instantiate FSM interface
    mkFSM#(s) (fsm); // create fsm with interface fsm and behavior s

    rule initSRAM (start_reset);
      fsm.start; // Start the fsm
    endrule

initSRAMルールstart_resetが真(1 or Ture)になると起動され、
fsm.startでFSMが起動されます。

FSMの実態は、mkFSM#(s) (fsm);sの部分です。
このsは、Stmtであり、seqendseqで囲まれたコードが逐次実行されます。

ちなみに、
    FSM fsm();
    mkFSM#(s) (fsm);
は、
    FSM fsm <- mkFSM(s);
と表記することもできます。
}}}

検証、Verification、Bluespec SystemVerilog