CRD(Cashe Residence Diagnostics)

 昔書いたような気もするけど整理のため思い出しつつ。

 CPUを製造した後、正常に動作するかどうかはベアチップ(ウェハーから切り出した裸のチップ)の状態でスキャンを行って各ゲートがちゃんとH/Lになるかどうかを確認する。スキャンの方法はJTAGで知られている。任意のFFをH/Lに設定することで各組み合わせ回路の入力に値を与え、その組み合わせ回路の出力を受けるFFの値を読み出して期待通りかどうかをチェックする。このパターンはチップリリース直前に論理設計者が作成してテストパターンとして製造部門に提供する。
 昔はこれでよかったのだがCPUが高速化していくと実動作(数百MHz〜GHzのオーダー)とスキャンの速度(KHzのオーダー)の差が大きくて実動作の周波数でないとでない故障を見逃すケースが出てきた。
 ではどうするか。実動作の周波数で動かすテストの手法としてCRD(Cashe Residence Diagnostics)というのがある。

 CRDではCPUが持つL1命令キャッシュ上にコードを書き込み、そこから命令を実行させることでテストを実現する。内蔵するキャッシュメモリにはスキャンで近傍のFFを操作して書き込むことができる。
 キャッシュはデータ部とタグ部で構成される。タグ部も命令キャッシュならValidに設定してやらないとちゃんと動作しない。なぜならInvalidだとCPUの外にアクセスが出てしまい、ベアチップ状態では外部にメモリなどなにも接続していないためそこで止まってしまうからだ。ロード/ストア系のテストをする場合を同様でデータキャッシュのタグ部を設定してメモリへのライトバックなども含め外部にアクセスが出ない状態にしなければならない(具体的には主記憶とデータが一致している状態のExcusiveまたはShared)。

MESIプロトコルとMOESIプロトコル [コンピュータアーキテクチャの話]

CRDの手順を書くと以下のとおり:

(1)まず通常のスキャンによるテストをパスしたCPUを用意
(2)スキャンによりキャッシュメモリ(L1$タグ/データ)のR/Wテスト
(3)L1$タグ部の初期化(Shared)
(4)L1$データ部にテスト用コードを書き込み
(5)D1$タグ部の初期化(ExclusiveまたはShared)
(6)D1$データ部に期待値の書き込み
(7)レジスタ類を設定して命令実行開始
(8)特定の外部端子へのアクセスでテスト終了通知
(9)スキャンでキャッシュのデータ部に記録したテスト結果を確認

このうちキャッシュのタグ部/データ部の初期化はパリティなどを合わせるのも含まれる。省略したがL2$を持っていれば同様に処理。この時は二次キャッシュのタグを正しく設定しメモリアクセスが出ないようにする。

 このテストを行うとCPU内部に関して実使用と同等の動作周波数でテストすることができる。チップ外のアクセスに関してはCPUの動作周波数にくらべてバスやメモリアクセスなどは一桁遅いこと、通常のテストパターンを通っていることでまあ大丈夫と判断してパッケージに封入、必要ならばCPUソケット経由でより実機に近い環境でテストすればよい。


 なのでOSを介さず直接プログラミングすることをベアメタルとか言われると違和感があるのよね。そういうことでひとつ。





ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック