エラーによる誤動作を防ぐ方法の1つが、中性子がヒットしてもエラーが起こりにくいラッチやフリップフロップを使うという方法である。

前述したゲート出力に発生するノイズ電圧は、吸収される電子の電荷量をゲート出力の寄生容量で割った値(V=Q/C)となる。このため、ゲート出力に配線やトランジスタのゲート領域を接続して寄生容量を増やしてやれば、容量に逆比例してノイズは減少する。このようにして寄生容量を増やしたラッチを作ると、中性子ヒットによるエラー率を下げることができるが、負荷容量が大きくなるので、動作速度が遅くなる、スイッチにともなう消費電力が増えるというコストがかかる。なお、ドレインの面積を増やしても寄生容量を増やすことができるが、中性子ヒットで発生する電子を吸収する面積が増えて吸収する電荷も増えてしまうので、エラー率はあまり改善されない。

これに対して、2つのラッチで情報を2重化して記憶することで、一方のノードにノイズが載って情報が反転しても、正しい記憶状態を回復できるラッチ回路が考案されている。図1.17に示すBISERと呼ぶフリップフロップはこのような回路の一例である。

図1.17 BISERフリップフロップ

図1.18に示したCエレメント(C Element)は、P-TrとN-Trを縦積みした回路の出力にループになったインバータで作られたラッチが付くという構造になっている。

図1.18 C Elementの回路構成

両方の入力が同じ値の場合は両方のP-Tr、あるいは両方のN-Trがオンになり出力値が決まる。この回路の出力に接続されているラッチを構成するループバック側のインバータは小さな弱いインバータであるので、縦積み回路の出力の方が状態を決定してしまうようになっている。そして、もう一方の普通サイズのインバータを通してデータを出力する。つまり、 Cエレメントは入力をそのまま出力する。

一方、2つの入力が異なる場合は、P-TrもN-Trもどちらか一方がオフになり、Cエレメントの縦積み回路の出力はフロートになる。この状態では出力に接続されたラッチが以前の状態を保持する。つまり、Cエレメントは、2つの入力が異なる場合は以前の状態を出力し続け、両方とも同じ入力が入った場合はその値を出力するという機能の回路となっている。