В этом примере показано, как создать эталонную разработку, чтобы запустить аудио алгоритм и получить доступ к аудио входу и выходу на плате Zynq ®.
В этом примере вы создадите исходный проект, который получает аудио входа от Zedboard, выполняет некоторую обработку и передает обработанное аудио данных из Zedboard. Вы также генерируете IP-ядра для периферийных интерфейсов, используя HDL Workflow Advisor.
Для выполнения обработки аудио на Zedboard вам нужны следующие 2 протокола:
I2C для настройки ADAU1761 микросхемы аудиокодека на Zedboard.
I2S для потоковой передачи оцифрованного аудио данных между чипом кодека и тканью Zynq.
Приведенный выше рисунок является диаграммой архитектуры высокого уровня, которая показывает, как исходный проект используется IP-адресом алгоритма фильтрации. I2S IP работает с 50MHz частотой, в то время как можно хотеть запустить Алгоритм Фильтрации IP с более высокой частотой. Эта частота контролируется на шаге 1.4 в HDL Workflow Advisor. В этом примере примите, что фильтр работает на 80MHz. Поскольку IP-адреса I2S и алгоритма фильтрации работают на разных частотах, нам нужны FIFO, чтобы обрабатывать пересечение тактовой области. В зависимости от типа выбранного фильтра, Алгоритм фильтрации IP фильтрует область значений частот от входящего аудио данных и передает отфильтрованный аудио данные out. На приведенном выше рисунке IP алгоритма фильтрации является нашим основным алгоритмом, который мы моделируем в Simulink. В то время как IP-адрес FIFO предоставляется в Vivado, необходимо создать I2C и I2S IP. Здесь у пользователя есть 3 выбора: (a) использовать предварительно упакованный IP, например, если он существует, (b) смоделировать его в Simulink и сгенерировать IP-ядро с помощью рабочего процесса генерации ядра IP или (c) использовать устаревший HDL-код. Чтобы создать IP-код из унаследованного HDL-кода, используйте модель Simulink для черного ящика HDL-кода и генерации IP-ядра из него. IP-адреса FIFO обрабатывают пересечение домена синхроимпульса между входящими аудио данными на 50MHz и IP-адресом фильтра, выполняемым на 80MHZ. I2C, I2S, PLL, IP-адреса FIFO и система обработки являются частью исходного проекта.
Для создания исходного проекта, описанного выше, используются следующие шаги:
Сгенерируйте IP-ядра для периферийных интерфейсов
Создайте пользовательский исходный проект аудиокодека в Vivado
Создайте файл определения исходного проекта
Проверьте исходный проект
В этом примере,
I2C IP разрабатывается путем моделирования его с помощью блоков Stateflow, а также с помощью устаревшего кода VHDL для тристатного буфера.
I2S IP разрабатывается путем моделирования его в Simulink.
Для создания I2C IP для настройки ADAU1761 Audio Codec, смотрите Генерация IP Core IP контроллера I2C, чтобы Сконфигурировать статью Audio Codec Chip.
Создайте модель в Simulink с функцией matlab, которая реализует протокол I2S.
modelname = 'hdlcoder_I2S_adau1761';
open_system(modelname);
Создайте испытательный стенд в модели, чтобы имитировать входящий аудио данные от кодека.
Передайте эти данные в блок Subsystem, который выполняет операцию I2S. Проверьте выходы Подсистемы в возможности.
Запустите HDL Workflow Advisor из подсистемы DUT. В Задаче 1.1 сохраните те же настройки, что и в I2C IP, сгенерированных ранее. в задаче 1.2 установите интерфейсы целевой платформы, как показано ниже:
Запустите задачу 3.2 и сгенерируйте ядро IP.
I2C, I2S и IP-адреса FIFO включены в пользовательские исходные проекты. Для создания пользовательского исходного проекта см. раздел «Создание и экспорт пользовательского исходного проекта с помощью Xilinx Vivado» в разделе «Определение пользовательской платы и Исходного проекта для Рабочего процесса Zynq».
Ключевые точки, которые необходимо отметить при создании этого пользовательского исходного проекта:
Мы должны понять теорию операции чипа аудиокодека на Zedboard.
Для FIFO заданы значения по умолчанию для их строения.
Для ядер IP, сгенерированных с помощью HDL Workflow Advisor, IPCORE_CLK и AXI4_Lite_ACLK должны быть подключены к одному и тому же источнику синхроимпульса.
При проверке проекта блока в Vivado не должно быть критических предупреждений, кроме несвязанных портов.
В этом исходном проекте аудиокодек сконфигурирован для работы в главном режиме.
Следующие сигналы запуска между исходным проектом на Zynq Soc и аудиокодеком на Zedboard:
Bit_clock является продуктом частоты дискретизации, количества бит на канал и количества каналов. Он управляется аудиокодеком в главном режиме. В этом примере частота дискретизации 48KHz, нет каналов 2, количество бит на канал 24.
Left_right_select проводить различие между данными левого аудиоканала и данными правого аудиоканала. Он синхронизируется с синхроимпульсом Bit.
Serial_data_in - аналого-цифровой преобразованный аудио данные от кодека.
Serial_data_out цифровой аудио данных, поступающий в кодек, преобразуется в аналоговый вид.
I2C_CLK и I2C_DATA являются стандартными I2C сигналами
ADDR0 и ADDR1 являются I2C адресными битами.
Clk_24MHz - 24MHz тактовый сигнал, требуемый кодеком.
Пользовательский аудиокодек исходного проекта созданный для этого примера, показан ниже:
Следующий код описывает содержимое файла определения исходного проекта Zedboard plugin_rd.m для вышеупомянутого исходного проекта. Для получения дополнительной информации о том, как определять и регистрировать пользовательскую плату, см. пример «Определение пользовательской платы и исходного проекта для рабочего процесса Zynq».
Перейдите в папку Zedboard с помощью следующей команды:
cd ([matlabroot '/toolbox/hdlcoder/hdlcoderdemos/customboards/Zedboard']);
Все файлы, которые требуются для исходного проекта, такие как файлы ядра IP, файлы XDC, plugin_rd файл и т.д., должны быть добавлены в путь matlab, внутри папки Zedboard с помощью иерархии, показанной ниже. Пользовательские файлы ядра IP должны находиться в папке + vivado. plugin_rd.m файлы tcl и файлы xdc должны находиться в папке плагина проекта ссылок, например, папка + vivado _ audio _ filter _ 2017 _ 2.
В порядок, чтобы убедиться, что исходные проекты и интерфейсы в исходный проект работают, как ожидалось, разработайте модель Simulink, которая только что отправляет аудио через IP Алгоритма, интегрируйте его с исходным проектом и протестируйте на Zedboard. Пользователь должен иметь возможность слышать звуковой цикл назад.
modelname = 'hdlcoder_audio_pass_through';
open_system(modelname);
Интерфейсы в модели должны быть выбраны как показано ниже:
Чтобы сгенерировать IP-ядро из модели и интегрировать его с исходным проектом аудиокодека, смотрите Запуск Аудиофильтра на Live Audio Входа Используя пример платы Zynq.