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

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

Следуйте за тремя экспериментами, иллюстрирующими, как выбрать наиболее подходящее кодирование для FPGA-дизайна.

При проектировании FPGA-логики инструмент синтеза обычно выбирает кодирование; обычно лучше доверять его решению. Однако понимание нюансов бинарного, Грея и one-hot представлений может помочь предвидеть, когда компилятор может предпочесть одно над другими.

Эта статья проводит через практический эксперимент, использующий «Игру жизни» Конвея в качестве тестовой площадки, подсвечивая компромиссы, возникающие при применении каждого кодирования к большому массиву конечных автоматов.

В этой серии мы охватывали построение FSM в Verilog, влияние начальных состояний и памяти на кодирование, и высокоуровневое сравнение бинарных, one-hot и схем Грея.

Система под тестом

Для увеличения аппаратных различий я инстанцировал конечный автомат десятки раз по сетке 23×23, позволяя прямое сравнение бинарного, Грея и one-hot кодирований.

«Игра жизни» Конвея — классический клеточный автомат, моделирующий рождение, выживание и смерть клеток на прямоугольной 2D решётке. Каждая клетка следует трём простым правилам в каждом цикле:

  1. Живые клетки с двумя или тремя живыми соседями выживают.
  2. Мёртвые клетки с тремя живыми соседями становятся живыми.
  3. Все остальные клетки умирают или остаются мёртвыми.

Эти правила порождают богатое разнообразие возникающих паттернов и обеспечивают чистую, хорошо понятную нагрузку для оценки стратегий кодирования.

Ниже GIF пушки Билла Госпера (Glider Gun), популярного паттерна в Игре жизни.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

Вариация Игры жизни Конвея, известная как Пушка Госпера. GIF создан Лукасом Виейрой [CC BY-SA 3.0]

Verilog код

Логика клетки моделируется как 8-состояний FSM. Хотя вычисление на клетку в Игре жизни завершается за один цикл, 8-состояний дизайн создаёт заметные различия между кодированиями. Следующий Verilog модуль демонстрирует оригинальное бинарное кодирование.

`define STATE_0 3'b000 `define STATE_1 3'b001 `define STATE_2 3'b010 `define STATE_3 3'b011 `define STATE_4 3'b100 `define STATE_5 3'b101 `define STATE_6 3'b110 `define STATE_7 3'b111 module LifeCell( input clk, input nrst, input seed, input [7:0] neighbors, output reg alive); reg [2:0] state; always @ (posedge clk) if (nrst == 0) state <= `STATE_0; else case(state) `STATE_0: begin // ... state <= `STATE_1; end `STATE_1: begin // ... state <= `STATE_2; end // ... `STATE_7: begin // ... state <= `STATE_1; end endcase endmodule

Если вы хотите глубже погрузиться в код, полный проект доступен на GitHub.

Реализации кодирования FPGA

Дизайн был синтезирован на сетке 23×23 клеток, результатом в 27 различных реализаций: три варианта FSM, каждый скомпилированный с бинарным, Греем и one-hot кодированием, на трёх целевых FPGA.

FSM #1: Оригинальная модель

Этот FSM запускает начальное состояние один раз, затем циклится через оставшиеся семь состояний — последовательность, предполагавшая преимущество Грея.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

FSM #2: Последовательность А

Действующий как простой 3-битный счётчик, этот FSM ещё больше укрепил ожидание доминирования Грея.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

FSM #3: Произвольный запутанный путь

Этот вариант делит критический путь FSM #1, но идёт нелинейным маршрутом, когда счётчик соседей превышает три. One-hot кодирование казалось естественным выбором для таких иррегулярных переходов.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

Целевые архитектуры

Реализации строились с вендорными тулчейнами для следующих устройств:

Сравнение результатов

Бенчмаркинг FPGA-дизайнов по своей природе метрико-ориентирован. Я выбрал четыре ключевых индикатора — использование логических ресурсов, количество регистров, оценочная максимальная частота и накристаллическая мощность — и назначил взвешенные баллы каждому. Лучший исполнитель в каждой метрике получил +1 (или +2 для взвешенных метрик), худший — –1 (или –2), средний — 0.

Накопительные баллы для каждой из 27 реализаций показаны ниже.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

Таблица результатов для всех 27 реализаций. Зелёный подсвечивает лучшее кодирование, красный — худшее, жёлтый — медиану (без ничьих).

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

Для подсветки победителей, таблица ниже изолирует ведущее кодирование для каждого варианта.

Выбор правильного кодирования FPGA: практическое исследование на примере «Игры жизни» Конвея

Вердикт

Хотя данные склоняются к кодированию Грея для этой конкретной нагрузки Игры жизни, результат зависит от того, какие метрики вы приоритизируете. Если вы цените использование ресурсов над производительностью, может появиться другой рейтинг. Моя цель здесь — не предписать универсальное правило, а проиллюстрировать, как эмпирические доказательства могут направлять выбор кодирования.

Не стесняйтесь исследовать исходный код, 27 синтезированных реализаций или живую симуляцию Игры жизни в репозитории проекта на GitHub.

Встроенный

  1. Swissbit запустила U-50n Nano USB 3.1 флеш-накопитель — надежное высокопроизводительное хранилище для промышленного и IoT
  2. AAEON COM-CFHB6: Компактный высокопроизводительный Type-6 модуль с Intel CPU, 48 ГБ DDR4 ECC и 24 PCIe lanes для Edge, AIoT и промышленности
  3. Выбор правильного контроллера: ПЛК, PAC, DCS или IPC — разбор вариантов
  4. Когда использовать тестирование голых плат для надежной разработки печатных плат
  5. Защитите свои двигатели: основные преимущества линейных реакторов
  6. Когда использовать молотковидный кран: практическое руководство
  7. Отрасли, использующие Кевлар: от авиакосмики до личной защиты
  8. Максимизация эффективности с решениями Remote Expert в Industry 4.0
  9. Выбор правильного алюминиевого сплава для вашего проекта
  10. Титан против алюминия: выбор лучшего цветного металла для прочности и веса