Khi nào thì có thể sử dụng FPGA và Vi điều khiển / DSP không?


28

Tôi phải chọn giữa một khóa học về vi điều khiển nâng cao và khóa học về các bản nâng cao của FPGA.

Tôi đã có các khóa học giới thiệu về cả hai môn học và điều gây phiền toái cho tôi là tôi đã khá giỏi trong việc phát triển phần sụn cho vi điều khiển và tôi không thể thấy những sản phẩm / dự án nào tôi có thể thực hiện với một bộ vi điều khiển và không thể với vi điều khiển / DSP.

Bạn có thể đưa ra một số ứng dụng / sản phẩm / dự án mà vi điều khiển hoặc DSP không đủ, và tại sao không?

Máy ảnh? Camera tốc độ cao? Xử lý ảnh tốc độ cao?


4
Những lý do chính là khá nhiều 1. 100% phản ứng xác định, 2. tiềm năng lớn cho sự song song. Tuy nhiên, nhiều thiết kế kết hợp CPU lõi sắp xếp trong FPGA, vì việc lập trình logic điên cho bộ xử lý dễ dàng hơn nhiều so với phần cứng.
Dzarda

Sự khác biệt giữa những gì có thể với mỗi thiết bị không rõ ràng lắm. Mỗi cái đều có ưu điểm và có giải pháp cho các vấn đề ở hai bên. Haven đã tham gia các khóa học giới thiệu về mỗi khóa học, tôi hy vọng bạn hiểu điều này, vì vậy tôi sẽ tự hỏi chính xác những gì bạn đang hỏi.
Phil Frost

Tôi đang tìm kiếm các ứng dụng mà trong đó hầu hết các vi điều khiển sẽ không đủ, hoặc trong đó một FPGA sẽ là lựa chọn rõ ràng.
Jolle

4
Cái nào bạn thấy dễ hiểu hơn, trong khóa học giới thiệu của bạn? Sau đó chọn nâng cao trên cái khác, vì (có lẽ) bạn sẽ có thể tự học cái dễ hơn.
woliveirajr

Câu trả lời:


21

Xem thêm Vi điều khiển vs Vi điều khiển

Xử lý hình ảnh hoặc video tốc độ cao là một ví dụ tốt. Hoặc xử lý 'hình ảnh' không phải là hình ảnh quang học đơn giản, chẳng hạn như hệ thống radar hoặc laser.

Điều quan trọng để xem xét là yêu cầu thông lượngđộ trễ . Một vi điều khiển có thể phục vụ một ngắt (rất đại khái) một lần mỗi micro giây. Nó chỉ có thể phục vụ một ngắt một lúc. Nếu bạn cần xử lý nó một cách công phu, điều đó giới hạn số lượng bạn có thể phục vụ trong một thời gian cụ thể.

Với một FPGA, bạn thường có thể phản hồi ngay lập tức một sự kiện đầu vào (tốt, trong chu kỳ xung nhịp tiếp theo). Bạn có thể có nhiều đơn vị xử lý song song. Nếu bạn biết rằng bộ lọc của bạn mất 20 chu kỳ, điều đó hoàn toàn độc lập với bất kỳ điều gì khác đang diễn ra.

Tính toán chuyên sâu số nguyên song song cao hoạt động tốt nhất trên các GPU, đặc biệt nếu có phụ thuộc dữ liệu phức tạp. Tuy nhiên, họ không có nhiều bộ nhớ trên tàu; bạn có thể thêm một số DRAM sang một bên nhưng với chi phí độ trễ.

Bạn cũng có thể muốn một cái cho các thiết bị ngoại vi, hoặc nói một số xe buýt kỹ thuật số tốc độ cao. Bạn không thể gõ HDMI vào hoặc ra khỏi vi điều khiển. Bạn không thể xây dựng một thẻ PCI xung quanh một.


16

Vâng, tôi xử lý video HD thời gian thực trong các GPU. Một số điều tôi làm có thể được thực hiện trong chip GPU, nhưng không phải trên vi điều khiển hoặc DSP. Các đồ họa linh hoạt hơn.

Nhiều hệ thống kết hợp các GPU và MCU / DSP để có được kết quả tốt nhất của cả hai thế giới. Một dự án tôi có thể đang thực hiện sớm liên quan đến nhận dạng đối tượng trong luồng video. Các bước sơ bộ (loại bỏ nhiễu, chuẩn hóa, phát hiện cạnh, v.v.) được thực hiện tốt nhất trong FPGA, nhưng logic mức cao hơn quyết định các tính năng cấp thấp nào là các phần của các đối tượng được nhận dạng được thực hiện tốt nhất trên CPU ( bên trong hoặc bên ngoài đồ họa).

Cuối cùng, bạn sẽ muốn trò chuyện trong cả hai lĩnh vực, vì vậy đây thực sự chỉ là câu hỏi bạn làm cái nào trước.


14

Nói tóm lại, các GPU là tốt khi bạn cần thực hiện một chút xử lý trên nhiều dữ liệu và CPU là tốt khi bạn cần thực hiện nhiều xử lý trên một ít dữ liệu.

Một luồng video HDMI là rất nhiều dữ liệu. Nó có thể được thực hiện bởi CPU, GPU hoặc ASIC trong trường hợp video chung, nhưng nếu bạn cần thực hiện một chút công việc trên nó (ví dụ: thêm lớp phủ), bạn có thể chọn một FPGA.

Một luồng âm thanh không có nhiều dữ liệu, nhưng nếu bạn cần thực hiện nhận dạng giọng nói trên nó, bạn sẽ thích CPU hơn một đồ họa.

Mặc dù bạn có thể thực hiện phần mềm radio được xác định trong CPU, nhưng bạn có thể xử lý một phần phổ lớn hơn nhiều với một đồ họa dễ dàng hơn so với trong CPU.

Mặc dù bạn có thể tạo ra một bộ điều khiển bàn phím từ một bộ vi xử lý, nhưng một bộ vi điều khiển sẽ rẻ hơn, tiêu thụ ít năng lượng hơn và dễ dàng phát triển phần mềm bàn phím tiên tiến (macro, chức năng chơi trò chơi, ánh xạ lại) hơn so với một bộ đồ họa.

Tất nhiên bạn có thể làm bất cứ điều gì trong số đó, với sự đánh đổi, nhưng nếu bạn thành thạo cả hai thì bạn sẽ có thể cân nhắc sự đánh đổi một cách thành thạo hơn, và sẽ tránh được chi phí cao hơn cho các bộ phận hoặc thời gian phát triển mà bạn phải chọn giải pháp sai cho một vấn đề nhất định.


12

Nói chung, bạn sử dụng một vi điều khiển khi nó có thể thực hiện công việc. Một vi điều khiển thực hiện logic bằng cách thực hiện các lệnh tuần tự.

Một FPGA thực hiện logic vì các cổng phần cứng của nó được nối dây một cách hợp lý để làm như vậy. Điều đó có nghĩa là nó có thể làm mọi thứ nhanh hơn nhiều, và một số thứ như vậy cùng một lúc. Nhìn chung, việc tạo và gỡ lỗi logic tương tự trong một đồ họa như trong vi mô thường phức tạp và khó khăn hơn, vì vậy bạn sử dụng một đồ họa khi cần thêm tốc độ và độ trễ thấp.


8

Một ứng dụng tôi chưa thấy đề cập đến là kỹ thuật vi điện tử hoặc thiết kế chip MCU / CPU / GPU / ASIC. Những con chip này thường được tạo nguyên mẫu bằng cách thiết kế chúng trong HDL và sau đó được triển khai trong một đồ họa. Điều này giúp chúng dễ dàng hơn, rẻ hơn và nhanh hơn để kiểm tra và sửa đổi trước khi cuối cùng sử dụng HDL để tạo bố cục cần thiết để sản xuất silicon thực tế trong bộ xử lý hoặc ASIC.

Một nhà bình luận đã đề cập đến điều này dưới dạng chip lõi mềm (mặc dù chúng có lỗi đánh máy và gọi chúng là chip lõi sắp xếp). Bạn có thể lấy ARM / 8051 / v.v. lõi mềm và bất kỳ thiết bị ngoại vi lõi mềm nào bạn cần và về cơ bản thiết kế bộ vi điều khiển tùy chỉnh của riêng bạn được triển khai trong một đồ họa. Sau đó, giả sử bạn có tài nguyên, bạn có thể đưa tài liệu này vào bộ vi điều khiển của riêng bạn.

Nếu loại ứng dụng này là thứ mà bạn quan tâm, hãy xem OpenCores để xem những gì có thể.


6

Chúng tôi chế tạo các thiết bị radar (chủ yếu là khẩu độ tổng hợp) sử dụng rộng rãi các GPU. Tôi không nghĩ rằng các yêu cầu về thời gian chặt chẽ có thể được đáp ứng bởi một vi điều khiển. Tôi tin rằng rất nhiều công cụ LIDAR cũng sử dụng các GPU.

Về cơ bản, bất cứ điều gì mà các yêu cầu về thời gian tính bằng nano giây đều cần có các GPU hoặc ASIC.


5

Một vi điều khiển chỉ có thể xử lý dữ liệu tuần tự, một lệnh tại một thời điểm, vì vậy nếu bạn có một hoạt động rất tốn kém, bạn có thể muốn làm cho tính toán của mình song song bằng cách nào đó. Xử lý âm thanh / video là một ví dụ tốt về điều này. Để đáp ứng nhu cầu đó, bộ xử lý tín hiệu số đã được phát triển có thể thực hiện song song một số tác vụ nhất định, nhưng chúng không đủ khái quát để thực hiện bất kỳ thuật toán tùy ý nào, vì vậy các bộ xử lý này sẽ hoạt động cho nhiều tác vụ nhưng không phải tất cả các tác vụ. Một đồ họa là một phần cứng tổng quát. Vì bạn có thể định nghĩa, về cơ bản, thiết kế phần cứng của riêng bạn, sau đó tải nó xuống FPGA, nó có thể thực hiện bất kỳ thuật toán nào có thể tưởng tượng được, do nó có đủ tài nguyên để làm việc đó.

