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

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

В этом примере, вас:

  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 и Стрелы настройка Аудиокодека Комплекта разработчика SoC с помощью Ведущего Контроллера 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 библиотечный блок

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

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

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

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

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

Примечание: необходимо создать график конфигурации устройства для собственного устройства. Этот пример должен показать, как Ведущий Контроллер I2C библиотечный блок может использоваться, чтобы сконфигурировать устройства аудиокодека. График конфигурации устройства, используемый для 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.4\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 С тремя состояниями присутствует в файле VHDL hdlcoder_I2C_tristate.vhd. Скопируйте его в свою текущую рабочую директорию.

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 библиотечный блок

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

  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.

5 аудиокодеков Конфигурирования SSM2603 на Стреле Комплект разработчика SoC с помощью Ведущего Контроллера I2C библиотечный блок

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

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

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

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

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

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

Модель настройки для SSM2603 на Стреле Комплект разработчика SoC является тем же самым как модель настройки для SSM2603 на плате Zybo. Относитесь, чтобы разделить 4 из этой статьи для модели настройки SSM2603.

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

Чип аудиокодека настройка SSM2603 на Стреле Комплект разработчика SoC является тем же самым как чип аудиокодека настройка SSM2603 на плате Zybo. Относитесь, чтобы разделить 4.1 из этой статьи для симуляции.

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

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

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

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 for Target, Типовую Платформу Altera для Целевой платформы и Altera КУАРТ II для Инструмента Синтеза. Также выберите семейство, устройство, пакет и скорость как показано на рисунке ниже.

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

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

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

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

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

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