CPU+コンパイラ自作キャンプ/シミュレーションの高速化
27MHzのクロックのままではシミュレーションが遅すぎるので、改善する
Tang Nano 9Kには27MHzのクロックが搭載されている
シミュレーションを27MHzでやると、非常に時間がかかる
27M個のクロックを数える処理は、実世界では1秒だが、Icarus Verilogのシミュレーションではもっとかかる
手元のノートPCでled_blink_regをシミュレーション実行すると38秒かかる
500000013クロックのシミュレーションに38秒
実世界だったら1.85秒程度なので、約20倍の時間がかかった計算
しかも、回路規模が増えるにしたがってシミュレーション時間は延びる
CPUクロックの低減
シミュレーションではクロック周波数を下げると良い
そのために、クロック周波数は定数埋め込みではなく、パラメタ化する
code:モジュール定義にパラメタを追加.sv
module main#(
parameter CLOCK_HZ = 27_000_000
) (
input sys_clk,
input rst_n_raw,
output logic 5:0 onboard_led
);
code:レジスタのビット幅を計算でやる.sv
logic $clog2(CLOCK_HZ/2):0 counter;
code:時間計算にパラメタを使う.sv
else if (counter >= CLOCK_HZ/2 - 1)
counter <= 0;
code:テストベンチで低い周波数を指定.sv
main#(.CLOCK_HZ(100)) main(.*);
シミュレーション終了までの時間を#500000000から#5000に小さくすると、シミュレーションにかかる時間が0.017秒に短縮された
サンプルコード全体:https://github.com/uchan-nos/cccamp/tree/main/verilog_practice/led_blink_fastsim