Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Встроенный дизайн с FPGA:реализация

Наличие более мощных FPGA и более эффективных сред программирования сделало реализацию FPGA широко доступны, но использование ПЛИС может показаться сложной задачей.

Примечание редактора. По мере появления передовых алгоритмов для разработки интеллектуальных продуктов разработчики часто сталкиваются с трудностями при реализации встроенных систем, способных удовлетворить связанные с этими алгоритмами требования к обработке. ПЛИС могут обеспечивать требуемую производительность, но проектирование с использованием ПЛИС долгое время считалось ограниченным компетенцией экспертов по программированию ПЛИС. Однако сегодня наличие более мощных ПЛИС и более эффективных сред разработки сделало разработку ПЛИС широко доступной. В этом отрывке, главе 4 из книги «Архитектура высокопроизводительных встроенных систем», автор предлагает всесторонний обзор устройств FPGA, языков реализации и процесса разработки FPGA, а также подробное пошаговое руководство по началу реализации FPGA самостоятельно. дизайн. Полный отрывок представлен в следующих частях:
1:аппаратные ресурсы
2:языки реализации
3:Процесс разработки
4:создание проекта
5. Реализация (эта статья)

Адаптировано из книги Джима Ледина "Архитектура высокопроизводительных встраиваемых систем".


Проверка логического поведения

Важно протестировать поведение логики с помощью моделирования, прежде чем пытаться запустить ее в ПЛИС. Это связано с тем, что в среде моделирования намного проще обнаружить и исправить проблемы, чем с логикой, работающей внутри FPGA. Инструменты моделирования Vivado очень хорошо отражают поведение схемы:

  1. В разделе Источники в дополнительном окне щелкните правой кнопкой мыши Источники моделирования и выберите Добавить источники… :


Рисунок 4.18 - Пункт меню «Добавить источники…» для источников моделирования

  1. В Добавить источники в диалоговом окне убедитесь, что Добавить или создать источники моделирования выбран, затем нажмите Далее .
  2. В Добавить или создать источники моделирования в диалоговом окне нажмите Создать файл . .
  3. Введите имя файла vhdl и нажмите ОК .
  4. Нажмите Готово . чтобы закрыть Добавить или создать источники моделирования диалоговое окно, затем нажмите ОК в Определить модуль диалоговое окно и нажмите Да когда вас спросят, уверены ли вы, что хотите использовать эти
  5. Дважды щелкните Adder4 TestBench (Behavioral) (Adder4TestBench.vhdl) . в разделе Источники моделирования . Удалите автоматически заполненное содержимое vhdl . окна редактора и введите следующий код в Adder4TestBench.vhdl редактор:
 библиотека IEEE; используйте IEEE.STD_LOGIC_1164.ALL; используйте IEEE.NUMERIC_STD.ALL; объект ADDER4_TESTBENCH - это конечный объект ADDER4_TESTBENCH; архитектура BEHAVIORAL ADDER4_TESTBENCH - это компонент ADDER4 - это порт (A4:в std_logic_vector (3 downso 0); B4:in std_logic_vector (3 downso 0); B4:in std_logic_vector (3_download); 0); C_OUT4:out std_logic); конечный компонент; сигнал a:std_logic_vector (от 3 до 0); сигнал b:std_logic_vector (от 3 до 0); сигнал s:std_logic_vector (от 3 до 0); сигнал c_out:std_logic; сигнал ожидаемая_сумма5:без знака (с 4 до 0); сигнал ожидаемая_сумма4:без знака (от 3 до 0); сигнал ожидаемый_c:std_logic; ошибка сигнала:std_logic; начало TESTED_DEVICE:карта портов ADDER4 (A4 => a, B4 => b, SUM4 => s, C_OUT4 => c_out); ТЕСТ:начало процесса - Проверить все комбинации двух 4-битных слагаемых (всего 256 тестов) для a_val в цикле от 0 до 15 для b_val в цикле от 0 до 15 - Установить входы для компонента ADDER4 a <=std_logic_vector (to_unsigned ( a_val, a'length)); b <=std_logic_vector (to_unsigned (b_val, b'length)); ждать 1 нс; - Вычислить 5-битную сумму двух 4-битных значений expected_sum5 <=unsigned ('0' &a) + unsigned ('0' &b); ждать 1 нс; - Разбить сумму на 4-битный выход и бит переноса ожидаемая_сумма4 <=ожидаемая_сумма5 (от 3 до 0); ожидаемое_с <=ожидаемое_сумма5 (4); ждать 1 нс; - Сигнал 'error' перейдет в 1 только в случае возникновения ошибки, если ((unsigned (s) =unsigned (expected_sum4)) and (c_out =expected_c)) then error <='0'; иначе ошибка <='1'; конец, если; - Каждый проход по внутреннему циклу занимает 10 нс, ожидание 7 нс; конец петли; конец петли; ждать; КОНЕЧНЫЙ ТЕСТ процесса; конечная архитектура ПОВЕДЕНИЕ; 

