ডিজিটাল প্রসেসিং সমস্যাগুলি সমাধান করার জন্য আপনার উদ্ভূত সমস্যাগুলি ব্যবহার করে ডিজিটাল সার্কিটগুলি কীভাবে ডিজাইন করা হয়েছে তার একটি ধারণা দেওয়ার চেষ্টা করব: সিপিইউ কীভাবে সংযোজন এবং গুণগুলি বাস্তবায়ন করে।
প্রথমত, আসুন সরাসরি প্রশ্নটি বের করা যাক: কীভাবে কোনও প্রোগ্রামিং ভাষা দক্ষতার সাথে গুণ এবং সংযোজনকে মূল্যায়ন করে। উত্তরটি সহজ, তারা তাদের বহুগুণে সংকলন করে নির্দেশাবলী যুক্ত করে। উদাহরণস্বরূপ, নিম্নলিখিত কোড:
a = 1 + 1;
b = a * 20;
কেবল এমন কিছুতে সংকলিত হয়:
ADD 1 1 a
MUL a 20 b
(দ্রষ্টব্য, উপরের সমাবেশটি একটি কাল্পনিক সিপিইউর জন্য যা বিদ্যমান নেই, সরলতার জন্য)।
এই মুহুর্তে আপনি বুঝতে পারবেন যে উপরের উত্তরটি কেবল সমস্যাটি স্থানান্তরিত করে এবং হার্ডওয়্যার যাদু দ্বারা এটি সমাধান করে। ফলো-আপ প্রশ্নটি স্পষ্টতই সেই হার্ডওয়্যার ম্যাজিকটি কীভাবে কাজ করে?
প্রথমে সহজ সমস্যাটি দেখে নেওয়া যাক: সংযোজন।
প্রথমে আমরা একটি নিয়মিত বেস 10 নম্বর যোগ করে একটি পরিচিত সমস্যা করি:
17
+28
প্রথম পদক্ষেপটি 7 এবং 8 যোগ করা হবে তবে এটি 15 এর ফলাফল যা একক অঙ্কের চেয়ে বেশি। সুতরাং আমরা 1 বহন:
(1)
17
+28
= 5
এখন আমরা 1, 1 এবং 2 একসাথে যুক্ত করব:
17
+28
=45
সুতরাং এটি থেকে আমরা নিম্নলিখিত নিয়ম পেতে:
সংযোজনের ফলাফল যখন এক অঙ্কের বেশি হয়, আমরা সর্বনিম্ন উল্লেখযোগ্য সংখ্যা রাখি এবং সর্বাধিক উল্লেখযোগ্য অঙ্ক এগিয়ে রাখি
আমাদের কলামে যদি একটি অঙ্ক এগিয়ে নিয়ে যায় তবে আমরা সংখ্যার সাথে যুক্ত করব
এখন সময়টি বেস 2 - বুলিয়ান বীজগণিতের উপরের বিধিগুলি ব্যাখ্যা করার জন্য।
সুতরাং বুলিয়ান বীজগণিতের সাথে, 0 এবং 1 একসাথে যোগ করে = 1. যোগ করা 0 এবং 0 = 0. যোগ করা এবং 1 এবং 1 = 10 যোগ করা যা এক অঙ্কের বেশি, তাই আমরা 1টিকে এগিয়ে রাখি।
এটি থেকে আমরা একটি সত্য সারণী তৈরি করতে পারি:
a b | sum carry
-------------------
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1
এর থেকে, আমরা দুটি সার্কিট / বুলিয়ান সমীকরণ তৈরি করতে পারি - একটি যোগফলের জন্য এবং একটি বহন করার আউটপুট জন্য। সর্বাধিক নিষ্পাপ উপায় হ'ল সমস্ত ইনপুটগুলি কেবল তালিকাভুক্ত করা। যে কোনও সত্যের ছক, এই ফর্মটিতে যত বড় এবং জটিল তা পুনঃস্থাপন করা যায়:
(AND inputs in first row) OR (AND of inputs in second row) OR ...
এটি মূলত পণ্য ফর্মের যোগফল। আমরা কেবল আউটপুটগুলিতেই দেখি যার ফলে 1 ফলাফল হয় এবং 0 টি উপেক্ষা করুন:
sum = (NOT a AND b) OR (a AND NOT b)
পড়ার সহজ করে তুলতে প্রোগ্রামের ভাষা প্রতীকগুলির সাথে এবং এর এবং না প্রতিস্থাপন করা যাক:
sum = (!a & b) | (a & !b)
মূলত, আমরা টেবিলটি এমনভাবে রূপান্তর করেছি:
a b | sum equation
-------------------
0 0 | 0
0 1 | 1 (!a & b)
1 0 | 1 (a & !b)
1 1 | 0
এটি সরাসরি একটি সার্কিট হিসাবে প্রয়োগ করা যেতে পারে:
_____
a ------------| |
\ | AND |-. ____
\ ,-NOT--|_____| \ | |
\/ `--| OR |----- sum
/\ _____ ,--|____|
/ `-NOT--| | /
/ | AND |-`
b ------------|_____|
পর্যবেক্ষক পাঠকগণ এই মুহুর্তে লক্ষ্য করবেন যে উপরের যুক্তিগুলি একটি একক গেট হিসাবে বাস্তবে প্রয়োগ করা যেতে পারে - একটি এক্সওআর গেট যা আমাদের সত্য টেবিলের দ্বারা স্বাচ্ছন্দ্যে প্রয়োজনীয় আচরণ করে:
_____
a ------------| |
| XOR |---- sum
b ------------|_____|
তবে যদি আপনার হার্ডওয়্যার আপনাকে একটি এক্সওর গেট সরবরাহ করে না, তবে উপরের পদক্ষেপগুলি কীভাবে আপনি এটি, এবং, এবং নো গেটস এর শর্তায় এটি সংজ্ঞায়িত ও প্রয়োগ করতে যাবেন।
আপনি কীভাবে যুক্তি গেটগুলি প্রকৃত হার্ডওয়্যারে রূপান্তর করতে চলেছেন তা আপনার যে হার্ডওয়ারের উপর নির্ভর করে। এগুলি বিভিন্ন শারীরিক প্রক্রিয়া ব্যবহার করে প্রয়োগ করা যেতে পারে যতক্ষণ না প্রক্রিয়াটি কোনও ধরণের স্যুইচিং আচরণ সরবরাহ করে। লজিক গেটগুলি জল বা জঞ্জালের বাতা (তরল পদার্থ) থেকে ট্রানজিস্টার (বৈদ্যুতিন) থেকে পতিত মার্বেল পর্যন্ত সমস্ত কিছু দিয়ে প্রয়োগ করা হয়েছে। এটি নিজস্ব ক্ষেত্রে একটি বড় বিষয় তাই আমি কেবল এটি চকচকে করব এবং বলব যে লজিক গেটগুলি শারীরিক ডিভাইস হিসাবে প্রয়োগ করা সম্ভব।
এখন আমরা বহন সংকেত জন্য একই কাজ। যেহেতু কেবল একটি শর্ত আছে যেখানে বহন সংকেতটি সত্য, সমীকরণটি কেবল সহজ:
carry = a & b
সুতরাং বহন সহজ:
_____
a ------------| |
| AND |---- carry
b ------------|_____|
তাদের একত্রিত করে আমরা অর্ধ সংযোজক হিসাবে পরিচিত যা পাই:
_____
a ------;-----| |
| | XOR |---- sum
b --;---|-----|_____|
| | _____
| '-----| |
| | AND |---- carry
'---------|_____|
উপরের সার্কিটের জন্য সমীকরণগুলি দেখায়:
sum = a ^ b
carry = a & b
অর্ধযোজক কিছু অনুপস্থিত। আমরা প্রথম নিয়মটি প্রয়োগ করেছি - যদি ফলাফল এগিয়ে নিয়ে যাওয়ার চেয়ে এক অঙ্কের বেশি হয় তবে আমরা দ্বিতীয় বিধিটি প্রয়োগ করি নি - যদি কোনও বাহন থাকে তবে এটি সংখ্যার সাথে একত্রে যুক্ত করুন।
সুতরাং একটি পূর্ণ সংযোজনকারী, একটি সংযোজন সার্কিট যা এক অঙ্কের বেশি সংখ্যক সংখ্যক যুক্ত করতে পারে তা বাস্তবায়নের জন্য আমাদের একটি সত্যের ছকটি সংজ্ঞায়িত করতে হবে:
a b c | sum carry
---------------------
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
যোগফলের সমীকরণ এখন:
sum = (!a & !b & c) | (!a & b & !c) | (a & !b & !c) | (a & b & c)
আমরা সমীকরণটি ফ্যাক্ট করতে এবং সমীকরণটিকে সরলীকরণ করতে এবং এটি একটি সার্কিট ইত্যাদি হিসাবে ব্যাখ্যা করার জন্য একই পদ্ধতিতে যেতে পারি যেমন আমরা উপরে করেছি তবে আমি মনে করি এই উত্তর অত্যধিক দীর্ঘায়িত হচ্ছে।
এতক্ষণে আপনার ডিজিটাল যুক্তি কীভাবে ডিজাইন করা হয়েছে তার একটি ধারণা পাওয়া উচিত। অন্যান্য কৌশলগুলি যেমন আমি উল্লেখ করি নি যেমন কর্নো মানচিত্র (সত্যের টেবিলগুলি সরল করার জন্য ব্যবহৃত হয়) এবং এসপ্রেসোর মতো যুক্তি সংকলক (যাতে আপনাকে হাত দিয়ে বুলিয়ান সমীকরণের কারণ তৈরি করতে না হয়) তবে মূলটি মূলত আমি যা করেছি উপরে রূপরেখা:
আপনি একক বিট (অঙ্ক) স্তরে কাজ করতে না পারলে সমস্যাটি কমিয়ে দিন।
আপনি সত্যের সারণীটি ব্যবহার করতে চান এমন ফলাফলগুলি সংজ্ঞায়িত করুন।
টেবিলটিকে বুলিয়ান সমীকরণে রূপান্তর করুন এবং সমীকরণটি সহজ করুন।
সমীকরণটিকে লজিক গেট হিসাবে ব্যাখ্যা করুন।
লজিক গেটগুলি প্রয়োগ করে আপনার লজিক সার্কিটটিকে আসল হার্ডওয়্যার সার্কিটগুলিতে রূপান্তর করুন।
এটিই কীভাবে মৌলিক (বা বরং নিম্ন স্তরের) সমস্যাগুলি সমাধান করা হয় - প্রচুর এবং সত্যের অনেকগুলি সারণী। আসল সৃজনশীল কাজটি এমপিথ্রি ডিকোডিংয়ের বিট লেভেলের মতো জটিল কাজটি ভেঙে ফেলা হচ্ছে যাতে আপনি সত্যের টেবিলগুলি নিয়ে এটিতে কাজ করতে পারেন।
দুঃখিত, আমি কীভাবে গুণনকে বাস্তবায়ন করতে পারি তার ব্যাখ্যা করার সময় আমার কাছে নেই। গুণমান কতক্ষণ কাজ করে তার নিয়মগুলি সনাক্ত করে আপনি এটি বাইনারি ভাষায় ব্যাখ্যা করার পরে এটি সত্যের টেবিলগুলিতে ভেঙে ফেলার চেষ্টা করতে পারেন। অথবা আপনি উইকিপিডিয়া: http://en.wikedia.org/wiki/Bাইন__ মাল্টিপ্লায়ার পড়তে পারেন