Designing a SystemVerilog Language Server
Bài tóm tắt Hudson River Trading 2026 4. Điều chỉnh Độ khó: Khó
Hudson River Trading · 2026 · 4. Điều chỉnh · Độ khó: Khó — bài gốc
Bối cảnh
- HRT dùng FPGA và ASIC để đạt latency và throughput CPU không với tới, logic viết bằng SystemVerilog.
- Công cụ phần cứng phần lớn đắt và đóng: license simulator ít nên CI gần như bất khả; không có linter, formatter, language server miễn phí phổ biến; mỗi công cụ thương mại chấp nhận cấu trúc ngôn ngữ khác nhau, phải dùng macro theo công cụ.
- Hướng của HRT (tiếp từ Hudson River Trading 2021): sửa lỗi và cải tiến Verilator, bảo trì cocotb, tăng độ tương đương giữa Verilator và simulator thương mại để cùng một test chạy trên cả hai, chuyển bằng một cờ dòng lệnh. Verilator chạy hàng nghìn test song song trong CI; simulator thương mại (build tăng dần nhanh hơn) để debug nhanh.
Thay đổi chính
- Kỹ sư phải tìm khai báo bằng tay khi đọc code phần cứng. Tác giả bắt đầu bằng đóng góp vào extension VS Code phổ biến nhất: thêm lint bằng Slang (frontend SystemVerilog do Mike Popoloski của HRT viết; theo bộ test ChipsAlliance là nhanh và tuân chuẩn nhất), goto-definition xuyên file, completion. Parser của extension thành giới hạn.
- Viết slang-server, language server dựa trên Slang, dùng được với mọi editor, trong chương trình Surge (nhóm kỹ sư tự lập để làm dự án mới; đội FPGA và Slang cũng ra đời từ Surge), rồi mở mã nguồn.
- Slang chạy hai pha: parsing (lexing, preprocessing, parsing ra cây cú pháp) và elaboration (tính tham số, nối instance thành thiết kế, kiểm mỗi lần tham số hoá, ra symbol).
- Tối ưu indexer (chạy lúc mở editor, quét workspace để map tên module → file):
- Mỗi thread một
SourceManagertrên stack thay cho source manager toàn cục có lock (vốn để tránh đọc file hai lần trong linter, vô ích khi mỗi file chỉ index một lần). unordered_mapvới giá trịSmallVectorthay chomultimap(lookup log n).- Intern đường dẫn file thành id, chỉ hash và lưu một lần.
- Duyệt thư mục kèm danh sách bỏ qua thay cho glob.
- Mỗi thread một
- Kết quả: nhanh khoảng 10 lần, còn khoảng 4 lần sau khi thêm tham chiếu cho goto-references. Repo SystemVerilog mã nguồn mở lớn nhất (OpenTitan, 45 MB, 3.955 file) index trong 0,41 s trên M1 (0,13 s duyệt, 0,28 s parse).
Vì sao
- Theo HRT, đầu tư cho năng suất developer là lý do họ giao dịch trên hơn 200 thị trường với khoảng 1.150 người (2026). Mở mã nguồn để dự án có thêm người kiểm và đóng góp.
Bài học cho SWE
- Tối ưu dành cho workload này (cache dùng chung, lock) có thể là gánh nặng cho workload khác (index độc lập từng file).
- Muốn đưa phát triển phần cứng vào chung quy trình phần mềm thì phải có công cụ mở ở mọi tầng: simulator, test, editor.
Liên quan
- Hudson River Trading 2021 · Hudson River Trading 2023 (cùng hướng công cụ năng suất)
- CI và build ở quy mô lớn · Hệ thống độ trễ thấp (low latency)
#SystemVerilog#FPGA#ASIC#language server protocol#Slang#slang-server#elaboration#indexer#lock contention#SourceManager#string interning#Verilator#cocotb#proprietary simulator
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (1)