Этот код реализует функции 4-битного сумматора, представляя все комбинации 4-битных чисел для каждого из A4 и B4 входные данные в Adder4 компонент. Он сравнивает SUM4 и C_OUT4 выходные данные Adder4 компонент для независимого вычисления значений для одних и тех же входных данных. После каждой операции добавления выдается ошибка signal установлено значение 0, если Adder4 выходы соответствуют ожидаемым значениям, либо задано значение 1 если есть несоответствие.

Код в Adder4TestBench.vhdl напоминает традиционный программный код тем, как он использует вложенные циклы for для применения всех тестовых входных комбинаций к Adder4 тестируемый компонент. Код, запускающий тесты в режиме моделирования, не является синтезируемым, что означает, что он не представляет собой чисто аппаратную логическую схему и может выполнять традиционные программные операции, такие как итеративное выполнение для петли.

Однако, как и в физических схемах, сигналы, которым присваиваются значения в коде испытательного стенда с использованием оператора <=, не могут использоваться в один и тот же момент времени в последующих выражениях. Это связано с тем, что среда моделирования представляет реальные эффекты задержки распространения, которая значительна даже в крошечных устройствах FPGA. Три ждут 1 нс ; Операторы в коде тестового стенда приостанавливают операции схемы, чтобы учесть задержку распространения. Эти задержки в 1 нс обеспечивают время для значений сигнала, вычисленных непосредственно перед wait оператор для распространения, чтобы их можно было использовать в следующем операторе. Последний ожидание 7 нс ; Оператор во внутреннем цикле представляет собой паузу, которая позволяет нам четко видеть результаты каждой итерации циклов моделирования на экране трассировки сигнала.

  1. Щелкните правой кнопкой мыши Adder4 TestBench (Behavioral) (Adder4TestBench.vhdl) . в разделе Источники моделирования и выберите Автоматическое обновление и порядок компиляции . . Это устанавливает ADDER4_TESTBENCH в качестве объекта верхнего уровня для запуска моделирования:


Рисунок 4.19. Выбор меню для установки автоматического обновления и порядка компиляции

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


Рисунок 4.20 - Выбор меню «Запустить поведенческое моделирование»

  1. Когда МОДЕЛИРОВАНИЕ В открывшемся окне нажмите кнопку развертывания в окне вывода моделирования с заголовком Без названия 1 :


Рисунок 4.21 - Окно результатов моделирования

Общее время моделирования каждого прохождения внутреннего цикла составляет 10 нс. Поскольку цикл в Adder4TestBench.vhdl проходит 256 , время запуска моделирования - 2560 нс.

  1. Установите время выполнения моделирования на 2560 нс на верхней панели инструментов ( шаг 1 на следующем рисунке), нажмите кнопку перезапуска, указывающую влево ( шаг 2 ), затем нажмите правую кнопку, чтобы запустить моделирование в течение 2560 нс ( шаг 3 ) и, наконец, нажмите кнопку Zoom Fit кнопка ( шаг 4 ), чтобы масштабировать диапазон выходных данных моделирования по размеру окна:


