外部フラッシュROMの使い方
一般的な組み込み用のフラッシュワンチップマイコンは内部Flashメモリによりプログラム不揮発を実現しています。ProASIC3中に構築したCortex-M1の場合、外部に安価なFlashROMを接続することにより、この機能が実現できます。
一般にFlashROMチップはなにもしないと、ROMのように振る舞い、特定のアドレスに対して決まったパタンを書き込みこむことによってチップイレースやデータの書き込み、プロテクトの設定などが可能になります。この操作方法は、FlashROMチップによって微妙に異なっていて、フラッシュワンチップマイコンのプログラム用メモリのように、JTAGICE(FlashPro3等)で直接書き込むことはできません。(SoftConsole Ver.2.3からはFusionの内部Flash、一部のFlashROMチップの直接書き込みが可能になった)
Actel社のスターターキットの場合は、通常はRAMベースで開発を行い、そのあと、FlashROM 書き込み用のハード構成にFPGAを1度書き換え、そのドライブソフトとの組み合わせでFlashROMへの書き込みを行いプログラムを不揮発にしていました。Flashに書き込み回数は有限ですし、書き込み時間(実際に時間がかかるのは消去時間)もかかりますので、理想的ですが、試験的に触ってみる場合には面倒です。
リマップ機能をうまくつかえばこのあたりの使い勝手を改善することができます。つまり、アプリケーションソフトそのものに簡単なFlash書き込み機能をもたせ、リマップ状態をみて、スタート領域がRAMなら自分自身をFlashに書き込んで停止する、Flashならコピー作業は行わず、アプリケーション本体を実行するという流れにします。ただしこの場合、スターターキットの方法よりも、プログラムのオーバーヘッドが発生します。また、FlashROM自体の動作チェックはRemap機能を使わなくともFPGAボード単独でも可能です。
また、用意するフラッシュROMは32bitでなくとも、16bit分でokです
参考:Coretx-M1 は 16ビットCPU?サンプルのC言語プログラムを示します。リストはタイマ割り込みを使ったストップウォッチです。リストでは最初にCoreRemapを読み出して、リマップの状況をしらべ、RAM上で実行中なら自分自身をFlashROMへコピーして停止するようにしています。
参考:prg02.c