विषयसूची:

Zynq इमेज एन्हांसमेंट सिस्टम: 7 कदम
Zynq इमेज एन्हांसमेंट सिस्टम: 7 कदम

वीडियो: Zynq इमेज एन्हांसमेंट सिस्टम: 7 कदम

वीडियो: Zynq इमेज एन्हांसमेंट सिस्टम: 7 कदम
वीडियो: C64 Video Enhancement - component video fpga VIC-II graphics emulator 2024, नवंबर
Anonim
Zynq इमेज एन्हांसमेंट सिस्टम
Zynq इमेज एन्हांसमेंट सिस्टम
Zynq इमेज एन्हांसमेंट सिस्टम
Zynq इमेज एन्हांसमेंट सिस्टम

जैसा कि आप शायद शीर्षक से समझ सकते हैं, इस परियोजना का उद्देश्य ZYNQ ApSOC का उपयोग करके एक छवि संवर्धन प्रणाली बनाना है। अधिक विशेष रूप से, हम एक ऐसी प्रणाली बनाना चाहते हैं जो छवियों या वीडियो से कोहरे को दूर कर सके। यह प्रणाली खराब परिस्थितियों में दृश्य डेटा को इनपुट के रूप में लेगी, छवि वृद्धि तकनीकों का उपयोग करके इसे संसाधित करेगी और फिर परिणाम आउटपुट करेगी।

परियोजना का निर्माण और परीक्षण डिजीलेंट ज़ीबो बोर्ड पर किया गया था लेकिन अन्य ZYNQ उपकरणों को भी काम करना चाहिए।

हम इस परियोजना को 3 भागों में विभाजित करेंगे:

1) इनपुट = कंप्यूटर/कैमरा से ईथरनेट के माध्यम से इनपुट छवि

2) प्रक्रिया = छवि को संसाधित करें

3) OUTPUT = एक HDMI इंटरफ़ेस के माध्यम से छवि को आउटपुट करें

एक बहुत ही विपरीत तरीके से हम परियोजना के आउटपुट भाग से शुरू करेंगे (यह हमें रास्ते में बेहतर डिबगिंग संभावनाएं देगा) इनपुट के साथ जारी रखें और प्रसंस्करण भाग के साथ समाप्त करें।

चरण 1: सामग्री

सामग्री
सामग्री

इस परियोजना को पूरा करने के लिए आपको आवश्यकता होगी:

हार्डवेयर

- एचडीएमआई और ईथरनेट के साथ कोई भी ZYNQ बोर्ड काम करना चाहिए / मैं Digilent Zybo का उपयोग कर रहा हूं

- यूएसबी ए से माइक्रो बी यूएसबी केबल

- एच डी ऍम आई केबल

- ईथरनेट केबल

- एचडीएमआई इनपुट के साथ प्रदर्शित करें

सॉफ्टवेयर

- Xilinx विवाडो

- Xilinx एसडीके

चरण 2: आउटपुट - वीजीए नियंत्रक भाग 1

आउटपुट - वीजीए नियंत्रक भाग 1
आउटपुट - वीजीए नियंत्रक भाग 1

हम बोर्ड पर मौजूद एचडीएमआई पोर्ट का उपयोग करके अपने विजुअल डेटा को आउटपुट करेंगे। एचडीएमआई पोर्ट ZYNQ के PL (प्रोग्रामेबल लॉजिक = FPGA) साइड से जुड़ा है और हमें इसके लिए VHDL में एक कंट्रोलर डिजाइन करना होगा। यदि आपने कभी वीजीए नियंत्रक डिजाइन किया है तो आप इसे बहुत समान पाएंगे। एचडीएमआई और वीजीए के लिए समय वास्तव में समान है, वास्तव में आप एचडीएमआई नियंत्रक प्राप्त करने के लिए मौजूदा वीजीए नियंत्रक पर निर्माण कर सकते हैं।

वास्तव में क्या हो रहा है इसकी बेहतर समझ के लिए हम पहले एक वीजीए नियंत्रक डिजाइन करेंगे

