विषयसूची:

विवाडो एचएलएस वीडियो आईपी ब्लॉक संश्लेषण: 12 कदम
विवाडो एचएलएस वीडियो आईपी ब्लॉक संश्लेषण: 12 कदम

वीडियो: विवाडो एचएलएस वीडियो आईपी ब्लॉक संश्लेषण: 12 कदम

वीडियो: विवाडो एचएलएस वीडियो आईपी ब्लॉक संश्लेषण: 12 कदम
वीडियो: Vivado HLS Example: FFT 2024, दिसंबर
Anonim
विवाडो एचएलएस वीडियो आईपी ब्लॉक सिंथेसिस
विवाडो एचएलएस वीडियो आईपी ब्लॉक सिंथेसिस

क्या आप कभी भी बिना किसी विलंबता को जोड़े या किसी एम्बेडेड सिस्टम में वीडियो पर रीयल-टाइम प्रोसेसिंग करना चाहते हैं? FPGAs (फील्ड प्रोग्रामेबल गेट एरेज़) का उपयोग कभी-कभी ऐसा करने के लिए किया जाता है; हालांकि, वीएचडीएल या वेरिलोग जैसी हार्डवेयर विनिर्देश भाषाओं में वीडियो प्रोसेसिंग एल्गोरिदम लिखना सबसे अच्छा निराशाजनक है। Vivado HLS दर्ज करें, Xilinx टूल जो आपको C++ वातावरण में प्रोग्राम करने और उससे हार्डवेयर विनिर्देश भाषा कोड उत्पन्न करने की अनुमति देता है।

आवश्यक सॉफ्टवेयर:

  • विवाडो एचएलएस
  • विवाडो
  • (यदि आप AXI रजिस्टरों का उपयोग करते हैं) विवाडो एसडीके

(वैकल्पिक) Xilinx द्वारा निर्मित उदाहरण यहां डाउनलोड करें:

Xilinx HLS वीडियो उदाहरण

चरण 1: विवाडो एचएलएस क्या है?

विवाडो एचएलएस एक उपकरण है जिसका उपयोग सी ++ जैसे कोड को हार्डवेयर संरचनाओं में बदलने के लिए किया जाता है जिसे एफपीजीए पर लागू किया जा सकता है। इसमें इस विकास को करने के लिए एक आईडीई शामिल है। एक बार जब आप एचएलएस के लिए कोड का अपना विकास पूरा कर लेते हैं तो आप अपने जेनरेट किए गए आईपी को प्रारूप में निर्यात कर सकते हैं विवाडो के साथ प्रयोग के लिए।

संलग्न फाइलों को डाउनलोड करें और उन्हें उस स्थान के पास रखें जहां आप अपना प्रोजेक्ट बना रहे हैं। (यदि उनका नाम यादृच्छिक है तो उनका नाम बदलकर "top.cpp" और "top.h" कर दें)

चरण 2: एचएलएस वीडियो लाइब्रेरी

एचएलएस वीडियो लाइब्रेरी
एचएलएस वीडियो लाइब्रेरी
एचएलएस वीडियो लाइब्रेरी
एचएलएस वीडियो लाइब्रेरी

एचएलएस वीडियो लाइब्रेरी में इस पेपर में संदर्भ डिजाइन के साथ दस्तावेज हैं:XAPP1167इसके बारे में Xilinx विकी पेज एक और अच्छा संसाधन है।

विवाडो एचएलएस शुरू करें।

एक नया प्रोजेक्ट बनाएं।

उन फ़ाइलों को लें जिन्हें आपने पिछले चरण में डाउनलोड किया था और उन्हें स्रोत फ़ाइलों के रूप में जोड़ें। (नोट: फाइलों को प्रोजेक्ट में कॉपी नहीं किया जाता है, बल्कि वे वहीं रहते हैं जहां वे हैं)

फिर शीर्ष फ़ंक्शन का चयन करने के लिए ब्राउज़ करें बटन का उपयोग करें।

अगले पृष्ठ पर, आप जिस Xilinx भाग का उपयोग कर रहे हैं उसे चुनें।

चरण 3: संश्लेषण

synthesizing
synthesizing

समाधान => सी सिंथेसिस चलाएं => सक्रिय समाधान

~227.218 सेकेंड के बाद, इसे किया जाना चाहिए। (नोट: आपका वास्तविक संश्लेषण समय कई कारकों के आधार पर अलग-अलग होगा)

चरण 4: निर्यात के लिए संस्करण और अन्य जानकारी

निर्यात के लिए संस्करण और अन्य जानकारी
निर्यात के लिए संस्करण और अन्य जानकारी

