সুচিপত্র:

বাইনারি টু ডেসিমেল ম্যাচার গেম: 10 টি ধাপ
বাইনারি টু ডেসিমেল ম্যাচার গেম: 10 টি ধাপ

ভিডিও: বাইনারি টু ডেসিমেল ম্যাচার গেম: 10 টি ধাপ

ভিডিও: বাইনারি টু ডেসিমেল ম্যাচার গেম: 10 টি ধাপ
ভিডিও: Binary To Decimal Conversion Bangla Tutorial ।। বাইনারি থেকে ডেসিমাল ।। EduLectureBd 2024, জুলাই
Anonim
Image
Image
ঘড়ি বিভাজক সেট আপ
ঘড়ি বিভাজক সেট আপ

এই নির্দেশযোগ্য আমাদের বাইনারি থেকে দশমিক ম্যাচিং গেম তৈরির জন্য প্রয়োজনীয় প্রক্রিয়া এবং মডিউল দেখাবে। Seconds০ সেকেন্ডের মধ্যে, ব্যবহারকারীরা সুইচ টগল করে এবং অনুমান বোতাম দিয়ে জমা দিয়ে সাতটি সেগমেন্ট ডিসপ্লেতে র্যান্ডমভাবে উৎপন্ন দশমিক সংখ্যাগুলিকে বাইনারিতে অনুবাদ এবং ইনপুট করবে। একবার সম্পন্ন হলে, একটি চূড়ান্ত স্কোর প্রদর্শিত হবে এবং তারপর আবার খেলতে পুনরায় সেট করুন।

বাইনারি এবং কুইক রিফ্লেক্স বোঝা ভাল করার জন্য উপকারী, কিন্তু রিসেট বোতামটি দেওয়া হয় যদি কেউ তাত্ক্ষণিকভাবে আবার চেষ্টা করতে চায়।

ধাপ 1: ক্লক ডিভাইডার সেট আপ করা

এই পুরো প্রকল্পের মেরুদণ্ড এই গিজমোর সমস্ত অংশের সঠিক সিঙ্ক্রোনাইজেশন থেকে আসে। আমাদের ফিনাইট স্টেট মেশিন অভ্যন্তরীণ ঘড়ি ব্যবহার করে, কিন্তু সাতটি সেগমেন্ট ডিসপ্লে এবং টাইমারকে অবশ্যই ঘড়ির পরিবর্তিত সংস্করণ ব্যবহার করতে হবে।

এই "নতুন ঘড়ি" প্রতিটি নির্দিষ্ট উপাদানের জন্য প্রয়োজনীয় একটি নির্দিষ্ট ফ্রিকোয়েন্সি অর্জনের জন্য অভ্যন্তরীণ ঘড়িকে একটি কাঙ্ক্ষিত সময়ের দ্বারা ভাগ করা থেকে আসে। এটি পূর্ববর্তী ল্যাবগুলিতে এবং অভিজ্ঞতা থেকে করা হয়েছে, আমরা জানি যে টাইমারের "এক" সংখ্যা 0.1 Hz সেট করা আছে, এবং "দশ" ডিজিট হচ্ছে 1 Hz

ইনপুট: ClkIn, বিভাজক (32 বিট)

আউটপুট: ClkOut

ধাপ 2: একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)

একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)
একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)
একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)
একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)
একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)
একটি সসীম-রাজ্য মেশিন তৈরি করা (FSM)

আমাদের ফিনিট-স্টেট মেশিনে, আমরা সিদ্ধান্ত নিয়েছি যে পাঁচটি ইনপুট (স্টার্ট, রিসেট, অনুমান, সমান, টাইমআউট) সহ পাঁচটি স্টেট (স্টার্ট, ডিসপ্লে, চেক, স্কোর এবং এন্ড) প্রয়োজন হবে। আমাদের স্টেট মেশিনে একমাত্র আউটপুট হল একটি 3 বিট সংখ্যা যা প্রতিনিধিত্ব করে যে ব্যবহারকারী কোন অবস্থায় আছে (000, 001, 011, 101, 100) নীচের রাজ্যের ক্ষেত্রে।

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

স্টার্ট স্টেট (000)

স্টার্ট স্টেট হল যেখানে স্টার্ট ইনপুট বেশি না হওয়া পর্যন্ত ব্যবহারকারী শুরু করবেন, এটি সেই রাজ্য যেখানে পৌঁছানো হবে যখনই রিসেট বোতাম টিপুন।

গেম স্টেট (001)

গেম স্টেট হল গেমের শুরু, যেখানে এলোমেলো সংখ্যা তৈরি হয় এবং ব্যবহারকারী একটি ইনপুট তৈরি করতে সুইচ টগল করে। একবার অনুমান বোতাম টিপলে, গেমটি চেক স্টেটে স্থানান্তরিত হয়।

চেক স্টেট (011)

