منطق ترتیبی

منطق ترکیبی بسیار سودمند است، اما بدون اضافه کردن مدارات ترتیبی، پردازش‌های کامپیوتری مدرن امکان‌پذیر نخواهد بود.

خاصیت اصلی مدارات ترتیبی این است که باعث می‌شوند سیستم‌های منطقی ما دارای حافظه باشند. همان طور که قبلاً گفته شد، خروجی مدارات ترتیبی پس از یک تأخیر مشخص تولید می‌شود. این تأخیر به عوامل بسیار متعددی وابسته است از جمله: فرایند تولید قطعات دیجیتال مورد استفاده، دمای سیلیکون (مهم‌ترین عنصر در ساخت قطعات الکترونیکی) و پیچیدگی مدار.

اگر خروجی نهایی یک مدار به مقادیر خروجی دو مدار ترتیبی دیگر وابسته باشد و به دلیل متفاوت بودن تأخیرهای این دو مسیر، مقادیر دیجیتال در زمان‌های متفاوتی برسند (که در دنیای واقعی، حتماً این طور خواهد بود)، موجب بروز یک خطای لحظه‌ای (glitch) در خروجی مدار خواهد شد. همین پدیده باعث می‌شود تا نتیجه‌ی کلی سیستم برای انجام عملیات مطلوب ما نامعتبر باشد. به این پدیده، مخاطره (hazard) گفته می‌شود. شکل زیر علت بروز hazard را در یک مدار ساده نشان می‌دهد: (t1 و t2 به ترتیب تأخیر داخلی گیت‌های NOT و AND هستند.)

itdl21

مفهوم کلاک (ساعت)

یک مدار ترتیبی در لحظه‌های معینی از خروجی نمونه می‌گیرد و آن را به سایر نقاط مدار منتشر می‌کند. اگر ورودی مدار در بین این لحظه‌های معین موقتاً تغییر کند از آن چشم‌پوشی می‌شود. فاصله‌ی بین لحظات نمونه‌برداری معمولاً در کل مدار مقداری یکسان است که به آن کلاک (Clock) گفته می‌شود. به چنین مداراتی که کل سیستم با یک کلاک واحد کار می‌کند مدارات ترتیبی سنکرون (همزمان) گفته می‌شود. وقتی درباره‌ی «سرعت» یک کامپیوتر صحبت می‌شود، منظور همان فرکانس کلاک آن کامپیوتر است.

البته ما می‌توانیم مدارات ترتیبی آسنکرون (غیرهمزمان) نیز داشته باشیم که از یک کلاک سراسری استفاده نمی‌کنند. اما چون چنین سیستم‌هایی دارای پیچیدگی‌های خاص خود هستند در این مقاله مورد بحث قرار نخواهند گرفت.

به عنوان یک نکته‌ی فرعی به یاد داشته باشید که هر مدار منطقی دیجیتال دارای دو مقدار مشخصه برای تأخیر است: زمان تأخیر کمینه و زمان تأخیر بیشینه. اگر مدار مورد نظر زمان تأخیر کمینه را نقض کند (یعنی از آن چیزی که انتظار می‌رود سریع‌تر باشد)، مدار به کلی از کار می‌افتد و دیگر قابل اصلاح نخواهد بود. اگر آن مدار به عنوان مثال جزئی از یک سیستم بزرگتر مثل CPU باشد، کل سیستم غیرقابل استفاده خواهد شد. اگر مدار مورد نظر زمان تأخیر بیشینه را نقض کند (یعنی از آن چیزی که انتظار می‌رود کندتر باشد)، می‌توان سرعت کلاک سیستم را برای هماهنگ شدن با کندترین جزء سیستم کاهش داد. زمان‌های تأخیر بیشینه در اثر گرم شدن اجزای مدار افزایش پیدا می‌کنند، که علت اصلی ناپایدار شدن کامپیوترها در اثر گرم شدن بیش از حد و یا افزایش سرعت کلاک (overclocking) نیز همین است.

عناصر مدارهای ترتیبی

همانند مدارهای ترکیبی چندین عنصر مداری اساسی وجود دارند که مدارهای ترتیبی را می‌سازند. این عناصر در واقع از همان عناصر اساسی مدارهای ترکیبی ساخته شده‌اند با این ویژگی که برای تثبیت کردن ورودی، از خروجی فیدبک (بازخورد) گرفته شده است.

