FC2カウンター FPGAの部屋 HSYNCとVSYNCをIOBレジスタに入れる
FC2ブログ

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

FPGAの部屋

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

HSYNCとVSYNCをIOBレジスタに入れる

”ZedBoardでHDMI出力13(HDMIに出力できた)”のプロジェクトをFPGA Editor でみたところ、hdmi_hsync, hdmi_vsync, vga_hsync, vga_vsync もデータもIOBのレジスタを使用していなかった。

全体像を説明するために、話をHSYNCやVSYNCに絞って、そのブロック図を図1 に示す。
ZedBoard_HDMI_42_121129.png
図1 HSYNC, VSYNC出力ブロック図

bitmap_disp_cntrler_axi_master.v がビットマップ・ディスプレイ・コントローラのトップだ。その下に、bitmap_disp_engine.v とconv_hdmi_out.v がある。bitmap_disp_engine.v にはTiming Generatorがあって、HSYNCやVSYNCを生成している。それをFFを介してbitmap_disp_cntrler_axi_master.v に出力して、それをconv_hdmi_out.v に入力する。conv_hdmi_out.v では、YCbCr4:2:2 変換を行うために2クロック分遅延するので、その分をHSYNC, VSYNCも遅延させるために2段のFFを通している。bitmap_disp_engine.v のHSYNC, VSYNCは、conv_hdmi_out.v に渡しているので、このままではIOBレジスタを使用できない。その為、もう1段FFを介してFPGA外に出力している。

最初に、PlanAheadでFlow navigator のImplementation のImplementation Settings をクリックして、Mapのオプションを見た。none になっていたので、oに変更した。(グローバル・オプションで出力の最後のFFをIOBレジスタにマップするオプション)
ZedBoard_HDMI_43_121129.png

これでインプリメントしてみたところ、HDMI関連はIOBレジスタを使用したが、vga_hsync, vga_vsync はIOBレジスタを使えていなかった。

次に、UCFファイルで、vga_hsync, vga_vsync, hdmi_hsync, hdmi_vsync にIOB = FORCE 制約を試してみたが、なぜか効かなかった?

そこで、Verilog HDLソースファイルのポート宣言に(* IOB = "FORCE" *)を追加した。

(* IOB = "FORCE" *) output reg vga_hsync,
(* IOB = "FORCE" *) output reg vga_vsync,
(* IOB = "FORCE" *) output wire hdmi_vsync,
(* IOB = "FORCE" *) output wire hdmi_hsync,


これでやっと、vga_hsync, vga_vsyncがIOBレジスタに入らないとのエラーが出るようになった。どうやら、図1のFF2とFF3が統合されてしまっているようだ。これを防ぐためには、Synthhesis オプションの equivalent_register_removal をyes から no にすれば良いと思うのだが、全体にかかってしまうためやらない。

図1のFF3, FF4にS属性(S制約)を掛けてFFをキープした。

(*S="TRUE"*) reg hsyncx_d1, hsyncx_d2;
(*S="TRUE"*) reg vsyncx_d1, vsyncx_d2;


これでも、やはり、vga_hsync, vga_vsyncがIOBレジスタに入らないとのエラーが出る。

FF2にS属性(S制約)を掛ければ良いのだが、すでにIOB = "FORCE"制約を掛けているので、2つ制約が書けるかどうか分からなかった。(1回、やってみるのに時間が掛かるんです)試しに、FF1にS属性(S制約)を掛けてみた。

(*S="TRUE"*) output reg hsyncx,
(*S="TRUE"*) output reg vsyncx,


これでインプリメントしてみたところ、うまく、全部のポートでIOBレジスタを使うことができるようになった。
ZedBoard_HDMI_44_121129.png

ZedBoard_HDMI_45_121129.png

本当は出力ポートのvga_hsync, vga_vsync をreg で宣言してFFにするよりも、1つ前にノードをreg で宣言して、FF記述をして、そこをS属性(S制約)を掛ける。そして、そこから出力ポートに結んで、そこに、 IOB = "FORCE" 制約を掛けたほうが良いと思われる。
  1. 2012年11月29日 05:51 |
  2. 制約
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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