الدرس السابع – التوابع Functions

سلسلة من الدروس في لغة توصيف العتاد الصلبVHDL

الدرس السابع – التوابعFunctions

خصائص الأشعة

SIGNAL d : STD_LOGIC_VECTOR(7 DOWNTO 0);

d’LOW : تعيد الدليل الأصغر

d’HIGH :تعيد الدليل الأكبر

d’LEFT :تعيد دليل العنصر الأيسر

d’RIGHT :تعيد دليل العنصر الأيمن

d’LENGTH :تعيد طول الشعاع

d’RANGE :تعيد مجال الشعاع

d’REVERSE_RANGE:تعيد مجال الشعاع بشكل معكوس

d’LOW = 0

d’HIGH = 7

d’LEFT = 7

d’RIGHT= 0

d’LENGTH = 8

d’RANGE =  (7 downto 0)

d’REVERSE_RANGE = (0 to 7)

SIGNAL V : STD_LOGIC_VECTOR( 0 TO 7);

V’LOW = 0

V’HIGH = 7

V’LEFT = 0

V’RIGHT= 7

V’LENGTH = 8

V’RANGE =  (0 to 7)

V’REVERSE_RANGE = (7 downto 0)

التوابع

تهدف كتابة التوابع إلى وصف عملية حسابية أو منطقية أو تحويل بين أنواع البيانات، و ذلك لإعادة الاستخدام و المشاركة و تسهيل كتابة توصيف الدارة التي تستخدم التابع.

يقبل التابع أكثر من قيمة دخل و يعيد قيمة واحدة فقط.

الشكل العام:

FUNCTION function_name [(parameter list)] RETURN data_type IS

            [declarations]

BEGIN

            (sequential statements)

END function_name;

parameter list  تمثل قيم دخل التابع و يمكن أن تكون:

 [CONSTANT] constant_name : constant_type;

SIGNAL signal_name : signal_type;

–          لا يمكن أن تكون VARIABLE .

–         يمكن أن لا توجد أي قيمة دخل.

–         لا يوجد قيد على عدد الثوابت أو الإشارات و يمكن أن تكون من أي نوع من أنواع البيانات.

–         يجب عدم تحديد مجال الأعداد الصحيحة أو عرض الأشعة.

مثال عام: بفرض لدينا تابع f1 يأخذ ثلاث قيم a,b: INTEGER  و c:STD_LOGIC_VECTOR و يعيد هذا التابع قيمة منطقية  BOOLEAN.

FUNCTION f1 (a , b : INTEGER; SIGNAL c : STD_LOGIC_VECTOR)

RETURN BOOLEAN IS

BEGIN

            (sequential statements)

END f1;

مثال:

الإزاحة المنطقية نحو اليسار.

LIBRARY ieee;

USE ieee.std_logic_1164.all;

——————————-

ENTITY shift_left IS

PORT(X:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

a,b,c:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END shift_left;

——————————-

ARCHITECTURE behavioral OF shift_left IS

————————————————

FUNCTION sllogic (SIGNAL V:STD_LOGIC_VECTOR;shift:NATURAL)

RETURN STD_LOGIC_VECTOR IS

VARIABLE input: STD_LOGIC_VECTOR (3 DOWNTO 0) := V;

CONSTANT size: INTEGER := V’LENGTH;

VARIABLE zeros: STD_LOGIC_VECTOR (3 DOWNTO 0) := “0000”;

VARIABLE result: STD_LOGIC_VECTOR (3 DOWNTO 0);

BEGIN

IF(shift >= size) THEN result := “0000”;

ELSE result := input (size-1-shift DOWNTO 0) & zeros(shift-1 DOWNTO 0);

END IF;

RETURN result;

END sllogic;

————————————————–

BEGIN

a<=sllogic(X,0);

b<=sllogic(X,1);

c<=sllogic(X,2);

END behavioral;

المحاكاة

About زين العابدين

مهندس حواسيب - معهد IDA - جامعة Braunshweig التقنية.
هذا المنشور نشر في دروس تعليمية وكلماته الدلالية , , , . حفظ الرابط الثابت.

رد واحد على الدرس السابع – التوابع Functions

  1. يقول ammar:

    السلام عليكم براحه ما افهمته

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s