हम 1920x1080 के एक संकल्प पर प्रदर्शित करना चाहते हैं।

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

यह वीजीए इंटरफ़ेस की व्याख्या करने वाला एक अच्छा वीडियो है

हमारे मामले में हम 1920*1080 के एक संकल्प पर प्रदर्शन करना चाहते हैं, और ये समय हैं:

क्षैतिज प्रदर्शन क्षेत्र = 1920 पिक्सेल

क्षैतिज सामने का बरामदा = 88 पिक्सेल

हॉरिजॉन्टल बैक पोर्च = १४८ पिक्सल

क्षैतिज रिट्रेस =44 पिक्सेल

लंबवत प्रदर्शन क्षेत्र = 1080 पिक्सेल

वर्टिकल फ्रंट पोर्च = 4 पिक्सल

वर्टिकल बैक पोर्च = 36 पिक्सल

लंबवत रिट्रेस = 5 पिक्सेल

(यहाँ आप अन्य प्रस्तावों के लिए समय पा सकते हैं

तो हमारा वास्तविक रिज़ॉल्यूशन 2200 x 1125 होगा। हम 60 एफपीएस (फ्रेम प्रति सेकंड) चाहते हैं, इसलिए हमारी पिक्सेल घड़ी 60 * 2200 * 1125 = 148.5 मेगाहर्ट्ज होगी। Zybo बोर्ड पर 125 मेगाहर्ट्ज की घड़ी दी गई है। हम 148.5 मेगाहर्ट्ज पिक्सेल घड़ी उत्पन्न करने के लिए एक एमएमसीएम आईपी का उपयोग करेंगे जिसकी हमें आवश्यकता है।

चरण 3: आउटपुट - वीजीए नियंत्रक भाग 2

आउटपुट - वीजीए नियंत्रक भाग 2
आउटपुट - वीजीए नियंत्रक भाग 2

पिछले चरण की सैद्धांतिक पृष्ठभूमि के साथ आपको अपना स्वयं का वीजीए नियंत्रक डिजाइन करने में सक्षम होना चाहिए। मैं आपको एक विवाडो प्रोजेक्ट प्रदान करूंगा जो ऐसा करता है लेकिन मैं आपको सलाह देता हूं कि कम से कम इसे पहले स्वयं बनाने का प्रयास करें।

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

डिज़ाइन पूरी स्क्रीन को नीले रंग में रंग देगा, ऊपरी बाएँ पिक्सेल को छोड़कर जो लाल होगा। यह ध्यान दिया जाना चाहिए कि यह परियोजना ZYBO बोर्ड के लिए बाधाओं का उपयोग करती है। इसलिए यदि आप इस प्रोजेक्ट को किसी अन्य बोर्ड पर चलाना चाहते हैं तो आपको बाधाओं की फ़ाइल को अपडेट करना चाहिए और प्रति रंग पिनों की संख्या को अनुकूलित करना चाहिए।

आंकड़ा nr पर एक नज़र डालें। 2. याद रखें कि जब हमारा वीजीए कंट्रोलर 5/6 बिट प्रति रंग आउटपुट करता है, तो वे बिट्स केबल के माध्यम से जाने से पहले प्रत्येक रंग चैनल (लाल, हरा और नीला) के लिए एक एनालॉग सिग्नल में परिवर्तित हो जाते हैं।

चरण 4: आउटपुट - एचडीएमआई नियंत्रक भाग 1

आउटपुट - एचडीएमआई नियंत्रक भाग 1
आउटपुट - एचडीएमआई नियंत्रक भाग 1

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

जबकि वीजीए प्रत्येक रंग के लिए एक तार का उपयोग करता है और इसके पार एक एनालॉग सिग्नल प्रसारित करता है, एचडीएमआई प्रत्येक रंग के लिए एक बार में डेटा को डिजिटल रूप से 1 बिट प्रसारित करता है और अंतर सिग्नलिंग का उपयोग करता है। डिफरेंशियल सिग्नलिंग का मतलब है कि प्रत्येक बिट के लिए एचडीएमआई में 2 पिन होते हैं जिनमें से एक दूसरे के विपरीत होता है। इसलिए यदि हम एक सिग्नल '1' संचारित करना चाहते हैं तो हम एक तार पर '1' और दूसरे तार पर '1' नेगेटिव संचारित करेंगे। यह सिग्नल की अखंडता सुनिश्चित करता है और आप इसके बारे में यहां https://goo.gl/6CPCzB पढ़ सकते हैं। हमारे पास प्रत्येक रंग के लिए इनमें से एक चैनल है, लाल, हरा और नीला और एक घड़ी के लिए। डिफरेंशियल सिग्नलिंग की बारीकियों के कारण हम hdmi के माध्यम से जो सिग्नल भेज रहे हैं, वह DC संतुलित होना चाहिए, जिसका अर्थ है कि 1 और 0 की संख्या लगभग एक निश्चित समय में बराबर होनी चाहिए। इसे पूरा करने के लिए हम 8b/10b एन्कोडिंग का उपयोग करेंगे। आप इस बारे में बहुत कुछ सीख सकते हैं कि कैसे डिफरेंशियल सिग्नलिंग और 8b/10b एन्कोडिंग DVI विनिर्देशन से काम करता है https://goo.gl/hhh8Ge (DVI और HDMI समान वीडियो सिग्नल का उपयोग करते हैं)।

चरण 5: आउटपुट - एचडीएमआई नियंत्रक भाग 2

आउटपुट - एचडीएमआई नियंत्रक भाग 2
आउटपुट - एचडीएमआई नियंत्रक भाग 2

पर्याप्त सिद्धांत, आइए हमारी परियोजना पर आते हैं। जबकि वीजीए नियंत्रक में हम 148.5 मेगाहर्ट्ज घड़ी के साथ दूर हो गए, यहां हमें उस आवृत्ति का 10 गुना प्रदान करना होगा क्योंकि हम प्रत्येक रंग के लिए 8 बिट संचारित करना चाहते हैं और 8 बी / 10 बी एन्कोडिंग का उपयोग करना चाहते हैं जो प्रति पिक्सेल 10 बिट और 10 का अनुवाद करता है। *148.5 मेगाहर्ट्ज = 1485 मेगाहर्ट्ज। यह एक बहुत बड़ी आवृत्ति है जिसे ज़ीबो बोर्ड पर प्राप्त नहीं किया जा सकता है। सौभाग्य से हमें अपनी आस्तीन ऊपर कुछ तरकीबें मिलीं। हम ५*१४८.५ मेगाहर्ट्ज = ७४२.५ मेगाहर्ट्ज का प्रबंधन कर सकते हैं और हम ७४२.५ मेगाहर्ट्ज घड़ी के बढ़ते और गिरते दोनों किनारों पर डेटा संचारित करने के लिए ओएसईआरडीईएस (सीरियलाइज़र) आईपी का उपयोग करेंगे, इसलिए हम वास्तव में १४८५ मेगाहर्ट्ज पर डेटा प्रसारित करेंगे। विवाडो हमें कुछ समय की चेतावनी देगा और आप हमेशा एक छोटी घड़ी के साथ कम रिज़ॉल्यूशन के लिए जा सकते हैं, लेकिन चूंकि यह काम करता है, इसलिए हमें अभी इसके लिए कोई आपत्ति नहीं है (चेतावनियां इस तथ्य से संबंधित हैं कि घड़ी बफ़र्स आधिकारिक तौर पर नहीं हैं समर्थन आवृत्तियों 464 मेगाहर्ट्ज से अधिक)।

तो हमें अपने वीजीए कंट्रोलर आउटपुट से डेटा को 8b/10b फॉर्मेट में एनकोड करना है और फिर इसे ऊपर बताए अनुसार क्रमबद्ध करना है। सीरियलाइजेशन के लिए 742.5 मेगाहर्ट्ज घड़ी उत्पन्न करने के लिए हमें परियोजना में एक और एमएमसीएम जोड़ने की भी आवश्यकता होगी।

मैंने एन्कोडर और सीरिएलाइज़र के लिए वीएचडीएल फाइलों को संलग्न किया। आपको पहले आरजीबी चैनलों को एन्कोड करना होगा और फिर उन्हें क्रमबद्ध करना होगा।

लाल चैनल के लिए उदाहरण:

TMDS_encoder_RED: TMDS_encoder

पोर्ट मैप (clk148, red_channel_8bits, c_red, video_on, एन्कोडेड_रेड_10बिट);

Serialiser_RED: Serialiser10_1

पोर्ट मैप (clk148, clk742, एन्कोडेड_रेड_10बिट्स, रीसेट, red_serial_1bit);

TMDS_encoder में "c" इनपुट लाल और हरे रंग के लिए "00" और नीले रंग के लिए "vsync और hsync" है (यह DVI विनिर्देश https://goo.gl/hhh8Ge का हिस्सा है)।

चरण 6: RAM से चित्र प्रदर्शित करना

RAM से छवियाँ प्रदर्शित करना
RAM से छवियाँ प्रदर्शित करना

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

इसे पूरा करने के लिए आपको 3 IP की आवश्यकता होगी:

1) वीडीएमए (वीडियो डायरेक्ट मेमोरी एक्सेस)

2) वीटीसी (वीडियो टाइमिंग कंट्रोलर)

