PICマイコンを使って測定ツールを作ってみよう(番外編2) ―― FPGAを使って測定ツールを作ってみよう

中西 紫朗

●フラッシュROMから画像ファイルを読み出して表示するデモ・アプリを移植

 LTMにはCD-ROMが付属していて,DE0だけでなく,さまざまな基板のデモ・アプリが収録されています.その中で使えそうなものが,DE2_115やDE1向けの「Ephoto」です.これは,480ピクセル×1140ピクセルの画像ファイル(bmpファイル)をフラッシュROMに書き込んでおくとLTMに表示されるというものです.LTMの隅をたたくと,3枚の800ピクセル×480ピクセルの画像が順次,入れ替わりながら表示されます.これなら,タッチ・パネル制御と画像表示の勉強ができそうです.

 ただし,DE1のFPGAのコードをそのままコピーしても動作しません.基板の仕様に合わせた修正が必要です.DE0の基板の回路図とDE1の回路図では,フラッシュROMの制御に違いがあります.同じフラッシュROMを使っているのに,DE1では回路が8ビット幅に固定されており,DE0では8ビット幅と16ビット幅の両方に対応しています.この指定は「BYTE#」というピンで設定するようになっています.DE0では,このピンがしっかりとFPGAのI/Oピンに接続されています.またGPIOコネクタの名前のつけ方も変わっています.

 DE1やDE2_115では,40ピン・コネクタのうち電源ピンを除いた36ピン全部がGPIO0_D[35:0]と命名されています.ところがDE0では,GPIO0_D[31:0],GPIO0_CLKIN[1:0],GPIO0_CLKOUT[1:0]に分けられています.名前そのものをDE1と同じに修正してもいいのですが,ピン・アサインのほうも修正しないといけなくなるので,DE1のソース・ファイルをコピーしてDE0とし,その中のDE1用の名前をDE0用に修正しました.こうすると,DE0のピン・アサインをそのまま使えます.

 FPGAの設計にはVerilog HDLという言語を使いました.仕様や定義のしっかりしたVHDLという言語もありますが,普及度の高いVerilog HDLがDE0でも使われています.Verilog HDLのファイル(拡張子が.v)は下記のとおりです.

  • adc_spi_controller.v
  • DE1_LTM_Ephoto.v
  • flash_to_sdram_controller.v
  • lcd_spi_cotroller.v
  • lcd_timing_controller.v
  • Reset_Delay.v
  • three_wire_controller.v
  • touch_point_detector.v

 このほかに,サブディレクトリにSdram_Control_4Portがあり,この中に以下のファイルが入っています.

  • command.v
  • control_interface.v
  • sdr_data_path.v
  • Sdram_Control_4Port.v
  • Sdram_PLL.v
  • Sdram_PLL_bb.v (これは不要です)
  • Sdram_RD_FIFO.v
  • Sdram_WR_FIFO.v

 修正はDE1_LTM_Ephoto.vのみに必要で,ほかのファイルは修正する必要がありません.また,ピン・アサインはDE0の付属アプリケーションからインポート(Import)します.

 以上の修正を施し,コンパイルしたファイルをzipでまとめたものを,以下のところに置きます.

 この中の,DE0_LTM_Ephoto.sofをプログラマ(「QUARTUS2」→「tool」→「programmer」)でFPGAにダウンロードすれば動作します.本来の機能のほかに,7セグメントLEDにタッチ・パネルを押したときのXY座標を表示するようにしています.2けたずつしか表示できないので,それぞれ12ビットの上位8ビットを4ビット2けたに分けて16進数表示しています.またLEDにはタッチ・パネルからの各種信号を表示しています.押したときだけ点滅するので,動作確認にも使用できます.

 画像を表示するには,前もってフラッシュROMにbmpファイルを書き込まないといけません.800ピクセル×480ピクセル,24ビット・カラーのbmpファイルを3枚縦につなげ,800ピクセル×1440ピクセルのbmpファイルにして書き込みます.

 これだけで約3.3Mバイトあるので,4MバイトのフラッシュROMはほぼ満杯になります.書き込みの際には,付属アプリケーションのコントロール・パネルを使います.CD-ROMに付属しているものは古いので,最新版をTerasic社のWebサイトからダウンロードします.古いアプリケーションでは,ファイルの最大サイズが512Kバイトに制限されています.最新版では制限は4Mバイトになっています.

 写真1が動作した様子です.LTMを縦にして,右上隅をたたくと次の画面に進み,左下隅をたたくと前の画面に戻ります.LCDの上で指を走らせると,そのXY座標が7セグメントLEDに表示されます.

 

