21 |
BSVの設計トライアル (11) |
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のステート遷移図を図示します。




検証結果の作成
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