সুচিপত্র:

Zynq ইমেজ বর্ধন সিস্টেম: 7 ধাপ
Zynq ইমেজ বর্ধন সিস্টেম: 7 ধাপ

ভিডিও: Zynq ইমেজ বর্ধন সিস্টেম: 7 ধাপ

ভিডিও: Zynq ইমেজ বর্ধন সিস্টেম: 7 ধাপ
ভিডিও: FPGA图像处理,ZYNQ图像处理,ov5640,AXI总线,VDMA_HP,RGB2YCBCR 2024, জুলাই
Anonim
Zynq ইমেজ বৃদ্ধি সিস্টেম
Zynq ইমেজ বৃদ্ধি সিস্টেম
Zynq ইমেজ বৃদ্ধি সিস্টেম
Zynq ইমেজ বৃদ্ধি সিস্টেম

আপনি সম্ভবত শিরোনাম থেকে বের করতে পারেন, এই প্রকল্পের লক্ষ্য হল ZYNQ ApSOC ব্যবহার করে একটি ইমেজ বর্ধন ব্যবস্থা তৈরি করা। আরো সুনির্দিষ্টভাবে, আমরা এমন একটি সিস্টেম তৈরি করতে চাই যা ছবি বা ভিডিও থেকে কুয়াশা দূর করতে পারে। এই সিস্টেমটি দরিদ্র অবস্থায় ভিজ্যুয়াল ডেটা ইনপুট হিসেবে গ্রহণ করবে, ইমেজ বর্ধন কৌশল ব্যবহার করে এটি প্রক্রিয়া করবে এবং তারপর ফলাফল বের করবে।

প্রকল্পটি ডিজিলেন্ট জাইবো বোর্ডে তৈরি এবং পরীক্ষা করা হয়েছিল তবে অন্যান্য ZYNQ ডিভাইসগুলিও কাজ করা উচিত।

আমরা এই প্রকল্পটিকে 3 ভাগে বিভক্ত করব:

1) ইনপুট = কম্পিউটার/ক্যামেরা থেকে ইথারনেটের মাধ্যমে ইনপুট ইমেজ

2) প্রসেস = ইমেজ প্রসেস করুন

3) আউটপুট = একটি HDMI ইন্টারফেসের মাধ্যমে ছবিটি আউটপুট করুন

খুব বিপরীতমুখী ফ্যাশনে আমরা প্রকল্পের আউটপুট অংশ দিয়ে শুরু করব (এটি আমাদের আরও ভাল ডিবাগিং সম্ভাবনা দেবে) ইনপুট দিয়ে চালিয়ে যান এবং প্রক্রিয়াজাতকরণের অংশটি শেষ করুন।

ধাপ 1: উপকরণ

উপকরণ
উপকরণ

এই প্রকল্পটি সম্পন্ন করতে আপনার প্রয়োজন হবে:

হার্ডওয়্যার

- HDMI এবং ইথারনেট সহ যেকোন ZYNQ বোর্ডে কাজ করা উচিত / আমি Digilent Zybo ব্যবহার করছি

- ইউএসবি এ থেকে মাইক্রো বি ইউএসবি কেবল

- HDMI কেবল

- ইথারনেট তারের

- HDMI ইনপুট দিয়ে প্রদর্শন করুন

সফটওয়্যার

- Xilinx Vivado

- Xilinx SDK

ধাপ 2: আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 1

আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 1
আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 1

আমরা বোর্ডে উপস্থিত HDMI পোর্ট ব্যবহার করে আমাদের ভিজ্যুয়াল ডেটা আউটপুট করব। এইচডিএমআই পোর্টটি ZYNQ এর PL (Programmable Logic = FPGA) পাশের সাথে সংযুক্ত এবং এর জন্য আমাদের VHDL এ একটি নিয়ামক ডিজাইন করতে হবে। আপনি যদি কখনও একটি ভিজিএ নিয়ামক ডিজাইন করেন তবে আপনি এটিকে খুব অনুরূপ পাবেন। HDMI এবং VGA এর সময় আসলে একই, আসলে আপনি একটি বিদ্যমান VGA নিয়ামক তৈরি করতে পারেন একটি HDMI নিয়ামক পাওয়ার জন্য।

