プロローグ

さまざまな知識が必要とされるグラフィックスの知識を身に付けよう

組み込み機器でもグラフィックス表示！

編集部● ユーザ・インターフェースとして1． 組み込み機器に必要とされるグラフィックス表示とは● 機器内部の状態を示すインジケータの役割がある
CPU を組み込み，制御を行う「組み込み機器」．組み込み機

エラー表示から一歩進んで，ユーザ・インターフェースとしてグラフィックス表示を使うこともあります．いわゆる GUI（Graphical User Interface）です．GUI を使用している組み込みの機器として，コピー機や駅の券売機，「スーパーのレジ」に代表される POS 端末が挙げられます．

器もコンピュータである以上，入力→演算→出力を行う演算装

ユーザ・インターフェースとは「コンピュータと対話するた置です．入力部分はスイッチやセンサ，演算部分は CPU，そしめのインターフェース」です．対話というのも抽象的ないい方て本特集で取り扱うグラフィックス表示は出力部分になります．

なのですが，要するにコンピュータへ動作を指示したり，結果昔の出力装置といえば，LED や 7 セグメント LED，ブザーなどの単純なものでした．それが現在ではフルカラー表示の注1を見られるようにしたりするものです．
以前はコンピュータに対する指示は文字を入力し（たとえば，，3D 表示などのリッキーボードで「dir」と入力する），その結果が文字で表示されてチなグラフィックス表示が使われています．なぜそのようなグいました．このようなインターフェースをキャラクタ・ユーザ・ラフィックス表示が必要になったのでしょうか．

インターフェース（CUI）といいます．俗にいう「DOS 窓」がこディスプレイにウィンドウ・システム

まず考えられるのは表示する情報量の増大です．LED であれれに該当します．

ば点灯/消灯の 2 値，7 セグメント LED では 0 〜 9 までの数値

最近ではご存知のようにマウスでアイコンを指定し，結果がしか表せません．これでは「動作中か否か」，「3 けたの時速」なウィンドウなどで知らされます．これが GUI です．GUI を実現

どのような大まかな状態しか人間に知らせられません．

するためにはグラフィックス表示が必要です．この分類を図 1

次に考えられるのは「使いやすさ」です．たとえば，機器内部に示します．

でエラーが起きたとき，LED では「エラーが起きたか否か」，7

パソコンでは Macintosh で有名になり Windows 95 で普及しセグメント LED では「3 けたのエラー・コード」を表示するのがた GUI ですが，これと同じような使い勝手が組み込み機器にも関の山でしょう．エラーが起きたとき，人間に対して迅速にエ求められるようになっています．物理スイッチがたくさん並ん

ラー内容を伝えるには，わかりやすいエラー・メッセージを表で操作法がわからない機器よりも，その場で必要なソフトウェ示すべきです．そのために単純な LED や 7 セグメント LED だア・ボタンが表示される方がわかりやすいでしょう．

けではなく，ディスプレイを用いたグラフィックス表示が使わ● 表示それ自体が目的の機器もあるれるようになりました．

さらにグラフィックス表示それ自体が目的の機器もあります．

このように，組み込み機器におけるグラフィックス表示は，機器内部の状態を示すインジケータの役割があります．

一番わかりやすいのはテレビでしょう．アナログ・テレビにはCPU を内蔵していない製品もありますが，それも立派な組み込み機器です．もちろん昨今のデジタル・テレビは CPU と高速な演算チップ（DSP など）の塊といえる高度な組み込み機器です．
さらに大きな市場となっているのはゲーム機です．ユーザをユーザ・インターフェース
CUI
¡DOS窓
¡ターミナル

グラフィックス
GUI¡タッチパネル¡GUIライブラリ¡ゲーム¡デジタル・テレビ¡ディジタル・サイネージ

楽しませるため，派手で奇麗なグラフィックスの表示に各社がしのぎを削っています．
最近の流行としては，ディジタル・サイネージがあります．
電子看板と訳されますが，店頭などに設置し，店名やその日の¡Windows¡Macintosh

ウィンドウ・システム

図 1 グラフィックスと各機能の分類

36

お買い得情報などを表示します．これらは機器内部に表示情報
注 1 ：画面にウィンドウを表示するためのソフトウェアの総称．Windowsなど．Windows は OS とウィンドウ・システムが一体となって提供されているが，UNIX では後付けで X Window System というウィンドウ・システムが提供されている．

KEYWORD ―― インジケータ，ユーザ・インターフェース，ビットマップ・ディスプレイ，ビデオ・コントローラ，グラフィックス・チップ，OpenGL

Aug. 2009

プロローグ

組み込み機器でもグラフィックス表示！

を保持していてそれを表示したり，ネットワーク経由で表示内入力

出力

容を設定できたりします．

8ビット
CPU

● グラフィックス表示が必要になった＋5V
LEDが光るI/Oポートこのように，組み込み機器にはグラフィックス表示が必要とされています．組み込み機器を作るためには，データの入力やpro（a）グラフィックス以前の組み込み機器

1

演算，機器への出力だけでなく，人間に対して結果を出力するためのグラフィックス表示が必要なのです．

入力

2． グラフィックス表示機器のハードウェア構成

②

CPUバス
出力

16〜32ビットCPU

ビデオ・コントローラ

2

VRAM

3ディスプレイ①● グラフィックス以前

4RAM

ここまで説明してきたことを，実際のハードウェアに対応さ①と②は同時に行えない．
①または②を行っているとき，CPUはRAMにアクセスできないせて考えてみましょう．
グラフィックスと呼ばれる以前の表示デバイスとしては，

6LED や 7 セグメント表示器などが使われていました．これらはON/OFF の 2 値で表現できるため，CPU の汎用 I/O ポート（GPIO ： General Perpose I/O port）に LED をつなげるだけで実現できます．ソフトウェア的には CPU の GPIO 端子を出力に設定し，そこを 0 か 1 に設定するだけです〔図 2（a）〕．
7 セグメント LED も同様です．7 セグメント LED は LED がCPUバス
出力

入力
32ビット
CPU

7グラフィックス・チップ①②VRAM

ディスプレイ

七つ並んだだけの構造なので，GPIO を 7 本使えば接続できます．構造が手軽なことから，現在でも使われています．

● キャラクタ・ディスプレイの時代
次に登場したのが文字を表示する機器です．よくあるのが「数字とアルファベット，カタカナ」だけの表示です．メモリ容量RAM②を行っている最中もCPUはRAMにアクセスできる（c）グラフィックス・チップを使う場合

図 2 グラフィックスを実現するハードウェアの構成が少なかった時代に使われました．たとえば 1 文字を 1 バイトで表現し，文字数が 1 画面 40 × 25 文字の場合，1,000 バイト＝ます．これは VRAM から画像データを読み込み，ディスプレ約 1K バイトで画面全体を表現できます．

イへ送信するものです．CPU による描画では，最近では次に述べるビットマップ・ディスプレイに置き換わってしまい，ロスト・テクノロジとなっています．

● ビットマップ・ディスプレイの初期メモリ価格の低下により可能になったのがビットマップ・① CPU から VRAM へ画像データを書き込む②ビデオ・コントローラが VRAM からデータを読み出し，ディスプレイに画像データを送り出すという 2 種類の作業が必要になります．

ディスプレイです．画面をいわゆる「ドット」で表現する方式

ここで問題になるのが「バスの飽和」です．バスというのは信で，現在の主流です．図 2（b）にビデオ・コントローラで実現号線をまとめたものです．この場合，CPU に直結しているバスするビットマップ・ディスプレイの例を示します．

であることから「CPU バス」と呼ばれます．CPU もビデオ・コ

この方法は CPU の外に画面を保存するためのメモリとしてントローラも，VRAM へのアクセスはバスを経由して行いまビデオ RAM（VRAM）を接続します．たとえば，1 ドットに対す．問題なのは「CPU とビデオ・コントローラのどちらか片方して RGB（赤緑青）各 8 ビット（1 バイト）として，画面のドットしか VRAM にアクセスできない」ということです．つまり CPU数が 640 ドット× 480 ドットの場合，3 バイト× 640 × 480 ＝が VRAM へ書き込んでいるときは，ビデオ・コントローラは921,600 ＝約 1M バイトになります．1K バイト程度で実現でき

VRAM のデータを読み込むことができないし，逆にビデオ・コたキャラクタ・ディスプレイとは，文字通りけた違いの大容量ントローラが VRAM のデータを読み込んでいるときは CPU はが必要です．今では 1M バイトのメモリは 1 円程度の計算になVRAM へ書き込めません注 2．そのため，片方の作業を行うとりますが，80 年代後期あたりでは 3 万円近くしたものです．

きは，もう片方が待たされます．CPU バスは VRAM へのアク

ビットマップ・ディスプレイの実現には，CPU に VRAM とセスだけでなく，（普通の）メモリへのアクセスにも使われます．

ビデオ・コントローラ（CRT コントローラともいう）を接続したとえば CPU がプログラムの実行を行うための命令の読み込

Aug. 20095（b）単純なビデオ・コントローラの場合

37みや，変数の値の読み書きもメモリ・アクセスです．これらがさらに単純な塗りつぶしだけでなく，線の描画や画像のコビデオ・コントローラ実行中は待たされることになります．

ピー，3D 画像の表示など，高度な機能を持ったグラフィック

このようにバスが「埋まって」しまい，自由に使えないことにス・チップが登場しています．カー・ナビゲーション・システ
ムなど，高度な 3D グラフィックス表示が必要な分野ではグラよる性能の低下を「バスの飽和」と呼びます．
さらに，CPU による VRAM 書き込みも時間がかかります．

フィックス・チップは必須です．最近の組み込み向けマイコン

