lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

QuickLogic EOS S3でCMOSカメラを駆動する

小規模FPGA+小規模マイコンならではの使い方としてイメージセンサの駆動は最適かもしれません。 マイコンだけだと、駆動ロジック自体は単純な割に処理速度がギリギリになってしまうからです。外部メモリーIFを持っているマイコンであれば駆動は簡単ですが、…

QuickLogic EOS S3のハードマクロFIFOを使う

EOS S3はPSoC3/5LPと比較すると、アーキテクチャの差があるので単純比較できないものの、およそ3~4.5倍ほどの論理ゲート規模を有します。それはそうと、ロジック規模だけで優劣をつけてしまうので有れば15年以上前のCPLDと同等になってしまいます。それ以上…

QuickLogic EOS S3をDockerで使う

前回の記事のキャッチアップです。Dockerが使えると環境整備の負担が少なくて良いので、作ってみました。 脱・開発環境汚染 現在、複数の大学と企業と連携したプロジェクトで開発をしているのですが、環境構築やってらんない、CI/CD考慮した環境にすべきとの…

小規模マイコン+FPGA、QuickLogic EOS S3の試食

小さめなマイコン+グルーロジックの代表格はPSoC5 LPなどが挙げられます。回路規模でその上になるとXilinxであればZynq、IntelであればCyclone V SoCのような比較的中規模デバイスでしょう。www.quicklogic.com 昨年の11月に購入して積んでいました。 必要に…

intelHLSプロトタイプの設計(Cyclone10GX基板の設計)

最近では、安全運転支援のカメラ開発も乗用車から船舶向け、最近では庫内の運搬用群ロボットまで引き合いをいただいております。 ありがとうございます。 開発スピード向上 上記のような簡易プロトタイプ用途としてCyclone10LPのボードを1年前に開発しました…

高度運転支援向け単眼カメラの実装(4.道路認識エンジンの実装)

前回は全結合ニューラルネットワークの試作までをしました。通常は畳み込み層を多段追加したCNNを利用して画像認識を行います。 一方で、ハードリアルタイムの要件を満たすには、この畳み込み層のえげつない量の行列のドット積を次フレームが来る前に素早く…

MATLABによる軽量NNの開発(2:CIFAR-10の分類テスト)

前回はMNISTでした。白黒で文字だけということで、限定的な状況であるので、全結合でも層を深くしなくてもそこそこの成績は出るかとおもいます。 今後のCNN(FPGA-BNN)ではチャネルが3(=RGB)で進めていくと思うのでチャネルを増やした時に正常動作するかの確…

MATLABによる軽量NNの開発(1:環境の整備)

ゼロから作るDeepLearning 前回の話題からの続きになります。 こんな本をいただきました。有難うございます。 5章の誤差逆伝播を重点的にお勉強して、4~7章を読みました。SURF/SIFT/k-means/KL変換など古典的な画像処理をしていた人は4,5章だけでもいいかも…

MATLABでCIFAR-10のファイル読み込み(だけ)してみる

中身のない内容なんだけれども、いざ使う時に忘れるので覚書きです。 物体認識用のデータ・セットに使われるThe CIFAR-10 datasetをMATLABで表示する方法です。www.cs.toronto.edu 準備 MATLAB用のデータセット「CIFAR-10 Matlab version」をダウンロードし…

高度運転支援向け単眼カメラの実装(3.ニューラルネットワークの基本実装)

パーセプトロンの収束定理の壁 深度推定のフィルタを試作し様々な環境で調査して、ある程度どんな環境にも対応できそうなパラメータを決定しました。 が、すこし問題が出てきました。 すごく白い道路を道路と認識せず、壁と認識し、警告が止まらなくなる。(…

自作RISC-Vでスイッチサイエンスの測距ToFセンサー VL53L1X を動かす

2000円もせずに400cm測れる超優秀なセンサーモジュールがあります。www.switch-science.com4mまで測れるので単眼カメラの停止時の車間詰め補助に使おうと思っています。 ADAS搭載車両で、前方車両が発進したことを知らせる機能がある車両がありますが、大抵4…

高度運転支援向け単眼カメラの実装(2.深度推定と夜間走行対応)

前回、パーティクルフィルタを用いた車両の追跡を簡易的に実装しました。 こちらをさらに展開していきます。 対象車両 この装置の対象は、4輪の軽自動車、超小型車を想定しています。また車両への後付けにも対応したいと思っています。 つまり、先進運転支援…

自作RISC-V向けにCライブラリの整備やPlatformDesigner連携をする

前回の記事でCが使えるようになりました。ですが、標準入出力もない乗除算もできない不便なものでした。 組み込みマイコンレベルで使えるように整備していきます。 libgccをリンクする RV32Iは算術演算命令セットとしては加減算とシフトくらいしかありません…

Raspberry Pi Zero/3B/4BでOpenOCDを使う(GPIOによるBitbanging)

FPGAのSVF PlayerとしてOpenOCDを使う ベンダに依存しないJTAGテストパターン形式としてSVFがあります。 www.xjtag.com OpenOCDもこれに対応しているため、出先でconfigをしなければならない場合など、FPGAのメイン開発じゃない時はかなり重宝しています。 …

C言語で自作RISC-Vを動作させる

前回の記事でアセンブラでLチカ、Hello worldはできました。 今回はC言語で試してみました。 実用性を求めるとC記述でも動作することが重要ですが、なによりもハーバードアーキテクチャの場合、Load/Store動作のデバッグになると思います。関数にジャンプす…

Intel FPGA Cyclone 10LPで自作RISC-Vを動作させた話

この記事を執筆した段階ではアセンブラのみ動作が確認できていました。その後C言語での動作確認も終えています。詳しくはこちらをご覧ください。 自作RISC-V向けにCライブラリの整備やPlatformDesigner連携をする - lynxeyedの電音鍵盤 この記事はQuartus Pr…

Chiselを使ったRISC-Vの勉強(最終話:FPGAへの実装2)

今月中にQuartus Primeユーザー向けにもまとめを書きます。ご期待いただければ。この記事はChiselサイドから見たブログ記事にしたいと思います。Alternative HDLとしてそこそこ使えるじゃん!という手応えを感じたのとriscv-testsにFPGA実機上でもパスできる…

Chiselを使ったRISC-Vの勉強(14.Intel HEXの生成)

Intel Hexファイルの生成 Intel FPGAで初期値をRAMに与えたい場合、インテルHEXかMIFファイルにしておく必要があります。 https://www.intel.co.jp/content/dam/altera-www/global/ja_JP/pdfs/literature/ug/ug_ram_rom_j.pdf今後、OpenOCDでデバッグできるI…

高度運転支援向け単眼カメラの実装(1.MATLABでパーティクルフィルタを実装し評価してみる)

パーティクルフィルタの詳しい内容は扱いません。OpenCVのチュートリアルなどに詳しく扱われています。 例題として、特定の色のカラーボールの追跡はよく扱われます。以下の手順をとることが多いでしょう。 入力画像をHSV変換→ 一定の輝度を持っているピクセ…

Chiselを使ったRISC-Vの勉強(13.FPGAへの実装1)

メモリを同期読み込み書き込みにする 製作してきたChiselプロジェクトをFPGAに実装してみました。 Chiselを使ったRISC-Vの勉強(1)から目標にしていたようにAvalon-MM Masterとして動作させようとすると、 命令フェッチ時にデータ取得が1クロック遅れる ロー…

Chiselを使ったRISC-Vの勉強(12. riscv-testsの全項目クリア)

riscv-testsクリア riscv-testsのリグレッションテストを全てクリアしました。(fence.i命令は除外しました。RISC-Vの基本Iアーキテクチャでは必須ではなくなったからです。) クリアしたからと言って「バグがない」とは言えないので、ランダム実行テストをす…

Chiselを使ったRISC-Vの勉強(11. riscv-testsの自動化)

riscv-testsのリグレッションテストコードを自動生成 あまり記事にするほど内容は厚くないのですが備忘録として。一つのテストコードをpassできても、今までpassできていたものがfailしてしまうロジックを埋め込んでしまう可能性は否めません。 全てのリグレ…

Chiselを使ったRISC-Vの勉強(10. Load/Store全命令の実装)

実装中のRV32I RISC-V CPUですが、5段パイプラインのまま継続するか、6段パイプラインに増やすか見積もるため、Load/Storeを真面目に実装していませんでした。(今まで対応していたのは32bit長のlw/swのみ) 結論から申しますと、5段パイプラインのまま継続す…

Chiselを使ったRISC-Vの勉強(9.CSR:外部割り込みの実装)

外部割り込みを実装しました。 RISC-Vに実装する割り込みはCPU外部からの割り込みだけ(あるいは各割り込み入力をマルチプレクスしてここへ入力、または割り込み信号の判別だけできるようにして入力を増やしていく感じで)でいいかな、と思ってきた次第です。…

Chiselを使ったRISC-Vの勉強(8.CSR:例外の実装と割り込みの準備)

riscv-testsをパスしたい RV32Iと謳うにはriscv-testsのテストパタンセットのうちRV32I ISAに要求されているリグレッションテストをパスするのが望ましいと言えます。CSR周りはその限りではありません。(picorv32などの特権命令非搭載かつ例外処理が独自、と…

Chiselを使ったRISC-Vの勉強(7.ハザードの解決)

MEMステージの実装中です。 制御ハザードはすでに分岐命令を実装した時点で実装しており、パイプライン化をしても特筆すべき点はありません。 ここではデータハザードを直していきます。 データハザードの解決が終わると、MEMステージをこのままにするか、も…

Chiselを使ったRISC-Vの勉強(6.パイプライン化とALUを使用する命令の見直し)

突然ですがいままでシングルラインで組んでいたCPUプロジェクトをいきなり5ステージパイプラインにしました。いきなり!ステージ すまんこれがやりたくてステージングしたわけじゃないんだ信じて欲しい。このクソコラ作るのがこの記事書く時に一番時間かかっ…

Chiselを使ったRISC-Vの勉強(5. 分岐命令の実装)

前回の記事と分けてしまったら内容がほとんど皆無になってしまいました。 ないようがないよう (この辺りでみんなブラウザ閉じる) 年取るってこういうことなんだなぁ。 さて、本題です。 前回riscv-asからアセンブルした機械語をChiselプロジェクトにワンスト…

Chiselを使ったRISC-Vの勉強(4. プロジェクトへの機械語の読み込みの自動化)

今更ながら環境を整える VSCodeにChiselプラグインを入れつつ頑張っていたのですが、IDEがオブジェクトやクラスの階層を把握していないため、補完機能が乏しいことなどから限界を感じてました。いつも参考にさせていただいている、diningyo氏(id:diningyo-kp…

Chiselを使ったRISC-Vの勉強(3. ALUの実装とIDステージの改良)

githubを巡回してみていろいろな実装を見て作戦を練っていました。 これまでRISCVの命令セットを見る限り、opcode(7bit) + funct3(3bit)で判別して適当に実装できるかなと考えていました。(10bitなら単純計算で1023命令は用意できるし) ALUへの演算命令、2…