Სარჩევი:

Vivado HLS ვიდეო IP ბლოკის სინთეზი: 12 ნაბიჯი
Vivado HLS ვიდეო IP ბლოკის სინთეზი: 12 ნაბიჯი

ვიდეო: Vivado HLS ვიდეო IP ბლოკის სინთეზი: 12 ნაბიჯი

ვიდეო: Vivado HLS ვიდეო IP ბლოკის სინთეზი: 12 ნაბიჯი
ვიდეო: Creating a custom AXI-Streaming IP in Vivado 2024, ივლისი
Anonim
Vivado HLS ვიდეო IP ბლოკის სინთეზი
Vivado HLS ვიდეო IP ბლოკის სინთეზი

გსურდათ ოდესმე ვიდეოზე რეალურ დროში დამუშავება დიდი შეფერხების გარეშე ან ჩაშენებულ სისტემაში? FPGAs (საველე პროგრამირებადი კარიბჭის მასივები) ზოგჯერ გამოიყენება ამისათვის; თუმცა, ვიდეო დამუშავების ალგორითმების წერა ტექნიკის სპეციფიკაციის ენებზე, როგორიცაა VHDL ან Verilog, საუკეთესო შემთხვევაში იმედგაცრუებულია. შეიყვანეთ Vivado HLS, Xilinx ინსტრუმენტი, რომელიც საშუალებას გაძლევთ დაპროგრამდეთ C ++ გარემოში და შექმნათ აპარატურის სპეციფიკაციის ენის კოდი მისგან.

საჭირო პროგრამები:

  • Vivado HLS
  • ვივადო
  • (თუ იყენებთ AXI რეგისტრებს) Vivado SDK

(სურვილისამებრ) ჩამოტვირთეთ Xilinx– ის მაგალითები აქ:

Xilinx HLS ვიდეო მაგალითები

ნაბიჯი 1: რა არის Vivado HLS?

Vivado HLS არის ინსტრუმენტი, რომელიც გამოიყენება c ++ - ის კოდის აპარატურ სტრუქტურებად გადასაყვანად, რომელსაც შეუძლია განახორციელოს FPGA. იგი მოიცავს IDE- ს ამ განვითარებისათვის. მას შემდეგ რაც დაასრულებთ HLS კოდის შემუშავებას, შეგიძლიათ გენერირებული IP ფორმატის ექსპორტი ვივადოსთან გამოსაყენებლად.

ჩამოტვირთეთ თანდართული ფაილები და განათავსეთ ისინი იმ ადგილას, სადაც თქვენ შექმნით თქვენს პროექტს. (გადაარქვით მათ სახელები "top.cpp" და "top.h", თუ მათ აქვთ რანდომიზებული სახელი)

ნაბიჯი 2: HLS ვიდეო ბიბლიოთეკა

HLS ვიდეო ბიბლიოთეკა
HLS ვიდეო ბიბლიოთეკა
HLS ვიდეო ბიბლიოთეკა
HLS ვიდეო ბიბლიოთეკა

HLS ვიდეო ბიბლიოთეკას აქვს დოკუმენტაცია ამ ნაშრომში მითითებული დიზაინით: XAPP1167 კიდევ ერთი კარგი რესურსია Xilinx ვიკის გვერდი ამის შესახებ.

დაიწყეთ Vivado HLS.

შექმენით ახალი პროექტი.

აიღეთ წინა ეტაპზე გადმოწერილი ფაილები და დაამატეთ ისინი საწყის ფაილებად. (შენიშვნა: ფაილები არ არის კოპირებული პროექტში, არამედ რჩება იქ, სადაც არის)

შემდეგ გამოიყენეთ Browse ღილაკი ზედა ფუნქციის შესარჩევად.

შემდეგ გვერდზე შეარჩიეთ Xilinx ნაწილი, რომელსაც თქვენ იყენებთ.

ნაბიჯი 3: სინთეზირება

სინთეზირება
სინთეზირება

ამოხსნა => გაუშვით C სინთეზი => აქტიური გადაწყვეტა

227.218 წამის შემდეგ, ეს უნდა გაკეთდეს. (შენიშვნა: თქვენი ფაქტობრივი სინთეზის დრო განსხვავდება მრავალი ფაქტორიდან გამომდინარე)

ნაბიჯი 4: ვერსია და სხვა ინფორმაცია ექსპორტისთვის

ვერსია და სხვა ინფორმაცია ექსპორტისთვის
ვერსია და სხვა ინფორმაცია ექსპორტისთვის

ვერსიების ნომრები ურთიერთქმედებენ Vivado– სთან, რათა თქვენ შეძლოთ IP– ის განახლება დიზაინში. თუ ის უმნიშვნელო ვერსიის შეცვლაა, ის შეიძლება გაკეთდეს ადგილზე, ხოლო ძირითადი ვერსიის ცვლილებები მოითხოვს თქვენ ხელით დაამატოთ ახალი ბლოკი და წაშალოთ ძველი. თუ თქვენი ინტერფეისები არ შეცვლილა და ვერსიის განახლება უმნიშვნელოა, განახლება შეიძლება იყოს სრულიად ავტომატურად განახლების IP ღილაკზე დაჭერით. თქვენ შეგიძლიათ გაუშვათ "report_ip_status" Vivado tcl კონსოლში თქვენი IP სტატუსის სანახავად.

დააყენეთ ვერსიის ნომრები და სხვა ინფორმაცია Solution => Solution Settings…

გარდა ამისა, ამ პარამეტრების დაყენება შესაძლებელია ექსპორტის დროს.

ნაბიჯი 5: ექსპორტი Vivado IP ბიბლიოთეკაში

ექსპორტი Vivado IP ბიბლიოთეკაში
ექსპორტი Vivado IP ბიბლიოთეკაში
ექსპორტი Vivado IP ბიბლიოთეკაში
ექსპორტი Vivado IP ბიბლიოთეკაში

გამოსავალი => RTL ექსპორტი

თუ თქვენ არ დააყენეთ IP ბიბლიოთეკის დეტალები წინა ეტაპზე, ამის გაკეთება შეგიძლიათ ახლავე.

ნაბიჯი 6: სინთეზი და ექსპორტის ანალიზი

სინთეზი და ექსპორტის ანალიზი
სინთეზი და ექსპორტის ანალიზი
სინთეზი და ექსპორტის ანალიზი
სინთეზი და ექსპორტის ანალიზი
სინთეზი და ექსპორტის ანალიზი
სინთეზი და ექსპორტის ანალიზი

ამ ეკრანზე ჩვენ შეგვიძლია ვიხილოთ სტატისტიკა ჩვენი ექსპორტირებული მოდულის შესახებ, რომელიც აჩვენებს, რომ ის აკმაყოფილებს ჩვენს საათს 10ns (100MHz) და რამდენს იყენებს თითოეული რესურსი.

ამის კომბინაციით, ჩვენი სინთეზის ანგარიში და ჩვენი მონაცემთა ნაკადის ანალიზი, ჩვენ ვხედავთ, რომ მას სჭირდება 317338 საათის ციკლი * 10ns საათის პერიოდი * 14 მილსადენის საფეხურები = 0.04442732 წამი. რაც იმას ნიშნავს, რომ ჩვენი სურათის დამუშავებით დამატებული შეფერხება არის წამის მეოცეზე ნაკლები (როდესაც მიზანმიმართული 100 მეგაჰერც სიხშირეზეა დაფიქსირებული).

ნაბიჯი 7: IP ბიბლიოთეკის დამატება Vivado– ში

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- ის სინთეზირება და ექსპორტი უფრო მაღალი ვერსიის ნომრით (იხილეთ დეტალები წინა საფეხურზე ძირითადი/მცირე ვერსიის ნომრის ცვლილებების შესახებ).

ახალი ვერსიის ექსპორტის შეცვლის შემდეგ განაახლეთ თქვენი IP საცავი Vivado– ში. ეს შეიძლება გაკეთდეს, როდესაც Vivado შენიშნავს, რომ IP შეიცვალა საცავში, ან გააქტიურდა ხელით. (შენიშვნა, თუ თქვენ განაახლებთ თქვენს IP საცავებს დაწყების შემდეგ, მაგრამ სანამ ექსპორტი დასრულდება HLS– ში, IP დროებით არ იქნება იქ, დაელოდეთ მის დასრულებას და კვლავ განახლებას.)

