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

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

Один из способов, которым мы можем лучше использовать ресурсы, доступные в нашем устройстве, когда речь идет об элементах DSP, — это использовать несколько данных с одной инструкцией или сокращенно SIMD.

При использовании FPGA или SoC функция SIMD, очень похожая на SIMD в мире SW, позволяет нам использовать один ресурс для одновременного вычисления нескольких результатов.

В этом случае для нашей серии 7 и конструкций UltraScale+ рассматриваемым ресурсом будет либо DSP48E1 (серия 7), либо DSP48E2 (UltraScale+). Оба они являются сложными элементами DSP, которые позволяют выполнять высокопроизводительные вычисления в наших FPGA или SoC.

Изучив оба DSP48E1 и DSP48E2, вы увидите, что входы A, B и C имеют одинаковую ширину — 30, 18 и 48 бит соответственно. В то время как выход P также одинаков при 48 битах.

Для операций SIMD мы можем использовать эти входы для параллельного выполнения нескольких операций сложения/суммирования/накопления. В зависимости от размера векторов, с которыми мы хотим работать, у нас может быть до четырех 12-битных операций или две 24-битных операции.

Разработать RTL, чтобы воспользоваться возможностями SIMD DSP48, несложно.

Мы можем сделать это в нашем RTL, установив атрибут для обнаружения инструмента синтеза таким образом, чтобы он мог вывести правильную функцию реализации DSP48 и режим / OPCODE.

В нашем исходном коде атрибуты определены, как показано ниже.

VHDL

атрибут use_dsp ​​: строка;
атрибут use_dsp ​​архитектуры arch : «simd»;

Верилог

(* ‹use_dsp› = «simd» *)

Если вы не знаете, как внедрить SIMD в свой RTL, самый простой способ перепроверить правильность — обратиться к языковым шаблонам, предоставленным Vivado.

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

В сводном отчете вы найдете предварительное сопоставление DSP, показывающее, как используются порты A, B и C.

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

Когда мы используем DSP48 таким образом, по сравнению с реализацией функций сложения/суммирования/накопления в логике, это дает несколько преимуществ. Мы получаем не только сокращение площади, необходимой для реализации функциональности, но и более энергоэффективную реализацию.

Как указано во введении, использование SIMD дает нам возможность эффективно использовать ресурсы устройства, если мы сталкиваемся с проблемами, связанными с ресурсами или рассеянием энергии в нашем целевом устройстве.

Посмотрите мои проекты FPGA/SoC:Адам Тейлор на Hackster.io

Получите код:ATaylorCEngFIET (Адам Тейлор)

Дополнительную информацию о разработке Xilinx FPGA/SoC можно найти еженедельно на MicroZed Chronicles.