(57)【特許請求の範囲】
【請求項１】
不揮発性記憶部と、前記不揮発性記憶部を制御するコントロール回路と、前記コントロール回路を制御するＭＰＵと、ホストとの通信を行うインタフェース回路を備えるメモリシステムにおいて、
前記コントロール回路は、
リードイネーブル信号を前記不揮発性記憶部に出力してデータを読み出す読み出し手段と、
前記リードイネーブル信号を帰還させた信号を遅延させてクロックとして出力する遅延手段と、
前記遅延手段から出力されるクロックを使用して、前記不揮発性記憶部から読み出したデータをラッチして出力するラッチ手段と、
を備えたことを特徴とするメモリシステム。
【請求項２】
前記遅延手段は、遅延量を可変設定可能であることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記遅延手段は、
任意に設定可能なレジスタ手段と、
直列接続された複数の遅延素子と、
前記レジスタ手段のレジスタ値に基づいて、前記複数の遅延素子のうち接続する遅延素子を選択して、遅延量を選択する選択手段と、
を備えたことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記レジスタ手段のレジスタ値は、前記ＭＰＵが設定することを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記コントロール回路、前記ＭＰＵ、前記インタフェース回路、および前記コントロール回路を実装するＡＳＩＣ上で、前記リードイネーブル信号を帰還させることを特徴とする請求項１または請求項２に記載のメモリシステム。
【請求項６】
前記ＡＳＩＣおよび前記不揮発性記憶部を搭載するシステム基板上で、前記リードイネーブル信号を帰還させることを特徴とする請求項１または請求項２に記載のメモリシステム。
【請求項７】
製造時のトリミング検査を行い、検査結果に基づいて、前記遅延手段の遅延量を設定するトリミング検査手段を備えたことを特徴とする請求項２〜請求項４のいずれか１つに記載のメモリシステム。
【請求項８】
前記トリミング検査手段は、
トリミングデータを前記不揮発性記憶部に書き込むトリミングデータ書き込み手段と、
前記遅延手段の遅延量を変更しながら、前記不揮発性記憶部に書き込んだトリミングデータを読み出して、書き込んだトリミングデータと読み出したトリミングデータとのデータコンペアを行う比較手段と、
前記データコンペア結果に基づいて、前記遅延手段の遅延量を決定する遅延量決定手段と、
を備えたことを特徴とする請求項７に記載のメモリシステム。
【請求項９】
前記トリミング検査手段は、
トリミングデータに誤り訂正符号を付加して、前記不揮発性記憶部に書き込むトリミングデータ書き込み手段と、
前記遅延手段の遅延量を変更しながら、前記不揮発性記憶部に書き込んだトリミングデータを読み出し、読み出したトリミングデータに前記誤り訂正符号を用いて誤り訂正を行う誤り訂正手段と、
前記誤り訂正手段の誤り訂正結果に基づいて、前記遅延手段の遅延量を決定する遅延量決定手段と、
を備えたことを特徴とする請求項７に記載のメモリシステム。
【請求項１０】
前記トリミング検査手段は、
トリミングデータに誤り訂正符号を付加して、前記不揮発性記憶部に書き込むトリミングデータ書き込み手段と、
前記遅延手段の遅延量を変更しながら、前記不揮発性記憶部に書き込んだトリミングデータを読み出し、読み出したデータに誤り訂正を行う誤り訂正手段と、
前記誤り訂正手段の誤り訂正ｂｉｔ数が許容範囲内の場合に、書き込んだトリミングデータと読み出したトリミングデータとのデータコンペアを行う比較手段と、
前記データコンペア結果に基づいて、前記遅延手段の遅延量を決定する遅延量決定手段と、
を備えたことを特徴とする請求項７に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体記憶装置を用いて構成されるメモリシステムに関する。
【背景技術】
【０００２】
コンピュータシステムに用いられる外部記憶装置として、フラッシュメモリ（フラッシュＥＥＰＲＯＭ）を搭載したメモリシステムとしてＳＳＤ（Solid State Drive）が注目されている。フラッシュメモリは、磁気ディスク装置に比べ、高速、軽量などの利点を有している。
【０００３】
ＳＳＤ内には、複数のフラッシュメモリチップ、ホスト装置からの要求に応じて各フラッシュメモリチップのリード/ライト制御を行うコントローラ、各フラッシュメモリチップとホスト装置との間でデータ転送を行うためのバッファメモリ、電源回路、ホスト装置に対する接続インタフェースなどを備えている（例えば、特許文献１）。
【０００４】
しかしながら、ＳＳＤを設計する場合、コントローラチップのＰｉｎ数や実装面積が限られた中で、データ容量を増やすために、メモリＣｈｉｐを複数枚Ｓｔａｃｋ（積層）したＳｔａｃｋ品を使用する必要がある。かかるＳｔａｃｋ品では、内部でＩＯ信号線および制御信号線をメモリＣｈｉｐ数分纏めた形となり、各信号線の負荷容量もＳｔａｃｋしたメモリＣｈｉｐ数につれて大きくなる。
【０００５】
各信号線の負荷容量が大きくなると、ＩＯ信号および制御信号のＣＲ遅延による遅れが生じ、同期設計したコントローラを使用した場合、低負荷（Ｓｔａｃｋ数：少）ではメモリからの読み取りデータをラッチして出力できるが、高負荷（Ｓｔａｃｋ数：多）ではＣＲ遅延によってメモリから読み出したデータの遅延のため、ラッチして出力できないおそれがある。
【０００６】
【特許文献１】特許第３６８８８３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上記課題に鑑みてなされたものであり、不揮発性記憶部の信号線の負荷容量が増大した場合においても、不揮発性記憶部からデータを読み出して確実に出力することが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、不揮発性記憶部と、前記フラッシュメモリを制御するコントロール回路と、前記コントロール回路を制御するＭＰＵと、ホストとの通信を行うインタフェース回路を有するメモリシステムにおいて、前記コントロール回路は、リードイネーブル信号を前記フラッシュメモリに出力してデータを読み出す読み出し手段と、前記リードイネーブル信号を帰還させた信号を遅延させてクロックとして出力する遅延手段と、前記遅延手段から出力されるクロックを使用して、前記フラッシュメモリから読み出したデータをラッチして出力するラッチ手段と、を備えたことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、リードイネーブル信号を帰還させた信号を遅延させたクロックを使用して、不揮発性記憶部から読み出したデータをラッチして出力することとしたので、不揮発性記憶部の信号線の負荷容量が増大した場合においても、不揮発性記憶部からデータを読み出して確実に出力することが可能なメモリシステムを提供することが可能となるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
以下に、この発明につき図面を参照しつつ詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、下記実施例における構成要素には、当業者が容易に想定できるものまたは実質的に同一のものが含まれる。
【００１１】
本実施例のメモリシステムは、不揮発性半導体記憶装置を含み、たとえば、パーソナルコンピュータなどのホスト装置の２次記憶装置（ＳＳＤ：Solid  State  Drive）として使用され、ホスト装置から書込要求が出されたデータを記憶し、またホスト装置から読出要求のあったデータを読出してホスト装置に出力する機能を有する。
［ＳＳＤの構成例］
【００１２】
図１は、ＳＳＤ１００の構成例を示すブロック図である。ＳＳＤ１００は、システム基板に搭載されたＡＳＩＣおよびＮＡＮＤメモリ１０で構成されている。また、ＡＳＩＣには、ドライブ制御回路４，電源回路５，ＤＲＡＭ２０が搭載されている。
【００１３】
ＳＳＤ１００は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）２などのメモリ接続インタフェースを介してパソコンあるいはＣＰＵコアなどのホスト装置（ホスト）１と接続され、ホスト装置１の外部メモリとして機能する。また、ＳＳＤ１００は、ＲＳ２３２Ｃインタフェース（ＲＳ２３２Ｃ  Ｉ／Ｆ）３などの通信インタフェースを介して、デバッグ用機器２００との間でデータを送受信することができる。ＳＳＤ１００は、不揮発性メモリとしてのＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリと略す）１０と、コントローラとしてのドライブ制御回路４と、揮発性メモリとしてのＤＲＡＭ２０と、電源回路５と、状態表示用のＬＥＤ６などを備えている。
【００１４】
電源回路５は、ホスト装置１側の電源回路から供給される外部直流電源から複数の異なる内部直流電源電圧を生成し、これら内部直流電源電圧をＳＳＤ１００内の各回路に供給する。また、電源回路５は、外部電源の立ち上がりまたは立ち下がりを検知し、パワーオンリセット信号またはパワーオフリセット信号を生成して、ドライブ制御回路４に供給する。
【００１５】
ＮＡＮＤメモリ１０は、４ＣｈのＮＡＮＤメモリパッケージ１０ａ〜１０ｄを有する。１つのＮＡＮＤメモリパッケージは、積層された複数のＮＡＮＤメモリチップ（以下、「Ｃｈｉｐ」と称する）によって構成されている。図１に示す例では、例えば、ＮＡＮＤメモリパッケージ１０ａは、８枚のＣｈｉｐ０〜７（例えば、１Ｃｈｉｐ＝１６ＧＢ）がＳｔａｃｋされた８ＳｔａｃｋＣｈｉｐ１０ａ１と、８枚のＣｈｉｐ８〜１５がＳｔａｃｋされた８ＳｔａｃｋＣｈｉｐ１０ａ２とを備え、他のＮＡＮＤメモリパッケージ１０ｂ〜ｄも同様に、２組の８ＳｔａｃｋＣｈｉｐを備えており、ＮＡＮＤメモリ１０は１２８ＧＢの容量を有する。４ＣｈのＮＡＮＤメモリパッケージ１０ａ〜１０ｄは、４並列動作が可能となっている。
【００１６】
ＤＲＡＭ２０は、ホスト装置１とＮＡＮＤメモリ１０間でのデータ転送用キャッシュおよび作業領域用メモリとして機能する。ドライブ制御回路４は、ホスト装置１とＮＡＮＤメモリ１０との間でＤＲＡＭ２０を介してデータ転送制御を行うとともに、ＳＳＤ１００内の各構成要素を制御する。また、ドライブ制御回路４は、状態表示用ＬＥＤ６にステータス表示用信号を供給するとともに、電源回路５からのパワーオン／オフリセット信号を受けて、リセット信号およびクロック信号を自回路内およびＳＳＤ１００内の各部に供給する機能も有している。
【００１７】
各ＮＡＮＤメモリチップは、データ消去の単位であるブロックを複数配列して構成されている。図２は、ＮＡＮＤメモリチップに含まれる１個のブロックの構成例を示す回路図である。各ブロックは、Ｘ方向に沿って順に配列された（ｍ＋１）個のＮＡＮＤストリングを備えている（ｍは、０以上の整数）。（ｍ＋１）個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。また、選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【００１８】
各メモリセルトランジスタＭＴは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（metal oxide semiconductor field effect transistor）から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（浮遊ゲート電極）、及び電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタＭＴは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタＭＴは、１ビットを記憶するように構成されていてもよいし、多値（２ビット以上のデータ）を記憶するように構成されていてもよい。
【００１９】
各ＮＡＮＤストリングにおいて、（ｎ＋１）個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、複数のメモリセルトランジスタＭＴは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でＹ方向に直列接続される。
【００２０】
そして、最もドレイン側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬｎにそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワード線ＷＬｎに接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【００２１】
ワード線ＷＬ０〜ＷＬｎは、ブロック内のＮＡＮＤストリング間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワード線ＷＬに接続される。この同一のワード線ＷＬに接続される（ｍ＋１）個のメモリセルトランジスタＭＴは１ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
【００２２】
また、ビット線ＢＬ０〜ＢＬｍは、ブロック間で、選択トランジスタＳＴ１のドレインを共通に接続している。つまり、複数のブロック内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００２３】
図１に示したように、ＮＡＮＤメモリ１０においては、４つの並列動作要素であるＮＡＮＤメモリパッケージ１０ａ〜１０ｄが各８ビットの４チャネル（４Ｃｈ）を介してドライブ制御回路４に並列接続されている。４つのＮＡＮＤメモリパッケージ１０ａ〜１０ｄを単独動作させるか、並列動作させるか、ＮＡＮＤメモリ１０の倍速モードを使用するか否か、という組み合わせにより、下記３種類のアクセスモードが提供される。
（１）８ビットノーマルモード
１Ｃｈだけ動作させ、８ビット単位で読み書きをするモードである。転送サイズの１単位はページサイズ（４ｋＢ）である。
（２）３２ビットノーマルモード
４Ｃｈ並列で動作させ、３２ビット単位で読み書きをするモードである。転送サイズの１単位はページサイズ×４（１６ｋＢ）である。
（３）３２ビット倍速モード
４Ｃｈ並列で動作させ、更に、ＮＡＮＤメモリ１０の倍速モードを利用して読み書きをするモードである。転送サイズの１単位はページサイズ×４×２（３２ｋＢ）である。
【００２４】
４Ｃｈ並列動作する３２ビットノーマルモードまたは３２ビット倍速モードでは、並列動作する４または８ブロックが、ＮＡＮＤメモリ１０としての消去単位となり、並列動作する４または８ページが、ＮＡＮＤメモリ１０としての書き込み単位及び読み出し単位となる。
【００２５】
図３は、ドライブ制御回路４のハードウェア的な内部構成例を示すブロック図である。ドライブ制御回路４は、データアクセス用バス１０１、第１の回路制御用バス１０２、及び第２の回路制御用バス１０３を備えている。第１の回路制御用バス１０２には、ドライブ制御回路４全体を制御するプロセッサ１０４が接続されている。第１の回路制御用バス１０２には、ＮＡＮＤメモリ１０に記憶された各管理プログラム（ＦＷ：ファームウエア）をブートするブート用プログラムが格納されたブートＲＯＭ１０５がＲＯＭコントローラ１０６を介して接続されている。また、第１の回路制御用バス１０２には、図１に示した電源回路５からのパワーオン／オフリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ１０７が接続されている。
【００２６】
第２の回路制御用バス１０３は、第１の回路制御用バス１０２に接続されている。第２の回路制御用バス１０３には、図１に示した状態表示用ＬＥＤ６にステータス表示用信号を供給するパラレルＩＯ（ＰＩＯ）回路１０８、ＲＳ２３２Ｃ  Ｉ／Ｆ３を制御するシリアルＩＯ（ＳＩＯ）回路１０９が接続されている。
【００２７】
ＡＴＡインタフェースコントローラ（ＡＴＡコントローラ）１１０、第２のＥＣＣ（Error  Check and Correct）回路１１１、ＮＡＮＤコントローラ１１２、及びＤＲＡＭコントローラ１１３は、データアクセス用バス１０１と第１の回路制御用バス１０２との両方に接続されている。ＡＴＡコントローラ１１０は、ＡＴＡインタフェース２を介してホスト装置１との間でデータを送受信する。データアクセス用バス１０１には、データ作業領域として使用されるＳＲＡＭ１１４がＳＲＡＭコントローラ１１５を介して接続されている。ＳＲＡＭ１１４には、ＮＡＮＤメモリ１０に記憶されているファームウエアが起動時、ブートＲＯＭ１０５に記憶されたブート用プログラムによって転送される。
【００２８】
ＮＡＮＤコントローラ１１２は、ＮＡＮＤメモリ１０の各ＮＡＮＤメモリパッケージ１０ａ〜１０ｄとのインタフェース処理を行うＮＡＮＤ  Ｉ／Ｆ１１６、第１のＥＣＣ回路１１７、ＮＡＮＤメモリ１０−ＤＲＡＭ２０間のアクセス制御を行うＤＭＡ転送制御用ＤＭＡコントローラ１１８、およびプロセッサ１０４により制御データが書き込まれる制御レジスタ１１９を備えている。
【００２９】
ＮＡＮＤメモリ１０にデータを書き込む場合は、第１のＥＣＣ回路１１７は、書き込み対象のデータに対して、所定単位データＤ（例えば、５１２Ｂ）毎に、誤り検出符号（例えば、ＣＲＣ３２）および１ｂｉｔの訂正能力がある第１の誤り訂正符号（例えば、ハミング符号）を生成して付加する。また、第１のＥＣＣ回路１１７は、８個の単位データＤ毎に、複数ｂｉｔ（例えば、４８ｂｉｔ）の訂正能力がある第２の誤り訂正符号（例えば、ＢＣＨ符号）を生成して付加する。誤り検出符号および第１の誤り訂正符号が付加されたデータがＮＡＮＤ  Ｉ／Ｆ１１６によりＮＡＮＤメモリ１０に書き込まれる。
【００３０】
また、ＮＡＮＤメモリ１０からデータを読み出す場合は、第１のＥＣＣ回路１１７は、ＮＡＮＤ  Ｉ／Ｆ１１６によりＮＡＮＤメモリ１０から読み出されたデータに対して、まず、第１の誤り訂正を行った後、誤り検出符号で誤りがあるか否かを検出し、第１の誤り訂正後のデータ、第１の誤り訂正による訂正ｂｉｔ数、および誤り検出結果をＤＡＭコントローラ１１８を介して、ＤＲＡＭ２０に格納する。第２のＥＣＣ回路１１１は、誤り検出結果で誤りがある場合に、すなわち、第１の誤り訂正で誤りを訂正できなかった場合に、第２の誤り訂正を行って、第２の誤り訂正後のデータおよび第２の誤り訂正による訂正ｂｉｔ数をＤＲＡＭ２０に格納する。
【００３１】
図４は、ＮＡＮＤメモリ１０に書き込むデータのフォーマットの一例を示す図である。
同図に示すように、単位データＤ（５１２Ｂ）に対してＣＲＣ３２および１ｂｉｔの訂正能力があるハミング符号（第１の誤り訂正符号）が付加され、列方向の８個の単位データＤ（４ＫＢ）に対して４８ｂｉｔの訂正能力があるＢＣＨ符号（第２の誤り訂正符号）が付加されている。
【００３２】
［ＮＡＮＤコントローラおよびＮＡＮＤメモリ］
図５は、ＮＡＮＤ  Ｉ／Ｆ１１６とＮＡＮＤメモリ１０との接続を説明するための図である。ＮＡＮＤ  Ｉ／Ｆ１１６は、４Ｃｈのインタフェース回路であるＣｈ０〜Ｃｈ３制御部２１０ａ〜２１０ｄを備えており、Ｃｈ０〜Ｃｈ３制御部２１０ａ〜２１０ｄの制御信号ピン２０１およびＩＯ信号ピン２０２は、Ｃｈ０〜Ｃｈ３のＮＡＮＤパッケージ１０ａ〜１０ｄ（ＮＡＮＤ  Ｃｈ０〜Ｃｈ３）とそれぞれ独立に接続されている。制御信号ピン２０１からは制御信号が出力され、ＩＯピン２０２からは８ビットのデータＩＯ０〜７が入出力される。ＮＡＮＤ  Ｉ／Ｆ１１６は、ＣＥ（チップイネーブル）０〜３信号は、ＮＡＮＤパッケージ１０ａ〜１０ｄ（ＮＡＮＤ  Ｃｈ０〜Ｃｈ３）を選択する。
【００３３】
以下の説明では、各Ｃｈの構成は同一であるので、Ｃｈ０を代表させて説明する。図６および図７は、ＮＡＮＤメモリ１０の負荷容量およびＣＲ遅延を説明するための図である。図７において、２１３は入出力ＩＯ，２１４および２１５は出力ＩＯを示している。
【００３４】
図６に示すように、８ＳｔａｃｋＣｈｉｐ１０ａ１は、ＩＯデータＩＯ０〜７、制御信号｛ＷＥ（ライトイネーブル）信号、ＲＥ（リードイネーブル）信号、ＣＬＥ（コマンドラッチイネーブル）信号、ＡＬＥ（アドレスラッチイネーブル）信号、ＷＰ（ライトプロテクト）信号等｝が１本／８Ｃｈｉｐであるので、負荷容量が８倍に増加する。また、ＮＡＮＤパッケージ１０ａは、信号ｐｉｎを減らすために、ＩＯ信号ＩＯ０〜７および制御信号／２個の８ＳｔａｃｋＣｈｉｐ１０ａ１，１０ａ２としているため、負荷容量がさらに２倍に増加する。このため、ＣＲ遅延が増加する。また、一般に負荷容量はＩＯデータ＞制御信号であるため、ＩＯデータと制御信号で遅延差が生じる。
【００３５】
図８は、ＮＡＮＤメモリ１０からのデータの読み出しを説明するためのタイミングチャートである。同図において、（Ａ）はＲＥ信号、（Ｂ）はＩＯデータを示している。ここで、システムは、ＲＥ信号の立ち下がりからｔＲＥＡ経過した後に、読み出しデータの出力が保証され、ＲＥの立ち上がりからｔＲＬＯＨ経過した後は、読み出しデータの出力が保証されないスペックであるとする。この場合、負荷容量が大きくＣＲ遅延が大きい場合は、ｔＲＥＡが遅れ負荷容量が小さい場合のラッチタイミングではデータを取得できなくなってしまい、そのタイミング調整が必要となる。
【００３６】
図９〜図１１を参照して、ＮＡＮＤ  Ｉ／Ｆ１１６のＣｈ制御部に完全同期設計回路を搭載した場合の信号遅延について説明する。図９は、安全同期設計回路を説明するための図、図１０は、負荷容量が小さい場合のタイミングチャート、図１１は、負荷容量が大きい場合のタイミングチャートを示している。なお、以下、フリップフロップをＦＦと表記する。
【００３７】
図９において、Ｃｈ０制御部２１０ａは、クロックコントローラ１０７（図３参照）で生成された内部クロックＣＬＫに同期してＲＥを出力するＦＦ_ＲＥと、内部クロックＣＬＫに同期してＩＯ［７：０］をラッチして出力するＦＦ_ＤＡＴＡ［７：０］とを備えている。同図において、ｔ１は、ＩＯとＣＲ遅延、ｔ２，ｔ５は、伝搬（配線）遅延、ｔ４はＩＯ遅延、ｔＲＥＡはＮＡＮＤデータ出力とＩＯとＣＲ遅延を示している。
【００３８】
図１０および図１１において、（Ａ）は内部ＣＬＫ、（Ｂ）はＦＦ_ＲＥ出力、（Ｃ）はＮＡＮＤ  ＲＥ、（Ｄ）はＮＡＮＤ  ＩＯ［７：０］、（Ｅ）はＦＦ_ＤＡＴＡ［７：０］入力、（Ｆ）はＦＦ_ＤＡＴＡ［７：０］出力を示している。
【００３９】
図１０に示すように、負荷容量が小さい場合には、ｔ１およびｔＲＥＡのＣＲ遅延が小さいため、内部クロックＣＬＫのタイミングでデータを取得することができる。他方、図１１に示すように、負荷容量が大きい場合には、ｔ１およびｔＲＥＡのＣＲ遅延が大きくなるため、内部クロックＣＬＫのタイミングでデータを取得することができなくなってしまう。このため、タイミング調整のための非同期設計が必要となる。
【００４０】
［ＮＡＮＤコントローラ１１２のデータ読み出しのタイミング調整］
図１２〜図１８を参照して、ＮＡＮＤコントローラ１１２のデータ読み出しのタイミング調整を説明する。本実施の形態では、ＮＡＮＤメモリ１０の負荷容量の増大に伴う信号遅延があってもＮＡＮＤメモリ１０からの読み出しデータの出力動作を保証するために、図１２に示すように、各Ｃｈ毎にＲＥ信号を帰還させて、読み出しデータをラッチする際のタイミング調整を行っている。同図では、Ｃｈ０のみを図示しているが、他のＣｈ１〜３についても同様にＲＥ信号を帰還させる。
【００４１】
具体的には、読み出しデータをラッチするフリップフロップＦＦに、ＲＥ信号を帰還（再入力）させて、データラッチ用の第２のクロックＣＬＫ２とすると共に、ＲＥ信号を帰還させる経路にプログラムブル遅延素子を配置して、プログラムブル遅延素子で第２のクロックＣＬＫ２のタイミングを調整することで、信号遅延があってもＮＡＮＤメモリ１０からの読み出しデータの出力動作を保証している。プログラムブル遅延素子の遅延量を、システム基板の負荷容量が小さい場合は「小」、システム基板の負荷容量が大きい場合は「大」に設定して、システム基板の負荷容量が大〜小の場合まで読み出しデータの出力動作を保証することが可能となる。
【００４２】
（実施例１）
図１３〜図１４を参照して実施例１を説明する。図１３は、実施例１に係るＮＡＮＤ  Ｉ／Ｆ１１６のＣｈ制御部に搭載される非同期回路の一例を説明するための図である。図１４は、実施例１の非同期回路のタイミングチャートの一例である。
【００４３】
図１３において、ｔ１は、ＩＯとＣＲ遅延、ｔ２，ｔ３，ｔ５は、伝搬（配線）遅延、ｔ４はＩＯ遅延、ｔＲＥＡはＮＡＮＤデータ出力とＩＯとＣＲ遅延、ｔＤＬＹはＩＯとＤＬＹ素子遅延である。実施例１では、システム基板上でＲＥ信号を分岐させて帰還させる構成であり、ＲＥを再入力してデータラッチ用ＣＬＫとして利用することで、ＩＯ信号の配線遅延およびＩＯ遅延をキャンセルする。ＩＯ信号を出力するための信号線Ｓ１とＲＥ信号を出力するための信号線Ｓ２を等長にして、両者の負荷容量を等しくする。
【００４４】
ＦＦ_ＲＥは、内部クロックＣＬＫに同期してＲＥ信号をＮＡＮＤメモリ１０に出力する。プログラムブル遅延Ｙ素子２２０は、ＲＥ信号を帰還させる経路に配置され、ＲＥ帰還信号の遅延量を調整して、第２のクロックＣＬＫ２として、ＦＦ_ＤＡＴＡ０［７：０］に出力する。プログラムブル遅延Ｙ素子２２０の遅延量（ＤＬＹタップ数）は、後述するように、プロセッサ１０４により設定される。ＦＦ_ＤＡＴＡ０［７：０］は、第２のクロックＣＬＫ２（ＲＥ信号の再入力）に同期してＩＯ［７：０］をラッチして、後段のＦＦ_ＤＡＴＡ１［７：０］に出力する。ＦＦ_ＤＡＴＡ１［７：０］は、ＦＦ_ＤＡＴＡ０［７：０］から出力されるＤＡＴＡ１［７：０］を、内部クロックＣＬＫに同期してＤＡＴＡ０［７：０］をラッチして、ＤＡＴＡ１［７：０］を出力する。
【００４５】
図１４は、図１３の非同期回路のタイミングチャートを示しており、同図において、（Ａ）は内部クロックＣＬＫ、（Ｂ）はＦＦ_ＲＥ出力、（Ｃ）はＮＡＮＤ  ＲＥ、（Ｄ）はＮＡＮＤ  ＩＯ［７：０］、（Ｅ）はＦＦ_ＤＡＴＡ［７：０］入力、（Ｆ）は第２のＣＬＫ（ＲＥの再入力）、（Ｇ）はＦＦ_ＤＡＴＡ［７：０］出力、（Ｈ）はＦＦ_ＤＡＴＡ１［７：０］出力（内部ＣＬＫに同期化）を示している。
【００４６】
なお、ここでは、ＲＥ帰還信号をＣｈ毎（計４本）に追加することとしたが、信号ｐｉｎ削減のために、１ＣｈのみにＲＥ帰還信号を追加し、他Ｃｈも使用するようにしてもよい。この場合、実装上Ｃｈ毎の信号線長やメモリＣｈｉｐのバラツキを考慮する必要がある。
【００４７】
（実施例２）
図１５〜図１６を参照して実施例１を説明する。図１５は、実施例２に係るＮＡＮＤ  Ｉ／Ｆ１１６のＣｈ制御部に搭載される非同期回路の一例を説明するための図である。図１５において、図１３と同等機能を有する部位には同一符号を付し、共通する部分の説明を省略し、異なる点についてのみ説明する。図１６は、実施例５の非同期回路のタイミングチャートの一例である。
【００４８】
上記実施例１では、システム基板上でＲＥ信号を分岐させて帰還させる構成である。これに対して、実施例２は、ＡＳＩＣ内でＲＥ信号を分岐させて帰還させる構成である。
【００４９】
図１５において、ｔ１は、ＩＯとＣＲ遅延、ｔ２，ｔ５は、伝搬（配線）遅延、ｔ４はＩＯ遅延、ｔＲＥＡはＮＡＮＤデータ出力とＩＯとＣＲ遅延、ｔＤＬＹはＩＯとＤＬＹ素子遅延である。実施例１と異なる点は、ＩＯ信号の遅延値をキャンセルしないので、プログラムブル遅延素子２２０でこの分を考慮する。実施例１と同様に、ＦＦ_ＤＡＴＡ０［７：０］は、第２のクロックＣＬＫ２に同期してＩＯ［７：０］をラッチして、後段のＦＦ_ＤＡＴＡ１［７：０］に出力し、ＦＦ_ＤＡＴＡ１［７：０］は、ＩＯ［７：０］をＣＬＫでラッチして出力する。
【００５０】
図１６は、図１５の非同期回路のタイミングチャートを示しており、同図において、（Ａ）は内部クロックＣＬＫ、（Ｂ）はＦＦ_ＲＥ出力、（Ｃ）はＮＡＮＤ  ＲＥ、（Ｄ）はＮＡＮＤ  ＩＯ［７：０］、（Ｅ）はＦＦ_ＤＡＴＡ［７：０］入力、（Ｆ）は第２のクロックＣＬＫ２（ＡＳＩＣ内のＲＥの再入力）、（Ｇ）はＦＦ_ＤＡＴＡ［７：０］出力、（Ｈ）はＦＦ_ＤＡＴＡ１［７：０］出力（内部クロックＣＬＫに同期化）を示している。
【００５１】
（プログラムブル遅延素子の設定方法）
図１７および図１８を参照して、上記実施例１、２のプログラムブル遅延素子２２０の遅延量（タップ数）の設定方法を説明する。図１７は、プログラムブル遅延素子のタップ数の設定方法を説明するための図である。図１８はプログラムブル遅延素子２２０の構成例を示す図である。
【００５２】
全ＤＬＹ長及びＤＬＹタップ数を決める場合は、（１）システムが保証するデータの読み出しタイミングの範囲内となること、（２）システム構成での各信号の負荷容量、（３）ＡＳＩＣ−ＮＡＮＤメモリ１０間での伝送線路のシミュレーション結果、（４）遅延素子１個の遅延量／実装面積（遅延素子数を多くすると実装面積が大きくなる。）を考慮する。
【００５３】
図１７において、ＮＡＮＤコントローラ１１２の制御レジスタ１１９は、タップ数設定レジスタ１１９ａを備えている。プロセッサ１０４は、タップ数設定レジスタ１１９ａに、プログラムブル遅延素子２２０のＤＬＹタップ数を設定する。ＮＡＮＤ  Ｉ／Ｆ１１６は、タップ数設定レジスタ１１９ａに設定されたＤＬＹタップ数に応じたタップ制御データ（例えば、７Ｂｉｔ）を全Ｃｈのプログラムブル遅延素子２２０に出力する。本実施の形態では、全Ｃｈのプログラムブル遅延素子２２０に同一のＤＬＹタップ数が設定される構成としている。なお、各Ｃｈ毎にタップ数設定レジスタ１１９ａを設け、各Ｃｈで異なるＤＬＹタップ数を設定する構成としてもよい。
【００５４】
図１８において、プログラムブル遅延素子２２０は、セレクタＳＥＬ０〜ＳＥＬ６と、セレクタＳＥＬ０〜ＳＥＬ６の出力をそれぞれ反転させる反転器ＩＮＶ０〜ＩＮＶ６と、ＲＥ信号を反転させてＲＥ反転信号を出力する反転器ＩＮＶ７と、セレクタＳＥＬ０〜ＳＥＬ６および反転器ＩＮＶ０〜ＩＮＶ６をそれぞれ介して直列に７段接続されるＤＬＹ素子（ＤＬＹタップ）ＤＬＹ０〜ＤＬＹ６とを備えている。本例では、ＦＦ＿Ｄａｔａ［７：０］がｐｏｓｉｔｉｖｅ  ｅｄｇｅクロックのフリップフロップのため、プログラマブル遅延素子２２０は出力の極性は入力の反転となるようにしてある。また、セレクタの出力に反転器を挿入しているのは、ＤＬＹ素子のｒｉｓｅ／ｆａｌｌ極性を緩和させるためである。
【００５５】
セレクタＳＥＬ０〜ＳＥＬ６は、それぞれ、ＤＬＹ素子ＤＬＹ０〜ＤＬＹ６の出力が入力され、セレクタＳＥＬ０，２，４，６には、ＲＥ信号が入力され、セレクタＳＥＬ１，３，５には、ＲＥ反転信号が入力される。セレクタＳＥＬ０〜ＳＥＬ６は、ＮＡＮＤ  Ｉ／Ｆ１１６から入力されるタップ制御データ（７ｂｉｔ）に応じて、遅延素子ＤＬＹ０〜ＤＬＹ６の出力と、ＲＥ信号または反転ＲＥ信号の出力とをそれぞれ択一的に選択して出力し、タップ制御データの対応ビットが「０」の場合、ＲＥ信号または反転ＲＥ信号を出力し、タップ制御データの対応ビットが「１」の場合、遅延素子ＤＬＹ０〜ＤＬＹ６の出力を出力する。
【００５６】
例えば、タップ数設定レジスタ１１９aに「３」が設定された場合、すなわち、ＤＬＹタップ数が「３」の場合には、タップ制御データは、「００００１１１」となる。セレクタＳＥＬ４〜６では、３つの遅延素子ＤＬＹ４〜ＤＬＹ６が選択され、セレクタＳＥＬ３から入力されるＲＥ反転信号が３つの遅延素子ＤＬＹ４〜ＤＬＹ６で遅延された後、第２のクロックＣＬＫ２として出力される。
【００５７】
このように、タップ数設定レジスタ１１９ａに設定されるＤＬＹタップ数に基づいて、接続する遅延素子ＤＬＹ０〜ＤＬＹ６を選択して、帰還させるＲＥ信号の遅延量を設定することが可能となる。なお、プロセッサ１０４は、電源ＯＮ時に後述するトリミング検査で決定したＤＬＹタップ数をＮＡＮＤメモリ１０または不揮発性メモリから読み出して、
タップ数設定レジスタ１１９ａに設定することができる。
【００５８】
［製造時のトリミング検査］
図１９〜図２３を参照して、製造時のトリミング検査でプログラムブル遅延素子２２０のＤＬＹタップ数の設定を行う場合について説明する。プログラムブル遅延素子２２０のＤＬＹタップ数の設定は、製造時のトリミング検査で行うことができる。トリミング検査では、３２ビットモード（３２ビットノーマルモードまたは３２ビット倍速モード）を使用して、トリミング検査の処理時間を短縮する。また、トリミング検査は、動作マージンを広くするために、高温および高電圧条件下で行うのが望ましい。
【００５９】
（実施例１）
図１９〜図２１を参照して、製造時のトリミング検査の実施例１を説明する。図１９は、プログラムブル遅延素子２２０のＤＬＹタップ数を変更した場合の第２のクロックＣＬＫ２でＩＯ信号をラッチする場合を説明するためのタイミングチャートである。図２０は、製造時トリミング検査の実施例１を説明するためのフローチャートである。図２１は、トリミング検査結果からプログラムブル遅延素子２２０のＤＬＹタップ数を決定する方法を説明するための図である。
【００６０】
トリミング検査の実施例１では、図１、図３、図１７において、プロセッサ１０４は、トリミング検査を行う場合には、トリミングデータをＤＲＡＭ２０に展開した後、ＤＲＡＭコントローラ１１３およびＮＡＮＤコントローラ１１２を介して、３２ビットモードで、各ＣｈのＮＡＮＤメモリパッケージ１０ａ〜１０ｄの全Ｃｈｉｐに書き込む。プロセッサ１０４は、全Ｃｈのプログラムブル遅延素子２２０のＤＬＹタップ数（０〜７）を変更しながら、各ＣｈのＣｈｉｐ０〜１５毎にトリミングデータを、３２ビットモードで読み出してＤＲＡＭ２０に転送し、プロセッサ１０４は、読み出したトリミングデータと書き込んだトリミングデータのコンペアを行ない、コンペア結果に基づいてプログラムブル遅延素子２２０の最適なＤＬＹタップ数を設定する。
【００６１】
トリミングデータは、タイミングによる読み出し誤りを検知できるようなパターンにすることが望ましい。例えば、各ＩＯでトグルかつ隣接ＩＯでトグルするようなパターン（例えば、３２’ｈ５５５５＿５５５５，３２’ｈＡＡＡＡ＿ＡＡＡＡ）を使用することができる。
【００６２】
図１９を参照して、プログラムブル遅延素子２２０のＤＬＹタップ数を変更した場合の第２のクロックＣＬＫ２およびこの第２のクロックＣＬＫ２でＩＯ信号をラッチする場合を説明する。同図において、（Ａ）は内部クロックＣＬＫ、（Ｂ）はＩＯ信号（ＩＯデータ）、（Ｃ）〜（Ｊ）はＤＬＹタップ数０〜７とした場合の第２のクロックＣＬＫ２（ＲＥ再入力）を示している。
【００６３】
第２のクロックＣＬＫ２の立ち上がりで、ＩＯ信号（データ）をラッチする場合、ＤＬＹタップ数０〜１では、第２のクロックＣＬＫ２の立ち上がりが早すぎるため、ＩＯ信号（データ）をラッチすることができない（ＮＧ）。また、ＤＬＹタップ数６〜７では、第２のクロックＣＬＫ２の立ち上がりが遅すぎるためＩＯ信号（データ）をラッチすることができない（ＮＧ）。他方、ＤＬＹタップ数２〜５では、第２のクロックＣＬＫ２の立ち上がりでＩＯ信号（データ）をラッチすることができる（ＯＫ）。
【００６４】
つぎに、図２０を参照して、トリミング検査の実施例１の処理フローを説明する。プロセッサ１０４は、ＮＡＮＤコントローラ１１２の制御レジスタ１１９のタップ数設定レジスタ１１９ａにＤＬＹタップ数０〜７を順に書き込んで、全Ｃｈのプログラムブル遅延素子２２０のＤＬＹタップ数０〜７を変更しながら、ＮＡＮＤメモリ１０の全ＣｈのＣｈｉｐ番号０〜１５のＣｈｉｐについてトリミング検査を行う。
【００６５】
図２０において、ＤＲＡＭ２０に格納したトリミングデータを、ＮＡＮＤメモリ１０の全Ｃｈｉｐに書き込む（ステップＳ１）。プロセッサ１０４は、ＤＬＹタップ数＜全タップ数（７）であるか否かを判定する（ステップＳ２）。ＤＬＹタップ数＜全タップ数でない場合（ステップＳ２の「Ｎｏ」）、すなわち、全てのタップ数についての検査が終了した場合には、検査結果に基づいてＤＬＹタップ数を決定して（ステップＳ１１）、当該フローを終了する。
【００６６】
他方、ＤＬＹタップ数＜全タップ数である場合には（ステップＳ２の「Ｙｅｓ」）、プログラムブル遅延素子２２０のＤＬＹタップ数をインクリメントする（ステップＳ３）。そして、Ｃｈｉｐ番号＜全Ｃｈｉｐ数（１５）であるか否かを判断し（ステップＳ４）、Ｃｈｉｐ番号＜全Ｃｈｉｐ数でない場合には（ステップＳ４の「Ｎｏ」）、ステップＳ２に戻る一方、Ｃｈｉｐ番号＜全Ｃｈｉｐ数である場合には（ステップＳ４の「Ｙｅｓ」）、Ｃｈｉｐ番号をインクリメントする（ステップＳ５）。全ＣｈのＣｈｉｐ番号のＣｈｉｐから３２ビットモードで全データを読み出してＤＲＡＭ２０に展開する（ステップＳ６）。プロセッサ１０４は、ＤＲＡＭ２０に読み出したトリミングデータと書き込んだトリミングデータとをコンペア（比較）して（ステップＳ７）、ＯＫ、ＮＧを判断する（ステップＳ８）。
【００６７】
ここで、ＯＫ／ＮＧの判定は、不一致ｂｉｔ数（全Ｃｈの該当するＣｈｉｐ番号のＣｈｉｐの不一致ｂｉｔの合計値）≦閾値ｂｉｔ数の場合にＯＫ、不一致ｂｉｔ数＞閾値ｂｉｔ数の場合にＮＧと判定する。閾値ｂｉｔ数はシステムで許容可能な不一致ｂｉｔ数が設定される。なお、出荷時に誤りｂｉｔを許容している場合もあるので、閾値ｂｉｔ数は０とは限らない。
【００６８】
コンペア結果がＯＫである場合には（ステップＳ８の「Ｙｅｓ」）、ＤＬＹタップ数とＯＫ結果をＤＲＡＭ２０に保存し（ステップＳ１０）、ステップＳ４に戻る。他方、コンペア結果がＮＧである場合には（ステップＳ８の「Ｎｏ」）、ＤＬＹタップ数とＮＧ結果をＤＲＡＭ２０に保存し（ステップＳ９）、ステップＳ２に戻る。
【００６９】
なお、実施例１では、誤り訂正および誤り検出を行わないので、トリミングデータをＮＡＮＤメモリ１０に書き込む場合に、誤り検出符号および第１，第２の誤り訂正符号を付加しない構成としてもよい。また、実施例１では、タイミングのＮＡＮＤ  Ｃｈｉｐ依存性を考慮するために全Ｃｈｉｐに対して検査を行ったが、検査時間を短縮するためにＮＡＮＤ  １Ｃｈｉｐのみを検査するようにしてもよい。
【００７０】
次に、図２１を参照して、トリミング検査結果からＤＬＹタップ数を具体的に決定する方法について説明する。図２１は、データコンペア結果の一例を示しており、横軸はＤＬＹタップ数０〜７を、縦軸はデータコンペア結果を示しており、○はＯＫ結果、×はＮＧ結果を示している。
【００７１】
例１に示すように、読み出し可能区間がはっきりしている場合（読み出し始めと終わりが判断できる場合）には、真ん中を選択する。例１では、ＤＬＹタップ数２〜ＤＬＹタップ数５間で読み出し可能であるので、ＤＬＹタップ数３またはＤＬＹタップ数４を選択する。
【００７２】
例２に示すように、読み出しの始めしか分からない場合（終わりしかわからない場合も同様）には、単純に一番遅いＤＬＹタップ数を選択する。例２では、ＤＬＹタップ数５〜ＤＬＹタップ数７で読み出しが可能であるので、ＤＬＹタップ数７を選択する。また、設計時のタイミング計算からＤＬＹタップ数２個分マージンを取るとした場合は、ＤＬＹタップ数７を選択する（ＤＬＹタップ数５，６はマージン）。
【００７３】
例３に示すように、設計時のタイミング計算からＤＬＹタップ数２個分マージンを取るとした場合は、ＤＬＹタップ数６〜ＤＬＹタップ７で読み出しが可能であるので、ＤＬＹタップ数を選択することができないので、初期不良と判断する。例４に示すように、全タップで読み出しができない場合には、初期不良と判断する。
【００７４】
（実施例２）
図２２〜図２３を参照して、製造時のトリミング検査の実施例２を説明する。図２２は、製造時トリミング検査の実施例２を説明するためのフローチャートである。図２３は、トリミング検査結果からプログラムブル遅延素子２２０のＤＬＹタップ数を決定する方法を説明するための図である。
【００７５】
実施例１では、データコンペアを行い、その結果に基づいてプログラムブル遅延素子２２０のＤＬＹタップ数を決定するものである。これに対して、実施例２は、誤り訂正を行い、その結果に基づいてプログラムブル遅延素子２２０のＤＬＹタップ数を決定するものである。
【００７６】
トリミング検査の実施例２では、図１、図３、図１７において、プロセッサ１０４は、トリミング検査を行う場合には、トリミングデータをＤＲＡＭ２０に展開した後、ＤＲＡＭコントローラ１１３およびＮＡＮＤコントローラ１１２を介して、３２ビットモードで、各ＣｈのＮＡＮＤメモリパッケージ１０ａ〜１０ｄの全Ｃｈｉｐに書き込む。プロセッサ１０４は、プログラムブル遅延素子２２０のＤＬＹタップ数（０〜７）を変更しながら、書き込まれたトリミングデータを、Ｃｈｉｐ毎に３２ビットモードで読み出し、第１のＥＣＣ回路１１７で第１の誤り訂正を行った後、誤り検出符号で誤りがあるか否かを検出し、第１の誤り訂正後のデータ、第１の誤り訂正による訂正ｂｉｔ数、および誤り検出結果をＤＲＡＭ２０に格納する。この後、第２のＥＣＣ回路１１１は、誤り検出結果で誤りがある場合に、第２の誤り訂正を行って、第２の誤り訂正による訂正ｂｉｔ数をＤＲＡＭ２０に格納する。プロセッサ１０４は、第１および第２の誤り訂正ｂｉｔ数に基づいて、プログラムブル遅延素子２２０の最適なＤＬＹタップ数を決定する。
【００７７】
トリミングデータは、実施例１と同様に、タイミングによる読み出し誤りを検知できるようなパターンにする。例えば、各ＩＯでトグルかつ隣接ＩＯでトグルするようなパターン（ｅｘ．３２’ｈ５５５５＿５５５５，３２’ｈＡＡＡＡ＿ＡＡＡＡ）を使用することができる。
【００７８】
つぎに、図２２を参照して、トリミング検査の実施例２の処理フローを説明する。図２２において、図２０と同様な処理を行うステップには同一のステップ番号を付してある。
図２２において、プロセッサ１０４は、ＤＲＡＭ２０に格納したトリミングデータを、ＮＡＮＤメモリ１０の全Ｃｈｉｐに書き込む（ステップＳ１）。ＤＬＹタップ数＜全タップ数（７）であるか否かを判定する（ステップＳ２）。ＤＬＹタップ数＜全タップ数でない場合には（ステップＳ２の「Ｎｏ」）、検査結果に基づいてＤＬＹタップ数を決定して（ステップＳ１１）、当該フローを終了する。
【００７９】
他方、ＤＬＹタップ数＜全タップ数である場合には（ステップＳ２の「Ｙｅｓ」）、ＤＬＹタップ数をインクリメントする（ステップＳ３）。そして、Ｃｈｉｐ番号＜全チップ数（１５）であるか否かを判断し（ステップＳ４）、Ｃｈｉｐ番号＜全チップ数でない場合には（ステップＳ４の「Ｎｏ」）、ステップＳ２に戻る一方、Ｃｈｉｐ番号＜全チップ数である場合には（ステップＳ４の「Ｙｅｓ」）、Ｃｈｉｐ番号をインクリメントする（ステップＳ５）。Ｃｈｉｐ番号のＣｈｉｐから全データを読み出し、ＤＲＡＭ２０に展開する（ステップＳ６）。この場合、第１のＥＣＣ回路１１７では、読み出したデータに対して第１の誤り訂正を行った後、誤り検出符号で誤りがあるか否かを検出し、第１の誤り訂正後のデータ、第１の誤り訂正による訂正ｂｉｔ数、および誤り検出結果をＤＲＡＭ２０に格納する。この後、第２のＥＣＣ回路１１１は、誤り検出結果で誤りがある場合に、第１の誤り訂正後のデータに対して、第２の誤り訂正を行って、第２の誤り訂正による訂正ｂｉｔ数、および訂正不可（第２の誤り訂正の訂正能力を超える場合）その旨の情報をＤＲＡＭ２０に格納する（ステップＳ２１）。
【００８０】
プロセッサ１０４は、誤り訂正無し、または訂正ｂｉｔ数（全Ｃｈにおける，第１の誤り訂正ｂｉｔ数＋第２の誤り訂正ｂｉｔ数）＜許容ｂｉｔ数であるか否かを判断する（ステップＳ２２）。ここで、許容ｂｉｔ数は、システムで許容可能な誤り訂正ｂｉｔ数である。許容ｂｉｔ数は、Ｃｈｉｐ単位、ページ単位（ＮＡＮＤメモリ１０の最小アクセス単位のこと。３２ビット倍速モードでは、３２ＫＢ。）またはブロック単位（ＮＡＮＤメモリの消去単位のこと。３２ビット倍速モードでは、４ＭＢ）で設定することにしてもよい。
【００８１】
訂正無しまたは誤り訂正ｂｉｔ数＜許容ｂｉｔ数である場合には（ステップＳ２２の「Ｙｅｓ」）、ＤＬＹタップ数でＯＫ結果を保存し（ステップＳ１０）、ステップＳ４に戻る。他方、訂正無しまたは訂正ｂｉｔ数＜許容ｂｉｔ数でない場合（訂正不可も含む）には（ステップＳ２２の「Ｎｏ」）、ＤＬＹタップ数でのＮＧ結果を保存し（ステップＳ９）、ステップＳ２に戻る。
【００８２】
なお、ここでは、第１の誤り訂正および第２の誤り訂正の誤り訂正ｂｉｔ数に基づいて、プログラムブル遅延素子２２０のＤＬＹタップ数を設定することとしたが、第１の誤り訂正のみを行って、その誤り訂正ｂｉｔ数のみを使用してＤＬＹタップ数を設定することにしてもよい。
【００８３】
次に、図２３を参照して、トリミング検査結果からＤＬＹタップ数を決定する実施例２について説明する。トリミング検査結果からＤＬＹタップ数を決定する実施例２を説明するための図である。実施例２では、誤り訂正ｂｉｔ数を使用する場合である。図２３は、誤り訂正結果の一例を示しており、（）内は誤り訂正ｂｉｔ数を示しており、×は誤り訂正ｂｉｔ数が許容ｂｉｔ数（例えば、１２ｂｉｔ）より大きい場合を示している。
【００８４】
例１に示すように、読み出し可能区間がはっきりしている場合（読み出し始めと終わりが判断できる場合）には、訂正ｂｉｔ数の少ないＤＬＹタップ数を選択する。例１では、ＤＬＹタップ数２〜ＤＬＹタップ数５間で読み出し可能であるので、誤り訂正ｂｉｔ数の最も少ないＤＬＹタップ数３を選択する。なお、訂正ｂｉｔ数の最も少ないＤＬＹタップ数が複数ある場合は、真ん中のＤＬＹを選択する。
【００８５】
例２に示すように、読み出しの始めしか分からない場合（終わりしかわからない場合も同様）には、単純に一番誤り訂正ｂｉｔ数が少ないＤＬＹタップ数を選択する。例２では、ＤＬＹタップ数５〜ＤＬＹタップ数７で読み出しが可能であるので、ＤＬＹタップ数７を選択する。また、設計時のタイミング計算からＤＬＹタップ数２個分マージンを取り、かつ、一番訂正ｂｉｔ数の少ないものとした場合は、ＤＬＹタップ数７を選択する（ＤＬＹ５，６はマージン）。
【００８６】
例３に示すように、設計時のタイミング計算からＤＬＹタップ数２個分マージンを取り、かつ、一番訂正ｂｉｔ数の少ないものとした場合は、ＤＬＹを選択することができないので、初期不良と判断する。例４に示すように、全タップで誤り訂正ｂｉｔ数が許容ｂｉｔ数より大きい場合には、初期不良と判断する。
【００８７】
（実施例３）
図２４を参照して、製造時のトリミング検査の実施例３を説明する。トリミング検査の実施例３では、実施例２の誤り訂正と実施例１のデータコンペアの両方を使用する。実施例３では、誤り訂正不可の場合には、データコンペア処理を省き、検査時間を短縮している。また、誤り訂正無し／誤り訂正可能の場合でも、データコンペア処理をすることで、検査精度を向上させている。
【００８８】
図２４は、製造時のトリミング検査の実施例３を説明するためのフローチャートである。図２４において、図２０および図２２と同様な処理を行うステップには同一のステップ番号を付し、共通する部分の説明は省略し、異なる点についてのみ説明する。
【００８９】
ステップＳ４１において、プロセッサ１０４は、誤り訂正無し、または訂正ｂｉｔ数（第１の誤り訂正ｂｉｔ数＋第２の誤り訂正ｂｉｔ数）＜許容ｂｉｔ数であるか否かを判断する（ステップＳ４１）。訂正無しまたは誤り訂正ｂｉｔ数＜許容ｂｉｔ数である場合には（ステップＳ４１の「Ｙｅｓ」）、ＤＲＡＭ２０に読み出したトリミングデータ（誤り訂正前のデータ）と書き込んだトリミングデータとをコンペア（比較）して（ステップＳ４１）、ＯＫ、ＮＧを判断する（ステップＳ４２）。
【００９０】
ここで、ＯＫ／ＮＧの判定は、不一致ｂｉｔ数（全Ｃｈの該当するＣｈｉｐ番号のＣｈｉｐの不一致ｂｉｔの合計値）≦閾値ｂｉｔ数の場合にＯＫ、不一致ｂｉｔ数＞閾値ｂｉｔ数の場合にＮＧと判定する。閾値ｂｉｔ数はシステムで許容可能な不一致ｂｉｔ数が設定される。
【００９１】
コンペア結果がＯＫである場合には（ステップＳ４３の「Ｙｅｓ」）、ＤＬＹタップ数とＯＫ結果をＤＲＡＭ２０に保存し（ステップＳ１０）、ステップＳ４に戻る。他方、コンペア結果がＮＧである場合には（ステップＳ４３の「Ｎｏ」）、ＤＬＹタップ数とＮＧ結果をＤＲＡＭ２０に保存し（ステップＳ９）、ステップＳ２に戻る。
【００９２】
トリミング検査結果からＤＬＹタップ数を決定する方法は実施例１と同様であるので、その説明は省略する。
【００９３】
［ＳＳＤの電源ＯＮ時の処理］
次に、製品化後のＳＳＤ１００の電源ＯＮ時の処理について説明する。トリミング検査で決定したＤＬＹタップ数は、不揮発性メモリであるＮＡＮＤメモリ１０に保存する。この場合、製品化後の電源ＯＮ時には、ＮＡＮＤコントローラ１１２の制御レジスタ１１９のタップ数設定レジスタ１１９ａにタップ数が設定されていないため、プログラムブル遅延素子２２０の遅延量が設定されていない。このため、確実にＮＡＮＤメモリ１０からＤＬＹタップ数を読み出して、タップ数設定レジスタ１１９ａに設定する必要があるため、（１）高速で読み出すモードと、遅くとも確実に読み出すモードを２類種用意しておき、ＤＬＹタップ数を読み出し時には、確実に読めるタイミングで読み出す。（２）また、ＦｅＲＡＭなどの不揮発性メモリを使用してＤＬＹタップ数情報を格納する構成とすれば、（１）のように２モードを使う必要はなく、不揮発性メモリに格納されたＤＬＹタップ数情報をタップ数設定レジスタ１１９ａに設定すればよい。
【００９４】
なお、電源ＯＮ後、トリミング検査で決定したＤＬＹタップ数を設定した後、ＤＬＹタップ数を読み出せるかをチエックしてもよい。この場合、トリミング検査の簡略版でもよい（あるＣｈｉｐに対してのみデータコンペアを行う）。もし、ＮＧになった場合は、何らかの理由で故障したとみなしてホスト装置１に通知する。
【００９５】
以上説明したように、本実施の形態によれば、ＮＡＮＤ  Ｉ／Ｆ１１６は、ＲＥ信号を帰還させた信号をプログラムブル遅延素子２２０で遅延させて第２のクロックＣＬＫ２として出力し、第２のクロックＣＬＫ２を使用して、ＮＡＮＤメモリ１０から読み出したデータをラッチして出力することとしたので、信号線の負荷容量が増大し、信号遅延があっても、ＮＡＮＤメモリ１０からデータを読み出して確実に出力することが可能となる。付言すると、負荷容量による遅延差を広くカバーすることができるので、ＮＡＮＤメモリのデータ容量小〜大に対応したコントローラを設計することが可能となる。
【００９６】
また、プログラムブル遅延素子２００は、直列接続された複数の遅延素子ＤＬＹ０〜６と、複数の遅延素子のうち接続する遅延素子ＤＬＹ０〜７を選択して、遅延量を選択するセレクタＳＥＬ０〜６とを備えているので、遅延量を可変に設定することができ、精度の高いデータの取り込みタイミングの調整を実現することが可能となる。
【００９７】
また、遅延量（ＤＬＹタップ数）が設定されるタップ数設定レジスタ１１９ａを備え、プロセッサ１０４がタップ数設定レジスタ１１９ａに遅延量を設定し、セレクタＳＥＬ０〜６は、タップ数設定レジスタ１１９ａに設定された遅延量に基づいて、接続する遅延素子ＤＬＹ０〜６を選択しているので、プロセッサ１０４からプログラムブル遅延素子２２０の遅延量を設定することが可能となる。
【００９８】
また、ＲＥ信号をシステム基板上またはＡＳＩＣ上で分岐させて帰還させることとしたので、ＳＳＤ１００のレイアウトを考慮して、ＲＥ信号を分岐させる位置を決定することが可能となる。
【００９９】
また、プログラムブル遅延素子２２０の遅延量を製造時のトリミング検査で設定することとしたので、製造時に製品毎に最適なプログラムブル遅延素子２２０の遅延量を設定することが可能となる。また、この場合、データコンペアまたは誤り訂正結果に基づいて、プログラムブル素子２２０の遅延量を決定しているので、より高精度にデータの取り込みタイミングの調整を実現することが可能となる。
【０１００】
なお、上記実施の形態では、本発明を、ＮＡＮＤメモリを有するＳＳＤに適用するようにしたが、ＮＯＲ型などの他のフラッシュＥＥＰＲＯＭを有するＳＳＤに本発明を適用するようにしてもよい。
【図面の簡単な説明】
【０１０１】
【図１】ＳＳＤ（Solid State Drive）の構成例を示すブロック図である。
【図２】ＮＡＮＤメモリチップに含まれる１個のブロックの構成例を示す回路図である。
【図３】ドライブ制御回路のハードウェア的な内部構成例を示すブロック図である。
【図４】ＮＡＮＤメモリに書き込むデータのフォーマットの一例を示す図である。
【図５】ＮＡＮＤ  Ｉ／ＦとＮＡＮＤメモリとの接続を説明するための図である。
【図６】ＮＡＮＤメモリの負荷容量およびＣＲ遅延を説明するための図である。
【図７】ＮＡＮＤメモリの負荷容量およびＣＲ遅延を説明するための図である。
【図８】ＮＡＮＤメモリからのデータの読み出しを説明するためのタイミングチャートである。
【図９】安全同期設計回路を説明するための図である。
【図１０】負荷容量が小さい場合のタイミングチャートである。
【図１１】負荷容量が大きい場合のタイミングチャートを示している。
【図１２】ＲＥ信号の帰還を説明するための図である。
【図１３】実施例１に係るＮＡＮＤ  Ｉ／ＦのＣｈ制御部に搭載される非同期回路の一例を説明するための図である。
【図１４】実施例１の非同期回路のタイミングチャートの一例を示す図である。
【図１５】実施例２に係るＮＡＮＤ  Ｉ／ＦのＣｈ制御部に搭載される非同期回路の一例を説明するための図である。
【図１６】実施例２の非同期回路のタイミングチャートの一例を示す図である。
【図１７】プログラムブル遅延素子のタップ数の設定方法を説明するための図である。
【図１８】プログラムブル遅延素子の構成例を示す図である。
【図１９】プログラムブル遅延素子のタップ数を変更した場合の第２のクロックＣＬＫ２でＩＯ信号をラッチする場合を説明するためのタイミングチャートである。
【図２０】製造時トリミング検査の実施例１を説明するためのフローチャートである。
【図２１】トリミング検査結果からプログラムブル遅延素子のＤＬＹタップ数を決定する方法を説明するための図である。
【図２２】製造時トリミング検査の実施例２を説明するためのフローチャートである。
【図２３】トリミング検査結果からプログラムブル遅延素子のＤＬＹタップ数を決定する方法を説明するための図である。
【図２４】製造時トリミング検査の実施例３を説明するためのフローチャートである。
【符号の説明】
【０１０２】
１００  ＳＳＤ
１  ホスト装置
２  ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）
３  ＲＳ２３２Ｃ  Ｉ／Ｆ
４  ドライブ制御回路
５  電源回路
６  ＬＥＤ
１０  ＮＡＮＤメモリ
１０ａ〜ｄ  ＮＡＮＤメモリパッケージ
１０ａ１，１０ａ２〜１０ｄ１、１０ｄ２  ８ＳｔａｃｋＣｈｉｐ
２０  ＤＲＡＭ
１０１  データアクセス用バス
１０２  第１の回路制御用バス
１０３  第２の回路制御用バス
１０４  プロセッサ
１０５  ブートＲＯＭ
１０６  ＲＯＭコントローラ
１０７  クロックコントローラ
１０８  パラレルＩＯ（ＰＩＯ）回路
１０９  シリアルＩＯ（ＳＩＯ）回路
１１０  ＡＴＡインタフェースコントローラ（ＡＴＡコントローラ）
１１１  第２のＥＣＣ（Error  Cｈeck and Correct）回路
１１２  ＮＡＮＤコントローラ
１１３  ＤＲＡＭコントローラ
１１４  ＳＲＡＭ
１１５  ＳＲＡＭコントローラ
１１６  ＮＡＮＤ  Ｉ／Ｆ
１１７  第１のＥＣＣ回路
１１８  ＤＭＡコントローラ
１１９  制御レジスタ
１１９ａ  タップ数設定レジスタ
２２０  プログラムブル遅延素子
【図１】
0004519923.tif 000002
【図２】
0004519923.tif 000003
【図３】
0004519923.tif 000004
【図４】
0004519923.tif 000005
【図５】
0004519923.tif 000006
【図６】
0004519923.tif 000007
【図７】
0004519923.tif 000008
【図８】
0004519923.tif 000009
【図９】
0004519923.tif 000010
【図１０】
0004519923.tif 000011
【図１１】
0004519923.tif 000012
【図１２】
0004519923.tif 000013
【図１３】
0004519923.tif 000014
【図１４】
0004519923.tif 000015
【図１５】
0004519923.tif 000016
【図１６】
0004519923.tif 000017
【図１７】
0004519923.tif 000018
【図１８】
0004519923.tif 000019
【図１９】
0004519923.tif 000020
【図２０】
0004519923.tif 000021
【図２１】
0004519923.tif 000022
【図２２】
0004519923.tif 000023
【図２３】
0004519923.tif 000024
【図２４】
0004519923.tif 000025