عکس پیش‌فرض نوشته

دستورات ترتیبی در دستورات پروسس و زیر برنامه ها وجود دارند. که ما در این مطلب به دستور ترتیبی IF در دستورات پروسس می پردازیم.
Learning VHDL

BNF:

یک برنامه نویس بعد از درک مفاهیم اصلی VHDL ممکن است بخواهد VHDL را به شکل زیباتری بنویسد.

اساسا BNF یک روش توصیف سلسله مراتبی است که سازه های مرکب از سازه های سطح پایین تر ساخته می شوند. هدف از بررسی BNF یادگیری تمام جزئیات آن نیست، بلکه بکارگیری اصول برای کمک به ساختن سازه های VHDL مرکب است. برای این منظور در زیر BNF دستور IF را آورده ایم:

 

If_statement ::=
    IF condition THEN
        Sequence_of_statements
    {ELSIF condition THEN
        Sequence_of_statements}
    [ELSE
        Sequence_of_statements]
    END IF;

 

از توصیف BNF می توان نتیجه گرفت که دستور IF با کلید واژه IF شروع و با کلید واژه END IF که به صورت دو کلمه مجزا نوشته می شود خاتمه می یابد. همچنین دو بخش اختیاری وجود دارد:

بخش ELSEIF

بخش ELSE

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

حال برای درک بهتر نحوه وابستگی BNF به کد VHDL مثالی را بررسی می کنیم:

مثال: نحوه نوشتن یک دستور IF ساده را نشان می دهد:

 

 

IF (x < 10) THEN
    A := b;
END IF;

 

دستور IF با کلید واژه IF آغاز می شود. پس از آن شرط (x < 10) و به دنبال آن کلید واژه THEN قرار دارد. وقتی مقدار x کمتر از 10 باشد شرط درست، و در غیر اینصورت نادرست است. وقتی شرط درست باشد، دستورات بین THEN و END IF اجرا می شوند. در این مثال جایی که x کمتر از 10 می باشد دستور تخصیص (a := b) اجرا می شود. اگر x بزرگتر یا مساوی 10  باشد چه اتفاقی می افتد؟ در این مثال بخش ELSE وجود ندارد، بنابراین هیچ دستوری در IF اجرا نمی شود. در عوض، کنترل به دستور بعد از ELSE IF منتقل می شود.

حال به بررسی مثالی می پردازیم که بخش ELSE IF در آن سودمند است:

 

IF (day = Sunday) THEN
    Weekend := TRUE;
ELSE IF (day = Saturday) THEN
    Weekend := TRUE;
ELSE
    Weekday := TRUE;
END IF;

 

در این مثال، دو متغیر weekend و weekday بسته به مقدار سیگنال day تنظیم می شوند. اگر day برابر Saturday یا Sunday باشد متغیر weekend به TRUE تنظیم شده و در غیر این صورت متغیر weekday به TRUE تنظیم می شود. اجرای دستور IF با بررسی برابری متغیر day با Sunday شروع می شود. اگر این شرط درست باشد، دستور بعدی اجرا می شود و کنترل به دستور بعد از END IF منتقل می شود. در غیراینصورت، کنترل به بخش دستوری ELSEIF منتقل می شود و برابری day با Saturday بررسی می شود. اگر متغیر day برابر با Saturday باشد، دستور بعدی اجرا می شود و کنترل دوباره به دستور بعد از دستور END IF منتقل می شود. سرانجام، اگر day برابر Sunday یا Saturday نباشد، بخش دستوری ELSE اجرا می شود.

دستور IF می تواند چندین بخش دستوری ELSEIF داشته باشد، اما فقط می تواند یک بخش دستوری ELSE داشته باشد. در هر بخش دستوری می توان چند دستور ترتیبی داشت.

این آموزش بیش از ۳ سال قبل ارسال شده و اکنون در لیست به‌روزرسانی‌های سایت قرار دارد. اگر پیشنهاد یا انتقادی برای بهبود آموزش دارید، خوشحال می‌شیم به ما اطلاع بدهید.