Anaconda/Jupyterで簡単なDeep learningを試してみました

Anaconda/Jupyterで簡単なDeep learningを試してみることにしました。 プログラムは以下を参考にしました。 コードが丸ごと用意されていてそのまま動作したので助かりました!! 参考サイト: 機械学習の要「誤差逆伝播学習法」を解説・実装してみる! – 株式会…

yolofaceで顔画像のトリミングをしてみました

前回、画像の取得ができたので、次に教師データのために画像トリミング方法を調べました。 すると、認識用のプログラムを使って、自動でトリミングして教師データとする手法が用いられていることがわかりました。 OpenCVにはhaar detectionがあるので、まず…

画像取得用のPythonスクリプトを書いてみました

OpenCVでカメラから簡単に画像を用意できることがわかったので、 機械学習の学習データを作成してみることにしました。 以下の参考元からソースコードを持ってきて、作成しました。 参考元: 機械学習で用いる顔画像データセットの一作り方(2:動画をフレー…

opencvをiMacにインストールして顔認識を試してみました

最近顔認識がしたいとふと思ったので、OpenCVをインストールして、試して見ることにしました。 GitHub - opencv/opencv: Open Source Computer Vision Library まずは、brewでopencvをインストールします。 20分くらいかかりましたが、無事にインストールで…

辛い坦々麺を食べて、夜に後悔した話

先日、神田のつじ田で、坦々麺を食べにいきました。 最近辛いものを食べておらず、また体調が良かったので、無料の辛さ最大lv4を選びました。 成都正宗担々麺 つじ田 (セイトマサムネタンタンメン ツジタ) - 小川町/担々麺 | 食べログ どん、出てきました…

チゼルの一ヶ月

建国記念日からChiselを初めて、1ヶ月が経ちました。 その間にインチキモジュールを作り続けました笑 そして、Vivadoで合成し、FPGAに乗せて動作確認をしました。 FPGAのテストするための環境も作成してみました。 1ヶ月の中で、Chiselは本当に便利で生産性…

わかりやすかったchiselの入門サイトについて

最近、chiselのことが少しわかってきたので、学びが多かったサイトをまとめます。 当たり前かもしれませんが、結局公式サイトが情報が多くわかりやすかったです。 公式サイト URL: Chisel/FIRRTL: Home チートシート URL: https://inst.eecs.berkeley.edu/~c…

Chiselで複数のパッケージを組み合わせる方法を調べました

Chiselで複数のパッケージを組み合わせ方を調べてみました。 今回はChiselのSoCプロジェクトであるrocket-chipを調べてみました。 rocket-chip/src/main/scala at master · chipsalliance/rocket-chip · GitHub モジュール種毎にディレクトリを分けることが…

RiscVの内部動作モニタに、Python cmdライブラリを使ってみました話

最近、RISCVとuartが使えるようになったので、RiscVの内部挙動を確認できるように、モニタを作ってみることにしました。 ひとまず、以下をモニタ可能にしてみました。 PCとして命令アドレス 内部レジスタダンプ で、ハード的にモニタ可能にしたあとは、ター…

Chiselで分周クロックを作って、RISCVの合成をTiming Metさせました!

先日、Vivadoで合成したら、タイミングMetしませんでした。 そのため、何らかの対策をすることが必要になりました。 それは、パイプライン設計とマルチクロックです。 thira2.hatenablog.com パイプラインは中々に手間なので、マルチクロックにしようと思い…

chiselで適当に書いたRISCVをVivadoで合成したら、Timing割れしまくって困っている話

先日、RISCVを作ったので試しにFPGAで合成してみることにしました。 LUTが5000くらいでFFが1200くらいとなかなかに小型であることはわかりました。 問題はここからで、タイミングがまったくMetしていません。 125MHzで8ns周期なのに、WNSが-5.5nsと惜しくも…

シリアル怪奇現象の正体見たり、「使用しているライブラリの仕様には注意」

先日、FPGAにシリアル接続すると、データが化けるという怪奇現象が発生することがわかりました。 thira2.hatenablog.com 原因が不明でオシロスコープやロジアナでみないといけない(持ってないですが)と思ったのですが、 識者の方からのコメントではボーレー…

Vivadoの制約ファイル(xdc)について

最近、Vivadoを触るようになってきたので備忘のために、制約をまとめていきます。 まずは最も簡単なPIN設定、クロック制約の記載例です。 とりあえず、簡単なデザインであればこれだけあればひとまず動きます笑 今回クロックは125MHzと高速に思えるのですが…

シリアルの怪奇現象を追っている話

先日、Uartの通信がPCとFPGA間でできるようになったので、 次にFPGAにChiselのMemを置いて書き込めるか確認しようとしました。 他にもGPIO設定できるものや、スイッチの設定値を読める機能もついでに追加しました。 で、テスト用のプログラムを作って、動作…

FPGAとシリアル通信しました

先日、Chiselでシリアル通信のループバックモジュールを作成しました。 Chiselでテストしようとしたのですが、1データテストするのに1分くらいかかることがわかりました。 UARTの転送bit数は8bitなので、全部テストするのに、256分くらいかかるということで…

Chiselでシリアル送信器のテストしていたら、OutOfMemoryError: Java heap spaceが発生した話

先日、chiselでシリアル受信器を作成したので、次に送信器を作ってみました。 以下のようなループバックになるようにしてみました。 シリアル受信器で受診したデータを送信器に送る。 送信器はPCに送り返す。 chiselのテストは送受信で行うので、時間として…

Vivadoを使ってChiselで作ったシリアル受信器をFPGA上で動作確認しました

先日、Uart受信器を作ったので、試しにFPGAで動かしてみることにしました。 FPGAは、大昔に購入しずっと眠っていてホコリをかぶっていた、Digilent Zybo Zynq-7000を使ってみることにしました。 以下ボードなんですが、数万ゲートは対応できそうなので、RISC…

Chiselで簡単なUART受信機を作ってみました

RISCVもできてきたので、次にRISCVに外部から接続する方法を考えてみました。 本来であればRISCVデバッガを作れば良いのですが、以前調べたところ、あまりにも難解なので、今回はskipすることにしました。 となれば、最も簡単なのはUART一択ということで、簡…

Chiselで2 portメモリの作り方

先日、Chiselで2 portメモリを作ることが必要になりました。 しかし、どうやって作れば良いかわからなかったので、調べてみると以下公式サイトに記載ありました。 備忘のために記載します。 単純に二つのポートを書けばよかったんですね。 Mem keyword in Ch…

Chisel/Verilogの右シフトについて

先日、ChiselでRISCVを作っている時に、算術右シフト(負の値のときに上位bitは1詰め)と 論理シフト(なんであれ0詰め)があることがわかりました。 少し戸惑ったので、備忘のために記載します。 Chiselの右シフト Builtin Operators · freechipsproject/chisel…

RISCVデバッグ仕様について眺めてみました。

先日、RV32Iもどきを作ったので、次に何を作ろうかと思いました。 そんな気分で、ricvの公式サイトをぼんやり眺めていると、なんとRISCVにはデバッグ仕様が存在することが判明しました。 そんなわけで、RISCVのデバッガを作ろうとしました。 Debug Specifica…

chiselで簡単なRV32Iもどきを作りました

先日からコツコツRISCVを作ってたんですが、とりあえず spikeとのレジスタチェック、命令トレースチェック環境を構築し、 簡単なMain関数の実行が適切に流れるところまで確認しました!! 以下の設計方針で簡単に作成しただけですが、ある程度早めに良い感じで…

chisel/scalaでunsigned intの扱いに苦労した話

chiselというより、scalaですが、unsigned intの扱いに苦労したので、備忘のために記載します。 RISCVの命令は32bit幅で、命令をtxtファイルに記載して、テストベンチで読み込むことにしました。 scalaでtxtファイルを読み、Unsigned Int(32bit)にして、dut(…

参加すべき大切な会に行かなかった話

先日、血縁者の集まり?のような参加すべき大切な会がありました。 もう長年会話していないような関係ではあったのですが、周りからは行くべきと言われてました。 会の1ヶ月前から行かないと行っていたのですが、間際になるにつれて、行くべきなんじゃないか…

spikeで簡単なプログラムを流して、レジスタダンプを取得できることがわかった話

chiselでRISC-Vを作ろうとしたのですが、まずプログラム開発環境を揃えることにしました。 spikeで簡単なプログラムを流す(0x0000番地の罠) RISC-Vモデルはspikeにすることにしました。 公式から出ているシミュレータなので安心感があります。 spikeを使って…

chiselでDMA書いてみました

chiselで色々書けるようになってきたので、負荷をかけるために次にDMAを作ることにしました。 以下のとてもシンプルなおもちゃですが、あっさりかけました。 DMAモジュール AXI4 Liteの4byte転送のみ AXI_interface/DMA.scala at master · moamoai/AXI_inter…

ChiselでbundleのWire接続に詰まった話

DMAを作成する前に、Busモジュールが複数Master/Slaveに対応できないといけないため、 Parameterでマスタ数、スレーブ数を変更できるようにしようしました。 まずは本当にシンプルに以下の仕様で作成しようとしたんです。 Master側のIFモジュールで複数マス…

魔法使いになれるなら使いたい呪文について

先日、ふと魔法使いになったら、何を使いたいか考えてみました。 ドラクエの魔法がまず頭をよぎりました。 マダンテは力使い尽くしそうでヤバそうです。 メラは弱めです。 ルーラが無難ですね。 ザラキは危険ですね。 ザオリクやベホマが使えたら、安泰な気…

続chiselでリファクタリングしてみました(for/vec/reduce)

前回、chiselでinterfaceが良い感じでにかけることがわかりました。 すると、次にレジスタモジュールを良い感じで書きたくなりました。 レジスタを複数書くには、verilogだと、generate文を使えば良いと思います。 では、chiselだと?と思い、調べました!! モ…

chiselでリファクタリングしてみました

chiselの使い方がわかってきたので、よりまともな記述ができるようにリファクタリングしてみました。 チートシートを参考にしたりしました。 chiselチートシート: GitHub - freechipsproject/chisel-cheatsheet: Chisel Cheatsheet ChiselSheet · freechipsp…