| ||||||||
| ||||||||
| ||||||||
|
DCM (Digital Clock Manager)を使って外部入力したクロックを逓倍/分周できる。
スタータキットのクロックは50MHzが入っているので、それを2倍して100MHzにしてみる。
単に2倍をする機能はGUIウィザードでデフォルトでついているのでとても簡単。
Windowsのスタートボタンから、Xilinxのアクセサリ-Architecture Wizardを開く。
プロジェクトが保存してあるところのディレクトリに適当な名前をつけて、FPGAの種類を選んでOKする。
[Single DCM_SP]を選んでOK。
そして、General Setupというのが出てくるので以下のうように設定。
CLK2Xをチェックすると2逓倍クロックを作ってくれる。
CLKDVは分周、CLKFXは合成(中途半端なクロックを作れる)もチェックすれば使える。
Input Clock Frequencyは50Mhzを入力する。
CLKIN SourceはExternalでもInternalでもどちらでも使える。
Externalを使う場合は、もとのクロックの名前(例えばclk)は使えなくなるので、50MHzを使いたい場合はCLK0_OUTを使う。
Nextを押すと次のページが出てくるが、特に何もしなくてよい。
そして次の画面もフィニッシュ。
これでソースが作られる。
プロジェクトにAdd Sourceして今作ったほげ.vhdを加える。
加えたvhdファイルの[Design Utilities]-[View HDL Instantiation Template]とやると、
COMPONENT dcm2x
PORT(
CLKIN_IN : IN std_logic;
RST_IN : IN std_logic;
CLKIN_IBUFG_OUT : OUT std_logic;
CLK0_OUT : OUT std_logic;
CLK2X_OUT : OUT std_logic;
LOCKED_OUT : OUT std_logic
);
END COMPONENT;
Inst_dcm2x: dcm2x PORT MAP(
CLKIN_IN => ,
RST_IN => ,
CLKIN_IBUFG_OUT => ,
CLK0_OUT => ,
CLK2X_OUT => ,
LOCKED_OUT => );
というのが出てくるので、これらを本体のVHDLソースに入れてやる。
上部のCOMPONENT部分はbeginの前に、
下部のInst_dcm2xは、beginの後に例えば
Inst_dcm2x: dcm2x PORT MAP(
CLKIN_IN => clk,
RST_IN => rst,
CLKIN_IBUFG_OUT => clkib,
CLK0_OUT => clk0,
CLK2X_OUT => clk2x,
LOCKED_OUT => clklk);
のようにして書く。(clkは元のクロック入力)
こうすれば、clk0は50MHz、clk2xは100MHzのクロックとして使えるようになる。
clkgen: process(clk, rst)
begin
↓
clkgen: process(clk2x, rst)
とやれば、100MHzのプロセスが動いてくれる。
すばらしいです。
Last Update: 2009/4/6
Hidetada Baba
baba @ rarfaxp.riken.jp