کنترلر ریچاردز

«کنترلر ریچاردز» روشی برای پیاده سازی یک ماشین حالت متناهی (FSM) با بهره گیری از مدارهای یکپارچه و منطق ترکیبی است.نام این روش از طراح آن، چارلز لنا ریچاردز گرفته شده است.

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

به کارگیری تکنیک ریچاردز ساخت FSMهایی با صدها یا حتی هزاران حالت را ساده تر و عملی تر می سازد.

به دلیل توانایی کنترلر ریچاردز در پشتیبانی از تعداد بسیار زیادی حالت، این روش در طیف وسیعی از کاربردهای عملی قابل استفاده است.

## تاریخچه
نیاز اولیه به این روش به این دلیل بود که طراحان مدار راهی ساده تر برای ساخت ماشین های حالت می خواستند؛ راهی که از وابستگی به نمودارهای حالت، جدول های انتقال مفصل و فرایندهای زمان بر بهینه سازی منطقی آزاد باشد.

در زمان معرفی آن (اوایل دهه 1970)، ابزارهای نرم افزاری پیشرفته امروزی برای بهینه سازی منطقی وجود نداشتند. بنابراین، مهندسان عمدتا مجبور بودند از نقشه کارنو و قوانین دمورگان استفاده کنند.

ریچاردز برای حل همین محدودیت ها روشی را مطرح کرد که امکان ساخت ماشین حالت بدون نیاز به جدول انتقال صریح را فراهم می کرد.مقاله او در فوریه 1973 در مجله Electronics منتشر شد.

این روش در سال های بعد عمومی تر شد و دهه 1980 به عنوان شیوه کلاسیک در طراحی کنترل دیجیتال شناخته می شد.

هرچند در محصولات مدرن احتمال استفاده از نسخه سنتی این کنترلر پایین است (زیرا طرح های سریعتر و امروزی تر وجود دارد)، اما انواع اصلاح شده یا مشتق شده از آن همچنان در برخی طراحی یافت می شود.

## روندنما ریچاردز
کنترلر ریچاردز از نظر رفتار نوعی ماشین میلی است؛ زیرا خروجی به ترکیبی از ورودی و حالت فعلی وابسته است.

با این حال، ریچاردز به جای استفاده از نمودار حالت مرسوم، روشی متفاوت برای نمایش حالت ها پیشنهاد کرد و از روندنما استفاده نمود.

در این نمایش:

* هر حالت به شکل یک «شرط انتقال» روی نمودار جریان دیده می شود.
* هر شرط دو مسیر کنترلی دارد: YES (بله) NO (خیر).
* مقدار YES یا NO تنها براساس یک مقدار ورودی تک بیتی تعیین می شود.(ریچاردز صفحه 108)
* بسته به نتیجه این شرط، یکی از دو «تابع انتقال» مرتبط با آن اجرا می شود.

اجرای تابع انتقال به این معناست که کنترلر خروجی یک پایه (pin) خاص را فعال می کند که می تواند منطق ترکیبی دیگری را تحریک کند.

پس از اجرای تابع، دستگاه وارد حالت جدیدی می شود؛ این حالت می تواند به صورت ضمنی یا صریح تعریف شده باشد.

مثال برای حالت ضمنی (پیش فرض):

اگر دستگاه در حالت ٠ (صفر) باشد و نتیجه شرط بله (YES) شود، شمارنده به حالت ١ (یک) می رود. اگر نتیجه خیر (NO)  باشد، دستگاه در حالت فعلی باقی می ماند.

این رفتار امکان مدلسازی یک روندنما ترتیبی ساده را فراهم می کند.

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

اجرای پرش نیازمند سخت افزار اضافه برای انتخاب حالت مقصد است و نوع سخت افزار بسته به تابعی که اجرا می شود تغییر می کند.

## هسته کنترلر
هسته سخت افزاری کنترلر ریچاردز عملا از چهار قطعه اصلی تشکیل می شود:

* یک شمارنده
* یک تسهیم کننده (مالتی پلکسر MUX)
* دو کدبردار (Decoder)

یک کنترلر ساده را می توان با استفاده از مدارهای سری TTL 7400 ساخت:

شمارنده 74163، مالتی پلکسر 74151 و دیکدر های 7442.

خروجی شمارنده مشخص می کند کدام ورودی مالتی پلکسر باید به خروجی Y هدایت شود (و معکوس آن مقدار به خروجی WN فرستاده می شود).

اگر خروجی Y برابر یک (high) باشد، شمارنده اجازه افزایش دارد؛ در غیر این صورت افزایش نمی یابد.

همچنین:

* برای فعال شدن خروجی های مربوط به شاخه YES، باید Y فعال باشد (چون ورودی D آن دیکدر به WN متصل است).
* برای فعال شدن خروجی های مربوط به شاخه NO، بایدY صفر باشد (چون ورودی D آن دیکدر مستقیما به Y متصل است).

**اجرای «پرش»**

برای انجام پرش باید پایه LDN شمارنده فعال شود و مقادیر ورودی های A,B,C,D تنظیم گردند.

فعال شدن LDN باعث می شود شمارنده مقدار موجود در پایه های A تا D را بارگذاری کند.

با استفاده از منطق ترکیبی می توان تعیین کرد که کدام تابع، شمارنده را وادار به بارگزاری مقدار جدید کند و مقدار جدید چه آدرسی (حالت مقصد) باشد.

این کار معمولا شامل یک جدول است که در آن برای هر تابع مشخص می شود به کدام حالت باید برود و سپس برای هر بیت آدرس حالت مقصد، عبارت بولی مناسب خارج می شود.

## منابع

رده:مقاله‌های ایجادشده توسط ایجادگر
رده:اتوماتا (رایانش)