MODULE 4: VHDL – VIẾT “BẢN VẼ” CHO PHẦN CỨNG
Chào bạn! Rất vui được tiếp tục đồng hành cùng bạn trên con đường trở thành “kiến trúc sư phần cứng”. Sau khi đã hiểu về quy trình thiết kế và bộ công cụ ở Module 3, hôm nay chúng ta sẽ thực sự bắt tay vào việc “vẽ” mạch điện bằng ngôn ngữ chuyên nghiệp: VHDL.
1. Giới thiệu
Chào mừng bạn đến với chương học về ngôn ngữ VHDL. Đến thời điểm này, bạn đã quen với việc tư duy về các cổng logic và bảng sự thật. Tuy nhiên, để thiết kế một hệ thống lớn như bộ xử lý tín hiệu trên chip Artix-7 XC7A100T, chúng ta không thể vẽ tay hàng triệu cổng kết nối. Thay vào đó, chúng ta sử dụng VHDL để mô tả mạch điện.
Bài học này sẽ giới thiệu cho bạn hai thành phần bắt buộc và quan trọng nhất của mọi file VHDL: Entity và Architecture. Đây là cách mà các kỹ sư vi mạch trên thế giới quản lý sự phức tạp. Trong công nghiệp, một hệ thống điều khiển robot hay một bộ xử lý ảnh đều được chia nhỏ thành các khối “vỏ và ruột” như thế này. Việc nắm vững cấu trúc này giúp bạn ánh xạ chính xác những gì mình viết trong mã nguồn tới các linh kiện vật lý (như Switch và LED) trên bo mạch AIOT-ARTIX7. Hãy nhớ rằng: chúng ta không viết phần mềm để “chạy”, chúng ta viết “bản vẽ” để chip FPGA tự kết nối phần cứng bên trong.
2. Nội dung chính
2.1. VHDL là gì? – Không phải là lập trình, mà là “mô tả”
Trước khi đi vào chi tiết, bạn cần nhớ kỹ: VHDL (VHSIC Hardware Description Language) là ngôn ngữ mô tả phần cứng. Sự khác biệt nằm ở tư duy:
- Trong C/C++: Bạn viết: “Làm việc A, rồi làm việc B”. Đây là tư duy tuần tự.
- Trong VHDL: Bạn viết: “Dây A nối vào cổng này, dây B nối vào đèn kia”. Đây là tư duy cấu trúc vật lý.
2.2. Entity (Thực thể) – “Cái vỏ” chứa các cổng kết nối
Hãy tưởng tượng bạn mua một chiếc hộp đen có các chân cắm thò ra ngoài. Bạn chưa cần biết bên trong hộp có gì, bạn chỉ cần biết chân nào là đầu vào (Input) và chân nào là đầu ra (Output). Đó chính là Entity.
- Vai trò: Định nghĩa giao tiếp của mạch điện với thế giới bên ngoài.
- Các thành phần chính:
- Name: Tên của khối mạch (ví dụ:
Dieu_Khien_LED).
- Port: Danh sách các “chân cắm”.
- Direction: Hướng của tín hiệu (
in là đi vào chip từ Switch, out là đi ra từ chip đến LED).
- Gắn với bo AIOT-ARTIX7: Khi bạn khai báo một port mang tên
SW1 với hướng là in, Vivado sẽ hiểu rằng đây là tín hiệu nhận từ công tắc gạt vật lý trên bo mạch thông qua file ràng buộc chân (XDC).
2.3. Architecture (Kiến trúc) – “Cái ruột” chứa logic xử lý
Nếu Entity là cái vỏ hộp, thì Architecture chính là sơ đồ đi dây chằng chịt bên trong cái hộp đó để tạo ra chức năng thực tế.
- Vai trò: Mô tả cách mạch điện hoạt động hoặc cách các linh kiện nhỏ bên trong được kết nối với nhau.
- Cấu trúc: Architecture luôn phải đi kèm với một Entity cụ thể. Nó bắt đầu bằng từ khóa
begin và kết thúc bằng end.
- Tư duy song song: Mọi dòng lệnh bên trong Architecture (phần concurrent) đều diễn ra cùng một lúc. Nếu bạn viết 10 dòng lệnh gán tín hiệu, khi có điện, cả 10 luồng điện sẽ chảy đồng thời, không có dòng nào phải đợi dòng nào.

2.4. Ví dụ trực quan: Chiếc Tivi
Để dễ hiểu hơn, hãy so sánh một khối VHDL với chiếc Tivi trong nhà bạn:
- Entity (Cái vỏ): Là khung nhựa của Tivi với các cổng cắm HDMI, cổng Anten, và màn hình. Bạn biết cổng HDMI là để đưa tín hiệu vào, màn hình là để đưa hình ảnh ra.
- Architecture (Cái ruột): Là các bảng mạch, chip xử lý hình ảnh và loa bên trong. Nó quy định rằng: “Nếu tín hiệu vào từ HDMI là phim hành động, thì Architecture sẽ điều khiển màn hình hiển thị màu sắc và loa phát ra tiếng nổ”.
2.5. Cấu trúc một đoạn mã VHDL cơ bản trên AIOT-ARTIX7
Dưới đây là cách chúng ta mô tả mạch “Gạt Switch 1 thì LED 1 sáng” trên bo mạch của mình:
— Phần Entity: Khai báo chân cắm
entity Dieu_Khien is
port ( Nut_Gat : in bit;
Den_LED : out bit );
end Dieu_Khien;
— Phần Architecture: Nối dây bên trong
architecture RTL of Dieu_Khien is
begin
Den_LED <= Nut_Gat; — Tín hiệu từ nút gạt chảy thẳng vào đèn LED
end RTL;
Lưu ý: Dấu <= trong VHDL có nghĩa là nối dây vật lý, không phải là lệnh gán giá trị biến như trong phần mềm.
3. Tổng kết
- Entity: Là phần định nghĩa giao tiếp (vỏ), cho biết mạch có những chân cắm nào, hướng vào hay ra.
- Architecture: Là phần mô tả logic (ruột), quyết định mạch điện thực hiện chức năng gì.
- Mối quan hệ: Một Entity có thể có nhiều Architecture khác nhau, nhưng một Architecture phải thuộc về một Entity cụ thể.
- Hardware Mindset: Code VHDL đại diện cho các kết nối vật lý trên chip Artix-7, hoạt động song song và tức thời.
Kiểm tra kiến thức
Hãy cùng kiểm tra lại kiến thức về “khối xây dựng” cơ bản nhất trong VHDL.
- Câu 1: Thành phần nào trong mã VHDL dùng để khai báo các chân đầu vào (Input) và đầu ra (Output)?
A. Architecture
B. Process
C. Entity
D. Component
Xem đáp án & Giải thích
Đáp án đúng: C
Giải thích: Entity đóng vai trò là phần định nghĩa giao diện (Interface), nơi liệt kê tất cả các cổng vào/ra của khối mạch.
- Câu 2: Trong VHDL, từ khóa nào dùng để chỉ định một tín hiệu là đầu vào từ thiết bị ngoại vi (như Switch)?
A. out
B. in
C. buffer
D. link
Xem đáp án & Giải thích
Đáp án đúng: B
Giải thích: Từ khóa in xác định hướng tín hiệu đi vào thực thể, điển hình là tín hiệu từ cảm biến hoặc nút nhấn.
- Câu 3: Phát biểu nào sau đây là ĐÚNG về Architecture?
A. Một file VHDL không cần có Architecture vẫn chạy được.
B. Architecture là nơi chứa các câu lệnh mô tả logic và kết nối bên trong mạch.
C. Architecture quy định màu sắc của đèn LED trên bo mạch.
D. Architecture phải được viết trước Entity.
Xem đáp án & Giải thích
Đáp án đúng: B
Giải thích: Architecture là nơi hiện thực hóa “linh hồn” của thiết kế, mô tả cách các tín hiệu tương tác và xử lý bên trong “vỏ” Entity.
- Câu 4: Khi bạn viết lệnh gán tín hiệu trong phần Architecture, các lệnh này sẽ hoạt động như thế nào?
A. Chạy từng dòng một từ trên xuống dưới.
B. Chạy dòng lẻ trước, dòng chẵn sau.
C. Hoạt động song song và đồng thời (ngay khi có thay đổi ở đầu vào).
D. Chỉ chạy khi người dùng nhấn nút Reset.
Xem đáp án & Giải thích
Đáp án đúng: C
Giải thích: Đây là đặc tính “Concurrent” (đồng thời) của phần cứng. Mạch điện không đợi lệnh, dòng điện chảy qua các cổng logic song song ngay khi có sự thay đổi điện áp đầu vào.
- Câu 5: Tại sao chúng ta cần tách biệt Entity và Architecture?
A. Để làm cho mã nguồn trông dài và chuyên nghiệp hơn.
B. Để có thể thay đổi thiết kế bên trong (ruột) mà không làm thay đổi cách kết nối bên ngoài (vỏ), giúp tái sử dụng thiết kế dễ dàng.
C. Vì chip Artix-7 yêu cầu như vậy để tiết kiệm pin.
D. Để phần mềm Vivado có thể chạy nhanh hơn.
Xem đáp án & Giải thích
Đáp án đúng: B
Giải thích: Tính mô-đun hóa cho phép kỹ sư thay đổi cách thực thi logic bên trong mà không làm ảnh hưởng đến các thành phần khác đang kết nối với “vỏ” của khối đó.
“Bạn đã hiểu về cấu trúc của một ‘khối xây dựng’ trong VHDL! Ở bài học tiếp theo, chúng ta sẽ tìm hiểu về các ‘loại vật liệu’ (kiểu dữ liệu) để đổ vào các chân cắm này nhé.”