私は配列/ベクトルを持っています。最初のものを処理することによって新しい配列を生成したいと思います。私が必要とする簡単な例は、新しい配列のすべてのi番目の要素は、最初のものからのi-1、i、およびi + 1要素の合計です。 これは配列を繰り返し処理することで、非常に簡単にシーケンシャルな方法で行うことができます。 new [i]:= old [i-1] + old [i] + old [i + 1]のように、これを一般化してこれを並列演算にする式を割り当てることがあれば、ここで、i∈(1、n))。vhdlの一般化集合体
1
A
答えて
0
あなたの質問は並列性に関するもので、シミュレーションではなく、VHDL記述から合成されるハードウェアに興味があると思います。
これらの追加がすべて行われると、並列性はの問題です?あなたのデザインが同期している場合 - のはclk
という名前のクロックの立ち上がりエッジで言わせて - それから:
subtype word: unsigned(7 downto 0);
type word_array is array(natural range <>) of word;
signal a: word_array(0 to 15);
signal b: word_array(1 to 14);
...
process(clk)
begin
if rising_edge(clk) then
for i in 1 to 14 loop
b(i) <= a(i - 1) + a(i) + a(i + 1);
end loop;
end if;
end process;
は、クロックの各立ち上がりエッジで配列b
に14個の値並列に計算されます。そして、これを行うために必要な数の8ビット加算器をインスタンス化します。問題は、for
ループを使用しているかどうかではなく、実際にはです。これらの操作はいつ行われますか?答えは、非常に同じクロック期間中のの説明にあります。。
あなたはベクトルに動作するように"+"
演算子オーバーロードすることができます:
function "+"(a, b: word_array) return word_array is
constant n: positive := a'length;
variable va: word_array(0 to n - 1) := a;
variable vb: word_array(0 to n - 1) := b;
variable sum: word_array(0 to n - 1);
begin
if n = 1 then
sum(0) := va(0) + vb(0);
else
sum := (va(0 to n/2 - 1) + vb(0 to n/2 - 1)) &
(va(n/2 to n - 1) + vb(n/2 to n - 1));
end if;
return sum;
end function "+";
を、より並列説明書き明らかにそれを使用します。
process(clk)
begin
if rising_edge(clk) then
b <= a(0 to 13) + a(1 to 14) + a(2 to 15);
end if;
end process;
をしかし、それは違いはありませんとなり結果として得られるハードウェアは同じになります。
また同じことを行うために生成するステートメントを使用することができます
g: for i in 1 to 14 generate
process(clk)
begin
if rising_edge(clk) then
b(i) <= a(i - 1) + a(i) + a(i + 1);
end if;
end process;
end generate g;
しかし、再び、それはシンセサイザーのために違いはありませんでしょう。
関連する問題
- 1. イベントストアのルート集合体と集合体
- 2. 一般化法
- 3. 一般化クラスパラメータ
- 4. 一般的なlisp、CFFI、インスタンス化のC構造体
- 5. 部分集合全体の集合R
- 6. 一般的な例外:セルが編集中の場合
- 7. 春のフォームコントローラの一般化
- 8. 関数の一般化
- 9. LINQモデルの一般化
- 10. 一般的な構造体の列挙
- 11. 一般化固有値Mathematica
- 12. OCaml可変型一般化
- 13. 一般的なグループ化
- 14. 一般化されたミックスイン
- 15. 部分集合と全体集合の場合のケース
- 16. 一般的なOracleデータ収集ストレージ
- 17. 活字体は、一般的な制約
- 18. 一般化された型を基底の区別された共用体にキャストする場合
- 19. 集合体を集合体にどのように写像するか?
- 20. "集合体"とは何か
- 21. C#async集合体とディスパッチ
- 22. SSRSで集合体をグループ化してフィルタリングする方法
- 23. Androidデータバインディングの一般化の問題
- 24. const型のC++テンプレートの一般化
- 25. `tails`の再帰スキームの一般化
- 26. 一般的なDecalarationの最適化
- 27. Clojureの一般化されたスレッディングマクロ
- 28. キュウリ/カピバラのテストを一般化する
- 29. Python:一般化されたサフィックスツリーのライブラリ
- 30. 春との一体化?
初期化された配列を返す関数を作成します。 –
コメントでは、有限のリソースFPGAで1000以上の要素、その数と要素サイズの色の実装を扱うことを表明しており、適合しない可能性があります。あなたはいくつの要素もそのサイズも示しておらず、それはあなたの質問が不明であることを示しています。完全なパラメータを持たない理論的な質問は、有益な答えを得ることができない可能性が高い。機能を完成させるために、いくつかのクロック数でより少ないリソースを使用できる時間/複雑さのトレードオフがあります。 – user1155120