دکودر (Decoder) یک مدار منطقی ترکیبی است که هدف اصلی آن تبدیل یک کد ورودی -بیتی به حداکثر خروجی یکتا (یا خروجی که ) است. در هر لحظه، تنها یکی از این خروجیها فعال میشود، در حالی که بقیه غیرفعال هستند. این مدار یک بلوک سازنده اساسی در سیستمهای دیجیتال است و کاربردهای فراوانی دارد، از انتخاب حافظه و ورودی/خروجی گرفته تا فعالسازی بخشهای خاصی از یک مدار.
1. مفهوم و عملکرد اصلی دکودر
به زبان ساده، یک دکودر ورودیهای آدرس را میگیرد و یک خروجی خاص را متناظر با آن آدرس فعال میکند.
- ورودیها (Inputs): بیت ورودی (مثلاً ) که کد یا آدرس را نمایش میدهند.
- خروجیها (Outputs): بیت خروجی (مثلاً ). برای یک دکودر باینری کامل، .
- منطق فعالسازی: برای هر ترکیب از ورودیهای -بیتی، تنها یکی از M خروجیها (معمولاً با سطح منطقی بالا یا
active-high، هرچندactive-lowنیز رایج است) فعال میشود. بقیه خروجیها غیرفعال میمانند. - مثال: یک دکودر 2 به 4 (2-to-4 Decoder) دو ورودی () دارد و چهار خروجی (). اگر ورودی باشد، فقط فعال میشود. اگر باشد، فقط فعال میشود و الی آخر.
2. پیادهسازی دکودر با گیتهای منطقی (مفهومی)
در سطح پایه، هر خروجی دکودر با یک گیت AND (N-ورودی) پیادهسازی میشود. ورودیهای این گیت AND ترکیبی از بیتهای ورودی (یا مکمل آنها) هستند که آن خروجی خاص را فعال میکنند.
- برای : اگر ورودی باشد، Y0 باید فعال شود. بنابراین، .
- برای : اگر ورودی باشد، باید فعال شود. بنابراین، .
- برای : اگر ورودی باشد، باید فعال شود. بنابراین، .
- برای : اگر ورودی باشد، باید فعال شود. بنابراین، .
این ساختار صرفاً از گیتهای منطقی (AND و NOT) استفاده میکند و هیچ عنصر حافظه (مانند فلیپفلاپ) ندارد، بنابراین یک مدار کاملاً ترکیبی (Combinational) است.
3. طراحی و نگاشت دکودر در FPGA
هنگام طراحی یک دکودر برای FPGA، هدف ما بهرهبرداری بهینه از منابع داخلی FPGA است. منابع اصلی برای پیادهسازی منطق ترکیبی در FPGA، جدولهای جستجو (Look-Up Tables - LUTs) هستند.
-
نگاشت به LUTs:
-
هر LUT معمولاً یک تابع بولین با 4 تا 6 ورودی را پیادهسازی میکند.
-
برای یک دکودر کوچک، مانند 2 به 4، هر خروجی (مانند ) میتواند به طور مستقیم در یک LUT پیادهسازی شود.
-
بنابراین، یک دکودر 2 به 4، چهار خروجی دارد و هر خروجی میتواند در یک LUT مجزا قرار گیرد، که در مجموع 4 LUT مصرف میکند.
-
برای یک دکودر 3 به 8، هر خروجی (مانند ) نیز میتواند در یک LUT (با 3 ورودی) پیادهسازی شود. در مجموع، 8 LUT مصرف میشود.
-
حتی برای دکودرهای کمی بزرگتر، مثلاً یک دکودر 4 به 16، هر خروجی (مانند ) به راحتی در یک LUT 4-ورودی قرار میگیرد و 16 LUT مصرف خواهد شد.
-
برای دکودرهای بسیار بزرگتر (مانند 8 به 256)، که تعداد خروجیها بسیار زیاد است و تعداد ورودیها از ظرفیت یک LUT فراتر میرود، سنتز کننده FPGA به طور خودکار منطق را به چندین LUT و مسیرهای میانی تقسیم میکند. این تقسیمبندی به گونهای انجام میشود که کمترین تأخیر و بهترین استفاده از منابع حاصل شود.
4. انواع دکودرها و ملاحظات در FPGA
- دکودر باینری (Binary Decoder): همانطور که توضیح داده شد، N ورودی را به 2N خروجی تبدیل میکند. برای آدرسدهی حافظه یا انتخاب واحدها در یک سیستم.
- دکودر با ورودی فعالساز (Enable Input): بسیاری از دکودرها یک ورودی فعالساز (Enable) دارند. اگر این ورودی فعال نباشد، تمامی خروجیهای دکودر غیرفعال میمانند، صرفنظر از ورودیهای آدرس. این ویژگی برای ساخت دکودرهای بزرگتر از دکودرهای کوچکتر (hierarchical decoding) یا کنترل زمانبندی فعالسازی یک بلوک مفید است. در FPGA، این فعالساز به عنوان یک ورودی اضافی به LUTها اعمال میشود.
- دکودرهای BCD (مانند BCD-to-7-segment Decoder): این نوع دکودر 4 بیت ورودی BCD (که ارقام 0 تا 9 را نشان میدهد) را میگیرد و آن را به 7 خروجی برای فعالسازی سگمنتهای یک نمایشگر 7-سگمنتی تبدیل میکند. این دکودر یک مثال از N-به-M است که M=2N.
- طراحی در FPGA: منطق تبدیل هر رقم BCD به الگوی 7-سگمنت نیز کاملاً ترکیبی است و در LUTs پیادهسازی میشود. به عنوان مثال، برای نمایش رقم 0 (ورودی
0000), سگمنتهایa, b, c, d, e, fباید فعال شوند وgغیرفعال. این منطق برای هر یک از 7 سگمنت در یک LUT جداگانه قابل پیادهسازی است.
5. ملاحظات مهم در طراحی دکودر در FPGA
- مدار ترکیبی خالص: دکودرها ذاتاً مدارهای ترکیبی هستند. به این معنی که خروجی آنها مستقیماً و بلافاصله به تغییرات ورودیها پاسخ میدهد. هیچ کلاک (Clock) یا فلیپفلاپ (Flip-Flop) برای عملکرد اصلی دکودر نیاز نیست. کلاک فقط در صورتی وارد میشود که بخواهیم ورودیها یا خروجیهای دکودر را با رجیستر (فلیپفلاپ) همگامسازی کنیم، اما این جزئی از خود دکودر نیست.
- تأخیر انتشار (Propagation Delay): از آنجایی که دکودرها مستقیماً به LUTها نگاشت میشوند، تأخیر از ورودی به خروجی معمولاً بسیار کم است. این تأخیر عمدتاً به تعداد سطوح منطقی (LUTs) و تأخیر مسیرهای ارتباطی در FPGA بستگی دارد.
- مصرف منابع (Resource Utilization): دکودرهای باینری بزرگ (مثلاً 10 به 1024) میتوانند تعداد زیادی LUT مصرف کنند، زیرا هر خروجی به طور بالقوه یک LUT نیاز دارد. اما سنتز کنندههای مدرن بسیار هوشمند هستند و میتوانند منطق مشترک را بهینهسازی کنند.
- فناوت (Fan-out): خروجیهای دکودر ممکن است بسیاری از بلوکهای دیگر را فعال کنند. این فناوت بالا میتواند بر تأخیر سیگنال تأثیر بگذارد، اما مدیریت آن معمولاً توسط ابزارهای جایابی و مسیریابی FPGA انجام میشود.
در نهایت، دکودر یک بلوک سازنده اساسی و کاملاً ترکیبی است که به طور بسیار کارآمد در FPGAها پیادهسازی میشود، و با توصیف رفتاری مناسب، ابزارهای سنتز بهترین نگاشت را به منابع سختافزاری آن (LUTs) فراهم میکنند.
کلیدواژه ها : دکودر-FPGA-طراحی-LUTs-منطق ترکیبی-ورودی فعالساز-دکودر باینری-BCD-to-7-segment-تأخیر انتشار-مصرف منابع-فناوت-سنتز-VHDL-Verilog-مفهوم-معماری