Hàm FUNCTION:

Một phần của tài liệu GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 2 NGÔN NGỮ LẬP TRÌNH VHDL ppt (Trang 65 - 67)

X nan dY nand Z sẽ phát sinh lỗi và phải viết như sau ( nand Y) nand Z 2.CÁC TOÁN TỬ QUAN HỆ:

a. Hàm FUNCTION:

Ví dụ 2-60 là một hàm, hàm này nhận vào một mảng có kiểu STD_LOGIC và trả về một giá trị số nguyên. Giá trị số nguyên này biểu diễn giá trị số học của tất cả các bit được xử lý dưới dạng số nhị phân:

Ví dụ 2-60: cách viết hàm LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL; PACKAGE num_type IS

TYPE log8 IS ARRAY(0 TO 7) OF std_logic; -- line 1 END num_type;

USE work.num_type.ALL; ENTITY convert IS

PORT (I1: IN log8; -- line 2

O1: OUT INTEGER); -- line 3

END convert;

ARCHITECTURE behave OF convert IS

FUNCTION vector_to_int(S:log8) -- line 4

RETURN INTEGER is -- line 5

VARIABLE result: INTEGER := 0 -- line 6 BEGIN

For i IN 0 TO 7 LOOP -- line 7 result := result * 2; -- line 8 IF S(i) = ‘1’ THEN -- line 9 result := result + 1; -- line 10 END IF ;

END LOOP;

RETURN result ; -- line 11

END vector_to_int; BEGIN

O1 <= vector_to_int (I1); END behave;

Dòng 1 khai báo kiểu mảng được sử dụng cho toàn bộ chương trình.

Các dòng 2 và 3 khai báo các port ngõ vào, ngõ ra của thực thể convert và các kiểu dữ liệu. Các dòng từ 4 đến 11 mô tả một hàm được khai báo trong miền khai báo của kiến trúc behave. Bằng cách khai báo hàm trong miền khai báo của kiến trúc, hàm này sẽ được sử dụng bất kỳ miền nào của kiến trúc.

Các dòng 4 và 5 khai báo tên của hàm, các đối số của hàm và kiểu mà hàm trả về.

Ở dòng 6 một biến cục bộ của hàm được khai báo. Các hàm có các miền khai báo rất giống với các phát biểu quá trình. Các biến, các hằng và các kiểu có thể được khai báo nhưng tín hiệu thì không.

Các dòng từ 7 đến 10 khai báo một phát biểu vòng lặp cho mỗi giá trị trong mảng. Giải thuật cơ bản của hàm này là dịch và cộng với mỗi vị trí bit trong mảng. Đầu tiên kết quả được dịch (tức là nhân 2) và tiếp theo là vị trí bit là 1 thì giá trị 1 được cộng vào kết quả.

Ở cuối phát biểu vòng lặp, biến result sẽ chứa giá trị nguyên của mảng được chuyển vào. Giá trị của hàm được chuyển ngược về thông qua phát biểu RETURN. Trong ví dụ trên thì phát biểu RETURN được trình bày ở dòng 11.

Cuối cùng, dòng 12 trình bày cách thức một hàm được gọi. Tên của hàm được theo sau bởi các đối số của hàm ở trong hai ngoặc đơn. Hàm sẽ luôn luôn trả về một giá trị, do vậy quá trình gọi, phát biểu đồng thời, … phải có một vị trí để hàm có thể trả về giá trị này. Trong ví dụ này, ngõ ra của hàm được gán cho một port ngõ ra.

Các thông số của hàm là dữ liệu nhập. Không có phép gán nào được thực hiện cho bất kỳ thông số nào của hàm. Trong ví dụ trên các thông số thuộc loại hằng số do không có loại rõ ràng được chỉ định và mặc định là hằng. Các đối số được xử lý như thể chúng là các hằng được khai báo trong miền khai báo của hàm.

Loại thông số của hàm có thể là thông số tín hiệu. Với một thông số tín hiệu, các thuộc tính của tín hiệu được chuyển vào trong hàm và sẵn sàng được sử dụng. Ngoại lệ đối với phát biểu thuộc tính ‘STABLE, ‘QUIET, ‘TRANSACTION, và ‘DELAYED sẽ tạo ra các tín hiệu đặc biệt.

Một ví dụ 2-61 cho thấy một hàm chứa các thông số tín hiệu như sau:

Ví dụ 2-61: LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY dff IS PORT (d, clk: IN std_logic; q: OUT std_logic);

FUNCTION resing_edge (SINGAL S : std_logic) -- line 1

RETURN BOOLEAN IS -- line 2

BEGIN

IF (S’EVENT) AND (S=‘1’) AND -- line 3 (S’LAST_VALUE = ‘0’) THEN -- line 4

RETURN TRUE; -- line 5

ELSE RETURN FALSE; -- line 6 END IF; END resing_edge; END dff; ARCHITECTURE behave OF dff IS BEGIN PROCESS (CLK) BEGIN

IF rising_edge(clk) THEN -- line 7

END IF;

END PROCESS;

END behave;

Ví dụ này cung cấp phương pháp phát hiện cạnh lên cho mô hình flip flop D. Hàm khai báo trong phần khai báo thực thể và do vậy có thể sử dụng cho bất kỳ kiến trúc nào của thực thể này.

Các dòng 1 và 2 cho thấy khai báo hàm. Chỉ có một thông số (S) cho hàm và thông số này thuộc loại tín hiệu.

Các dòng 3 và 4 là một phát biểu IF, phát biểu này xác định có phải tín hiệu vừa thay đổi hay không, có phải giá trị hiện tại là ‘1’ hay không và có phải giá trị trước đó là ‘0’ hay không. Nếu tất cả các điều kiện này là đúng, phát biểu IF sẽ trả về giá trị đúng (true), có nghĩa là một cạnh tăng đã được phát hiện trên tín hiệu. Nếu một điều kiện nào đó trong các điều kiện này không đúng, giá trị được trả về sẽ là sai (false), như được trình bày ở dòng 6.

Dòng 7 gọi hàm sử dụng tín hiệu được tạo ra bởi port clk của thực thể dff. Nếu có một cạnh tăng trên tín hiệu clk, giá trị của d được chuyển đến ngõ ra q.

Công dụng phổ biến nhất của hàm là trả về một giá trị trong một biểu thức, tuy nhiên còn có hai công dụng nữa có sẵn trong VHDL. Công dụng đầu tiên là hàm chuyển đổi (conversion function) và công dụng thứ hai là hàm phân tích (resolution function). Các hàm chuyển đổi được sử dụng để chuyển đổi từ kiểu này sang kiểu khác. Các hàm phân tích được sử dụng để phân tích việc tranh chấp bus trên một tín hiệu có nhiều nguồn kích (multiply-driven signal).

Một phần của tài liệu GIÁO TRÌNH KỸ THUẬT PLD & ASIC - CHƯƠNG 2 NGÔN NGỮ LẬP TRÌNH VHDL ppt (Trang 65 - 67)

Tải bản đầy đủ (PDF)

(80 trang)