つながるワイヤレス通信機器の開発手法(15) ――プロトタイプを開発する
● メモリ領域は三つに分割する
図1(b)ではメモリを三つ(ROM1,ROM2,RAM)に分けているが,物理的にではなく機能面で分割した.ROM1は,モニタやブート・プログラムを書き込む領域である.ROM2は,モニタとブート・プログラム以外のOSやアプリケーション・プログラムを実装する領域である.RAMは,プログラムで使用される作業用メモリの領域である.
デバッグの手法にもよるが,例えば,電源ON直後にROM1に格納されているプログラムが走り,そのあとROM2のプログラムを実行させるように設計する.そして,ROM1の領域には,ROM2のプログラムを書き換えるためのプログラムとUART通信用のプログラムを搭載しておく.こうすることで,ROM2のプログラムを容易にアップデートすることができる.
なお,プログラムのダウンロードには,JTAGインターフェースもUARTも使われている.ハードウェアなどの制約事項から考えるとUARTを使用するほうが簡単だが,JTAGと比べて書き込める領域などに関する制限が多い.
また,ROM1の領域は電源ON時に確定しておく必要がある.そのため,CPU内蔵ROMや外付けのマスクROM,またはフラッシュ・メモリのブート領域にROM1の領域のプログラムを書き込んでおく.フラッシュ・メモリのブート領域へは,ボードに実装する前にROMライタでプログラムを書き込むのが一般的である.
図1(b)のランダム論理は,ユーザが設計する部分である.ASICの場合,図1(b)のような専用ポートはない.一方,FPGAの場合は,専用ポートと専用ハードウェアによって回路のコンフィグレーションや内部状態のモニタを行う.製品になるとダウンロード・ケーブルをつないで回路情報をダウンロードするわけにはいかないので,回路情報を書き込んだROMをボード上に搭載する.電源ON直後にそのROMから回路データを読み出すことで,ランダム論理の機能を実現する.