Vivado HLS

ابزار Vivado HLS محیط توسعه انحصاری Xilinx برای بکارگیری مفهوم سنتز سطح بالا در ساخت IP های شتاب دهنده سخت افزاری است. توسعه مدارت RTL با استفاده از زبان‌های C و ++C و System C انجام می‌شود.

hls-banner

پیاده سازی الگوریتم‌های پیچیده

الگوریتم‌های پیشرفته‌ای که امروزه در اپلیکیشن‌های بیسیم و صنایع پزشکی و دفاعی مورد استفاده قرار می‌گیرند، پیچیده‌تر از گذشته هستند. ابزار Vivado HLS به عنوان یک بروزرسانی کاربردی برای محیط توسعه Vivado، امکان ساخت‌ IP های سفارشی از این الگوریتم‌ها را با زبان‌های سطح بالاتر و استفاده مستقیم از آن‌ها در تراشه‌های قابل پیکره بندی FPGA را مهیا کرده است.

شبیه سازی توأمان C‌ و RTL

ارزیابی صحت عملکرد طرح RTL با استفاده از تست بنچ‌های نوشته شده به زبان C که به صورت اتوماتیک به تست بنچ‌های Verilog و VHDL‌ تبدیل می‌شوند و حداکثر سرعت در فرایند شبیه سازی RTL را به ارمغان می‌آورند. 

معرفی ابزار Vivado HLS

زمان بر بودن پروسه طراحی سخت افزار در سطح رجیستر RTL و همچنین انعطاف پذیری پایین در اصلاح یک مدار از پیش طراحی شده از چالش های بزرگی هستند که طراحان سخت افزار در FPGA همواره با آن روبرو هستند، از این رو شرکت‌های سازنده تراشه‌های قابل پیکره بندی FPGA همواره در صدد ارائه ابزاری جهت برنامه نویسی سطح بالا برای این تراشه‌ها بوده‌اند، در سال‌های اخیر شرکت Xilinx ابزار سنتز سطح بالای خود به نام Vivado HLS را ارائه داده است و همچنین تلاش های فراوانی جهت توسعه هر چه بیشتر آن انجام داده است. این ابزار می‌تواند الگوریتم‌های ارائه شده به زبان C و ++C را به مدارات RTL جهت پیاده سازی مستقیم بر روی تراشه‌های FPGA تبدیل کند.

در حقیقت HLS بعد از زبان‌های HDL که جایگزین طراحی شماتیک در سطح گیت شدند، گامی مهم دیگری در جهت کاهش پیچیدگی‌های طراحی و همچنین افزایش بهره وری است. به عبارت دیگر، سنتز سطح بالا پلی است میان سخت افزار و نرم افزار که با تمرکز زدایی از سخت افزار و به واسطه بکارگیری زبان های سطح بالا، راندمان طراحی را ارتقا می‌بخشد. در واقع HLS با ایجاد یک حالت انتزاعی، از پیچیدگی‌های سخت افزاری می‌کاهد و به طراحان نرم افزار اجازه می‌دهد بدون درگیر شدن در مفاهیم طراحی سخت افزاری، از تراشه‌های FPGA جهت شتابدهی الگوریتم‌هایی که نیاز به توان پردازشی بالا دارند، استفاده کنند.

نکته دیگری که باید به آن اشاره کرد این است که جهت پیاده سازی بهینه الگوریتم در سطح رجیستر، قبل از کد نویسی به زبان های توصیف سخت افزار مانند Verilog و VHDL ، باید تمام بهینه سازی‌های ممکن، به اشتراک گذاری منابع سخت افزاری، تاخیر و همچنین نرخ پردازش در نطر گرفته شود. بهینه سازی در HLS اما رویکردی کاملاً متفاوت دارد. در این ابزار ابتدا الگوریتم به زبان ++C/C نوشته می‌شود و صحت کارایی آن تایید می‌گردد. سپس با استفاده از دایرکتیوها (Directive) و پراگما‌ها (Pragma) ، معماری‌های مختلفی را می‌توان با تأخیر، نرخ پردازشی و منابع مصرفی متفاوت طراحی کرد و نهایتاً با ایجاد یک مصالحه بین تأخیر و نرخ پردازش مطلوب و همچنین منابع سخت افزاری قابل استفاده در تراشه، معماری مناسب را انتخاب نمود.