संस्करण संख्याएँ विवाडो के साथ परस्पर क्रिया करती हैं जिससे आप किसी डिज़ाइन में आईपी को अपडेट करने में सक्षम हो जाते हैं। यदि यह एक मामूली संस्करण परिवर्तन है तो इसे जगह में किया जा सकता है जबकि प्रमुख संस्करण परिवर्तनों के लिए आपको मैन्युअल रूप से नए ब्लॉक में जोड़ने और पुराने को हटाने की आवश्यकता होती है। यदि आपके इंटरफेस नहीं बदले हैं और संस्करण अपडेट मामूली है तो अपडेट हो सकता है अपडेट आईपी बटन दबाकर पूरी तरह से स्वचालित रूप से किया जाता है। आप अपने आईपी की स्थिति देखने के लिए विवाडो टीसीएल कंसोल में "report_ip_status" चला सकते हैं।

समाधान => समाधान सेटिंग में संस्करण संख्या और अन्य जानकारी सेट करें…

वैकल्पिक रूप से, इन सेटिंग्स को निर्यात के दौरान सेट किया जा सकता है।

चरण 5: विवाडो आईपी लाइब्रेरी में निर्यात करना

विवाडो आईपी लाइब्रेरी में निर्यात करना
विवाडो आईपी लाइब्रेरी में निर्यात करना
विवाडो आईपी लाइब्रेरी में निर्यात करना
विवाडो आईपी लाइब्रेरी में निर्यात करना

समाधान => निर्यात आरटीएल

यदि आपने पिछले चरण में IP लाइब्रेरी विवरण सेट नहीं किया था, तो आप इसे अभी कर सकते हैं।

चरण 6: संश्लेषण और निर्यात विश्लेषण

संश्लेषण और निर्यात विश्लेषण
संश्लेषण और निर्यात विश्लेषण
संश्लेषण और निर्यात विश्लेषण
संश्लेषण और निर्यात विश्लेषण
संश्लेषण और निर्यात विश्लेषण
संश्लेषण और निर्यात विश्लेषण

इस स्क्रीन पर हम अपने निर्यात किए गए मॉड्यूल के बारे में आंकड़े देख सकते हैं, यह दिखाते हुए कि यह हमारे 10ns (100MHz) की घड़ी की अवधि को पूरा करता है और यह प्रत्येक संसाधन का कितना उपयोग करता है।

इसके संयोजन के साथ, हमारी सिंथेसिस रिपोर्ट, और हमारे डेटाफ्लो विश्लेषण, हम देख सकते हैं कि इसमें 317338 घड़ी चक्र * 10ns घड़ी अवधि * 14 पाइपलाइन चरण = 0.04442732 सेकंड लगते हैं। इसका मतलब है कि हमारे इमेज प्रोसेसिंग द्वारा जोड़ा गया कुल विलंबता एक सेकंड के बीसवें हिस्से से कम है (जब लक्षित 100 मेगाहर्ट्ज पर देखा जाता है)।

चरण 7: विवाडो में आईपी लाइब्रेरी जोड़ना

विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना
विवाडो में आईपी लाइब्रेरी जोड़ना

अपने संश्लेषित आईपी ब्लॉक का उपयोग करने के लिए आपको इसे विवाडो में जोड़ना होगा।

विवाडो में आईपी कैटलॉग में जाकर अपने प्रोजेक्ट में एक आईपी रिपॉजिटरी जोड़ें और "रिपॉजिटरी जोड़ें …" का चयन करके राइट-क्लिक करें।

अपनी विवाडो एचएलएस परियोजना निर्देशिका पर नेविगेट करें और अपनी समाधान निर्देशिका चुनें।

इसे उस आईपी की रिपोर्ट करनी चाहिए जो उसने पाया।

चरण 8: अपग्रेड करना

अपग्रेड करना
अपग्रेड करना
अपग्रेड करना
अपग्रेड करना
अपग्रेड करना
अपग्रेड करना

कभी-कभी आपको अपने एचएलएस ब्लॉक को विवाडो डिज़ाइन में शामिल करने के बाद उसमें बदलाव करने की आवश्यकता होती है।

ऐसा करने के लिए, आप परिवर्तन कर सकते हैं और उच्च संस्करण संख्या के साथ आईपी को पुन: संश्लेषित और निर्यात कर सकते हैं (बड़े/छोटे संस्करण संख्या परिवर्तनों के बारे में पहले चरण में विवरण देखें)।

नए संस्करण के निर्यात को बदलने के बाद, विवाडो में अपने आईपी रिपॉजिटरी को रीफ्रेश करें। यह या तो तब किया जा सकता है जब विवाडो ने नोटिस किया कि आईपी रिपॉजिटरी में बदल गया है, या मैन्युअल रूप से सक्रिय है। (ध्यान दें, यदि आप शुरू करने के बाद अपने आईपी रिपॉजिटरी को रिफ्रेश करते हैं, लेकिन एचएलएस में निर्यात पूरा होने से पहले, आईपी अस्थायी रूप से नहीं होगा, इसके खत्म होने और फिर से रिफ्रेश होने की प्रतीक्षा करें।)

