সুচিপত্র:

ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ: 12 টি ধাপ
ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ: 12 টি ধাপ

ভিডিও: ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ: 12 টি ধাপ

ভিডিও: ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ: 12 টি ধাপ
ভিডিও: ফোনের স্ক্রিন রেকর্ডিং | Mobile Screen Recording Hidden Tricks and Settings 2024, জুলাই
Anonim
ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ
ভিভাদো এইচএলএস ভিডিও আইপি ব্লক সংশ্লেষণ

আপনি কি কখনও ভিডিওতে রিয়েল-টাইম প্রক্রিয়াকরণ করতে চেয়েছিলেন অনেকটা বিলম্ব না করে বা একটি এমবেডেড সিস্টেমে? FPGAs (ফিল্ড প্রোগ্রামযোগ্য গেট অ্যারে) কখনও কখনও এটি করতে ব্যবহৃত হয়; যাইহোক, ভিএইচডিএল বা ভেরিলগের মতো হার্ডওয়্যার স্পেসিফিকেশন ভাষায় ভিডিও প্রসেসিং অ্যালগরিদম লেখা সবচেয়ে ভাল হতাশাজনক। Vivado HLS লিখুন, Xilinx টুল যা আপনাকে C ++ পরিবেশে প্রোগ্রাম করতে এবং এটি থেকে হার্ডওয়্যার স্পেসিফিকেশন ল্যাঙ্গুয়েজ কোড তৈরি করতে দেয়।

প্রয়োজনীয় সফটওয়্যার:

  • ভিভাদো এইচএলএস
  • ভিভাদো
  • (যদি আপনি AXI রেজিস্টার ব্যবহার করেন) Vivado SDK

(Alচ্ছিক) এখানে Xilinx তৈরি উদাহরণ ডাউনলোড করুন:

Xilinx HLS ভিডিও উদাহরণ

ধাপ 1: ভিভাদো এইচএলএস কি?

ভিভ্যাডো এইচএলএস হল একটি টুল যা সি ++ এর মত কোডকে হার্ডওয়্যার স্ট্রাকচারে রূপান্তর করতে পারে যা এফপিজিএ -তে প্রয়োগ করা যায়। এই উন্নয়ন করার জন্য এটি একটি আইডিই অন্তর্ভুক্ত করে। একবার আপনি এইচএলএস -এর জন্য কোডের ডেভেলপমেন্ট সম্পন্ন করলে আপনি আপনার জেনারেটেড আইপি একটি ফরম্যাটে এক্সপোর্ট করতে পারবেন। ভিভাদোর সাথে ব্যবহারের জন্য।

সংযুক্ত ফাইলগুলি ডাউনলোড করুন এবং সেগুলি যেখানে আপনি আপনার প্রকল্পটি তৈরি করবেন তার কাছে রাখুন। (যদি তাদের একটি র্যান্ডমাইজড নাম থাকে তবে তাদের আবার "top.cpp" এবং "top.h" নামকরণ করুন)

ধাপ 2: এইচএলএস ভিডিও লাইব্রেরি

এইচএলএস ভিডিও লাইব্রেরি
এইচএলএস ভিডিও লাইব্রেরি
এইচএলএস ভিডিও লাইব্রেরি
এইচএলএস ভিডিও লাইব্রেরি

এইচএলএস ভিডিও লাইব্রেরিতে এই কাগজে রেফারেন্স ডিজাইন সহ ডকুমেন্টেশন রয়েছে: XAPP1167 আরেকটি ভাল সম্পদ এটি সম্পর্কে Xilinx উইকি পৃষ্ঠা।

Vivado HLS শুরু করুন।

একটি নতুন প্রকল্প তৈরি করুন।

আপনি আগের ধাপে ডাউনলোড করা ফাইলগুলি নিন এবং সেগুলি সোর্স ফাইল হিসাবে যুক্ত করুন। (দ্রষ্টব্য: ফাইলগুলি প্রকল্পে অনুলিপি করা হয় না, বরং তারা যেখানে থাকে সেখানেই থাকে)

তারপর উপরের ফাংশন নির্বাচন করতে ব্রাউজ বাটন ব্যবহার করুন।

পরবর্তী পৃষ্ঠায়, আপনি যে Xilinx অংশটি ব্যবহার করছেন তা নির্বাচন করুন।

ধাপ 3: সংশ্লেষণ

সংশ্লেষণ
সংশ্লেষণ

সমাধান => সি সংশ্লেষণ চালান => সক্রিয় সমাধান

