雑多な趣味の記録帳

tom01h.exblog.jp

<   2018年 11月 ( 21 )   > この月の画像一覧

Ultra96 でシリアル端末を使いたい

まずは interface 1月号の第2章の前半、My 回路無しで Petalinux を作るところから試しています。
延々ファイルのダウンロードをさせられたり、挙句ディスクフルになったりで、なかなか遊び始められません。
ZynqMP は悪い意味で素人のおもちゃじゃないんだなぁと実感しました。
いつか、良い意味で素人のおもちゃじゃないって実感できることを期待しつつ…

とりあえず、ダウンロードした BSP をリビルドしただけですが…
動かない…
まぁなんだ、シリアル端末がないと不便です。

components/plnx_workspace/device-tree/device-tree/system-top.dts には次のように書いてあります。
chosen {
bootargs = "earlycon clk_ignore_unused";
stdout-path = "serial0:115200n8";
};
aliases {
i2c0 = &i2c1;
serial0 = &uart1;
serial1 = &uart0;
serial2 = &axi_uart16550_0;
spi0 = &spi0;
spi1 = &spi1;
};

J6 (2mm ピッチの3ピン端子) の ps utart1 がシリアル端末かな?いや、違いますね。
ブロックデザインを見ると uart1 は EMIO で低速ヘッダの UART1 に出ています。
このブロックデザインは 96Boards Sensors をつなぐ前提のようです。
他にも、GPIO-G,H,I,J,K,L が EMIO 経由で PSGPIO につながっているようです。

じつは、96Boards UARTアダプタ なるものも事前に入手してあるので繋いでみます。
f0054075_20164435.jpg
ブートメッセージ出た。

PMUFW: v1.0

U-Boot 2018.01 (Nov 30 2018 - 03:38:36 +0900) Xilinx ZynqMP ZCU100 RevC


[ 4.628007] Memory Limit: none
[ 4.705514] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.

SD カードを作りぬかっていただけでした。
SD カードに書き直して、ダウンロードした BSP をリビルドするだけは無事終了!!

他調べてみたいこと。

とりあえず BT 見つからないんだけど、uart0 を選ぶと自動で動きだしたりするの?
[追記 青 LED は BT が動いている合図らしい。見えないのは PC 側の問題かな?]

低速ヘッダに 3.3V IO 出すこと出来るの?
Vivado から端子電圧 3.3V 選べるけど、どう見ても ZynqMP に 3.3V 電源入ってないんですよね。

[PR]
by tom01h | 2018-11-30 22:08 | Trackback | Comments(0)

Ultra96 ダウンロード中…

まずは interface 1月号の第2章の前半、My 回路無しで Petalinux を作るところから試しています。
巨大ファイルで大変でしたが、xilinx-ultra96-reva-v2018.2-final.bsp をダウンロードしました。
petalinux-build を始めると、まだ何やらダウンロードしています。
たぶん、すでに 1GB 超えた…

vivado も巨大だし、petalinux ツールも巨大だし、BSP も巨大だし…
ネット回線が細いと FPGA の開発は難しいようです(ioi)

[翌朝追記 ディスクフルでこけてました。petalinux 専用に仮想マシンの Ubuntu を入れているのですが、ディスクは 64GB もあれば十分だろうと思ったのが甘かったみたいです。簡単に増やせるのかな?]

[PR]
by tom01h | 2018-11-29 21:55 | Trackback | Comments(0)

Ultra96 ボード買った

Ultra96 が届きました。まだ出荷連絡のメール来てないのに…
急なので何やるか考えてない…
てか、まずは BSP をダウンロードしなきゃいけないのか。大きいなぁ。
[追記 ネットワークの設定は ここ を参考にするのかな?]
f0054075_13344038.jpg

[PR]
by tom01h | 2018-11-28 22:48 | Trackback | Comments(0)

Petalinux で rootfs を SD カードに変更する

tiny-dnn アクセラレータも一応動くようになったし、だましだまし使ってきたところを何とかしたいと思います。
まずは、Petalinux の rootfs を SD カードに変更します。
また、クロスコンパイラを Xilinx SDK の物に変更して、スタティックリンクが必要だった libstdc++ も rootfs に取り込みます。

基本的にはいままでいろいろと参考にさせてもらっている ここ の通りに実行します。
ただ、Ubuntu の Disks (gnome-disk-utility) はバグがあるらしくてちゃんと動かなかったので、gparted で SD カードの準備をしました。
あと、すでに自分で編集している場合は project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi の変更 (root=/dev/mmcblk0p2 rw rootwait を追加) も必要でした。
また、なぜか dd が途中でこけるので bs=1M conv=noerror を追加しています。

コンパイラは Xilinx SDK の中にある gnu/aarch32/nt/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-g++.exe を使うように変更しました。
-mfloat-abi=hard に変更する必要があるようです。

うだうだ書いてますが、github の方がまだわかりやすいかも…

[PR]
by tom01h | 2018-11-27 22:52 | Trackback | Comments(0)

Interface 1月号

今回の Interface も、やりたいことそのものずばりな内容なので買ってみました。
しかも Ultra96 特集の内容も結構しっかりしている印象。
どいつもこいつも HLS なのはちょっとあれですが…
これ見た感じだと、買って途方に暮れることも避けられそうなので、Ultra96 ボードも注文しました。
もともとは、第2部の AI コンパイラ的なものに興味あって買ったのですが、読む時間取れるか心配になってきました。
f0054075_19341333.jpg

[PR]
by tom01h | 2018-11-26 00:00 | 本・映画など | Trackback | Comments(0)

伊豆が岳

運動不足を痛感したので、先週に引き続いて今週は伊豆が岳へ。
こちらも紅葉がきれいでした。
岩場は心の余裕がなくなっているので写真はなしです。慣れですかね?
f0054075_18580860.jpgf0054075_18580887.jpg
そして一気に子の権現へ (いや、実際は大変なんだけど…)。
こちらも紅葉綺麗。そして仁王?の色が塗りなおされていました。
f0054075_19010285.jpgf0054075_19010266.jpg
今日は、先週ほど疲れませんでした。寒いくらいの気温だったから?体が慣れたから?
そして、有名らしいうどん屋に寄っていきました。なんか、すごくぎっしり詰まっている感じでした。
f0054075_19034807.jpgf0054075_19035171.jpg

[PR]
by tom01h | 2018-11-25 19:05 | 山歩き | Trackback | Comments(0)

tiny-dnn アクセラレータをウェイトの傾き計算に対応する2

DMA 版 tiny-dnn アクセラレータはウェイトの傾き計算に対応していませんでした。
まだまだ高速化の余地は残っていますが、細かい調整の前にすべての重たい計算の高速化を完了したいと思います。

今回の変更は、あまり苦労せずにできました。これで一旦完成と言って良いでしょう。Github を更新しました。
ただ今回は、今までと比べて高速化の度合いが少ないです。
理由は、順方向の特徴量の伝搬、逆方向の特徴量の傾きの伝搬とも、ミニバッチの間はパラメタは固定です。
ミニバッチの最初にパラメタを読み込んで、あとはサンプルごとに入力を入れて結果を出力しています。
しかし、パラメタの傾きの計算では、すべてのデータをサンプルごとに入出力する必要があります。
そんなわけで、データ転送に時間を取られていると想像しています。
f0054075_13592437.png
それでもこのくらいは高速になりました。
ぎりぎり 1分切って、ほぼ 4倍高速です(今更ですが単位はミリ秒です)。

他にやり残していることは…

- ちゃんと DMA に対応した Petalinux を作る
- AXI-Stream マスタは最後の転送で LAST を出す
- 転送と演算と並列実行する
-- ユーザ空間 ⇔ DMA バッファ間の転送
-- DMA バッファ ⇔ IP 内バッファの転送
-- 演算コア → IP 内バッファの転送
- ZynqMP で IOMMU(SMMU) を使ってみる (持ってないけど…)

[PR]
by tom01h | 2018-11-24 14:56 | Trackback | Comments(0)

tiny-dnn アクセラレータをウェイトの傾き計算に対応する1

DMA 版 tiny-dnn アクセラレータはウェイトの傾き計算に対応していませんでした。
まだまだ高速化の余地は残っていますが、細かい調整の前にすべての重たい計算の高速化を完了したいと思います。

今回も C言語レベルで計算順を入れ替えて、ハードウェアの変更の少ない方法を探ります。
まぁ、変更は少なくて済んだのですが、パラメタメモリ量を増やさなくてはいけなくなりました。
この課題に対応するだけならリソース余っているので問題ないですけどね。
もっと大きな課題を対象とするときには、リソースの配分をしっかり考えないといけなくなるのかなぁ?
[追記 BRAM使用量増えない… よく考えたら、BRAMにしては小さすぎたのか…]

ちなみに、ΔW はサンプルごとに値を保存する必要があるみたいです。
データ転送量が増えそうなので、ここは今までのような高速化は期待できないかもしれませんねぇ。

[PR]
by tom01h | 2018-11-23 23:59 | Trackback | Comments(0)

LCD シールドコントローラ作成3

Arduino 用の LCD シールド が CORA にちょうど良い大きさなので活用したいと思っています。
しかし、GPIO を使うととっても遅いので、フレームバッファから読みだしたデータを LCD に転送する IP を作りました。
これまではソフトウェアがうまいこと使うと動くっていうレベルでそこは直したいのですが、縦長画面なのも気になっています。

LCD コントローラチップのスペック があったので確認してみます。
MADCTL(36h) のビット5で縦横交換できました。

そして、フレームバッファからのデータを転送中は レジスタに書き込み出来なくして、
転送終了後に CS を落とす処理を追加しました。

これで一旦完成かなぁ。Github に置いておきました。使い方はサンプルプログラム (ex5_2.c) を参考にしてください。

[PR]
by tom01h | 2018-11-19 23:34 | Trackback | Comments(0)

LCD シールドコントローラ作成2

Arduino 用の LCD シールド が CORA にちょうど良い大きさなので活用したいと思っています。
しかし、GPIO を使うととっても遅いので、フレームバッファから読みだしたデータを LCD に転送する IP を作りました。
初期化など、スピードの必要ない制御用には GPIO の機能を残しています。

こんな感じ
f0054075_22060707.png

BusControl は frame_req を受けると 1フレーム分のデータを AXI マスタから読みだす。
1回のリクエストは 32bit×20バースト。
ただし、fifo_full 期間中は休む。

Fifo は AXI マスタからの読み出しデータを積む。
1バースト分の空きがなくなると、fifo_full をあげる。
fifo にデータがある間は fifo_valid をあげる。
fifo_req で次の 1データを読み出す。

Reg は fifo_valid があがると 40サイクルかけて 8bit のデータを 4回(=32bit)出力する。
データを出力し終わると fifo_req をあげる。

Reg には GPIO 機能もあるので、細かい制御には GPIO を使う。

とりあえずは動くようになったのですが、描画中に GPIO 機能を触れないようにバスを待たせる機能を追加したいと思います。

[PR]
by tom01h | 2018-11-18 23:22 | Trackback | Comments(0)