Sự khác biệt và tương đồng giữa các vi điều khiển, ASIC và vi điều khiển chung là gì?


25

Tôi đã đọc bài đăng này và nó không trả lời toàn bộ câu hỏi của tôi:

Tôi nghĩ về một vi điều khiển như bất cứ thứ gì có bộ nhớ, thanh ghi và có thể xử lý một bộ hướng dẫn như LOAD, STORE và ADD. Nó chứa các cổng logic và như vậy để thực hiện vai trò của nó, nhưng nhiệm vụ chính của nó là xử lý các bit phổ quát. Tôi nghĩ về Microntoder như một hệ thống các thiết kế ASIC được kết nối với nhau để tạo khả năng lưu trữ và xử lý các hướng dẫn.

Tôi nghĩ về một thiết bị ASIC như một mạch được xây dựng cụ thể bằng cách sử dụng các thành phần logic và điện để thực hiện một nhiệm vụ duy nhất, không có nhiệm vụ nào khác trong tâm trí cũng như không có phần cứng bổ sung.

Tôi nghĩ về một thiết bị FPGA như một thiết bị ASIC (một thiết bị cấp thấp) + một loạt các công cụ không sử dụng còn sót lại, được sử dụng để thực hiện một bảng chân lý cụ thể.

Mặc dù tên của nó, FGPA cảm thấy rất "đặc thù cho ứng dụng", vì nó phải được tua lại để thực hiện một nhiệm vụ mới và khác. Điều này dẫn đến sự nhầm lẫn với ASIC. Mặc dù, trong trường hợp tua lại một đồ họa, tất cả các phần cứng cần thiết phải có mặt. Ngoài ra, các công cụ của FPGA có nghĩa là có thể lập trình được, nhưng đó không phải là ý nghĩa của Vi điều khiển?

Bài viết ở trên tôi cũng đề cập đến HDL, mà tôi quen thuộc. HDL không thể được sử dụng cho cả ASIC và FPGA và bằng proxy để thiết kế toàn bộ vi điều khiển?


1
Nó không rõ ràng câu hỏi của bạn là gì. Bạn đã đọc các câu hỏi liên quan về FPGA vs ASIC chưa? HDL thực sự được sử dụng để thiết kế các triển khai ASIC và FPGA, và bạn có thể thiết kế một vi điều khiển trong HDL.
pjc50

3
Altera cung cấp một cuốn sách điện tử miễn phí có tên là FPGA cho Dummies , điều này giải thích sự khác biệt giữa các GPU, ASIC và vi điều khiển tốt.
kkrambo

@kkrambo Bạn gọi tôi là đồ ngốc? :) Xin lỗi, không thể cưỡng lại ... Tôi sẽ kiểm tra nó.
dùng58446

Tôi đã thêm từ 'điểm tương đồng' vào tiêu đề câu hỏi, vì dường như có những chi tiết thuật ngữ kỹ thuật phút có thể gây nhầm lẫn về cách ba thiết bị khác nhau liên quan: ví dụ một thiết bị có thể chứa một trong hai thiết bị kia hoặc có thể chứa nhiều thiết bị thành phần tương tự nhưng khác nhau ở một số khía cạnh quan trọng. Điều này đã được chạm vào bởi một số câu trả lời hiện có. Cảm ơn bạn.
dùng58446

Câu trả lời:


28

ASIC vs FPGA

Mảng cổng lập trình trường có thể được xem là giai đoạn tạo mẫu của Mạch tích hợp dành riêng cho ứng dụng: ASIC rất tốn kém để sản xuất, và một khi nó được tạo ra thì không có gì quay trở lại (vì chi phí cố định đắt nhất là mặt nạ [loại sản xuất " "] Và sự phát triển của họ). Các GPU được lập trình lại nhiều lần, tuy nhiên vì thực tế là một mảng chung của các cổng được kết nối để thực hiện mục tiêu của bạn, nó không được tối ưu hóa như ASIC. Ngoài ra, các GPU là các thiết bị động vốn có ở chỗ nếu bạn tắt nguồn, bạn không chỉ mất trạng thái hiện tại mà còn cả cấu hình của mình. Các bảng hiện tồn tại mặc dù có thêm chip FLASH và / hoặc vi điều khiển để tải cấu hình khi khởi động nên điều này có xu hướng là một đối số ít quan trọng hơn. Cả ASIC và FPGA đều có thể được cấu hình bằng Ngôn ngữ mô tả phần cứng, và đôi khi các GPU được sử dụng cho sản phẩm cuối cùng. Nhưng nhìn chung ASICs khởi động khi thiết kế được cố định.

FPGA vs vi điều khiển

Đối với sự khác biệt giữa vi điều khiển và FPGA, bạn có thể coi vi điều khiển là ASIC, về cơ bản xử lý mã trong FLASH / ROM theo tuần tự. Bạn có thể tạo ra các bộ vi điều khiển với các GPU ngay cả khi nó không được tối ưu hóa, nhưng không phải ngược lại. Các GPU có dây giống như các mạch điện tử, do đó bạn có thể có các mạch thực sự song song, không giống như trong một vi điều khiển nơi bộ xử lý nhảy từ một đoạn mã sang một mã khác để mô phỏng song song đủ tốt. Tuy nhiên, vì các GPU đã được thiết kế cho các tác vụ song song, việc viết mã tuần tự không dễ dàng như trong vi điều khiển.

Ví dụ: thông thường nếu bạn viết bằng mã giả "hãy để C là A XOR B", trên một đồ họa sẽ được dịch thành "xây dựng một cổng XOR với các khối gạch lego chứa (bảng tra cứu và chốt) và kết nối A / B làm đầu vào và C là đầu ra "sẽ được cập nhật mỗi chu kỳ xung nhịp bất kể C có được sử dụng hay không. Trong khi đó trên một vi điều khiển sẽ được dịch thành "hướng dẫn đọc - đó là XOR của các biến tại địa chỉ A và địa chỉ B của RAM, kết quả là lưu trữ tại địa chỉ C. Tải các thanh ghi đơn vị logic số học, sau đó yêu cầu ALU thực hiện XOR, sau đó sao chép thanh ghi đầu ra tại địa chỉ C của RAM ". Về phía người dùng, cả hai hướng dẫn là 1 dòng mã. Nếu chúng ta thực hiện điều này, THÌ một cái gì đó khác, trong HDL, chúng ta sẽ phải xác định cái được gọi là Quy trình để thực hiện các chuỗi một cách giả tạo - tách biệt với mã song song. Trong khi đó trong một vi điều khiển không có gì để làm. Mặt khác, để đưa "song song" (điều chỉnh vào ra thực sự) ra khỏi một vi điều khiển, bạn sẽ cần phải xử lý các luồng không tầm thường. Cách làm việc khác nhau, mục đích khác nhau.

Tóm tắt:

ASIC vs FPGA: cố định, đắt hơn cho số lượng sản phẩm nhỏ (rẻ hơn cho khối lượng lớn), nhưng tối ưu hóa hơn.

ASIC vs vi điều khiển: chắc chắn giống như so sánh một công cụ với một cái búa.

FPGA và vi điều khiển: không được tối ưu hóa để xử lý mã tuần tự, nhưng cũng có thể thực hiện các tác vụ thực sự song song rất dễ dàng. Nói chung, các GPU được lập trình ở HDL, vi điều khiển trong C / hội

Bất cứ khi nào tốc độ của các tác vụ song song là một vấn đề, hãy lấy một đồ họa, phát triển thiết kế của bạn và cuối cùng biến nó thành ASIC nếu nó rẻ hơn cho bạn về lâu dài (sản xuất hàng loạt). Nếu các tác vụ tuần tự ổn, hãy dùng vi điều khiển. Tôi đoán bạn có thể làm một IC cụ thể thậm chí nhiều ứng dụng hơn từ điều này nếu nó cũng rẻ hơn đối với bạn về lâu dài. Giải pháp tốt nhất có lẽ sẽ là một chút của cả hai.

Thật là một tìm kiếm nhanh sau khi viết này đã cho tôi: nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

FPGA vs Vi điều khiển, trên chính diễn đàn này


14

Các GPU có thể được "nối lại" bằng cách lập trình lại. Một đồ họa tải cấu hình của nó vào các ô logic có thể cấu hình của nó khi được cấp nguồn . Điều này có nghĩa là nó có thể được lập trình lại mà không có thay đổi nào đối với phần cứng.

ASIC chỉ có thể được nối lại bằng cách sửa đổi mặt nạ quang điện tại xưởng đúc silicon.

Vi điều khiển là một loại ASIC, thực thi một chương trình và có thể thực hiện những điều chung chung. Tuy nhiên, nếu bạn muốn thay đổi tập lệnh, hoặc làm điều gì đó tương tự, bạn phải sửa đổi bố cục IC silicon thực tế.


Sự khác biệt giữa một FPGA và MCU là mờ hơn. Về cơ bản, những gì một FPGA là, ở cấp độ phần cứng, là rất nhiều tế bào SRAM nhỏ, tất cả được kết nối với một ma trận dày đặc của bộ ghép kênh. Về cơ bản, một FPGA là một đống logic rời rạc có thể được "nối lại" bằng điện tử ** chỉ bằng cách lập trình lại các bộ ghép kênh và các tế bào SRAM.

Như vậy, bạn thực sự có thể triển khai MCU trong một FPGA, vì MCU chỉ là một cấu hình nhất định của các ô logic. Trên thực tế, các GPU được sử dụng rất phổ biến trong quá trình thiết kế MCU.

Một vi điều khiển là việc thực hiện một cấu hình logic nhất định. Lý do chúng tôi có là vì bằng cách thực hiện MCU trực tiếp trong silicon, tổng lượng không gian chết silicon cần thiết có thể được tối ưu hóa đáng kể, và tối ưu hóa hiệu suất nhất định có thể được thực hiện theo yêu cầu "tính chung" của một GPU. Điều này cho phép giảm chi phí sản xuất của MCU một cách đáng kể và kết quả là MCU thông thường rẻ hơn rất nhiều so với một chiếc FPGA có khả năng chứa logic tương đương.


Các GPU rất hữu ích trong các ứng dụng nhất định, bởi vì chúng có thể thực hiện các cấu trúc logic theo cách mà MCU không thể. Ví dụ: nếu bạn cần thêm X1 + Y1, X2 + Y2, X3 + Y3 và X4 + Y4, MCU sẽ phải thực hiện từng thao tác theo trình tự *. Một đồ họa đơn giản có thể có 4 ALU riêng biệt cùng một lúc , do đó, nó có thể thực hiện cùng một hoạt động trong một phần tư thời gian (giả sử hai thiết bị có tốc độ cùng tốc độ).

Đây là nơi mà các GPU (hoặc ASIC được thiết kế cho cùng một nhiệm vụ) có thể thực sự tỏa sáng, trong thực tế là bạn có thể làm nhiều việc, nhiều việc cùng một lúc , mà một quy trình đơn lẻ chỉ có thể thực hiện tuần tự.

* (lưu ý: Tôi đang bỏ qua một số thứ như SIMD ở đây)


Tôi không nghĩ rằng sự khác biệt của FPGA / ASIC là mờ nhạt; trong một đồ họa, các mạch có "dây" có thể được thay đổi hoạt động đồng thời và độc lập. MCU có số lượng lớn mạch điện mà hệ thống dây điện không thể thay đổi, hành vi của chúng được điều khiển thông qua thông tin được truy cập từng phần từ một mảng bộ nhớ lập trình. Tại bất kỳ thời điểm nào, CPU thường chỉ có thể thực hiện một thao tác từ danh sách vài nghìn đến vài tỷ lựa chọn, nhưng MCU sẽ được thiết kế sao cho việc kết hợp các hoạt động đó theo trình tự sẽ giúp thực hiện được công việc hữu ích.
supercat

Cảm ơn bạn. RẤT gần trở thành câu trả lời ... mặc dù 10 tháng sau. +1 để chế tạo đạn.
dùng58446

6

Đây là một câu hỏi hay,

