PROGRAMMING FPGAがVerilogでFPGAをプログラムすると、プログラミングのように大きなものになります。しかし、それは少なくとも従来の意味ではありません。それをハードウェア記述言語に変換するだけでなく、Cコードを取ることを目的とするシステムがいくつかありました。これらのうちの1つ、Cynthは、GitHubで提供されるだけでなく利用できます。試してみる場合は、SCLAとSBTと呼ばれる開発システムを設定する必要があります。
もちろん制限があります。プリプロセッサが必要な場合は、別々に実行する必要があります。あなたは世界的な変数、乗算、浮き上がり、そして他の多数のCの断片を利用することはできません。コンパイラはC関数ごとにVerilogデータを生成します。
従来のCプログラムは、マルチプロセッサで特別な方法を利用しない限り、毎回1つのことを実行します。それでも、あなたがコントロールする可能性がある多くのCPUのどれだけの数のCPUにとって、正確には便利な制限があります。一方、FPGAを使用すると、並行して発生するものを実行できます。たとえば、これについて考えてください。
一方(1)
{
OUT1 = CTR1 ++。
OUT2 = CTR2 ++。
}
OUT1の値は、値がOUT2の値の前にビットビットを変更します。あなたがこれらの多くのものを持っていたならば、OUT999と同じくらいの状態で、遅延は重要になるかもしれません。同等のVerilogコードは次のようになります。
いつも@(ポジットCLK)
始める
OUT1 <= CTR1;
CTR1≦CTR1 + 1;
OUT2 <= CTR2;
CTR2≦CTR2 + 1;
終わり
これは実質的に同じように見えますが、出力はまったく同じ時間で変更されていても変更されます。もっと多くは、あなたが見ることができない他のすべてのことが同様に同時に起こることが同様に発生することです。入り口だけでなく入り口と同様にその入力が「スキャン」しないように、FPGAはそのすべての入力と出力を生成します。
Cynthの状況では、各C関数は、関数とまったく同じ引数とまったく同じ引数を持つと、戻り値がある場合は、もう1つが存在します。システムクロック、リセット信号、および3つの管理信号が同様に入力されます。 1つは処理を可能にする入力です。 2つの出力があります。関数は、結果が得られることを示すと同時に機能を提供することを示しています。
コードで提供される例は、4つのLEDを駆動するCylonのアイパターンです。純粋なVerilogで生産されている2つの外部機能があります。 WRITE_LESS関数はLEDを駆動し、スリープ機能は遅延を作成します。
CコードはRovingという名前の単純な関数です。
一方(1)
{
if(dir && c == 8)
dir = 0;
そうでなければ(!dir && c == 1)
dir = 1;
IF(DIR)
C << = 1;
そうしないと
C >> = 1;
WRITE_LESS(C);
睡眠(1000)。 // 1S
}
対応するVerilogデータは、Verilogエミュレータを使用して確認できるのとまったく同じ機能を実行します。
生成されたコードに掘り下げたい場合は、いくつかのプロジェクトを使用してVerilogについてはもっと詳しく説明できます。 Cがあなたのことではない場合は、いつもPythonを試すかもしれません。