web-dev-qa-db-ja.com

Cライクな言語でFPGAをプログラミングできますか?

大学では、C言語のような言語でFPGAをプログラミングしました。ただし、通常はFPGAをVerilogまたはVHDLでプログラムすることも知っています。これはデザイナーの選択ですか?もしそうなら、パフォーマンスの欠点は何ですか?

FPGAはVHDLではなくC言語のような言語でプログラミングするのが理想的です。

ザイリンクスのVirtex-5を入手しようと思っていたのですが、何か違いがあるのですか?

27
mezamorphic

短い答えは「はい、確かに」です。

これは、FPGAおよびFPGAベースのシステム用のCコンパイラの優れた調査です。

Cからハードウェアへのコンパイラ(HLL合成)

パフォーマンスの欠点と考慮事項は、Cとハードウェア設計言語(HDL)の使用ではなく、システムアーキテクチャと通信帯域幅に見られます。 CとHDLを使用する場合の考慮事項は、パフォーマンスではなく、プログラミング時間とソフトウェアメンテナンスの問題にあります。

12
David Pointer

FPGAはプロセッサではありません。 Cはプロセッサ用に設計された言語です。

はい、C to FPGAコンパイラがあります。

彼らは良い考えですか?私が「いいえ」と言います。最終的に作成するデザインは、(私が見たものから)通常はCのコード行ごとに1つの状態を持つステートマシンです。アルゴリズム。そのコードまたは他の種類のチューリングマシンを配置して、コードを実行します。

これはnot FPGA設計に熟練した誰かが一般的に問題に取り組む方法です。それは遅く、潜在的にゲートを空腹にして物事を行う方法です。

英語がFortranよりも小説を書くためのより良い言語であるのと同じように、VHDLとVerilogはCよりも論理回路を記述するためのより良い言語です。

FPGAの使用を真剣に考えている場合は、論理回路を記述するように設計された言語を使用してください。それは急な学習曲線かもしれませんが、結果は私見よりはるかに良くなります。

28
Paul S

ソフトプロセッサコアinside FPGAロジックをインストールし、仮想プロセッサ内でCコードを実行できます。ザイリンクスには、Microblaze(ライセンス済み)コアとPicoblaze(無料)コアがあります。他にも実装できるソフトコアがあります(MIPS、x86、8051など)。

ただし、コアは実際のコアと比較して非常に遅いため、これは主に「ハック」と見なされます。そして、私はany CからFPGAへの変換は、最終的にはソフトコアを実行するように臭いを帯び始め、FPGAでの実行に値する効率を提供しないと思います。 FPGAはチューリングマシンではなく、論理ゲートの袋です。ゲートからチューリングマシンを構築できますが、ゲートの袋を購入したのはそのためではありません。

そのようなものは、レゴのバッグを購入し、レンガからハンマーと釘のセットを構築するようなものです。それはうまくいくかもしれませんが、釘を打つためのハンマーを購入した方がいいですし、レゴで城、宇宙船、消防署を建てた方がいいです。

6
Mark Lakata

確かに、Cなどの高水準言語を使用してハードウェア回路を推測(不完全な記述を使用して解決)できるコンパイラーがいくつかあります。「C-to-gates」は、実際に人気の流行語です。宣伝するイメージ企業は、使用する言語がソフトウェアの説明に使用した言語であれば、プログラマーはハードウェアを作成できることを宣伝しています。これはいくつかの理由で信じられないほど間違っています。その主なものは、Cなどの言語が想定する実行モデルとハードウェア記述言語の間の基本的な違いです。

実例となる例:Cは、ランダムにアクセスできる大規模な線形アドレスメモリを中心に想定しています。これは、ハードウェアにはほとんど当てはまりません。 C-to-gatesコンパイラは、記述されたプログラムのbehaviorを解釈し、同じ動作のハードウェア回路を設計するという困難な課題に直面しています。

Cライクな言語は限られたユースケースで優れた生産性ツールですが、これらのコンパイラでは、Cに精通している場合、ハードウェアの設計方法を突然知ることはできません。

お役に立てれば、

2
Ilia Lebedev

SystemCを見てください。 Cベースの言語を使用する利点は豊富です。特に、システム設計の観点からは、他のソフトウェア(ファームウェアやその他の低レベルのもの)がCで記述されていることを利用できます。したがって、ソフトウェアチームは、RTLコードに対して本当に早い段階でテストできます。

2011年、ザイリンクスはSystemCを使用した高レベルの合成を開発したAutoESL社を買収しました。ザイリンクスは、製品「AutoESL」のリリース時にこの名前を再利用しました。特に、新しい回路Zynqでは、デュアルコアARM= Cortex A9がFPGAロジックと共に埋め込まれており、これはおそらくシステム開発のための強力なツールになるでしょう。

2
Karl Lunden

OPの質問に最も近いと思われるものを追加したいと思います。 Cライクな言語(Cとは異なります)を探している場合は、必ず Synflow を確認してください。アイデアは、VHDL/Verilogの学習曲線がなく、オーバーヘッドのない、より迅速に設計できるモダンな言語を持つことです。また、無料でオープンソースです!

開示:私はSynflowの共同創設者です:-)

2

Cからハードウェアへのテクノロジを確認すると、Cコードを記述して、VHDLまたはVerilogにコンパイル/変換できます。 この投稿 はいくつかのコンパイラをリストしています。自分で使ったことがないので、使ったことがありません。お役に立てれば!

1
Carlito

Handel Cを使用したと思います。Cのサブセットです。私が知っている限りでは、結果はあまり最適化されていません。 VerilogとVHDLでは、さらに最適化できます。これは、数年前の私のHandel Cでの経験に基づいて言っています

1
Josnidhin

多くのプログラマーがJavaの代わりにアセンブリを作成していた(そして場合によってはそうする)のと同じ理由で、多くの設計者は高水準言語ではなくVHDL/Verilogを作成します。低レベルでリソースの使用とパフォーマンスを調整できます。 VHDLとVerilogはどちらも、ハードウェアを設計するために設計された言語です。 Cはそうではありません。十分な時間が与えられれば、高級言語プログラムよりも優れたプログラムを常にVHDL/Verilogで作成できます。 HLLが提供するのは、1)開発の迅速化、2)メンテナンスの容易さ、および3)移植性の向上です。

既存の高水準プログラミング言語(Cは1つ)をFPGAターゲットにコンパイルするための多くの取り組みがありました。それらのほとんどは、実際には、最適化されたコードを生成します。たとえば、インパルスCはCのサブセットであり、プロセスレベルの並列処理をサポートするいくつかのアドオンライブラリに加えて、命令レベルの並列処理のためにC入力を最適化するコンパイラーも備えています。ループをパイプライン化し、特定の操作を、基になるFPGAファミリが提供することがわかっている高性能ハードウェアプリミティブにマップします(完全な情報開示:Impulse Cツールチェーンの構築を支援しました)。

Cからハードウェアへの環境 カーリートとデビッドポインターのリンク先のリストは、かなり網羅的です。ザイリンクスVirtex-5はそれらの多くでサポートされており、主要ベンダーの最近のFPGAファミリを使用している場合は、ハードウェアの選択に問題はありません。一部のHLL環境は、組み込み(またはソフトコア)組み込みCPUを他よりもサポートしています。

1
rkb