আসলে কী ঘটছে তা ভালভাবে বোঝার জন্য আমরা প্রথমে একটি ভিজিএ কন্ট্রোলার ডিজাইন করব

আমরা 1920x1080 রেজোলিউশনে প্রদর্শন করতে চাই।

VGA নিয়ামক পিক্সেল ডেটা (RGB ফরম্যাটে) ক্রমানুসারে, পিক্সেল বাই পিক্সেল ডিসপ্লেতে প্রেরণের জন্য দায়ী। 1920x1080 এর প্রকৃত ডিসপ্লে এরিয়া এলাকার বাইরেও কিছু "বর্ডার" এলাকা আছে, যেমন: সামনের বারান্দা, পিছনের বারান্দা এবং রিট্রেস। এই ক্ষেত্রগুলির পিক্সেলের আকার মান এবং প্রতিটি রেজোলিউশনের জন্য নির্দিষ্ট। এই এলাকাগুলি আসলে পর্দায় প্রদর্শিত হয় না কিন্তু সেগুলি বাধ্যতামূলক এবং এই এলাকার পিক্সেলের রঙ কালো হতে হবে। একটি বৈধ প্রশ্ন হবে কেন এই অতিরিক্ত ক্ষেত্রগুলির প্রয়োজন। এই প্রশ্নটি এই নির্দেশের উদ্দেশ্যকে অস্বীকার করে কিন্তু যদি আপনি আগ্রহী হন তবে আমি আপনাকে অনলাইনে আরও গবেষণা করতে উৎসাহিত করব।

এটি একটি ভাল ভিডিও যা VGA ইন্টারফেস ব্যাখ্যা করে

আমাদের ক্ষেত্রে আমরা 1920*1080 এর রেজোলিউশনে প্রদর্শন করতে চাই এবং এই সময়গুলি হল:

অনুভূমিক প্রদর্শন এলাকা = 1920 পিক্সেল

অনুভূমিক ফ্রন বারান্দা = 88 পিক্সেল

অনুভূমিক পিছনের বারান্দা = 148 পিক্সেল

অনুভূমিক Retrace = 44 পিক্সেল

উল্লম্ব প্রদর্শন এলাকা = 1080 পিক্সেল

উল্লম্ব সামনের বারান্দা = 4 পিক্সেল

উল্লম্ব ব্যাক বারান্দা = 36 পিক্সেল

উল্লম্ব Retrace = 5 পিক্সেল

