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

در طی اجرای یک دستور LOOP ممکن است به خروج از حلقه نیاز باشد. دلیل این موضوع می تواند وقوع یک خطای مهم در هنگام اجرای مدل و زودتر تمام شدن تمام پردازش ها باشد.

 
آموزش VHDL
 

در VHDL می توان در حین اجرای دستور LOOP با استفاده از دستور EXIT از آن خارج شد. دستور EXIT باعث توقف اجرا در محل دستور EXIT می شود. اجرا از دستور بعد از LOOP ادامه می یابد.

با یک مثال ای موضوع را بهتر نشان می دهیم:

PROCESS(a)
    Variable int_a : integer;
BEGIN
    Int_a := a;
        FOR i IN 0 TO max_limit LOOP
            IF (int_a <= 0 ) THEN
                EXIT;
            ELSE
                Int_a := int_a -1;
                q(i) <= 3.1416 / REAL(int_a * i);
            END IF;
        END LOOP;
    y <= q;
END PROCESS;

درون این دستور پروسس، همیشه مقدار int_a مقدار مثبت و بزرگتر از 0 در نظر گرفته می شود.

اگر مقدار int_a منفی یا صفر باشد، یک خطا بوجود می آید و محاسبه تکمیل نمی شود. اگر مقدار int_a کوچکتر یا مساوی 0 باشد، دستور IF درست است و دستور EXIT اجرا می شود. حلقه بی درنگ خاتمه می یابد و دستور اجرا شونده بعدی، دستور تخصیص به y پس از دستور LOOP است.

اگر این مثال کاملی بود، کاربر به طراح مدل اطلاع می داد که خطای مهمی رخ داده است. یک روش برای انجام این کار استفاده از دستور ASSERT است که در مطلب بعدی بررسی خواهیم کرد.

دستور EXIT سه نوع عملکرد اصلی دارد. اولی دستور EXIT را بدون برچسب حلقه یا یک شرط WHEN وارد می کند. اگر این شرط ها درست باشند، دستور EXIT به صورت زیر عمل می کند.

دستور EXIT فقط از دستور LOOP فعلی خارج می شود. اگر دستور EXIT درون یک دستور LOOP باشد که خود درون دستور LOOP دیگریست، دستور EXIT فقط از دستور حلقه داخلی خارج شده و اجرا در حلقه خارجی باقی می ماند.دستور خروج فقط از حلقه داخلی خارج می شود که در مثال قبلی دیدیم.

اگر دستور EXIT یک برچسب حلقه اختیاری داشته باشد، در مواجهه با دستور EXIT، اجرای حلقه مشخص شده توسط برچسب را تکمیل می کند. بنابراین دستور اجرا شونده بعدی دستور پس از END LOOP حلقه برچسب دار است.

مثال:

 

PROCESS(a)
BEGIN
    First_loop: FOR i IN 0 TO 100 LOOP
        Second_loop: FOR j IN 0 TO 10 LOOP
            ……
            EXIT second_loop;
            ……
            EXIT first_loop;
        END LOOP;
    END LOOP;
END PROCDSS;

نخستین دستور EXIT فقط از داخلی ترین حلقه خارج می شود زیرا اجرای حلقه ای با برچسب second_loop را تکمیل می کند. آخرین دستور EXIT اجرای حلقه ای با برچسب first_loop را کامل می کند که از اولین و دومین حلقه خارج می شود.

اگر دستور EXIT یک شرط WHEN اختیاری داشته باشد، فقط در صورتی از حلقه خارج می شود که شرط مشخص شده درست باشد. دستور اجرا شونده بعدی به اینکه دستور EXIT برچسب داده یا خیر، بستگی دارد. اگر یک برچسب حلقه مشخص شده باشد، دستور اجرا شونده بعدی درون دستور LOOP مشخص شده توسط برچسب حلقه است. اگر برچسب حلقه نداشته باشد، دستور اجرا شونده بعدی در حلقه بیرونی بعدیست. به این مثال دستور EXIT با یک شرط WHEN توجه کنید:

EXIT first_loop WHEN (i < 10);

هنگامی که عبارت i<10 درست باشد این دستور، اجرای حلقه ای با برچسب first_loop را خاتمه می دهد. وقتی تمام پردازش ها در یک دستور LOOP خاتمه می یابند و با یک خطا بوجود می آید، استفاده از دستور EXIT روشی سریع و آسان برای خارج شدن از آن است.

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