たとえば，640 ドット× 480 ドット× 3 バイトの VRAM を塗りでは，マイコンの中に CPU とグラフィックス・チップの双方つぶすには，640 × 480 × 3 ＝ 921,600 ＝ 100 万回のメモリ・アを内蔵した製品も出てきています．

クセスが必要です．グラフィックスを扱うというのはこのくらい「重い」処理なのです．

● 現在のグラフィックス機器重い処理であるグラフィックスを CPU で扱うにはもっと速い CPU を使えば解決します．しかし速い CPU を使うというこ

3． グラフィックス表示機器のソフトウェア構成● 単純なメモリ・アクセスから OpenGL までとは，消費電力が大きくなるということです．バッテリ動作さソフトウェア面から見てグラフィックスを描画するというこ

せる組み込み機器の場合，連続使用時間の短縮に直結しますとは，結局は VRAM に値を書き込むことに帰結します．C 言し，発熱もします．

語でいえば VRAM の存在するアドレスに *vram++ で書き込め

バスの飽和と CPU によるグラフィックス描画が重いという問題を解決するために，現在ではビデオ・コントローラをさらに高機
注3能にした専用のグラフィックス・チップが搭載されています

ばいいわけで，特別なテクニックは必要ありません．
しかし前述したとおりこれでは遅いのです．グラフィック．

ス・チップの専用コマンドを使って高速化するためには，グラまずバスの飽和の解決です．図 2（c）を見てください．決定

フィックス・チップ専用コマンドを発行するソフトウェアが必的に違うのが，VRAM がグラフィックス・チップの先につな要です．これらは一般的には，グラフィックス・チップのメーがっていることです．CPU から VRAM へ書き込む作業はこれカからライブラリの形で提供されるため，自分で書く必要はあまで通り CPU バスを通りますが，VRAM から読み出してディりません．

スプレイに表示するときは CPU バスを通りません．これによさ ら に そ の 上 に グ ラ フ ィ ッ ク ス 共 通 A P I（ A p p l i c a t i o nり，ディスプレイ表示中でも CPU は（VRAM 以外の）RAM へ

Program Interface）である OpenGL を搭載するのが昨今のトレアクセスできます．

ンドです．OpenGL は，異なった CPU やグラフィックス・チップ

CPU によるグラフィックス描画が重いという問題は，グラでも，同じソース・コードで画面描画できるように統一されたフィックス・チップの高機能化で解決します．CPU からグラAPI です．OpenGL を使って書かれていれば，（基本的には注 4）

フィックス・チップに対し，Windows パソコンであっても，組み込み機器であっても同じFILL(0,0,639,479)

プログラムでグラフィックス描画ができます．この場合，という命令を送ったときに，グラフィックス・チップがこれをOpenGL を理解するためのライブラリが必要になります．先ほ理解して VRAM を塗りつぶすようにします．そうすればグラどのグラフィックス・チップをからめて考えた場合，OpenGL

フィックス・チップが全力で VRAM を塗りつぶしている間，の API である glDrawArrays()などを理解して，グラフィッ

CPU はほかの仕事ができます．CPU は数命令実行するだけでクス・チップの専用コマンドを発行しています．

済み，バスも数クロック分使うだけです．

● GUI を実現するには専用のソフトウェアが必要

注 2 ：CPU とビデオ・コントローラが同時にアクセスできる「デュアル・ポート RAM」という特殊なメモリも存在する．ただし普通のメモリより高価．なお，FPGA である Spartan シリーズの内蔵ブロック・メ
モリはデュアル・ポート RAM であるため，この用途に便利（ただし容量があまり大きくない）．
注 3 ：ビデオ・コントローラとグラフィックス・チップという用語に明確な定義はないようだ．ここでは慣例に従って，ビデオ・コントローラ＝VRAM の内容をディスプレイへ転送する単純な IC，グラフィックス・チップ＝ビデオ・コントローラの機能に加えて描画高速化機能を追加したもの，としている．また，安価なグラフィックス・チップではVRAM を独立して用意せず，VRAM 以外の（普通の）RAM を VRAMとして使っている製品もあるし，逆にビデオ・コントローラでもVRAM がビデオ・コントローラの先につながっている製品もある．
注 4 ：ちょっと違う．詳細は第 6 章の EGL の解説を参照のこと．

画機能では，単に「点を打つ」，「画面を塗りつぶす」ということGUI もソフトウェアで実現します．単純なグラフィックス描38しかできません．GUI を実現するためには「ボタンを表示する」のような機能が必要です．これは「ボタンを表示する」というAPI を用意し，これが呼ばれたら点を打つことによってボタンを表示するというライブラリが必要になります．GUI を実現するためにはこのような API を作り込む必要があります．
＊＊＊

グラフィックス機能の基本的な知識を習得するには第 1 章と第 2 章を，グラフィックスのためのハードウェア知識は第 3 〜5 章を，OpenGL については第 6 章，グラフィックスを使ったGUI の構築は第 7 章で解説しています．

Aug. 2009