بخشی از پاورپوینت

اسلاید 1 :

طراحی کامپیوتری سیستمهای دیجیتال
فصل چهارم: برنامه های فرعی، توابع و پکیجها در VHDL

اسلاید 2 :

فهرست مطالب
معرفی کتابخانه و پکیجها
معرفی تابع
معرفی روال

اسلاید 3 :

استفاده از کتابخانه ها و بسته ها
کتابخانه: محلی که کامپایلر VHDL، اطلاعاتی راجع به یک پروژه یا طرح را در آن قرار میدهد.
بکارگیری یک کتابخانه:
LIBRARY library_name;
پکیج: فایلی که محل اعلام نوع، قطعه، تابع و غیره است. برنامههایی را در اختیار کاربر قرار میدهد و کاربر نیاز به نوشتن دوباره این برنامهها ندارد.
بکارگیری یکpackage از کتابخانه مربوطه:
USE library_name.package_name.ALL;
مثال:
LIBRARY ieee;
use ieee.std_logic_arith.all;

اسلاید 4 :

پکیج
بجای اینکه عناصر را در هر برنامه vhdl قرار دهیم، یکبار آنها را به صورت constant, type, function, procedure و غیره در یک پکیج قرار میدهیم. در نتیجه برنامههای دیگر در صورت لزوم از آنها استفاده میکنند.
هر پکیج از دو قیمت اصلی اعلانات و بدنه تشکیل شده است.
در قسمت اعلانات عبارتهای constant, type, function, procedure و غیره اعلان میشوند.
به عبارت دیگر در قسمت اعلانات، عناصری که به خارج پکیج میتوانند ارسال شوند، تعریف میشوند.
بدنه پکیج طرز کار عناصر پکیج را شرح میدهد و مشابه طرح در یک برنامه vhdl است.
بدیهی است که constant, type نیازی به بدنه پکیج ندارند، چون در قسمت اعلانات تعریفشان کامل میشود.

اسلاید 5 :

تعریف پکیج
Package نام پکیج is
قسمت اعلانات پکیج
end [نام پکیج];
package body نام پکیج is
بدنه پکیج
end [نام پکیج];
مثال) پکیجی با نام Ult تعریف کنید که شامل تعریف یک نوع tshift با مقادیر shl, shr باشد؟
Library ieee;
use ieee.std_logic_1164.all;
package ult is
type tshift is (shl, shr);
end;

اسلاید 6 :

استفاده از عناصر پکیج
تمام عناصری که در قسمت اعلانات پکیج اعلان شدهاند، در برنامههای دیگر، با عبارت use به صورت زیر استفاده میشوند.
Use work.namepackage.all;

اسلاید 7 :

پکیج استاندارد
به صورت پیش فرض موجود است و نوعهای پايه زير در آن تعريف شده است:
bit , bit_vector
Integer
character

اسلاید 8 :

پکیج های IEEE
پکیج std_logic_1164 : نوع های زير و توابع تبديل اين نوعها به هم و همچنین به توع bitو bit_vector در آن حمايت ميشوند:
std_ulogic, std_ulogic_vector, std_logic, std_logic_vector
پکیج numeric_std : اين پکیج معادل بستهstd_logic_arith است. بردارها بر پايهstd_logic دز آن تعريف شده اند. نوعهای زير در آن حمايت ميشوند:
Unsigned vectors, Signed vectors
پکیج numeric_bit
پکیج math_real: اعداد و توابع تعريف شده در اين بسته فقط برای محاسبات
است و برای سنتز حمايت نميشوند.
پکیج std_logic_arith : نوع های زير در آن حمايت ميشوند:
Unsigned vectors, Signed vectors

اسلاید 9 :

پکیج های IEEE
پکیج std_logic_unsigned : شامل توابع حسابي بر روی std_ulogic_vector است و اپراتورها را به صورتunsigned لحاظ میکند.
پکیج std_logic_signed : شامل توابع حسابي بر روی std_ulogic_vector است و اپراتورها را به صورتsigned در نظر ميگیرد.