写真1 DE0_LTM_Ephotoの動作例

※ 写真をマウスでクリックすると拡大します

 

 

 このデモ・アプリが実用的であるといったのは,その実現手法にあります.LCD端末では,出力は画像,入力はタッチ・パネルが主流です.この両方を備えています.そして,内部の制御にSDRAMを使い,高速に表示できるようにしてあります.簡単なものはSRAMを使って表示しますが,SRAMは容量がSDRAMと比べて小さく,高価です.一方,SDRAMは制御が難しく,自分で一から作るのは容易ではありません.Ephotoにはこの面倒な部分が最初からそろっています.

 4ポートのFIFO(First-in First-out)を使い,フラッシュROMから読み出しながらSDRAMに書き込み,同時にSDRAMから読み出してLTMに出力しています.これをPICマイコンに処理させると長い時間がかかります.SRAMのアドレスそのものが22本必要になり,PICマイコンの28ピンや44ピンでは制御できません.安価なCPLD(例えばAltera社のEPM240T100)を使って実現することも可能ですが,全部自作するとなると,けっこう時間がかかります.HDLの勉強を目的としない人は,Ephotoのようなデモ・アプリを利用したほうが近道だと思います.

 

●FPGA内部のCPUから描画するデモ・アプリも移植

 Ephotoは必要な処理をHDLだけで実現していて,肝心のCPUから描画するという機能がありません.それを可能にしているのが「Starter」という付属アプリケーションです.これはNios IIという(ソフト・マクロの)CPUコアを使っており,Cでプログラムできます.ここでは評価目的だけに使える機能制限版を使用します.フラッシュROMに書き込めるPOFファイルは作れず,time_limitedと末尾についたSOFファイルしか生成できません.電源を切ったりUSBケーブルをはずすと,動作は停止します.

 これも移植したので,zipでまとめたものを以下のところに置きます.

 これは,LCD画面にフレーム・バッファを2枚用意して,交互に表示するようにしています.四角形,丸,直線などの基本図形は簡単に描画できます.画面に文字を表示するのは少し面倒です.

 まず,sprintfによってSztextにフォーマット付きで文字列を書き込みます.次にvid_print_string_alphaで,バッファに書き込みます.最後に,alt_video_display_register_written_bufferで表示するバッファに切り替えます.こうすることで,書き込み時に出やすいちらつきを抑えます.

 タッチ・パネルの入力も簡単です.alt_touchscreen_get_penでXY座標が読めます.タッチ・パネルが押されていれば,戻り値がTRUEになります.whileで待ち受ければ,値を取得できます.

 この二つとSDカードの読み書きで,たいていの作業は可能になります.

 手軽なツールとするには,もう少し小ぶりなDE0nano(79ドル)が良いのですが,このボードにはSDカードが付いていません.microSDカード・コネクタを付ければ,非常に使いやすいものになります.A-Dコンバータもあるので,aitendoなどの安価なタッチ・パネル付きLCDが使えます.3軸加速度センサも付いているので,おもしろいアプリケーションを実現できます.

 なお,開発ツールであるQuartus IIをAltera社のWebサイトからダウンロードすると11.1sp2がインストールされますが,Windows 7の64ビット版にインストールすると,USB-Blasterの機能をが使えなくなります.OSはきちんとドライバを認識していますが,プログラマ(programmer)が認識しません.Altera社のFORUMを見ていると,同じ問題についてコメントされており,11.1sp1以前のドライバなら認識されるとありました.筆者も,以前のドライバを持ってきて使っています.

 

 

なかにし・しろう
(有)NSL

 

 

«  1  2
組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日