16 |
GameFSMの改良 (14) |
call順位が高い関数のFSM化が完了したので、次に1度しか呼ばれていない関数もFSM化してみます。これは物量にはほぼ影響はないか若干増加するものの、巨大なFSMループからはずすことで、コンパイル時の競合条件計算量の減少を目的とするものです。まず、6個あるdrawString関数の1つをFSM化します。
まず、オリジナルのコードは、
function Stmt drawTitle1(); // PLAY SPACE INVADERS
return (seq
for (str_idx <= 0; str_idx < 19; str_idx <= str_idx + 1) seq
copyGlyph(s1[str_idx]);
waitTicks(`TICK_WAIT8);
if (fbutton) break;
endseq // for
endseq);
endfunction
変更後のコードは前回と同様なので省略します。
以下に結果の表を示します。思ったほどはコンパイル時間は減りませんでした。またverilog量は若干減ったものの、物量は想像したとおり増加しています。これは新たに起動、終了待ちが増えるためでしょう。全体としてあまり意味が無さそうなのでこれは中止します。
タイトル文字表示1を最適化前後 | 前 | 後 | 比較 | |
---|---|---|---|---|
BSV合成 | コンパイル時間 | 1'26'' | 1'25'' | ▲1.2% |
Verilog合成 | ファイルサイズ[KB] | 5,922 | 5,790 | ▲2.2% |
合成時間 | 0'59'' | 0'53'' | ▲10.2% | |
Vivado LUT数 | 5,583 | 5,638 | 1.0% | |
Vivado FF数 | 1,784 | 1,794 | 0.6% |
Leave a Comment