●2025.10.26 最終更新
FPGA内部信号モニタ表示IPにはVGA用クロックとして25.175MHz(この付近の周波数でもほぼ問題ない)を必要とします.雑誌記事(12月号 ... 第6回)では割愛しましたが,ここではXilinx (現AMD)のFPGA開発ツール ISE 14.7 を使って,FPGAに搭載されている「クロック専用IP」を利用してこの周波数のクロック信号を生成する方法を解説します.
ISEを使用して開発を行うデバイス(実装テストしたFPGAは,Spartan3AN と Spartan3E)には,「デジタル・クロック・マネージャ (DCM)」という機能を搭載しており,希望する周波数のクロック信号を生成することができます.IPコアの名称は,DCM_SPとなっています.DCM_SPは,遅延ロック・ループ (DLL),デジタル周波数合成 (DFS),位相シフト (PS),ステータス・ロジックから構成されています.
DCM_SPの入力クロックの最低周波数は5MHz,最高周波数は280MHz(スピード・グレードにより若干異なる)となっています(注1).
注1 ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー
クロック・スキューを最小限にするためのDLLと合わせて使用する場合の値で,単にクロック生成機能(DFS)のみの使用の場合は,0.2MHz〜333MHzとなっている.
ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー ー
このDCM_SPを使用するためには,Clocking Wizard ツールを使用します.Clocking Wizard を起動する方法は,単独で起動する方法とISEのプロジェクト・ナビゲータから起動する方法があります.ここでは,ISEの中で利用する方法を説明します.基本的な流れは,IP-ROMの生成と同じ手順となります.
①新しいソース・コードの追加作業開始
プロジェクト・ナビゲータのメニューより(<図ISE_CG1>)
Project → New Source...を選択
New Source Wizard ウィンドウを起動
<図ISE_CG1>
②ソース・タイプの選択
Select Source Type にて(<図ISE_CG2>)
IP(CORE Generator & Architecture Wizard) を選択
File Name 欄にモジュール名(仮にClock_VGAとする)を入力
Location欄にフォルダ名を入力(デフォルトのままでよい)
Add to project チェック・ボックスをオン
Next ボタンをクリック
<図ISE_CG2>
③IPの機能選択
Select IPにて(<図ISE_CG3>)
FPGA Feature & Design → Clocking を選択
使用するFPGAを選択して DCM(この場合はSingle DCM_SP)を選択する
Next ボタンをクリック
<図ISE_CG3>
④サマリの確認(<図ISE_CG4>)
サマリを確認して,Finish ボタンをクリック
<図ISE_CG4>
⑤XAWファイルの確認(<図ISE_CG5>)
XAW(Xilinx Architecture Wizard)ファイルは, DCMのオプション設定を保存する
ファイル
HDL言語の指定(Verilog)
デバイス
確認後,OKボタンをクリック
<図ISE_CG5>
⑥基本事項の設定(<図ISE_CG6>)
General Setupにて
クロック生成のため,CLKFX端子にチェックを入れる
入力クロックの周波数(または周期)を入力
クロック入力ソースの設定(適宜)
他の項目は使用状況に応じて設定
Next ボタンをクリック
<図ISE_CG6>
⑦クロック・バッファの設定(<図ISE_CG7>)
Clock Buffer Settingsにて
カスタマイズが必要な場合に設定
Next ボタンをクリック
<図ISE_CG7>
⑧合成クロック周波数の設定(<図ISE_CG8>)
Clock Frequency Synthesizerにて
Use output frequency のラジオ・ボタンをオンに
周波数(または周期)を入力
Next ボタンをクリック
<図ISE_CG8>
⑨サマリの確認(<図ISE_CG9>)
サマリを確認して,Finish ボタンをクリック
<図ISE_CG9>
以上でクロック生成IPが合成されます.作業フォルダ上に②で入力したモジュール名(Clock_VGA)のVerilog ファイルができています(<リスト ISE_CG1>).このファイルにおいて DCM_SP をインスタンシェーションしていますので,利用者側においてClock_VGAをインスタンシェーションし,必要な信号を接続します.
必要な信号は
入力:CLKIN_IN 元になるクロック信号
入力:RST_IN リセット信号
出力:CLKFX_OUT 合成されたVGA用クロック信号
です.他の出力信号は使用しません.
なお,Clock_VGA.v ファイルを見てみると,生成するクロックの周波数は25MHzとなっていて,小数点以下(0.175MHz)の部分はカットされているのがわかります.
<リスト ISE_CG1>
Clock_VGA.v抜粋
module Clock_VGA(CLKIN_IN,
RST_IN,
CLKFX_OUT,
CLKIN_IBUFG_OUT,
CLK0_OUT,
LOCKED_OUT);
input CLKIN_IN;
input RST_IN;
output CLKFX_OUT;
output CLKIN_IBUFG_OUT;
output CLK0_OUT;
output LOCKED_OUT;
できあがったVGAクロック生成モジュールは,上位モジュールにてインスタンシェーションします(<リスト ISE_CG2>).
<リスト ISE_CG2>
VGA用クロック生成モジュールの
インスタンシェーション記述例
Clock_VGA CG1(
xtal_12MHz, // CLKIN_IN,
reset_N, // RST_IN,
VGA_clock, // CLKFX_OUT,
dummy1, // CLKIN_IBUFG_OUT,
dummy2, // CLK0_OUT,
dummy3); // LOCKED_OUT);
■関連情報
・特になし