এত উচ্চ পিক্সেলের ক্লক ফ্রিকোয়েন্সিতে ভিজিএ প্রদর্শনগুলি চালনা করা কীভাবে সম্ভব?


12

আমি একটি 80x30 পাঠ্য মোডে 640x480 ভিজিএ প্রদর্শন চালিত করতে আলাদা উপাদান ব্যবহার করে একটি ডিজিটাল সার্কিটের সাথে কাজ করছি।

640x480 ডিসপ্লের জন্য, পিক্সেল ক্লকটি 25.175MHz, যা প্রায় 40ns এর সময়কাল ধারণ করে। আমি বুঝতে পারি না যে প্রায়শই আমি কীভাবে এই ডিসপ্লেতে একটি নতুন পিক্সেল সরবরাহ করব।

আমার সার্কিটের জন্য প্রাথমিক স্থাপত্যটি নিম্নরূপ:

  1. অনুভূমিক পিক্সেলের জন্য বাইনারি কাউন্টারটি 25.175MHz থেকে 800 পর্যন্ত গণনা করা হয় (সামনের বারান্দা, সিঙ্ক, পিছনের বারান্দার জন্য 640 দৃশ্যমান পিক্সেল + 160)। 800 এ, ইনক্রিমেন্ট উল্লম্ব লাইন কাউন্টার (এবং 525 লাইনে রিসেট করুন)

  2. অনুভূমিক এবং উল্লম্ব অবস্থান ব্যবহার করে, বর্তমান অক্ষরের x, y স্থানাংক অর্জন করুন।

  3. ASCII চরিত্রটি পুনরুদ্ধার করতে ভিডিও মেমরিতে অক্ষরের x, y স্থানাঙ্ক ব্যবহার করে।

  4. অক্ষরের জন্য বিট প্যাটার্ন পেতে অক্ষরে রমের সূচকে ASCII অক্ষর ব্যবহার করুন

  5. পিক্সেল ঘড়ির ফ্রিকোয়েন্সিতে স্বতন্ত্র বিটগুলিতে অক্ষরের 8 পিক্সেল লাইনকে রূপান্তর করতে সিরিয়াল শিফট রেজিস্টার এর সমান্তরাল ব্যবহার করুন

আপনি যদি চেইনটি অনুসরণ করেন তবে এটি যায়: পাল্টা -> র‌্যাম -> রম -> সিরিয়াল শিফট রেজিস্টারের সমান্তরাল

আমি যে দ্রুততম উপাদানগুলি খুঁজে পেতে পারি তা ব্যবহার করে, প্রসারণে বিলম্ব হয় এবং অ্যাক্সেস সময় প্রায় 15ns + 20ns + 70ns + 15ns = 120ns যোগ করে, 25MHz এর 40ns সময়কালের চেয়ে অনেক বেশি।

এমনকি উচ্চতর রেজোলিউশন এবং রিফ্রেশ রেটে, আপনার কাছে 100 মেগাহার্টজ এর চেয়েও ভাল পিক্সেল ঘড়ি থাকতে পারে যা 10ns পিরিয়ডের হবে।

আপনার সিস্টেমে অন্য সমস্ত সংকেত বিবেচনা না করে এমনকি যখন র‌্যাম / রম এর অ্যাক্সেসের সময়টি ইতিমধ্যে এর থেকে উপরে রয়েছে তখন প্রতি 10ns ডিসপ্লেতে কীভাবে নতুন পিক্সেল সরবরাহ করা সম্ভব?


7
আপনি ডেডিকেটেড ভিডিও র‌্যাম এবং এমন ঘড়ি ব্যবহার করেন যা সরাসরি আপনার ভিডিও সিগন্যালে আসে। আপনি প্রকৃতপক্ষে এটি প্রদর্শন করার অনেক আগে কী প্রদর্শিত হবে তা নির্ধারণের জন্য আপনি কাজ করেন ।
হৃদয়

2
ম্যাক্সিমাইট সম্পর্কে পড়ুন । এটি একটি এমসিইউর পেরিফেরিয়াল হার্ডওয়্যার এবং একটি ভিজিএ বন্দর চালানোর জন্য কয়েকটি প্রতিরোধক ব্যবহার করে। তিনি যে PIC32 পেরিফেরিয়াল ব্যবহার করেন তা পরীক্ষা করে শুরু করুন। ঠিকভাবে কাজ করে. (আমার এখানে একটি ম্যাক্সিমাইট আছে))
জানক

"ডন ল্যাঙ্কাস্টার" র "দ্য সস্তা ভিডিও কুকবুক"
জেসেন

উত্তর:


17

এই চ্যালেঞ্জিংয়ের সন্ধানের দুটি প্রধান কারণ রয়েছে।

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

তবে এর পরে, আপনি এটিক্যাল পদ্ধতিতে ব্যবহার করছেন। বিশেষত, আপনার পদ্ধতির pipelinedঅর্থ এই নয় যে আপনার বিরতি নির্ধারণ করার সময় আপনাকে একাধিক বিলম্ব সংযুক্ত করতে হবে , এবং এইভাবে রেট দিন।

বিপরীতে, সিঙ্ক্রোনাস ডিজিটাল ডিজাইন যা গতি অর্জনের চেষ্টা করে নিবন্ধকের মধ্যে যতটা সম্ভব সম্ভব করার চেষ্টা করে।

যদিও বিশদগুলি সম্ভবত কিছুটা আলাদা হবে, অসতভাবে বললে এটি এরকম কিছু কাজ করবে:

  • আপনি ঠিকানাটি বৃদ্ধি বা পুনরায় সেট করুন, তারপরে এটি একটি রেজিস্টারে যায়।
  • আপনি ঠিকানাটি সিঙ্ক্রোনাস মেমোরিতে ল্যাচ করুন
  • আপনি সিঙ্ক্রোনাস মেমরির আউটপুট ল্যাচ করেন
  • আপনি এটি সিঙ্ক্রোনাস অক্ষর জেনারেটরের ঠিকানায় ল্যাচ করুন
  • আপনি অক্ষর জেনারেটরের আউটপুট আউটপুট রেজিস্টারে ল্যাচ করুন
  • প্যালেট চেহারাটি প্রয়োগ করুন ...
  • সিঙ্ক্রোনাস ড্যাকের মধ্যে ...

আপনি যখন কোনও কাজটি এভাবে ভেঙে ফেলেন, আপনি কেবল একটি সংমিশ্রণ বিলম্ব এবং কিছু প্রচারের বিলম্ব পাবেন এবং সেটআপটি নিবন্ধন করুন এবং ঘড়ির মধ্যে ফিট হওয়ার জন্য প্রয়োজনীয় সময় রাখবেন hold

এইভাবে নির্মিত একটি নকশায় আউটপুট তৈরি করতে অনেকগুলি ঘড়ি লাগবে - বিলম্বিতা প্রকৃতপক্ষে খাঁটি মিশ্রণ নকশার চেয়ে বেশি হবে। তবে এটি একটি আরও দ্রুত ঘড়ির প্রতিটি চক্রের একটি নতুন সঠিক আউটপুট উত্পাদন করে।

আরে, এটি ভিডিও, সিআরটি পিক্সেল কাউন্টারটির পিছনে এক ডজন পিক্সেল আঁকছে কিনা তা আসলেই কিছু যায় আসে না - আপনি অবশ্যই এটি সিঙ্ক সিগন্যালের সময় বিবেচনায় রাখেন যাতে তথ্যগুলি আসলে যখন তুলনা করে ঠিক তখন ড্যাক থেকে বেরিয়ে আসে।

অনুশীলনে, প্রায় সমস্ত জটিল ডিজিটাল সিস্টেমগুলি এইভাবে কাজ করে, যেমন এটি একটি দুর্দান্ত ধারণা - ঠিক আগে অবধি কোনও পাইপলাইনযুক্ত সিপিইউ কোনও পূর্ববর্তী কম্পিউটেশনাল ফলাফল বা শর্তসাপেক্ষ শাখার উপর নির্ভরতা হিট না করে ... তারপরে বিষয়গুলি আকর্ষণীয় হয়ে উঠবে, কারণ তারা এই বিষয়ে কথা বলতে চাইবে ডিজিটাল সিস্টেমের ক্লাসের পরবর্তী বক্তৃতায় - তবে ভাগ্যক্রমে আপনার ভিজিএ পরিস্থিতি অনেক সহজ, বিশেষত যদি আপনি পর্দা আঁকানোর সময় চরিত্রের বাফার পরিবর্তন হয় তবে আপনি টিয়ার এফেক্টগুলির বিষয়ে এখনও চিন্তা করবেন না।

