JP2020014050A - 装置 - Google Patents

装置 Download PDF

Info

Publication number
JP2020014050A
JP2020014050A JP2018133290A JP2018133290A JP2020014050A JP 2020014050 A JP2020014050 A JP 2020014050A JP 2018133290 A JP2018133290 A JP 2018133290A JP 2018133290 A JP2018133290 A JP 2018133290A JP 2020014050 A JP2020014050 A JP 2020014050A
Authority
JP
Japan
Prior art keywords
frame
state
descrambler
data
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018133290A
Other languages
English (en)
Inventor
渡邉 亮
Akira Watanabe
亮 渡邉
一仁 置田
Kazuhito Okita
一仁 置田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2018133290A priority Critical patent/JP2020014050A/ja
Priority to US16/281,260 priority patent/US10922054B2/en
Publication of JP2020014050A publication Critical patent/JP2020014050A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/582Pseudo-random number generators
    • G06F7/584Pseudo-random number generators using finite field arithmetic, e.g. using a linear feedback shift register
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/20Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits characterised by logic function, e.g. AND, OR, NOR, NOT circuits
    • H03K19/21EXCLUSIVE-OR circuits, i.e. giving output if input signal exists at only one input; COINCIDENCE circuits, i.e. giving output only if all input signals are identical
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/58Indexing scheme relating to groups G06F7/58 - G06F7/588
    • G06F2207/581Generating an LFSR sequence, e.g. an m-sequence; sequence may be generated without LFSR, e.g. using Galois Field arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/58Indexing scheme relating to groups G06F7/58 - G06F7/588
    • G06F2207/583Serial finite field implementation, i.e. serial implementation of finite field arithmetic, generating one new bit or trit per step, e.g. using an LFSR or several independent LFSRs; also includes PRNGs with parallel operation between LFSR and outputs

Abstract

【課題】 正常にフレームを伝送できる装置を実現する。【解決手段】 実施形態によれば、スクランブラを備える外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース(SAS)のパケットモードでフレームを送受信可能な装置は、デスクランブラとコントローラとを具備する。デスクランブラは、前記スクランブラによってスクランブルされたフレームデータをデスクランブルするように構成される。コントローラは、前記外部装置から、第1フレーム内の第1フィールドに対応する第1フレームデータが受信された場合、前記第1フレームデータと、前記第1フレームデータが前記スクランブラによってスクランブルされる前の第1の値とを用いて、前記デスクランブラを前記スクランブラに同期させる。【選択図】 図6

Description

本発明の実施形態は、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース(シリアル・アタッチドSCSI:SAS)を用いて接続される装置に関する。
SASは、2つの装置間を接続するためのインターフェース規格の1つである。SASでは、例えば、イニシエータ・デバイス(以下、イニシエータとも称する)とターゲット・デバイス(以下、ターゲットとも称する)との間で接続を確立し、コマンドやユーザデータ等を送受信するための仕様が規定されている。
イニシエータとターゲットとはそれぞれ、送受信されるインターフェイスデータのビットの偏りを減少させるための機構であるスクランブラおよびデスクランブラを備える。イニシエータのスクランブラとターゲットのデスクランブラとが同期している場合、イニシエータにより送信され、ターゲットにより受信されるインターフェイスデータは、適切にスクランブル/デスクランブルされる。同様に、ターゲットのスクランブラとイニシエータのデスクランブラとが同期している場合、ターゲットにより送信され、イニシエータにより受信されるインターフェイスデータは、適切にスクランブル/デスクランブルされる。
SAS4では、SAS Gen5が新たに規格されている。SAS Gen5では、SAS Gen4でサポートされていたdwordモードに替わり、パケットモードがサポートされる。dwordモードではインターフェイスデータが40ビット単位で扱われるのに対して、パケットモードではインターフェイスデータが150ビット単位で扱われる。
米国特許第8499205号明細書 米国特許第9497020号明細書 米国特許出願公開第2011/0142232号明細書
また、dwordモードとパケットモードとでは、スクランブラとデスクランブラとが同期されるタイミングが異なっている。dwordモードでは、フレームの開始を示すプリミティブの送信に応じてスクランブラが初期化され、このプリミティブの受信に応じてデスクランブラが初期化される。
これに対して、パケットモードでは、PACKET_SYNCエクステンデッド・バイナリ・プリミティブ(以下、PACKET_SYNCとも称する)の送信に応じてスクランブラが初期化され、このPACKET_SYNCの受信に応じてデスクランブラが初期化される。PACKET_SYNCが送受信されるタイミングは、フレームの送受信とは何等関係がない。そのため、予期せぬ動作によってスクランブラとデスクランブラとの同期ずれが発生した場合には、再度、PACKET_SYNCが送受信されるまで同期ずれが継続し、イニシエータとターゲットとの間で伝送されるフレームにエラーが発生し続ける可能性がある。
本実施形態が解決しようとする課題は、正常にフレームを伝送できる装置を提供することである。
実施形態によれば、スクランブラを備える外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース(SAS)のパケットモードでフレームを送受信可能な装置は、デスクランブラとコントローラとを具備する。デスクランブラは、前記スクランブラによってスクランブルされたフレームデータをデスクランブルするように構成される。コントローラは、前記外部装置から、第1フレーム内の第1フィールドに対応する第1フレームデータが受信された場合、前記第1フレームデータと、前記第1フレームデータが前記スクランブラによってスクランブルされる前の第1の値とを用いて、前記デスクランブラを前記スクランブラに同期させる。
実施形態に係る装置を含む情報処理システムの構成を示すブロック図。 図1の情報処理システム内で伝送されるインターフェイスデータを説明するための図。 同実施形態の装置によって送受信されるパケットの構成を示す図。 同実施形態の装置における、PACKET_SYNCが正常に受信される場合と正常に受信されない場合のパケット受信のタイミングチャート。 同実施形態の装置によって、既定値フィールドの値と既定期待値とを用いて受信フレームがデスクランブルされる例を説明するための図。 同実施形態の装置の構成を示すブロック図。 同実施形態の装置に設けられるスクランブラおよびデスクランブラの構成を示すブロック図。 同実施形態の装置で用いられる前進するように遷移するLFSRと、後退するように遷移するLFSRとの構成を示す図。 同実施形態の装置によって送受信されるアイデンティファイ・アドレス・フレームのフォーマットの例を示す図。 同実施形態の装置によって、アイデンティファイ・アドレス・フレーム内の既定値フィールドを用いて、線形フィードバック・シフト・レジスタ(LFSR)の状態とスクランブリングデータが算出される例を説明するための図。 図10の既定値フィールドの値の算出に用いられたスクランブリングデータが生成された時点のLFSRの状態を復元するための関数の例を示す図。 図10のアイデンティファイ・アドレス・フレームに後続するEOAFプリミティブ(以下、EOAFとも称する)が受信される時点のLFSRの状態を算出するための関数の例を示す図。 図10のアイデンティファイ・アドレス・フレームをデスクランブルするためのスクランブリングデータを算出するための関数の例の第1部分を示す図。 図13の第1部分に後続する第2部分を示す図。 図14の第2部分に後続する第3部分を示す図。 図15の第3部分に後続する第4部分を示す図。 図16の第4部分に後続する第5部分を示す図。 図17の第5部分に後続する第6部分を示す図。 同実施形態の装置によって送受信されるオープン・アドレス・フレームのフォーマットの例を示す図。 同実施形態の装置によって、オープン・アドレス・フレーム内の既定値フィールドを用いて、LFSRの状態とスクランブリングデータが算出される例を説明するための図。 同実施形態の装置によって、オープン・アドレス・フレーム内の既定値フィールドの値を用いてLFSRの状態とスクランブリングデータが算出される別の例を説明するための図。 同実施形態の装置によって実行されるアドレス・フレームの送信制御処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるプリミティブ・セグメント送信処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるフレーム・セグメント送信処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるアドレス・フレームの受信制御処理の手順の例を示すフローチャート。 同実施形態の装置によって実行される復元処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるアドレス・フレームの検証処理の手順の例を示すフローチャート。 同実施形態の装置によって送受信されるシリアル・スモール・コンピュータ・システム・インターフェース・プロトコル(SSP)フレームのフォーマットの例を示す図。 同実施形態の装置によって、SSPフレーム内の既定値フィールドを用いて、LFSRの状態とスクランブリングデータが算出される例を説明するための図。 同実施形態の装置によって実行されるSSPフレームの送信制御処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるSSPフレームの受信制御処理の手順の例を示すフローチャート。 同実施形態の装置によって実行されるSSPフレームの検証処理の手順の例を示すフローチャート。
以下、実施の形態について図面を参照して説明する。
まず、図1を参照して、一実施形態に係る装置を含む情報処理システムの構成を説明する。この情報処理システム1は、SASインターフェースにより相互に接続される2つの装置を備える。これら装置の一方はイニシエータ・デバイス(以下、イニシエータとも称する)10であり、他方はターゲット・デバイス(以下、ターゲットとも称する)20である。
イニシエータ10は、例えば、コンピュータ等のホストである。ターゲット20は、例えば、HDD、SSD等のストレージデバイスである。イニシエータ10とターゲット20とは、SASの規定に基づき動作するインターフェース装置10A,20Aをそれぞれ備えている。
イニシエータ10とターゲット20とは、インターフェース装置10A,20Aを介して、コマンドやユーザデータ等を送受信することができる。イニシエータ10とターゲット20とは、それぞれ、フレームを送信するトランスミッタ・デバイス(Tx)とフレームを受信するレシーバ・デバイス(Rx)のいずれとしても動作可能である。伝送されるフレームは、アイデンティファイ・アドレス・フレーム、オープン・アドレス・フレーム、シリアル・スモール・コンピュータ・システム・インターフェース・プロトコル(SSP)フレーム、シリアル・マネージメント・プロトコル(SMP)フレーム、またはシリアル・アドバンスド・テクノロジー・アタッチメント・トンネルド・プロトコル(STP)フレームである。また、各フレームは、CRCを含み、フレームデータの信頼性が確保されている。
イニシエータ10のインターフェース装置10Aとターゲット20のインターフェース装置20Aとはそれぞれ、送受信されるインターフェイスデータのビットの偏りを減少させるための機構であるスクランブラおよびデスクランブラを備える。以下では、インターフェース装置10A,20Aが、SAS Gen5のスクランブラおよびデスクランブラを備えることを想定する。
SAS Gen5の装置であるイニシエータ10およびターゲット20では、パケットモードにおいて、スクランブラおよびデスクランブラは以下のように構成される。
(1)PACKET_SYNCの送信に応じてスクランブラが初期化される。
(2)プリミティブの送信時にスクランブラが動作する。
(3)PACKET_SYNCの受信に応じてデスクランブラが初期化される。
(4)プリミティブの受信時にデスクランブラが動作する。
(5)フレーム内のdwordまたはフレーム外のdwordの送信時に、スクランブラがdwordをスクランブルし、動作する。
(6)フレーム内のdwordまたはフレーム外のdwordの受信時に、デスクランブラがdwordをデスクランブルし、動作する。
このように、スクランブラは、プリミティブが送信されるときに動作するが、プリミティブをスクランブルしない。また、デスクランブラは、プリミティブが受信されるときに動作するが、プリミティブをデスクランブルしない。
ここで、スクランブラが動作するとは、スクランブラの動作回数が増加し、スクランブラの状態が次の状態に遷移することを意味する。スクランブラは、状態が遷移する毎に、スクランブルのための異なるパターンを生成する。また、デスクランブラが動作するとは、デスクランブラの動作回数が増加し、デスクランブラの状態が次の状態に遷移することを意味する。デスクランブラは、状態が遷移する毎に、デスクランブルのための異なるパターンを生成する。以下では、「スクランブルが動作する」を、「スクランブラがラン(RUN)する」とも称する。
イニシエータ10からターゲット20に、フレームを構成するフレームデータが送信される場合、イニシエータ10は、スクランブラによってスクランブルされたフレームデータをターゲット20に送信し、ターゲット20は、イニシエータ10から受信したフレームデータをデスクランブラによってデスクランブルする。同様に、ターゲット20からイニシエータ10にフレームデータが送信される場合、ターゲット20は、スクランブラによってスクランブルされたフレームデータをイニシエータ10に送信し、イニシエータ10は、ターゲット20から受信したフレームデータをデスクランブラによってデスクランブルする。
上述したように、スクランブラとデスクランブラとはそれぞれ、ラン毎に状態が遷移し、それによりスクランブル/デスクランブルに用いられるパターンが切り替わる。スクランブラとデスクランブラとは初期状態からのラン回数が同じであれば、すなわち、スクランブラとデスクランブラとが同期しているならば、同一のパターンを生成する。つまり、スクランブラとデスクランブラとの初期状態からのラン回数が同じあることは、スクランブラとデスクランブラとが同期していることを意味する。なお、スクランブラとデスクランブラとが同期しているか否かは、スクランブラとデスクランブラの各々の状態が遷移する時刻や、各々がパターンを生成する時刻とは何等関係せず、初期状態からのラン回数が同じであるか否かのみに依存する。
図2を参照して、トランスミッタ・デバイス30とレシーバ・デバイス40との間で、スクランブルされたデータが送受信される例を説明する。イニシエータ10とターゲット20の一方がトランスミッタ・デバイス30として動作するとき、他方はレシーバ・デバイス40として動作する。また、イニシエータ10およびターゲット20では、レシーバ・デバイス40としての動作と、トランスミッタ・デバイス30としての動作が並行して行われてもよい。
トランスミッタ・デバイス30では、送信される対象のフレームデータ(以下、送信データとも称する)381と、スクランブラによって生成されたパターンであるスクランブリングデータ382とが排他的論理和(XOR)演算されることにより、スクランブルされたデータ383が生成される。スクランブルされたデータ383は、トランスミッタ・デバイス30からレシーバ・デバイス40に送信されるインターフェイスデータである。
レシーバ・デバイス40では、スクランブルされたデータ383と、デスクランブラによって生成されたスクランブリングデータ384とがXOR演算されることにより、受信データ385が生成される。トランスミッタ・デバイス30内のスクランブラとレシーバ・デバイス40内のデスクランブラとが同期し、スクランブリングデータ382,384の値が同一であるならば、レシーバ・デバイス40は、同期ずれに起因する受信エラーが発生していない受信データ385を生成することができる。この場合、受信データ385は、送信データ381がエラーなく復元されたものであり、したがって、送信データ381と同一である。なお、受信エラーは、例えば、CRCエラーである。
しかし、トランスミッタ・デバイス30のスクランブラとレシーバ・デバイス40のデスクランブラとの間で同期ずれが発生した場合には、アイドル中に検出する術はなく、フレームの受信時に受信エラーとして検出されることになる。
ところで、SAS Gen4の装置では、dwordモードにおいて、フレームの開始を示すプリミティブ(例えば、SOAF、SOF)の送信に応じてスクランブラが初期化され、このプリミティブの受信に応じてデスクランブラが初期化される。そのため、あるフレームの伝送前のアイドル期間中にスクランブラとデスクランブラとが同期していたか否かが、そのフレームの伝送に影響を与えることはない。
これに対して、SAS Gen5の装置では、パケットモードにおいて、PACKET_SYNCの送信に応じてスクランブラが初期化され、PACKET_SYNCの受信に応じてデスクランブラが初期化される。PACKET_SYNCは、例えば、リンクアップの直前にトランスミッタ・デバイス30からレシーバ・デバイス40に送信され、リンクアップ後は定期的に送信される。
トランスミッタ・デバイス30とレシーバ・デバイス40とは、SAS Gen5インターフェースにより接続され、パケットモードにおいて、PACKET_SYNCのようなプリミティブやフレームデータを含むフレームをパケット単位で送受信することができる。アイデンティファイ・アドレス・フレーム、オープン・アドレス・フレーム、SSPフレーム、SMPフレーム、およびSTPフレームは、それぞれ1つ以上のパケットで構成される。
図3は、イニシエータ10とターゲット20との間で送受信されるパケット(SASプロトコル・レイヤ(SPL)パケット)31の構成を示す。図3に示すように、パケット31は、150ビットのサイズを有し、先頭に配置された2ビットのヘッダ311と、128ビットのペイロードと、20ビットのフォワード・エラー・コレクション(FEC)コードとを含む。128ビットのペイロードは、パケット31において、1つの28ビットのペイロード部分312と、4つの25ビットのペイロード部分314,316,318,320とに分割されている。また、FECコードは、パケット31において、4つの5ビットのコード部分313,315,317,319に分割されている。これら5つのペイロード部分314,316,318,320と4つのコード部分313,315,317,319とは、パケット31内で交互に配置されている。
ヘッダ311は、ペイロード部分312,314,316,318,320から構成されるペイロードの種別を特定する。ペイロードは、アイドルdwordセグメント、プリミティブ・セグメント、スクランブルド・アイドル・セグメント、およびSPLフレーム・セグメントの内のいずれか1つのセグメントを含む。
アイドルdwordセグメントは、4つのアイドルdwordを含み、フレーム外で送信される。プリミティブ・セグメントは、プリミティブ、バイナリ・プリミティブ、プリミティブ・パラメータ、またはエクステンデッド・バイナリ・プリミティブを含む。スクランブルド・アイドル・セグメントは、任意の4つのData dwordを含む。SPLフレーム・セグメントは、例えば、アドレス・フレームの4つのData dwordを含むアドレス・フレーム・セグメントと、SSPフレームの4つのData dwordを含むSSPフレーム・セグメントのいずれかを含む。
また、コード部分313,315,317,319から構成されるFECコードには、エラー検出およびエラー訂正のためのコードが含まれており、例えば、リード・ソロモン符号が用いられる。
レシーバ・デバイス40は、受信したパケットにFECデコード処理を施す。このFECデコード処理には、FECコードを用いた、エラー検出およびエラー訂正のための処理が含まれる。レシーバ・デバイス40は、FECコードを用いてエラーを検出し、当該エラーを訂正できなかった場合、パケットにFECエラーが発生していると判断し、当該パケットを破棄する。
SAS(SAS Protocol Layer−4(SPL−4))では、レシーバ・デバイス40内のステートマシンSP_PSによって受信状態が監視される。このSP_PSは、特定の回数(例えば、4回)連続して、FECエラーが発生しているパケットが受信された場合に、受信パケットの境界を見失ったと判断して、パケット境界の再探索処理が始まり、フレームの受信が不可能な状態になる。しかし、その特定の回数よりも少ない回数(例えば、3回)連続して、FECエラーが発生しているパケットを受信したとしても、その直後に受信したパケットにFECエラーが発生していなければ、フレームの送受信が可能な状態であるPhy Layer Readyが継続され得る。そのため、比較的通信状態が悪く、断続的にパケットにFECエラーが発生する状態であっても、Phy Layer Readyが継続される場合がある。このような場合には、PACKET_SYNCを含むパケットにFECエラーが発生し得る。
また、受信状態が良い期間であっても、静電放電(ESD)や電圧ドロップのような電気的なエラーの影響で瞬時的に通信エラーが発生した場合等に、PACKET_SYNCを含むパケットにFECエラーが発生することがある。
PACKET_SYNCを含むパケットにFECエラーが発生した場合、レシーバ・デバイス40のデスクランブラが初期化されないので、トランスミッタ・デバイス30のスクランブラとの間で同期ずれが発生する。そして、再度、PACKET_SYNCが送受信されるまで同期ずれが継続し、トランスミッタ・デバイス30からレシーバ・デバイス40に伝送されるフレームに受信エラー(例えば、CRCエラー)が発生し続ける可能性がある。
その結果、例えば、伝送されるフレームがオープン・アドレス・フレームである場合、トランスミッタ・デバイス30のオープン・タイムアウト・タイマによるタイムアウトが発生する。フレームがアイデンティファイ・アドレス・フレームである場合、トランスミッタ・デバイス30のアイデンティファイ・タイムアウト・タイマによるタイムアウトが発生し、リンク・リセット・シーケンスが再実行される。また、フレームがSSPフレームである場合、受信エラーが発生したことを示すNAKプリミティブをトランスミッタ・デバイス30に送信するための処理が発生する。
さらに、レシーバ・デバイス40のデスクランブラとトランスミッタ・デバイス30のスクランブラとが同期しないまま、トランスミッタ・デバイス30からのタスクフレームにも応答できなかった場合には、ターゲット20が情報処理システム1から切り離されてしまう可能性もある。タスクフレームは、例えば、ターゲット20に異常が発生している可能性がある場合に、リードやライトの中断(アボート)を要求するためのフレームである。
図4は、レシーバ・デバイス40によるパケット受信において、PACKET_SYNCが正常に受信される場合の第1タイミングチャート35と、PACKET_SYNCが正常に受信されない場合の第2タイミングチャート36とを例示する。
まず、第1タイミングチャート35では、レシーバ・デバイス40は、アイドル期間内に受信される複数のパケット351,353の間の、PACKET_SYNCを含むパケット352を正常に受信している。これにより、レシーバ・デバイス40のデスクランブラは初期化され、このパケット352の送信時に初期化されるトランスミッタ・デバイス30のスクランブラと同期する。
そして、レシーバ・デバイス40は、アイドル期間内のパケット353の後に受信される複数のパケット354,355,356から、プリミティブ(ここでは、SOAFおよびEOAF)だけでなく、フレームデータ(ここでは、アドレス・フレームのフレームデータ)も正しく認識することができる。つまり、レシーバ・デバイス40は、トランスミッタ・デバイス30のスクランブラと同期したデスクランブラによって生成されるスクランブリングデータを用いて、パケット355から、同期ずれに起因する受信エラーが発生していないフレームデータを取得することができる。
これに対して、第2タイミングチャート36では、アイドル期間内に受信される複数のパケット361の内のパケット361EにFECエラーが発生している。しかし、特定の回数以上連続して、FECエラーが発生したパケット361Eを受信していないので、トランスミッタ・デバイス30とレシーバ・デバイス40との間でフレーム送受信が可能な状態が継続されている。
その後、レシーバ・デバイス40では、PACKET_SYNCを含むパケット362でもFECエラーが発生している。これによって、このパケット362の送信時にトランスミッタ・デバイス30のスクランブラが初期化される一方、レシーバ・デバイス40のデスクランブラは初期化されず、レシーバ・デバイス40のデスクランブラとトランスミッタ・デバイス30のスクランブラとの間に同期ずれが発生する。
次いで、アイドル期間内に受信される複数のパケット363の内のパケット363EにFECエラーが発生している。しかし、特定の回数以上連続して、FECエラーが発生したパケット363Eを受信していないので、レシーバ・デバイス40とトランスミッタ・デバイス30との間でフレーム送受信が可能な状態が継続されている。
また、レシーバ・デバイス40は、PACKET_SYNCを含むパケット362が正常に受信されず、レシーバ・デバイス40のデスクランブラとトランスミッタ・デバイス30のスクランブラとの間に同期ずれが発生した以降に、トランスミッタ・デバイス30によって送信されるパケット363,364,365,366から、プリミティブは正しく認識できるものの、プリミティブではないフレームデータは認識することができない。プリミティブはスクランブル/デスクランブルされないので、レシーバ・デバイス40は、パケット364からSOAFを認識し、パケット366からEOAFを認識することができる。しかし、dwordで構成されるフレームデータはスクランブル/デスクランブルされるので、レシーバ・デバイス40は、パケット365からフレームデータを認識することができない。
このように、PACKET_SYNCが、パケットが壊れた等の要因によって正常に受信されなかった場合、次にPACKET_SYNCが正常に受信されるまでの間、受信されるフレームを認識することができない。そのため、レシーバ・デバイス40では、トランスミッタ・デバイス30のスクランブラとレシーバ・デバイス40のデスクランブラとの同期ずれに起因する受信エラーが繰り返し発生し得る。
SAS(SPL−4)では、スクランブラ・イニシャライゼーション・タイマを用いて、フレーム送受信が可能な状態であるPhy Layer Readyになった後、例えば、このタイマがタイムアウトする毎にPACKET_SYNCを送信することが規定されている。これにより、スクランブラとデスクランブラとが定期的に同期される。
このスクランブラ・イニシャライゼーション・タイマには、ベンダ独自の値が設定され、任意の送信間隔でPACKET_SYNCを送信することができる。しかし、定期的にPACKET_SYNCが送信されることは、スクランブラとデスクランブラとの同期を何等保証するものではない。スクランブラ104とデスクランブラ108との同期ずれは、PACKET_SYNCを含むパケットにFECエラーが発生することによるPACKET_SYNCの取りこぼしによるものであるので、PACKET_SYNCを頻繁に送信すればするほど良いというものでもない。
本実施形態では、このようなスクランブラとデスクランブラとの同期ずれに起因するフレームの受信エラーが発生した場合に、レシーバ・デバイス40のデスクランブラをトランスミッタ・デバイス30のスクランブラに同期させると共に、そのフレームを適切にデスクランブルし得る。レシーバ・デバイス40は、受信フレーム内の特定のフィールドの値を用いて、すなわち、この特定のフィールドに対応するフレームデータを用いて、デスクランブラとスクランブラを同期させ、受信フレームをデスクランブルする。これにより、レシーバ・デバイス40のリンクレベルでの受信エラーに対する耐性が向上する。
受信フレーム内の特定のフィールドは、当該フィールドの値のスクランブル前の値が、レシーバ・デバイス40によって予め保持されているフィールドである。つまり、この特定のフィールドは、レシーバ・デバイス40にとって認識可能な既定の値が含まれ得るフィールドである。以下では、受信フレーム内の特定のフィールドを既定値フィールドとも称する。
図5を参照して、スクランブラとデスクランブラとの同期ずれに起因するフレームの受信エラーが発生した場合に、レシーバ・デバイス40のデスクランブラをトランスミッタ・デバイス30のスクランブラに同期させると共に、そのフレームを適切にデスクランブルするための方法について説明する。
上述したように、既定値フィールドは、受信フレーム15内の当該フィールドの値151のスクランブル前の値が、レシーバ・デバイス40によって予め保持されているフィールドである。つまり、レシーバ・デバイス40は、受信フレーム15内の既定値フィールドの値151がデスクランブルされなくとも、その値のデスクランブル後の値が分かっている。この既定値フィールドは、例えば、特定の値(例えば、0)が設定されることが予め規定されているフィールドや、レシーバ・デバイス40のSASアドレスのような、レシーバ・デバイス40において既知である値が設定されるフィールドである。以下では、レシーバ・デバイス40によって予め保持されている、既定値フィールドの値151のスクランブル前の値を、既定期待値150とも称する。
レシーバ・デバイス40が、ある受信フレーム15内の連続する特定の数以上のビットに対して、そのスクランブル前の値である既定期待値150を予め保持していれば、それらビットの値を既定値フィールドの値151として用いることができる。この特定の数は、スクランブラ/デスクランブラ104,108に設けられるパターン・ジェネレータに応じて決定される。
例えば、パターン・ジェネレータが、23ビットの線形フィードバック・シフト・レジスタ(LFSR)を備える場合、この特定の数は23である。この場合、レシーバ・デバイス40が、受信フレーム15内の連続する少なくとも23ビットの値に対して、そのスクランブル前の値である既定期待値150を保持していれば、それら少なくとも23ビットの値を既定値フィールドの値151として用いることができる。以下では、パターン・ジェネレータが、23ビットのLFSRを備える場合(すなわち、223−1の生成多項式を用いる場合)について主に例示する。
レシーバ・デバイス40は、受信フレーム15内の既定値フィールドの値151と、このレシーバ・デバイス40内に予め保持されている、この値のスクランブル前の値である既定期待値150とを用いて、レシーバ・デバイス40のデスクランブラ108をトランスミッタ・デバイス30のスクランブラ104に同期させることができる。レシーバ・デバイス40は、23ビットのLFSRが用いられ、受信フレーム15内の連続する少なくとも23ビットの値に対して、そのスクランブル前の値である既定期待値150を保持している場合、その少なくとも23ビットの値からなる既定値フィールドの値151と、既定期待値150とを用いて、どの時点のLFSRの状態でもXOR演算のみで一意に算出することができる。
より具体的には、レシーバ・デバイス40は、受信フレーム15内の既定値フィールド値151と、このレシーバ・デバイス40内に保持されている既定期待値150とを用いて、その既定値フィールドの値151を生成するために用いられたスクランブリングデータ152を算出する。スクランブリングデータ152の具体的な算出方法については後述する。
そして、レシーバ・デバイス40は、算出されたスクランブリングデータ152が生成された時点のスクランブラ/デスクランブラ104,108の状態153を復元する。スクランブリングデータ152が生成された時点のスクランブラ/デスクランブラ104,108の状態153は、復元された状態とも称する。
レシーバ・デバイス40は、スクランブラ/デスクランブラ104,108の状態を、復元された状態153から、ある回数だけ前進するように遷移させること、あるいはある回数だけ後退するように遷移させることにより、スクランブラ/デスクランブラ104,108を任意の時点の状態154,155に設定できる。これにより、レシーバ・デバイス40のデスクランブラ108をトランスミッタ・デバイス30のスクランブラ104に同期させることができるので、これらデバイス間で正常にフレームを伝送することができる。
より具体的には、レシーバ・デバイス40は、例えば、デスクランブラ108内のLFSRに、任意の時点の状態154,155に対応する値を設定する。デスクランブラ108の状態(すなわち、ラン回数)に対応するLFSRの状態(すなわち、LFSRの各ビットの値)は一意に特定可能である。LFSRの具体的な構成については、図8を参照して後述する。
スクランブラ/デスクランブラ104,108の状態を前進するように遷移させるとは、スクランブラ/デスクランブラ104,108の状態を次の状態に進めることを意味する。スクランブラ/デスクランブラ104,108の状態を次の状態に進めることは、スクランブラ/デスクランブラ104,108が動作(ラン)することと同じである。スクランブラ/デスクランブラ104,108の状態を、例えば、復元された状態153から、この復元された状態153よりも後の任意の時点の状態155まで前進するように遷移させる場合、復元された状態153を次の状態Aに遷移させ、この状態Aを次の状態Bに遷移させる、と云った繰り返しの遷移により、スクランブラ/デスクランブラ104,108の状態を、復元された状態153から任意の時点の状態155まで前進するように遷移させることができる。スクランブラ/デスクランブラ104,108が次の状態に進む遷移は、そのラン回数が1だけ増加することに対応する。したがって、例えば、次の状態Aであるスクランブラ/デスクランブラ104,108のラン回数は、復元された状態153であるスクランブラ/デスクランブラ104,108のラン回数よりも1だけ多い。
スクランブラ/デスクランブラ104,108の状態を後退するように遷移させるとは、スクランブラ/デスクランブラ104,108の状態を1つ前の状態に戻すことを意味する。スクランブラ/デスクランブラ104,108の状態を、例えば、復元された状態153から、この復元された状態153よりも前の任意の時点の状態154まで後退するように遷移させる場合、復元された状態153を1つ前の状態Cに遷移させ、この状態Cを1つ前の状態Dに遷移させる、と云った繰り返しの遷移により、スクランブラ/デスクランブラ104,108の状態を、復元された状態153から任意の時点の状態154まで後退するように遷移させることができる。スクランブラ/デスクランブラ104,108が1つ前の状態に戻る遷移は、そのラン回数が1だけ減少することに対応する。したがって、例えば、1つ前の状態Cであるスクランブラ/デスクランブラ104,108のラン回数は、復元された状態153であるスクランブラ/デスクランブラ104,108のラン回数よりも1だけ少ない。
さらに、レシーバ・デバイス40は、スクランブラ/デスクランブラ104,108を、復元された状態153から、前進するように遷移させる計算と、後退するように遷移させる計算の少なくとも一方を用いて、受信フレーム15全体をデスクランブルするためのスクランブリングデータ156を算出できる。前進するように遷移させる計算と、後退するように遷移させる計算の少なくとも一方を用いてスクランブリングデータ156を算出するとは、スクランブラ/デスクランブラ104,108を実際に遷移させてスクランブリングデータ156を生成するのではなく、前進と後退の少なくとも一方の遷移に相当する数値計算によってスクランブリングデータ156を算出することを意味する。
レシーバ・デバイス40は、算出されたスクランブリングデータ156を用いて、受信フレーム15をデスクランブルする。これにより、デスクランブラ108によってデスクランブルされた受信フレーム15に、スクランブラ104とデスクランブラ108との同期ずれに起因する受信エラーが発生する場合にも、既定値フィールドの値151と既定期待値150とを用いて、適切にデスクランブルされたフレーム157(以下、復元フレームとも称する)を算出することができる。
以下では、上記の動作を実現するための構成について具体的に例示する。
図6は、SAS Gen5の装置の構成を示す。この装置は、イニシエータ10とターゲット20のいずれとしても動作し得る。また、上述したように、イニシエータ10とターゲット20の一方がトランスミッタ・デバイス30として動作するとき、他方はレシーバ・デバイス40として動作する。以下では、SAS Gen5の装置を、イニシエータ/ターゲット10,20とも表記する。
イニシエータ/ターゲット10,20は、コントローラ100、送信フレームコントローラ101、CRCジェネレータ102、プリミティブ・ジェネレータ103、スクランブラ104、FECエンコーダ105、FECデコーダ106、プリミティブ・デコーダ107、デスクランブラ108、CRCデコーダ116、受信フレームコントローラ109、および復元モジュール11を備える。
コントローラ100は、イニシエータ/ターゲット10,20内の様々なコンポーネントの動作を制御する。コントローラ100は、別のイニシエータ/ターゲット10,20にフレームを送信するためにイニシエータ/ターゲット10,20内の各部を制御し、別のイニシエータ/ターゲット10,20からフレームを受信するためにイニシエータ/ターゲット10,20内の各部を制御する。
以下では、フレームが送信される場合とフレームが受信される場合とについて、イニシエータ/ターゲット10,20内の各部の動作を説明する。
まず、イニシエータ/ターゲット10,20(トランスミッタ・デバイス30)が別のイニシエータ/ターゲット10,20(レシーバ・デバイス40)にフレームを送信する場合について説明する。この場合、コントローラ100、送信フレームコントローラ101、CRCジェネレータ102、プリミティブ・ジェネレータ103、スクランブラ104、およびFECエンコーダ105が動作する。
プリミティブ・ジェネレータ103は、コントローラ100またはCRCジェネレータ102による要求(通知)に応じて、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを生成する。プリミティブが生成された場合、プリミティブ・ジェネレータ103は、そのプリミティブに2ビットのヘッダを付加することにより生成した130ビットの情報をスクランブラ104に出力する。また、バイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが生成された場合、プリミティブ・ジェネレータ103は、そのバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブをスクランブラ104に出力する。
送信フレームコントローラ101は、コントローラ100による要求に応じて、フレームに含まれるフレームデータの送信を制御する。送信フレームコントローラ101は、例えば、パケットのペイロードとなる128ビット単位のフレームデータ(16個のデータバイト)と、2ビットのヘッダとをCRCジェネレータ102に出力する。
CRCジェネレータ102は、フレームに含まれるフレームデータのCRC値を算出する。CRCジェネレータ102は、パケット単位で、フレームデータおよび/またはCRC値とヘッダとをスクランブラ104に出力する。また、CRCジェネレータ102は、フレームに含まれる全てのフレームデータを用いてCRC値を算出した後に、プリミティブ・ジェネレータ103に、B_EOFs(より詳しくは、B_EOF(0)、B_EOF(1)、B_EOF(2)、またはB_EOF(3))プリミティブ(以下、B_EOFsとも称する)またはEOAFプリミティブの生成を要求し、CRC値が算出されたことを通知する。この要求または通知に応じて、プリミティブ・ジェネレータ103はB_EOFsまたはEOAFを生成する。
より具体的には、B_EOFsの生成が要求された場合、プリミティブ・ジェネレータ103は、送信されるフレーム内のフレームデータに含まれるData dwordの数(以下、送信データ数とも称する)に応じて、B_EOF($PAD)を生成する。$PADは変数であり、下記の式(1)により決定される。
$PAD = 4−(送信データ数 mod 4) 式(1)
この変数$PADは、送信されるフレーム内のフレームデータのサイズが4Dwordの倍数でない場合に、4Dwordの倍数になるようにフレームデータに追加されるパッドdwordの数を表す。また、CRC値の算出には、追加されるパッドdwordは用いられない。そのため、プリミティブ・ジェネレータ103は、レシーバ・デバイス40がフレームデータに追加されたパッドdwordの数を判別し得るように、この数に対応するB_EOF($PAD)を生成する。
スクランブラ104は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブが入力された場合、スクランブラ104の状態を次の状態に遷移させる、すなわち、スクランブラ104の動作回数(RUN回数)を1だけ増加させる。なお、スクランブラ104は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブをスクランブルしない。スクランブラ104は、送信されるパケットのペイロードである、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを含むプリミティブ・セグメントをFECエンコーダ105に出力する。
また、スクランブラ104は、フレームデータおよび/またはCRC値が入力された場合、ビットの偏りを減少させるために、フレームデータおよび/またはCRC値をスクランブルする。スクランブルされたフレームデータおよび/またはCRC値を含むフレーム・セグメントは、送信されるパケットのペイロードである。また、このペイロードには、2ビットのヘッダが付加されている。スクランブラ104は、ヘッダとペイロードとをFECエンコーダ105に出力する。そして、フレームデータをスクランブルした後、スクランブラ104の状態は次の状態に遷移する、すなわち、スクランブラ104の動作回数(RUN回数)が1だけ増加する。
図7は、スクランブラ104の構成を示す。スクランブラ104は、繰り返しのパターンを減少させるために、パターン・ジェネレータ17によって生成されたスクランブリングデータと、入力データ161の各ビットとを排他的論理和(XOR)演算18することにより、入力データ161がスクランブルされた出力データ162を取得する。例えば、入力データ161および出力データ162は128ビットのデータであり、パターン・ジェネレータ17は128ビットのパターンであるスクランブリングデータを生成する。パターン・ジェネレータ17は、例えば、線形フィードバック・シフト・レジスタ(LFSR)17Aを備え、パターン・ジェネレータ17の動作(RUN)が有効になったことを示すvalid信号に応じて、その状態が次の状態に遷移する(すなわち、動作回数(RUN回数)が1だけ増加する)。なお、スクランブラ104は、フレーム・セグメントをスクランブルするが、プリミティブ・セグメントをスクランブルしない。
また、PACKET_SYNCが送信されるとき、スクランブラ104は初期化される。つまり、パターン・ジェネレータ17が初期状態に設定される。
パターン・ジェネレータ17内のLFSR17Aは、その状態が遷移する毎に1ビットの値を出力する。パターン・ジェネレータ17は、LFSR17Aにより連続して出力された128ビット分の値を用いて、スクランブリングデータを生成する。
図8(A)に示すように、LFSR17Aは、例えば、ビット0からビット23までの23ビットのフリップフロップ回路(FF)と、5つのXOR演算器とで構成されている。
LFSR17Aでは、状態が遷移する毎に以下の動作が並列に行われる。
(1)ビット0,2,3,5,6,8,9,10,11,12,13,14,16,17,18,19,21の各値を、その1つ上のビットに出力する。
(2)ビット1の値とビット22の値とのXOR演算結果を、ビット2に出力する。
(3)ビット4の値とビット22の値とのXOR演算結果を、ビット5に出力する。
(4)ビット7の値とビット22の値とのXOR演算結果を、ビット8に出力する。
(5)ビット15の値とビット22の値とのXOR演算結果を、ビット16に出力する。
(6)ビット20の値とビット22の値とのXOR演算結果を、ビット21に出力する。
(7)ビット22の値を、ビット0と外部とに出力する。
LFSR17Aの状態を次の状態に遷移させた結果、上記の動作が行われる。
LFSR17Aから外部に連続して出力された128ビット分の値は、128ビットの入力フレームデータ161をスクランブルするためのスクランブリングデータとして用いられる。つまり、LFSR17Aから連続して出力された128ビット分の値と、128ビットの入力フレームデータ161とがXOR演算18されることにより、128ビットの出力フレームデータ(すなわち、4つのdword)162が得られる。
LFSR17Aは、223−1ビット分の値が出力されたこと、あるいはPACKET_SYNCが送信されることに応じて、初期状態に戻る。
したがって、PACKET_SYNCの送信に応じたスクランブラ104の初期化は、より具体的には、このLFSR17Aの初期化を意味している。また、スクランブラ104による一度のスクランブリング動作において、128ビットの入力データ161が128ビットのスクランブリングデータでスクランブルされる場合、スクランブラ104(パターン・ジェネレータ17)の1回の状態遷移は、LFSR17Aの128回の状態遷移に相当する。このような関係から、スクランブラ104の状態(すなわち、ラン回数)に基づいて、対応するLFSR17Aの状態(すなわち、LFSR17Aの各ビットの値)が特定可能であり、同様に、LFSR17Aの状態に基づいて、対応するスクランブラ104の状態が特定可能である。
スクランブラ104は、上記のLFSR17Aの回路構成を、生成多項式を用いた数値計算を実行するプロセッサの構成として実装してもよい。LFSR17Aによる出力は、例えば、下記の生成多項式を用いて算出できる。
G(x)=x23+x21+x16+x+x+x+1
この生成多項式を用いて、LFSR17Aによって出力される223−1ビット分の値が算出可能である。
つまり、スクランブラ104は、LFSR17Aを用いて算出されるスクランブリングデータや、LFSR17Aの状態を、上述した回路のような構成で算出できるだけでなく、生成多項式を用いた数値計算の結果として取得することもできる。
図6に戻り、FECエンコーダ105は、入力された情報(ヘッダとペイロード)にFECエンコード処理を施すことにより、20ビットのFECコードを付加して、150ビットの情報を生成する。上述したように、FECコードには、エラー検出およびエラー訂正のためのコードが含まれている。FECエンコーダ105は、生成された150ビットの情報で構成されるパケットを別のイニシエータ/ターゲット10,20(レシーバ・デバイス40)に送信する。
以上の動作により、イニシエータ/ターゲット10,20は、プリミティブまたはフレームデータを含むパケットを別のイニシエータ/ターゲット10,20に送信することができる。
また、イニシエータ/ターゲット10,20(レシーバ・デバイス40)が別のイニシエータ/ターゲット10,20(トランスミッタ・デバイス30)からフレームを受信する場合、コントローラ100、FECデコーダ106、プリミティブ・デコーダ107、デスクランブラ108、CRCデコーダ116、受信フレームコントローラ109、および復元モジュール11が動作する。
FECデコーダ106は、別のイニシエータ/ターゲット10,20から受信された150ビット毎の情報(パケット)にFECデコード処理を施すことにより、130ビットの情報を生成する。生成される130ビットの情報には、2ビットのヘッダと128ビットのペイロードとが含まれる。また、FECデコード処理には、FECコードを用いたエラー検出およびエラー訂正のための処理が含まれる。FECデコーダ106は、デコードの成功または失敗をコントローラ100等に通知するようにしてもよい。デコードが成功した場合、FECデコーダ106は、生成された130ビットの情報を、プリミティブ・デコーダ107、デスクランブラ108、および復元モジュール11に出力する。
プリミティブ・デコーダ107は、入力された情報のペイロードとして、プリミティブ・セグメント(プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブ)が含まれる場合、入力された情報から2ビットのヘッダが除かれた128ビットの情報(プリミティブ)を取得する。
プリミティブ・デコーダ107は、入力された情報に含まれるプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを識別し、コントローラ100等と連携してそのプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブに応じた動作を行う。
入力された情報にPACKET_SYNCが含まれる場合、プリミティブ・デコーダ107は、PACKET_SYNCが受信されたことをデスクランブラ108に通知する。
入力された情報にB_EOFsまたはEOAFが含まれる場合、プリミティブ・デコーダ107は、CRCデコーダ116に対して、CRCの検証を要求する。
デスクランブラ108は、入力された情報のペイロードとして、プリミティブ・セグメント(プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブ)が含まれる場合、デスクランブラ108の状態を次の状態に遷移させる。なお、デスクランブラ108は、プリミティブ・セグメントをデスクランブルしない。
また、デスクランブラ108は、入力された情報のペイロードとして、フレーム・セグメント(フレームデータおよび/またはCRC値)が含まれる場合、当該ペイロードをデスクランブルする。デスクランブラ108は、デスクランブルされたフレーム・セグメントをCRCデコーダ116に出力する。フレーム・セグメントをデスクランブルした後、デスクランブラ108の状態は次の状態に遷移する。
デスクランブラ108は、図7および図8を参照して上述したスクランブラ104と同様の構成を有する。すなわち、デスクランブラ108は、パターン・ジェネレータ17によって生成されたスクランブリングデータと、入力データ161の各ビットとを排他的論理和(XOR)演算18することにより、入力データ161がスクランブルされた出力データ162を取得する。なお、このスクランブリングデータと、出力データ162の各ビットとをXOR演算することにより、入力データ161が得られる。つまり、スクランブリングデータでスクランブルされた入力データ161は、当該スクランブリングデータでさらにスクランブル(すなわち、デスクランブル)されたならば、スクランブル前の入力データ161に戻る。
また、プリミティブ・デコーダ107によって、PACKET_SYNCが受信されたことが通知されたとき、デスクランブラ108(より詳しくはパターン・ジェネレータ17)は初期化される。すなわち、デスクランブラ108内のLFSR17Aが初期状態に戻る。デスクランブラ108の初期化は、より具体的には、このデスクランブラ108内のLFSR17Aの初期化を意味している。
CRCデコーダ116は、受信されたフレーム内のデスクランブルされたフレームデータとCRC値とを用いて、当該フレームにCRCエラーが発生しているかどうかを判定する。CRCデコーダ116は、例えば、プリミティブ・デコーダ107によって、B_EOFsまたはEOAFが受信されたことが通知されたとき、フレームにCRCエラーが発生しているかどうかを判定する。
あるフレームデータがスクランブルされたときのスクランブラ104の状態と、当該フレームデータがデスクランブルされたときのデスクランブラ108の状態とが一致しているならば、すなわち、これらスクランブラ104とデスクランブラ108とが同期しているならば、デスクランブラ108は、フレームデータやCRC値を適切にデスクランブルすることができる。そして、フレームデータとCRC値とが適切にデスクランブルされた場合、受信されたフレームから、スクランブラ104とデスクランブラ108の同期ずれに起因するCRCエラーは検出されない。
一方、あるフレームデータがスクランブルされたときのスクランブラ104の状態と、当該フレームデータがデスクランブルされたときのデスクランブラ108の状態とが一致していないならば、すなわち、これらスクランブラ104とデスクランブラ108とが同期していなければ、デスクランブラ108は、フレームデータやCRC値を適切にデスクランブルすることができない。CRCデコーダ116は、フレームデータやCRC値が適切にデスクランブルされなかった場合、受信されたフレームにCRCエラーが発生していることを検出する。
CRCエラーが発生していない場合、CRCデコーダ116は、デスクランブルされたフレームデータを受信フレームコントローラ109に出力する。この場合、受信フレームコントローラ109は、コントローラ100等と連携して、入力されたフレームデータ(デスクランブルされたフレームデータ)を処理する。例えば、ストレージデバイスであるイニシエータ/ターゲット10,20がユーザデータを含むフレームを受信したならば、ユーザデータを記憶媒体に格納するための処理等が行われる。
また、例えば、フレームがアイデンティファイ・アドレス・フレームであるならば、コントローラ100は、上述したパケットを送信するための動作により、アイデンティファイ・アドレス・フレームを構成するフレームデータを含む複数のパケットを送信するように、イニシエータ/ターゲット10,20内の各部を制御してもよい。フレームが接続要求のためのオープン・アドレス・フレームであるならば、コントローラ100は、接続要求を承認することを示すOPEN_ACCEPTプリミティブ、あるいは接続要求を拒絶することを示すOPEN_REJECTプリミティブを含むパケットを送信するように、イニシエータ/ターゲット10,20内の各部を制御してもよい。さらに、フレームがSSPフレームであるならば、コントローラ100は、上述したパケットを送信するための動作により、肯定応答を示すACKプリミティブを含むパケットを送信するように、イニシエータ/ターゲット10,20内の各部を制御してもよい。
一方、デスクランブラ108によってデスクランブルされた受信フレーム15にCRCエラーが発生している場合、すなわち、このデスクランブラ108と、トランスミッタ・デバイス30内のスクランブラ104との同期ずれに起因して、デスクランブルされた受信フレーム15にCRCエラーが発生している場合、CRCデコーダ116は、復元モジュール11によって受信フレーム15から復元された復元フレーム157にCRCエラーが発生しているかどうかを判定する。復元モジュール11は、デスクランブラ108において生成されたスクランブリングデータではなく、受信フレーム15内の既定値フィールドの値151と既定期待値150とを用いて算出されたスクランブリングデータ156で受信フレーム15をデスクランブルすることにより、復元フレーム157を取得する。CRCデコーダ116は、復元フレーム157内のフレームデータとCRC値とを用いて、当該復元フレーム157にCRCエラーが発生しているかどうかを判定する。復元フレーム157を生成する復元モジュール11の具体的な構成について、以下で説明する。
復元モジュール11は、受信フレーム15内の既定値フィールドに対応するフレームデータ151と、既定期待値150とを用いて、このイニシエータ/ターゲット10,20のデスクランブラ108を、受信フレーム15を送信した別のイニシエータ/ターゲット10,20のスクランブラ104と同期させ、受信フレーム15を適切にデスクランブルするための機能を有する。復元モジュール11は、復元コントローラ110、フレーム・バッファ11A、XOR演算器111,115、LFSR復元部112、LFSR算出部113、およびLFSRロールバック部114を備える。
復元コントローラ110は、FECデコーダ106から、SOFまたはSOAFが含まれる情報が入力されてから、B_EOFsまたはEOAFを含む情報が入力されるまで、FECデコーダ106から入力される情報をフレーム・バッファ11Aに保存する。復元コントローラ110は、例えば、バッファフラグを用いてフレーム・バッファ11Aへの情報の保存を制御する。復元コントローラ110は、SOFまたはSOAFを含む情報が入力されたことに応じてバッファフラグを立て、B_EOFsまたはEOAFを含む情報が入力されたことに応じてバッファフラグをクリアする。そして、バッファフラグが立っている間、FECデコーダ106から入力される情報である受信フレーム15がフレーム・バッファ11Aに保存される。
したがって、例えば、SOFが受信されてからB_EOFsが受信されるまでの間に受信された受信フレーム15(例えば、SSPフレーム)がフレーム・バッファ11Aに保存される。また、例えば、SOAFが受信されてからEOAFが受信されるまでの間に受信された受信フレーム15(例えば、アイデンティファイ・アドレス・フレームまたはオープン・アドレス・フレーム)がフレーム・バッファ11Aに保存される。
復元コントローラ110は、フレーム・バッファ11Aに保存される情報が、アイデンティファイ・アドレス・フレームと、オープン・アドレス・フレームと、SSPフレームのいずれのフレームであるかを識別する。より具体的には、復元コントローラ110は、SOFが受信された後にフレーム・バッファ11Aに保存される情報をSSPフレームであると判断する。また、復元コントローラ110は、SOAFが受信された後にフレーム・バッファ11Aに保存される情報を、アイデンティファイ・アドレス・フレームの交換後であれば、オープン・アドレス・フレームであると判断し、その交換前であれば、アイデンティファイ・アドレス・フレームであると判断する。
復元コントローラ110は、識別された受信フレーム15に応じて、そのフレーム15内の既定値フィールドを認識し、当該既定値フィールドに対応する既定期待値150を取得する。上述したように、既定値フィールドは、例えば、特定の値が設定されることが予め規定されているフィールドや、レシーバ・デバイス40のSASアドレスのような、レシーバ・デバイス40において既知である値が設定されるフィールドである。復元モジュール11には、例えば、フレームの種別毎に、その既定値フィールドと既定期待値150とを示す情報が保持されていてもよい。
XOR演算器111は、フレーム・バッファ11Aに、既定値フィールドに対応するフレームデータ151が保存されたことに応じて、このフレームデータ151と既定期待値150とをXOR演算することにより、フレームデータ151の生成に用いられたスクランブリングデータ152を算出する。
XOR演算器111による演算が行われる時点では、少なくとも受信フレーム15内の既定値フィールドに対応するフレームデータまでが、フレーム・バッファ11Aに保存されていればよい。
LFSR復元部112は、算出されたスクランブリングデータ152を用いて、このスクランブリングデータ152が生成された時点のLFSRの状態(すなわち、復元された状態)153を算出する。LFSR復元部112は、このスクランブリングデータ152を構成する複数の値をそれぞれ生成するように動作した場合の、LFSRの各ビットの値を算出する。例えば、図8(A)を参照して上述したように、LFSRのビット22の値は外部に出力され、スクランブリングデータ152を構成する値として用いられる。したがって、スクランブリングデータ152を構成するある値は、ある時点のビット22に設定されていた値である。さらに、ビット22に設定されていた値は、1つ前のLFSRの状態において、ビット21に設定されていた値である。このように、図8(A)を参照して上述したLFSR17Aの動作(1)〜(7)に基づき、スクランブリングデータ152を構成する複数の値の生成が開始された時点において、LFSRの各ビットに設定されていた値を算出することができる。より具体的な算出方法については、図11を参照して後述する。
LFSR算出部113は、LFSRの状態を、復元された状態153から、前進するように遷移させること、あるいは後退するように遷移させることにより、LFSRの任意の時点の状態154,155を算出できる。LFSR算出部113は、例えば、既定値フィールドに対応するフレームデータ151よりも後のプリミティブまたはフレームデータが受信される時点のLFSRの状態を算出する。
より具体的には、LFSR算出部113は、受信フレーム15のサイズと受信フレーム15内での既定値フィールドの位置に基づいて、復元された状態153からその任意の時点の状態154,153に遷移させるために、LFSRを前進または後退させるべき回数を決定する。つまり、LFSR算出部113は、復元された状態153からその任意の時点の状態154,153に遷移させるために、LFSRを何ビット分、前進または後退させればよいかを決定する。LFSR算出部113は、決定された回数(あるいはビット数)に基づいて、LFSRの状態を、復元された状態153から、前進するように遷移させる計算、あるいは後退するように遷移させる計算により、LFSRの任意の時点の状態154,155を算出する。以下では、LFSR算出部113が、受信フレーム15の直後のB_EOFsもしくはEOAFを含むパケット、またはこのB_EOFsもしくはEOAFを含むパケットの直後のパケットが受信される時点のLFSRの状態を算出することを想定する。
図8(A)を参照して上述したLFSR17Aは、状態が前進するように遷移するLFSRである。LFSR17Aの1回の動作によって、LFSRの状態を前進させること、すなわち、次の状態に遷移させることができる。LFSR算出部113は、このLFSR17Aの状態を任意の回数だけ遷移させる数値計算を用いて、復元された状態153から前進した任意の時点の状態154を算出する。
これに対して、図8(B)は、上記のLFSR17Aにおける状態遷移とは逆向きに、状態が後退するように遷移するLFSR17Bを示す。LFSR17Bでは、状態が遷移する毎に以下の動作が並列に行われる。
(1)ビット22,20,19,18,17,15,14,13,12,11,10,9,7,6,4,3,1の各値を、その1つ下のビットに出力する。
(2)ビット21の値とビット0の値とのXOR演算結果を、ビット20に出力する。
(3)ビット16の値とビット0の値とのXOR演算結果を、ビット15に出力する。
(4)ビット8の値とビット0の値とのXOR演算結果を、ビット7に出力する。
(5)ビット5の値とビット0の値とのXOR演算結果を、ビット4に出力する。
(6)ビット2の値とビット0の値とのXOR演算結果を、ビット1に出力する。
(7)ビット0の値を、ビット22に出力する。
(8)ビット22の値を、外部に出力する。
このようなLFSR17Bの1回の動作によって、LFSRの状態を後退させること、すなわち、1つ前の状態に遷移させることができる。LFSR算出部113は、このLFSR17Bの状態を任意の回数だけ遷移させる数値計算を用いて、復元された状態153から後退した任意の時点の状態155を算出する。
上記のLFSR17Bの回路構成も、生成多項式を用いた数値計算を実行するプロセッサの構成として実装することができる。つまり、LFSR17Bを用いて算出されるスクランブリングデータや、LFSR17Bの状態は、上述した回路のような構成で算出できるだけでなく、生成多項式を用いた数値計算の結果として取得することもできる。
図6に戻り、LFSRロールバック部114は、受信フレーム15をデスクランブルするためのスクランブリングデータ156を算出する。LFSRロールバック部114は、復元された状態153から、前進するように遷移させる計算と、後退するように遷移させる計算の少なくとも一方を用いて、受信フレーム15全体をデスクランブルするためのスクランブリングデータ156を算出できる。
例えば、LFSR算出部113によって、受信フレーム15の直後のB_EOFs/EOAFが受信される時点のLFSRの状態154が算出されている場合を想定する。その場合、LFSRロールバック部114は、算出されたLFSRの状態154から後退するように遷移させる計算を用いて、受信フレーム15全体をデスクランブルするためのスクランブリングデータ156を算出する。
XOR演算器115は、算出されたスクランブリングデータ156を用いて、フレーム・バッファ11Aに保存された受信フレーム15をデスクランブルする。これにより、デスクランブルされた受信フレームである復元フレーム157が生成される。
以上により、復元モジュール11において、受信フレーム15内の既定値フィールドの値151と、既定期待値150とを用いて、レシーバ・デバイス40によって受信フレーム15の直後のB_EOFsもしくはEOAFを含むパケット、またはこのB_EOFsもしくはEOAFを含むパケットの直後のパケットが受信される時点のLFSRの状態と、復元フレーム157とを取得することができる。
CRCデコーダ116は、デスクランブラ108によってデスクランブルされた受信フレーム15にCRCエラーが発生している場合、すなわち、このデスクランブラ108とトランスミッタ・デバイス30内のスクランブラ104とが同期していないことに起因して、デスクランブルされた受信フレーム15にCRCエラーが発生している場合、復元モジュール11によるデスクランブルで得られた復元フレーム157にCRCエラーが発生しているかどうかを判定する。上述したように、復元フレーム157は、デスクランブラ108において生成されたスクランブリングデータではなく、受信フレーム15内の既定値フィールドの値151と既定期待値150とを用いて算出されたスクランブリングデータ156で、受信フレーム15をデスクランブルして得られたフレームである。CRCデコーダ116は、復元フレーム157内のフレームデータとCRC値とを用いて、当該復元フレーム157にCRCエラーが発生しているかどうかを判定する。
CRCデコーダ116は、この復元フレーム157にCRCエラーが発生していない場合、復元フレーム157に含まれるフレームデータを受信フレームコントローラ109に出力する。デスクランブラ108によってデスクランブルされたフレームデータが受信フレームコントローラ109に出力される場合と同様に、受信フレームコントローラ109は、コントローラ100等と連携して、入力されたフレームデータ(デスクランブルされたフレームデータ)を処理する。
さらに、コントローラ100は、デスクランブラ108を、この受信フレーム15を送信した別のイニシエータ/ターゲット10,20のスクランブラ104と同期させる。より具体的には、コントローラ100は、デスクランブラ108内のLFSR17Aの状態を、LFSR算出部113によって算出された、受信フレーム15の直後のB_EOFsもしくはEOAFを含むパケット、またはこのB_EOFsもしくはEOAFを含むパケットの直後のパケットが受信される時点の状態に設定する。
これにより、デスクランブラ108によりデスクランブルされた受信フレーム15に、スクランブラ104とデスクランブラ108との同期ずれに起因する受信エラー(例えば、CRCエラー)が発生している場合にも、適切にデスクランブルされた復元フレーム157を算出することができる。また、受信側のイニシエータ/ターゲット10,20のデスクランブラ108をイニシエータ/ターゲット10,20のスクランブラ104に同期させることができるので、これ以降に受信されるフレームも適切にデスクランブルすることができる。
なお、CRCデコーダ116は、復元フレーム157にCRCエラーが発生している場合、フレームを破棄し、CRCエラーが発生していることを受信フレームコントローラ109に通知し得る。そして、例えば、フレームがSSPフレームである場合、受信フレームコントローラ109は、コントローラ100等と連携して、上述したSPLパケットを送信するための動作により、CRCエラーが発生したことを示すNAK(CRC ERROR)プリミティブを含むSPLパケットを送信するように、イニシエータ/ターゲット10,20内の各部を制御する。また、例えば、フレームがアイデンティファイ・アドレス・フレームまたはオープン・アドレス・フレームである場合、何も応答しない。
このように、本実施形態のイニシエータ/ターゲット10,20では、デスクランブラ108によってデスクランブルされた受信フレーム15にCRCエラーが発生している場合に、復元モジュール11による受信フレーム15のデスクランブルにより得られた復元フレーム157にCRCエラーが発生していないならば、このデスクランブルされた受信フレーム15を復元フレーム157で置き換えることができる。また、受信側のイニシエータ/ターゲット10,20のデスクランブラ108を、送信側のイニシエータ/ターゲット10,20のスクランブラ104と同期させることができる。
以下では、イニシエータ/ターゲット10,20であるレシーバ・デバイス40が、別のイニシエータ/ターゲット10,20であるトランスミッタ・デバイス30から、アイデンティファイ・アドレス・フレーム、オープン・アドレス・フレーム、およびSSPフレームを受信する場合について、それぞれ具体的に説明する。
図9は、アイデンティファイ・アドレス・フレームのフォーマットの例を示す。アイデンティファイ・アドレス・フレームは32バイトのサイズを有している。
図9に示すように、アイデンティファイ・アドレス・フレームには、その23バイト目から27バイト目までに、5バイト(=40ビット)のサイズを有するReservedフィールドが含まれている。Reservedフィールド内には、0ビット目から39ビット目までの各ビットの値が設定されている。
SAS Gen5の規格において、このReservedフィールド内の各ビットには0が設定されるべきことが規定されている。つまり、Reservedフィールドには既定期待値が設定される。そのため、このReservedフィールドの0ビットから39ビットの内の連続する少なくともNビットを、既定値フィールドとして用いることができる。23ビットのLFSR17Aが用いられる場合、N=23である。
図10を参照して、アイデンティファイ・アドレス・フレーム内の既定値フィールドを用いて、LFSRの状態とスクランブリングデータとが算出される例を説明する。
レシーバ・デバイス40は、トランスミッタ・デバイス30から、フレームの開始を示すSOAFを含むプリミティブ・セグメント41を受信した後、アイデンティファイ・アドレス・フレームを構成する複数のフレーム・セグメント42を受信する。フレーム・バッファ11Aには、少なくとも、アイデンティファイ・アドレス・フレームの先頭から、既定値フィールドであるReservedフィールドまでのフレームデータが、すなわち、アイデンティファイ・アドレス・フレームの0バイト目から27バイト目までのフレームデータが、保存される。
上述したように、Reservedフィールドには、SAS Gen5の規格において、0が設定されるべきことが規定されている。そのため、スクランブリングデータとのXOR演算によりスクランブルされたReservedフィールドの値は、そのスクランブリングデータと同一の値になる。
したがって、レシーバ・デバイス40は、保存されたアイデンティファイ・アドレス・フレームのReservedフィールドの値(すなわち、23バイト目から27バイト目までの値)421を、この値421の算出に用いられたスクランブリングデータ421Sとして算出する。なお、LFSR17Aが23ビットで構成されている場合、Reservedフィールドは40ビット(=5バイト)のサイズを有しているので、その内の連続した23ビットがスクランブリングデータ421Sとして算出されてもよい。
レシーバ・デバイス40は、Reservedフィールド(既定値フィールド)に対応するスクランブリングデータ421Sに基づいて、このスクランブリングデータ421Sが算出された時点のLFSRの状態を算出(復元)できる。LFSRの状態は、例えば、LFSRを構成する各ビットの値で表される。以下では、既定値フィールドに対応するスクランブリングデータ421Sが算出された時点のLFSRの状態を、LFSRの復元された状態とも称する。
図11は、23ビットのスクランブリングデータ421Sを用いて、対応するLFSRの状態を復元する数値計算のための関数rstr_curr_lfsr(input [22:00] in)の例を示す。この関数の引数inとして、23ビットのスクランブリングデータ421Sが用いられる。したがって、引数in[00]〜in[22]が、スクランブリングデータ421Sのビット0〜ビット22の値をそれぞれ表す。また、図示されている記号“^”はXOR演算を表す。
rstr_curr_lfsr[00]〜rstr_curr_lfsr[22]は、復元されるLFSRのビット0〜ビット22の値をそれぞれ示す。図11に示すように、rstr_curr_lfsr[00]〜rstr_curr_lfsr[22]は、引数in[00]〜in[22]を用いて算出される。
例えば、rstr_curr_lfsr[22]の値は、in[00]の値と等しい。rstr_curr_lfsr[21]の値は、in[01]の値と等しい。また、rstr_curr_lfsr[20]の値は、in[00]の値とin[02]の値とのXOR演算結果である。
同様にして、図11に示すように、rstr_curr_lfsr[00]〜rstr_curr_lfsr[22]は、引数in[00]〜in[22]の値を用いて、あるいは引数in[00]〜in[22]の値を用いたXOR演算により、算出することができる。
図10に戻り、レシーバ・デバイス40は、復元されたLFSRの状態(例えば、図11のrstr_curr_lfsr[00]〜rstr_curr_lfsr[22])が前進するように遷移させる計算か、あるいは算出されたLFSRの状態が後退するように遷移させる計算を用いて、任意の時点のLFSRの状態を算出することができる。例えば、レシーバ・デバイス40は、アイデンティファイ・アドレス・フレームを構成するフレーム・セグメント42の内のあるフレーム・セグメントが受信される時点のLFSRの状態、アイデンティファイ・アドレス・フレームの送信完了を示すEOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント43に後続するセグメント44が受信される時点のLFSRの状態、等を算出できる。
レシーバ・デバイス40は、この任意の時点のLFSRの状態として、レシーバ・デバイス40のデスクランブラ108内のLFSRを、トランスミッタ・デバイス30のスクランブラ104内のLFSRに同期させるための状態(以下、同期用状態とも称する)を算出することもできる。同期用状態には、例えば、アイデンティファイ・アドレス・フレームの送信完了を示すEOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント43に後続するセグメント44が受信される時点のLFSRの状態が用いられる。
図12は、アイデンティファイ・アドレス・フレームの24バイト目から26バイト目までのReservedフィールドの内の、9ビット目から31ビット目までの23ビットを既定値フィールドとして、EOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態を示す同期用状態を算出する数値計算のための関数calc_next_lfsr(input [22:00] in)の例を示す。
この関数の引数inとして、LFSRの復元された状態を示す23ビットの値が用いられる。したがって、引数in[00]〜in[22]が、LFSRの復元された状態を示すビット0〜ビット22の値をそれぞれ表す。また、図示されている記号“^”はXOR演算を表す。
calc_next_lfsr[00]〜calc_next_lfsr[22]は、復元されるLFSRのビット0〜22の値をそれぞれ示す。図12に示すように、calc_next_lfsr[00]〜calc_next_lfsr[22]は、引数in[00]〜in[22]を用いて算出される。
例えば、calc_next_lfsr[00]の値は、in[00]、in[03]、in[07]、in[09]、in[10]、in[11]、in[12]、in[13]、in[14]、in[15]、in[16]、in[18]、in[20]、in[21]、およびin[22]のXOR演算結果である。
同様にして、図12に示すように、calc_next_lfsr[00]〜calc_next_lfsr[22]は、引数in[00]〜in[22]の値を用いたXOR演算により算出することができる。
図10に戻り、レシーバ・デバイス40は、アイデンティファイ・アドレス・フレームを構成するフレーム・セグメント42を一括してデスクランブルするためのスクランブリングデータ42Sを算出することもできる。32バイトのアイデンティファイ・アドレス・フレーム(フレーム・セグメント42)をデスクランブルするために、256ビット(=32バイト)のスクランブリングデータ42Sが算出される。
レシーバ・デバイス40は、例えば、EOAFを含むプリミティブ・セグメント43に後続するセグメント44が受信される時点のLFSRの状態を、アイデンティファイ・アドレス・フレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算を用いて、スクランブリングデータ42Sを算出する。
あるいは、レシーバ・デバイス40は、例えば、EOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態(例えば、図12のcalc_next_lfsr[00]〜calc_next_lfsr[22])を、アイデンティファイ・アドレス・フレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算を用いて、スクランブリングデータ42Sを算出してもよい。
図13乃至図18は、EOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態を、アイデンティファイ・アドレス・フレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる過程において、256ビットのスクランブリングデータ42Sを数値計算により算出するための関数roll_back_lfsr(input [22:00] in)の例を示す。
この関数の引数inとして、LFSRの同期用状態(ここでは、EOAFを含むプリミティブ・セグメント43が受信される時点のLFSRの状態)を示す23ビットの値が用いられる。したがって、引数in[00]〜in[22]が、LFSRの同期用状態を示すビット0〜ビット22の値をそれぞれ表す。また、図示されている記号“^”はXOR演算を表す。
roll_back_lfsr[000]〜roll_back_lfsr[255]は、算出されるスクランブリングデータ42Sのビット0〜255の値をそれぞれ示す。図13乃至図18に示すように、roll_back_lfsr[000]〜roll_back_lfsr[255]は、引数in[00]〜in[22]を用いて算出される。
例えば、roll_back_lfsr[000]の値は、in[00]の値と等しい。roll_back_lfsr[001]の値は、in[01]の値と等しい。また、roll_back_lfsr[002]の値は、in[00]の値とin[02]の値とのXOR演算結果である。
同様にして、図13乃至図18に示すように、roll_back_lfsr[000]〜roll_back_lfsr[255]は、引数in[00]〜in[22]の値を用いて、あるいは引数in[00]〜in[22]の値を用いたXOR演算により、算出することができる。
レシーバ・デバイス40は、トランスミッタ・デバイス30から受信され、フレーム・バッファ11Aに保存されたフレーム・セグメント42と、算出されたスクランブリングデータ42S(例えば、図13乃至図18のroll_back_lfsr[000]〜roll_back_lfsr[255])とをXOR演算することにより、フレーム・セグメント42をデスクランブルする。
そして、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント42のCRCを検証する。CRCエラーが発生していないならば、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント42を、トランスミッタ・デバイス30から受信され、デスクランブルされたアイデンティファイ・アドレス・フレームとして用いることができる。したがって、デスクランブラ108によってデスクランブルされたフレーム・セグメントにCRCエラーが発生した場合に、そのCRCエラーが発生したフレーム・セグメントを、スクランブルデータ42Sを用いてデスクランブルされたフレーム・セグメント42に置き換えることができる。
さらに、デスクランブルされたフレーム・セグメント42にCRCエラーが発生していないならば、デスクランブラ108内のLFSR17Aを、例えば、後続するセグメント44が受信される時点の状態を示す同期用状態に設定することにより、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
以上により、受信されたアイデンティファイ・アドレス・フレームをデスクランブラ108によってデスクランブルした場合にCRCエラーが発生していたとしても、当該フレーム内の既定値フィールドの値と対応する既定期待値とを用いて、フレームを適切にデスクランブルすることができると共に、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
図19は、オープン・アドレス・フレームのフォーマットの例を示す。オープン・アドレス・フレームは32バイトのサイズを有している。
図19に示すように、オープン・アドレス・フレームには、その4バイト目から11バイト目までに、8バイト(=64ビット)のサイズを有するDESTINATION SAS ADDRESSフィールドが含まれている。DESTINATION SAS ADDRESSフィールドには、0ビット目から63ビット目までの各ビットの値が設定されている。
このDESTINATION SAS ADDRESSフィールドには、このフレームを受信するレシーバ・デバイス40のSASアドレスが設定される。レシーバ・デバイス40において自身のSASアドレスは既知であり、したがって、レシーバ・デバイス40にとって既定の値がDESTINATION SAS ADDRESSフィールドに設定されることになる。そのため、DESTINATION SAS ADDRESSフィールド内の連続する少なくともNビットを、既定値フィールドとして用いることができる。23ビットのLFSR17Aが用いられる場合、N=23である。
また、オープン・アドレス・フレームには、その25バイト目から27バイト目までに、3バイト(=24ビット)のサイズを有するMORE COMPATIBLE FEATURESフィールドが含まれている。MORE COMPATIBLE FEATURESフィールドには、0ビット目から24ビット目までの各ビットの値が設定されている。
SAS Gen5の規格において、このMORE COMPATIBLE FEATURESフィールドの各ビットには0が設定されるべきことが規定されている。つまり、MORE COMPATIBLE FEATURESフィールドには既定値が設定される。そのため、このMORE COMPATIBLE FEATURESフィールド内の連続する少なくとも23ビットを、既定値フィールドとして用いてもよい。
図20を参照して、オープン・アドレス・フレーム内の既定値フィールドを用いて、LFSRの状態とスクランブリングデータとが算出される例を説明する。
レシーバ・デバイス40は、トランスミッタ・デバイス30から、フレームの開始を示すSOAFを含むプリミティブ・セグメント51を受信した後、オープン・アドレス・フレームを構成する複数のフレーム・セグメント52を受信する。フレーム・バッファ11Aには、少なくとも、オープン・アドレス・フレームの先頭から、既定値フィールドであるDESTINATION SAS ADDRESSフィールドまでのフレームデータが、例えば、オープン・アドレス・フレームの0バイト目から11バイト目までのフレームデータが、保存される。
なお、オープン・アドレス・フレームの先頭から、DESTINATION SAS ADDRESSフィールド内の連続する少なくとも23ビットを含むフレーム・セグメントまでが、フレーム・バッファ11Aに保存されてもよい。この場合、オープン・アドレス・フレームの0バイト目から7バイト目までのフレームデータが、フレーム・バッファ11Aに保存される。
レシーバ・デバイス40は、保存されたオープン・アドレス・フレームのDESTINATION SAS ADDRESSフィールドの値(ここでは、4バイト目から7バイト目までの値)521と、既定期待値150として自身のSASアドレスの32ビット目から63ビット目までの値(以下、SASアドレス[63:32]と表記する)150AとをXOR演算する。これにより、このDESTINATION SAS ADDRESSフィールドの値521の算出に用いられたスクランブリングデータ521Sが算出される。なお、LFSR17Aが23ビットである場合、DESTINATION SAS ADDRESSフィールドの値と自身のSASアドレス[63:32]150Aとは32ビット(=4バイト)のサイズを有しているので、その内の連続した少なくとも23ビットがXOR演算に用いられてもよい。
レシーバ・デバイス40は、スクランブリングデータ521Sに基づいて、このスクランブリングデータ521Sが算出された時点のLFSRの状態を算出できる。LFSRの状態は、例えば、LFSRを構成する各ビットの値で表される。
また、レシーバ・デバイス40は、算出されたLFSRの状態が前進するように遷移させる計算か、あるいは算出されたLFSRの状態が後退するように遷移させる計算を用いて、任意の時点のLFSRの状態を算出することができる。例えば、レシーバ・デバイス40は、オープン・アドレス・フレームを構成するフレーム・セグメント52の内のあるフレーム・セグメントが受信される時点のLFSRの状態、フレームの送信完了を示すEOAFを含むプリミティブ・セグメント53が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態、等を算出できる。
レシーバ・デバイス40は、この任意の時点のLFSRの状態として、レシーバ・デバイス40のデスクランブラ108内のLFSRを、トランスミッタ・デバイス30のスクランブラ104内のLFSRに同期させるための同期用状態を算出することもできる。同期用状態には、例えば、オープン・アドレス・フレームの送信完了を示すEOAFを含むプリミティブ・セグメント53が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態が用いられる。
さらに、レシーバ・デバイス40は、オープン・アドレス・フレームを構成するフレーム・セグメント52をデスクランブルするためのスクランブリングデータ52Sを算出することもできる。レシーバ・デバイス40は、例えば、EOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態を、オープン・アドレス・フレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算を用いて、スクランブリングデータ52Sを算出する。
レシーバ・デバイス40は、トランスミッタ・デバイス30から受信され、フレーム・バッファ11Aに保存されたフレーム・セグメント52と、算出されたスクランブリングデータ52SとをXOR演算することにより、フレーム・セグメント52をデスクランブルする。
そして、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント52のCRCを検証する。CRCエラーが発生していないならば、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント52を、トランスミッタ・デバイス30から受信され、デスクランブルされたオープン・アドレス・フレームとして用いることができる。したがって、デスクランブラ108によってデスクランブルされたフレーム・セグメントにCRCエラーが発生した場合に、そのCRCエラーが発生したフレーム・セグメントを、スクランブリングデータ52Sを用いてデスクランブルされたフレーム・セグメント52に置き換えることができる。
さらに、デスクランブルされたフレーム・セグメント52にCRCエラーが発生していないならば、デスクランブラ108内のLFSR17Aを、例えば、後続するセグメント54が受信される時点のLFSRの状態を示す同期用状態に設定することにより、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
図21は、オープン・アドレス・フレーム内の、MORE COMPATIBLE FEATURESフィールドを用いて、LFSRの状態とスクランブリングデータとが算出される例を示す。
レシーバ・デバイス40は、トランスミッタ・デバイス30から、フレームの開始を示すSOAFを含むプリミティブ・セグメント51を受信した後、オープン・アドレス・フレームを構成する複数のフレーム・セグメント52を受信する。フレーム・バッファ11Aには、少なくとも、オープン・アドレス・フレームの先頭から、既定値フィールドであるMORE COMPATIBLE FEATURESフィールドまでのフレームデータが、すなわち、オープン・アドレス・フレームの0バイト目から27バイト目までのフレームデータが、保存される。
上述したように、MORE COMPATIBLE FEATURESフィールドには、SAS Gen5の規格において0が設定されるべきことが規定されている。そのため、スクランブリングデータとのXOR演算によりスクランブルされたMORE COMPATIBLE FEATURESフィールドの値は、そのスクランブリングデータと同一の値になる。
したがって、レシーバ・デバイス40は、保存されたアイデンティファイ・アドレス・フレームのMORE COMPATIBLE FEATURESフィールドの値(すなわち、25バイト目から27バイト目までの値)522を、この値522の算出に用いられたスクランブリングデータ522Sとして算出する。なお、LFSR17Aが23ビットで構成されている場合、MORE COMPATIBLE FEATURESフィールドは24ビット(=3バイト)のサイズを有しているので、その内の連続した23ビットがスクランブリングデータ522Sとして算出されてもよい。
レシーバ・デバイス40は、スクランブリングデータ522Sに基づいて、このスクランブリングデータ522Sが算出された時点のLFSRの状態を算出できる。LFSRの状態とは、例えば、LFSRを構成する各ビットの値である。
また、レシーバ・デバイス40は、算出されたLFSRの状態が前進するように遷移させる計算か、あるいは算出されたLFSRの状態が後退するように遷移させる計算を用いて、任意の時点のLFSRの状態を算出することができる。例えば、レシーバ・デバイス40は、オープン・アドレス・フレームを構成するフレーム・セグメント52の内のあるフレーム・セグメントが受信される時点のLFSRの状態、オープン・アドレス・フレームの送信完了を示すEOAFを含むプリミティブ・セグメント53が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態、等を算出できる。
レシーバ・デバイス40は、この任意の時点のLFSRの状態として、レシーバ・デバイス40のデスクランブラ108内のLFSRを、トランスミッタ・デバイス30のスクランブラ104内のLFSRに同期させるための同期用状態を算出することもできる。同期用状態には、例えば、オープン・アドレス・フレームの送信完了を示すEOAFを含むプリミティブ・セグメント53が受信される時点のLFSRの状態、あるいは、このEOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態が用いられる。
さらに、レシーバ・デバイス40は、オープン・アドレス・フレームを構成するフレーム・セグメント52をデスクランブルするためのスクランブリングデータ52Sを算出することもできる。レシーバ・デバイス40は、例えば、EOAFを含むプリミティブ・セグメント53に後続するセグメント54が受信される時点のLFSRの状態を、オープン・アドレス・フレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算を用いて、スクランブリングデータ52Sを算出する。
レシーバ・デバイス40は、トランスミッタ・デバイス30から受信され、フレーム・バッファ11Aに保存されたフレーム・セグメント52と、算出されたスクランブリングデータ52SとをXOR演算することにより、フレーム・セグメント52をデスクランブルする。
レシーバ・デバイス400は、デスクランブルされたフレーム・セグメント52のCRCを検証する。CRCエラーが発生していないならば、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント52を、トランスミッタ・デバイス30から受信され、デスクランブルされたオープン・アドレス・フレームとして用いることができる。したがって、デスクランブラ108によってデスクランブルされたフレーム・セグメントにCRCエラーが発生した場合に、そのCRCエラーが発生したフレーム・セグメントを、スクランブリングデータ52Sを用いてデスクランブルされたフレーム・セグメント52に置き換えることができる。
さらに、デスクランブルされたフレーム・セグメント52にCRCエラーが発生していないならば、デスクランブラ108内のLFSR17Aを、例えば、後続するセグメント44が受信される時点のLFSRの状態を示す同期用状態に設定することにより、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
以上により、受信されたオープン・アドレス・フレームをデスクランブラ108によってデスクランブルした場合にCRCエラーが発生していたとしても、当該フレーム内の既定値フィールドの値と対応する既定期待値とを用いて、フレームを適切にデスクランブルすることができると共に、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラとを同期させることができる。
図22から図27のフローチャートを参照して、イニシエータ/ターゲット10,20によって実行されるアドレス・フレームの送信制御処理、受信制御処理、および復元処理の手順について説明する。以下では、上述の記載と同様に、送信側のイニシエータ/ターゲット10,20をトランスミッタ・デバイス30と記載し、受信側のイニシエータ/ターゲット10,20をレシーバ・デバイス40と記載する。
図22のフローチャートは、トランスミッタ・デバイス30によって実行されるアドレス・フレームの送信制御処理の手順の例を示す。
まず、トランスミッタ・デバイス30は、レシーバ・デバイス40へアドレス・フレームを送信する必要があるか否かを判定する(ステップS101)。アドレス・フレームを送信する必要がない場合(ステップS101のNO)、ステップS101に戻り、レシーバ・デバイス40へアドレス・フレームを送信する必要があるか否かが再度判定される。なお、この場合に、トランスミッタ・デバイス30は、例えば、アイドルdwordセグメントを含むパケットをレシーバ・デバイス40に送信してもよい。
アドレス・フレームを送信する必要がある場合(ステップS101のYES)、トランスミッタ・デバイス30は、SOAFを生成し(ステップS102)、このSOAFを含むパケットをレシーバ・デバイス40に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS103)。このプリミティブ・セグメント処理については、図23のフローチャートを参照して後述する。
次いで、トランスミッタ・デバイス30は、フレームを構成する未送信のフレームデータがあるか否かを判定する(ステップS104)。未送信フレームデータがある場合(ステップS104のYES)、トランスミッタ・デバイス30は、1パケット分以上の未送信フレームデータがあるか否かを判定する(ステップS105)。1パケット分以上の未送信フレームデータがある場合(ステップS105のYES)、トランスミッタ・デバイス30は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行し(ステップS106)、ステップS104に戻る。フレーム・セグメント送信処理については、図24のフローチャートを参照して後述する。
1パケット分以上の未送信フレームデータがない場合(ステップS105のNO)、トランスミッタ・デバイス30は、フレームを構成するフレームデータのCRC値を算出する(ステップS107)。そして、トランスミッタ・デバイス30は、未送信フレームデータと算出されたCRC値とで構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行する(ステップS108)。
また、未送信フレームデータがない場合(ステップS104のNO)、例えば、フレームを構成する全てのフレームデータがレシーバ・デバイス40に送信済みである場合、トランスミッタ・デバイス30は、フレームを構成するフレームデータのCRC値を算出する(ステップS109)。そして、トランスミッタ・デバイス30は、算出されたCRC値で構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行する(ステップS110)。
フレームを構成する全てのフレームデータとCRC値とがパケット単位でレシーバ・デバイス40に送信された後(ステップS108またはステップS110の後)、トランスミッタ・デバイス30は、アドレス・フレームの送信完了を示すEOAFを生成し(ステップS111)、このEOAFを含むパケットをレシーバ・デバイス40に送信するためのプリミティブ・セグメント送信処理を実行し(ステップS112)、処理を終了する。
図23のフローチャートは、トランスミッタ・デバイス30により実行されるプリミティブ・セグメント送信処理の手順の例を示す。
まず、トランスミッタ・デバイス30は、送信されるプリミティブの種別に応じて処理を分岐する(ステップS21)。プリミティブが送信される場合(ステップS21のプリミティブ)、トランスミッタ・デバイス30は、そのプリミティブを128b130b変換し、プリミティブ・セグメントを生成する(ステップS22)。一方、バイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが送信される場合(ステップS21のバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブ)、トランスミッタ・デバイス30は、そのバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブを用いて、プリミティブ・セグメントを生成する(ステップS23)。
次いで、トランスミッタ・デバイス30は、スクランブラ104の状態を次の状態に遷移させる(ステップS24)。つまり、トランスミッタ・デバイス30は、スクランブラ104の動作回数(RUN回数)を1だけ増加させる。
そして、トランスミッタ・デバイス30は、FECのためのパリティ・シンボルが付加されたパケットを生成し(ステップS25)、当該パケットをレシーバ・デバイス40に送信する(ステップS26)。
以上により、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを含むパケットを送信することができる。その際、スクランブラ104は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブをスクランブルしないが、スクランブラ104の状態は次の状態に遷移する。
なお、送信されるプリミティブがPACKET_SYNCである場合には、例えば、ステップS24の後に、スクランブラ104が初期化される。この初期化により、スクランブラ104内のLFSR17Aが初期状態に戻る。
図24のフローチャートは、トランスミッタ・デバイス30によって実行されるフレーム・セグメント送信処理の手順の例を示す。
まず、トランスミッタ・デバイス30は、送信されるフレームデータとCRC値の少なくとも一方を含むフレーム・セグメントを生成する(ステップS31)。トランスミッタ・デバイス30は、スクランブラ104によりフレーム・セグメントをスクランブルする(ステップS32)。そして、トランスミッタ・デバイス30は、スクランブラ104の状態を次の状態に遷移させる(ステップS33)。
次いで、トランスミッタ・デバイス30は、FECのためのパリティ・シンボルが付加されたパケットを生成し(ステップS34)、当該パケットをレシーバ・デバイス40に送信する(ステップS35)。
以上により、フレームデータとCRC値の少なくとも一方を含むパケットを送信することができる。その際、フレームデータおよびCRC値がスクランブラ104によりスクランブルされると共に、スクランブラ104の状態は次の状態に遷移する。
図25のフローチャートは、レシーバ・デバイス40によって実行されるアドレス・フレームの受信制御処理の手順の例を示す。
まず、レシーバ・デバイス40は、トランスミッタ・デバイス30からパケットを受信したか否かを判定する(ステップS401)。パケットを受信していない場合(ステップS401のNO)、ステップS401に戻り、パケットを受信したか否かが再度判定される。
パケットを受信した場合(ステップS401のYES)、レシーバ・デバイス40は、そのパケットにFECデコード処理を施す(ステップS402)。FECデコード処理では、エラーの有無の判定、エラー位置の特定、エラー訂正、デコードの成功または失敗の通知等が行われる。FECデコード処理が成功した場合には、レシーバ・デバイス40は、デコードされたパケットに含まれるセグメントがプリミティブ・セグメントであるか否かを判定する(ステップS403)。
パケットに含まれるセグメントがプリミティブ・セグメントである場合(ステップS403のYES)、レシーバ・デバイス40は、デスクランブラ108の状態を次の状態に遷移させる(ステップS404)。
次いで、レシーバ・デバイス40は、プリミティブ・セグメントにアドレス・フレームの送信開始を示すSOAFが含まれているか否かを判定する(ステップS405)。プリミティブ・セグメントにSOAFが含まれている場合(ステップS405のYES)、レシーバ・デバイス40はバッファフラグを立て(ステップS406)、ステップS401に戻る。バッファフラグは、受信されたセグメントをフレーム・バッファ11Aに保存するか否かを示す。このバッファフラグが立っている間に受信されたプリミティブ・セグメント以外のセグメントは、フレーム・バッファ11Aに保存される。
プリミティブ・セグメントにSOAFが含まれていない場合(ステップS405のNO)、レシーバ・デバイス40は、プリミティブ・セグメントにPACKET_SYNCが含まれているか否かを判定する(ステップS407)。プリミティブ・セグメントにPACKET_SYNCが含まれている場合(ステップS407のYES)、レシーバ・デバイス40は、デスクランブラ108を初期化し(ステップS408)、ステップS401に戻る。この初期化により、デスクランブラ108内のLFSR17Aが初期状態に戻る。
また、プリミティブ・セグメントにPACKET_SYNCが含まれていない場合(ステップS407のNO)、レシーバ・デバイス40は、プリミティブ・セグメントにアドレス・フレームの送信完了を示すEOAFが含まれているか否かを判定する(ステップS409)。プリミティブ・セグメントにEOAFが含まれている場合(ステップS409のYES)、受信フレーム15を検証し、必要に応じて復元フレーム157に置換するための検証処理を実行する(ステップS410)。レシーバ・デバイス40は、バッファフラグをクリアする(ステップS411)。そして、レシーバ・デバイス40は、受信されたセグメントが保存されたフレーム・バッファ11A内の領域を解放し(ステップS412)、ステップS401に戻る。検証処理については、図27のフローチャートを参照して後述する。
プリミティブ・セグメントにEOAFが含まれていない場合(ステップS409のNO)、そのプリミティブ・セグメントに含まれるプリミティブに応じた動作を行い(ステップS411)、ステップS401に戻る。
また、パケットに含まれるセグメントがプリミティブ・セグメントでない場合(ステップS403のNO)、レシーバ・デバイス40はバッファフラグが立っているか否かを判定する(ステップS414)。プリミティブ・セグメントでないセグメントは、アイドルdwordセグメント、およびスクランブルド・アイドル・セグメントのいずれかである。バッファフラグが立っている場合(ステップS414のYES)、レシーバ・デバイス40はセグメントをフレーム・バッファ11Aに保存する(ステップS415)。フレーム・バッファ11Aに保存されるセグメントは、SOAFを含むパケットが受信されてから、EOAFを含むパケットが受信されるまでの間に受信されるセグメントである。フレーム・バッファ11Aに保存されたセグメントは、デスクランブラ108内のLFSR17Aを任意の時点の状態に設定し、受信フレーム15を適切にデスクランブルするための復元処理に用いられる。復元処理については、図26のフローチャートを参照して後述する。なお、バッファフラグがクリアされている場合(ステップS414のNO)、ステップS415はスキップされる。
次いで、レシーバ・デバイス40は、セグメントを、デスクランブラ108を用いてデスクランブルする(ステップS416)。そして、レシーバ・デバイス40は、デスクランブラ108の状態を次の状態に遷移させ(ステップS417)、すなわち、デスクランブラ108の動作回数(RUN回数)を1だけ増加させ、ステップS401に戻る。
図26のフローチャートは、レシーバ・デバイス40によって実行される復元処理の手順の例を示す。この復元処理は、上述した受信制御処理と並行して実行され得る。
まず、レシーバ・デバイス40は、受信されているアドレス・フレームのタイプを識別する(ステップS51)。レシーバ・デバイス40は、例えば、SOAFが受信された後に後にフレーム・バッファ11Aに保存される情報を、アイデンティファイ・アドレス・フレームの交換後であれば、オープン・アドレス・フレームと判断し、その交換前であれば、アイデンティファイ・アドレス・フレームと判断する。
レシーバ・デバイス40は、識別されたアドレス・フレームのタイプに応じて、フレーム内の既定値フィールドを設定する(ステップS52)。上述したように、既定値フィールドは、受信されているアドレス・フレームのタイプによって異なる。例えば、レシーバ・デバイス40は、フレームがアイデンティファイ・アドレス・フレームである場合、フレーム内の23バイト目から27バイト目までのReservedフィールドの内の少なくとも23ビットを、既定値フィールドとして設定する。また、レシーバ・デバイス40は、フレームがオープン・アドレス・フレームである場合、フレーム内の4バイト目から11バイト目までのDESTINATION SAS ADDRESSフィールドの内の少なくとも23ビットか、あるいは25バイト目から27バイト目までのMORE COMPATIBLE FEATURESフィールドの内の少なくとも23ビットを、既定値フィールドとして設定する。
次いで、レシーバ・デバイス40は、フレーム・バッファ11Aに、設定された既定値フィールドの値151が保存されたか否かを判定する(ステップS53)。既定値フィールドの値151が保存されていない場合(ステップS53のNO)、ステップS53に戻り、既定値フィールドの値151が保存されたか否かが再度判定される。
既定値フィールドの値151が保存された場合(ステップS53のNO)、レシーバ・デバイス40は、保存された既定値フィールドの値151と、スクランブリング前にその既定値フィールドに設定されているべき既定期待値150とをXOR演算することにより、この既定値フィールドの値151の生成に用いられた第1スクランブリングデータ152を生成する(ステップS54)。そして、レシーバ・デバイス40は、第1スクランブリングデータ152を用いて、対応するLFSRの状態を算出する(ステップS55)。
次いで、レシーバ・デバイス40は、デスクランブラ108内のLFSR17Aを、トランスミッタ・デバイス30のスクランブラ104内のLFSR17Aに同期させるために、デスクランブラ108内のLFSR17Aに設定すべき同期用状態を算出する(ステップS56)。レシーバ・デバイス40は、例えば、デスクランブラ108によって次にデスクランブルされるべきパケットを決定し、そのパケット内のセグメントを適切にデスクランブルするためのLFSRの状態を同期用状態として算出する。デスクランブラ108によって次にデスクランブルされるべきパケットは、例えば、受信しているアドレス・フレームに後続するEOAFを含むパケットや、このEOAFを含むパケットの次のパケットである。
レシーバ・デバイス40は、LFSRを、算出された同期用状態から後退するように遷移させる計算により、受信されているアドレス・フレームをデスクランブルするための第2スクランブリングデータ156を生成する(ステップS57)。第2スクランブリングデータ156は、例えば、図13乃至図18に示したような、32バイトのアドレス・フレームを復元するための256ビットのパターンである。
次いで、レシーバ・デバイス40は、受信されているアドレス・フレームを構成する全てのフレームデータがフレーム・バッファ11Aに保存されたか否かを判定する(ステップS58)。アドレス・フレームを構成する全てのフレームデータがフレーム・バッファ11Aに保存されていない場合(ステップS58のNO)、ステップS58に戻る。
一方、アドレス・フレームを構成する全てのフレームデータがフレーム・バッファ11Aに保存された場合(ステップS58のYES)、レシーバ・デバイス40は、第2スクランブリングデータ156を用いて、保存された受信フレーム15のフレームデータをデスクランブルすることにより、復元フレーム157を生成する(ステップS59)。
これにより、PACKET_SYNCを受信し、初期化された時点からの動作回数に応じてデスクランブラ108(LFSR17A)によって生成されたスクランブリングデータではなく、受信フレーム15内の既定値フィールドの値151とそれに対応する既定期待値150とを用いて算出された第2スクランブリングデータ156を用いて、受信フレーム15内のフレームデータがデスクランブルされた復元フレーム157を取得することができる。
図27のフローチャートは、レシーバ・デバイス40によって実行されるアドレス・フレームの検証処理の手順の例を示す。この検証処理は、図25のフローチャートを参照して上述したように、例えば、アドレス・フレームの送信完了を示すEOAFが受信されたことに応じて実行される。ここでは、検証処理が開始される前に復元処理が完了していることを想定する。
まず、レシーバ・デバイス40は、デスクランブラ108によってデスクランブルされたセグメントで構成される受信フレーム15のCRCを検証し(ステップS601)、受信フレーム15にCRCエラーが発生しているか否かを判定する(ステップS602)。
受信フレーム15にCRCエラーが発生していない場合(ステップS602のNO)、レシーバ・デバイス40は、この受信フレーム15に応じて、応答のためのプリミティブ・セグメントとフレーム・セグメントの少なくとも一方を生成し、生成されたセグメントを含むパケットをトランスミッタ・デバイス30に送信する(ステップS608)。例えば、受信フレームが接続要求のためのオープン・アドレス・フレームである場合には、接続要求を受け入れるOPEN_ACCEPTプリミティブか、あるいは接続要求を拒絶するOPEN_REJECTプリミティブを含むパケットが送信される。また、受信フレームがアイデンティファイ・アドレス・フレームである場合には、応答のためのアイデンティファイ・アドレス・フレームを送信するために、SOAFプリミティブ、当該フレームを構成するフレーム・セグメント、およびEOAFプリミティブを含むパケットが送信される。この送信では、図23および図24を参照して上述したプリミティブ・セグメント送信処理およびフレーム・セグメント送信処理が実行され得る。
一方、受信フレーム15にCRCエラーが発生している場合(ステップS602のYES)、レシーバ・デバイス40は、復元処理において生成された復元フレーム157のCRCを検証し(ステップS603)、復元フレーム157にCRCエラーが発生しているか否かを判定する(ステップS604)。
復元フレーム157にCRCエラーが発生している場合(ステップS604のYES)、レシーバ・デバイス40は、受信フレーム15および復元フレーム157を破棄し(ステップS605)、トランスミッタ・デバイス30に対して何等応答しない。つまり、受信フレーム15と復元フレーム157の両方にCRCエラーが発生している場合に、それらフレームが破棄される。
一方、復元フレーム157にCRCエラーが発生していない場合(ステップS604のNO)、レシーバ・デバイス40は、受信フレーム15を復元フレーム157に置き換える(ステップS606)。つまり、CRCエラーが発生している受信フレーム15が破棄され、復元フレーム157がトランスミッタ・デバイス30から受信されたフレームとして処理される。レシーバ・デバイス40は、デスクランブラ108内のLFSR17Aを、復元処理により算出された同期用状態に設定する(ステップS607)。そして、レシーバ・デバイス40は、復元フレーム157に応じて、応答のためのプリミティブ・セグメントとフレーム・セグメントの少なくとも一方を生成し、生成されたセグメントを含むパケットをトランスミッタ・デバイス30に送信する(ステップS608)。
以上の処理により、レシーバ・デバイス40では、受信されたアドレス・フレームをデスクランブラ108によってデスクランブルした場合にCRCエラーが発生していたとしても、当該フレーム内の既定値フィールドの値と対応する既定期待値とを用いて、フレームを適切にデスクランブルすることができると共に、当該レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラとを同期させることができる。
図28は、SSPフレームのフォーマットの例を示す。SSPフレームは任意のサイズを有している。
図28に示すように、SSPフレームには、その1バイト目から3バイト目までに、3バイト(=24ビット)のサイズを有するHASHED DESTINATION SAS ADDRESSフィールドが含まれている。HASHED DESTINATION SAS ADDRESSフィールドには、0ビット目から23ビット目までの各ビットの値が設定されている。
このHASHED DESTINATION SAS ADDRESSフィールドには、このフレームを受信するレシーバ・デバイス40のSASアドレスのハッシュ値が設定される。レシーバ・デバイス40において自身のSASアドレスのハッシュ値は既知であり、したがって、このレシーバ・デバイス40にとって既定の値がHASHED DESTINATION SAS ADDRESSフィールド設定されることになる。そのため、HASHED DESTINATION SAS ADDRESSフィールド内の連続する少なくともNビットを、既定値フィールドとして用いることができる。23ビットのLFSR17Aが用いられる場合、N=23である。
図29を参照して、SSPフレーム内の既定値フィールドを用いて、LFSRの状態とスクランブリングデータとが算出される例を説明する。
レシーバ・デバイス40は、トランスミッタ・デバイス30から、フレームの開始を示すSOFを含むプリミティブ・セグメント61を受信した後、SSPフレームを構成する複数のフレーム・セグメント62を受信する。フレーム・バッファ11Aには、少なくとも、SSPフレームの先頭から、既定値フィールドであるHASHED DESTINATION SAS ADDRESSフィールドまでのフレームデータが、すなわち、SSPフレームの0バイト目から3バイト目までのフレームデータが、保存される。
レシーバ・デバイス40は、保存されたSSPフレームのHASHED DESTINATION SAS ADDRESSフィールドの値(すなわち、1バイト目から3バイト目までの値)621と、既定期待値150として自身のSASアドレスのハッシュ値150BとをXOR演算する。これにより、このHASHED DESTINATION SAS ADDRESSフィールドの値621の算出に用いられたスクランブリングデータ621Sが算出される。なお、LFSR17Aが23ビットで構成されている場合、HASHED DESTINATION SAS ADDRESSフィールドの値と自身のSASアドレスのハッシュ値150Bとは24ビット(=3バイト)のサイズを有しているので、その内の連続した23ビットがXOR演算に用いられてもよい。
レシーバ・デバイス40は、スクランブリングデータ621Sに基づいて、このスクランブリングデータ621Sが算出された時点のLFSRの状態を算出できる。LFSRの状態は、例えば、LFSRを構成する各ビットの値で表される。
また、レシーバ・デバイス40は、算出されたLFSRの状態が前進するように遷移させる計算か、あるいは算出されたLFSRの状態が後退するように遷移させる計算を用いて、任意の時点のLFSRの状態を算出することができる。例えば、レシーバ・デバイス40は、SSPフレームを構成するフレーム・セグメント62の内のあるフレーム・セグメントが受信される時点のLFSRの状態、SSPフレームの送信完了を示すB_EOFsを含むプリミティブ・セグメント63が受信される時点のLFSRの状態、あるいは、このB_EOFsを含むプリミティブ・セグメント63に後続するセグメント64が受信される時点のLFSRの状態、等を算出できる。
さらに、レシーバ・デバイス40は、SSPフレームを構成するフレーム・セグメント62をデスクランブルするためのスクランブリングデータ62Sを算出することもできる。レシーバ・デバイス40は、例えば、B_EOFsを含むプリミティブ・セグメント63に後続するセグメント64が受信される時点のLFSRの状態を、SSPフレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算を用いて、スクランブリングデータ62Sを算出する。あるいは、レシーバ・デバイス40は、HASHED DESTINATION SAS ADDRESSフィールドの値621の算出に用いられたスクランブリングデータ621Sが算出された時点のLFSRの状態を、SSPフレームの先頭のセグメントが受信される時点の状態まで後退するように遷移させる計算と、SSPフレームの末尾のセグメントが受信される時点の状態まで前進するように遷移させる計算とを用いて、スクランブリングデータ62Sを算出してもよい。
レシーバ・デバイス40は、トランスミッタ・デバイス30から受信され、フレーム・バッファ11Aに保存されたフレーム・セグメント62と、算出されたスクランブリングデータ62SとをXOR演算することにより、フレーム・セグメント62をデスクランブルする。
そして、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント62のCRCを検証する。CRCエラーが発生していないならば、レシーバ・デバイス40は、デスクランブルされたフレーム・セグメント62を、トランスミッタ・デバイス30から受信され、デスクランブルされたSSPフレームとして用いることができる。したがって、デスクランブラ108によってデスクランブルされたフレーム・セグメントにCRCエラーが発生した場合に、そのCRCエラーが発生したフレーム・セグメントを、スクランブリングデータ62Sを用いてデスクランブルされたフレーム・セグメント62に置き換えることができる。
さらに、デスクランブルされたフレーム・セグメント62にCRCエラーが発生していないならば、デスクランブラ108内のLFSR17Aを、例えば、後続するセグメント64が受信される時点の状態に設定することにより、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
以上により、受信されたSSPフレームをデスクランブラ108によってデスクランブルした場合にCRCエラーが発生していたとしても、当該フレーム内の既定値フィールドの値と対応する既定期待値とを用いて、フレームを適切にデスクランブルすることができると共に、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラとを同期させることができる。
図30のフローチャートは、トランスミッタ・デバイス30によって実行されるSSPフレームの送信制御処理の手順の例を示す。
まず、トランスミッタ・デバイス30は、レシーバ・デバイス40へSSPフレームを送信する必要があるか否かを判定する(ステップS701)。フレームを送信する必要がない場合(ステップS701のNO)、ステップS701に戻り、レシーバ・デバイス40へフレームを送信する必要があるか否かが再度判定される。なお、この場合に、トランスミッタ・デバイス30は、例えば、アイドルdwordセグメントを含むパケットをレシーバ・デバイス40に送信してもよい。
フレームを送信する必要がある場合(ステップS701のYES)、トランスミッタ・デバイス30は、SOFを生成し(ステップS702)、このSOFを含むパケットをレシーバ・デバイス40に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS703)。このプリミティブ・セグメント処理については、図23のフローチャートを参照して上述した通りである。
次いで、トランスミッタ・デバイス30は、フレームを構成する未送信のフレームデータがあるか否かを判定する(ステップS704)。未送信フレームデータがある場合(ステップS704のYES)、トランスミッタ・デバイス30は、1パケット分以上の未送信フレームデータがあるか否かを判定する(ステップS705)。1パケット分のフレームデータは、例えば、4つのdwordに相当するフレームデータである。1パケット分以上の未送信フレームデータがある場合(ステップS705のYES)、トランスミッタ・デバイス30は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行し(ステップS706)、ステップS704に戻る。フレーム・セグメント送信処理については、図24のフローチャートを参照して上述した通りである。
1パケット分以上の未送信フレームデータがない場合(ステップS705のNO)、トランスミッタ・デバイス30は、フレームを構成するフレームデータのCRC値を算出する(ステップS707)。そして、トランスミッタ・デバイス30は、未送信フレームデータと算出されたCRC値とで構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行する(ステップS708)。
また、未送信フレームデータがない場合(ステップS704のNO)、例えば、フレームを構成する全てのフレームデータがレシーバ・デバイス40に送信済みである場合、トランスミッタ・デバイス30は、フレームを構成するフレームデータのCRC値を算出する(ステップS709)。そして、トランスミッタ・デバイス30は、算出されたCRC値とパッドdwordとで構成されるフレーム・セグメントを含むパケットをレシーバ・デバイス40に送信するためのフレーム・セグメント送信処理を実行する(ステップS710)。
フレームを構成する全てのフレームデータとCRC値とがパケット単位でレシーバ・デバイス40に送信された後(ステップS708またはステップS710の後)、トランスミッタ・デバイス30は、フレームの送信完了を示すB_EOFsを生成し(ステップS711)、このB_EOFsを含むパケットをレシーバ・デバイス40に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS712)、処理を終了する。
図31のフローチャートは、レシーバ・デバイス40によって実行されるSSPフレームの受信制御処理の手順の例を示す。
まず、レシーバ・デバイス40は、トランスミッタ・デバイス30からパケットを受信したか否かを判定する(ステップS801)。パケットを受信していない場合(ステップS801のNO)、ステップS801に戻り、パケットを受信したか否かが再度判定される。
パケットを受信した場合(ステップS801のYES)、レシーバ・デバイス40は、そのパケットにFECデコード処理を施す(ステップS802)。FECデコード処理では、エラーの有無の判定、エラー位置の特定、エラー訂正、デコードの成功または失敗の通知等が行われる。FECデコード処理が成功した場合には、レシーバ・デバイス40は、デコードされたパケットに含まれるセグメントがプリミティブ・セグメントであるか否かを判定する(ステップS803)。
パケットに含まれるセグメントがプリミティブ・セグメントである場合(ステップS803のYES)、レシーバ・デバイス40は、デスクランブラ108の状態を次の状態に遷移させる(ステップS804)。
次いで、レシーバ・デバイス40は、プリミティブ・セグメントにSSPフレームの送信開始を示すSOFが含まれているか否かを判定する(ステップS805)。プリミティブ・セグメントにSOFが含まれている場合(ステップS805のYES)、レシーバ・デバイス40はバッファフラグを立て(ステップS806)、ステップS801に戻る。バッファフラグは、受信されたセグメントをフレーム・バッファ11Aに保存するか否かを示す。このバッファフラグが立っている間に受信されたプリミティブ・セグメント以外のセグメントは、フレーム・バッファ11Aに保存される。
プリミティブ・セグメントにSOFが含まれていない場合(ステップS805のNO)、レシーバ・デバイス40は、プリミティブ・セグメントにPACKET_SYNCが含まれているか否かを判定する(ステップS807)。プリミティブ・セグメントにPACKET_SYNCが含まれている場合(ステップS807のYES)、レシーバ・デバイス40は、デスクランブラ108を初期化し(ステップS808)、ステップS801に戻る。この初期化により、デスクランブラ108内のLFSR17Aが初期状態に戻る。
また、プリミティブ・セグメントにPACKET_SYNCが含まれていない場合(ステップS807のNO)、レシーバ・デバイス40は、プリミティブ・セグメントにSSPフレームの送信完了を示すB_EOFsが含まれているか否かを判定する(ステップS809)。B_EOFsは、B_EOF(0)、B_EOF(1)、B_EOF(2)、B_EOF(3)、B_EOF(0)(RESERVED 1)、B_EOF(1)(RESERVED 1)、B_EOF(1)(RESERVED 2)、B_EOF(2)(RESERVED 1)、B_EOF(2)(RESERVED 2)、B_EOF(3)(RESERVED 1)、およびB_EOF(3)(RESERVED 2)である。プリミティブ・セグメントにB_EOFsが含まれている場合(ステップS809のYES)、受信フレーム15を検証し、必要に応じて復元フレーム157に置換するための検証処理を実行する(ステップS810)。レシーバ・デバイス40は、バッファフラグをクリアする(ステップS811)。そして、レシーバ・デバイス40は、受信されたセグメントが保存されたフレーム・バッファ11A内の領域を解放し(ステップS812)、ステップS801に戻る。検証処理については、図32のフローチャートを参照して後述する。
プリミティブ・セグメントにB_EOFsが含まれていない場合(ステップS809のNO)、そのプリミティブ・セグメントに含まれるプリミティブに応じた動作を行い(ステップS813)、ステップS801に戻る。
また、パケットに含まれるセグメントがプリミティブ・セグメントでない場合(ステップS803のNO)、レシーバ・デバイス40はバッファフラグが立っているか否かを判定する(ステップS814)。バッファフラグが立っている場合(ステップS814のYES)、レシーバ・デバイス40はセグメントをフレーム・バッファ11Aに保存する(ステップS815)。フレーム・バッファ11Aに保存されるセグメントは、SOFを含むパケットが受信されてから、B_EOFsを含むパケットが受信されるまでの間に受信されるセグメントである。フレーム・バッファ11Aに保存されたセグメントは、デスクランブラ108内のLFSR17Aを任意の時点の状態に復元し、CRCエラーが発生した受信フレームを適切にデスクランブルするための復元処理に用いられる。復元処理については、図26のフローチャートを参照して上述した通りである。なお、SSPフレームが受信されている場合、図26に示した復元処理のステップS51において、レシーバ・デバイス40は、フレーム内の1バイト目から3バイト目までのHASHED DESTINATION SAS ADDRESSフィールドの内の少なくとも23ビットを、既定値フィールドとして設定する。バッファフラグがクリアされている場合(ステップS814のNO)、ステップS815はスキップされる。
次いで、レシーバ・デバイス40は、セグメントを、デスクランブラ108を用いてデスクランブルする(ステップS816)。そして、レシーバ・デバイス40は、デスクランブラ108の状態を次の状態に遷移させ(ステップS817)、すなわち、デスクランブラ108の動作回数(RUN回数)を1だけ増加させ、ステップS801に戻る。
図32のフローチャートは、レシーバ・デバイス40によって実行されるSSPフレームの検証処理の手順の例を示す。この検証処理は、図31のフローチャートを参照して上述したように、例えば、SSPフレームの送信完了を示すB_EOFsが受信されたことに応じて実行される。ここでは、検証処理が開始される前に復元処理が完了していることを想定する。
まず、レシーバ・デバイス40は、デスクランブラ108によってデスクランブルされたセグメントで構成される受信フレーム15のCRCを検証し(ステップS901)、受信フレーム15にCRCエラーが発生しているか否かを判定する(ステップS902)。
受信フレーム15にCRCエラーが発生していない場合(ステップS902のNO)、レシーバ・デバイス40はACKを生成し(ステップS909)、このACKを含むパケットをトランスミッタ・デバイス30に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS910)。このプリミティブ・セグメント処理については、図23のフローチャートを参照して上述した通りである。
一方、受信フレーム15にCRCエラーが発生している場合(ステップS902のYES)、レシーバ・デバイス40は、復元処理において生成された復元フレーム157のCRCを検証し(ステップS903)、復元フレーム157にCRCエラーが発生しているか否かを判定する(ステップS904)。
復元フレーム157にCRCエラーが発生している場合(ステップS904のYES)、レシーバ・デバイス40は、受信フレーム15および復元フレーム157を破棄し、NAK(CRC ERROR)を生成する(ステップS905)。レシーバ・デバイス40は、このNAK(CRC ERROR)を含むパケットをトランスミッタ・デバイス30に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS906)。
一方、復元フレーム157にCRCエラーが発生していない場合(ステップS904のNO)、レシーバ・デバイス40は受信フレーム15を復元フレーム157に置き換える(ステップS907)。つまり、CRCエラーが発生している受信フレーム15が破棄され、復元フレーム157がトランスミッタ・デバイス30から受信されたフレームとして処理される。レシーバ・デバイス40は、デスクランブラ108内のLFSR17Aを、復元処理により算出された同期用状態に設定する(ステップS908)。そして、レシーバ・デバイス40はACKを生成し(ステップS909)、このACKを含むパケットをトランスミッタ・デバイス30に送信するためのプリミティブ・セグメント送信処理を実行する(ステップS910)。
以上の処理により、レシーバ・デバイス40では、受信されたSSPフレームをデスクランブラ108によってデスクランブルした場合にCRCエラーが発生していたとしても、当該フレーム内の既定値フィールドの値と対応する既定期待値とを用いて、フレームを適切にデスクランブルすることができると共に、当該レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104とを同期させることができる。
以上説明したように、本実施形態によれば、正常にフレームを伝送することができる。レシーバ・デバイス40のデスクランブラ108は、トランスミッタ・デバイス30(外部装置)のスクランブラ104によってスクランブルされたフレームデータをデスクランブルする。復元モジュール11は、トランスミッタ・デバイス30から、受信フレーム15内の既定値フィールドに対応するフレームデータ151が受信された場合、フレームデータ151と、当該フレームデータ151がスクランブラ104によってスクランブルされる前の既定期待値150とを用いて、レシーバ・デバイス40のデスクランブラ108をトランスミッタ・デバイス30のスクランブラ104に同期させる。
これにより、トランスミッタ・デバイス30からレシーバ・デバイス40に、正常にフレームを伝送することができる。
また、復元モジュール11は、受信フレーム15の受信が完了する時点よりも後のデスクランブラ108(LFSR17A)の第3状態を算出し、この第3状態から後退するようにデスクランブラ108を遷移させる計算を用いて、受信フレーム15を構成する複数のフレームデータをデスクランブルするためのスクランブリングデータ156を算出する。
デスクランブラ108は、受信フレーム15を構成する複数のフレームデータをデスクランブルする。そして、このデスクランブルされた複数のフレームデータに受信エラーが発生している場合、復元モジュール11は、算出されたスクランブリングデータ156を用いて受信フレーム15を構成する複数のフレームデータをデスクランブルすることにより、デスクランブルされたフレーム157を生成する。
したがって、レシーバ・デバイス40のデスクランブラ108とトランスミッタ・デバイス30のスクランブラ104との間で同期ずれが発生していて、デスクランブラ108によってデスクランブルされた受信フレーム15に受信エラーが発生している場合にも、算出されたスクランブリングデータ156を用いて適切にデスクランブルされたフレーム157が生成される。したがって、フレームを正常に伝送することができる。
また、本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
また、本実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
10…イニシエータ、20…ターゲット、100…コントローラ、101…送信フレームコントローラ、102…CRCジェネレータ、103…プリミティブ・ジェネレータ、104…スクランブラ、105…FECエンコーダ、106…FECデコーダ、107…プリミティブ・デコーダ、108…デスクランブラ、109…受信フレームコントローラ、11…復元モジュール、110…復元コントローラ、11A…フレーム・バッファ、111,115…XOR演算器、112…LFSR復元部、113…LFSR算出部、114…LFSRロールバック部、116…CRCデコーダ、150…既定期待値。

