IP-Core Генерации IP-адреса контроллера I2C для настройки чипа аудиокодека

Этот пример иллюстрирует, как смоделировать контроллер I2C с помощью контроллера I2C Master, смоделированного с использованием блоков Stateflow™ для конфигурирования чипа аудиокодека.

В этом примере вы:

  1. Моделируйте Главный контроллер I2C, используя блоки Stateflow ® в Simulink ®

  2. Моделируйте I2C Controller с помощью блока I2C Master Controller для конфигурирования чипа аудиокодека

  3. Используйте подсистему blackbox и функции двунаправленного порта для обработки логики трех состояний в I2C IP-ядре

  4. Используйте рабочий процесс генерации IP-ядра, чтобы сгенерировать IP-ядро для контроллера I2C

1. Обзор I2C протокола

I2C шина, также называемая шиной Inter-IC, представляет собой простую, многоадресную, многослойную, двунаправленную двухпроводную шину, которая состоит из последовательных линий данных (SDA) и последовательных синхроимпульсов (SCL). Каждое устройство, подключенное к шине, является программным адресом, доступным по уникальному 7-битному или 10-битному адресу, и поддерживает простое отношение «ведущий-ведомый». Последовательные, 8-битные, двунаправленные передачи данных могут производиться со скоростью до 100 кбит/с в стандартном режиме, до 400 кбит/с в быстром режиме или до 3,4 Мбит/с в высокоскоростном режиме. I2C шина имеет два узла: главный узел и ведомый узел. Главный узел генерирует часы и инициирует связь с ведомым устройством. Ведомый узел, который адресован ведущим, получает часы и отвечает на ведущее устройство во время подтверждения. Существует четыре режима работы: главная передача, главный прием, ведомая передача и ведомый прием. Мастер начинает связь путем отправки старта-бита, за которым следует 7 или 10 битовый адрес ведомого устройства, за которым следует бит чтения (1) или записи (0). Если slave, соответствующий этому адресу, присутствует, то он отвечает битом ACK. Мастер продолжает связь в режиме передачи или приема на основе бита чтения или записи. Точно так же ведомое устройство продолжает свою операцию на основе инструкции чтения или записи от ведущего устройства. Рисунок ниже показывает временную схему I2C протокола.

2. Моделирование обобщенного главного контроллера I2C в Simulink с использованием блоков Stateflow

Конфигурирование нескольких периферийных устройств в проекте может быть громоздким и утомительным процессом. Вместо этого создайте типовой контроллер I2C Master Controller, который можно использовать непосредственно для настройки микросхем аудиокодека. Рисунок ниже показывает архитектуру Generalized I2C Master Controller, которая реализована с использованием блоков Stateflow в Simulink.

В приведенной выше части показан блок I2C Master Controller. Чтобы сконфигурировать периферийное устройство, необходимо предоставить строение конкретного устройства блоку I2C Master Controller. Схема блока для конфигурирования микросхемы аудиокодека с помощью I2C Master Контроллера показана ниже.

Следующая модель показывает Главный контроллер I2C, который моделируется в Simulink с использованием блоков Stateflow.

modelname = 'hdlcoder_I2C_master_controller';
open_system(modelname);
open_system('hdlcoder_I2C_master_controller/I2C_MasterController');

Главный контроллер I2C поддерживает только I2C запись и не поддерживает I2C чтение в настоящее время. I2C Master Контроллера состоит из двух частей, I2C Master Контроллера графика и tristate buffer blackbox. I2C Master Контроллера графика обеспечивает последовательные данные, SDA и последовательные часы, SCL для ведомого устройства через тристатический буферный blackbox. Tristate buffer blackbox использует рукописный код VHDL и используется для двунаправленной функциональности порта SDA. Tristate buffer blackbox добавляется в модель, так как Simulink не поддерживает двунаправленное моделирование портов.

Чтобы создать блэкбокс, выполните следующие шаги.

