SDSoCって、単にFPGA化してソフトウェア側のアプリとFPGA側のbitファイル(boot.bin)を生成する。
とりあえず、ソフトウェア側はソフトウェアとして間違えていなければ実行ファイルを生成する。
今日、遭遇したのは「viratual to phtsical」のエラーだ。
これはsds_allocにしなければいけないところをmallocにしておくと起きやすいエラーだ。
今回はFPGAにつながる配列をmallocしたにも関わらず、実機でこのエラーが解消されなかった。
よくよく、追いかけてみると、転送すべき範囲より小さい領域をsds_allocしてて転送に失敗してたのが原因だった。
このエラー、どの関数やどのアドレスで発生しているというのがないので大きな範囲をFPGA化していると全て追いかけなければいけない状態になる。
さらに、ポインタの変数を構造体や途中で入れ替えたりしているようなソースコードでは追いかけにくい。
今回はポインタを入れ替えながら実行する関数でしかもメモリーリークがあったために転送できないという形でのエラーだった。
最終的にはメモリーリークが見つかったんだけど、そこにたどり着くまでに時間がかかってしまった。
エラー時に何らかの情報を出してくれれば、もう少し追いやすいんだけど・・・
それか、コンパイルの時点でワーニングでも吐いてくれれば・・・
実機に持っていくと物理的に悪いかどうかがCPUより厳密になるので良いのかもしれない。
FPGA化によって、ソフトウェアの性能向上を目指すという側面と、ソフトウェアの物理的不具合の確認用とした使い方もできるのかもしれない。