ব্যবহারিক বিষয় হিসাবে যদি আপনি এটি তৈরি করতে চান তবে এটি এফপিজিতে করুন। আপনি যদি অভ্যন্তরীণগুলি ব্যবহার করেন তবে আপনি যদি বাহ্যিক স্মৃতি ব্যবহার করেন তবে সিঙ্ক্রোনাস আইও নিবন্ধভুক্ত করলে এটি আপনার কাছে সমকালীন স্মৃতিগুলিকে প্রবলভাবে জোর করবে। আপনি একটি উপযুক্ত নকশার দিকে ঝুঁকে যাবেন, ফ্যাব্রিকটি নিজেই আপনার বিচ্ছিন্ন অংশগুলির চেয়ে দ্রুততর হবে এবং অবশ্যই যদি আপনি কোনও ভুল করেন তবে আপনাকে কেবল দীর্ঘ সময় পুনরায় তারের ব্যয় করার পরিবর্তে পুনরূদ্ধার করার সময় আপনার থাম্বগুলি পাকস্থলীর প্রয়োজন need ।


"বিশেষত যদি আপনি পর্দা আঁকানোর সময় চরিত্রের বাফার পরিবর্তিত হয় তবে ছিঁড়ে যাওয়া প্রভাবগুলির বিষয়ে চিন্তা না করেন" - তাই ভিডিও কপো প্রসেসরের প্রথম দিন থেকেই কপিরোসেসরদের মূল প্রক্রিয়াটি জানাতে একটি উপায় ছিল যে তারা না বর্তমানে তাদের স্মৃতি স্ক্রিনে ফেলে দিচ্ছে এবং যদি তারা ভিডিও বাফারটি পরিবর্তন করতে চায় তবে তাদের এখনই করা উচিত।
জন ডিভোরাক

আমি মনে করি আপনি এটি অত্যধিক জটিল করছেন। তিনি ইতিমধ্যে জানিয়ে দিয়েছেন যে তিনি একটি 8-বিট শিফট রেজিস্টার ব্যবহার করছেন যা পিক্সেল ঘড়িতে প্রতি বিট আউটপুট দেয়। সম্ভবত এটি ল্যাচ সহ একটি 8-বিট শিফট রেজিস্টার। তার অর্থ তাকে কেবল একবারে 8 পিক্সেল ঘড়ি দিয়ে একটি নতুন বাইট আনতে হবে, যার জন্য তার হার 3.125MHz। এটি আপনাকে শিফট রেজিস্টার ল্যাচগুলিতে ডেটা পেতে 320ns এর সকলকে দেয়, যা তিনি যে 120s এর চেয়ে বেশি বলেছিলেন তার চেয়ে অনেক বেশি দীর্ঘ।
ক্রিস_এফ

খুব সাধারণ নিম্ন রেজোলিউশনের একরঙা ক্ষেত্রে, হ্যাঁ, বাইটগুলির সময় নির্ধারণ করা খুব চ্যালেঞ্জের মতো হবে না, তবে প্রশ্নের মূল অংশটি ছিল যে প্রশ্নকর্তা কীভাবে অ-তুচ্ছ রেজোলিউশনের আদর্শ "আসল" সিস্টেমগুলির কার্য সম্পাদন বুঝতে চেষ্টা করেছিলেন? সম্ভব. এবং উত্তরটি অন্যান্য সমস্ত দরকারী ডিজিটাল সিস্টেমগুলির মতো: দ্রুত প্রযুক্তি এবং পাইপলাইনের সিঙ্ক্রোনাস ডিজাইন।
ক্রিস

2

আমি যে দ্রুততম উপাদানগুলি খুঁজে পেতে পারি তা ব্যবহার করে, প্রসারণে বিলম্ব হয় এবং অ্যাক্সেস সময় প্রায় 15ns + 20ns + 70ns + 15ns = 120ns যোগ করে, 25MHz এর 40ns সময়কালের চেয়ে অনেক বেশি।

