コンピュータアーキテクチャの話 (325) エラーの検出方法
○エラーを検出するコード
エラーを検出するためには、エラーが起こると正常なデータとは異なるデータになってしまうように正常なデータを作っておく。例えば、元のデータに1ビットを追加して、追加のビットの値を、全体の"1"のビットの数が偶数になるように選ぶという規則とする。
このデータをメモリに書き込んで、それを読み出した時に、全体の"1"の数が奇数になっていたら、どこかのビットが反転したということが分かる。このやり方をパリティチェックと言う。2ビットが反転してしまうと、全体の"1"の数は偶数に戻ってしまうので、エラーを検出しそこなってしまうが、1ビットのエラーであれば、必ず検出できる。
より強力な検出方法としてCRC(Cyclic Redundancy Check)という方法がある。元のデータが72ビットある場合、最初のビットをx71の係数、次のビットをx70の係数、…x1の係数、x0の係数と考える。そして、図3.11に示すように、GDDR5で使われているCRC-8-ATMの場合は、データビットを係数とする多項式をx8+x2+x+1で割った余りをチェックビットとして付ける。
ただし、係数は0か1の2進数であるので0-1は1になるとして計算する。