Наличие FPGA для вывода звука на линейный выход с использованием Verilog

Я пытаюсь написать код Verilog для FPGA, который будет выводить звук со встроенного контакта «линейного выхода». Я использую Quartus II и Altera DE1.

Я новичок в аппаратном программировании, поэтому мне требуется слишком много времени, чтобы наверстать упущенное. Очевидно, мне нужно инициализировать чип wolfson и написать что-то для связи с ним, как обсуждалось здесь: http://www.alteraforum.com/forum/showthread.php?t=6005

Он использует кодек wolfson WM8731, руководство находится здесь: http://www.rockbox.org/wiki/pub/Main/DataSheets/WM8731_8731L.pdf

и пример, который я нашел, но не смог понять, как его использовать, находится здесь: https://code.google.com/p/vector06cc/wiki/SoundCodec

Я нашел множество примеров того, как генерировать звуки с помощью контактов GPIO, но почти ничего об использовании WM8731. Я был бы очень признателен за любые рекомендации или опыт, которыми вы могли бы поделиться.


person ozgeneral    schedule 29.05.2015    source источник
comment
Но я ищу код verilog для него, оборудование уже есть. Должен ли я все еще перенести вопрос?   -  person ozgeneral    schedule 29.05.2015
comment
@ OE1 - вы используете процессор Nios II (и SOPC / Qsys) или работаете только на оборудовании?   -  person wilcroft    schedule 29.05.2015
comment
Да Altera DE1 использует процессор Nios II. Я программирую FPGA и пытаюсь протестировать свой код, используя наушники для линейного порта FPGA.   -  person ozgeneral    schedule 29.05.2015


Ответы (1)


Предполагая, что вы используете Nios II и либо SOPC Builder, либо Qsys, университетская программа Altera предлагает IP-ядро для управления аудиокодеком на платах серии DE.

Если у вас его еще нет, вы можете загрузить его здесь (внизу страницы, в списке «Установщик университетской программы»): https://www.altera.com/support/training/university/материалы-ip-cores.html

После установки проверьте каталог <altera-directory>/University_Program\NiosII_Computer_Systems\DE1\DE1_Media_Computer. В папках app_software и app_software_HAL приведены примеры методов записи на аудиовыход (с использованием кода C, работающего на Nios II), а папки verilog или vhdl показывают примеры систем при подключении ядра к NIOS II с использованием предпочитаемого вами HDL.

Само ядро ​​можно найти в <altera-directory>\ip\University_Program\Audio_Video. См. также ftp://ftp.altera.com/up /pub/Altera_Material/14.1/University_Program_IP_Cores/Audio_Video/Audio.pdf для некоторого (потенциально) полезного чтения/справки.


Приложение: Все входы и выходы ПЛИС используют «цифровой аудиоинтерфейс» микросхемы WM8731. Выводы, доступные на FPGA, следующие:

  • PIN_A6 : AUD_ADCLRCK
  • PIN_B6 : AUD_ADCDAT
  • PIN_A5 : AUD_DACLRCK
  • PIN_B5 : AUD_DACDAT
  • PIN_A4 : AUD_BCLK
  • PIN_B4 : AUD_XCK (MCLK на WM8731)

Выходные данные отправляются в кодек на контакт AUD_DACDAT. Чип настроен с использованием контактов I2C_SDAT и I2C_SCLK на адресе I2C 0x34 для чтения и 0x35 для записи. Никакие другие выводы недоступны для FPGA — некоторые используются для внешних подключений (например, микрофон или линейный вход) или вообще не подключены. Полный список назначений контактов для DE1 (которые можно напрямую импортировать в Quartus) см. по адресу: ftp://ftp.altera.com/up/pub/Altera_Material/12.1/Boards/DE1/DE1.qsf

person wilcroft    schedule 29.05.2015
comment
Могу ли я совместить этот метод с квартусом? У меня уже есть проект с интерфейсом VGA и LUT для звука. Так что мне просто нужно отправить частоты в линию. Разве нельзя сделать с назначением контактов или чем-то подобным? - person ozgeneral; 29.05.2015
comment
Если вы используете систему на основе Nios, я бы рекомендовал использовать IP-ядра — они просты в использовании и наверняка будут работать. Кроме того, я изменил свой ответ (см. выше), чтобы предоставить дополнительную информацию о выводах - только некоторые порты кодека подключены к FPGA - если тот, который вы хотите использовать, отсутствует в списке, то FPGA не могу получить к нему доступ. Надеюсь, это поможет. - person wilcroft; 29.05.2015
comment
Итак, будет ли это работать, если я назначу выходную музыку только на AUD_DACDAT, часы на I2C_SCLK и 0x35 на I2C_SDAT? Я не уверен, правильно ли я понял. - person ozgeneral; 29.05.2015
comment
I2C используется для настройки кодека, установки значений различных параметров внутри него. Я предлагаю прочитать техническое описание для получения дополнительной информации. В цифровом аудиоинтерфейсе необходимо указать AUD_DACDAT (ваш выходной звук), AUD_DACLRCK (тактовый сигнал DAC LR), AUD_BCLK (тактовый сигнал битового потока) и AUD_XCK (тактовый сигнал микросхемы). - person wilcroft; 29.05.2015