আপনি ভুলে গেছেন যে কোনও গ্রাফিক্স অ্যাডাপ্টার কেবল কখনও একক পিক্সেল আঁকতে পারে না - তবে কমপক্ষে একটি সম্পূর্ণ স্ক্যান লাইন। সুতরাং, এটি একটি সম্পূর্ণ পাইপলাইনেবল সমস্যা হবে।

এছাড়াও, ভুলে যাবেন না যে এখন পর্যন্ত পাঁচ দশক ধরে ভিডিও তৈরির হার্ডওয়্যার তৈরি হয়েছে। আপনার সমস্যাটি সাধারণত একটি বিশেষ ধরণের র‍্যামের সাথে সমাধান করা হবে, যার মধ্যে আপনি একটি পোর্টে আপনার চিঠিগুলি রেন্ডার করেন এবং যা ধারাবাহিকভাবে একটি ভিডিও সংকেত ডএএকে পাঠ করা হয়। এই হার্ডওয়্যারটি আপনি যা দেখছেন তার চেয়ে দ্রুততর উপায়।

আমার সার্কিটের জন্য প্রাথমিক স্থাপত্যটি নিম্নরূপ:

  1. অনুভূমিক পিক্সেলের জন্য বাইনারি কাউন্টারটি 25.175MHz থেকে 800 পর্যন্ত গণনা করা হয় (সামনের বারান্দা, সিঙ্ক, পিছনের বারান্দার জন্য 640 দৃশ্যমান পিক্সেল + 160)। 800 এ, ইনক্রিমেন্ট উল্লম্ব লাইন কাউন্টার (এবং 525 লাইনে রিসেট করুন)

  2. অনুভূমিক এবং উল্লম্ব অবস্থান ব্যবহার করে, বর্তমান অক্ষরের x, y স্থানাংক অর্জন করুন।

না, তুমি কেন এমন করবে? আপনি কেবল নিজের সারির পিক্সেলটিকে স্মৃতির একটি সংক্ষিপ্ত অঞ্চলে রেখেছিলেন এবং লম্বাভাবে এটি আপনার ড্যাকের কাছে রেখে দিতেন - এটি যদি কোনও সিপিইউ / এমসিইউ বাস্তবায়ন সম্পর্কিত হয় তবে আপনি নিজের সিপিইউকে এটি করতে দেবেন না, তবে একটি ডিএমএ ইউনিটও প্রোগ্রাম করেছেন অন্যটির পরে একের মূল্য গ্রহণ করা এবং কোনও সিপিইউ কোর ইন্টারঅ্যাকশন ছাড়াই একটি সমান্তরাল ডেটা পোর্ট যেমন এটি রেখে দেওয়া nothing

  1. ASCII চরিত্রটি পুনরুদ্ধার করতে ভিডিও মেমরিতে অক্ষরের x, y স্থানাঙ্ক ব্যবহার করে।

আহ, আপনি ফ্লাই রেন্ডার করতে চান - ভাল পছন্দ, তবে র্যামের আধুনিক ব্যয়ে অস্বাভাবিক। পরিবর্তে, আপনি কেবল আগেই ফ্রেম বাফারে অক্ষরটি রেন্ডার করতে চান, বা যদি আপনার ডিভাইসটি অত্যন্ত স্লিম হয় তবে সরাসরি পাইপ আউট করুন (উপরে আমার ডিএমএ ব্যাখ্যাটি দেখুন) ড্যাকের অক্ষর সারিটি।


1
যদিও আধুনিক স্টাফ প্রাক-রেন্ডার করা ফ্রেমবাফারগুলিকে পছন্দ করে, আপনি যদি খুব বেশি র্যাম ছাড়াই কাজ করার চেষ্টা করছেন তবে এগুলি অবশ্যই খারাপ পছন্দ। যদি আপনি এটি কোনও এফপিজিএতে করে থাকেন তবে আপনি কেবল ডিএমএ স্টেট মেশিনটিকে চরিত্রের সেল ম্যাপ থেকে ঠিকানা নিতে এবং তারপরে সংশ্লিষ্ট চরিত্রের গ্লাইফগুলি থেকে পড়তে পারেন।
আর .. গীটহাব স্টপ হেল্পিং আইসিসি