Рисунок 4.22 - Результаты моделирования от начала до конца цикла

Вы можете использовать значки лупы, чтобы увеличить любую точку кривой и наблюдать за результатами каждой операции добавления, выполненной во время тестирования. Например, на следующем рисунке показано, что десятичные значения 6 и 2 были добавлены для получения результата 8 с переносом 0. Эти значения соответствуют ожидаемым значениям, что вызвало ошибку установить значение 0. Ошибка signal равно 0 для всех 256 тестовых примеров, что указывает на то, что наша логическая схема прошла все тесты:


Рисунок 4.23 - Увеличенное изображение результатов моделирования

  1. Закройте режим моделирования, нажав X синим цветом МОДЕЛИРОВАНИЕ полоса над графиком данных Нажмите ОК когда вас спросят, хотите ли вы закрыть симуляцию.

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

Определение сигналов ввода-вывода

Наш следующий шаг - подключить входы и выходы нашей схемы к аппаратным устройствам на плате Arty. Входами будут переключатели и кнопки на плате, а выходами - светодиоды.

Следующие шаги создадут файл ограничений, который описывает выводы ввода / вывода, которые мы будем использовать на устройстве FPGA, и функции, связанные с этими выводами на плате Arty. Файлы ограничений имеют расширение xdc:

  1. В разделе Источники во вложенном окне щелкните правой кнопкой мыши Ограничения и выберите Добавить источники… .
  2. В Добавить источники диалоговом окне убедитесь, что Добавить или создать ограничения выбран, затем нажмите Далее .
  3. В Добавить или создать ограничения в диалоговом окне нажмите Создать файл . .
  4. Введите имя файла Arty-A7-100.xdc (или Arty-A7-35.xdc если подходит для вашего устройства) и нажмите ОК .
  5. Нажмите Готово . чтобы отклонить Добавить или создать ограничения
  6. Разверните Ограничения исходное дерево и дважды щелкните Arty-A7-35.xdc .
  7. Digilent предоставляет предварительно заполненные файлы ограничений для плат Arty A7. Посетите https://raw.githubusercontent.com/Digilent/digilent-xdc/master/Arty-A7-35-Master .xdc и скопируйте все содержимое окна браузера в окно редактора Arty-A7-35.xdc в Vivado. Если подходит для вашего устройства, используйте файл по адресу https://raw.githubusercontent.com/Digilent/digilent-xdc/master/Arty-A7-100-Master.xdc вместо этого.
  8. Все контакты ввода-вывода закомментированы в файле ограничений путем раскомментирования соответствующих строк в файле путем удаления символа # в начале каждой строки. Мы будем использовать булавки, перечисленные в следующих разделах Arty- A7-100.xdc файл: Переключатели , RGB Светодиоды (но только led0_g , первый зеленый светодиод), светодиоды и кнопки . На следующем рисунке показаны эти строки после того, как они были раскомментированы:


Рисунок 4.24 - Окно редактора ограничений

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

Создание файла VHDL верхнего уровня

