- TOP là một generic.
VÀ QUÁ TRÌNH TRÀN
8.1.1 Cá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
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.