2023年6月18日日曜日
iCE40LMボードで遊ぶ 2
2023年6月3日土曜日
iCE40LMボードで遊ぶ
2023年5月21日日曜日
ZynqBerryで遊ぶ 2
ReferenceDesignからタイミングエラーが起きている部分(カメラ入力とAudio)を削除してHDMI出力部のみにしてみた。
これでimplementしてxsaファイルを生成・exportし、それ用のpetalinuxをビルドして実機で動かしてみた。そしたら起動はしたものの暫く放置して再起動したら起動しなくなってしまった。仕方なくprebuildのバイナリに変えて再起動してみたのだが起動しない。 念の為、ビルドしたバイナリをqemuで起動するとちゃんと起動した。
zyncBerryはSDカードから直接ブート出来ないので、最初QSPI内のU-BOOTが立ち上がり、そこからSDカードのバイナリを読み込む仕様になっているのだが、QSPIが壊れたかあるいは何処かハードが故障してしまったっぽい。VivadoのHARDWARE MANAGERで見るとデバイスの認識はされてるのだが。。。
仕方がないので、VitisでStandaloneのHellow Worldアプリを作成しZynqにダウンロードして動かしてみたら以下のようなエラーが出てしまった。
ということで、どうやらZyncが故障してしまったようだ。 が〜〜んである。 orz
これまで幾つもFPGAの評価ボードを触ってきたが、こんな故障に遭遇したのは初めてだ。 このボードはハズレのボードなのかも知れない。
しゃーない。別のボードで遊ぶか。 しかし、何で故障した?
2023年5月5日金曜日
ZynqBerryで遊ぶ
ZynqBerryで遊んでみることにした。
ZynqBerry (TE0726)はTrenz electronic社が販売しているFPGAボードで、Raspberry Pi Model 2と互換製があるそうだが、本物のRaspberry Piを所有していないのでどの程度互換性があるのかは分からない。 このボードは2019年の12月にDigi-Keyで購入したのだが、忙しくて殆ど動かさずにいた。
搭載しているFPGAはZynq 7010、DRAMは512MByte DDR3L SDRAM、 Configuration 用 Flash memoryは16MByte、 I/Fは type-AのUSBが4、 10M/100M Ethernetが1、 μSDカードI/Fが1、JTAGとUSB-UART用にtype-BのUSB I/Fを1つ持っている。 EthernetはZYNQのGEMではなくSMSCのLAN9514というLSIを使っている。 LAN9514は4ポートのUSB 2.0 hubとしての機能と10/100Mbit Etnernetの機能を搭載しているLSIでZynqとはUSB 2.0で接続されている。
(TRM-TE0726-02より引用)この他にHDMI I/F、CSI(Camera Serial I/F)-2、 DSI (Display Serial I/F)用のコネクタ、Line-out用Audio ouputがZynqのPL部につながっているがPL部なので別の用途に使うことも可能だろう。
|
![]() |
![]() |
![]() |
|
![]() |
2023年5月2日火曜日
ブログ再開
遂に定年を迎えた。
定める年と書いて定年。 定める年・・・定年・・・ よく判らんが、人生において一つの大きなマイルストーンではある。 まぁしかし、普通の会社員として生きるのは非常にキツかった。この生き方は自分の性格に合ってないと思った。が、ここまで何とかやってこれたのはやはり妻のお陰だと思う。彼女の叱咤激励、時には足かせとなってくれたお陰で8回目の転職をしないで済んだ。妻には感謝しか無い。 幸いなことに定年後も今の勤務先で再雇用され、あと数年はFPGAを使った開発業務に従事できそうだ。
マイルストーンを超えたので、ぼちぼちブログを再開しようかと考えている。 ブログを休止してから約6年、その間に世の中も大分変わってしまった。 ALTERAはIntelになり、XilinxはAMDになった。LatticeはまだLatticeのままだが。 FPGAの基本特許切れによりGOWINを始めとする新興のFPGAメーカーも色々と出てきているようだ。 ブログ休止中も仕事ではFPGAを使った開発業務はやっていたのだが、デバイスに偏りがあるし twitterでFPGA関連のツイートを追うのをいつしか止めてしまったので現在なにが話題なのか分からない。 6年前は高位合成がトレンドだったと思うが今どうなんだろう。
Verilog-HDL等のハードウェア記述言語よりも抽象度の高いC言語でFPGAの開発ができることが高位合成の利点な訳だが、 ChatGPTの登場により、今や、自然言語でFPGAの設計ができそうな時代が到来してしまった。 私も試しにChatGPTに浮動小数点加算器の生成を依頼してみた。最初に出てきたのは仮数部のみを加算するコードだったが、「この部分を考慮してやり直して」と考慮不足な部分の改善指示を何回かやり取りしたらイメージ通りの実用性のあるコードが生成された。 もう一つバイナリをBCDに変換するBIN2BCD回路の生成も依頼してみたが、こっちは最初に提示されたコードがイメージと大きくかけ離れていて使えないコードだったので1回目で諦めた。 ChatGPTの有料版はさらに精度が高いという話だし今後も進化して行くのだろうから、これはもう究極のCASEツールになるのだろう。
ChatGPTとはFPGA以外の話もしてみた。
「夫の頭が剥げている。笑いそうになるけどどうしたらいい?って妻が聞いているけどどう思う?」
って聞いてみたら、
「夫の頭が剃られているか、薄くなっているかは、その人の自然な外観であり、人々が異なる外観を持つことが普通です。もし夫が自分の外観に不安を感じているなら、彼の気持ちを尊重し、彼が自分自身を快適に感じられる方法を見つけるように支援することが大切です。
もし、夫が自分の頭髪に対して冗談を言っているのであれば、妻もそれに合わせて楽しんでいいでしょう。しかし、もし妻が自分の夫を見下すような態度をとるのであれば、それは不適切であり、夫を傷つける可能性があります。
最も重要なことは、お互いを尊重し、自然な外観や個性を受け入れることです。」
と返してきた。
たまたまこの日は私の誕生日だったので次に
「今日は僕の誕生なんだ。」
と入れてみた。そしたら、
「お誕生日おめでとうございます!素晴らしい1年を迎えられますように。 お誕生日は、新しい年を始める良い機会です。過去の成功や失敗を振り返り、新たな目標を設定することができます。自分自身に対する思いやりと共に、家族や友人との時間を楽しむことができる日でもあります。 この特別な日を過ごす際には、自分自身へのご褒美や大切な人たちとの時間を過ごすことをお勧めします。また、今年の目標を設定し、その目標を達成するために何かしらのアクションを起こすことも素晴らしいアイデアです。 再度、お誕生日おめでとうございます!良い1年になることを願っています。」
と返してきた。 惚れそうになった。
ChatGPTを使うことの懸念の一つにChatGPTにマインドコントロールされる可能性が上がっているが、何か判る気がする。 でも、ChatGPTの返しは言葉が優しく誠実なので 老人福祉ではかなり使えるんじゃないだろうか。会話を通して癒やされる人も居るだろうし。そのための会話なら話している内容の正誤は大して重要ではないかも知れないし。
妻はChatGPTが気に入り、(間違った回答をすることがあると理解した上で)調べ物とかで使っているようだ。最近では「チーちゃん」と呼び出した。
という訳で、ブログをぼちぼちと再開しようと考えている。休止中にもFPGAのボードを何種類かは購入した。買っただけで殆ど動かしていないのだが。 再雇用になると賃金は大幅にダウンするので、これからは新しいボードを安易には購入できない。今あるこれらのボードを使ってなにかやってみようと考えている。 どういう頻度になるかも継続できるかも分からないがマイペースでノンビリとやって行こうかなと考えている。
2020年3月23日月曜日
ホームページのアクセス数
ブログを休止した2019年10月3日から本日迄の期間のアクセス数は862だった。
この数は単純にログファイルに記録されている数でありIPアドレスに重複もある。
IPアドレス毎のアクセス回数(重複数)で見ると、IPアドレス自体の数は141で、最も多くアクセスしているIPアドレスは米国のプロバイダのアドレスの46回で、2位は中国のプロバイダのアドレスの31回であった。
IPアドレスの割当先情報(国名や組織名)はwhoisでJPNICやAPNICから取得できる。
この情報を元に上述のIPデータを組織名毎に集計してみた結果は188であった。
組織はさらに、Company(企業)、Academia(学校や研究所等)、ISP(インタネットサービスプロバイダ)の3種に分類している。 (ISPは個人の他に自営業者や小規模な企業の可能性もあるが調べようが無いので、個人と見做している。) この3種の比率で見ると、ISPが49%、Companyが36%、Academiaが15%であった。また、国籍では日本を含めて28カ国からアクセスがあり、66.5%が国内からのアクセスであった。
ログを取り始めた2011年10月からの全期間でも見てみた。
全期間でのアクセス総数は13382。 IPアドレス毎の集計ではIPアドレス数は2476、最も多くアクセスしているIPアドレスは国内のIPアドレスで2011回だった。また、組織名毎の集計では組織数は561で、3種分類ではCompanyが43%、ISPが42%、Academiaが16%だった。また国籍数は日本を含めて44カ国で、その内の66.5%が国内からのアクセスであった。
3種の項目でアクセスの時間帯に違いがあるかを見てみたところ以下のようであった。
Companyでは14:57:42頃に突出したアクセスがある。
3時の休憩時間にアクセスしているんだろうか?

