در زبان توصیف سخت‌افزار Verilog، نحوه انتساب مقدار به متغیرها نقش بسیار مهمی در تعیین رفتار مدار دارد. هنگام استفاده از بلاک Always برای طراحی مدارهای دیجیتال، دو نوع انتساب اصلی وجود دارد که به آن‌ها Blocking و Non‑Blocking گفته می‌شود. درک تفاوت این دو روش برای طراحی صحیح مدارهای ترتیبی در ابزارهایی مانند Xilinx ISE بسیار ضروری است.

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

مفهوم Blocking Assignment در Verilog

در روش Blocking، دستورات به صورت مرحله به مرحله و ترتیبی اجرا می‌شوند. یعنی هر دستور باید کامل اجرا شود تا دستور بعدی اجرا گردد. به همین دلیل، اجرای دستورات در این روش شبیه اجرای دستورات در بسیاری از زبان‌های برنامه‌نویسی نرم‌افزاری است.

در این حالت، زمانی که یک مقدار به متغیر اختصاص داده می‌شود، مقدار جدید بلافاصله در دسترس دستور بعدی قرار می‌گیرد. به همین دلیل ترتیب نوشتن دستورات در این روش اهمیت زیادی دارد و می‌تواند بر نتیجه نهایی تأثیر بگذارد.

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

مفهوم Non‑Blocking Assignment در Verilog

در روش Non‑Blocking، همه انتساب‌ها تقریباً به صورت همزمان در نظر گرفته می‌شوند. یعنی ابتدا مقادیر جدید محاسبه می‌شوند و سپس در پایان اجرای بلاک Always به متغیرها اختصاص داده می‌شوند.

در این روش ترتیب دستورات تأثیر مستقیم کمتری روی نتیجه نهایی دارد، زیرا همه تغییرات به صورت همزمان اعمال می‌شوند. این ویژگی باعث می‌شود Non‑Blocking برای توصیف مدارهای ترتیبی مبتنی بر کلاک بسیار مناسب باشد.

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

تفاوت اصلی Blocking و Non‑Blocking

تفاوت اصلی این دو روش در زمان اعمال تغییرات در متغیرها است.

در Blocking، هر دستور قبل از اجرای دستور بعدی مقدار جدید را اعمال می‌کند و بنابراین دستورات به صورت زنجیره‌ای اجرا می‌شوند. اما در Non‑Blocking، همه تغییرات ابتدا محاسبه شده و سپس همزمان اعمال می‌شوند.

به همین دلیل استفاده نادرست از این دو روش می‌تواند باعث ایجاد رفتارهای غیرمنتظره در شبیه‌سازی یا پیاده‌سازی سخت‌افزاری شود.

اهمیت این تفاوت در طراحی FPGA با Xilinx ISE

در پروژه‌های FPGA که با Xilinx ISE طراحی می‌شوند، انتخاب صحیح بین Blocking و Non‑Blocking تأثیر مستقیمی بر ساختار نهایی مدار دارد. ابزار سنتز بر اساس نوع انتساب تشخیص می‌دهد که مدار باید به صورت ترکیبی یا ترتیبی پیاده‌سازی شود.

به طور کلی در بسیاری از روش‌های طراحی دیجیتال توصیه می‌شود:

  • برای مدارهای ترکیبی از Blocking استفاده شود
  • برای مدارهای ترتیبی مبتنی بر کلاک از Non‑Blocking استفاده شود

رعایت این اصول باعث می‌شود رفتار مدار در شبیه‌سازی و سخت‌افزار واقعی یکسان باشد و طراحی در Xilinx ISE به شکل صحیح سنتز شود.

کلیدواژه ها : Blocking و Non Blocking در Verilog-تفاوت Blocking و Non-Blocking-Verilog-آموزش-Verilog-مدار-ترتیبی-Verilog-Blocking-assignment-Nonblocking-assignment-Verilog-Xilinx-ISE-Verilog-tutorial-FPGA-design-Verilog-basics-Sequential-logic-Verilog-Blocking-vs-Nonblocking-Verilog-