2014年10月19日日曜日

ZYBO 7 (DigilentのEmbedded Linux Hands-on Tutorial for the ZYBOを試してみる)

Digilent社のEmbedded Linux Hands-on Tutorial for the ZYBO.pdf (http://digilentinc.com/Data/Products/ZYBO/ZYBO-Embedded_Linux_Hands-on_Tutorial.pdf )に習ってZYBOでLinuxを動かしてみた。
* This link no longer exist. instead, search "digilent 594-008" with your browser, so you may find it somewhere.



記述内容が最新のリソースと整合していない点や誤植と思われる点も少なからずあって、手間取ることもあったが、基本的には書かれていることをトレースしていけば回路を作成し、U-bootをビルドし、Linuxをビルドし、作成した回路を制御するための簡単なドライバを作成し、実機で動作させることができた。

文書と不整合または注意を要する箇所のまとめ
  • 17ページ、Figure 34のU-Bootのコンパイルの部分でconfig名としてzynq_ZYBO_configとなっているが、これはzynq_zybo_configにする必要がある。 Makefileを見るとこのzynq_ZYBO_configという文字列はmkconfigというスクリプトに渡され、"_config"の部分を除いた文字列がCONFIG_NAMEという変数に設定されており、最終的にinclude/configs/$(CONFIG_NAME}.h をincludeするconfig.hを生成している。 したがって、config名の前半部はinclude/configs/下にあるファイル名と同じにする必要があるようだ。
  • 24ページ、Figure 46のgitリポジトリからLinuxカーネルソースを持ってくる部分でdefaultのブランチからgetしているが、このリポジトリにはzynq用のデバイスツリーのソースが含まれていないので、master-next branchからgetしたほうが良い。 つまり、 git clone -b master-next https://github.com/DigilentInc/Linux-Digilent-Dev.git  とやる。  2.4節のタイトルに"(Use the Master-Next Branch Until Further Notice)"という注記があるので、これで合っていると思う。 
  • 26ページ、Figure 51のdevice treeの編集の部分で、initrd=0x800000,8M とinitrdのアドレスとサイズを指定しているが、これだと内部で使用している別の領域とオーバラップしてしまうようで kernel panicになってLinuxが起動しない。

 文書作成時よりもLinuxカーネル内のサイズが増えて競合するようになったのかも知れない。initrdのアドレス指定は無くてもよくて、その場合は自動的に決定されるようだ。 zedboard用のdtsでも指定されていないので、指定しなくても良いと思う。 なので、以下のようにした。


  • 26ページ、Figure 52のUramdisk Image作成で、種ファイルとしてramdisk8M.image.gzを指定しているが、ファイルの作成法や存在場所等の説明が無い。 このファイルはDigilentのサイトから入手することができた。
          https://digilentinc.com/Data/Products/EMBEDDED-LINUX/ramdisk8M.image.gz
           *This link no longer exist. instead,  you may be able to get another ramdisk8M.image.gz from xilinx's wiki site.
            http://www.wiki.xilinx.com/Zynq+Release+14.2
            The ramdisk8M.image.gz is contained in the 14.2-release.tar.gz.

このように色々と躓きがあって動作確認できるまでに時間がかかったが、それを除いて考えれば、誰でも、容易にLinuxを実装し、PL部に作成した回路用のドライバ並びにそれを制御するアプリを作成して動作させることができると言える。 まったく便利というか凄いことになったもんだ。


2014年10月13日月曜日

ZYBO 6

ようやくyoutubeにアップされていたsadri氏のZynq training ビデオをひと通り聴講し終えた。 続きが楽しみである。

VivadoでCreate and Package New IPでIPを新規作成してみようとしたところ、java.lang.NullPointerExceptionという例外が発生して旨く行かないことがあった。








色々ネットとかで調べた結果、IPのPackagerのVendor名に値が設定されていないことが原因のようだ。

値を設定したところ、エラーは出なくなった。


 
 
ここで設定したVendor名は、Linuxの場合はユーザーのホームディレクトリ下の、.Xilinx/Vivado/version_number/vivado.iniファイルに保持されるようだ。



話は変わって、VivadoではZedboardやMicrozed Board等4種類の評価ボードのパラメータが登録されていて、プロジェクト作成時にそのボード名を指定することでI/OやPS部のマニュアル設定を省略することが出来るのだが、何故かZYBOは登録されていない。

自分でZYBOの情報を登録出来ないかやってみた。
まず、vivadoのインストールフォルダ下で評価ボード名が入ったファイルを検索してみた。
Microzedで検索したところ以下の結果を得た。

./data/boards/board_parts/zynq/microzed/下には以下のように、board_part.xmlとpreset.xmlの2つのファイルがあった。

board_part.xmlにはPL部のパラメータが書かれるようだ。 上記のMicrozedボードのboard_part.xmlはPL部の情報が何も書かれていないのだが、同じディレクトリ階層のZedboard用のboard_part.xmlは以下のようになっていた。

一方、preset.xml にはprocessing system7の設定内容…では無くて、設定ファイルの名称が書かれ、設定内容は ./data/ip/xilinx/processing_system7_v****/preset/ 以下のtclファイルに書かれるようだ。 ./data/ip/xilinx/procesing_system7_v5_5/preset/Microzed.tclの内容は以下のようであった。

これらを参考にしてZYBO用の各ファイルを作成して各ディレクトリに配置してみたところ、VivadoのBoard選択ダイアログでZYBOが表示されるようになった。




※ 2015.01.10 更新しました。
     17行目のPCW_CRYSTAL_PERIPHERAL_FREQHZ を追加




Create Block DiagramでZynq Processing Systemを追加してみた。

次に Run Block Automation で各リソースの設定を自動でやらせてみる。

Apply Board Presetにチェックが付いているので、これでOKボタンをクリックすれば設定される筈である。

が、期待した結果にならなかった。

PSのアイコンをダブルクリックしてRe-customaize IPダイアログを開、Presetsメニューを確認したところ、ZYBOの文字が無い。 まだ、何か設定が不足しているようだ。

Microzedの文字列を含んでいるファイルをgrepで検索した結果、
./data/ip/xilinx/processing_system_v***/下のcomponent.xmlファイルが見つかった。

そこで、ZYBOの情報を追加してみた。

Vivadoを再起動し、Create Block DiagramでZynq Processing Systemを追加し、Re-customize IPダイアログのPresetsを見てみたところ、ZYBOの文字が現れた。

Block Diagramに戻りRun Block Automationを実行してみたところ今度は旨く言った。

以下はzybo_base_systemのBlock Diagramに表示されるprocessing_system7_0だが、同じであることが判る。 また、Re-customize IPダイアログで各部の詳細な設定内容を確認したところ上記のtclファイルに書いた通り(zybo_base_systemと同じ設定値)になっていた。


もしかすると、インストールディレクトリ下を弄らずに同様の効果を得る手段があるのかも知れないのだが、UG等の文書をまだ見つけられていない。


自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...