雑多な趣味の記録帳

tom01h.exblog.jp

<   2018年 05月 ( 19 )   > この月の画像一覧

vivado でバイト制御付きの RAM を推論する

ada さんに教えてもらった このページ を参考に、バイト制御付きの RAM の記述を見直そうと思います。記述自体を真似するのではなく、テンプレートが参考になるというところを…
まずは、Source の中から適当に選んで Verilog ファイルを開きます。
f0054075_22331695.png
そして電球マークをクリックして Language Templates を開いて、Verilog/Synthesis Constructs/Example Modules/… を選ぶとサンプルが表示されます。先のページの例と比べると、だいぶ洗練された感がありますね。ごく普通の Verilog 記述に見えます。
これを参考に書いた Verilog が、このファイル の下のモジュールになります。ついでにイネーブルも入れたら遅くなりました。
f0054075_22361142.png
今まではいい方法が分からなかったので、バイト幅の RAM を横に並べていました。
当然のとこながら、初期化データもバイトサイズに分割するという面倒な目に合っていましたが、今後は面倒から開放されそうです。そうはいっても、エンディアン変換は必要なのですが…

[PR]
by tom01h | 2018-05-30 23:21 | Trackback | Comments(0)

micro:bit でオペアンプの実験をしたい3

今日は非反転増幅回路の実験をしてみます。バイアスなしの増幅回路と、バイアスありの増幅回路です。
f0054075_22593349.png
R1=R2 として、2倍の増幅にしています。昨日と同じ計測をすると結果はこんな感じになりました。
f0054075_23010325.png
オフセットを付けると 0V 側も使えなくなりました。どうしてこうなるのかは理解できません。
f0054075_23051936.jpg
こうなると、フルスイングのオペアンプが欲しくなりますねぇ。ただ、何が目的でこんなこと始めたのか良く分からなくなってきていますが…

[PR]
by tom01h | 2018-05-29 22:54 | Trackback | Comments(0)

micro:bit でオペアンプの実験をしたい2

micro:bit のアナログ出力と思っていた端子が PWM 出力だったので、ローパスフィルタとつないでアナログ電圧に変換したいと思います。
f0054075_21020166.png
図の左がローパスフィルタ単独で、右はローパスフィルタ出力に電圧フォロワを追加した回路です。ここのページ で確かめてみると、ローパスフィルタの特性はこんな感じになっているはずです。PWM を 1kHz にして Duty 50% の場合です。4~50ms も待てば、電圧は到達しますかね。
f0054075_21040332.png
先の2つ回路を組んで、P0 に PWM 出力を接続して 45ms 後の P1 の電圧を測ってみました。P0 には 0 から 1020 まで、20 刻みの値を設定して計測を繰り返します。グラフにするとこんな感じになりました。0V 側は出るんですね。VDD 側は 60% くらいで止まっちゃっています。1.3V くらいロスするのかな?充電池で駆動すると 2.4V くらいしか出ないはずなので、半分も使えない感じですかねぇ。
f0054075_21394805.png
こんな感じで実験しています。
f0054075_21424434.jpg

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

ワイヤストリッパ

今更ですが、ワイヤストリッパを買いました。これ凄く便利ですねぇ。もっと早く買えばよかった。
で、やはり今更知ったのが、太さを表す単位が AWG とやら言うのがあるってこと。
しかも、数字が大きいほど細いらしいです。
で、今まで使っていたのを調べてると、最近買った太くて使いにくいやつ(PMOD HDMI とかに使っているやつ)が AWG 24 だそうです。
そして、micro:bit と SD カードをつないでいたのが AWG 30 で、その時に使った電源ケーブルが AWG 26 の様でした。
そこら辺から考えると次買うべきは AWG 28 のような気がしています。
f0054075_22482458.jpg

[PR]
by tom01h | 2018-05-24 22:54 | Trackback | Comments(0)

CUDA9.2+CuPy4

特に必要があった訳ではないのですが、CUDAとCuPyを新しくしました。
CUDAは普通にアップデートしただけです。
CuPyは古いバージョンを削除してから新しいのを入れようと思ったのですが、うまくCUDAを見つけてくれなくてインストール出来ません。結局Anacondaを削除して、最新のを再インストールしてからCuPyをインストールすることでうまく出来ました。
で、最近は使っていなかったのでよく覚えていないのですが、自作のBNNでは4~50%くらいのGPU使用率だったのが、CUDAのおかげかCuPyのおかげかは分かりませんが、GPU使用率が8~90%になりました。多分、処理速度も2倍近くになっていると思います。前のことはあまり覚えていませんが…

[PR]
by tom01h | 2018-05-22 22:59 | PCとか | Trackback | Comments(0)

台湾に来ております

f0054075_23584221.jpgf0054075_23580167.jpg
[PR]
by tom01h | 2018-05-21 23:56 | Trackback | Comments(0)

FPGA の zero-riscy の BNN アクセラレータをメモリマップ型に更新

BNN アクセラレータのメモリマップ型でスクラッチパッド RAM 統合型が完成したので、FPGA に載せて見たいと思います。
統合前は、ソフトウェア推論には大量のデータメモリが必要で、アクセラレータ付きの時は大きなアクセラレータ内蔵メモリが必要でした。どちらにも対応できるデザインは使用メモリが大きすぎたので ARTY A7 には乗りません でした。
今回の変更で、ソフトウェアが自由にメモリの使用量を分割できるようになったので、メモリの小さな(と言っても 220KB あるけど) ARTY A7 にも載せる事が出来ます。
f0054075_13312677.png
がしかし… 結構大変でした。
結局はデザインのバグだった(FPGA用にメモリのRTLだけは別に作っているので…)のですが、Vivado のバージョンアップを疑ってみたり、自作の IP に readmemh で初期化するメモリがあってそこではまったりといろいろ時間がかかりました。
後者(readmemh)の問題は、下みたいなファイルをインクルードする方法に変えました。ところで、バイト制御付きの RAM を推論する方法ってないんですかね?
reg [7:0] ram [0:8*1024-1] = {
8'h17,
8'h00};
しかし、Vivado ってやっぱりなんか使いにくいです。
mbed (yotta だけど) とか使ってみた後だと余計にそう感じます。
ちなみに、ARTY Z7 なら余裕です。
f0054075_21234408.png
github 更新しました。

[PR]
by tom01h | 2018-05-20 22:10 | PCとか | Trackback | Comments(2)

キャンプ用のいす

クレジットカードのポイントが有効期限を過ぎますってメールが来たので交換してもらいました。
f0054075_15134954.jpg

[PR]
by tom01h | 2018-05-19 16:12 | Trackback | Comments(0)

メモリマップ BNN アクセラレータを小型化する

BNN アクセラレータはかなり高速なのですが、それにデータをくべる CPU が鈍足なので性能を生かしきれいていません。
回路の量はさほど気にはしていないのですが、メモリアクセス幅が 1024bit っていうのは、無駄遣いするのはちょっとなぁと思います。そんなわけで、アクセラレータを時分割動作に変更しようと思います。
具体的には、現状 32bit 幅の回路を 32個インスタンスしていますが、これを 8個に減らして 4サイクル繰り返し動作にします。メモリアクセス幅は 256bit になります。実際は、8サイクル動作(128bit)にしても大した性能低下はないと思っているのですが、将来 CPU が高速化することを夢見て…
f0054075_16510081.png
上が 32bit 分のアクティベーションを作る波形です。上から、クロック、BNNのリクエスト、データRAMアクセスリクエスト、ユニットビジーの負論理、BNN動作中、の信号です。まだスカスカです。
左から、最初に1個が BNN 初期化、3+3+4 の波が 9画素分の畳み込みとプーリング、それを4回繰り返した後にノーマライズとアクティベーションのちょっと長めの波が来ます。
この変更で、今までウェイト制御を気にせずに済ませていたメモリアクセス論理(ペリフェラルだけは気にしていたけど)にウェイト制御を追加しました。
セットアップも含めた1枚の画像を推論するプログラムの実行時間が 1637165 サイクルから 1639325 サイクルになりました。
ちなみに自由度は減りますが、カーネルサイズ3x3固定、入力チャンネル数32bitに固定したらこれくらいにはなります。
f0054075_17263859.png

[PR]
by tom01h | 2018-05-18 22:20 | PCとか | Trackback | Comments(0)

micro:bit でオペアンプの実験をしたい

micro:bit の setAnalogValue と getAnalogValue を使ってオペアンプの実験をしたいと思い、いろいろと買い集めてみました。
f0054075_19480836.jpg
まずはオペアンプを使う前に、アナログ出力とアナログ入力を直結して実験します。
が、いきなり思ったように動きません。アナログ出力って PWM で出力できるっていうだけで、電圧がアナログになるんじゃないんですね。
ローパスフィルターなるものでアナログ電圧に変換できるのかな?
CRローパスフィルタPWM計算ツール っていう便利なページで計算できるようです。
とりあえず、setAnalogPeriod とか使って PWM の周期を短くしないといけなそうですね。
それと、コンデンサ買うか…

[PR]
by tom01h | 2018-05-17 22:56 | Trackback | Comments(0)