~ 227.218 সেকেন্ড পরে, এটি করা উচিত। (দ্রষ্টব্য: আপনার প্রকৃত সংশ্লেষণ সময় অনেক কারণের উপর ভিত্তি করে পরিবর্তিত হবে)

ধাপ 4: রপ্তানির জন্য সংস্করণ এবং অন্যান্য তথ্য

রপ্তানির জন্য সংস্করণ এবং অন্যান্য তথ্য
রপ্তানির জন্য সংস্করণ এবং অন্যান্য তথ্য

সংস্করণ নম্বরগুলি ভিভাদোর সাথে যোগাযোগ করে যাতে আপনি একটি ডিজাইনে আইপি আপডেট করতে সক্ষম হন। যদি এটি একটি ছোট সংস্করণ পরিবর্তন হয় তবে এটি জায়গায় করা যেতে পারে যখন প্রধান সংস্করণ পরিবর্তনের জন্য আপনাকে নতুন ব্লকে ম্যানুয়ালি যোগ করতে হবে এবং পুরানোটি সরিয়ে ফেলতে হবে। আপডেট আইপি বোতাম টিপে সম্পূর্ণ স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। আপনি আপনার আইপি এর অবস্থা দেখতে ভিভাদো টিসিএল কনসোলে "report_ip_status" চালাতে পারেন।

সমাধান => সমাধান সেটিংসে সংস্করণ নম্বর এবং অন্যান্য তথ্য সেট করুন …

বিকল্পভাবে, এই সেটিংস রপ্তানির সময় সেট করা যেতে পারে।

ধাপ 5: একটি ভিভাদো আইপি লাইব্রেরিতে রপ্তানি করা হচ্ছে

একটি ভিভাদো আইপি লাইব্রেরিতে রপ্তানি করা হচ্ছে
একটি ভিভাদো আইপি লাইব্রেরিতে রপ্তানি করা হচ্ছে
একটি ভিভাদো আইপি লাইব্রেরিতে রপ্তানি করা হচ্ছে
একটি ভিভাদো আইপি লাইব্রেরিতে রপ্তানি করা হচ্ছে

সমাধান => এক্সপোর্ট আরটিএল

আপনি যদি আগের ধাপে আইপি লাইব্রেরির বিবরণ সেট না করেন, তাহলে আপনি এখনই এটি করতে পারেন।

ধাপ 6: সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ

সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ
সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ
সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ
সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ
সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ
সংশ্লেষণ এবং রপ্তানি বিশ্লেষণ

এই স্ক্রিনে আমরা আমাদের রপ্তানি করা মডিউল সম্পর্কে পরিসংখ্যান দেখতে পাচ্ছি, এটি দেখায় যে এটি আমাদের 10ns (100MHz) ঘড়ির সময় এবং এটি প্রতিটি সম্পদ কতটা ব্যবহার করে তা পূরণ করে।

এর সমন্বয়ে, আমাদের সিনথেসিস রিপোর্ট, এবং আমাদের ডেটাফ্লো বিশ্লেষণ, আমরা দেখতে পাই যে এটি 317338 ঘড়ি চক্র * 10ns ঘড়ির সময় * 14 পাইপলাইন পর্যায় = 0.04442732 সেকেন্ড সময় নেয়। এর মানে হল যে আমাদের ইমেজ প্রসেসিং দ্বারা যোগ করা মোট বিলম্ব একটি সেকেন্ডের এক বিংশেরও কম (যখন টার্গেটেড 100MHz এ ক্লক করা হয়)।

ধাপ 7: ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা

ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে
ভিভাডোতে আইপি লাইব্রেরি যুক্ত করা হচ্ছে

আপনার সংশ্লেষিত আইপি ব্লক ব্যবহার করার জন্য আপনাকে এটি ভিভাদোতে যুক্ত করতে হবে।

ভিভাডোতে আইপি ক্যাটালগে গিয়ে আপনার প্রকল্পে একটি আইপি সংগ্রহস্থল যুক্ত করুন এবং "অ্যাড রিপোজিটরি …" নির্বাচন করে ডান ক্লিক করুন।

আপনার ভিভাদো এইচএলএস প্রজেক্ট ডিরেক্টরিতে নেভিগেট করুন এবং আপনার সমাধান ডিরেক্টরি নির্বাচন করুন।

এটি পাওয়া আইপি রিপোর্ট করা উচিত।

ধাপ 8: একটি আপগ্রেড করা

আপগ্রেড করা
আপগ্রেড করা
আপগ্রেড করা
আপগ্রেড করা
আপগ্রেড করা
আপগ্রেড করা

