সরাসরি পর্বে যান
পর্ব ২১ · ৫৫-এর মধ্যে · মডিউল ৩

অ্যাডার, এনকোডার-ডিকোডার আর মাল্টিপ্লেক্সার

Combinational Circuits — Adders, Encoders, Decoders, 7-Segment Displays and Multiplexers

Taught in Bangla, this lesson covers combinational circuits whose output depends only on current inputs: the half adder and full adder, ripple-carry adders and subtraction with adders, encoders and decoders, BCD to 7-segment display decoding, multiplexers, demultiplexers and comparators, where these circuits sit inside a CPU, and verifying designs with truth tables.

এই পর্বে যা শিখবেন

  • কম্বিনেশনাল আর সিকোয়েনশিয়াল সার্কিটের পার্থক্য, আর একটি সার্কিট নকশা করার পাঁচটি ধাপ
  • হাফ অ্যাডার, ফুল অ্যাডার আর ৪-bit রিপল-ক্যারি অ্যাডার — truth table, সমীকরণ আর লজিক ডায়াগ্রামসহ
  • একই অ্যাডার দিয়ে বিয়োগ, আর carry-র দেরি কেন গতির শত্রু
  • এনকোডার, ডিকোডার আর BCD থেকে 7-segment ডিকোডার — অঙ্ক কীভাবে জ্বলে ওঠে
  • মাল্টিপ্লেক্সার, ডিমাল্টিপ্লেক্সার, কম্পারেটর আর CPU-র ভেতরে এদের কাজ

১ · স্মৃতিহীন সার্কিট — কম্বিনেশনাল সার্কিট কী

পর্ব ২০-এ আপনি AND, OR, NOT, XOR-এর মতো লজিক গেট চিনেছেন। প্রতিটি গেট একা খুব সামান্য কাজ করে — দুটি bit দেখে একটি bit দেয়। কিন্তু ইটের মতো এগুলো জোড়া দিলেই বাড়ি তৈরি হয়। কয়েকটি গেট জুড়ে যোগ করার যন্ত্র, কোড বদলানোর যন্ত্র, অনেকের মধ্য থেকে একজনকে বেছে নেওয়ার যন্ত্র — সবই বানানো যায়। এই পর্বে আমরা সেই “ইটের বাড়ি”গুলো দেখব।

প্রথমে একটি পরিচিত উদাহরণ। অনেক বাড়ির সিঁড়িতে একটি বাতি থাকে, যা নিচতলা আর ওপরতলা — দুই জায়গার সুইচ থেকেই জ্বালানো-নেভানো যায়। নিচের সুইচ A, ওপরের সুইচ B. দুটির অবস্থান আলাদা হলে বাতি জ্বলে, একই হলে নেভে। এটি হুবহু XOR গেটের নিয়ম। খেয়াল করুন: বাতি জ্বলবে কি না, তা জানতে শুধু এই মুহূর্তে সুইচ দুটি কোন দিকে আছে, সেটুকু দেখলেই চলে। পাঁচ মিনিট আগে কে কোন সুইচ টিপেছিল — তার কোনো ভূমিকা নেই।

মূল ধারণা

যে সার্কিটের আউটপুট শুধু বর্তমান ইনপুটের ওপর নির্ভর করে, আগের কোনো ঘটনা মনে রাখে না, তাকে বলে কম্বিনেশনাল সার্কিট (combinational circuit). এতে কোনো মেমরি নেই, ফিডব্যাক নেই — সংকেত শুধু ইনপুট থেকে আউটপুটের দিকে এক দিকে বয়ে যায়।

এর উল্টো ধরনের সার্কিটের কথাও জেনে রাখুন। টিভির রিমোটে “Channel +” চাপলে টিভি কোন চ্যানেলে যাবে? সেটা নির্ভর করে এখন কোন চ্যানেল চলছে তার ওপর — অর্থাৎ টিভিকে বর্তমান চ্যানেল মনে রাখতে হয়। যে সার্কিট আগের অবস্থা মনে রাখে, তার নাম সিকোয়েনশিয়াল সার্কিট। এর ভেতরে থাকে ফ্লিপ-ফ্লপ নামের ছোট মেমরি, যা পরের পর্বে (পর্ব ২২) বিস্তারিত দেখবেন।

বৈশিষ্ট্যকম্বিনেশনাল সার্কিটসিকোয়েনশিয়াল সার্কিট (পর্ব ২২)
আউটপুট নির্ভর করেশুধু বর্তমান ইনপুটের ওপরবর্তমান ইনপুট + আগের অবস্থা
মেমরিনেইআছে (ফ্লিপ-ফ্লপ)
ক্লক সংকেতলাগে নাসাধারণত লাগে
ফিডব্যাক (আউটপুট ঘুরে ইনপুটে)নেইথাকে
উদাহরণঅ্যাডার, এনকোডার, ডিকোডার, মাল্টিপ্লেক্সার, কম্পারেটরফ্লিপ-ফ্লপ, রেজিস্টার, কাউন্টার
দৈনন্দিন তুলনাসিঁড়ির দুই-সুইচের বাতি, ক্যালকুলেটরের অঙ্ক দেখানোটিভির চ্যানেল বদল, লিফট, ট্রাফিক সিগন্যাল

একটি সার্কিট নকশা করার পাঁচ ধাপ

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

সমস্যা থেকে সার্কিট — নকশার পাঁচ ধাপ

Design flow of a combinational circuit

  1. ১. সমস্যাকী ইনপুট, কী আউটপুট?কথায় লেখা চাহিদা
  2. ২. Truth tableসব ইনপুট-সমাবেশn ইনপুটে ২ⁿটি সারি
  3. ৩. সমীকরণY = …যে সারিতে আউটপুট 1
  4. ৪. সরলীকরণবুলিয়ান উপপাদ্য / K-mapকম গেট, কম খরচ
  5. ৫. সার্কিটগেট জুড়ে লজিক ডায়াগ্রামতারপর পরীক্ষা

ছোট একটি উদাহরণে রেসিপিটি চালিয়ে দেখি। ক্রিকেট ম্যাচে ধরুন তিনজন বিচারক (A, B, C) — অন্তত দুজন “আউট” বললে আউট। এটি সংখ্যাগরিষ্ঠতার (majority) সার্কিট। ইনপুট তিনটি, তাই truth table-এ ২³ = ৮টি সারি। যে সারিগুলোতে অন্তত দুটি 1 আছে (011, 101, 110, 111), সেখানে Y = 1. সেই চারটি সারি থেকে সমীকরণ লিখে পর্ব ১৯-এর বুলিয়ান উপপাদ্য দিয়ে সরল করলে দাঁড়ায়:

Y = AB + BC + CA
৩টি AND গেট + ১টি তিন-ইনপুটের OR গেট

এই সমীকরণটি মনে রাখুন — একটু পরে ফুল অ্যাডারের ভেতরে এটিকেই ছদ্মবেশে আবার দেখবেন।

২ · হাফ অ্যাডার — দুটি bit যোগ

পর্ব ১৭-এ খাতায় বাইনারি যোগ করেছেন: 0+0 = 0, 0+1 = 1, 1+0 = 1, আর 1+1 = 10 (অর্থাৎ যোগফল 0, হাতে থাকে 1). এবার এই কাজটিই গেট দিয়ে করাব। দুটি এক-bit সংখ্যা A আর B যোগ করে দুটি আউটপুট দেয় যে সার্কিট, তার নাম হাফ অ্যাডার (half adder): যোগফল S (Sum) আর হাতে-থাকা C (Carry).

ABS (যোগফল)C (carry)দশমিকে
0000০ + ০ = ০
0110০ + ১ = ১
1010১ + ০ = ১
1101১ + ১ = ২ = বাইনারিতে 10

এবার কলাম দুটি ভালো করে দেখুন। S কলাম (0, 1, 1, 0) — দুটি ইনপুট আলাদা হলে 1. এটি XOR-এর truth table! আর C কলাম (0, 0, 0, 1) — দুটিই 1 হলে তবেই 1. এটি AND-এর truth table. অর্থাৎ নতুন কিছু বানাতে হলো না; পরিচিত দুটি গেট পাশাপাশি বসালেই হাফ অ্যাডার:

S = A ⊕ B = A'B + AB'
C = A · B

হাফ অ্যাডারের লজিক ডায়াগ্রাম

Half adder = one XOR gate + one AND gate

হাফ অ্যাডারের লজিক ডায়াগ্রাম ইনপুট A আর B দুটিই একটি XOR গেট আর একটি AND গেটে যায়। XOR গেটের আউটপুট S, AND গেটের আউটপুট C. XOR AND A B S = A ⊕ B C = A · B কালো বিন্দু = তার জোড়া লাগানো; বিন্দু ছাড়া ক্রস = জোড়া নেই

তাহলে নাম “হাফ” কেন? কারণ এটি অর্ধেক কাজ করে। একাধিক bit-এর সংখ্যা যোগ করতে গেলে ডান দিকের ঘর থেকে আসা carry-ও যোগ করতে হয় — মোট তিনটি bit. হাফ অ্যাডারের ইনপুট মাত্র দুটি, তাই সে আগের carry নিতে পারে না। সে শুধু সবচেয়ে ডান দিকের ঘরের (যেখানে আগে থেকে কোনো carry নেই) কাজ করতে পারে।

প্রতীক নিয়ে একটি কথা। এই পর্বে A' মানে “A নয়” (NOT A). অনেক বইয়ে একই জিনিস লেখা হয় অক্ষরের মাথায় দাগ দিয়ে (Ā)। ⊕ চিহ্ন XOR, আর গুণের বিন্দু (·) AND, যোগ চিহ্ন (+) OR — পর্ব ১৯ আর ২০-এর প্রচলিত নিয়মেই।

৩ · ফুল অ্যাডার — হাতে থাকা carry-সহ যোগ

খাতায় দুই অঙ্কের সংখ্যা যোগ করার কথা ভাবুন: ২৭ + ৩৫. এককের ঘরে ৭ + ৫ = ১২ — লিখি ২, হাতে থাকে ১. দশকের ঘরে তখন তিনটি জিনিস যোগ হয়: ২ + ৩ + হাতের ১. বাইনারিতেও ঠিক তাই। বাঁ দিকের প্রতিটি ঘরে তিনটি bit যোগ করতে হয় — A, B আর আগের ঘর থেকে আসা carry, যাকে বলে Cin (carry in). এই কাজের সার্কিটের নাম ফুল অ্যাডার (full adder). আউটপুট দুটি: যোগফল S আর পরের ঘরে পাঠানোর carry Cout.

ABCinSCoutকয়টি 1?
00000০টি → ০
00110১টি → ১
01010১টি → ১
01101২টি → ২ = 10
10010১টি → ১
10101২টি → 10
11001২টি → 10
11111৩টি → ৩ = 11

শেষ কলামটিই সবচেয়ে সহজ কৌশল: ফুল অ্যাডার আসলে তিনটি ইনপুটের মধ্যে কয়টি 1 আছে তা গোনে, আর সেই সংখ্যাটি দুই bit-এ (Cout S) লেখে। দুটি নিয়ম বেরিয়ে আসে:

  • S = 1 যখন বিজোড় সংখ্যক (১টি বা ৩টি) ইনপুট 1 — এটিই তিন-ইনপুটের XOR: S = A ⊕ B ⊕ Cin.
  • Cout = 1 যখন অন্তত দুটি ইনপুট 1 — চিনতে পারছেন? অংশ ১-এর সংখ্যাগরিষ্ঠতার সার্কিট! Cout = AB + BCin + ACin, যাকে সাজিয়ে লেখা যায় Cout = AB + Cin(A ⊕ B).
S = A ⊕ B ⊕ Cin
Cout = AB + Cin(A ⊕ B)

দুটি হাফ অ্যাডার + একটি OR = ফুল অ্যাডার

দ্বিতীয় রূপটি কেন কাজের? কারণ এটি দেখায়, ফুল অ্যাডার বানানো যায় দুটি হাফ অ্যাডার আর একটি OR গেট দিয়ে। প্রথম হাফ অ্যাডার A আর B যোগ করে; দ্বিতীয়টি সেই যোগফলের সাথে Cin যোগ করে; আর দুটির যেকোনো একটি carry দিলেই Cout = 1 — তাই OR. (দুটি হাফ অ্যাডার কখনো একসাথে carry দেয় না; প্রথমটি carry দিলে তার যোগফল 0, ফলে দ্বিতীয়টির carry হতেই পারে না।)

ফুল অ্যাডারের ব্লক ডায়াগ্রাম

Full adder = two half adders + one OR gate (2 XOR, 2 AND, 1 OR in total)

দুটি হাফ অ্যাডার আর একটি OR গেট দিয়ে ফুল অ্যাডার A আর B প্রথম হাফ অ্যাডারে যায়। এর যোগফল A⊕B আর Cin দ্বিতীয় হাফ অ্যাডারে যায়, যার যোগফল S. দুই হাফ অ্যাডারের carry একটি OR গেটে গিয়ে Cout দেয়। হাফ অ্যাডার ১ হাফ অ্যাডার ২ OR A B Cin A⊕B C1 = A·B C2 S Cout S = A⊕B⊕Cin Cout = C1 + C2

নিচের স্টেপারে সবচেয়ে “কঠিন” ইনপুট — 1 + 1 + 1 — গেট ধরে ধরে চালিয়ে দেখুন। উত্তর হওয়া উচিত দশমিকে ৩, অর্থাৎ বাইনারিতে 11:

  1. ইনপুটA=1, B=1, Cin=1তিনটি bit
  2. হাফ অ্যাডার ১A⊕B, A·BA আর B যোগ
  3. হাফ অ্যাডার ২(A⊕B)⊕Cin, (A⊕B)·Cinসাথে Cin যোগ
  4. OR গেটC1 + C2কোনো carry এল কি?
প্রতিটি তারে এখন কী মান
A, B, Cin
A ⊕ B
C1 = A · B
S = (A⊕B) ⊕ Cin
C2 = (A⊕B) · Cin
Cout = C1 + C2
ফল (Cout S)
  1. তিনটি ইনপুট। A = 1, B = 1, আর আগের ঘর থেকে carry Cin = 1. দশমিকে ১ + ১ + ১ = ৩, বাইনারিতে 11 — অর্থাৎ আমরা আশা করছি S = 1 আর Cout = 1.
  2. হাফ অ্যাডার ১। এর XOR দেখে A আর B সমান কি না — দুটিই 1, তাই A ⊕ B = 0. এর AND দেখে দুটিই 1 কি না — হ্যাঁ, তাই প্রথম carry C1 = 1. অর্থাৎ 1 + 1 = 10.
  3. হাফ অ্যাডার ২। এবার আগের যোগফল 0-এর সাথে Cin = 1 যোগ। XOR: 0 ⊕ 1 = 1 — এটিই চূড়ান্ত যোগফল S. AND: 0 · 1 = 0, তাই দ্বিতীয় carry C2 = 0.
  4. OR গেট। দুই হাফ অ্যাডারের যেকোনো একটি carry দিলেই পরের ঘরে carry যাবে। C1 + C2 = 1 + 0 = 1, তাই Cout = 1.
  5. ফল: Cout S = 11. বাইনারি 11 মানে দশমিকে ৩ — হিসাব মিলেছে। মোট পাঁচটি গেট (২টি XOR, ২টি AND, ১টি OR) একসাথে মিলে এক ঘরের যোগ সম্পূর্ণ করল।

৪ · রিপল-ক্যারি অ্যাডার — অনেক bit যোগ, আর অ্যাডার দিয়েই বিয়োগ

একটি ফুল অ্যাডার এক ঘরের যোগ করে। চার bit-এর দুটি সংখ্যা যোগ করতে চাইলে? চারটি ফুল অ্যাডার পাশাপাশি বসিয়ে প্রতিটির Cout তার বাঁ দিকের প্রতিবেশীর Cin-এ জুড়ে দিন। সবচেয়ে ডান দিকের অ্যাডারের Cin = 0 রাখুন (চাইলে সেখানে একটি হাফ অ্যাডারও বসানো যায়)। হয়ে গেল রিপল-ক্যারি অ্যাডার (ripple-carry adder). “Ripple” মানে ঢেউ — পুকুরে ঢিল ছুড়লে ঢেউ যেমন এক পাশ থেকে আরেক পাশে ছড়ায়, carry-ও তেমনি ডান থেকে বাঁয়ে এক অ্যাডার থেকে পরের অ্যাডারে গড়িয়ে যায়।

নিচে 0101 (দশমিকে ৫) + 0011 (দশমিকে ৩) যোগ করে দেখুন। FA0 সবচেয়ে ডান দিকের (LSB, সবচেয়ে কম মানের bit) ফুল অ্যাডার, FA3 সবচেয়ে বাঁ দিকের (MSB):

ধাপFA3 (MSB)FA2FA1FA0 (LSB)
A0101
B0011
Cin
S
Cout
  1. প্রস্তুতি। A = 0101 আর B = 0011 চারটি ফুল অ্যাডারে ঘর অনুযায়ী বসল। সবচেয়ে ডানের FA0-এর Cin = 0, কারণ তার ডানে আর কোনো ঘর নেই। বাকিদের Cin এখনো অজানা — তারা ডানের প্রতিবেশীর জন্য অপেক্ষা করছে।
  2. FA0: 1 + 1 + 0. দুটি 1, তাই S = 0 আর Cout = 1. এই carry ঢেউয়ের মতো বাঁ দিকে FA1-এ চলল।
  3. FA1: 0 + 1 + 1. FA1 এতক্ষণ অপেক্ষা করছিল; এখন Cin = 1 পেল। আবার দুটি 1 — S = 0, Cout = 1. carry আরেক ঘর এগোল।
  4. FA2: 1 + 0 + 1. আবারও দুটি 1 — S = 0, Cout = 1. খেয়াল করুন, প্রতিটি অ্যাডারকে আগের জনের উত্তরের জন্য বসে থাকতে হচ্ছে — একেই বলে carry-র ঢেউ।
  5. FA3: 0 + 0 + 1. একটিমাত্র 1 — S = 1, Cout = 0. চূড়ান্ত যোগফল 1000 = দশমিকে ৮. আর ৫ + ৩ = ৮ — মিলে গেছে। শেষ Cout = 1 হলে বুঝতাম উত্তর চার bit-এ আঁটেনি (overflow).

ঢেউয়ের সমস্যা — propagation delay

প্রতিটি গেট কাজ করতে খুব সামান্য, তবু কিছু সময় নেয় — ন্যানোসেকেন্ড বা তার ভগ্নাংশ। একে বলে propagation delay. রিপল-ক্যারি অ্যাডারে সবচেয়ে খারাপ ক্ষেত্রে (যেমন 1111 + 0001) carry-কে প্রথম অ্যাডার থেকে শেষ অ্যাডার পর্যন্ত পুরোটা হাঁটতে হয়। ৪ bit-এ সমস্যা ছোট, কিন্তু আজকের CPU যোগ করে ৬৪ bit-এ। ৬৪টি অ্যাডারের লম্বা লাইনে প্রত্যেককে আগের জনের জন্য অপেক্ষা করতে হলে পুরো CPU-র গতি সেই ঢেউয়ের গতিতে আটকে যায়। ঢাকার যানজটে একটি লাইনের সব গাড়ি যেমন সামনের গাড়ি না সরা পর্যন্ত নড়তে পারে না — ঠিক তেমন।

আরও গভীরে — carry-lookahead. দ্রুত অ্যাডার ঢেউয়ের জন্য অপেক্ষা করে না। প্রতিটি ঘরের জন্য আগেভাগে দুটি সংকেত বের করা হয়: generate G = AB (এই ঘর নিজেই carry বানাবে) আর propagate P = A ⊕ B (ডান থেকে carry এলে এই ঘর তা পার করে দেবে)। তারপর আলাদা একটি সার্কিট প্রতিটি ঘরের carry একসাথে হিসাব করে, যেমন C2 = G1 + P1G0 + P1P0C0. গেট বেশি লাগে, কিন্তু অপেক্ষা অনেক কমে। একে বলে carry-lookahead adder; আধুনিক CPU এর উন্নত রূপ ব্যবহার করে।

একই অ্যাডার দিয়ে বিয়োগ

পর্ব ১৭-এ দেখেছেন, A − B করা যায় A-এর সাথে B-এর 2's complement যোগ করে: A − B = A + B' + 1 (B' মানে B-এর প্রতিটি bit উল্টানো)। তাহলে বিয়োগের জন্য আলাদা যন্ত্র লাগে না — অ্যাডারের সাথে সামান্য কিছু জুড়লেই চলে:

  • B-এর প্রতিটি bit একটি XOR গেটের ভেতর দিয়ে অ্যাডারে পাঠান; XOR-এর অন্য ইনপুটে একটি নিয়ন্ত্রণ সংকেত M.
  • M = 0 হলে B ⊕ 0 = B — যেমন ছিল তেমনই যায়, আর প্রথম Cin = 0. ফল: A + B.
  • M = 1 হলে B ⊕ 1 = B' — প্রতিটি bit উল্টে যায়, আর M-কেই প্রথম Cin-এ দেওয়া হয় (সেই “+1”). ফল: A + B' + 1 = A − B.

উদাহরণ: 0111 (দশমিকে ৭) − 0010 (দশমিকে ২)। M = 1 হওয়ায় B উল্টে হয় 1101; তারপর 0111 + 1101 + 1 = 1 0101. বাড়তি বাঁ দিকের carry বাদ দিলে 0101 = ৫. ঠিক উত্তর। একটি XOR-এর সারি আর একটি নিয়ন্ত্রণ তার — যোগ-বিয়োগ দুটিই এক যন্ত্রে। CPU-র ALU ঠিক এই কৌশলটিই ব্যবহার করে।

৫ · এনকোডার আর ডিকোডার — কোডের অনুবাদক

একটি লিফটের কথা ভাবুন। ভেতরে ৮টি বোতাম (০ থেকে ৭ তলা)। আপনি একটি বোতাম চাপলেন। লিফটের নিয়ন্ত্রক চিপকে কি ৮টি আলাদা তার দেখতে হবে? না — ৮টি সম্ভাবনা মাত্র ৩টি bit-এ লেখা যায় (২³ = ৮)। যে সার্কিট অনেকগুলো লাইনের মধ্যে কোনটি চালু আছে তা দেখে একটি ছোট বাইনারি কোড বানায়, তার নাম এনকোডার (encoder). আর উল্টো কাজ — কোড দেখে ঠিক একটি লাইন চালু করা — করে ডিকোডার (decoder).

📥 এনকোডার: ২ⁿ → n

অনেকগুলো ইনপুট লাইন, যার একটি চালু; আউটপুট সেই লাইনের নম্বর, বাইনারিতে। যেমন ৮টি ইনপুট থেকে ৩-bit কোড (8-to-3).

কীবোর্ড, লিফটের বোতাম

📤 ডিকোডার: n → ২ⁿ

n-bit কোড ইনপুট; ২ⁿটি আউটপুটের ঠিক একটি চালু হয় — যার নম্বর কোডটির মানের সমান। যেমন ৩-bit থেকে ৮টি লাইন (3-to-8).

মেমরি বাছাই, 7-segment, LED

এনকোডার: অক্টাল থেকে বাইনারি (8-to-3)

ধরুন ৮টি ইনপুট D0…D7, যেকোনো সময় শুধু একটি 1. আউটপুট তিনটি: A2 A1 A0. D5 চালু হলে আউটপুট হবে 101 (দশমিকে ৫)। Truth table দেখে কোন আউটপুট কখন 1 হয় খুঁজে বের করলে সমীকরণ খুব সহজ — শুধু OR গেট লাগে:

চালু ইনপুটA2A1A0
D0000
D1001
D2010
D3011
D4100
D5101
D6110
D7111
A2 = D4 + D5 + D6 + D7
A1 = D2 + D3 + D6 + D7
A0 = D1 + D3 + D5 + D7

একই কৌশলে দশমিক থেকে BCD এনকোডার বানানো যায় — ১০টি ইনপুট (০–৯ বোতাম), ৪টি আউটপুট। BCD (Binary Coded Decimal, পর্ব ১৮) মানে দশমিকের প্রতিটি অঙ্ককে আলাদা ৪-bit-এ লেখা। এর সমীকরণ: D = 8 + 9, C = 4 + 5 + 6 + 7, B = 2 + 3 + 6 + 7, A = 1 + 3 + 5 + 7 + 9 (এখানে সংখ্যাগুলো মানে ইনপুট লাইনের নম্বর)। ক্যালকুলেটরের অঙ্কের বোতাম চাপলে ভেতরে মূলত এই ধরনের অনুবাদই ঘটে।

একটি সমস্যা আছে: একসাথে দুটি বোতাম চাপলে? D3 আর D5 একসাথে চালু হলে সাধারণ এনকোডার দেয় 011 OR 101 = 111 — যেন D7 চাপা হয়েছে! এর সমাধান priority encoder: একাধিক ইনপুট চালু থাকলে সবচেয়ে বড় নম্বরেরটিকে (সর্বোচ্চ অগ্রাধিকার) গুরুত্ব দেয়, আর একটি বাড়তি আউটপুট জানায় “কোনো ইনপুট আদৌ চালু আছে কি না”। বাস্তব যন্ত্রে প্রায় সবসময় এটিই ব্যবহার হয়, যেমন 74148 চিপ।

কীবোর্ড কি একটি এনকোডার? ধারণাগতভাবে হ্যাঁ — শতাধিক বোতামের কোনটি চাপা হলো, তা থেকে একটি ছোট সংখ্যা (scan code) তৈরি হয়। তবে আজকের কীবোর্ডে বোতামগুলো সারি-কলামের একটি জালে (key matrix) সাজানো থাকে, আর ভেতরের একটি ছোট microcontroller সেকেন্ডে বহুবার জালটি পরীক্ষা করে কোড বানায়। সাধারণ গেটের এনকোডার এত বোতাম আর একসাথে কয়েকটি চাপা সামলাতে পারত না।

ডিকোডার: 2-to-4 আর 3-to-8

২টি ইনপুট A (বড় bit) আর B দিয়ে ২² = ৪টি আউটপুট D0–D3. ইনপুট 10 হলে শুধু D2 = 1, বাকি সব 0. প্রতিটি আউটপুট আসলে একটি AND গেট, যা ঠিক একটি ইনপুট-সমাবেশ “চেনে” — একে বলে minterm.

ABD0D1D2D3সমীকরণ
001000D0 = A'B'
010100D1 = A'B
100010D2 = AB'
110001D3 = AB

2-to-4 ডিকোডারের লজিক ডায়াগ্রাম

2 NOT gates + 4 two-input AND gates

2-to-4 ডিকোডারের লজিক ডায়াগ্রাম ইনপুট A আর B চারটি খাড়া লাইনে যায়: A, NOT গেটের পরে A', B, আর NOT গেটের পরে B'. চারটি AND গেট এদের জোড়া নিয়ে D0 = A'B', D1 = A'B, D2 = AB', D3 = AB দেয়। A B A' B' D0 = A'B' D1 = A'B D2 = AB' D3 = AB

3-to-8 ডিকোডার একই নিয়মে চলে: ৩টি ইনপুট, ৩টি NOT, আর ৮টি তিন-ইনপুটের AND গেট — D0 = A'B'C' থেকে D7 = ABC পর্যন্ত। সাধারণ নিয়ম মনে রাখুন: n ইনপুটের ডিকোডারে আউটপুট ২ⁿটি। বাস্তব ডিকোডার চিপে প্রায়ই একটি enable ইনপুটও থাকে — enable বন্ধ থাকলে কোনো আউটপুটই চালু হয় না। এতে দুটি ছোট ডিকোডার জুড়ে বড় ডিকোডার বানানো যায় (দুটি 3-to-8 থেকে একটি 4-to-16).

ডিকোডার কোথায় কাজ করে

  • মেমরি চিপ বাছাই (address decoding): একটি কম্পিউটারে কয়েকটি মেমরি চিপ থাকলে, CPU যে ঠিকানা (address) পাঠায় তার ওপরের কয়েকটি bit একটি ডিকোডারে যায়। ডিকোডার ঠিক একটি চিপকে সাড়া দেওয়ার সংকেত (chip select) পাঠায় — বাকিরা চুপ থাকে। মেমরির ভেতরেও একই কৌশলে ঠিক একটি সারি বেছে নেওয়া হয়।
  • একটি LED জ্বালানো: ৮টি LED-এর সারিতে কোনটি জ্বলবে, তা মাত্র ৩টি তার দিয়ে বলা যায় — 3-to-8 ডিকোডার বাকিটা করে। ব্যাংকের টোকেন ডিসপ্লেতে “কাউন্টার ৫” আলো জ্বলার পেছনে এই ধরনের সার্কিট থাকতে পারে।
  • নির্দেশ বোঝা: CPU-র control unit নির্দেশের opcode (পর্ব ২৪) ডিকোড করে ঠিক করে কোন অংশ কাজ করবে — নামেই আছে “decode”.

৬ · BCD থেকে 7-segment — ক্যালকুলেটরের অঙ্ক যেভাবে জ্বলে

ক্যালকুলেটর, ডিজিটাল ঘড়ি, মাইক্রোওয়েভ, পেট্রল পাম্পের মিটার, রাস্তার ট্রাফিক সিগন্যালের টাইমার — সবখানে “8” আকৃতির একটি ডিসপ্লে দেখেন। একে বলে 7-segment display: সাতটি ছোট দাগ (segment), নাম a থেকে g. কোন দাগগুলো জ্বলবে, তা বদলে ০ থেকে ৯ সব অঙ্ক দেখানো যায়। a ওপরে, তারপর ঘড়ির কাঁটার দিকে b (ওপর-ডান), c (নিচ-ডান), d (নিচে), e (নিচ-বাঁ), f (ওপর-বাঁ), আর g মাঝখানে।

কিন্তু CPU-র কাছে অঙ্ক থাকে ৪-bit BCD হিসেবে (৫ = 0101). কোন BCD-তে কোন segment জ্বলবে, তা অনুবাদ করে যে সার্কিট, তার নাম BCD-to-7-segment ডিকোডার। ইনপুট ৪টি, আউটপুট ৭টি — প্রতিটি segment-এর জন্য একটি। নিচের টেবিলে 1 মানে জ্বলবে (common cathode ডিসপ্লের হিসাবে):

অঙ্কBCD (DCBA)abcdefg
০00001111110
১00010110000
২00101101101
৩00111111001
৪01000110011
৫01011011011
৬01101011111
৭01111110000
৮10001111111
৯10011111011

BCD-তে 1010 থেকে 1111 — এই ছয়টি কোড কখনো আসে না, তাই নকশার সময় এদের “don't care” ধরা হয়; এতে প্রতিটি segment-এর সমীকরণ অনেক সরল হয় (K-map দিয়ে)। ডিসপ্লে দুই রকম: common cathode (সব LED-এর ঋণাত্মক প্রান্ত একসাথে; segment জ্বালাতে 1 দিতে হয়) আর common anode (উল্টো; জ্বালাতে 0 দিতে হয়)। কিছু ডিসপ্লেতে ৬-এর মাথায় a বা ৯-এর নিচে d জ্বলে না, আবার কিছুতে ৭-এর সাথে f-ও জ্বলে — নির্মাতাভেদে সামান্য পার্থক্য হয়।

নিচে BCD 0101 পেয়ে ডিকোডার কীভাবে ৫ অঙ্কটি আঁকে, ধাপে ধাপে দেখুন:

7-segment ডিসপ্লে সাতটি segment a থেকে g; ধাপে ধাপে a, তারপর f ও g, তারপর c ও d লাল হয়ে জ্বলে ৫ অঙ্কটি তৈরি করে, b আর e নিভে থাকে। a b c d e f g
ডিকোডারের ইনপুট আর আউটপুট
BCD ইনপুট (DCBA)
a b c d e f g
ডিসপ্লেতে দেখা যাচ্ছে
  1. ইনপুট এল। ক্যালকুলেটরের ভেতরের প্রসেসর ডিসপ্লেতে ৫ দেখাতে চায়, তাই ডিকোডারের চার ইনপুটে পাঠাল BCD 0101. এখনো কোনো segment জ্বলেনি — সাতটি আউটপুটের প্রতিটি নিজের সমীকরণ হিসাব করছে।
  2. segment a = 1. টেবিলের ৫ নম্বর সারিতে a = 1 — ওপরের আড়াআড়ি দাগ জ্বলল। (বাস্তবে সাতটি আউটপুট একসাথে, ন্যানোসেকেন্ডে তৈরি হয়; আমরা বোঝার জন্য ভাগ করে দেখছি।)
  3. f আর g = 1. ওপর-বাঁয়ের খাড়া দাগ আর মাঝের দাগ জ্বলল। এখন ওপরের অর্ধেকে ইংরেজি S-এর মাথার মতো আকার দাঁড়াল।
  4. c আর d = 1. নিচ-ডানের খাড়া দাগ আর নিচের দাগ জ্বলল। আকারটি এখন পুরোপুরি ৫-এর মতো।
  5. b আর e = 0. ওপর-ডান আর নিচ-বাঁয়ের দাগ নিভে থাকল — এ দুটি জ্বললে অঙ্কটি ৮ হয়ে যেত! সাতটি আউটপুট 1011011 মিলে লাল আলোয় “৫” দেখাল।

এবার পুরো ব্যাপারটি নিজে চালিয়ে দেখুন। নিচের ছোট প্রোগ্রামটি শুধু XOR (^), AND (&) আর OR (|) দিয়ে একটি ফুল অ্যাডার বানায়, চারটি জুড়ে ৪-bit যোগ করে, তারপর ০–৯ প্রতিটি অঙ্কের 7-segment টেবিল ছাপে। “চালান” চাপুন:

// ১) ফুল অ্যাডার — শুধু XOR (^), AND (&), OR (|) দিয়ে
function fullAdder(a, b, cin) {          // ফেরত দেয় [S, Cout]
  return [a ^ b ^ cin, (a & b) | (cin & (a ^ b))];
}
// ২) চারটি ফুল অ্যাডার জুড়ে 4-bit রিপল-ক্যারি অ্যাডার
function add4(A, B) {
  let c = 0, sum = "";
  for (let i = 3; i >= 0; i--) {          // ডান দিকের bit (LSB) থেকে শুরু
    const [s, co] = fullAdder(+A[i], +B[i], c);
    sum = s + sum; c = co;                // carry পরের ধাপে "ঢেউ" হয়ে যায়
  }
  return "Cout=" + c + " Sum=" + sum;
}
console.log("0101 + 0011 ->", add4("0101", "0011"));
console.log("1111 + 0001 ->", add4("1111", "0001"));
// ৩) BCD -> 7-segment ডিকোডার: কোন অঙ্কে কোন segment জ্বলবে
const SEG = ["1111110", "0110000", "1101101", "1111001", "0110011",
             "1011011", "1011111", "1110000", "1111111", "1111011"];
console.log("digit  BCD   abcdefg  lit");
for (let d = 0; d <= 9; d++) {
  const lit = [..."abcdefg"].filter((x, i) => SEG[d][i] === "1").join("");
  console.log(" " + d + "    " + d.toString(2).padStart(4, "0") + "  " + SEG[d] + "  " + lit);
}

আউটপুট যা আসে: প্রথম লাইনে 0101 + 0011 -> Cout=0 Sum=1000 — স্টেপারের সেই ৫ + ৩ = ৮. দ্বিতীয় লাইনে 1111 + 0001 -> Cout=1 Sum=0000 — ১৫ + ১ = ১৬, যা চার bit-এ আঁটে না; তাই যোগফলের ঘরে 0000 আর শেষ carry 1 (overflow). তারপর ০ থেকে ৯-এর টেবিল, যেমন 5 0101 1011011 acdfg — ঠিক স্টেপারের ৫.

খেয়াল করুন, fullAdder ফাংশনে কোনো + চিহ্ন নেই — শুধু লজিক গেটের কাজ। এভাবেই সফটওয়্যারে একটি সার্কিট নকল (simulate) করা যায়। আর SEG তালিকাটি আসলে একটি ছোট lookup table — বাস্তবেও অনেক ডিকোডার গেটের বদলে ছোট ROM-এ এমন টেবিল রেখে কাজ সারে। চাইলে add4("0110", "0111") লিখে নিজের যোগ যাচাই করুন।

৭ · মাল্টিপ্লেক্সার, ডিমাল্টিপ্লেক্সার আর কম্পারেটর

বাসার টিভিতে কয়েকটি যন্ত্র লাগানো — ডিশের সেট-টপ বক্স, একটি ল্যাপটপ, একটি গেমিং কনসোল, একটি পেনড্রাইভ। পর্দা একটি, তাই একসাথে একটিই দেখা যায়। রিমোটের “Source” বা “Input” বোতাম দিয়ে আপনি বেছে নেন কোনটি দেখাবে। এই কাজটিই করে মাল্টিপ্লেক্সার (multiplexer, সংক্ষেপে MUX): অনেকগুলো ডেটা ইনপুটের মধ্য থেকে একটিকে বেছে আউটপুটে পাঠায়। কোনটি যাবে, তা ঠিক করে select line. এজন্য একে data selector-ও বলে।

2:1 আর 4:1 মাল্টিপ্লেক্সার

সবচেয়ে ছোট MUX-এ দুটি ইনপুট I0, I1 আর একটি select line S. S = 0 হলে Y = I0, S = 1 হলে Y = I1:

2:1 MUX:  Y = S'·I0 + S·I1

৪টি ইনপুট বাছাই করতে ২টি select line লাগে (S1 S0), কারণ ২ bit দিয়ে ৪টি নম্বর (00, 01, 10, 11) লেখা যায়। প্রতিটি পদ একটি AND গেট, যা “আমার পালা কি না” দেখে; শেষে একটি OR সব জুড়ে দেয়:

4:1 MUX:  Y = S1'S0'·I0 + S1'S0·I1 + S1S0'·I2 + S1S0·I3

সাধারণ নিয়ম: ২ⁿটি ইনপুটের MUX-এ select line nটি। ৮:১ MUX-এ ৩টি, ১৬:১ MUX-এ ৪টি। খেয়াল করুন, MUX-এর ভেতরে আসলে একটি ডিকোডার লুকিয়ে আছে — select line থেকে ঠিক একটি AND গেট “চালু” হয়। নিচে চারটি select মান পালাক্রমে দিয়ে দেখুন (ইনপুটগুলোতে I0 = 0, I1 = 1, I2 = 1, I3 = 0 রাখা আছে):

4:1 মাল্টিপ্লেক্সার বাঁ দিকে চারটি ইনপুট I0 থেকে I3, নিচে দুটি select line S1 আর S0, ডানে আউটপুট Y. প্রতিটি ধাপে বাছাই করা ইনপুট থেকে আউটপুট পর্যন্ত সবুজ পথ জ্বলে। 4:1 MUX I0 = 0 I1 = 1 I2 = 1 I3 = 0 Y S1 S0 00 01 10 11
select line আর আউটপুট
S1 S0
চালু AND পদ
Y
  1. চারটি ইনপুট, একটি আউটপুট। বাঁ দিকে চারটি ডেটা লাইন (টিভির চারটি যন্ত্রের মতো), ডানে একটি আউটপুট Y (পর্দা), নিচে দুটি select line (রিমোটের বোতাম)। select-এ কিছু না দিলে কোন ইনপুট যাবে, বলা যায় না।
  2. S1 S0 = 00. শুধু প্রথম পদ S1'S0'·I0 চালু হতে পারে — বাকি তিনটি AND গেটে কোনো না কোনো select-এর শর্ত মেলে না, তাই তারা 0. ফলে Y = I0 = 0.
  3. S1 S0 = 01. এবার শুধু S1'S0·I1 পদটি খোলা। I1 = 1, তাই Y = 1. ইনপুটের মান বদলায়নি — বদলেছে শুধু কোন দরজা খোলা।
  4. S1 S0 = 10. বাইনারি 10 = দশমিকে ২, তাই I2 বাছাই হলো; Y = I2 = 1. নিয়মটি সহজ: select line-এর বাইনারি মান = যে ইনপুট যাবে তার নম্বর।
  5. S1 S0 = 11. বাইনারি 11 = দশমিকে ৩ → I3. Y = 0. দুটি select line দিয়ে চারটি ইনপুটের যেকোনোটি বাছাই করা গেল; তিনটি থাকলে আটটির (৮:১ MUX).

MUX-এর একটি চমৎকার বাড়তি গুণ আছে: যেকোনো লজিক ফাংশন একটি MUX দিয়েই বানানো যায়। ৮:১ MUX-এর select-এ তিনটি ভেরিয়েবল দিন, আর আটটি ডেটা ইনপুটে truth table-এর আউটপুট কলামটি (0 বা 1) বসিয়ে দিন — হয়ে গেল সেই ফাংশন। এই ধারণাই পরে FPGA-র ভিত্তি হয়েছে (ভাবনার প্রশ্ন ৪ দেখুন)।

ডিমাল্টিপ্লেক্সার — একটি থেকে অনেক

ডিমাল্টিপ্লেক্সার (DEMUX) উল্টো কাজ করে: একটি ডেটা ইনপুটকে select line অনুযায়ী অনেকগুলো আউটপুটের যেকোনো একটিতে পাঠায়। ডাকঘরের বাছাইকারীর কথা ভাবুন — চিঠির স্তূপ একটি, কিন্তু ঠিকানা (select) দেখে প্রতিটি চিঠি নির্দিষ্ট থলেতে যায়। 1:4 DEMUX-এ: D0 = S1'S0'·X, D1 = S1'S0·X, D2 = S1S0'·X, D3 = S1S0·X. সমীকরণগুলো 2-to-4 ডিকোডারের মতোই, শুধু প্রতিটির সাথে ডেটা X গুণ — তাই enable-যুক্ত একটি ডিকোডারকেই DEMUX হিসেবে চালানো যায় (enable-এ ডেটা দিয়ে)।

যোগাযোগের জগতে এই জুটি খুব গুরুত্বপূর্ণ: পাঠানোর প্রান্তে MUX অনেকগুলো সংকেত পালাক্রমে একটি তারে পাঠায়, আর গ্রহণের প্রান্তে DEMUX সেগুলো আবার আলাদা করে — মাল্টিপ্লেক্সিংয়ের এই ধারণা পর্ব ৩০-এ দেখবেন।

কম্পারেটর — দুটি সংখ্যা কি সমান?

দুটি bit সমান কি না জানতে চাই — দুটিই 0 বা দুটিই 1 হলে আউটপুট 1. এটি XOR-এর ঠিক উল্টো, অর্থাৎ XNOR: E = (A ⊕ B)' = A'B' + AB. এক-bit কম্পারেটর সাধারণত আরও দুটি আউটপুটও দেয়: A > B হলে AB' = 1, আর A < B হলে A'B = 1. বহু-bit সংখ্যা সমান কি না জানতে প্রতিটি bit-জোড়ার XNOR বের করে সবগুলো একটি AND গেটে দেওয়া হয় — সব জোড়া মিললে তবেই 1. পাসওয়ার্ডের hash মেলানো থেকে CPU-র “if (a == b)” — সবখানে শেষ পর্যন্ত এই তুলনাই চলে।

৮ · CPU-র ভেতরে আর বাস্তব চিপে

এতক্ষণ যে ব্লকগুলো দেখলেন, সেগুলো জুড়েই CPU-র হিসাব করার অংশ — ALU (Arithmetic Logic Unit) — তৈরি। একটি খুব সরল ALU কল্পনা করুন: দুটি সংখ্যা A আর B একসাথে কয়েকটি সার্কিটে যায় — একটি অ্যাডার/সাবট্রাক্টর, একটি AND-এর সারি, একটি OR-এর সারি, একটি XOR-এর সারি। সবগুলো সার্কিট একসাথে নিজের উত্তর তৈরি করে। তারপর একটি মাল্টিপ্লেক্সার, যার select line-এ আসে control unit-এর পাঠানো “অপারেশন কোড”, ঠিক করে কোন উত্তরটি বেরোবে।

একটি সরল ALU-র ভেতরের ছবি

Adders + logic units in parallel, a MUX picks the result

A (৮ bit)প্রথম সংখ্যা
B (৮ bit)দ্বিতীয় সংখ্যা
অ্যাডার / সাবট্রাক্টরফুল অ্যাডারের সারি + XOR
AND · OR · XORbit ধরে ধরে লজিক
কম্পারেটরসমান? বড়? ছোট?
মাল্টিপ্লেক্সারopcode = select line
ফল + flagcarry, zero, overflow

ALU ছাড়াও CPU আর কম্পিউটারের ভেতরে কম্বিনেশনাল সার্কিট সর্বত্র: মেমরির ঠিকানা থেকে চিপ ও সারি বাছাইয়ে ডিকোডার; কোন রেজিস্টার থেকে ডেটা নেবে তা বাছাইয়ে মাল্টিপ্লেক্সার; নির্দেশ ডিকোড করতে control unit-এর ভেতরের ডিকোডার। আর এগুলো সময়ের তালে তালে চালাতে লাগে রেজিস্টার আর ক্লক — সিকোয়েনশিয়াল অংশ, যা পরের পর্বে আসছে। CPU কীভাবে এই দুই অংশ মিলিয়ে নির্দেশ চালায়, তা দেখবেন পর্ব ২৪-এ।

বাস্তবের চিপ — TTL 74-সিরিজ

আজকের CPU-তে এই সব সার্কিট শত কোটি transistor-এর ভেতরে মিশে থাকে, আলাদা করে চোখে দেখা যায় না। কিন্তু ল্যাব, শিক্ষা আর ছোট প্রকল্পে এখনো আলাদা IC ব্যবহার হয়। ১৯৬০-এর দশকে Texas Instruments-এর চালু করা 7400 সিরিজের কিছু পরিচিত চিপ:

ICকাজভেতরে কী
7483 (বা 74283)৪-bit বাইনারি অ্যাডারচারটি ফুল অ্যাডার, দ্রুত carry-সহ
741383-to-8 ডিকোডার৩ ইনপুট, ৮ আউটপুট (active-low), enable ইনপুট
741488-to-3 priority encoderএকাধিক ইনপুটে সর্বোচ্চটিকে অগ্রাধিকার
741518:1 মাল্টিপ্লেক্সার৮ ডেটা ইনপুট, ৩ select line
7447 / 7448BCD-to-7-segment ডিকোডার/ড্রাইভার7447 common anode, 7448 common cathode ডিসপ্লের জন্য
7485৪-bit ম্যাগনিচিউড কম্পারেটরA > B, A = B, A < B

“Active-low” মানে আউটপুট চালু হলে 0 হয়, বন্ধ থাকলে 1 — অনেক চিপে বৈদ্যুতিক সুবিধার জন্য এভাবে করা হয়। ডেটাশিটে নামের মাথায় দাগ বা নামের শেষে “N” দেখলে বুঝবেন সংকেতটি active-low.

পরীক্ষা ও ইন্টারভিউতে — এ ধরনের প্রশ্ন প্রায়ই আসে:

  • হাফ অ্যাডার আর ফুল অ্যাডারের পার্থক্য? হাফ অ্যাডারে ইনপুট ২টি (A, B), আগের carry নিতে পারে না; ফুল অ্যাডারে ইনপুট ৩টি (A, B, Cin). দুটিরই আউটপুট S আর carry. ফুল অ্যাডার = ২টি হাফ অ্যাডার + ১টি OR গেট।
  • n ইনপুটের ডিকোডারে কয়টি আউটপুট? ২ⁿটি — যেমন ৩ ইনপুটে ৮টি, ৪ ইনপুটে ১৬টি। এনকোডারে উল্টো: ২ⁿ ইনপুট থেকে n আউটপুট।
  • ৮:১ মাল্টিপ্লেক্সারে কয়টি select line? ৩টি, কারণ ২³ = ৮.
  • এনকোডার আর ডিকোডারের পার্থক্য? এনকোডার মানুষের বোঝা সংকেতকে (যেমন দশমিক বোতাম) বাইনারি কোডে নেয়; ডিকোডার বাইনারি কোডকে আবার আলাদা লাইন বা মানুষের বোঝা রূপে (যেমন 7-segment-এর অঙ্ক) ফেরায়।
  • সৃজনশীল প্রশ্নের ধরন: উদ্দীপকে একটি সার্কিট দিয়ে বলা হয়, “এটি কোন সার্কিট? truth table লিখুন; দুটি হাফ অ্যাডার দিয়ে ফুল অ্যাডার তৈরি করে দেখান; সার্কিটটি সরল করুন।” মনে রাখুন: S আর Cout দুটি সমীকরণ, truth table-এ ৮টি সারি, আর ডায়াগ্রামে তারের জোড়া বিন্দু দিয়ে দেখাতে হয়।

আরও গভীরে — এই পর্বের প্রতিটি ব্লকের আরও খুঁটিনাটি নকশা (K-map দিয়ে 7-segment-এর সমীকরণ, carry-lookahead-এর পূর্ণ সূত্র, MUX দিয়ে যেকোনো ফাংশন বানানো) দেখতে পারেন আমাদের Computer Architecture & Digital Logic কোর্সে — বিশেষ করে সেখানকার হাফ-ফুল অ্যাডার, রিপল-ক্যারি অ্যাডার আর মাল্টিপ্লেক্সারের পর্বগুলোতে। আর যাঁরা নিজে হাতে বানাতে চান, তাঁরা একটি breadboard-এ 7483 আর 7448 চিপ দিয়ে ছোট একটি যোগ-যন্ত্র বানানোর চেষ্টা করতে পারেন (যোগফল ৯-এর বেশি হলে তা দেখাতে বাড়তি BCD সংশোধন লাগে)।

৯ · AI-এর যুগে — truth table যাচাই করুন

AI চ্যাটবট মুহূর্তে একটি সার্কিটের truth table, সমীকরণ, এমনকি Verilog কোডও লিখে দিতে পারে। পরীক্ষার প্রস্তুতি বা প্রকল্পে এটি দারুণ সাহায্য। কিন্তু truth table-এর একটি সারি ভুল হলেই পুরো সার্কিট ভুল — আর AI ঠিক এ ধরনের ছোট, দেখতে-নিরীহ ভুল প্রায়ই করে, কারণ সে হিসাব করে না, শুধু সম্ভাব্য লেখা তৈরি করে।

AI-এর সাধারণ ভুলকীভাবে ধরবেন
ফুল অ্যাডারের truth table-এ একটি সারির Cout ভুল (যেমন 1, 0, 1-এ Cout = 0)প্রতিটি সারিতে ইনপুটের 1 গুনুন: ২ বা ৩টি হলে Cout = 1
সারির সংখ্যা ভুল — ৩ ইনপুটে ৬ বা ৭টি সারিn ইনপুটে ঠিক ২ⁿটি সারি, 000 থেকে 111 ক্রমে
এনকোডার আর ডিকোডারের ইনপুট-আউটপুট সংখ্যা উল্টে বলাডিকোডার: অল্প থেকে অনেক (n → ২ⁿ)
MUX-এর select line-এর সংখ্যা ভুল (৮:১-এ ৮টি বা ৪টি)log₂(ইনপুট সংখ্যা) — ৮:১-এ ৩টি
7-segment-এ segment-এর নাম গুলিয়ে ফেলা (b আর f অদলবদল)a ওপরে, তারপর ঘড়ির কাঁটার দিকে b, c, d, e, f, মাঝে g
IC নম্বর বানিয়ে বলা বা কাজ ভুল বলানির্মাতার (TI, Nexperia ইত্যাদি) ডেটাশিটে নম্বরটি খুঁজুন

সবচেয়ে ভালো যাচাই হলো সার্কিটটি চালিয়ে দেখা। এজন্য দুটি বিনা মূল্যের সিমুলেটর আছে: Logisim Evolution (কম্পিউটারে ইনস্টল করে চালানো ওপেন সোর্স সফটওয়্যার) আর CircuitVerse (ব্রাউজারেই চলে, কিছু ইনস্টল লাগে না)। গেট টেনে এনে তার জুড়ুন, ইনপুটের সুইচ বদলান, আউটপুটের বাতি দেখুন। Logisim Evolution নিজে থেকে একটি সার্কিটের পুরো truth table-ও বানিয়ে দিতে পারে — AI-এর টেবিলের সাথে মেলানোর সহজ উপায়।

নিচের prompt-টি কপি করে ব্যবহার করুন। খেয়াল করুন, AI-কে প্রতিটি সারির হিসাব দেখাতে আর নিজের উত্তর নিজে যাচাই করতে বলা হয়েছে:

আমি HSC ICT-র জন্য কম্বিনেশনাল সার্কিট পড়ছি। একটি ফুল অ্যাডার নিয়ে নিচের কাজগুলো করো: ১. A, B, Cin — তিন ইনপুটের পুরো truth table দাও (৮টি সারি, 000 থেকে 111 ক্রমে)। প্রতিটি সারির পাশে লেখো ইনপুটে কয়টি 1 আছে, আর সেখান থেকে S ও Cout কীভাবে এল। ২. S আর Cout-এর সমীকরণ দাও, আর দেখাও কীভাবে দুটি হাফ অ্যাডার আর একটি OR গেট দিয়ে এটি বানানো যায়। ৩. শেষে নিজের টেবিলের প্রতিটি সারি সমীকরণে বসিয়ে মিলিয়ে দেখো; কোনো সারি না মিললে স্পষ্ট করে বলো। ৪. কোনো IC নম্বর বললে লেখো সেটি নিশ্চিত কি না — অনুমান হলে “অনুমান” লিখবে।

AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন। ইতিহাস আর প্রকৌশলের এই গল্পগুলো ছোট গেটগুলোর বড় প্রভাব দেখাবে।

প্র ০১যোগ করার মতো সহজ কাজে carry-র গতি নিয়ে প্রকৌশলীরা প্রায় দুইশো বছর ধরে মাথা ঘামিয়েছেন কেন? carry-lookahead কীভাবে এল?

সমস্যাটি ইলেকট্রনিক কম্পিউটারের চেয়েও পুরোনো। উনিশ শতকে Charles Babbage যখন তাঁর যান্ত্রিক হিসাবযন্ত্র নকশা করছিলেন, তখনই তিনি বুঝেছিলেন যে যোগের সবচেয়ে ধীর অংশ হলো carry. ৯৯৯৯৯৯ + ১ করলে প্রতিটি চাকাকে একটির পর একটি ঘুরতে হয় — ঠিক রিপল-ক্যারির মতো। Babbage তাঁর Analytical Engine-এর জন্য একটি “anticipating carriage” কৌশল ভেবেছিলেন, যা আগেভাগে বুঝে নেয় কোন কোন ঘরে carry যাবে, যাতে সব চাকা প্রায় একসাথে ঘোরে। ধারণার দিক থেকে এটিই carry-lookahead-এর পূর্বপুরুষ।

ইলেকট্রনিক যুগে প্রথম দিকের কম্পিউটারে রিপল-ক্যারি চলত, কারণ গেট ছিল দামি — প্রতিটি গেট মানে ভ্যাকুয়াম টিউব বা আলাদা transistor. কিন্তু শব্দের দৈর্ঘ্য ৩২-৪০ bit-এ পৌঁছাতেই carry-র ঢেউ পুরো যন্ত্রের গতি বেঁধে দিল। ১৯৫০-এর দশকের শেষ দিকে (১৯৫৮ সালে A. Weinberger আর J. L. Smith-এর একটি প্রবন্ধে) ইলেকট্রনিক carry-lookahead-এর পদ্ধতিগত রূপ প্রকাশিত হয়, আর ১৯৬০-এর দশকের বড় কম্পিউটারগুলোতে দ্রুত অ্যাডার মানক হয়ে ওঠে।

কেন এত গুরুত্ব? প্রতিটি নির্দেশ চালাতে CPU-র একটি ঘড়ির টিক লাগে, আর একটি টিকের দৈর্ঘ্য ঠিক হয় সবচেয়ে ধীর পথ দিয়ে — যাকে বলে critical path. প্রায় সব CPU-তে অ্যাডার সেই পথের অংশ, কারণ শুধু যোগ নয়, মেমরির ঠিকানা হিসাব, লুপের গণনা, তুলনা — সবকিছুতে যোগ লাগে। রিপল-ক্যারিতে ৬৪-bit যোগের সময় bit-সংখ্যার সাথে সমানুপাতে বাড়ে; lookahead গাছের মতো সাজালে বাড়ে মোটামুটি log₂(n) অনুপাতে — ৬৪ bit-এ ৬৪ ধাপের বদলে মাত্র ৬-৭ স্তর।

পরে আরও উন্নত নকশা এসেছে — carry-select, carry-skip, আর Kogge–Stone (১৯৭৩) বা Brent–Kung-এর মতো “parallel prefix” অ্যাডার, যা আজকের দ্রুত প্রসেসরে দেখা যায়। প্রতিটির মূল দর-কষাকষি একই: বেশি গেট, বেশি জায়গা আর বেশি বিদ্যুতের বিনিময়ে কম অপেক্ষা।

মূল উপলব্ধি: একটি সার্কিট “ঠিক উত্তর দেয়” — এটুকুই যথেষ্ট নয়; কত দ্রুত দেয়, সেটিও নকশার অংশ। গতি আর খরচের এই টানাপোড়েন ডিজিটাল নকশার প্রতিটি স্তরে আছে, আর অ্যাডার তার সবচেয়ে পুরোনো ও সুন্দর উদাহরণ।

প্র ০২“8” আকৃতির 7-segment ডিসপ্লে কোথা থেকে এল, আর আজও কেন টিকে আছে?

দাগ জোড়া দিয়ে অঙ্ক বানানোর ধারণা বেশ পুরোনো। ১৯০৮ সালে যুক্তরাষ্ট্রে Frank W. Wood নামে একজন উদ্ভাবক একটি পেটেন্টের আবেদন করেন, যেখানে আটটি খণ্ড দিয়ে অঙ্ক দেখানোর নকশা ছিল — আজকের সাত খণ্ডের সাথে প্রায় মিল, শুধু ৪ অঙ্কটি সুন্দর করতে একটি বাড়তি তির্যক দাগ। তখন এটি বাতি বা বিজ্ঞাপনের বোর্ডের মতো কাজের কথা ভেবে করা, ইলেকট্রনিক্সের জন্য নয়। পরের কয়েক দশক এই ধারণা খুব একটা ছড়ায়নি।

১৯৫০-৬০-এর দশকে ইলেকট্রনিক যন্ত্রে সংখ্যা দেখাত Nixie tube — কাচের নলের ভেতরে ০ থেকে ৯-এর আকারে বাঁকানো দশটি আলাদা তার, যেটিতে বিদ্যুৎ যেত সেটি কমলা আলোয় জ্বলত। সুন্দর, কিন্তু উচ্চ ভোল্টেজ লাগত, ভঙ্গুর আর দামি। ১৯৭০-এর দশকে দুটি প্রযুক্তি একসাথে পরিপক্ব হলো: লাল LED আর সস্তা IC. পকেট ক্যালকুলেটর (যেমন ১৯৭২ সালের HP-35) আর প্রথম দিকের ডিজিটাল ঘড়িতে লাল LED-র 7-segment অঙ্ক দেখা গেল। LED অনেক বিদ্যুৎ খেত — ঘড়িতে সময় দেখতে বোতাম চাপতে হতো। তাই অল্প পরেই LCD 7-segment এল, যা প্রায় বিদ্যুৎ ছাড়াই চলে; আজকের সস্তা ক্যালকুলেটর আর ঘড়িতে সেটিই।

টিকে থাকার কারণ সরলতা। একটি অঙ্কের জন্য মাত্র ৭টি (দশমিক বিন্দুসহ ৮টি) তার লাগে, আর একটি ছোট ডিকোডার চিপই যথেষ্ট — পুরো পর্দার মতো লাখো pixel সামলাতে হয় না। দূর থেকে পড়া যায়, রোদে দেখা যায়, অনেক বছর চলে। এজন্য পেট্রল পাম্পের মিটার, ইলেকট্রিক মিটার, মাইক্রোওয়েভ, ট্রাফিক টাইমার, ডিজিটাল দাঁড়িপাল্লায় আজও এটি। আরও অক্ষর দেখাতে 14-segment আর 16-segment ডিসপ্লেও আছে, কিন্তু অঙ্কের জন্য সাতটিই যথেষ্ট প্রমাণিত হয়েছে।

অনেকগুলো অঙ্ক একসাথে থাকলে আরেকটি কৌশল লাগে — multiplexed display: সব অঙ্কের segment-তার এক সাথে জোড়া, আর প্রতিটি অঙ্ক খুব দ্রুত পালাক্রমে জ্বলে। চোখ এত দ্রুত বদল ধরতে পারে না, তাই মনে হয় সব একসাথে জ্বলছে — এখানেও মাল্টিপ্লেক্সার আর ডিকোডারের জুটি!

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

প্র ০৩টেলিফোন নেটওয়ার্ক কীভাবে একটি তারে হাজারো কথোপকথন পাঠায়? মাল্টিপ্লেক্সারের সাথে এর সম্পর্ক কী?

টেলিফোনের প্রথম যুগে প্রতিটি কলের জন্য দুই শহরের মধ্যে আলাদা তারের জোড়া লাগত। শহর বাড়ার সাথে খুঁটিতে তারের জঙ্গল এমন হলো যে আর জায়গা ছিল না। সমাধান — একটি পথে অনেক কথা একসাথে পাঠানো, অর্থাৎ multiplexing. প্রথমে এসেছিল frequency-division multiplexing (FDM): প্রতিটি কল আলাদা কম্পাঙ্কে, যেমন রেডিওর আলাদা স্টেশন।

ডিজিটাল যুগে এল time-division multiplexing (TDM). মানুষের কণ্ঠ ডিজিটাল করতে প্রতি সেকেন্ডে ৮,০০০ বার নমুনা নেওয়া হয়, প্রতিটি নমুনা ৮ bit — অর্থাৎ একটি কলে সেকেন্ডে ৬৪,০০০ bit. কিন্তু একটি ভালো তার এর চেয়ে বহু গুণ দ্রুত bit পাঠাতে পারে। তাই একটি মাল্টিপ্লেক্সার পালাক্রমে প্রতিটি কলের একটি করে নমুনা তুলে তারে পাঠায় — কল ১, কল ২, … কল ২৪, আবার কল ১। অন্য প্রান্তে ঠিক একই তালে ঘোরা একটি ডিমাল্টিপ্লেক্সার প্রতিটি নমুনা ঠিক মানুষের কাছে পৌঁছে দেয়। ১৯৬২ সালে যুক্তরাষ্ট্রে Bell System-এর T1 লাইন এভাবে ২৪টি কল একসাথে পাঠাত (১.৫৪৪ Mbps). ইউরোপ আর বাংলাদেশসহ অনেক দেশে প্রচলিত হয় E1 — ৩২টি টাইম-স্লট, ২.০৪৮ Mbps.

এই পর্বের 4:1 MUX-এর সাথে মিলিয়ে দেখুন: select line 00, 01, 10, 11 পালাক্রমে ঘোরালে আউটপুটে I0, I1, I2, I3 একটির পর একটি বেরোয় — এটিই TDM-এর মূল যন্ত্র। পার্থক্য শুধু গতিতে আর আকারে। পরে অপটিক্যাল ফাইবারে আলোর আলাদা রঙে (wavelength-division multiplexing) আরও বহু গুণ ডেটা পাঠানো সম্ভব হলো; আর মোবাইল নেটওয়ার্কে সময়, কম্পাঙ্ক আর কোড মিলিয়ে নানা রকম multiplexing চলে।

এই ধারণাগুলো — ব্যান্ডউইথ, মাধ্যম, মাল্টিপ্লেক্সিংয়ের প্রকার — বিস্তারিত দেখবেন পর্ব ৩০-এ।

মূল উপলব্ধি: মাল্টিপ্লেক্সার শুধু চিপের ভেতরের একটি ছোট সার্কিট নয় — “একটি দামি পথ অনেকের মধ্যে ভাগ করে নেওয়া”-র ধারণা। একই ধারণা বিশ্বের টেলিযোগাযোগ ব্যবস্থার ভিত্তি।

প্র ০৪FPGA কী? একটি চিপ কীভাবে প্রয়োজনমতো অ্যাডার, ডিকোডার বা পুরো একটি প্রসেসর হয়ে যেতে পারে?

সাধারণ চিপের ভেতরের তার কারখানায় স্থায়ীভাবে বসানো — 7483 সারাজীবন অ্যাডারই থাকবে। কিন্তু নতুন একটি সার্কিটের জন্য কাস্টম চিপ বানানো অত্যন্ত ব্যয়বহুল আর সময়সাপেক্ষ। প্রকৌশলীরা তাই এমন চিপ চাইছিলেন, যার ভেতরের লজিক পরে বদলানো যায়। ১৯৭০-এর দশকে PLA আর PAL নামে প্রোগ্রাম করা যায় এমন লজিক চিপ এল — ভেতরে AND আর OR গেটের সারি, যাদের সংযোগ প্রয়োজনমতো বেছে নেওয়া যায়। এতে sum-of-products রূপের যেকোনো সমীকরণ বসানো যেত।

বড় লাফটি আসে ১৯৮৫ সালে, যখন Xilinx প্রথম বাণিজ্যিক FPGA (Field-Programmable Gate Array) — XC2064 — বাজারে আনে। “Field-programmable” মানে কারখানায় নয়, ব্যবহারকারীর হাতে (মাঠে) প্রোগ্রাম করা যায়। এর ভেতরে হাজারো ছোট ব্লক, প্রতিটির হৃদয়ে একটি LUT (lookup table) — কয়েকটি মেমরি সেল আর একটি মাল্টিপ্লেক্সার। এই পর্বের ধারণাটি মনে করুন: MUX-এর select-এ ভেরিয়েবলগুলো দিন, ডেটা ইনপুটে truth table-এর আউটপুট কলাম বসান — যেকোনো ফাংশন তৈরি। LUT ঠিক তাই করে; truth table-টি থাকে মেমরি সেলে, তাই মান বদলালেই ফাংশন বদলে যায়। ব্লকগুলোর মধ্যের সংযোগও প্রোগ্রাম করা যায় এমন সুইচ দিয়ে।

আজকের বড় FPGA-তে লাখো LUT, সাথে দ্রুত অ্যাডারের জন্য বিশেষ carry-chain, মেমরি ব্লক, এমনকি পুরো প্রসেসর কোর। প্রকৌশলীরা Verilog বা VHDL-এর মতো hardware description language-এ সার্কিট লেখেন, আর সফটওয়্যার তা LUT আর সংযোগে রূপান্তর করে। ব্যবহার: টেলিকম যন্ত্র, মেডিকেল ইমেজিং, শেয়ারবাজারের অতি-দ্রুত লেনদেন, নতুন চিপ বাজারে আনার আগে পরীক্ষা, এমনকি পুরোনো গেম কনসোলের হার্ডওয়্যার হুবহু নকল করা।

দর-কষাকষিও আছে: একই কাজে কাস্টম চিপের (ASIC) চেয়ে FPGA ধীর, বেশি বিদ্যুৎ খায় আর প্রতি পিস দামি; কিন্তু অল্প সংখ্যায় দরকার হলে বা নকশা বারবার বদলালে FPGA-ই সাশ্রয়ী।

মূল উপলব্ধি: “হার্ডওয়্যার বদলায় না” — এই ধারণা FPGA ভেঙে দিয়েছে। আর এর মূলে আছে এই পর্বেরই সরল একটি সত্য: truth table + মাল্টিপ্লেক্সার = যেকোনো কম্বিনেশনাল সার্কিট।

প্র ০৫CPU-র ALU কি সত্যিই শুধু অ্যাডার, মাল্টিপ্লেক্সার আর কিছু নিয়ন্ত্রণ? একটি চিপের গল্প দিয়ে বোঝান।

হ্যাঁ, মূল কাঠামো অবাক করার মতো সরল। এর সবচেয়ে বিখ্যাত উদাহরণ Texas Instruments-এর 74181 — ১৯৭০ সালের দিকে বাজারে আসা একটি ৪-bit ALU চিপ। এর ৪টি select ইনপুট আর একটি mode ইনপুট দিয়ে ১৬টি লজিক কাজ (AND, OR, XOR, NOT ইত্যাদি) আর ১৬টি গাণিতিক কাজ (যোগ, বিয়োগ, এক বাড়ানো, দ্বিগুণ করা ইত্যাদি) — মোট ৩২টি কাজ বাছাই করা যেত। চিপের ভেতরে ছিল কয়েক ডজন গেট: প্রতিটি bit-এর জন্য generate/propagate ধরনের সংকেত, একটি carry-lookahead অংশ, আর আউটপুটে XOR. কয়েকটি 74181 পাশাপাশি জুড়ে ১৬ বা ৩২ bit-এর ALU বানানো যেত। ১৯৭০-এর দশকের অনেক মিনিকম্পিউটারের CPU আসলে এই চিপগুলোর সারি দিয়েই বানানো ছিল।

আজকের ALU অনেক বড় আর দ্রুত, কিন্তু ধারণা একই। অপারেশন কোড আসে control unit থেকে; কয়েকটি ফাংশনাল ইউনিট (অ্যাডার, শিফটার, লজিক ইউনিট) একসাথে কাজ করে বা কোডের সংকেতে প্রস্তুত হয়; আর মাল্টিপ্লেক্সার ঠিক উত্তরটি বেছে রেজিস্টারে পাঠায়। সাথে কয়েকটি flag তৈরি হয় — ফল শূন্য কি না (zero), শেষ carry এল কি না, overflow হলো কি না, ফল ঋণাত্মক কি না। প্রোগ্রামের প্রতিটি “if” এই flag দেখে সিদ্ধান্ত নেয়।

লক্ষ করুন, বিয়োগের জন্য আলাদা যন্ত্র নেই — অংশ ৪-এর মতো XOR আর Cin = 1 দিয়ে একই অ্যাডার বিয়োগ করে। তুলনাও (a < b?) আসলে একটি বিয়োগ, তারপর flag দেখা। গুণ-ভাগ আরও জটিল — অনেক অ্যাডারের সারি বা কয়েক ঘড়ির টিক ধরে বারবার যোগ — কিন্তু ভিত্তি সেই ফুল অ্যাডার। আধুনিক CPU-তে একাধিক ALU থাকে, যাতে একই সময়ে কয়েকটি নির্দেশ চলতে পারে।

একজন ছাত্রের কাছে এর মানে হলো: একটি ফুল অ্যাডার বুঝলে আপনি সত্যিই CPU-র হিসাবের মূল বুঝে গেছেন; বাকিটা সংখ্যায় বাড়ানো, গতির জন্য সাজানো আর নিয়ন্ত্রণ যোগ করা। পর্ব ২৪-এ দেখবেন control unit কীভাবে নির্দেশ এনে ALU-কে কাজ বুঝিয়ে দেয়।

মূল উপলব্ধি: জটিল যন্ত্র মানে জটিল ধারণা নয় — সরল ব্লকের বুদ্ধিমান পুনরাবৃত্তি। অ্যাডার হিসাব করে, মাল্টিপ্লেক্সার বাছাই করে, ডিকোডার নির্দেশ দেয় — এই তিনটি মিলেই কম্পিউটারের “মস্তিষ্কের” হিসাবের অংশ।

অনুশীলন

খাতা-কলম নিন। চাইলে উত্তরগুলো CircuitVerse বা Logisim Evolution-এ সার্কিট বানিয়েও মিলিয়ে দেখুন।

  1. সিঁড়ির বাতি নকশা করুন: সিঁড়ির নিচে সুইচ A, ওপরে সুইচ B. দুটি সুইচ উল্টো অবস্থানে থাকলে বাতি L জ্বলবে। পাঁচ ধাপের রেসিপি মেনে truth table, সমীকরণ আর কোন গেট লাগবে লিখুন।

    Truth table: AB = 00 → L = 0; 01 → 1; 10 → 1; 11 → 0. যে দুটি সারিতে L = 1, সেখান থেকে সমীকরণ: L = A'B + AB' = A ⊕ B. অর্থাৎ একটি XOR গেটই যথেষ্ট (অথবা ২টি NOT, ২টি AND আর ১টি OR দিয়ে)। মজার ব্যাপার, এটি হাফ অ্যাডারের S আউটপুটের সাথে হুবহু এক — সিঁড়ির বাতি আসলে দুটি bit-এর যোগফলের শেষ অঙ্ক দেখাচ্ছে! এটি কম্বিনেশনাল, কারণ বাতির অবস্থা শুধু এখনকার সুইচের ওপর নির্ভর করে।

  2. রিপল-ক্যারি নিজে চালান: 0110 + 0111 যোগ করুন। প্রতিটি ফুল অ্যাডারের (FA0 থেকে FA3) Cin, S আর Cout লিখুন। উত্তর দশমিকে মিলিয়ে দেখুন।

    FA0: 0 + 1 + 0 → S = 1, Cout = 0. FA1: 1 + 1 + 0 → S = 0, Cout = 1. FA2: 1 + 1 + 1 → S = 1, Cout = 1. FA3: 0 + 0 + 1 → S = 1, Cout = 0. যোগফল 1101 = দশমিকে ১৩, আর ৬ + ৭ = ১৩ — মিলেছে। শেষ Cout = 0, তাই overflow নেই। FA2-তে তিনটি 1 — সেখানে S আর Cout দুটিই 1, ঠিক স্টেপারের 1 + 1 + 1-এর মতো। পেজের JavaScript ব্লকে add4("0110", "0111") লিখে চালালেও একই উত্তর পাবেন।

  3. সংখ্যার নিয়ম: (ক) 3-to-8 ডিকোডারের ইনপুট 101 হলে কোন আউটপুট চালু হবে? (খ) ৫টি ইনপুটের ডিকোডারে কয়টি আউটপুট? (গ) ১৬:১ MUX-এ কয়টি select line? (ঘ) ৩২টি ইনপুট লাইনের এনকোডারে কয়টি আউটপুট?

    (ক) 101 = দশমিকে ৫, তাই D5 = 1, বাকি সাতটি 0. এর AND পদ: D5 = AB'C. (খ) ২⁵ = ৩২টি। (গ) ২⁴ = ১৬, তাই ৪টি। (ঘ) ৩২ = ২⁵, তাই ৫টি আউটপুট। সব প্রশ্নের চাবি একটিই সম্পর্ক — n bit দিয়ে ২ⁿটি আলাদা জিনিস চেনা যায়। ডিকোডার আর MUX-এ n দেওয়া থাকে, ২ⁿ বের করতে হয়; এনকোডারে ২ⁿ দেওয়া থাকে, n বের করতে হয়।

  4. ডিসপ্লে পর্যবেক্ষণ: বাসার মাইক্রোওয়েভ, ক্যালকুলেটর বা ডিজিটাল ঘড়ির ডিসপ্লেতে ৩, ৬, ৭ আর ৯ অঙ্কগুলো ভালো করে দেখুন। কোন কোন segment জ্বলছে? ৬-এর মাথায় a আর ৭-এর পাশে f জ্বলে কি? এরপর টেবিল থেকে বের করুন — কোন segment সবচেয়ে বেশি অঙ্কে জ্বলে, আর কোনটি সবচেয়ে কম?

    ৩ = a, b, c, d, g; ৬ = a, c, d, e, f, g; ৭ = a, b, c; ৯ = a, b, c, d, f, g (এই পর্বের টেবিল অনুযায়ী)। অনেক ক্যালকুলেটরে ৬-এর মাথায় a জ্বলে আর ৯-এ নিচের d জ্বলে; কিছু পুরোনো যন্ত্রে ৬-এর a বা ৯-এর d থাকে না, আর কিছুতে ৭-এর সাথে f-ও জ্বলে — নির্মাতাভেদে পার্থক্য। টেবিল গুনলে: c জ্বলে ৯টি অঙ্কে (শুধু ২ বাদে) — সবচেয়ে বেশি; e জ্বলে মাত্র ৪টিতে (০, ২, ৬, ৮) — সবচেয়ে কম। এই গণনা প্রকৌশলীদের কাজে লাগে: যে segment বেশি জ্বলে, তার LED আগে দুর্বল হয়, আর বিদ্যুৎ খরচের হিসাবেও এটি জরুরি।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি কম্বিনেশনাল সার্কিট নকশার ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ❓ সমস্যা বুঝে ইনপুট-আউটপুট ঠিক করা
  2. 📋 সব ইনপুট-সমাবেশের truth table লেখা
  3. ✏️ আউটপুট 1 হওয়া সারি থেকে সমীকরণ লেখা
  4. ✂️ বুলিয়ান উপপাদ্য বা K-map দিয়ে সরল করা
  5. 🔌 গেট জুড়ে লজিক ডায়াগ্রাম আঁকা
  6. 🧪 সিমুলেটরে সব ইনপুট দিয়ে পরীক্ষা করা

একটি হাফ অ্যাডারের দুটি ইনপুটই 1 (A = 1, B = 1) হলে আউটপুট কী হবে?

  • S = 1, C = 0
  • S = 0, C = 0
  • S = 0, C = 1
  • S = 1, C = 1

৪টি ইনপুট লাইনের একটি ডিকোডারে সর্বোচ্চ কয়টি আউটপুট লাইন থাকে?

  • ৪টি
  • ৮টি
  • ১২টি
  • ১৬টি

একটি ৮:১ মাল্টিপ্লেক্সারে কয়টি select line প্রয়োজন?

  • ২টি
  • ৩টি
  • ৮টি
  • ৪টি

ফুল অ্যাডারের carry আউটপুট Cout-এর সঠিক সমীকরণ কোনটি?

  • Cout = AB + Cin(A ⊕ B)
  • Cout = A ⊕ B ⊕ Cin
  • Cout = AB
  • Cout = A + B + Cin

নিচের কোনটি কম্বিনেশনাল সার্কিট, অর্থাৎ যার আউটপুট শুধু বর্তমান ইনপুটের ওপর নির্ভর করে?

  • ফ্লিপ-ফ্লপ
  • কাউন্টার
  • মাল্টিপ্লেক্সার
  • রেজিস্টার

একটি 7-segment ডিসপ্লেতে (segment a থেকে g) অঙ্ক ১ দেখাতে কোন segment-গুলো জ্বলে?

  • a আর d
  • b আর c
  • e আর f
  • শুধু g

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. কম্বিনেশনাল সার্কিট = আউটপুট শুধু বর্তমান ইনপুটে, কোনো মেমরি নেই। নকশার ধাপ: সমস্যা → truth table → সমীকরণ → সরলীকরণ → সার্কিট।
  2. হাফ অ্যাডার: S = A ⊕ B, C = AB. ফুল অ্যাডার: S = A ⊕ B ⊕ Cin, Cout = AB + Cin(A ⊕ B) = ২টি হাফ অ্যাডার + ১টি OR.
  3. রিপল-ক্যারি অ্যাডার = ফুল অ্যাডারের শিকল; carry-র ঢেউ ধীর, তাই দ্রুত CPU-তে carry-lookahead. XOR + Cin = 1 দিয়ে একই অ্যাডারে বিয়োগ।
  4. এনকোডার ২ⁿ → n, ডিকোডার n → ২ⁿ; BCD-to-7-segment ডিকোডার অঙ্ক জ্বালায় (৫ = a, c, d, f, g).
  5. MUX অনেক থেকে এক বাছাই করে (২ⁿ ইনপুটে n select line), DEMUX এক থেকে অনেকে পাঠায়; ALU = অ্যাডার + লজিক + MUX.

পরের পর্বে: এই পর্বের সার্কিটগুলো কিছুই মনে রাখতে পারে না। কিন্তু কম্পিউটারকে তো সংখ্যা জমিয়ে রাখতে হয়, গুনতে হয়! এবার দেখব স্মৃতিওয়ালা সার্কিট — ফ্লিপ-ফ্লপ, রেজিস্টার আর কাউন্টার।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান