L1命令メモリはBlackfinコアが実行する命令を格納するためのメモリです。このメモリは非常に高速で、コアと同じ速度で動作し、常にストールなし(レイテンシ=1)でフェッチできます。
図1にBF533のL1命令メモリの概要を示します。BF533のL1命令メモリは16KBのキャッシュと64KBのSRAMからなります。キャッシュもSRAMも16KBを単位とするバンクを構成しています。Blackfinアーキテクチャーではメモリーの増設はバンク単位になっています。たとえばBF532のL1メモリはキャッシュが1バンク、SRAMが1バンクしかありません。下の図と比べてみてください。
図1 BF533のL1命令メモリ
BF533は16KBの命令SRAMバンクを4つ持っており、全部で64KBのL1命令SRAMを構成します。BlackfinコアはL1命令SRAMの中のデータをフェッチすることはできますが、転送命令を使ってデータを読み書きすることはできません。プログラムで無理やりアクセスしようとすると例外が発生します。このままではプログラムをロードできませんので、プログラムのロードはDMAで行います。DMAによる転送は常に自動的に専用のDMAバスが使用されます。
BF533は16KBの命令キャッシュを1つ持っています。このキャッシュは4ウェイのセット・アソシアティブ・キャッシュとして働くほか、16KBのSRAMとして動作するよう設定することもできます。キャッシュとして使う場合はDMA転送はできなくなります。
キャッシュの動作は汎用マイクロプロセッサのそれと同じです。外部メモリにプログラムを置く場合にはL1命令キャッシュが速度低下を効果的に防いでくれます。
プログラムが大きくなりすぎて外部と内部のメモリに分けて配置しなければならない場合、プログラムのどの部分をどこに配置するかは悩ましい問題です。一般には以下の指針に従えばかなり満足できるはずです。
信号処理アルゴリズムを外部メモリに置くのは意外に感じるかもしれません。この手のアルゴリズムは汎用プロセッサが実行する制御コードと違ってワーキング・セットが小さいため、キャッシュの効果が高く現れます。ですから、特に問題なければ外部メモリに置くほうがお得ということになります。