Мазмұны:

Vivado HLS бейне IP блогының синтезі: 12 қадам
Vivado HLS бейне IP блогының синтезі: 12 қадам

Бейне: Vivado HLS бейне IP блогының синтезі: 12 қадам

Бейне: Vivado HLS бейне IP блогының синтезі: 12 қадам
Бейне: FPGA Twitch 04 - Vivado HLS - С-тестбенчи и Назначение интерфейсов (часть 1 из 2) 2024, Шілде
Anonim
Vivado HLS бейне IP блогының синтезі
Vivado HLS бейне IP блогының синтезі

Сіз көп уақытты немесе ендірілген жүйені қоспай-ақ нақты уақыт режимінде бейне өңдегіңіз келді ме? Мұны істеу үшін кейде FPGA (далалық бағдарламаланатын шлюз массивтері) қолданылады; алайда, VHDL немесе Verilog сияқты аппараттық құралдарды көрсету тілдерінде бейне өңдеу алгоритмдерін жазу ең жақсы жағдайда көңілсіз қалдырады. C ++ ортасында бағдарламалауға мүмкіндік беретін Xilinx құралы Vivado HLS енгізіңіз және одан аппараттық спецификация тілінің кодын құрыңыз.

Қажетті бағдарламалық қамтамасыз ету:

  • Vivado HLS
  • Вивадо
  • (Егер сіз AXI регистрлерін қолдансаңыз) Vivado SDK

(Қосымша) Xilinx жасаған мысалдарды мына жерден жүктеңіз:

Xilinx HLS бейне мысалдары

1 -қадам: Vivado HLS дегеніміз не?

Vivado HLS - бұл C ++ сияқты кодты FPGA -да енгізуге болатын аппараттық құрылымдарға айналдыру үшін қолданылатын құрал, оның ішінде IDE бар, оны әзірлеу үшін IDE бар. Vivado -мен бірге қолдануға арналған.

Қосылған файлдарды жүктеп алып, жобаңызды жасайтын жерге қойыңыз. (егер олардың аты кездейсоқ болса, оларды «top.cpp» және «top.h» деп қайта атаңыз)

2 -қадам: HLS бейне кітапханасы

HLS бейне кітапханасы
HLS бейне кітапханасы
HLS бейне кітапханасы
HLS бейне кітапханасы

HLS бейне кітапханасында осы мақалада анықтамалық конструкциялары бар құжаттар бар: XAPP1167 Басқа жақсы ресурс - бұл туралы Xilinx Wiki беті.

Vivado HLS іске қосыңыз.

Жаңа жоба жасаңыз.

Алдыңғы қадамда жүктелген файлдарды алыңыз және оларды бастапқы файлдар ретінде қосыңыз. (Ескерту: файлдар жобаға көшірілмейді, керісінше олар сол жерде қалады)

Содан кейін жоғарғы функцияны таңдау үшін Шолу түймесін пайдаланыңыз.

Келесі бетте сіз қолданатын Xilinx бөлігін таңдаңыз.

3 -қадам: синтездеу

Синтезделуде
Синтезделуде

Шешім => C синтезін іске қосыңыз => Белсенді шешім

~ 227.218 секундтан кейін мұны істеу керек. (Ескерту: синтездің нақты уақыты көптеген факторларға байланысты өзгереді)

4 -қадам: Экспортқа арналған нұсқалар мен басқа ақпарат

Экспортқа арналған нұсқалар мен басқа ақпарат
Экспортқа арналған нұсқалар мен басқа ақпарат

Нұсқалар нөмірлері Vivado -мен өзара әрекеттеседі, бұл сізге дизайндағы IP -ды жаңартуға мүмкіндік береді. Егер бұл кішігірім нұсқа болса, оны өзгертуге болады, ал негізгі нұсқаға жаңа блокты қолмен қосуды және ескісін жоюды қажет етеді. IP -ді жаңарту түймесін басу арқылы автоматты түрде орындалады. Vivado tcl консолінде IP күйін көру үшін «report_ip_status» іске қосуға болады.

Шешім => Шешім параметрлері бөлімінде нұсқа нөмірлері мен басқа ақпаратты орнатыңыз …

Немесе бұл параметрлерді экспорттау кезінде орнатуға болады.

5 -қадам: Vivado IP кітапханасына экспорттау

Vivado IP кітапханасына экспорттау
Vivado IP кітапханасына экспорттау
Vivado IP кітапханасына экспорттау
Vivado IP кітапханасына экспорттау

Шешім => RTL экспорттау

Егер сіз IP кітапханасының мәліметтерін алдыңғы қадамда орнатпаған болсаңыз, мұны қазір жасай аласыз.

6 -қадам: Синтез және экспорттық талдау

Синтез және экспорттық талдау
Синтез және экспорттық талдау
Синтез және экспорттық талдау
Синтез және экспорттық талдау
Синтез және экспорттық талдау
Синтез және экспорттық талдау

Бұл экранда біз экспортталатын модуль туралы статистиканы көре аламыз, ол біздің 10нс (100МГц) сағаттық кезеңге сәйкес келетінін және ол әрбір ресурстың қанша бөлігін пайдаланатынын көрсетеді.

Осының, біздің синтез туралы есеп пен Dataflow талдауларының жиынтығымен біз 317338 сағат циклін * 10нс сағаттық кезең * 14 құбыр кезеңі = 0,04442732 секунд қажет екенін көреміз. Бұл біздің кескінді өңдеу арқылы қосылатын жалпы кідіріс секундтың жиырмадан бірінен аз екенін білдіреді (мақсатты 100 МГц жиілігінде).

