Cからシリコンへ:ソフトウェア/ファームウェアソリューションをハードウェアとして実装する方法


13

この質問に照らして、ソフトウェアソリューションをハードウェア実装に変えるためのかなり標準的なプロセスがあるかどうか疑問に思っていました。私と私の想像を許してください。しかし、Cプログラムを取り込んで、トランジスター、抵抗器などの回路図、またはよく知られているPCBの観点からコンパイルできるコンパイラーはありますか?

このシナリオを間違った視点から見ている可能性があることに気付きました。歴史的に、私自身の経験から、通常、誰かがソフトウェアソリューションとして実装したハードウェアを持っています(ハードウェアエミュレーションを考えてください)。この概念は逆に存在しますか?ソフトウェアとハ​​ードウェアのIPルーティングなど、これらの大企業はどのようにそれを行っていますか?


「なぜ一重線のCプログラムを自動的にマルチスレッドにできないのですか?」も参照してください。
pjc50

@ pjc50:「一重線のCプログラムをマルチスレッドに自動的にできないのはなぜですか?」?
-davidcary

特定の例を念頭に置いているわけではありませんが、これは以前に人々が尋ねてきた質問です。また、ハードウェアは本質的に並列であり、ソフトウェアは人々がそれを考えてプログラムを書く方法に関して「自然に」シーケンシャルであることにも関連しています。
pjc50

回答:


11

いいえ、ソフトウェアをハードウェアに変換する標準的なソリューションはありません。一般的に、ハードウェア実装を念頭に置いて書かれていないソフトウェアを使用することは、大きな無駄と非効率性なしにハードウェアに簡単に変換することはできません。通常、行うのに最適なのは、CPUとROMを備えたチップを作成し、ソフトウェアをROMに入れることです。

長年にわたって、VHDLまたはVerilogをハードウェアにコンパイルできるのとほぼ同じ方法で、「C-Like」コードを取得してハードウェアにコンパイルするコンパイラがありました。しかし、重要なことは、それがCではなく「Cライク」であることです。たとえば、PIを計算し、それをPIを計算するハードウェアに魔法のように変換するC / C ++プログラムを使用することはできません。これらのC-Line言語のほとんどはなくなっているか、数字で使用されていません。これのより人気のあるバージョンの1つはSystemCです、C / C ++ではなく、一般的な「ソフトウェアを作成してからハードウェアにコンパイルする」には役に立たないことに注意することが重要です。あなたはまだ「いくつかのハードウェアを書く必要があり、それはまたソフトウェアにコンパイルされるかもしれない」。

通常、スイッチとルーターは、ハードウェアに一般的に使用される速度の重要なルーター機能(ルーティングテーブルでの検索、キューの管理など)のほとんどを実行するハードウェアを搭載し、CPUを使用してあまり一般的でない機能をすべて実行します(例外、エラー、ルーティングテーブルの更新などの処理)。多くの点でこれは、最も一般的なオペコードがハードウェアで行われ、場合によっては一部のオペコードが実際にソフトウェアで実装される最新のCPUの動作に似ています(たとえば、FPUが存在しない場合の浮動小数点命令)。


SystemCは実際のC ++であるだけでなく、単なるC ++ライブラリです。SystemCでは、好きな通常のC ++コードを使用できます。そうは言っても、SystemCはハードウェアの自動生成とはあまり関係ありません。システムをシミュレートし、アーキテクチャの決定を支援し、ハードウェアが利用可能になる前にソフトウェアチームが開始できるようにすることを重視しています。
-Theran

これは、特定のタスクを実行する特定のハードウェアがある理由を理解するのに本当に役立ちます。
チャドハリソン

この目的のために設計された他の多くのCからHDLコンパイラがあります。
アンダーソングリーン

5

最も近いものはアルテラのC-to-Hardware(C2H)コンパイラですです。あなたが提案していることのいくつかを行うことができます。しかし、反抗的な警告があります。Cコードだけをハードウェアに変えることはできませんし、そうすることもできません。しかし、特定の機能はかなりうまく機能し、パフォーマンスが劇的に向上することがわかります。

通常、NIOS IIソフトコアプロセッサをアルテラFPGAに実装します。次に、他のプロセッサと同様に、ANSI Cコードを作成します。次に、作成したC関数の1つに、いくつかの並列実行からパフォーマンスの面で恩恵を受ける重い計算が含まれるとします。「Implement in Hardware」と言うC2Hコンパイラを起動すると、基本的にその機能がNIOS IIソフトコアプロセッサの周辺機器に変わります。

ここの ANSI Cでマンデルブロ演算をコーディングした後、ハードウェアでの実装は:

C2Hコンパイラで高速化されたMandelbrotアルゴリズムは、コンパイラ最適化レベル2(-O2)を使用して最速のNios IIプロセッサで実行される同じアルゴリズムと比較して、少なくとも60倍の速度改善をもたらします。この速度の向上は、ハードウェアが提供できる並列処理と高速の反復速度のためです。これらは汎用の処理ユニットでは不可能です。

例に戻ると、NIOS IIプロセッサはLinuxを実行できます。また、ルーティングタスクの実行に必要な特定の機能は、ハードウェアアクセラレーションの恩恵を受ける可能性があります。ほとんどの場合、純粋なソフトウェアルーターよりもパフォーマンスが高くなります。しかし、特別に設計された専用ASICのパフォーマンスには決して近づきません。


1
ザイリンクスには、以前AutoESLとして知られていたVivado HLS(高位合成)と呼ばれる同等のツールがあります。同様の注意事項が適用されます。コードがRTLに自動的に変換しやすい種類のコードである場合、RTLにコードを変換するのに適しています。
Theran

@Theranザイリンクスに競合製品があることを知りませんでした。確認する必要があります。ありがとう!
embedded.kyle

2

タイトルに「C to Silicon」と記載し、本文にボードレベルの製品を記載しています。存在する方程式の一部-> "C to Silicon"デザインフローに焦点を当てます。C自体は、ハードウェアの固有の並列性に対するいくつかの基本的なサポート、競合状態やその他の問題を回避する必要性がないため、ハードウェアの説明に自然に適合しません。または、VerilogやVHDLほどではありません。

合成可能な(ハードウェア記述にレンダリングできる)Cコード(ここではハードウェア=デジタルロジック)は、ソフトウェア開発者が判断したコーディングコンテストには勝ちません。

以下は、ASICフローの群衆にC->シリコンツールを提供している注目すべきベンダーのリストです。

  • Forte Cynthesizer

  • メンターカタパルト

  • BlueSpec C

  • Synopsys Synphony(元Synfora)

  • ケイデンスC-to-Silicon


1

合理的なハードウェアを期待する場合、ソフトウェアをハードウェアに変えることは完全に簡単な作業ではありません。ハードウェアは、面積/コストに関連するリソース使用量を慎重に管理するために、より多くの設計が必要になる傾向があります。そうは言っても、Cを何らかの形で使用して、ハードウェア固有の情報(たとえば、ハードウェアインターフェイスとは何ですか)を追加し、最適化されたハードウェアを生成できるツールがいくつかあります。熟練したユーザーであれば、手作業でコーディングしたRTLよりも短時間で簡単に優れた結果を得ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.