オーディオ ファイル (wav、aiff など) を開き、Verilog シミュレータにデータを表示する VPI/PLI インターフェイスを作成したいと考えています。現在 Icarus を使用しており、libsndfile を使用して入力ファイル形式とデータ型変換を処理したいと考えています。
Cコードで何を使用すればよいかよくわかりません...IEEE 1364-2001を見て、どの関数を使用するべきかまだ混乱しています。
理想的には、データ ポート (シリアルまたはパラレル)、クロック入力、およびスタート/ストップ ピンを備えた Verilog モジュールが必要です。2 つのモジュールを実装したいと思います。1 つはファイルからの再生用で、もう 1 つはテスト対象のフィルターからの出力を記録します。
すべてを C で実行し、テストベンチでモジュールをインスタンス化するか、関数 (たとえば$read_audio_data
) とラッパー モジュールを記述して、各クロック パルスでそれを呼び出す必要がありますか??
うーん、またはモジュールを作成してからハンドルを取得し、値/ベクトルをハンドルに渡す必要があるのでしょうか?
ファイル名がどのように設定されるかについては、あまり気にしていません。とにかく verilog コードからはそうしないでしょう。そして、当面は 24 ビット整数サンプルに固執し、
libsndfile
変換を非常にうまく処理できるはずです。おそらく、今のところシリアルに固執し (I2S のような方法で行うことさえあるかもしれません)、必要に応じて Verilog でデシリアライズします。
また、PNG ファイルを読み取るビデオ カメラを実装する Icarusプラグインも調べましたが、画像処理にはオーディオよりも多くの側面があります。したがって、そのコードは現時点では少し複雑に見えます-実行することもできませんでした。