Các hàm (function );

Một phần của tài liệu Tìm hiểu ngôn ngữ DHVL.doc (Trang 88 - 90)

- TOP là một generic.

8.1.1Các hàm (function );

VÀ QUÁ TRÌNH TRÀN

8.1.1Các hàm (function );

Các hàm dùng mơ tả các thuật tốn tuần tự trả về 1 giá trị . Giá trị này trả về cho chương trình gọi bằng phát biểu return , được sử dụng cho các hàm xác định và các hàm cĩ kiểu chuyển biến . Sau đây là ví dụ 1 thân hàm :

function LARGEST ( TOTAL_NO : INTEGER ; SET : PATTERN ) return REAL is

--PATTERN is elsewhere defined to be a type of 1-D array of -- non_negative floating point value .

variable PATTERN_VALUE : REAL :=0; begin

for K in SET’range loop

if SET(K) > RETURN_VALUE then RETURN_VALUE := SET (K); end if;

end loop;

end LARGEST;

Biến RETURN_VALUE được đưa vào giá trị đầu là 0.0 trong thời gian hàm được gọi . Nĩ khơng cịn tồn tại sau điểm cuối của hàm .

Cú pháp chung của chương trình con xác định cho thân hàm là : [ pure | impure ] function function_name ( parameter_list) return return_type

Một hàm nguyên mẫu (Pure function) là giá trị trả về tương ứng mỗi thời gian mà hàm gọi đến tập hợp số thực tương ứng . Impure function là sự trả về giá trị khác với mỗi thời gian mà nĩ gọi đến tập hợp số thực tương ứng .

Ví dụ NOW là 1 impure function bởi vì nĩ trả về giá trị khác với khi gọi tại thời điểm khác . Nếu khơng cĩ từ khĩa pure hay impure thì hàm đĩ mặc nhiên được xem là pure function .

Parameter_list mơ tả danh sách của các tham số hình thức cho function . Mode của các tham số này chỉ cho phép là mode in , ngồi ra chỉ cĩ đối tượng constant và tín hiệu mới cho vào các tham số , lớp đối tượng mặc nhiên là constant. Ví dụ trong function LARGEST , TOTAL_NO là constant và giá trị của nĩ khơng thể thay đổi trong thân function .

Một ví dụ khác của thân function , xem phần sau . Function này trả về là true nếu xuất hiện cạnh lên trên tín hiệu input . Function này là 1 pure function :

pure function VRISE ( signal CLOCK_NAME : BIT ) return BOOLEAN is begin

return CLOCK_NAME =’1’ and CLOCK_NAME ‘ event ; end VRISE ;

Sau đây là 2 ví dụ về impure function :

impure function RANDOM (SEED :REAL) return REAL is variable NUM : REAL;

attribute FOREIGN of RANDOM : function is ‘NUM = rand (seed)’; begin

return NUM; end RANDOM;

impure function USE (TO_ALLOCATE : POSITIVE) return POSITIVE is --ALLOCATE is a shared variable declared elsewhere , but

--visible to this function . begin

ALLOCATE := ALLOCATE + TO_ALLOCATE ; Return ALLOCATE ;

end function USE; -- keywork function after end is optional.

SUM := SUM+ LARGEST (MAX_COINS, COLLECTION ); Function gọi cĩ dạng là :

Function _ name ( list_of_actuals)

Các số thực cĩ thể xácđịnh bởi vị trí ( số thực đầu tiên tương ứng với số hình thức đầu tiên , số thực thứ hai tương ứng với số hình thức thứ hai và cứ thế tiếp tục ) hoặc xác định bằng liên kết ( sự liên kết của các số thực và số hình thức xác định 1 cách rõ ràng ). Function gọi trong ví dụ trước , viết lại theo dạng liên kết :

LARGEST ( SET => COLLECTION, TOTAL_NO => MAX_COINS)

Các hàm thơng thường cho việc biến đổi kiểu . sau đây là 1 ví dụ của hàm biến đổi 1 giá trị từ kiểu STD_ULOGIC tới giá trị kiểu CHARACTER :

function TO_CHARACTER ( ARG : STD_ULOGIC ) return CHARACTER is (adsbygoogle = window.adsbygoogle || []).push({});

begin

case ARG is

when ‘U’ => return ‘U’; when ‘X’ => return ‘X’; when ‘0’ => return ‘0’; when ‘1’ => return ‘1’; when ‘Z’ => return ‘Z’; when ‘W’ => return ‘W’; when ‘L’ => return ‘L’; when ‘H’ => return ‘H’; when ‘-’ => return ‘-’; end case; end TO_CHARACTER ; Function gọi cĩ dạng : TO_CHARACTER ( STD_ULOGIC(‘U’))

Hàm trả về ký tữ ‘U’ . Ngồi ra nĩ cịn cĩ khả năng biến đổi kiểu nhiều hơn , sử dụng bởi bảng look_up . Sau đây là hàm TO_CHARACTER mơ tả bảng look_up .

type LOOK_UP is array (STD_ULOGIC) of CHARACTER; constant TO_CHARACTER : LOOK_UP := (‘U’ => ‘U’, ‘X’ =>’X’, ‘1’=>’1’,’Z’ =>’Z’,’W’ =>’W’,’L’ => ‘L’,’H’=>’H’,’-‘=>’-‘); Sau đây là biểu thức :

TO_CHARACTER ( STD_ULOGIC (‘U’))

Cho ra ký tự ‘U’ . Chú ý trong cả 2 hệ thống cách gọi cho việc thực hiện biến đổi kiểu là khơng đổi.

Một phần của tài liệu Tìm hiểu ngôn ngữ DHVL.doc (Trang 88 - 90)