مرجع کامل دستورات توصیف سختافزار (HDL) و مهندسی FPGA
مرجع جامع و دستهبندیشده کلیه ساختارهای سختافزاری Verilog/SystemVerilog و قیدهای XDC برای طراحی و سنتز حرفهای در FPGA.

مرجع جامع کلیه دستورات و ساختارهای توصیف سختافزار در FPGA
برخلاف پردازندهها که دستورات را خطبهخط اجرا میکنند، در FPGA کدها بیانگر سیمبندی فیزیکی گیتها، لوتها (LUT)، فلیپفلاپها و بلاکهای حافظه هستند. در این مرجع، کلیه ساختارهای زبانی Verilog / SystemVerilog (سنتزپذیر و شبیهسازی) به همراه دستورات قیدهای مکانی و زمانی XDC در Vivado بررسی شدهاند.
۱. تعریف ماژول، پورتها و سیگنالها (Data Types & Hierarchy)
پایهایترین ساختار توصیف سختافزار برای کپسولهسازی مدار و تعریف ورودیها/خروجیها؛ دربرگیرنده کل بدنه پردازشی مدار.
جهت جریان سیگنال در پورتهای ماژول: input برای دریافت داده، output برای ارسال به خارج و inout برای درگاههای دوسویه سهحالته (Tri-state Bus).
• wire: سیم فیزیکی بدون حافظه برای اتصال خروجی بلاکهای ترکیبی.
• reg: عنصری که داده را در فرایندهای رویهای تا پالس بعدی در خود نگه میدارد.
• logic: نوع داده مدرن در SystemVerilog که جایگزین جامع هر دو حالت بالا بوده و مانع ابهامات نوع سیگنال میشود.
تعریف ثابتها برای ماژولار ساختن کد (مانند تعیین عرض بیت داده یا ضرایب ثابت فیلترهای دیجیتال). parameter از بیرون ماژول قابل تغییر است، اما localparam تنها درون ماژول ثابت میماند.
۲. بلوکهای اجرایی و عملگرهای انتساب (Assignments)
انتساب پیوسته (Continuous Assignment)؛ خروجی بلافاصله با تغییر هر یک از عملوندهای ورودی در گیت منطقی محاسبه میشود (مدار ترکیبی خالص).
اصلیترین بلوک مدارهای ترتیبی سنکرون؛ کدهای داخل این بلوک بر روی لبه بالارونده کلاک سنکرون شده و فلیپفلاپهای فیزیکی (Flip-Flops) را تشکیل میدهند.
دستورات دقیقتر در SystemVerilog: به ترتیب ساخت اختصاصی فلیپفلاپ، منطق تمامترکیبی (تولید خودکار Sensitivity List و حذف خطر Latch ناخواسته)، و لچ شفاف.
انتساب غیرانسدادی؛ تمام متغیرها بهطور کاملاً همزمان در انتهای سیکل کلاک بهروزرسانی میشوند. الزامی برای مدارهای ترتیبی و خطوط لوله (Pipeline) جهت جلوگیری از Race Condition.
انتساب انسدادی؛ مقادیر خط به خط ارزیابی شده و خط بعدی منتظر اتمام ارزیابی خط قبلی میماند. مناسب صرفاً برای متغیرهای محاسباتی موقت درون مدارات ترکیبی.
۳. ساختارهای شرطی و شاخهبندی منطقی
- if ... else if ... else: ایجاد منطق مقایسه اولویتدار (Priority Logic) که مستقیماً به گیتهای متوالی یا انکودر اولویت مپ میشود.
- case ... endcase: ساختار مستقیم انتخابی نظیر مالتیپلکسر (Mux) که تمام شاخهها هموزن ارزیابی میشوند؛ ایدهآل برای طراحی ماشینهای وضعیت (FSM).
-
casex / casez: حالتهای پیشرفته case که در آنها بیتهای بیاهمیت (Don't Care با کاراکتر
?یاz) در شرطها نادیده گرفته میشوند. -
عملگر سهتایی (? :): عملگر خلاصه شرطی تکخطی ترکیبی، مانند
assign out = sel ? in_b : in_a;.
۴. تولید سختافزار پارامتریک و حلقهها (Generate Blocks)
در FPGA حلقهها در زمان اجرا اجرا نمیشوند، بلکه در زمان سنتز سختافزار را منبسط و کپی میکنند:
۵. ماکروها، دستورات پیشپردازنده و شبیهسازی (Testbench)
دستورات کامپایلر (Directives):
• `timescale 1ns / 1ps: تنظیم مقیاس و دقت زمانی شبیهساز.
• `define / `undef: ایجاد ثابتها و جایگزینهای متنی ماکرو.
• `ifdef / `else / `endif: سنتز و ارزیابی شرطی کد.
• `include: پیوست فایلهای خارجی پیکربندی.
دستورات شبیهسازی (تستبنچ):
• initial: بلوک مقداردهی آغازین تنها برای شروع تستبنچ.
• #delay: ایجاد تاخیر نانوثانیهای در سیگنالهای تست.
• $display / $monitor: چاپ لاگ مقادیر روی ترمینال شبیهساز.
• $readmemh / $readmemb: خواندن مستقیم فایل هگز یا باینری برای بارگذاری اولیه در BRAM.
۶. دستورات قیدهای فیزیکی و زمانبندی (Xilinx XDC / Vivado Constraints)
دستوراتی که در فایل .xdc نوشته شده و نحوه نگاشت سیگنالها روی پایههای سختافزاری چیپ (نظیر سریهای Xilinx Artix-7) و محدودیتهای فرکانسی را به موتور سنتز و جایابی دیکته میکنند: