Từ C đến Silicon: Làm thế nào để triển khai giải pháp phần mềm / phần sụn như phần cứng?


13

Trước câu hỏi này , tôi đã tự hỏi liệu có một quy trình khá chuẩn để biến một giải pháp phần mềm thành một triển khai phần cứng hay không. Tha thứ cho tôi và trí tưởng tượng của tôi, nhưng liệu có một trình biên dịch có thể lấy chương trình C và biên dịch nó theo sơ đồ của bóng bán dẫn, điện trở, v.v. hoặc thậm chí có thể là PCB nổi tiếng?

Tôi nhận ra rằng tôi có thể nhìn vào kịch bản này từ quan điểm sai lầm. Trong lịch sử từ kinh nghiệm của riêng tôi, thông thường bạn có một số phần cứng mà ai đó đã triển khai như một giải pháp phần mềm (nghĩ mô phỏng phần cứng). Liệu khái niệm này ngược lại thậm chí tồn tại? Làm thế nào để các công ty lớn hơn làm điều đó như phần mềm và định tuyến IP phần cứng?


Xem thêm "tại sao tôi không thể tự động biến chương trình C đơn lẻ của mình thành đa luồng?"
pjc50

@ pjc50: Tôi có thể thấy "tại sao tôi không thể tự động làm cho chương trình C đơn lẻ của mình được đa tuyến?" ?
davidcary

Tôi không có một ví dụ cụ thể trong đầu, nhưng đó là một câu hỏi tôi đã thấy mọi người hỏi trước đây. Nó cũng liên quan đến phần cứng về bản chất là song song trong khi phần mềm là "tuần tự" một cách tự nhiên theo cách mọi người nghĩ về nó và viết chương trình.
pjc50

Câu trả lời:


11

Không, không có giải pháp tiêu chuẩn để biến phần mềm thành phần cứng. Nói chung, việc sử dụng phần mềm không được viết với triển khai phần cứng có thể dễ dàng chuyển đổi thành phần cứng mà không gây lãng phí và thiếu hiệu quả. Thông thường, điều tốt nhất để làm là chỉ cần tạo ra một con chip có CPU và ROM-- và đặt phần mềm vào ROM.

Trong những năm qua, đã có các trình biên dịch lấy mã "C-Like" và biên dịch nó thành phần cứng - giống như cách VHDL hoặc Verilog có thể được biên dịch thành phần cứng. Nhưng điều quan trọng là nó giống như "C-Like" chứ không phải C. Bạn vẫn không thể lấy, ví dụ, chương trình C / C ++ tính toán PI và chuyển đổi nó thành phần cứng tính toán PI. Hầu hết các ngôn ngữ C-Line này đã biến mất hoặc không được sử dụng trong bất kỳ số nào. Một trong những phiên bản phổ biến hơn của điều này là SystemC , nhưng điều quan trọng cần lưu ý là nó không phải là C / C ++ và không hữu ích cho việc chung chung "hãy viết phần mềm và sau đó biên dịch nó thành phần cứng". Bạn vẫn cần "viết một số phần cứng, cũng có thể được biên dịch thành phần mềm".

Các bộ chuyển mạch và bộ định tuyến thường có phần cứng, hầu hết các chức năng của bộ định tuyến quan trọng thường được sử dụng và tăng tốc (Tìm kiếm nội dung trong bảng định tuyến, quản lý hàng đợi, v.v.) trong phần cứng và sau đó sử dụng CPU để thực hiện tất cả các chức năng không phổ biến (xử lý các trường hợp ngoại lệ, lỗi, cập nhật bảng định tuyến, v.v.). Theo nhiều cách, điều này tương tự như cách thức hoạt động của CPU hiện đại, trong đó các opcodes phổ biến nhất được thực hiện trong phần cứng và đôi khi một số opcode thực sự được thực hiện trong phần mềm (ví dụ: hướng dẫn dấu phẩy động khi không có FPU).


Không chỉ là C ++ thực tế của SystemC, đây chỉ là một thư viện C ++. Bạn có thể sử dụng bất kỳ mã C ++ thông thường nào bạn muốn với SystemC. Điều đó nói rằng, SystemC không liên quan nhiều đến việc tự động tạo phần cứng. Nó hướng nhiều hơn vào các hệ thống mô phỏng, giúp đưa ra quyết định kiến ​​trúc và cho phép các nhóm phần mềm bắt đầu trước khi phần cứng có sẵn.
Theran

Điều này thực sự giúp tôi hiểu tại sao có phần cứng cụ thể thực hiện các tác vụ cụ thể.
Chad Harrison

Có nhiều trình biên dịch C sang HDL khác được thiết kế cho mục đích này.
Anderson Green

5

