電気電子コース

SPI( シリアル・ペリフェラル・インタフェース)をVerilogで記述

FPGA(field-programmable gate array)を利用していると、手軽にFPGAとのデータのやり取りを行いたくなるものです。以前にこのブログで紹介させていただきましたシングルボードコンピュータとFPGAを接続する方法などが利用できます。

シングルボードコンピュータとFPGAを接続するにはSPI( シリアル・ペリフェラル・インタフェース)という通信規格を使う方法があります。この規格は公開されておりますので、手軽に通信手順等のドキュメントを入手することができます。

さて、可視光通信なるものを研究しておりますが、自作でシリアライザ・デシリアライザをFPGA上に作成しております。このシリアライザ・デシリアライザに関しては完全自作なのですが、シングルボードコンピュータとFPGA間の通信で使用するFPGA側のSPIモジュールに関しては、ネットでそのVerilogHDLのコードが公開されていたものを色々とチューニングして使用しておりました(車輪の再発明はしたくないのです)。それはそれで良いのですが、自作の物も含めすべてのソースコードを配布できるようにするには、いかにネット上で公開されているSPIモジュールとはいえ再配布は良くないのです(オープンソースであっても気を使います)。

という事で技術資料を入手しSPIモジュールをタイミングチャートを見ながらフルスクラッチしました。実際にシングルボードコンピュータであるRaspberry Pi3とFPGAを接続して動作させてみました。以下の図は動作中のFPGAを信号をキャプチャして正常に動作しているか確認しているものになります。

正常に動作するコードを記述することができましたが、ここで問題となるのはRaspberry Pi3-FPGA間の通信速度です。Raspberry Piで使用できるGPIO操作ライブラリとして、wiringPiPIGPIOがあります。この両方で通信速度の動作検証を行ったところ前者は8MHz、後者は5MHzのクロックまで正常に動作しましたが、それ以上にすると誤作動することが判りました。疑問点は同じハードウェアであるにも関わらずライブラリの違いで正常動作する通信速度に差があることです。PIGPIOはソースコードが公開されているので、そのうち自作のVerilogHDLで記述したSPIモジュールとPIGPIOのソースコードを照らし合わせてみましょうか。

シンポジウム「EUV・軟X線イメージングの描く未来」を開催します

コロナ対策を準備中

大学公式サイトはコチラから
KOUGEI PEOPLE 東京工芸大学 学科・コースブログ集

大学公式Webサイトで
工学部・芸術学部の詳細を見る

PAGE TOP