Затем мы создадим файл VHDL верхнего уровня, который соединит наш 4-битный компонент сумматора с соответствующими сигналами ввода-вывода платы:

  1. В разделе Источники в дополнительном окне щелкните правой кнопкой мыши Источники дизайна . и выберите Добавить источники… .
  2. В Добавить источники в диалоговом окне убедитесь, что Добавить или создать источники дизайна выбран, затем нажмите Далее .
  3. В Добавить или создать источники дизайна в диалоговом окне нажмите Создать файл . .
  4. Введите имя файла vhdl и нажмите ОК .
  5. Нажмите Готово . чтобы закрыть Добавить или создать источники дизайна диалоговое окно, затем нажмите ОК в Определить модуль диалоговое окно и нажмите Да когда вас спросят, уверены ли вы, что хотите использовать эти
  6. Дважды щелкните vhdl . в разделе Источники дизайна . Удалите автоматически заполненное содержимое ArtyAdder.vhdl . окно редактора и введите следующий код в ArtyAdder.vhdl редактор:
 - Загрузить стандартные библиотеки библиотеки IEEE; используйте IEEE.STD_LOGIC_1164.ALL; объект ARTY_ADDER - это порт (sw:в STD_LOGIC_VECTOR (3 вниз до 0); btn:в STD_LOGIC_VECTOR (3 вниз до 0); led:out STD_LOGIC_VECTOR (3 вниз до 0)); ARTY_ADDER; архитектура BEHAVIORAL для ARTY_ADDER - Ссылка на предыдущее определение 4-битного компонента сумматора ADDER4 - это порт (A4:в std_logic_vector (3 вниз до 0); B4:в std_logic_vector (3 вниз до 0); SUM4:вне std_logic_vector (3 вниз до 0); C_OUT4:из std_logic); конечный компонент; начало ADDER:карта портов ADDER4 (A4 => sw, B4 => btn, SUM4 => led, C_OUT4 => led0_g); конечная архитектура BEHAVIORAL; 

Этот код отображает имена сигналов для устройств ввода-вывода, названных в Arty-A7-100.xdc как sw (4 переключателя), btn (4 кнопки), светодиод (4 одноцветных светодиода) и led0_g (зеленый канал первого многоцветного светодиода) к ADDER4 входы и выходы.

Хотя VHDL не чувствителен к регистру, обработка xdc Файлы ограничений в Vivado чувствительны к регистру. Регистр, используемый в именах устройств ввода-вывода, определенных в xdc файл должен быть идентичным, если на него есть ссылка в файле VHDL. В частности, имена сигналов ввода-вывода в VHDL должны быть в этом файле в нижнем регистре, потому что в файле ограничений они указаны в нижнем регистре.

Теперь мы готовы синтезировать, реализовать и запрограммировать наш дизайн для платы Arty.

Синтез и реализация потока битов FPGA

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

  1. Нажмите Создать битовый поток . для начала сборки Вас могут спросить, хотите ли вы сохранить текстовые редакторы. Нажмите Сохранить . . Вас могут проинформировать об отсутствии доступных результатов внедрения и спросить, можно ли начать синтез и реализацию. Нажмите Да . :


Рисунок 4.25. Выбор меню «Создать битовый поток»

  1. запуски появится диалоговое окно. Вы можете выбрать значение для Количество заданий до количества ядер процессора в вашем компьютере. Использование большего количества ядер ускоряет процесс, но может привести к сбоям в работе вашего компьютера, если вы захотите продолжить его использование во время длительного процесса сборки. Нажмите ОК . чтобы начать сборку:


Рисунок 4.26. Диалоговое окно "Запуск запусков"

  1. В процессе сборки Vivado будет отображать статус в правом верхнем углу главного окна. При необходимости вы можете отменить процесс сборки, нажав Отмена . рядом с отображением статуса:


Рисунок 4.27. Отображение статуса компиляции

  1. Когда процесс сборки завершится (при условии отсутствия критических ошибок), появится сообщение Генерация битового потока завершена . диалог будет Хотя предлагаются и другие варианты, мы перейдем непосредственно к загрузке битового потока на плату Arty. Выберите Открыть диспетчер оборудования . и нажмите ОК :


Рисунок 4.28. Диалоговое окно "Генерация битового потока завершена"

Затем мы загрузим битовый поток в FPGA.


Рисунок 4.29. Выборы "Открыть цель" и "Автоматическое соединение"

  1. Через несколько секунд Vivado должен указать, что плата подключена. Нажмите Запрограммировать устройство . чтобы загрузить битовый поток FPGA в Arty Вам будет предложено выбрать файл битового потока. Если вы использовали ту же структуру каталогов, что и в этом примере, файл будет расположен по адресу C:/ Projects / ArtyAdder / . ArtyAdder.runs / impl_1 / ARTY_ADDER.bit :


