HDL Filter ブロック プロパティ
AdderTreePipeline
このプロパティは、フレームベース フィルターに適用されます。アーキテクチャの加算器ツリーのレベル間に含めるパイプライン レジスタの数が指定されます。パイプライン ステージを挿入すると、フィルターのスループットが向上する一方で、レイテンシが増加します。既定値は 0
です。アーキテクチャの速度を向上させるには、推奨する設定は 2
です。
パイプライン ステージにより、影響を受けるフィルターが含まれているモデル内のパスで遅延が発生します。このパイプライン オプションを有効にすると、並列データ パスに遅延の均衡化が自動的に追加されます。
フレームベースのフィルター アーキテクチャの詳細については、フレームベース アーキテクチャを参照してください。
AddPipelineRegisters
このプロパティは、スカラー入力フィルターに適用されます。このプロパティを有効にすると、フィルターの加算器が、既定の線形加算器の代わりに、パイプライン化されたツリー構造加算器として実装されます。このアーキテクチャにより、フィルターのスループットが向上する一方で、レイテンシが増加します。既定値は off
です。
AddPipelineRegisters
には、次の制約が適用されます。
AddPipelineRegisters
を使用すると、コード ジェネレーターによって、強制的に HDL および生成されたフィルター モデル内が完全精度になります。このオプションを使用すると、HDL コード内にパイプライン方式の加算器ツリー構造が実装されます。この構造は、完全精度のみをサポートしています。検証モデルを生成する場合、検証時の不一致を避けるため、元のモデルで完全精度を使用しなければなりません。パイプライン ステージにより、影響を受けるフィルターが含まれているモデル内のパスで遅延が発生します。このパイプライン オプションを有効にすると、並列データ パスに遅延の均衡化が自動的に追加されます。
メモ
CIC Interpolation (DSP System Toolbox) ブロックでこのプロパティを使用すると、並列パスの遅延は自動的に均衡化されません。設計で必要な場合は遅延を手動で追加します。
パイプライン ステージが挿入される場所を示すフィルター アーキテクチャの図については、HDL フィルター アーキテクチャを参照してください。
ChannelSharing
ChannelSharing
実装パラメーターとマルチチャネル フィルターを使用すると、1 つのフィルターの実装を複数のチャネルで共有可能になり、設計の面積効率が高くなります。このパラメーターの値は、'on'
または 'off'
です。既定値は 'off'
であり、チャネルごとに個別のフィルターが実装されます。
FPGA 用マルチチャネル FIR フィルター (DSP System Toolbox)を参照してください。
CoeffMultipliers
CoeffMultipliers
実装パラメーターを使用すると、特定のフィルター ブロックについて生成されるコード内の係数乗算器演算の最適化に、正準符号付き桁数 (CSD) または因数分解された CSD を使用することを指定できます。以下のオプションのいずれか 1 つを使用して CoeffMultipliers
パラメーターを指定します。
'csd'
:CSD 手法を使用して乗算器の演算をシフト演算および加算演算で置き換えます。CSD 手法は、定数の乗算に必要な加算演算の数を、バイナリ数を非ゼロ数の桁の最小数で表現することで最小化します。この表現により、クロック速度を維持または増加させながら、フィルターによって使用される面積を減らします。'factored-csd'
:係数の素因数の乗算器演算をシフト演算および加算演算で置き換える、因数分解された CSD 手法を使用します。このオプションでは CSD よりも大幅にフィルター面積を削減できますが、クロック速度は低下します。'multipliers'
(既定の設定):乗算器の演算を維持します。
HDL Coder™ では、パラレル フィルターの完全実装について CoeffMultipliers
がサポートされています。完全なシリアル アーキテクチャまたは部分的なシリアル アーキテクチャに対してはサポートされていません。
DALUTPartition
LUT のサイズはフィルターの次数によって指数的に増加します。N
係数のフィルターでは、LUT は 2^N
の値をもたなければなりません。高次数のフィルターの場合は、LUT のサイズは適度なレベルに低減されなければなりません。サイズを低減するために、LUT を "LUT パーティション" と呼ばれるいくつかの LUT に分割できます。各 LUT パーティションは異なるタップのセットで動作します。これらのパーティションから取得した結果が合計されます。
たとえば、160 タップ フィルターでは LUT のサイズは (2^160)*W
ビットになります。ここで、W
は LUT のデータのワード サイズです。これをそれぞれ 10 の入力 (タップ) を受け入れる 16 の LUT パーティションに分けると、LUT の合計サイズは 16*(2^10)*W
ビットに低減されます。
LUT の分割は LUT のサイズを低減しますが、LUT のデータを合計するためにより多くの加算器が必要になります。
DALUTPartition
を使用して、DA コード生成を可能にし、LUT パーティションの数とサイズを指定できます。
LUT パーティションを整数 [p1 p2...pN]
のベクトルとして以下のように指定します。
N
は、パーティションの数です。各ベクトル要素はパーティションのサイズを指定します。個々のパーティションの最大サイズは 12 です。
すべてのベクトル要素の合計はフィルター長
FL
と等しくなります。FL
はフィルター タイプに応じて異なる方法で計算されます。異なるフィルター タイプに対する FL の計算方法は、次の節で説明します。
HDL フィルターでの分散計算を参照してください。
シングルレート フィルターの DALUTPartition の指定
サポートされているいずれかのシングルレート フィルター タイプの LUT パーティションを決定するには、次の表に示すように FL
を計算します。次に、要素の合計が FL
となるベクトルとしてパーティションを指定します。
フィルター タイプ | フィルター長 (FL) の計算 |
---|---|
直接型 FIR | FL = length(find(Hd.numerator ~= 0)) |
直接型非対称 FIR、直接型対称 FIR | FL = ceil(length(find(Hd.numerator ~= 0))/2) |
LUT を分割せずにフィルター設計用の DA コードの生成を指定することもできます。これを行うには、フィルター長と同じ値の、1 つの要素のベクトルを指定します。
マルチレート フィルターの DALUTPartition の指定
サポートされているマルチレート フィルター (FIR Decimation および FIR Interpolation) には、LUT パーティションを次のように指定できます。
すべてのポリフェーズ サブフィルター用の LUT のパーティションを定義するベクトル。
各行ベクトルがポリフェーズ サブフィルターの LUT パーティションを指定する、LUT パーティションの行列。この場合、
FL
はすべてのサブフィルターに対して一定です。このアプローチにより、各サブフィルターの分割で微調整が可能になります。
次の表は、LUT パーティションのタイプごとの FL
計算を説明しています。
LUT パーティション | フィルター長 (FL) の計算 |
---|---|
ベクトル: 右の「フィルター長 (FL) の計算」列に示した式で FL を決定します。要素の合計が FL になる整数のベクトルとして LUT パーティションを指定します。 | FL = size(polyphase(Hm), 2) |
行列: 右の「フィルター長 (FL) の計算」列に示したように、フィルターのポリフェーズ構造に基づいてサブフィルター長 FL i を決定します。各サブフィルターの LUT パーティションを、要素の合計が FL i になる行ベクトルとして指定します。 | p = polyphase(Hm); FLi = length(find(p(i,:))); p の i 行目は i 番目のサブフィルターを表します。 |
DARadix
DA のビットシリアル本来の特性によりスループットが制限される場合があります。スループットを向上させるには、一度に 1 つを超えるビットの合計を計算するように DA の基本アルゴリズムを変更できます。同時に計算できるビットの合計数は "DA 基数" と呼ばれる 2 のべき乗で表されます。たとえば、DA 基数が 2 (2^1
) の場合、一度に 1 つのビットの合計が計算されます。DA 基数が 4 (2^2
) の場合、一度に 2 つのビットの合計が計算されます。それ以降も同様です。
同時に 1 つを超えるビットの合計を計算するために、LUT が複製されます。たとえば、一度に 2 ビットで DA を実行 (基数 4) する場合、奇数ビットが 1 つの LUT に供給され、偶数ビットが同時に他の同一の LUT に供給されます。奇数ビットに対応する LUT の結果は左へシフトされ、偶数ビットに対応する LUT 結果に追加されます。この結果は次に、フィードバック値を 2 桁シフトするスケーリング アキュムレータに供給されます。
一度に 1 つを超えるビットを処理することで演算に並列度が導入されるため、面積を犠牲にしながらも速度を向上させます。
DARadix
を使用して、DA で同時に処理されるビット数を指定できます。ビット数は以下を満たす N
で表されます。
非ゼロの 2 のべき乗の正の整数。
mod(W, log2(N)) = 0
、ここでW
はフィルターの入力のワード サイズです。
N
の既定値は 2 です。これは一度に 1 ビットを処理する、つまり速度は遅いものの面積は小さくなる、完全なシリアル DA を指定します。N
の最大値は 2^W
です。ここで W
はフィルターの入力のワード サイズです。この最大値は、速度が速いものの面積が大きい、完全なパラレル DA を指定します。これらの極値の間の N
値は部分的なシリアル DA を指定します。
メモ
対称フィルターおよび非対称フィルターに DARadix
値を設定する場合は、対称および非対称フィルターの考慮事項を参照してください。
HDL フィルターでの分散計算を参照してください。
FoldingFactor
FoldingFactor
には、シリアル アーキテクチャをもつ IIR SOS フィルターの出力を計算するときに使用するクロック サイクルの合計数を指定します。このプロパティは、NumMultipliers と相補的です。いずれか一方のプロパティを選択しなければなりません。両方を使用することはできません。FoldingFactor
と NumMultipliers
のいずれも選択しない場合、完全なパラレル アーキテクチャでフィルター用の HDL コードが生成されます。
MultiplierInputPipeline
このパラメーターを使用し、FIR フィルター構造体の乗算器の入力で、指定された数のパイプライン ステージを生成できます。既定値は 0 です。
MultiplierInputPipeline
には、次の制約が適用されます。
パイプライン ステージにより、影響を受けるフィルターが含まれているモデル内のパスで遅延が発生します。このパイプライン オプションを有効にすると、並列データ パスに遅延の均衡化が自動的に追加されます。
フィルター アーキテクチャのどこにパイプライン ステージが挿入されるかを示す図については、HDL フィルター アーキテクチャを参照してください。
MultiplierOutputPipeline
このパラメーターを使用し、FIR フィルター構造体の乗算器の出力で、指定された数のパイプライン ステージを生成できます。既定値は 0 です。
MultiplierOutputPipeline
には、次の制約が適用されます。
パイプライン ステージにより、影響を受けるフィルターが含まれているモデル内のパスで遅延が発生します。このパイプライン オプションを有効にすると、並列データ パスに遅延の均衡化が自動的に追加されます。
フィルター アーキテクチャのどこにパイプライン ステージが挿入されるかを示す図については、HDL フィルター アーキテクチャを参照してください。
NumMultipliers
NumMultipliers
には、シリアル アーキテクチャをもつ IIR SOS フィルターの実装に使用する乗算器の合計数を指定します。このプロパティは、FoldingFactor プロパティと相補的です。いずれか一方のプロパティを選択しなければなりません。両方を使用することはできません。FoldingFactor
と NumMultipliers
のいずれも選択しない場合、完全なパラレル アーキテクチャでフィルター用の HDL コードが生成されます。
ReuseAccum
このパラメーターを使用して、シリアル HDL アーキテクチャにおけるアキュムレータの再利用を有効または無効にします。既定は、完全なパラレル アーキテクチャです。
生成する アーキテクチャ | ReuseAccum の設定 |
---|---|
完全なパラレル | このプロパティを省略 |
完全なシリアル | 指定なし、または 'off' |
部分的なシリアル | 'off' |
明示的に指定された分割化を伴うカスケード シリアル | 'on' |
自動的に最適化された分割化を伴うカスケード シリアル | 'on' |
フィルターのパラレル アーキテクチャとシリアル アーキテクチャの詳細は、HDL フィルター アーキテクチャを参照してください。
SerialPartition
このパラメーターを使用して、シリアル フィルター アーキテクチャに対してパーティションを指定します。既定は、完全なパラレル アーキテクチャです。
生成する アーキテクチャ | SerialPartition の設定 |
---|---|
完全なパラレル | このプロパティを省略 |
完全なシリアル | N 、ここで N はフィルター長 |
部分的なシリアル |
|
明示的に指定された分割化を伴うカスケード シリアル | [p1 p2 p3...pN] :N 個の整数のベクトル。ここで N はシリアル パーティションの数です。ベクトルの各要素は対応するパーティションの長さを指定します。ベクトルの要素の合計数はフィルターの長さに等しくなければなりません。ベクトル要素の値は降順でなければなりません。ただし、最後の 2 つの要素が等しくなることは可能です。たとえば、長さが 8 のフィルターでは、[5 3] または [4 2 2] のパーティションは有効ですが、[2 2 2 2] と [3 2 3] のパーティションはコード生成時にエラーを発生させます。 |
自動的に最適化された分割化を伴うカスケード シリアル | このプロパティは省略します。 |
フィルターのパラレル アーキテクチャとシリアル アーキテクチャの詳細は、HDL フィルター アーキテクチャを参照してください。
このプロパティも、カスケード シリアル アーキテクチャをもつ Min/Max ブロックで使用します。Min/Max カスケードの構成方法の詳細は、SerialPartitionを参照してください。