В этой статье хочу рассмотреть различные ПЛИС со стороны потребления ресурсов одного и того же проекта. Всем известно, что ПЛИС состоит из блоков (CLB), а вот содержимое этих блоков качественно меняется от поколения к поколению.

Прослеживается тенденция (и она очевидна), что сложность CLB повышается, сами примитивы становятся хитрее. От сюда вытекает вопрос, а на сколько эффективными становятся ячейки, и сколько ресурсов ПЛИС они экономят в сравнении с предыдущими поколениями?

Краткое пояснение

Эта статья не про оптимизацию и не описание внутреннего строения ПЛИС. Это МИНИ-статья, которая рассматривает конкретный аспект: сколько ресурсов потребляет один и тот же проект на разных ПЛИС.

Суть эксперимента

Я решил взять готовый код с гитхаба AES-128 написанный на Verilog, сделать ему минимальную обвязку и собрать.

Структура проекта получилась следующей:

Модуль UART на входе, для приема 16 байт ключа и 16 байт данных; так же условно добавил 1 байт в начале для определения передаваемых данных (ключ или данные), в первом байте также передается режим работы модуля: кодировать или декодировать. Таким образом функционал модуля задействован полностью и синтезатор не должен выкинуть лишнее.

Результат работы модуля AES-128 сохраняется в регистр, тоже 16-байтный и побайтно выводится через тот же UART.

Структурная схема проекта
Структурная схема проекта

Подопытные

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

Начну с самого маленького кристалла:

  1. Spartan-3 (XC3S1000) – Я пробовал взять XC3S400, но проект в эту ПЛИС не влез.

  2. Spartan-6 (XC6SLX16) – На таком кристалле есть пустые ��тладки на Aliexpress. У меня такая уже есть, поэтому решил взять именно ее, несмотря на то что в мире полно отладок и на XC6SLX9.

  3. Artix-7 (xc7a100t) – У меня имеется отладка Nexys A7, на ней как раз стоит этот кристалл, поэтому выбор пал на нее как на представителей седьмого семейства.

  4. Kintex UltraScale (xcku040) – c UltraScale я напрямую не сталкивался и не знаю какую ПЛИС удачнее выбрать, поэтому пошел на Aliexpress, вбил ключевые слова и нашел пару отладок, с них и взял название кристалла.

Наверняка все заметили, что в эксперименте участвуют ПЛИС фирмы Xilinx. Так сложилось, что на практике я сталкивался только с этой фирмой.

Ход эксперимента

Список я начал с самой маленькой ПЛИС, и эксперимент так же начну с самой маленькой.

Spartan-3.

Slice Registers

2448

4 input LUTs

10001

Slices

6265

report utilization

Тут стоит отметить, что в Spartan-3 один слайс имеет 2 LUT и 2 регистра, примерно так и получается, что потребление LUT-ов примерно в 2 раза больше, чем слайсов (разумеется, численно). Далее будет видно, как потребление LUT будет уменьшаться.

Также хочу отметить, что при первой попытке сборки синтезатор использовал ROM память, чем увеличил частоту проекта и дополнительно увеличил потребление ресурсов. Чем это объяснить - не знаю.

Spartan 6.

Slice Registers

2451

Slices LUTs

5188

Slices

1573

Для этой сборки пришлось обратно включить использование RAM и ROM, возможно потому, что некоторые ресурсы слайсов могут использоваться в качестве памяти. Поэтому в данном плане эксперимент в потреблении ресурсов в сравнении со Спартан 3 будет не чистым, но(!) при полученной сборке не пострадал использовался ни один ROM.

Итак, что имеем: количество использованных регистров осталось ± прежним. А вот использование LUT, значительно сократилось. Также сократилось использование слайсов. Это вызвано в первую очередь измененной архитектурой слайса. Каждый слайс стал иметь до четырех 6-входовых LUT и 8 регистров.  За счет увеличения количества входов LUT синтезатору удается более эффективно собрать код, а за счет увеличенного числа ресурсов на слайс, число слайсов уменьшилось.

report utilization

Artix -7.

Slice Registers

2460

Slices LUTs

3412

Slices

1214

F7 Muxes

545

F8 Muxes

140

 

Здесь стоит отметить, что я перешел в Vivado 2019.1.

В седьмом семействе ПЛИС уже на одну CLB полагается два слайса. В каждом слайсе 16 регистров, 8 лутов, и дополнительные функции - такие как: арифметические цепи и цепи переноса, распределё��ная память и сдвиговый регистр. Помимо того, значительно улучшена маршрутизация компонентов.

И аналогично видно, что потребление ресурсов снова снизилось, за счет более эффективных примитивов. Также видно, что добавились мультиплексоры, которые, кстати объединяют 2 LUT в один логический.

report utilization

Kintex UltraScale.

Slice Registers

2462

Slices LUTs

3409

CLB(вместо Slice)

608

F7 Muxes

545

F8 Muxes

140

 

На данном этапе теория провалилась. Поколение изменило ступень, но значительного прироста не произошло, зато они изменили архитектуру - если в предыдущем поколении на один CLB приходилось 2 Slice, то в этом кристалле от слайсов отказались и все считают в CLB; и все ресурсы что были раньше из двух слайсов переместили в один CLB. Из-за чего можно отметить уменьшение числа CLB вместо слайсов в два раза. Кроме того в этом семействе появились F9 Muxes, что в перспективе должно улучшить сборку проектов.

report utilization

Итоговая таблица

Параметр

Spartan-3

Spartan-6

Artix-7

Kintex UltraScale

Kintex UltraScale+

Slice Registers

2448

2451

2460

2462

2462

LUTs

10001

5188(-48%)

3412(-34%)

3409

3410

Slice/CLB

6265

1573(-75%)

1214(-23%)

608(-0%) CLB

673 CLB

F7 Muxes

-

-

545

545

545

F8 Muxes

-

-

140

140

140

 

В таблице выше я свел все показатели в одну таблицу. В скобках указан процент того, сколько было сохранено ресурсов в сравнени�� с предыдущим поколением.

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

Значимых улучшений для UltraScale не наблюдается, видимо это какой-то переходный этап у Xilinx. Также не удержался и сделал контрольную сборку, но для UltraScale+. Видно, что поднялось потребление CLB, но все остальное осталось прежним.

Заключение

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

Использованная литература.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
С каким поколением ПЛИС вы работаете на данный момент? (не справедливый опрос)
0%Spartan 30
0%Spartan, Virtex 60
42.86%7-series3
0%UltraScale0
14.29%UltraScale+1
42.86%Altera3
28.57%Другое2
Проголосовали 7 пользователей. Воздержался 1 пользователь.