CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

メモリチェック

トランスピュータボードはパタンミスが発覚してショック大なので少し冷却期間おきます。その間に海外通販で入手したあやしいSRAMの動作確認をしてみました。

以前作成したMCS51-Rev0ボードは256kbitSRAMのスキニータイプを使うのでこれを差し替えてみます。いままでオーバースペックのHM62832UHLP-15を使っていたので差し替えで一応シルクの表記と合致しました

MCS51-Rev0ボードでは256kbitSRAMがコード空間データ空間共用の0x8000-0xFFFF領域にマップされます。メモリ交換後もモニタが起動してラージモデルのテストプログラムが動作したのでおそらくこの領域のRAMは機能しているようです。

ですが念のためSRAMの全領域をチェックしてみました。

ところで効率的なメモリチェックはどのようにやればよいでしょうか。一般的には1アドレスごとにチェッカフラグ(0x55/0xAA)やインクリメントデータを書込み、読出し、ベリファイなんでしょうがこれはビット抜けは検知できますがアドレス抜けは見逃す可能性があります。(どのメモリセルに書いて読んでるかわからないので)あやしいメモリが容量詐称してるかもしれません

そこでSRAMの全領域(0x8000-0x8FFFはプログラム自身のために確保して実際は0x9000-0xFFFFの28kbyte)に長周期の疑似乱数を書き込み、埋まってから読出しベリファイするチェックプログラムを走らせました。組込関数rand()srand()で同じrandom seedを与えれば全く同じ乱数列を発生するのでこの方法が使えます。

周期性、一様性については最初メルセンヌツイスターの生成ルーチンを入れてみたのですが結構ワークエリアを消費するので標準ライブラリ関数に差し替えました

 

random seedを変えたりして連続して動作させていますがエラーは全く発生しません。CPUはi8031のクロック12MHzなので結構速い方ですし件のSRAMは真贋はともかく動作は問題なさそうです