VerilogまたはVHDL over Cを使用する動機は何ですか?


12

私はプログラミングのバックグラウンドを持っており、ハードウェアやファームウェア(せいぜい少し電子機器とArduino)をいじりすぎてはいません。

Cやアセンブリなどのプログラミング言語で、VerilogやVHDLなどのハードウェア記述言語(HDL)を使用する動機は何ですか?

この問題は選択の問題ですか?

ファームウェアがHDLで記述されているハードウェアを読むと、命令を並行して実行できるという明らかな利点があります。ただし、ファームウェアをCで書くかアセンブリで書くか(CPUが必ずしも必要ない場合、アセンブリはどのように適切ですか?)

したがって、いくつか質問があります(何かを説明することをheしないでください):

  1. ファームウェアは、実際にはHDLまたはソフトウェアプログラミング言語で記述できますか、それとも同じミッションを実行するための別の方法ですか?実世界の例が欲しいです。各オプションから生じる制約は何ですか?

  2. ソフトウェアを介したファームウェアの一般的な使用は、ハードウェアアクセラレータ(GPU、ネットワークアダプタ、SSLアクセラレータなど)で使用されることを知っています。私が理解しているように、この加速は必ずしも必要ではありませんが、推奨されるだけです(たとえば、SSLや複雑なアルゴリズムの加速の場合)。すべての場合にファームウェアとソフトウェアのいずれかを選択できますか?そうでない場合は、ファームウェアが明確かつ明確に適切であるケースに満足しています。

  3. ファームウェアのほとんどがROMまたはフラッシュに焼き付けられていることを読みました。そこにどのように表されていますか?ソフトウェアのようなビットで?もしそうなら、深遠な違いは何ですか?ファームウェアの場合、適応回路が利用可能ですか?

いくつかの仮定であちこちで間違いを犯したと思いますが、ご容赦ください。ありがとうございました!


14
プログラミング言語はソフトウェアを記述するためのものであり、ハードウェア記述言語はハードウェアを記述するためのものです。
イグナシオバスケス-エイブラムス14年

1
ファームウェアをVerilogまたはVHDLで作成するのではなく、VerilogまたはVHDLを使用して、チップの設計、FPGAのプログラミング、マザーボードの設計を行います。Cまたはアセンブリを使用してファームウェアを書き込みます。また、C / C ++を使用してマザーボードを設計することもできます。SystemCというライブラリがあり、Cコンパイラでコンパイルして設計をシミュレートするプログラムを作成できますが、SystemCコンパイラで回路にコンパイルすることもできます。
スリーブマン14年

FWIWは、Arduinoの経験があるため、Arduino用のソフトウェアの作成はファームウェアの作成と呼ばれます。ファームウェアは、完全なオペレーティングシステムとすることができます-例えばLinuxはほとんどのルータのファームウェアで使用され、Windowsは、ほとんどのATMのファームウェアで使用されている
slebetman

回答:


28

Cやアセンブリなどのプログラミング言語で、VerilogやVHDLなどのハードウェア記述言語(HDL)を使用する動機は何ですか?

Cとアセンブリは、CPUに何をすべきかを伝えるのに適した言語です。これらは、単一のステートマシンによって順次実行されるアクションを記述しています。

HDLは、デジタル回路の任意のコレクションを記述または定義するのに適した言語です。プログラミング言語ではできない方法で、並行して実行される操作を表現できます。また、プログラミング言語ではできない方法で、ブロック間のインターフェイスのタイミング制限を記述することもできます。

ファームウェアをCで書くかアセンブリで書くかについて疑問を表明する議論を見て驚きました(必ずしもCPUがない場合、アセンブリはどのように適切ですか?)

その質問では、「マイクロコントローラ用のコードを書いている場合、アセンブリまたはCまたは他の高水準言語で書く場合、本当の違いがありますか?」と尋ねられます。

彼はマイクロコントローラー(周辺機器を搭載したCPU)を備えたシステムについて具体的に尋ねているため、Cまたはアセンブリーはどちらもfirwmare開発の合理的な選択肢であり、HDLはそうではありません。

ファームウェアは、実際にはHDLまたはソフトウェアプログラミング言語で記述できますか、それとも同じミッションを実行するための別の方法ですか?