عناصر ترتیبی به دو گروه تقسیم می‌شوند: لچ‌ها (latches) و فلیپ-فلاپ‌ها (flip-flops). با وجود اینکه این دو عنوان معمولاً به جای هم نیز استفاده می‌شوند ولی لچ‌ها عموماً کاربرد زیادی ندارند، چرا که آن‌ها کلاک نمی‌پذیرند. در ادامه درباره فلیپ-فلاپ‌ها بحث خواهیم کرد.

فلیپ-فلاپ نوع D

itdl22

ساده‌ترین فلیپ-فلاپ، نوع D است. عملکرد فلیپ-فلاپ‌های نوع D بسیار ساده است؛ صرفاً در هر لبه‌ی کلاک مقدار ورودی (D) به خروجی (Q) منتقل می‌شود و تا آمدن لبه‌ی بعدی حتی با وجود تغییر ورودی، خروجی تغییری نمی‌کند.

منظور از لبه، لحظه‌ای است که وضعیت سیگنال کلاک تغییر می‌کند. اگر کلاک از 0 به 1 تغییر کند یک لبه‌ی بالارونده (rising edge) رخ داده است و اگر از 1 به 0 تغییر کند یک لبه‌ی پایین‌رونده (falling edge) اتفاق افتاده است. در بیشتر موارد فلیپ-فلاپ‌ها به لبه‌های بالارونده‌ی کلاک حساس هستند، اما بعضاً در ورودی کلاک یک وارون‌گر (NOT) قرار داده می‌شود تا حساس به لبه‌ی پایین‌رونده شود؛ در چنین مواردی در شماتیک فلیپ-فلاپ قبل از ورودی کلاک یک حباب قرار داده می‌شود که نماد همان وارون‌گر است.

معمولاً ورودی کلاک با قرارگیری شکل یک مثلث کوچک چسبیده به کنار شماتیک از سایر ورودی‌ها متمایز می‌گردد. اکثر فلیپ-فلاپ‌ها دارای دو خروجی هستند: یکی خروجی معمولی و دیگری خروجی متمم (وارون). علت وجود خروجی وارون صرفاً به ساختمان داخلی فلیپ-فلاپ برمی‌گردد و دلیل خاصی ندارد.

فلیپ-فلاپ نوع T

itdl23

فلیپ-فلاپ نوع T کمی پیچیده‌تر است. T مخفف کلمه‌ی toggle به معنای تغییر وضعیت است. اگر یک لبه‌ی کلاک رخ دهد و ورودی T برابر با 1 باشد، خروجی تغییر وضعیت می‌دهد (یعنی اگر خروجی 1 باشد 0 می‌شود و برعکس)؛ اما اگر در هنگام وقوع لبه‌ی کلاک، ورودی 0 باشد، خروجی در مقدار قبلی خود باقی می‌ماند و تغییری نمی‌کند. این فلیپ-فلاپ نیز دارای دو خروجی است که دومی همان وارون خروجی اصلی است.

یکی از کارکردهای فیلپ-فلاپ نوع T این است که می‌توان از آن برای تقسیم فرکانس کلاک استفاده کرد. اگر ورودی T همواره در وضعیت 1 نگه داشته شود، فرکانس سیگنال خروجی نصف فرکانس سیگنال کلاک خواهد بود. با به کارگیری زنجیره‌ای از فلیپ-فلاپ‌های نوع T می‌توان کلاک‌هایی کندتر از کلاک اصلی دستگاه ایجاد کرد.

فلیپ-فلاپ نوع JK

در نهایت به فلیپ-فلاپ نوع JK می‌پردازیم. برای تشریح عملکرد این فلیپ-فلاپ برخلاف دو مورد قبلی به یک جدول درستی نیاز داریم؛ چون دارای دو ورودی (J و K) است و خروجی بسته به وضعیت قبلی خودش و همچنین براساس وضعیت دو ورودی، می‌تواند ثابت بماند، یک شود (set)، صفر شود (clear) و یا تغییر وضعیت دهد. فکر نکنم لازم باشد تا بگویم که مانند سایر فلیپ-فلیپ‌ها مقادیر ورودی و خروجی تنها در لحظات وقوع لبه‌های کلاک اهمیت دارند.

