Dari C ke Silicon: Bagaimana menerapkan solusi perangkat lunak / firmware sebagai perangkat keras?

13

Mengingat pertanyaan ini , saya bertanya-tanya apakah ada proses yang cukup standar untuk mengubah solusi perangkat lunak menjadi implementasi perangkat keras. Maafkan aku dan imajinasiku, tetapi akankah ada kompiler yang dapat mengambil program C dan mengompilasinya dalam bentuk skema transistor, resistor, dll. Atau mungkin bahkan PCB yang terkenal?

Saya menyadari bahwa saya bisa melihat skenario ini dari perspektif yang salah. Secara historis dari pengalaman saya sendiri, biasanya Anda memiliki beberapa perangkat keras yang telah diimplementasikan seseorang sebagai solusi perangkat lunak (pikirkan emulasi perangkat keras). Apakah konsep ini secara terbalik bahkan ada? Bagaimana perusahaan-perusahaan besar ini melakukannya seperti perutean IP perangkat lunak vs perangkat keras?

Chad Harrison
sumber
Lihat juga "mengapa saya tidak dapat secara otomatis membuat program C singletheaded saya multithreaded?"
pjc50
@ pjc50: Di mana saya dapat melihat "mengapa saya tidak dapat secara otomatis membuat program C singletheaded saya multithreaded?" ?
davidcary
Saya tidak memiliki contoh spesifik dalam pikiran, tetapi ini adalah pertanyaan yang pernah saya lihat orang bertanya. Ini juga terkait dengan perangkat keras yang secara intrinsik paralel sementara perangkat lunak "secara alami" berurutan dalam hal cara orang berpikir tentang hal itu dan menulis program.
pjc50

Jawaban:

11

Tidak, tidak ada solusi standar untuk mengubah perangkat lunak menjadi perangkat keras. Secara umum, mengambil perangkat lunak yang tidak ditulis dengan implementasi perangkat keras dalam pikiran tidak dapat dengan mudah dikonversi menjadi perangkat keras tanpa pemborosan besar dan ketidakefisienan. Biasanya, hal terbaik untuk dilakukan adalah membuat chip yang memiliki CPU dan ROM - dan meletakkan perangkat lunak dalam ROM.

Selama bertahun-tahun telah ada kompiler yang akan mengambil kode "C-Like" dan mengkompilasinya menjadi perangkat keras - banyak cara yang sama seperti VHDL atau Verilog dapat dikompilasi ke dalam perangkat keras. Tetapi kuncinya adalah "C-Like", dan bukan C. Anda masih tidak dapat mengambil, misalnya, program C / C ++ yang menghitung PI dan secara ajaib mengubahnya menjadi perangkat keras yang menghitung PI. Sebagian besar bahasa C-Line ini telah hilang, atau tidak digunakan dalam angka apa pun. Salah satu versi yang lebih populer dari ini adalah SystemC , tetapi penting untuk dicatat bahwa itu bukan C / C ++ dan tidak berguna untuk generik "mari menulis perangkat lunak dan kemudian mengompilasinya menjadi perangkat keras". Anda masih perlu "menulis beberapa perangkat keras, yang mungkin juga dikompilasi ke dalam perangkat lunak".

Switch dan router biasanya memiliki perangkat keras yang melakukan sebagian besar fungsi router kritis yang sering digunakan dan mempercepat (Mencari hal-hal dalam tabel routing, mengelola antrian, dll.) Dalam perangkat keras dan kemudian menggunakan CPU untuk melakukan semua fungsi yang tidak terlalu umum (menangani pengecualian, kesalahan, pembaruan tabel routing, dll). Dalam banyak hal ini mirip dengan cara kerja CPU modern, di mana opcode yang paling umum dilakukan dalam perangkat keras dan kadang-kadang beberapa opcodes benar-benar diimplementasikan dalam perangkat lunak (misalnya, instruksi floating point ketika FPU tidak ada).


sumber
Tidak hanya SystemC aktual C ++, itu hanya perpustakaan C ++. Anda dapat menggunakan kode C ++ biasa yang Anda suka dengan SystemC. Yang mengatakan, SystemC tidak ada hubungannya dengan secara otomatis menghasilkan perangkat keras. Ini lebih berorientasi pada simulasi sistem, membantu membuat keputusan arsitektur, dan memungkinkan tim perangkat lunak untuk memulai sebelum perangkat keras tersedia.
Theran
Ini sangat membantu saya memahami mengapa ada perangkat keras khusus yang melakukan tugas tertentu.
Chad Harrison
Ada banyak kompiler C to HDL lainnya yang dirancang untuk tujuan ini.
Anderson Green
5

