先日digilentに注文しておいたZYBOが届いた。

いきなり確認不足だった点:
- VGAポートは抵抗分割のFPGA直結だった。しかもRGB565(計16bit)階調しかない。
-水晶はPSの50MHzが接続されているだけ?と思ったが、マニュアルを読んでみると、ethernet PHYから125MHzが出ていて、それがPL(pin L16)に接続されているみたいだ。こちらは、PHYRSTBをHighにしないと出力されない。

早速、4/25付けで上記ページにアップロードされているZYBO Base System Designをダウンロードし、Vivado 2014.1で合成してSDKで動かしてみた(IPのアップグレードは薦められるままでOKだった)。main.cのAudoInitializeを実行すると、デバッガが止まってしまったので、とりあえず後回しにし、コメントアウトして実行すると、UARTでメニュー操作ができるようになった。

HDMIを選択し、1920x1080@60pを選択すると、ちゃんとFull HD解像度で動作した。

Zynq7010は、デバイスとしては公式には1.5Gbpsはサポートしていないはずだけれど、安定して動作しているっぽいな。Zynq恐るべし。

HDMI出力のところは自分で作ろうかと思っていたのだが、サンプルがこんなに簡単に動いてしまうと、自作する気力は一気に萎えた。別のことに労力を使うことにしよう。

marseeさんがもう少し具体的な方法をまとめて下さっています。ISE14.7ですが、きっとVivadoも近々出していただけるのを期待しています(4/29追加:Vivadoバージョンも早速記述して下さっています。こちら)。

HDMIのクロック等の動作について調査:


ZYBOに載っているZynqはZC7010-1なので、FHD@60pは普通のIOだと定格はオーバーして動作させている。

hdmi_txのインスタンス部

hdmi_txのPXLCLK_5XIがOSERDESE2に使用する高速クロック。これはaxi_dispctrl_1のPXL_CLK_5X_Oから出力されている。axi_dispctrl_v1_0.vhdを見てみると、C_USE_BUFR_DIV5=1の条件のときに、mmcm_clkをBUFIOに通している。そして、同じmmcm_clkをBUFRにて5分周している。このクロックはピクセルクロックとして使用される。例えば、FHD@60pだとそれぞれ大体750MHz, 150MHzになっている(と思われる)

UG472(7 Series FPGAs Clocking Resources)によると、OSERDESE2のCLK, CLKDIVをこのようにBUFIO, BUFRで駆動する例が出ている(図A-7)。



あとは、hdmi_txを読んでみると、 SerializerN_1が10:1シリアライザとしてインスタンス化されている。HDMIクロックはデータ1111100000として事実上150MHzで送っているようだ。クロックはDDRかと思い込んでいたが、受信側でPLLで10倍するのだろう。

 後は、SerializerN_1でOSERDESE2をMaster/Slaveモード、DDRで動作させることで10:1シリアライズしている。

750MHzを作っているMMCMに入力されているのは、ブロック図からすると、processing_system7_0のFCLK_CLK0でIO PLL生成の100MHz。したがって、PLL2段構成だが安定して動作しているようだ。

ここでデータシート(DS187)を確認してみると、MMCMの最大出力周波数は800MHzだから、ここはOK。表63からすると、BUFIOの最大周波数は600MHzなので、ここは150MHzオーバー。表47からすると、OSERDESによるDDR LVDSトランスミッターはMax 950Mbps(TMDSとは特性が多少異なるはずだが)なので、こちらも550Mbpsオーバー。

これでも画像を見ている分には、安定しているように思われる。定格の1.5倍で動作させているのに。あるいは、HDMIのデータは変化が少なくなるように8b10bしているようだから、それも良い方向に作用しているのかもしれない。

いずれにせよ、-1のスピードグレードといいながら、実は相当特性の良いものをXilinxは出しているのではなかろうか。以前Virtex-5を使用したときには、PLLを2段接続すると600MHz以下の規格内周波数だったのに、ジッタで不安定だった。それを考えると今回のTSMC 28nmは相当良くできているのではないかと思う。

Comments