برای اینکه عملکرد این فلیپ-فلاپ را به خاطر بسپارید کافی است بدانید که فعال کردن ورودی J، خروجی را 1 می‌کند. و فعال کردن ورودی K خروجی را 0 می‌کند. اما اگر هر دو ورودی همزمان غیرفعال باشند خروجی تغییری نمی‌کند و اگر هر دو ورودی همزمان فعال باشند، خروجی تغییر وضعیت می‌دهد (یعنی اگر خروجی 1 باشد 0 می‌شود و اگر 0 باشد 1 می‎شود.) شکل زیر عملکرد این فلیپ-فلاپ را با همین شیوه بیان می‌کند.

زمان‌های برپایی، توقف و انتشار

در مدارهای ترتیبی مفاهیمی با نام‌های زمان برپایی (Setup Time)، زمان توقف (Hold Time) و تأخیر انتشار (Propagation Delay) وجود دارد. درک این سه مفهوم برای طراحی درست مدارهای ترتیبی ضروری است.

زمان برپایی، حداقل فاصله‌ی زمانی است که سیگنال ورودی فلیپ-فلاپ باید زودتر از لبه‌ی بالارونده‌ی کلاک برسد تا مقدار آن به درستی دریافت و نگه داشته شود. به همین ترتیب زمان توقف، حداقل فاصله‌ی زمانی است که قبل از رسیدن اولین لبه‌ی بالارونده‌ی کلاک، سیگنال ورودی فلیپ-فلاپ باید در مقدار قبلی خود باقی بماند تا بتواند مقدار خود را تغییر دهد.

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

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

به وسیله‌ی این سه مقدار، ما می‌توانیم بالاترین سرعت کلاکی که یک دستگاه می‌تواند با آن به درستی کار کند را تعیین کنیم. اگر تأخیر انتشار یک بخش از مدار به اضافه‌ی زمان برپایی بخش بعدی مدار از فاصله‌ی زمانی بین لبه‌ی پایین‌رونده‌ی یک پالس کلاک و لبه‌ی بالارونده‌ی پالس بعدی، بیشتر باشد، داده‌ی مورد نظر در ورودی بخش بعدی مدار پایدار نخواهد بود و باعث بروز رفتار پیش‌بینی نشده در آن خواهد شد.

شبه پایداری

عدم توجه به زمان برپایی و زمان توقف در هنگام طراحی مدار موجب بروز پدیده‌ای به نام شِبه‌پایداری (Metastability) می‌شود. وقتی یک مدار در وضعیت شِبه‌پایدار قرار داشته باشد، خروجی فلیپ-فلاپ ممکن است بین دو وضعیت عادی با سرعت زیادی نوسان کند؛ که سرعت (فرکانس) این نوسان معمولاً خیلی بالاتر از فرکانس کلاک مدار است.

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

عمده‌ترین علت بروز مشکلات شبه‌پایداری استفاده از چندین کلاک غیریکسان در سیستم است؛ البته حتی اگر دو کلاک با فرکانس یکسان ولی از دو منبع متفاوت تولید شوند باز هم تفاوت کوچکی با هم خواهند داشت. به همین علت ممکن است در یک لحظه لبه‌ی کلاک با لبه‌ی سیگنال داده بسیار به هم نزدیک شوند و باعث تخطی از زمان برپایی شوند.

یک راه حل برای این مشکل این است که تمام ورودی‌ها را از یک جفت فلیپ-فلپ نوع D پشت سر هم (cascade) عبور دهیم. در این وضعیت حتی اگر فلیپ-فلاپ اول به وضعیت شبه‌پایداری برود، امیدوار خواهیم بود تا قبل از رسیدن لبه‌ی بعدی کلاک به وضعیت پایدار برسد و اجازه دهد تا فلیپ-فلاپ دوم داده را به درستی بخواند. این کار باعث ایجاد تأخیر یک-سیکلی (یک دوره‌ی تناوب از سیگنال کلاک) در لبه‌های داده‌های ورودی می‌شود که در مقایسه با ریسک ناشی از شبه‌پایداری چندان مهم نیست.

مرجع: sparkfun.com