とあるエンジニアの備忘log
2014年1月8日水曜日
Zynq 事始め2
[前回](/2013/12/zynq-1.html)は、ツールに慣れる意味でも、 Zynq の FPGA 部だけを動かしてみました。 しかし、ARM を起動しないと Zynq を使う意味がありませんので、次は ARM + FPGA で動かしましょう。 ここから当面は Xilinx のドキュメントに沿って進めるのがよいと思います。 ### Zynq-7000 All Programmable SoC: Concepts, Tools, and Techniques (CTT) 入門者にとっておすすめのドキュメントは "Zynq-7000 All Programmable SoC: Concepts, Tools, and Techniques (CTT)" というチュートリアルです。 表紙のリリース日を見て、新しいものを選ぶようにしてください。 日本語版も出ているがバージョンが古いのでおすすめできません。 非常にわかりやすく、これに沿って5章ぐらいまでやっていけば、基本的な使い方は覚えられるでしょう。 唯一の欠点は、現時点では ISE を対象に書かれていて、Vivado に対応していないことです。 そこで、いったんドキュメント通りに ISE でやってみて、 同じことを Vivado でもやってみるのがよいと思います。 Vivado を選択するほうが、最終的に使い勝手がよいと思いますが、 ISE も一応理解はしておいた方がよいと思います。 以下、各章でやることをさらっとまとめました。 #### Chapter 1: Introduction ツールや用語の説明。 PS と PL という用語は何度も出てくるので抑えておきましょう。 - PS (Processing System): CPU 部のこと。ARM と周辺のハード。 - PL (Programmable Logic): FPGA 部のこと #### Chapter 2: Embedded System Design Using the Zynq Processing System ARM を動かし、UART から Hello World を出す。FPGA は動かさない。 XPS で PS の設定をし、ハードウェア情報をエクスポート。 それを XSDK にインポートし、Hello World のスタンドアローンアプリを作成します。 #### Chapter 3: Embedded System Design Using the Zynq Processing System and Programmable Logic ARM の周りにいくつか IP をくっつけて、ARM + FPGA で動かす。 JTAG 経由で FPGA のビットストリームと ARM 用のプログラムをダウンロードします。 #### Chapter4: Debugging with SDK and ChipScope XSDK を用いたソフトウェアのデバッグ、ChipScope を用いたハードウェアのデバッグ #### Chapter5: Linux Booting and Application Debugging Using SDK U-Boot と Linux を起動する。 U-Boot も Linux Kernel もコンパイル済みのイメージをダウンロードしてきて使用します。 XMD を開いて、JTAG 経由で U-Boot と Linux をダウンロードし、起動する。(Slave Boot) Master Boot に使うブートイメージの作り方を学ぶ。 そのブートイメージを U-Boot を使って、 QSPI に書き込み、 QSPI から起動させる。 また SDカードからも起動させる。(Master Boot) ### チュートリアルの内容を Vivado でやるときの差分 基本的に、チュートリアルの内容と同等のことが Vivado できるはずですが、差分をいくつかピックアップ。 - ISE で XPS でやっている部分は、Vivado では 「IP Integrator」 → 「Create Block Design」で行う。 - Chapter3 で「Chipscope AXI Monitor」という IP を接続していますが、 これは Vivado にはないので、飛ばします。 Vivado には Chipscope 自体がありませんので。 普通に Vivado Logic Analyzer で AXI バスをモニタすればいいので、なくても困りません。 - Chapter6 で 「AXI Central DMA」 というIP を接続していますが、 Vivado では 「AXI Central Direct Memory Access」という名前になっています。 検索ボックスに 「DMA」といれてもヒットしなくて、しばらく考え込みました。。 ### 起動シーケンスまとめ どういう仕組みで動いているのかがわかった方がいいので、簡単にまとめておきます。 Zynq は 5つの起動モードがあります。 電源投入時に、特定の端子が Pull Up されているか Pull Down されているかで起動モードを選択できます。 - QSPI - NAND - NOR - SD card - JTAG QSPI, NAND, NOR, SD card から起動するのを Master Boot といいます。 JTAG ブートは Slave Boot といいます。 Master Boot は ARM が自発的に起動しますが、 Slave Boot は JTAG コマンド待ちのループに入るので、 JTAG からプログラムをダウンロードし、適切なアドレスから実行させる必要があります。 当然ながら最終製品では Master Boot を使いますが、開発中に便利なのは Slave Boot です。 #### Master Boot 用のブートイメージ |------------------------| | Header | |------------------------| | (IMG1) FSBL | |------------------------| | (IMG2) FPGA bit stream | |------------------------| | (IMG3) User Program | |------------------------| | ... | Bootgen というプログラムを使って、いくつかのバイナリーを結合し、Master Boot 用の起動イメージを作ります。 先頭にヘッダー情報が付加されます。各イメージの先頭にも小さなヘッダーが付きます。 1番目のイメージは FSBL (First Stage Boot Loader)です。 FSBL を自前で記述することも可能ですが、普通はツール (XSDK) が作ってくれるものをそのまま使います。 ISE/Vivado から Export した ハードウェア情報を XSDK にインポートし、FSBL を生成します。 通常、2番目のイメージは FPGA の bit stream ですが、FPGA を動かさないなら、なくても構いません。 3番目以降がユーザープログラムです。 これは、XSDK で作成したスタンドアロンプログラムだったり、U-Boot などの別のブートローダーだったりします。 上記の起動イメージを QSPI, NAND, NOR, SD Card のいずれかに書き込みます。 SD Card の場合、FAT でフォーマットされたカードに `boot.bin` というファイル名でコピーする必要があります。 なお、ピン数の関係で 5つの起動モードをすべて同時に使えるわけではありません。 私の使っている ZC706 というボードでは QSPI, SD Card, JTAG が使えます。 余談ですが、ZC706 にのっている QSPI の容量が 16MB しかありません。 ZC706 にのっている Zynq (xc7z045ffg900) の FPGA の bit stream は 13MB 近くあります。 残り 3MB で Linux Kernel やら Ramdisk やらを格納するのはほぼ無理です。 つまり、FPGA 動かすなら、QSPI は使えないですね。 なんで、もうちょっと容量の大きいのをのせてくれなかったんだろう? #### Master Boot のブートシーケンス Zynq はリセット解除後、(Master Boot も Slave Bootも)必ず Boot ROM から実行を開始します。 1. Boot ROM Mask Rom なので変更不可。 端子情報を元に、 QSPI/NAND/Nor/SD card のいずれかから起動イメージを読み出す。 FSBL を SRAM へロードし、FSBL に制御を移す。 2. FSBL (First Stage Boot Loader) (XSDK で生成した FSBL の場合) 起動イメージに FPGA の bit stream が含まれていれば、FPGA へダウンロードする。 必要なピン設定や DDR の初期化を行い、 User Program を DDR へロードし、 User Program に制御を移す。 3. User Program 何をするかは User Program の作り方次第ですが、Linux を動かすのなら、 この User Program の部分は U-Boot でしょう。 U-Boot がなんらかの不揮発デバイスから(またはネットワーク経由で)Kernel をロードします。 #### Slave Boot のブートシーケンス JTAG ブートの場合、起動後、簡単な初期化をした後、すぐに JTAG コマンド待ちのループに入ります。 ARM が自発的に何かをすることがないので、Slave Boot と言います。 SoC の初期化や、プログラムコードをメモリ上に置き、ARM をキックするところまで JTAG 経由で行う必要があります。 以下が、そのシーケンスです。 1. Boot ROM ARM は簡単な初期化をした後、JTAG コマンド待ちのループに入る。 2. FPGA コンフィグレーション (もし必要なら)JTAG経由で FPGA の bit stream をダウンロードする。 3. JTAG から ピン設定や DDR の初期化を行う。 4. JTAG から User Program を DDR (または SRAM) へダウンロードし、CPU を走らせる。 チュートリアルの Chapter 2 ~ Chapter 4 でやっているのはこの Slave Boot です。 Master Boot と違って、FSBL なしで、User Program を実行することができます。 その代わり、 FSBL が行うのと同等の設定を JTAG 経由で行うための Tcl スクリプトが用意されています。 ISE/Vivado でハードウェア情報をエクスポートしたときに吐き出されるファイルの中に `ps7_init.tcl` みたいなものあると思いますが、これです。 「3. JTAG から ピン設定や DDR 初期化」 にはこの Tcl スクリプトを用います。 `ps7_init.c` (FSBL を作るために必要な Cコード) と、内容は同等のはずです。 XMD のプロンプトから % source ps7_init.tcl % ps7_init % ps7_post_config とやれば OK。 あれ? チュートリアルの Chapter 2 ~ Chapter 4 をやったときには、いちいち `ps7_init.tcl` を実行しなかったよ?と思うかもしれません。 はい。 XSDK は、User Program ダウンロード時に、`ps7_init.tcl` も自動で実行してくれています。 XMD の場合は、自分で実行する必要があります。 ### 次は何をやるか CTT の Chapter 5 くらいまでやれば、ツールの基本的な使い方は身につくと思います。 Chapter 6 以降は必要に応じてやっていけばいいと思います。 Zynq の仕様についてもっと知るために "Zynq-7000 All Programmable SoC Technical Reference Manual" も合わせて読んでいくのもよいでしょう。 私は基本的にソフトの人なので、引き続き [Wiki Page](http://www.wiki.xilinx.com/) に沿って動かしてみました。 U-Boot や Linux Kernel をソースからコンパイルして動かす方法が非常に丁寧に説明してあります。
2013年12月27日金曜日
Zynq 事始め1
[前回](/2013/12/ise-vivado-on-ubuntu.html)、ISE/Vivado 等のツール類のセットアップは済ませました。 では何から始めましょうか。 例えば、Zynq の評価ボードを渡され、「じゃ、立ち上げよろしく!」と言われたとしましょう。 (私が言われたみたいに。。) 膨大な資料を前に途方にくれてしまうかもしれません。 似たような状況にある人の手助けになるかどうかわかりませんが、私のたどったステップを記録しておこうと思う。 進めるには、何らかの Zynq ボードが必要となります。 私は ZC706 というボードを使っていますが、他のボードでも似たような感じだと思います。 ### まずはツールに慣れる Zynq を手にとっているということは FPGA ぐらいは経験があるという人が多いと思います。 ISE は使ったことはあるが、Vivado は初めてという人もいるかもしれませんが、 今後のことを考えれば Vivado を使いこなせた方がよいと思います。 とりあえず、ISE および Vivado で簡単な RTL のプロジェクトを作成し、FPGA を Configuration するところまでやってみます。 すでに知っている人は飛ばしてください。 まずは、 ARM は動かさずに、Zynq を純粋な FPGA として使います。 (Zynq の通常の使い方としては、ARM が最初に起動し、ARM から FPGA を Configuration するのですが、それはもうちょっと先に回します。) #### まずは planAhead でやってみる ISE のインストールディレクトリに `settings64.sh` (または `settings64.csh`) というのがあるので、それを `source` したあと、 $ planAhead で起動。 「Create New Project」→「RTL Project」を選択。 「Add File...」 か 「Create File...」 で RTL (Verilog or VHDL) を追加。 とりあえず練習ですので、プッシュボタンを押すと LED が点灯するぐらいの RTL でよいです。 ウィザードの最後で Parts で Zynqチップ名 (xc7z0xx) か評価ボード名を選ぶ。 制約ファイルは自分でいちいち書くのは面倒ですが、大抵はすでに用意してくれている。 自分の場合は、 ZC706 ボードなので、Xilinx のサイトから `zc706-ucf-xdc-rdf0207-rev1-0.zip` というのをダウンロード。 RTL と制約ファイル(UCF)を追加できたら、Synthesis, Implement, Generate Bitstream と進む。 PC とボードの JTAG ポートをつなぐ。 ZC706 の場合は、ボード上に JTAG <-> USB 変換チップが載っているので、USBケーブルでつなぐだけです。 iMPACT を起動すると、「zynq7000_arm_xxx」(=ARM) というのと「xc7z0xx」(=FPGA) というが見えるはず。 2つ見えるのは、Zynq のパッケージ内で ARM コアと FPGA が JTAGデイジーチェーンで繋がっているためです。 FPGA の方を選んで、bit ファイルをダウンロードすると、うまくいくはず。 LED が光ることを確認して下さい。 #### Vivado でもやってみる Vivado のインストールディレクトリに `settings64.sh` (または `settings64.csh`) というのがあるので、それを `source` したあと、 $ vivado で起動。 planAhead と操作手順はほぼ同じですが、制約ファイルが従来のUCF ではなくて、 XDC というファイルです。 Tcl の文法で書かれている。 Synthesis, Implement, Generate Bitstream と進み、最後は、 iMPACT ではなくて、 「Open Hardware Session」というのを選ぶ。 「Open Hardware Session」→「Open a new hardware target」を選び、 `Server name
` で PC の IPアドレスを入力する(普通はデフォルトでそうなっているはず)。 ポート番号はそのままでよい。 あとは、「Program device」を選べば、 FPGA を Configuration できる。 ちなみに、「Launch iMPACT」というのも選べますが、Vivado 自体は iMPACT を含んでいませんので、 iMPACT を使いたいならば、ISE もインストールし、 `impact` が PATH に含まれていないといけません。 「Open Hardware Session」 というのは、ISE の時の iMPACT と ChipScope の置き換えで、たぶんこっちの方が便利だと思います。 サーバー&クライアントで使用できます。 このやり方は[後日](/2014/01/vivado-fpga.html)紹介します。 ### もうちょっと RTL を足してみる 上記ができたら、クロックを入れて、LED 点滅とかもやってみます。 クロックラインを BUFG に通す、タイミング制約の追加とかが必要です。 特に Vivado が初めての場合は、 XDC でのタイミング制約の書き方を確認しておきます。 「Project Manager」 → 「Templates」とたどれば、書き方がわかるので、コピペでいけますが。
2013年12月17日火曜日
ISE & Vivado 設定 on Ubuntu
前回記事 [Zynq 入門中](/2013/12/zynq.html) の続きです。 ISE と Vivado を Ubuntu にインストールします。 前回も述べたように、Ubuntu はサポート外なので、そのままでは動かない部分があります。 バージョンによって若干の差があるかもしれないので、ここでは以下のバージョンとします。 - Vivado 2013.2 - ISE 14.6 - Ubuntu 2013.04 64bit ### Vivado のセットアップ #### インストール Xilinx のページから tar をダウンロードして、以下を実行。 $ Xilinx_Vivado_SDK_2013.2_0616_1.tar $ cd Xilinx_Vivado_SDK_2013.2_0616_1 $ sudo ./xsetup 途中のダイアログで Cable Driver をインストールする選択肢があるが、選んでも多分うまくいかないので、 $ cd /opt/Xilinx/Vivado/2013.2/data/xicom/cable_drivers/lin64/digilent$ $ sudo ./install_digilent.sh で直接インストール。 #### 文字化け(豆腐)の修正 planAHEAD は文字化けしないのだが、 Vivado はステータスバーの表示が豆腐になってしまう。 修正の仕方がわからないが、とりあえず日本語である必要はないので、メニューから Tools -> Options... -> General -> Language and Tooltips とたどり Japanese から English へ変更。 #### Documentation のLink が開かない場合の対処方法 IP などの Documentation を開こうとすると、 /opt/Xilinx/Vivado/2013.2/ids_lite/ISE/lib/lin64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/firefox/libxul.so) のようなエラーが端末に出て開かない。 Vivado から起動された firefox がライブラリ検索で `/opt/Xilinx/Vivado/2013.2/ids_lite/ISE/lib/lib64/` 以下を見に行ってしまって、 しかも Ubuntu に元々インストールされているものより古いのが原因のようだ。 以下のように Vivado 添付のライブラリを退避し、`/usr/lib` 以下のものへシンボリックリンクを貼ることで動くようになった。 $ cd /opt/Xilinx/Vivado/2013.2/ids_lite/ISE/lib/lin64 # mv libstdc++.so libstdc++.so.bak # mv libstdc++.so.6 libstdc++.so.6.bak # ln -s libstdc++.so.6 libstdc++.so # ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ### ISE のセットアップ #### インストール Xilinx のページから tar をダウンロードして、以下を実行。 $ tar xf Xilinx_ISE_DS_14.6_P.68d_3.tar $ cd Xilinx_ISE_DS_14.6_P.68d_3 $ sudo ./xsetup #### PlanAhead が起動しない場合の対処方法 PlanAhead が異常終了し、コンソールに以下のようなメッセージが出る。 /opt/Xilinx/14.6/ISE_DS/PlanAhead/bin/rdiArgs.sh: 95 行: 13848 Segmentation fault (コアダンプ) "$RDI_PROG" "$@" 以下のようにして、ISE に付属の libjvm.so を置き換える。 $ sudo apt-get install openjdk-7-jre $ cd /opt/Xilinx/14.6/ISE_DS/PlanAhead/tps/lnx64/jre/lib/amd64/server/ $ sudo mv libjvm.so libjvm.so.bak $ sudo ln -s /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/libjvm.so [ここのページ](http://forums.xilinx.com/t5/Installation-and-Licensing/RHEL5-64-bit-ISE-13-1-PlanAhead-launch-from-w-in-ISE-fails/td-p/148624/page/2) を参考にしました。 #### XilinxNotify のエラーダイアログの対処方法 root 権限でインストールした場合、PlanAhead 起動時に以下のようなエラーダイアログボックスが出る。 A disk write failure occurred. There may be insufficient disk space or you may not have write permisson at the following directory. /opt/Xilinx/14.6/ISE_DS/.xinstall Press Retry to try again, press Cancel to exit XilinxNotfy エラーの原因は、 root にしか書き込み権限のない `/opt/Xilinx/14.6/ISE_DS/.xinstall/` の下に `xilinxnotify.log` というファイルを作ろうとしているため。 インストール時は、root 権限、アプリ実行は 一般ユーザーで行うのが普通なのに、なんでこんな場所にログファイル作っちゃうんだろうね? クオリティ低いですな。 とりあえず以下のようにして回避。 $ sudo chmod a+w /opt/Xilinx/14.6/ISE_DS/.xinstall #### Xilinx License Configuration Manager からライセンス取得できない場合の対処方法 Connect Now ボタンを押しても、ブラウザが開かずに端末に以下のメッセージが出ている。 /usr/lib/chromium-browser/chromium-browser: /opt/Xilinx/14.6/ISE_DS/common//lib/lin64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/chromium-browser/chromium-browser) 以下のようにして shared object 置き換え。 $ cd /opt/Xilinx/14.6/ISE_DS/common/lib/lin64 # mv libstdc++.so libstdc++.so.bak # mv libstdc++.so.6 libstdc++.so.6.bak # ln -s libstdc++.so.6 libstdc++.so # ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #### Document が開かない場合の対処方法 ドキュメントをブラウザで開こうとするが、GLIBC の互換性の問題で開かない。 上記と同じなので、端末のエラーメッセージを見ながら `libstdc++.so` を置き換える。 ### fpga editor が起動しない場合の対処方法 ### コンソールに以下のようなエラーメッセージが出る。 /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/_fpga_editor: error while loading shared libraries: libXm.so.3: cannot open shared object file: No such file or directory ここでも shared object の問題のようだ。 パッケージ名がわからない場合は `apt-file` で調べられる。 $ apt-file search libXm.so.3 libmotif4: /usr/lib/x86_64-linux-gnu/libXm.so.3 $ sudo apt-get install libmotif4 一歩前進したが、まだ以下のようなエラーメッセージが出る。 /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/_fpga_editor: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory 以下をインストール。 $ sudo apt-get install libstdc++5 まだ以下のようなエラーメッセージが出る。 Wind/U X-toolkit Error: wuDisplay: Can't open display 環境変数が `DISPLAY=:0.0` になっているのを修正 $ export DISPLAY=:0 まだ以下のエラーメッセージが出る。 Wind/U Error (193): X-Resource: DefaultGUIFontSpec (-*-helvetica-medium-r-normal-*-14-*) does not fully specify a font set for this locale フォントをインストール。 $ sudo apt-get install xfonts-75dip xfonts-100dpi ようやく起動した。 #### ChipScope が起動しないときの対処方法 ChipScope Analyzer が起動せずに /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 72: /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: XIL_DIRS[0]=/opt/Xilinx/14.6/ISE_DS/ISE/: not found /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 73: /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: count++: not found /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/analyzer: 152: /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh: Syntax error: Bad for loop variable というエラーメッセージが端末に出る。 これは `cs_common.sh` 中で bash の拡張機能を使っているにも関わらず、shebang が `#/bin/sh` になっているから。 Xilinx がサポートしている RedHat系ディストリビューションでは `/bin/sh` が `/bin/bash` へのシンボリックリンクになっているために、__たまたま__ 動いてしまう。 Ubuntu では動かない。(Ubuntu では `/bin/sh` は `/bin/dash` へのシンボリックリンクになっている。) そこで、 `/opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/cs_common.sh` を開き、一行目を `#!/bin/bash` に書き換えるが、やはり動かない。。 よく見ると、 analyzer から `cs_common.sh` を source している。 なので `/opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/unwrapped/analizer` を開き、一行目を `#!/bin/bash` に書き換えると、、ChipScope が起動するようになりました。 #### Export Hardware for SDK が失敗する場合の対処方法 ダイアログボックスが開き、 ERROR: [Common 17-49] Internal Data Exception: xps application failed! というメッセージが出る。`gmake` がいるようだ。 ln -s /usr/bin/make /usr/local/bin/gmake ### ISE と Vivado 共通のセッティング #### Xilinx SDK で arm-xilinx-eabi-gcc が not found の場合の対処方法 xsdk を起動して、プロジェクトをビルドするときに /bin/sh: 1: arm-xilinx-eabi-gcc: not found のエラーがでる場合がある。 `settings64.sh` を source すれば、 `arm-xilinx-eabi-gcc` への PATH も通るはず。 端末上から `arm-xilinx-eabi-gcc` が見えているのに相変わらず動かない場合。 $ which arm-xilinx-eabi-gcc /opt/Xilinx/14.6/ISE_DS/EDK/gnu/arm/lin/bin/arm-xilinx-eabi-gcc $ arm-xilinx-eabi-gcc --version arm-xilinx-eabi-gcc: No such file or directory 原因は、`arm-xilinx-eabi-gcc` が 32bit ホスト用であるため。以下を実行してみればわかる。 $ file `which arm-xilinx-eabi-gcc` /opt/Xilinx/14.6/ISE_DS/EDK/gnu/arm/lin/bin/arm-xilinx-eabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped これを 64bit ホストで動かすには 32bit 用のライブラリが必要なので、以下のようにインストールする。 $ sudo apt-get install ia32-libs もはや 32bit ホストで FPGAやるのは難があるのだから、 64bit ネイティブでツールをそろえて欲しいところですが。。 #### ノードロックライセンスを全ユーザーから使えるようにする 通常はライセンスファイルは ~/.Xilinx に置かれるが、環境変数で変更できるので、 /opt/Xilinx 以下に置き、各ユーザーが export XILINXD_LICENSE_FILE=/opt/Xilinx/Xilinx.lic の環境変数設定。 ### 端末表示関連 Zynq 上の ARM と UART で通信しなくてはならないので、そのセットアップ。 最近のデスクトップPC にはシリアルポートがついてなかったりするのですが、 評価ボード上には USB-UART 変換(CP210X)が載っているので問題なし。 #### USB-UART ドライバ Windows ならば、SiliconLab のページから CP210X のドライバをダウンロードしてくるところですが、 Linux では、Kernel のソースツリーに CP210X のドライバが含まれているので、何もしなくてよい。楽だな。 Ubuntu ならば `CONFIG_USB_SERIAL_CP210X=m` でビルドされているので、ボードと USBケーブルでつなぐだけで勝手にモジュールがロードされるはず。 試しに、ボードとUSBケーブルでつないでみて、 $ lsmod | grep ^cp210x cp210x 17382 0 みたいに表示されれば、ちゃんとロードされている。 ちなみに、ドライバは `/lib/modules/3.*.*-*-generic/kernel/drivers/usb/serial/cp210x.ko` にインストールされている。 モジュールのロードと同時に `/dev/ttyUSB0` が作られているはず。 $ ls -l /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 0 8月 22 11:08 /dev/ttyUSB0 でわかるように、dialout に所属していないとアクセスできないので、以下のようにする。 $ sudo gpasswd -a
dialout #### ckermit メモ ターミナルソフトは、 Windows なら TeraTerm が有名ですが、Linux なら ckermit がおすすめです。 $ sudo apt-get install ckermit でインストール。 $ kermit で起動。 (/home/masahiro/) C-Kermit>set line /dev/ttyUSB0 (/home/masahiro/) C-Kermit>set carrier-watch off (/home/masahiro/) C-Kermit>set speed 115200 /dev/ttyUSB0, 115200 bps (/home/masahiro/) C-Kermit>connect でつながるが、毎回入力するのが面倒なので `~/.kermrc` に set line /dev/ttyUSB0 set carrier-watch off set speed 115200 connect を書いておきましょう。 閉じるときは `Ctrl-\` のあとに `c`。
2013年12月16日月曜日
Zynq 入門中
### Zynq とは 最近、仕事で Zynq やってます。 Zynq というのは、 Xilinx からリリースされている ARM + FPGA の SoC である。 Xilinx は All Programmable SoC というキャッチフレーズで呼んでたりする。 なお、Altera からは SoC FPGA という同様のものが出ている。 CPU と FPGA を1チップに、というコンセプトは今に始まったことではない。 私の知る限り、 Virtex II のころから PowerPC 内蔵 FPGA はあったし、ソフトコアなら Microblaze もある。 しかしながら、世の中の流れは ARM なわけで、 ARM を採用している時点で裾野は広い。 かくいう私も ARM 以外のアーキはさっぱりわからないので、これは助かる。 しかも SoC としての完成度が高いので、使いこなせればいろいろと応用が効きそうだ。使いこなせればね。。 とりえあず、入門程度に LED を光らせる回路を作って、ARM から制御する簡易プログラムを組むぐらいのことならば、チュートリアル見つつやっていけばなんとかなる。 ただし、最終的には、自作のハードウェアIP を実装して、 Linux のデバイスドライバも書いて、っていうところに行き着くことが多いだろうから、なかなか一筋縄ではいかなさそうだ。 ともかく愚痴だけにならないように、役に立ちそうな内容を書き綴っていけたらと思う。 ### 最初の分かれ道: ISE か Vivado か 現時点では、IDE (統合開発環境)の選択肢が大きく分けて 2つある。 ISE は昔からあるツールで Xilinx の FPGA をやったことのある人にはお馴染みだろう。 一方、Vivado (ビバドと読む) は新しいツールである。 #### ISE で Zynq をやる場合 プロジェクトマネージャーとして 「Project Navigator」か 「PlanAhead」を使うことになる。 「Project Navigator」は内部から「PlanAhead」を呼び出すので、プロジェクト管理自体に「PlanAhead」を使ってしまうのがよいと思う。 「PlanAhead」上で RTL や制約ファイル、ジェネレートしたIPなどの全体の管理を行い、ハードウェア情報のエクスポートも行う。 IP を生成したり、Zynq の設定をいろいろといじくったりするには、 XPS (Xilinx Platform Studio) を使う。 FPGA のコンフィグレーションには iMPACT を使い、回路の解析(ロジアナ)には ChipScope を使う。 配置配線結果を見ようと思ったら、 FPGA Editor が起動する。 お分かりのように、用途ごとにツールが乱立しており、ISE はそんなツールの集合体なのである。 上記はハード屋さんが使いこなすツールで、さらにソフトの開発には XSDK (Xilinx SDK = Eclipse を Xilinx 用に拡張したもの)を使う。 #### Vivado で Zynq をやる場合 Vivado を選択した場合、ハード周りのツールは Vivado 1つに統合される。 ハード開発に Vivado、ソフト開発に XSDK と2つのツールで済んでしまうのはメリットだ。 #### Vivado の長所短所 長所 - PlanAhead, XPS, iMPACT, ChipScope, FPGA Editor など、用途ごとにいろんなツールが起動していたのが、Vivado 1つで済む。 - IP間の接続などを Schematic で設計可能。 XPS では、IP 間のバスや信号をダイアログで選択しながら、接続していく(画像左側)ため、けっこう手間。 Schematic 表示も可能ではあるが、あくまで表示だけであって、Schematic 上で編集したりはできない。 一方、Vivado では回路図を引くような感じで、さくさくとポート間を接続していけるので、楽(画像右側)。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJLHVFUGfdOBGMTE4DZEO31NDBShOgbDFZkVdeFYYWtLkbtTqvNoiLHqJlja-bcpFz-pKHXZx1xi__nOuBOfXIiEl1e3ZQ-iiBOoj-j37Q7oy3aiOMIhT2jibKPLkDoRRWttJt5fN6YJ0/s1600/xps.jpg) [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjbjPRhDjZ7B6G22YuwFrKHnTzh-t39ulvhuXKvmnzuGShbsR49ZlWvuIIsD7O5CR2JV-mmUb3wQnM-IQUfzFogPWOKwknnYha8O2fLCti21zK7jORRpTSYBoiIon6nmmHCknO28O4yNU/s1600/vivado.jpg) - 今後のアップデートが期待できる。 Xilinx の開発の中心はすでに ISE から Vivado へと移っていると思われる。 今後 ISE のメンテを積極的にやっていくつもりはないであろうから、すでに発覚している ISE のバグの修正はあまり期待できない。 (特に、Linux 上で buggy な PlanAhead を使うのに嫌になっている。) - リモートで、FPGA のコンフィグレーションやロジック解析ができる。 - 合成、配置配線が ISE より速い。 短所 - よくも悪くも、新しいツールのため、こなれていない。 使っていた限り、現時点の最新版 (2013.2) でも十分使えると思うが、いくつかバグも目についた。 (Linux 版で、Zynq 設定の GUI インターフェースがバグってる。) ただし、今後のアップデートで、修正が期待できる。 - Vivado に対応していないドキュメントが結構ある チュートリアルなどが、ISE を対象に書かれている。 ある程度は、ISE と Vivado の両方の使い方を理解した上で、 ISE について書かれたドキュメントを頭の中で Vivado に変換しながら、読み進めていくのが良さそうだ。 - ISE に慣れた人にとっては、新たな勉強が必要 ISE との使い方が大きく異なるということはないのだが、ある程度差分があるので、多少の勉強は必要だ。 特に、制約ファイルは ISE で長年使われていた UCF ではなくて、 Vivado では XDC という Tcl ベースの書き方になる。 以上のことから、ツールとしては ISE と Vivado を両方共インストールし、両方のツールの基本的な使い方を理解 (少なくとも ISE を対象にしたドキュメントを読み進められるように)した上で、Vivado をメインに使っていくことにする。 ### Windows か Linux か FPGA も巨大になってきて、64bit OS 上にインストールするのがほぼ必須になってきているが、さて、ツールのインストール先は Windows か Linux か。 Zynq 上で Linux を動かすのならば、ISE/Vivado も Linux 版をインストールするのがよいでしょう。 Linux Kernel のビルドには Linux ホストが必要になるためである。 ハード開発は Windows、ソフト開発は Linux と分かれていると、生成したバイナリをいちいち転送して、結合して、なんてのを繰り返すことになって面倒なのだ。 ハード専任担当者でソフトを触る予定がない人や、Linux を動かす予定がない人は、Windows/Linux は好きに選べばよい。 なお、ツールのライセンスはノードロックが通常(MACアドレスを登録します)と思いますが、3回まではライセンスの移動できます。 Xilinx のページからライセンスファイルを再発行すればOK。 なお、無限に移動させたい場合は、USB - Ethernet 変換を買って、それをドングル代わりに使うのがよいかも。。 いろいろ書きましたが、 Windows は 私の趣味に合わないので、以下 Linux 上に ISE と Vivado をインストールして進めます。 ただし、 Linux 版の ISE/Vivado で正式にサポートされているのは Fedora であって、 Ubuntu はサポート対象外です。 ただし、多少の設定を最初にやれば、 Ubuntu でも十分に使えるようになる。 Ubuntu だけあって、このあたりの情報も検索すればいろいろと出てくるので問題無し。 [次回](/2013/12/ise-vivado-on-ubuntu.html)は、ISE/Vivado を Ubuntu にインストールする際の設定をまとめようと思う。
2013年10月29日火曜日
ELCE 2013 & U-Boot Mini Summit in Edinburgh
先週、Embedded Linux Conference Europe と U-Boot Mini Summit に参加するために、イギリスはエジンバラまで行ってきました。
ホテル - 会場間の町並み。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirPj1P8i3rIuxPdODUlhZjJwJFKJ6ugt3vUbiRTXBgQO5rs-30szPXSYOxnU4DsS3UlelF4dv87vY2f2N5AVYvAJGsObiy11i7I68bAAKsBqquLm2WBLCHwSF45DhqdB47U_Y6KgAw8xI/s1600/street.jpg)
23日夜はレセプションイベントがありました。会場のNational Museum of Scotland。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRYu550R-0KFixTu2VojCQJOBXi5s-tQFzYukiCUvOeFtK6EXVhmp6dpBIbiiEhVT15TzVeLQYFMu2NU8MxjESXyPF35RHFcMO56-qMVLegyzLy8VwAyYVE8BLZqknEDwnd_7VNCX5oDw/s1600/nmos.jpg)
レセプションではディナーやカジノを楽しむことができます。自分はルーレットやってました。
途中までは、ビギナーズラックでかなり勝ちました。最終的に全部なくなりましたが。。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNqiimLiEcp09ugfVIsCDepZxetSK6AC8zqb7RtglVS0neEygw8Dghte6SLwnwKPpYGNJ6ef0YMvNb2yGjhs_zgnxW0Gfdp4CKBIJbwj8L_KUrJqovwvVxyGnz0vDcXZiHN2xLM5-BQw0/s1600/casino.jpg)
ELCE 会場の Edinburgh International Conference Centre。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0ZFnsNxeg3eh4xOLrYsE3EkkTwAW1fhY_WLWTUFP2NHXync90YvJ9-bxCKaNX1uNfgnWd3IiXQLhH0MTuPu2psYD2s8f4ArCfaQ5MWSwela9cjGK5ITqrnbAn9R9yCwDkv0QDLdDMyeI/s1600/eicc.jpg)
受付や休憩場所のある Strathblane Hall の様子。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0cMFCbFM8dkDPmu1lVAfjveSDkNg4ASr1XQ_yi1IfUwQWcIY8WkXgu6fIAWvk5RAvKq4lxZPMq5ymIiGR24FZdBPVsiK8kLfk-vup-C4mxSBzV7OmTpgiDV0qJKR_RKolouGDN9kUJuQ/s1600/strath.jpg)
Chris Simmonds 氏による Keynote。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY6NYWUZZZ0X72IoFEymIlFrfmfM_J-7d3nTF9eP-qS_QkOph_XTDb4tmoDlQSvWsEyAOUFVj7qxWL4PVL4fk2uSeFv-1tY86sx9nghkiD6Vcxiwbdvjb0FD9O18hAB0-lOULK3D92AgU/s1600/keynote.jpg)
同会場で開催された U-Boot Mini Summit にも参加。
こちらはこじんまりとした感じ。聴衆は30〜40人くらいだったでしょうか。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTatXYS2Q8QQYvIN0q6zw9092y3hyJjUUrCTzUlA3r1RcgvMVabfsQCmy8ogySyOnx70__TOH3ydUcuitJbW35l9hYxWk3NE4EAx2sOp6lEhK4Oo3-TI2spOO5acyWxTYX3vR5OWP1CHw/s1600/uboot.jpg)
私が最近投稿していたパッチがスライドで紹介されているところ。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilI5ZAuElXLNObhvqdftwhMRw8AGyRTDHf2skwS7d3HlHTyEyOKuFNdZJcgEkKC25shTSbvXODAxcPXVwoJyLgI23ggZXiB7-GiPh9gFIQiPoXMfVevXZ-0BbhiAv9qeWLefMQMqEOoRc/s1600/uboot2.jpg)
24日夜は、U-Boot 開発陣で飲みに行きました。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL9tOETkiGiBUFfOw-oKKqq1hni0E6Hr4wsciWyL_y0yKxU_Y9u22TBNZXu-UZgBsiG5o1ewXTJbRGplyJ2BRHBE9V7nnL95b4wdmUajN_Vc7Vfr2CmQ9Xqmc7CI58kX2MhIvSyWJR-9A/s1600/bar.jpg)
Closing Gameの様子。 [](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcR0mL889R_KmIaNb0TVX0gDIg3YYOAmIYCYRR6V5Xch9cAeWzqdpZSlPpKvcDDA-hV-h3zaNJZ8u-RfrK9T1YJAvjwC6Z41YmgKpcuctMNO2wTrfaSy3OUTbMueSwXs_dLYJom30t0bw/s1600/closing.jpg) あるアンケートに対して、答えた人数が多い回答を当てていく。
3回 Strike すると、回答権が相手チームに渡り、当てるとポイントを Steal できる。
要するに、昔やってた「関口宏のクイズ100人に聞きました」ですね。
勉強にもなり、かつ楽しい一時でした。 普段 ML でやりとりしている人と直接会って話ができたのも良かったです。 来年の開催地はデュッセルドルフ。また行きたいです。
2013年9月24日火曜日
git の Acked-by と Reviewed-by
git log に付けられるタグで Acked-by と Reviewed-by の使い分けがよくわからなかったので、調べてみた。 翻訳が間違っている可能性もあるので、原文は [https://www.kernel.org/doc/Documentation/SubmittingPatches](https://www.kernel.org/doc/Documentation/SubmittingPatches) の 13) と 14) を参照してもらうとして、 ざっくりと、以下のように理解した。 - Signed-off-by: そのパッチのコード開発に関わった人、および そのパッチが投稿からマージに至るまでに経由した人を表す。 - Acked-by: そのパッチの開発に直接関わったわけではないが、 そのパッチをレビューし、パッチを取り込むことに賛成したことを示す。 管理者はパッチをマージする際に "yep, looks good to me" といった類のコメントを Acked-by タグに置き換えることがある。 実際、 Acked-by タグは、そのパッチが影響する分野の管理者によってよく使われる。 Acked-by を発行する際に、そのパッチすべてに対し承認する必要はない。 例えば、そのパッチが複数のサブシステムに影響する場合、 少なくとも自分の管理するサブシステム上で受け入れ可能であれば、Acked-by を付けることができる。 - Cc: そのコミットが変更する分野に関連する人で、まだコメントをしていない人を Cc: タグとして追加する。 Cc: は、タグに示された本人が明示的なアクションを取らなくても、追加されることのある唯一のタグである。 - Reported-by: 自分以外の人が報告した問題を修正する場合に、このタグを追加する。 ただし、報告者に事前に了承を得た上で追加すること。 つまり、このタグが付いているということは、バグが解決するまで、 報告者の協力が期待されるということ。 - Tested-by: タグのついている人によってテストが行われたことを示す。 - Reviewed-by: このパッチがレビューされ、(そのレビュアーの見地内では) パッチを取り込んでも問題ないと判断したことを示す。 そのパッチに興味を持った人は誰でもこのタグを提供することができる。 管理者にとって、このタグはレビューの進行度の目安になる。 特にその分野のエキスパートからの Reviewed-by タグが付いている場合、 そのパッチが取り込まれる可能性が高くなる。 - Suggested-by: このパッチのアイデアが、このタグのついている人のものであることを示す。 ただし、事前に報告者に了承を得た上で追加すること。 つまり、このタグに示された人からの協力が、将来の改変に渡って、期待できることを示す。 で、結局のところ Acked-by と Reviewed-by はどう使い分ければいいのか、依然すっきりしないのだが、 [http://linux-kernel.2935.n7.nabble.com/acked-by-meaning-td551744.html](http://linux-kernel.2935.n7.nabble.com/acked-by-meaning-td551744.html) を読むとはっきり書いてあった。 ポイントは Acked-by は特定分野のメンテナーによって使われることが多いという点。 Acked-by は発行する人(のランク)によって意味が違ってくる。 あるサブシステムのメンテナーが Acked-by を付けた場合、 自分の管理範囲では、問題ない、ということを示していて、 通常の使い方においては Reviewed-by より強い意味を持つ。 逆に、何の管理者にもなっていない人によって付けられた Acked-by は Facebook の「いいね」程度の意味しかない、だそうだ。 その分野で、そこそこの重鎮になってもないのに、 Acked-by を使うと 「てめえにわざわざ Ack される筋合いねーよ、このペーペーが!」 ということになりかねないので、使い方に気を付けることにしよう。
2013年9月18日水曜日
Git tips
たまにしか使わないものなど、忘れがちなものをメモ。 ### リポジトリのトップディレクトリを表示 ### $ git rev-parse --show-toplevel ### bare repository として clone する ### $ git clone --bare
### bare repository で current branch を変更する ### bare repository は working tree は持たないので、 $ git checkout
fatal: This operation must be run in a work tree のようにはできないので、 $ git symbolic-ref HEAD refs/heads/
とする。 ### リモートネームを追加 ### 例えば、 origin という名前をつける場合 git remote add origin
これで、長ったらしい
の代わりに `origin` という名前が使える。 ### git push と同時に追跡ブランチ設定する ### git push -u
のように `-u` オプションをつける ### リモートブランチの削除 ### git push
:
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)