بافر سه وضعیته، همانطور که از نامش پیداست، علاوه بر دو وضعیت منطقی معمول (0 و 1)، دارای یک وضعیت سوم به نام High-Impedance (امپدانس بالا) یا به اختصار High-Z (نماد Z) است.

1. بافر سه وضعیته چیست؟

بافر سه وضعیته یک ورودی داده (Data Input)، یک ورودی کنترل (Enable Input) و یک خروجی (Output) دارد. رفتار آن به شرح زیر است:

  • اگر Enable فعال باشد (معمولاً High): خروجی بافر، برابر با ورودی داده خواهد بود. در این حالت، بافر فعال است و سیگنال را از ورودی به خروجی منتقل می‌کند (Y=AY = A).
  • اگر Enable غیرفعال باشد (معمولاً Low): خروجی بافر وارد وضعیت High-Z می‌شود. در این وضعیت، بافر به صورت الکتریکی از مدار جدا می‌شود، گویی یک مدار باز است و هیچ جریانی به خروجی نمی‌کشد یا از آن عبور نمی‌دهد. به عبارت دیگر، خروجی در یک حالت شناور قرار می‌گیرد و توسط هیچ سیگنال دیگری تحت تاثیر قرار نمی‌گیرد و نیز بر هیچ سیگنال دیگری تاثیر نمی‌گذارد.

2. کاربرد اصلی بافر سه وضعیته: باس‌های مشترک (Shared Buses)

اصلی‌ترین کاربرد بافرهای سه وضعیته در طراحی باس‌های مشترک است. در یک سیستم دیجیتال، ممکن است چندین منبع (مثلاً CPU، حافظه، واحد I/O) نیاز به ارسال داده به یک مقصد مشترک داشته باشند. اگر همه این منابع به طور مستقیم به یک سیم مشترک متصل شوند، در صورت فعال شدن همزمان بیش از یک منبع، تداخل الکتریکی (اتصال خروجی 0 به خروجی 1) رخ می‌دهد که می‌تواند منجر به خرابی قطعات شود.

با استفاده از بافرهای سه وضعیته:

  1. هر منبع، خروجی خود را از طریق یک بافر سه وضعیته به باس مشترک متصل می‌کند.
  2. در هر زمان، تنها یکی از بافرها فعال می‌شود (Enable آن High می‌شود) و داده‌های خود را روی باس قرار می‌دهد.
  3. سایر بافرها غیرفعال هستند (Enable آن‌ها Low می‌شود) و خروجی آن‌ها در حالت High-Z قرار می‌گیرد، به این معنی که عملاً از باس جدا هستند و روی آن تأثیری نمی‌گذارند.
  4. یک واحد کنترل (FSM) مسئول فعال‌سازی صحیح و انحصاری بافرهای سه وضعیته است تا از تداخل جلوگیری شود.

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

3. طراحی بافر سه وضعیته در FPGA

پیاده‌سازی بافرهای سه وضعیته در FPGA نیاز به درک این نکته دارد که آیا از این بافر برای پین‌های خارجی (I/O Padها) استفاده می‌شود یا برای منطق داخلی FPGA.

الف) برای پین‌های خارجی (I/O Pads):

وقتی می‌خواهیم یک پین FPGA به عنوان یک پین دوطرفه (Bi-directional) یا یک باس خارجی عمل کند، نیاز به یک بافر سه وضعیته فیزیکی داریم.

  • بلوک‌های اختصاصی I/O (IOBs): تمام FPGAها دارای بلوک‌های ورودی/خروجی (I/O Blocks یا IOBs) هستند که در لبه تراشه قرار دارند. این IOBs شامل بافرهای اختصاصی هستند که قابلیت سه وضعیته (Tri-state) را فراهم می‌کنند. این بافرها از نوع P-channel و N-channel MOSFET هستند که در وضعیت High-Z، هر دو ترانزیستور خاموش می‌شوند و پین به حالت امپدانس بالا می‌رود.
  • پورت inout در HDL: در زبان‌های توصیف سخت‌افزار (مانند VHDL یا Verilog)، برای تعریف یک پین به عنوان دوطرفه، از نوع پورت inout استفاده می‌شود. کامپایلر ابزار سنتز (Synthesis Tool) FPGA به طور خودکار بافر سه وضعیته مناسب را از IOBها اختصاص می‌دهد.

ب) برای منطق داخلی FPGA:

نکته مهم اینجاست که در داخل منطق برنامه‌پذیر FPGA (PLB/CLB: Programmable Logic Block/Configurable Logic Block)، معمولاً هیچ بافر سه وضعیته فیزیکی وجود ندارد. تمام گیت‌های داخلی FPGA (LUTs و Flip-Flops) خروجی‌های 0 یا 1 را تولید می‌کنند.

  • شبیه‌سازی با مالتی‌پلکسر (Multiplexer): اگر در داخل کد HDL خود از 1'bz برای سیگنال‌های داخلی استفاده کنید، ابزار سنتز این رفتار را با استفاده از مالتی‌پلکسرها (Multiplexers) شبیه‌سازی می‌کند.

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

  • این شبیه‌سازی منطق سه وضعیته در داخل FPGA، منابع بیشتری (LUTs) را مصرف می‌کند و ممکن است تأخیر بیشتری نیز داشته باشد.

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

4. ملاحظات مهم در طراحی با بافرهای سه وضعیته:

  1. مدیریت انحصاری Enable: حیاتی است که تنها یک بافر متصل به یک باس مشترک در هر زمان فعال باشد. فعال شدن همزمان دو یا چند بافر می‌تواند منجر به اتصال خروجی‌های 0 و 1 به یکدیگر شود که به آن Bus Contention می‌گویند. این وضعیت می‌تواند باعث کشیدن جریان بیش از حد، افزایش دما و حتی آسیب به قطعات شود. واحد کنترل FSM باید تضمین کند که enableها به درستی مدیریت شوند.
  2. زمان‌بندی (Timing): سیگنال‌های enable باید با دقت زمان‌بندی شوند تا از حالت‌های گذرا (transient states) و احتمال Bus Contention جلوگیری شود.
  3. انتخاب درست: برای پین‌های خارجی، بافرهای سه وضعیته فیزیکی موجود در IOBها بهترین و تنها راه حل هستند. برای منطق داخلی، استفاده از مالتی‌پلکسرها معمولاً کارآمدتر و توصیه می‌شود.

در مجموع، بافرهای سه وضعیته ابزارهای قدرتمندی برای مدیریت ارتباطات باس هستند، اما استفاده صحیح و دقیق از آن‌ها، به ویژه در مدیریت سیگنال‌های کنترلی enable، برای اطراحی سیستم دیجیتال قابل اطمینان ضروری است.

کلیدواژه ها : بافر سه وضعیته، Three-State Buffer، High-Impedance، High-Z، باس مشترک، Shared Bus، FPGA، I/O Block، IOB، پورت inout، Verilog، VHDL، مالتی‌پلکسر، Multiplexer، Bus Contention، Enable، سنتز، Synthesis.