2015年10月4日日曜日

世界最小クラスかも知れないFPGAボード 11 (CAN IPを実装してみる 7)

CANバス経由でのリードバックを見てみた。
いきなり実機で動かすことはせず、RTLレベルとゲートレベルでシミュレーションをして動くことを確認してから実機で確認することにした。 シミュレーションではこれまでと同様にCANマスタとしてOpenCoresのCAN IPを使用した。
以下のようにCANバスからI2Cコントローラのreg_adrレジスタに0x55を、reg_wdatレジスタに0xAAを書き、次にreg_adrレジスタの値をリードバックしてみた。

以下がRTLシミュレーションの結果である。赤字のref_modelの部分がCANマスタの信号で、data_out[7:0]は受信した(即ち、自作CANIPが送信した)データである。 0x55 が受信できているので期待通りだ。

こちらはゲートレベルシミュレーションの結果で、こちらも期待位通りの結果だった。


I2C busの通信も起動できるかの確認
こちらも期待通りの結果だった。



実機での確認
シミュレーションと同じようにI2C コントローラに値を書いて、それが読めるかを見てみた。
zynq側のプログラム

結果
3行目の「2: xxxxxxxx]の左端がリードバックして受信した値で、55になっているので成功だ。


http://bravo-fpga.blogspot.jp/2015/08/fpga-7.htmlに書いたとおり、I2CバスにはMCP3425ADT (16bit ΔΣ A/D)、 MCP4726A0T (12bit DAC)、 STTS751 (12bit 温度センサ)が接続されているが、今回はSTTS751のレジスタを読んでみることにした。


STTS751のレジスタマップは以下のようになっている。


Manufacturer ID、Revision、Product ID等固定値のレジスタと温度レジスタをリードしてみた。
zynq側のプログラム


結果

固定値の部分はデータシート通りの値が読めている。また、このプログラムを実行した時の室温は29℃だった。1℃の違いはあるが、温度も正しく読めていると考えて良いだろう。


ということで、リードバックは問題無さそうだ。


0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...