”FPGAで遊んでみる”では、セミナー用に作成したサンプル回路などを整理して少しづつ紹介していきます。


Papilioの本
FPGA版Arduino!!Papilioで作るディジタル・ガジェット CQ出版 発売中

セミナ開催します。
"実習・MAX10 NiosIIプロセッサ活用超入門”
2018年1月16日(火)、CQ出版社セミナルーム
DE10-Liteを使ってMAX10上でNisoIIを動かします.
詳しくはこちらへ


第9回(その2) カメラモジュールから画像をFPGAへ取り込んでみる DE0編

  今回は、第9回のカメラモジュールをterasic社の評価ボードDE0(Altera社EP316F486搭載)へ実装してみました。
 回路の中身は第9回(その1)のカメラモジュールと同じですが、内部RAMをAltera社のもの置き換えしています。
 さらに カメラの設定を内部のROMから行うように変更しまいた。

 評価機器
 
上がDE0、その左がカメラモジュール、下ががSVGAモニタ(RGB)
DE0のRGB出力をSVGAモニタに接続しています。DE0はUSBケーブルでPCと接続しています。
DE0はダウンロードケーブルの機能を持っているので、ダウンロードケーブルは不要です。
モニタ映っているオートバイはカメラモジュールの先にある写真を撮影しています。

カメラモジュール・インターフェースのソース(zip圧縮してあります)
 camera_de0.zip
 内容
  camera_if.v カメラモジュールインターフェース回路
  vram_ctrl.v 入力画像のメモリ保存、出力画像のメモリ読出し回路
  ov7670_cmd_genv ov7670の設定情報の生成
  i2c_ov7670_ctrl.v ov7670の設定情報からi2cモジュール制御情報生成
  camera_ap.v 周辺回路も含めたFPGAの最上階層
  svga_if.v SVGA画像出力回路(第4回で紹介)
  layer_a.v 移動する箱のグラフィック生成(第4回で紹介
  layer_b.v カラーパタンのグラフィック生成(第4回で紹介
  msg_buf.v メッセージバッファ回路(第8回で紹介)
  fifo.v メッセージ保持用FIFO(第8回で紹介)
  ram.v メッセージ保持用FIFO用RAM(第8回で紹介)
  rs232c_txrx.v RS232Cインターフェースモジュール(第3回で紹介)
  vram_dumy.v  チップスコープ使用時にメモリが足りないので、使用するvramのダミー記述
  camera_ap_test.v camera_apのテストベンチ
  camera_ap.qsf FPGAボードにDE0を使用した場合のPIN配置指定
  camera_ap.mif OV7670設定用のROMデータファイル
 
 ※この回路を使用する場合は、自己責任でお願いします。

仕様説明(camera_if.v)

 動作概要
   カメラモジュール(0V7670)からの画像データをメモリに保存して、第4回で紹介したSVGA画像出力回路へ画像データを出力します。
 FPGAの容量の少ない内部メモリに画像保存しているので、扱う画像サイズは128×128ピクセルです。
 出力では、256×256に拡大しています。
 また、0V7670を設定するための制御情報をi2c通信モジュールへ出力する機能もあります。

 第9回(その1)のカメラモジュールと違う部分
  基本的に第9回(その1)のカメラモジュールと同じ動きをしますので、DE0版で変更した部分を紹介します。
  カメラの設定を内部ROMから実施をできるように機能を追加しています。
  全体的な動作は第9回(その1)を見てください。

 ブロック図
 

 入力出力信号
  camera_if.vは第9回(その1)から追加は
  init_n:カメラ設定開始、0でROMからデータを読み込みi2c通信で設定を開始する

 パラメータ(vram_ctrl内に設定)
  camera_if.vは第9回(その1)から変更はありません。

 詳細動作
  第9回(その1)の機能にプラスして、ov7680_cmd_genでROMからデータを読み出してi2c通信でカメラに設定を行うようになっています。
  FPGAリセット後またはinit_n=0->1でカメラに設定を開始します。

  波形
  

 ROMの作り方(alteral)
  ここでALTERA社のツールでのROMの作り方を紹介しておきます。ROMはQuartusUのMegaWizardを使います。

  手順1.ROMの入れるデータファイルをの用意
  今回はcamera_ap.mifとして用意しました。mifファイルフォーマットはアルテラ社さんサイト(http://www.altera.co.jp/support/software/nativelink/quartus2/glossary/def_mif.html)を参照してださい。

camra_ap.mifの中身

WIDTH=16;
DEPTH=256;

ADDRESS_RADIX=UNS;
DATA_RADIX=HEX;

CONTENT BEGIN
0 : 1280;
1 : 1101;
2 : 3A0D;
--途中省略
159 : FFFB;
160 : FFFF;
[161..255] : 0000;
END;

  手順2.QuartusUのMegaWizardからrom作成
  以下の方法でromを作成します。
  MegaWizardの起動
  

  ファンクションの新規作成
  
  
  作成ファンクションの指定
  
 
  ビット数とワード数の指定
  

  アウトプットポート指定
  

  メモリ内のデータ指定、予め準備したcamra_ap.mifを指定
  

  シミュレーションモデルの作成、デフォルト設定
  

 
  出力ファイルの指定、Finishで完了
  
  

  手順3.組み込み
  ov7680_cmd_gen.vへset_up_romをインスタンスします。インスタンス例はset_up_rom_inst.vにあるので参考してください。

 ov7680_cmd_gen.vにset_up_romのインスタンス記述

//省略

set_up_rom set_up_rom (
.address(set_up_adr),
.clock(CLK),
.q( ram_out));

//以下省略


 FPGAトップモジュール(camera_ap.v)
  camara_ifの周辺回路には、カメラモジュールがなくても動作確認できるよう疑似的カメラ信号信号を出力するdmy_camera.vを追加してます。
  dmy_camera_mode=0の時にカメラモジュール入力選択、1の時にdmy_cameraの信号選択

   トップモジュール(camera_ap.v)のブロック図
  
  


 DE0とカメラモジュールの接続

  カメラモジュールとDE0はDE0のGPIO用のヘッダーピンに接続しています。詳しくはQSFファイルを見てください。

camera_ap.qsfのカメラモジュールのピン配置

#省略
set_location_assignment PIN_U8 -to i_c_vsync #GPIO1_D[29]
set_location_assignment PIN_Y7 -to i_pclk #GPIO1_D[28]
set_location_assignment PIN_U10 -to i_in_data[0] #GPIO1_D[24]
set_location_assignment PIN_R11 -to i_in_data[2] #GPIO1_D[22]
set_location_assignment PIN_U12 -to i_in_data[4] #GPIO1_D[20]
set_location_assignment PIN_T14 -to i_in_data[6] #GPIO1_D[18]
set_location_assignment PIN_V6 -to i_href #GPIO1_D[30]
set_location_assignment PIN_T9 -to xclk #GPIO1_D[27]
set_location_assignment PIN_R12 -to i_in_data[1] #GPIO1_D[23]
set_location_assignment PIN_T12 -to i_in_data[3] #GPIO1_D[21]
set_location_assignment PIN_R14 -to i_in_data[5] #GPIO1_D[19]
set_location_assignment PIN_AB7 -to i_in_data[7] #GPIO1_D[17]
set_location_assignment PIN_J6 -to dmy_camera_mode #SW0
set_location_assignment PIN_G3 -to init_n #BUTTON1
#以下省略


紹介した回路を試す場合は、自己責任でお願いします。

リンクフリーです。
リンクされた場合はご連絡をいただけると嬉しいです。
メール:


変更履歴
(2011/12/17) 初版


TOPへ戻る