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

در مطالب قبلی، مدل سازی رفتاری با استفاده از دستورات همزمان را بررسی و درباره دستورات انتساب سیگنال همزمان و نیز دستورات بلوکی صحبت کردیم. در این مطلب به دستورات ترتیبی می پردازیم. این دستورات به طور متوالی و یکی پس از دیگری اجرا می شوند. بیشتر زبان های برنامه نویسی از قبیل C و C++ این نوع رفتار را پشتیبانی می کنند. در حقیقت VHDL املای دستورات ترتیبی خود را از ADA گرفته است.

Learning VHDL

دستور پروسس

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

دستور پروسس یک بخش اعلانی و یک بخش دستوری دارد. در بخش اعلانی، انواع، متغییرها، ثابت ها، زیربرنامه ها و غیره را می توان اعلان کرد. بخش دستوری فقط حاوی دستورات ترتیبی است. دستورات ترتیبی دستورات CASE ، IF THEN ELSE ، LOOP و غیره را شامل می شوند.

ابتدا ساختار دستورات پروسس را بررسی می کنیم:

لیست حساسیت

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

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

مثال:

اجازه دهید مثالی از یک دستور پروسس در یک معماری را بررسی و جزئیات بیشتری در مورد نحوه کار آن مطرح کنیم.

در زیر مدلی از یک گیت NAND دو ورودی ارائه شده است:

 

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY nand2 IS
PORT(a , b : IN std_logic;
    C : OUT std_logic);
END nand2;

ARCHITECTURE nand2 OF nand2 IS
BEGIN
PROCESS( a , b )
VARIABLE temp : std_logic;
BEGIN
    Temp := NOT (a and b);
        IF (temp = ‘1’ ) THEN
            C <= temp AFTER 6 ns;
        ELSEIF (temp = ‘0’) THEN
            C <= temp AFTER 5 ns;
        ELSE
            C <= temp AFTER 6 ns;
        END IF;

    END PROCESS;
END nand2;

این مثال نحوه نوشتن مدل یک گیت NAND دو ورودی ساده را با استفاده از دستور پروسس نشان می دهد. دستور USE یک بسته VHDL اعلان می کند که اطلاعات لازم برای مدل سازی این گیت NAND با 9 حالت منطقی را فراهم می کند. دستور USE استفاده شده تا مدل بتواند بدون نیاز به تغییر با یک شبیه ساز VHDL شبیه سازی شود.

موجودیت گیت nand2 سه درگاه اعلان می کند. درگاه های a و b ورودی به گیت nand2 و درگاه c خروجی است. معماری همنام موجودیت است. این کار مجاز است و از دردسر تولید نام های منحصر به فرد قدری می کاهد.

معماری فقط حاوی یک دستور پروسس همزمان است. بخش اعلانی پروسس با کلید واژه PROCESS آغاز و با BEGIN خاتمه می یاید.بخش دستوری پروسس با کلید واژه BEGIN شروع و با کلید واژه END PROCESS خاتمه می یاید. بخش اعلانی پروسس یک متغییر محلی به نام temp اعلان می کند. بخش دستوری پروسس دو دستور ترتیبی دارد؛ یک دستور انتساب متغییر:

 

Temp := NOT (a AND b);

و یک دستور IF THEN ELSE :

 

IF (temp = ‘1’) THEN
    C <= temp AFTER 6 ns;
ELSE IF (temp = ‘0’) THEN
    C <= temp AFTER 5 ns;
ELSE
    C <= temp AFTER 6 ns;
END IF;

پروسس یک لیست حساسیت صریح با دو سیگنال دارد:

PROCESS (a,b)

این پروسس به سیگنال های a و b حساس است. در این مثال، a و b درگاه های ورودی مدل می باشند.

درگاه های ورودی سیگنال هایی ایجاد می کنند که به عنوان ورودی استفاده می شوند، درگاه های خروجی سیگنال هایی ایجاد می کنند که به عنوان خروجی استفاده می شوند و درگاه های ورودی/خروجی سیگنال هایی ایجاد می کنند که به هر دو صورت استفاده می شوند.

هرجا مقدار درگاه a یا b تغییر کند، دستورات درون پروسس اجرا می شوند.

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

 

بخش اعلانی پروسس متغییری به نام temp را از نوع std_logic اعلان می کند.

فرض کنید که این نوع سیگنالی تک بیتی تعریف می کند که می توان یکی از مقادیر 0 و 1 و X فرض شود. در این مدل، متغییر temp به عنوان یک حافظه موقتی برای نگهداری مقدار از پیش محاسبه شده عبارت (a AND b) استفاده می شود. مقدار این عبارت برای کارایی بیشتر از پیش محاسبه می شود.

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