Hal terdekat adalah Kompiler C-to-Hardware (C2H) Altera . Ini dapat melakukan beberapa hal yang Anda sarankan. Tetapi ada beberapa peringatan yang menantang. Anda tidak dapat mengubah sembarang kode C menjadi perangkat keras, juga tidak ingin. Tetapi fungsi spesifik bekerja dengan baik dan Anda dapat melihat peningkatan dramatis dalam kinerja.

Biasanya Anda akan mengimplementasikan prosesor softcore NIOS II menjadi FPGA Altera. Anda kemudian akan menulis beberapa kode ANSI C untuk itu seperti yang Anda lakukan pada prosesor lain. Lalu katakan salah satu fungsi C yang Anda tulis melibatkan beberapa matematika berat yang akan menguntungkan kinerja dari beberapa eksekusi paralel. Anda memanggil kompiler C2H, katakan "Implementasikan dalam Perangkat Keras" dan pada dasarnya mengubah fungsi itu menjadi periferal prosesor softcore NIOS II.

Berikut adalah contoh pengkodean perhitungan Mandelbrot di ANSI C dan kemudian mengimplementasikannya dalam perangkat keras:

Algoritma Mandelbrot yang dipercepat oleh kompiler C2H menghasilkan peningkatan kecepatan setidaknya 60x dibandingkan dengan algoritma yang sama yang berjalan pada prosesor Nios II tercepat menggunakan optimasi tingkat kompiler 2 (-O2). Peningkatan kecepatan ini disebabkan oleh paralelisme dan kecepatan iterasi cepat yang dapat disediakan perangkat keras, yang tidak mungkin dilakukan oleh unit pemrosesan tujuan umum.

Kembali ke contoh Anda, prosesor NIOS II dapat menjalankan Linux. Dan fungsi-fungsi tertentu yang akan diperlukan untuk melakukan tugas-tugas routing dapat mengambil manfaat dari akselerasi perangkat keras. Kemungkinan besar akan melakukan lebih baik daripada router perangkat lunak murni. Tapi itu tidak akan pernah mendekati kinerja ASIC khusus yang dirancang khusus.

tertanam.kyle
sumber
1
Xilinx memiliki alat yang sebanding yang disebut Vivado HLS (sintesis tingkat tinggi), yang sebelumnya dikenal sebagai AutoESL. Peringatan serupa berlaku: itu melakukan pekerjaan yang baik mengkonversi kode ke RTL jika itu adalah jenis kode yang mudah dikonversi secara otomatis ke RTL.
Theran
@Theran saya tidak menyadari bahwa Xilinx memiliki produk yang bersaing. Saya harus memeriksanya. Terima kasih!
embedded.kyle
2

Anda menyebutkan "C to Silicon" dalam judul Anda dan menyebutkan produk tingkat papan di tubuh. Saya hanya akan fokus pada bagian persamaan yang ada -> "C to Silicon" mengalir desain. C sendiri tidak cocok untuk deskripsi perangkat keras karena tidak memiliki dukungan mendasar untuk paralelisme yang melekat pada perangkat keras, kebutuhan untuk mencegah kondisi balapan dan masalah lainnya, dan itu tidak terlalu ekspresif untuk dapat mewakili konsep-konsep ini. Atau tidak sebanyak Verilog dan VHDL.

Kode C yang dapat disintesis (yaitu dapat diberikan ke deskripsi perangkat keras) dan di sini perangkat keras = logika digital, tidak akan memenangkan kontes pengkodean yang dinilai oleh pengembang perangkat lunak.

Berikut ini adalah daftar dari beberapa vendor terkemuka yang memasok C -> Silicon tools untuk ASIC flow crowd.

  • Forte Cynthesizer

  • Mentor Catapult

  • BlueSpec C

  • Synopsys Synphony (ex- Synfora)

  • Irama C-ke-Silikon

placeholder
sumber
1

Mengubah perangkat lunak menjadi perangkat keras bukanlah tugas yang sepele jika Anda mengharapkan perangkat keras yang masuk akal. Perangkat keras cenderung membutuhkan lebih banyak arsitek untuk mengelola penggunaan sumber daya secara hati-hati yang terkait dengan area / biaya. Karena itu, ada sejumlah alat yang mengambil C dalam beberapa bentuk, memungkinkan Anda untuk menambahkan informasi spesifik perangkat keras (misalnya, apa antarmuka perangkat keras?), Dan menghasilkan perangkat keras yang dioptimalkan. Pengguna yang mahir dapat dengan mudah mendapatkan hasil yang lebih baik dalam waktu kurang dari RTL berkode tangan.

Brett Cline
sumber