Я хотел бы написать интерфейс VPI/PLI, который будет открывать аудиофайлы (например, wav, aiff и т. д.) и представлять данные в симулятор Verilog. В настоящее время я использую Icarus и хочу использовать libsndfile для обработки форматов входных файлов и преобразования типов данных.
Я не совсем уверен, что использовать в коде C ... просмотрел IEEE 1364-2001 и все еще не понимаю, какие функции я должен использовать.
В идеале я хотел бы иметь модуль Verilog с портом данных (последовательным или параллельным), тактовым входом и контактом запуска / остановки. Я хотел бы реализовать два модуля, один для воспроизведения из файла, а другой для записи вывода из тестируемого фильтра.
Могу ли я сделать все это на C и просто создать экземпляр модуля в своем тестовом стенде, или мне придется написать функцию (скажем, $read_audio_data
) и модуль-оболочку, чтобы вызывать его при каждом тактовом импульсе??
Хм, или, может быть, мне нужно создать модуль, а затем получить для него дескриптор и каким-то образом передать значение/вектор в дескриптор?
Меня не очень беспокоит, как будут установлены имена файлов, так как я, вероятно, все равно не буду делать это из кода verilog. И я, вероятно, пока буду придерживаться 24-битных целочисленных выборок, и libsndfile
должен довольно хорошо обрабатывать преобразование. Возможно, я пока останусь с последовательным (может быть, даже в стиле I2S) и при необходимости десериализую его в Verilog.
Также я рассмотрел плагин Icarus, который реализует видеокамера, которая читает файлы PNG, хотя есть гораздо больше аспектов обработки изображений, чем аудио. Следовательно, на данный момент этот код кажется мне слишком сложным - мне не удалось его запустить.