Skip to content

FPGA Manager framework

Kernel có một framework riêng để lập trình FPGA khi hệ điều hành đang chạy, không phụ thuộc vào hãng chip. Framework tách việc này thành ba lớp: FPGA Manager biết cách lập trình một loại FPGA cụ thể, FPGA Bridge điều khiển đường bus giữa CPU và FPGA, FPGA Region gom hai thành phần trên và gắn với device tree. Trang này trình bày ba lớp đó, trình tự khi áp device tree overlay, các thuộc tính của node region, một ví dụ trên ZynqMP và giao diện dành cho driver. Cách dùng ở mức tích hợp hệ thống (nạp từ sysfs, fpgautil, đóng gói vào image) nằm ở trang Nạp bitstream FPGA từ Linux trên Zynq.

Ba thành phần của framework FPGA

FPGA Region gom FPGA Manager và FPGA Bridge, được kích hoạt khi áp device tree overlay.

Ba thành phần

Theo phần giới thiệu trong tài liệu kernel, framework chia như sau:

Thành phần Vai trò Mã nguồn
FPGA Manager Driver cấp thấp chứa kiến thức về cách lập trình một loại FPGA. Thêm FPGA mới hoặc phương pháp lập trình mới thì làm ở lớp này fpga-mgr.c và các driver đăng ký với nó
FPGA Bridge Chặn hoặc mở bus giữa CPU và FPGA. Có thể là phần cứng thật, hoặc cầu "freeze" mềm trong fabric bao quanh một vùng partial reconfiguration fpga-bridge.c và các driver đăng ký với nó
FPGA Region Đại diện một FPGA hoặc một vùng partial reconfiguration, gom manager và bridge cần thiết để lập trình khi hệ thống đang chạy of-fpga-region.c hỗ trợ device tree

Tài liệu kernel nêu ý định thiết kế là giao diện và lớp trên dùng region thay cho dùng manager trực tiếp. Framework không phụ thuộc hãng chip: khi cần thêm tính năng, nên mở rộng framework để dùng chung thay vì viết riêng cho một hãng.

Trình tự khi áp overlay

Khi một device tree overlay nhắm tới một FPGA Region được áp vào, theo binding của FPGA Region, region thực hiện tuần tự:

  1. Tắt các FPGA bridge liên quan.
  2. Lập trình FPGA bằng FPGA Manager.
  3. Bật lại các FPGA bridge.
  4. Nhận overlay vào cây device tree đang chạy.
  5. Tạo các thiết bị con (child device).

Nếu lập trình FPGA thất bại, các bridge vẫn ở trạng thái tắt và overlay bị từ chối. Khi gỡ overlay, các node con bị gỡ và region tắt các bridge. Thứ tự này bảo đảm driver của IP trong FPGA chỉ được probe sau khi FPGA đã mang đúng thiết kế, và CPU không truy cập bus tới vùng FPGA đang được cấu hình dở.

Node fpga-region

Region trong device tree tuân theo binding fpga-region. Các thuộc tính chính:

Thuộc tính Ý nghĩa
compatible = "fpga-region" Khai báo node là một FPGA Region
fpga-mgr Phandle tới FPGA Manager. Region con kế thừa từ region cha, và thuộc tính ở region con sẽ ghi đè giá trị kế thừa
fpga-bridges Danh sách phandle tới các bridge cần điều khiển. Tùy chọn nếu FPGA Manager tự xử lý bridge
firmware-name Tên file bitstream. Nếu overlay nhắm tới region và thêm thuộc tính này, region hiểu đó là yêu cầu lập trình lại FPGA
partial-fpga-config Đặt khi cần partial reconfiguration, nếu không thì là cấu hình đầy đủ
external-fpga-config Đặt khi FPGA đã được cấu hình trước khi hệ điều hành boot

Region gốc trong device tree đại diện cho cả FPGA và hỗ trợ cấu hình đầy đủ. Với partial reconfiguration, mỗi vùng PR có một FPGA Region riêng, bridge của vùng đó chặn bus để traffic tới các vùng khác không bị ảnh hưởng. Một số bản hiện thực có FPGA Manager tự chặn bus, khi đó không cần khai báo bridge trong device tree.

Nếu node region trong cây đang chạy có thuộc tính firmware-name hoặc node con, điều đó cho thấy FPGA đã được lập trình bằng ảnh tương ứng.

Ví dụ trên ZynqMP

Cây cơ sở của ZynqMP theo wiki Xilinx khai báo manager là bộ điều khiển PCAP và một region đầy đủ:

pcap {
    compatible = "xlnx,zynqmp-pcap-fpga";
    clocks = <&clk 41>;
};

fpga_full: fpga-full {
    compatible = "fpga-region";
    fpga-mgr = <&pcap>;
    #address-cells = <2>;
    #size-cells = <2>;
    power-domains = <&zynqmp_firmware PL_PD>;
};

Overlay nhắm tới region này kèm bitstream và node của IP (ví dụ rút gọn, chỉ để minh họa cấu trúc):

/dts-v1/;
/plugin/;

&fpga_full {
    firmware-name = "design_1_wrapper.bit.bin";
    #address-cells = <2>;
    #size-cells = <2>;

    gpio@a0000000 {
        compatible = "xlnx,xps-gpio-1.00.a";
        reg = <0x0 0xa0000000 0x0 0x10000>;
        gpio-controller;
        #gpio-cells = <2>;
    };
};

Biên dịch overlay bằng dtc thành file .dtbo rồi nạp, xem trang tích hợp. Sau khi nạp thành công, log kernel hiển thị manager ghi file bitstream, và driver của IP được probe. Ví dụ log trong wiki Xilinx:

fpga_manager fpga0: writing design_1_wrapper.bit.bin to Xilinx ZynqMP FPGA Manager
XGpio: /amba/gpio@a0000000: registered, base is 298

Giao diện cho driver

Driver cho một loại FPGA mới đăng ký một FPGA Manager với các hàm xử lý các bước lập trình theo thứ tự: chuẩn bị (write_init), ghi dữ liệu bitstream (write hoặc write_sg), và hoàn tất (write_complete), cùng hàm trả trạng thái của thiết bị. Core của framework gọi chuỗi này khi có yêu cầu nạp ảnh, và quản lý việc tìm file firmware, trạng thái của manager và các thuộc tính sysfs chung.

Todo

Chưa đối chiếu tên và chữ ký chính xác của struct fpga_manager_ops, fpga_mgr_register và các hàm tạo manager với phiên bản kernel đang dùng. Cần đọc include/linux/fpga/fpga-mgr.h và Documentation/driver-api/fpga/fpga-mgr.rst của đúng bản kernel trước khi viết driver.

Liên quan

Tài liệu tham khảo