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

За някои приложения, обикновено тези, които са чувствителни към цената, отпечатъка или мощността, може да се окаже, че трябва да работим с по-малки устройства. Можем също да се окажем в тази позиция, ако станем жертва на страховитото пълзене на обхвата.

Един от начините, по който можем да използваме по-добре ресурсите, налични в нашето устройство, когато става въпрос за DSP елементи, е да използваме Single Instruction Multiple Data, или накратко 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”;

Verilog

(* ‹use_dsp› = “simd” *)

Ако не сте сигурни как да внедрите SIMD във вашия RTL, най-лесният начин да проверите отново коректността е да се обърнете към езиковите шаблони, предоставени от Vivado.

Разбира се, след като сме написали кода и сме включили атрибута в нашия дизайн, можем да стартираме синтез преди внедряването. След като синтезът завърши, за да се уверим, че машината за синтез е внедрила правилно SIMD, трябва да проверим отчета за синтез.

В рамките на доклада за синтез ще намерите предварителното DSP картографиране, показващо как се използват портовете A, B и C.

Трябва също така да проверим използването на DSP в отчета за синтез, за ​​да сме сигурни, че отговаря на нашите очаквания.

Когато използваме DSP48 по този начин, в сравнение с внедряването на функционалност за добавяне/суб/натрупване в логиката, това предлага няколко предимства. Получаваме не само намаляване на площта, необходима за внедряване на функционалността, но и изпълнение, което е и по-енергийно ефективно.

Както е посочено във въведението, използването на SIMD ни предоставя възможността ефективно да използваме ресурсите на устройството, ако сме изправени пред предизвикателства по отношение на ресурсите или разсейването на мощността в нашето целево устройство.

Вижте моите проекти за FPGA / SoC:Адам Тейлър в Hackster.io

Вземете кода:ATaylorCEngFIET (Адам Тейлър)

Допълнителна информация за разработката на Xilinx FPGA / SoC може да бъде намерена всяка седмица в MicroZed Chronicles.