فلوی طراحی در Vivado-HLS

علاوه بر تسریع و سهولت در پروسه طراحی و تست، مزیت بسیار مهمی که سنتز سطح بالا نسبت به طراحی در سطح رجیستر دارد، انعطاف پذیری بسیار بالا در بهینه سازی و تغییر ساختار معماری یک طرح می باشد. چنانچه خواسته‌های یک طرح همانند نرخ پردازش اطلاعات ورودی و خروجی تغییر یابد، در HLS با اعمال فرامین کنترلی پراگما و تنها با کنترل کامپایلر بدون احتمالاً حتی یک خط تغییر در کد ++C/C در زمان کوتاهی می‌توان به خواسته مطلوب دست یافت. اما در طراحی سطح رجیستر، نیاز به باز طراحی معماری طرح می‌باشد که  این امر پروسه زمان بری است.

ابزار Vivado HLS به عنوان یک بروزرسانی برای محیط توسعه Vivado HLx ارائه شده است. این ابزار با هدف افزایش سرعت پیاده‌سازی IP ها ، بلوک‌های شتاب دهنده و الگوریتم‌های پردازشی در FPGA با استفاده از C و ++C و System C عرضه شده است. برخی از مهمترین ویژگی‌های این ابزار به شرح زیر است.

  • سنتز هوشمند کدهای C با توجه به معماری‌های مختلف تراشه‌های FPGA
  • تسریع فرایند شبیه‌سازی RTL با تبدیل اتوماتیک تست بنچ‌های C
  • پشتیبانی از اینترفیس‌های استاندارد صنعتی همچون AXI4 و AXI4-Stream
  • پشتیبانی از کتابخانه‌های arbitrary precision برای تعریف دیتا تایپ‌های کاملاً سفارشی
  • پشتیبانی از دیتا تایپ‌های ممیز ثابت و ممیز شناور
  • پشتیبانی از زبان‌های C و ++C و System C
  • پشتیبانی از حافظه‌های بلوکی block RAM، بلوک‌های ضرب کننده DSP و سایر عناصر طراحی

بر اساس آخرین بروز رسانی سایت Xilinx لیست کتابخانه‌های عرضه شده همراه با Vivado HLS به شرح زیر است.

  • کتابخانه‌های تایپ‌های سفارشی و محاسبات ممیز ثابت (Arbitrary Precision Data Type)
  • کتابخانه پردازش داده‌ها به صورت استریم (HLS Stream)
  • کتابخانه‌های توابع ریاضی (HLS Math)
  • کتابخانه‌های پردازش تصویر (HLS Video)
  • کتابخانه‌های هسته‌های نرم افزاری آماده (HLS IP)
  • کتابخانه‌های توابع جبری و ماتریسی (HLS Linear Algebra)
  • کتابخانه‌های پردازش سیگنال دیجیتال (HLS DSP)
