最悪の場合

外部SDRAMを使わず、外部PROM上で直接命令を実行していると考えてください。当然、キャッシュをオンにしておきます。

今、偶然キャッシュがミスヒットして外部ROMからのキャッシュ・バースト・フィルが始まりました。ここで割り込みが発生するとどうなるでしょうか。キャッシュのバースト・フィルが終わるまで割り込みは待たされるのでしょうか。

答えは「待たされない」です。キャッシュのバースト・フィルはキャッシュがおこなう作業であり、EABを通しておこなわれます。一方、ミスヒットを起こしたのはBlackfinのプリフェッチからの要求です。割り込みが受理されるとプリフェッチ中の命令はキャンセルされるため、プロセッサはフェッチ・パスをいったん開放して割り込みハンドラの先頭アドレスに対してプリフェッチをかけます。この作業は先のバースト・フィルとは独立しています。同様に、メモリー・ロードによるミスヒットが発生しても、バースト・フィル中に割り込みが発生するとメモリー・ロードがキャンセルされます。なぜならそれは投機的ローディングだからです。

当然、割り込みハンドラが外部ROMにあったりすると元の木阿弥です。バースト・フィルは64バイト長であり、16ビットROMの場合32トランザクションです。アクセス時間が100nSなら、最大3.2uS待たされることになります。3.2uS!! 600MHzなら2000命令実行できる時間です。

なんてもったいない!

いえいえ。実はそうでもありません。そもそも100nSのメモリー上で命令を実行すると、その性能は高々10MIPSです。はなっから遅いんですね。結局、割り込みハンドラのようなクリティカルなコードは内部メモリに置きましょうというお話です。

Blackfin空挺団 | プログラム | EZ-KIT | コア&ペリフェラル | TOPPERS/JSP | こぼれ話 | DSP掲示板