3) वीडियो आउट पर स्ट्रीम करें (हम इसे अभी से S2VO कहेंगे)

S2VO वास्तव में आउटपुट को RGB 24BIT सिग्नल और आवश्यक HSYNC और VSYNC सिग्नल प्रदान करेगा। तो हम एचडीएमआई कंट्रोलर के उस हिस्से को छोड़ सकते हैं।

आपको इन आईपी को अपने डिजाइन में जोड़ना चाहिए, उन्हें कॉन्फ़िगर करना चाहिए और उचित कनेक्शन बनाना चाहिए।

अंत में आपको उपरोक्त योजनाबद्ध जैसा कुछ मिलना चाहिए।

चरण 7: OUTPUT - SDK END

आउटपुट - एसडीके END
आउटपुट - एसडीके END

सभी हार्डवेयर सेट अप और जाने के लिए तैयार होने के साथ हमें अब PS में सॉफ़्टवेयर बनाना होगा। हम हार्डवेयर और बिटस्ट्रीम निर्यात करेंगे और एसडीके लॉन्च करेंगे।

1) फाइल -> एक्सपोर्ट -> एक्सपोर्ट हार्डवेयर -> चेक बिटस्ट्रीम शामिल करें और ओके दबाएं

2) फ़ाइल -> एसडीके लॉन्च करें