نام کتابخانه توضیحات تکمیلی
Arbitrary Precision Data Types Integer and fixed-point (ap_cint.h, ap_int.h and systemc.h) 
HLS Stream Models for streaming data structures.  Designed to obtain best performance and area (hls_stream.h)
HLS Math Extensive support for the synthesis of the standard C (math.h) and C++ (cmath.h) math libraries.  The support includes floating point and fixed-point functions: abs, atan, atanf, atan2, atan2, ceil, ceilf, copysign, copysignf, cos, cosf, coshf, expf, fabs, fabsf, floorf, fmax, fmin, logf, fpclassify, isfinite, isinf, isnan, isnormal, log, log10, modf, modff, recip, recipf, round, rsqrt, rsqrtf, 1/sqrt, signbit, sin, sincos, sincosf, sinf, sinhf, sqrt, tan, tanf, trunc
HLS Video Video library to implement several aspects of modeling video design in C++ with video Functions, specific data types, memory line buffer and memory window (hls_video.h). Vivado HLS is also compatible with existing OpenCV functions which can be found on Github (https://github.com/Xilinx/xfopencv): xf_accumulate_image, xf_accumulate_squared, xf_accumulate_weighted, xf_add_weighted, xf_averagegaussianmask, xf_bilateral_filter, xf_box_filter, xf_canny, xf_canny_sobel, xf_canny_utils, xf_channel_combine, xf_channel_extract, xf_colorthresholding, xf_convert_bitdepth, xf_corner_img_to_list, xf_corner_update, xf_custom_convolution, xf_cvt_color, xf_cvt_color_1, xf_cvt_color_utils, xf_delay, xf_demosaicing, xf_dense_npyr_optical_flow, xf_dilation, xf_duplicateimage, xf_edge_tracing, xf_erosion, xf_gaussian_filter, xf_gaussian_filter_block_utils, xf_gaussian_filter_lut, xf_gaussian_filter_utils, xf_hist_equalize, xf_histogram, xf_hog_descriptor, xf_hog_descriptor_compute_hist, xf_hog_descriptor_gradients, xf_hog_descriptor_hist_norm, xf_hog_descriptor_kernel, xf_hog_descriptor_norm, xf_hog_descriptor_pm, xf_hog_descriptor_utility, xf_houghlines, xf_inrange, xf_integral_image, xf_kalmanfilter, xf_lut, xf_magnitude, xf_mean_shift, xf_mean_shift_kernel, xf_median_blur, xf_optical_flow_pyr_down_gaussian_blur, xf_optical_flow_pyr_down_kernel, xf_otsuthreshold, xf_paintmask, xf_pyr_dense_optical_flow, xf_pyr_dense_optical_flow_find_gradients, xf_pyr_dense_optical_flow_median_blur, xf_pyr_dense_optical_flow_oflow_process, xf_pyr_dense_optical_flow_scale, xf_pyr_dense_optical_flow_wrapper, xf_pyr_down, xf_pyr_down_gaussian_blur, xf_pyr_up, xf_pyr_up_gaussian_blur, xf_reduce, xf_remap, xf_resize, xf_resize_down_area, xf_resize_down_bilinear, xf_resize_down_nn, xf_resize_nn_bilinear, xf_resize_up_area, xf_resize_up_bilinear, xf_resize_up_nn, xf_rgb2hsv, xf_scale, xf_scharr, xf_sgbm, xf_sobel, xf_stereoBM, xf_stereo_pipeline, xf_sum, xf_svm, xf_threshold, xf_warp_transform, xf_warpaffine, xf_warpperspective
HLS IP C-based super-sample-rate FFT with hls_ssr_lib.h, Integrate the LogiCORE IP FFT and FIR Compiler (hls_fft.h, hls_fir.h, ap_shift_reg.h)
HLS Linear Algebra Support for the following functions: cholesky, cholesky_inverse, matrix_multiply, qrf, qr_inverse, svd (hls_linear_algebra.h)
HLS DSP Support for the following functions: atan2, awgn, cmpy, convolution_encoder, nco,  qam_demod, qam_mod, sqrt, viterbi_decoder (hls_dsp.h)

با نگاه به شکل زیر به راحتی می‌توانید چیدمان هرم توسعه محصول در HLS را با HDL مقایسه کنید. این هرم کاملاً وارونه است و بعد از طراحی HLS IP فرایند تجمیع و تست به شکل خیره‌ کننده‌ای سریع‌تر است.

افزایش سرعت ارزیابی با Vivado-HLS

از کجا شروع کنم

مقالات آموزشی

مطالب آموزشی به شکل دسته بندی شده توسط تیم هگزالینکس تألیف و گردآوری شده‌اند. از مقدماتی تا پیشرفته تقریباً همه نیازها پوشش داده شده است.

دانشنامه فارسی

گذاره‌های مهم، مفاهیم کلیدی و کاربردی، همگی در قالب دانشنامه منتشر شده است. کلید واژه خودتان را جستجو کنید و پاسخ خود را دریافت کنید.

پروژه‌های کاربردی

مجموعه‌ای از پروژه‌های کاربردی در اختیار شماست. به عنوان یک نقطه شروع برای انجام طراحی‌های سفارشی خودتان استفاده کنید.

ویدئوهای آموزشی

ویدئوهی آموزشی به صورت انحصاری توسط تیم هگزالینکس تألیف یا ترجمه شده‌اند. فقط روی موضوع مورد علاقه خودتان تمرکز کنید.

کتاب‌های انگلیسی

برای دانلود و دسترسی به بهترین کتاب‌های آموزشی کافی است سری به کتابخانه هگزالینکس بزنید، تنها با چند کلیک می‌توانید آن‌ها را دانلود کنید.

دانلود نرم افزار

ابزارهای طراحی و شبیه سازی را دانلود کنید و به راحتی عملکرد مدار خودتان را بررسی کنید. برای استفاده از این ابزارها، آموزش‌های هگزالینکس را دنبال کنید.

دوره‌های آنلاین

آینده خود را طراحی کنید، این یک سرمایه گذاری بلند مدت است

سوألات متداول

ابزار Vivado HLS یک بروزرسانی برای محیط توسعه یکپارجه Vivado HLx است و طراحی در آن با زبان‌های سطح بالاتر C و ++C و System C انجام می‌شود. در حالی که برای طراحی در Vivado HLx نیاز به استفاده از زبان‌های توصیف سخت افزار Verilog و VHDL و یا IP Core های آماده Xilinx داریم. ابزار Vivado HLS‌ در بسته نصبی Vivado HLx قرار دارد و همراه با آن دانلود و نصب می‌شود.

بر اساس مستندات Xilinx در اولین نسخه‌های Vivado HLS این ابزار از کلیه تراشه‌های قدیمی همچون Spartan-6 و حتی تراشه‌های قدیمی‌تر مثل Virtex-4 و Virtex-5 پشتیبانی می‌کرد. در واقع این اتخاب به پیاده ساز داده شده بود تا برحسب نیاز، IP نهایی طراحی شده در Vivado HLS را به صورت یک PCore برای استفاده در محیط توسعه ISE تنها با چند کلیک export کند. اما این قابلیت خیلی زود کنار گذاشته شد و در نسخه‌های اخیر (از سال ۲۰۱۵) به بعد تراشه‌های قدیمی Xilinx همچون Spartan-6 و کلیه سری‌های قدیمی‌تر  از سری ۷ پشتیبانی نمی‌شوند. پشتیبانی از تراشه‌ها در Vivado HLS کاملاً منطبق بر تراشه‌های پشتیبانی شده در محیط توسعه Vivado HLx است.

این متن از سایت Xilinx کپی شده و بیانگر همین موضوع است.

Note that the Vivado HLS 2015.4 release was also the last Vivado HLS release to support ISE specific devices.

بله، تراشه‌های ZYNQ‌ از دو بخش PS و PL تشکیل شده‌اند، که بخش PL آن دقیقاً یک FPGA‌ است. یکی از مهمترین کاربردهای مفهوم سنتز سطح بالا، تسریع فرایند پیاده سازی IP های شتاب دهنده است. این IP ها در کنار یک پردازنده سخت افزاری همچون ARM در تراشه‌های ZYNQ قرار می‌گیرند و با موازی سازی الگوریتم‌های پیچیده و بزرگ مسیر توسعه را هموار می‌کنند.

پاسخ به این سوأل با یک بله / خیر ساده امکان پذیر نیست. مواردی فراوانی وجود دارد که افراد با دانش مقدماتی در رابطه با زبان‌های HDL از HLS برای پیاده سازی استفاده کرده‌اند. اما اگر به سایت Xilinx مراجعه کنید، به سادگی می‌بینید که Vivado HLS ابزار طراحی مهندسان سخت افزار است. یعنی شما باید به ماهیت و ویژگی‌های منحصر به فرد FPGA آشنا باشید و بعد از HLS استفاده کنید. تسلط به FPGA و معماری آن هم نیاز به تجربه برنامه نویسی سطح پایین با زبان‌های توصیف سخت افزار HDL دارد. پس می‌توان نتیجه گرفت، اگرچه یادگیری HLS بدون HDL امکان پذیر است اما آشنایی با HDL به عنوان یک قانون نانوشته برای دستیابی به نتایج قابل قبول در طراحی ضروری است.  

هر دوی این زبان‌ها به صورت کامل در Vivado HLS پشتیبانی می‌شوند و Xilinx توصیه خاصی در این رابطه ندارد. اکثر کتابخانه‌های مهم همچون HLS arbitrary precision و HLS math درهر دو زبان پشتیبانی می‌شود. اما یکسری از کلاس‌های اختصاصی همچون کلاس <>HLS Stream تنها در ++C‌ پشتیبانی می‌شوند. از این رو پیشنها می‌شود، حتی اگر به ++C مسلط هم نیستند فایل‌های خودتان را با پسوند cpp ذخیره کنید تا امکان استفاده از این کلاس‌ها برای شما وجود داشته باشد. زبان ++C کاملا با C سازگار است و شما می‌توانید کدهای خودتون را درون فایل cpp بنویسید.

در Vivado HLS برای بهینه سازی و کنترل استراتژی پیاده سازی از یک سری فرامین کنترلی تحت عنوان دایرکتیو استفاده می‌شود. این دایرکتیوها فرامین TCL هستند که به صورت جداگانه در کنار فایل‌های قابل سنتز C و ++C قرار می‌گیرند. امکان استفاده از این فرامین به صورت یکپارجه درون فایل‌های پیاده ‌سازی C و ++C به صورت پراگما (Pragma) وجود دارد. یکپارچه شدن پراگماها درون کد C مزایا و معایب خودش را دارد. یکی از مزایای آن درک بهتر معماری و بهینه سازی‌ های اعمال شده روی کد است. استفاده از پراگماها در عین حال باعث سفارشی شدن بیش از حد کد و عدم امکان استفاده مجدد از آن برای پروژه‌های دیگر که به معماری و بهینه سازی‌ های متفاوت نیاز دارند، می‌شود. 

شاید بهترین کاربرد HLS ، طراحی شتاب دهنده هنگام استفاده ترکیبی از پردازنده CPU‌ و آرایه‌های منطقی FPGA در کنار هم باشد (تراشه‌های ZYNQ). بسیاری از کاربردهایی که نیاز به کارایی بسیار بالا دارند هنوز هم با HDL طراحی می‌شوند، چون کنترل دقیق تأخیر و زمان بندی در سیستم‌های حساس، در HLS بسیار سخت است. اگر موضوع مورد نظر شما برای پیاده سازی مسیرهای کنترلی متعدد دارد و ورودی / خروجی‌های سیستم غالباً از نوع بیت هستند، استفاده از HLS کار هوشمندانه‌ای نیست و بهتر است از HDL استفاده کنید. در نقطه مقابل اگر قصد پیاده‌ سازی اگوریتم‌های پردازش سیگنال همچون فیلترها، تخمین‌گرها، پردازش ویدئو و … را دارید، بدون شک HLS یک گزینه مناسب برای شماست. علاوه براین HLS می‌تواند برای نمونه سازی سریع و مدل کردن سخت افزاری الگوریتم‌ها در مراحل آغازین طراحی بسار مناسب باشد.

بله. برای این کار کافی است از کتابخانه‌های arbitrary precision و دیتا تایپ‌های مخصوص ممیز ثابت کنید. پیش شروع کار به دقت مستندات Xilinx‌ را مطالعه بفرمایید تا با قابلیت‌ها و محدودیت‌های آن آشنا شوید.

ابزار Vivado HLS از OpenCV و کتابخانه‌های HLS Video برای کار با الگوریتم‌های پردازش تصویر و ویدئو پشتیبانی می‌کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا