در طراحی سخت‌افزار دیجیتال با Verilog، زمانی که نیاز داریم بر اساس چند مقدار مختلف تصمیم‌گیری کنیم، استفاده از ساختار Case بهترین و خواناترین روش است. این ساختار مشابه switch‑case در زبان‌های برنامه‌نویسی نرم‌افزاری است؛ با این تفاوت که در نهایت باید به ساختارهای سخت‌افزاری قابل سنتز تبدیل شود. در محیط Xilinx ISE، استفاده صحیح از Case باعث می‌شود ابزار سنتز بتواند منطق انتخاب‌گر (Selector Logic) را به شکل بهینه پیاده‌سازی کند.

مفهوم ساختار Case در Verilog

ساختار Case زمانی استفاده می‌شود که یک سیگنال ورودی می‌تواند چند مقدار مختلف داشته باشد و خروجی یا رفتار مدار باید بر اساس هر مقدار مشخص شود. این ساختار برای پیاده‌سازی بخش‌های زیر بسیار رایج است:

  • رمزگشاها (Decoders)
  • انتخاب‌گرها (Multiplexers)
  • حالت‌های مختلف ماشین حالت
  • کنترل‌کننده‌های منطقی چندحالتی

برخلاف شرط‌های تودرتوی if که معمولاً منطق اولویت‌دار ایجاد می‌کنند، Case به شکل طبیعی‌تر و بدون اولویت ذاتی بین شاخه‌ها سنتز می‌شود، مگر اینکه طراح ساختار اولویت‌دار تعریف کند.

کار استفاده از Case در بلاک Always

ساختار Case معمولاً داخل بلاک always قرار می‌گیرد، زیرا باید در واکنش به تغییرات سیگنال‌ها یا در لبه کلاک اجرا شود. وقتی مقدار ورودی تغییر کند، Case آن را بررسی کرده و مسیر مناسب را انتخاب می‌کند.

در طراحی‌های ترکیبی، Case داخل:

always @(*)

به‌کار می‌رود و نتیجه معمولاً یک مالتی‌پلکسر چندبه‌یک است.

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

اهمیت تعیین مقادیر پیش‌فرض در Case

برای جلوگیری از ایجاد Latch ناخواسته در طراحی دیجیتال، باید همیشه یک مسیر پیش‌فرض تعریف شود. این مسیر معمولاً با کلیدواژه default مشخص می‌شود.

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

بنابراین توصیه می‌شود همیشه حالت default وجود داشته باشد، حتی اگر یک مقدار ثابت ساده در آن قرار گیرد.

کاربرد Case در ماشین حالت (State Machine)

یکی از پرکاربردترین نقش‌های Case، در ساخت و توصیف ماشین‌های حالت یا FSM است. در اینجا، مقدار State به Case داده می‌شود و رفتار سیستم بر اساس حالت فعلی مشخص می‌گردد.

این روش باعث می‌شود:

  • کد بسیار خواناتر باشد
  • مدیریت حالت‌ها منظم‌تر انجام شود
  • سنتز در Xilinx ISE دقیق‌تر و بهینه‌تر باشد

نکات طراحی تمیز هنگام استفاده از Case

  • مقدار پیش‌فرض (default) را هرگز حذف نکنید.
  • اگر نیاز به اولویت ندارید، Case را جایگزین if‑else کنید.
  • مقداردهی خروجی‌ها را طوری تنظیم کنید که همه حالت‌ها پوشش داده شوند.
  • اگر طراحی ترتیبی است، حتماً از انتساب‌های Non‑Blocking استفاده کنید.

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

کلیدواژه ها : ساختار Case در Verilog- انتخاب چندحالتی در Verilog- آموزش Verilog در Xilinx ISE- طراحی منطقی چندحالتی- سنتز Case در FPGA- طراحی دیجیتال با Verilog- Xilinx ISE Verilog tutorial- FPGA logic design-