Рисунок 4.30 - Диалоговое окно "Программирование устройства"

  1. Нажмите Программа . загрузить программу на устройство FPGA и запустить ее
  2. Теперь вы можете протестировать работу программы с Arty I / O. Установите все четыре переключателя в положение выключено . положение (переместите переключатели к соседнему краю платы) и не нажимайте ни одну из четырех кнопок. Все четыре зеленых светодиода должны погаснуть.
  3. Если вы включите какой-либо отдельный переключатель или нажмете любую кнопку, должен загореться соответствующий зеленый светодиод. Включение любой комбинации переключателей при нажатии любого количества кнопок добавит соответствующие 4-битные числа и загорится светодиоды с сообщением Если есть перенос (например, включить SW3 и нажмите BTN3 одновременно) загорится зеленый светодиод переноса.

Выполняемый здесь процесс программирования сохранил программу в RAM FPGA. Если вы выключите и снова включите плату FPGA, вам нужно будет повторить процесс программирования, чтобы перезагрузить программу. Кроме того, вы можете сохранить файл конфигурации FPGA во встроенной флэш-памяти, как описано в следующем разделе.

Программирование потока битов во встроенную флэш-память

Чтобы настраивать FPGA каждый раз, когда на плату Arty подается питание, файл конфигурации FPGA должен быть сохранен во флэш-памяти на плате. Если установлена ​​перемычка MODE, FPGA попытается загрузить файл конфигурации из встроенной флэш-памяти при включении питания. Эта память расположена в отдельной микросхеме рядом с ПЛИС Artix-7. Выполните следующие действия, чтобы запрограммировать файл конфигурации во флэш-память:

  1. Установите РЕЖИМ . перемычку на плате Arty, если она еще не вставлена ​​
  2. Щелкните правой кнопкой мыши Создать битовый поток . и выберите Настройки битового потока… .
  3. В Настройках диалоговом окне установите флажок рядом с -bin_file и нажмите ОК :


Рисунок 4.31 - Диалог настроек битового потока

  1. В главном диалоговом окне Vivado нажмите Создать битовый поток . и повторить процесс генерации битового потока. Нажмите Отмена . когда генерация битового потока завершена диалог
  1. В разделе Оборудование диалоговом окне щелкните правой кнопкой мыши номер детали FPGA ( xc7a100t_0 ) и выберите Добавить устройство памяти конфигурации… :


Рисунок 4.32. Пункт меню «Добавить устройство памяти конфигурации…»

  1. Введите s25fl127 . в Поиск Должен появиться один совпадающий номер детали. Выберите деталь и нажмите ОК . :


Рисунок 4.33. Диалоговое окно "Добавить устройство памяти конфигурации"

  1. Появится диалоговое окно с вопросом Вы хотите сейчас запрограммировать устройство памяти конфигурации? Нажмите ОК . .
  2. Откроется Устройство памяти конфигурации программ . диалоговое окно с запросом имени файла конфигурации. Нажмите кнопка справа от файла конфигурации и выберите C:/Projects/ArtyAdder/ArtyAdder.runs/impl_1/ARTY_ADDER.bin. Нажмите ОК . :


Рисунок 4.34. Диалоговое окно "Устройство памяти для конфигурации программы"

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


Рисунок 4.35. Диалоговое окно завершения программы Flash

После этого каждый раз, когда вы выключаете питание платы, загружается и запускается 4-битная программа сумматора. Программа долго загружается с настройками, которые мы использовали для загрузки файла конфигурации. Чтобы не ждать, пока ПЛИС загрузит программу, вы можете повысить скорость загрузки файла конфигурации, выполнив следующие шаги:

  1. Выберите Открытый синтезированный дизайн . в Flow Navigator .
  2. В главном меню Vivado выберите Инструменты / Редактировать свойства устройства… .
  3. В разделе Общие на вкладке установите Включить сжатие битового потока . на ИСТИНА .
  4. В Конфигурации на вкладке установите Скорость конфигурации (МГц) на 33, затем нажмите ОК .
  5. Снова сгенерируйте поток битов и запрограммируйте флеш-память, как описано. Вам нужно будет удалить устройство памяти конфигурации и снова добавить его, чтобы отобразить параметр для перепрограммирования.
  6. Закройте Оборудование . Менеджер .
  7. Отключите USB-кабель платы Arty и подключите его. Программа должна запускаться практически мгновенно при включении питания.

