Tại sao các GPU được sử dụng thường xuyên cho các dự án video HDMI?


24

Nếu bạn xem qua các dự án hdmi trên một trang web như hackaday , bạn sẽ thấy rằng mỗi một trong số chúng đều liên quan đến một đồ họa. Tôi không nghĩ rằng tôi đã thấy bất kỳ dự án DIY nào có đầu ra HDMI chưa sử dụng một FPGA.

Nhưng tại sao? Theo như tôi có thể nói, các GPU rất đắt, khoảng $ 70- $ 100. So sánh với Raspberry Pi với giá 35 đô la, có thể thực hiện những điều phức tạp hơn và xuất HDMI. Tại sao ARM không được sử dụng? Hoặc một vi điều khiển thậm chí rẻ hơn?

Trong trường hợp nâng cấp video trên các hệ thống trò chơi cũ, logic không nên phức tạp hơn nữa mà một bộ vi điều khiển giá rẻ có thể xử lý , nhưng tôi vẫn thấy HDMI là một trở ngại không thể giải quyết chỉ bằng các GPU.


Bạn cũng có thể tìm thấy G PUS giá rẻ (như trên RPi). Điều đáng chú ý là họ sẽ không làm những việc vi phạm giấy phép HDMI hoặc hoàn toàn bất hợp pháp ở một số quốc gia (DMCA). Đó là những gì hầu hết các dự án bạn liên kết để làm. Bạn có thể mua GPU lõi IP và sửa đổi nó để làm những việc như vậy ... Nhưng ai sẽ lấy nó cho bạn? FPGA là fab người nghèo (hoặc cướp biển).
Fizz

Câu trả lời:


66

Về cơ bản, không có vi điều khiển, ngay cả pi mâm xôi, là đủ nhanh. Raspberry pi có GPU trên bo mạch tạo ra đầu ra HDMI. Và ngoài ra, khả năng I / O của raspberry pi bị giới hạn đáng kinh ngạc - giao diện băng thông cao nhất ngoài HDMI là USB. Nhiều dự án chuyển đổi HDMI liên quan đến việc lấy một luồng video khác ở định dạng lạ và xử lý lại thành một thứ có thể được gửi tới một HDTV tiêu chuẩn qua HDMI. Điều này đòi hỏi một số logic giao thoa tùy chỉnh để đọc trong tín hiệu video, tín hiệu logic logic để định dạng lại nó, logic mã hóa HDMI TMDS và sau đó là các bộ nối tiếp tốc độ cao để thực sự lái cổng HDMI.

Làm việc với phát trực tuyến, không nén, video độ phân giải cao đòi hỏi phải xử lý một lượng dữ liệu khổng lồ, một điều không khả thi trên CPU có mục đích chung. Tín hiệu video 1080p ở 30 khung hình mỗi giây có khoảng 62 triệu pixel mỗi giây. Raspberry pi chạy ở 700 MHz, vì vậy bạn có, ồ, 11 hướng dẫn cho mỗi pixel. Và đó là 11 hướng dẫn để đọc ở định dạng video lẻ trong thời gian thực, bán lại nó, v.v., v.v. Không thể. Giai đoạn.

Trên một đồ họa, có thể tạo ra một đường ống xử lý dài có thể xử lý một hoặc nhiều pixel trên mỗi chu kỳ xung nhịp và thực hiện theo cách có tính quyết định cao (không bị gián đoạn hoặc chuyển đổi tác vụ!) Để dữ liệu pixel sẵn sàng truyền qua HDMI vào đúng thời điểm Nếu bạn đã làm việc nhiều với các CPU có mục đích chung chạy bất kỳ loại hệ điều hành nào, bạn sẽ biết rằng việc lấy thời gian chính xác ở mức milisecond là ít nhiều có thể thực hiện được, nhưng ở mức độ micro giây là không thể. Đối với HDMI, bạn cần độ chính xác tỷ lệ nano giây. Không thể thực hiện trên CPU mục đích chung. Ngoài ra, hãy xem dự án âm thanh / video HDMI cho tân địa lý. Điều này không chỉ phải quay lại video, nó còn phải lấy mẫu lại âm thanh và chèn nó vào luồng video HDMI.

Và điều này vẫn không xem xét logic tùy chỉnh cần thiết để đọc ở bất kỳ định dạng dữ liệu đầu vào nào bạn có. Bạn sẽ cần phần cứng tùy chỉnh để giải thích điều này. Phần mềm không đủ nhanh hoặc đủ xác định. Bạn có thể có thể định dạng lại nó thành một loại luồng dựa trên USB nào đó, nhưng điều này sẽ yêu cầu logic kỹ thuật số tùy chỉnh, vì vậy bạn cũng có thể chỉ cần xuất HDMI trực tiếp.

Để thực hiện tất cả điều này, logic kỹ thuật số thực sự là giải pháp khả thi duy nhất. Và nếu bạn đang thực hiện logic kỹ thuật số, thì FPGA là giải pháp khả thi duy nhất, vì nó quá nhanh và quá phức tạp đối với 7400 logic rời rạc và ASIC, đắt hơn, một số đơn hàng có cường độ cao hơn.

Một thành phần bắt buộc khác là các bộ nối tiếp tốc độ cao và trình điều khiển vi sai thực tế để tạo ra các luồng dữ liệu nối tiếp song song được gửi xuống cáp. Không thể bit dữ liệu nối tiếp theo thứ tự gigabit mỗi giây từ CPU có mục đích chung, điều này đòi hỏi phần cứng chuyên dụng. Raspberry pi có GPU trên bo mạch thực hiện việc này, nhưng nó bị giới hạn về khả năng của GPU, chưa kể những gì được ghi lại. Hầu hết các FPGA chứa ít nhất các trình điều khiển vi sai cần thiết và các flip flip DDR đủ để hỗ trợ video độ phân giải thấp và có khá nhiều FPGA cũng chứa các bộ nối tiếp cần thiết (ví dụ các khối OSERDES Xilinx) để tạo ra các luồng HD đầy đủ. Đừng quên rằng luồng nối tiếp không phải là 'baseband' giống như một cổng nối tiếp bình thường trong đó dữ liệu thực tế được gửi nguyên văn với một số thông tin đóng khung, nhưng dữ liệu thực sự được mã hóa bằng TMDS (tín hiệu vi sai thu nhỏ chuyển tiếp) để cung cấp cho tín hiệu một số đặc điểm điện nhất định. Một chút logic được yêu cầu để thực hiện điều này ngoài các bộ nối tiếp tốc độ cao thực tế. Tất cả điều này tương đối đơn giản để thực hiện trong logic kỹ thuật số thuần túy (tốt, dù sao cũng là mã hóa - các bộ nối tiếp được cho là tương tự, hoặc ít nhất là tín hiệu hỗn hợp) trên cả ASIC hoặc FPGA.

Đây thực sự là một phần rất quan trọng của quy trình thiết kế hệ thống nhúng / kỹ thuật số tổng thể để tìm ra phần nào của hệ thống có thể được triển khai trong phần mềm và phần nào yêu cầu phần cứng, dưới dạng chip chuyên dụng, đồ họa, tùy chỉnh ASIC, IP cứng hoặc mềm (HDL, danh sách mạng, GDSII), v.v. Trong trường hợp này rõ ràng: việc tạo tín hiệu video yêu cầu phần cứng chuyên dụng, có thể là GPU được ghép nối với CPU mục đích chung, một GPU có độ cứng tích hợp hoặc lõi CPU mềm hoặc được ghép nối với CPU bên ngoài hoặc thứ gì đó chuyên dụng hơn.

Chỉnh sửa: Tôi mới nhận ra rằng trang web fpga4fun và dự án video địa lý mới đều chạy ở 640x480 thay vì full HD. Tuy nhiên, điều này không thực sự làm cho điều này trong khi hoạt động đơn giản hơn nhiều. Đồng hồ pixel tối thiểu là 25 MHz, với xung nhịp bit là 250 MHz. Điều này có nghĩa là thực tế, FPGA không yêu cầu các bộ nối tiếp để truyền HDMI, chỉ có các flip flop DDR. Điều này vẫn không làm giảm bớt vấn đề đọc dữ liệu video. Nếu bạn muốn làm điều đó trên raspberry pi mà không cần hỗ trợ phần cứng, bạn sẽ phải đọc từ GPIO liên tục ở 25 MHz. Đó là một đọc mỗi 175 hướng dẫn. Bước vào lĩnh vực khả năng, nhưng cách duy nhất bạn có thể thực hiện công việc đó là trên kim loại trần (không có Linux) với lắp ráp được mã hóa bằng tay.


2
Bây giờ tôi đã đề cập đến logic 7400 ... Tôi tự hỏi liệu có thể tạo tín hiệu HDMI với logic rời rạc không. Trang web fpga4fun có ví dụ về video 640x480 với đồng hồ HDMI 25 MHz cho tốc độ bit 250 Mbit / giây hoặc DDR 125 MHz. Điều đó không quá cao đến mức có thể thực hiện được với các chip logic rời rạc. Có thể là một dự án thú vị cho ai đó.
alex.forencich

11 hướng dẫn cho mỗi pixel - bạn đã tính số đó như thế nào? Bạn đang giả sử một hướng dẫn trên mỗi đồng hồ đánh dấu?
gronostaj

700 MHz / 62 Mpps = 11.3. Giả định Ballpark 1 CPU trên mỗi chu kỳ xung nhịp cho CPU lõi đơn.
alex.forencich

Và giả định khác mà tôi cho rằng tôi đã không đề cập đến là tín hiệu video đầu vào sẽ được truyền vào các chân GPIO mà không cần hỗ trợ phần cứng, do đó, các hướng dẫn cho điều đó sẽ phải được xen kẽ bằng cách nào đó với thời gian chính xác.
alex.forencich

15
TL; DR: Phải được thực hiện trong phần cứng. Phần mềm quá chậm.
JS.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.