Преимущества новых ПЛИС выходят за рамки увеличения частоты работы.
Краткое резюме
В статье анализируется потребление ресурсов разными поколениями ПЛИС Xilinx на примере проекта с модулем AES-128. В эксперименте участвуют микросхемы Spartan-3, Spartan-6, Artix-7 и Kintex UltraScale.
В данной статье мы проанализируем, как различные ПЛИС используют ресурсы в рамках одного проекта. Известно, что ПЛИС включает в себя блоки (CLB), и с каждым новым поколением их содержимое становится более сложным. Возникает вопрос: насколько эффективно используются ячейки и сколько ресурсов ПЛИС экономится по сравнению с предыдущими поколениями?
Эта статья не посвящена оптимизации или описанию внутренней структуры ПЛИС. Она рассматривает конкретный аспект: потребление ресурсов одним и тем же проектом на разных ПЛИС.
Для эксперимента был выбран готовый код с GitHub — AES-128, написанный на Verilog. К нему была добавлена минимальная обвязка, и проект был собран. Структура проекта включает модуль UART на входе для приёма 16 байт ключа и 16 байт данных. Также был добавлен 1 байт в начале для определения передаваемых данных (ключ или данные). В первом байте также передаётся режим работы модуля: кодировать или декодировать. Таким образом, функционал модуля задействован полностью, и синтезатор не должен исключить лишнее.
Результаты работы модуля AES-128 сохраняются в 16-байтный регистр и выводятся побайтно через UART.
Для эксперимента не требуется иметь физические ПЛИС, достаточно выбрать целевой камень в проекте и выполнить имплементацию. Были выбраны следующие FPGA:
* Spartan-3 (XC3S1000) — попытка использовать XC3S400 не увенчалась успехом, так как проект не поместился в эту ПЛИС.
* Spartan-6 (XC6SLX16) — на таком кристалле есть пустые отладки на Aliexpress.
* Artix-7 (xc7a100t) — выбран из-за наличия отладки Nexys A7 с этим кристаллом.
* Kintex UltraScale (xcku040) — выбран на основе поиска на Aliexpress, так как нет опыта работы с UltraScale.
В эксперименте участвуют ПЛИС фирмы Xilinx, так как на практике сталкивался только с этой фирмой.
Эксперимент начинается с самой маленькой ПЛИС — Spartan-3. Результаты использования ресурсов следующие:
* Slice Registers: 2448.
* 4 input LUTs: 10001.
* Slices: 6265.
Следует отметить, что в Spartan-3 один слайс содержит 2 LUT и 2 регистра. Поэтому потребление LUT-ов примерно в два раза больше, чем слайсов. В дальнейшем будет видно, как потребление LUT уменьшается.
Также стоит отметить, что при первой попытке сборки синтезатор использовал ROM память, что увеличило частоту проекта и потребление ресурсов. Причины этого пока неясны.