اسلاید 10 :

std_logic_arith
function "+"(L: UNSIGNED; R: UNSIGNED) return UNSIGNED;
function "+"(L: SIGNED; R: SIGNED) return SIGNED;
function "+"(L: UNSIGNED; R: SIGNED) return SIGNED;
function "+"(L: SIGNED; R: UNSIGNED) return SIGNED;
function "+"(L: UNSIGNED; R: INTEGER) return UNSIGNED;
function "+"(L: INTEGER; R: UNSIGNED) return UNSIGNED;
function "+"(L: SIGNED; R: INTEGER) return SIGNED;
function "+"(L: INTEGER; R: SIGNED) return SIGNED;
function "+"(L: UNSIGNED; R: STD_ULOGIC) return UNSIGNED;
function "+"(L: STD_ULOGIC; R: UNSIGNED) return UNSIGNED;
function "+"(L: SIGNED; R: STD_ULOGIC) return SIGNED;
function "+"(L: STD_ULOGIC; R: SIGNED) return SIGNED;
12 تابع بالا برای جمع در این پکیج تعریف شده است.
اگر از انواعunsigned وsingned موجود در این پکیج استفاده کنیم، تنها از عملیات حسابی برای آن میتوان استفاده کرد و مجاز به عملیات منطقی بر روی آن نیستیم.
عبارت 1010 و 0010 در حالت unsigned معادل 10 و 2 هستند.
عبارت 1010 و 0010 در حالتsigned معادل -2 و +2 هستند.
در هنگام استفاده از این پکیج نوعsigned وunsiged را بایستی مشخص کرد.

اسلاید 11 :

STD_LOGIC_UNSIGNED
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR;
function "+"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
5 تابع بالا برای جمع در این پکیج تعریف شدهاند.

اسلاید 12 :

تبدیل نوع Type Conversion
در VHDL سیگنالی از یک نوع را به سیگنالی از همان نوع میتوان تخصیص داد.
تبدیل bit_vector به std_logic_vector : to_stdlogicvector
تبدیل std_logic_vector به bit_vector : to_bitvector
تبدیل std_logic به bit : to_bit
تبدیل bit به std_logic : to_stdlogic
همانگونه که گفته شد توابع تبدیل بالا در پکیج std_logic_1164 وجود دارند.
تبدیل std_logic_vector به integer :
conv_integer(arg:std_logic_vector)
تبدیل integer به std_logic_vector :
conv_std_logic_vector(arg:integer, size:integer)
size:integer : تعداد بیتی که std_logic_vector حاصل باید داشته باشد.
arg:integer : ورودی که باید به std_logic_vector تبدیل شود.

اسلاید 13 :

مثال: برنامهای بنویسید که ورودیهای a و b از نوع std_logic_vector 3بیتی را الف) تبدیل به integer کند و با هم جمع کند و نتیجه را در sumi قرار دهد؟ ب) متغیر sumi را به std_logic_vector 4بیتی تبدیل کند و در خروجی Sum قرار دهد؟
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adder is
Port ( a, b : in std_logic_vector(2 downto 0);
sum : out std_logic_vector(3 downto 0));
end adder;
architecture Behavioral of adder is
begin
process (a,b)
variable sumi: integer;
begin
sumi := conv_iteger(a) + conv_iteger(b) ;
sum <= conv_std_logic_vector (sumi,4);
end process;
end Behavioral;

اسلاید 14 :

تابع
تعريف يک تابع به چه صورت انجام میشود؟
نحوه فراخواني تابع چگونه است؟
استفاده ازwait در اين ساختار مجاز نیست.
بکارگیری متغیر به عنوان پارامتر ورودی مجاز نیست.
در تابع تنها متغیر قابل تعريف است و تعريف سیگنال مجاز نیست.
با هر بار فراخواني، تابع يکبار به صورت سخت افزاری درFPGA پیادهسازی میشود.