এখানে সম্পূর্ণ সম্মত! অতএব, তৃতীয় প্রশ্নের আমার উত্তর বিভাগ।
মার্কাস মুলার

2

পাইপলাইনিং (যা আপনার যা করা উচিত তা হ'ল) ​​বাদে আপনি বড় কিছু মিস করছেন ...

সমান্তরাল, সিরিয়াল আউট শিফট রেজিস্টার ঘড়িগুলি বিন্দুতে 25 বিজোড় মেগাহার্টজ, নিশ্চিত, তবে আপনার অক্ষরগুলি যদি 8 পিক্সেল প্রশস্ত বলা হয় তবে এর ইনপুটটি কেবলমাত্র ~ 3.2MHz এ যা ভিজিএ যুগের এলএস সিরিজের পক্ষে সহজেই পৌঁছায় that বর্তমানের সাথে শিফট রেজিস্টারটি শেষ হলে আপনার পরবর্তী বাইট প্রস্তুত হওয়া দরকার (এটি এখানে পাইপলাইন আসে)।

পাঠ্য বাফার এবং সিজি রমটি চালনা করতে তার 1/8 তম এ 25 মাইগাহার্টজ এবং একটি মেমরি ঘড়ি জেনারেট করুন, তারপরে সেই মেমরি এবং সিজি রম অ্যাক্সেস স্টাফকে পাইপলাইন করুন।

আরও একটি কৌশল, পাঠ্য বাফার আউটপুট প্রতিটি রেখার জন্য পাঠ্যের কোনও রেখার মধ্যেই পুনরাবৃত্তি হবে, সুতরাং আপনি সম্ভবত 80 বাইট পাঠ্যটিকে একটি রিং বাফারে ঘড়ি দিতে পারেন এবং তারপরে পরবর্তী 7 লাইনের জন্য র‌্যাম পড়া বন্ধ করতে পারেন (একটি 8 ধরে নিচ্ছেন) লাইন চরিত্র), এটি আপনাকে সিপিইউ ব্যবহার করার জন্য মেমরিটি মুক্ত করতে দেয়, জিনিসটির পাশে 80 বাইট র‌্যাম লাগাতে হবে।


1

স্পষ্টতই যে কাজ করে না; আপনার পাইপলাইন লাগবে

1) অক্ষরগুলি স্মৃতিতে স্বচ্ছন্দভাবে সংরক্ষণ করুন। উপরের বাম দিকে শুরু করুন।

2) ফাঁকা বিরতিতে একটি চরিত্র আনুন। মেমরি ক্রমে অক্ষর আনতে চালিয়ে যান।

3) পাইপলাইন প্রতিটি ডিকোড করা অক্ষর প্লাস লাইন সূচকে রম into

4) পাইপলাইন একটি বাফার মধ্যে ROM আউটপুট।

5) একটি শিফট রেজিস্টার মধ্যে বাফার পাইপলাইন। এ থেকে 40ns ব্যবধানে অবিচ্ছিন্নভাবে পিক্সেলগুলি পড়ুন।

(এর দ্বারা বোঝা যায় যে প্রতি 320ns আপনি শিফট রেজিস্টারে একটি নতুন অক্ষর লোড করতে হবে, এটি সিস্টেমের পুরো অংশটি পাইপলাইনে না করেও সক্ষম হতে পারে))

)) অনুভূমিক শূন্যতার সময়, হয় লাইনের শুরুতে ফিরে যান বা পরবর্তী অক্ষরটিতে এগিয়ে যান (অর্থাত্ পরের লাইনের শুরু।)

বোনাস বৈশিষ্ট্য: যেহেতু আপনার প্রতি 320ns এ কেবল একটি চরিত্রের প্রয়োজন তাই আপনি একটি বর্ণ + রঙের জোড়ও পড়তে পারেন এবং এমএসডোস-স্টাইল বা স্পেকট্রাম-স্টাইল বর্ণের অক্ষরগুলিও করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.