Chuyển đến nội dung
AIOTAIOT
  • Trang chủ
  • Giới thiệu
  • Tin tức
  • Sản phẩm
  • Giải pháp
    • Chấm công bằng Face ID
    • Thiết bị đọc căn cước
    • IoT trong giáo dục
    • IoT trong quản lý năng lượng
    • IoT trong y tế
  • Đào tạo
    • Khóa đào tạo cơ bản
    • Khóa đào tạo nâng cao
    • Tài liệu
  • PCCC
  • Liên hệ
  • icon
    097 186 8316    |    0839 799 889
Đào tạo, Khóa đào tạo cơ bản, LabVIEW FPGA

Bài 8: Xây Dựng Mã Module Hóa – SubVI trong FPGA

Đã đăng trên 25/09/202521/09/2025 bởi ThaoNguyen
25
Th9

 

Trong lập trình LabVIEW nói chung, SubVI giúp mã nguồn gọn gàng và dễ quản lý. Trong môi trường FPGA, vai trò của SubVI còn quan trọng hơn thế: chúng là công cụ thiết yếu để quản lý tài nguyên phần cứng, tối ưu hóa hiệu năng và xây dựng các thiết kế phức tạp một cách hiệu quả.

 

1. Tại Sao Phải Dùng SubVI trong FPGA?

Sử dụng SubVI trong thiết kế FPGA không chỉ là một thói quen lập trình tốt mà còn là một chiến lược kỹ thuật. Nó mang lại ba lợi ích trực tiếp và quan trọng:

  • Tiết kiệm tài nguyên FPGA: Đây là lợi ích quan trọng nhất. Mỗi control và indicator trên Front Panel của một VI FPGA cấp cao nhất (Top-Level VI) đều tiêu tốn một lượng tài nguyên logic đáng kể. Trình biên dịch phải tạo ra các mạch giao tiếp phức tạp để đồng bộ hóa dữ liệu giữa Host (PC) và Target (FPGA). Ngược lại, các control và indicator bên trong một SubVI chỉ đơn thuần là các điểm nối dữ liệu trên sơ đồ khối; chúng không giao tiếp trực tiếp với Host, do đó không tiêu tốn thêm tài nguyên giao tiếp. Việc đóng gói logic vào SubVI là cách hiệu quả nhất để giảm mức sử dụng tài nguyên của thiết kế.
  • Tái sử dụng mã nguồn (Code Reuse) và xây dựng thư viện: Bạn có thể tạo ra các khối chức năng (ví dụ: một bộ lọc nhiễu cho tín hiệu digital, một bộ phát xung PWM, một bộ điều khiển PID) và lưu chúng thành một thư viện cá nhân. Sau đó, bạn có thể tái sử dụng chúng ở nhiều nơi trong cùng một project hoặc trong các project khác nhau. Điều này không chỉ giúp giảm thời gian phát triển mà còn đảm bảo tính nhất quán và độ tin cậy của các khối chức năng đã được kiểm thử.
  • Cải thiện cấu trúc và khả năng gỡ lỗi (Hierarchical Design): Chia một thiết kế lớn và phức tạp thành các SubVI nhỏ hơn, mỗi SubVI thực hiện một nhiệm vụ cụ thể, là một phương pháp thiết kế theo cấp bậc (hierarchical). Phương pháp này giúp cho sơ đồ khối (Block Diagram) của VI chính trở nên gọn gàng, dễ đọc và dễ hiểu hơn. Khi có lỗi xảy ra, việc khoanh vùng và gỡ lỗi trong một SubVI nhỏ cũng dễ dàng hơn rất nhiều so với việc tìm kiếm trong một sơ đồ khối khổng lồ.

2. Reentrant vs. Non-Reentrant – Lựa Chọn Tối Quan Trọng

Đây là khái niệm quan trọng nhất và có ảnh hưởng sâu sắc nhất đến cách thiết kế của bạn hoạt động trên phần cứng. “Reentrancy” quyết định cách trình biên dịch tạo ra mạch logic trên chip FPGA khi một SubVI được gọi nhiều lần từ VI chính.

SubVI Tái nhập (Reentrant)

Ví dụ trực quan: Hãy tưởng tượng bạn có một bản thiết kế (SubVI) và bạn cần sản xuất nhiều sản phẩm. Chế độ Reentrant giống như việc bạn tạo ra nhiều dây chuyền sản xuất độc lập. Nếu bạn đặt SubVI này 3 lần, bạn sẽ có 3 dây chuyền riêng biệt, mỗi dây chuyền có máy móc (mạch logic) và không gian làm việc (bộ nhớ) của riêng mình.

Cơ chế hoạt động: Mỗi lần bạn đặt SubVI này lên sơ đồ khối, trình biên dịch sẽ tạo ra một bản sao riêng biệt và đầy đủ của mạch logic đó trên FPGA. Các bản sao này hoạt động hoàn toàn độc lập và song song với nhau.

SubVI Không tái nhập (Non-reentrant)

Ví dụ trực quan: Chế độ Non-reentrant giống như cả văn phòng chỉ có một chiếc máy in duy nhất (SubVI). Mọi người (các lần gọi từ VI chính) đều muốn in tài liệu, nhưng họ phải xếp hàng và lần lượt sử dụng. Chiếc máy in này là một tài nguyên dùng chung.

Cơ chế hoạt động: Tất cả các lần gọi đến SubVI này đều trỏ về và sử dụng chung một bản sao duy nhất của mạch logic trên FPGA. LabVIEW sẽ tự động thêm vào một mạch quản lý truy cập (gọi là arbitration) để đảm bảo tại một thời điểm, chỉ có một “yêu cầu” được phép sử dụng mạch logic chung này.

Bảng so sánh chi tiết

Thuộc tính SubVI Tái nhập (Reentrant) SubVI Không tái nhập (Non-reentrant)
Tính song song Thực thi song song thực sự. Nếu bạn gọi SubVI này 3 lần, cả 3 bản sao có thể chạy đồng thời trong cùng một chu kỳ clock mà không ảnh hưởng lẫn nhau. Không thể thực thi song song. Các lần gọi phải tuần tự truy cập vào bản sao duy nhất. Điều này tạo ra một điểm nghẽn về hiệu năng (bottleneck).
Khi nào nên dùng? Khi SubVI chỉ thực hiện các phép toán, xử lý logic thuần túy và không truy cập tài nguyên dùng chung. Ví dụ: một SubVI tính toán giá trị trung bình, chuyển đổi dữ liệu, hoặc thực hiện một phần của thuật toán. Đây là tùy chọn mặc định và được khuyến khích cho hiệu năng song song cao nhất. Khi SubVI cần truy cập vào một tài nguyên dùng chung duy nhất. Ví dụ: đọc/ghi vào một kênh I/O cụ thể, một khối bộ nhớ (Memory), hoặc một FIFO. Việc này đảm bảo không xảy ra tranh chấp tài nguyên, vì chỉ có một “cửa” duy nhất để truy cập tài nguyên đó.
Lưu ý về tài nguyên Tiêu tốn nhiều tài nguyên hơn vì mỗi lần gọi sẽ nhân bản toàn bộ mạch logic. Gọi 5 lần sẽ tốn gấp 5 lần tài nguyên. Tiết kiệm tài nguyên hơn vì chỉ có một mạch duy nhất được tạo ra, bất kể số lần gọi.

Cách cấu hình: Để thay đổi, mở SubVI, vào File > VI Properties, chọn mục Execution và chọn giữa Reentrant execution và Non-reentrant execution.

3. Kỹ Thuật Nâng Cao: Truyền Tài Nguyên vào SubVI

Một vấn đề kinh điển trong thiết kế module là: làm thế nào để tạo một SubVI có thể làm việc với nhiều tài nguyên phần cứng khác nhau? Nếu không có kỹ thuật này, bạn sẽ phải tạo ra các SubVI gần như y hệt nhau như `Read_DIO0.vi`, `Read_DIO1.vi`,… gây lãng phí và khó bảo trì.

Giải pháp của LabVIEW FPGA là sử dụng “FPGA Name Controls”.

FPGA Name Control là gì?

Đây là một loại control đặc biệt, nó không chứa giá trị dữ liệu (như số hay boolean) mà chứa một tham chiếu (reference) đến một tài nguyên phần cứng đã được khai báo trong project (như I/O, Memory, FIFO, Clock). Nó hoạt động như một “con trỏ” đến tài nguyên phần cứng.

Các bước tạo một SubVI linh hoạt:

  1. Bước 1: Cấu hình bên trong SubVI
    • Đặt một node truy cập tài nguyên (ví dụ: FPGA I/O Node) lên sơ đồ khối của SubVI.
    • Nhấp chuột phải vào ngõ vào tham chiếu ở góc trên bên trái của node (ví dụ: FPGA I/O In).
    • Từ menu ngữ cảnh, chọn Create > Control. LabVIEW sẽ tự động tạo ra một Name Control tương ứng trên Front Panel.
    • Mở Front Panel, bạn sẽ thấy Name Control vừa được tạo. Mở bảng nối (Connector Pane) của SubVI và gán control này vào một chân đầu vào.
  2. Bước 2: Sử dụng bên ngoài VI chính
    • Đặt SubVI vừa cấu hình lên sơ đồ khối của VI chính.
    • Để chỉ định tài nguyên mà SubVI sẽ làm việc, bạn chỉ cần kéo thả trực tiếp tài nguyên đó từ cửa sổ Project Explorer (ví dụ: kéo thả I/O item `DIO0` hoặc `DIO5`) vào ngõ vào Name Control tương ứng trên biểu tượng của SubVI.

Phạm vi áp dụng: Kỹ thuật này hoạt động với hầu hết các tài nguyên FPGA, bao gồm: FPGA I/O, Memory Items, FIFO Items, Register Items, Handshake Items, và Clocks.

Với kỹ thuật này, bạn có thể tạo một SubVI duy nhất và tái sử dụng nó cho nhiều kênh I/O hoặc các khối bộ nhớ khác nhau, giúp mã nguồn trở nên cực kỳ module hóa, linh hoạt và chuyên nghiệp.


Kết luận

SubVI là nền tảng của một thiết kế FPGA tốt và có khả năng mở rộng. Việc hiểu và áp dụng đúng đắn giữa reentrant và non-reentrant là yếu tố quyết định đến tính đúng đắn và hiệu quả của ứng dụng song song. Kết hợp với Name Controls, bạn có thể xây dựng những thư viện mã nguồn mạnh mẽ, linh hoạt và có khả năng tái sử dụng cao, đánh dấu bước chuyển từ việc viết mã đơn giản sang thiết kế hệ thống chuyên nghiệp.

 

 

Mục nhập này đã được đăng trong Đào tạo, Khóa đào tạo cơ bản, LabVIEW FPGA và được gắn thẻ LabVIEW FPGA.
ThaoNguyen

Bài 7: Đồng Hồ và Định Thời trong LabVIEW FPGA (Clocks & Timing)
Bài 9: Lưu Trữ và Truyền Dữ Liệu trên FPGA (Data Storage & Transfer)

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Bài viết mới
  • Bài 11: Giảm Độ trễ (Latency) thông qua Song song hóa
  • Bài 10: Các Kỹ thuật Tối ưu hóa Thời gian (Timing)
  • Bài 9: Giảm Khoảng thời gian Khởi tạo (Initiation Interval)
  • Bài 8: Giảm thiểu Đường dẫn Tới hạn (Critical Path) và Kỹ thuật Pipelining
  • Bài 7: Các Kỹ thuật Tối ưu hóa Thông lượng (Throughput)
Danh mục
  • Đào tạo
  • Giải pháp
  • IoT trong giáo dục
  • Khóa đào tạo cơ bản
  • Khóa đào tạo nâng cao
  • LabVIEW FPGA
  • LabVIEW FPGA High Performance
  • Sản xuất công nghiệp
  • Thiết bị dịch vụ thông minh
  • Thiết bị đọc căn cước
  • Tin tức

CÔNG TY CỔ PHẦN HỆ THỐNG AIOT

VPGD: Số A21-TT9 Đường Foresa 1 KĐT Xuân Phương, Phường Xuân Phương, Hà Nội.

Địa chỉ kinh doanh: Đường Phú Diễn, Tổ dân phố 18, phường Phú Diễn, Thành phố Hà Nội, Việt Nam

Hotline/Zalo: 097 186 8316 | 0839 799 889

Email: aiot@aiots.vn

VỀ CHÚNG TÔI

Giới thiệu

Sản phẩm

Giải pháp

Đào tạo

Tin tức

QUY ĐỊNH & CHÍNH SÁCH

Chính sách thanh toán

Chính sách vận chuyển

Chính sách bảo hành

Chính sách đổi trả

Chính sách bảo mật

ĐỊA CHỈ VĂN PHÒNG GIAO DỊCH

Copyright 2024 © Bản quyền thuộc về AIOT. Thiết kế bởi Jamina JSC
  • Trang chủ
  • Giới thiệu
  • Tin tức
  • Sản phẩm
  • Giải pháp
    • Chấm công bằng Face ID
    • Thiết bị đọc căn cước
    • IoT trong giáo dục
    • IoT trong quản lý năng lượng
    • IoT trong y tế
  • Đào tạo
    • Khóa đào tạo cơ bản
    • Khóa đào tạo nâng cao
    • Tài liệu
  • PCCC
  • Liên hệ
Zalo
Phone

Đăng nhập

Quên mật khẩu?