Генерация ядра IP контроллера I2C IP, чтобы сконфигурировать чип аудиокодека

Этот пример иллюстрирует как к:

  1. Смоделируйте Ведущий Контроллер I2C, использующий блоки Stateflow в Simulink

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

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

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

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

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

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

Конфигурирование нескольких периферийных устройств в проекте может быть громоздким и утомительным процессом. Вместо этого создайте типичный Ведущий Контроллер I2C, который можно непосредственно использовать, чтобы сконфигурировать микросхемы аудиокодека. Фигура ниже показов архитектура Обобщенного Ведущего Контроллера I2C, который реализован с помощью блоков Stateflow в Simulink.

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

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

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

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

Чтобы создать черный ящик используют следующие шаги.

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

2. Чтобы задать вашу подсистему как интерфейс черного квадрата, щелкните правой кнопкой мыши по подсистеме и выберите HDL Code> HDL Block Properties и установите Архитектуру на Черный ящик как показано в следующей фигуре.

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

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

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

2.1 Описание ввода-вывода блока I2C Master Controller

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

2.2 Описание Ведущего Контроллера I2C диаграмма Stateflow

Ведущему Контроллеру I2C, которым график сделан таким способом, которым во всех состояниях необходимые часы (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-кода должны использоваться поддерживаемые типы данных. Двоеточие (:) оператор как показано в состояниях, который является оператором преобразования типа, используемым в состоянии cmd_slave_addr_n (scl (:) = 0) преобразовывает значение типа, 'удваивается' до 'логического' типа (SCL является логическим типом данных в показанных состояниях). Состояния, показанные ниже, используются, чтобы отправить адрес регистра в ведомое устройство.

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

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

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

Этот раздел показывает как:

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

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

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

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

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

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

modelname = 'hdlcoder_I2C_adau1761';
open_system(modelname);

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

Для чипа Аудиокодека ADAU1761 должны быть сконфигурированы 20 регистров. Немногие из них должны быть записаны Ведущим Контроллером I2C в пакетном режиме и немногими в режиме байта. Первый регистр написан в режиме байта, втором в пакетном режиме длины 6 байтов. Оставаясь 18 регистров написаны в режиме байта.

Форма волны симуляции для настройки аудиокодека ADAU1761 как показано ниже.

Передачу режима Byte между Ведущим Контроллером I2C и чипом аудиокодека ADAU1761 показывают в следующей фигуре.

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

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

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

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

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

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

3. В Задаче 1.2, устанавливает Интерфейсы Целевой платформы на "Внешний порт" для всех портов.

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

copyfile (fullfile (matlabroot, 'тулбокс', 'hdlcoder', 'hdlcoderdemos', 'hdlcoder_I2C_tristate.vhd') ', hdlcoder_I2C_tristate.vhd');

5. В Задаче 3.2, добавьте буферный файл VHDL с тремя состояниями в дополнительных исходных файлах. Затем щелкните правой кнопкой мыши на коде Generate RTL и Ядре IP и нажмите на Run to Selected Task.

Ядро IP I2C для настройки ADAU1761 будет сгенерировано. Ниже фигуры показывает отчет генерации Ядра IP.

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

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

Этот раздел показывает как:

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

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

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

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

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

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

modelname = 'hdlcoder_I2C_ssm2603';
open_system(modelname);

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

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

Форма волны симуляции для настройки аудиокодека SSM2603 как показано ниже.

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

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

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