Като разработчик на 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.