一方、ISP(個人)は突出したピークが無い代わりに真夜中の時間帯にも多くのアクセスがあった。

Academiaは以下のようだった。

ということで、時間帯でみるとちょっと面白い結果になった。
2020年3月8日日曜日
10万ページビュー
大したことも書いていない、しかも休止中にも拘わらず10万回に到達したというのは感慨深い。
ブログの統計情報によると、ブログを開始した2010年10月3日から本日までの全期間で、一番参照された記事は「ZYBO26(Linux + simple framebufferでX Windowを動かすまで)」で、次が「DFT IPの作成2」だった。
直近の1ヶ月で見ても、このsimple framebufferの記事は一番参照されていた。
ブログ休止中もFPGAの評価ボードは何種類か購入はしていた。色々と忙しくて殆ど弄れてなかったのだが。。。
また暇になりそうなので、ぼちぼちブログを再開しようかと考えている今日この頃だ。
2017年8月27日日曜日
GTX1050Ti と Tesla m2050 No.2 (BNN-PYNQのtrainingをやってみた)
手順はhttps://github.com/Xilinx/BNN-PYNQ/tree/master/bnn/src/trainingに記載されており、特に判りづらい点はなかった。
・ mnist.py
実行時間はうちの環境では107分だった。


冒頭のBNN-PYNQのREADME.mdによると、GRID K520 GPU (i.e., a g2.2xlarge instance on AWS.) でのmnist.pyの結果は実行時間が約2時間で、test errorが1.6%となっているので、だいたい同じ結果だった。 一方のcifer10.pyはGRID K520 GPUでは約12時間となっているのに対してうちの環境(GTX1050Ti)では約9時間と3時間程短時間で済んだ。test errorに関しては20.42%に対して20.0%なので同等。同じソースとデータを使っている筈なので当然だろうと思う。

因みに、学習中のGPUのリソース使用状況をnvidia-smiで観察してみるとメモリは最大
300MByte位の使用量だった。以下のスクリーンショットの最下段のpythonの部分がBNN-PYNQのtraining processだ。GTX1050Tiの搭載メモリ容量は4GByteなので10%もメモリを使っていない。つまり、メモリリソース的には十分余裕がある。

個人でDeep learningの学習をするならAWSインスタンス等を使うよりもGTX1050TiクラスのGPUを購入してやったほうが良いような気がした。
2017年8月12日土曜日
TE0720 No.4 (BNN-PYNQを動かしてみる 2)
以下は前回に続いてBNN-PYNQが動くまでの記録。
gdb (GNU debugger)で例外が出る原因を調べてみた。
例外が発生しているのはシェアードライブラリ(python_hw-cnv-pynq.so)の中であり、これはpythonからダイナミックリンクされるのでpythonごと gdb で追えば何か判るのではないかと考えた。

run ./x.py としてx.pyスクリプトを実行させると、以下のようにSIGILLシグナルを受けて停止したが、かまわず cont と打って実行を継続させた。

すると、あのterminate called after throwing an instance of 'char const*'というメッセージが表示され、SIGABRTシグナルを受けてプログラムが停止した。ここでバックトレースを確認した。


