Câu trả lời:
Chúng là các thành phần điện tử bổ sung logic cho các mạch của bạn (vì vậy chúng tương tự như các bộ điều khiển vi mô). Nhưng phương pháp thiết kế sau đó hoàn toàn khác so với trong uC (bộ điều khiển vi mô). Trong một uC, bạn không thể thay đổi thiết kế uC bên trong; bạn chỉ có thể chạy các chương trình "cổ điển" trên đó. Lập trình đồ họa giống như tạo phần cứng mới. Bạn tạo các kết nối mới giữa các cổng logic và tạo một bộ xử lý mới, chuyên dụng. Và bạn có thể làm tất cả trong nhà, trên bàn và PC.
Nghe hay đấy? Có, nhưng có một số nhược điểm. Ví dụ: giá cả (nhưng tôi nghĩ thật khó để so sánh nó), mức tiêu thụ năng lượng cao hơn và tốc độ xung nhịp thấp hơn (nhưng bạn có thể thiết kế ứng dụng của mình một cách thông minh và thực hiện nhiều thao tác hơn trong một chu kỳ đồng hồ).
Liên kết hữu ích:
Ví dụ sử dụng: http://nsa.unalign.org/
Một nghĩa đen là một mảng các cổng logic có thể được lập trình trong trường. Dép xỏ ngón, bộ ghép kênh, bảng tra cứu 4 bit, v.v ... có thể được kết nối theo bất kỳ cách nào bạn muốn, sử dụng ngôn ngữ giống như C (Verilog).
Một uC, chẳng hạn như một AVR, cũng được làm bằng các cổng logic tương tự, nhưng chúng được cấu hình khi thiết bị được tạo ra. Chắc chắn, nó có RAM và Flash để bạn có thể viết phần mềm để đọc đầu vào và kiểm soát đầu ra, nhưng bạn không thể thay đổi cách sắp xếp thực tế của các cổng. Các cổng sẽ luôn được sắp xếp thành ALU, bộ điều khiển bộ nhớ, cổng nối tiếp, v.v.
Lợi ích của uC là bạn có thể lập trình nó trong lĩnh vực này (tại bàn của bạn), với ngôn ngữ cấp cao, dễ sử dụng, dễ sử dụng như C. Vấn đề là, phần mềm "chậm". Để có một điều khiển đầu vào một đầu ra, trong trường hợp đơn giản nhất, bạn có thể viết:
void loop () {buttonState = digitalRead (buttonPin); if (buttonState == CAO) {
digitalWrite (ledPin, CAO);
} other {digitalWrite (ledPin, THẤP); }}
Điều đó sẽ được chuyển thành một tá hướng dẫn lắp ráp, vì vậy vòng lặp sẽ mất một phần triệu giây để kiểm soát một đầu ra từ một đầu vào. Và phải mất toàn bộ chip uC để làm điều đó nhanh chóng. Chắc chắn, bạn có thể làm nhiều hơn thế, nhưng sau đó khả năng kiểm soát đầu ra của bạn sẽ chậm lại khi uC bận rộn làm những việc khác.
Trong một đồ họa, tôi có thể cấu hình các cổng để có đầu vào điều khiển đầu ra trong 1 xung nhịp. Vì vậy, đầu ra sẽ theo đầu vào với độ trễ có lẽ là 25 nano giây. Đó là nhanh hơn 40 lần, sử dụng cùng một khoảng thời gian. Và phần còn lại của các cổng trong FPGA có sẵn để làm nhiều việc khác, điều này sẽ không ảnh hưởng đến tốc độ của chức năng nhỏ này.
Mã cho FPGA sẽ là một flip flop đơn giản:
luôn luôn @ (đồng hồ đặt sẵn) ledPin <= buttonPin;
Điều này sẽ chỉ mất 1 tế bào FPGA, khoảng 40 cổng, trong số hàng chục nghìn trong một FPGA.
Tôi có thể lập trình lại đồ họa của mình để làm một cái gì đó khác, ví dụ điều khiển đèn led dựa trên sự kết hợp của bốn đầu vào, vẫn trong một đồng hồ, vẫn sử dụng 1 ô đồ họa đó. Hoặc điều khiển đèn led dựa trên luồng nối tiếp từ đầu vào, trong một vài ô FPGA, sẽ là 100 cổng. Vì vậy, tôi có thể điều khiển đèn LED dựa trên dữ liệu nối tiếp, nói "BẬT" hoặc "TẮT", với luồng nối tiếp ở tốc độ rất cao (dễ dàng 20 MHz), và vẫn chỉ sử dụng một phần nhỏ dung lượng của FPGA.
Vì vậy, lợi thế của một đồ họa rõ ràng là tốc độ. Nó có thể làm bất cứ điều gì một uC có thể làm, và nó có thể làm điều đó nhanh hơn nhiều, với mọi thứ được thực hiện song song. Những điều phức tạp mà một uC sẽ mất một phần nghìn giây để làm, một FPGA có thể làm trong vài giây hoặc ít hơn. Miễn là có các cổng còn lại trong FPGA, tôi có thể thêm nhiều chức năng hơn vào nó mà không ảnh hưởng đến tốc độ hoặc hoạt động của các chức năng trước đó trong FPGA. Nhân tiện, một FPGA có thể dễ dàng chạy tốc độ xung nhịp 20 MHz.
Chi phí không phải là một sự khác biệt. Tôi có thể mua một GPU có thể thực hiện hầu hết mọi thiết kế Arduino mà tôi từng thấy với giá khoảng 5 đô la, tương đương với một con chip Arduino AVR. Ngoài ra còn có các công cụ miễn phí (IDE, trình biên dịch, trình gỡ lỗi) cho các GPU.
Quyền lực không phải là một sự khác biệt. Vì tôi có thể chạy FPGA ở tốc độ xung nhịp thấp hơn nhiều để có được chức năng tương tự như uC và sử dụng một phần nhỏ các cổng của nó (các cổng không sử dụng chỉ sử dụng năng lượng rò rỉ), một FPGA có thể đánh bại sức mạnh của hầu hết mọi nền tảng uC thiết kế.
Nhược điểm lớn nhất của một FPGA là nó phức tạp và tốn thời gian hơn nhiều để xác định, viết mã và gỡ lỗi một thiết kế đồ họa không tầm thường so với chương trình uC. Một dự án uC điển hình mà bạn có thể thực hiện vào một buổi tối có thể mất nhiều ngày trên một đồ họa.
Các vấn đề khác, có khả năng sửa chữa là hầu hết mọi người được đào tạo về lập trình phần mềm, nhưng ít người hiểu về lập trình phần cứng. Bạn có thể học Verilog khá dễ dàng. Nhưng bạn cũng sẽ cần phải suy nghĩ về mặt thiết kế phần cứng thay vì thiết kế phần mềm. Các mẫu thiết kế khác nhau nhiều.
Một vấn đề khác là các GPU không có các gói DIP 8 đến 20 pin. Họ có xu hướng đi kèm trong các gói gắn trên bề mặt 100 pin hoặc lớn hơn, vì vậy việc xây dựng các bảng là khó khăn hơn.
Và một vấn đề cuối cùng là toàn bộ rất nhiều dự án thú vị có thể được triển khai tốt ở những nơi dễ sử dụng của uC, vậy tại sao phải bận tâm với một FPGA?
Nếu bạn quen thuộc với các cổng logic cơ bản, bạn nên biết rằng chúng gần như tức thời. Thao tác A và B OR C thay đổi ngay lập tức khi A, B hoặc C thay đổi.
Một FPGA là (sắp xếp) một ma trận các cổng logic lập trình được. Bạn có thể xác định đầu vào và đầu ra (dưới dạng kết hợp của đầu vào).
Trong một uC, A + B / C * sqrt (D) sẽ mất vài chu kỳ đồng hồ và một số bộ nhớ. Trong một đồ họa, kết quả gần như ngay lập tức.
Chúng rất tuyệt cho video, DSP, mật mã ...
Đó là lợi thế chính. Các GPU hiện đại phù hợp với bộ nhớ và có các phép lai uC / FPGA.
Chúng được sử dụng để bẻ khóa các khóa mã hóa nhanh hơn nhiều so với một máy tính đa năng có thể. : D
Để tiết kiệm tiền và rủi ro so với ASIC. Trừ khi bạn
chi phí cố định (NRE) khi thực hiện ASIC khiến chi phí bị cấm.
Vì bạn có thể thay đổi một cách dễ dàng, bạn có thể mô phỏng thiết kế ít hơn và vào phòng thí nghiệm nhanh hơn. Ngoài ra, bạn có thể thiết kế một phần và xây dựng trên nó, như trong phần mềm.