(57)【要約】      （修正有）【課題】不揮発メモリコントローラと不揮発性メモリチップとの間のＩ／Ｏ処理に用いられるインターフェースにおけるパラメータを容易且つ適切に設定できるようにする。【解決手段】計算機システム１において、複数のＦＭチップ４０と、ＦＭチップとの間のＩ／Ｏ処理を実行するフラッシュＩ／Ｆを備えるＦＭ−ＣＴＬ３０と、を有するＦＭＤ２０において、ＦＭ−ＣＴＬは、複数のチャネルのそれぞれに対応してフラッシュＩ／Ｆが設けられており、ＦＭ−ＣＴＬを、ＤＫＣ１０とＦＭ−ＣＴＬとの間の上位動作周波数を取得し、各チャネルのフラッシュＩ／ＦによるＦＭチップとの間の合計転送速度が、上位動作周波数に対応する上位転送速度と同じ又は上位転送速度に近い転送速度となるように、フラッシュＩ／Ｆの動作周波数を決定し、それぞれのフラッシュＩ／Ｆに対して決定した動作周波数の設定を行うように構成する。【選択図】図１
2019215662.tif 000002
【特許請求の範囲】
【請求項１】
複数の不揮発性メモリチップと、前記不揮発性メモリチップとの間のデータのＩ／Ｏ処理を実行するインターフェースを備える不揮発性メモリコントローラと、を有する不揮発性メモリデバイスであって、
前記不揮発性メモリコントローラは、複数の不揮発性メモリチップと複数のチャネルを介して接続され、前記複数のチャネルのそれぞれに対応して前記インターフェースが設けられており、
前記不揮発性メモリコントローラは、
上位装置と前記不揮発性メモリコントローラとの間のデータ転送速度に関する上位転送速度情報を取得し、
前記複数のチャネルに対応するそれぞれの前記インターフェースによる前記不揮発性メモリチップとの間の転送速度の合計である合計転送速度が、前記上位転送速度情報に対応する上位転送速度と同じ又は前記上位転送速度に近い転送速度となるように、前記インターフェースの転送速度に関する転送速度情報を決定し、
それぞれの前記インターフェースに対して、決定した転送速度情報に基づいて転送速度に関する設定を行う
不揮発性メモリデバイス。
【請求項２】
前記不揮発性メモリコントローラは、
前記複数のチャネルに対応するそれぞれの前記インターフェースによる前記不揮発性メモリチップとの間の転送速度を同一の転送速度とした場合において、前記インターフェースによる前記不揮発性メモリチップとの間の前記合計転送速度が、前記上位転送速度情報に対応する上位転送速度と同じ又は前記上位転送速度に近い転送速度となるように、前記インターフェースの転送速度に関する転送速度情報を決定する
請求項１に記載の不揮発性メモリデバイス。
【請求項３】
前記不揮発性メモリデバイスは、
前記インターフェースの転送速度に関する設定の更新を行う条件である更新条件を記憶する更新条件記憶部をさらに備え、
前記不揮発性メモリコントローラは、前記更新条件を満たしているか否かを判定し、前記更新条件を満たしている場合に、前記インターフェースの前記転送速度に関する設定の更新を行う
請求項１又は請求項２に記載の不揮発性メモリデバイス。
【請求項４】
前記更新条件には、前記不揮発性メモリデバイスの電源がオンにされた後、まだ前記転送速度に関する設定の更新が行われていないことを含む
請求項３に記載の不揮発性メモリデバイス。
【請求項５】
前記更新条件には、前記インターフェースの前記転送速度に関する設定の更新を行ってから所定時間が経過したことを含む
請求項３又は請求項４に記載の不揮発性メモリデバイス。
【請求項６】
前記不揮発性メモリコントローラは、
それぞれの前記インターフェースについて、前記インターフェースから複数の前記不揮発性メモリチップへ送信するコマンドタイミングを変更させてコマンドを実際に送信させ、前記コマンドの通信状況に基づいて前記インターフェースに設定するコマンドタイミングを決定する
請求項１から請求項５のいずれか一項に記載の不揮発性メモリデバイス。
【請求項７】
前記不揮発性メモリコントローラは、
それぞれの前記インターフェースについて、前記インターフェースから複数の前記不揮発性メモリチップへ送信するコマンドタイミングを徐々に短く調整しながら前記不揮発性メモリチップにおける前記コマンドの通信状態を確認し、前記不揮発性メモリチップで前記コマンドを認識できる最短のコマンドタイミングを前記インターフェースに設定するコマンドタイミングに決定する
請求項６に記載の不揮発性メモリデバイス。
【請求項８】
前記不揮発性メモリコントローラは、
それぞれの前記インターフェースについて、前記インターフェースから複数の前記不揮発性メモリチップへ信号を送信する際の前記インターフェース又は前記不揮発性メモリチップの少なくとも一方の電圧状態を変更させて信号を実際に送信させ、その通信状況に基づいて、前記不揮発メモリチップへ信号を視診する際における前記インターフェースに設定する電圧状態を決定する
請求項１から請求項７のいずれか一項に記載の不揮発性メモリデバイス。
【請求項９】
前記不揮発性メモリコントローラは、
それぞれの前記インターフェースについて、前記インターフェースに接続されている複数の前記不揮発性メモリチップから信号を受信する際の前記インターフェース又は前記不揮発性メモリチップの少なくとも一方の電圧状態を変更させて信号を実際に送信させ、その通信状況に基づいて、それぞれの前記不揮発性メモリチップから信号を受信する際における前記インターフェースに設定する電圧状態を決定する
請求項１から請求項８のいずれか一項に記載の不揮発性メモリデバイス。
【請求項１０】
複数の不揮発性メモリチップと、前記不揮発性メモリチップとの間のデータのＩ／Ｏ処理を実行するインターフェースを備える不揮発性メモリコントローラと、を有する不揮発性メモリデバイスによるインターフェース設定方法であって、
前記不揮発性メモリコントローラは、複数の不揮発性メモリチップと複数のチャネルを介して接続され、前記複数のチャネルのそれぞれに対応して前記インターフェースが設けられており、
上位装置と前記不揮発性メモリコントローラとの間のデータ転送速度に関する上位転送速度情報を取得し、
前記複数のチャネルに対応するそれぞれの前記インターフェースによる前記不揮発性メモリチップとの間の転送速度の合計である合計転送速度が、前記上位転送速度情報に対応する上位転送速度と同じ又は前記上位転送速度に近い転送速度となるように、前記インターフェースの転送速度に関する転送速度情報を決定し、
それぞれの前記インターフェースに対して決定した転送速度情報に基づいて転送速度に関する設定を行う
インターフェース設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の不揮発性メモリチップと、前記不揮発性メモリチップとの間のデータのＩ／Ｏ処理を実行するインターフェースを備える不揮発性メモリコントローラと、を有する不揮発性メモリデバイス等に関する。
【背景技術】
【０００２】
従来、複数の不揮発性メモリチップを備える不揮発メモリデバイスが知られている。不揮発性メモリチップとしては、例えば、ＮＡＮＤ型のフラッシュメモリチップが知られている。
【０００３】
ＮＡＮＤ型のフラッシュメモリチップとしては、多種の製品が存在しており、不揮発性メモリデバイスに、種類の異なるフラッシュメモリチップが搭載されることが考えられる。このような構成を想定すると、不揮発性メモリデバイス内のフラッシュメモリチップとのＩ／Ｏ処理を制御するフラッシュメモリコントローラと、フラッシュメモリチップとのそれぞれに設けられるインターフェース（フラッシュＩ／Ｆ）における各種パラメータを、フラッシュメモリチップの種類ごとに最適化する必要がある。
【０００４】
フラッシュＩ／Ｆにおける各種パラメータを最適化する場合には、例えば、フラッシュＩ／Ｆによる伝送波形をオシロスコープで評価して最適なパラメータを探索することが考えられる。
【０００５】
例えば、ＬＳＩ間の伝送を行うＩ／Ｆのパラメータを最適化する方法として、複数の動作周波数帯ごとの電源電圧と設定パラメータとのテーブルを用意し、設定パラメータをテーブルから選択する技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−４１１０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、フラッシュＩ／Ｆによる伝送波形をオシロスコープで評価することによりパラメータを最適化する場合には、多くの工数を要することとなる。
【０００８】
また、使用されるフラッシュメモリチップが同一の種類のチップである場合においても、個体ごとのばらつきや、フラッシュメモリチップの実装位置等によって、フラシュメモリコントローラとの間の配線長や接続関係が異なり、必ずしも同じパラメータが最適であるとは限らない。このため、このような場合においても、フラッシュＩ／Ｆにおけるパラメータを最適化する必要がある。
【０００９】
また、不揮発性メモリデバイスを使用している状態等によっても、フラッシュＩ／Ｆにおけるパラメータの最適値が変化する場合もあり、このような場合においても、パラメータを最適化する必要がある。
【００１０】
本発明は、上記事情に鑑みなされたものであり、その目的は、不揮発メモリコントローラと不揮発性メモリチップとの間のＩ／Ｏ処理に用いられるインターフェースにおけるパラメータを容易且つ適切に設定することのできる技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、一観点に係る不揮発性メモリデバイスは、複数の不揮発性メモリチップと、不揮発性メモリチップとの間のデータのＩ／Ｏ処理を実行するインターフェースを備える不揮発性メモリコントローラと、を有する不揮発性メモリデバイスであって、不揮発性メモリコントローラは、複数の不揮発性メモリチップと複数のチャネルを介して接続され、複数のチャネルのそれぞれに対応してインターフェースが設けられており、不揮発性メモリコントローラは、上位装置と不揮発性メモリコントローラとの間のデータ転送速度に関する上位転送速度情報を取得し、複数のチャネルに対応するそれぞれのインターフェースによる不揮発性メモリチップとの間の転送速度の合計である合計転送速度が、上位転送速度情報に対応する上位転送速度と同じ又は上位転送速度に近い転送速度となるように、インターフェースの転送速度に関する転送速度情報を決定し、それぞれのインターフェースに対して決定した転送速度情報に基づいて転送速度に関する設定を行う。
【発明の効果】
【００１２】
本発明によれば、不揮発メモリコントローラと不揮発性メモリチップとの間のＩ／Ｏ処理に用いられるインターフェースにおけるパラメータを容易且つ適切に設定することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、一実施形態に係る計算機システムの全体構成図である。
【図２】図２は、一実施形態に係るフラッシュメモリデバイスの構成図である。
【図３】図３は、一実施形態に係るＦＭ−ＣＴＬとＦＭチップとのデータの伝送に関わる構成を説明する図である。
【図４】図４は、一実施形態に係るＦＭ−ＣＴＬとＦＭチップとの伝送路の信号電圧に関わる構成を説明する図である。
【図５】図５は、一実施形態に係る更新条件テーブルの構成図である。
【図６】図６は、一実施形態に係る電圧値テーブルの構成図である。
【図７】図７は、一実施形態に係るコマンド別タイミングテーブルの構成図である。
【図８】図８は、一実施形態に係る制御コマンドの信号構成と、タイミングとを示す図である。
【図９】図９は、一実施形態に係る設定値テーブルの構成図である。
【図１０】図１０は、一実施形態に係る設定管理テーブルの構成図である。
【図１１】図１１は、一実施形態に係るパラメータ更新処理のフローチャートである。
【図１２】図１２は、一実施形態に係るトレーニング処理のシーケンス図である。
【図１３】図１３は、一実施形態に係る周波数トレーニング処理のフローチャートである。
【図１４】図１４は、一実施形態に係るコマンドタイミングトレーニング処理のフローチャートである。
【図１５】図１５は、一実施形態に係るＦＭ−ＣＴＬからＦＭチップへの送信に関する電圧値トレーニング処理のフローチャートである。
【図１６】図１６は、一実施形態に係るＦＭチップからＦＭ−ＣＴＬへの送信に関する電圧値トレーニング処理のフローチャートである。
【図１７】図１７は、変形例に係る信号別タイミングテーブルの構成図である。
【発明を実施するための形態】
【００１４】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１５】
以下の説明では、「ＡＡＡテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ＡＡＡテーブル」を「ＡＡＡ情報」と呼ぶことができる。
【００１６】
また、以下の説明では、「ＲＡＩＤ」は、Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  （ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓの略である。
【００１７】
図１は、一実施形態に係る計算機システムの全体構成図である。
【００１８】
計算機システム１は、１以上のホスト（ＨＯＳＴ）２と、１以上のストレージシステム３と、ホスト２とストレージシステム３とを接続するＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）４とを備える。ＳＡＮ４を別の種類の通信ネットワークとしてもよい。
【００１９】
ホスト２は、ストレージシステム３に対するＩ／Ｏ（入出力）要求、すなわち、ストレージシステム３に格納されているデータを読み出す読み出し要求（Ｒｅａｄ要求）や、ストレージシステム３にデータを書き込む書き込み要求（Ｗｒｉｔｅ要求）をストレージシステム３に送信する。
【００２０】
ストレージシステム３は、１以上の上位装置の一例としてのディスクコントローラ（ＤＫＣ）１０と、１以上のＦＭＤ（フラッシュメモリデバイス）２０とを有する。
【００２１】
ＦＭＤ２０は、ホスト２などからの書き込みデータを格納するための記憶デバイスであり、フラッシュメモリ等の不揮発性メモリを記憶媒体として採用した記憶デバイス（不揮発性メモリデバイス）である。
【００２２】
ＦＭＤ２０は、複数のＦＭチップ（フラッシュメモリチップ：不揮発性メモリチップ）４０と、ＦＭ−ＣＴＬ（フラッシュメモリコントローラ：不揮発性メモリコントローラ）３０とを備える。ＦＭＤ２０の詳細な構成は後述する。ＦＭＤ２０は、例えば、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格に従う伝送線（ＳＡＳリンク）や、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）規格に従う伝送線（ＰＣＩリンク）などによって、ディスクコントローラ１０と接続されている。
【００２３】
ディスクコントローラ１０は、ホスト２からのＩ／Ｏ要求を受信し、Ｉ／Ｏ要求に従ってＩ／Ｏ処理（ＦＭＤ２０からデータを読み出す読み出し処理や、ＦＭＤ２０にデータを書き込む書き込み処理）を実行する。なお、ディスクコントローラ１０により、複数のＦＭＤ２０により構成されるＲＡＩＤグループ（パリティグループ）を管理させ、ＲＡＩＤグループに関連付けられたＲＡＩＤレベルに従って、ＲＡＩＤグループに対する読み出し処理や、書き込み処理を実行させるようにしてもよい。
【００２４】
次に、ＦＭＤ２０について詳細に説明する。
【００２５】
図２は、一実施形態に係るフラッシュメモリデバイスの構成図である。
【００２６】
ＦＭＤ２０は、ＦＭ−ＣＴＬ３０と、複数のＦＭチップ４０と、メインメモリ５０と、ファームウェア用メモリ６０とを備える。ＦＭ−ＣＴＬ３０は、メインメモリ５０と、ファームウェア用メモリ６０とに接続されている。また、ＦＭ−ＣＴＬ３０は、伝送路（バス：ＦＭ−ＢＵＳ）７０を介して、複数のＦＭチップ４０と接続されている。本実施形態では、伝送路７０は、複数のチャネル（図２では、例えば、４つ）を有しており、それぞれのチャネルに複数のＦＭチップ４０が接続されている。各チャネルは、それぞれ独立してデータ転送を行うことができる。
【００２７】
ＦＭ−ＣＴＬ３０は、メインメモリ５０に記憶されているプログラムを実行することにより、各種処理を実行する。例えば、ＦＭ−ＣＴＬ３０は、ＦＭチップ４０との間のデータのＩ／Ｏ処理を制御する。また、ＦＭ−ＣＬＴ３０は、自身とＦＭチップ４０との間の通信を実行するインターフェース（フラッシュＩ／Ｆ３２，４２）のパラメータの設定を更新するパラメータ更新処理等を実行する。
【００２８】
ＦＭチップ４０は、例えば、ＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリチップである。ＦＭチップ４０としては、例えば、ＱＬＣ方式のＦＭチップや、ＴＬＣ方式のＦＭチップや、ＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）方式のＦＭチップなどがある。
【００２９】
メインメモリ５０は、例えば、ＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体で構成されてもよく、不揮発性メモリで構成されてもよい。メインメモリ５０は、ＦＭ−ＣＴＬ３０で実行されるプログラムや必要な情報を記憶する。
【００３０】
ファームウェア用メモリ６０は、例えば、フラッシュメモリ等の不揮発性メモリであり、ＦＭ−ＣＴＬ３０で実行されるプログラムや、各種テーブル等を記憶する。ファームウェア用メモリ６０に対しては、ＦＭＤ２０の外部の装置から（ＦＭ−ＣＴＬ３０を介して、又は、ＦＭ−ＣＴＬ３０を介さずに）プログラムやテーブル等を格納させることができる。
【００３１】
ファームウェア用メモリ６０は、更新条件テーブル６１と、電圧値テーブル６２と、設定値テーブル６３と、設定管理テーブル６４と、コマンド別タイミングテーブル６５とを記憶する。各テーブルの構成については後述する。ファームウェア用メモリ６０は、更新情報記憶部の一例である。
【００３２】
次に、ＦＭ−ＣＴＬ３０とＦＭチップ４０との間のデータの伝送に関わる構成について説明する。
【００３３】
図３は、一実施形態に係るＦＭ−ＣＴＬとＦＭチップとのデータの伝送に関わる構成を説明する図である。
【００３４】
ＦＭ−ＣＴＬ３０は、プロセッサの一例としてのＣＰＵ３１と、１以上のフラッシュインターフェース（フラッシュＩ／Ｆ：Ｆｌａｓｈ  Ｉ／Ｆ）３２と、電圧モニタユニット３５と、Ｉ／Ｏエラーモニタユニット３６と、温度モニタユニット３７とを備える。
【００３５】
ＣＰＵ３１は、メインメモリ５０に格納されたプログラムを実行することにより各種処理を実行する。ＣＰＵ３１は、ＦＭチップ４０との間のデータのＩ／Ｏ処理を制御する。また、ＣＰＵ３１は、ＦＭ−ＣＴＬ３０と各ＦＭチップ４０との間の通信を実行するインターフェース（フラッシュＩ／Ｆ３２，４２）のパラメータを更新するパラメータ更新処理等を実行する。
【００３６】
各フラッシュＩ／Ｆ３２は、伝送路７０におけるそれぞれのチャネルに対応付けられて備えられており、Ｉ／Ｏ制御ユニット３３と、コマンド制御ユニット３４とを備える。Ｉ／Ｏ制御ユニット３３は、対応するチャネルに接続されている複数のＦＭチップ４０との間のデータのＩ／Ｏ処理を制御する。コマンド制御ユニット３４は、対応するチャネルに接続されているＦＭチップ４０に対するコマンドの送受信を制御する。
【００３７】
電圧モニタユニット３５は、各フラッシュＩ／Ｆ３２とＦＭチップ４０との間の信号線の電圧を測定し、測定結果をＣＰＵ３１に通知する。Ｉ／Ｏエラーモニタユニット３６は、ＦＭチップ４０から送信されるデータについてのＩ／Ｏエラーを監視し、監視結果をＣＰＵ３１に通知する。Ｉ／Ｏエラーモニタユニット３６は、ＣＰＵ３１が所定のプログラムを実行することにより構成される機能部としてもよい。温度モニタユニット３７は、ＦＭ−ＣＴＬ３０の温度、ＦＭＤ２０への吸気温度、ＦＭＤ２０からの排気温度等を検出し、検出結果をＣＰＵ３１に通知する。なお、電圧モニタユニット３５、Ｉ／Ｏエラーモニタユニット３６、及び温度モニタユニット３７の少なくとも一つをＦＭ−ＣＴＬ３０の外部に備えてもよい。
【００３８】
ＦＭチップ４０は、制御ユニット４１と、フラッシュインターフェース（フラッシュＩ／Ｆ）４２と、電圧モニタユニット４５と、Ｉ／Ｏエラーモニタユニット４６と、温度モニタユニット４７とを備える。
【００３９】
制御ユニット４１は、各種処理を実行する。
【００４０】
フラッシュＩ／Ｆ４２は、Ｉ／Ｏ制御ユニット４３と、コマンド制御ユニット４４とを備える。Ｉ／Ｏ制御ユニット４３は、ＦＭ−ＣＴＬ３０のフラッシュＩ／Ｆ３２との間でデータのＩ／Ｏ処理を制御する。コマンド制御ユニット４４は、ＦＭ−ＣＴＬ３０との間のコマンドの送受信を制御する。
【００４１】
電圧モニタユニット４５は、ＦＭ−ＣＴＬ３０とＦＭチップ４０との間の信号線の電圧を測定し、測定結果をＦＭ−ＣＴＬ３０のＣＰＵ３１に通知する。Ｉ／Ｏエラーモニタユニット４６は、ＦＭ−ＣＴＬ３０から送信されるデータについてのＩ／Ｏエラーを監視し、監視結果をＦＭ−ＣＴＬ３０のＣＰＵ３１に通知する。Ｉ／Ｏエラーモニタユニット４６は、制御ユニット４１が所定のプログラムを実行することにより構成される機能部としてもよい。温度モニタユニット４７は、ＦＭチップ４０の温度等を検出し、検出結果をＦＭ−ＣＴＬ３０のＣＰＵ３１に通知する。電圧モニタユニット４５、Ｉ／Ｏエラーモニタユニット４６、及び温度モニタユニット４７の少なくとも一つをＦＭチップ４０の外部に備えてもよい。
【００４２】
次に、ＦＭ−ＣＴＬ３０とＦＭチップ４０との伝送路の信号電圧に関わる構成について説明する。
【００４３】
図４は、一実施形態に係るＦＭ−ＣＴＬとＦＭチップとの伝送路の信号電圧に関わる構成を説明する図である。
【００４４】
ＦＭ−ＣＴＬ３０には、図示しない電源から電力が供給されている。ＦＭ−ＣＴＬ３０の各フラッシュＩ／Ｆ３２においては、伝送路７０の信号線７０ａとプラス側電源Ｖｄｄとの間に、抵抗３２ａとスイッチ（ＳＷ）３２ｂとの組が１以上配置されているとともに、信号線７０ａとマイナス側電源Ｖｓｓとの間に、抵抗３２ｃとスイッチ（ＳＷ）３２ｄとの組が１以上配置されている。なお、図４では、伝送路７０の１つの信号線７０ａに関わる構成を図示しているが、伝送路７０の他の信号線に関わる構成についても同様となっている。
【００４５】
このような構成において、スイッチ３２ｂの開閉を制御して、信号線７０ａと、プラス側電源との間の抵抗値を制御することにより、フラッシュＩ／Ｆ３２から信号を送信する際の信号の電圧（出力電圧）を調整することができる。また、スイッチ３２ｄの開閉を制御して、信号線７０ａと、マイナス側電源との間の抵抗値を制御することにより、ＦＭチップ４０のフラッシュＩ／Ｆ４２から信号を受信する際の終端抵抗値を調整することができる。
【００４６】
ＦＭチップ４０には、図示しない電源から電力が供給されている。ＦＭチップ４０の各フラッシュＩ／Ｆ４２においては、伝送路７０の信号線７０ａとプラス側電源Ｖｄｄとの間に、抵抗４２ａとスイッチ（ＳＷ）４２ｂとの組が１以上配置されているとともに、信号線７０ａとマイナス側電源Ｖｓｓとの間に、抵抗４２ｃとスイッチ（ＳＷ）４２ｄとの組が１以上配置されている。
【００４７】
このような構成において、スイッチ４２ｂの開閉を制御して、信号線７０ａと、プラス側電源Ｖｄｄとの間の抵抗値を制御することにより、フラッシュＩ／Ｆ４２から信号を送信する際の信号の電圧（出力電圧）を調整することができる。また、スイッチ４２ｄの開閉を制御して、信号線７０ａと、マイナス側電源Ｖｓｓとの間の抵抗値を制御することにより、ＦＭ−ＣＴＬ３０のフラッシュＩ／Ｆ３２から信号を受信する際の終端抵抗値を調整することができる。
【００４８】
なお、上記構成においては、スイッチ３２ｂ、スイッチ３２ｄ、スイッチ４２ｂ、スイッチ４２ｄ等の開閉を制御することにより、信号線７０ａに接続される抵抗値を調整するようにしているが、例えば、スイッチ及び抵抗の組に代えて可変抵抗器を備えるようにしてもよい。
【００４９】
次に、ファームウェア用メモリ６０に格納されている各種テーブルについて説明する。
【００５０】
図５は、一実施形態に係る更新条件テーブルの構成図である。
【００５１】
更新情報テーブル６１は、フラッシュＩ／Ｆ３２，４２のパラメータを更新するパラメータ更新処理を実行する条件（更新条件）に対応するエントリを管理する。更新情報テーブル６１のエントリは、条件６１ａと、内容６１ｂと、基準（前回値）６１ｃと、誤差６１ｄとのフィールドを含む。
【００５２】
条件６１ａには、エントリに対応する条件の名称が格納される。内容６１ｂには、エントリに対応する条件の内容が格納される。基準（前回値）６１ｃには、エントリに対応する条件における基準、又は前回値（前回のパラメータ更新処理の実行時の値）が格納される。誤差６１ｄには、条件の内容が所定の値との不一致である場合において、不一致として判断されない誤差の範囲が格納される。
【００５３】
更新情報テーブル６１のエントリ６１１は、ＦＭ−ＣＴＬ３０の温度変化の条件に対応し、ＦＭ−ＣＴＬ３０の温度が前回値と不一致、すなわち、前回値（図５の例では、７０℃）に対して±０．５℃（誤差）の範囲を外れた場合に、パラメータ更新処理を実行することを示し、エントリ６１２は、ＦＭＤ２０の吸気温度の温度変化の条件に対応し、ＦＭＤ２０の吸気温度が前回値と不一致、すなわち、前回値（図５の例では、２５℃）に対して±０．５℃（誤差）の範囲を外れた場合に、パラメータ更新処理を実行することを示し、エントリ６１３は、ＦＭＤ２０の排気温度の温度変化の条件に対応し、ＦＭＤ２０の排気温度が前回値と不一致、すなわち、前回値（図５の例では、５０℃）に対して±０．５℃（誤差）の範囲を外れた場合に、パラメータ更新処理を実行することを示し、エントリ６１４は、フラッシュＩ／Ｆの電圧変化の条件に対応し、フラッシュＩ／Ｆ３２，４２による読取電圧（読み取る信号の電圧）が前回値と不一致、すなわち、前回値（図５の例では、１．８０Ｖ）に対して±０．０２Ｖ（誤差）の範囲を外れた場合に、パラメータ更新処理を実行することを示す。
【００５４】
また、エントリ６１５は、ＦＭチップ４０の温度変化の条件に対応し、複数のＦＭチップ４０の平均温度が前回値と不一致、すなわち、前回値（図５の例では、３０℃）に対して±０．５℃（誤差）の範囲を外れた場合に、パラメータ更新処理を実行することを示し、エントリ６１６は、Ｉ／Ｏエラーの条件に対応し、ＦＭチップ４０との間のＩ／Ｏ処理でのＩ／Ｏエラーが基準（図５の例では、５回／１時間）以上発生した場合に、パラメータ更新処理を実行することを示し、エントリ６１７は、ＦＭＤ２０の起動時間の条件に対応し、ＦＭＤ２０における前回のパラメータ更新処理からの経過時間が基準（図５の例では、３０分）以上経過した場合に、パラメータ更新処理を実行することを示し、エントリ６１８は、ＦＭＤ２０の初回起動の条件に対応し、ＦＭＤ２０の電源がオン（ＯＮ）されてから１回目（まだ、パラメータ更新処理を実行していない）の場合に、パラメータ更新処理を実行することを示す。なお、更新条件は、図５の例に限られず、他の条件としてもよい。例えば、エントリ６１５では、複数のＦＭチップ４０の平均温度の前回値との不一致としていたが、複数のＦＭチップ４０の中の特定のＦＭチップ４０の温度の前回値との不一致としてもよく、また、複数のＦＭチップ４０の最高温度の前回値との不一致としてもよい。
【００５５】
次に、電圧値テーブル６２について説明する。
【００５６】
図６は、一実施形態に係る電圧値テーブルの構成図である。
【００５７】
電圧値テーブル６２は、フラッシュＩ／Ｆにおける信号の電圧値に関するエントリを格納する。電圧値テーブル６２のエントリは、変数（Ｐａｒａｍｅｔｅｒ）６２ａと、記号（Ｓｙｍｎｂｏｌ）６２ｂと、最小値（Ｍｉｎ）６２ｃと、基準値（Ｔｙｐ）６２ｄと、最大値（Ｍａｘ）６２ｅと、単位（Ｕｎｉｔ）６２ｆと、を含む。
【００５８】
変数６２ａには、エントリに対応する電圧値の変数の種類が格納される。本実施形態では、電圧値の変数としては、例えば、入力信号のＨｉｇｈ側（高電位側）の電圧（入力高電位電圧：Ｉｎｐｕｔ  ｈｉｇｈ  ｖｏｌｔａｇｅ）、入力信号のＬｏｗ側（低電位側）の電位（入力低電位電圧：Ｉｎｐｕｔ  ｌｏｗ  ｖｏｌｔａｇｅ）等がある。記号６２ｂは、エントリに対応する変数を示す記号が格納される。最小値６２ｃには、エントリに対応する変数の基準値の最小値が格納される。基準値６２ｄには、エントリに対応する変数の基準値が格納される。最大値６２ｅには、エントリに対応する変数の基準値の最大値が格納される。単位６２ｆには、エントリに対応する変数の単位が格納される。
【００５９】
次に、コマンド別タイミングテーブル６５について説明する。
【００６０】
図７は、一実施形態に係るコマンド別タイミングテーブルの構成図である。
【００６１】
コマンド別タイミングテーブル６５は、フラッシュＩ／Ｆ３２が出力する制御コマンド毎のエントリを格納する。コマンド別タイミングテーブル６５のエントリは、コマンド（Ｃｏｍｍａｎｄ）６５ａと、最小値（Ｍｉｎ）６５ｂと、最大値（Ｍａｘ）６５ｃと、単位（Ｕｎｉｔ）６５ｄとのフィールドを含む。コマンド６５ａには、制御コマンドの名称が格納される。最小値６５ｂには、エントリに対応する制御コマンドとして必要な最小値（ここでは、図７の例では、最小時間）が格納される。最大値６５ｃには、エントリに対応する制御コマンドとしての最大値が格納される。単位６５ｄには、エントリに対応する制御コマンドの最小値６５ｂ及び最大値６５ｃの値の単位が格納される。
【００６２】
ここで、制御コマンドの信号について説明する。
【００６３】
図８は、一実施形態に係る制御コマンドの信号構成と、タイミングとを示す図である。図８は、制御コマンドの中のコマンドラッチ（Ｃｏｍｍａｎｄ  Ｌａｔｃｈ）を例に示している。
【００６４】
コマンドラッチは、ＣＬＥ（Ｃｏｍｍａｎｄ  Ｌａｔｃｈ  Ｅｎａｂｌｅ）信号と、ＷＥ（Ｗｒｉｔｅ  Ｅｎａｂｌｅ）信号とで表現される。コマンドラッチは、ＣＬＥ信号をセットアップする時間（ｔＣＬＳ：  ＣＬＥ  Ｓｅｔｕｐ  Ｔｉｍｅ）と、ＣＬＥ信号を維持する時間（ｔＣＬＨ：  ＣＬＥ  Ｈｏｌｄ  Ｔｉｍｅ）とで構成される。コマンドラッチに必要な時間は、ｔＣＬＳと、ｔＣＬＨとを加算した時間となる。
【００６５】
次に、設定値テーブル６３について説明する。
【００６６】
図９は、一実施形態に係る設定値テーブルの構成図である。
【００６７】
設定値テーブル６３は、フラッシュＩ／Ｆ３２において設定可能な各種パラメータについての設定を管理するテーブルである。なお、フラッシュＩ／Ｆ３２のそれぞれに対して、それぞれ別の設定値テーブル６３を備えるようにしてもよく、共通の１つを備えるようにしてもよい。本実施形態においては、各ＦＭチップ４０のフラッシュＩ／Ｆ４２についての設定値テーブル６３と同様な設定値テーブルが、ＦＭチップ４０内のメモリ、レジスタ等に格納されている。
【００６８】
設定値テーブル６３のエントリは、設定番号（設定＃）６３ａと、変数（Ｐａｒａｍｅｔｅｒ）６３ｂと、記号（Ｓｙｍｂｏｌ）６３ｃと、設定値６３ｄと、単位（Ｕｎｉｔ）６３ｅとのフィールドを含む。
【００６９】
設定番号６３ａは、エントリに対応する設定を示す番号（設定番号）が格納される。変数６３ｂには、エントリに対応するパラメータの種類名が格納される。パラメータの種類としては、フラッシュＩ／Ｆ３２における動作周波数（転送速度（転送レート）に対応、転送速度情報の一例）を示す「周波数」、出力（送信）する場合におけるプラス電位Ｖｄｄ側の抵抗値を示す「出力抵抗」、入力（受信）する場合におけるマイナス電位Ｖｓｓ側の抵抗値を示す「入力抵抗」等がある。記号６３ｃには、エントリに対応するパラメータを示す記号が格納される。記号６３ｃには、パラメータの種類が「周波数」の場合には、「Ｆ」が設定され、「出力抵抗」の場合には、「Ｒｏｎ」が設定され、「入力抵抗」の場合には、「Ｒｏｄｔ」が設定される。設定値６３ｄには、エントリに対応する設定におけるパラメータの設定値が格納される。単位６３ｅには、エントリに対応する設定値６３ｄの設定値についての単位が格納される。単位６３ｅに格納される単位としては、例えば、エントリが周波数に対応するエントリである場合には、「ＭＨｚ」が設定され、出力抵抗又は入力抵抗に対応するエントリである場合には、「Ω」が設定される。
【００７０】
次に、設定管理テーブル６４について説明する。
【００７１】
図１０は、一実施形態に係る設定管理テーブルの構成図である。
【００７２】
設定管理テーブル６４は、フラッシュＩ／Ｆ３２のパラメータの現在の設定を管理するテーブルである。設定管理テーブル６４は、各フラッシュＩ／Ｆ３２毎に少なくとも一つ備えられている。例えば、各フラッシュＩ／Ｆ３２について、設定管理テーブル６４をＩ／Ｏ対象となるＦＭチップ４０毎に備えるようにしてもよい。すなわち、Ｉ／Ｏ対象とするＦＭチップ４０毎に異なるパラメータの設定を管理できるようにしてもよい。
【００７３】
設定管理テーブル６４のエントリは、周波数６４ａと、出力抵抗６４ｂと、入力抵抗６４ｃとのフィールドを含む。周波数６４ａには、フラッシュＩ／Ｆ３２の動作周波数として設定すべき設定値が格納されている設定値テーブル６３のエントリの設定番号が格納される。なお、動作周波数と、転送レートとは、対応しているので、動作周波数の設定値は、転送レートの設定値ということもできる。出力抵抗６４ｂには、フラッシュＩ／Ｆ３２の出力抵抗として設定すべき設定値が格納されている設定値テーブル６３のエントリの設定番号が格納される。入力抵抗６４ｃには、フラッシュＩ／Ｆ３２の入力抵抗として設定すべき設定値が格納されている設定値テーブル６３のエントリの設定番号が格納される。
【００７４】
なお、各ＦＭチップ４０においては、フラッシュＩ／Ｆ４２のパラメータの現在の設定を管理する設定管理テーブル６４と同様な構造の設定管理テーブルがメモリ又はレジスタに格納されている。
【００７５】
次に、本実施形態に係る計算機システム１による処理動作について説明する。
【００７６】
まず、パラメータ更新処理について説明する。
【００７７】
図１１は、一実施形態に係るパラメータ更新処理のフローチャートである。
【００７８】
パラメータ更新処理は、例えば、ＦＭＤ２０を起動させた直後に実行される。まず、ＦＭ−ＣＴＬ３０のＣＰＵ３１は、更新条件テーブル６１を参照し、現在の状態がパラメータの更新条件に該当するか否かを判定する（ステップＳ１０）。この結果、更新条件に該当する場合（Ｓ１１：ｙｅｓ）には、ＣＰＵ３１は、トレーニング処理（図１２参照）を実行し（ステップＳ１１）、処理をステップＳ１０に進める。一方、更新条件に該当しない場合（Ｓ１０：ｎｏ）には、ＣＰＵ３１は、処理をステップＳ１０に進める。このパラメータ更新処理によると、更新条件テーブル６１に管理されている更新条件に該当する場合に、適切にトレーニング処理が実行され、ＦＭ−ＣＴＬ３０とＦＭチップ４０とのフラッシュＩＦ３２，４２が使用する各種パラメータを適切な値に設定することができる。
【００７９】
次に、トレーニング処理（Ｓ１１）について詳細に説明する。
【００８０】
図１２は、一実施形態に係るトレーニング処理のシーケンス図である。
【００８１】
トレーニング処理においては、ＦＭ−ＣＴＬ３０のＣＰＵ３１は、まず、ＦＭ−ＣＴＬ３０と、ＦＭ−ＣＴＬ３０と、ＦＭチップ４０との間の各チャネルにおける周波数（転送レートに対応）を決定する周波数トレーニング処理（図１３参照）を実行する（Ｓ２１）。
【００８２】
次いで、ＣＰＵ３１は、ＦＭ−ＣＴＬ３０と、各ＦＭチップ４０とのフラッシュＩ／Ｆにおける制御コマンドのタイミングを決定するコマンドタイミングトレーニング処理（図１４参照）を実行する（Ｓ２２）。
【００８３】
次いで、ＣＰＵ３１は、ＦＭ−ＣＴＬ３０と、各ＦＭチップ４０とのフラッシュＩ／Ｆ３２，４２における、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理（図１５参照）を実行する（Ｓ２３）。
【００８４】
次いで、ＣＰＵ３１は、各ＦＭチップ４０とＦＭ−ＣＴＬ３０とのフラッシュＩ／Ｆ３２，４２における、ＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値トレーニング処理（図１６参照）を実行し（Ｓ２４）、トレーニング処理を終了する。
【００８５】
このトレーニング処理によると、ＦＭ−ＣＴＬ３０とＦＭチップ４０との間の各チャネルにおける周波数、制御コマンドのタイミング、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値、ＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値を適切な値に設定することができる。
【００８６】
次に、周波数トレーニング処理（Ｓ２１）について説明する。
【００８７】
図１３は、一実施形態に係る周波数トレーニング処理のフローチャートである。
【００８８】
ＦＭ−ＣＴＬ３０のＣＰＵ３１は、上位Ｉ／Ｆ（すなわち、ＤＫＣ１０との間のインターフェース）における動作周波数（転送レート：上位Ｉ／Ｆ周波数：上位転送速度情報）を取得する（Ｓ３１）。ここで、上位Ｉ／Ｆ周波数を取得する方法としては、ＣＰＵ３１がＤＫＣ１０に対して問い合わせして取得するようにしてもよく、ＤＫＣ１０によりＦＭ−ＣＴＬ３０内に設定されている上位Ｉ／Ｆ周波数を取得するようにしてもよい。
【００８９】
次いで、ＣＰＵ３１は、ＤＫＣ１０から新たな上位Ｉ／Ｆ周波数の指定（例えば、ＤＫＣ１０に対する管理者による入力に基づく上位Ｉ／Ｆ周波数の指定）があるか否かを判定する（Ｓ３２）。この結果、上位Ｉ／Ｆ周波数の指定がある場合（Ｓ３２：ｙｅｓ）には、ＣＰＵ３１は、ＦＭ−ＣＴＬ３０におけるＤＫＣ１０との間の上位Ｉ／Ｆ周波数を指定された周波数に切り替える設定を行う（Ｓ３３）。
【００９０】
上位Ｉ／Ｆ周波数の指定がない場合（Ｓ３２：ｎｏ）、又はステップＳ３３で指定された周波数に上位Ｉ／Ｆ周波数を変更した場合には、ＣＰＵ３１は、上位Ｉ／Ｆ周波数に基づいて、各フラッシュＩ／Ｆ３２，４２との動作周波数を決定し、設定管理テーブル６４に登録するとともに、各フラッシュＩ／Ｆ３２，４２を決定した動作周波数で動作するように設定する（Ｓ３４）。なお、ＣＰＵ３１は、設定値テーブル６３のエントリ（変数６３ｂが「周波数」であるエントリ）を参照してフラッシュＩ／Ｆ３２（４２）が動作可能な動作周波数（転送速度情報）を特定し、それら周波数の中から動作周波数を決定する。
【００９１】
動作周波数の決定においては、具体的には、ＣＰＵ３１は、伝送路（ＦＭ−ＢＵＳ）７０の各チャネル用の複数のフラッシュＩ／Ｆ３２の動作周波数に基づく転送レートの合計値（合計転送速度）が、上位Ｉ／Ｆ周波数に基づく転送レート（上位転送速度）と同じとなるか、若しくは、上位転送速度に近い値となるように、フラッシュＩ／Ｆ３２の動作周波数（転送速度情報）を決定する。
【００９２】
より具体的には、例えば、ＣＰＵ３１は、以下の式（１）を満たし、且つ、各チャネル用の複数のフラッシュＩ／Ｆ３２の合計転送速度が最大となるように、フラッシュＩ／Ｆ３２の動作周波数を決定する。なお、式（１）では、各フラッシュＩ／Ｆ３２の動作周波数を同一とすることを条件としている場合の例を示している。なお、各フラッシュＩ／Ｆ３２の動作周波数を同一とすることを条件としなくてもよく、この場合には、式（１）の右辺は、複数のチャネルに接続される複数のフラッシュＩ／Ｆ３２の合計転送レートとなる。
【００９３】
Ｘ（Ｍｂｐｓ）≧Ｙ（Ｍｂｐｓ）＊ｎ        ・・・（１）
ここで、Ｘは、上位Ｉ／Ｆ周波数に対応する転送レート（上位転送速度）であり、Ｙは、１つのフラッシュＩ／Ｆ３２，４２の動作周波数に対応する転送レートであり、ｎは、伝送路７０におけるチャネル数、すなわち、ＦＭ−ＣＴＬ３０が並行してＩ／Ｏ処理を実行することのできるＦＭチップ４０の最大数である。
【００９４】
上記した周波数トレーニング処理によると、各フラッシュＩ／Ｆ３２の動作周波数を、上位Ｉ／Ｆ周波数に基づいて適切な値、すなわち、効率よくデータを転送できる周波数に設定することができる。
【００９５】
次に、コマンドタイミングトレーニング処理（Ｓ２２）について説明する。
【００９６】
図１４は、一実施形態に係るコマンドタイミングトレーニング処理のフローチャートである。なお、コマンドタイミングトレーニング処理は、伝送路７０の各チャネルを担当する各フラッシュＩ／Ｆ３２のそれぞれについて、担当するチャネルに接続された少なくとも一つのＦＭチップ４０に対するコマンドタイミングを対象として実行される。ここで、チャネルの一部のＦＭチップ４０に対するコマンドタイミングのみをトレーニングする場合には、このトレーニングにより得られたコマンドタイミングを、同一のチャネルに接続された他のＦＭチップ４０に対するコマンドタイミングとすればよい。
【００９７】
ＦＭ−ＣＴＬ３０のＣＰＵ３１は、処理対象のフラッシュＩ／Ｆ３２に対して、コマンド別タイミングテーブル６５の１つのコマンド（制御コマンド）を、担当するチャネルに接続されたＦＭチップ４０のフラッシュＩ／Ｆ４２に発行するように指示する（Ｓ４１）。
【００９８】
次いで、指示を受けたフラッシュＩ／Ｆ３２は、指定されたコマンドを、コマンド別タイミングテーブル６５の指定されたコマンドに対応するエントリのタイミング（例えば、コマンドの最小値（最小時間））に従ってＦＭチップ４０のフラッシュＩ／Ｆ４２に発行する（Ｓ４２）。これに対して、ＦＭチップ４０のフラッシュＩ／Ｆ４２は、自身が認識したコマンドに応じた値を発行元のフラッシュＩ／Ｆ３２に返答する。
【００９９】
次いで、フラッシュＩ／Ｆ３２は、コマンドの発行先のフラッシュＩ／Ｆ４２から返答されたコマンドに応じた値を受信し（Ｓ４３）、ＣＰＵ３１は、発行したコマンドと、受信したコマンドの値とが一致するか否かを判定する（Ｓ４４）。
【０１００】
この結果、発行したコマンドと、受信したコマンドの値とが一致すると判定した場合（Ｓ４４：ｙｅｓ）には、このタイミングによってコマンドを適切に送信できることを意味するので、ＣＰＵ３１は、コマンド別タイミングテーブル６５の指定されたコマンドに対応するエントリのタイミングを時間が短くなるように（例えば、所定時間だけ短くなるように）更新し（Ｓ４５）、処理をステップＳ４２に進める。なお、ＣＰＵ３１は、更新前のタイミングの値については、メインメモリ５０等に一時的に保持しておく。
【０１０１】
一方、この結果、発行したコマンドと、受信したコマンドの値とが一致しないと判定した場合（Ｓ４４：ｎｏ）には、このタイミングではコマンドを適切に送信できないことを意味しているので、ＣＰＵ３１は、コマンド別タイミングテーブル６５の指定されたコマンドに対応するエントリのタイミングを、前回の値（すなわち、メインメモリ５０等に一時的に保持している値）に戻し（Ｓ４６）、処理をステップＳ４７に進める。
【０１０２】
ステップＳ４７では、ＣＰＵ３１は、コマンド別タイミングテーブル６５の全てのコマンドを対象にトレーニング（Ｓ４２〜Ｓ４６の処理）が完了したか否かを判定する。この結果、全てのコマンドを対象にトレーニングが完了していない場合（Ｓ４７：ｎｏ）には、ＣＰＵ３１は、処理対象のフラッシュＩ／Ｆ３２に対して、トレーニングをしていない別のコマンドを発行するように指示し（Ｓ４８）、処理をＳ４２に進める。一方、全てのコマンドを対象にトレーニングが完了している場合（Ｓ４７：ｙｅｓ）には、ＣＰＵ３１は、処理対象のフラッシュＩ／Ｆ３２に対するコマンドタイミングトレーニング処理を終了する。
【０１０３】
なお、上記したコマンドタイミングトレーニング処理を、伝送路７０の各チャネルに接続された全てのＦＭチップ４０に対して実行するようにしてもよい。なお、この場合には、各ＦＭチップ４０のそれぞれに対応させてコマンド別タイミングテーブル６５を記憶しておくようにしてもよいし、全てのＦＭチップ４０に対するコマンドタイミングに基づいて、同一のチャネルで共通に使用するコマンドタイミング（例えば、複数のコマンドタイミングの平均値等）を決定し、コマンド別タイミングテーブル６５にそのコマンドタイミングを設定するようにしてもよい。
【０１０４】
上記したコマンドタイミングトレーニング処理によると、各フラッシュＩ／Ｆ３２と、フラッシュＩ／Ｆ４２との間でのコマンド発行時における適切なタイミングを特定し、設定することができる。
【０１０５】
次に、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理（Ｓ２３）について説明する。
【０１０６】
図１５は、一実施形態に係るＦＭ−ＣＴＬからＦＭチップへの送信に関する電圧値トレーニング処理のフローチャートである。
【０１０７】
このＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理は、伝送路７０の各チャネルを担当する各フラッシュＩ／Ｆ３２のそれぞれについて、担当するチャネルに接続された少なくとも一つのＦＭチップ４０に対する送信時の電圧値の設定（具体的には、使用する抵抗値の設定）をするために実行される。なお、担当するチャネルに接続されたすべてのＦＭチップ４０について、電圧値トレーニング処理を実行してもよい。また、チャネルの一部のＦＭチップ４０に対して電圧値トレーニング処理を実行する場合には、このトレーニングにより得られた電圧値の設定を、同一のチャネルに接続された他のＦＭチップ４０に対する送信時の電圧値の設定としてもよい。
【０１０８】
まず、ＣＰＵ３１は、ＦＭチップ４０に、フラッシュＩ／Ｆ３２により所定の波形を送信し（Ｓ５１）、フラッシュＩ／Ｆ４２に入力される波形の電圧値（入力電圧値）をＦＭチップ４０から取得する（Ｓ５２）。この入力電圧値は、ＦＭチップ４０の電圧値モニタユニット４５から取得することができる。
【０１０９】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定する（Ｓ５３）。具体的には、ＣＰＵ３１は、最大電位については、電圧値テーブル６２の変数６２ａが入力高電位電圧のエントリにおける基準値６２ｄの基準値に対して適切な状態にあるか否かを判定し、最小電位については、電圧値テーブル６２の変数６２ａが入力低電位電圧のエントリにおける基準値６２ｄの基準値に対して適切な状態にあるか否かを判定する。
【０１１０】
この結果、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ５３：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理を終了する。
【０１１１】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ５３：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、フラッシュＩ／Ｆ３２の出力側（信号線よりもプラス側電源Ｖｄｄ側の抵抗値（内部出力抵抗値）を変更し、設定管理テーブル６４に出力抵抗の設定番号を登録する（Ｓ５４）。ここで、ＣＰＵ３１は、入力電圧値の最大電圧値が基準値よりも高い場合には、抵抗値を大きくするように変更し、入力電圧値の最大電圧値が基準値よりも低い場合には、抵抗値を小さくするように変更する。この内部出力抵抗値は、フラッシュＩ／Ｆ３２のスイッチ３２ｂの開閉を変更する等により変更することができる。なお、内部出力抵抗値として変更できる候補が複数ある場合には、Ｓ５４からＳ５７までの処理をそれぞれの候補を対象に実行するようにしてもよい。
【０１１２】
次いで、ＣＰＵ３１は、ＦＭチップ４０に、フラッシュＩ／Ｆ３２により所定の波形を送信し（Ｓ５５）、フラッシュＩ／Ｆ４２に入力される波形の電圧値（入力電圧値）をＦＭチップ４０から取得する（Ｓ５６）。
【０１１３】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定し（Ｓ５７）、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ５７：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理を終了する。
【０１１４】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ５７：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、ＦＭチップ４０に対して、フラッシュＩ／Ｆ４２の入力側（信号線よりもマイナス側電源Ｖｓｓ側の抵抗値（内部入力抵抗値）を変更する指示を送信する（Ｓ５８）。ここで、ＣＰＵ３１は、入力電圧値の最小電圧値が基準値よりも高い場合には、抵抗値を大きくするように変更し、入力電圧値の最小電圧値が基準値よりも低い場合には、抵抗値を小さくするように変更する指示を送信する。なお、内部入力抵抗値として変更できる候補が複数ある場合には、Ｓ５８からＳ６１までの処理をそれぞれの候補を対象に実行するようにしてもよい。この抵抗値を変更する変更指示を受けると、ＦＭチップ４０では、フラッシュＩ／Ｆ４２のスイッチ４２ｄの開閉を変更する等により、内部入力抵抗値を変更し、ＦＭチップ４０内の設定管理テーブルに入力抵抗の設定番号を登録する。
【０１１５】
次いで、ＣＰＵ３１は、ＦＭチップ４０に、フラッシュＩ／Ｆ３２により所定の波形を送信し（Ｓ５９）、フラッシュＩ／Ｆ４２に入力される波形の電圧値（入力電圧値）をＦＭチップ４０から取得する（Ｓ６０）。
【０１１６】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定し（Ｓ６１）、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ６１：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭ−ＣＴＬ３０からＦＭチップ４０への送信に関する電圧値トレーニング処理を終了する。
【０１１７】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ６１：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、電圧値テーブル６２の入力電圧値に関する基準値を、基準値の最大値及び最小値の範囲で変更し、処理をステップＳ５１に進める（Ｓ６２）。
【０１１８】
上記したＦＭ−ＣＴＬからＦＭチップへの送信に関する電圧値トレーニング処理によると、ＦＭ−ＣＴＬ３０からＦＭチップ４０に信号を送信する際における信号の電圧値を適切な値に設定することができる。
【０１１９】
次に、ＦＭチップからＦＭ−ＣＴＬへの送信に関する電圧値トレーニング処理（Ｓ２４）について説明する。
【０１２０】
図１６は、一実施形態に係るＦＭチップからＦＭ−ＣＴＬへの送信に関する電圧値トレーニング処理のフローチャートである。
【０１２１】
このＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値トレーニング処理は、伝送路７０の各チャネルを担当する各フラッシュＩ／Ｆ３２のそれぞれについて、担当するチャネルに接続された少なくとも一つのＦＭチップ４０からの受信時の電圧値の設定（具体的には、使用する抵抗値の設定）をするために実行される。なお、担当するチャネルに接続されたすべてのＦＭチップ４０について、電圧値トレーニング処理を実行してもよい。また、チャネルの一部のＦＭチップ４０に対して電圧値トレーニング処理を実行する場合には、このトレーニングにより得られた電圧値の設定を、同一のチャネルに接続された他のＦＭチップ４０からの受信時の電圧値の設定としてもよい。
【０１２２】
まず、ＣＰＵ３１は、ＦＭチップ４０に、ＦＭ−ＣＴＬ３０に対して所定の波形を送信する指示を行う（Ｓ７１）。この指示を受け取ったＦＭチップ４０は、フラッシュＩ／Ｆ４２から所定の波形を送信することとなる。ＣＰＵ３１は、フラッシュＩ／Ｆ４２からフラッシュＩ／Ｆ３２に入力される波形の電圧値（入力電圧値）を電圧モニタユニット３５から取得する（Ｓ７２）。
【０１２３】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定する（Ｓ７３）。具体的には、ＣＰＵ３１は、最大電位については、電圧値テーブル６２の変数６２ａが入力高電位電圧のエントリにおける基準値６２ｄの基準値に対して適切な状態にあるか否かを判定し、最小電位については、電圧値テーブル６２の変数６２ａが入力低電位電圧のエントリにおける基準値６２ｄの基準値に対して適切な状態にあるか否かを判定する。
【０１２４】
この結果、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ７３：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値トレーニング処理を終了する。
【０１２５】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ７３：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、フラッシュＩ／Ｆ４２の出力側（信号線７０ａよりもプラス側電源Ｖｄｄ側の抵抗値（内部出力抵抗値）を変更する指示をＦＭチップ４０に送信する（Ｓ７４）。ここで、ＣＰＵ３１は、入力電圧値の最大電圧値が基準値よりも高い場合には、抵抗値を大きくするように変更し、入力電圧値の最大電圧値が基準値よりも低い場合には、抵抗値を小さくするように変更する指示を送信する。この抵抗値を変更する変更指示を受けると、ＦＭチップ４０では、フラッシュＩ／Ｆ４２のスイッチ４２ｂの開閉を変更する等により、内部出力抵抗値を変更し、ＦＭチップ４０内の設定管理テーブルに出力抵抗の設定番号を登録する。なお、内部出力抵抗値として変更できる候補が複数ある場合には、Ｓ７４からＳ７７までの処理をそれぞれの候補を対象に実行するようにしてもよい。
【０１２６】
次いで、ＣＰＵ３１は、ＦＭチップ４０に、ＦＭ−ＣＴＬ３０に対して所定の波形を送信する指示を行う（Ｓ７５）。次いで、ＣＰＵ３１は、フラッシュＩ／Ｆ４２からフラッシュＩ／Ｆ３２に入力される波形の電圧値（入力電圧値）を電圧モニタユニット３５から取得する（Ｓ７６）。
【０１２７】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定し（Ｓ７７）、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ７７：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値トレーニング処理を終了する。
【０１２８】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ７７：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、フラッシュＩ／Ｆ３２の入力側（信号線よりもマイナス側電源Ｖｓｓ側）の抵抗値（内部入力抵抗値）を変更し、設定管理テーブル６４に入力抵抗の設定番号を登録する（Ｓ７８）。ここで、ＣＰＵ３１は、入力電圧値の最大電圧値が基準値よりも高い場合には、抵抗値を大きくするように変更し、入力電圧値の最大電圧値が基準値よりも低い場合には、抵抗値を小さくするように変更する。この内部入力抵抗値は、フラッシュＩ／Ｆ３２のスイッチ３２ｄの開閉を変更する等により変更することができる。
【０１２９】
次いで、ＣＰＵ３１は、ＦＭチップ４０に、ＦＭ−ＣＴＬ３０に対して所定の波形を送信する指示を行う（Ｓ７９）。次いで、ＣＰＵ３１は、フラッシュＩ／Ｆ４２からフラッシュＩ／Ｆ３２に入力される波形の電圧値（入力電圧値）を電圧モニタユニット３５から取得する（Ｓ８０）。
【０１３０】
次いで、ＣＰＵ３１は、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態（例えば、基準値の±５％の範囲）にあるか否かを判定し（Ｓ８１）、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にあると判定した場合（Ｓ８１：ｙｅｓ）には、その時点の抵抗値の設定が適切であることを意味しているので、ＦＭチップ４０からＦＭ−ＣＴＬ３０への送信に関する電圧値トレーニング処理を終了する。
【０１３１】
一方、入力電圧値の最大電圧及び最小電圧が、それぞれの基準値に対して適切な状態にないと判定した場合（Ｓ８１：ｎｏ）には、その時点の抵抗値の設定が適切でないことを意味しているので、ＣＰＵ３１は、電圧値テーブル６２の入力電圧値に関する基準値を、基準値の最大値及び最小値の範囲で変更し、処理をステップＳ７１に進める（Ｓ８２）。
【０１３２】
上記したＦＭチップからＦＭ−ＣＴＬへの送信に関する電圧値トレーニング処理によると、ＦＭチップ４０からＦＭ−ＣＴＬ３０に信号を送信する際における信号の電圧値を適切な値に設定することができる。
【０１３３】
次に、変形例に係る計算機システムについて説明する。なお、ここでは、便宜的に、上記した計算機システム１の符号を用いて、異なる点について説明する。
【０１３４】
ファームウェア用メモリ６０は、さらに、信号別タイミングテーブル６６を記憶する。
【０１３５】
図１７は、変形例に係る信号別タイミングテーブルの構成図である。
【０１３６】
信号別タイミングテーブル６６は、制御コマンドを構成する各信号の仕様上の１以上のタイミングを管理するテーブルである。信号別タイミングテーブル６６は、制御コマンドを構成する各信号の各タイミング毎のエントリを管理する。信号別タイミングテーブル６６のエントリは、変数（Ｐａｒａｍｅｔｅｒ）６６ａと、記号（Ｓｙｍｂｏｌ）６６ｂと、最小値（Ｍｉｎ）６６ｃと、最大値（Ｍａｘ）６６ｄと、単位（Ｕｎｉｔ）６６ｅとのフィールドを含む。
【０１３７】
変数６６ａには、エントリに対応する信号のタイミングの種類が格納される。本実施形態では、信号のタイミングの種類としては、例えば、ＣＬＥ信号のセットアップ時間（ＣＬＥ  Ｓｅｔｕｐ  Ｔｉｍｅ）や、ＣＬＥ信号のホールド時間（ＣＬＥ  Ｈｏｌｄ  Ｔｉｍｅ）等がある。記号６６ｂは、エントリに対応する変数を示す記号が格納される。最小値６６ｃには、エントリに対応する変数の最小値が格納される。最大値６６ｄには、エントリに対応する変数の最大値が格納される。単位６６ｅには、エントリに対応する変数の単位が格納される。信号別タイミングテーブル６６の１番目と２番目のエントリによると、コマンドラッチを構成するＣＬＥ信号のタイミングとして、ＣＬＥ信号のセットアップ時間と、ＣＬＥ信号のホールド時間とがあり、ＣＬＥ信号のセットアップ時間の最小時間は、１２ｕｓ（マイクロ秒）であり、ＣＬＥ信号のホールド時間の最小時間は、５ｕｓであることがわかる。このことから、コマンドラッチの最小時間は、ＣＬＥ信号のセットアップ時間と、ＣＬＥ信号のホールド時間との最小時間を加算した時間、すなわち、１２＋５＝１７ｕｓであることがわかる。
【０１３８】
変形例に係るコマンドタイミングトレーニング処理は、図１４に示すコマンドタイミングトレーニング処理において、発行したコマンドと返答されたコマンドの値とが一致する場合（Ｓ４４：ｙｅｓ）において、ＣＰＵ３１が信号別タイミングテーブル６６を参照し、発行したコマンドに必要な信号の最小時間を特定し、現在の設定が最小時間と一致する場合には、処理をステップＳ４７に進める一方、最小時間と一致しない場合には、Ｓ４５において、最小時間よりも短くならない範囲でコマンドの時間が短くなるようにタイミングを更新する。
【０１３９】
この変形例によると、コマンドの信号を仕様における最小時間よりも短くならないようにして、パラメータを最適化することができる。
【０１４０】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【０１４１】
例えば、上記実施形態では、入力電圧値が適切な値でない場合（Ｓ５３のｎｏ、Ｓ７３のｎｏ）に、まず、出力抵抗値を変更する処理（Ｓ５４〜Ｓ５６、Ｓ７４〜Ｓ７６）を実行し、それでも入力電圧値が適切な値にならない場合（Ｓ５７：ｎｏ、Ｓ７７：ｎｏ）に、入力抵抗値を変更する処理（Ｓ５８〜Ｓ６０、Ｓ７８〜Ｓ８０）を実行するようにしていたが、本発明はこれに限られず、例えば、入力電圧値が適切な値でない場合に、まず、入力抵抗値を変更する処理を実行し、それでも入力電圧値が適切な値にならない場合に、出力抵抗値を変更する処理を実行するようにしてもよい。また、入力電圧値が適切な値でない場合に、出力抵抗値を変更する処理、又は入力抵抗値を変更する処理のいずれか一方のみを実行するようにしてもよい。また、まず、ＦＭ−ＣＴＬからＦＭチップへの送信に関する電圧値トレーニング処理を実行し、次に、ＦＭチップからＦＭ−ＣＴＬへの送信に関する電圧値トレーニング処理を実行するようにしていたが、本発明はこれに限られず、逆の順番で実行してもよい。
【０１４２】
また、上記実施形態においては、ＦＭ−ＣＴＬ３０の上位ＩＦ周波数として、ＤＫＣ１０との間の周波数としていたが、本発明はこれに限られず、例えば、ＤＫＣ１０からのデータを一時的にメインメモリ５０に格納し、その後、メインメモリ５０からデータを読み出してＦＭチップ４０に格納するような場合（メインメモリ５０も上位装置の一例）であって、メインメモリ５０の動作周波数が、ＤＫＣ１０とＦＭ−ＣＴＬ３０との間の周波数よりも低い場合、すなわち、ＦＭ−ＣＴＬ３０とメインメモリ５０との間の転送レートが、ＤＫＣ１０とＦＭ−ＣＴＬ３０との間の転送レートよりも小さい場合には、上位ＩＦ周波数としては、メインメモリ５０の動作周波数としてもよい。
【０１４３】
また、上記実施形態においては、ＦＭＤ２０がストレージシステム３に備えられている例、すなわち、ＦＭＤ２０がＤＫＣ１０との間でＩ／Ｏ処理を実行する場合を例にしていたが、本発明はこれに限られず、ＦＭＤ２０がＰＣＩｅバスを介してＣＰＵに接続される構成としてもよい。なお、この場合には、ＦＭＤ２０の上位装置の一例は、ＣＰＵとなる。
【０１４４】
また、上記実施形態において、ＦＭ−ＣＴＬ３０のＣＰＵ３１が行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【符号の説明】
【０１４５】
１…計算機システム、２…ホスト、３…ストレージシステム、４…ＳＡＮ、１０…ＤＫＣ、２０…ＦＭＤ、３０…ＦＭ−ＣＴＬ、３１…ＣＰＵ、３２…フラッシュＩ／Ｆ、４０…ＦＭチップ、４２…フラッシュＩ／Ｆ、５０…メインメモリ、６０…ファームウェア用メモリ、７０…伝送路
【図１】
2019215662.tif 000003
【図２】
2019215662.tif 000004
【図３】
2019215662.tif 000005
【図４】
2019215662.tif 000006
【図５】
2019215662.tif 000007
【図６】
2019215662.tif 000008
【図７】
2019215662.tif 000009
【図８】
2019215662.tif 000010
【図９】
2019215662.tif 000011
【図１０】
2019215662.tif 000012
【図１１】
2019215662.tif 000013
【図１２】
2019215662.tif 000014
【図１３】
2019215662.tif 000015
【図１４】
2019215662.tif 000016
【図１５】
2019215662.tif 000017
【図１６】
2019215662.tif 000018
【図１７】
2019215662.tif 000019