1. Создайте подсистему, которая содержит входные и выходные порты исходного кода HDL, который вы хотите импортировать для создания blackbox. Блэкбокс I2C тристатного буфера показан ниже.

2. Чтобы указать подсистему как интерфейс черного ящика, щелкните правой нажатие кнопки подсистему и выберите HDL-код > Свойства блоков HDL и установите значение архитектуры в Blackbox, как показано на следующем рисунке.

3. Порт данных I2C_SDA главного контроллера I2C двунаправленным. Чтобы установить порт как двунаправленный, щелкните правой нажатие кнопки по порту I2C_SDA и выберите свойства блока и установите BidirectionalPort как показано ниже.

4. Во время моделирования для симуляции будет использоваться фактическое содержимое подсистемы blackbox.

Во время генерации кода HDL Coder не будет генерировать код под подсистемой blackbox. Вместо этого генератор кода интегрирует ваш HDL-код, написанный вручную, в ядро IP. Входные параметры блока I2C Master Controller могут быть предоставлены путем добавления на вход графика строения устройства. Этот график содержит подробные сведения о регистрах, которые необходимо сконфигурировать для ведомого устройства. Подробнее о строении устройств рассказывается в разделе Zedboard, платы Zybo и Стрелы строения SoC Development Kit Audio Codec с использованием I2C Master Контроллера.

2.1 Описание ввода-вывода I2C блока главного контроллера

На следующем рисунке приведены подробные сведения о входных и выходных портах блока I2C Master Controller.

2.2 Описание диаграммы I2C Master Controller Stateflow

I2C Master Контроллера графика осуществляется таким образом, чтобы во всех состояниях генерировались требуемые часы (SCL) и данные предоставлялись согласно протоколу I2C через порт последовательных данных (SDA). Следующие состояния показывают генерацию синхроимпульса и старта-бита.

Следующие состояния используются для отправки 7-битного адреса ведомого устройства.

Функция bitget используется для последовательной передачи бит в порт SDA. Это позволяет пользователю получить битовое значение в заданном положении целого числа, упомянутого в его списке аргументов. Переход от одного состояния к другому зависит от порядка выполнения, заданного для условий перехода. Как показано на приведенном выше рисунке, переход от cmd_slave_addr_p к cmd_slave_addr_n состоянию происходит на основе условия перехода (bit_cnt > 0). Значение bit_cnt продолжает уменьшаться, пока условие перехода не удовлетворяет. Значение bit_cnt инициализируется на '7' и уменьшается до тех пор, пока не станет '1', который используется для отправки 7-битного адреса ведомого устройства на порте SDA. Для генерации HDL-кода необходимо использовать поддерживаемые типы данных. Оператор Colon (:), как показано на рисунке в состояниях, который является оператором typecasting, используемым в cmd_slave_addr_n состоянии (scl (:) = 0), преобразует значение типа 'double' в тип 'logical' (SCL является логическим типом данных в показанных состояниях). Состояния, показанные ниже, используются для отправки адреса регистра на ведомое устройство.

Состояния, показанные ниже, используются для отправки регистровых данных на ведомое устройство.

Следующие состояния показывают поколение стоп-бита.

3. Настройка ADAU1761 аудиокодека на Zedboard с помощью I2C Master Контроллера библиотечного блока

В этом разделе показано, как:

  1. Моделируйте аудиокодек ADAU1761 график строения устройства с помощью блоков Stateflow в Simulink.

  2. Используйте библиотечный блок I2C Master controller, чтобы сконфигурировать ADAU1761 аудиокодека.

  3. Выполните симуляцию созданной модели.

Как упоминалось ранее, чтобы сконфигурировать ADAU1761 аудиокодека на Zedboard, необходимо создать график строения устройства для ADAU1761. Этот график должна быть соединена с ранее созданным библиотечным блоком контроллеров I2C Master.

Примечание. Вы должны создать график строения устройства для своего собственного устройства. В этом примере показано, как блок библиотеки I2C Master Controller может использоваться для конфигурации устройств аудиокодека. Устройство строения графика, используемое для ADAU1761, характерно для этого устройства и не может использоваться для настройки других устройств.

Модель строения, созданная для ADAU1761, показана ниже.

modelname = 'hdlcoder_I2C_adau1761';
open_system(modelname);

3.1 Симуляция аудиокодека ADAU1761 модели строения

Для чипа Audio codec ADAU1761 необходимо сконфигурировать 20 регистров. Немногие из них должны быть записаны I2C Master Controller в пакетном режиме, а немногие - в байтовом режиме. Первый регистр записывается в байтовом режиме, второй в пакетном режиме длиной 6 байт. Остальные 18 регистров записываются в байтовом режиме.

Сигнал симуляции для строения ADAU1761 аудиокодека показан ниже.

Передача байтового режима между I2C Master Controller и чипом аудиокодека ADAU1761 показана на следующем рисунке.

Ниже в симуляции показана передача старта-бита, за которой следует 7-битовый адрес ведомого устройства (0x3B), за которым следует бит записи (0), за которым следует 16-битный адрес регистра (0x4000), за которым следуют 8-битовые данные регистра (0x0E) и подтверждения от ведомого устройства.

3.2 Рабочий процесс генерации IP-ядра

Чтобы сгенерировать аудиокодек ADAU1761 строением HDL IP-ядра, выполните следующие шаги.

1. Настройте путь инструмента синтеза Xilinx Vivado с помощью следующей команды в командном окне MATLAB. Используйте свой собственный путь установки Vivado, когда вы запускаете команду

hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2017.4\bin\vivado.bat');

2. В модели строения ADAU1761 выберите I2C_IP подсистему и щелкните правой нажатие, чтобы открыть HDL Workflow Advisor. В Задаче 1.1 Выберите IP Core Generation для целевого рабочего процесса, Generic Xilinx Platform для целевой платформы и Xilinx Vivado для Synthesis Tool. Также выберите семейство, устройство, упаковку и скорость, как показано на рисунке ниже.

3. В Задаче 1.2 установите для интерфейсов целевой платформы значение «Внешний порт» для всех портов.

4. Логика Tristate HDL присутствует в файловой hdlcoder_I2C_tristate.vhd VHDL. Скопируйте его в текущую рабочую директорию.

copyfile (fullfile (matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'hdlcoder _ I2C _ tristate.vhd'), 'hdlcoder _ I2C _ tristate.vhd');

5. В задаче 3.2 добавьте файл tristate buffer VHDL в дополнительные исходные файлы. Затем щелкните правой кнопкой мыши на Generate RTL code и IP Core и выберите Run to Selected Task.

I2C IP-ядро для строения ADAU1761. Ниже рисунок показан отчет о генерации ядра IP.

Сгенерированное IP-ядро может использоваться в пользовательских исходных проектах. Для создания исходного проекта см. раздел Создание Исходный проект для аудиосистемы на плате Zynq.

4. Настройка SSM2603 аудиокодека на плате Zybo с помощью библиотечного блока I2C Master Controller

В этом разделе показано, как:

  1. Моделируйте аудиокодек SSM2603 график строения устройства с помощью блоков Stateflow в Simulink.

  2. Используйте библиотечный блок I2C Master controller, чтобы сконфигурировать SSM2603 аудиокодека.

  3. Выполните симуляцию созданной модели.

Чтобы сконфигурировать SSM2603 аудиокодека на плате Zybo, необходимо создать график строения устройства для SSM2603. Этот график должна быть соединена с ранее созданным библиотечным блоком контроллеров I2C Master.

Примечание.Устройство строения графика используемое для SSM2603, характерно только для этого устройства и не может использоваться для настройки других устройств.

Модель строения, созданная для SSM2603, показана ниже.

modelname = 'hdlcoder_I2C_ssm2603';
open_system(modelname);

4.1 Симуляция аудиокодека SSM2603 модели строения

Для чипа Audio codec SSM2603 необходимо сконфигурировать 11 регистров. Все, что нужно записать в байтовом режиме.

Сигнал симуляции для строения SSM2603 аудиокодека показан ниже.

Ниже в симуляции показана передача старта-бита, за которой следует 7-битовый адрес ведомого устройства (0x1A), за которым следует бит записи (0), за которым следует 8-битный адрес регистра (0x0C), за которым следуют 8-битовые данные регистра (0x10) и подтверждения от ведомого устройства.

4.2 Рабочий процесс генерации IP-ядра

Шаги генерации IP Core для SSM2603 модели строения аналогичны шагам, упомянутым выше в разделе 3.2, рабочий процесс генерации IP Core. Сгенерированное IP-ядро может использоваться в пользовательских исходных проектах. Для создания исходного проекта см. раздел Создание Исходный проект для аудиосистемы на плате ZYBO.

5 Настройка SSM2603 аудиокодека на Arrow SoC Development Kit с помощью библиотечного блока I2C Master Controller

В этом разделе показано, как:

  1. Моделируйте аудиокодек SSM2603 график строения устройства с помощью блоков Stateflow в simulink.

  2. Используйте библиотечный блок I2C Master controller, чтобы сконфигурировать SSM2603 аудиокодека.

  3. Выполните симуляцию созданной модели.

Чтобы сконфигурировать аудиокодек, SSM2603 на Arrow SoC Development Kit, необходимо создать график строения устройства для SSM2603. Этот график должна быть соединена с ранее созданным библиотечным блоком контроллеров I2C Master.

Примечание.Устройство строения графика используемое для SSM2603, характерно только для этого устройства и не может использоваться для настройки других устройств.

Модель строения для SSM2603 на Стрелу SoC Development Kit аналогична модели строения для SSM2603 на плате Zybo. Для получения информации о SSM2603 модели строения см. раздел 4 этой статьи.

5.1 Симуляция аудиокодека SSM2603 модели строения

Строение SSM2603 аудиокодека на Arrow SoC Development Kit аналогично строению SSM2603 аудиокодека на плате Zybo. Для получения информации о симуляции см. раздел 4.1 этой статьи.

5.2 Рабочий процесс генерации IP-ядра

Чтобы сгенерировать аудиокодек SSM2603 строением HDL IP-ядра, выполните следующие шаги.

1. Настройте путь инструмента Intel Quartus с помощью следующей команды в командном окне MATLAB. Используйте свой собственный путь установки Quartus, когда вы запускаете команду

hdlsetuptoolpath('ToolName', 'Altera Quartus II', 'ToolPath', 'C:\intelFPGA\18.1\quartus\bin64\quartus.exe');

2. В модели строения SSM2603 выберите I2C_SSM2603 подсистему и щелкните правой нажатие, чтобы открыть HDL Workflow Advisor. В Задаче 1.1 Выберите IP Core Generation для целевого рабочего процесса, Generic Altera Platform для целевой платформы и Altera QUARTUS II для Synthesis Tool. Также выберите семейство, устройство, упаковку и скорость, как показано на рисунке ниже.

3. В Задаче 1.2 установите для интерфейсов целевой платформы значение «Внешний порт» для всех портов.

4. Логика Tristate HDL присутствует в файловой hdlcoder_I2C_tristate_arrowssm2603.vhd Verilog. Скопируйте его в текущую рабочую директорию.

copyfile (fullfile (matlabroot, 'toolbox', 'hdlcoder', 'hdlcoderdemos', 'hdl _ I2C _ tristate _ arrowssm2603.vhd'), 'hdl _ I2C _ tristate _ arrowssm2603.v

5. В задаче 3.2 добавьте файл tristate buffer Verilog в дополнительные исходные файлы. Затем щелкните правой кнопкой мыши на Generate RTL code и IP Core и выберите Run to Selected Task.

I2C IP-ядро для строения SSM2603. Ниже рисунок показан отчет о генерации ядра IP.

Сгенерированное IP-ядро может использоваться в пользовательских исходных проектах. Для создания исходного проекта см. раздел Создание Исходный проект для аудиосистем на системной плате Intel.