مقدمه

منطق دیجیتال یا منطق بولی یکی از اساسی‌ترین مفاهیم در سیستم‌های کامپیوتری مدرن است. منطق دیجیتال مجموعه‌ای از قوانین است که به ما کمک می‌کند تا بر اساس تعدادی سوال «بله، خیر» تصمیمات بسیار پیچیده‌تری بگیریم.

george_boole_color

جُرج بول، ابداع‌کننده‌ی جبر بولی که امروزه مبنای محاسبات کامپیوتری است.

مدارات دیجیتال

مدارات منطقی دیجیتال به دو دسته تقسیم می‌شوند: مدارات ترکیبی (Combinational Circuits) و مدارات ترتیبی (Sequential Circuits).

تغییرات در مدارات ترکیبی به صورت «آنی» صورت می‌پذیرد؛ یعنی خروجی مدار به محض تغییر ورودی تغییر می‌کند. (البته این تغییر با تأخیر بسیار کوچکی اتفاق می‌افتد؛ چرا که انتشار سیگنال در میان عناصر مدارات دیجیتال نیاز به صرف زمان دارد. هر چند که این زمان بسیار کم است.)

اما مدارات ترتیبی دارای یک سیگنال کلاک (ساعت) هستند که عبور سیگنال بین طبقات مختلف مدار در لبه‌های کلاک اتفاق می‌افتد.

عموماً مدارات ترتیبی به وسیله‌ی بلوک‌هایی از مدارات ترکیبی ساخته می‌شوند. این بلوک‌ها توسط عناصر حافظه‌ای که به وسیله‌ی سیگنال کلاک فعال می‌شوند از هم جدا شده‌اند.

برنامه‌نویسی

منطق دیجیتال در زمینه‌ی برنامه‌نویسی نیز اهمیت بسیاری دارد. فهمیدن منطق دیجیتال، گرفتن تصمیمات پیچیده در هنگام برنامه‌نویسی را ممکن می‌سازد.

منطق ترکیبی

تمامی مدارات ترکیبی از پنج گِیت (Gate) یا دروازه‌ی منطقی اساسی تشکیل شده‌اند:

گیت AND

خروجی وقتی 1 است که هر دو ورودی 1 باشند. (به عبارت دیگر اگر حداقل یکی از ورودی‌ها 0 باشد، خروجی 0 خواهد بود.)

گیت OR

خروجی وقتی 0 است که هر دو ورودی 0 باشند. (به عبارت دیگر اگر حداقل یکی از ورودی‌ها 1 باشد، خروجی 1 خواهد بود.)

گیت XOR

خروجی وقتی 1 است که فقط و فقط یکی از ورودی‌ها 1 باشد. (به عبارت دیگر اگر ورودی‌ها نامساوی باشند خروجی 1 است.)

گیت NAND

خروجی 1 است اگر حداقل یکی از ورودی‌ها 0 باشد. (در واقع خروجی گیت NAND وارون خروجی گیت AND است.)

گیت NOR

خروجی 1 است اگر هر دو ورودی 0 باشند. (در واقع خروجی گیت NOR وارون خروجی گیت OR است.)

عنصر دیگری با نام NOT (نقیض یا وارون‌گر) به عنوان ششمین عنصر مدارات دیجیتال وجود دارد. وارون‌گرها در واقع گیت منطقی نیستند چون هیچ تصمیمی نمی‌گیرند. (سایر گیت‌ها با توجه به مقادیر دو ورودی به نوعی درباره خروجی تصمیم می‌گیرند ولی NOT فقط یک ورودی را دریافت می‌کند و نقیض آن را در خروجی قرار می‌دهد.) خروجی این گیت 1 است اگر ورودی 0 باشد و برعکس.

چند نکته درباره‌ی تصویر فوق:

  • معمولاً نام گیت نوشته نمی‌شود چون شکل آن کاملاً ماهیت گیت را مشخص می‌کند.
  • نمادگذاری A-B-Q برای ترمینال‌های ورودی و خروجی، یک استاندارد است. با این وجود معمولاً در مدارات بزرگ که از چندین گیت ساخته شده باشند این نمادها نیز نوشته نمی‌شوند مگر برای ورودی و خروجی‌های اصلی آن سیستم دیجیتال.
  • گیت‌های دارای دو ورودی گیت‌های استاندارد هستند؛ اما گیت‌هایی نیز وجود دارند که بیش از دو ورودی دارند. با این وجود تمامی گیت‌ها فقط و فقط یک خروجی دارند.

مدارات منطقی دیجیتال با این شش نماد نشان داده می‌شوند؛ ورودی‌ها در سمت چپ قرار دارند و خروجی‌ها در سمت راست. با وجود اینکه ورودی‌ها می‌توانند به هم وصل شوند اما به هیچ وجه نباید خروجی گیت‌ها مستقیماً به هم وصل شوند بلکه فقط می‌توانند به سایر ورودی‌ها وصل شوند. حتی یک خروجی می‌تواند به چندین ورودی وصل شود.

جدول درستی

توضیحات بالا برای تشریح عملکرد گیت‌ها کافی است، اما یک روش مفید دیگر برای درک عملکرد گیت‌ها وجود دارد: جدول درستی. جداول درستی نمودارهای ساده‌ای هستند که خروجی‌های یک مدار منطقی را بر اساس تمام ورودی‌های ممکن نشان می‌دهد. شکل زیر جداول درستی شش عنصر منطقی اصلی را نشان می‌دهد.

dl2

جداول درستی به هر اندازه‌ی دلخواه و با هر تعداد ورودی و خروجی می‌توانند بسط پیدا کنند و بزرگ شوند؛ البته پیش از آنکه مغز شما سوت بکشد!

شکل زیر جدول درستی یک مدار با چهار ورودی را نشان می‌دهد:

dl3

منطق بولی نوشتاری

مطمئناً اینکه بتوانیم معادله‌ای را که یک عملیات منطقی را نمایش می‌دهد در قالب عبارات ساده‌ی ریاضی بنویسیم بسیار سودمند خواهد بود. برای این منظور نمادهای ریاضی مشخصی برای عمل‌های منطقی AND، OR، XOR و NOT وجود دارد.

  • A AND B باید به یکی از شکل‌های زیر نوشته شود:

\[\begin{array}{*{20}{c}}
{{\rm{AB}}}&{{\rm{A}} \cdot {\rm{B}}}
\end{array}\]

  • A OR B باید به شکل زیر نوشته شود:

\[{\rm{A}} + {\rm{B}}\]

  • A XOR B باید به شکل زیر نوشته شود:

\[{\rm{A}} \oplus {\rm{B}}\]

  • NOT A باید به یکی از شکل‌های زیر نوشته شود:

\[\begin{array}{*{20}{c}}
{{\rm{A’}}}&{\overline {\rm{A}} }
\end{array}\]

حتماً متوجه شدید که در فهرست فوق درباره دو عنصر NAND و NOR صحبتی نکردیم. معمولاً این دو عنصر صرفاً با متمّم (وارون) کردن یک عبارت مناسب نشان داده می‌شوند:

  • A NAND B به یکی از شکل‌های زیر نوشته می‌شود:

\[\begin{array}{*{20}{c}}
{{\rm{(AB)’}}}&{{\rm{(A}} \cdot {\rm{B)’}}}&{\overline {{\rm{(AB)}}} }
\end{array}\]

  • A NOR B به یکی از شکل‌های زیر نوشته می‌شود:

\[\begin{array}{*{20}{c}}
{{\rm{(A + B)’}}}&{\overline {{\rm{(A + B)}}} }
\end{array}\]

مرجع: sparkfun.com