ソフト・マクロのCPUでLinuxを動かす(前編) ――FPGAベースのボード・コンピュータを設計する
● メモリ
メモリ・マップを表1に示します.SDRAMを中間部分に独立させたのは,SDRAMの容量が変化してもほかの機能に影響を与えないようにするためです.
1)FPGA内蔵メモリ(BRAM)
ブート・プログラムはFPGAの内蔵メモリ(BRAM;Block RAM)に格納します.FPGAコンフィグレーション・データといっしょに再プログラミングを行い,容易に復旧することできるためです.なんらかの原因で動作に問題が起こっても,再コンフィグレーションすることでブート・プログラムを復活させることができます.
容量は4Kバイトとしました.最近のFPGAは内蔵メモリの容量が増えてきていますが,プログラムを納めるには十分とは言えません.ブート・プログラムのための容量を必要以上に指定すると,同じBRAM領域を使って構成するキャッシュ・メモリやFIFOメモリなどの容量が減ってしまいます.分配の際には注意が必要です.
BRAMには,FPGAのコンフィグレーション時に初期値が書き込まれるので,ROMのように使用できますが,実体はSRAMであり,書き換えが可能です.システム起動完了後は,先頭の32バイト(割り込みベクタ領域)以外であれば,ユーザ・プログラムのために使用することもできます.
2)フラッシュ・メモリ
フラッシュ・メモリには,Linuxシステムやアプリケーション・プログラム,FPGAコンフィグレーション・データを格納しています.
LinuxカーネルとユーザランドおよびFPGAコンフィグレーション・データのために2Mバイトを割り当てています.したがって,残りの2Mバイトは自由に使用できます.
FPGAとのインターフェースとしてOPB EMC(External Memory Controller)を使用しています.
表1 メモリ・マップ
アドレス
|
機能ブロック
|
接続デバイス
|
0x0000 0000 ~ 0x0000 0FFF
|
BRA |
―
|
0x8000 0000 ~ 0x80FF FFF
|
OPB SDRAM コントローラ | SDRAM |
0xFF00 0000 ~ 0xFF7F FFFF
|
OPB EMC | フラッシュ・メモリ |
0xFFE0 0000 ~ 0xFFEF FFFF
|
OPB EMC | LANコントローラ |
0xFFFF 1000 ~ 0xFFFF 10FF
|
OPBタイマ |
―
|
0xFFFF 2000 ~ 0xFFFF 20FF
|
OPB UART Lite |
―
|
0xFFFF 3000 ~ 0xFFFF 30FF
|
OPB割り込みコントローラ |
―
|
0xFFFF A000 ~ 0xFFFF A0FF
|
OPB GPIO |
―
|