FC2カウンター FPGAの部屋 Tang Primer 25K で PMOD-DVI を使用する2
fc2ブログ

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

FPGAの部屋

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

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

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

Tang Primer 25K に PMOD-DVI ボードを挿して、HDMI コネクタ経由でディスプレイに何らかの画像を出したい。ということで、前回は、TangPrimer-25K-example/hdmi のプロジェクトを起動した。今回は、配置成約とタイミング制約を見て、論理合成、Place & Route を行ったところ、タイミング制約違反になった。

配置成約の hdmi.cst を確認した。
Tang_Primer_25K_188_240223.png

Tang Primer 25K DockのPMODの信号名とピン番号表と見比べると、tmds_d_p_2 が PMOD の J6, tmds_d_p_1 が J5, tmds_d_p_0 が J4 のようだ。
Tang_Primer_25K_62_240204.png

Synthesis ボタンをクリックして、論理合成を行った。
Tang_Primer_25K_189_240223.png

ログを示す。

GowinSynthesis start
Running parser ...
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/gowin_clkdiv/gowin_clkdiv.v'
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/gowin_pll/gowin_pll.v'
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_openldi.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_openldi.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_openldi.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_openldi.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_pong.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_pong.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_pong.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_pong.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_term.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_term.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_term.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_term.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tmds.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tmds.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tmds.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tmds.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_utils.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_utils.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_utils.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_utils.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_vdma.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_vdma.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_vdma.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_vdma.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v'
Analyzing included file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_defines.vh'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v":21)
Back to file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v":21)
Analyzing Verilog file '/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v'
Undeclared symbol 'pll_lock', assumed default net type 'wire'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":24)
Undeclared symbol 'clk_p5', assumed default net type 'wire'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":25)
Undeclared symbol 'clk_p', assumed default net type 'wire'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":30)
Undeclared symbol 'sys_resetn', assumed default net type 'wire'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":42)
Compiling module 'top'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":1)
Compiling module 'Gowin_PLL'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/gowin_pll/gowin_pll.v":10)
Compiling module 'Gowin_CLKDIV'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/gowin_clkdiv/gowin_clkdiv.v":10)
Compiling module 'Reset_Sync'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":109)
Compiling module 'svo_hdmi'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v":23)
WARN  (EX3791) : Expression size 5 truncated to fit in target size 4("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v":86)
WARN  (EX3791) : Expression size 5 truncated to fit in target size 4("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/svo_hdmi.v":89)
Compiling module 'svo_tcard(SVO_MODE="1920x1080")'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":23)
WARN  (EX3045) : Case equality operator always evaluates to false due to comparison with 'x' or 'z'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":33)
WARN  (EX3791) : Expression size 32 truncated to fit in target size 24("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":237)
WARN  (EX3791) : Expression size 15 truncated to fit in target size 14("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":251)
WARN  (EX3791) : Expression size 10 truncated to fit in target size 9("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":253)
WARN  (EX3791) : Expression size 6 truncated to fit in target size 5("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":254)
WARN  (EX3791) : Expression size 15 truncated to fit in target size 14("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":257)
WARN  (EX3791) : Expression size 10 truncated to fit in target size 9("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":259)
WARN  (EX3791) : Expression size 6 truncated to fit in target size 5("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tcard.v":260)
Compiling module 'svo_enc(SVO_MODE="1920x1080")'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":23)
Extracting RAM for identifier 'ctrl_fifo'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":48)
Extracting RAM for identifier 'pixel_fifo'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":51)
Extracting RAM for identifier 'out_fifo'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":54)
WARN  (EX3045) : Case equality operator always evaluates to false due to comparison with 'x' or 'z'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":43)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":92)
WARN  (EX3791) : Expression size 15 truncated to fit in target size 14("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":96)
WARN  (EX3791) : Expression size 15 truncated to fit in target size 14("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":98)
WARN  (EX3791) : Expression size 4 truncated to fit in target size 3("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":110)
WARN  (EX3791) : Expression size 4 truncated to fit in target size 3("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":125)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":129)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":130)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":133)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":134)
WARN  (EX3791) : Expression size 4 truncated to fit in target size 3("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":135)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":155)
WARN  (EX3791) : Expression size 3 truncated to fit in target size 2("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_enc.v":159)
Compiling module 'svo_tmds'("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi/svo_tmds.v":23)
WARN  (EX3791) : Expression size 25 truncated to fit in target size 24("/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/top.v":102)
NOTE  (EX0101) : Current top module is "top"
[5%] Running netlist conversion ...
Running device independent optimization ...
[10%] Optimizing Phase 0 completed
[15%] Optimizing Phase 1 completed
[25%] Optimizing Phase 2 completed
Running inference ...
[30%] Inferring Phase 0 completed
[40%] Inferring Phase 1 completed
[50%] Inferring Phase 2 completed
[55%] Inferring Phase 3 completed
Running technical mapping ...
[60%] Tech-Mapping Phase 0 completed
[65%] Tech-Mapping Phase 1 completed
[75%] Tech-Mapping Phase 2 completed
[80%] Tech-Mapping Phase 3 completed
[90%] Tech-Mapping Phase 4 completed
[95%] Generate netlist file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/gwsynthesis/hdmi.vg" completed
[100%] Generate report file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/gwsynthesis/hdmi_syn.rpt.html" completed
GowinSynthesis finish


タイミング制約を確認した。
クロックが 50 MHz という成約だった。
Place & Route ボタンをクリックした。
Tang_Primer_25K_190_240223.png

Process タブをクリックし、Process ウインドウを表示した。
Place & Route -> Place & Route Report を表示した。
Resource -> Resource Usage Summary を表示した。
Logic は 2913 個使用して、その内訳は 2530 が 18 個、ALU が 383 個、ROM16 が 0 個だそうだ。
Tang_Primer_25K_191_240223.png

ログを示す。タイミング制約エラーでもエラーにはなっていない。

Reading netlist file: "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/gwsynthesis/hdmi.vg"
Parsing netlist file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/gwsynthesis/hdmi.vg" completed
Processing netlist completed
Reading constraint file: "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/src/hdmi.cst"
Physical Constraint parsed completed
Running placement......
[10%] Placement Phase 0 completed
[20%] Placement Phase 1 completed
[30%] Placement Phase 2 completed
[50%] Placement Phase 3 completed
Running routing......
[60%] Routing Phase 0 completed
[70%] Routing Phase 1 completed
[80%] Routing Phase 2 completed
[90%] Routing Phase 3 completed
Running timing analysis......
[95%] Timing analysis completed
Placement and routing completed
Bitstream generation in progress......
Bitstream generation completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/pnr/hdmi.pin.html" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/pnr/hdmi.rpt.html" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/pnr/hdmi.rpt.txt" completed
Generate file "/media/masaaki/Ubuntu_Disk/Gowin/TangPrimer-25K-example/hdmi/svo/impl/pnr/hdmi.tr.html" completed
Fri Feb 23 05:01:16 2024


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 が 170 MHz のところ、Actual Fmax は 73.769 MHz で完全にタイミング制約エラーだった。
Tang_Primer_25K_192_240223.png

Timing Details -> Path Slacks Table -> Setup Paths Table を見ると真っ赤だった。orz
Tang_Primer_25K_193_240223.png

これは動かないだろうか?
でもなんで 170 MHz なのだろう? VGA x 5 = 125 MHz くらいだろうし、合う周波数がないような?
Verilog HDL コードを見てみようか?
  1. 2024年02月23日 08:31 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/6195-f9600b73
この記事にトラックバックする(FC2ブログユーザー)