কখনও কখনও আপনাকে আপনার এইচএলএস ব্লকে ভিভাডো ডিজাইনে অন্তর্ভুক্ত করার পরে পরিবর্তন করতে হবে।

এটি করার জন্য, আপনি পরিবর্তনগুলি করতে পারেন এবং পুনরায় সংশ্লেষ করতে পারেন এবং উচ্চতর সংস্করণ নম্বর দিয়ে আইপি রপ্তানি করতে পারেন (প্রধান/ছোট সংস্করণ নম্বর পরিবর্তনের বিষয়ে পূর্ববর্তী ধাপে বিস্তারিত দেখুন)।

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

এই মুহুর্তে একটি ডিস্কের উপর একটি আইপি পরিবর্তন করা হয়েছে এমন তথ্য সহ একটি উইন্ডো উপস্থিত হওয়া উচিত এবং এটি আপনাকে "আপগ্রেড সিলেক্টেড" বোতামের সাহায্যে আপডেট করার বিকল্প প্রদান করে। তারপরে সেই বোতাম টিপলে স্বয়ংক্রিয়ভাবে পুরানো আইপি নতুনের সাথে প্রতিস্থাপন হবে, অন্যথায় আরও কাজের প্রয়োজন হতে পারে।

ধাপ 9: অতিরিক্ত বিবরণ এবং তথ্য

HLS সিন্থেসিস কিভাবে কাজ করে এবং আপনি এর সাথে কি করতে পারেন সে সম্পর্কে আরও তথ্য প্রদান করে।

একটি এইচএলএস সংশ্লেষিত আইপি ব্লক ব্যবহার করে একটি প্রকল্পের উদাহরণের জন্য, এই নির্দেশাবলী দেখুন।

ধাপ 10: আউটপুট এবং ইনপুট

আউটপুট এবং ইনপুট
আউটপুট এবং ইনপুট
আউটপুট এবং ইনপুট
আউটপুট এবং ইনপুট

চূড়ান্ত আইপি ব্লকের আউটপুট এবং ইনপুটগুলি একটি বিশ্লেষণ থেকে নির্ধারিত হয় যা সিন্থেসাইজার উপরের ফাংশনে এবং বাইরে ডেটা প্রবাহের কাজ করে।

ভিএইচডিএল বা ভেরিলগের মতো, এইচএলএস আপনাকে আইপি -র মধ্যে সংযোগ সম্পর্কে বিশদ উল্লেখ করতে দেয়। এই লাইনগুলি এর উদাহরণ:

void 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 = CONSUL_SONT_SONT_ CONSUL_ CONSUL_ CONSUL_CONST = CONST = CONST_B0

আপনি দেখতে পারেন কিভাবে আইপি ব্লকে প্রদর্শিত পোর্টগুলি এই নির্দেশাবলীর দ্বারা প্রভাবিত হয়।

ধাপ 11: AXI নিবন্ধন ইন্টারফেসিং

AXI রেজিস্টার ইন্টারফেসিং
AXI রেজিস্টার ইন্টারফেসিং

আপনার আইপি ব্লক থেকে PS এ ইনপুট/আউটপুট পাওয়ার জন্য একটি AXI ইন্টারফেসের মাধ্যমে এটি করার একটি ভাল উপায়।

আপনি আপনার এইচএলএস কোডে এটি নির্দিষ্ট করতে পারেন, অফসেটগুলি সহ যা পরে মান অ্যাক্সেস করতে ব্যবহার করা হবে:

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

#pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14

#pragma HLS INTERFACE s_axilite port = y bundle = CONTROL_BUS offset = 0x1C #pragma HLS dataflow

x = 42;

y = 0xDEADBEEF; }

একবার ভিভাডোতে সঠিকভাবে সংযুক্ত হয়ে গেলে, আপনি ভিভাদো এসডিকে এই কোডটি ব্যবহার করে মানগুলি অ্যাক্সেস করতে পারেন:

#অন্তর্ভুক্ত "পরামিতি। h"

#ডিফাইন 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 বস্তুগুলি আসলে কমান্ডের মধ্যে ছোট বাফার হিসাবে প্রয়োগ করা হয়। একটি ফাংশনে একটি ইনপুট হিসাবে একটি ছবি ব্যবহার করে এটি "গ্রাস" করে এবং এটি আর ব্যবহারযোগ্য করে না। (অতএব ডুপ্লিকেট কমান্ডের প্রয়োজন)

প্রস্তাবিত: