به بررسی یکی دیگر از مدارهای ترکیبی پرکاربرد و مهم به نام «مقایسهکنندهی دیجیتالی» (Digital Comparator) خواهیم پرداخت. مقایسهکنندههای باینری یا دیجیتالی با استفاده از گیتهای AND ،NOR و NOT ساخته میشوند. این مدارها سیگنالهای دیجیتالی که در ترمینالهای ورودی آنها قرار گرفته را با یکدیگر مقایسه کرده و با توجه به شرایط ورودیها، یک سیگنال خروجی تولید میکنند.
در مدارهای دیجیتالی علاوه بر جمع و تفریق اعداد باینری، گاهی اوقات لازم است بزرگتر بودن، کوچکتر بودن یا مساوی بودن مقدار یک ورودی نسبت به ورودی دیگر را مشخص کنیم. در مقایسهکنندههای دیجیتالی این کار با استفاده از چند گیت منطقی ساده انجام میشود. اصول کار این گیتها با استفاده از جبر بولی مشخص میشود. به طور کلی مقایسهکنندههای دیجیتالی دو نوعند:
هدف استفاده از مقایسهکنندهی دیجیتالی، مقایسهی مجموعهای از متغیرها یا اعداد مجهول مثل A1, A2, A3, … An, …) A)در برابر یک مقدار ثابت یا مجهول مثل B1, B2, B3, … Bn, …) B) و سپس ایجاد تغییر در یک پرچم (flag) خروجی است. به عنوان مثال، یک مقایسهگر مقدار دو ورودی تک بیتی A و B را با هم مقایسه کرده و پس از بررسی وضعیتهای زیر در صورت لزوم پرچم مربوط به هر کدام را ۱ میکند.
همانگونه که مشخص است سه حالت A بزرگتر از A ،B مساوی B و A کوچکتر از B بررسی میشوند.
استفاده از چنین مقایسهکنندهای در مواقعی که بخواهیم دو متغیر را با یکدیگر مقایسه کرده و در صورت برقراری هر یک از شروط بالا یک خروجی متفاوت تولید کنیم، بسیار سودمند است. به عنوان مثال در شمارندهها با رسیدن به یک عدد معین، پایهی خروجی یک میشود و از این خروجی میتوان برای ریست کردن شمارنده و کارهای دیگر استفاده کرد.
نحوهی عملکرد این مقایسهگر ۱ بیتی در جدول درستی زیر نشان داده شده است.
با توجه به جدول بالا ممکن است به دو نکته پی برده باشید. نکتهی اول؛ مادامی که مقدار A و B برابر باشد، مدار بالا تفاوتی میان ۰ یا ۱ بودن مقدار A و B قائل نیست و در هر دو حالت A = B = 0 یا A = B = 1 خروجی A = B فعال میشود. نکتهی دوم نیز اینکه خروجی A = B دقیقاً شبیه یک گیت XNOR عمل میکند. لذا برای مقایسهی برابر دو عدد n بیتی، کافی است هر جفت از بیتها را در تابع ‘(Q = (A ⊕ B قرار دهیم.
با توجه به نکتهی گفته شده در ساخت مقایسهکنندههای دیجیتالی از گیت XNOR استفاده میشود. وقتی دو مقدار باینری یا BCD را با یکدیگر مقایسه میکنیم، در واقع «مقدار یا اندازه» این متغیرها را با یکدیگر مقایسه میکنیم. لذا «مقایسهگرهای مقدار» (Magnitude Comparator) بر مبنای مقایسهی ۰ منطقی در برابر ۱ منطقی کار میکنند.
همانند آنچه در آموزش قبلی برای ساخت جمعکنندههای n بیتی انجام دادیم، با کَسکِد کردن n مقایسهکنندهی تک بیتی نیز میتوان یک مقایسهکنندهی n بیتی ساخت. مقایسهکنندههای چند بیتی را میتوان برای مقایسهی کلمات باینری یا BCD به کار برد. همانند مقایسهکنندههای تک بیتی در صورت بزرگتر بودن یا کوچکتر بودن یک کلمه و یا تساوی کلمهها، خروجی متناسب با آنها تولید خواهد شد.
به عنوان مثال یک مقایسهگر مقدار ۴ بیتی را در نظر میگیریم. این مقایسهگر دو کلمهی ۴ بیتی (دو نیبل) را با هم مقایسه کرده و خروجی متناسب را تولید میکند. همانگونه که در شکل زیر نشان داده شده، یکی از این کلمات به ورودی A و کلمهی دیگر به ورودی B متصل میشود.
برخی از آیسیهای مقایسهکنندهی ۴ بیتی مثل TTL ۷۴LS85 یا CMOS 4063 پایههای ورودی دیگری نیز دارند. به کمک این پایهها میتوان چندین آیسی را با یکدیگر کَسکِد کرده و در نتیجه کلمات بزرگتر از ۴ بیت را نیز با هم مقایسه کرد. برای این منظور لازم است ورودیهای کسکد مستقیماً به خروجیهای متناظر از مقایسهکنندهی مرحلهی قبل متصل شوند. همانند آنچه در شکل زیر نشان داده شده، با این روش میتوان مقایسهکنندههای ۸ بیتی، ۱۶ بیتی و یا حتی ۳۲ بیتی ساخت.
در مقایسهی اعداد باینری یا BCD بزرگ، همواره برای کاهش زمان ابتدا با ارزشترین بیتها (MSB) با یکدیگر مقایسه میشوند. اگر این دو بیت مساوی بودند، به ترتیب تا رسیدن به کم ارزشترین بیت (LSB) بیتهای کم ارزشتر با یکدیگر مقایسه شده و در صورت برابری همهی بیتها، دو عدد مساوی بوده و خروجی A = B فعال میشود.
اما اگر در هر مرحلهای از این فرآیند دو بیت با یکدیگر برابر نبوده و مثلاً A > B یا A < B باشد، رابطهی بین دو عدد نیز همینگونه خواهد بود. از طرفی مقایسهی بیتهای کم ارزشتر نیز بیهوده بوده و عملیات مقایسه متوقف میشود.