FC2カウンター FPGAの部屋 2014年10月
fc2ブログ

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

FPGAの部屋

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

facedetect でいろいろな定義ファイルを試してみた3

facedetect でいろいろな定義ファイルを試してみた2”の続き。

今回は、haarcascade_mcs_righteye.xml から。

haarcascade_mcs_righteye.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_43_141030.jpg
両目が検出されている。

haarcascade_mcs_righteye.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_44_141030.jpg
何故か左目が検出されている。

haarcascade_mcs_upperbody.xml では、レナ像は何も検出されなかった。

haarcascade_mcs_upperbody.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_45_141031.jpg

haarcascade_profileface.xml では、レナ像は何も検出されなかった。

haarcascade_profileface.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_46_141031.jpg
何故か左目が検出されている。

haarcascade_righteye_2splits.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_47_141031.jpg
右目が検出されている。

haarcascade_righteye_2splits.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_48_141031.jpg
やはり右目が検出されている。

haarcascade_smile.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_49_141031.jpg
たくさん検出されている。

haarcascade_smile.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_50_141031.jpg
やはり、たくさん検出されている。

最後の haarcascade_upperbody.xml では、レナ像は何も検出されなかった。

haarcascade_upperbody.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_51_141031.jpg
後ろの部屋の照明スイッチが検出されている。

facedetect コマンドのいろいろな定義ファイルを試してみたが、うまくピッタリに検出できたのは少なく、間違っているのが多かった。やはり、チューニングが必要なんだろう?
  1. 2014年10月31日 04:10 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

facedetect でいろいろな定義ファイルを試してみた2

facedetect でいろいろな定義ファイルを試してみた1”の続き

今回は、haarcascade_mcs_leftear.xml から。

haarcascade_mcs_leftear.xml では、レナ像と私の写真は何も検出されなかった。

haarcascade_mcs_lefteye.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_37_141028.jpg

同じく haarcascade_mcs_lefteye.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_38_141028.jpg

haarcascade_mcs_mouth.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_39_141028.jpg

haarcascade_mcs_mouth.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_40_141028.jpg

haarcascade_mcs_nose.xml でのレナ像の検出結果を下に示す。
ZYBO_OpenCV_41_141030.jpg

haarcascade_mcs_nose.xml での私の写真の検出結果を下に示す。
ZYBO_OpenCV_42_141030.jpg

haarcascade_mcs_rightear.xml では、レナ像と私の写真は何も検出されなかった。
  1. 2014年10月30日 05:11 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

Intel Edison Breakout Board Kitが来ました

Intel Edison Breakout Board Kit が来ました。

こんなパッケージで来ました。
Edison_1_141029.jpg

中を開けると Edison ボードがプラスチックパッケージに入っていました。
Edison_2_141029.jpg

Edison ボードにズームします。
Edison_3_141029.jpg

その下には、Breakout Board が入っていました。小さなねじ込み式のスペーサーが2個入っていて、どうやらこれで、Breakout Board に Edison ボードを固定するようです。
固定したのがこれです。楊枝よりも小さいですね。本当にちっちゃいです。
Edison_4_141029.jpg

インテル® Edison モジュール
Software & Documentation
Intel® Edison Breakout Board Hardware Guide
などを読んで、電源の入れ方を勉強します。
本日発売、Intelの極小コンピュータ「Edison」インプレッション も勉強になりますね。
  1. 2014年10月29日 04:05 |
  2. Edison
  3. | トラックバック:0
  4. | コメント:0

facedetect でいろいろな定義ファイルを試してみた1

OpenCV の facedetect アプリケーションは、顔を検出することが出来る。(ZYBOボードにインストールしたUbuntuにOpenCVを載せて顔検出しています)
顔を判定するためには顔の定義ファイルが必要で、--cascade の後に定義ファイル名を指定する。現在は、/usr/local/share/OpenCV/haarcascades ディレクトリの haarcascade_frontalface_alt.xml ファイルを使用している。
レナ像を顔検出するための入力コマンドは下の通りである。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" lena.jpg


定義ファイルは、/usr/local/share/OpenCV/haarcascades ディレクトリに下に示すようにたくさんあるので、これを確かめてみた。
ZYBO_OpenCV_32_141027.png

最初に、haarcascade_eye.xml から試してみる。コマンドとしては下のようになる。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml" lena.jpg

実行結果を下に示す。
ZYBO_OpenCV_33_141027.jpg

定義ファイルの名前の通りに目を検出する定義ファイルのようだ。

次に、

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml" lena.jpg

でやってみたが、haarcascade_eye.xml と同様な結果になった。

haarcascade_eye_tree_eyeglasses.xml も目のところに丸がつく、同様な結果になった。 

次に私の写真でやってみたが目を検出することはできなかった。3つのXMLファイルでやってみたがメガネを掛けているためか目が検出できない。

次に、いつもの haarcascade_frontalface_alt.xml で自分の写真を顔検出してみた。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" marsee.jpg

顔は検出されたが、ネクタイ部分も顔として検出されてしまった。(お見苦しい点があるため画像の一部を加工していますw)
ZYBO_OpenCV_34_141027.jpg

レナ像のおなじみの顔検出。(haarcascade_frontalface_alt.xml 使用)
ZYBO_OpenCV_30_141025.jpg

haarcascade_frontalface_alt2.xml では、レナ像も私の写真も、haarcascade_frontalface_alt.xml と結果は同じだった。

haarcascade_frontalface_alt_tree.xml では、レナ像の結果は同じだったが、私の写真はネクタイ部分の顔検出が外れて、本来の顔だけ顔検出された。
ZYBO_OpenCV_35_141027.jpg

haarcascade_frontalface_default.xml では、haarcascade_frontalface_alt_tree.xml と同様にレナ像も私の写真も正常に顔検出された。

haarcascade_fullbody.xml では、レナ像も私の写真も何も検出されない。完全に体が写っていないとダメだのだろうか?

haarcascade_mcs_eyepair_big.xml では、レナ像は、2つ目が検出されたが、私の写真は検出されない。目が小さいのか?
ZYBO_OpenCV_36_141027.jpg

haarcascade_mcs_eyepair_small.xml では、レナ像も私の写真も何も検出されない。
  1. 2014年10月28日 05:05 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋まとめサイトの更新(2014年10月27日)

FPGAの部屋のまとめサイトを更新しました。

BeMicro MAX 10 FPGA 評価キットを追加して、ZYBOLinux、その他のカテゴリを更新しました。
  1. 2014年10月27日 03:49 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu 14.04 LTS で OpenCV の顔検出ができた

ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード2”で、ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード出来たと思ったのだが、OpenCV の顔認識をやってみるとエラーになってしまう。いろいろとやっていみたが、Ubuntu 14.04 LTS の apt-get にデータベースが壊れてきたようなので、もう一度、Ubuntu 12.11 を戻して、もう一度、、Ubuntu 14.04 LTS にアップグレードしてみることにした。(アップグレードのやり方については、”ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード”を参照のこと)

アップグレードのコツは、何かしたら reboot することだと思う。怪しいなと思ったら、すぐ再起動するのが良さそうだ。

一応、Ubuntu 14.04 LTS へのアップグレードはうまく行ったようのだが、OpenCV の顔検出はライブラリが無いと言われてうまく行かない。。。
ZYBO_OpenCV_28_141023.png

opencv-2.4.6.1 の build ディレクトリで 、

make clean
cmake ..
make

したが、make の途中でエラーになってしまう。

そこで、”OpenCV のインストール方法(Linux)”の”Fedora や Ubuntu へのインストール”を参考にさせて頂いた。具体的には、OpenCVをインストールする次のコマンドを実行した。(root で実行しています)

apt-get install libcv-dev
apt-get install libcv1
apt-get install libcvaux-dev
apt-get install libcvaux1
apt-get install libhighgui-dev
apt-get install libhighgui1
apt-get install opencv-doc

これで、レナ像の顔検出をすることができた。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" lena.jpg


ZYBO_OpenCV_29_141025.png
ZYBO_OpenCV_30_141025.jpg

また、いろいろと apt-get のデータベースがおかしくなった。下のようなエラーがたくさん出てしまった。

dpkg: error processing package texlive-latex-base (--configure):
dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of texlive-latex-recommended:
texlive-latex-recommended depends on texlive-latex-base (>= 2013.20130512); however:
Package texlive-latex-base is not configured yet.
texlive-latex-recommended depends on tex-common (>= 3); however:
Package tex-common is not configured yet.


このエラーに関しては、”dpkg: error processing package linux-image-generic (--configure): dependency problems - leaving unconfigured”を参照して

sudo dpkg --purge texlive-latex-base

のみを行った。それでも消えないパッケージは逆に apt-get install でインストールを行った。また、手動で削除しろというファイルもあって、それは rm コマンドで削除した。
これで、やっと、apt-get upgrade を行っても、エラーが出ないようになった。嬉しい。。。
ZYBO_OpenCV_31_141025.png

早速、現在のRoot File System のコピーを取っておくことにする。

# Linuxをいじっているが結構楽しい。。。
  1. 2014年10月25日 04:54 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

2014年10月23日の日記

+3.3V 単一電源でも使えるAltera のMAX10 の評価ボードを衝動買いしちゃって、やってみました。自分で基板を作るときに複数電源があると、基板を作るスキルが足りないので面倒だからです。MAX10ならば、私でも基板作れるんじゃない?2層基板でも行けるんじゃない?と思ったのが衝動買いのきっかけでした。
BeMicro MAX10 評価ボードは、いろいろなセンサがついて $30 と破格のお値段。。。これじゃ、MAX10の評価ボードを販売しようという人はいなくなりますね。
BeMicro MAX10 評価ボードに、PMODでLANを付けて、Arduino と同様に温度サーバを作ろうか?と思ったのですが、止めました。Arduino と同じことするならば、Arduino で十分ですよね。。。
MAX10では、ハードウェアを意識しなくても良いツールが出来て、Arduinoよりもハードウェアに対する柔軟性ができれば良いかな?と思います。
BeMicro MAX10 評価ボードとZYBOをZigbeeなどで、つなぐのも良いかもしれませんね。センサの処理の幅も広がりそうです。MAX10はセンサのフロントエンドとして使うのが良いかもしれません。

久しぶりにQuartus II 使ってみましたが、コンパイルが速い気がします。MAX10だからかもしれませんが、Qsys のプロジェクトが入っていても速いですね。Qsys はVivado IP Integrator と比べると1次元の接続なので、見にくい気はしました。
やはり、違うツールを使うと新鮮です。

次は、Xilinxに戻ってUbuntu 上でカメラを使って画像処理をしてみたいと思います。それに、Vivado 2014.3 も新機能を使ってみたいです。DPI-C とか、VHDL-2008 とかもう少し情報が出てくるのを待っています。

そう言えば、内部的なんですが、Vivado and Linux Kernel Build 勉強会をしようと思っています。今まで学んだ Vivado の使い方と ZYBO へのLinux ビルド、UbuntuのRoot File System などをまとめてセミナ資料を作ろうと思っています。勉強会のターゲットボードはZYBOになります。
1日目
午前
・Zynq-7000の概要
・Vivadoツールの概要

午後
・LEDテストプロジェクトをライブコーディング
IPをわざと間違えておいて、IPの修正方法を実習する

2日目
午前・午後 ハンズオン
・Vivadoでビットマップ・ディスプレイ・コントローラを作製
・ZYBO用u-bootのビルド
・SDKでBoot.bin を作製
・ZYBO用Linuxカーネルのビルド
・デバイス・ツリーのコンパイル
・Micro SDカードのフォーマット
・UbuntuのROOT File Systemのコピー
・Windowsパーティションへ必要なファイルをコピー
・ZYBOにSDカードを挿してLinuxをブート
・SSHのインストール
・ユーザーでログイン
・ディスプレイにキャラクタを表示するソフトウェアを実行(UIOを使う)
・XmingでXウインドウをWindowsで操作
・OpenCVインストール
・サンプル・プロジェクトのコンパイル
・顔認識アプリの実行

1日目は良いとして2日目は盛りだくさんすぎるので、出来るところまでとなりそうです。
今からセミナ資料を作りますが、ブログに全部書いてあるので、拾いだしてきてまとめようと思っています。
ZYBOの数が問題で、ZYBO持っている人の参加を歓迎しようかな?

現在は、ZYBOのUbuntu 12.11 を 14.04 LTS にやっとアップグレード出来たのですが、OpenCV 2.4.6.1 の顔認識がエラーになってしまったので、もう一度、OpenCV 2.4.6.1 をインストールし直しています。ビットマップ・ディスプレイ・コントローラのキャラクタ描画は正常に動いているので、この辺りは問題ないようです。
  1. 2014年10月23日 05:33 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:3

Altera Wiki , BeMicro Max 10 の Finger Temperature Tutorial をやってみた3

Altera Wiki , BeMicro Max 10 の Finger Temperature Tutorial をやってみた2(Qsys)”の続き。

・IP を生成して、qip ファイルと sip ファイルを生成したよというダイアログが表示された。
BeMicro_MAX10_112_141019.png

・Qsys をプロジェクトに追加する。Quartus II のProject メニューからAdd/Remove Files in Project... を選択した。
BeMicro_MAX10_113_141019.png

・File name の横の ... ボタンをクリックして、fingertemp_adc.qsys を選択してから、Add ボタンをクリックした。
BeMicro_MAX10_114_141019.png

・fingertemp_adc.qsys がリストに入った。OKボタンをクリックした。
BeMicro_MAX10_115_141019.png

・Quartus II のFiles タブに、fingertemp_adc.qsys が入った。
BeMicro_MAX10_116_141019.png

・fingertemp_lab_top.vhd のGENERIC を編集して、NUM_LEDS を 0 に設定した。
BeMicro_MAX10_117_141019.png

・コンパイルを行った。
BeMicro_MAX10_118_141019.png

・fingertemp_lab_top ファイルを右クリックし、右クリックメニューから Locate -> Locate in RTL Viewer を選択した時のRTL 図を下に示す。
BeMicro_MAX10_119_141019.png

・Quartus II でProgrammer アイコンをクリックした。
BeMicro_MAX10_120_141019.png

・Programmer が立ち上がった。Add File... ボタンをクリックした。
BeMicro_MAX10_121_141019.png

・Select Programming File ダイアログで fingertemp_lab_top.sof をクリックし、Open ボタンをクリックした。
BeMicro_MAX10_122_141019.png

・Programmer に fingertemp_lab_top.sof ファイルが読み込まれた状態を示す。
BeMicro_MAX10_123_141019.png

・start ボタンをクリックした。
BeMicro_MAX10_124_141019.png

・コンフィギュレーションが成功した。
BeMicro_MAX10_125_141019.png

コンフィギュレーションは成功したのだが、LEDが全く点灯しない。NUM_LEDS を 0 に設定したので当たり前か?
温度センサのADT7420 を触っても変化は起きない。

次に、NUM_LEDS を 8 に戻してコンパイルし、コンフィギュレーションしてみた。今度はLEDが8個全て点灯した。
やはり、温度センサのADT7420 を触っても変化は起きない。
  1. 2014年10月22日 04:26 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:1

ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード2

ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード”で、ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレードしようとして挫折してしまいましたが、もう一度、Ubuntu 14.04 にアップグレードしようということでやってみました。

今回は、表示をよく読んで、なんというコマンドを使うと良いよ。。。という提案の通りにコマンドを使いました。
使ったコマンドは、
強制的にパッケージをインストールする
apt-get -f install

アプリケーションで使われなくなったライブラリを自動的に削除してくれる
apt-get autoremove

不要なパッケージファイルを消してくれる
apt-get autoclean

これらのコマンドは、ユーザー・モードから実行する時は、sudo を前に追加します。

apt-get cleanを使ったら、14.04適用後のディスク容量を 91% から 72% にすることが出来ました。

root@linaro-ubuntu-desktop:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7443384 6348376    693856  91% /
devtmpfs          187692       4    187688   1% /dev
none                   4       0         4   0% /sys/fs/cgroup
none               50668     520     50148   2% /run
none                5120       0      5120   0% /run/lock
none              253328       0    253328   0% /run/shm
none              102400       0    102400   0% /run/user
root@linaro-ubuntu-desktop:~# sudo apt-get clean
root@linaro-ubuntu-desktop:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7443384 5018196   2024036  72% /
devtmpfs          187692       4    187688   1% /dev
none                   4       0         4   0% /sys/fs/cgroup
none               50668     520     50148   2% /run
none                5120       0      5120   0% /run/lock
none              253328       0    253328   0% /run/shm
none              102400       0    102400   0% /run/user


いろいろとトライして、長くかかりましたが、一応 Ubuntu 14.04 LTS にアップグレードできたようです。。。

まだ、エラーが出ていますが、大丈夫でしょう?

起動時のメッセージです。
ZYBO_EM_Linux_155_141021.png

終了時のメッセージです。
ZYBO_EM_Linux_156_141021.png

(2014/10/22:追記)
Ubuntu 14.04LTS にしてから、root で
apt-get update
apt-get upgrade

で Ubuntu をアップグレードできました。やはりサポートが効いているのは良いですね。
Linuxカーネルはダメでしょうが、他のアプリケーションは 14.04LTS にしておくとアップグレード(アップデート)が効くようです。

(2014/10/23:追記)
Ubuntu14.04 LTS の起動時のメッセージを貼っておきます。

U-Boot 2014.01-00005-gc29bed9-dirty (Sep 13 2014 - 20:33:09)

I2C:   ready
Memory: ECC disabled
DRAM:  512 MiB
MMC:   zynq_sdhci: 0
SF: Detected S25FL128S_64K with page size 256 Bytes, erase size 64 KiB, total 16 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Gem.e000b000
Hit any key to stop autoboot:  0
Device: zynq_sdhci
Manufacturer ID: 3
OEM: 5344
Name: SL08G
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.4 GiB
Bus Width: 4-bit
reading uEnv.txt
117 bytes read in 11 ms (9.8 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Running uenvcmd ...
reading uImage
3987160 bytes read in 347 ms (11 MiB/s)
reading devicetree.dtb
7762 bytes read in 15 ms (504.9 KiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3987096 Bytes = 3.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Device Tree to 1fb29000, end 1fb2de51 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9-dirty (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #9 SMP PREEMPT Sun Oct 5 04:32:36 JST 2014
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Xilinx Zynq
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] cma: CMA: reserved 128 MiB at 17800000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 coherent_pool=16M
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 375388K/524288K available (5144K kernel code, 319K rwdata, 1900K rodata, 202K init, 5339K bss, 148900K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc06e9600   (7046 kB)
[    0.000000]       .init : 0xc06ea000 - 0xc071ca00   ( 203 kB)
[    0.000000]       .data : 0xc071e000 - 0xc076dde0   ( 320 kB)
[    0.000000]        .bss : 0xc076ddec - 0xc0ca4c88   (5340 kB)
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] ps7-slcr mapped to e0802000
[    0.000000] zynq_clock_init: clkc starts at e0802100
[    0.000000] Zynq clock init
[    0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[    0.008494] ps7-ttc #0 at e0804000, irq=43
[    0.013536] Console: colour dummy device 80x30
[    0.017873] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.025927] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.029947] ... MAX_LOCK_DEPTH:          48
[    0.034117] ... MAX_LOCKDEP_KEYS:        8191
[    0.038538] ... CLASSHASH_SIZE:          4096
[    0.042889] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.047359] ... MAX_LOCKDEP_CHAINS:      32768
[    0.051865] ... CHAINHASH_SIZE:          16384
[    0.056305]  memory used by lock dependency info: 3695 kB
[    0.061755]  per task-struct memory footprint: 1152 bytes
[    0.067198] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[    0.110953] pid_max: default: 32768 minimum: 301
[    0.116270] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122808] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.137373] CPU: Testing write buffer coherency: ok
[    0.143607] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.149243] Setting up static identity map for 0x4de8d0 - 0x4de928
[    0.155615] L310 cache controller enabled
[    0.159575] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[    0.240411] CPU1: Booted secondary processor
[    0.328277] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.329389] Brought up 2 CPUs
[    0.342252] SMP: Total of 2 processors activated.
[    0.346952] CPU: All CPU(s) started in SVC mode.
[    0.354955] devtmpfs: initialized
[    0.365694] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.379870] regulator-dummy: no parameters
[    0.392699] NET: Registered protocol family 16
[    0.429419] DMA: preallocated 16384 KiB pool for atomic coherent allocations
[    0.443249] cpuidle: using governor ladder
[    0.447231] cpuidle: using governor menu
[    0.474412] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[    0.488774] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.496625] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.502995] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[    0.573803] bio: create slab <bio-0> at 0
[    0.583427] vgaarb: loaded
[    0.587951] SCSI subsystem initialized
[    0.594167] usbcore: registered new interface driver usbfs
[    0.599984] usbcore: registered new interface driver hub
[    0.605789] usbcore: registered new device driver usb
[    0.612304] media: Linux media interface: v0.10
[    0.617154] Linux video capture interface: v2.00
[    0.622395] pps_core: LinuxPPS API ver. 1 registered
[    0.627234] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.637141] PTP clock support registered
[    0.642039] EDAC MC: Ver: 3.0.0
[    0.648371] Advanced Linux Sound Architecture Driver Initialized.
[    0.663848] DMA-API: preallocated 4096 debug entries
[    0.668767] DMA-API: debugging enabled by kernel config
[    0.674482] Switched to clocksource arm_global_timer
[    0.737698] NET: Registered protocol family 2
[    0.744615] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.751721] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.760297] TCP: Hash tables configured (established 4096 bind 4096)
[    0.766777] TCP: reno registered
[    0.769908] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.776091] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.783578] NET: Registered protocol family 1
[    0.789613] RPC: Registered named UNIX socket transport module.
[    0.795487] RPC: Registered udp transport module.
[    0.800129] RPC: Registered tcp transport module.
[    0.804891] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.812706] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.826575] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.840444] jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[    0.848005] msgmni has been set to 989
[    0.853245] io scheduler noop registered
[    0.857183] io scheduler deadline registered
[    0.861451] io scheduler cfq registered (default)
[    0.885946] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[    0.892852] dma-pl330 f8003000.ps7-dma:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.905104] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[    0.914351] console [ttyPS0] enabled
[    0.914351] console [ttyPS0] enabled
[    0.921559] bootconsole [earlycon0] disabled
[    0.921559] bootconsole [earlycon0] disabled
[    0.932690] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[    0.942547] [drm] Initialized drm 1.1.0 20060810
[    0.980710] brd: module loaded
[    1.003034] loop: module loaded
[    1.018849] m25p80 spi0.0: found s25fl128s1, expected n25q128
[    1.025065] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[    1.030089] 4 ofpart partitions found on MTD device spi0.0
[    1.036204] Creating 4 MTD partitions on "spi0.0":
[    1.040923] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[    1.054328] 0x000000400000-0x000000900000 : "qspi-linux"
[    1.064666] 0x000000900000-0x000000920000 : "qspi-device-tree"
[    1.075473] 0x000000920000-0x000001000000 : "qspi-user"
[    1.095356] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[    1.101107] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[    1.112951] libphy: XEMACPS mii bus: probed
[    1.119068] xemacps e000b000.ps7-ethernet: invalid address, use assigned
[    1.126272] xemacps e000b000.ps7-ethernet: MAC updated 56:fa:f7:fe:d3:b4
[    1.133446] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[    1.148608] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.155665] ehci-pci: EHCI PCI platform driver
[    1.160743] ULPI transceiver vendor/product ID 0x0424/0x0007
[    1.166425] Found SMSC USB3320 ULPI transceiver.
[    1.170985] ULPI integrity check: passed.
[    1.175939] zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
[    1.183203] zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
[    1.214605] zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
[    1.234538] zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
[    1.247261] hub 1-0:1.0: USB hub found
[    1.251239] hub 1-0:1.0: 1 port detected
[    1.259195] usbcore: registered new interface driver usb-storage
[    1.268054] mousedev: PS/2 mouse device common for all mice
[    1.275757] i2c /dev entries driver
[    1.288482] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[    1.294740] cpufreq_cpu0: failed to get cpu0 regulator: -19
[    1.303096] Xilinx Zynq CpuIdle Driver started
[    1.309564] sdhci: Secure Digital Host Controller Interface driver
[    1.315727] sdhci: Copyright(c) Pierre Ossman
[    1.320008] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.327296] mmc0: no vqmmc regulator found
[    1.331319] mmc0: no vmmc regulator found
[    1.374478] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[    1.393511] usbcore: registered new interface driver usbhid
[    1.401124] usbhid: USB HID core driver
[    1.418094] TCP: cubic registered
[    1.421340] NET: Registered protocol family 17
[    1.426504] Registering SWP/SWPB emulation handler
[    1.433816] regulator-dummy: disabling
[    1.438362] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.457043] mmc0: new high speed SDHC card at address aaaa
[    1.465348] mmcblk0: mmc0:aaaa SL08G 7.40 GiB
[    1.473066] ALSA device list:
[    1.476457]   No soundcards found.
[    1.476666]  mmcblk0: p1 p2
[    5.836091] EXT4-fs (mmcblk0p2): recovery complete
[    5.843404] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    5.851583] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    5.866317] devtmpfs: mounted
[    5.869599] Freeing unused kernel memory: 200K (c06ea000 - c071c000)
Mount failed for selinuxfs on /sys/fs/selinux:  No such file or directory
[    6.706293] init: plymouth-upstart-bridge main process (591) terminated with [    6.875380] init: plymouth-upstart-bridge main process (601) terminated with [    7.887878] random: nonblocking pool is initializedinated with status 5
 * Starting Mount filesystems on boot                                    [ OK ]
 * Starting Signal sysvinit that the rootfs is mounted                   [ OK ]
 * Starting Populate /dev filesystem                                     [ OK ]
 * Stopping Populate /dev filesystem                                     [ OK ]
 * Starting Clean /tmp directory                                         [ OK ]
 * Starting Populate and link to /run filesystem                         [ OK ]
 * Stopping Clean /tmp directory                                         [ OK ]
 * Stopping Populate and link to /run filesystem                         [ OK ]
 * Stopping Track if upstart is running in a container                   [ OK ]
 * Starting Initialize or finalize resolvconf                            [ OK ]
 * Starting set console keymap                                           [ OK ]
 * Starting Signal sysvinit that virtual filesystems are mounted         [ OK ]
 * Starting Signal sysvinit that virtual filesystems are mounted         [ OK ]
 * Stopping set console keymap                                           [ OK ]
 * Starting Signal sysvinit that local filesystems are mounted           [ OK ]
 * Starting Bridge udev events into upstart                              [ OK ]
 * Starting Signal sysvinit that remote filesystems are mounted          [ OK ]
 * Starting device node and kernel event manager                         [ OK ]
modprobe: FATAL: Could not load /lib/modules/3.14.0-xilinx-13567-g906a2c9-dirty/modules.dep: No such file or directory

 * Starting OpenSSH server                                               [ OK ]
 * Starting Load gator driver module and launch gator daemon             [ OK ]
 * Starting flush early job output to logs                               [ OK ]
 * Starting Load gator driver module and launch gator daemon             [fail]
 * Stopping Mount filesystems on boot                                    [ OK ]
 * Stopping flush early job output to logs                               [ OK ]
 * Starting load modules from /etc/modules                               [ OK ]
 * Starting cold plug devices                                            [ OK ]
 * Starting log initial device creation                                  [ OK ]
 * Stopping load modules from /etc/modules                               [ OK ]
modprobe: FATAL: Could not load /lib/modules/3.14.0-xilinx-13567-g906a2c9-dirty/modules.dep: No such file or directory

modprobe: FATAL: Could not load /lib/modules/3.14.0-xilinx-13567-g906a2c9-dirty/modules.dep: No such file or directory

 * Starting system logging daemon                                        [ OK ]
 * Starting D-Bus system message bus                                     [ OK ]
 * Starting modem connection manager                                     [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting network connection manager                                   [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting configure network device                                     [ OK ]
 * Stopping cold plug devices                                            [ OK ]
 * Stopping log initial device creation                                  [ OK ]
 * Starting mDNS/DNS-SD daemon                                           [ OK ]
 * Starting enable remaining boot-time encrypted block devices           [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting configure virtual network devices                            [ OK ]
 * Starting CUPS printing spooler/server                                 [ OK ]
 * Stopping enable remaining boot-time encrypted block devices           [ OK ]
 * Stopping configure virtual network devices                            [ OK ]
 * Starting userspace bootsplash                                         [ OK ]
 * Stopping userspace bootsplash                                         [ OK ]
 * Starting Send an event to indicate plymouth is up                     [ OK ]
 * Starting System V initialisation compatibility                        [ OK ]
 * Starting configure network device security                            [ OK ]
 * Starting bluetooth daemon                                             [ OK ]
 * Starting configure network device                                     [ OK ]
 * Setting up X socket directories...                                    [ OK ]
 * Starting Mount network filesystems                                    [ OK ]
 * Starting Failsafe Boot Delay                                          [ OK ]
 * Stopping Mount network filesystems                                    [ OK ]
 * Stopping System V initialisation compatibility                        [ OK ]

Last login: Thu Jan  1 00:00:29 UTC 1970 on tty1
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.14.0-xilinx-13567-g906a2c9-dirty armv7l)

 * Documentation:  https://help.ubuntu.com/
speech-dispatcher disabled; edit /etc/default/speech-dispatcher
saned disabled; edit /etc/default/saned
 * Starting System V runlevel compatibility                              [ OK ]
 * Starting automatic crash report generation                            [ OK ]
 * Starting save kernel messages                                         [ OK ]
 * Starting anac(h)ronistic cron                                         [ OK ]
 * Starting crash report submission daemon                               [ OK ]
 * Starting regular background program processing daemon                 [ OK ]
 * Stopping save kernel messages                                         [ OK ]
 * Stopping anac(h)ronistic cron                                         [ OK ]
Error in function update
E: Unknown Error: '<type 'exceptions.TypeError'>' (update() takes exactly 2 arguments (1 given))run-parts: /etc/update-motd.d/90-updates-available exited with return code 255
root@linaro-ubuntu-desktop:~#

  1. 2014年10月21日 05:28 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

Altera Wiki , BeMicro Max 10 の Finger Temperature Tutorial をやってみた2(Qsys)

Altera Wiki , BeMicro Max 10 の Finger Temperature Tutorial をやってみた1”の続き。

前回は、fingertemp_pll を作製して、Qsys を立ちあげた所で終了したので、その続きから。

・前回は、下の図のQsys を立ちあげた所で終了した。
BeMicro_MAX10_90_141019.png

・IP Catalog の検索フィールドに ADC と入力した(上図参照)。

・Altera Moduler ADC core をダブルクリックした(上図参照)。

・Altera Moduler ADC core の設定画面が立ち上がった。

・General タブの Core Configuration -> Core Variant を Standard sequencer with external sample storage に変更した。
BeMicro_MAX10_91_141019.png

・Channels タブでは、CH12タブをクリックして、Use Channel 12 にチェックを入れた。CH12 は、BeMicro MAX10 ボードの温度センサに接続されているそうだ。
BeMicro_MAX10_92_141019.png

・Sequencer タブで、Conversion Sequence Channels を CH 12 に変更した。Finish ボタンをクリックした。
BeMicro_MAX10_93_141019.png

・Qsys 画面にAltera Moduler ADC core が入った。

・Altera Moduler ADC core を選択して右クリックし、右クリックメニューからRename を選択した。
BeMicro_MAX10_94_141019.png

・名前を fingertemp_adc に変更した。
BeMicro_MAX10_95_141019.png

・fingertemp_adc の response の Exprot をダブルクリックした(上図参照)。

・自動的に、fingertemp_adc_response と名前が入った。

・adc_pll_clock と ad_pll_locked も同様に export をダブルクリックした。したのエラー個数が減っていく。
BeMicro_MAX10_96_141019.png

・IP Catalog の検索に jtag と入力した。

・JTAG to Avalon Master Bridge をダブルクリックした。
BeMicro_MAX10_97_141019.png

・JTAG to Avalon Master Bridge の設定ダイアログが立ち上がった。Finish ボタンをクリックした。
BeMicro_MAX10_98_141019.png

・master_0 という名前の JTAG to Avalon Master Bridge が Qsys に入った。
BeMicro_MAX10_99_141019.png

・master_0 の master と fingertemp_adc の sequencer_csr を接続した。配線の白丸をクリックすると簡単に配線を接続できる。
BeMicro_MAX10_100_141019.png

・IP Catalog の検索に pipeline と入力した。

・Avalon-MM Pipline Bridge をダブルクリックした。
BeMicro_MAX10_101_141019.png

・Avalon-MM Pipline Bridge の設定ダイアログが表示された。

・Data width を 16 に設定した。Finish ボタンをクリックした。
BeMicro_MAX10_102_141019.png

・Avalon-MM Pipline Bridge が mm_bridge_0 という名前でインスタンスされた。

・mm_bridge の m0 と fingertemp_adc の sequencer_csr を接続した。配線の白丸をクリックすると簡単に配線を接続できる。
BeMicro_MAX10_103_141019.png

・mm_bridge の s0 の export をダブルクリックした。 mm_bridge_0_s0 という名前でインスタンスされた。
BeMicro_MAX10_104_141019.png

・下図の様に配線してエラーが無くなった。
BeMicro_MAX10_105_141019.png

・File メニューから Save As... を選択した。
BeMicro_MAX10_106_141019.png

・fingertemp_adc という名前でセーブした。
BeMicro_MAX10_107_141019.png

・Generate メニューから Generate HDL... を選択した。
BeMicro_MAX10_108_141019.png

・Generation ダイアログで、Create HDL design files for synthesis にVHDL を選択した。Generate ボタンをクリックした。
BeMicro_MAX10_109_141019.png

・生成が完了した。
BeMicro_MAX10_110_141019.png

・Finish ボタンをクリックした。これで、Qsys での作業は終了した。
BeMicro_MAX10_111_141019.png
  1. 2014年10月21日 04:52 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

Altera Wiki , BeMicro Max 10 の Finger Temperature Tutorial をやってみた1

Altera Wiki , BeMicro Max 10Finger Temperature Tutorial をやってみた。
Quartus II の BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial をやったので、今度はQsys を使ったチュートリアルをやってみることにした。

この演習は8個のLEDが指の温度でPWMを使って明るさを変化させるチュートリアルの様だ?

・最初は、Fingertemp Lab Files (QAR) をダウンロードして、Quartus II で読み込んだ。

・最初にコンパイルを行ったが、いくつかのファイルが無いと言われてエラーになった。
BeMicro_MAX10_80_141019.png

・右の IP Catalog を展開して ALTPLL をダブルクリックした。
BeMicro_MAX10_81_141019.png

・Save IP Variation ダイアログが立ち上がった。fingertemp_pll と名前を指定した。

・VHDLを選択して、OKボタンをクリックした。
BeMicro_MAX10_82_141019.png

・MegaWizard Plug-In Manager (ALTPLL) が立ち上がった。

・What is the frequency of the inclk0 input? に 50.000 MHz を入力した。Next > ボタンをクリックした。
BeMicro_MAX10_83_141019.png

・Bandwidth/SS タブで、How would you like to specify the bandwidth setting? のPreset のラジオボタンをクリックして選択し、High に設定した。Next > ボタンをクリックした。
BeMicro_MAX10_84_141019.png

・3. Output Clocks -> clk_c0 タブで、c0 をEnter output clock parameter -> Clock division factor を 5 に変更した。
BeMicro_MAX10_85_141019.png

・3. Output Clocks -> clk_c1 タブで、c1 の Use this clock にチェックを入れて、下図のように設定した。
BeMicro_MAX10_86_141019.png

・5. Summary で Finish ボタンをクリックした。
BeMicro_MAX10_87_141019.png

・Quartus II IP Files ダイアログが表示されたので、Yes ボタンをクリックした。
BeMicro_MAX10_88_141019.png

・Quartus II のProject Navigator -> Files タブに、fingertemp_pll.qip が表示された。
BeMicro_MAX10_89_141019.png

・上の図で Qsys アイコンをクリックした。

・Qsys 画面が表示された。
BeMicro_MAX10_90_141019.png
  1. 2014年10月20日 04:40 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial をやってみた2

BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial をやってみた1”の続き。

今回も、Altera Wiki の BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial の続きをやってみた。前回は実機動作まで終了しているが、今回は、コンパイル後のFPGA配線の様子の見方やタイミング制約の書け方を実習する。

BeMicro Max 10 Simple PWM Tutorial (PDF) 23ページの MODULE 3.EXPLORING THE DETAILS OF YOUR DESIGN で、top ファイルを右クリックし、右クリックメニューから Locate -> Locate in RTL Viewer を選択した時のRTL 図を下に示す。
BeMicro_MAX10_70_141016.png

・24ページ Part B: Explore design in device with the Chip Planer の top ファイルを右クリックし、右クリックメニューから Locate in Chip Planer (Florplan and Chip Editor) を選択した時の画面を下に示す。
BeMicro_MAX10_71_141016.png

・25ページ Part C: Explore design in device with the Resource Property Editor。すでに、Resource Property Editor は表示されていた。これはshiftreg を見ている。
BeMicro_MAX10_72_141016.png

・26ページ、3.1 Part D: Gather information from the Compilation Report で、Compilation Report -> Fiter -> Resource Utilzation by Entity を選択して、リソースの使用状況を表示した。
BeMicro_MAX10_73_141016.png

MODULE 4. SETING UP TIMING CONSTRAINTS (27ページ)

・Quartus II の Tools -> TimeQuest Timinig Analyzer を選択した。

・TimeQuest GUI の Tools -> TimeQuest Timinig Analyzer Wizard を選択した。

・28ページ 5) でクロック周期に 20ns を入力している。
BeMicro_MAX10_74_141016.png

・29ページの Summary を下に示す。クロックの制約のみ追加している。
BeMicro_MAX10_75_141016.png

・30ページの図。Qurtus II の Assignments -> Settings -> TimeQuest Timing Analyzer で pwm_led.sdc を使用する。
BeMicro_MAX10_76_141016.png

・TimeQuest で、Tasks -> Report Clocks を見ると、PLLから出力するクロックも見ることができた。これは便利だ。(31ページ)
BeMicro_MAX10_77_141016.png

・TimeQuest で、Report Fmax Summary を見た。(31ページ)
BeMicro_MAX10_78_141016.png

・Time Quest を閉じて、Quartus II でコンパイルしてから、1200mV 85C Model の Fmax Summary を見た。(32ページ)
BeMicro_MAX10_79_141016.png
  1. 2014年10月17日 04:31 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial をやってみた1

Altera Wiki の BeMicro MAX 10 の Intro to FPGA Simple PWM Tutorial をやってみた。
今回は、BeMicro Max 10 Simple PWM Tutorial (PDF) の出来が良く、そのままやれば大丈夫ということで、要点のみの画像をブログ記事に貼ることにした。

・最初の画像は、BeMicro Max 10 Simple PWM Tutorial (PDF) の9ページ 2.3 Examine the Design Files の辺り、pwm_led_top.bdf を開いたところだ。
BeMicro_MAX10_62_141015.png

・次は、ALTPLLをインスタンス、その他のHDLファイルのシンボルをインスタンスして、pwm_led_top.bdf を完成させたところだ。BeMicro Max 10 Simple PWM Tutorial (PDF)の 2.6 Complete the Schematic が終了した17ページ。
BeMicro_MAX10_63_141015.png

・18ページの Part D: Analyze the Design and Asign Pin で、Analysis and Elaboration を行った。
BeMicro_MAX10_64_141015.png

・19ページの信号割り当て表を元に、信号ピンの割り当てを行った。
BeMicro_MAX10_65_141015.png

・20ページのコンパイルを行った。
BeMicro_MAX10_66_141015.png

・BeMicro MAX 10 をUSBで接続して、コンフィギュレーションを行った(22ページ)
BeMicro_MAX10_67_141015.png

・BeMicro MAXI 10 のLEDは全消灯している。 SW1 を押すと、D1が点灯し D5 が暗く点灯する。SW2を押すとD1が消灯して、D5も消灯する。SW1 が +1 ならば、SW2 は -1 だ。
BeMicro_MAX10_68_141016.jpg

・SW1を押していくごとに、D1 ~ D4 がバイナリで点灯して行って、値が大きくなるごとに D5 の明るさが明るくなる。下の写真はD5の明るさが最大の時だ。
BeMicro_MAX10_69_141016.jpg
  1. 2014年10月16日 06:00 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Full featured Reference Design をやってみた4(実機でテスト)

BeMicro MAX 10 の Full featured Reference Design をやってみた3(MAX10をコンフィグレーション)”の続き。

前回は、Nios II からMAX10 をコンフィグレーションした。今回は、Nios II からソフトウェアを実行してリファレンス・デザインを実行した。

・Nios II の Run As -> 3 Nios II Hardware を選択した。
BeMicro_MAX10_49_141014.png

・Run Configurations ダイアログで、adc_example2_Nios II Hardware configuration ができた。
BeMicro_MAX10_50_141014.png

・Target Connection タブに x 印が付いていたので、Target Connection タブに移り、Refresh Connections ボタンをクリックすると x 印が消えた。

・Download の Download ELF to selected target system にチェックが入っていることを確認しよう。

・Apply ボタンをクリックした。
BeMicro_MAX10_51_141014.png

・Debugger タブ。
BeMicro_MAX10_52_141014.png

・Source タブ。
BeMicro_MAX10_53_141014.png

・Common タブ。Apply ボタンをクリックして、Run ボタンをクリックした。
BeMicro_MAX10_54_141014.png

・adc_example が実行された。
BeMicro_MAX10_55_141014.png

・Nios II Console を最大化した。
BeMicro_MAX10_56_141014.png

次からは、Example を次々同様に試してみた。Nios II Console を最大化した時の表示を下に示す。

・dac_loopback
BeMicro_MAX10_57_141014.png

・serial_flash_example
BeMicro_MAX10_58_141014.png

・temp_sense_example
BeMicro_MAX10_59_141014.png

・timer_example これは、表示が少ないので、Nios II Console を最大化していない。
BeMicro_MAX10_60_141014.png

・最後に、Nios II Hardware の configuration を下に示す。
BeMicro_MAX10_61_141014.png
  1. 2014年10月15日 04:18 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Full featured Reference Design をやってみた3(MAX10をコンフィグレーション)

BeMicro MAX 10 の Full featured Reference Design をやってみた2(Nios II)”の続き。

Nios II で、コンパイルすることができたので、BeMicro MAX10 をパソコンに接続して確かめてみた。

・BeMicro MAX10 をUSBに接続した。これで電源が入る。

・USB電流計を接続して、電流を測定したら、0.11A 消費していた。ソフトウェアを起動するときには、0.12Aになった。十分にUSBの規格内だ。

・Nios II のNios II -> Quartus II Programmer を選択した。
BeMicro_MAX10_41_141013.png

・Quartus II 64-bit Programmer が立ち上がった。 Hardware Setup... ボタンをクリックした。
BeMicro_MAX10_42_141013.png

・Hardware Setup ダイアログが立ち上がった。Currently selected hardware をクリックして、USB-Blaster [USB-0] を選択した。
BeMicro_MAX10_43_141013.png

・Currently selected hardware が、USB-Blaster [USB-0] に変更された。OKボタンをクリックした。
BeMicro_MAX10_44_141013.png

・Quartus II 64-bit Programmer の Hardware Setup が USB-Blaster [USB-0] に変更された。

・Add File... ボタンをクリックした。
BeMicro_MAX10_45_141013.png

・Select Programming File ダイアログが開いた。C:\HDL\altera\Altera_work\BeMicro_MAX10\BeMicro_Max10_restored\output_files に行って、top.sof を選択した。Open ボタンをクリックした。
BeMicro_MAX10_46_141013.png

・上のペインに、top.sof が入った。Start ボタンをクリックした。
BeMicro_MAX10_47_141013.png

・MAX10がコンフィグレーションされた。成功だ。
BeMicro_MAX10_48_141013.png
  1. 2014年10月14日 04:47 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

USB-Blaster のインストール(Qaurtus II 14.0.2)

BeMicro Max10 をUSBポートに接続した所、LEDがカウントを始めた。
BeMicro_MAX10_40_141013.jpg

・しかし、デバイス マネージャーを見ると、USB-Blaster が認識されていなかった。(Qaurtus II 14.0.2)
BeMicro_MAX10_36_141013.png

・USB-Blaster を右クリックして、右クリックメニューからドライバソフトウェアの更新(P)... を選んだ。

・ドライバー ソフトウェアを手動で検索してインストールします。の方をクリックした。
BeMicro_MAX10_38_141013.png

・14.0\quartus\drivers を選択して、次をクリックした。(USB-Blaster のフォルダを選んでもダメでした)
BeMicro_MAX10_37_141013.png

・ドライバがインストールされ、Altera USB-Blaster として認識された。
BeMicro_MAX10_39_141013.png
  1. 2014年10月13日 05:54 |
  2. QuartusⅡ
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Full featured Reference Design をやってみた2(Nios II)

BeMicro MAX 10 の Full featured Reference Design をやってみた1(コンパイル)”の続き。

前回は、Quartus II で BeMicro MAX 10 の Full featured Reference Design をコンパイルした。今回はソフトウェアをNios II で作る、と言うかCのサンプルをビルドする。

・Quartus II で、Tools -> Nois II Software Build Tools for Eclipse を選択した。
BeMicro_MAX10_15_141011.png

・BeMicro_Max10_restored (Full featured Reference Design トップのフォルダ)を指定する。
BeMicro_MAX10_16_141011.png

・Nios II が立ち上がった。
BeMicro_MAX10_17_141012.png

・File -> New -> Nios II Application and BSP from Template を選択した。
BeMicro_MAX10_18_141012.png

・Nios II Application and BSP from Template ダイアログが開く。Target hardware infomation -> SOPC Infomation File name の ... ボタンをクリックした。
BeMicro_MAX10_19_141012.png

・開くダイアログが開いた。BeMicro_MAX10_restred の nios_system_sopcinfo を選択して、開くボタンをクリックした。
BeMicro_MAX10_20_141012.png

・Target hardware infomation -> SOPC Infomation File name に nios_system_sopcinfo を選択されて、CPU name: が cpu に設定された。

・Application projet -> project name: に hello_world と記入して、Finish ボタンをクリックした。
BeMicro_MAX10_21_141012.png

・hello_world プロジェクトと hello_world_bsp プロジェクトができた。
BeMicro_MAX10_22_141012.png

・hello_world プロジェクトと hello_world_bsp プロジェクトが、software フォルダの下にできた。
BeMicro_MAX10_23_141012.png

次に、software フォルダの下にある adc_example などCサンプル用のプロジェクトを作製する。まずは、adc_example から作製する。

・File -> New -> Nios II Application を選択した。
BeMicro_MAX10_24_141012.png

・Nios II Application プロジェクトが開いた。すでにある adc_example という Project name にするとうまく行かなかったので、adc_example2 というプロジェクト名にした。

・BSP location を指定するために、脇の ... ボタンをクリックした。
BeMicro_MAX10_25_141012.png 

・Project Selection ダイアログが開いた。hello_world_bsp が選択されているので、OKボタンをクリックした。
BeMicro_MAX10_26_141012.png

・Nios II Application プロジェクトに戻り、必要な情報が入ったので、Finish ボタンをクリックした。
BeMicro_MAX10_27_141012.png

・adc_example2 プロジェクトができた。
BeMicro_MAX10_28_141012.png

・adc_example プロジェクトに入っていた adc_example.c を adc_example2 にドラック&ドロップした。
BeMicro_MAX10_29_141012.png

・Copy files のラジオボタンが選択されているので、そのままOKボタンをクリックした。
BeMicro_MAX10_30_141012.png

・adc_example2 プロジェクトに、adc_example.c が入ったが、多くの?があった。
BeMicro_MAX10_31_141012.png

・オートビルドに設定されていないようなので、Project -> Build Project を選択した。
BeMicro_MAX10_32_141012.png

・?が無くなり、バイナリファイルもできた。
BeMicro_MAX10_33_141012.png

・その他の example も同様にコンパイルできたが、timer_example.c は BSPのファイルを参照していたので、現在の環境に合うように修正を行った。
BeMicro_MAX10_34_141012.png

・すべての example のアプリケーション・プロジェクトを作製した状態のフォルダを下に示す。
BeMicro_MAX10_35_141012.png
  1. 2014年10月12日 14:19 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 の Full featured Reference Design をやってみた1(コンパイル)

Altera Wiki のBeMicro MAX 10 という、いろいろとBeMicro MAX 10 についての情報が載っている、とっても素敵なWebサイトを見つけた。
その内の最後の Full featured Reference Design をやってみることにした。
久しぶりの Quartus II だ。どのように変わっているか?楽しみだ。。。

なお、Quartus II 14.0をインストールしたのだが、最新のデバイスなので、これだけではデバイスファミリが入っていなかった。Quartus II Software v14.0 Update 2 (Includes MAX 10 FPGA device support) サイズ: 650.5 MB MD5: 1646C3AFC3410D5664456A068A6CD18F(ダウンロードが開始されることがあります。注意) をインストールする必要があった。

・Quartus II 14.0.2 を立ちあげた。
BeMicro_MAX10_5_141010.png

・File -> Open... を選択した。
BeMicro_MAX10_6_141010.png

・ファイルの種類で Quartus II Archive File (*.qar) を選択して、BeMicro_Max10.qar を選択して、開くボタンをクリックした。
BeMicro_MAX10_7_141010.png

・Restore Archived Project ダイアログで、OKボタンをクリックした。
BeMicro_MAX10_8_141010.png

・デザインがロードされた。Start Compilation アイコンをクリックして、コンパイルを行った。
BeMicro_MAX10_9_141010.png

・コンパイルが終了した。タイミング・エラーが出ている。Qsysアイコンをクリックして、Qsys を立ちあげた。
BeMicro_MAX10_10_141010.png

・Qsys 立ちあげた。懐かしい。。。結構たくさんモジュールが入っている。
BeMicro_MAX10_11_141011.png

・Address Map タブ。
BeMicro_MAX10_12_141011.png

・Interconnect Requirements タブ。
BeMicro_MAX10_13_141011.png

・Device Family タブ。
BeMicro_MAX10_14_141011.png

ソフトウェアのコンパイルの仕方を忘れてしまったので、マニュアルを読んでからやってみます。
  1. 2014年10月11日 07:27 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

Vivado 2014.3 が出た(Vivado 2014.2 のプロジェクトをVivado 2014.3 に変換)

Vivado 2014.3 が出たので、今やっているVivado 2014.2 で作製したビットマップ・ディスプレイ・コントローラのプロジェクトを Vivado 2014.3 のプロジェクトに変換した。

IPをアップグレードしたのだが、ビットマップ・ディスプレイ・コントローラIPに入っているFIFO IPまでは、アップグレードしてくれなかった。ロックが掛かっていると言われてしまう。
そこで、bitmap_disp_cntrler_axi_master_0 を右クリックして右クリックメニューから Edit in IP Packager を選択し、IP Packager を起動して、そこからFIFO IP をアップグレードした。
Vivado_2014_3_1_141010.png

論理合成を行うと、トップのファイルでエラーが出た。
Vivado_2014_3_2_141010.png

default_nettype none のエラーということで、どこか default_nettype wire にするの忘れたのか?を思って、もう一度、bitmap_disp_cntrler_axi_master_0 を右クリックして右クリックメニューから Edit in IP Packager を選択し、IP Packager を起動してみてみた。
すると、bitmap_dips_engine.v で、default_nettype wire にするの忘れていた。
Vivado_2014_3_3_141010.png

bitmap_dips_engine.v の最後に、default_nettype wire を追加して、もう一度、カスタムIPをパッケージ化して親のプロジェクトに戻ってもう一度、論理合成 (Run Synthesis) を行った。

やはり、同様に default_nettype none のエラーだった。
次に、Reset Synthesis Run を行ってから、もう一度、Run Synthesis してもエラーだった。

今度は、トップのHDLファイルを消してから、もう一度、生成した。
ブロック・デザインを右クリックして、右クリックメニューから Reset Output Products... を行い、次に、同じ右クリックメニューから Generate Output Products... を行った。
これで、Reset Synthesis Run を行ってから、もう一度、Run Synthesis を行ったら成功した。

IPを変更したら、ブロック・デザインを右クリックして、右クリックメニューから Reset Output Products... を行い、次に、同じ右クリックメニューから Generate Output Products... を行った方が安全のようだ。

Vivado 2014.2 の時はそんなことはなかったというか?カスタムIPの default_nettype none が親に伝搬することはなかったし、カスタムIPを Edit in IP Packager を実行してHDLを変更しても反映されたが、Vivado 2014.3 では、どうなのだろうか? default_nettype none に限ったことなのかどうか?はまだ分からない。

最後に、インプリメントとビットストリーム生成まで終わったところを下に貼っておく。
Vivado_2014_3_4_141010.png
  1. 2014年10月10日 05:13 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

レナ像を使用してOpenCVで顔検出をやってみた(ZYBO Linaro Ubuntu)

ZYBOのLinaro Ubuntu のXウインドウの表示をパソコンで行う(Xmingを使用)”で、OpenCVの画像出力をパソコンのウィンドウとして表示することが出来たので、例によってレナ像を使用してOpenCVで顔検出をやってみた。(参照ブログ記事:”レナ像を使用してOpenCVで顔検出をやってみた”)

まずは、ただ単に画像を表示する良いソフトウェアが無かったので、”Linuxで手軽に画像ファイルを見るには”を参考にさせて頂いて、xli を使うことにした。

sudo apt-get install xli で xli をインストールした。

xli lena.jpg でレナ像を表示した。
ZYBO_OpenCV_26_141009.png

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" lena.jpg で、顔認識を行った。
ZYBO_OpenCV_27_141009.png

成功だ。
  1. 2014年10月09日 20:47 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 FPGA 評価キットが来ました

BeMicro MAX 10 FPGA 評価キット”で注文した BeMicro MAX 10 FPGA 評価キットが昨日届きました。

BeMicro MAX 10 FPGA 評価キットのパッケージです。
BeMicro_MAX10_1_141009.jpg

同梱物。基板とUSBケーブルのみです。
BeMicro_MAX10_3_141009.jpg

基板の拡大写真(表)
BeMicro_MAX10_2_141009.jpg

基板の拡大写真(裏)ジャンパーが1本飛んでました。
BeMicro_MAX10_4_141009.jpg

電源のDCプラグを見たら、そうとう細い。合うDCプラグを持っていない。あればよいのだが?もしかして、USBから給電できるのか?

Getting Start User Guide を見ると、”Power via USB or via user-provided 5V suply”ということで一安心。

BeMicro MAX 10 FPGA 評価キットには、$30で何が載っているかというと?
・ MAX® 10 FPGA (10M08DAF484C8GES) 8000LE, 1ADC- 1MSPS, 12-bit, 18-channels
・Embeded USB-Blaster™
・クロック・オシレータ、24MHz、50MHz
・8MB SDRAM x16
・3軸加速度センサ
・12ビットDAC
・温度センサ
・サーミスタ
・Cdsセンサ
盛りだくさん。とっても$30とは思えない。。。

QuartusII をダウンロードしようとしたら、Alteraのサイトがアップグレード中でダウンロードできなかった。
  1. 2014年10月09日 04:48 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:0

ZYBOのLinaro Ubuntu のXウインドウの表示をパソコンで行う(Xmingを使用)

ZYBOのLinaro Ubuntu のIPアドレスを固定する”でZYBOのLinaro Ubuntu のIPアドレスを固定することができた。これで、SSHで入りやすくなったので、今度は、ZYBOのLinaro Ubuntu のXウインドウをパソコンで表示してみた。

Xming X Server for Windows というツールを使用する。これをパソコンにインストールする。インストールの手順は、”フリーのWindows用Xサーバー「Xming」のインストールと基本設定、使い方”に書いてある。これを参照してインストールを行った。

次に、PuTTY ごった煮版をインストールした。PuTTY 0.60 ごった煮版 2007年8月6日版のインストーラーをダウンロードして、インストールを行った。

Xming の設定と sshd の設定をするために参考にさせて頂いたWebサイトは、”SSH X11 フォワーディングでXmingにリモートのXを転送する”と”Linux上の画面(X11)をWindows上で表示し,操作する”だ。

・Windows のスタート・メニューから Xming -> XLaunch を選択して立ちあげた。

・Display settings で Multiple windows のラジオボタンがデフォルトで選択されているので、そのまま次へ>ボタンをクリックした。
ZYBO_OpenCV_13_141008.png

・Session type で Start no client のラジオボタンがデフォルトで選択されているので、そのまま次へ>ボタンをクリックした。
ZYBO_OpenCV_14_141008.png

・Additional parameters で Clipboard にチェックが入っている。そのまま次へ>ボタンをクリックした。
ZYBO_OpenCV_15_141008.png

・Finish configuration で、完了ボタンをクリックした。
ZYBO_OpenCV_16_141008.png

・すると、タスクトレイに、Xming Server が入っている。
ZYBO_OpenCV_17_141008.png

・ZYBOのLinuxに移動して、root のTera Term で、vim /etc/ssh/sshd_config でファイルを編集する。

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

書いてあれば良いそうだが、上の2つは書かれていたので、X11UseLocalhost yes のみを追加した。
ZYBO_OpenCV_18_141008.png

・Windowsに戻って、 PuTTY を立ちあげた。

・カテゴリの接続 -> SSH -> X11 を選択して、X11 フォワーディングのX11フォワーディングを有効にするにチェックを入れた。
ZYBO_OpenCV_19_141008.png

・カテゴリのウィンドウ -> 変換を選択して、文字コード変換、文字コードの設定を UTF-8 にする。こうしないと漢字が化ける。
ZYBO_OpenCV_20_141008.png

・次は好みだが、ウィンドウ -> 外観を選択して、フォントの設定で、MSゴシック、11-point にした。フォントの大きさが小さすぎるからだ。
ZYBO_OpenCV_21_141008.png

・最後に、セッションを選択して、ホスト名を入れた。ついでにセッションを保存しておいた。

・開くボタンをクリックした。
ZYBO_OpenCV_22_141008.png

・ターミナルが開いたが、ダイアログが出た。はいボタンをクリックした。
ZYBO_OpenCV_23_141008.png

・ターミナルで、ID名(linaro) とパスワード (linaro) を入れて、ログインした。
ZYBO_OpenCV_24_141008.png

・opencv 2.4.6.1 の samples/c ディレクトリに行って、contours を実行した。
ZYBO_OpenCV_25_141008.png

X-Window が開いて、結果が見えている。思惑通りに成功だ。これで、OpenCV の結果も見放題になった。

(2014/10/17:追記)
マルチ・ウインドウでやるとどうしても日本語が入力できない。ZYBOのUbuntuは日本語の入力を考えていないので問題ないが、パソコンにインストールしたUbuntu を使う際には日本語の入力ができたほうが良い。
そこで、Ubuntu パソコンのXDMCPを有効にして、Xming からXDMCP で接続する方法ならば、全画面を持ってくるので、日本語も問題なく使用できる。
設定方法は、“Xサーバでubuntuを使う(XDMCP版)”を参考にして設定を行ったところ、うまく全画面を持ってくることができた。ありがとうございます。

(2014/10/21:追記、Multiple windows の時に、Xウインドウのフォントが小さい時の対処方法)
Xサーバ Xming でフォントが小さい場合”によると、Additional parameters ダイアログの時に、Additional parameters for Xming のテキストボックスに、dpi の指定をすれば良いそうです。(例: -dpi 100 )
-dpi 150 にすると -dpi 100 よりもフォントが大きくなります。
-dpi 75 辺りがデフォルトのフォントの大きさだと思います。
  1. 2014年10月08日 04:48 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZYBOのLinaro Ubuntu のIPアドレスを固定する

ZYBOのLinaro Ubuntu のIPアドレスの取得方法は DHCP で毎回 Tera Termで SSH ログインするときのアドレスが異なる。これを何とかしようとIPアドレスを固定することにした。ZedBoardのIPアドレスが 192.168.3.130 にしてあったので、ZYBO は 192.168.3.131 にすることにした。

IPを固定する方法を調べると、”Linux/UbuntuでIPを自動取得から固定IPに変更する”があったので、参考にさせて頂いた。

・まずは、root のアカウントで、apt-get install resolvconf を実行したが、これはすでにインストールされてあった。

・vim /etc/network/interfaces コマンドで、ファイルを編集した。
ZYBO_OpenCV_9_141007.png

・lo についてはファイルに書かれていたが、eth0 について記述を追加した。最終的なファイルの内容を下に示す。

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.3.131
network 192.168.3.0
netmask 255.255.255.0
broadcast 192.168.3.255
gateway 192.168.3.1
dns-nameservers 192.168.3.1

ZYBO_OpenCV_10_141007.png

reboot コマンドでリブートしてから、ifconfig コマンドを実行すると、固定IPアドレスが振られているのがわかった。
ZYBO_OpenCV_11_141007.png

・Tera Term から SSH で 192.168.3.131 にログインすると成功した。
ZYBO_OpenCV_12_141007.png

これで、ZYBOに 192.168.3.131 の固定IPアドレスを振ることができた。
  1. 2014年10月07日 21:53 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のLinaro Ubuntu にOpenCV-2.4.6.1 をインストール

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する8(ZYBOで動作確認2)”のZYBO用の Linaro Ubuntu にOpenCV 2.4.6.1 をインストールした。

ZedBaord用UbuntuにOpenCV2.4.6.1をインストール”を参考にしながら、インストールを行った。

・最初に、linaro ホーム・ディレクトリの下に、OpenCV_2.4.6.1 ディレクトリを作製して、install_script ファイルを作製した。

・install_script ファイルには、sudo apt-get -yV install build-essential ~ sudo apt-get -yV install libvpx-dev までのコマンドを入れてある。

chmod +x install_script してから、./install_script で実行した。
ZYBO_OpenCV_1_141006.png

ZYBO_OpenCV_2_141006.png

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz を実行したが、ERROR 404: Not Found. になってしまった。
ZYBO_OpenCV_3_141006.png

・探して見たら、これで、大丈夫だった。
wget ftp://ftp.jp.netbsd.org/pub/pkgsrc/distfiles/opencv-2.4.6.1.tar.gz
ZYBO_OpenCV_4_141006.png


tar xvzf opencv-2.4.6.1.tar.gz
cd opencv-2.4.6.1
mkdir build
cd build
cmake ..
make

を実行した。
ZYBO_OpenCV_5_141007.png


sudo make install
sudo ldconfig

を実行した。これで、OpenCV 2.4.6.1 にインストールは終了した。
ZYBO_OpenCV_6_141007.png

・opencv-2.4.6.1/samples/c のディレクトリに行って、sh build_all.sh を実行して、すべてのC言語のサンプルをコンパイルした。

・contours を試したが、やはり、cannot open display でダメだった。
ZYBO_OpenCV_7_141007.png

・root のシリアル接続Tera Termで df コマンドを実行した。/dev/root は、70% 使用されている。
ZYBO_OpenCV_8_141007.png
  1. 2014年10月07日 04:50 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する8(ZYBOで動作確認2)

ZYBO用LinuxカーネルにCMA領域を確保1”の続き。

これで、16MBのCMA領域を確保できたので、もう一度、”ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する7(ZYBOで動作確認)”の./draw_disp_uio コマンドを実行してみることにした。

ディスプレイにキャラクタが表示された。
ZYBO_BMDCwASL_62_141004.jpg

今度は、実行後にSSHのTera Term が落ちることもなく、次のコマンドも実行できた。
ZYBO_BMDCwASL_66_141006.png

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する事ができた。完成だ。嬉しい。。。
  1. 2014年10月06日 04:05 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用LinuxカーネルにCMA領域を確保1

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する7(ZYBOで動作確認)”で、ビットマップ・ディスプレイ・コントローラにキャラクタを書くことができたが、専用のメモリ領域を確保することができなかったので、既存のソフトウェアにOver Write してしまったようで、ether が落ちてしまった。
今回からは、ZYBOのLinuxカーネルに確実にCMA (Continuous Memory Allocator) 領域を確保して、そこにビットマップ・ディスプレイ・コントローラのベースアドレスを置くことにする。

以下のURLの記事を参照させて頂いています。

みみず工房掲示板 kernel 3.8.4 +rt-1 patch - t-ta
256 KiB atomic DMA coherent pool is too small! #170
Linuxでのメモリ確保


・”ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)”で、
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
を行ってから、
make ARCH=arm menuconfig
を行う。メニューが立ち上がる。