এই অবস্থা যেখানে তুলনাকারী ব্যবহার করা হচ্ছে, যা ব্যবহারকারীর ইনপুটের মান এবং এলোমেলোভাবে উৎপন্ন সংখ্যার তুলনা করবে। যদি জমা সঠিক হয়, সমান মান উচ্চ এবং FSM স্কোর রাজ্যে যায়; যাইহোক, যদি জমা ভুল হয়, FSM ডিসপ্লে স্টেটে ফিরে আসে যতক্ষণ না জমা সঠিক হয়।

এই চেক স্টেটটি অন্যদের তুলনায় তুলনামূলকভাবে দ্রুত ঘটে, কারণ এটি কেবল ততক্ষণ ঘটছে যতক্ষণ চেক বোতাম টিপে থাকে

স্কোর স্টেট (101)

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

শেষ অবস্থা (100)

একবার 60 সেকেন্ডের টাইমার শেষ হয়ে গেলে, টাইমআউট ইনপুট বেশি হবে এবং ব্যবহারকারী শেষ অবস্থায় পৌঁছায় যেখানে চূড়ান্ত স্কোর প্রদর্শিত হয়। রিসেট ইনপুটটি তখন চাপা হবে এবং এফএসএম আবার স্টার্ট স্টেটে শুরু হবে।

ইনপুট: Clk, rst, start, guess, equal, timeout

আউটপুট: অবস্থা (3 বিট)

ধাপ 3: সাত সেগমেন্ট ডিসপ্লে ম্যাপিং

সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং
সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং
সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং
সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং
সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং
সেভেন সেগমেন্ট ডিসপ্লে ম্যাপিং

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

FSM গেম স্টেটে প্রবেশ না করা পর্যন্ত ডিসপ্লে সব 0 দেখায়; যাইহোক, শেষ অবস্থায়, প্রদর্শনটি কেবল ব্যবহারকারীর স্কোর প্রদর্শন করা উচিত।

যেহেতু আমরা সাতটি সেগমেন্ট ডিসপ্লের চারটি ডিজিট ব্যবহার করছি, তাই আমাদের প্রতিটি এনোডের মাধ্যমে 300 Hz এ দ্রুত চক্র করতে হবে যাতে আমরা সবসময় আলোকিত হতে পারি।

ইনপুট: ক্লক, সেভেন সেগমেন্ট

আউটপুট: ক্যাথোড (7 বিট), অ্যানোড (4 বিট)

ধাপ 4: তুলনাকারী তৈরি করা

তুলনাকারী তৈরি করা
তুলনাকারী তৈরি করা

এই সাবমডিউলটি চেক স্টেটে ব্যবহৃত হয় কিভাবে এটি 7 বিট বাইনারি ইনপুট করা অনুমান বনাম প্রকৃত দশমিক মানের সাথে তুলনা করছে।

আমাদের একটি if স্টেটমেন্ট ছিল যা ইনপুট এবং দুটি আউটপুট উভয়কেই মূল্যায়ন করেছিল যার উপর নির্ভর করে সমান মান বেশি বা কম। এই মডিউলটি যতটা গুরুত্বপূর্ণ, এটি এই প্রকল্পে ডিজাইন করা সহজ প্রোগ্রামগুলির মধ্যে একটি।

ইনপুট: সুইচ (8 বিট), সংখ্যা (8 বিট)

আউটপুট: EQ

ধাপ 5: একটি টাইমার সেট আপ

একটি টাইমার সেট আপ
একটি টাইমার সেট আপ
একটি টাইমার সেট আপ
একটি টাইমার সেট আপ

আমাদের টাইমার মূলত দুটি ভিন্ন কাউন্টার যা বিভিন্ন হারে বাড়ছে। "এক" মানের একটি কাউন্টার, (প্রথম সাত সেগমেন্ট ডিসপ্লে) এবং "দশের" মানের জন্য একটি কাউন্টার (সাত সেগমেন্ট ডিসপ্লেতে দ্বিতীয় সংখ্যা)। প্রতিটি অঙ্ক ঘড়ির ক্রমবর্ধমান প্রান্তের উপর ভিত্তি করে, এবং একবার কাউন্টার 60 সেকেন্ডে পৌঁছে গেলে, টাইমআউট বেশি হবে এবং খেলা শেষ হবে এবং শুরু অবস্থায় ফিরে আসবে।

ইনপুট: Clk, state (3 bit), start

আউটপুট: বর্তমান (8 বিট), সময়সীমা

ধাপ 6: সিউডো র্যান্ডম নম্বর জেনারেটর ডিজাইন করা

সিউডো র্যান্ডম নম্বর জেনারেটর ডিজাইন করা
সিউডো র্যান্ডম নম্বর জেনারেটর ডিজাইন করা

বিশেষ করে এই ক্ষেত্রে একটি সংখ্যা জেনারেটরের আরেকটি বিকল্প পদ্ধতি হল 0-99 (বাইনারিতে) থেকে একটি পুনরাবৃত্তিমূলক কাউন্টার থাকা যা ইনপুট বেশি হলে গণনা করা সংখ্যাটি আউটপুট করে, কারণ এটি একটি LFSR ব্যবহারের প্রয়োজনীয়তা দূর করবে।

সংখ্যাটি অভ্যন্তরীণ ঘড়ির প্রতিটি ক্রমবর্ধমান প্রান্তকে (10 ন্যানো-সেকেন্ড) এবং একটি মাইক্রোসেকেন্ডে 100 টি সংখ্যার মাধ্যমে চক্র পরিবর্তন করে। যখনই ব্যবহারকারী নম্বর জেনারেটর থেকে একটি নতুন নম্বর চায়, তখন এটি যে নম্বরটি ছিল তা আউটপুট করে, যদিও এই প্রক্রিয়াটি পুরোপুরি এলোমেলো নয়, এই প্রক্রিয়া থেকে সম্পর্কিত আউটপুট খুঁজে পাওয়ার সম্ভাবনা ছদ্ম-এলোমেলো হওয়ার জন্য যথেষ্ট কম।

ইনপুট: Clk, changenum, সমান

আউটপুট: সংখ্যা (8 বিট)

ধাপ 7: একটি কনভার্টার তৈরি করা

কনভার্টার তৈরি করা
কনভার্টার তৈরি করা

একটি প্রয়োজনীয় উপাদান হল কনভার্টার, যা আমরা মূল হেক্সাডেসিমালের পরিবর্তে সাত সেগমেন্ট ডিসপ্লেতে দশমিক সংখ্যা প্রদর্শন করতে ব্যবহার করতাম। যদিও উভয় সংখ্যা একটি 7 বিট বাইনারি সংখ্যার উপর ভিত্তি করে তৈরি করা হয়েছে, আমরা হেক্সাডেসিমালকে দশমীতে রূপান্তর করার জন্য মনোনীত একটি সম্পূর্ণ মডিউল তৈরি করেছি।

উদাহরণস্বরূপ, যদি স্কোরের জন্য আমাদের চূড়ান্ত আউটপুট 0010001 (সতেরো) হয়, সাতটি সেগমেন্ট ডিসপ্লে 17 এর দশমিক সংখ্যার পরিবর্তে 11 এর হেক্সাডেসিমাল মান দেখাবে।

ইনপুট: নুমিন (8 বিট)

আউটপুট: Numout (8 বিট)

ধাপ 8: গেম মডিউলে সবকিছু একসাথে রাখা

গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা
গেম মডিউলে সবকিছু একসাথে রাখা

আমাদের উপাদানগুলির জন্য, আমরা ব্যবহারকারীর টগল করার জন্য 0-6 প্রয়োজনীয় সুইচ ব্যবহার করেছি, তিনটি বোতাম দিয়ে শুরু, রিসেট এবং অনুমানের জন্য ব্যবহারকারীর ইনপুট হিসাবে কাজ করে। সাতটি সেগমেন্ট ডিসপ্লে এবং ঘড়ির উপাদানগুলিও আমরা পূর্ববর্তী ল্যাবগুলি থেকে করেছি এমন উপাদান কিন্তু এই প্রকল্পের সাথে মানানসই করার জন্য পরিবর্তন করতে হয়েছিল।

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

যখন গেমটি হচ্ছে, ব্যবহারকারীকে সুইচ করার জন্য 7 LED গুলি জ্বালানো হয়, এবং যখন গেমটি শেষ হয়, আমরা LED গুলিকে ফ্ল্যাশ করার জন্যও প্রোগ্রাম করেছি

ইনপুট: সুইচ (8 বিট), ক্লক, রিসেট, শুরু, অনুমান

আউটপুট: ক্যাথোড (7 বিট), অ্যানোড (4 বিট), এলইডি (7 বিট)

ধাপ 9: অতিরিক্ত সমস্যা দেখা দিয়েছে

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

স্কোরটি প্রথমে আমাদের কিছুটা কষ্ট দেয় কারণ আমরা FSM স্কোর অবস্থায় থাকাকালীন এক পয়েন্ট বাড়ানোর জন্য সেট করেছিলাম; যাইহোক এর পরিবর্তে যা ঘটেছে তা হল যতক্ষণ পর্যন্ত রাজ্যটি চলছিল ততক্ষণ স্কোর বাড়তে থাকে, আমাদের একটি অযৌক্তিকভাবে উচ্চ স্কোর প্রদান করে যা আমরা মোকাবেলা করতে পারিনি। আমরা একটি পালস সিগন্যাল যোগ করে এটি ঠিক করেছি যা ঘড়ির ক্রমবর্ধমান প্রান্তের সাথে সিঙ্ক্রোনাইজ করা হয়েছিল, যেমন ধাপ 8 এ কোডে দেখা গেছে।

অবশেষে, টাইমারটি ডিবাগ করতে অনেক সময় নিয়েছিল কারণ এটি আমাদের সাতটি সেগমেন্ট ডিসপ্লেকে বিকৃত করবে যখন এটি গণনা করা হচ্ছে, তাই আমাদের এটিকে 60 থেকে গণনা থেকে 0 থেকে গণনা করতে হবে।

ধাপ 10: উৎস ফাইল এবং সীমাবদ্ধতা

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

প্রস্তাবিত: