メモリ・リフレッシュ

**メモリ・リフレッシュ**（Memory_refresh）とは、情報を保存する目的で、コンピューター・メモリのある領域から定期的に情報を読み出し、読み出した情報を修正することなく直ちに同じ領域に書き換えるプロセスのことである。

コンピューター・メモリの中で最も広く使用されているタイプの半導体ダイナミック・ランダム・アクセス・メモリ（DRAM）の動作中に必要とされるバックグラウンド・メンテナンス・プロセスであり、実際、このクラスのメモリを特徴づけるものである。

## 概要
DRAMチップでは、メモリデータの各ビットは、チップ上の小さなコンデンサ上の電荷の有無として記憶される。時間が経つにつれて、メモリセルの電荷は漏れ出すため、リフレッシュされなければ、記憶されたデータは最終的に失われる。これを防ぐため、外部回路が定期的に各セルを読み出して書き換え、コンデンサの電荷を元のレベルに戻す。各メモリ・リフレッシュ・サイクルは、メモリセルの後続領域をリフレッシュするため、連続したサイクルですべてのセルを繰り返しリフレッシュすることになる。このプロセスは通常、メモリ回路によってバックグラウンドで自動的に実行され、ユーザーに意識されることは無い。リフレッシュ・サイクルが発生している間、メモリは通常の読み出しおよび書き込み動作に使用できないが、最新のメモリでは、このはメモリ動作を大幅に遅くするほど大きくない。

リフレッシュを必要としないメモリは、スタティック・ランダム・アクセス・メモリ（SRAM）と呼ばれる。SRAMメモリセルには4～6個のトランジスタが必要なのに対し、DRAMはトランジスタ1個とキャパシター1個であるため、SRAM回路はチップ上でより多くの面積を必要とする。その結果、SRAMチップのデータ密度はDRAMよりはるかに低くなり、SRAMのビット単価は高くなる。そのため、DRAMはコンピュータ、ビデオゲーム機、グラフィックカード、および大容量と低コストを必要とするアプリケーションのメインメモリに使用されている。メモリ・リフレッシュの必要性により、DRAMのタイミングと回路はSRAM回路よりもかなり複雑になるが、DRAMの密度とコストの利点はこの複雑さを正当化するものである。

## DRAMリフレッシュの仕組み
メモリが動作している間、各メモリセルは、メーカーが指定した最大リフレッシュ間隔（通常はミリ秒領域）内で、繰り返しリフレッシュされなければならない。リフレッシュは、データ・アクセスに使用される通常のメモリ動作（読み出しと書き込みのサイクル）ではなく、リフレッシュ・サイクルと呼ばれる特殊なサイクルを使用します。このサイクルは、メモリ回路内の別のカウンタ回路によって生成され、通常のメモリ・アクセスの間に挟まれる。

メモリチップ上の記憶セルは、行と列の矩形アレイに並べられている。DRAMの読み出しプロセスは破壊的で、行全体のメモリセルの電荷を除去するため、データを一時的に保持するために、センスアンプと呼ばれる専用のラッチ回路が、メモリセルの列ごとに1つずつチップ上に並んでいる。通常の読み出し動作では、データを読み出して保持した後、センスアンプがアクセスされた行 のデータを書き換えてから、1列のビットを出力に送る。つまり、チップ上の通常のリード動作は、メモリの行全体を並列にリフレッシュすることができ、リフレッシュ・プロセスを大幅に高速化することができる。通常の読み出しまたは書き込みサイクルはメモリ行をリフレッシュするが、通常のメモリ・アクセスは必要な時間内にすべての行をヒットさせることができないため、別のリフレッシュ・プロセスが必要になる。リフレッシュ処理では、通常の読み出しサイクルを使用するのではなく、時間を節約するために、リフレッシュ・サイクルと呼ばれる短縮サイクルが使用される。リフレッシュ・サイクルはリード・サイクルと似ているが、次の2つの理由により高速に実行される：

* リフレッシュには行アドレスだけが必要なので、列アドレスをチップ・アドレス回路に適用する必要はない。
* セルから読み出されたデータは、CPUに送るために出力バッファやデータバスに供給する必要はない。

リフレッシュ回路は、各セルが確実にリフレッシュされるように、リフレッシュ時間間隔内にチップ上の各行に対してリフレッシュ・サイクルを実行しなければならない。

