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

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

انتظار روی تغییرات سیگنال (WAIT ON)

انتظار تا درست ارزیابی شدن یک عبارت (WAIT UNTIL)

انتظار برای زمانی مشخص (WAIT FOR)

 
learning VHDL

دستور WAIT کاربردهای مختلفی دارد. متداول ترین کاربرد امروزی دستور WAIT مشخص کردن ورودی های ساعت برای ابزار سنتز است. دستور WAIT ساعت را برای دستور پروسس مشخص می کند که توسط ابزارهای سنتز برای ایجاد منطق ترتیبی مانند ثبات ها و فلیپ فلاپ ها خوانده می شود.

کاربرد دیگر آن به تاخیر انداختن اجرای پروسس برای مدت زمانی مشخص یا اصلاح پویای لیست حساسیت پروسس است.

حال می خواهیم دستور پروسس با یک دستور WAIT تعبیه شده در آن را بررسی کنیم که برای تولید منطق ترتیبی استفاده می شود:

 

PROCESS
BEGIN
    WAIT UNTIL clock = ‘1’ AND clock‘EVENT;
    q <= d ;
END PROCESS

 

این پروسس فلیپ فلاپ تولید می کند که در لبه بالارونده ورودی ساعت، مقدار d را به q منتقل می کند.

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

ترکیب جستجو برای یک مقدار ‘1’ و تغییر clock ، عملکرد مورد نیاز برای جستجو یک لبه بالارونده روی ورودی clock را ایجاد می کند. در نتیجه ، پروسس تا یک لبه بالارونده ی ساعت در دستور WAIT نگه داشته می شود. سپس مقدار فعلی d به q تخصیص می یابد.

سنتز این توصیف یک فلیپ فلاپ D فاقد ورودی set یا reset ایجاد می کند. Reset همگام را می توان به صورت زیر اجرا کرد:

 

PROCESS
BEGIN
    WAIT UNTIL clock = ‘1’ AND clock’EVENT;
    IF (reset = ‘1’) THEN
        q <= ‘0’;
    ELSE
        q <= d;
    END IF;
END PROCESS;

 

هنگام وقوع رویدادی روی ساعت، ابتدا سیگنال reset امتحان می شود. اگر فعال باشد مقدار reset (‘0’) و در غیر این صورت مقدار d به q تخصیص می یابد.

Reset نا همگام را به صورت زیر می توان اضافه کرد:

 

PROCESS
BEGIN
    IF (reset = ‘1’) THEN
        q <= ‘0’;
    ELSEIF clock’EVENT AND clock = ‘1’ THEN
        q <= d;
    END IF;

WAIT ON reset, clock;
END PROCESS;

 

این دستور پروسس یک دستور WAIT ON دارد که تا وقوع یک رویداد روی reset یا clock اجرای پروسس را متوقف می کند. پس از آن دستور IF اجرا می شود و در صورت فعال بودن reset ، فلیپ فلاپ به صورت ناهمگام ریست می شود، در غیر این صورت لبه بالا رونده ساعت برای انتقال ورودی d به خروجی q فلیپ فلاپ امتحان می شود.

در هر مرحله از اجرا می توان سیگنال هایی را که پروسس یا زیربرنامه به آنها حساس می باشند با استفاده از دستور WAIT کنترل کرد.

 

PROCESS
BEGIN
WAIT ON a; --1
   .
   .
WAIT ON b; --2
   .
   .
END PROCESS;

 

در قطعه کد VHDL نشان داده شده در فوق، اجرای دستورات تا نقطه 1 ادامه می یابد. دستور WAIT باعث توقف اجرا در آن نقطه می شود. اجرای پروسس ادامه نمی یابد تا رویدادی روی سیگنال a رخ دهد.

بنابراین در این مرحله از اجرا، پروسس به تغییرات سیگنال a حساس است. با وقوع رویدادی روی سیگنال a ، با دستور بعد از WAIT اول اجرای دوباره از سر گرفته می شود. اجرا ادامه می یابد تا به دستور WAIT دوم برسد. باز هم اجرا متوقف می شود و اکنون پروسس به رویداد روی سیگنال b حساس است.

بنابراین می توان با اضافه کردن دو دستور WAIT لیست حساسیت پروسس را به طور پویا تغییر داد.