雑多な趣味の記録帳

tom01h.exblog.jp

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)

棒の峰

久々の山歩きに行きました。
御嶽から棒の峰(山頂はいかないけど)を通って白谷沢へ。
御嶽駅はすごい人だかりでした。高水三山方面に行く人はほとんどいませんでしたが。
f0054075_19023796.jpgf0054075_19034355.jpg
白谷沢はいつ行ってもきれいですが、行くたびに崩壊が進んでいるような気がします。
今回は左のやつのせいで通行止めでしたが、登ってきた人の大丈夫って言葉を信じて行っちゃいました。
ここはどうってことないんだけど、結構前から崩れたままの核心部分がますますやばい感じでした。
f0054075_19072101.jpgf0054075_19085203.jpg
下山すると紅葉がきれいでした。温泉入って帰りましたが、温泉もかなり混んでました。
f0054075_19101315.jpgf0054075_19101809.jpg

[PR]
# by tom01h | 2018-11-17 19:31 | 山歩き | Trackback | Comments(0)

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

Arduino 用の LCD シールド が CORA にちょうど良い大きさなので活用したいと思っています。
しかし、GPIO を使って 1ドットずつ書いていくのは、特に Linux には向いていないらしくて、なんだかとっても遅いです。
計ったわけではないですが、1/10秒以上はかかっている感じです。
そんなわけで、フレームバッファから読みだしたデータを LCD に転送する IP を作ってみたいと思います。

まずは LCD への出力側。
フレームバッファからデータを取ってくるとことは後回しにして、固定パタンの描画を試してみます。
100MHz で 10サイクル毎に 1バイトの転送をしてみましたが、シールドはちゃんとついてきているようです。
つまり、10MBytes/s の転送速度で、2Bytes/pixel なので 5Mpixel/s、1フレーム=320*240pixel 書くのに約 1/65秒かかる計算です。
f0054075_22373891.jpg
次はフレームバッファからの入力側。
AXI DMA はとっても大きいようなので、自前で FIFO 付き DMA 的なものを作成中…
現状はタッチパネルを使うつもりはありません。

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

tiny-dnn アクセラレータを逆方向傾き伝搬に対応する2

アドレス生成部分にいまいち納得のいかない記述が残っていますが、とりあえず FPGA 上でも動きました。
100秒切りを期待していたのですが、あとちょっとで届きませんでした。
f0054075_23561733.png
なんか微妙に認識精度が下がっていくのが気になりますねぇ。
0.1~2%程度の話なんですが…
まぁ、でもシミュレーション時(学習データが3008の時)とは同じみたいです。
ちなみに学習データが 3008 だと、傾きの逆伝搬アクセラレータ化で認識率は微増します。
学習データが 20000 だと、認識率が 97.17% から 97.01% に低下しました。
バグなのかどうかが分からないのが、ニューラルネットの難しいところです。

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

tiny-dnn アクセラレータを逆方向傾き伝搬に対応する1

これまでは、DMA 版 tiny-dnn アクセラレータは順方向伝搬にしか対応していませんでした。
まだまだ高速化の余地は残っていますが、細かい調整の前に逆方向も高速化したいと思います。
今まで乗っけてきたグラフでは、逆方向はオレンジ色で 1番たくさんの時間がかかっています。
でも実はこの部分は大きく 2つの処理に分割でき、多分ほぼ 2等分だと思っています(計っていませんが…)。
それぞれの処理は、特徴量の傾きの逆方向伝搬とウェイトの傾きの計算です。
結局のところ畳み込みの計算時間は、大雑把に順方向を含めて 3等分だと思っています(計っていませんが…)。

今回は特徴量の傾きの逆方向伝搬に対応したいと思います。
まずは C言語のレベルで計算順序の入れ替えをしました。
この段階で、ハードウェアの変更が少なくて済む方法を探ります。
もしも細かいことを知りたいと思う方がいるなら、 sim_lv1 ブランチのコミットを追いかけてみると理解できるかも…
結構派手に変更していますが、順番を変えただけです。多分…
ここでストライド 1以外が対応不能になりました。(まぁ、順方向も対応していなかったけど、この変更で決定的に難しくなりました。)

そして RTL を書き始めましたが、アドレス生成部分が想像以上に難しいですねぇ。
C 言語レベルでかなり改造しておいたはずなのに…

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