日本ロジック設計    - VHDL ロジック記述サンプル -

TOPページ 


DDS 正弦波生成ロジックサンプル MMCM(PLL)使用版


  AI学習禁止
  無断転載禁止
  免責事項: 当サイトの情報を元に取った行動の結果について、一切の責任を負いません
  No unauthorized reproduction or AI training allowed.
  Unauthorized reproduction prohibited.
  Disclaimer: We are not responsible for any actions taken based on the information on this site.
  (C) 2025 JAPAN LOGIC DESIGN 日本ロジック設計



  別ページ 「10. DDS 正弦波生成ロジックサンプル」 の DDS正弦波生成ロジックに、
  内蔵 MMCM(PLL) を組み込んだ例を紹介する。
  MMCM(PLL)を使用することで、FPGAの外部クロックに依存せず、生成する周波数に合わせたクロックが利用でる。

  1. 主な仕様
    ・MMCM(PLL)設定周波数は 51.2MHz (外部クロック:20MHz)
     波形メモリのテーブルは 8bit(256-STEP)のため、位相加算値=10000h にて、200KHzの正弦波出力となる
    ・波形出力: 8 bit
    ※本サンプルは 8bit の波形データを出力するところまで。
     DA変換については別ページ 「 9. シグマ方式DACロジックサンプル」 を参照。

  2. 使い方
    ・入力に周波数(位相加算値)を設定すれば、正弦波のデータ(8 bit)が出力される。

  3. MMCM(PLL)の組み込み手順について
    以下、MMCM(PLL)の作成/組み込み手順について説明する。
    最初に「Clocking Wizard」を使用して MMCM(PLL)モジュールを作成する。

    ・事前にプロジェクトを作成しておく。
    ・①左上の「IP Catalog」を選択し、②「Clocking Wizard」をダブルクリックする。
[picture:pic_dds_generator_002]

    ・MMCM か PLL の設定画面、ここではデフォルトの MMCMを選択。
     ③MMCMの入力クロック(FPGAの外部入力クロック)周波数を設定する。この例では 20MHz。
[picture:pic_dds_generator_002]

     ④MMCMの出力クロック周波数を設定する。この例では 51.2MHz。
      なお MMCM のRESET入力の極性は、デフォルトで正論理なので注意。
      設定したら右下の「OK」ボタンを押す。
[picture:pic_dds_generator_002]

     ⑤「Generate」を実行すれば、⑥プロジェクトにMMCMモジュールが登録される。
      登録後、Design Sources の「更新:Refresh」を行うこと。自動ではやってくれないらしい。
      あとで周波数など変更したい場合は、⑥をダブルクリックすれば④から設定をやり直せる。
[picture:pic_dds_generator_002]

     以上で MMCMモジュールの作成は完了。
     次に、VHDLソースのTOPファイルに MMCMを呼び出す記述を追加する。

     ⑦「IP Source」タグを選択、「clk_WIZ_0」を展開し、⑧記述サンプルテンプレート「clk_WIZ_0.vho」を選択して開く。
     ⑨の部分をコピーしておく。
[picture:pic_dds_generator_002]

     VHDLソースのTOPファイルを開き(本サンプルでは [DDS_GENERATOR.vhd] )、
     ⑩Component 記述として先の⑨を貼り付ける。
     ⑪インスタンス化の記述を追加する。
      なお、MMCM の RESET 入力はデフォルトで正論理なので、必要に応じて反転記述を追加する。
[picture:pic_dds_generator_002]

      あとは、必要な信号を各ロジックと接続すればよい。

  4. MMCM(PLL)クロックのタイミング制約記述
    本サンプルに関しては、MMCM(PLL)関連のタイミング制約記述を省略しても動作するが、
    メモ書きを兼ねて、記述方法をまとめておく。
    
    実は少々手間が掛かる。
    
    外部クロックの名称は、入力端子の信号名をそのまま使用できるが、
    MMCM(PLL)クロックは内部クロックのため、コンパイルを掛けるまで信号名が決まらない。
    一度コンパイルしたのち、Tcl Console にて①「get_clocks」を実行すると、②クロック関連の信号名が表示されるので
    これを参考にする。
[picture:pic_dds_generator_002]


    本サンプルでは「clk_out1_clk_wiz_0」が MMCM の出力クロック信号名。
    XDC ファイルでの制約記述には、このクロック名を使用する。
    例:
      # OUTPUT DELAY ----------------------------------
      set_output_delay -clock clk_out1_clk_wiz_0 -min 0.10 [get_ports {WAVE_DATA_OUT[*]}]
      set_output_delay -clock clk_out1_clk_wiz_0 -max 1.00 [get_ports {WAVE_DATA_OUT[*]}]

    なお、上記XDCファイル修正後にコンパイルを掛けると、Synthesis 処理で warnings が出てしまう。
    これは、まだ信号名として clk_out1_clk_wiz_0 が決定される前のため。
    Implementation 処理まで実行すれば、信号名が決まりつじつまが合うようになる。

  5. テストベンチについて
   周波数(位相加算値)を変えることで、発生する周波数が変わることを確認する。
   MMCM(PLL) によりクロックを 51.2MHz に設定したため、位相加算値=10000h にて、200KHzの正弦波出力となる。(周期 5uS)
   ※VIVADOシミュレーションではアナログ波形にノイズが乗るが、原因は不明。拡大表示すればほぼ消える。
[picture:pic_dds_generator_002]


  6. サンプルファイル
   MMCM(PLL)組み込み済みのプロジェクトファイル一式
    ・VIVADO用プロジェクトファイル:japanlogicdesign_dds_generater_vivado_mmcm.zip
    ※注意:VIVADO プロジェクトファイルは参考にとどめ、新規に作成しなおすことを推奨する

 中国プロテクト:天安門事件、法輪功、チベット