FPGA vs Vi điều khiển [đóng]


36

Tôi đã làm việc trong gia đình Arduino (cụ thể là Sanguino), đã chế tạo một vài thiết bị đơn giản và một phototrope đơn giản. Do đó, tôi khá thoải mái với các bộ vi điều khiển - cụ thể là của Atmel. Tôi tò mò muốn biết làm thế nào để các GPU khác với các bộ vi điều khiển tiêu chuẩn. Tôi đến từ một nền tảng kỹ thuật (lập trình C / C ++) và do đó sẽ thích các câu trả lời kỹ thuật. Chỉ cần lưu ý rằng tôi là người mới (liên quan đến trải nghiệm của tôi) trong lĩnh vực điện tử. :)

Tôi đã trải qua truy vấn này và nó rất tốt nhưng tôi đang tìm kiếm chi tiết sâu hơn.

Cảm ơn! Sushrut.


Phụ lục - Có bất kỳ ví dụ hay nào trong thế giới thực sử dụng kiến ​​trúc lai, nghĩa là, kết hợp fpga với vi điều khiển không?
Sushrut J Mair

Sushrut J Mair - Nói chung khi bạn có một FPGA và cần một Micro, micro sẽ được triển khai trong FPGA.
Sói Connor

Có, Tên giả, đồng ý. Tuy nhiên, tôi đang tìm kiếm bất kỳ trường hợp thực tế nào trong đó cả hai công nghệ của FPGA và MCU đều được sử dụng để thiết kế một hệ thống. Ý tưởng là phần FPGA của thiết kế được sử dụng để thực hiện h / w 'có thể phát triển' đáp ứng và biến đổi theo các thay đổi đầu vào cho hệ thống trong khi xử lý logic cốt lõi được MCU thực hiện.
Sushrut J Mair

Câu trả lời:


48

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.


Đây là thông tin tốt, cảm ơn. Tôi đã nghe nói về trình biên dịch C / C ++ sang HDL. Bạn đã thử chúng chưa?
Sushrut J Mair

Họ ... ổn. Đối với một khối logic duy nhất, nó không quá tệ. Nhưng tôi sẽ không viết toàn bộ thiết kế thông qua trình biên dịch đó. Chúng không quá hiệu quả vì các ngôn ngữ quá khác biệt ... bạn phải sử dụng các quy ước đặc biệt, chúng không lấy bất kỳ mã ANSI C cũ nào.
ajs410

Cảm ơn, điều này rất hữu ích. Tôi đã đặt mua bộ phát triển XP2 Brevia của Lattice S bán dẫn. Tôi dự định dùng thử một số trình biên dịch HDL sang C một khi tôi cảm thấy thoải mái với các khái niệm thiết kế đồ họa cơ bản.
Sushrut J Mair

Chỉ thấy câu trả lời cho phụ lục của tôi trong truy vấn ban đầu. Cảm ơn - vì vậy, bạn đang nói rằng thực tế mà nói (ít nhất là với công nghệ ngày nay), một kiến ​​trúc lai của MCU tiêu chuẩn + một đồ họa có rất ít giá trị gia tăng để thực sự có thể sử dụng được trong các tình huống trong thế giới thực?
Sushrut J Mair

Tuyệt vời. Cảm ơn ajs410. Tôi hy vọng sẽ dành một vài tuần để khởi động bản thân vào fpga trước khi có được khả năng kết hợp thú vị!
Sushrut J Mair

10

"các ví dụ trong thế giới thực ... kết hợp các GPU với vi điều khiển?"

Về nguyên tắc, một mình một chiếc GPU đủ lớn có thể làm bất cứ điều gì mà một bộ vi xử lý cộng với một bộ vi điều khiển có thể làm - có lẽ bằng cách thực hiện một CPU mềm bên trong bộ đồ họa. Trong thực tế, một mức hiệu suất nhất định thường có chi phí bộ phận thấp hơn và yêu cầu công suất thấp hơn khi được thực hiện với một bộ vi điều khiển cộng với một bộ vi điều khiển riêng biệt so với chỉ riêng các bộ xử lý (chỉ riêng MCU). Dưới đây là một vài trong số các thiết bị nổi tiếng hơn có cả GPU và vi điều khiển trên bo mạch:

  • Máy ảnh Elphel ; Elphel Project Wiki có một cổng Xilinx (R) Spartan 3e 1200K và bộ xử lý ETRAX FS chạy GNU / Linux.
  • Các TS-7500 có 5000 LUT Lattice FPGA và một 250MHz Cavium ARM9 CPU có thể chạy Linux.
  • Bảng Balloon có Xartanx Spartan FPGA và CPU ARM
  • Một số Linux SBC của Teeny weeny bao gồm cả một GPU và CPU
  • Các dự án Armadeus wiki tài liệu một bảng vài bảng với cả một Xilinx Spartan-3 FPGA và một CPU 400 MHz ARM9.
  • Bảng mạch tiện dụng Blackfin bao gồm cả Xilinx Spartan 3e và bộ xử lý tương tự 600 MHz Blackfin® ADSP-BF537. (Nó không có MMU, vì vậy nó không thể chạy Linux đầy đủ, nhưng nó có thể chạy uClinux).
  • Các "Minimig" (mini Amiga) bao gồm một Xilinx Spartan-3 FPGA, một CPU M68000 và PIC nhỏ MCU như đóng vai trò điều khiển đĩa.

4

Thông thường, các GPU được sử dụng đặc biệt để thực hiện các tác vụ mà vi điều khiển không thể thực hiện một cách hiệu quả, chẳng hạn như các hoạt động có độ trễ thấp hoặc song song cao, hoạt động trong nhiều miền đồng hồ hoặc thực hiện logic tùy chỉnh ở tốc độ phần cứng. Như vậy, họ sẽ thực hiện công việc nặng nhọc và bạn hiếm khi cần MCU làm trung tâm của thiết kế - họ có thể được chuyển đến các vị trí quản lý, chẳng hạn như tải dòng bit cấu hình. Một ví dụ về điều này là PIC hoặc ARM trong Minimig , thực hiện giao diện lưu trữ.

Một số sản phẩm làm mờ các dòng, tuy nhiên. Vài ví dụ:

  1. Các GPU lớn hơn có xu hướng tích hợp CPU cứng (các dự án lớn hơn thường cần chúng), giống như chúng có RAM và các khối nhân
  2. Một số bộ vi điều khiển nhắm đến các hoạt động song song (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Một số chip được thiết kế dưới dạng giống lai (Cypress PSoC, Atmel FPSLIC)

Xuất phát từ một nền tảng lập trình bắt buộc, đây là một sự điều chỉnh để thiết kế phần cứng vì bạn cần đạt được những lợi thế của các GPU. Tuy nhiên, bạn sẽ tìm thấy kinh nghiệm hữu ích ở nơi khác.


1

Thực sự không có bất kỳ sự khác biệt nào giữa một MCU như một AVR và một được lập trình thành một FPGA. Trang web OpenCores có mã VHDL cho một AVR có thể được sử dụng trong một FPGA. Bạn có thể nghiên cứu nó và xem nó hoạt động như thế nào, và thậm chí tự mình thử nó trong một trình giả lập mà không cần mua một bảng mạch phù hợp.


1
Thường thì tôi thấy rằng các GPU phải chạy ở tốc độ xung nhịp chậm hơn cho cùng một MCU, nếu không chúng sẽ đắt hơn đáng kể. Trong trường hợp đắt hơn, bạn có thể dễ dàng thực hiện phần cứng bổ sung giữa bộ điều khiển và các chân ngoài, thường khá đáng giá.
Kortuk

Nếu dù sao cũng cần một đồ họa trong hệ thống, MCU là "miễn phí".
Leon Heller

1

Vi điều khiển là các mạch kỹ thuật số thực hiện các lệnh từ bộ nhớ chương trình của nó nối tiếp nhau một lệnh. Mạch phần cứng kỹ thuật số của vi điều khiển được cố định và các kết nối giữa các cổng khác nhau bao gồm mạch kỹ thuật số là vĩnh viễn và được khắc trên silicon. Trường hợp như các GPU có thể được coi là một nhóm các cổng kỹ thuật số (trong thực tế mặc dù hiện tại thay thế) có các kết nối có thể lập trình được. Bây giờ bất kỳ mạch kỹ thuật số (thậm chí một vi điều khiển) có thể được thực hiện trên fpga bằng cách lập trình các kết nối.

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.