نقشه راه تخصصی مهندسی کامپیوتر
طراحی سیستمهای دیجیتال پیشرفته
فراتر از گیتهای منطقی
در دنیای دیجیتال، همه چیز به ۰ و ۱ خلاصه میشود. شما قبلاً با پایههای این دنیا یعنی گیتهای AND، OR و NOT آشنا شدهاید. این گیتها مانند آجرهای یک ساختمان هستند. حالا وقت آن است که یاد بگیریم چگونه با این آجرها، سازههای پیچیدهتری مثل آسمانخراشها را بسازیم.
مدارهای دیجیتال به دو دسته اصلی تقسیم میشوند: ترکیبی و ترتیبی. مدارهای ترکیبی حافظه ندارند. خروجی آنها فقط به ورودیهای لحظهای بستگی دارد. یک جمعکننده ساده (adder) مثال خوبی است. دو عدد را به آن میدهید و بلافاصله حاصل جمع را تحویل میگیرید.
اما مدارهای ترتیبی، حافظه دارند. خروجی آنها نه تنها به ورودی فعلی، بلکه به وضعیت قبلی مدار نیز وابسته است. این «وضعیت» در واقع خاطرات مدار از گذشته است. همین ویژگی حافظهدار بودن، به ما اجازه میدهد سیستمهای بسیار قدرتمندتری بسازیم.
ماشینهای وضعیت و حافظه
برای درک مدارهای ترتیبی، باید با مفهوم (Finite State Machine یا FSM) آشنا شویم. FSM یک مدل ریاضی برای توصیف رفتار یک سیستم است. این مدل به ما میگوید که یک سیستم میتواند در تعداد محدودی «وضعیت» باشد و بر اساس ورودیها، بین این وضعیتها جابجا شود.
یک دستگاه فروش خودکار را در نظر بگیرید. وضعیتهای آن میتواند «منتظر دریافت پول»، «دریافت پول کافی» و «تحویل کالا» باشد. ورودیها، سکههایی هستند که شما وارد میکنید. با هر سکه، ماشین از یک وضعیت به وضعیت دیگر میرود. این دقیقاً همان کاری است که مدارهای ترتیبی انجام میدهند.
عنصر اصلی حافظه در این مدارها، است. فلیپفلاپ یک مدار الکترونیکی است که میتواند یک بیت (۰ یا ۱) را تا زمانی که نیاز باشد، در خود ذخیره کند. این کار را با استفاده از یک سیگنال ساعت (clock signal) انجام میدهد که به تمام بخشهای مدار هماهنگی میبخشد. با هر پالس ساعت، فلیپفلاپها میتوانند وضعیت خود را بر اساس ورودیها تغییر دهند و آن را تا پالس بعدی حفظ کنند. با کنار هم قرار دادن چندین فلیپفلاپ، میتوانیم ثباتها (registers) و شمارندهها (counters) را بسازیم که اساس حافظه کامپیوتر هستند.
طراحی واحد محاسبه و منطق (ALU)
حالا که با عناصر حافظه آشنا شدیم، به سراغ مغز پردازنده، یعنی (ALU) میرویم. ALU بخشی از CPU است که تمام عملیات حسابی (جمع، تفریق) و منطقی (AND، OR، NOT) را انجام میدهد.
یک ALU از چندین مدار ترکیبی کوچکتر ساخته شده است. برای مثال، شامل مدارهایی برای جمع، مدارهایی برای عملیات منطقی و یک مالتیپلکسر (Multiplexer) است. مالتیپلکسر مانند یک کلید انتخاب عمل میکند. ورودیهای کنترلی به ALU میگویند که کدام عملیات را انجام دهد (مثلاً جمع یا AND) و مالتیپلکسر خروجی مدار مربوطه را به عنوان خروجی نهایی ALU انتخاب میکند.
برای مثال، یک ALU یک-بیتی را در نظر بگیرید. این واحد دو بیت (A و B) و یک کد عملیات (OpCode) را به عنوان ورودی میگیرد. اگر OpCode برابر ۰۰ باشد، نتیجه A AND B را برمیگرداند. اگر ۰۱ باشد، A OR B را برمیگرداند. با کنار هم قرار دادن چندین ALU یک-بیتی، میتوان یک ALU برای اعداد بزرگتر (مثلاً ۳۲-بیتی یا ۶۴-بیتی) ساخت.
| کد عملیات (OpCode) | عملیات | توضیح |
|---|---|---|
| 00 | A AND B | خروجی یک است اگر هر دو ورودی یک باشند |
| 01 | A OR B | خروجی یک است اگر حداقل یکی از ورودیها یک باشد |
| 10 | A + B | حاصل جمع دو بیت A و B (با در نظر گرفتن رقم نقلی) |
| 11 | NOT A | مقدار بیت A را معکوس میکند |
توازن بین سرعت و پیچیدگی
در طراحی مدارهای دیجیتال، همیشه با یک بدهبستان (trade-off) اساسی روبرو هستیم: سرعت در برابر پیچیدگی.
هر گیت منطقی برای پردازش سیگنال به زمان نیاز دارد. این زمان که به آن (propagation delay) میگویند، بسیار کوتاه است (در حد نانوثانیه)، اما وقتی هزاران گیت پشت سر هم قرار میگیرند، این تأخیرها با هم جمع میشوند. مجموع این تأخیرها، سرعت کلی مدار را تعیین میکند.
میتوانیم با استفاده از گیتهای بیشتر، مدارهای سریعتری بسازیم. برای مثال، یک جمعکننده با «پیشبینی رقم نقلی» (carry-lookahead adder) بسیار سریعتر از یک جمعکننده موجی (ripple-carry adder) ساده است، اما مدار آن بسیار پیچیدهتر و بزرگتر است.
این انتخابها مستقیماً بر هزینه، مصرف انرژی و اندازه فیزیکی تراشه تأثیر میگذارند. یک طراح سختافزار ماهر کسی است که بتواند با در نظر گرفتن تمام این محدودیتها، بهترین توازن را بین سرعت و پیچیدگی برای یک کاربرد خاص پیدا کند.
تفاوت اصلی بین مدارهای ترکیبی و مدارهای ترتیبی چیست؟
کدام قطعه الکترونیکی به عنوان عنصر اصلی حافظه در مدارهای ترتیبی عمل میکند و میتواند یک بیت داده را ذخیره نماید؟
اکنون که با مفاهیم پیشرفتهتری در طراحی دیجیتال آشنا شدید، وقت آن است که دانش خود را بسنجید.