(এখানে আপনি অন্যান্য রেজোলিউশনের জন্য সময় খুঁজে পেতে পারেন

সুতরাং আমাদের প্রকৃত রেজোলিউশন হবে 2200 x 1125। আমরা চাই 60 fps (ফ্রেম প্রতি সেকেন্ড) তাই আমাদের পিক্সেল ঘড়ি হবে 60*2200*1125 = 148.5 MHz। জাইবো বোর্ডে একটি 125 মেগাহার্টজ ঘড়ি দেওয়া হয়। আমরা 148.5 মেগাহার্টজ পিক্সেল ঘড়ি তৈরি করতে একটি MMCM IP ব্যবহার করব।

ধাপ 3: আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 2

আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 2
আউটপুট - ভিজিএ কন্ট্রোলার পার্ট 2

পূর্ববর্তী ধাপ থেকে তাত্ত্বিক পটভূমির সাথে আপনার নিজের ভিজিএ নিয়ামক ডিজাইন করতে সক্ষম হওয়া উচিত। আমি আপনাকে একটি ভিভাদো প্রজেক্ট প্রদান করব যা এটি করে কিন্তু আমি আপনাকে পরামর্শ দিচ্ছি কমপক্ষে প্রথমে এটি নিজেরাই করার চেষ্টা করুন।

বেশিরভাগ ভিজিএ পোর্টগুলি আপনাকে প্রতি পিক্সেল প্রতি রঙের চ্যানেল 8 বিট দেয় না (উপরের চিত্রটি দেখুন) তাই আপনাকে বোর্ডের দেওয়া রঙের প্রতি পিনের সংখ্যার সাথে নকশাটি মানিয়ে নিতে হবে (যদিও এটি HDMI এর জন্য কোনও সমস্যা নয়)।

উপরের বাম পিক্সেল বাদে ডিজাইনটি পুরো পর্দা নীল রঙ করবে যা লাল হবে। এটি লক্ষ করা উচিত যে এই প্রকল্পটি ZYBO বোর্ডের সীমাবদ্ধতাগুলি ব্যবহার করে। সুতরাং আপনি যদি এই প্রকল্পটি অন্য বোর্ডে চালাতে চান তবে আপনার সীমাবদ্ধতা ফাইল আপডেট করা উচিত এবং প্রতি রঙের পিনের সংখ্যা মানিয়ে নেওয়া উচিত।

চিত্র nr দেখুন। 2. মনে রাখবেন যে যখন আমাদের ভিজিএ কন্ট্রোলার প্রতি রঙে 5/6 বিট আউটপুট করে, তখন সেই বিটগুলি তারের মধ্য দিয়ে যাওয়ার আগে প্রতিটি রঙের চ্যানেলের (লাল, সবুজ এবং নীল) জন্য একটি এনালগ সিগন্যালে রূপান্তরিত হয়।

ধাপ 4: আউটপুট - HDMI কন্ট্রোলার পার্ট 1

আউটপুট - HDMI কন্ট্রোলার পার্ট 1
আউটপুট - HDMI কন্ট্রোলার পার্ট 1

এখন যেহেতু আমরা জানি যে কিভাবে VGA নিয়ামক কাজ করে এবং আমাদের একটি কার্যকরী নকশা আছে আমরা HDMI নিয়ামক দিয়ে চালিয়ে যেতে পারি। HDMI কন্ট্রোলার আসলে VGA কন্ট্রোলারে আমাদের তৈরি করা সমস্ত কোড ব্যবহার করবে। HDMI এবং VGA একই সময় এবং একই সংকেত ব্যবহার করে। আউটপুট পিনে পার্থক্য দেখা যায়।

যদিও ভিজিএ প্রতিটি রঙের জন্য একটি তার ব্যবহার করে এবং এটির মধ্যে একটি এনালগ সংকেত প্রেরণ করে, এইচডিএমআই প্রতিটি রঙের জন্য এক সময়ে ডিজিটালভাবে 1 বিট ডেটা প্রেরণ করে এবং ডিফারেনশিয়াল সিগন্যালিং ব্যবহার করে। ডিফারেনশিয়াল সিগন্যালিং এর মানে হল যে প্রতিটি বিটের জন্য HDMI এর 2 টি পিন আছে যার একটি অন্যটির বিপরীত। সুতরাং আমরা যদি '1' সংকেত প্রেরণ করতে চাই তাহলে আমরা একটি তারে '1' এবং অন্য তারে '1' নেগেটিভ প্রেরণ করবো। এটি সিগন্যাল অখণ্ডতা নিশ্চিত করে এবং আপনি এখানে এটি সম্পর্কে আরও পড়তে পারেন https://goo.gl/6CPCzB। আমাদের প্রতিটি রঙের জন্য এই চ্যানেলগুলির একটি, লাল, সবুজ এবং নীল এবং ঘড়ির জন্য একটি। ডিফারেনশিয়াল সিগন্যালিং এর সুনির্দিষ্টতার কারণে আমরা যে সংকেতগুলি HDMI এর মাধ্যমে পাঠাচ্ছি তা অবশ্যই DC ভারসাম্যপূর্ণ হতে হবে যার মানে হল যে 1 এবং 0 এর সংখ্যা নির্দিষ্ট সময়ের মধ্যে মোটামুটি সমান হতে হবে। এটি সম্পন্ন করার জন্য আমরা 8b/10b এনকোডিং ব্যবহার করব। ডিভিআই স্পেসিফিকেশন থেকে ডিফারেনশিয়াল সিগন্যালিং এবং 8b/10b এনকোডিং কীভাবে কাজ করে সে সম্পর্কে আপনি অনেক কিছু জানতে পারেন https://goo.gl/hhh8Ge (DVI এবং HDMI একই ভিডিও সিগন্যাল ব্যবহার করে)।

ধাপ 5: আউটপুট - HDMI কন্ট্রোলার পার্ট 2

আউটপুট - HDMI কন্ট্রোলার পার্ট 2
আউটপুট - HDMI কন্ট্রোলার পার্ট 2

যথেষ্ট তত্ত্ব, আমাদের প্রকল্পে আসা যাক। ভিজিএ কন্ট্রোলারে থাকাকালীন আমরা 148.5 মেগাহার্টজ ঘড়ি নিয়ে চলে এসেছি, এখানে আমাদেরকে 10 গুন ফ্রিকোয়েন্সি প্রদান করতে হবে কারণ আমরা প্রতিটি রঙের জন্য 8 বিট প্রেরণ করতে চাই এবং 8 বি/10 বি এনকোডিং ব্যবহার করে যা প্রতি পিক্সেল 10 বিট এবং 10 *148.5MHz = 1485MHz এটি একটি বিশাল ফ্রিকোয়েন্সি যা জাইবো বোর্ডে পাওয়া যায় না। সৌভাগ্যবশত আমরা আমাদের হাতা পর্যন্ত কয়েকটি কৌশল পেয়েছি। আমরা 5*148.5MHz = 742.5MHz পরিচালনা করতে পারি এবং 742.5Mhz ঘড়ির উত্থান ও পতন উভয় প্রান্তে ডেটা প্রেরণের জন্য আমরা একটি OSERDES (সিরিয়ালাইজার) আইপি ব্যবহার করব, তাই আমরা আসলে 1485MHz এ তথ্য প্রেরণ করব। ভিভাদো আমাদের কিছু সময়সাপেক্ষ সতর্কতা দেবে এবং আপনি সর্বদা একটি ছোট ঘড়ির সাথে কম রেজোলিউশনের জন্য যেতে পারেন, কিন্তু যেহেতু এটি কাজ করে, আমরা এখনই এটির জন্য কিছু মনে করি না (সতর্কতাগুলি এই সত্যের সাথে সম্পর্কিত যে ঘড়ি বাফারগুলি আনুষ্ঠানিকভাবে নয় 464MHz এর চেয়ে বেশি ফ্রিকোয়েন্সি সমর্থন করে)।

সুতরাং আমাদের যা করতে হবে তা হল আমাদের ভিজিএ কন্ট্রোলার আউটপুট থেকে ডেটা 8b/10b ফর্ম্যাটে এনকোড করা এবং তারপর উপরে উল্লিখিত হিসাবে এটিকে ক্রমানুসারে করা। সিরিয়ালাইজেশনের জন্য 2২.৫ মেগাহার্টজ ঘড়ি তৈরির জন্য আমাদের প্রকল্পে আরেকটি এমএমসিএম যুক্ত করতে হবে।

আমি এনকোডার এবং সিরিয়ালাইজারের জন্য নীচের vhdl ফাইল সংযুক্ত করেছি। আপনাকে প্রথমে আরজিবি চ্যানেলগুলি এনকোড করতে হবে এবং তারপরে তাদের সিরিয়ালাইজ করতে হবে।

লাল চ্যানেলের উদাহরণ:

TMDS_encoder_RED: TMDS_encoder

পোর্ট ম্যাপ (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

পোর্ট ম্যাপ (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

TMDS_encoder- এ "c" ইনপুট হল লাল এবং সবুজের জন্য "00" এবং নীল রঙের জন্য "vsync & hsync" (এটি DVI স্পেসিফিকেশনের অংশ

ধাপ 6: RAM থেকে ছবি প্রদর্শন করা

RAM থেকে ছবি প্রদর্শন করা হচ্ছে
RAM থেকে ছবি প্রদর্শন করা হচ্ছে

HDMI কন্ট্রোলারের উদ্দেশ্য হল প্রসেস করা ছবি প্রদর্শন করা। এখন, নিয়ন্ত্রক বাস্তবায়িত এবং যাওয়ার জন্য প্রস্তুত হওয়ার সাথে আমাদের এই নিয়ামককে ডেটা দিয়ে খাওয়ানোর বিষয়ে চিন্তা করা উচিত। প্রদত্ত যে পিএস (প্রসেসিং সিস্টেম = এআরএম প্রসেসর) -এ প্রচুর ইমেজ বর্ধন প্রক্রিয়া সংঘটিত হবে এবং ফলাফল প্রাপ্ত ছবিগুলি ডিডিআর র.্যামে থাকবে। তাই আমাদের RAM থেকে HDMI কন্ট্রোলারের ডেটা পাওয়ার একটা উপায় দরকার।

এটি সম্পন্ন করার জন্য আপনার 3 টি আইপি প্রয়োজন হবে:

1) VDMA (ভিডিও ডাইরেক্ট মেমরি অ্যাক্সেস)

2) ভিটিসি (ভিডিও টাইমিং কন্ট্রোলার)

3) ভিডিও আউট স্ট্রিম (আমরা এখন থেকে এটি S2VO কল করব)

S2VO প্রকৃতপক্ষে আউটপুট এবং প্রয়োজনীয় HSYNC এবং VSYNC সংকেতগুলিতে একটি RGB 24BIT সংকেত প্রদান করবে। সুতরাং আমরা HDMI নিয়ামকের সেই অংশটি ছেড়ে দিতে পারি।

আপনার এই আইপিগুলিকে আপনার ডিজাইনে যুক্ত করা উচিত, সেগুলি কনফিগার করা উচিত এবং সঠিক সংযোগ তৈরি করা উচিত।

অবশেষে আপনি উপরের পরিকল্পিত অনুরূপ কিছু পেতে হবে।

ধাপ 7: আউটপুট - এসডিকে শেষ

আউটপুট - এসডিকে শেষ
আউটপুট - এসডিকে শেষ

সমস্ত হার্ডওয়্যার সেট আপ এবং প্রস্তুত করার জন্য আমাদের এখন PS তে সফটওয়্যারটি তৈরি করতে হবে। আমরা হার্ডওয়্যার এবং বিটস্ট্রিম রপ্তানি করব এবং এসডিকে চালু করব।

1) ফাইল -> রপ্তানি -> রপ্তানি হার্ডওয়্যার -> বিটস্ট্রিম অন্তর্ভুক্ত চেক করুন এবং ঠিক আছে টিপুন

2) ফাইল -> এসডিকে চালু করুন

এসডিকে একটি নতুন অ্যাপ্লিকেশন প্রকল্প তৈরি করুন।

3) ফাইল -> নতুন -> অ্যাপ্লিকেশন প্রকল্প

4) আপনার প্রকল্পের জন্য একটি নাম চয়ন করুন এবং পরবর্তী টিপুন

5) "হ্যালো ওয়ার্ল্ড" টেমপ্লেট নির্বাচন করুন এবং সমাপ্তি টিপুন

SDK- এ আবেদনটি VDMA প্রোগ্রাম করতে হবে। এটি সম্পন্ন করার জন্য কিছু স্ট্যান্ডার্ড ফাংশন ব্যবহার করা হয়েছে (আমি সময় পেলে বিস্তারিত জানাব)।

আমাদের ডিজাইন পরীক্ষা করার জন্য আমরা SDK রিস্টোর (Xilinx টুলস -> ডাম্প/রিস্টোর) ফিচারটি ব্যবহার করে একটি ছবি DDR RAM মেমরিতে putুকিয়ে আমাদের HDMI কন্ট্রোলার ব্যবহার করে প্রদর্শন করব। আপনি ইমেজটি যেখানে খুশি লোড করতে পারেন (মেমরির শুরুতে কিছু ছোট সীমাবদ্ধ এলাকা বাদে)। আমাদের উদাহরণের জন্য আমরা ঠিকানা 16777216 এবং ফাইলের আকার 8294400 = 1920*1080*4 (4 চ্যানেল = আরজিবি + আলফা) বেছে নিয়েছি।

এটা কাজ করে!

চলবে

প্রস্তাবিত: