Khai báo Entity

Một phần của tài liệu Thiet ke mach dien bang may tinh (Trang 32 - 36)

Như trên đã đề cập, phần khai báo Entity chỉ đưa ra một cái nhìn phía bên ngoài của một phần tử mà không cung cấp thông tin về sự thực hiện của phần tử đó như thế nào. Cú pháp khai báo của một Entity như sau:

Entity entity_name is

[generic (generic_declaration);] [port (port_declaration);]

{entity_declarative_item {constants, types, signals};} end [entity_name];

• [] : Dấu ngoặc vuông chỉ ra các tham số có thể lựa chọn.

• | : Dấu gạch đứng hiển thị một sự lựa chọn trong số các lựa chọn khác.

• {} : Khai báo một hoặc nhiều các đối tượng, mà các đối tượng này có thể được định nghĩa bởi người dùng.

a. Khai báo Generic: Dùng để khai báo các hằng mà chúng có thể được dùng để

điều khiển cấu trúc và sự hoạt động của Entity. Cú pháp của khai báo này như sau:

generic ( constant_name : type [:=init_value] {;constant_name: type[:=init_value]});

• Ở đây tên hằng constant_name chỉ ra tên của một hằng dạng generic (hằng dùng chung).

• Kiểu (Type) được dùng để chỉ ra kiểu dữ liệu của hằng.

• Init_value : chỉ ra giá trị khởi tạo cho hằng.

b. Khai báo cổng (Port): Được dùng để khai báo các cổng vào, ra của Entity. Cú

pháp của khai báo này như sau:

Port ( port_name : [mode] type [:= init_value] {; port_name:[mode] type [:=init_value]});

• Port_name được dùng để chỉ ra tên của một cổng, mode chỉ ra hướng vào ra của tín hiệu tại cổng đó. Type chỉ ra kiểu dữ liệu của một cổng và init_value chỉ ra giá trị khởi tạo cho cổng đó.

Chú ý ! Với VHDL không phân biệt chữ hoa và chữ thường, chẳng hạn như: xyz =

xYz = XYZ.

• Có bốn mode được sử dụng trong khai báo cổng:

- In: Chỉ có thể được đọc, nó chỉ được dùng cho các tín hiệu đầu vào (chỉ được phép nằm bên phải phép gán).

- Out: Chỉ được dùng để gán giá trị, nó chỉ được dùng cho các cổng đầu ra (nó chỉ được nằm bên trái của phép gán).

- Inout: Có thể được dùng để đọc và gán giá trị. Nó có thể có nhiều hơn một hướng điều khiển (có thể nằm ở bên trái hoặc bên phải phép gán).

- Buffer: Có thể được dùng để đọc và gán giá trị (có thể nằm ở bên trái hoặc bên phải phép gán). Inout là một cổng hai hướng, còn Buffer là một cổng không có hướng.

c. Entity_declarative_item: Được dùng để khai báo các hằng, kiểu dữ liệu, hoặc tín

hiệu mà nó có thể được sử dụng trong khi thực hiện của một Entity.

d. Ví dụ:

Ví dụ 1: Khai báo các cổng vào ra:

entity xxx is port ( A : in integer; B : in integer; C : out integer; D : inout integer; E : buffer integer); end xxx; architecture bhv of xxx is begin process (A,B) begin

C <= A ; -- ( Câu lệnh đúng: A được gán cho C ). A <= B ; -- ( Câu lệnh sai: A là một đầu vào ).

E <= D + 1; -- ( Câu lệnh đúng: D ở mode inout vì vậy nó -- có thể được gán và đọc ) (adsbygoogle = window.adsbygoogle || []).push({});

D <= C + 1; -- ( Câu lệnh sai : C là cổng đầu ra nên không -- thể đọc được cho đầu vào ).

end process; end bhv;

Ví dụ 2: Khai báo Entity:

Hình 3.1: Thực thể FULL_ADDER 1bit.

Hình 3.1 chỉ ra giao diện của một bộ cộng một bit. Tên Entity của phần tử này là FULL_ADDER. Nó bao gồm các cổng đầu vào A, B và CIN.

Các cổng này có kiểu dữ liệu là kiểu Bit, còn các cổng đầu ra SUM và COUT cũng mang kiểu dữ liệu là kiểu BIT. Ngôn ngữ VHDL dùng để diễn tả giao diện này như sau:

Entity FULL_ADDER is port ( A, B, CIN : in BIT;

SUM, COUT : out BIT ); End FULL_ADDER ;

Chúng ta có thể điều khiển cấu trúc cũng như thời gian của một Entity bởi việc sử dụng các hằng generic. Ví dụ sau sẽ chỉ ra việc điều khiển này, trong ví dụ này hằng N được dùng để chỉ ra số bít của một bộ cộng. Trong quá trình mô phỏng hoặc quá trình tổng hợp, giá trị thực tế cho mỗi hằng dùng chung generic có thể bị thay đổi.

entity ADDER is

generic (N : INTEGER := 4); M : TIME := 10ns);

port ( A, B : in BIT_VECTOR (N -1 downto 0 ); CIN :in BIT;

SUM : out BIT_VECTOR (N-1 downto 0); COUT : out BIT );

end ADDER;

Giao diện mô tả bộ cộng này như sau:

Hình 3.2: Thực thể FULL_ADDER 4 bit. 3.1.2. Các kiểu kiến trúc (Achitecture)

Một kiến trúc đưa ra kết cấu bên trong của một Entity. Một Entity có thể có nhiều hơn một kiến trúc, nó chỉ ra quan hệ giữa các đầu vào và đầu ra của một Entity mà quan hệ này được diễn tả theo các thuật ngữ sau:

- Kiểu hành vi hoạt động ( Behavioral ).

- Kiểu hoạt động của các luồng dữ liệu ( Dataflow ). - Kiểu cấu trúc ( Structure ).

Một kiến trúc xác định chức năng của một Entity. Nó bao gồm các phần: Khai báo các các tín hiệu, hằng, khai báo các kiểu, các phần tử, tiếp theo là các phát biểu (lệnh) đồng thời.

Khai báo một kiến trúc sử dụng cú pháp sau:

architecture architecture_name of entity_name is { architecture_declarative_part } Begin

{concurrent_statement} --(lệnh đồng thời) end [architecture_name ];

3.1.2.1. Kiến trúc theo kiểu hành vi hoạt động (Behavioral)

Một kiến trúc kiểu hành vi hoạt động chỉ ra các hoạt động mà một hệ thống riêng biệt nào đó phải thực hiện trong một chương trình, nó giống như việc diễn tả các quá trình hoạt động, nhưng không cung cấp chi tiết mà thiết kế được thực thi như thế nào. Thành phần chủ yếu của việc diễn tả theo kiểu hành vi trong VHDL là process. Dưới đây là ví dụ chỉ ra kiểu diễn tả theo kiểu hành vi của một bộ cộng với tên là FULL_ADDER.

architecture BEHAVIOURAL of FULL_ADDER is begin

process (A,B,CIN) begin

if ( A ='0' and B ='0' and CIN='0' ) then SUM <= '0';

COUT <= '0' ; elsif

(A='0' and B='0' and CIN='1') or (A='0' and B='1' and CIN='0') or (A='1' and B='0' and CIN='0') then SUM <= '1'; (adsbygoogle = window.adsbygoogle || []).push({});

COUT <= '0' ; elsif

(A='0' and B='1' and CIN='1') or (A='1' and B='0' and CIN='1') or (A='1' and B='1' and CIN='0') then SUM <= '0';

COUT <= '1';

elsif (A='1' and B='1' and CIN='1') then SUM <='1';

COUT <='1'; end if;

end process;

end BEHAVIOURAL;

Một phần của tài liệu Thiet ke mach dien bang may tinh (Trang 32 - 36)