Digilent NEXYS3 で HDMI 出力

2014-07-06 11.17.46

この土日は散歩しに行こうと思いつつも、土曜日の朝、「積み基板で遊ぼう」と思いついたのが優先事項になってしまいまして NEXYS3 SPARTAN-6 LX16 ボードをひっぱり出す。Xilinx のサイトにある、XAPP495(Implementing a TMDS Video Interface in the Spartan-6 FPGA) をダウンロードして作業開始。

この XAPP495 の対象ボードは Digilent の ATLYS という SPARTAN-6 LX45 搭載のボードが対象です。私の積み基板のより規模の大きいのが載ってまして HDMI コネクタもオンボードで付いてます。私のには HDMI コネクタが付いていないので、この NEXYS 3 基板買ったときに追加の小さいボードも買いました。これにマイクロなHDMI コネクタが4つとpmodコネクタ3つ付いてます。

今回はカラーバー出れば満足なので、Planahead 14.7 で新規プロジェクトを作成しサンプルのソースから vtc_demo.v をトップモジュールにして ucf ファイル書き換えてシンセサイズとインプリして、書き込みしたら OK なはずでした。
が、ioclock が配線出来ませんと言われ土曜日の午前中はあきらめて一旦終了。

こういうときは UCF ファイルが悪いのが相場なので、オリジナル ATLYS 基板用の UCF でビルドしてワーニングとかは出るもののインプリメント出来るのを確認。結局のところ 100MHz のクロック入力が、 ATLYS は BANK1 のポート、NEXYS3 は BANK2 のポートですが、この UCF のピン番号を替えたらエラーの山でした。

モジュールの内部は 50MHz で動いているので、100MHz のクロックを50MHz にしているところがあります。ここらへんを書き換えたら動くのではないかと修正開始。

  IBUF sysclk_buf (.I(SYS_CLK), .O(sysclk));
  BUFIO2 #(.DIVIDE_BYPASS("FALSE"), .DIVIDE(2))
  sysclk_div (.DIVCLK(clk50m), .IOCLK(), .SERDESSTROBE(), .I(sysclk));
 BUFG clk50m_bufgbufg (.I(clk50m), .O(clk50m_bufg));

もとのソースは クロック入力ピンを IBUF で受けて、それを BUFIO2 で分周。50MHz 出力を BUFG でグローバルなクロック配線に載せるいうことをやっています。これの入力のピン位置がかわるだけで、インプリ出来んのはバグちゃう?と思いたくなりますが、仕方ありません。

  • DCM で 50MHZ を作ってそれを使うように修正してみたところ、「タイミング守れません」でアウト。FPGA EDITOR でDCM変更でなとかなるかもしれませんが、なんとかするスキルはありません(笑)
  • 仕方ないので always で分周する方法を。遅延なしにちゃんと分周出来る保証はありませんが簡単なのでやってみたら動きだした

という次第。居間にあるハーフパネルの液晶テレビ(家に HDMI 入力あるのはこれだけで PC は DVI なので変換が必要)に接続してみて、表示されるか確認。「信号がありません」とは言われませんでした。表示サイズがあわないかしておかしい表示になっていますが一つ進んだかな。

DIGILENT NEXYS3 で Hello World

nexys3_201304202350

DIGILENT NEXYS3 で、HDL の復習ですが、今日は WebPack で開発出来るはずの Microblaze MCS を入れてみて動くか実験。結果動いたので良しです。XILINX DS865 の手順。

  • WebPack 新規プロジェクト
  • Coregen から Microblaze MCS を追加(今回は UART だけ有効にした)
  • トップモジュール記述
  • Synthesize
  • TCL コンソールから source ipcore_dir/microblaze_mcs_setup.tcl を実行
  • Implement Design
  • SDK を起動
  • ISE プロジェクトフォルダの下の workspace を SDK のプロジェクトディレクトリ
  • Xilinx Hardware Platform Specification 作成
  • Xilinx Board Support Package 作成
  • 新規 application ウィザードから Hello プロジェクトの雛形を選択して C 言語プロジェクト作成 → 自動でサンプルが Build される
  • ISE に戻り、UCF 作成
  • TCL コンソールから microblaze_mcs_data2mem workspace/アプリプロジェクト/Debug/xxxxxx.elf
  • Synthesize から Generate Programming File までの中で再実行必要なものを行なう
  • DIGILENT ADPT 経由で bit ファイルを書く

まぁ、ちゃんと Tera Term に、Hello World が出たので良しとしましょう。久しぶりにやると時間かかります。まだ SDK で C のソース修正してビルド仕直したときの ISE の手順やっていないので、手順は改めてまとめましょう。

SDK の Microblaze MCS の gcc の説明とかどこか探さないとプログラム書けませんね。これも探さなきゃ

Digilent NEXYS3 Spartan-6 ボードが届いた。

先週の土曜日に酔った勢いでポチした品物が、1週間経過した本日手元にやってきました。実際には月曜発送されて水曜に関西空港に着。そこから一般の宅配便で配達され、かつ不在だったので1週間かかったわけです。

今日は二日酔いで気分悪いのでこれはイジリません (^^;