پاورپوینت برنامههای فرعی در زبان VHDL (pptx) 15 اسلاید
دسته بندی : پاورپوینت
نوع فایل : PowerPoint (.pptx) ( قابل ویرایش و آماده پرینت )
تعداد اسلاید: 15 اسلاید
قسمتی از متن PowerPoint (.pptx) :
دانشکده مهندسی برق و کامپیوتر
گروه مهندسی کامپیوتر
برنامههای فرعی در زبان VHDL(پروسیجر، فانکشن)
برنامههای فرعی در VHDL
فانکشن:
شامل مجموعه ای از دستورات جهت محاسبه یک مقدار
عدم دستکاری مقدار پارامترها
پروسیجر:
شامل یکسری دستورات برای انجام یک کار
توانایی دستکاری مقدار پارامترها
کاربرد:
خلاصه سازی، خوانایی و ساختیافتگی کد VHDL
تطبیق عملگرها و انواع (تبدیل نوع)
در داخل پروسیجر و فانکشن از دستورات ترتیبی استفاده میشود
تعریف فانکشن
قالب کلی تعریف فانکشن به شکل زیر است:
function identifier [(parameter_interface_list)]
return type_mark is
{subprogram_declarative_part }
begin
{sequential_statement }
end function [ identifier ];
مثال1: تعریف و فراخوانی فانکشن
تعریف فانکشن:
--------------------------------------------------
function limit (value,min,max : integer) return integer is
begin
if value > max then
return max;
elsif value < min then
return min;
else
return value;
end if;
end function limit;
--------------------------------------------------
فراخوانی فانکشن:
new_temp:=limit (current_temperature + increment ,10,100);
مثال2: تعریف و فراخوانی فانکشن
تعریف فانکشن:
FUNCTION mux(databits:BIT_VECTOR; sel:BIT_VECTOR) RETURN BIT IS
VARIABLE selint : INTEGER := 0;
BEGIN
FOR i IN sel'LENGTH - 1 DOWNTO 0 LOOP
IF sel (i) = '1' THEN
selint := selint + 2**i;
END IF;
END LOOP;
RETURN databits (selint);
END FUNCTION mux;
مثال2: تعریف و فراخوانی فانکشن
فراخوانی فانکشن
ENTITY mux21 IS PORT(a,b,s:IN BIT;
w:OUT BIT);
END ENTITY mux21
ARCHITECTURE functional OF mux21 IS
FUNCTION mux (databits : BIT_VECTOR; . . .
:
END FUNCTION mux;
SIGNAL sel : BIT_VECTOR (0 DOWNTO 0);
BEGIN
sel(0) <= s;
w <= mux ((a,b), sel) AFTER 8 NS;
END ARCHITECTURE functional;
تعریف پروسیجر
قالب کلی تعریف پروسیجر به شکل زیر است:
procedure identifier [(parameter_interface_list)] is
{subprogram_declarative_part}
begin
{sequential_statement}
end procedure [ identifier ];
یک مثال از پروسیجر
Type word32 is std_logic_vector(31 downto 0);
:
--------------------------------------------------
procedure addu (a, b: in word32;
result: out word32;
overflow: out Boolean ) is
variable sum: word32;
variable carry: std_logic_vector:= ‘0’;
begin
for index in sum’reverse_range loop
sum(index):=a(index) xor b(index) xor carry;
carry:=(a(index) and b(index) )
or (carry and (a(index) xor b(index) ) );
end loop;
result:=sum;
overflow:=carry = ‘1’;
end procedure addu;
--------------------------------------------------
فراخوانی پروسیجر
مثال:
variable PC, next_PC: word32;
variable overflow_flag: boolean;
:
:
addu ( PC, X”0000_0004”,next_PC, overflow_flag);