В этом разделе представлен пример простой комбинационной логики, взаимодействующей с сигналами на выводах ввода / вывода FPGA. Здесь мы хотели познакомить вас с Vivado

набор инструментов и продемонстрировать, как эти инструменты используются для выполнения полного цикла разработки ПЛИС.

Резюме

Эта глава началась с обсуждения эффективного использования ПЛИС в архитектурах встроенных систем реального времени и продолжилась описанием стандартных устройств ПЛИС и содержащихся в них низкоуровневых компонентов. Был представлен ряд языков проектирования FPGA, включая HDL, методы блок-схем и популярные языки программирования, такие как C / C ++. Был представлен план процесса разработки ПЛИС. Глава завершается полным примером цикла разработки ПЛИС, начиная с изложения требований и заканчивая функциональной системой, реализованной на недорогой плате для разработки ПЛИС.

Завершив эту главу, вы должны знать, как ПЛИС могут быть эффективно применены в архитектурах встроенных систем реального времени, и понимать компоненты внутри интегральной схемы ПЛИС. Вы узнали о языках программирования, используемых при разработке алгоритмов ПЛИС, этапах цикла разработки ПЛИС и понимаете последовательность этапов процесса разработки ПЛИС.

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

Перепечатано с разрешения Packt Publishing. Авторские права © 2021 Packt Publishing


Джим Ледин является генеральным директором Ledin Engineering, Inc. Джим является экспертом в области проектирования, разработки и тестирования встроенного программного и аппаратного обеспечения. Он также имеет опыт оценки кибербезопасности встроенных систем и тестирования на проникновение. У него есть степень бакалавра наук. степень в области аэрокосмической техники Университета штата Айова и степень магистра наук степень в области электротехники и вычислительной техники Технологического института Джорджии. Джим является зарегистрированным профессиональным инженером-электриком в Калифорнии, сертифицированным специалистом по безопасности информационных систем (CISSP), сертифицированным этическим хакером (CEH) и сертифицированным тестером на проникновение (CPT).

Связанное содержание:

  • Встроенный дизайн с ПЛИС:аппаратные ресурсы
  • Встроенный дизайн с ПЛИС:языки реализации
  • Встроенный дизайн с ПЛИС:процесс разработки
  • Инструменты с открытым исходным кодом помогают упростить программирование FPGA.
  • Реализация алгоритмов с плавающей запятой в ПЛИС или ASIC.
  • Использование ПЛИС для глубокого обучения
  • Программные инструменты переносят код GPU на FPGA для приложений AI.

Чтобы получить больше информации о Embedded, подпишитесь на еженедельную рассылку Embedded по электронной почте.


Встроенный

  1. Что такое дизайн встроенной системы:этапы процесса проектирования
  2. Обработка 3D-печатных деталей ... мелками?
  3. Интервью с экспертом:главный технолог ANSYS по достижению успеха в 3D-печати из металла с помощью моделирования
  4. Превращение больших данных в интеллектуальные данные с помощью встроенного ИИ
  5. Проблемы реализации порта USB Type-C и проектные решения
  6. Ключевые отраслевые тенденции влияют на дизайн встраиваемых систем
  7. Платформа с открытым исходным кодом нацелена на Интернет вещей со встроенным Linux
  8. Clientron:многофункциональный POS-терминал со встроенным принтером
  9. Конструкторский комплект для измерения артериального давления с помощью оптического датчика
  10. Все вместе с добавками