38
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน

โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

Embed Size (px)

Citation preview

Page 1: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

โปรแกรมยอยและฟงกชน มาตรฐาน

Page 2: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

โปรแกรมยอย (Subprogram)

โปรแกรมยอยคอกลมของค าสงล าดบทสามารถเรยกใชงานได โปรแกรมยอยนสามารถเขยนไวในสวนของ Package หรอ Architecture หรอ Process กได แตการเรยกใชงานจะขนอยกบต าแหนงทประกาศโปรแกรมยอยไวดงน - ประกาศไวใน Package สามารถเรยกใชไดจากทกๆทของโมเดล - ประกาศไวใน Architecture ของโมเดลใดกสามารถเรยกใชไดจากภายในโมเดลนนเทานน - ประกาศไวใน Process ใดกสามารถเรยกใชไดจากภายใน Process นนเทานน ดงนนจะเหนไดวา ถาตองการใหสามารถเรยกใชงานไดงายและทกๆท กควรประกาศไวภายใน Package จะดกวาการประกาศไวทอนๆ ภาษา VHDL แบงโปรแกรมยอยออกเปน 2 ประเภท คอ ฟงกชน (Function) และ โปรซเยอร (Procedure)

Page 3: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชน (Function)

ฟงกชนเปนโปรแกรมยอยชนดหนง เมอเรยกใชจะสงคากลบคนเพยงหนงคา ทงนการเรยกใชอาจมการสงคาพารามเตอร (Passing parameter) ใหกบฟงกชนหรอไมกได แตถามการสงคาเขาสฟงกชน พารามเตอรนน ตองไมมการเปลยนแปลงคา แตคาของพารามเตอรจะถกน าไปใชเพอค านวณหาผลลพธ โดยผลลพธนจะถกสงกลบไปยงโมเดลทเรยกใช ตรงต าแหนงทฟงกชนนน ถกเรยกใช

ลกษณะของฟงกชนมคณสมบตดงน การท างานเปน นพจน(expression) ไมใช statement ฟงกชนจะค านวณใหผลลพธเพยงคาเดยว และสงคากลบคนใหโมเดล ภายในฟงกชนตองมค าสง RETURN เสมอ การท างานของฟงกชนตองไมเปลยนแปลงคาออบเจกต (Object) ทถกสงผาน ฟงกชนตองประกอบดวย function body และอาจจะม function declaration ดวยกได

Page 4: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

FUNCTION name [(formal_parameter_list)] RETURN TYPE;

Function declaration เปนสวนทอาจจะมหรอไมกได มรปแบบดงน

- name เปนชอของฟงกชน- formal parameter list เปนรายชอของพารามเตอรทฟงกชนตองการใหสงผาน

สามารถก าหนดคณสมบตเพมเตมใหพารามเตอรได เชน CLASS, MODE และ TYPE- RETURN ใชก าหนด TYPE ของคาทจะสงกลบเชน FUNCTION bl2bit (a : boolean) RETURN BIT;

Page 5: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

Function body

เปนสวนทบรรยายพฤตกรรมของฟงกชน ถาจะใหฟงกชนท าอะไรสวนนจะตองม ภายใน body

เปน ค าสงล าดบ หามมค าสง concurrent และตองมค าสง RETURNซงเปนค าสงใหสงคากลบและเปนค า สงสนสดการท างานดวย รปแบบของ function body เปนดงน

FUNCTION name [(formal_parameter_list)] RETURN TYPE IS declaration statement

BEGIN [sequential statements] [include RETURN expressito]

END name;

Page 6: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางเชน

FUNCTION bl2bit (a : BOOLEAN) RETURN BIT IS BEGIN

IF a then RETURN '1';

ELSE RETURN '0';

END IF; END bl2bit;

Page 7: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยาง ฟงกชน bl2bit ขางตนเมอนามาเขยนใหสมบรณและเกบไวใน Package จะเขยนไดดงน

-- i2bv : Integer to Bit_vector. -- In : Integer, Value and width. -- Return : Bit_vector, with left bit is the most significant bit. package my_package is

function i2bv (val, width : integer) return bit_vector; end my_package; package body my_package is

function i2bv (val, width : integer) return bit_vector is variable result : bit_vector( width-1 downto 0) :=

(others => '0'); variable bits : integer := width; begin

for i in 0 to bits-1 loop if ( (val/(2**i) ) mod 2 = 1) then

result(i) := '1';

end if; end loop; return (result); end i2bv;

end my_package;

Page 8: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

เมอตองการเรยกใชฟงกชน bl2bit ใน package สามารถท าได ดงน

-- cnt4 : 4-bit binary counter .

-- model : behavioral

use work.my_package.all;

entity cnt4 is

port(dout : out bit_vector(3 downto 0);

clk, reset : in bit);

end cnt4;

architecture beh of cnt4 is

begin

counter: process(clk, reset)

variable cnum : integer;

begin

if reset = '1' then

cnum := 0;

elsif (clk = '1') then

cnum := cnum + 1;

end if;

dout <= i2bv(cnum,4);

end process; end beh;

Page 9: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางฟงกชนส าหรบวงจร Full adder เมอเขยนอยใน Package library ieee; use ieee.std_logic_1164.all; package my_package is

function FULLADD (A,B, CIN : std_logic ) return std_logic_vector; end my_package ; package body my_package is

function FULLADD (A,B, CIN : std_logic ) return std_logic_vector is variable SUM, COUT : std_logic; variable RESULT : std_logic_vector (1 downto 0);

begin SUM := A xor B xor CIN; COUT := (A and B) or (A and CIN) or (B and CIN); RESULT := COUT & SUM; return RESULT;

end FULLADD; end my_package ;

Page 10: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

เมอตองการเรยกใชฟงกชน FULLADD ใน package สามารถท าไดดงน

library ieee; use ieee.std_logic_1164.all; use work. my_package.all; entity EXAMPLE is

port ( A,B : in std_logic_vector (3 downto 0); CIN : in std_logic; S : out std_logic_vector (3 downto 0); COUT : out std_logic );

end EXAMPLE;

Page 11: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

architecture ARCHI of EXAMPLE is signal S0, S1, S2, S3 : std_logic_vector (1 downto 0); begin

S0 <= FULLADD (A(0), B(0), CIN); S1 <= FULLADD (A(1), B(1), S0(1)); S2 <= FULLADD (A(2), B(2), S1(1)); S3 <= FULLADD (A(3), B(3), S2(1)); S <= S3(0) & S2(0) & S1(0) & S0(0); COUT <= S3(1);

end ARCHI;

Page 12: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

หมายถง ฟงกชนทสามารถเรยกใชตวเองได เชน ตวอยางฟงกชนการหาคา factorial ของจานวน n ใดๆ สามารถเขยนเปนฟงกชนไดดงน

Recursive Function

package my_package is

function my_factorial(x : integer) return integer;

end my_package ;

package body my_package is

function my_factorial(x : integer) return integer is

begin

if x = 1 then

return x;

else

return (x*my_factorial(x-1));

end if;

end function my_factorial; end my_package ;

Page 13: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

เมอตองการเรยกใชฟงกชน my_factorial ใน package สามารถท าไดดงน

use work. my_package.all; entity EXAMPLE_3 is

port (A : in integer range 0 to 255; Y : out integer range 0 to 255);

end EXAMPLE_3; architecture ARC of EXAMPLE_3 is begin

S <= my_factorial(A); end ARC;

Page 14: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

โปรซเยอร (Procedure)

ทง ฟงกชน และโปรซเยอร ตางกเปนโปรแกรมยอย (Subprogram) ทมวตถประสงคของการเขยนเหมอนกน คอ ตองการรวบรวมคาสงแบบลาดบทมการเรยกใชบอยๆ เอาไวใหเรยกใชไดสะดวกโดยไมตองเขยนค าสงนนทกๆครงทตองการใชงาน โครงสรางของโปรซเยอรกคลายกบของฟงกชน แตมขอแตกตางกนคอ 69

o ฟงกชน ไมสามารถเปลยนแปลงคาทสงเขาไปได แตโปรซเยอรทาได o ฟงกชนม RETURN เพอสงคาคน แตโปรซเยอรมหรอไมกได ถามอาจเพยงเปนการหยดการทางานของโปรซเยอร o ฟงกชนคนคากลบเพยงคาเดยว แตโปรซเยอรสามารถสงคนไดหลายคา o ทศทางหรอ Mode ของพารามเตอรทสงผาน (formal parameter list) เขาสฟงกชนเปนประเภท IN เทานน แตของโปรซเยอรเปนไดทง IN, OUT และ INOUT o การเรยกฟงกชนเปนการเรยกแบบ Expression แตในโปรซเยอรเปนการเรยกแบบ Statement o เชนเดยวกบฟงกชน โปรซเยอรประกอบดวย Procedure declaration และ Procedure body

Page 15: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

Procedure Declaration

PROCEDURE name (formal_parameter_list);

name ชอของ โปรซเยอร formal_parameter_list รายชอพารามเตอรท ใชในโปรซเยอร มหนาท

เปนตวบอก CLASS, NAME, MODE และ TYPE ของ object รปแบบการเขยนเปนดงน

(CLASS object_name : MODE TYPE)

Page 16: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

- CLASS หมายถงชนของ object ซงอาจจะเปน SIGNAL, VARIABLE หรอ CONSTANT ถาไมมการกาหนด CLASS และ MODE ภาษา VHDL จะถอวาเปน CONSTANT MODE IN แตถาไมกาหนด CLASS แตกาหนด MODE เปน IN จะถอวาเปน VARIABLE - Object_name ชอของ object - MODE ทศทางการไหลของขอมล มสามชนดคอ o IN คาของพารามเตอรทสงเขาโปรซเยอร แกไขหรอเปลยนแปลงไมได o OUT คาของพารามเตอรทสงออกจากโปรซเยอรo INOUT คาของพารามเตอรทสงเขาไดรบคนจากโปรซเยอร แกไขหรอเปลยนแปลงได - TYPE เปนตวกาหนดกลมของคาตางๆท object สามารถมได

Page 17: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางของโปรซเยอรdeclaration ทอยใน Package declaration

PACKAGE util IS PROCEDURE add_element(element : IN REAL;

VARIABLE filter_data : INOUT filter_data_type); PROCEDURE zero_out( x : x_data_type); PROCEDURE still_busy;

END util

Page 18: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

Procedure Body ในสวนของ body น ประกอบดวยล าดบของ Sequential statement

ทบรรยายความสมพนธระหวางคาของ input parameter กบคาทจะสงกลบในสวนนหามม Concurrent statement ในโปรซเยอรไมจ าเปนตองม

ค าสง RETURN ค าสง RETURN มหนาทหยดการท างานของโปรซเยอร สาหรบโครงสรางทไมมคาสง RETURN การท างานของโปรซเยอรจะหยดไดดวยค าสง END ในบรรทดสดทายของโปรซเยอร รปแบบโครงสราง procedure bodyเปนดงน

PROCEDURE name (formal_parameter_list) IS

-- declarative_statments

BEGIN

--sequential_statementsEND name;

Page 19: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

PACKAGE BODY util IS

PROCEDURE add_element(element : IN REAL;

VARIABLE filter_data : INOUT filter_data_type ) IS

BEGIN

FOR IN filter_data'HIGH DOWNTO filter_data' LOW+1 LOOP

filter_data(i) := filter_data (i-1);

END LOOP;

filter_data(filter_data'LOW) := element;

END add_element;

PROCEDURE zero_out(input : INOUT filter_data_type) IS

BEGIN

FOR i IN input'RANGE LOOP

input(i) := 0.0;

END LOOP;

END zero_out;

PROCEDURE still_busy IS

BEGIN

ASSERT FALSE REPORT "Still Busy!" SEVERITY NOTE;

END stil_busy;

END util;

Page 20: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

Procedure Callsการเรยกโปรซเยอรมาใช ท าไดโดยการเขยนชอ (name) ของ โปรซเยอร นน

ตามดวยรายชอของ พารามเตอรตองการสงคาผานใหกบโปรซเยอร ตามรปแบบการเขยนดงน

procedure_name (passing_parameter_list);

Passing Parameter list

สมพนธโดยต าแหนง (Position Association) แบบนใหเขยนชอพารามเตอรทตองการสงผานใหตรงกบต าแหนงพารามเตอรทเปนตวรบ เชนถาโปรซเยอรชอ FULLADD PROCEDURE FULLADD (A,B, CIN : in BIT; C : out BIT_VECTOR (1 downto 0) ); เมอเรยกใช ดวย FULLADD(X1,X2,X3,Y); จงมความหมายวา คาของ X1 สงให A X2 สงให B X3 สงให CIN และ Y ไดจาก C

Page 21: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

สมพนธโดยชอ (Named Association)

เปนการบอกความสมพนธระหวางชอกบชอ ดวยการก าหนดวาพารามเตอรตวสงชออะไรตองการสงใหพารามเตอรตวรบชอวาอะไร โดยใชเครองหมาย " => " เชน

FULLADD(A => X1, B => X2, CIN => X3, C => Y);

Page 22: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางโปรซเยอรสาหรบวงจร Full adder เมอเขยนอยใน Package

ibrary ieee;

use ieee.std_logic_1164.all;

package my_package is

procedure fulladd(A,B, CIN : in std_logic;

C : out std_logic_vector(1 downto 0) );

end my_package;

package body my_package is

procedure fulladd (A,B, CIN : in std_logic;

C : out std_logic_VECTOR (1 downto 0)) is

variable S, COUT : std_logic;

begin

S := A xor B xor CIN;

COUT := (A and B) or (A and CIN) or (B and CIN);

C := COUT & S;

end fulladd;end my_package;

Page 23: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

เมอตองการเรยกโปรซเยอร FULLADD ใน package สามารถท าไดดงน

library ieee;

use ieee.std_logic_1164.all;

use work.my_package.all;

entity EXAMPLE is

port ( A,B : in std_logic_vector (3 downto 0);

CIN : in std_logic;

SUM : out std_logic_vector (3 downto 0);

COUT : out std_logic );

end EXAMPLE;

architecture ARCHI of EXAMPLE is

begin

process (A,B,CIN)

variable S0, S1, S2, S3 : std_logic_vector (1 downto 0);

begin

fulladd (A(0), B(0), CIN, S0);

fulladd (A(1), B(1), S0(1), S1);

fulladd (A(2), B(2), S1(1), S2);

fulladd (A(3), B(3), S2(1), S3);

SUM <= S3(0) & S2(0) & S1(0) & S0(0);

COUT <= S3(1);

end process; end ARCHI;

Page 24: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

การแปลงประเภทของขอมล (Type conversion)

เนองจากภาษา VHDL คอนขางเขมงวดเกยวกบประเภทของขอมล กลาวคอการสงขอมลระหวางออบเจกตนน ออบเจกตตองเปนประเภทเดยวกน เชน BIT กบ BIT หรอ BIT_VECTOR กบ BIT_VECTOR จะเปนคนละชนดไมได เชน BIT กบ STD_LOGIC หรอ STD_LOGIC_VECTOR กบ BIT_VECTOR กไมได ดงนนใน LIBRARY IEEE จงม Package ทไดบรรจฟงกชนเพอการแปลงขอมลบางประเภทไวดงตวอยางตอไปน

Page 25: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางฟงกชนทอยใน std_logic_1164

ฟงกชน แปลงจาก เปน TO_BIT

TO_BITVECTOR

TO_BITVECTOR

TO_STDULOGIC

TO_STDLOGICVECTO

R

TO_STDLOGICVECTOR

TO_STDULOGICVECT

OR

TO_STDULOGICVECTOR

STD_ULOGIC

STD_LOGIC_VECTOR

STD_ULOGIC_VECTO

R

BIT

BIT_VECTOR

STD_ULOGIC_VECTOR BIT_VECTOR STD_LOGIC_VECTOR

BIT

BIT_VECTOR

BIT_VECTOR

STD_ULOGIC

STD_LOGIC_VECTOR

STD_LOGIC_VECTOR

STD_ULOGIC_VECTOR

STD_ULOGIC_VECTOR

Page 26: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางฟงกชนทอยใน Std_Logic_Arith

ฟงกชน จาก(ประเภท, ขนาด) เปน CONV_INTEGER CONV_INTEGER CONV_INTEGER CONV_INTEGERCONV_UNSIGNED CONV_UNSIGNEDCONV_UNSIGNEDCONV_UNSIGNED CONV_SIGNED CONV_SIGNED CONV_SIGNEDCONV_SIGNEDCONV_STD_LOGIC_VECTOR CONV_STD_LOGIC_VECTORCONV_STD_LOGIC_VECTORCONV_STD_LOGIC_VECTOR

INTEGER UNSIGNED SIGNED STD_ULOGIC INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC, INTEGER INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC, INTEGER INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC, INTEGER

INTEGER INTEGER INTEGER SMALL_INT UNSIGNED UNSIGNED UNSIGNED UNSIGNED SIGNED SIGNED SIGNED SIGNED STD_LOGIC_VECTOR STD_LOGIC_VECTORSTD_LOGIC_VECTORSTD_LOGIC_VECTOR

Page 27: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชนทอย Std_Logic_Unsignedแปลงจาก STD_LOGIC_VECTOR ไปเปน UNSIGNED INTEGER

CONV_INTEGER(arg: STD_LOGIC_VECTOR) return INTEGER;

ฟงกชนทอย Std_Logic_Signedแปลงจาก STD_LOGIC_VECTOR ไปเปน SIGNED INTEGER

CONV_INTEGER(arg: STD_LOGIC_VECTOR) return INTEGER;

Page 28: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยางการใชงานมดงน LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY ex_conversion IS

PORT ( a, b : IN std_logic_vector(3 downto 0);c : OUT std_logic_vector(7 downto 0));

END ex_conversion;ARCHITECTURE behav OF ex_conversion ISSIGNAL a_i, b_i, c_i : integer range 0 to 255;BEGIN

-- convert from std_logic_vector to integera_i <= (conv_integer(a));b_i <= (conv_integer(b));c_i <= a_i * b_i;-- convert from integer to a 8 bit std_logic_vectorc <= (conv_std_logic_vector(c_i,8));

END behav;

Page 29: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชนมาตรฐาน

ฟงกชนมาตรฐานเปนฟงกชนทมอยแลวในปาสคาลเมอผเขยนโปรแกรมตองการเรยกใชการท างานของฟงกชนผเขยนโปรแกรมสามารถอางถงชอฟงกชนไดในทนท โดยไมตองเขยนโปรแกรมยอยขนเอง

ตารางขางลางแสดงฟงกชนมาตรฐาน รปแบบการเรยกใช การท างาน ชนดของพารามเตอรและผลลพธทสงกลบมาภายใตชอของฟงกชนเมอมการเรยกใชฟงกชน

Page 30: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชน การท างาน ชนดของพารามเตอร X ชนดของผลลพธAbs(X) ค านวณคาสมบรณของ X Integer / Real เหมอน X

Arctan(X) ค านวณคา arctan ของ X Integer / Real Real

Cos(X) ค านวณคา cosine ของ X Integer / Real Real

Exp(X) ค านวณคา ex โดย e = 2.71828 เปนเลขฐานของลอการธมธรรมชาต

Integer / Real Real

Ln(X) ค านวณคาลอการธมธรรมชาตของ X โดย X > 0

Integer / Real Real

Odd(X) ทดสอบวา X เปนเลขจ านวนคหรอไมโดยใหคาเปนจรง ถา X เปนเลขจ านวนคมฉะนนใหคาเปนเทจ

Integer Boolean

Sin(X) ค านวณคา sine ของ X Integer / Real Real

Round(X) ใหคาเลขจ านวนเตมทใกลX ทสด โดยเศษตงแต 0.5 ขนไปปดขน

Real Integer

Page 31: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชน การท างาน ชนดของพารามเตอร X ชนดของผลลพธ

Sqr(X) ค านวณคายกก าลงทสองของ X

Integer / Real เหมอน X

Sqrt(X) ค านวณคารากทสองของ X Integer / Real RealTrunc(X) ใหคาเลขจ านวนเตมทปด

เศษทศนยมของเลขจ านวนจรง X ทง

Real Integer

Chr(X) ใหคาตวอกขระทมรหสแอสกเปน X

Integer Char

Ord(X) ใหคารหสแอสกทตรงกบตวอกขระ X

Char Integer

Pred(X) ใหคาขอมลล าดบกอนหนา X ตามล าดบในตารางรหสแอสก

Integer / Real / Char เหมอน X

Succ(X) ใหคาขอมลล าดบถดจาก X ตามล าดบในตารางรหสแอสก

Integer / Real / Char เหมอน X

Page 32: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ฟงกชน การท างาน ชนดของพารามเตอร X

ชนดของผลลพธ

Upcase(X) ใหคาตวอกขระใหญของ X ในกรณท X เปนตวอกขระเลก มฉะนนใหคาเปนตวอกขระ X ตามเดม

Char Char

Floor(X) ใหคาจ านวนเตมทมากทสดทนอยกวา X

Integer / Real Integer

Ceiling(X) ใหคาจ านวนเตมทนอยทสดทมากกวา X

Integer / Real Integer

Pi ใหคาคงตวของ = 3.1417…

- Real

Page 33: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ตวอยาง การเรยกใชฟงกชนมาตรฐานการออกแบบโปรแกรม

Page 34: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

การเขยนโปรแกรม ล าดบการประมวลผล

ตวอยาง การท างานProgram XFunctions;

Uses Crt;

Var A, B, C, D : integer;

X, Y, P, R : Real;

Begin

CLrscr;

A := 4;

B := 5;

C := 8;

X := 2.0;

Y := 3.0;

WriteLn(‘A = ’,A);

WriteLn(‘B = ’,B);

WriteLn(‘C = ’,C);

WriteLn(‘X = ’,X:4:2);

WriteLn(‘Y = ’,Y:4:2);

P := Sqr(A) + Sqr(B);

WriteLn(‘Sqr(a) + Sqr(b) = ’,P:5:2);

R := Sqrt(X + Y + A);

WriteLn(‘Sqrt(X + Y + A) = ’,R:5:2);

D := Trunc(C / B) + Round(C / B);

WriteLn(‘Trunc(C / B) + Round(C / B) = ’,D);

ReadLn;End.

1. ลบหนาจอ2. ก าหนดใหเกบคา 4 ไวท A3. ก าหนดใหเกบคา 5 ไวท B4. ก าหนดใหเกบคา 8 ไวท C5. ก าหนดใหเกบคา 2.0 ไวท X6. ก าหนดใหเกบคา 3.0 ไวท Y7. แสดงคาของ A, B, C, X, Y8. ค านวณคา Sqr(A) + Sqr(B) เกบผลลพธไวท P9. แสดงขอความ ‘Sqr(A)+Sqr(B) = ’ และคาของ P10. ค านวณคา Sqrt(X + Y + A) เกบผลลพธไวท R11. แสดงขอความ ‘Sqrt(X+Y+A) = ’ และคาของ R12. ค านวณคา Trunc(C / B) + Round(C / B) เกบผลลพธไวทD13. แสดงขอความ ‘Trunc(C / B) + Round(C / B) = ’ และคาของ D14. หยดรอใหกดปมใด ๆ15. จบ

Page 35: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ผลการ Run โปรแกรม

A = 4

B = 5

C = 8

X = 2.0

Y = 3.0

Sqr(A) + Sqr(B) = 41.00

Sqrt(X + Y + A) = 3.00Trunc(C / B) + Round(C / B) = 3

Page 36: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

โปรแกรมยอยและฟงกชน มาตรฐาน

โปรแกรมยอย (Subprogram)

สามารถเรยกใชงานไดงายและทกๆท กควรประกาศไวภายใน Package

จะดกวาการประกาศไวทอนๆ ภาษา VHDL

แบงโปรแกรมยอยออกเปน 2 ประเภท คอ ฟงกชน (Function) และ โปรซเยอร (Procedure)

ฟงกชน (Function)

- Function declaration -Function body

-Recursive Function

-Procedure Body

ฟงกชนมาตรฐาน

สามารถอางถงชอฟงกชนไดในทนท โดยไมตองเขยนโปรแกรมยอยขน

เอง

Page 37: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

ครเนาวรตน ใจการณ. 2550. ฟงกชนมาตรฐาน.แหลงทมา :http://www.thaigoodview.com/library/teachershow/lopburi/naowarta_s/programming/sec06p05.html. 22 มถนายน 2557.

โปรแกรมยอย (Subprogram) . แหลงทมา http://narong.ece.engr.tu.ac.th/vhdl/document/04-ch4.pdf. 22 มถนายน 2557.

อางอง

Page 38: โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6

รายชอสมาชก1. นาย เสฏฐวฒ ปตะโพธ เลขท 92. นางสาว ธญญารตน แตนเคราะห เลขท143. นางสาว นตตา บญเชด เลขท 154. นางสาว พชามญช สงขฉมพล เลขท 245. นางสาวมนสณย พลอยแสงสาย เลขท 296. นางสาว ณชาภทร ปฏมาประกร เลขท 30

ชนมธยมศกษา 6 / 2