2017-02-01 8 views
3

これに関連する質問は見つかりませんでしたが、何を検索するのか分からない可能性があります。合成ツールを使用する場合(特定のツールが必要な場合はSynplifyと言いますが、ツール間で機能する標準準拠のバージョンがあれば最適です)、モジュールのインスタンス数を追跡し、合成ガイド?私はそうは思わないが、私はこのようなものに対して多くのユースケースを見ることができる。私が意味することのいくつかの例を挙げてみましょう。合成グローバルインスタンスカウント

いくつかの文脈では、私はFPGA開発を念頭に置いてこれを書いていますが、ASICデザインにもその用途があると思います。

私はデバイスに10個の乗算器があり、複雑な乗算器のようないくつかの演算が(多くの場所で(ループを生成するだけでなく、デザイン全体に)インスタンス化したいと考えているとします。この関数に専用の乗算器を使用して1つの実装があるとしますが、そのファブリックを使用する複素乗算器もあります。ファブリックの実装に移る前に、私の複素乗算器が専用の乗算器を使い果たすようにしたいと思います。

複雑な乗算器をラッパーでインスタンス化することは可能ですか?このラッパーがエラボレーション中にインスタンス化されるたびに、グローバルインスタンスカウントが増分されるので、使用された乗数を記録できますか?さらに、このグローバル変数をgenerate-if文または他の構文で使用して、使用されている乗算器モジュールのインスタンス数に基づいて2つの実装の間で決定を下すことができますか?

例として乗数を使用しています。私はこの動作を得るために乗数を推論することができることを理解しています。私は、このグローバル変数の現在の値に基づいて、異なるフィルタ構造(例えば、タップ付き遅延線FIRフィルタ対分散算術FIRフィルタ)を推測したいと思うデザインを想像しています。新しいFPGAにコードを移植する際には、これは確かに役立ちます。

私はしばらくこのようなものを探していましたが、存在しないと思われます。私は、私のシステムのアーキテクチャーを正しい方法で設計するだけで、私が望むものに非常に近い何かをすることができることを理解しています。ここでの意図は、私の設計におけるプロセスを自動化することです。そのため、設計の将来の変更では、(タイミングやリソースの制限が作用しない限り)システム全体のレイアウトをリファクタリングする必要はありません。私はこれを、同じファミリのデバイス間で非常に異なるリソース割り当て(これはDSPスライスが増え、LUTの数が増えているなど)を使用して移植可能に保つ手段とも見ています。

これは1つのツールまたは1つの言語でしか存在しない場合、それでも私にとっては受け入れられる解決策です。あなたが決定的な証拠やそれがうまくいかない理由について論理的な理由を提示できれば、それは私には受け入れられる解決策にもなります。

+0

関連する質問[VHDLリソース使用プロファイリングツールはありますか?](https://stackoverflow.com/questions/41907940/are-there-any-vhdl-resource-usage-profiling-tools)を参照してください。 – user1155120

答えて

2

実際には、デバイス内の乗数よりも多くの乗数を推定するデザインを実装しようとしましたか?私はツールがDSPブロックを使い果たすと自動的にLUTリソースの使用を開始すると思います。ただし、これが発生しないと仮定すると:

これは、ザイリンクスVivadoとカスタムTCLスクリプトを使用して、ある程度達成できます。私は、これは時間の権利を取得するためにかかるだろうとして、細部の正確なコマンドやスクリプトがないだろうが、基本的な流れは次のようになります。

  1. 乗算器を実装するエンティティにgenericパラメータを追加します。これらをデザインのトップレベルのgenericパラメーターに結びます。
  2. スクリプトは、すべてのエンティティに専用のDSPブロックを使用させる初期パラメータセットを設定します。
  3. スクリプトはsynth_designで、-genericスイッチでDSPブロックの使用を制御します。
  4. 合成が完了すると、スクリプトはreport_utilizationの出力を解析して、DSPブロックの数が超過したかどうかを判断します。そうでない場合は、手順5に進みます。そうであれば、より多くのエンティティが代替乗算器の実装を使用するように汎用パラメータのセットを変更し、手順3に戻ります。
  5. 合成されたデザインはデバイスに適合します。ジェネリックを使用せず

上記方法の代わりに、同じ基本的な手順を続けるが、そのインプリメンテーションを制御するために特定乗数インスタンスでset_propertyコマンドを使用し、代わりにジェネリックを設定することであろう。

+0

私は乗算器の例を使用すべきではありません。私は乗数の推論が私にこの特徴を基本的に与えることを知っています。私は、この機能を私のデザインのより大きなコンポーネントを自動的に設計する手段として考えています。私の基本的な使用例は、ハードウェアアクセラレーションです。私は、さまざまなファミリから多くのdevボードを蓄積しており、それらのすべてで同じ計算コードを実行したい(他の問題を除いて)。もう1つの例は、より良い使用例です。ツールは、私の乗算 - 累積チェーンを分散算術フィルタに単独で切り替えることを知ることができません。私は時間があるときに質問を修正します。 – hops

+0

@hops私は私の答えがその場合にも当てはまると思います。あなたが不足しているリソースがあれば、スクリプトはこれを確認し、スクリプトの一部を構成する一連のルールに基づいて、ジェネリックまたは他の方法を使って適切なデザインを変更します。あなたが求めたのはまさに*ではありませんが、あなたが手に入れようとしているものの中で最も近いと思います。 –

+0

私はあなたが正しいと思っているものに非常に近いです。実際には、これまでにスクリプトでこれを行っています。それが私の考えです。私はこれを答えとして受け入れることができます。私は、純粋なHDLでは不可能であることを証明する標準的な文書やツールの文献に、ある種の論理的な理由や行を見つけることができれば幸いです。 – hops

0

あなたがしているものは存在しません。しかし、いくつかのコメントがあります。

まず、設計を実装するために必要なリソースの量を(理由の範囲内で)推測できるはずです。チップの容量を超える場合は、デザインやアップグレードを再考する必要があります。第2に、設計を実装しようとしたときに、DSPリソース(たとえば乗算器を推定する)をすべて利用する場合、Synthesisツールはスマートであり、残りのコンポーネントを一般ロジックに適合させることができます。これには多くの望ましくない結果があります。組み合わせロジックは(実装しているものによっては)素早く吹き飛ばすことができ、最大クロック周波数に大きな影響があることがほぼ保証されています。最後に、物事の実装方法を明示的に制御したい場合はこの点がより適切です。合成ディレクティブ(ベンダー/言語によって異なる)を使用できます。

(VHDLで、アルテラ・デバイス用)DSPリソースを使用するディレクティブの例は(taken from here)次のようになります。

signal a, b : unsigned(8 downto 0); 
signal res : unsigned(17 downto 0); 
attribute multstyle : string; 
attribute multstyle of res : signal is "dsp"; -- Alternatively, use "logic" 
res <= a * b; 

たとえば、あなたはあなたがコントロールしたかった「複素乗算器」モジュールを持っていた、場合それがどのように実装されたのか、ジェネリックを使ってそれを制御することができます(インスタンス化されたとき)。

entity complex_mult is 
    generic(
     MULT_TYPE : string := "dsp" 
    ); 
    port(
     ... 
    ); 
end entity; 

architecture rtl of complex_mult is 

begin 

    signal my_res : unsigned(15 downto 0); -- Obviously define res width depending on what you are doing 
    attribute multstyle : string; 
    attribute multstyle of my_res : signal is MULT_TYPE; 
    -- Do stuff 
end rtl; 
+0

あなたの追加のコメントは、基本的に私が「私のシステムのアーキテクチャを正しい方法で設計するだけで、私が望むものに非常に近い何かをすることができることを実感している」という段落で、しかし、私がこの機能を必要とするのは、異なるチップをターゲットにするために同じHDLコードベース(トップレベルとモジュールなど)を使用することです。私はあなたがそれが可能ではないことが正しいと思っています(私は長い間それを探していたので)。私はあなたの答えを受け入れることができました。もしそれが不可能であるという単純な証拠ではなく不可能であるという証拠があれば、それは可能です。 – hops

+0

合成ディレクティブ(アルテラのAKA合成属性:ザイリンクスのAKA合成属性)は、合成ツールにヒントを提供する(または合成ツールをガイドする)ベンダーの方法です。必要なものを実現するオプションはありません([Xilinx](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/ug901-vivado-synthesis.pdf)、[Altera](http:// quartushelp .altera.com/14.1/mergedProjects/hdl/vhdl/vhdl_file_dir.htm)) – gsm