Этот пример демонстрирует, как анализировать полосу пропускания памяти для приложения 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 кадр/с)
Данные о системе координат: 1920x1080x2 = 4.1472 МБ
Каждое ведущее устройство требует, чтобы следующая полоса пропускания минимальной памяти получила частоту кадров 60 кадр/с.
Полоса пропускания памяти: Структурируйте данные / период Системы координат = 4.1472e6/16.67e-3 = 248.8 Мбит/с
Примите, что характеристики контроллера памяти следующие:
Тактовая частота: 200 МГц
Ширина данных: 32 бита
Разорвите длину транзакции: 128
Создайте модель с помощью блоков Генератора Трафика Контроллера памяти и Памяти, чтобы смоделировать четыре ведущих устройства памяти.
Контроллер памяти: Установите параметры контроллера памяти в Параметрах конфигурации> Аппаратная реализация> Ресурсы Целевого компьютера. В соответствии с Проектом FPGA (Контроллеры мадам) вкладка, набор тактовая частота к 200 МГц и ширина данных к 32. В соответствии с Проектом FPGA (отладка) вкладка, выберите соединительный монитор Include AXI.
Генераторы Трафика памяти 1 & 4: характеристики трафика Памяти для Ведущего устройства 1 и 4 являются тем же самым, когда они представляют потоковую передачу видеокадров к и из памяти. Установите характеристики трафика памяти для ведущих устройств 1 и 4 можно следующим образом:
Разорвите размер (в байтах): Разорвите длину транзакции * (Ширина/8 данных) = 128* 32/8 = 512
Общие пакетные запросы: 4 данных о системах координат для симуляции = 4 * размер данных/Пакета о Трафике = 4*8100 = 32400
Разорвитесь предают время доступа земле: Структурируйте период/Номер Пакетных запросов = 16.67e-3/8100 = 20.58e-7 секунда. Как постоянный поток данных, данные постоянно получаются на постоянном уровне. Установите пакетные времена как указано ниже:
Сначала разорвите время = 20.58e-7
Случайное время между пакетами = [20.58e-7 20.58e-7]
Обновите маску блока Memory Traffic Generator1 и Memory Traffic Generator4 с вышеупомянутыми значениями. Установите тип Запроса для Трафика Памяти Generator1 со средством записи и Трафиком Памяти Generator4 с читателем. Очистите Ожидание пакета сделанная опция в обоих маски блока, когда эти ведущие устройства представляют ведущие устройства непрерывным трафиком, такие как Камера HDMI и отображение.
Генераторы Трафика памяти 2 & 3: Трафик Памяти Generator2 представляют читателя для Трафика Алгоритма и Памяти FPGA Generator3, представляет средство записи из Алгоритма FPGA. Установите характеристики трафика памяти для ведущих устройств 2 и 3 можно следующим образом:
Разорвите размер (в байтах): Разорвите длину транзакции * (Ширина/8 данных) = 128* 32/8 = 512
Общие пакетные запросы: 4 * размер данных/Пакета о Трафике = 4*8100 = 32400 (4 данных о системах координат для симуляции)
Разорвитесь предают время доступа земле: (Разорвите Длину + 10) / период Часов = 6.9e-7 (0.69us). Чтобы позволить некоторую случайность в пакетные времена для чтения и запроса записи данных, из-за изменения требований алгоритма, устанавливают пакетные времена как указано ниже:
В первый пакетный раз: 7.2e-7
Случайное время между пакетами: [7.2e-7 7.4e-7]
Запустите модель. После завершения симуляции откройте блок Memory Controller и кликните по выставленным для обозрения графикам эффективности под вкладкой Performance. Выберите все ведущие устройства под вкладкой Bandwidth и нажмите Create Plot. Можно заметить, что все ведущие устройства примерно достигли полосы пропускания 190 Мбайт/с и не соответствовали необходимым 248 Мбайт/с. Это также наблюдается предупреждениями в диагностическом средстве просмотра.
Чтобы соответствовать необходимой полосе пропускания, измените ширину данных контроллера от 32 до 64 в настройках параметра конфигурации под Ресурсами Целевого компьютера. Это требует изменения настроек Memory Traffic Generator соответственно можно следующим образом:
Разорвите размер (в байтах): Разорвите длину транзакции * (Ширина/8 данных) = 128* 64/8 = 1024
Общие пакетные запросы: 4 * размер данных/Пакета о Трафике = 4*4050 = 16200 (4 системы координат данных для симуляции)
Разорвитесь предают время доступа земле для Генераторов Трафика Памяти 1 & 4: Структурируйте Период/Номер Пакетных запросов = 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 приложение. По умолчанию модель будет реализована на оценочном комплекте Xilinx® Zynq® ZC706, когда это сконфигурировано с той платой.
Генератор трафика AXI (ATG), аппаратное Ядро IP для блока Memory Traffic Generator не поддерживает случайный пакет, предают времена доступа земле, и это дифференцирует ведущие устройства Читателя и Средства записи в арбитражной политике, различающейся блок Memory Traffic Generator для симуляции. Поэтому прежде, чем реализовать на оборудовании, измените настройки Блока памяти можно следующим образом:
Сделайте все Генераторы Трафика Памяти как 'Средства записи'
Для Генератора Трафика Памяти 2 и 3, набор [7.2e-7 7.2 e-7] в течение Случайного времени между пакетом, чтобы сделать, который это зафиксировало, предает пакетное время земле 7.2e-7
Открытому Разработчику SoC выберите вкладку System on Chip в панели инструментов Simulink и нажмите кнопку Configure, Build, & Deploy. Если Разработчик SoC открывается, выполните эти шаги:
Выбор Создает Модель на экране Setup. Нажать Далее.
Нажмите View/Edit Memory Map, чтобы просмотреть карту распределения памяти на экране Review Memory Map. Нажать Далее.
Задайте папку проекта на экране Select Project Folder. Нажать Далее.
Выберите Build, загрузку и работайте на экране Select Build Action. Нажать Далее.
Нажмите Validate, чтобы проверять совместимость модели для реализации на экране Validate Model. Нажать Далее.
Нажмите Build, чтобы начать создавать из модели на экране Build Model. Внешний интерпретатор откроется, когда синтез FPGA начнется. Нажмите Далее на экран Load Bitstream.
Синтез FPGA может занять больше чем 30 минут, чтобы завершиться. Чтобы сэкономить время, можно хотеть использовать обеспеченный предсгенерированный поток битов следующими шагами:
Закройте внешний интерпретатор, чтобы отключить синтез.
Скопируйте предсгенерированный поток битов в свою папку проекта и переименуйте путем выполнения ниже команды.
copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',... 'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',... 'soc_memory_traffic_generator-zc706.bit'), './soc_prj');
Нажмите кнопку Load, чтобы загрузить предварительно сгенерированный поток битов.
Чтобы запустить этот пример, скопируйте испытательный стенд в качестве примера в свою папку проекта.
copyfile(fullfile(matlabroot,'toolbox','soc','socexamples',... 'soc_memory_traffic_generator_aximaster.m'), './soc_prj','f');
Испытательный стенд конфигурирует сгенерированные аппаратные ядра IP ATG для Генераторов Трафика Памяти. Чтобы работать на оборудовании, увеличьте число пакетных запросов к 100 разам, поскольку это использует MATLAB® в качестве Ведущего IP AXI, чтобы вернуть выборки к MATLAB®, который включает существенную задержку доступа к оборудованию. Загрузите 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 и установить следующие параметры в качестве примера. Открытые Параметры конфигурации Модели, перейдите к вкладке Hardware Implementation и выполните следующее:
Выберите макетную плату Xilinx® Kintex® 7 KC705 из выпадающего списка под Аппаратной платой.
Перейдите к ресурсам Целевого компьютера> проект FPGA (верхний уровень) вкладка и включите, Включают MATLAB как Ведущий IP AXI для основанного на хосте взаимодействия.
Перейдите к ресурсам Целевого компьютера> проект FPGA (контроллеры мадам) вкладка и установите ширину данных Контроллера (биты) на 64.
Перейдите к ресурсам Целевого компьютера> проект FPGA (отладка) вкладка и включите, Включают соединительный монитор AXI.
Затем откройте Разработчика SoC и выполните шаги, как ранее утверждено для Xilinx® Zynq® ZC706 выше. Измените copyfile команду, чтобы совпадать с потоком битов макетной платы Kintex® 7 KC705 как ниже.
copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',... 'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',... 'soc_memory_traffic_generator-kc705.bit'), './soc_prj');
Таким образом, вы симулировали трафик памяти для предполагаемого проекта прежде, чем спроектировать алгоритмы. Вы анализировали полосу пропускания памяти и изменили параметры памяти, чтобы соответствовать конструктивным требованиям. Вы проверили результаты на оборудовании.