7セグメントの出力部分が、出力先と条件以外はほぼ同じような記述がされているので、この部分をモジュールで作成してトップのVHDLファイルから呼び出すように改良をしました。機能ごとにファイルを分けることで、VHDLファイルが整理できました。
前回の内容は下記を参照してください。
今回は、SPI通信の回路を構築したいと思います。SPI通信は、クロック同期式のシリアル通信です。SPI通信では、下記のような4つのピンを使用します。
- クロック(SPI CLK、SCLK)
- チップセレクト(CS)
- マスタ出力-スレーブ入力(MOSI)
- マスタ入力-スレーブ出力(MISO)
MOSI、MOSOをSDO、SDIで表記している場合もあります。SPI通信は1つのマスタに対し、複数のスレーブを接続することができます。どのスレーブと通信するかはチップセレクタで選択します。
以前、SPI通信を使用して、RXマイコンでDACを制御しました。
この時は、MOSIは使用しましたが、MISOは使用していないと思います。このように3ピンのみ使用して通信する場合もあります。
今回は、プッシュスイッチを押すと、トグルスイッチで指定した数値をSPI通信で送信します。受信したら、その数値を7セグメントで表示する機能を構築したいと思います。2つの評価ボードがあれば、通信している感じがあり、よりよいのですが、今回は1つの評価ボード上で、自ら送信を行い、自ら受信する機能を構築します。もう少し具体的に機能を考えると下記のようになります。
- トグルスイッチを4つ使用して、0~9を指定できるようする。10~16の時は、0として扱います。
- プッシュスイッチを押すと、トグルスイッチで指定した数値をSPI通信で送信する。
- SPI通信で送信されたデータを受信する。
- 受信した数値をを7セグメントに表示する。
それでは、機能を構築していきたいと思います。まずは新規プロジェクトを作成します。新規プロジェクトを作成できたら、IPを使用してPLL回路を追加します。PLLでは50MHzのクロックを入力として、10MHzのクロックを出力します。新規プロジェクトの作成方法、PLLの追加方法は下記のリンクを参照してください。
次に、VHDLファイルに動作内容を記述していきます。まずは、SPI通信の送信機能のモジュールを構築します。この送信機能は今回マスター側にもたせます。