Claims (13)

  1. スクランブラを備える外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース(SAS)のパケットモードでフレームを送受信可能な装置であって、
    前記スクランブラによってスクランブルされたフレームデータをデスクランブルするように構成されるデスクランブラと、
    前記外部装置から、第1フレーム内の第1フィールドに対応する第1フレームデータが受信された場合、前記第1フレームデータと、前記第1フレームデータが前記スクランブラによってスクランブルされる前の第1の値とを用いて、前記デスクランブラを前記スクランブラに同期させるように構成されるコントローラとを具備する装置。
  2. 前記コントローラは、前記第1フレームデータと前記第1の値とを用いて、前記第1フレームデータよりも後に受信するプリミティブまたは前記第1フレームデータよりも後に受信する第2フレームデータに対応する前記デスクランブラの第2状態を算出するように構成される請求項1記載の装置。
  3. 前記コントローラは、前記デスクランブラを前記第2状態に設定するように構成される請求項2記載の装置。
  4. 前記スクランブラと前記デスクランブラとはそれぞれ線形フィードバック・シフト・レジスタを備え、
    前記コントローラは、
    前記第1フレームデータと前記第1の値とを排他的論理和演算することにより、前記第1フレームデータの生成に用いられた第1スクランブリングデータを算出し、
    前記第1スクランブリングデータに基づいて、当該第1スクランブリングデータが生成される時点の前記線形フィードバック・シフト・レジスタの第1状態を算出し、
    前記第1状態から前進するように前記線形フィードバック・シフト・レジスタを遷移させる計算を用いて、前記第2状態を算出するように構成される請求項2記載の装置。
  5. 前記コントローラは、前記デスクランブラ内の前記線形フィードバック・シフト・レジスタに、前記デスクランブラの前記第2状態に対応する値を設定するように構成される請求項4記載の装置。
  6. 前記第2フレームデータは、前記第1フレームを構成する複数のフレームデータの全てを受信した直後に受信されるフレームデータである請求項2記載の装置。
  7. 前記コントローラは、さらに、
    前記第1フレームの受信が完了する時点よりも後の前記デスクランブラの第3状態を算出し、前記第3状態から後退するように前記デスクランブラを遷移させる計算を用いて、前記第1フレームを構成する複数のフレームデータをデスクランブルするための第2スクランブリングデータを算出するように構成される請求項1記載の装置。
  8. 前記デスクランブラは、前記複数のフレームデータをデスクランブルするように構成され、
    前記コントローラは、デスクランブルされた前記複数のフレームデータに受信エラーが発生している場合、前記第2スクランブリングデータを用いて前記複数のフレームデータをデスクランブルすることにより、デスクランブルされた前記第1フレームを生成するように構成される請求項7記載の装置。
  9. 前記第1フレームは、アイデンティファイ・アドレス・フレームであり、
    前記第1フィールドは、Reservedフィールド内の連続する少なくともNビットのサイズを有するフィールドであり、
    前記第1の値は、0である請求項1記載の装置。
  10. 前記第1フレームは、オープン・アドレス・フレームであり、
    前記第1フィールドは、DESTINATION SAS ADDRESSフィールド内の、連続する少なくともNビットのサイズを有するフィールドであり、
    前記第1の値は、前記装置のSASアドレスである請求項1記載の装置。
  11. 前記第1フレームは、オープン・アドレス・フレームであり、
    前記第1フィールドは、MORE COMPATIBLE FEATURESフィールド内の、連続する少なくともNビットのサイズを有するフィールドであり、
    前記第1の値は、0である請求項1記載の装置。
  12. 前記第1フレームは、シリアル・スモール・コンピュータ・システム・インターフェース・プロトコル(SSP)フレームであり、
    前記第1フィールドは、HASHED DESTINATION SAS ADDRESSフィールド内の、連続する少なくともNビットのサイズを有するフィールドであり、
    前記第1の値は、前記装置のSASアドレスのハッシュ値である請求項1記載の装置。
  13. 前記スクランブラと前記デスクランブラとはそれぞれ、前記Nビットの線形フィードバック・シフト・レジスタを備える請求項9乃至請求項12のいずれか一項に記載の装置。