एसडीके में एक नया एप्लिकेशन प्रोजेक्ट बनाएं।

3) फाइल -> नया -> एप्लीकेशन प्रोजेक्ट

4) अपनी परियोजना के लिए एक नाम चुनें और अगला दबाएं

5) "हैलो वर्ल्ड" टेम्प्लेट चुनें और फिनिश दबाएं

एसडीके में एप्लिकेशन को वीडीएमए प्रोग्राम करने की आवश्यकता होगी। इसे पूरा करने के लिए कुछ मानक कार्यों का उपयोग किया जाता है (जब मेरे पास समय होगा तो मैं विवरण में जाऊंगा)।

हमारे डिजाइन का परीक्षण करने के लिए हम एसडीके रिस्टोर (Xilinx Tools -> Dump/Restore) फीचर का उपयोग डीडीआर रैम मेमोरी में एक छवि डालने और इसे हमारे एचडीएमआई कंट्रोलर का उपयोग करके प्रदर्शित करने के लिए करेंगे। आप छवि को कहीं भी लोड कर सकते हैं (स्मृति की शुरुआत में कुछ छोटे प्रतिबंधित क्षेत्रों को छोड़कर)। हमारे उदाहरण के लिए हमने पता 16777216 और फ़ाइल का आकार 8294400 = 1920*1080*4 (4 चैनल = आरजीबी + अल्फा) चुना।

यह काम करता है !

जारी रहती है

सिफारिश की: