お盆休みを含むこの夏休み期間中には,TKM-Hの動作確認を集中的に行ってきましたこの記事では,今回行った確認とその方法について備忘録的に書き記します.
まず,RXマイコン,FPGA,カメラおよびSRAMの接続状況を下に示します.これをもとにカメラとSRAMの記事をご覧ください.
カメラ
カメラとメインマイコン(つまりRX62N)との間にはFPGAがあり,最終的にはこのFPGAでカメラによる撮影を行う回路を構築する予定です.しかし今回はまず,FPGAではマイコンからの信号をそのままカメラへ送るようにして,カメラが動作することを確認することにしました.TKM-Hに搭載しているカメラはI2Cインタフェースで制御されます.ここで,私がはまったことは,入出力端子の取り扱い方法についてでした.今回行いたいことは,マイコンから出力するSDAをFPGAに入力し,FPGAからカメラに入力する回路を作成しようとしました.しかし,カメラからFPGA経由でマイコンへ信号を送る必要があることに気がつき,したがって入出力端子にすることにしました.このとき,マイコンから来る信号とカメラへ送る信号をinoutにしたうえで,ただassign文で代入すればよいと思っておりました.ところがこれだけではうまくいきません.
行ったことは2つです.ひとつは,SDA端子の役割をUCFファイルにI2Cとする必要があったようです.ISE Design Suiteにある PlanAheadで,端子の役割を設定することができます.もうひとつ解決したことは,FPGA-カメラ間のプルアップです.FPGAとマイコンの間には3.3[kΩ]でプルアップしてありましたが,FPGA-カメラ間には入れてありませんでした.以上の2つにより,マイコンからFPGA経由でカメラへデータの送受信をすることができました.
SRAM
SRAMは,カメラにより撮影した画像をためておくために使用されています.最終的にはとりためた画像をFPGAで画像処理し,マイコンから結果画像を使えるようにする予定です.まずは,マイコンからFPGA経由でSRAMにアクセスできることを目指しました.
今回,まず問題になったことはデータ(図ではD)の取り扱い方です.これが正しく動作しなかったため,マイコンからFPGA経由でSRAMへの読み書きができませんでした.もともとFPGAには,マイコンからの信号(MPU_D)とSRAMへの信号(SRAM_D)を単純に下のようにしてありました.
assign MPU_D = SRAM_D;
しかしこのままではよくなかったわけです.どうすればよいか,それは「書き込むときにはつなぎ,読み込むときにはハイインピーダンスにする」ということです.ということで,正しくは次のようになります.
assign SRAM_D = ((MPU_WE == 1'b0) ? MPU_D : 16'hZZ); assign MPU_D = ((MPU_OE == 1'b0) ? SRAM_D : 16'hZZ);
ここでMPU_WEはマイコンがSRAMへ書き込みたいとき0,そうでないときには1となります.MPU_OEはマイコンがSRAMから読み込みたいときには0,そうでないときには1となる信号です.SRAMにデータを書き込むときには,MPU_WEが0となります.よって,SRAM_DにMPU_Dの値を書き込むので,上のようになります.また,MPU_WEが1のときには,SRAM_Dからの信号を読み取るのでハイインピーダンスにします.
以上で,カメラボードの動作確認は終了となります.次はベースボードの検証を行います.