Main Content

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

グローバル オーバーサンプリング クロックを使用する理由

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

グローバル クロック ロジックを生成するには、"オーバーサンプリング係数" を指定します。オーバーサンプリング係数はグローバル オーバーサンプリング クロックの望ましいレートをモデルの基本レートの倍数として表します。

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

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

グローバル オーバーサンプリング クロックのオーバーサンプリング係数を指定する場合、次の要件に注意してください。

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

  • 既定値は 1 です。既定では、HDL Coder はグローバル オーバーサンプリング クロックを生成しません。

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

GUI からのオーバーサンプリング係数の指定

次の手順で、GUI からグローバル クロックのオーバーサンプリング係数を指定できます。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスで [HDL コード生成][グローバル設定] ペインを選択します。

  2. [クロック設定] セクションの [オーバーサンプリング係数] で、目的のオーバーサンプリング係数を入力します。次の図では、[オーバーサンプリング係数] で、モデルの基本レートの 10 倍で実行されるグローバル オーバーサンプリング クロックを指定します。

  3. [HDL コード生成] ペインの [生成] をクリックして、コード生成を開始します。

    HDL Coder によって、オーバーサンプリング クロック レートがレポートされます。

    ### Begin VHDL Code Generation
    ### MESSAGE: The design requires 10 times faster clock with respect to the base rate = 1.
    ### Working on symmetric_fir_tc as hdlsrc\symmetric_fir_tc.vhd
    ### Working on sfir_fixed/symmetric_fir as hdlsrc\symmetric_fir.vhd
    ### HDL Code Generation Complete.

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

コマンド ラインから hdlset_param または makehdlOversampling プロパティを設定することにより、グローバル クロックのオーバーサンプリング係数を指定できます。次の例では、オーバーサンプリング係数として 7 を指定しています。

makehdl(gcb,'Oversampling', 7)
### Generating HDL for 'sfir_fixed/symmetric_fir'
### Starting HDL Check.
### HDL Check Complete with 0 errors, 0 warnings and 0 messages.


### Begin VHDL Code Generation
### MESSAGE: The design requires 7 times faster clock with respect to the base rate = 1.
### Working on symmetric_fir_tc as hdlsrc\symmetric_fir_tc.vhd
### Working on sfir_fixed/symmetric_fir as hdlsrc\symmetric_fir.vhd
### HDL Code Generation Complete.

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

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

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

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

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/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.
...