इस बिंदु पर एक विंडो इस जानकारी के साथ दिखाई देनी चाहिए कि डिस्क पर एक आईपी बदल दिया गया है और आपको इसे "अपग्रेड चयनित" बटन के साथ अपडेट करने का विकल्प देता है। यदि परिवर्तन एक मामूली संस्करण परिवर्तन था और कोई भी इंटरफ़ेस नहीं बदला, फिर उस बटन को दबाने से पुराने आईपी को अपने आप नए से बदल दिया जाएगा, अन्यथा अधिक काम करने की आवश्यकता हो सकती है।

चरण 9: अतिरिक्त विवरण और जानकारी

निम्नलिखित चरण अधिक जानकारी प्रदान करते हैं कि एचएलएस संश्लेषण कैसे काम करता है और आप इसके साथ क्या कर सकते हैं।

एचएलएस संश्लेषित आईपी ब्लॉक का उपयोग करने वाले प्रोजेक्ट के उदाहरण के लिए, इस निर्देश को देखें।

चरण 10: आउटपुट और इनपुट

आउटपुट और इनपुट
आउटपुट और इनपुट
आउटपुट और इनपुट
आउटपुट और इनपुट

अंतिम आईपी ब्लॉक के आउटपुट और इनपुट का निर्धारण सिंथेसाइज़र द्वारा शीर्ष फ़ंक्शन के अंदर और बाहर डेटा के प्रवाह के विश्लेषण से किया जाता है।

वीएचडीएल या वेरिलोग के समान, एचएलएस आपको आईपी के बीच कनेक्शन के बारे में विवरण निर्दिष्ट करने की अनुमति देता है। ये पंक्तियाँ इसके उदाहरण हैं:

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

#pragma HLS इंटरफ़ेस अक्ष पोर्ट=वीडियो_इन बंडल=INPUT_STREAM #pragma HLS INTERFACE अक्ष पोर्ट=वीडियो_आउट बंडल=OUTPUT_STREAM #pragma HLS इंटरफ़ेस s_axilite पोर्ट=x बंडल=CONTROL_BUS ऑफ़सेट=0x14#pragma HLS INTERFACE y बंडल=CONTROL_BUS बंडल=CONTROL_BUS बंडल=CONTROL_BUS

आप देख सकते हैं कि आईपी ब्लॉक पर प्रदर्शित पोर्ट इन निर्देशों से कैसे प्रभावित होते हैं।

चरण 11: AXI रजिस्टर इंटरफेसिंग

AXI रजिस्टर इंटरफेसिंग
AXI रजिस्टर इंटरफेसिंग

अपने IP ब्लॉक से PS तक इनपुट/आउटपुट प्राप्त करने के लिए AXI इंटरफ़ेस के माध्यम से ऐसा करने का एक अच्छा तरीका है।

आप इसे अपने एचएलएस कोड में निर्दिष्ट कर सकते हैं, जिसमें बाद में मूल्य तक पहुंचने के लिए उपयोग किए जाने वाले ऑफ़सेट शामिल हैं:

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

#pragma HLS इंटरफ़ेस s_axilite पोर्ट=x बंडल=CONTROL_BUS ऑफ़सेट=0x14

#pragma HLS इंटरफ़ेस s_axilite पोर्ट=y बंडल=CONTROL_BUS ऑफ़सेट=0x1C #pragma HLS डेटाफ़्लो

एक्स = 42;

वाई = 0xDEADBEEF; }

एक बार विवाडो में ठीक से कनेक्ट होने के बाद, आप विवाडो एसडीके में इस कोड का उपयोग करके मूल्यों तक पहुंच सकते हैं:

#शामिल "पैरामीटर.एच"

# परिभाषित करें 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);

यह आपके पास x में 42 और y. में 0xdeadbeef होगा

चरण 12: डेटाफ्लो प्रगति

डेटाफ्लो प्रगति
डेटाफ्लो प्रगति
डेटाफ्लो प्रगति
डेटाफ्लो प्रगति
डेटाफ्लो प्रगति
डेटाफ्लो प्रगति

#pragma DATAFLOW के अंदर जिस तरह से कोड लागू किया जाता है वह सामान्य C++ से बदल जाता है। कोड को पाइपलाइन किया जाता है ताकि सभी निर्देश डेटा के अलग-अलग हिस्सों में हर समय चल रहे हों (इसे एक कारखाने में असेंबली लाइन की तरह समझें, प्रत्येक स्टेशन लगातार एक कार्य कर रहा है और इसे अगले स्टेशन पर भेज रहा है)

छवि से आप देख सकते हैं कि प्रत्येक निर्देश

सामान्य चर प्रतीत होने के बावजूद, img ऑब्जेक्ट्स को वास्तव में कमांड के बीच छोटे बफ़र्स के रूप में लागू किया जाता है। किसी फ़ंक्शन के इनपुट के रूप में एक छवि का उपयोग करना इसे "खपत" करता है और इसे अब उपयोग करने योग्य नहीं बनाता है। (इसलिए डुप्लिकेट कमांड की आवश्यकता)

सिफारिश की: