Posts Issued on September 24, 2026

posted by sakurai on September 24, 2026 #1129

まとめ

同じPCで、bsc 2025.07のコンパイル時間と、Vivado 2026.1でmkGameFSMをOut-of-Context合成した結果を前後で比べます。前は8/3版、後は教科書版です。ソース行数はGameFSM.bsvとBlitter.bsvの合計、VerilogはmkGameFSM.vとmkBlitter.vの合計です。抑止した警告数は、前がG0036とG0010、後がそれにG0009を加えた数で、8/3版にG0009は出ません。

描画モジュール化前後 比較
BSV合成 ソース行数[行] 1,950 1,881 ▲4%
コンパイル時間 0:48 0:26 ▲46%
抑止した警告数 1,734 569 ▲67%
Verilog合成 ファイルサイズ[KB] 2,568 1,689 ▲34%
合成時間OOC 0:47 1:01 30%増
Vivado LUT数 5,393 5,193 ▲3.7%
Vivado FF数 1,929 1,938 0.5%増

1点目は見た目だけの変更で物量に影響しません。2点目は呼び出し箇所ごとの状態を1つ減らし、LUTを4%減らしました。3点目はブリッタの作業レジスタを局所化し、コンパイル時間を半分近くに縮めました。4点目はメインFSMの状態数を194から94に減らし、Verilogを3分の2にしました。FFは9ビット増で、4点目で増やした3個のFSMの状態レジスタがおもな内訳です。合成時間は47秒から61秒に増えました。それぞれ1回の実行値なので実行ごとのばらつきを含みます。

記事#1028の改良は、呼び出しごとに展開されていた描画ループを1個のサブFSMの再利用に変え、コンパイル時間を87%減らしました。記事#1035から記事#1039は、同じRUN_FSMでdrawLivesと、本体の厚いupdateAlienBullet、updatePlayerBullet、initAllを順に切り出し、1分54秒を54秒まで縮めました。

今回の改良は、ブリッタをモジュールの境界で包み、記事#1035から記事#1039の切り出しを残りの3つまで進めたもので、bscのコンパイル時間を同じPCで48秒から26秒に、46%減らしました。3段階とも主眼はbscのコンパイル時間で、物量は付随して動きます。LUTは各段階で減り、記事#1028で18%、記事#1037から記事#1039で3%、今回で3.7%です。FFは記事#1028で0.5%減ったあと、記事#1037から記事#1039で7%、今回で0.5%増えました。seqをFSMに切り出すたびに状態レジスタと引数のラッチが増えるためで、FSM化はFFを増やす方向に働きます。


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