Một đồ họa là gì?


38

Trước đây tôi đã thấy rất nhiều người nói về FPGA và tôi biết rằng nó là viết tắt của mảng cổng lập trình trường nhưng nó hoạt động như thế nào và mục đích của việc sử dụng một FPGA là gì?

Câu trả lời:


30

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/


3
Tôi sẽ lưu ý rằng nhiều GPU đủ lớn để chứa nhiều lõi CPU, do đó cho phép FPGA trở thành toàn bộ máy tính.
Craig Trader

3
Một lưu ý, tôi nghĩ tốc độ xung nhịp thấp hơn có thể gây hiểu nhầm. so với PC, vâng. So với pic16, chúng có thể nhanh hơn, nhưng nó phụ thuộc vào chi phí. Hầu hết những cái rẻ hơn tôi đã có trong tay chạy ở tốc độ 40 MHz, nhưng một lần nữa, biến đổi sản phẩm thành sản phẩm.
Kortuk

23

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?


2
"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ôi xin lỗi, nhưng hvt? Ở đâu?
medivh

9

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.


Tôi biết nhiều EE thực hành với nhiều năm kinh nghiệm thường sẽ chỉ thông qua một GPU vào thiết kế thay vì uC nơi bạn thường thấy uC. Tôi thực sự nghĩ rằng chúng là tuyệt vời để xử lý giao diện.
Kortuk

Có, tôi nghĩ rằng đây là ví dụ hay: arADEus.com/english/index.html . Đặc biệt thú vị đối với tôi là ví dụ điều khiển servo: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/ Lỗi
Maciek Sawicki

2
Cũng cần lưu ý rằng ngày càng có nhiều bộ chuyển đổi "C sang VHDL" hoặc "C sang Verilog". Chúng chưa phải là những thứ hiệu quả nhất nhưng bạn có thể chuyển đổi mã đã viết thành phần cứng có thể được sử dụng để cải thiện tốc độ. Khá tuyệt nếu bạn hỏi tôi (và nếu bạn có bột cho nó).
Chris Gammell

5

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


1
Haha, tôi rất thích mô tả rất chức năng của bạn. Họ hoàn toàn tuyệt vời khi xử lý song song.
Kortuk

Một dự án codebreaker: copacobana.org
hhh

2

Để tiết kiệm tiền và rủi ro so với ASIC. Trừ khi bạn

  1. Quan tâm sâu sắc đến quyền lực hay
  2. Đang xây dựng một nhóm trong số họ (giả sử> 10 nghìn đơn vị)

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.

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.