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 9: Lưu Trữ và Truyền Dữ Liệu trên FPGA (Data Storage & Transfer)

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

 

Khác với lập trình trên PC nơi bộ nhớ RAM gần như vô hạn, trên FPGA, mỗi bit dữ liệu được lưu trữ đều chiếm một phần tài nguyên vật lý của con chip. Việc lựa chọn phương pháp lưu trữ và truyền dữ liệu phù hợp là một quyết định thiết kế nền tảng, ảnh hưởng trực tiếp đến tốc độ, diện tích và sự ổn định của toàn bộ hệ thống.

 

1. Bức Tranh Toàn Cảnh: Hộp Dụng Cụ Dữ Liệu trên FPGA

Trong LabVIEW FPGA, chúng ta có ba công cụ chính để làm việc với dữ liệu. Hãy coi chúng như những chiếc hộp dụng cụ khác nhau, mỗi loại được thiết kế cho một công việc riêng biệt. Hiểu rõ sự khác biệt giữa chúng là bước đầu tiên để xây dựng một thiết kế hiệu quả và tối ưu.

Công Cụ Mục Đích Chính Ví dụ Dễ Hiểu Tài Nguyên Sử Dụng
Thanh ghi (Register) & Biến (Variable) Lưu trữ một giá trị duy nhất (single data point) để chia sẻ trạng thái hoặc cấu hình. Một tờ giấy nhớ (sticky note) trên bảng trắng. Flip-Flops (tài nguyên logic).
Bộ nhớ (Memory Item) Lưu trữ một tập hợp lớn dữ liệu (dataset) có thể truy cập ngẫu nhiên theo địa chỉ. Một tủ đựng hồ sơ có nhiều ngăn được đánh số. Block RAM (BRAM) – tài nguyên chuyên dụng.
Hàng đợi (FIFO) Truyền một luồng dữ liệu (data stream) an toàn giữa hai tiến trình song song. Một băng chuyền sản xuất giữa hai công nhân. Block RAM (BRAM) hoặc Flip-Flops.

2. Lưu Trữ Tức Thời: Thanh Ghi (Registers) và Biến (Variables)

Khi bạn chỉ cần lưu trữ một mẩu thông tin nhỏ và cần truy cập nó ngay lập tức—ví dụ như trạng thái hiện tại của một máy trạng thái, một giá trị cấu hình, hoặc kết quả tức thời của một phép tính—Registers và Variables là lựa chọn phù hợp nhất.

A. Thanh Ghi (Register Items) – Công Cụ Chính Thức

Một Register Item về bản chất là một tập hợp các Flip-Flop trên FPGA, được đặt tên và quản lý một cách có hệ thống trong Project Explorer. Chúng là cơ chế được khuyến nghị để chia sẻ một giá trị dữ liệu duy nhất trên toàn bộ project.

  • Cơ chế hoạt động: Khi bạn ghi một giá trị vào Register, giá trị đó được lưu trữ và giữ nguyên cho đến khi bị ghi đè bởi một giá trị mới. Bất kỳ phần nào của mã nguồn cũng có thể đọc giá trị này bất cứ lúc nào. Hoạt động đọc/ghi gần như tức thời, chỉ mất 1 chu kỳ clock.
  • Cảnh báo về mất dữ liệu: Register chỉ lưu giá trị cuối cùng được ghi vào nó. Nếu một tiến trình ghi dữ liệu vào register nhanh hơn tiến trình khác đọc ra, các giá trị ở giữa sẽ bị bỏ qua. Đây là hành vi “lossy” (có thể mất dữ liệu).
  • Khi nào nên dùng?
    • Lưu trữ trạng thái của một máy trạng thái (state machine), ví dụ: `IDLE`, `PROCESSING`, `DONE`.
    • Chia sẻ một giá trị cấu hình (ví dụ: ngưỡng so sánh, hệ số khuếch đại) cho nhiều module xử lý song song.
    • Gửi một tín hiệu điều khiển (command) hoặc một cờ báo (flag) từ một vòng lặp này sang một vòng lặp khác.

B. Biến Cục Bộ và Toàn Cục (Local/Global Variables)

Khi được biên dịch cho FPGA, các biến Local và Global cũng được tổng hợp thành các thanh ghi (registers) trên phần cứng. Chúng có chức năng tương tự như Register Items nhưng có phạm vi sử dụng và cách quản lý khác nhau.

  • Local Variable: Chỉ có thể được truy cập bên trong VI mà nó được tạo ra. Hữu ích cho việc lưu trữ trạng thái trong một vòng lặp mà không cần dùng đến Shift Register, giúp sơ đồ khối gọn hơn.
  • Global Variable: Có thể được truy cập từ nhiều VI khác nhau trong cùng một Target. Chúng rất tiện cho việc prototyping nhanh nhưng có thể gây khó khăn trong việc quản lý và truy vết dữ liệu trong các project lớn.

Khuyến nghị từ chuyên gia: Nên ưu tiên sử dụng Register Items khi cần chia sẻ dữ liệu giữa các VI hoặc các vòng lặp song song. Việc quản lý chúng trong Project Explorer giúp cấu trúc project rõ ràng và dễ bảo trì hơn. Chỉ sử dụng biến khi phạm vi chia sẻ dữ liệu rất hẹp và không ảnh hưởng đến các phần khác của thiết kế.

3. Lưu Trữ Khối Lớn: Bộ Nhớ (Memory Items)

Khi bạn cần lưu trữ một lượng lớn dữ liệu có cấu trúc, chẳng hạn như một mảng các hệ số lọc, một bảng tra cứu (look-up table), hoặc một đoạn tín hiệu waveform để xử lý, Memory Items là công cụ không thể thiếu. Chúng cho phép truy cập ngẫu nhiên (random access), nghĩa là bạn có thể đọc/ghi tại bất kỳ địa chỉ nào bạn muốn.

Các Lựa Chọn Triển Khai Bộ Nhớ (Memory Implementation)

Khi tạo một Memory Item, bạn có thể chọn cách nó được hiện thực hóa trên phần cứng. Lựa chọn này có ảnh hưởng lớn đến tài nguyên và hiệu năng.

  • Block RAM (BRAM): Đây là các khối bộ nhớ RAM chuyên dụng, tốc độ cao được tích hợp sẵn trên chip FPGA.
    • Ưu điểm: Tốc độ rất cao, băng thông lớn, và quan trọng nhất là không tiêu tốn tài nguyên logic (LUTs, Flip-Flops). Đây là lựa chọn mặc định và ưu tiên hàng đầu cho hầu hết các nhu cầu về bộ nhớ.
    • Nhược điểm: Số lượng BRAM trên mỗi chip là có hạn. Bạn cần kiểm tra datasheet của FPGA để biết dung lượng BRAM có sẵn.
  • Look-Up Tables (LUTs) / Distributed RAM: Trình biên dịch có thể cấu hình các LUT (vốn dùng cho logic) để hoạt động như các khối RAM nhỏ, phân tán ngay trong fabric logic.
    • Ưu điểm: Độ trễ truy cập (latency) có thể thấp hơn BRAM trong một số trường hợp, hữu ích cho các bộ nhớ đệm (cache) rất nhỏ và cần phản hồi ngay lập tức.
    • Nhược điểm: Tiêu tốn tài nguyên logic quý giá, và chỉ phù hợp với các khối bộ nhớ có dung lượng rất nhỏ. Sử dụng cho bộ nhớ lớn sẽ nhanh chóng làm cạn kiệt tài nguyên của FPGA.
  • DRAM (Dynamic RAM): Một số bo mạch FPGA cao cấp có chip DRAM bên ngoài.
    • Ưu điểm: Dung lượng cực lớn (hàng trăm MB đến GB), lý tưởng để lưu các bộ dữ liệu khổng lồ.
    • Nhược điểm: Tốc độ truy cập chậm hơn đáng kể và có độ trễ không tất định (non-deterministic latency) so với bộ nhớ on-chip (BRAM, LUTs).

Truy cập bộ nhớ: Bạn sử dụng Memory Method Node để thực hiện hai thao tác chính: Write (ghi dữ liệu vào một địa chỉ) và Read (đọc dữ liệu từ một địa chỉ). Lưu ý rằng thao tác đọc từ BRAM thường có độ trễ vài chu kỳ clock, bạn cần xem xét điều này trong thiết kế timing của mình.

4. Truyền Dữ Liệu An Toàn: Hàng Đợi (FIFOs)

FIFO (First-In, First-Out) là một cấu trúc dữ liệu hoạt động giống như một đường ống hoặc một hàng người xếp hàng: phần tử nào vào trước sẽ ra trước. Trong FPGA, FIFO là cơ chế quan trọng nhất và an toàn nhất để truyền một luồng dữ liệu từ một tiến trình này sang một tiến trình song song khác mà không làm mất mát dữ liệu.

Tại sao FIFO là Bắt buộc cho các Tác vụ Song song?

Hãy tưởng tượng một vòng lặp “Sản xuất” (Producer) đang lấy mẫu tín hiệu từ ADC ở 80 MHz, liên tục tạo ra dữ liệu. Một vòng lặp “Tiêu thụ” (Consumer) khác thực hiện một thuật toán xử lý phức tạp, chỉ có thể chạy ở 40 MHz. Nếu bạn dùng một register hoặc biến để truyền dữ liệu, Consumer sẽ chỉ đọc được một nửa số mẫu, phần còn lại sẽ bị ghi đè và mất vĩnh viễn.

FIFO giải quyết vấn đề này bằng cách hoạt động như một bộ đệm (buffer) có cơ chế kiểm soát luồng (flow control) tích hợp. Producer có thể liên tục ghi dữ liệu vào FIFO. Consumer sẽ đọc dữ liệu ra từ FIFO với tốc độ của riêng nó. Miễn là FIFO đủ lớn, sẽ không có mẩu dữ liệu nào bị thất lạc. FIFO có các cờ báo hiệu Full và Empty để tự động ngăn việc ghi khi đầy và đọc khi rỗng.

Các Tình Huống Sử Dụng Điển Hình

  • Vượt Miền Đồng Hồ (Clock Domain Crossing – CDC): Đây là ứng dụng quan trọng nhất của FIFO. Việc truyền dữ liệu trực tiếp giữa hai vòng lặp chạy ở hai tần số clock khác nhau bằng register hoặc dây dẫn đơn giản sẽ gây ra lỗi timing nghiêm trọng (metastability). FIFO được thiết kế với các mạch đồng bộ hóa bên trong để giải quyết triệt để vấn đề này. Luôn luôn sử dụng FIFO khi truyền dữ liệu giữa các miền clock khác nhau.
  • Đồng bộ hóa dữ liệu giữa các vòng lặp song song: Ngay cả khi các vòng lặp chạy cùng một tần số clock, chúng có thể không được thực thi cùng một lúc do các logic khác nhau. FIFO đảm bảo dữ liệu được truyền đi một cách có trật tự và không bị xung đột.
  • Truyền dữ liệu ra Host (DMA FIFO): Một loại FIFO đặc biệt được hỗ trợ bởi phần cứng, cho phép truyền một lượng lớn dữ liệu từ bộ nhớ BRAM của FPGA trực tiếp đến bộ nhớ RAM của máy tính mà không cần sự can thiệp của CPU, mang lại thông lượng rất cao.

Kết luận

Việc lựa chọn đúng phương pháp lưu trữ và truyền dữ liệu là một kỹ năng thiết kế cơ bản trong lập trình FPGA. Hãy ghi nhớ quy tắc đơn giản: sử dụng Registers cho các giá trị trạng thái đơn lẻ, Memory Items cho các tập dữ liệu lớn có thể truy cập ngẫu nhiên, và FIFOs cho việc truyền các luồng dữ liệu một cách an toàn giữa các tiến trình song song, đặc biệt là khi chúng hoạt động ở các miền đồng hồ khác nhau. Nắm vững ba công cụ này sẽ giúp bạn xây dựng các ứng dụng FPGA phức tạp, hiệu quả và đáng tin cậy.

 

 

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 8: Xây Dựng Mã Module Hóa – SubVI trong FPGA
Bài 10: Giao Tiếp Giữa FPGA và Host – Cầu Nối Tới Thế Giới Bên Ngoài

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