・Devices Drivers > Generic Driver Options のDMA Contiguous Memory Allocator の下のMaximum count of the CMA device-private areas を 7 から 16 に変更する。
ZYBO_BMDCwASL_63_141005.png

・Save して Exit する。

・Linuxカーネルをコンパイルする。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
uImageを作る。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
これで、uImage ができた。SDカードの第1パーティションにコピーする。

・/home/masaaki/ZYBO/Digilent_Linux_Tutrial/drivers2 の zynq-zybo.dts の bootargs を以下の様に変更した。

bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 coherent_pool=16M";


../Linux-Digilent-Dev/scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts コマンドで、再度デバイス・ツリーをコンパイルする。

・出来上がった devicetree.dtb をSDカードの第1パーティションにコピーする。

・このSDカードでブートすると、以前のブート・イメージでは

、[ 0.401437] DMA: preallocated 256 KiB pool for atomic coherent allocations

だったのが、

[ 0.429427] DMA: preallocated 16384 KiB pool for atomic coherent allocations

になった。

・topコマンドを実行しても、以前は、
ZYBO_BMDCwASL_61_141004.png
で、used が 68264k だったのが、
ZYBO_BMDCwASL_64_141005.png
84264k に増えていた。よって、16000k 増えていることになる。

これで、16MBのCMA領域の確保はできたと思う。

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する8(ZYBOで動作確認2)”に続く。
  1. 2014年10月05日 09:43 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する7(ZYBOで動作確認)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する6(UIOの設定4)”の続き。

前回まで、UIOのテストを続けてきて、動作の確認ができたので、いよいよ本番のビットマップ・ディスプレイ・コントローラに意味のある文字を表示させて見るテストをする。前々から使ってきたビットマップ・ディスプレイ・コントローラにキャラクタ・ジェネレータROMのキャラクタ・データを表示するテストを行うことにした。このテストはLinux上ではなく、Zynqのスタンドアローン環境で動作するようになっているので、これをLinux に移植した。当然ながら、デバイスへのアクセスアはUIOを使用する。

draw_disp_uio.c を cc -o draw_disp_uio draw_disp_uio.c コマンドでコンパイルして、./draw_disp_uio コマンドで実行するとキャラクタは表示できたのだが、linaro ユーザーで開いていた SSH 接続のTera Termが落ちてしまった。
ZYBO_BMDCwASL_62_141004.jpg

シリアル接続のroot のTera Term には、

[ 166.816932] xemacps e000b000.ps7-ethernet: TX error 0x138

が表示された。ether が落ちてしまったようだ。

そう言えば、起動画面の

[ 0.000000] cma: CMA: reserved 128 MiB at 17800000

を信じてやってきたが、top コマンドの表示の

Mem: 506664k total, 68264k used, 438400k free

は、128MBをCMA領域に割り振られているにしては、Free メモリが多すぎる。
ZYBO_BMDCwASL_61_141004.png

