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

Какой тип кодировки мне использовать? Примеры приложений FPGA

Выполните три эксперимента, демонстрирующие процесс определения того, какой тип кодирования подходит для данной FPGA.

Какой тип кодирования я должен использовать для моей FPGA? Как я обсуждал в предыдущей статье, компилятор обычно решает это за вас, и я рекомендую вам следовать тому, что решает компилятор.

Однако важно понимать различия между типами кодирования и почему компилятор может прийти к определенному выводу. Имея это в виду, эта статья проведет вас через эксперимент, который показывает пример приложения FPGA и шаг за шагом обсуждает, какой тип кодирования лучше всего.

До сих пор в этой серии мы обсуждали, как создать конечный автомат (FSM) с Verilog, начальное состояние и то, как память влияет на кодирование FPGA, а также общий обзор, сравнивающий двоичное, горячее и серое кодирование. .

Тестируемая система

Для этого эксперимента я хотел создать экземпляр конечного автомата большое количество раз, чтобы увеличить различия в получаемом оборудовании при использовании двоичного, серого и однократного кодирования.

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

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

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

Так выглядит «Игра жизни» Конвея при использовании так называемого планерного ружья Госпера.

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

Код Verilog

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

В следующем фрагменте кода 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

`определить STATE_5 3'b101

`define STATE_6 3'b110

`define STATE_7 3'b111

модуль LifeCell (

input clk,

input nrst,

начальное число ввода,

вход [7:0] соседи,

выходной регистр активен);

состояние reg [2:0];

всегда @ (posedge clk)

if (nrst ==0)

состояние <=`STATE_0;

else

case (состояние)

`STATE_0:begin

// ...

состояние <=`STATE_1;

конец

`STATE_1:начало

// ...

состояние <=`STATE_2;

конец

// ...

`STATE_7:начало

// ...

состояние <=`STATE_1;

конец

конечный регистр

конечный модуль

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

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

Система была синтезирована и реализована как мир 23x23 ячеек, всего 27 вариантов:использовались три разных конечных автомата, все с тремя упомянутыми выше кодировками, все на трех разных целевых ПЛИС.

Конечный автомат №1:исходная модель

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

Конечный автомат №2:последовательность

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

Автомат №3:произвольный клубок

Эта машина имеет тот же критический путь, что и конечный автомат №1, но она проходит произвольный путь, когда известно, что количество живых соседей превышает 3.

Я ожидал, что для такого поведения при произвольном переходе между состояниями лучшим выбором будет однократное кодирование.

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

Система была реализована для трех целевых ПЛИС с использованием инструментов разработки их поставщиков:

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

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

Для каждой реализации эти четыре аспекта сравнивались среди трех кодировок, поэтому среди кодировок я получил лучший, худший и средний результат:лучший получает положительный результат, худший - отрицательный, а средний. получает 0.

Сложив все оценки для каждой модели, я получил следующие результаты:

Таблица результатов для всех 27 реализаций. В каждой строке лучшая кодировка отображается зеленым, худшая - красным, а средняя - желтым, если нет связей.

Похоже, это предлагает воздержаться от однократного кодирования, только в двух случаях, когда оно выигрывает, один из которых - ничья. Более того, хотя я изначально ожидал, что one-hot будет лучшей кодировкой для модели конечного автомата №3, она оказалась ее худшей кодировкой, и ни один инструмент разработки не рекомендовал ее. Тем не менее, бывают случаи, когда одно превосходит все остальное, в основном в показателях частоты и мощности.

В целом, кодировка Грея кажется лучшим выбором для этой конкретной системы.

Вычитая победителей из этой таблицы, получаем следующее:

Вердикт

Несмотря на то, что в этом сравнении, кажется, предпочтение отдается кодировке Грея по сравнению с двоичным и горячим, результаты сильно зависят от используемых нами показателей, и эти показатели отражают то, что для нас важно. Например, в этом сравнении я считал частоту и мощность более важными, чем использование (количество логических элементов и регистров в проекте). Если бы я оценивал использование выше частоты и частоту выше мощности, несомненно, результатом был бы другой рейтинг.

Это сравнение не предназначалось для окончательной оценки производительности, полученной при использовании этих кодировок. Вместо этого он показывает рейтинг, созданный моими личными предпочтениями в отношении архитектур, которые я использовал.

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


Встроенный

  1. Swissbit:ключ флэш-накопителя USB 3.1 для промышленных приложений
  2. AAEON:COM Express Type 6 для требовательных приложений
  3. Как выбрать контроллер
  4. Когда следует использовать тестирование непокрытой платы?
  5. Почему вы должны использовать линейный реактор
  6. Когда следует использовать кран-молот? Руководство
  7. В каких отраслях используются кевларовые материалы?
  8. Почему вам следует использовать решение Remote Expert?
  9. Какой алюминиевый сплав следует использовать
  10. Титан или алюминий:какой цветной металл использовать