関数FoldedMVInitの400行目で例外がthrowされているようだ。python_hw-cnv-pynq.soはデバッグ用の情報も付いているようなので、gdbを一旦終了しBNN-PYNQのソースファイルを/home/xilinx/test-newswg/下に展開してgdbを起動して上述と同じところまで操作した。
次に関数 FoldedMVInitをリスト表示し400行目付近を見てみた。

accelBuffer用の領域確保に失敗して例外を投げているようだ。そこで397行目にブレークポイントを設定してプログラムを再実行した。



accelBufInの確保も失敗してnullポインタが返ってきているようだ。

allocAccelBuffer内部では引数をcma_allocに渡してcma領域を確保していた。cma_allocはContiguous memory allocatorでカーネル内部に物理アドレスが連続したバッファを確保するための関数らしい。今の場合は30MB分の連続領域を確保しようとしている。ステップ実行したところ、cma_allocからnullポインタが返っていることが判った。

現在のOSのcma領域がどうなっているか確認したところ、そもそも全体でも16MB分の領域しかないことが判った。

そこで容量を128MBに増やしてみた。

増量して、cma_allocをコールする直前での空き容量を見ると70MBあるので今度は大丈夫の筈だが、ステップ実行してcma_allocからの戻り値を見るとnullポインタが返されていた。

そこで、今度はcma_allocの中を追ってみることにした。cma_allocのソースファイルは無いので、アセンブラレベルでのステップ実行になったが、その結果 ioctl コールでエラーが返っていることが判った。







PYNQのカーネルのバージョンは4.6.0だった。4.6.0と4.9.0ではcma_alloc関連の仕様が変わっているのかも知れない。また、4.9.0ではFPGAのコンフィグレーションのFPGA managerが追加になっているのでそれに関連してxdevcfgも変わっている可能性もある。。 ともあれ、例外が発生しなくなったのでjupyter notebookでCifar10.ipynbを実行してみた。

実行できた!!

で、推論をハードウェアで実行(PLにダウンロードして実行)した場合とソフトウェアのみで実行した場合との差は801108 / 3199 = 250倍となった。 ARMのシングルコアのみで実行するよりも推論部をPLにダウンロードしてハードで実行させると250倍高速に実行できた、ということだ。本物のPYNQボードだとどの位なんだろうか?



Road-Signs-Batch(道路標識の識別)も実行してみた。

こちらも実行できた。



カーネル 4.9.0でioctlがなぜsyscall エラーになるのかという点など、まだ頭の中に?マークがあるが、なんとか動くようになったので良かった。 ワーイ \(^_^)/
ERROR: Failed to spawn fakeroot worker to run ...
なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz 家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...
-
FT232RというUSB-UART変換ICがある。このICにはBit Bang Modeという機能があって、UART用の端子がGPIO的制御が可能になる。 FT232Rを搭載したUSB-UART変換基板は秋月電子やマルツパーツ等色んなところで売られていて私もSparkfunのF...
-
これまではTCM8230MDの出力形式はRGB565にしていたが、画像もちゃんと表示できるようになってきたのでYUV422形式も扱えるようにして両者の画像の違いを見てみた。 まずTCM8230MDの出力をcolor bar出力にして、取り込んだ値に変換式を適用してどんな感じの...



