やはり、CMA領域を確保する必要がありそうだ。

draw_disp_uio.c を下に貼っておく。

/* * draw_disp_uio.c * *  Created on: 2014/10/03 *      Author: Masaaki */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

#define VIDEO_BUFFER_START_ADDRESS  0x17800000

#define HORIZONTAL_PIXEL    800
#define ALL_CHAR_OF_1LINE   (HORIZONTAL_PIXEL/8)
#define VERTICAL_PIXEL      600
#define ALL_CHAR_OF_ROW     (VERTICAL_PIXEL/8)
#define ALL_DISP_ADDRESS    (HORIZONTAL_PIXEL*VERTICAL_PIXEL*4)
#define ALL_DISP_CHARACTOR  HORIZONTAL_PIXEL*VERTICAL_PIXEL

// char_draw: Draw the character to receive a character code and address
// addr : Start address at drawing charactor
// char_code : drawing charactor code
// char_color : color of drawing charactor, represented by 32-bit, oRGB (8bits)
// return value :show a drawing start address of the next character
unsigned int *char_draw(unsigned *addr, unsigned *char_rom_axi_lite, unsigned char char_code, unsigned int char_color){
    int i,j;
    unsigned int char_pattern;
    unsigned int char_code_int;
    unsigned int *cal_char_addr;
    unsigned int *return_addr;

    char_code_int = (unsigned int)(char_code);
    return_addr = addr + 8;
    cal_char_addr = (unsigned int *)((unsigned)char_rom_axi_lite+((char_code_int<<3)<<2)); // Data of the character generator ROM is 32 bits wide, valid only 8 bits of the least significant
    for(i=0; i<8; i++){
        char_pattern = *(volatile unsigned int *)(cal_char_addr); // Reads the pattern of the character
        for(j=0; j<8; j++){
            if(char_pattern & 0x1// Drawing a dot when 7th bit is one
                *(volatile unsigned int *)((unsigned int)addr ^ 4) = char_color;
            else
                *(volatile unsigned int *)((unsigned int)addr ^ 4) = 0// drawing black
            addr++;
            char_pattern >>= 1// 1bit shift right
        }
        addr -= 8// Return to the address of the beginning of the line
        addr += HORIZONTAL_PIXEL; // Down one line
        cal_char_addr++;
    }

    return return_addr;
}

int main() {
    unsigned char char_code;
    unsigned *ddr2_addr;
    unsigned int coler_code;
    unsigned int char_cnt;
    int i, j, k;
    int fd0, fd1, fd3;
    volatile unsigned *bmdc_axis_lite;
    volatile unsigned *char_rom_axi_lite;
    volatile unsigned *bmdc_axim;

    // Bitmap Display Controller AXI4 Lite Slave (UIO0)
    fd0 = open("/dev/uio0", O_RDWR); // bitmap_display_controller axi4 lite
    if (fd0 < 1){
        fprintf(stderr, "/dev/uio0 open error\n");
        exit(-1);
    }
    bmdc_axis_lite = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd0, 0);
    if (!bmdc_axis_lite){
        fprintf(stderr, "mmap error\n");
        exit(-1);
    }
    bmdc_axis_lite[0] = VIDEO_BUFFER_START_ADDRESS; // Bitmap Display Controller start
    munmap((void *)bmdc_axis_lite, 0x10000);

    // Charactor Generate ROM UIO1
    fd1 = open("/dev/uio1", O_RDWR); // char_rom_axi4 lite
    if (fd1 < 1){
        fprintf(stderr, "/dev/uio1 open error\n");
        exit(-1);
    }
    char_rom_axi_lite = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
    if (!char_rom_axi_lite){
        fprintf(stderr, "mmap error\n");
        exit(-1);
    }

    // Bitmap Display Controller AXI4 Master UIO3
    fd3 = open("/dev/uio3", O_RDWR); // bitmap_display_controller FB
    if (fd3 < 1){
        fprintf(stderr, "/dev/uio3 open error\n");
        exit(-1);
    }
    bmdc_axim = (volatile unsigned *)mmap(NULL, 0x1000000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
    if (!bmdc_axim){
        fprintf(stderr, "mmap error\n");
        exit(-1);
    }

   // Clean display
    for (k=0; k < ALL_DISP_CHARACTOR; k++){
        bmdc_axim[k] = 0;
    }

    // Charactor output
    ddr2_addr = (unsigned *)bmdc_axim;
    char_cnt = 0;
    for(j=0; j<((ALL_CHAR_OF_1LINE*ALL_CHAR_OF_ROW)/((128-33)*7))+1; j++){
        for(i=1; i<8; i++){
            switch(i){
                case 1 :
                    coler_code = 0xff; // blue
                    break;
                case 2 :
                    coler_code = 0xff00; // Green
                    break;
                case 3 :
                    coler_code = 0xffff; // Cyan
                    break;
                case 4 :
                    coler_code = 0xff0000; // Red
                    break;
                case 5 :
                    coler_code = 0xff00ff; // Magenta
                    break;
                case 6 :
                    coler_code = 0xffff00; // Yellow
                    break;
                case 7 :
                    coler_code = 0xffffff; // Write
                    break;
            }

            for(char_code=0x21; char_code<0x80; char_code++){
                if(char_code >= 0x80// Character code has reached the upper limit, back into the bottom
                    char_code = 0x21;
                if (char_cnt!=0 && char_cnt%ALL_CHAR_OF_1LINE==0)
                    ddr2_addr = (unsigned *)((unsigned int)ddr2_addr + HORIZONTAL_PIXEL*4*7); // Having finished writing a single line, the line below, the address HORIZONTAL_PIXELx1 pixel 4 bytes x7 line
                ddr2_addr = char_draw(ddr2_addr, (unsigned int *)char_rom_axi_lite, char_code, coler_code); // Draw charactor
                char_cnt++;
            }
        }
    }

    munmap((void *)char_rom_axi_lite, 0x10000);
    munmap((void *)bmdc_axim, 0x1000000);

    return 0;
}


ZYBO用LinuxカーネルにCMA領域を確保1”に続く。
  1. 2014年10月04日 11:13 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

BeMicro MAX 10 FPGA 評価キット

BeMicro MAX 10 FPGA 評価キットを昨日購入しました。$30で、とっても安かったのですが、Shipping が Fedex $37.99で、こっちのほうが高かったです。結局、合計、$67.99 でした。Paypal 払いの日本円で ¥7,741 JPY でした。
Estimated Ship Date Oct. 2 ということで、すぐ送ってくれるようです。来るのが楽しみです。
下にオーダーした時の画面を貼っておきます。
BeMicro_MAX10_141002.png
  1. 2014年10月02日 05:41 |
  2. Altera_MAX10
  3. | トラックバック:0
  4. | コメント:2

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する6(UIOの設定4)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する5(UIOの設定3)”の続き。

前回はLEDのテスト処理をUIOを使用してCのソフトウェアとして書いた。
今回は、UIOに実装した、ビットマップ・ディスプレイ・コントローラの設定レジスタ、キャラクタ・ジェネレータROM、ビットマップ・ディスプレイ・コントローラのフレーム・バッファ・メモリ全部をテストするCソフトウェアを作製した。

Cソフトウェアのファイル名は、disp_test.c で、オプションは-d, -a -i -o がある。-o は表示で省力可能だ。省略した時は、Read した値を返す。 ( -d 1 )
-d は、UIOの番号を示す。

0 : ビットマップ・ディスプレイ・コントローラのアドレス設定用AXI4 Lite Slave(これを設定すると画面が表示される)
1 : キャラクタ・ジェネレータ ROM AXI4 Lite Slave (キャラクタのラスタ・データがアドレスを与えると出力される)
2 : LEDの表示する値を設定する
3 : ビットマップ・ディスプレイ・コントローラのフレーム・バッファ(アドレスを与えて、Read/Write


-a には、アドレスを与える。 (-a 0x400 )

-i は入力値で、Write する値を書く。 (-i 0xffffff )

実際に disp_test コマンドを使ってみた例を示す。
ZYBO_BMDCwASL_59_141001.png

./disp_test -d 2 -i 0xf で、led_gpio に 0xf を書いた。LEDが全部点灯した。

./disp_test -d 0 -i 0x17800000 で、ビットマップ・ディスプレイ・コントローラのアドレス設定用AXI4 Lite Slave に 0x17800000 をWrite して、フレーム・バッファのスタート・アドレスを指定した。これにより、ビットマップ・ディスプレイの表示が開始された。

./disp_test -d 1 -a 0x800 で、キャラクタ・ジェネレータ ROM AXI4 Lite Slave を Read して、0x1e が読めた。

./disp_test -d 3 -a 0 -i 0xffffff
 ./disp_test -d 3 -a 4 -i 0xffffff
 ./disp_test -d 3 -a 8 -i 0xffffff
 ./disp_test -d 3 -a 0xc -i 0xffffff
で4ビット分、白いドットをWrite した。ディスプレイに白い線が書かれたの見えた。
ZYBO_BMDCwASL_60_141001.jpg

私がカスタムIPを作って、追加したすべてのデバイスがUIOでアクセスできているようだ。

最後に、disp_test.c を貼っていおく。(サブルーチン化してなくて、ちょっと恥ずかしいけど。。。)

/* * dips_test.c * *  Created on: 2014/09/28 *      Author: Masaaki */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

int main(int argc, char *argv[]) {
    int c;
    int in_val=0;
    int index=0;
    int inout=1;
    int fd0, fd1, fd2, fd3;
    int device;
    volatile unsigned *bmdc_axis_lite;
    volatile unsigned *char_rom_axi_lite;
    volatile unsigned *led_gpio;
    volatile unsigned *bmdc_axim;

    while ((c = getopt(argc, argv, "d:a:i:o")) != -1){
        switch(c){
            case 'd' :
                device = (int)strtol(optarg, 00);
                break;
            case 'a' :
                index = ((int)strtol(optarg, 00))/sizeof(int);
                break;
            case 'i' :
                in_val = (int)strtol(optarg, 00);
                inout = 0;
                break;
            case 'o' :
            default :
                inout = 1;
        }
    }

    switch(device){
        case 0 :
            fd0 = open("/dev/uio0", O_RDWR); // bitmap_display_controller axi4 lite
            if (fd0 < 1){
                fprintf(stderr, "/dev/uio0 open error\n");
                exit(-1);
            }
            bmdc_axis_lite = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd0, 0);
            if (!bmdc_axis_lite){
                fprintf(stderr, "mmap error\n");
                exit(-1);
            }
            break;
        case 1 :
            fd1 = open("/dev/uio1", O_RDWR); // char_rom_axi4 lite
            if (fd1 < 1){
                fprintf(stderr, "/dev/uio1 open error\n");
                exit(-1);
            }
            char_rom_axi_lite = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
            if (!char_rom_axi_lite){
                fprintf(stderr, "mmap error\n");
                exit(-1);
            }
            break;
        case 2 :
            fd2 = open("/dev/uio2", O_RDWR);
            if (fd2 < 1){
                fprintf(stderr, "/dev/uio2 open error\n");
                exit(-1);
            }
            led_gpio = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
            if (!led_gpio){
                fprintf(stderr, "mmap error\n");
                exit(-1);
            }
            break;
        default :
            fd3 = open("/dev/uio3", O_RDWR); // bitmap_display_controller FB
            if (fd3 < 1){
                fprintf(stderr, "/dev/uio3 open error\n");
                exit(-1);
            }
            bmdc_axim = (volatile unsigned *)mmap(NULL, 0x10000000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
            if (!bmdc_axim){
                fprintf(stderr, "mmap error\n");
                exit(-1);
            }
    }

    if (inout == 0){
        switch(device){
            case 0 :
                bmdc_axis_lite[0] = in_val;
                break;
            case 2 :
                led_gpio[1] = 0xf// Channel1 AXI GPIO 3-state Control Register (output mode)
                led_gpio[0] = in_val;
                break;
            default :
                bmdc_axim[index] = in_val;
        }
    } else {
        switch(device){
            case 0 :
                printf("bmdc_axis_lite = %x\n", bmdc_axis_lite[0]);
                break;
            case 1 :
                printf("char_rom_axi_lite[%x] = %x\n", index, char_rom_axi_lite[index]);
                break;
            case 2 :
                printf("led_gpio = %x\n", led_gpio[0]);
                printf("led_gpio_tri = %x\n", led_gpio[1]);
                break;
            default :
                printf("bmdc_axim[%x] = %x\n", index, bmdc_axim[index]);
        }
    }

    switch(device){
        case 0 :
            munmap((void *)bmdc_axis_lite, 0x10000);
            break;
        case 1 :
            munmap((void *)char_rom_axi_lite, 0x10000);
            break;
        case 2 :
            munmap((void *)led_gpio, 0x10000);
            break;
        default :
            munmap((void *)bmdc_axim, 0x10000000);
    }
    return 0;
}


  1. 2014年10月01日 06:34 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0