ამ დროს უნდა გამოჩნდეს ფანჯარა იმ ინფორმაციით, რომ IP შეიცვალა დისკზე და გაძლევთ შესაძლებლობას განაახლოთ იგი ღილაკით "Upgrade Selected". თუ ცვლილება იყო მცირე ვერსიის ცვლილება და არცერთი ინტერფეისი არ შეცვლილა, ამ ღილაკზე დაჭერით ავტომატურად ჩაანაცვლებს ძველ IP– ს ახალს, წინააღმდეგ შემთხვევაში შეიძლება საჭირო გახდეს მეტი მუშაობა.

ნაბიჯი 9: დამატებითი დეტალები და ინფორმაცია

შემდეგი ნაბიჯები იძლევა უფრო მეტ ინფორმაციას იმის შესახებ, თუ როგორ მუშაობს HLS სინთეზი და რისი გაკეთება შეგიძლიათ მასთან.

პროექტის მაგალითისთვის, HLS სინთეზირებული IP ბლოკის გამოყენებით, იხილეთ ეს ინსტრუქციულად.

ნაბიჯი 10: გამოყვანა და შეყვანა

გამომავალი და შემავალი
გამომავალი და შემავალი
გამომავალი და შემავალი
გამომავალი და შემავალი

საბოლოო IP ბლოკში გამომავალი და შესასვლელი განისაზღვრება ანალიზის შედეგად, რომელსაც სინთეზატორი აკეთებს მონაცემთა ნაკადის და ზედა ფუნქციის გარეთ.

VHDL ან verilog– ის მსგავსად, HLS საშუალებას გაძლევთ მიუთითოთ დეტალები IP– ს შორის კავშირების შესახებ. ეს სტრიქონები ამის მაგალითებია:

ბათილი გამოსახულების_ფილტერი (AXI_STREAM და ვიდეო_ში, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE ღერძი პორტი = ვიდეო_შეკვრაში = INPUT_STREAM #pragma HLS INTERFACE ღერძი პორტი = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUFF = bX

თქვენ ხედავთ, როგორ გავლენას ახდენს IP ბლოკზე გამოსახული პორტები ამ დირექტივებზე.

ნაბიჯი 11: ინტერფეისის AXI რეგისტრაცია

AXI Register Interfacing
AXI Register Interfacing

თქვენი IP ბლოკიდან PS– მდე შეყვანის/გამოყვანის მიზნით, ამის კარგი გზაა AXI ინტერფეისის საშუალებით.

თქვენ შეგიძლიათ მიუთითოთ ეს თქვენს HLS კოდში, მათ შორის ოფსეტები, რომლებიც გამოყენებული იქნება შემდეგ მნიშვნელობაზე წვდომისათვის:

ბათილი გამოსახულების_ფილტერი (AXI_STREAM და ვიდეო_ში, 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– ში:

#მოიცავს "პარამეტრებს.ჰ"

#განსაზღვრეთ 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

მონაცემთა ნაკადის პრაგმა
მონაცემთა ნაკადის პრაგმა
მონაცემთა ნაკადის პრაგმა
მონაცემთა ნაკადის პრაგმა
მონაცემთა ნაკადის პრაგმა
მონაცემთა ნაკადის პრაგმა

#Pragma DATAFLOW- ის შიგნით კოდის განხორციელების წესი იცვლება ნორმალური C ++ - დან. კოდი მიწოდებულია ისე, რომ ყველა ინსტრუქცია მუშაობს ნებისმიერ დროს მონაცემთა სხვადასხვა ნაწილში (დაფიქრდით, როგორც ქარხნის შეკრების ხაზი, თითოეული სადგური განუწყვეტლივ ასრულებს ერთ ფუნქციას და გადასცემს მას შემდეგ სადგურს)

სურათიდან ხედავთ, რომ თითოეული დირექტივა

მიუხედავად იმისა, რომ როგორც ჩანს, ნორმალური ცვლადებია, img ობიექტები რეალურად ხორციელდება ბრძანებებს შორის მცირე ბუფერის სახით. გამოსახულების გამოყენება ფუნქციის შესასვლელად "მოიხმარს" მას და აღარ გამოდგება. (აქედან გამომდინარე, დუბლიკატი ბრძანებების საჭიროება)

გირჩევთ: