- Python được chạy trực tiếp trên phần cứng bằng một bộ xử lý tùy biến, hoạt động mà không cần interpreter hay JIT
- Thời gian khứ hồi GPIO của PyXL là 480ns, nhanh hơn 30 lần so với PyBoard chạy MicroPython
- Chạy trên FPGA Zynq-7000, với CPU ARM xử lý cấu hình và bộ nhớ
- GPIO là vào/ra đa dụng, và PyXL thực thi nó trực tiếp trong phần cứng, không đi qua VM hay ngăn xếp phần mềm
- Cung cấp hiệu năng deterministic và nhất quán cho các lĩnh vực như hệ thống điều khiển thời gian thực, robotics và hệ thống công nghiệp nhúng
Giới thiệu PyXL
- PyXL là một bộ xử lý tùy biến chạy Python trực tiếp trên phần cứng
- Chạy mã Python ngay trên silicon mà không cần interpreter hay JIT
- Chuyển đổi CPython ByteCode thành assembly tùy biến để thực thi trên một bộ xử lý pipeline
Đặc điểm của PyXL
- Không phải C hay vòng lặp inline
- Không phải MicroPython hay JIT
- Không chạy Linux hay hệ điều hành
- Là bộ xử lý chuyên cho Python, được thiết kế để đạt tính deterministic và tốc độ
Môi trường chạy của PyXL
- Chạy trên FPGA Zynq-7000, sử dụng bo mạch phát triển Arty-Z7-20
- Lõi PyXL chạy ở 100MHz
- CPU ARM xử lý cấu hình và bộ nhớ, còn mã Python được thực thi trực tiếp trong phần cứng
GPIO là gì?
- GPIO là viết tắt của vào/ra đa dụng, cho phép phần mềm điều khiển LED, nút bấm, cảm biến, động cơ và nhiều thiết bị khác
- Trong MicroPython, mã Python tương tác với hàm C để xử lý các thanh ghi phần cứng
- PyXL thực thi trực tiếp bytecode Python trong phần cứng, chạy trên phần cứng native mà không cần interpreter hay lời gọi hàm
Kiểm thử GPIO
- Việc kiểm thử được thực hiện bằng cách nối hai chân trên bo mạch Arty bằng cáp jumper
- Viết một chương trình Python để đo thời gian từ lúc chân GPIO 1 được đặt thành 1 cho đến khi giá trị 1 được đo ở chân còn lại
- So sánh hiệu năng qua video đối chiếu giữa PyXL và VM MicroPython trên PyBoard
Cấu trúc chương trình của PyXL
- Chương trình Python trước tiên được biên dịch thành CPython Bytecode, sau đó chuyển thành assembly PyXL
- Một binary được tạo ra và gửi tới bo mạch Arty qua mạng
- CPU ARM nhận ứng dụng, sao chép nó vào phần cứng PyXL và bộ nhớ dùng chung, rồi thực thi
So sánh nền tảng
- Độ trễ khứ hồi GPIO: PyXL là 480ns, MicroPython (PyBoard) là 14,741ns
- PyXL nhanh hơn 30 lần so với PyBoard, và nếu chuẩn hóa theo xung nhịp thì nhanh hơn 50 lần
Ưu điểm của PyXL
- Python VM dựa trên software interpreter, dẫn đến overhead và độ phức tạp
- PyXL loại bỏ những rào cản này để thực thi mã Python trực tiếp trong phần cứng
- Truy cập GPIO mang tính vật lý, còn luồng điều khiển có thể dự đoán được và mang lại hiệu năng nhất quán
Ứng dụng của PyXL
- Có thể triển khai bằng Python thuần trong hệ thống điều khiển thời gian thực
- Đáp ứng giới hạn thời gian nghiêm ngặt trong suy luận ML và vòng phản hồi cảm biến
- Xử lý phản hồi động cơ và hợp nhất cảm biến trong robotics với độ chính xác ở mức chu kỳ
- Phù hợp với hệ thống công nghiệp nhúng nơi thời gian và độ tin cậy là yếu tố quan trọng
6 bình luận
Bạn xử lý việc thay đổi phiên bản như thế nào?
Có lẽ đây có thể là một tin vui với các kỹ sư HiL.
Ồ, thú vị ghê.
Rất đáng mong đợi.
Nhà phát triển của dự án này sẽ có bài thuyết trình về nội dung này tại PyCon US lần này. Ngay từ lúc review proposal hồi đầu năm, chủ đề này cũng đã gây bàn tán khá nhiều giữa các reviewer, nhưng so với mức độ đó thì phần giới thiệu bài nói chuyện lại quá khiêm tốn. Nếu bạn có đến PyCon, tôi rất khuyến nghị hãy nghe thử một lần.
https://us.pycon.org/2025/schedule/presentation/40/
Ý kiến Hacker News
Tò mò không biết có những hạn chế nào về loại mã có thể chạy được hay không, ngoài giới hạn bộ nhớ hay tương tác với OS. Tôi nghĩ ý tưởng tạo bytecode hướng tới runtime của ngôn ngữ động trên một bộ xử lý tùy biến gần đây chưa được khám phá đủ nhiều. Muốn biết vì sao lại chọn hướng này, vì sao nó là một ý tưởng hay, và quá trình hiện thực hóa diễn ra như thế nào
Đã xây dựng một bộ xử lý phần cứng chạy trực tiếp chương trình Python mà không cần VM hay trình thông dịch truyền thống. Benchmark ban đầu: thời gian khứ hồi GPIO là 480ns, nhanh hơn MicroPython 30 lần
Công việc rất tuyệt vời. Tôi tự hỏi liệu bộ tính năng cuối cùng có lớn hơn việc tạo phần cứng tùy chỉnh so với việc biên dịch native một ngôn ngữ an toàn kiểu dữ liệu nhưng có cú pháp Python hay không. Garbage collection chạy nền không hề đơn giản như lời nói, nhưng tôi đang nói chuyện với người đã làm được một việc vốn đã khó đến mức ấn tượng
Tôi thắc mắc vì sao việc "biên dịch" Python lại không phổ biến trong đời sống hằng ngày. Tôi hiểu trình thông dịch có lợi cho vòng lặp lặp lại nhanh, tính tương thích, v.v., nhưng trong thế giới Python, tôi thắc mắc vì sao việc từ bỏ lợi ích của biên dịch và đẩy các file "source" thẳng vào production lại trở thành thông lệ được chấp nhận
Rất thú vị. Tôi tò mò đâu là những giới hạn vật lý căn bản. Cụ thể là độ chính xác thời gian, độ trễ và jitter. Bytecode PyXL có thể phản ứng nhanh đến mức nào với đầu vào. Có một thứ tương tự là ARTIQ, chạy mã Python với hiệu năng ở mức 'embedded'. ARTIQ thường được dùng trong các phòng thí nghiệm vật lý lượng tử. Mã Python và FPGA phải giao tiếp với nhau, điều này về mặt kỹ thuật rất khó và có nhiều cạm bẫy. Nếu PyXL khiến việc này đơn giản hơn cho người dùng thì đó là lợi ích lớn cho tất cả mọi người
Khi C# ra mắt, tôi từng tin chắc sẽ có ai đó tạo ra một bộ xử lý chạy native bytecode .Net. Tôi muốn biết họ đã dùng HDL nào để thiết kế bộ xử lý. Tôi cũng muốn biết liệu có thể chia sẻ assembly language của bộ xử lý hay không. Tôi thắc mắc lợi ích của việc thiết kế bộ xử lý rồi tạo trình biên dịch bytecode Python là gì, so với việc tạo trình biên dịch bytecode cho các bộ xử lý hiện có (ARM/x86/RISCV, v.v.)
Muốn hỏi các lập trình viên Python. Nhìn dự án này tôi thấy rất ấn tượng, nhưng với tư cách người ngoài cuộc với ngôn ngữ này thì tôi chưa hiểu lắm. a) trước đây Python đã gây khó khăn gì cho bạn, b) vì sao Python hữu ích cho công việc này, c) bạn nghĩ gì về chính Python. Tôi từng gặp khó khăn vì Python 2 và 3, virtual environment, thư viện của từng phiên bản, v.v. Là một lập trình viên PHP/Go, tôi có quan tâm nhưng vẫn do dự vì những vấn đề này
Thật đáng kinh ngạc. Mỗi khi thấy một triển khai tuyệt vời trên FPGA, tôi lại tiếc vì Tabula đã không thành công. Đó là một FPGA rất sáng tạo và rất nhanh
Tôi hiểu có đúng không rằng ASIC đang chạy một vi điều khiển chuyên cho Python, với microcode được tinh chỉnh cho Python. Và rằng có một trình biên dịch biên dịch bytecode Python sang microcode, cùng với hạ tầng hỗ trợ để chuyển bytecode đã biên dịch vào ASIC. Thú vị thật. Tôi muốn biết mình có hiểu đúng hay không