สารบัญ:
- ขั้นตอนที่ 1: Vivado HLS คืออะไร?
- ขั้นตอนที่ 2: ไลบรารีวิดีโอ HLS
- ขั้นตอนที่ 3: การสังเคราะห์
- ขั้นตอนที่ 4: การกำหนดเวอร์ชันและข้อมูลอื่นๆ สำหรับการส่งออก
- ขั้นตอนที่ 5: การส่งออกไปยัง Vivado IP Library
- ขั้นตอนที่ 6: การวิเคราะห์การสังเคราะห์และการส่งออก
- ขั้นตอนที่ 7: การเพิ่ม IP Library ใน Vivado
- ขั้นตอนที่ 8: ทำการอัปเกรด
- ขั้นตอนที่ 9: รายละเอียดและข้อมูลเพิ่มเติม
- ขั้นตอนที่ 10: เอาต์พุตและอินพุต
- ขั้นตอนที่ 11: AXI ลงทะเบียนการเชื่อมต่อ
- ขั้นตอนที่ 12: Dataflow Pragma
วีดีโอ: Vivado HLS Video IP Block Synthesis: 12 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
คุณเคยต้องการที่จะประมวลผลวิดีโอตามเวลาจริงโดยไม่ต้องเพิ่มเวลาแฝงหรือในระบบฝังตัวหรือไม่? บางครั้งใช้ FPGA (Field Programmable Gate Arrays) อย่างไรก็ตาม การเขียนอัลกอริธึมการประมวลผลวิดีโอในภาษาข้อกำหนดฮาร์ดแวร์ เช่น 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 มีเอกสารประกอบพร้อมการออกแบบอ้างอิงในเอกสารนี้:XAPP1167แหล่งข้อมูลที่ดีอีกประการหนึ่งคือหน้า Xilinx Wiki เกี่ยวกับเรื่องนี้
เริ่มใช้งาน Vivado HLS
สร้างโครงการใหม่
นำไฟล์ที่คุณดาวน์โหลดมาในขั้นตอนก่อนหน้าและเพิ่มเป็นไฟล์ต้นฉบับ (หมายเหตุ: ไฟล์จะไม่ถูกคัดลอกลงในโปรเจ็กต์ แต่จะยังคงอยู่ที่เดิม)
จากนั้นใช้ปุ่มเรียกดูเพื่อเลือกฟังก์ชั่นด้านบน
ในหน้าถัดไป เลือกส่วน Xilinx ที่คุณกำลังใช้
ขั้นตอนที่ 3: การสังเคราะห์
Solution => Run C Synthesis => Active Solution
หลังจาก ~ 227.218 วินาที ก็ควรจะเสร็จสิ้น (หมายเหตุ: เวลาสังเคราะห์จริงของคุณจะแตกต่างกันไปตามปัจจัยหลายประการ)
ขั้นตอนที่ 4: การกำหนดเวอร์ชันและข้อมูลอื่นๆ สำหรับการส่งออก
หมายเลขเวอร์ชันโต้ตอบกับ Vivado เพื่อให้คุณสามารถอัปเดต IP ในการออกแบบได้ หากเป็นเวอร์ชันรอง การเปลี่ยนแปลงสามารถทำได้ในขณะที่การเปลี่ยนแปลงเวอร์ชันหลักจำเป็นต้องเพิ่มบล็อกใหม่และลบบล็อกเก่าด้วยตนเอง หากอินเทอร์เฟซของคุณไม่เปลี่ยนแปลงและการอัปเดตเวอร์ชันเป็นเวอร์ชันรอง การอัปเดตอาจเป็นได้ ทำโดยอัตโนมัติอย่างสมบูรณ์โดยกดปุ่มอัปเดต IP คุณสามารถเรียกใช้ "report_ip_status" ในคอนโซล Vivado tcl เพื่อดูสถานะของ IP ของคุณ
ตั้งค่าหมายเลขเวอร์ชันและข้อมูลอื่นๆ ใน Solution => Solution Settings…
หรือสามารถตั้งค่าเหล่านี้ได้ในระหว่างการส่งออก
ขั้นตอนที่ 5: การส่งออกไปยัง Vivado IP Library
โซลูชัน => ส่งออก RTL
หากคุณไม่ได้ตั้งค่ารายละเอียดไลบรารี IP ในขั้นตอนก่อนหน้า คุณสามารถทำได้ในตอนนี้
ขั้นตอนที่ 6: การวิเคราะห์การสังเคราะห์และการส่งออก
ในหน้าจอนี้ เราจะเห็นสถิติเกี่ยวกับโมดูลที่ส่งออกของเรา ซึ่งแสดงให้เห็นว่าโมดูลนั้นตรงตามช่วงเวลานาฬิกาของเราที่ 10ns (100MHz) และใช้ทรัพยากรแต่ละรายการมากน้อยเพียงใด
ด้วยการรวมกันของสิ่งนี้ รายงานการสังเคราะห์ และการวิเคราะห์กระแสข้อมูลของเรา เราจะเห็นว่าใช้เวลา 317338 รอบนาฬิกา * ระยะเวลานาฬิกา 10ns * 14 ขั้นตอนไปป์ไลน์ = 0.04442732 วินาที หมายความว่าเวลาแฝงทั้งหมดที่เพิ่มโดยการประมวลผลภาพของเรานั้นน้อยกว่าหนึ่งในยี่สิบวินาที (เมื่อโอเวอร์คล็อกที่ 100MHz เป้าหมาย)
ขั้นตอนที่ 7: การเพิ่ม IP Library ใน Vivado
หากต้องการใช้บล็อก IP ที่สังเคราะห์ คุณจะต้องเพิ่มลงใน Vivado
ใน Vivado ให้เพิ่มที่เก็บ IP ให้กับโปรเจ็กต์ของคุณโดยไปที่แค็ตตาล็อก IP แล้วคลิกขวาเลือก "Add Repository…"
ไปที่ไดเร็กทอรีโครงการ Vivado HLS และเลือกไดเร็กทอรีโซลูชันของคุณ
ควรรายงาน IP ที่พบ
ขั้นตอนที่ 8: ทำการอัปเกรด
บางครั้งคุณจำเป็นต้องทำการเปลี่ยนแปลงบล็อก HLS หลังจากรวมไว้ในการออกแบบ Vivado
ในการดำเนินการนี้ คุณสามารถทำการเปลี่ยนแปลงและสังเคราะห์อีกครั้ง และส่งออก IP ด้วยหมายเลขเวอร์ชันที่สูงกว่า (ดูรายละเอียดในขั้นตอนก่อนหน้าเกี่ยวกับการเปลี่ยนแปลงหมายเลขเวอร์ชันหลัก/รอง)
หลังจากเปลี่ยนการส่งออกเวอร์ชันใหม่แล้ว ให้รีเฟรชที่เก็บ IP ของคุณใน Vivado สิ่งนี้สามารถทำได้เมื่อ Vivado สังเกตเห็นว่า IP มีการเปลี่ยนแปลงในที่เก็บ หรือเปิดใช้งานด้วยตนเอง (โปรดทราบว่า หากคุณรีเฟรชที่เก็บ IP ของคุณหลังจากเริ่มต้น แต่ก่อนที่การส่งออกจะเสร็จสิ้นใน HLS IP จะไม่อยู่ที่นั่นชั่วคราว รอให้เสร็จสิ้นและรีเฟรชอีกครั้ง)
ณ จุดนี้ หน้าต่างควรปรากฏขึ้นพร้อมข้อมูลที่มีการเปลี่ยนแปลง IP บนดิสก์ และให้ตัวเลือกแก่คุณในการอัปเดตด้วยปุ่ม "อัปเกรดที่เลือก" หากการเปลี่ยนแปลงเป็นการเปลี่ยนแปลงเวอร์ชันเล็กน้อยและไม่มีอินเทอร์เฟซใดเปลี่ยนแปลง จากนั้นการกดปุ่มนั้นจะแทนที่ IP เก่าด้วย IP ใหม่โดยอัตโนมัติ มิฉะนั้นอาจต้องทำงานมากกว่านี้
ขั้นตอนที่ 9: รายละเอียดและข้อมูลเพิ่มเติม
ขั้นตอนต่อไปนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของการสังเคราะห์ HLS และสิ่งที่คุณทำได้
สำหรับตัวอย่างของโครงการที่ใช้บล็อก IP สังเคราะห์ HLS ดูคำแนะนำนี้
ขั้นตอนที่ 10: เอาต์พุตและอินพุต
เอาต์พุตและอินพุตไปยังบล็อก IP สุดท้ายถูกกำหนดจากการวิเคราะห์ที่ซินธิไซเซอร์ทำการไหลของข้อมูลเข้าและออกจากฟังก์ชันด้านบน
คล้ายกับใน VHDL หรือ verilog HLS ช่วยให้คุณระบุรายละเอียดเกี่ยวกับการเชื่อมต่อระหว่าง IP บรรทัดเหล่านี้เป็นตัวอย่างของสิ่งนี้:
โมฆะ image_filter (AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {
#pragma HLS INTERFACE axis port=video_in bundle=INPUT_STREAM #pragma HLS INTERFACE axis port=video_out bundle=OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port=x bundle=CONTROL_BUS offset=0x14#pragma HLS INTERFACE sy_= xilite พอร์ต
คุณสามารถดูว่าพอร์ตที่แสดงบนบล็อก IP ได้รับอิทธิพลจากคำสั่งเหล่านี้อย่างไร
ขั้นตอนที่ 11: AXI ลงทะเบียนการเชื่อมต่อ
ในการรับอินพุต/เอาต์พุตไปยัง/จากบล็อก IP ของคุณไปยัง PS วิธีที่ดีในการทำเช่นนี้คือผ่านอินเทอร์เฟซ AXI
คุณสามารถระบุสิ่งนี้ในรหัส HLS ของคุณ รวมถึงออฟเซ็ตที่จะใช้ในการเข้าถึงค่าในภายหลังดังนี้:
โมฆะ 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 bundle=CONTROL_BUS offset=0x1C #pragma HLS dataflow
x = 42;
y = 0xDEADBEEF; }
เมื่อเชื่อมต่ออย่างถูกต้องใน Vivado คุณจะสามารถเข้าถึงค่าต่างๆ ได้โดยใช้รหัสนี้ใน Vivado SDK:
#include "parameters.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 ใน y
ขั้นตอนที่ 12: Dataflow Pragma
ภายใน #pragma DATAFLOW วิธีการใช้งานโค้ดเปลี่ยนแปลงจาก C ++ ปกติ โค้ดจะถูกส่งต่อเพื่อให้คำสั่งทั้งหมดทำงานตลอดเวลาในส่วนต่างๆ ของข้อมูล (ให้คิดว่าเป็นสายการประกอบในโรงงาน แต่ละสถานีทำงานอย่างต่อเนื่องโดยทำหน้าที่เดียวและส่งไปยังสถานีถัดไป)
จากภาพจะเห็นได้ว่าแต่ละคำสั่ง
แม้จะดูเหมือนเป็นตัวแปรปกติ แต่วัตถุ img นั้นถูกนำไปใช้จริงเป็นบัฟเฟอร์ขนาดเล็กระหว่างคำสั่งต่างๆ การใช้รูปภาพเป็นอินพุตของฟังก์ชัน "สิ้นเปลือง" และทำให้ใช้งานไม่ได้อีกต่อไป (จึงมีความจำเป็นสำหรับคำสั่งที่ซ้ำกัน)
แนะนำ:
สเต็ปเปอร์มอเตอร์ที่ควบคุมโดย MIDI พร้อมชิป Direct Digital Synthesis (DDS) 3 ขั้นตอน
สเต็ปเปอร์มอเตอร์ที่ควบคุมโดย MIDI พร้อมชิป Direct Digital Synthesis (DDS): เคยมีความคิดแย่ๆ บ้างไหมว่าคุณต้องเปลี่ยนเป็นโปรเจ็กต์ขนาดเล็ก ฉันกำลังเล่นสเก็ตช์ที่ฉันสร้างขึ้นสำหรับ Arduino Due โดยมุ่งเป้าไปที่การสร้างเพลงด้วยโมดูล AD9833 Direct Digital Synthesis (DDS) … และเมื่อถึงจุดหนึ่งฉันก็คิดว่า &q
The Ultimate Knife Block: 11 ขั้นตอน (พร้อมรูปภาพ)
The Ultimate Knife Block: เราเคยไปที่นั่นมาแล้ว ใช้มีดหั่นผักด้วยมีดทื่อๆ ถ้าใช้ช้อนชาจะได้ผลกว่า ในช่วงเวลานั้น คุณไตร่ตรองว่าคุณไปถึงที่นั่นได้อย่างไร: มีดของคุณคมเหมือนมีดโกนเมื่อคุณซื้อมัน แต่ตอนนี้ ผ่านไปสามปี
เครื่องวัดสเปกโตรโฟโตมิเตอร์ Jenga Block แบบโฮมเมดสำหรับการทดลองสาหร่าย: 15 ขั้นตอน
เครื่องวัดสเปกโตรโฟโตมิเตอร์ Jenga Block แบบโฮมเมดสำหรับการทดลองสาหร่าย: สาหร่ายเป็นตัวโปรติสต์สังเคราะห์แสงและเป็นสิ่งมีชีวิตที่สำคัญในห่วงโซ่อาหารสัตว์น้ำ อย่างไรก็ตาม ในช่วงฤดูใบไม้ผลิและฤดูร้อน จุลินทรีย์เหล่านี้และจุลินทรีย์อื่นๆ สามารถขยายพันธุ์และครอบงำแหล่งน้ำธรรมชาติ ส่งผลให้ออกซิเจนลดลง
วิธีใช้ Vivado Simluation: 6 ขั้นตอน
วิธีใช้ Vivado Simluation: ฉันได้ทำโครงงานจำลองนี้สำหรับชั้นเรียนออนไลน์แล้ว โครงการนี้เขียนโดย Verilog เราจะใช้การจำลองใน Vivado เพื่อแสดงภาพคลื่นใน enable_sr (เปิดใช้งานตัวเลข) จากโครงการนาฬิกาจับเวลาที่สร้างขึ้นก่อนหน้านี้ นอกจากนั้น เราจะ
Toddler Video Remote สำหรับ PC Video Player: 6 ขั้นตอน
Toddler Video Remote สำหรับ PC Video Player: ฉันสร้างรีโมตคอนโทรลที่เชื่อมต่อกับพีซีด้วย USB รีโมทคอนโทรลขนาดใหญ่ช่วยให้เด็กวัยหัดเดินของฉันเลือกและเล่นวิดีโอบนคอมพิวเตอร์เครื่องเก่าได้ นี่เป็นโครงการที่ค่อนข้างง่าย ส่วนประกอบหลักคือแป้นพิมพ์ USB หรือแป้นพิมพ์ USB ไร้สาย จากนั้น