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 14: Làm Việc với Kiểu Dữ Liệu Fixed-Point

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

Trong thế giới FPGA, mọi bit tài nguyên đều quý giá. Việc thực hiện các phép toán với số thực (số có phần thập phân) đòi hỏi một sự cân nhắc kỹ lưỡng giữa độ chính xác và hiệu năng. Bài học này sẽ giới thiệu kiểu dữ liệu Fixed-Point, một công cụ mạnh mẽ cho phép bạn đạt được sự cân bằng tối ưu đó.

 

1. Tại Sao Cần Fixed-Point trên FPGA? Cuộc Đánh Đổi Lớn

Trên một bộ xử lý thông thường (CPU), bạn có thể thoải mái sử dụng kiểu dữ liệu Single (SGL) hay Double (DBL) mà không cần lo lắng nhiều. Tuy nhiên, trên FPGA, mọi thứ hoàn toàn khác.

Kiểu Dữ Liệu Ưu điểm Nhược điểm trên FPGA
Integer (Số nguyên) Cực kỳ hiệu quả, tốn ít tài nguyên nhất, tốc độ cao. Không biểu diễn được phần thập phân. Hoàn toàn không phù hợp cho các thuật toán DSP, điều khiển…
Floating-Point (Dấu phẩy động) Dải biểu diễn rộng, dễ sử dụng, không cần lo về tràn số. Cực kỳ tốn tài nguyên. Một phép cộng dấu phẩy động có thể chiếm hàng trăm LUTs và có độ trễ (latency) nhiều chu kỳ clock, làm giảm đáng kể hiệu năng tổng thể.
Fixed-Point (Dấu phẩy tĩnh) Sự cân bằng hoàn hảo: Biểu diễn được số thực với độ chính xác có thể tùy chỉnh, trong khi vẫn thực thi các phép toán bằng logic số nguyên, giúp tiết kiệm tài nguyên và đạt tốc độ cao. Yêu cầu người lập trình phải tính toán và quản lý cẩn thận dải giá trị và độ chính xác để tránh tràn số và mất mát dữ liệu.

Do đó, trong hầu hết các ứng dụng FPGA chuyên nghiệp, Fixed-Point là kiểu dữ liệu mặc định và được ưu tiên hàng đầu cho mọi phép toán liên quan đến số thực.

2. Giải Phẫu một Số Fixed-Point

Một số Fixed-Point về bản chất vẫn là một chuỗi bit số nguyên. Điểm khác biệt nằm ở chỗ chúng ta quy ước vị trí của dấu phẩy thập phân. Vị trí này là “tĩnh”, do người lập trình quyết định, chứ không “động” như floating-point.

Một kiểu dữ liệu Fixed-Point được định nghĩa bởi ba tham số chính:

  • Signed/Unsigned: Có dấu hay không dấu.
  • Word Length: Tổng số bit được sử dụng để lưu trữ số. Đây là tham số quyết định mức sử dụng tài nguyên.
  • Integer Word Length: Số bit được dành cho phần nguyên (bao gồm cả bit dấu nếu là số có dấu).

Ví dụ trực quan: Hãy xem xét kiểu dữ liệu <+/-, 16, 4>

  • +/-: Đây là số có dấu.
  • 16: Word Length. Chúng ta dùng tổng cộng 16 bit.
  • 4: Integer Word Length. Chúng ta dành 4 bit cho phần nguyên.
    • 1 bit cho dấu.
    • 3 bit cho giá trị phần nguyên.

Số bit còn lại cho phần thập phân sẽ là: Word Length - Integer Word Length = 16 – 4 = 12 bit.

Với cấu hình này, chúng ta có thể biểu diễn các giá trị trong khoảng từ -8 (-2^(4-1)) đến +7.999… (+2^(4-1) – 2^-12) với độ phân giải rất cao ở phần thập phân.

3. Quản lý Tràn Số (Overflow) và Làm Tròn (Rounding)

Vì dải biểu diễn của số Fixed-Point là hữu hạn, bạn phải quyết định cách hệ thống xử lý khi kết quả của một phép toán vượt ra ngoài dải này (tràn số) hoặc khi cần phải loại bỏ các bit kém chính xác (làm tròn).

A. Chế độ xử lý Tràn số (Overflow Modes)

Khi kết quả một phép toán lớn hơn giá trị tối đa hoặc nhỏ hơn giá trị tối thiểu mà kiểu dữ liệu có thể biểu diễn, tràn số sẽ xảy ra.

  • Wrap (Tràn số vòng): Đây là hành vi mặc định của số nguyên. Giá trị sẽ “vòng lại” từ đầu kia của dải. Ví dụ, với kiểu U8 (0-255), `250 + 10` sẽ cho kết quả là `4`.
    • Tài nguyên: Tốn ít tài nguyên nhất (gần như không tốn thêm).
    • Sử dụng: Hữu ích trong một số ứng dụng đặc biệt như bộ đếm (counter) nhưng thường gây ra lỗi logic nghiêm trọng trong các phép toán thông thường.
  • Saturate (Bão hòa): Khi kết quả vượt ra ngoài dải, nó sẽ được “ghim” lại ở giá trị tối đa (hoặc tối thiểu) của dải đó. Ví dụ, với kiểu U8, `250 + 10` sẽ cho kết quả là `255`.
    • Tài nguyên: Tốn nhiều tài nguyên hơn vì cần thêm logic để so sánh và lựa chọn giá trị.
    • Sử dụng: An toàn hơn và thường là lựa chọn mặc định cho các thuật toán xử lý tín hiệu và điều khiển để tránh các kết quả sai lệch đột ngột.

B. Chế độ làm tròn (Rounding Modes)

Khi kết quả của một phép toán (ví dụ như phép nhân) có nhiều bit thập phân hơn so với kiểu dữ liệu đầu ra, chúng ta cần làm tròn.

  • Truncate (Cắt cụt): Đơn giản là loại bỏ các bit thừa. Đây là cách nhanh nhất và tốn ít tài nguyên nhất. Tuy nhiên, nó luôn làm tròn về phía 0 và có thể gây ra một sai lệch DC (DC bias) trong tín hiệu.
  • Round (Làm tròn thông thường): Làm tròn đến giá trị gần nhất. Chế độ này (ví dụ: Round Half-Up, Round Half-Even) cho kết quả chính xác hơn về mặt thống kê nhưng tốn thêm tài nguyên cho một bộ cộng (adder) nhỏ.

Lựa chọn thông minh: LabVIEW cung cấp tùy chọn Adapt to source trong nhiều hàm. Khi được chọn, LabVIEW sẽ tự động cấu hình kiểu dữ liệu đầu ra để có đủ số bit, tránh cả tràn số và làm tròn, đảm bảo bảo toàn độ chính xác tuyệt đối. Đây là một lựa chọn rất mạnh mẽ khi bạn ưu tiên sự chính xác.


Kết luận

Fixed-Point là một kỹ năng thiết yếu đối với bất kỳ kỹ sư FPGA nào. Nó đòi hỏi một sự đầu tư ban đầu để hiểu và phân tích dải giá trị của tín hiệu, nhưng phần thưởng nhận lại là rất lớn: các thiết kế hiệu năng cao, tiết kiệm tài nguyên và có khả năng tùy chỉnh độ chính xác đến từng bit. Việc thành thạo các kỹ thuật này sẽ mở ra cánh cửa để bạn triển khai các thuật toán phức tạp nhất trên nền tảng phần cứng song song của FPGA.

 

 

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 13: Tích Hợp IP Bên Ngoài (Integrating Third-Party IP)
Bài 15: Các Hàm Toán Học Thông Lượng Cao (High Throughput Math)

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