exponenta event banner

Анализ пропускной способности памяти с использованием генераторов трафика

В этом примере показано, как анализировать пропускную способность памяти для приложения SoC. В аппаратном обеспечении, требующем больших объемов памяти, доступ к общей памяти DDR может осуществляться несколькими мастерами. В таких случаях важно проанализировать динамические требования ко всем мастерам памяти, чтобы направлять разработку алгоритмов и требования к аппаратным платам для развертывания. Можно моделировать трафик памяти с помощью генераторов трафика памяти, анализировать использование полосы пропускания и проверять ее на оборудовании.

Поддерживаемые аппаратные платформы

  • Оценочный комплект Xilinx ® Zynq ® ZC706

  • Плата для разработчиков Xilinx ® Kintex ® 7 KC705

Задача проектирования

Рассмотрим приложение, выполняющее обработку HD-видео в FPGA на входе и выходе в реальном времени. Для этого приложения требуется одновременно четыре потребителя памяти для доступа к DDR. Мастер 1 памяти записывает входящие видеокадры в память, а мастер 4 памяти считывает видеокадры из памяти и подключается к выходному дисплею. Мастер 2 памяти считывает данные из памяти для обработки в FPGA и мастер 3 памяти записывает данные обратно в память.

Каждый мастер работает на HD-видео со следующими характеристиками:

  • Размер кадра: 1920x1080p

  • Размер пикселя: 2 байта (формат YCbCr)

  • Период кадра: 1/60 = 16,67 мс (для 60 FPS)

  • Данные кадра: 1920x1080x2 = 4.1472MB

Для получения частоты кадров 60 FPS для каждого ведущего устройства требуется следующая минимальная пропускная способность памяти.

  • Пропускная способность памяти: Данные кадра/Период кадра = 4.1472e6/16.67e-3 = 248.8MBps

Предположим, что характеристики контроллера памяти следующие:

  • Тактовая частота: 200 МГц

  • Ширина данных: 32 бита

  • Длина пакетной транзакции: 128

Проектирование с использованием блока SoC

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

Контроллер памяти: Задайте параметры контроллера памяти в разделе Параметры конфигурации > Аппаратная реализация > Целевые аппаратные ресурсы. На вкладке FPGA Design (mem Controllers) установите тактовую частоту 200 МГц и ширину данных 32. На вкладке FPGA Design (debug) выберите Include AXI interconnect monitor.

Генераторы трафика памяти 1 и 4: Характеристики трафика памяти для Master 1 и 4 те же, что и для потоковой передачи видеокадров в память и из памяти. Установите характеристики трафика памяти для ведущих устройств 1 и 4 следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (ширина данных/8) = 128 * 32/8 = 512

  • Всего запросов пакета: 4 данных кадров для моделирования = 4 * Данные трафика/Размер пакета = 4 * 8100 = 32400

Burst inter access time: Frame period/Number of Burst requests = 16.67e-3/8100 = 20.58e-7 сек. В качестве постоянного трафика данных данные непрерывно принимаются с постоянной скоростью. Установите время всплеска следующим образом:

  • Время первой вспышки = 20.58e-7

  • Случайное время между пакетами = [20.58e-7 20.58e-7]

Обновите Generator1 трафика памяти и маску блока Generator4 трафика памяти с помощью указанных выше значений. Установите тип запроса для Generator1 трафика памяти с устройством записи и Generator4 трафика памяти с устройством чтения. Снимите флажок Wait for burst done в обеих блочных масках, так как эти ведущие устройства представляют ведущие устройства с непрерывным трафиком, например, камеру HDMI и дисплей.

Генераторы трафика памяти 2 и 3: Трафик памяти Generator2 представляют устройство считывания для алгоритма FPGA и трафик памяти Generator3 представляют устройство записи из алгоритма FPGA. Установите характеристики трафика памяти для ведущих устройств 2 и 3 следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (ширина данных/8) = 128 * 32/8 = 512

  • Всего запросов пакета: 4 * Данные трафика/размер пакета = 4 * 8100 = 32400 (4 кадра данных для моделирования)

Burst inter access time: (Длина пакета + 10 )/Clock period = 6.9e-7 (0.69us). Чтобы разрешить некоторую случайность во времени пакета для запроса чтения и записи данных из-за изменения требований алгоритма, установите время пакета, как показано ниже:

  • Время первого разрыва: 7.2e-7

  • Случайное время между пакетами: [7.2e-7 7.4e-7]

Моделировать

Запустите модель. После завершения моделирования откройте блок Контроллер памяти (Memory Controller) и щелкните значок Просмотр графиков производительности (View performance plots) на вкладке Производительность (Performance). Выберите все шаблоны на вкладке «Полоса пропускания» и нажмите «Создать график». Можно заметить, что все мастера примерно достигли пропускной способности 190 Мбит/с и не соответствовали требуемым 248 Мбит/с. Это также наблюдается по предупреждениям в диагностическом зрителе.

Чтобы обеспечить требуемую пропускную способность, измените ширину данных контроллера с 32 до 64 в настройках параметров конфигурации в разделе Целевые аппаратные ресурсы. Для этого необходимо изменить настройки генератора трафика памяти следующим образом:

  • Размер пакета (в байтах): длина транзакции пакета * (ширина данных/8) = 128 * 64/8 = 1024

  • Всего запросов пакета: 4 * Данные трафика/размер пакета = 4 * 4050 = 16200 (4 кадра данных для моделирования)

Burst inter access time for Memory Traffic Generators 1 & 4: Frame Period/Number of Burst requests = 16.67e-3/4050 = 41.16e-7 сек. Установите время пакета следующим образом:

  • Время первого разрыва: 41.16e-7

  • Случайное время между пакетами: [41.16e-7 41.16e-7]

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

Смоделировать модель и открыть график пропускной способности из контроллера памяти, как упоминалось выше. Обратите внимание, что пропускная способность памяти, достигнутая генератором трафика памяти 1 и 4, составляет 248 Мбит/с. Пропускная способность памяти генератора 2 и 3 составляет около 500 Мбит/с. Это соответствует проектным требованиям, так как все мастера могут удовлетворять требованиям в реальном времени 248 МГц. Обратите внимание на отсутствие предупреждений в средстве просмотра диагностики, поскольку запросы пакетов не отбрасываются.

Внедрение и запуск на оборудовании

Для этого раздела требуется пакет поддержки SoC Blockset для устройств Xilinx.

Для реализации модели на поддерживаемой плате FPGA используйте приложение SoC Builder. По умолчанию модель будет реализована на оценочном комплекте Xilinx ® Zynq ® ZC706 в конфигурации с этой платой.

AXI Traffic Generator (ATG), аппаратный блок IP Core for Memory Traffic Generator (генератор трафика памяти) не поддерживает время произвольного пакетного межсетевого доступа, и он отличает мастеров Reader и Writer в политике арбитража в отличие от блока Memory Traffic Generator (генератор трафика памяти) для моделирования. Поэтому перед реализацией на аппаратном обеспечении измените настройки блока памяти следующим образом:

  • Сделать все генераторы трафика памяти 'Writers'

  • Для генератора трафика памяти 2 и 3 установите [7.2e-7 7.2 e-7] в значение Случайное время между пакетами, чтобы сделать фиксированным время между пакетами 7.2e-7

Чтобы открыть SoC Builder, выберите вкладку «Система на кристалле» на панели инструментов Simulink и нажмите кнопку «Настроить, построить и развернуть». После открытия SoC Builder выполните следующие действия.

  • Выберите Build Model на экране Setup. Нажмите кнопку Далее.

  • Щелкните Просмотр/редактирование карты памяти, чтобы просмотреть карту памяти на экране Просмотр карты памяти. Нажмите кнопку Далее.

  • Укажите папку проекта на экране Select Project Folder. Нажмите кнопку Далее.

  • Выберите Build, загрузите и запустите на экране Select Build Action. Нажмите кнопку Далее.

  • Щелкните Проверить (Validate), чтобы проверить совместимость модели для реализации на экране Проверить модель (Validate Model). Нажмите кнопку Далее.

  • Щелкните Построить (Build), чтобы начать построение модели на экране Построить модель (Build Model). Внешняя оболочка откроется, когда начнется синтез FPGA. Нажмите кнопку Next to Load Bitstream (Далее).

Синтез FPGA может занять более 30 минут. Чтобы сэкономить время, можно использовать предоставленный предварительно сгенерированный битовый поток, выполнив следующие шаги:

  • Закройте внешнюю оболочку для завершения синтеза.

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

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
        'soc_memory_traffic_generator-zc706.bit'), './soc_prj');
  • Нажмите кнопку Загрузить, чтобы загрузить предварительно созданный битовый поток.

Чтобы запустить этот пример, скопируйте тестовый стенд в папку проекта.

copyfile(fullfile(matlabroot,'toolbox','soc','socexamples',...
        'soc_memory_traffic_generator_aximaster.m'), './soc_prj','f');

Testbench настраивает сгенерированные аппаратные IP-ядра ATG для генераторов трафика памяти. Для выполнения на аппаратном обеспечении увеличьте число пакетных запросов в 100 раз, поскольку для получения выборок в MATLAB ® используется MATLAB ® в качестве AXI Master IP, что приводит к значительной задержке доступа к аппаратному обеспечению. Загрузите файл soc_memory_traffic_generator_zc706_aximaster.mat и увеличьте количество пакетных запросов для всех основных процессоров в конфигурации ATG до 100 раз. Сохраните запросы файла .mat в конфигурации ATG.

Введите следующую команду для запуска soc_memory_traffic_generator_aximaster испытательного стенда.

soc_memory_traffic_generator_aximaster

После запуска тестового стенда генерируются следующие выходные данные, показывающие трафик памяти. Все хозяева, удовлетворяющие требованиям к пропускной способности.

Реализация на плате разработки Xilinx ® Kintex ® 7 KC705: для реализации модели KC705 плате разработки необходимо сначала настроить модель на плату разработки Xilinx ® Kintex ® 7 KC705 и установить следующие параметры примера. Откройте окно Model Configuration Parameters, перейдите на вкладку Hardware Implementation и выполните следующие действия.

  • Выберите плату разработки Xilinx ® Kintex ® 7 KC705 из выпадающего списка в разделе Плата аппаратных средств.

  • Перейдите на вкладку Target hardware resources > FPGA design (верхний уровень) и включите параметр Include MATLAB as AXI Master IP для взаимодействия на основе хоста.

  • Перейдите на вкладку Target hardware resources > FPGA design (mem controllers) и установите для параметра Controller data width (bits) значение 64.

  • Перейдите на вкладку Target hardware resources > FPGA design (debug) и включите монитор Include AXI interconnect.

Затем откройте SoC Builder и выполните действия, описанные выше для ZC706 Xilinx ® Zynq ®. Измените команду copyfile в соответствии с битовым потоком платы разработки Kintex ® 7 KC705, как показано ниже.

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
        'soc_memory_traffic_generator-kc705.bit'), './soc_prj');

Таким образом, перед проектированием алгоритмов вы смоделировали трафик памяти для перспективной конструкции. Был проведен анализ пропускной способности памяти и измененных параметров памяти в соответствии с требованиями проекта. Вы проверили результаты на оборудовании.