人気ブログランキング | 話題のタグを見る

雑多な趣味の記録帳

tom01h.exblog.jp

FPGA プログラミング大全 9 まとめ

Arty Z7 で FPGA プログラミング大全 の9章のグラフィック表示回路を設計します。
サポートページ の PYNQ 用設計データを参考にして HDMI 出力のできる回路にします。
FPGA プログラミング大全 9 まとめ_f0054075_01205104.jpg
要点
サポートページのデータはEdgeではダウンロードできない。
display と ZYNQ の間を自動接続すると AXI SmartConnect になるので、AXI Interconnect に変更する(Vivado 2017.2)。
disp_fifo は 24bit 幅の 1024 段に設定する。
RGB to DVI Video Encoder IP には RBG の順でデータを入れる(RGB to DVI 1.4)。
RGB to DVI Video Encoder IP の出力とポートの接続時に、データのビット0とビット1を交差させる(RGB to DVI 1.4)。
RGB to DVI Video Encoder IP の設定は MMCM のほうが良いみたい。
display IP と RGB to DVI の間で HSYNC と VSYNC の極性があっていない。

準備
FPGA プログラミング大全を買う。
サポートページ から PYNQ 用設計データをダウンロードする。
Digilent の IP を ここ からダウンロードしてきて、Installation に書いてある通りにインストールする。

実装
いろいろとすっ飛ばして 9-2-2 から始めます。コードの入力も自分ではやりません。本に書いてある通り進みます。
で、最初に本の内容から変わるのはグラフィックス IP に FIFO を追加するところ。
PYNQ 用の説明にある通り、FIFO は 24bit 入力、24bit 出力です。
PYNQ のデータの中に準備してくれているようにも見えるけど、これ(disp_fifo)は消しちゃって自分で生成します。
IP Catalog から FIFO Generator を選びます。図9-11 を参考に作りますが、少し違って 24bit 幅、深さ1024 の FIFO を作ります。
Add Sources で disp_ip の 下にできた src/disp_fifo/disp_fifo.xci をファイルのコピーなしで追加します。
これって自動で追加してくれないんですかね?
FPGA プログラミング大全 9 まとめ_f0054075_20260115.png
また本の記述に戻ります。グラフィックス IP を組み込んで自動配線をするのですが、ディスプレイ IP と ZYNQ が AXI SmartConnect で繋がれます。互換性あるって書いてあるのですが、なんか怪しいので AXI Interconnect に取り替えます。AXI Interconnect の Master Interface 数は 1 に変更します。
GPIO をつないだ後は、当然ですが VGA 出力を出力ポートに接続しません。
PYNQ の資料を参考に RGB to DVI などを接続するのですが、以下の違いがあります。
RGB to DVI への入力は RBG の順です。
なぜかここをRGBの順からRBGの順に変えるだけで動かなくなります。まったく意味不明ですが、別のところで対策することにしました。
RGB to DVI の設定は MMCM を使用しました。
display IP と RGB2DVI は HSYNC と VSYNC の極性があっていないので、間にインバータを挟みました。
出力ポートは Create Port を使って、自分で作成しました。
全部できるとこんな感じです。
FPGA プログラミング大全 9 まとめ_f0054075_21302586.png
Synthesis, Implementation と進んで、ポートを以下のように接続します。
FPGA プログラミング大全 9 まとめ_f0054075_21261510.png
また Systhesis からやり直し?いつもこうやっているけど、この手順しかないのかな?

動作確認
ここから先は PYNQ のデータを使って、本に書いてある通りに実行するだけです。

ずいぶん強引な対策をしたので、この絵以外でもちゃんと動くのかはよくわかりません。
それにしても映り込みがひどい液晶です。
FPGA プログラミング大全 9 まとめ_f0054075_01212162.jpg

by tom01h | 2017-10-31 23:18 | 本・映画など