7 -қадам: Vivado -да IP кітапханасын қосу

Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу
Vivado -да IP кітапханасын қосу

Синтезделген IP блогын пайдалану үшін оны Vivado -ға қосу қажет.

Vivado-да IP каталогына өтіп, «Репозиторий қосу …» түймесін тінтуірдің оң жақ түймешігімен басып, жобаңызға IP репозиторийін қосыңыз.

Vivado HLS жобасының каталогына өтіп, шешім каталогын таңдаңыз.

Ол табылған IP туралы хабарлауы керек.

8 -қадам: жаңарту

Жаңартуды жасау
Жаңартуды жасау
Жаңартуды жасау
Жаңартуды жасау
Жаңартуды жасау
Жаңартуды жасау

Кейде HLS блогына оны Vivado дизайнына енгізгеннен кейін өзгерістер енгізу қажет.

Мұны істеу үшін сіз өзгертулер енгізе аласыз, IP -ні қайта синтездеуге және экспорттауға болады, жоғары нұсқа нөмірімен (негізгі/кіші нұсқа нөмірінің өзгеруі туралы алдыңғы қадамдағы мәліметтерді қараңыз).

Жаңа нұсқаны экспорттауды өзгерткеннен кейін, Vivado -дағы IP репозиторийлерін жаңартыңыз. Мұны Vivado репозиторийде IP өзгергенін байқағанда немесе қолмен қосқанда жасауға болады. (Назар аударыңыз, егер сіз IP -репозиторийлерін іске қосқаннан кейін жаңартып отырсаңыз, бірақ экспорт HLS -те аяқталмаса, IP уақытша болмайды, оның аяқталуын күтіңіз және қайтадан жаңартыңыз.)

Бұл кезде дискіде IP өзгертілгені туралы ақпарат бар терезе пайда болуы керек және оны «Таңдалғанды жаңарту» түймесімен жаңартуға мүмкіндік береді. содан кейін бұл түймені басу ескі IP -ді автоматты түрде жаңасына ауыстырады, әйтпесе қосымша жұмыс қажет болуы мүмкін.

9 -қадам: Қосымша мәліметтер мен ақпарат

Келесі қадамдар HLS синтезі қалай жұмыс істейтіні және онымен не істеуге болатыны туралы қосымша ақпарат береді.

HLS синтезделген IP блогын қолданатын жобаның мысалы үшін мына нұсқаулықты қараңыз.

10 -қадам: Шығу және енгізу

Шығу және енгізу
Шығу және енгізу
Шығу және енгізу
Шығу және енгізу

IP -тің соңғы блогына шығулар мен кірістер синтезатордың жоғарғы функцияға кіретін және шығатын деректер ағынының талдауынан анықталады.

VHDL немесе verilog сияқты, HLS IP арасындағы байланыстар туралы мәліметтерді көрсетуге мүмкіндік береді. Бұл жолдар соның мысалы:

void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE ось порты = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE ось порты = video_out шоғыры = OUTPUT_STREAM #прагма HLS INTERFACE s_axilite порт = x bundle = CONTROL_BUS offset = HxNUMX_setset = 0x14 #

Сіз осы нұсқаулықтардың IP блогында көрсетілген порттарға қалай әсер ететінін көре аласыз.

11 -қадам: AXI тіркелу интерфейсі

AXI Register Interfacing
AXI Register Interfacing

IP блогынан PS -ге кіріс/шығыс алу үшін мұны жақсы әдіс - AXI интерфейсі.

Сіз мұны HLS кодыңызда көрсете аласыз, оның ішінде мәнге кейінірек қол жеткізу үшін пайдаланылатын ауыстырулар:

void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE s_axilite порт = x байламы = CONTROL_BUS ығысуы = 0x14

#pragma HLS INTERFACE s_axilite port = y байламы = CONTROL_BUS офсеті = 0x1C #pragma HLS деректер ағыны

x = 42;

y = 0xDEADBEEF; }

Vivado -да дұрыс қосылғаннан кейін сіз Vivado SDK -де осы кодты қолдана отырып, мәндерге қол жеткізе аласыз:

#«paramet.h» қосыңыз

#define xregoff 0x14 #define yregoff 0x1c x = Xil_In32 (XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+xregoff); y = Xil_In32 (XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+yregoff);

Осының арқасында сізде 42 x және 0xdeadbeef болады

12 -қадам: Dataflow Pragma

Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma

#Pragma DATAFLOW ішінде кодты енгізу тәсілі қалыпты C ++ - тен өзгереді. Деректердің әр түрлі бөліктерінде барлық нұсқаулықтар үнемі жұмыс істеп тұруы үшін код құбырлы болып табылады (Мұны зауыттағы конвейер желісі сияқты елестетіп көріңіз, әр станция бір функцияны орындап, оны келесі станцияға береді)

суреттен сіз директивалардың әрқайсысы екенін көре аласыз

Қалыпты айнымалы болып көрінгеніне қарамастан, img объектілері командалар арасында шағын аралықтар ретінде іске асады. Функцияны енгізу ретінде кескінді пайдалану оны «тұтынады» және оны енді қолдануға жарамсыз етеді. (Сондықтан қайталанатын командалар қажет)

Ұсынылған: