جدول المحتويات:

نظام تحسين الصور Zynq: 7 خطوات
نظام تحسين الصور Zynq: 7 خطوات

فيديو: نظام تحسين الصور Zynq: 7 خطوات

فيديو: نظام تحسين الصور Zynq: 7 خطوات
فيديو: DEV KIT WEEKLY: Xilinx Kria KV260 Vision AI Starter Kit 2024, شهر نوفمبر
Anonim
نظام تحسين الصور Zynq
نظام تحسين الصور Zynq
نظام تحسين الصور Zynq
نظام تحسين الصور Zynq

كما يمكنك الاستنتاج من العنوان ، فإن الهدف من هذا المشروع هو إنشاء نظام تحسين الصورة باستخدام ZYNQ ApSOC. وبشكل أكثر تحديدًا ، نرغب في بناء نظام يمكنه إزالة الضباب من الصور أو مقاطع الفيديو. سيأخذ هذا النظام البيانات المرئية في الظروف السيئة كمدخلات ، ويعالجها باستخدام تقنيات تحسين الصورة ثم إخراج النتيجة.

تم بناء المشروع واختباره على Digilent Zybo Board ولكن يجب أن تعمل أجهزة ZYNQ الأخرى أيضًا.

سنقسم هذا المشروع إلى 3 أجزاء:

1) الإدخال = إدخال الصورة عبر إيثرنت من الكمبيوتر / الكاميرا

2) العملية = معالجة الصورة

3) الإخراج = إخراج الصورة عبر واجهة HDMI

بطريقة غير بديهية للغاية ، سنبدأ بجزء الإخراج من المشروع (سيعطينا هذا إمكانيات تصحيح أخطاء أفضل على طول الطريق) نواصل مع الإدخال وننهي جزء المعالجة.

الخطوة 1: المواد

المواد
المواد

لإكمال هذا المشروع سوف تحتاج:

المعدات

- يجب أن تعمل أي لوحة ZYNQ مع HDMI و Ethernet / أنا أستخدم Digilent Zybo

- كابل USB A إلى كابل micro B USB

- كابل HDMI

- كابل إيثرنت

- عرض مع مدخلات HDMI

البرمجيات

- Xilinx Vivado

- Xilinx SDK

الخطوة 2: الإخراج - وحدة تحكم VGA الجزء الأول

الإخراج - وحدة تحكم VGA الجزء الأول
الإخراج - وحدة تحكم VGA الجزء الأول

سنخرج بياناتنا المرئية باستخدام منفذ HDMI الموجود على اللوحة. منفذ HDMI متصل بالجانب PL (المنطق القابل للبرمجة = FPGA) من ZYNQ وسنحتاج إلى تصميم وحدة تحكم في VHDL لذلك. إذا كنت قد صممت وحدة تحكم VGA ، فستجد هذا مشابهًا جدًا. توقيتات HDMI و VGA هي نفسها في الواقع ، في الواقع يمكنك البناء على وحدة تحكم VGA موجودة للحصول على وحدة تحكم HDMI.

من أجل فهم أفضل لما يحدث بالفعل ، سنقوم أولاً بتصميم وحدة تحكم VGA

نريد أن نعرض بدقة 1920 × 1080.

وحدة تحكم VGA مسؤولة عن نقل بيانات البكسل (بتنسيق RGB) بالتتابع ، بكسل ببيكسل إلى الشاشة. خارج منطقة العرض الفعلية 1920 × 1080 هناك أيضًا بعض المناطق "الحدودية" ، وهي: الشرفة الأمامية ، الشرفة الخلفية والتراجع. الحجم بالبكسل لهذه المناطق قياسي ومخصص لكل دقة. لا تظهر هذه المناطق فعليًا على الشاشة ولكنها إلزامية ويجب أن يكون لون البكسل في هذه المنطقة أسود. سيكون السؤال الصحيح هو لماذا هذه المناطق الإضافية مطلوبة. يتحدى هذا السؤال الغرض من هذه التعليمات ، ولكن إذا كنت مهتمًا بالفضول ، فأنا أشجعك على إجراء مزيد من البحث عبر الإنترنت.

هذا فيديو جيد يشرح واجهة VGA

في حالتنا نريد عرض بدقة 1920 * 1080 ، وهذه هي التوقيتات:

مساحة العرض الأفقية = 1920 بكسل

الشرفة الأفقية الأمامية = 88 بكسل

الشرفة الخلفية الأفقية = 148 بكسل

التصحيح الأفقي = 44 بكسل

مساحة العرض العمودية = 1080 بكسل

الشرفة الأمامية العمودية = 4 بكسل

الشرفة الخلفية العمودية = 36 بكسل

التصحيح العمودي = 5 بكسل

(هنا يمكنك العثور على توقيتات القرارات الأخرى

لذا فإن الدقة الفعلية ستكون 2200 × 1125. نريد 60 إطارًا في الثانية (إطارات في الثانية) لذا ستكون ساعة البكسل لدينا 60 * 2200 * 1125 = 148.5 ميجا هرتز. يتم توفير ساعة 125 ميجا هرتز على لوحة Zybo. سنستخدم MMCM IP لإنشاء ساعة بكسل 148.5 ميجا هرتز التي نحتاجها.

الخطوة 3: الإخراج - وحدة تحكم VGA الجزء 2

الإخراج - وحدة تحكم VGA الجزء 2
الإخراج - وحدة تحكم VGA الجزء 2

مع الخلفية النظرية من الخطوة السابقة ، يجب أن تكون قادرًا على تصميم وحدة تحكم VGA الخاصة بك. سأقدم لك مشروع Vivado الذي يقوم بذلك ولكن أنصحك على الأقل بمحاولة القيام بذلك بنفسك أولاً.

لا تمنحك معظم منافذ VGA 8 بت لكل قناة ألوان لكل بكسل (انظر الصورة أعلاه) ، لذا ستحتاج إلى تكييف التصميم مع عدد الدبابيس لكل لون توفره اللوحة (هذه ليست مشكلة بالنسبة لـ HDMI رغم ذلك).

سوف يرسم التصميم الشاشة بأكملها باللون الأزرق ، باستثناء الجزء العلوي الأيسر الذي سيكون باللون الأحمر. تجدر الإشارة إلى أن هذا المشروع يستخدم قيود مجلس ZYBO. لذلك إذا كنت ترغب في تشغيل هذا المشروع على لوحة أخرى ، فيجب عليك تحديث ملف القيود وتكييف عدد الدبابيس لكل لون.

نلقي نظرة على الرقم nr. 2. تذكر أنه في حين أن جهاز التحكم VGA الخاص بنا ينتج 5/6 بت لكل لون ، يتم تحويل هذه البتات إلى إشارة تناظرية واحدة لكل قناة ملونة (أحمر وأخضر وأزرق) قبل المرور عبر الكابل.

الخطوة 4: الإخراج - وحدة تحكم HDMI الجزء 1

الإخراج - وحدة تحكم HDMI الجزء 1
الإخراج - وحدة تحكم HDMI الجزء 1

الآن بعد أن عرفنا كيف تعمل وحدة تحكم VGA ولدينا تصميم عملي يمكننا الاستمرار في التحكم في HDMI. ستستخدم وحدة تحكم HDMI في الواقع جميع الأكواد التي طورناها في وحدة تحكم VGA. يستخدم كل من HDMI و VGA نفس التوقيت ونفس الإشارات. يظهر الاختلاف على دبابيس الإخراج.

بينما يستخدم VGA سلكًا واحدًا لكل لون وينقل إشارة تناظرية عبره ، ينقل HDMI البيانات رقميًا 1 بت في كل مرة لكل لون ويستخدم الإشارات التفاضلية. تعني الإشارة التفاضلية أنه لكل بتة ، يحتوي HDMI على دبابيس مع أحدهما عكس الآخر. لذا إذا أردنا إرسال إشارة "1" فإننا نرسل "1" على سلك و "1" يتم إبطالها على السلك الآخر. يضمن ذلك سلامة الإشارة ويمكنك قراءة المزيد عنها هنا https://goo.gl/6CPCzB. لدينا واحدة من هذه القنوات لكل لون ، أحمر وأخضر وأزرق وواحدة للساعة. نظرًا لخصائص الإشارات التفاضلية ، يجب أن تكون الإشارات التي نرسلها عبر منفذ HDMI متوازنة مع DC وهذا يعني أن عدد 1 و 0 يجب أن يكون متساويًا تقريبًا في فترة زمنية معينة. من أجل تحقيق ذلك ، سنستخدم ترميز 8b / 10b. يمكنك معرفة الكثير حول كيفية عمل الإشارات التفاضلية والتشفير 8b / 10b من مواصفات DVI هنا https://goo.gl/hhh8Ge (يستخدم DVI و HDMI نفس إشارات الفيديو).

الخطوة 5: الإخراج - وحدة تحكم HDMI الجزء 2

الإخراج - وحدة تحكم HDMI الجزء 2
الإخراج - وحدة تحكم HDMI الجزء 2

كفى نظرية ، دعنا نصل إلى مشروعنا. أثناء وجودنا في وحدة تحكم VGA ، ابتعدنا عن ساعة 148.5 ميجاهرتز ، هنا سيتعين علينا توفير 10 أضعاف هذا التردد لأننا نريد إرسال 8 بت لكل لون واستخدام ترميز 8b / 10b الذي يترجم إلى 10 بت لكل بكسل و 10 * 148.5 ميجا هرتز = 1485 ميجا هرتز. هذا تردد ضخم لا يمكن الحصول عليه على لوحة Zybo. لحسن الحظ ، حصلنا على بعض الحيل في جعبتنا. يمكننا إدارة 5 * 148.5 ميجاهرتز = 742.5 ميجاهرتز وسنستخدم OSERDES (جهاز تسلسلي) IP لنقل البيانات على كل من الحافة الصاعدة والهابطة لساعة 742.5 ميجاهرتز ، لذلك سنحصل بالفعل على البيانات المنقولة بسرعة 1485 ميجاهرتز. سيقدم لنا Vivado بعض تحذيرات التوقيت ويمكنك دائمًا اختيار دقة أقل باستخدام ساعة أصغر ، ولكن نظرًا لأنه يعمل ، فنحن لا نمانع في ذلك في الوقت الحالي (ترتبط التحذيرات بحقيقة أن المخازن المؤقتة للساعة ليست رسمية ترددات دعم أعلى من 464 ميجا هرتز).

لذا ما نحتاج إلى القيام به هو تشفير البيانات من مخرجات VGA Controller الخاصة بنا بتنسيق 8b / 10b ثم ترتيبها على شكل تسلسل كما هو مذكور أعلاه. سنحتاج أيضًا إلى إضافة MMCM أخرى إلى المشروع لإنشاء ساعة 742.5MHz للتسلسل.

لقد أرفقت ملفات vhdl لبرنامج التشفير والمسلسل. يجب عليك أولاً تشفير قنوات RGB ثم تسلسلها.

مثال على القناة الحمراء:

TMDS_encoder_RED: TMDS_encoder

خريطة المنفذ (clk148، red_channel_8bits، c_red، video_on، encoded_red_10bits) ؛

Serialiser_RED: المسلسل 10_1

خريطة المنفذ (clk148 ، clk742 ، encoded_red_10bits ، إعادة التعيين ، red_serial_1bit) ؛

الإدخال "c" إلى TMDS_encoder هو "00" للأحمر والأخضر و "vsync & hsync" للأزرق (هذا جزء من مواصفات DVI

الخطوة 6: عرض الصور من ذاكرة الوصول العشوائي

عرض الصور من ذاكرة الوصول العشوائي
عرض الصور من ذاكرة الوصول العشوائي

الغرض من وحدة تحكم HDMI هو عرض الصور المعالجة. الآن ، مع تطبيق وحدة التحكم وجاهزة للعمل ، يجب أن نفكر في تغذية وحدة التحكم هذه بالبيانات. بالنظر إلى أن الكثير من عملية تحسين الصورة ستتم في PS (نظام المعالجة = معالج ARM) وستكون الصور الناتجة موجودة في ذاكرة الوصول العشوائي DDR. لذلك نحن بحاجة إلى طريقة لنقل البيانات من ذاكرة الوصول العشوائي إلى وحدة تحكم HDMI.

لتحقيق ذلك ، ستحتاج إلى 3 عناوين IP:

1) VDMA (الوصول المباشر إلى الذاكرة للفيديو)

2) VTC (جهاز التحكم في توقيت الفيديو)

3) البث إلى مخرج الفيديو (سنسميها S2VO من الآن فصاعدًا)

سيوفر S2VO في الواقع إشارة RGB 24BIT للإخراج وإشارات HSYNC و VSYNC المطلوبة. لذا يمكننا ترك هذا الجزء من وحدة تحكم HDMI خارجًا.

يجب عليك إضافة عناوين IP هذه إلى تصميمك وتكوينها وإجراء الاتصالات المناسبة.

أخيرًا يجب أن تحصل على شيء يشبه التخطيطي أعلاه.

الخطوة 7: الإخراج - نهاية SDK

الإخراج - نهاية SDK
الإخراج - نهاية SDK

مع كل الأجهزة التي تم إعدادها وجاهزة للعمل ، يجب علينا الآن إنشاء البرنامج في PS. سنقوم بتصدير الأجهزة و bitstream وإطلاق SDK.

1) ملف -> تصدير -> تصدير الأجهزة -> تحقق من تضمين Bitstream واضغط على موافق

2) ملف -> تشغيل SDK

في SDK ، قم بإنشاء مشروع تطبيق جديد.

3) ملف -> جديد -> مشروع تطبيقي

4) اختر اسمًا لمشروعك واضغط على التالي

5) حدد قالب "Hello World" واضغط على Finish

سيحتاج التطبيق الموجود في SDK إلى برمجة VDMA. هناك بعض الوظائف القياسية المستخدمة من أجل تحقيق ذلك (سأدخل في التفاصيل عندما يكون لدي الوقت).

من أجل اختبار تصميمنا ، سنستخدم ميزة SDK Restore (Xilinx Tools -> Dump / Restore) لوضع صورة في ذاكرة DDR RAM وعرضها باستخدام وحدة تحكم HDMI الخاصة بنا. يمكنك تحميل الصورة في أي مكان تريد (باستثناء بعض المناطق الصغيرة المحظورة في بداية الذاكرة). على سبيل المثال ، اخترنا العنوان 16777216 وحجم الملف 8294400 = 1920 * 1080 * 4 (4 قنوات = RGB + ألفا).

إنها تعمل !

يتبع

موصى به: