Posts Issued on April 21, 2020

BSVの設計トライアル(11)

posted by sakurai on April 21, 2020 #244

BSVコード

nextStep()関数は以下のとおりです。

function nextStep;
   case (state.step)
      S0: nextStep = S1;
      S1: nextStep = S2;
      S2: nextStep = S3;
      S3: nextStep = S4;
   endcase
endfunction: nextStep

以下に4段のスタックとスタックポインタの実装(インスタンシエーション)を示します。

// return stack
RegFile#(UInt#(2), State_t) rs <- mkRegFile(0, 3);
// stack pointer
Reg#(UInt#(2)) sp <- mkReg(0);

検証用FSMの設計

これらのステート遷移の検証用FSMを設計します。全部でL1~L4の4レベルのコールネスティング関係を持ち、各ステートでは、主にステート変数の表示を行います。図244.1~図244.4に、レベル1からレベル4のステート遷移図を図示します。

図%%.1
図244.1 L1ステート遷移

図%%.2
図244.2 L2ステート遷移

図%%.3
図244.3 L3ステート遷移

図%%.4
図244.4 L4ステート遷移

検証結果の作成

expectedというファイル名で実行結果を作成しておきます。レベルとステートをサイクル毎に表示するFSMの動きを示します。

L1 S0
L1 S1
  L2 S0
  L2 S1
  L2 S2
    L3 S0
    L3 S1
      L4 S0
      L4 S1
    L3 S2
  L2 S3
  L2 S4
L1 S2
L1 S2

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