|
24 |
ClaudeによるGameFSMの改善 (5) |
まとめ
同じ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を増やす方向に働きます。
Leave a Comment