Một ví dụ cụ thể: Ken Perlin đề xuất triển khai phần cứng thuật toán nhiễu đơn giản của mình. Nó có thể được thực hiện tương đối nhanh với CPU hoặc vi điều khiển truyền thống, nhưng có thể được thực hiện siêu nhanh với phần cứng tùy chỉnh. Vì tôi nghi ngờ một DSP sẽ hoạt động cho việc này, nên thứ dễ nhất sẽ là một GPU. Tất nhiên, cách khó nhất là sẽ có một con chip vật lý thực tế được chế tạo cho bạn, nó cực kỳ đắt. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf


5

Một câu trả lời không có ở đây là Thu thập dữ liệu. Nếu bạn muốn sử dụng ADC để lấy mẫu tín hiệu (ví dụ: tín hiệu RF) ở 200Mhz và xử lý nó, thì vi điều khiển đơn giản là không thể xử lý dữ liệu đủ nhanh. Một bảng mạch DAQ điển hình sẽ nhận, lọc, thực hiện DDC và truyền dữ liệu RF cho CPU ở tần số thấp hơn nhiều. Các GPU cũng có thể thực hiện các FFT và các hoạt động phân kênh trên phổ RF.

Một ứng dụng khác là định tuyến gói, ví dụ một thiết bị quản lý một (hoặc nhiều) giao diện ethernet XAUI hoạt động ở tốc độ 10Gb / s mỗi cái. Các bộ lọc đồ họa này và sắp xếp các hàng đợi gói cho các đích khác nhau. Một vi điều khiển / CPU thông thường sẽ không thể xử lý băng thông của các giao diện này.


4

Lý do cơ bản mà các bộ vi xử lý và vi điều khiển có thể làm được rất nhiều với một lượng mạch tương đối nhỏ là vì nếu vi mô chỉ cần thực hiện một số phép tính phức tạp 1.000 lần mỗi giây và phải mất 20 micro giây (vì vậy vi mô sẽ hoạt động trên phép tính 2 % thời gian), hầu hết phần cứng sẽ được sử dụng cho tính toán đó có thể được sử dụng cho các mục đích khác trong 98% thời gian còn lại. Do đó, vi điều khiển có thể sử dụng một lượng phần cứng khiêm tốn để thực hiện một số lượng lớn các chức năng riêng biệt, miễn là các chức năng này không cần thiết đồng thời.

Số lượng mạch trong một FPGA thường sẽ tương đương với của vi điều khiển (các GPU có kích thước khác nhau theo một vài bậc độ lớn, cũng như các vi điều khiển, nhưng các phạm vi chồng chéo). Tuy nhiên, không giống như vi điều khiển, các phần tử mạch của chúng sẽ được kết nối theo cách để tạo điều kiện sử dụng chúng cho nhiều tác vụ không đồng thời, một FPGA sẽ được thiết kế để dành các phần của mạch cho các tác vụ khác nhau "toàn thời gian". Nếu một người muốn có một vi điều khiển đếm số lượng xung xảy ra trên mỗi 100 đầu vào, thì sẽ bị giới hạn trong việc đếm các xung đủ chậm để bộ điều khiển có thể xử lý chúng một cách tuần tự, nếu tất cả các đầu vào có thể phát xung một cách độc lập, ngay cả một bộ điều khiển nhanh cũng sẽ gặp khó khăn khi đếm hơn vài nghìn xung mỗi giây trên mỗi đầu vào. Ngược lại,


1

FPGA thực hiện một mạch logic phần cứng hoặc khối chức năng, theo lý thuyết, nó có thể thực hiện bất cứ điều gì bạn muốn. Và các khối đó đang chạy đồng thời, không chắc là một MCU thông thường đang chạy từng dòng lập trình. Do đó, hiệu năng của FPGA tốt hơn nhiều so với MCU, nhưng nó đòi hỏi phải biết ngôn ngữ HDL hoặc VHDL khác với ngôn ngữ lập trình về cú pháp, kiểu dáng và khái niệm.


Như tôi đã nói, nó có thể thực hiện bất kỳ điều gì, do đó, không có gì ngạc nhiên khi bạn có thể triển khai MCU với khối chức năng để tạo điều kiện cho sự phát triển của bạn với hiệu suất cao. Có một khối chức năng do Xilinx cung cấp cho bạn để nhúng MCU, được gọi là Microblaze. Do đó, bạn cũng có thể thực hiện chương trình hệ thống nhúng trong FPGA.


Chẳng hạn, bạn muốn triển khai bộ cân bằng âm thanh có thể lập trình và phần tính toán nặng nhất như FFT có thể được thực hiện bằng khối chức năng thay vì chạy tính toán phần mềm. Nhưng một số tác vụ đơn giản như LCD, giao diện I / O có thể được MCU thực hiện. Và FPGA cho phép bạn có các khối chức năng phần cứng và hệ thống nhúng MCU cùng một lúc.

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.