4

乗算と除算を含むいくつかのステップを含む VHDL でビデオ ピクセル データ処理パイプラインを設計しています。たとえば、同期信号を維持し、パイプラインの最後で、いくつかの処理段階を経た操作済みピクセル データとともに正しく出力できるように、信号の同期を維持したいと考えています。

出力が正しくなるように、シフトレジスタなどを使用して信号を適切なサイクル数だけ遅延させたいと思いますが、特に異なる信号のパイプラインステージの数として、これを設計する良い方法についてアドバイスを探しています私がデザインを進化させるにつれて変わるかもしれません。

4

3 に答える 3

2

良い質問。

私は完全な解決策を知りませんが、ここに2つの部分的な戦略があります...

コンポーネントの相互接続...コンポーネントがパイプラインの深さを値とするジェネリックをエクスポートできれば、本当に素晴らしいでしょう。残念ながら、それはできません。これにポートを割り当てるのはばかげているようです(おそらく実行可能ですが、整数定数になるため、合成では消えます)。

それができない場合は、このモジュールの予算を示すジェネリックを渡します。モジュール内で、予算を満たせない場合はアサート(重大度FAILURE)します...(このアサートはシンセ時にチェック可能であり、少なくともザイリンクスXSTは同様のアサートを処理します)

予算を難しい数値にし、実際のパイプラインの深さと等しくない場合はアサートするか、予算が大きすぎる場合はモジュール内にパイプステージを追加し、予算が小さすぎる場合にのみアサートします。

このようにして、予測可能なモジュールを接続し、トップレベルでパイプライン演算を実行してバランスをとることができます(たとえば、計算された定数値をプログラム可能な遅延線に渡す)

コンポーネント内で...私は単一のプロセスを使用し、レジスターはパイプステージを反映する名前の内部信号として表されexponent_1, exponent_2, exponent_3ます。プロセス内で、最初のセクションは最初のサイクルのすべてのアクションを説明し、2番目のセクションは2番目のサイクルを説明します。通常、「より簡単な」パスは、クリティカルパスと同期するために、そのまま次のパイプステージにコピーされます。プロセスはかなり整理されており、保守が簡単です。

32ビットの乗算を16*16のチャンクに分割し、部分的な積の追加をパイプライン処理する場合があります。これが与えるコントロール、XSTが単独で与えるよりも良い結果を与えるために使用されます...

プロセス内で変数を好む人がいることは知っています。パイプステージの中間結果にそれらを使用しますが、シグナルを使用すると、パイプラインを自然な順序で記述できます(割り当ての延期のおかげで)が、変数を使用する場合は、それを記述しなければなりません。後ろ向き!

于 2012-11-29T15:32:47.650 に答える
1

主要な処理ブロックごとにパッケージを作成します。そこに含まれる定数の 1 つは、そのブロックの処理遅延です。次に、それをサイクル数のジェネリックを持つ汎用の「遅延線」ブロックに接続できます。

その定数を実際の実装と「同期」させておくには、セルフチェック テストベンチを使用するのが最適です。

于 2012-11-30T14:05:34.333 に答える
0

考慮する必要があるのは、遅延ライン (バック ツー バック レジスタ) と FIFO です。

Xパイプライン遅延のあるモジュールを考えてみましょうNNFIFOは is 変数がある場合にうまく機能します。秘訣は、モジュールと FIFO の両方が新しい作業を受け入れることができる場合にのみ、新しい作業を要求できることを覚えておくことです。同時に処理できる項目の最大数を格納できるように FIFO のサイズを設定するのが理想的ですが、それがX現実的でない場合もあります。たとえば、計算に遠いメモリへのアクセスが含まれている場合などです。

もう 1 つのオプションは、サイド チャネル (つまり、同期フラグが取るパス) をモジュールの外に出すのXではなく、モジュールに統合することです。これを行うと、計算の一部が停止する必要がある場合に、サイド チャネルも停止することができ、2 つの同期が維持されます。これを行うことができるのは、必要な信号がすべて含まれているスコープにいるからです。次に、計算で使用されるかどうかに関係なく、すべての信号が同時に出力に現れます。

于 2012-12-04T18:24:54.917 に答える