2017年 11月 17日 ( 1 )

前回は 1024x768 出力だった Arty Z7 の HDMI out の1280x800 に挑戦していますが、なかなかうまく出来ません。→ 出来ました
まずはディスプレイの各種パラメータをいじってから流してみたら
disp_fifo がアンダーフローしてまともな表示になりません。
それならと、DDR の読出しを高速化すると fifo アンダーフローはなくなったみたいですが、
まだ表示はおかしなままです。
で、問題のありかがさっぱりわからなくなりました。
そんなわけで、解像度はそのままに、DDR の読出しだけ高速化してみたいと思います。

1280x800 を表示するために必要な転送速度は、平均で
1280x800x4x60 = 246MByte/sec

Arty Z7 の DDR の転送速度は、理論値の最速で
1050MHz x 2(DDR) x 16bit = 4.2GByte/sec

最大と平均の違いがあるからっていくらなんでもここがネックになるとは思えません。

display IP のマスタポートの転送速度は、理論値の最速で
100MHz x 32bit = 400MByte/sec

ここがネックの可能性が高いでしょう。
いろいろネットを漁ってみると、Zynq の HP ポートは 250MHz 64bit幅が理論値の最速みたい。
周波数を上げるのは大変そうだけど、バス幅なら…

ということで、64bit 幅にしたいと思います。
バスの幅を広げて、バスプロトコルも広げて、アドレスインクリメントのステップも2倍にします。
fifo を 48bit ライト、 24bit リードに変更します。書き込み側の段数はそのままで良いかな。

上手く行かない…
面倒ですが、24bit 幅の fifo を 2個インスタンスして、自力で切り替えながら使ってみると上手く行きました。
賢いはずの fifo IP をうまく使いこなせていないみたいです…

まぁ、これでいい事にして、WXGAに挑戦です。

各種パラメータは
localparam HPERIOD = 11'd1680;
localparam HFRONT = 11'd72;
localparam HWIDTH = 11'd128;
localparam HBACK = 11'd200;
localparam VPERIOD = 10'd831;
localparam VFRONT = 10'd3;
localparam VWIDTH = 10'd6;
localparam VBACK = 10'd22;

ピクセルクロックの生成は83.5MHzが欲しいので
100×41.75÷5÷10

もう一個、71Mhzの別のパラメータがあったんだけど、そっちでは動きませんでした。
f0054075_23460531.jpg


[PR]
by tom01h | 2017-11-17 23:51 | 本・映画など | Trackback | Comments(0)