اسلاید 15 :

تعریف تابع
Function نام تابع ( ورودیهای تابع : in نوع ورودی ) return نوع برگشت یا خروجی is variable نام متغیر برگشت : نوع آن ;
Begin
متغیر برگشت := vhdl عبارت ;
return متغیر برگشت;
end [نام تابع];
مثال) تابع بیت نقلی برای یک جمعکننده را بنویسید؟
Function carry (bit1, bit2, bit3 : in std_logic) return std_logic is variable result : std_logic;
begin
result := (bit1 and bit2) or (bit1 and bit3) or (bit2 and bit3) ;
return result;
end carry;
تابع در قسمت اعلانات طرح برنامه VHDL اعلان میشود.

اسلاید 16 :

نمونهگیری از تابع در طرح برنامه VHDL
تابع در برنامه با قرار دادن نام آن در طرف راست یک عبارت فراخوانی میشود.
مثال) از تابع carry قبلی برای محاسبه cout استفاده کنید؟
Library ieee;
use IEEE.std_logic_1164.all;
entity func_ex is
port ( a, b, c : in std_logic;
cout : out std_logic);
end func_ex;
architecture beh of func_ex is
Function carry (bit1, bit2, bit3 : in std_logic) return std_logic is variable result : std_logic;
begin
result := (bit1 and bit2) or (bit1 and bit3) or (bit2 and bit3) ;
return result;
end carry;

اسلاید 17 :

begin
cout <= carry(a,b,c);
end;
یا
process(a,b,c)
begin
cout <= carry(a,b,c);
end process;

اسلاید 18 :

تعریف تابع در پکیج و فراخوانی آن در برنامه دیگر
تابع را میتوان در یک پکیج توصیف کرد و در برنامهای دیگر با استفاده از use و نام پکیج به کار برد.
مثال) برنامه carry را به کمک این روش بنویسید؟
Library ieee;
use IEEE.std_logic_1164.all;
package my_pack is
Function carry (bit1, bit2, bit3 : in std_logic) return std_logic ;
end;
package body my_pack is
Function carry (bit1, bit2, bit3 : in std_logic) return std_logic is variable result : std_logic;
begin
result := (bit1 and bit2) or (bit1 and bit3) or (bit2 and bit3) ;
return result;
end carry;
end my_pack;

اسلاید 19 :

Library ieee;
use IEEE.std_logic_1164.all;
use work.my_pack.all;
entity pack_ex is
port (a, b, c: in std_logic;
cout: out std_logic);
end;
architecture beh of pack_ex is
begin
cout <= carry(a, b, c);
end;

اسلاید 20 :

شکل کلی اندازه پارامتر و متغیر برگشت تابع
چون تابع، در قسمتهای مختلف فراخوانی میشود، در هر فراخوانی ممکن است تعداد بیتهای ورودی و خروجی تابع متفاوت باشد. در این موارد ورودی و خروجیهای تابع را به صورت کلی به شکل std_logic_vector یا bit_vector تعریف میکنیم و در موقع فراخوانی تابع، مقدار آن توسط برنامه اصلی مشخص میشود.
مثال) با استفاده از تابع برنامهای بنویسید که بیتهای دو ورودی a و b هشت بیتی را با هم مقایسه کند و اگر مساوی بودند، بیت خروجی برابر یک شود؟
Library ieee;
use IEEE.std_logic_1164.all;
entity match_bit is
port ( a, b: in std_logic_vector (7 downto 0);
result_n : out std_logic_vector(7 downto 0));
end match_bit;
architecture beh of match_bit is
Function matches (a1, b1 : in std_logic_vector) return std_logic_vector is
variable result : std_logic_vector(a’length-1 downto 0);

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