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インターフェースです。
mkOnceは、Onceインターフェースです。
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.startでFSMが起動されます。
FSMの実態は、mkFSM#(s) (fsm);のsの部分です。
このsは、Stmtであり、seqとendseqで囲まれたコードが逐次実行されます。
このsは、Stmtであり、seqとendseqで囲まれたコードが逐次実行されます。
ちなみに、
}}}
FSM fsm(); mkFSM#(s) (fsm);は、
FSM fsm <- mkFSM(s);と表記することもできます。
}}}
検証、Verification、Bluespec SystemVerilog