使用しているハードウェアの種類によって異なります。CPUがある場合は、プログラミング言語を使用してください。FPGAを使用している場合、またはASICを設計している場合は、HDLを使用してください。非常に大量のデジタルロジックを設計している場合、SystemVerilogのような中間言語の1つに注目できます。

ファームウェアのほとんどがROMまたはフラッシュに焼き付けられていることを読みました。そこにどのように表されていますか?ソフトウェアのようなビットで?もしそうなら、深遠な違いは何ですか?ファームウェアの場合、適応回路が利用可能ですか?

「ファームウェア」という用語に夢中になっていると思います。この言葉はもともと、組み込みシステムで実行されるコードを意味し、エンドユーザーが変更することはできませんでした。誰かにPCを販売した場合、ユーザーが実行するソフトウェアを変更する可能性が非常に高くなります。オシロスコープを販売した場合、内蔵マイクロプロセッサで実行されるコードを変更したくないので、ファームウェアと呼びました。

FPGAユーザーは、デザインの出力に「ファームウェア」という言葉を使用しました。これは、ハードウェア(はんだ付けされたもの)よりも変化しやすいためです。しかし、実際には、FPGAを構成する「ファームウェア」は、uCで実行される「ファームウェア」とは異なります。uCファームウェアは、一連の状態を介してuCに指示し、その機能を実行します。FPGAファームウェアは、ロジックエレメント間の相互接続のセット、およびルックアップテーブルに保存される値を定義します。

どちらの場合でも、ファームウェアは通常、EEPROM(または組み込みシステムが再起動されるたびにダウンロードするホストマシンのディスク)にビットとして保存されます。しかし、それはそれらを互いに類似させません。


VHDL / Verilogで記述すると、実装されるロジックを視覚化するのが簡単になり、最適化されます。同じはC.でもSystemCのために言うことはできませんが、まだ予期しない合成結果が発生する可能性があること、実際の物理的な実装から十分に離婚している
JonRB

@ JonRB、uCまたはuPをコーディングしている場合、HDLでそれを行う方法を実際には知りません。ロジックをコーディングするとき、SystemVerilogまたはSystemCは、個々のゲートレベルですべてを設計しようとするのが現実的ではないほど大きいシステム用であることに同意します。
ザフォトン

2
VHDLとVerilogは、ハードウェアがまったくない場合にも使用されることに注意してください。FPGAビットストリームの代わりに、回路に直接コンパイルできます。たとえば、AppleはGUI回路図キャプチャの代わりにVerilogを使用してマザーボードを設計していました。これは、設計が独自のバイナリ図面ではなくプレーンテキストである場合、バージョン管理、grep、スクリプトを使用した単純な解析のサポートが向上しているためです。
スリーブマン14年

10

質問の最初の部分では、どちらかを使用する動機について:CとHDL(VHDL / Verilog)には根本的な違いがあります。Cはソフトウェアプログラミング言語(アセンブリと同様)、VHDL / Verilogはハードウェア記述言語です。それらは同じ目的のためのものではありません。

Cは、コンパイル時にアセンブリコード(バイナリ形式、つまりマシン言語)に変換さます。このコードは、CPUに一連の基本操作(レジスタ値の変更、加算の実行など)を行うよう指示する一連の命令です。

一方、HDLはハードウェアに合成されます。VHDLでは、たとえば次のように記述できます。

output <= input1 + input2;

こちらのより完全な例もご覧ください)。これは(ハードウェア)加算器に合成されます。コードがFPGA用に合成される場合、特定のFPGAを構成して加算器を(組み合わせロジックとして)実装できるビットストリームを意味します。

実際には、VHDLでCPUを設計し(ソフトコアプロセッサVSハードコアプロセッサを参照)、Cでソフトウェアを記述できます。

ファームウェアについて:実際には、単語の定義方法によって異なります。ファームウェアは、マイクロコントローラで実行が(したがって、Cまたはアセンブラ、例えば書かれた)ことをプログラム(ソフトウェア)とすることができる、またはそれは構成Aプログラマブル(ハードウェア)ロジックデバイス(CPLDまたはFPGA)のビットストリームであってもよいです。時々、両方を含むパッケージにすることができます:FritzBoxの一部のモデル(ADSLモデム)のファームウェアを使用する場合、実際にはLinuxシステム全体(アセンブラ、C、および他の多くのプログラミング言語で記述)と、 FPGA(VHDLまたはVerilogから合成される可能性が高い)を構成します。


3
  1. それはあなたのアーキテクチャに依存します。CPU(または、通常、マイクロコントローラー)がある場合は、ファームウェアを通常のプログラミング言語(アセンブリを含む)で記述する必要があります。FPGAのようなものがある場合は、ファームウェアをHDLで記述する必要があります。HDLは、(私の知る限りでは)従来のCPUで効率的に実行できるプログラムを生成できません。また、FPGAはそのままで従来のプログラムを実行しません。ただし、FPGAをCPUとして構成し、それを使用して従来のプログラムを実行することもできます。これには、2層のファームウェア、CPUを構築するためにHDLで記述された下位層、およびそのCPUで実行する従来のプログラミング言語で記述された上位層が必要です。
  2. ファームウェアとソフトウェアの間に明確な区別はありません。多くのデバイスでは、ファームウェアはフラッシュメモリなどに保存されますが、最新の電話では、ほとんどすべてがフラッシュメモリに保存され、ファームウェアとソフトウェアの区別は不明確です(ほとんどの人は、おそらくベースバンドプロセッサフ​​ァームウェアをプログラムするコードを検討するでしょう、ほとんどの人がアプリケーションプログラムソフトウェアを検討しますが、正確な境界はどこですか?)。
  3. 2で述べたように、ファームウェアはもう少し永続的であるという考え以外、明確な区別はありません。

3

ハードウェアの同時実行が大きな動機です。

電子は同時に平行線を流れることができるので、ハードウェアを設計する際にそれを考慮したいです。

VHDLで、次のように記述した場合:

x <= a or b;
y <= a and b;
z <= x xor y;

processorの外で、function明示的に順次としてマークする)、次の事実をエンコードしました:

  • xyza及びbであるワイヤ
  • aおよびbは入力信号です
  • xor回路の出力に接続されてaおりb、入力として
  • 他の行についても同様です

それは、実際のハードウェアに合成され、ことをされるかを確認することは容易であるxy同時に評価されています。

        +-----+
A--+----+     |  X
   |    | OR  +-----+
B----+--+     |     |  +-----+
   | |  +-----+     +--+     |
   | |                 | XOR +-- Z
   | |  +-----+     +--+     |
   | +--+     |  Y  |  +-----+
   |    | AND +-----+
   +----+     |
        +-----+

次に、回路をシミュレートする時間になると、シミュレータ(通常は順次プログラム)が次のような回路の物理をシミュレートします。

  • 持っているab変わったのか?はい?ねえ、にx依存しaます。を更新しましょうx
  • yにも依存しaます。それも更新します。
  • zに依存しxます。更新されたため、x更新してください。
  • x依存する(aまたはb)更新されたものはありますか?番号?yおよびについても同じですz。OK、このステップは完了です。

これは、連続した類似性を持たないが、可能な物理的状況を表す「興味深い」可能な結果につながります。

  • x <= not xシミュレーションの無限再帰につながります。シミュレーターは、一定の深さで切断できます。
  • x <= 0; x <= 1エラー(短絡)につながります。これは、ある理由の一つ理由std_logicが存在します。

それでも、VHDLはCよりもハードウェアを厳密にモデル化していますが、それ自体は完全に詳細な説明ではありません。

最終的に、VHDLは、人間が理解できるより高いレベルの回路機能と、より低いレベルの合成可能性との素晴らしいバランスを提供します。

一方、Cは、CPUと順次通信することに重点を置いています。

もちろん、C構造体、列挙型、配列を使用して回路をエンコードし、VHDLのようにシミュレートできます(これはSystem Cのように見えますが、試したことはありません)。

しかし、本質的には、VHDLシミュレータをより詳細な言語で再実装することになります。適切な仕事に適したツールだと思います。

CをVHDL /programming/8988629/can-you-program-fpgas-in-c-like-languagesに変換するツールもありますが、これらは難しい高レベルの変換であるため、パフォーマンスの低下が予想されます。


0

HDLは、ハードウェアの記述(合成)に使用されます。プログラミング言語は、既に合成されたハードウェア(cpu)のプログラミングに使用されます。

FPGAでCPUを合成するために、CPUのソフトコアバージョンをVHDLまたはビットストリームとして取得できます。


-1

プロセッサーは、適度な量の回路を使用して、ほとんどのコンポーネントを使用して異なる時間に異なる操作を実行できるようにすることで、多数の操作を順番に実行します。

FPGAには、少なくとも個別に、特に高度な操作を実行できないが、すべてが同時に独立して動作することができる多くの回路が含まれています。

いくつかのタスクを実行するチップが必要だとします。その中には、15個の入力を監視し、次のものがあります。

  • すべての入力が少なくとも21ミリ秒間安定しており、高い入力の数が3の倍数である場合は常に出力を高く設定する
  • すべての入力が少なくとも21ミリ秒間安定しており、高入力の数が3の倍数でない場合は常に出力を低に設定する
  • 入力が変更されてから、すべての入力が少なくとも20ミリ秒間安定するまでの間に、任意の方法で出力を変更します。

他のことをしているマイクロコントローラーがありますが、それらの入力を調べて出力を設定するために20msごとに数マイクロ秒の余裕がある場合、マイクロコントローラーが他のタスクを実行するために使用する回路のほとんどは、示されたタスクを実行するためにも使用できます上記のように、そのタスクに専念する必要があるのはごくわずかな回路(ROMと多分RAM以外)です。一方、入力が変化してから出力がそれを適切に反映するまでに時間がかかる場合があります。

VerilogまたはVHDLを使用すると、15個の入力を継続的に監視し、指定された計算を実行できるハードウェア回路を構築できます。そのようなデバイスは、おそらく出力が100ns以内に正しい指示を出すことができます-マイクロコントローラよりも桁違いに高速です-しかし、そのタスク専用で他の目的には使用できない回路の量ははるかに大きくなります。


これは、区別を説明するための特に明確な例ではないようです。詳細には議論の余地があるので、まだ馴染みのない人には馴染めないかもしれません。この問題に現実的に直面している人は、おそらく幅の広いデータワードと適切なピン変更割り込みを備えた最新のMCUを選択するでしょう。どのソリューションがより多くのロジックを消費しているかを判断するには、MCU上の多数の未使用のペリフェラルをカウントするか、FPGAの未処理のスライスをカウントするかを決定する必要があります。前者はかなり安くなります。
クリスストラットン

@ChrisStratton:おそらく、タイミング要件が厳しくなると状況が変わる可能性があることを示唆すべきだったのでしょうか?CPUに20ミリ秒ごとに数マイクロ秒の空きがあることを要求する場合、基礎となるシステムを変更する必要はないかもしれませんが、応答時間が200usである必要がある場合、そのような要件では、必要な場合より高速なCPUが必要になる可能性があります20us未満では、それを処理するためだけに追加のCPUを追加する必要があり、200ns未満の場合、CPUで達成することはまったく不可能です。
supercat

これは、MCUの機能を活用していないためです。ピン変更割り込みで、20 ms後に出力を設定するハードウェアタイマーブロックを開始します。その後、余暇にそれが実際に保証されるかどうかを決定し、そうでない場合はキャンセルします。相互依存関係が非常に大きいため、FPGAをポイントするのは本当に良い例ではありません。実際に並列に実行されるのはイベント検出だけであり、最新のMCUはすでに大部分が並列ハードウェアでそれを提供します。一方、残りは事実上シーケンシャルなので、非常に遅いクロックを監視する超高速のステートマシンを構築しますか?
クリスストラットン

@ChrisStratton:適切なピン変更割り込み機能が存在し、他の何かにまだ使用されていない場合、それは一定のポーリングの必要性を回避する可能性がありますが、一度に多くのことが発生した場合、それらは何らかのレートで順次処理される必要がありますCPUがそれらを処理できます。
-supercat

問題ステートメントが入力と応答の間に大きな遅延を与えることを考えると、順次処理は問題ではありません。また、現在の MCUが非常に混雑している場合でも、この目的でMCUを追加することは、FPGAを追加するコストのほんの一部です。現実には、この問題をFPGAで解決する唯一の方法は、スペアスライスとそこにルーティングされる信号があるものがあるか、教育または趣味のコンテキストで人工的なプロジェクトとして存在することです。
クリスストラットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.