فهرست مطالب:

Vivado HLS Video IP Block Synthesis: 12 مرحله
Vivado HLS Video IP Block Synthesis: 12 مرحله

تصویری: Vivado HLS Video IP Block Synthesis: 12 مرحله

تصویری: Vivado HLS Video IP Block Synthesis: 12 مرحله
تصویری: Neural Acceleration for General-Purpose Approximate Programs 2024, جولای
Anonim
سنتز بلوک IP Vivado HLS
سنتز بلوک IP Vivado HLS

آیا تا به حال خواسته اید بدون افزودن تأخیر زیاد یا در یک سیستم جاسازی شده ، ویدئو را در زمان واقعی پردازش کنید؟ گاهی اوقات از FPGA (آرایه های دروازه ای قابل برنامه ریزی) برای این کار استفاده می شود. با این حال ، نوشتن الگوریتم های پردازش ویدیو در زبان های سخت افزاری مانند VHDL یا Verilog در بهترین حالت ناامید کننده است. Vivado HLS را وارد کنید ، ابزار Xilinx که به شما امکان می دهد در محیط C ++ برنامه نویسی کرده و کد زبان سخت افزار را از آن ایجاد کنید.

نرم افزارهای مورد نیاز:

  • Vivado HLS
  • ویوادو
  • (اگر از رجیسترهای AXI استفاده می کنید) Vivado SDK

(اختیاری) نمونه های ساخته شده از Xilinx را در اینجا بارگیری کنید:

نمونه های ویدیویی Xilinx HLS

مرحله 1: Vivado HLS چیست؟

Vivado HLS ابزاری است که برای تبدیل کد شبیه c ++ به ساختارهای سخت افزاری قابل اجرا بر روی FPGA استفاده می شود. این برنامه شامل IDE برای انجام این توسعه می باشد. پس از تکمیل توسعه کد برای HLS ، می توانید IP تولید شده خود را در قالب صادر کنید برای استفاده با Vivado

فایلهای پیوست را بارگیری کرده و آنها را در جایی که پروژه خود را ایجاد می کنید قرار دهید. (اگر نام تصادفی دارند آنها را به "top.cpp" و "top.h" تغییر دهید)

مرحله 2: کتابخانه ویدیویی HLS

کتابخانه ویدیویی HLS
کتابخانه ویدیویی HLS
کتابخانه ویدیویی HLS
کتابخانه ویدیویی HLS

کتابخانه ویدیویی HLS دارای اسناد و مدارک با طرحهای مرجع در این مقاله است: XAPP1167 یکی دیگر از منابع خوب صفحه Xilinx Wiki در مورد آن است.

Vivado HLS را راه اندازی کنید.

ایجاد یک پروژه جدید

فایلهایی را که در مرحله قبل بارگیری کرده اید بردارید و آنها را به عنوان فایل منبع اضافه کنید. (توجه: فایل ها در پروژه کپی نمی شوند ، اما در عوض در همان جایی که هستند باقی می مانند)

سپس از دکمه Browse برای انتخاب عملکرد بالا استفاده کنید.

در صفحه بعد ، قسمت Xilinx را که استفاده می کنید انتخاب کنید.

مرحله 3: سنتز

سنتز کردن
سنتز کردن

راه حل => اجرای C Synthesis => راه حل فعال

پس از 227.218 ثانیه ، باید انجام شود. (توجه: زمان واقعی سنتز شما بر اساس عوامل زیادی متفاوت خواهد بود)

مرحله 4: نسخه بندی و سایر اطلاعات برای صادرات

نسخه بندی و سایر اطلاعات برای صادرات
نسخه بندی و سایر اطلاعات برای صادرات

شماره های نسخه با Vivado ارتباط برقرار می کنند تا بتوانید IP را در طراحی به روز کنید. اگر یک تغییر جزئی باشد ، می توان آن را در محل انجام داد در حالی که تغییرات عمده نسخه شما را ملزم می کند که بلوک جدید را به صورت دستی اضافه کرده و بلوک قدیمی را حذف کنید. اگر رابط های شما تغییر نکرده اند و به روز رسانی نسخه جزئی است ، به روز رسانی می تواند به طور خودکار با فشار دادن دکمه IP به روز رسانی انجام می شود. برای مشاهده وضعیت IP خود می توانید "report_ip_status" را در کنسول Vivado tcl اجرا کنید.

شماره نسخه و سایر اطلاعات را در Solution => Solution Settings تنظیم کنید…

متناوبا ، این تنظیمات را می توان در حین صادرات تنظیم کرد.

مرحله 5: صادرات به کتابخانه IP Vivado

صادرات به کتابخانه IP Vivado
صادرات به کتابخانه IP Vivado
صادرات به کتابخانه IP Vivado
صادرات به کتابخانه IP Vivado

راه حل => صادرات RTL

اگر جزئیات کتابخانه IP را در مرحله قبل تنظیم نکرده اید ، اکنون می توانید این کار را انجام دهید.

مرحله 6: سنتز و تجزیه و تحلیل صادرات

سنتز و تجزیه و تحلیل صادرات
سنتز و تجزیه و تحلیل صادرات
سنتز و تجزیه و تحلیل صادرات
سنتز و تجزیه و تحلیل صادرات
سنتز و تجزیه و تحلیل صادرات
سنتز و تجزیه و تحلیل صادرات

در این صفحه می توان آمار مربوط به ماژول صادر شده خود را مشاهده کرد که نشان می دهد با ساعت 10 نانوس (100 مگاهرتز) و میزان استفاده از هر منبع مطابقت دارد.

