0

私はイメージコーデック用のプレーンなCコードを持っています。私の目標は、Verilogまたはそのようなハードウェア記述言語を使用してハードウェアで取得および実現される効率的なCモデルを開発することです。私が見つけようとしているのは:

1.)ハードウェアを効率的にするために既存のCコード構造でどのような変更を行う必要があるか

2.)データ構造を変更する必要がありますか。配列/バッファに関連する制約はありますか(ストレージクラスレジスタで宣言する必要があるように)。

3.)H / wモデルは、条件があれば、または可能な限り最小限にすべきではないと聞きました。それはどういうことですか?

(一部のFPGA、バス、クロックなどの詳細がないVerilogを使用した一般的なハードウェアの実現を検討してください。)

-広告

4

1 に答える 1

2
  1. これは、アルゴリズムのハードウェア実装でどの程度シリアルまたはパラレルにするかによって異なります。

alwaysブロックでは、 "<="(非ブロッキング)と"="ブロッキング割り当てに違いがあります。ブロッキング割り当ては、ソフトウェアにあるものと似ています。すべてが行ごとに評価されるため、パフォーマンスが優先的にエンコードされたシーケンシャルロジックに合成される傾向があります。非ブロッキングステートメントを使用すると、alwaysブロック内のすべての割り当てが同時に評価され、より並列な構造になる傾向があります。これは、ソフトウェアをハードウェアに移植するときに最も集中する必要がある部分になる可能性があります。

  1. RTL対応のVerilogには、組み合わせロジック(論理式の連続割り当て)とメモリ割り当て(レジスタとラッチ)があり、時間の経過とともに状態を保持します。RTLとしてコード化されたデータ構造は、論理合成中にレジスタとラッチを推測する可能性があります。データ構造は、Verilogで正しくコーディングされていればおそらく機能しますが、マイクロプロセッサで実行するのが理にかなっていることは、ハードウェアでそれを構築するための最良の方法ではない場合があります。繰り返しますが、状況によって異なります。

  2. 「if」は、組み合わせロジックとメモリロジック(状態を保持)の両方に使用できます。「if」は、3項演算子(Verilogの構文はCと同じ)としてマルチプレクサ(mux)に合成されます。「if」は、alwaysブロックイベントリストが発生した後にリセットピンがアサートされたかどうかを確認するためのレジスタのロジック記述で使用することもできます(これは単なる一例です)。「If」に注意してください:alwaysブロックを使用して組み合わせロジックを作成する場合(イベントリストにposedgeclkまたはnegedgeclk、posedge reset、negedge resetなどがない)、の一部として組み合わせロジック変数に割り当てます。 「if」ステートメントですが、「else」ステートメントを忘れると、合成中にラッチが推測されます。「if」に一致する「else」ステートメントがない

「reg」タイプは、組み合わせロジックとメモリロジックの両方を説明するために使用されます。どのロジックが合成されるかは、alwaysブロックイベントリストと完全なケースの存在によって異なります。Cコードは通常、alwaysブロックで使用されるスタイルに変換されます。

「ワイヤ」タイプは、連続割り当て(組み合わせロジック)に使用されます。

ImpulseCは、興味をそそられるように見えるソフトウェアからハードウェアへのコンパイラです。 HDL Coderは、ハードウェア記述を自動的に生成するMATLAB / Simulinkのコンパニオン製品です。

これらのソフトウェアツールを使用してハードウェア記述を作成している場合でも、それらが何を生成したかを理解する必要があります。

于 2008-12-04T09:25:19.333 に答える