JP2018133290A 2018-07-13 2018-07-13 装置 Pending JP2020014050A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018133290A JP2020014050A (ja) 2018-07-13 2018-07-13 装置
US16/281,260 US10922054B2 (en) 2018-07-13 2019-02-21 Apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018133290A JP2020014050A (ja) 2018-07-13 2018-07-13 装置

Publications (1)

Publication Number Publication Date
JP2020014050A true JP2020014050A (ja) 2020-01-23

Family

ID=69139401

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018133290A Pending JP2020014050A (ja) 2018-07-13 2018-07-13 装置

Country Status (2)

Country Link
US (1) US10922054B2 (ja)
JP (1) JP2020014050A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114296991B (zh) * 2021-12-28 2023-01-31 无锡众星微系统技术有限公司 一种应用于Expander的CRC数据校验方法和校验电路

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7412057B2 (en) * 2002-05-31 2008-08-12 Intel Corporation Fast-software-implemented pseudo-random code generator
JP5426326B2 (ja) 2009-11-09 2014-02-26 ルネサスエレクトロニクス株式会社 データ受信装置、データ受信方法、及びプログラム
KR101307070B1 (ko) 2009-12-15 2013-09-26 한국전자통신연구원 효율적인 스크램블링 또는 디스크램블링 방법 및 시스템
WO2013028854A1 (en) * 2011-08-24 2013-02-28 Rambus Inc. Methods and systems for mapping a peripheral function onto a legacy memory interface
US9497020B1 (en) 2015-05-26 2016-11-15 International Business Machines Corporation Initializing a descrambler
US10705906B2 (en) * 2018-02-01 2020-07-07 Toshiba Memory Corporation Apparatus and control method thereof
US11006392B2 (en) * 2018-05-31 2021-05-11 Marvell Asia Pte, Ltd. Methods and apparatus for descrambling received uplink transmissions

