今日から明日にかけて両親は小旅行に出かけている。
そんなわけで今晩は兄弟2人だけだ。
まだ具体的な研究テーマは決まっていなくて、
ちょうど今日、研究テーマの案について指導教員と話していて、
とりあえずは過去の修士論文でも読んでみますか、という話になったぐらいだ。
それとは無関係な話だが、MicroblazeとFPGA上のBlock RAMとの接続を検討していた。
具体的な用途ははっきりしていないが、ハードウェアとソフトウェアの融合の可能性を探ってたわけだ。
MicroblazeのバスはPLBとAXIが選択できるのだが、
AXIというのはARMのバスで、ARMのIPも接続できると言うことで、AXIの方がおすすめのようだ。
PLBとAXIでビット順が違って、AXIは0ビット目がLSBというなじみ深いビット順なので、AXIを使うメリットは大きい。
このAXIバスにメモリをつなげばいいわけだが、そのためのIPとしてAXI External Memory Controllerを使えばよさそう。
このコントローラは同期SRAMでも非同期SRAMでもFlashでも接続できるようだが、
Block RAMは同期SRAMを選んでやればよい。
ビット幅だが32bitしか選択できない。なのでBlock RAMは32bit幅で作る必要がある。
Block RAMのようにビット幅を自由に選べるものならいいけど、
16bit幅のSRAMのチップがあってこれをつなぎたいとなっても対応できそうにない。
あとはコントローラからのデータバス・アドレスバスなどをBlock RAMに接続すればいいわけだが、
アドレスバスは32bit幅で出ているので、必要な部分だけ選んでつなぐ必要がある。
データが32bit幅なので下位2bitは接続しないで、そこから14bitつなぐとかそんな具合。
FPGAのBlock RAMというのは2箇所から同時に読み書きできるデュアルポートになっている。
ハードウェアとソフトウェアの融合のためにBlock RAMを介してデータのやりとりをできるようにしようと考えたのも、
デュアルポートである特徴に注目したもので、ハードウェアから読み書きされている途中でも、Microblazeは自由に読み書きできるわけだ。
これは一般的なSRAMではできないことだ。
実際これでどんなことができるかなぁという話だけど、
大量のデータを扱うが単純な計算と計算量はさほどではないが複雑な処理を組み合わせるとき、
大量のデータを扱う部分はハードウェアで、複雑な処理はソフトウェアで記述して、
これをつなぎあわせて一体のものとすることができるということだ。
そういう発想で作られたシステムはすでにあるのだが、PCに転送して処理するという形態だったようで、
これがFPGAのチップ上で完結することによりどんな可能性が見いだせるか。それが1つ重要なことかなと思った。