2

さまざまなバリアントに適応する必要がある vhdl 設計があります。メイクファイルから構成を生成できると便利です。1 つのプロジェクトを生成するためのメイクファイルが準備され、機能しています。

プロジェクトごとに非常によく似たファイルが異なることは避けたいと思います。プロジェクト間の唯一の違いは、いくつかの行がどこかにあり、そのうちの 1 つには、もう 1 つには必要のない一連の vhdl ファイル (およびコンポーネント) が含まれていることです。

たとえば、2 つの異なる最上位レベルの vhd ファイルを作成することは避けたいと考えています。代わりに、プロジェクトに応じて、他の vhdl ファイルとコンポーネントを含める (または含めない) ために、トップ ファイル内で条件を使用したいと考えています。

これを行う方法について何か提案はありますか?

外部のプリコンパイラ (gcc) を使用しようとしましたが、機能しませんでした。さらに、他の開発者に gcc のインストールを強制したり、ザイリンクス IDE 内から vhdl ファイルを使用できないようにしたりしたくありません。


編集:例の追加

A と B の 2 つの製品があります。両方の製品に同じファイルを使用し、製品 B の一部のパーツを除外する条件、異なる HW パーツの構成を生成する条件、およびその他のものを使用したいと考えています。

コマンドラインから構成を生成したい: make product_A、およびmake product_B.

ターゲットに応じてコードを含めたり除外したりするためgeneratesに vhdl を挿入した場合、xst はどのターゲットがビルドされているかを知る必要があります。問題は、現在のターゲットを makefile から xst に渡す方法についてです。

gcc でコンパイルする C コードでは、ソース コードを次のように記述します。

#if defined(product_B)
    ...
#elsif defined(product_A)
    ...
#endif

、次に makefile で定義を設定します。

product_A: source.c
    gcc -Dproduct_A source.c

product_B: source.c
    gcc -Dproduct_B source.c
4

3 に答える 3

7

vhdl GENERATE ステートメントを使用して、構成可能にしたいロジックをラップすることを検討しましたか。

name : FOR N IN 1 TO 8 GENERATE

  concurrent statements here

END GENERATE name;

次に、いくつかの構成ジェネリックを最上位ファイルに追加すると、生成の実行方法を制御できます。

編集

次を使用して、XST のコマンド ラインから GENERICS を設定できます。

-generics {名前=値 名前=値}

このサポートは、9.1 以降でのみ追加されました。

于 2010-02-10T16:50:25.787 に答える
3

ここにはいくつかのオプションがあります。

  1. 異なるファイルを持たないようにしてください。ただし、すべての異なるバージョンを 1 つのファイルに実装してください。これは、断然最も堅牢なアプローチです。generateVHDL には、ジェネリック、ステートメント、パッケージ、構成など、これを支援する便利な構造がいくつかあります。
  2. 外部マクロ プリプロセッサを使用して、VHDL ファイルの「テンプレート」を作成します。一部の堅固な Unixoid は由緒あるm4ツールを使用します。私は別の道を歩み、Python のような本格的なプログラミング言語をいくつかのテンプレート ライブラリと共に使用します。次に、これらのテンプレートからの実際の VHDL ファイルの生成を、makefile に簡単に組み込むことができます。

是非、(1) から始めてみてください。違いは、あなたが思っているほど悪くはないかもしれません。

于 2010-02-10T16:30:17.010 に答える
2

生成はそれを行う方法です-何かをコンパイルするかどうかにかかわらず、ifgenerateが必要です:

product_a_gen: if product_a='1' generate
    -- some code in here
end generate product_a_gen;
product_b_gen: if product_b='1' generate
    -- some code in here
end generate product_b_gen;

caseVHDL2008は、生成する拡張機能を追加するため、パーツを作成できますelse。Doulosはこれについてのappnoteを持っています。

XSTに注意し、ジェネリックスを渡すと、サポートされるタイプが制限されます。

于 2010-03-04T12:04:59.883 に答える