FPGA MAX10(8)-SPI通信

このエントリーをはてなブックマークに追加

7セグメントの出力部分が、出力先と条件以外はほぼ同じような記述がされているので、この部分をモジュールで作成してトップのVHDLファイルから呼び出すように改良をしました。機能ごとにファイルを分けることで、VHDLファイルが整理できました。

前回の内容は下記を参照してください。

FPGA MAX10(7)-モジュールのインスタンス化

今回は、SPI通信の回路を構築したいと思います。SPI通信は、クロック同期式のシリアル通信です。SPI通信では、下記のような4つのピンを使用します。

  • クロック(SPI CLK、SCLK)
  • チップセレクト(CS)
  • マスタ出力-スレーブ入力(MOSI)
  • マスタ入力-スレーブ出力(MISO)

MOSI、MOSOをSDO、SDIで表記している場合もあります。SPI通信は1つのマスタに対し、複数のスレーブを接続することができます。どのスレーブと通信するかはチップセレクタで選択します。

以前、SPI通信を使用して、RXマイコンでDACを制御しました。

RX(7)-SPI通信によるDAC制御

この時は、MOSIは使用しましたが、MISOは使用していないと思います。このように3ピンのみ使用して通信する場合もあります。

今回は、プッシュスイッチを押すと、トグルスイッチで指定した数値をSPI通信で送信します。受信したら、その数値を7セグメントで表示する機能を構築したいと思います。2つの評価ボードがあれば、通信している感じがあり、よりよいのですが、今回は1つの評価ボード上で、自ら送信を行い、自ら受信する機能を構築します。もう少し具体的に機能を考えると下記のようになります。

  • トグルスイッチを4つ使用して、0~9を指定できるようする。10~16の時は、0として扱います。
  • プッシュスイッチを押すと、トグルスイッチで指定した数値をSPI通信で送信する。
  • SPI通信で送信されたデータを受信する。
  • 受信した数値をを7セグメントに表示する。

それでは、機能を構築していきたいと思います。まずは新規プロジェクトを作成します。新規プロジェクトを作成できたら、IPを使用してPLL回路を追加します。PLLでは50MHzのクロックを入力として、10MHzのクロックを出力します。新規プロジェクトの作成方法、PLLの追加方法は下記のリンクを参照してください。

FPGA MAX10(4)-LEDシフト点灯回路

次に、VHDLファイルに動作内容を記述していきます。まずは、SPI通信の送信機能のモジュールを構築します。この送信機能は今回マスター側にもたせます。