مولتی‌پلکسر (Multiplexer) یا به اختصار Mux، یک بلوک منطقی بنیادین و فوق‌العاده کاربردی در طراحی سیستم‌های دیجیتال، به ویژه در بستر FPGA (Field-Programmable Gate Array) است. وظیفه اصلی آن عمل کردن به عنوان یک “انتخاب‌گر داده” (Data Selector) است: از میان چندین ورودی داده‌ای مختلف، یکی را بر اساس یک سیگنال کنترلی (خطوط انتخاب) برگزیده و به خروجی واحد خود هدایت می‌کند. این ویژگی، مولتی‌پلکسر را به ابزاری کلیدی برای مسیریابی پویای داده‌ها، کاهش پیچیدگی سیم‌کشی، و پیاده‌سازی منطق‌های کنترلی پیچیده در FPGA تبدیل می‌کند.

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

مولتی‌پلکسرها سه دسته پورت اصلی دارند:

  • ورودی‌های داده (Data Inputs): سیگنال‌های مختلفی که قرار است یکی از آن‌ها انتخاب شود.
  • خطوط انتخاب (Select Lines): سیگنال‌های کنترلی باینری که ورودی مورد نظر را تعیین می‌کنند. تعداد خطوط انتخاب (SSS) و تعداد ورودی‌های داده (NN) با رابطه N=2SN = 2^S مرتبط هستند.
  • خروجی (Output): خط واحدی که داده انتخاب شده را حمل می‌کند.

برای مثال، یک مولتی‌پلکسر 4 به 1 دارای 4 ورودی داده و 2 خط انتخاب است. این خطوط انتخاب (مانند S1 و S0) با ترکیب‌های باینری (00, 01, 10, 11) تعیین می‌کنند که کدام یک از 4 ورودی به خروجی منتقل شود.

اصول پیاده‌سازی مولتی‌پلکسر در FPGA

پیاده‌سازی مولتی‌پلکسر در FPGA به طور طبیعی و با بهره‌وری بالا صورت می‌گیرد، چرا که ساختار داخلی FPGAها شامل بلوک‌های منطقی قابل تنظیم (Configurable Logic Blocks - CLBs) است که اساساً از Look-Up Tables (LUTs) تشکیل شده‌اند. LUTها قابلیت پیاده‌سازی هر تابع منطقی بولین را برای تعداد محدودی از ورودی‌ها دارند و همین ویژگی آن‌ها را برای پیاده‌سازی مولتی‌پلکسرها ایده‌آل می‌سازد.

هنگام طراحی یک مولتی‌پلکسر در یک زبان توصیف سخت‌افزار (HDL) مانند VHDL یا Verilog، شما رفتار منطقی آن را توصیف می‌کنید، نه ساختار دروازه‌ای دقیق را. ابزارهای سنتز (Synthesis Tools) FPGA سپس این توصیف رفتاری را بهینه کرده و آن را به منابع سخت‌افزاری موجود در FPGA نگاشت (Map) می‌کنند.

مراحل مفهومی طراحی مولتی‌پلکسر در HDL:

  1. تعریف پورت‌ها:

ابتدا باید ورودی‌های داده (که می‌توانند سیگنال‌های تک بیتی یا وکتورهای چند بیتی باشند)، خطوط انتخاب (معمولاً یک وکتور بیتی) و خروجی واحد (متناسب با عرض ورودی‌های داده) را تعریف کنید.

  1. توصیف رفتار انتخاب:

منطق انتخاب، هسته اصلی طراحی مولتی‌پلکسر است و معمولاً با یکی از ساختارهای زیر در HDL توصیف می‌شود:

  • دستور case (در VHDL) یا case / always_comb (در Verilog): این روش برای مولتی‌پلکسرهای بزرگتر یا زمانی که نیاز به خوانایی و وضوح بالا است، ترجیح داده می‌شود. در این حالت، شما مقادیر مختلف خطوط انتخاب را لیست کرده و برای هر مقدار، ورودی داده مربوطه را به خروجی تخصیص می‌دهید.
  • تخصیص شرطی همزمان (Conditional Concurrent Assignment): این روش برای مولتی‌پلکسرهای ساده‌تر (مانند 2 به 1) یا زمانی که معادله منطقی مستقیماً قابل بیان است، به کار می‌رود.

