7シリーズ用のMMCM (Mixed Mode Clock Manager)についてまとめておこうと思います。
7シリーズ用のMMCMについては、”
ZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP5(MMCM)”で書いたのですが、より詳細にまとめておこうと思います。とにかく M と O0 に実数が使えるのが良いです。但し、0.125ステップです。
なおこのブログを書くにあたっては、”
7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”を参照しました。
まずは、”7 シリーズ FPGA クロッキング リソースユーザーガイド UG472 (v1.8) 2013 年 8 月 7 日”の63ページの図3-2 : MMCM の詳細なブロック図を引用します。

D は、クロック入力のプログラマブルな分周器です。その分周比は、プリミティブで言うと、DIVCLK_DIVIDE パラメータに相当します。(値は、1 ~ 106 の整数値)
M は、VCOの周波数を分周して入力クロックとVCOで位相比較器するための分周器です。プリミティブで言うと、CLKFBOUT_MULT_F パラメータに相当します。(値は、2 ~ 64までの整数か、2.000 ~ 64.000 の増加幅が 0.125の実数)
O0 ~ O6 は、出力の分周器です。O0のみ分周比に実数を使うことが出来ます。それ以外の分周比は整数です。
プリミティブで言うと、O0のパラメータは、CLKOUT0_DIVIDE_F です。(値は、2 ~ 128までの整数か、2.000 ~ 128.000 の増加幅が 0.125の実数)
O1 ~ O6 は、プリミティブのパラメータは、CLKOUT[0:6]_DIVIDE です。(値は、1 ~ 128 の整数)
VCOの周波数、
Fvco = Fclkin x M / D です。
”
Zynq-7000 All Programmable SoC (Z-7010、Z-7015、Z-7020) : DC 特性および AC スイッチ特性 (日本語版) ( ver 1.11, 2411 KB )”の 46ページ、表 69 : MMCM のスイッチ特性によると、MMCM_FVCOMIN(最小 MMCM VCO 周波数)は 600MHz、MMCM_FVCOMAX(最大 MMCM VCO 周波数)は -1 グレードでは、1200MHz ですので、この間に、Fvco を収める必要があります。
出力周波数は、
Fout = Fclkin x M / (D x O) です。
MMCMの 0番目は、O が実数で選択できるので、かなり正確に出力周波数を合わせることが出来ますが、M と O を決めるのが難しいです。ソフトウェアがあると良いですね。作ろうと思っていましたが、面倒ですね。誰か作ってくれると良いですね。。。
下に私のHDMIの周波数のパラメータを示します。シリアライザに供給するためピクセルクロックの5倍の周波数をMMCMで合成しています。XGAまではピッタリの周波数を合成できましたが、SXGA、HDはピッタリの周波数を合成できませんでした。HDの周波数については、表示ができなかったので、再検討が必要だと思います。
DIVCLK_DIVIDE = 1, MMCM_CLKFBOUT_MULT が CLKFBOUT_MULT_F、MMCM_CLKOUT0_DIVIDE が CLKOUT0_DIVIDE_F に相当します。
-- pixclk = 25MHz, MMCM VCO Frequency = 600 ~ 1200 MHz
dvi_disp_inst : dvi_disp generic map (
-- MMCM_CLKFBOUT_MULT => 30.0, -- VGA (VCO Freq = 750MHz)
-- MMCM_CLKIN_PERIOD => 40.0,
-- MMCM_CLKOUT0_DIVIDE => 6.0 -- 25MHz x 5 = 125MHz
-- MMCM_CLKFBOUT_MULT => 24.0, -- SVGA (VCO Freq = 600MHz)
-- MMCM_CLKIN_PERIOD => 40.0,
-- MMCM_CLKOUT0_DIVIDE => 3.0 -- 40MHz x 5 = 200MHz
MMCM_CLKFBOUT_MULT => 26.0, -- XGA (VCO Freq = 650MHz)
MMCM_CLKIN_PERIOD => 40.0,
MMCM_CLKOUT0_DIVIDE => 2.0 -- 65MHz x 5 = 325MHz
-- MMCM_CLKFBOUT_MULT => 43.25, -- SXGA (VCO Freq = 1081.25MHz)
-- MMCM_CLKIN_PERIOD => 40.0,
-- MMCM_CLKOUT0_DIVIDE => 2.0 -- 108MHz x 5 = 540MHz(540.625/5=108.125MHz)
-- MMCM_CLKFBOUT_MULT => 29.75, -- HD (VCO Freq = 743.75MHz)
-- MMCM_CLKIN_PERIOD => 40.0,
-- MMCM_CLKOUT0_DIVIDE => 1.0 -- 148.5MHz x 5 = 742.5MHz(743.75/5=148.75MHz)
) port map (
Xilinx\14.7\ISE_DS\ISE\verilog\src\unisims に Verilog HDLのプリミティブのソースが有ります。その、MMCME2_ADV.v と MMCME2_BASE.v を見ると、どのようなパラメータとポートがあるかわかると思います。VHDLでしたら、Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\primitive です。VHDLの MMCME2_BASE のポート宣言部分を下に引用します。
entity MMCME2_BASE is
generic (
BANDWIDTH : string := "OPTIMIZED";
CLKFBOUT_MULT_F : real := 5.000;
CLKFBOUT_PHASE : real := 0.000;
CLKIN1_PERIOD : real := 0.000;
CLKOUT0_DIVIDE_F : real := 1.000;
CLKOUT0_DUTY_CYCLE : real := 0.500;
CLKOUT0_PHASE : real := 0.000;
CLKOUT1_DIVIDE : integer := 1;
CLKOUT1_DUTY_CYCLE : real := 0.500;
CLKOUT1_PHASE : real := 0.000;
CLKOUT2_DIVIDE : integer := 1;
CLKOUT2_DUTY_CYCLE : real := 0.500;
CLKOUT2_PHASE : real := 0.000;
CLKOUT3_DIVIDE : integer := 1;
CLKOUT3_DUTY_CYCLE : real := 0.500;
CLKOUT3_PHASE : real := 0.000;
CLKOUT4_CASCADE : boolean := FALSE;
CLKOUT4_DIVIDE : integer := 1;
CLKOUT4_DUTY_CYCLE : real := 0.500;
CLKOUT4_PHASE : real := 0.000;
CLKOUT5_DIVIDE : integer := 1;
CLKOUT5_DUTY_CYCLE : real := 0.500;
CLKOUT5_PHASE : real := 0.000;
CLKOUT6_DIVIDE : integer := 1;
CLKOUT6_DUTY_CYCLE : real := 0.500;
CLKOUT6_PHASE : real := 0.000;
DIVCLK_DIVIDE : integer := 1;
REF_JITTER1 : real := 0.010;
STARTUP_WAIT : boolean := FALSE
);
port (
CLKFBOUT : out std_ulogic;
CLKFBOUTB : out std_ulogic;
CLKOUT0 : out std_ulogic;
CLKOUT0B : out std_ulogic;
CLKOUT1 : out std_ulogic;
CLKOUT1B : out std_ulogic;
CLKOUT2 : out std_ulogic;
CLKOUT2B : out std_ulogic;
CLKOUT3 : out std_ulogic;
CLKOUT3B : out std_ulogic;
CLKOUT4 : out std_ulogic;
CLKOUT5 : out std_ulogic;
CLKOUT6 : out std_ulogic;
LOCKED : out std_ulogic;
CLKFBIN : in std_ulogic;
CLKIN1 : in std_ulogic;
PWRDWN : in std_ulogic;
RST : in std_ulogic
);
- 2014年05月09日 05:24 |
- Artix-7, Kintex-7, Virtex-7
-
| トラックバック:0
-
| コメント:0
前回はISE13.1でKintex-7をインプリメントしてみたが、今度はVirtex-7をインプリメントしてみた。Virtex-7はWebPACKではインプリメントすることができない。
xc4v285t-1ffg484の一番小さいVirtex-7でインプリメントしてみた。
Virtex-7も下のワーニングが出て、ビットファイルを生成することができない。
WARNING:Bitgen:26 - Bitgen only supports DRC but not bitstream generation on this device. This condition can occur if there are problems obtaining a license to run bitgen or if the design targets a device which is Early Access.

次にFPGA Editorで見てみるが、やはり一番小さいとはいえVirtex-7。大きい。44,700スライスあって、前回のKintex-7の約10倍だ。

右はじに、600Mbps~12.5GbpsのGTXトランシーバが並んでいる。PCI Express(PCIe)も2個実装されている。左はじは普通のIOのようだ。
Virtex-7もKintex-7と内部のスライスやIO、CMTなどの内部ブロックは同様みたいだ。Airtex-7はまだISE13.1ではインプリメント出来ないが、全シリーズ同じ構造だと移行するのが簡単でとても良いと思う。
従来、SpartanからVirtexに移行するのは、プリミティブを使ってあると特に難しく、全面書き直しになることもあったが、今回はスムーズに上下のシリーズに移行できそうだ。これはとても良いと思う。
- 2011年03月19日 05:22 |
- Artix-7, Kintex-7, Virtex-7
-
| トラックバック:0
-
| コメント:0
どうも地震でやる気がなくなっていたが、そろそろ始めようと思う。基板も作成中だが、ISE13.1からインプリメント可能になった。Kintex-7のインプリメントをしながら、Airtex-7, Kintex-7, Virtex-7シリーズに付いて学んでみたいと思う。
まずはしょぼくて申し訳ないが、
キャラクタ・ディプレイ・コントローラをKintex-7、xc7k30t-1fbg484でインプリメントしてみた。
xc7k30t-1fbg484は、4,750スライス(1スライスは4個のLUT、8個のFFを持つ)、Block RAMの容量は、18Kb換算で130個、3CMT、PCI Expressインターフェース1個、GTXトランシーバー4個を持っている。
キャラクタ・ディプレイ・コントローラをインプリメントするに当たって、IOピンの配置制約LOCをすべてコメントアウトして、PERIOD制約だけにしている。
NET "clk" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 20 ns HIGH 50 %;
ISE13.1でインプリメントしてみるとGenerate Programming Fileでエラーとなった。

エラー内容と言うかワーニングを下に示す。
WARNING:Bitgen:26 - Bitgen only supports DRC but not bitstream generation on this device. This condition can occur if there are problems obtaining a license to run bitgen or if the design targets a device which is Early Access.
どうやら、まだビットファイルは生成できないようだ。
次に、例によって、FPGA Editorで見てみよう。

左からI/Oパッドがあって、FIFO、BRAM、BRAM、PCIe、BRAM、GTX、FIFO、I/Oピンが並んでいるのがわかる。
DCMがどうインプリメントされているか見てみると、MMCM (mixed-mode clock manager)に割り当てられている。

MMCMは、
7 Series FPGAs Overviewによると、11.2psごとに位相シフトできるPLLのようだ(まだ、細かい違いがあるのかもしれないが。。。)CMTの中にMMCMが1個、PLLが1個入っている。使用したMMCME2_ADVを下に示す。

(追記)
Kintex-7のSLICELを下に示す。

4個の6入力LUTと8個のFFがある。
次にSLICEMを下に示す。

LUTが分散RAMになることを除けば、SLICELと同様だ。
これはVirtex-6と同様のSLICE構造に見える。(”
Virtex-6とSpartan-6のスライス構造とパスの比較”参照)
- 2011年03月16日 21:30 |
- Artix-7, Kintex-7, Virtex-7
-
| トラックバック:0
-
| コメント:0