Thứ gần nhất sẽ là Trình biên dịch C-to-Phần cứng (C2H) của Altera . Nó có thể làm một số điều bạn đang đề xuất. Nhưng có những lời thách thức thách thức. Bạn không thể biến bất kỳ mã C nào thành phần cứng, bạn cũng không muốn. Nhưng các chức năng cụ thể hoạt động khá tốt và bạn có thể thấy hiệu suất tăng đáng kể.

Thông thường, bạn sẽ triển khai bộ xử lý nhẹ NIOS II thành một Altera FPGA. Sau đó, bạn sẽ viết một số mã ANSI C cho nó giống như bất kỳ bộ xử lý nào khác. Sau đó, nói một trong các hàm C bạn đã viết liên quan đến một số phép toán nặng có lợi cho hiệu năng-khôn ngoan từ một số thực thi song song. Bạn gọi trình biên dịch C2H, nói "Thực hiện trong phần cứng" và về cơ bản nó sẽ biến chức năng đó thành một thiết bị ngoại vi của bộ xử lý nhẹ NIOS II.

Dưới đây là một ví dụ về mã hóa tính toán Mandelbrot trong ANSI C và sau đó triển khai nó trong phần cứng:

Thuật toán Mandelbrot được tăng tốc của trình biên dịch C2H giúp cải thiện tốc độ ít nhất 60 lần so với thuật toán tương tự chạy trên bộ xử lý Nios II nhanh nhất sử dụng tối ưu hóa trình biên dịch cấp 2 (-O2). Sự gia tăng tốc độ này là do sự song song và tốc độ lặp nhanh mà phần cứng có thể cung cấp, điều không thể có được từ một đơn vị xử lý đa năng.

Quay trở lại ví dụ của bạn, bộ xử lý NIOS II có thể chạy Linux. Và một số chức năng nhất định cần thiết để thực hiện các tác vụ định tuyến có thể được hưởng lợi từ việc tăng tốc phần cứng. Nó rất có thể sẽ hoạt động tốt hơn một bộ định tuyến phần mềm thuần túy. Nhưng nó sẽ không bao giờ tiếp cận hiệu suất của các ASIC chuyên dụng được thiết kế đặc biệt.


1
Xilinx có một công cụ tương đương được gọi là Vivado HLS (Tổng hợp cấp cao), trước đây gọi là AutoESL. Hãy cẩn thận tương tự: nó thực hiện tốt công việc chuyển đổi mã sang RTL nếu đó là loại mã dễ dàng tự động chuyển đổi sang RTL.
Theran

@Theran Tôi không biết rằng Xilinx có sản phẩm cạnh tranh. Tôi sẽ phải kiểm tra xem. Cảm ơn!
embedded.kyle

2

Bạn đề cập đến "C to Silicon" trong tiêu đề của bạn và đề cập đến các sản phẩm cấp bảng trong cơ thể. Tôi sẽ chỉ tập trung vào một phần của phương trình tồn tại -> dòng chảy thiết kế "C to Silicon". Bản thân C không phù hợp tự nhiên cho việc mô tả phần cứng vì nó thiếu một số hỗ trợ cơ bản cho sự song song vốn có của phần cứng, cần phải ngăn chặn các điều kiện chủng tộc và các vấn đề khác, và nó không có ý nghĩa đặc biệt trong việc thể hiện các khái niệm này. Hoặc gần như không nhiều như Verilog và VHDL.

Mã C có thể tổng hợp (nghĩa là có thể được hiển thị theo mô tả phần cứng) và ở đây phần cứng = logic kỹ thuật số, sẽ không chiến thắng bất kỳ cuộc thi mã hóa nào được đánh giá bởi các nhà phát triển phần mềm.

Dưới đây là danh sách một số nhà cung cấp đáng chú ý cung cấp các công cụ C -> Silicon cho đám đông dòng chảy ASIC.

  • Chất kết dính Forte

  • Máy xúc lật

  • BlueSpec C

  • Synopsys Synphony (ví dụ: Synfora)

  • Cadence C-to-Silicon


1

Biến phần mềm thành phần cứng không phải là một nhiệm vụ hoàn toàn nhỏ nếu bạn mong đợi phần cứng hợp lý. Phần cứng có xu hướng cần kiến ​​trúc nhiều hơn để quản lý cẩn thận việc sử dụng tài nguyên liên quan đến diện tích / chi phí. Phải nói rằng, có một số công cụ lấy C ở một số dạng, cho phép bạn thêm thông tin cụ thể về phần cứng (ví dụ: giao diện phần cứng là gì?) Và tạo phần cứng được tối ưu hóa. Người dùng thành thạo có thể dễ dàng nhận được kết quả tốt hơn trong thời gian ngắn hơn so với RTL được mã hóa bằng tay.

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.