- TOP là một generic.
VÀ QUÁ TRÌNH TRÀN
8.3 ĐIỀU KHIỂN OVERLOADIN G:
Tốn tử overloading là một trong những nét đặc biệt của ngơn ngữ . Khi 1 ký hiệu tốn tử chuẩn cĩ tác dụng sai lên kiểu của các tốn hạng của nĩ , tốn tử ù được diễn đạt là overloaded . Điều rất cần thiết cho tốn hạng overloading xuất hiện từ sự kiện được tốn tử định nghĩa trước, trong ngơn ngữ , định nghĩa các kiểu cho các tốn hạng . Ví dụ tác dụng của and định nghĩa cho các argument của kiểu BIT và BOOLEAN , và kích thước của chúng là dãy 1 phần tử . Nếu argument thuộc kiểu MVL ( MVL là kiểu liệt kê với các giá trị ‘U’,’0’,’1’,’Z’). Trong trường hợp này , nĩ cĩ thể làm tăng tác dụng của and như 1 function tác dụng lên các argument của kiểu MVL . Tốn tử and khi đĩ được diễn đạt cho overloaded . Tốn tử trong biểu thức :
S1 and S2
S1 và S2 là kiểu MVL , chỉ đến tác dụng của and được định nghĩa bằng kiểu viết như 1 function . Tốn tử trong biểu thức :
CLK1 and CLK2
Các thân function được viết lại để định nghĩa hành vi của các tốn tử overloaded . Số lương các tham số trong 1 function phải bằng với số lương dùng với tốn tử . Function cĩ nhiều nhất là 2 tham số , tham số thứ nhất bên trái là tốn hạng của tốn tử , và tham số thứ hai , nếu tồn tại thì nĩ là tốn hạng thứ hai .Sau đây là các ví dụ của khai báo function cho thân function .
type MVL is (‘U’,’0’,’1’,’Z’);
function “and” (L,R:MVL) return MVL; function “or” (L,R:MVL) return MVL; function “not” (R:MVL) return MVL;
Các tốn tử and , or và not là các ký hiệu tốn tử được định nghĩa trước , tên function của tốn tử overloaded được đặt trong hai dấu ngoặc kép . Để khai báo function overloaded , các tốn tử cĩ thể gọi sử dụng 1 trong 2 hai kiểu khác nhau của các ký hiệu :
1. Ký hiệu tốn tử chuẩn . 2. Ký hiệu function gọi chuẩn .
Đây là 1 số ví dụ của 2 kiểu ký hiệu cơ bản xuất hiện trên các khai báo function tốn tử overloaded : signal A,B,C : MVL;
signal X,Y,Z : BIT ;
A <= ‘Z’ OR ‘1’ ; -- #1 : standard operator notation. B <= ‘or’ ( ‘0’,’Z’); -- #2 : function call notation. X <= not Y ; -- #3 :
Z <= X and Y; -- #4 : C <= ( A or B ) and ( not C ); -- #5 : Z <= ( X and Y ) or A; -- #6 :
Tốn tử or trong phát biểu đầu tiên chỉ đến tốn tử overloaded bởi vì kiểu của tốn tử bên trái là MVL . Đây là ký hiệu tốn tử chuẩn , do đĩ ký hiệu tốn tử overloaded xuất hiện như ký hiệu tốn tử chuẩn . Một ví dụ của ký hiệu function gọi xem trong phát biểu thứ hai , với function overloaded or được gọi một cách rõ ràng . Các tốn tử trong phát biểu thứ ba và tư chỉ đến các tốn tử khai báo trước vì các tốn hạng là kiểu BIT . Phát biểu thứ sáu sẽ bị lỗi , tốn tử or khơng phải là overloaded , nĩ được định nghĩa với tham số thứ nhất kiểu BIT và tham số thứ hai là kiểu MVL.
Ví dụ cuối cùng là điểm cần quan tâm . Trong các function tốn tử overloaded , nĩ khơng cần hai tốn hạng cĩ cùng kiểu . Trong trường hợp trước , nếu function overloaded or cĩ khai báo khác là :
Function “or” ( L : BIT ; R : MVL ) return BIT ; Thì phát biểu thứ sáu sẽ khơng bị lỗi .
Trường hợp này chủ yếu thường sử dụng cho các vector, do nĩ cung cấp khả năng thực thi tính tốn trên các vector . Sự tính tốn trên các vector khơng được định nghĩa trước trong ngơn ngữ . Các function overloaded cần phải định nghĩa lại . Sau đây là 1 số ví dụ của khai báo tốn tử overloaded :
function “+” (OPD1,OPD2 : BIT_VECTOR ) return BIT_VECTOR; function “-” (OPD1,OPD2 : BIT_VECTOR ) return BIT_VECTOR; type MVL is (‘U’,’0’,’1’,’Z’);
type MVL_VECTOR is array ( NATUAL range <>) of MVL;
function “+” (OPD1,OPD2 : MVL_VECTOR ) return MVL_VECTOR; function “-” (OPD1,OPD2 : MVL_VECTOR ) return MVL_VECTOR; Các ví dụ gọi đến các function overloaded như sau :
variable A,B,C,CAB : BIT_VECTOR ( 3 downto 0 ); variable D,E,F,FED : MVL_VECTOR ( 0 to 7); …
CAB := A+B-C ; FED := D – F + E ;
Trong phát biểu gán biến đầu tiên , các argument cho các tốn tử + và – là vector BIT ; do đĩ chúng sẽ gọi thực thi các function overloaded “+” và “-“ tương ứng , cho việc định lương tương ứng . Cũng như thế trong phép gán thứ hai , tốn tử + và – tác dụng trên vector MVL ; do đĩ để định lượng , chúng sẽ gọi các function tốn tử overloaded “+” và “- “ tương ứng .