با ترکیبی از این ، گزارش تجزیه و تحلیل جریان داده و داده های ما ، می توانیم ببینیم که 317338 چرخه ساعت * مدت زمان 10ns * 14 مرحله خط لوله = 0.04442732 ثانیه طول می کشد. به این معنی که کل تأخیر اضافه شده توسط پردازش تصویر ما کمتر از یک بیستم ثانیه است (هنگامی که در 100 مگاهرتز مورد نظر تعیین می شود).

مرحله 7: افزودن کتابخانه IP در Vivado

افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado
افزودن کتابخانه IP در Vivado

برای استفاده از بلوک IP سنتز شده خود ، باید آن را به Vivado اضافه کنید.

در Vivado با رفتن به کاتالوگ IP یک مخزن IP به پروژه خود اضافه کنید و روی "افزودن مخزن …" راست کلیک کنید.

به فهرست پروژه Vivado HLS خود بروید و فهرست راه حل خود را انتخاب کنید.

باید IP ای را که پیدا کرده گزارش کند.

مرحله 8: انجام ارتقاء

انجام ارتقاء
انجام ارتقاء
انجام ارتقاء
انجام ارتقاء
انجام ارتقاء
انجام ارتقاء

گاهی اوقات لازم است بلاک HLS خود را پس از گنجاندن آن در طرح Vivado تغییر دهید.

برای انجام این کار ، می توانید تغییرات را اعمال کرده و IP را مجدداً سنتز کرده و با شماره نسخه بالاتر صادر کنید (در مورد تغییرات عمده و جزئی نسخه اصلی جزئیات را در مرحله قبل ببینید).

پس از تغییر صادرات نسخه جدید ، مخازن IP خود را در Vivado تازه کنید. این کار را می توان زمانی انجام داد که Vivado متوجه شد که IP در مخزن تغییر کرده است یا به صورت دستی فعال شده است. (توجه داشته باشید ، اگر مخازن IP خود را پس از شروع به روز کنید ، اما قبل از اتمام صادرات در HLS ، IP به طور موقت وجود نخواهد داشت ، منتظر بمانید تا به پایان برسد و دوباره بازخوانی شود.)

در این مرحله یک پنجره با اطلاعاتی که IP روی دیسک تغییر کرده است ظاهر می شود و به شما این امکان را می دهد که آن را با دکمه "Upgrade Selected" به روز کنید. اگر تغییر یک تغییر جزئی بوده و هیچ یک از رابط ها تغییر نکرده است ، سپس با فشار دادن آن دکمه به طور خودکار IP قبلی با IP جدید جایگزین می شود ، در غیر این صورت ممکن است به کار بیشتری نیاز باشد.

مرحله 9: جزئیات و اطلاعات بیشتر

مراحل زیر اطلاعات بیشتری در مورد نحوه عملکرد سنتز HLS و کارهایی که می توانید با آن انجام دهید ارائه می دهد.

برای نمونه پروژه ای که از بلوک IP سنتز شده HLS استفاده می کند ، این مورد قابل مشاهده را ببینید.

مرحله 10: خروجی و ورودی

خروجی و ورودی
خروجی و ورودی
خروجی و ورودی
خروجی و ورودی

خروجی ها و ورودی ها به بلوک IP نهایی از تجزیه و تحلیل سنتز کننده جریان داده ها به داخل و خارج از عملکرد بالا تعیین می شود.

مشابه VHDL یا verilog ، HLS به شما امکان می دهد جزئیات مربوط به اتصالات بین IP را مشخص کنید. این سطرها نمونه هایی از این موارد هستند:

فیلتر تصویری باطل (AXI_STREAM & video_in ، AXI_STREAM & video_out ، int & x ، int & y) {

#pragma HLS INTERFACE port port = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE port port = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = bundle = CONTROL_BLUSB_FUS = 0

می توانید ببینید که چگونه پورت های نمایش داده شده در بلوک IP تحت تأثیر این دستورالعمل ها قرار می گیرند.

مرحله 11: رابط AXI را ثبت کنید

AXI Register Interfacing
AXI Register Interfacing

برای دریافت ورودی/خروجی به/از بلوک IP خود به PS راه خوبی برای این کار از طریق رابط AXI است.

می توانید این را در کد HLS خود مشخص کنید ، از جمله offsets هایی که بعداً برای دسترسی به مقدار استفاده می شود:

فیلتر تصویری باطل (AXI_STREAM & video_in ، AXI_STREAM & video_out ، int & x ، int & y) {

#pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14

#pragma HLS INTERFACE s_axilite port = y bundle = CONTROL_BUS offset = 0x1C #pragma HLS dataflow

x = 42 ؛

y = 0xDEADBEEF ؛ }

پس از اتصال صحیح در Vivado ، می توانید با استفاده از این کد در Vivado SDK به مقادیر دسترسی پیدا کنید:

#شامل "paramet.h"

#xregoff 0x14 #تعریف 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 در y به دست می آورید

مرحله 12: Dataflow Pragma

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

در داخل #pragma DATAFLOW نحوه اجرای کد از C ++ معمولی تغییر می کند. کد به گونه ای خط لوله شده است که همه دستورالعمل ها در هر زمان در قسمت های مختلف داده اجرا می شوند (مانند خط مونتاژ در کارخانه فکر کنید ، هر ایستگاه به طور مداوم در حال انجام یک عملکرد است و آن را به ایستگاه بعدی منتقل می کند)

از تصویر می توانید ببینید که هر یک از دستورالعمل ها

با وجود اینکه متغیرهای معمولی به نظر می رسند ، اما اشیاء img در واقع به عنوان بافرهای کوچک بین دستورات پیاده سازی می شوند. استفاده از یک تصویر به عنوان ورودی یک تابع آن را "مصرف" می کند و دیگر قابل استفاده نیست. (بنابراین نیاز به دستورات تکراری است)

توصیه شده: