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

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

FPGAの部屋

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

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

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

Tang Primer 25K に PMOD-DVI ボードを挿して、HDMI コネクタ経由でディスプレイに何らかの画像を出したい。ということで、前回は、タイミング制約エラーの原因を Verilog HDL ソースコードから探ってみたところ、PLLA プリミティブの出力周波数が高すぎることが分かった。今回は、PLLA プリミティブの出力周波数が高すぎたので、PLLA のパラメータを調整して、200 MHz つまり、SVGA のピクセル・クロックの 5 倍を出力するようにした。また svo/svo_hdmi.v を修正して、800x600 ピクセルの SVGA モードに変更した。Synthesis と Place & Route を行って、前々回のタイミング制約エラーは回避できたが、Recovery Paths Table にエラーが出ていた。

タイミング制約エラーの原因を Verilog HDL ソースコードから探ってみたところ、PLLA プリミティブの出力周波数が高すぎることが分かった。
それで、画像のサイズを 800x600 ピクセルに変更して、PLLA の出力周波数を 200 MHz にすることにした。200 MHz はピクセル・クロックの 5 倍の周波数なので、実際のピクセル・クロックの周波数は 40 MHz となる。
src/gowin_pll/gowin_pll.v を修正した。
Tang_Primer_25K_196_240226.png

PLLA_inst.CLKFB_SEL と PLLA_inst.MDIV_SEL を以下のように修正した。

defparam PLLA_inst.MDIV_SEL = 16; // Vco : 800 MHz by marsee
defparam PLLA_inst.ODIV0_SEL = 4; // 800 MHz / 4 = 200 MHz = 40 MHz x 5 by marsee


この修正によって Vco の周波数は以下の式より

Fvco = (Fclkin/IDIV) * FBDIV * MDIV


IDIV = 1, FBDIV = 1, 内部フィードバック、MDIV = 16 で、Fvco = 50 x 16 = 800 MHz となる。
なお、Fvco のスペックでは、800 MHz が下限となっている。(GW5A series of FPGA Products Data Sheet の 53 ページの 3.4.6 PLL Switching Characteristics 参照)

クロック出力の出力周波数は VCO in モードの際は、

Fclkoutx=Fvco/ODIVx

だそうだ。
Fvco は 800 MHz で、PLLA_inst.ODIV0_SEL を 4 に設定したので、Fclkout0 は 800 MHz / 4 = 200 MHz となる。
200 MHz はピクセル・クロックの 5 倍なので、実際のピクセル・クロックの周波数は 40 MHz となる。

800x600 ピクセルの画像に設定する必要があるので、以下にように svo/svo_hdmi.v を修正した。

parameter SVO_MODE = "800x600";


Tang_Primer_25K_197_240226.png

これで、Synthesis と Place & Route を行った。
Tang_Primer_25K_198_240226.png

GOWIN FPGA Designer の Process タブをクリックし、Process ウインドウを表示した。
Place & Route -> Place & Route Report を表示した。
Resource -> Resource Usage Summary を表示した。
Logic は 3034 個使用した。2525 個の LUT と 383 個の ALU, 21 個の SSRAM(RAM16), 1614 個の Resister を使用している。
Tang_Primer_25K_199_240226.png

Place & Route -> Timing Analyzer Report をクリックした。
Timing Summaries -> Clock Summary などを表示した。
Max Frequency Summay を見ると、clk_50 の Actual Fmax は 424.845 MHz だったが、Gowin_CLKDIV_inst/clkdiv_inst/CLKOUT.default_gen_clk の constraint が 40 MHz のところ、Actual Fmax は 62.317 MHz でタイミング制約を満たした。
ただし、Recovery Paths Table にエラーが出ているようだ。
Tang_Primer_25K_200_240226.png

Recovery Paths Table を表示する。
SERDES へのリセットのパスなので、大丈夫なのではないのだろうか? とりあえず、やってみよう。
Tang_Primer_25K_201_240226.png
  1. 2024年02月26日 04:45 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0