Chia sẻ:
Notifications
Clear all

Cấu trúc cơ bản của một entity và architecture trong VHDL?

2 Bài viết
2 Thành viên
0 Reactions
68 Lượt xem
(@admin)
Thành Viên Moderator
Tham gia: 6 năm trước
Bài viết: 27
Topic starter  

Cấu trúc cơ bản của một entity và architecture trong VHDL?


   
Trích dẫn
Thẻ chủ đề
(@Anonymous)
New Member Khách
Tham gia: 1 giây trước
Bài viết: 0
 

Cấu trúc cơ bản của một entity và architecture trong VHDL

Trong VHDL, một mạch kỹ thuật số được mô tả bằng hai phần chính: **Entity** và **Architecture**.

**1. Entity:**

* **Định nghĩa:** Entity khai báo *giao diện* của mạch, tức là các cổng vào/ra và các tham số generic. Nó mô tả *cái gì* mạch làm, chứ không phải *làm như thế nào*.
* **Cú pháp:**

```vhdl
entity entity_name is
generic (
generic_name : data_type := default_value;
-- Khai báo các generic khác
);
port (
port_name : mode data_type;
-- Khai báo các cổng khác
);
end entity entity_name;
```

* **Các thành phần:**
* `entity_name`: Tên của entity.
* `generic`: Khai báo các tham số cấu hình cho mạch (ví dụ: độ rộng dữ liệu, độ trễ).
* `generic_name`: Tên của generic.
* `data_type`: Kiểu dữ liệu của generic (ví dụ: `integer`, `time`).
* `default_value`: Giá trị mặc định của generic.
* `port`: Khai báo các cổng vào/ra của mạch.
* `port_name`: Tên của cổng.
* `mode`: Hướng dữ liệu của cổng:
* `in`: Cổng vào (nhận dữ liệu).
* `out`: Cổng ra (xuất dữ liệu).
* `inout`: Cổng vừa vào vừa ra (truyền dữ liệu hai chiều). *Lưu ý: ít được khuyến khích sử dụng trực tiếp trong logic combinational vì có thể dẫn đến vòng lặp.*
* `buffer`: Cổng ra, nhưng giá trị của nó có thể được đọc lại bên trong architecture. *Lưu ý: ít được khuyến khích sử dụng trừ khi có lý do đặc biệt.*
* `linkage`: Dùng cho các cổng được kết nối thông qua các cấu trúc phân cấp, thường thấy trong các thư viện và component IP.
* `data_type`: Kiểu dữ liệu của cổng (ví dụ: `std_logic`, `std_logic_vector`).

* **Ví dụ:**

```vhdl
entity and_gate is
port (
a, b : in std_logic;
y : out std_logic
);
end entity and_gate;
```
Entity này mô tả một cổng AND có hai cổng vào `a` và `b` kiểu `std_logic`, và một cổng ra `y` cũng kiểu `std_logic`.

**2. Architecture:**

* **Định nghĩa:** Architecture mô tả *cách* mạch hoạt động. Nó chứa các lệnh VHDL mô tả logic của mạch. Một entity có thể có nhiều architecture khác nhau, mỗi architecture mô tả một cách thực hiện khác nhau của cùng một chức năng.
* **Cú pháp:**

```vhdl
architecture architecture_name of entity_name is
-- Khai báo các tín hiệu (signals), component, constant, function, procedure...
signal signal_name : data_type;
-- ...
begin
-- Mô tả logic của mạch
-- Sử dụng các lệnh gán tín hiệu, process, component instantiation...
y <= a and b; -- Ví dụ: Gán giá trị cho tín hiệu y
-- ...
end architecture architecture_name;
```

* **Các thành phần:**
* `architecture_name`: Tên của architecture.
* `entity_name`: Tên của entity mà architecture này mô tả.
* `Declaration part (phần khai báo):** Chứa các khai báo cần thiết cho việc mô tả logic của mạch, bao gồm:
* `signal`: Khai báo các tín hiệu bên trong mạch. Các tín hiệu này được sử dụng để kết nối các thành phần bên trong architecture.
* `constant`: Khai báo các hằng số.
* `component`: Khai báo các thành phần khác có thể được sử dụng bên trong architecture.
* `function`, `procedure`: Khai báo các hàm và thủ tục con.
* `type`, `subtype`: Khai báo các kiểu dữ liệu tùy chỉnh.
* **Statement part (phần lệnh):** Chứa các lệnh VHDL mô tả logic của mạch. Các lệnh này có thể là:
* `Concurrent signal assignment`: Gán giá trị cho tín hiệu một cách song song (ví dụ: `y <= a and b;`).
* `Process`: Khối lệnh tuần tự, thường được sử dụng để mô tả các mạch tuần tự (ví dụ: flip-flop, counter).
* `Component instantiation`: Sử dụng các thành phần đã được khai báo ở phần khai báo.
* `Generate statement`: Tạo ra nhiều bản sao của một đoạn code dựa trên một điều kiện.
* `Block statement`: Nhóm các câu lệnh lại với nhau.

* **Ví dụ:**

```vhdl
architecture behavioral of and_gate is
begin
y <= a and b;
end architecture behavioral;
```
Architecture này mô tả cổng AND bằng cách sử dụng phép toán `and` để gán giá trị cho cổng ra `y` dựa trên các cổng vào `a` và `b`. Đây là một mô tả *behavioral*, mô tả hành vi của mạch chứ không phải cấu trúc của nó.

**Ví dụ hoàn chỉnh:**

```vhdl
library ieee;
use ieee.std_logic_1164.all;

entity and_gate is
port (
a, b : in std_logic;
y : out std_logic
);
end entity and_gate;

architecture behavioral of and_gate is
begin
y <= a and b;
end architecture behavioral;
```

**Tóm tắt:**

* **Entity:** Định nghĩa giao diện của mạch (cổng vào/ra, generic). Mô tả *cái gì*.
* **Architecture:** Mô tả cách mạch hoạt động. Mô tả *làm như thế nào*.
* Một entity có thể có nhiều architecture.
* Entity và Architecture phải được biên dịch và liên kết với nhau để tạo ra một mô hình mạch hoàn chỉnh.

**Lưu ý:**

* VHDL là ngôn ngữ mô tả phần cứng (HDL), không phải ngôn ngữ lập trình phần mềm. Do đó, các lệnh trong VHDL thường được thực hiện song song (concurrent) trừ khi được đặt trong một `process`.
* Có nhiều phong cách mô tả mạch khác nhau trong VHDL, bao gồm behavioral, dataflow và structural. Mỗi phong cách có ưu điểm và nhược điểm riêng, và việc lựa chọn phong cách phù hợp phụ thuộc vào mục tiêu của thiết kế.

Hi vọng điều này cung cấp cho bạn một hiểu biết cơ bản về cấu trúc entity và architecture trong VHDL!


   
Trả lờiTrích dẫn