Also Published As

Publication number Publication date
US20200019378A1 (en) 2020-01-16
US10922054B2 (en) 2021-02-16

Similar Documents

Publication Publication Date Title
US10312936B2 (en) Using CRC residual value to distinguish a recipient of a data packet in a communication system
JP5106538B2 (ja) 64b/66bスクランブル処理と適合する多重リンク送信のための前方誤り訂正符号化
KR101028922B1 (ko) 무선 통신 시스템에서 프로토콜 헤더 구성 방법 및 그 장치
US8312362B1 (en) Determining data transmission error and/or checking or confirming such error determinations
CN102195738B (zh) 用于吉比特无源光网络系统下行帧同步的处理方法及装置
WO2011000257A1 (zh) 一种并行帧同步的扰码装置及其解扰码装置
JP2012175568A (ja) データ受信装置、データ受信方法及びプログラム
JP6539765B2 (ja) トランシーバのためのフレキシブルprbsアーキテクチャ
US11552781B2 (en) Using error detection bits for cryptographic integrity and authentication
US11290257B2 (en) Data transfer system and transfer method
KR20170137872A (ko) 암호화 체크섬 생성
US9432187B2 (en) Data scrambling initialization
JP4187105B2 (ja) 共有データ精製装置及び共有データ精製方法
JP2006100890A (ja) データ伝送方法およびデータ伝送システムならびにデータ送信装置およびデータ受信装置
JP2020014050A (ja) 装置
US20170331592A1 (en) Transmitting device and receiving method
US10705906B2 (en) Apparatus and control method thereof
WO2024021706A1 (zh) 数据帧传输方法、装置、芯片、计算机可读存储介质、蓝牙设备、程序及程序产品
US9762383B2 (en) Serial transmission having a low level EMI
CN102939721B (zh) 用于在通信网络中调节接收器处的符号判定阈值的方法和设备
CN117296267A (zh) 容错性前向纠错有序集消息解码器
WO2014066773A1 (en) Flexible scrambler/descrambler architecture for a transceiver
US20120266053A1 (en) Security communication method between devices
KR20190096728A (ko) 스크램블러와 디스크램블러를 이용한 동기화 및 정렬 방법 및 장치
JP5512713B2 (ja) コンテンツデータを生成する装置、送信装置、システム

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180830