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 18: Xử Lý Dữ Liệu Nâng Cao – Mảng (Arrays) và Số Dấu Phẩy Động (Floating-Point)

Đã đăng trên 02/10/202527/09/2025 bởi ThaoNguyen
02
Th10

Bài học này đi sâu vào hai chủ đề nâng cao nhưng cực kỳ quan trọng: cách làm việc hiệu quả với các tập dữ liệu (mảng) và cách triển khai các phép toán số thực (dấu phẩy động) trên FPGA. Việc nắm vững các kỹ thuật này sẽ cho phép bạn xây dựng các thuật toán phức tạp hơn.

 

Phần 1: Làm Việc Với Mảng (Arrays) trong Môi Trường FPGA

Trên CPU, mảng là một cấu trúc dữ liệu rất linh hoạt, có thể thay đổi kích thước một cách tự do trong lúc chương trình chạy. Tuy nhiên, trên FPGA, mọi thứ đều được chuyển thành các mạch phần cứng vật lý. Điều này dẫn đến một quy tắc vàng, không thể phá vỡ:

Quy Tắc Vàng: Kích thước của một mảng phải được xác định tại thời điểm biên dịch (Compile Time).

Trình biên dịch cần biết chính xác mảng có bao nhiêu phần tử để có thể cấp phát một lượng tài nguyên phần cứng (thanh ghi, block RAM) cố định. Không có khái niệm “mảng động” như trong lập trình phần mềm.

A. Các Loại Mảng trong LabVIEW FPGA

Dù tuân theo quy tắc trên, LabVIEW cung cấp một số linh hoạt nhất định:

  1. Mảng Kích Thước Cố Định (Fixed-Size Arrays): Đây là dạng mảng rõ ràng nhất. Bạn định nghĩa một cách tường minh rằng mảng này sẽ luôn có X phần tử. Đây là cách làm được khuyến khích vì nó an toàn và dễ dự đoán về mặt tài nguyên.
  2. Mảng Có Kích Thước Suy Luận Được (Arrays that resolve to a single size at compile time): Đây là trường hợp LabVIEW đủ thông minh để “suy luận” ra kích thước cuối cùng của mảng dựa trên cách bạn cấu trúc mã nguồn. Ví dụ:
    • Nếu bạn dùng hàm Build Array với các đầu vào có kích thước đã biết, LabVIEW sẽ biết kích thước của mảng đầu ra.
    • Nếu bạn dùng vòng lặp For Loop với một hằng số nối vào chân đếm N và sử dụng auto-indexing tunnel, LabVIEW biết chính xác mảng kết quả sẽ có N phần tử.

    Nếu trình biên dịch không thể suy luận ra một kích thước duy nhất và cố định, nó sẽ báo lỗi.

B. Cảnh Báo về Tài Nguyên và Hiệu Năng

  • Tránh dùng mảng lớn trên Front Panel: Mỗi phần tử của một mảng nằm trên Front Panel của Top-Level VI sẽ tiêu tốn tài nguyên thanh ghi để giao tiếp với Host. Một mảng lớn có thể chiếm một lượng tài nguyên khổng lồ. Thay vào đó, hãy sử dụng **Block RAM (thông qua Memory Items)** hoặc **DMA FIFO** để lưu trữ và truyền các tập dữ liệu lớn.
  • Xử lý mảng là xử lý tuần tự: Khi bạn thực hiện một phép toán trên một mảng (ví dụ: nhân mỗi phần tử với 2), trình biên dịch sẽ tạo ra một mạch xử lý cho một phần tử và lặp lại quá trình đó cho toàn bộ mảng. Điều này có nghĩa là thời gian xử lý sẽ tỷ lệ thuận với kích thước của mảng.

Phần 2: Số Dấu Phẩy Động (Single-Precision Floating-Point)

Trong bài 14, chúng ta đã học về Fixed-Point, một phương pháp hiệu quả để xử lý số thực trên FPGA. Tuy nhiên, đôi khi việc quản lý dải giá trị và độ chính xác của Fixed-Point trở nên rất phức tạp. LabVIEW FPGA cung cấp một giải pháp thay thế: kiểu dữ liệu Single-Precision Floating-Point (SGL).

A. Sự Đánh Đổi: Dễ Sử Dụng vs. Chi Phí Tài Nguyên

Sử dụng số dấu phẩy động trên FPGA là một sự đánh đổi lớn:

Tiêu chí Fixed-Point Floating-Point (SGL)
Ưu điểm – Sử dụng tài nguyên phần cứng rất hiệu quả.
– Tốc độ xử lý rất cao.
– Rất dễ sử dụng, không cần quản lý dải giá trị.
– Tự động xử lý dải động rất rộng.
Nhược điểm – Lập trình viên phải tự quản lý dải giá trị và độ chính xác.
– Dễ xảy ra lỗi tràn số (overflow) nếu không cẩn thận.
– Cực kỳ tốn tài nguyên. Một phép nhân/cộng SGL có thể chiếm hàng trăm LUTs và nhiều khối DSP.
– Độ trễ (latency) cao hơn nhiều so với Fixed-Point.

B. Các Giới Hạn và Quy Tắc Vàng Khi Sử Dụng Floating-Point

Do chi phí tài nguyên rất lớn, việc sử dụng Floating-Point trên FPGA phải tuân theo những quy tắc nghiêm ngặt:

  1. Chỉ hỗ trợ Single-Precision (SGL): LabVIEW FPGA không hỗ trợ kiểu Double-Precision (64-bit). Mọi tính toán đều được thực hiện với độ chính xác 32-bit.
  2. Hầu hết các hàm không thể dùng trong SCTL: Các phép toán Floating-Point rất phức tạp và cần nhiều chu kỳ clock để hoàn thành (multi-cycle). Vì các hàm này không có giao thức handshaking, chúng không thể được đặt bên trong một Single-Cycle Timed Loop. Đây là một giới hạn cực kỳ quan trọng cần ghi nhớ.
  3. Giải pháp cho SCTL: Nếu bạn cần tính toán Floating-Point trong một kiến trúc tốc độ cao, bạn phải thực hiện nó bên ngoài SCTL. Sau đó, sử dụng các cơ chế như **FIFO** hoặc **Register** để truyền kết quả vào và ra khỏi SCTL một cách an toàn.

C. Khi Nào Nên Sử Dụng Floating-Point?

Hãy sử dụng Floating-Point một cách có chủ đích trong các trường hợp sau:

  • Giai đoạn tạo mẫu (Prototyping): Khi bạn muốn kiểm tra logic của một thuật toán phức tạp một cách nhanh chóng mà chưa cần lo lắng về tối ưu hóa tài nguyên. Sau khi thuật toán đã được xác minh là đúng, bạn có thể chuyển đổi nó sang Fixed-Point để tối ưu.
  • Các thuật toán có dải động cực rộng: Khi các giá trị trong phép tính của bạn thay đổi trong một phạm vi rất lớn (ví dụ: từ 10-9 đến 109), việc quản lý bằng Fixed-Point sẽ rất khó khăn. Floating-Point sẽ xử lý việc này một cách tự động.
  • Các tác vụ không yêu cầu tốc độ cao: Đối với các phép tính cấu hình, hiệu chuẩn hoặc các tác vụ chạy một lần không nằm trên đường đi dữ liệu chính (non-critical path), việc sử dụng Floating-Point để đơn giản hóa quá trình phát triển là hoàn toàn chấp nhận được.

Kết luận

Làm việc với mảng và số dấu phẩy động trên FPGA đòi hỏi một tư duy thiết kế phần cứng: mọi thứ phải được xác định trước và có chi phí tài nguyên rõ ràng. Mảng phải có kích thước cố định tại thời điểm biên dịch, và số dấu phẩy động là một công cụ mạnh mẽ nhưng “đắt đỏ”. Việc hiểu rõ các quy tắc, giới hạn và sự đánh đổi liên quan sẽ giúp bạn đưa ra những quyết định kỹ thuật đúng đắn, xây dựng các ứng dụng FPGA phức tạp một cách hiệu quả và bền vững.

 

 

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 17: Giao Tiếp Tốc Độ Cao Giữa Các Thiết Bị – Peer-to-Peer Streaming
Bài 19: Kiến Trúc Nâng Cao – Máy Trạng Thái (State Machines) và Logic Tùy Chỉnh

Để 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?