### リフレッシュ回路の種類
初期のシステムでは、リフレッシュを実行するサブルーチンを実行する定期的な割り込みを起動するタイマーを使用して、マイクロプロセッサがリフレッシュを制御するものもあったが、これは、リフレッシュプロセスを停止してメモリ内のデータを失うことなく、マイクロプロセッサを一時停止したり、シングルステップにしたり、省エネのハイバネーションにしたりできないことを意味していた。そのため、最新のシステムでは、リフレッシュはメモリコントローラ内の回路によって処理され、チップ自体に組み込まれている場合もある。擬似スタティックRAM（PSRAM）などの一部の DRAM チップは、すべてのリフレッシュ回路がチップ上にあり、コンピュータの他の部分に関してはスタティック RAM のように機能する。

通常、リフレッシュ回路は、チップのロウ・アドレス・ラインに適用されるリフレッシュすべきロウのアドレスを含むリフレッシュ・カウンタと、ロウをステップ・スルーするためにカウンタをインクリメントするタイマーから構成される。次の2つのスケジューリング戦略が使用されている。

* バースト・リフレッシュ - すべての行がリフレッシュされるまで、一連のリフレッシュ・サイクルが次々と実行される。
* 分散リフレッシュ - リフレッシュ・サイクルは、メモリ・アクセスの間に一定間隔で実行される。

バースト・リフレッシュでは、メモリが利用できない期間が長くなるため、分散リフレッシュが最近のほとんどのシステム、特にリアルタイムシステムで使用されている。分散リフレッシュでは、リフレッシュ・サイクルの間隔は

: \text{refresh cycle interval} = \text{refresh time}\, / \,\text{number of rows}  \,

例えば、DDR SDRAMのリフレッシュ時間は64ms、行数は8,192行なので、リフレッシュ・サイクル間隔は7.8μsである。

最近の世代の DRAM チップには、内蔵のリフレッシュ・カウンタが搭載されており、メモリ制御回路は、このカウンタを使用することも、外部カウンタからロウ・アドレスを供給することもできる。これらのチップには、「列セレクト」（CAS）ラインと「行セレクト」（RAS）ラインの異なる信号パターンによって選択される、次の 3 つの標準的なリフレッシュ方法がある:

* 「RAS のみリフレッシュ」 – このモードでは、リフレッシュする行のアドレスがアドレス バス ラインによって供給されるため、メモリ コントローラーの外部カウンターとともに使用される。
* 「CBR（CAS before RAS refresh） - このモードでは、オンチップ・カウンタがリフレッシュされる行を追跡し、外部回路は単にリフレッシュ・サイクルを開始するだけである。このモードでは、メモリ・アドレス・バス・バッファをパワーアップする必要がないため、消費電力が少ない。ほとんどの最新コンピューターで使用されている。
* 「ヒドゥン・リフレッシュ」-これはCBRリフレッシュ・サイクルの代替バージョンであり、先行するリード・サイクルまたはライト・サイクルと組み合わせることができる。リフレッシュはデータ転送中に並行して行われるため、時間を節約できる。

2012年世代のDRAMチップ以降、「RASのみ」モードは廃止され、内部カウンタがリフレッシュの生成に使用されている。このチップには、コンピュータがスリープモードのときに使用するスリープモードが追加されており、オンチップ発振回路が内部リフレッシュサイクルを生成するため、外部クロックをシャットダウンすることができる。

### リフレッシュのオーバーヘッド
メモリがリフレッシュに費やす時間の割合（リフレッシュ・オーバーヘッド）は、次のように、システム・タイミングから計算できる。

: \text{refresh overhead} = \frac {\text{time required for refresh, ms}} {\text{refresh interval, ms}} \,

例えば、SDRAMチップの行数は213=8,192行、リフレッシュ間隔は64ms、メモリバスは133MHzで動作し、リフレッシュサイクルは4クロックサイクルかかる。リフレッシュ サイクルの時間は次のとおり

: \text{length of refresh cycle} = 4/f = \frac {4}{1.33(10^8)\,\text{Hz}} = 30\, \text{ns} \,
: \text{time required for refresh} = (\text{length of refresh cycle})(\text{rows}) = (30\, \text{ns})(8192) = 0.246\,\text{ms} \,
: \text{refresh overhead} = \frac {0.246\,\text{ms}}{64\, \text{ms}} =.0038 \,

そのため、リフレッシュ・サイクルにかかる時間は、メモリ・チップの時間の0.4％未満となる。SDRAMチップでは、各チップ内のメモリはバンクに分割され、並列にリフレッシュされるため、さらに時間が節約される。そのため、必要なリフレッシュ・サイクル数は、仕様書に記載されている1バンクの行数であり、2012年世代のチップでは8,192行に固定されている。

## リフレッシュ間隔
リフレッシュ動作間の最大時間間隔は、DRAM 技術ごとに JEDEC によって標準化されており、製造業者のチップ仕様に規定されている。通常、DRAM ではミリ秒、eDRAM ではマイクロ秒の範囲で、DDR2 SDRAM チップでは 64 ミリ秒である：20 リーク電流は、メモリセルキャパシタに蓄積される電荷とリーク電流の比率に依存します。メモリチップの世代が新しくなるごとにコンデンサの形状が縮小しているため、後世代のコンデンサが蓄える電荷量が少なくなっているにもかかわらず、DRAM のリフレッシュ時間は 1M チップでは 8ms、16M チップでは 32ms、256M チップでは 64ms と向上している。この改善は主に、リーク電流が大幅に少ないトランジスタの開発によって達成されている。リフレッシュ時間が長いということは、デバイスの時間のうちリフレッシュで占める割合が小さくなり、メモリアクセスに使える時間が増えることを意味する。以前のDRAMでは、リフレッシュのオーバーヘッドがチップ時間の最大10%を占めていましたが、最新のチップではこの割合は1%未満である。

半導体のリーク電流は温度とともに増加するため、高温時にはリフレッシュ時間を短縮する必要がある。DDR2 SDRAM チップには温度補償リフレッシュ構造があり、チップのケース温度が85°Cを超えると、リフレッシュ・サイクル時間を半分にする必要がある

ほとんどのDRAMメモリセルにおいて、読み出し可能な電荷値、ひいてはデータの実際の持続時間は、リフレッシュ時間よりもはるかに長く、最大で1～10秒である。しかし、トランジスタのリーク電流は、製造プロセスでのばらつきにより、同一チップ上の異なるメモリセル間で大きく異なる。ビットが1つも失われる前にすべてのメモリセルがリフレッシュされるようにするため、メーカーはリフレッシュ時間を保守的に短く設定しなければならない。

この頻繁な DRAM のリフレッシュは、スタンバイ・モードの低電力エレクトロニクス・デバイスが消費する総電力の 3 分の 1 を消費します。研究者たちは、温度補償リフレッシュ（TCR）やDRAMの保持を考慮した配置（RAPID）など、リフレッシュ速度を低減することで充電間のバッテリー駆動時間を延長するアプローチをいくつか提案している。実験によると、一般的な市販の DRAM チップにおいて、最悪の場合 64ms のリフレッシュ間隔を本当に必要とするセルはわずかであり、しかもその場合、指定された温度範囲の上限においてのみです。室温（例：24 °Cでは、同じ弱いセルを正しく動作させるために、500 ms に 1 回リフレッシュする必要がある。システムが最も弱い 1%のページの使用を避けることができれば、一般的な DRAM は、70 °Cでも、残りの 99% のページを正しく動作させるために、1 秒に 1 回リフレッシュするだけでよいことになる。いくつかの実験では、これら 2 つの補完的な技術を組み合わせ、室温で 10 秒のリフレッシュ間隔で正しい動作を実現している。

エラー・トレラントなアプリケーション（グラフィックス・アプリケーションなど）では、DRAMやeDRAMに保存された重要でないデータを、その保存期間よりも低いレートでリフレッシュすることで、わずかな品質低下でエネルギーを節約することができる。

## SRAM、DRAMのメモリ技術

### SRAM
もう一つの半導体メモリであるスタティック・ランダム・アクセス・メモリ（SRAM）では、データはキャパシタに電荷として格納されるのではなく、クロスカップリングされた一対のNOTゲートに格納されるため、SRAMはリフレッシュする必要がない。この2種類の基本的なメモリには長所と短所がある。スタティック・メモリは、電源が入っている間は永久的と考えることができる。つまり、一度書き込まれたメモリは、特別に変更されるまで保持されるため、システム設計上、その使用は単純になりがちである。しかし、各SRAMセルの内部構造は、DRAMセルに必要なトランジスタが1つであるのに対し、6つのトランジスタを必要とするため、SRAMの密度はDRAMよりはるかに低く、ビットあたりの価格はDRAMよりはるかに高くなる。

