我想编写一个 VPI/PLI 接口,它将打开音频文件(即 wav、aiff 等)并将数据呈现给 Verilog 模拟器。我目前正在使用 Icarus,并希望使用 libsndfile 来处理输入文件格式和数据类型转换。
我不太确定在 C 代码中使用什么……查看了 IEEE 1364-2001,但仍然对我应该使用哪些函数感到困惑。
理想情况下,我想要一个带有数据端口(串行或并行)、时钟输入和启动/停止引脚的 verilog 模块。我想实现两个模块,一个用于从文件中回放,另一个用于记录被测过滤器的输出。
我可以在 C 中完成这一切并在我的测试平台中实例化模块,还是我必须编写一个函数(比如$read_audio_data
)和包装模块来在每个时钟脉冲上调用它?
嗯,或者我可能需要创建模块然后获取它的句柄并以某种方式将值/向量传递给句柄?
我不太关心如何设置文件名,因为无论如何我可能不会从 verilog 代码中这样做。我可能会暂时坚持使用 24 位整数样本,并且
libsndfile
应该很好地处理转换。也许,我现在会坚持串行(甚至可能以类似 I2S 的方式进行)并在需要时在 Verilog 中对其进行反序列化。
我还查看了 Icarus插件,它实现了一个读取 PNG 文件的摄像机,尽管图像处理还有更多方面,然后是音频。因此,该代码目前对我来说看起来有点过于复杂——我都没有设法让它运行。