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

پروسس هایی که در بخش دستوری یک موجودیت وجود دارند پروسس های غیرفعال نامیده می شوند.

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

 
Learning VHDL
 

برای نمونه، یک استنفاده مناسب از پروسس غیرفعال، بررسی زمان نشست داده روی فلیپ فلاپ است.

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

حال مثال زیر را بررسی می کنیم:

 

LIBRARY IEEE;
USE IEEE.std_logic_1164ALL;
ENTITY dff IS
PORT ( CLK , din : IN std_logic;
         Q , QB : OUT std_logic);
BEGIN
    PROCESS(CLK , din)
        VARIABLE last_d_change : TIME := 0 ns;
        VARIABLE last_clk, last_d_value : std_logic := ‘x’;
        BEGIN
            IF ( din /= last_d_value ) THEN
                Last_d_change := now;
                Last_d_value := din;
            END IF;
    
            IF ( CLK /= last_clk ) THEN
                IF ( CLK = ‘1’ ) THEN
                    ASSERT ( now – last_d_change >= 15 ns )
                    REPORT “setup error”
                    SEVERITY ERROR;
            END IF;
                            
            Last_clk := CLK ;
        END IF;
    END PROCESS;
END dff;

ARCHITECTURE behave OF dff IS
BEGIN
.
.
.
.
END behave;

ARCHITECTURE struct OF dff IS
BEGIN
.
.
.
.
END struct;

ARCHITECTURE switch OF dff IS
BEGIN
.
.
.
.
END switch;

 

این مثال موجودیت یک فلیپ فلاپ D با پروسس غیرفعال اضافه شده به آن را نشان می دهد که نشست داده را نسبت به ساعت بررسی می کند.

این تابع بررسی زمان نشست هنگام توصیف دستور ASSERT با جزئیات کامل را تشریح کرد.

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

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

 

همان طور که اشاره کردیم تنها قیدی که روی پروسس های غیرفعال وجود دارد مجاز نبودن انتساب سیگنال است.

در مثال بالا برای نشان دادن یک پروسس غیرفعال از یک دستور پروسس استفاده شد.

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

در مثال زیر دو دستور ASSERT به عنوان پروسس های غیرفعال نشان داده شده اند:

 

ENTITY adder IS
    PORT ( A , B : IN INTEGER;
        X : OUT INTEGER);

BEGIN
    ASSERT ( A < 256 )
        REPORT “A out of range”
        SEVERITY ERROR;

    ASSERT ( B < 256 )
        REPORT “B out of range”
        SEVERITY ERROR;

END adder;

 

نخستین دستور ASSERT خارج از بازه نبودن ورودی A را جهت اطمینان بررسی می کند، و دستور دوم ورودی B را بررسی می کند تا خارج از بازه جمع کننده نباشد.

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

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