FC2カウンター FPGAの部屋 2024年02月24日
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Tang Primer 25K で PMOD-DVI を使用する3

Tang Primer 25K で PMOD-DVI を使用する2”の続き。

Tang Primer 25K に PMOD-DVI ボードを挿して、HDMI コネクタ経由でディスプレイに何らかの画像を出したい。ということで、前回は、配置成約とタイミング制約を見て、論理合成、Place & Route を行ったところ、タイミング制約違反になった。今回は、タイミング制約エラーの原因を Verilog HDL ソースコードから探ってみた。

まずは、なぜ 170 MHz という周波数が出てきたのか? Verilog HDL のソースコードから探ってみよう。
ブログ:【三菱ディスプレイ】第2「ApalisモジュールにおけるLVDS」”を確認すると、”最大1920x1200、60フレーム毎秒(最大170MHzのピクセルクロック周波数)”という記述があるので、1920x1200 60フレーム毎秒の画像なのかもしれない?
しかし、hdmi プロジェクトの svo_hdmi.v を確認すると、どうやら 1920x1080 60フレーム毎秒のようだ? svo_hdmi.v の一部を引用する。
Tang_Primer_25K_194_240223.png

クロックを発生している PLL は gowin_pll.v に記述されている。その PLLA ではピクセルクロックの 5 倍の周波数のクロックを出力し、それを gowin_clkdiv.v で周波数を 1/5 にして、ピクセルクロックとして使用しているようだ。

次に gowin_pll.v に記述されている PLLA の設定を見てみよう。一部を引用する。
Tang_Primer_25K_195_240223.png

PLLA のマニュアルは”Arora V Clock ユーザーガイド UG306-1.0.2J, 2024-02-02”の 36 ページの”5 システムクロック”の 5.2 PLLA -> 5.2.1 プリミティブの紹介に書かれている。
それによると、内部フィードバックの場合の、VCO クロック周波数は、

Fvco = (Fclkin/IDIV) * FBDIV * MDIV

だそうだ。
gowin_pll.v の設定から関連ある設定を拾ってみる。

defparam PLLA_inst.FCLKIN = "50";
defparam PLLA_inst.IDIV_SEL = 1;
defparam PLLA_inst.FBDIV_SEL = 1;
defparam PLLA_inst.CLKFB_SEL = "INTERNAL";
defparam PLLA_inst.MDIV_SEL = 17;


つまり IDIV = 1, FBDIV = 1, 内部フィードバック、MDIV = 17 で、Fvco = 50 x 17 = 850 MHz となる。

クロック出力の出力周波数は VCO in モードの際は、Fclkoutx=Fvco/ODIVx だそうだ。
gowin_pll.v の設定から関連ある設定を拾ってみる。なお、CLKOUT0 のみがピクセルクロックx5 倍の周波数で出力されている。

defparam PLLA_inst.CLK0_IN_SEL = 1'b0;
defparam PLLA_inst.CLK0_OUT_SEL = 1'b0;


この設定は、CLK0_IN_SEL が ODIV0 入力クロックソースの選択 を示し、1'b0 が VCO の出力を示している。
CLK0_OUT_SEL はチャンネル 0 出力クロックソースの選択を示し、1'b0 が ODIV0 の出力を示している。

defparam PLLA_inst.ODIV0_SEL = 1;
defparam PLLA_inst.ODIV0_FRAC_SEL = 0;


ODIV0_SEL は割り算する数の整数部、ODIV0_FRAC_SEL は割り算する数の少数部(3ビット)を示す。
つまり、CLKOUT0 には VCO の出力クロック 850 MHz のクロックが出ていることになる。
それが、gowin_clkdiv.v で周波数が 1/5 になるので、170 MHz ということになり、ここで 170 MHz のクロックのタイミング制約エラーが出る理由が分かった。

これじゃ、動作周波数が早すぎるので、VGA もしくは SVGA 程度にしたい。

なお、この FPGA も OSER10 と10:1 のいうシリアライザを持っていて、HDMI(DVI) の出力にそれを使用しているようだ。
  1. 2024年02月24日 03:55 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0