نگاشت به منابع سخت‌افزاری FPGA (Synthesis and Mapping):

یکی از قابلیت‌های قدرتمند ابزارهای سنتز FPGA این است که هر یک از توصیفات رفتاری بالا را به بهینه‌ترین ساختار سخت‌افزاری نگاشت می‌کنند. یک LUT در FPGA ذاتاً می‌تواند به عنوان یک مولتی‌پلکسر کوچک عمل کند. به عنوان مثال، یک LUT 4 ورودی قادر است یک مولتی‌پلکسر 4 به 1 یا 2 به 1 را پیاده‌سازی کند. برای مولتی‌پلکسرهای بزرگتر (مثلاً 8 به 1 یا 16 به 1)، ابزارهای سنتز چندین LUT را به صورت سلسله مراتبی یا موازی با هم ترکیب می‌کنند تا مولتی‌پلکسر بزرگتر را با استفاده از کمترین منابع و بهترین عملکرد (سرعت) پیاده‌سازی کنند. این فرآیند به طور خودکار انجام می‌شود و طراح معمولاً تنها با توصیف رفتار منطقی، نتیجه سخت‌افزاری مطلوب را دریافت می‌کند.

ملاحظات طراحی و بهینه‌سازی

  • خوانایی کد: در HDL، استفاده از ساختارهای واضح و منطقی (مانند case) به خصوص برای مولتی‌پلکسرهای بزرگ، نه تنها خوانایی کد را افزایش می‌دهد بلکه می‌تواند به ابزارهای سنتز کمک کند تا نگاشت بهتری انجام دهند.
  • عرض داده (Data Width): مولتی‌پلکسرها می‌توانند برای انتخاب سیگنال‌های تک بیتی یا وکتورهای چند بیتی (مانند یک باس 32 بیتی) طراحی شوند. عرض داده تنها بر تعداد LUTهای مورد نیاز تأثیر می‌گذارد (مثلاً برای یک مولتی‌پلکسر 4 به 1 با 32 بیت عرض داده، به 32 مولتی‌پلکسر 4 به 1 تک بیتی به صورت موازی نیاز داریم).
  • سلسله مراتب (Hierarchy): برای مولتی‌پلکسرهای بسیار بزرگ، می‌توان آن‌ها را به صورت سلسله مراتبی از مولتی‌پلکسرهای کوچکتر ساخت (مثلاً یک Mux 16 به 1 را می‌توان با سه Mux 4 به 1 پیاده‌سازی کرد). ابزارهای سنتز معمولاً این بهینه‌سازی را خودشان انجام می‌دهند، اما در برخی موارد، طراحی صریح سلسله مراتبی می‌تواند مفید باشد.
  • زمان‌بندی (Timing): تأخیر انتشار (Propagation Delay) در مولتی‌پلکسرهای بزرگتر، به دلیل افزایش سطح منطق (Logic Levels)، می‌تواند بیشتر باشد. در طراحی‌های با فرکانس بالا، این یک فاکتور مهم است که باید مورد توجه قرار گیرد و ابزارهای سنتز سعی در بهینه‌سازی آن دارند.

کلیدواژه ها : طراحی FPGA-FPGA Design-مولتی‌پلکسر-Multiplexer-Mux-پیاده‌سازی سخت‌افزار-Hardware Implementation-HDL-VHDL-Verilog-Look-Up Table-LUT-CLB-Configurable Logic Block-سنتز FPGA-Synthesis Tools-انتخاب‌گر داده-Data Selector-منطق ترکیبی-Combinational Logic-بهینه‌سازی FPGA-Design Considerations-مسیردهی داده-Data Routing