Kiểu dữ liệu mảng ARRAY

Một phần của tài liệu Luận văn : Kỹ thuật PLD và ASIC doc (Trang 108 - 109)

IV. GIỚI THIỆU VỀ MƠ HÌNH HÀNH

e. Kiểu dữ liệu mảng ARRAY

Array là tập hợp các đối tượng cùng một kiểu dữ liệu, có thể là mảng 1 chiều (1D), mảng 2 chiều (2D) hoặc mảng 1 chiều × 1 chiều (1D × 1D). Các mảng có thể có nhiều chiều hơn nữa nhưng chúng khơng được tổng hợp. Hình 2-11 minh hoạ cấu trúc của mảng dữ liệu. Hình (a) là giá trị đơn (scalar), hình (b) là mảng 1 chiều (1D), hình (c) là mảng các vector (1D ×1D) và hình (d) là mảng scalar (2D).

Hình 2-11. Các kiểu mảng dữ liệu.

Các loại dữ liệu có thể tổng hợp đã định nghĩa cho các kiểu mảng ở trên là • Dữ liệu Scalar: BIT, STD_LOGIC, STD_ULOGIC và BOOLAEN.

• Các Vector: BIT_VECTOR, STD_LOGIC_VECTOR, STD_ULOGIC_VECTOR, INTEGER, SIGNED và UNSIGNED.

Cú pháp chỉ định cho một kiểu dữ liệu mảng mới như sau:

TYPE type_name IS ARRAY (specification) OF data_type; Để sử dụng kiểu dữ liệu mảng mới này thì khai báo tín hiệu như sau:

SIGNAL signal_name: type_name [:=initial_value];

Trong cú pháp ở trên tín hiệu SIGNAL được khai báo. Tuy nhiên cũng có thể là CONSTANT hoặc VARIABLE. Chú ý tuỳ chọn giá trị khởi gán chỉ được dùng cho mơ phỏng.

Ví dụ 2-39: về mảng 1D×1D:

Chúng ta muốn xây dựng một mảng chứa 4 vector, mỗi vector chứa 8 bit – đây là mảng 1D×1D. Chúng ta gọi mỗi vector là một hàng và một mảng đầy đủ là một ma trận. Cách khai báo như sau:

TYPE row IS ARRAY (7 DONWTO 0) OF STD_LOGIC; -- 1D array

TYPE matrix IS ARRAY (0 TO 3) OF row; -- 1D×1D array

SIGNAL x: matrix; -- 1D×1D signal

Ví dụ về khai báo mảng kiểu khác:

TYPE matrix IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR(7 DOWNTO 0); Ví dụ về khởi gán cho mảng:

… := “0001”; -- gán cho mảng 1D

… := (‘0’, ‘0’, ‘0’, ‘1’); -- gán cho mảng 1D

… := ((‘0’, ‘1’, ‘1’, ‘1’), (‘1’, ‘1’, ‘1’, ‘0’)); -- gán cho mảng 1D×1D hoặc 2D

Ví dụ 2-40: về các phép gán hợp lệ và không hợp lệ của mảng:

Cho các mảng được khai báo như sau:

TYPE row IS ARRAY (7 DONWTO 0) OF STD_LOGIC; -- 1D array

TYPE array1 IS ARRAY (0 TO 3) OF row; -- 1D×1D array

TYPE array2 IS ARRAY (0 TO 3) OF STD_LOGIC_VECTOR (7 DOWNTO 0); --

1D×1D array

TYPE array3 IS ARRAY (0 TO 3, 7 DOWNTO 0) OF STD_LOGIC;-- 2D array

SIGNAL x: row; SIGNAL y: array1; SIGNAL v: array2; SIGNAL w: array3;

Các phép gán bit như sau:

x(0) <= y(1) (2); -- gán bit thứ 2 của vector y1 cho x(0). x(1) <= v(2) (1); -- gán bit thứ 1 của vector v2 cho x(1). x(2) <= w(2,1); -- gán bit thứ 1 của vector w2 cho x(2). y(1) (1) <= x(6);

y(2) (0) <= v(0) (0);

Các phép gán vector như sau:

x <= y(0) ; -- hợp lệ vì cùng kiểu dữ liệu row.

x <= v(1) ; -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu row× STD_LOGIC_VECTOR.

x <= w(2) ; -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu row× STD_LOGIC_VECTOR.

x <= w(2, 2 downto 0); -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu. v(0) <= w(2, 2 downto 0); -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu. v(0) <= w(2) ; -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu. y(1) <= v(3) ; -- khơng hợp lệ vì khơng tương thích kiểu dữ liệu.

y(1) (7 downto 3) <= x(4 downto 0); -- hợp lệ vì cùng kiểu và kích thước dữ liệu. v(1) (7 downto 3) <= v(2) ( 4 downto 0); -- hợp lệ vì cùng kiểu và kích thước dữ liệu. w(1, 5 downto 1) <= v(2) ( 4 downto 0); -- khơng hợp lệ vì khơng cùng kiểu.

Một phần của tài liệu Luận văn : Kỹ thuật PLD và ASIC doc (Trang 108 - 109)