### CPUベースのリフレッシュ
初期のマイクロプロセッサ（Zilog Z80など）の中には、ダイナミック・メモリセルをリフレッシュするための行アドレス・ストローブ（RAS）を提供できる特別な内部レジスタを備えているものがあり、このレジスタはリフレッシュ・サイクルごとにインクリメントされる。これは、システムで既に使用されている他の集積回路が、RAM全体で既に循環アクセスを生成している場合（モトローラ 6845など）にも実現できる。Z80のようなCPUでは、RASリフレッシュが利用可能であることが、ハードウェア設計を単純化できることから、大きなセールスポイントとなっていた。ここで、RASリフレッシュは、動作上冗長なクロック・サイクル（Tステート）の間、すなわち、バスが必要とされない可能性のある命令デコード/実行中に、アドレス・ワイヤと制御ワイヤの独自の組み合わせによって通知される。このようなTステートの間、バスが非アクティブになる代わりに、リフレッシュ・レジスタが、リフレッシュ回路に指示するための制御線の組み合わせとともにアドレス・バス上に提示される。

Z80の初期バージョンでは、16 kB RAMチップ（つまり128行）が一般的で、先見の明がなかったため、Rレジスタは7ビット幅（0～127、つまり128行）でしかインクリメントできなかった。64kビット以上のDRAMチップ（8ビットRAS付き）が急速に登場したため、不足する8ビット目を合成し、数ミリ秒後にメモリ・ブロックが失われるのを防ぐために、リフレッシュ信号の周囲に余分な回路やロジックを構築する必要があった。文脈によっては、割り込みを利用して適切なタイミングで8ビット目を反転させ、Rレジスタの全範囲（256行）をカバーすることも可能であった。CPUからのリフレッシュ信号がこのカウンタのクロックとして使用され、その結果、リフレッシュされるメモリ行はリフレッシュ・サイクルごとにインクリメントされた。Z80コアの後のバージョンとライセンスされた互換CPUによって、自動サイクルに8ビット目が含まれないように改善され、最近のCPUは、このような基本的なプロビジョニングを大幅に拡張して、DRAMリフレッシュのための豊富なオールインワン・ソリューションを提供している。

### 疑似スタティックDRAM
疑似スタティックRAM（PSRAMまたはPSDRAM）は、スタティックRAM（SRAM）と同様の動作をさせるためのリフレッシュ回路とアドレス制御回路を内蔵したダイナミックRAMである。DRAMの高密度性と、真のSRAMの使いやすさを兼ね備えている。PSRAM（ニューモニクス社製）は、アップル社のiPhoneやその他の組み込みシステムに使用されている。

一部の DRAM コンポーネントには「セルフ・リフレッシュ・モード」があり、これには擬似静的動作に必要なロジックと同じものが多く含まれるが、このモードはスタンバイ・モードと同等であることが多い。これは主に、DRAMに保存されたデータを失うことなく電力を節約するために、システムがDRAMコントローラの動作を一時停止できるようにするためのものであり、PSRAMのように独立したDRAMコントローラなしで動作できるようにするためのものではない。PSRAMの組み込み型は、MoSys社から1T-SRAMという名前で販売されている。これは技術的にはDRAMだが、SRAMによく似た動作をし、ゲームキューブやWiiコンソールで使われている。

## リフレッシュをともなうメモリ技術
初期のコンピュータ・メモリ技術の中にも、メモリのリフレッシュと同じような目的で定期的なプロセスを必要とするものがいくつかあった。ウィリアムス管は、DRAMと同様、本質的に容量性メモリであり、リフレッシュしない限り、各ビットに格納された値は徐々に減衰するため、最も類似性が高い。

磁気コアメモリでは、電源を切っても各メモリセルはデータを無期限に保持できるが、どのメモリセルからでもデータを読み出すとその内容は消去される。その結果、メモリコントローラは通常、各の後にリフレッシュ・サイクルを追加し、非破壊読み出し動作のような錯覚を起こさせる。

遅延記憶装置は、データが実際には伝送線路に信号として格納されているため、常にリフレッシュが必要である。この場合、リフレッシュ・レートはアクセス時間に該当する。

## 脚注・参考文献

## 関連項目

* 
* ロウハンマー