«اِنکدرهای دیجیتالی» (Digital Encoders) مدارهایی هستند که یک دادهی ورودی را گرفته و کد باینری معادل آن را در خروجی تولید میکنند. برخلاف مالتیپلکسرها که تنها دادهی یک خط ورودی را انتخاب کرده و آن را به یک خط خروجی ارسال یا سوئیچ میکنند، انکدرهای دیجیتالی یا باینری در هر لحظه از زمان بر اساس مقدار تمامی ورودیها تصمیمگیری کرده و یک خروجی باینری معادل تولید میکند. لذا میتوان گفت انکدر باینری یک مدار منطقی ترکیبی با چند ورودی است که بسته به شمارهی پایهای از ورودی که مقدار آن ۱ منطقی است، در خروجی مقدار باینری معادل آن شماره را قرار میدهد.
انکودرهای دیجیتالی بسته به تعداد خطوط دادهی ورودی، ممکن است خروجیهای ۲ بیتی، ۳ بیتی و یا ۴ بیتی تولید کنند. به طور کلی یک انکدر n بیتی دارای ۲n خط ورودی و n خط خروجی است. مرسومترین انکدرها عبارتند از انکدرهای ۴ به ۲، ۸ به ۳ و ۱۶ به ۴.
در انکدرها معادل باینری خطی از ورودی که مقدار ۱ منطقی دارد، در خطوط خروجی قرار میگیرد. انکدرها را میتوان برای «کدگذاری» یا انکد (encode) دادههای ورودی دهدهی یا هگزادسیمال به دادههای باینری یا BCD در خروجی استفاده کرد.
در صورتی که بیش از یک خط ورودی دارای مقدار ۱ منطقی باشند، در خروجی انکدر کد اشتباهی تولید میشود که این موضوع یکی از بزرگترین اشکالات انکدرهای استاندارد است. به عنوان مثال، اگر به طور همزمان پایههای D۱ و D۲ را HIGH کنیم، خروجی تولید شده نه ۰۱ است و نه ۱۰، بلکه ۱۱ خواهد بود که یقیناً این مقدار خروجی متعلق به ورودی فعلی نیست. همچنین در دو حالت ۱ بودن پایهی D۰ و یا ۰ بودن تمامی ورودیها، حالت یکسان ۰۰ در خروجی ایجاد میشود.
یکی از سادهترین روشها برای غلبه بر این مشکل «اولویتدهی» ورودی هاست. در این روش اگر دو یا چند ورودی ۱ باشند، خروجی تولید شده بر اساس ورودی دارای بالاترین اولویت خواهد بود. این نوع از انکدرهای دیجیتالی به نام «انکدر اولویت» (Priority Encoder) و یا به اختصار P-encoder نیز شناخته میشوند.
استفاده از انکدر اولویت مشکلی که در بالا گفته شد را حل میکند. در این انکدرها به هر کدام از ورودیها یک سطح اولویت اختصاص داده میشود. در صورت ۱ بودن چند پایه، خروجی انکدر اولویت مربوط به پایهای از ورودی است که بالاترین اولویت را دارد. لذا اگر پایهی ورودی با اولویت بیشتر ۱ باشد، سایر ورودیها در نظر گرفته نمیشوند.
انکدرهای اولویت به شکلهای مختلفی وجود دارند. در مثال زیر یک انکدر اولویت همراه با جدول صحت آن آورده شده است.
انکدرهای اولویت به شکل آیسیهای استاندارد تولید میشوند؛ مثلاً TTL ۷۴LS148 یک انکدر اولویت ۸ به ۳ بیتی است که ورودیهای آن فعالپایین (active LOW) هستند. این آیسی با توجه به ورودی با بالاترین اولویت یک کد ۳ بیتی در خروجی تولید میکند.
انکدرهای اولویت ورودی با بالاترین اولویت را در خروجی قرار میدهند. به عنوان مثال اگر ورودیهای D۳ ،D۵ و D۲ به طور همزمان اعمال شوند، کد خروجی ایجاد شده متعلق به (D۵) با مقدار ۱۰۱ خواهد بود؛ چرا که این پایه بالاترین اولویت را بین این سه ورودی دارد. اگر D۵ را حذف کنیم، اولویت بعدی متعلق به D۳ خواهد بود (۰۱۱) و الی آخر.
جدول صحت یک انکدر اولویت ۸ به ۳ به شرح زیر است:
نماد X نشان دهندهی حالات بیاهمیت (don’t care) است، که ممکن است ۰ منطقی یا ۱ منطقی باشد.
میتوان با استفاده از این جدول، عبارت بولی مربوط به انکدر گفته شده را به دست آورد. در این معادلات D۰ تا D۷ ورودیهای انکدر و Q۰, Q۱, Q۲ خروجیهای آن هستند.
خروجی Q۰
خروجی Q۱
خروجی Q۲
در آخر عبارت بولی نهایی مربوط به انکدر اولویت با در نظر گرفتن ورودیهای صفر به صورت زیر است:
لازم به ذکر است در کاربردهای عملی این ورودیهای صفر نادیده گرفته میشوند. با توجه به عبارات بالا میتوان یک انکدر ساده را به وسیلهی گیتهای OR پیادهسازی کرد. شکل زیر این موضوع را بهتر نشان میدهد.
همانگونه که پیشتر اشاره شد، انکدرهای دیجیتال از پرکاربردترین مدارهای ترکیبی هستند که به طور گستردهای در سیستمهای دیجیتالی استفاده میشوند. سه نمونه از مهمترین کاربردهای انکدرها عبارتند از اتصال کیبردها، جهتیابی مغناطیسی و درخواست وقفه که در ادامه هر کدام را بررسی خواهیم کرد.
در مدارها و کاربردهایی که به چندین ورودی نیاز است، از انکدر اولویت برای کاهش تعداد سیمها و اتصالات استفاده میشود. به عنوان مثال فرض کنید یک میکروپروسسور باید ۱۰۴ کلید یک کیبرد QWERTY را بخواند که در این کیبرد در هر لحظه میتوان تنها یک کلید را فشار داد و HIGH یا LOW کرد.
به عنوان یک راه حل میتوان مستقیماً ۱۰۴ سیم از تمامی کلیدهای کیبرد گرفته و به ورودی کامپیوتر وصل کرد. اما واضح است که چنین روشی برای یک کامپیوتر خانگی کوچک امکانپذیر نیست. در اینگونه مواقع روش بهتر استفاده از یک انکدر اولویت به عنوان واسط بین کامپیوتر و کیبرد است.
با استفاده از انکدر، ۱۰۴ کلید کیبرد به یک کد اَسکی (ASCII) استاندارد و تنها ۷ بیتی کدگذاری میشوند که این کد ۷ بیتی (۰ تا ۱۲۷ دهدهی) نمایندهی کلیدها یا کاراکترهای روی کیبرد است. برای پیادهسازی این روش آیسیهای مختلفی مثل ۷۴C923 که یک انکدر ۲۰ کلیده است تولید شده است.
یکی دیگر از کاربردهای رایج انکدرها در سیستمهای کنترل موقعیت مغناطیسی است که در ناوبری کشتیها، تشخیص وضعیت بازوهای رباتیکی و … به کار میروند. به عنوان مثال موقعیت چرخشی یا زاویهای یک قطبنما از طریق یک انکدر اولویت ۸ به ۳ مثل ۷۴LS148 به یک کد دیجیتالی تبدیل شده و سپس این کد دیجیتالی به عنوان دادهای برای جهتیابی در سیستمهای کامپیوتری استفاده میشود.
شکل زیر یک انکدر قطبنمای ساده را نشان میدهد که در آن ۸ وضعیت بررسی شده و یک کد ۳ بیتی در خروجی تولید میشود. همچنین میتوان از آهنرباها و سوئیچهای مغناطیسی به منظور تشخیص دقیق موقعیت زاویهای در هر نقطه از قطبنما استفاده کرد.
از دیگر کاربردهای مهم انکدرهای اولویت به شناسایی وقفهها در سیستمهای میکرپروسسوری برمیگردد. میکروپروسسورها برای برقراری ارتباط با وسایل جانبی مثل دیسک خوان (disk drive)، اسکنر، موس و … از «وقفه» (interrupt) استفاده میکنند؛ اما در هر لحظه از زمان میکروپروسسور تنها میتواند با یک وسیلهی جانبی صحبت کند. در نتیجه هرگاه یک وسیلهی جانبی به برقراری ارتباط با میکروپروسسور احتیاج دارد، باید به شیوهای میکروپروسسور را از این موضوع آگاه سازد.
میکروپروسسور این کار را از طریق سیگنالهای «درخواست وقفه» یا به اختصار IRQ ها (Interrupt Requests) انجام میدهد. با به کارگیری این سیگنالها اطمینان مییابیم که به تمام دستگاههای جانبی اولویتی اختصاص یافته و اینکه ابتدا به دستگاه با بالاترین اولویت رسیدگی میشود. ترتیب اهمیت دستگاههای جانبی به اینکه به کدام پایهی انکدر اولویت متصل باشند بستگی دارد.
برای پیادهسازی چنین سیستمی با انکدر اولویت ۷۴LS148، به مدارهای منطقی دیگری نیز نیاز خواهد بود. لذا مدارهای مجتمعی مانند ۸۲۵۹ طراحی شدهاند که تمامی قطعات مورد نیاز را در خود جا دادهاند. به این آیسی «کنترلگر وقفه با اولویت قابل برنامهریزی» (Programmable Priority Interrupt Controller) نیز گفته میشود.
به طور خلاصه، انکدر دیجیتال یک مدار منطقی ترکیبی است که با توجه به یک یا چند ورودی فعالش، خروجی مشخصی تولید میکند. این خروجی میتواند به صورت باینری یا BCD باشد. انکدرها دو دستهاند: «انکدر باینری» و «انکدر اولویت».
همانگونه که دیدیم، انکدرهای باینری یکی از ۲n ورودی خود را به یک خروجی n بیتی تبدیل میکنند. واضح است که تعداد بیتهای خروجی انکدر باینری از تعداد بیتهای ورودی آن کمتر است. انکدرهای باینری ابزارهای سودمندی برای فشردهسازی اطلاعات هستند و آنها را میتوان بهسادگی با گیتهای AND یا OR پیادهسازی کرد. یکی از بزرگترین اشکالات انکدرهای باینری این است که هر زمان بیش از ۱ ورودی فعال باشد، در خروجی خطا رخ میدهد. برای غلبه بر این مشکل انکدرهای اولویت طراحی شدند.
انکدر اولویت نوع دیگری از مدارهای ترکیبی است که شباهت بسیار زیادی به انکدر باینری دارد، با این تفاوت که کد خروجی بر اساس ورودی با بالاترین اولویت تولید میشود. انکدرهای اولویت به طور گستردهای در سیستمهای کامپیوتری و دیجیتالی به کار میروند. مثلاً برای شناسایی وقفه با بالاترین اولویت در کنترل کنندهی وقفهی میکروپروسسور از انکدر اولویت استفاده میشوند.