Về cơ bản, bộ điều khiển vi mô và ASIC có phần cứng (thường được gọi là silicon) được đặt trong đá và không thể thay đổi. Một FPGA có thể được cấu hình để đại diện cho nhiều loại phần cứng khác nhau (điều này có thể bao gồm các bộ điều khiển vi mô).

Bạn có thể nghĩ rằng một bộ điều khiển vi mô có thể được tạo ra để làm nhiều việc khác nhau nhưng tất cả đều được thực hiện bằng cách chạy các chương trình khác nhau - phần mềm kỹ thuật nhưng đôi khi được gọi là phần sụn - bản thân phần cứng không thay đổi về cơ bản, nó hoạt động tương tự nhưng trong một thứ tự khác nhau với đầu vào khác nhau.

Các GPU thường được sử dụng để tạo ra các thiết kế được cam kết với ASIC, điểm khác biệt giữa chúng là nếu bạn muốn cập nhật hoạt động bên trong của một FPGA hoặc thêm / xóa các khối chức năng, tất cả những gì bạn cần làm là cập nhật firmware, điều này không thể được thực hiện trên ASIC vì các hoạt động bên trong đã được cam kết với silicon, nó không thể cấu hình lại được.

Vì vậy, trong ngắn hạn, với một bộ vi xử lý, bạn sử dụng cùng một phần cứng để chạy các chương trình khác nhau, với một GPU bạn đang cấu hình lại phần cứng để thực hiện các chức năng khác nhau và ASIC giống như một bộ điều khiển vi mô trong đó phần cứng không thể thay đổi nhưng thường được thiết kế để thực hiện một chức năng duy nhất cực kỳ hiệu quả.

Cả ASIC và FPGA đều có thể chứa bộ điều khiển vi mô và nếu có, bạn có thể viết chương trình cho chúng như một bộ điều khiển vi mô độc lập, một ví dụ về điều này là bộ xử lý nhúng NIOS II của Altera.

Nếu điều này vẫn còn khó hiểu, hãy cho tôi biết những gì về nó không rõ ràng và tôi sẽ làm hết sức mình để làm rõ câu trả lời của tôi.

Gipsy


3

tốt, không có một GPU nào được lập trình bởi các tín hiệu điện nếu hoạt động giống như một bộ cổng cụ thể, một số FPGA bao gồm bộ nhớ flash để lưu cấu hình này, một số không và phải được lập trình lại sau mỗi lần thiết lập lại nguồn.

Một ASIC đi ra khỏi dây chuyền sản xuất đã được cấu hình.

Lỗi FPGA có thể được sửa chữa bằng nâng cấp firmware, lỗi ASIC không thể sửa chữa về mặt kinh tế.


2

Mặc dù tên của nó, một FGPA cảm thấy rất "đặc thù của ứng dụng", vì nó phải được viết lại để thực hiện một nhiệm vụ mới và khác biệt.

Điều đó trái ngược với ý nghĩa của "ứng dụng cụ thể". Bạn có thể sử dụng một FPGA cho nhiều ứng dụng bằng cách tua lại nó. Bạn không thể thay đổi ASIC, vì vậy nó chỉ có thể được áp dụng cho một tác vụ (tác vụ đó có thể đang thực hiện một vi điều khiển).

Mặc dù, trong trường hợp tua lại một đồ họa, tất cả các phần cứng cần thiết phải có mặt.

Không chắc điều này có nghĩa là gì. Thông thường có một giao diện phần mềm để lập trình lại một đồ họa. Đó là một ASIC yêu cầu hàng triệu [đơn vị tiền tệ] phần cứng.

Các phần mềm của FPGA có nghĩa là có thể lập trình được, nhưng đó không phải là ý nghĩa của Vi điều khiển?

Một vi điều khiển cho phép bạn lập trình phần mềm tuần tự cho một phần cứng cố định. Giống như một máy tính bình thường, nhưng rất nhỏ và tài nguyên bị hạn chế. Một FPGA cho phép bạn lập trình bất kỳ phần cứng nào bạn muốn bằng HDL.

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.