23 |
BSVの設計トライアル (13) |
コンパイルと実行
ソースプログラムをコンパイルします。
$ bsc -u -sim TestFSM.bsv
checking package dependencies
compiling TestFSM.bsv
code generation for mkTestFSM starts
Elaborated module file created: mkTestFSM.ba
All packages are up to date.
次にリンクします。
$ bsc -sim -e mkTestFSM -o mkTestFSM
Bluesim object created: mkTestFSM.{h,o}
Bluesim object created: model_mkTestFSM.{h,o}
Simulation shared library created: mkTestFSM.so
Simulation executable created: mkTestFSM
15サイクル実行します。
$ ./mkTestFSM -V dump.vcd -m 15 | tee result
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
検証結果
結果を比較することにより検証します。
$ diff -c result expected
出力結果がサイクルベースで一致したことにより、正しく動作していることが検証されました。実は階層が4レベルあってもL1では戻り先が無いのでスタックを使いませんし、L4もリーフなのでスタックを使いません。従ってL2とL3だけでpush/popするため、スタックは2段(retを含めて3段)となり、spは1bitで良いことになります。これはたまたま前稿と同じ設計です。
このように変更し、上記のコンパイル、実行、一致検証まで実施したところ、期待した動作をすることが確認されました。rsが2段の場合のBsimの波形を図246.2に示します。spは1bitしかないので、sp==2の際にsp==0という不正な値となっていますが、sp==2の場合のspは使用しないため、問題ありません。