Thiết kế cho một FPGA yêu cầu Ngôn ngữ mô tả phần cứng (HDL). HDL hoàn toàn không có gì giống như C. Trong khi đó, một chương trình C là một chuỗi các hướng dẫn tuần tự và phải tự xoay xở để đạt được sự thực thi song song, một HDL mô tả một mạch đồng thời và phải tự xoay xở để thực hiện tuần tự. Đó là một thế giới rất khác biệt và nếu bạn cố gắng xây dựng một mạch trong một đồ họa trong khi suy nghĩ như một nhà phát triển phần mềm thì nó sẽ bị tổn thương.
Một MCU bị giới hạn thời gian. Để hoàn thành công việc nhiều hơn, bạn cần nhiều chu kỳ xử lý hơn. Đồng hồ có giới hạn rất thực đối với tần số của chúng, vì vậy thật dễ dàng để đạt được một bức tường tính toán. Tuy nhiên, một FPGA bị giới hạn không gian. Để hoàn thành công việc nhiều hơn, bạn chỉ cần thêm nhiều mạch. Nếu đồ họa của bạn không đủ lớn, bạn có thể mua một cái lớn hơn. Thật khó để xây dựng một mạch không thể phù hợp với các GPU lớn nhất và ngay cả khi bạn có các ghi chú ứng dụng mô tả cách kết nối các chuỗi GPU với nhau.
FPGA tập trung nhiều hơn vào thực hiện song song. Đôi khi bạn phải lo lắng về việc ISR của MCU mất bao lâu để phục vụ ngắt và liệu bạn có thể đạt được giới hạn thời gian thực của mình không. Tuy nhiên, trong một bản đồ họa có rất nhiều Máy trạng thái hữu hạn (FSM) chạy mọi lúc. Chúng giống như "bộ điều khiển xương", giống như những đám mây logic điều khiển nhỏ. Tất cả chúng đều chạy đồng thời, vì vậy không có gì đáng lo ngại khi bỏ lỡ một ngắt. Bạn có thể có một FSM để giao tiếp với ADC, một FSM khác để giao tiếp với bus dữ liệu / địa chỉ của vi điều khiển, một FSM khác để truyền dữ liệu tới codec âm thanh nổi, nhưng một FSM khác để đệm dữ liệu từ ADC sang codec ... Bạn cần sử dụng một trình giả lập để đảm bảo rằng tất cả các FSM đều hát hài hòa.
FPGA là một giấc mơ ướt thiết kế bố trí PCB. Chúng cực kỳ cấu hình. Bạn có thể có nhiều giao diện logic khác nhau (LVTTL, LVCMOS, LVDS, v.v.), có điện áp khác nhau và thậm chí cả cường độ ổ đĩa (vì vậy bạn không cần điện trở kết thúc loạt). Các chân có thể hoán đổi; Bạn đã bao giờ nhìn thấy một chiếc xe buýt địa chỉ MCU nơi các chân được đặt rải rác xung quanh chip chưa? Nhà thiết kế PCB của bạn có thể phải bỏ một loạt vias chỉ để buộc tất cả các tín hiệu lại với nhau một cách chính xác. Với một GPU, nhà thiết kế PCB sau đó có thể chạy các tín hiệu vào chip theo bất kỳ thứ tự nào thuận tiện, và sau đó thiết kế có thể được chú thích lại cho chuỗi công cụ FPGA.
FPGA cũng có rất nhiều đồ chơi đẹp, lạ mắt. Một trong những mục yêu thích của tôi là Trình quản lý đồng hồ kỹ thuật số trong các chip Xilinx. Bạn cung cấp cho nó một tín hiệu đồng hồ và nó có thể lấy thêm bốn tín hiệu từ nó bằng cách sử dụng nhiều hệ số nhân và bộ chia tần số khác nhau, tất cả đều có chu kỳ nhiệm vụ 50% nguyên sơ và 100% theo pha ... và thậm chí nó có thể giải thích cho độ lệch của đồng hồ phát sinh từ sự chậm trễ lan truyền bên ngoài đến chip!
EDIT (trả lời phụ lục):
Bạn có thể đặt một "lõi mềm" vào một đồ họa. Bạn thực sự kết nối một mạch vi điều khiển, hay đúng hơn là bạn có thể thả mạch của người khác vào thiết kế của mình, như PicoBlaze hoặc MicroBlaze hoặc Altera's Nios. Nhưng giống như trình biên dịch C-> VHDL, các lõi này có xu hướng hơi cồng kềnh và chậm so với việc sử dụng một FSM và datapath hoặc một vi điều khiển thực tế. Các công cụ phát triển cũng có thể thêm độ phức tạp đáng kể vào quá trình thiết kế, đây có thể là một điều tồi tệ khi các GPU đã là những con chip cực kỳ phức tạp.
Ngoài ra còn có một số GPU có "lõi cứng" được nhúng trong chúng, như dòng Virtex4 của Xilinx có một PowerPC IBM chuyên dụng thực sự với kết cấu đồ họa xung quanh nó.
EDIT2 (trả lời bình luận):
Tôi nghĩ bây giờ tôi đã thấy ... bạn đang hỏi về việc kết nối một MCU rời rạc với một đồ họa; tức là hai chip riêng biệt. Có những lý do tốt để làm điều này; Các GPU có lõi cứng và các lõi đủ lớn để hỗ trợ các lõi mềm tốt thường là những quái vật có hàng trăm chân kết thúc cần một gói BGA, dễ dàng tăng độ khó khi thiết kế PCB lên 10 lần.
Mặc dù vậy, C dễ dàng hơn rất nhiều, vì vậy MCU chắc chắn có vị trí hoạt động song song với một đồ họa. Vì việc viết C dễ dàng hơn, bạn có thể viết "bộ não" hoặc thuật toán trung tâm trong MCU, trong khi đó, FPGA có thể thực hiện các thuật toán phụ có thể cần tăng tốc. Cố gắng đưa những thứ thay đổi vào mã C, bởi vì nó dễ thay đổi hơn và để cho FPGA trở thành loại công cụ chuyên dụng hơn sẽ không thay đổi thường xuyên.
Công cụ thiết kế MCU cũng dễ sử dụng hơn. Phải mất vài phút để các công cụ thiết kế xây dựng tệp bit FPGA, ngay cả đối với các thiết kế hơi đơn giản, nhưng các chương trình MCU phức tạp thường mất vài giây. MCU có rất ít sai sót, vì vậy chúng cũng dễ gỡ lỗi hơn ... Tôi không thể nhấn mạnh được mức độ phức tạp của các GPU. Bạn thực sự cần phải có bảng dữ liệu cho cái bạn có, và bạn nên cố gắng đọc mọi trang của nó. Tôi biết, đó là một vài trăm trang ... dù sao đi nữa.
Cách tốt nhất để kết nối chúng là sử dụng MCU với địa chỉ bên ngoài và bus dữ liệu. Sau đó, bạn có thể chỉ cần ánh xạ bộ nhớ các mạch đồ họa vào MCU và thêm các "thanh ghi" của riêng bạn mà mỗi cái có địa chỉ riêng. Bây giờ, FPGA có thể thêm các thiết bị ngoại vi tùy chỉnh, như bộ định thời 32 bit có thể chốt tất cả 4 byte cùng một lúc khi byte đầu tiên được đọc để ngăn tràn giữa các lần đọc 8 bit. Bạn cũng có thể sử dụng nó như logic keo để ánh xạ bộ nhớ nhiều thiết bị ngoại vi hơn từ các chip khác, như một ADC riêng.
Cuối cùng, một số MCU được thiết kế để sử dụng với "tổng thể bên ngoài" như một đồ họa. Cypress tạo ra một vài MCU USB có 8051 bên trong, nhưng mục đích là để dữ liệu USB được sản xuất / tiêu thụ bằng ví dụ như một đồ họa.