メインコンテンツ

グローバル オーバーサンプリング クロックの生成

多くの設計では、DUT は完結していません。たとえば、グローバル クロックにより制御されているコンポーネントにタイミング信号を供給する大規模なシステムの一部である DUT の場合を考えてみましょう。グローバル クロックは通常、制御下にあるコンポーネントの一部より高いレートで実行されます。グローバル オーバーサンプリング クロックを指定すると、Upsample ブロックや Downsample ブロックを使用せずに DUT を大規模なシステムに統合することができます。

グローバル クロック ロジックを生成するには、オーバーサンプリング値を指定します。オーバーサンプリング値はグローバル オーバーサンプリング クロックの望ましいレートをモデルの基本レートの倍数として表します。オーバーサンプリング値を指定すると、HDL Coder™ はグローバル オーバーサンプリング クロックを生成して、必要なタイミング信号をクロック信号から導出します。グローバル オーバーサンプリング クロックは、生成された HDL コードにのみ影響します。クロックはモデルのシミュレーションの動作には影響しません。

オーバーサンプリング値の指定

設計に応じて、2 つの異なるパラメーターを使用して、モデルのオーバーサンプリング値を設定できます。

[Simulink のレートを実際のハードウェアのレートとして扱う] を有効にした場合、Simulink レートまたはターゲット周波数が変化したときに、[オーバーサンプリング係数] を手動で更新しなくても、HDL Coder がモデルのオーバーサンプリング値を自動的に調整できます。

[コンフィギュレーション パラメーター] ダイアログ ボックスを使用したオーバーサンプリング値の指定

実際のハードウェアのレートを使用してモデル化する場合、つまり Simulink のレートでハードウェア上のデータ レートが反映されるようにする場合は、以下を行うことで、[コンフィギュレーション パラメーター] ダイアログ ボックスからグローバル クロックのオーバーサンプリング値を指定できます。

  1. [HDL コード生成][ターゲット] ペインで [ターゲット周波数] パラメーターにゼロより大きい値を設定します。

  2. [HDL コード生成][グローバル設定] ペインで [Simulink のレートを実際のハードウェアのレートとして扱う] チェック ボックスをオンにします。

相対的なレートを使用してモデル化する場合、つまり Simulink のレートが基本レート 1 に正規化されるようにする場合は、[HDL コード生成][グローバル設定] ペインで [オーバーサンプリング係数] パラメーターを 1 より大きい値に設定することで、[コンフィギュレーション パラメーター] ダイアログ ボックスからグローバル クロックのオーバーサンプリング値を指定できます。

コマンド ラインからのオーバーサンプリング値の指定

実際のハードウェア レートを使用してモデル化する場合は、コマンド ラインから、関数 hdlset_param または makehdl を使用して、モデルの TargeFrequency プロパティを設定し、TreatRatesAsHardwareRates プロパティを有効にすることで、グローバル クロックのオーバーサンプリング値を指定できます。たとえば、ターゲット周波数として 200 MHz を指定し、HDL Coder で現在のモデルのオーバーサンプリング値を自動的に設定できるようにする場合は、以下のコマンドを使用します。

hdlset_param(gcs,'TargetFrequency',200)
hdlset_param(gcs,'TreatRatesAsHardwareRates','on')

相対的なレートを使用してモデル化する場合は、コマンド ラインから、関数 hdlset_param または makehdl を使用して Oversampling プロパティを設定することで、グローバル クロックのオーバーサンプリング値を指定できます。たとえば、現在のモデルに対してオーバーサンプリング係数として 7 を指定する場合は、以下のコマンドを使用します。

hdlset_param(gcs,'Oversampling',7)

オーバーサンプリング係数の要件

[オーバーサンプリング係数] パラメーターを使用してオーバーサンプリング値を手動で指定する場合は、以下ようになります。

  • [オーバーサンプリング係数] は 1 以上の整数でなければなりません。

  • [オーバーサンプリング係数] パラメーターの既定値は 1 です。既定では、HDL Coder はグローバル オーバーサンプリング クロックを生成しません。

  • 一部の DUT では、内部演算のために複数のサンプリング レートが必要です。そのような場合、DUT の他のレートはグローバル オーバーサンプリング レートを等分していなければなりません。詳細については、オーバーサンプリング レートの競合の解決を参照してください。

オーバーサンプリング レートの競合の解決

一部の設計では、元の Simulink モデルがシングル レートであっても、HDL 実現は本質的にマルチレートとなります。例として、simplevectorsum_cascade モデルを取り上げます。

このモデルはサブシステム vsum で構成されています。このサブシステムは幅が 10 のベクトル入力によって駆動され、出力はスカラー出力です。次の図は、このモデルのルート レベルを示しています。

Subsystem contains vsum block in it.

テスト対象デバイスは、次の図に示す vsum サブシステムです。このサブシステムには、ベクトル和のために構成された Sum ブロックがあります。

The Sum of Elements block with In1 at the input port and Out1 at the output port

simplevectorsum_cascade モデルは Sum ブロックに対してカスケード実装 (SumCascadeHDLEmission) を指定しています。カスケード ベクトル Sum ブロック実装用に生成された HDL コードは、内部計算のための高速 (オーバーサンプリング) レートと、入出力のための低速レートの 2 つの有効レートで実行されます。HDL Coder によって、DUT の固有オーバーサンプリング レートが基本レートの 5 倍であることがレポートされます。

dut = 'simplevectorsum_cascade/vsum';
makehdl(dut);
### Generating HDL for 'simplevectorsum_cascade/vsum'
### Starting HDL Check.
### HDL Check Complete with 0 errors, 0 warnings and 0 messages.


### The code generation and optimization options you have chosen have introduced
    additional pipeline delays. 
### The delay balancing feature has automatically inserted matching delays for
    compensation.
### The DUT requires an initial pipeline setup latency. Each output port
    experiences these additional delays
### Output port 0: 1 cycles

### Begin VHDL Code Generation
### MESSAGE: The design requires 5 times faster clock with respect to the
    base rate = 1.
...

場合によっては、このような DUT でのクロックの要件がグローバル オーバーサンプリング レートと競合することがあります。オーバーサンプリング レートが競合しないようにするには、モデル内のサブレートがグローバル オーバーサンプリング レートを等分していることを確認します。

たとえば、simplevectorsum_cascade モデルについて値が 8 のグローバル オーバーサンプリング レートを要求すると、コード ジェネレーターで警告が表示され、要求したオーバーサンプリング係数は無視されます。コード ジェネレーターでは、DUT が要求したオーバーサンプリング係数が代わりに適用されます。

dut = 'simplevectorsum_cascade/vsum';
makehdl(dut,'Oversampling',8);
### Generating HDL for 'simplevectorsum_cascade/vsum'
### Starting HDL Check.
### HDL Check Complete with 0 errors, 0 warnings and 0 messages.

### The code generation and optimization options you have chosen have introduced
    additional pipeline delays. 
### The delay balancing feature has automatically inserted matching delays for
    compensation.
### The DUT requires an initial pipeline setup latency. Each output port
    experiences these additional delays
### Output port 0: 1 cycles

### Begin VHDL Code Generation
### WARNING: The design requires 5 times faster clock with respect to 
        the base rate = 1, which is incompatible with the oversampling 
        value (8). Oversampling value is ignored.
...

次の例では、オーバーサンプリング係数が 10 に設定されます。

dut = 'simplevectorsum_cascade/vsum';
makehdl(dut,'Oversampling',10);
### Generating HDL for 'simplevectorsum_cascade/vsum'
### Starting HDL Check.
### HDL Check Complete with 0 errors, 0 warnings and 0 messages.


### The code generation and optimization options you have chosen have introduced
    additional pipeline delays. 
### The delay balancing feature has automatically inserted matching delays for
    compensation.
### The DUT requires an initial pipeline setup latency. Each output port
    experiences these additional delays
### Output port 0: 1 cycles

### Begin VHDL Code Generation
### MESSAGE: The design requires 10 times faster clock with respect to 
    the base rate = 1.
...

参考

トピック