(57)【特許請求の範囲】
【請求項１】
バッファ内の連続非配列バイト要素として格納されたシリアルデータ内で固定ビットパターンを検出する方法であって、
第１のバイト要素と、該第１のバイト要素の直後に続く第２のバイト要素から算出されるチェック要素との間でANDビット演算を行うステップと、
後に前記第１のバイト要素および前記第２のバイト要素が配列連続バイト要素によって与えられたパターンの候補として適しているか否かを確立するために、ANDビット演算の結果を検査するステップと、
を含む、前記方法。
【請求項２】
請求項１に記載の方法であって、
受信された前記シリアルデータのビットストリームを内部に含むバッファ内で第１のバイトを検査するステップと、
前記第１のバイトに続く前記第２のバイトを検査するステップと、
前記第２のバイトに基づいてチェックバイトを算出するステップと、
前記第１のバイトの値と前記チェックバイトの値との間でバイナリAND演算を行うステップと、
８連続のゼロビットが見つかるか否かをチェックするために前記バイナリAND演算を検査するステップと、
前記第２のバイト内の最初の「１」ビットのビット位置を検査するステップと、
正しい同期パターンを検証するために、残りのバイトごとに対応する「１」ビットをそれぞれチェックするステップと、
を更に含む、前記方法。
【請求項３】
請求項１に記載の方法であって、
第１のポインタをフレームの開始を含みうるバッファ内の第１のバイトの位置を示すように初期化するステップと、
第２のポインタを前記第１のポインタが示す前記バイトに続く次のバイトの位置を示すように初期化するステップと、
CheckBitMaskTable配列からCheckBitMaskを調べるために、前記第２のポインタが示すバイトの値を用いるステップと、
前記第１のポインタがCheckBitMaskTable内で発見された前記CheckBitMaskの値で示すバイトの値のバイナリAND演算を有効にするステップと、
結果が０でない場合は、前記第１のポインタを示す位置のバイトを廃棄し、前記第１のポインタを検査されるべき次のバイトへ進め、前記第２のポインタを前記バッファ内の次のバイトへ進めるステップと、
前記バッファ内に更にビットが存在する場合は、前記第２のポインタが示すバイトの値を用い、存在しない場合は、ヒットをなしにサーチを中止するステップと、
前記第２のポインタが０バイトを示す場合は、前記バイトを廃棄し、示さない場合は、後に一ビット（「１」）が続く少なくとも８つの連続したゼロビット（「０」）が検出されるか否かをチェックするステップと、
を含む、前記方法。
【請求項４】
請求項３に記載の方法であって、正しい同期パターンが検出されたことを検証するために、前記第２のポインタが示すバイト内の最も左の一ビット（「１」）と同じビット位置に次の８バイトが一ビット（「１」）を含むか否かをチェックするステップを更に含む、前記方法。
【請求項５】
請求項１に記載の方法であって、
前記チェック要素が、２５６のエントリを有するCheckBitMaskTableであって、各々が８ビット幅パターンであるCheckBitMaskを含み、各々の前記エントリが該エントリの位置番号自体中の先行するゼロビット（「０」ビット）に対応する先行するゼロビット（「０」ビット）で構成されたパターンを含む、CheckBitMaskTableを用いて得られたのに対し、前記エントリのビットの残りは、それぞれ一ビット（「１」ビット）にセットされる、前記方法。
【請求項６】
請求項１に記載の方法であって、前記チェック要素は、最上位ビット（MSB）が最初に受信されたビットストリームに関連して用いられるように適用されたCheckBitMaskTableを用いて得られる、前記方法。
【請求項７】
請求項１に記載の方法であって、前記チェック要素は、最下位ビット（LSB）が最初に受信されたビットストリームに関連して用いられるように適用されたCheckBitMaskTableを用いて得られる、前記方法。
【発明の詳細な説明】
発明の分野
この発明は、固定同期ビットパターンを認識するためのシリアルデータ転送に関連する方法に関する。
この発明は、Ｖ．１１０プロトコルに関連して開発されてきたが、この発明の一般原則が類似のシステムに関連してもそのアプリケーションを見出し得ることを理解すべきである。
発明の背景
速度変換によるシリアルデータ転送用に、一般に使用されるプロトコルは、Ｖ．１１０である。このプロトコルのための装置を開発するときに、如何にしてＶ．１１０パターンを認識するかという問題に、人は直面する。ハードウェアか、ソフトウェアか、ハードウェアとソフトウェアの両方の組み合わせを、人は選択できる。ソフトウェアの代替物がＣＰＵ容量を取りすぎると思われるので、しばしばハードウェアによる解決が好まれる。しかしながら、このアルゴリズムによれば、同期検出をソフトウェアできわめて容易に処理できる。ソフトウェアに内で通常行われる他のＶ．１００処理に比較して、これによる余分な負荷は非常に小さい。
この発明の方法またはアルゴリズムを説明する前に、如何にして８０ビットのＶ．１１０フレームが出現するかを図示する図１を参照すべきである。
オクテット０は全てのバイナリ０を含むが、オクテット５は、バイナリ１に続く７個のＥビットからなる。オクテット１ないし４と同６ないし９は、ビット番号１にバイナリ１、ビット番号８にステータスビット（ＳビットまたはＸビット）、ビット位置２ないし７に６個のデータビット（Ｄビット）を含む。ビット伝送の順序は、左から右へ、また上から左へである。
１７個のフレーム同期ビット（＊）は、オクテット０内のバイナリ０へセットされた８個全てのビットと、続く９個のオクテット内のビット位置０へセットされたビットを含む。本書全体を通じて、これらの同期ビット（＊）に特別の注意を集中すべきである。
最初に一見したところでは、同期パターンの発見はきわめて容易であると考えられるかもしれない。これらの１０個のオクテットが問題のコンピュータメモリ内にいつもバイト整列されて（ｂｙｔｅ−ａｌｉｇｎｅｄ）到着する場合には、本当にこれが容易に見えるであろう。しかし、問題はここから始まる。
シリアルビットストリームがコンピュータメモリ内の受信バッファメモリへ「カチカチと着信する」とき、フレーム内のオクテットが対応するバイトアドレス可能な位置へ区分されるという保証は何もない。
図２は、如何に半端なシリアルビットストリームが、バイトアドレス可能なコンピュータメモリストアへ到着し得るかを図示する。結果として、図２に現れるビットストリームに含まれるＶ．１１０フレームのオクテットは、図１と比較して、必ずしもバイト整列されて（ｂｙｔｅ−ａｌｉｇｎｅｄ）いない。こうして、各オクテットは、バイト整列に関して、２つの連続するアドレスの間で分割されたり、部分的にカバーしたりする。
従来技術
米国特許公報第５  ２０４  ８８３号（ブランク）から、シリアルビットストリーム内に分配されたフレーム指示パターンを認識する方法と装置が知られている。このフレーム指示パターンは、着信シリアルビットストリーム内で、１フレーム指示ビットの開始から次の開始までを測定したビットの数Ｎ個である、固定数の間隔で分配されたＭ個の単一ビットを含んでなる。先行技術のシステムは、Ｎ個の着信データの任意のグループの各受信にしたがって計算を行い、「それらしい」フレーム指示パターンと「真の」フレーム指示パターンの間を識別する最少数の計算ステップの後に、ビットストリーム内の「真の」パターンの位置そのものを曖昧無しに指摘して、こうしてストリーム全体の同期を可能にする。
この先行技術は、ビットパターンに関する同期方法を記述しており、ここでパターン内の各ビットはその間にランダムに配置されたユーザデータにより分配される。
しかしながら、この先行技術の技法は、「ビット分配され」ないビットを発見することに付いては何も語らず、したがってそうしたビットパターンの認識に使用できないであろう。
米国特許公報第５  １７７  ７３８号（デローロ他）は、総合ディジタル通信網（ＩＳＤＮ）用の速度整合のための方法とモノリシック的に集積された装置を開示しており、これは、前記ネットワークからのデータ受信中に、前記ＩＳＤＮの同期端末および非同期端末の速度整合のために、フレーム同期ビットとデータビットを含むビットのオクテット行（ｏｃｔｅｔ−ｒｏｗ）に構成されるシリアルビットストリームの種々な長さの非同期データフレームを同期化し分解する方法に関する。
ＥＰ  ０  ７２７  ８８６−Ａ２（アンダーソン／ワンゲルおよびゴルターマンテクノロジー社）は、ディジタルデータシーケンスパターンフィルタリングに関する方法を開示し、その方法は、オクテット／バイトに向けられている。実際これは、この方法がバイトストリーム上で作動され、バイト整列を仮定できることを含んでいる。
しかしながら、この先行技術は、ビットストリームに関する方法について、何の指示も与えず、ましてや認識すべきビットパターンに関して整列されたバイトでないことを表記された（ｅｎｆａｃｅｄ）いかなる解決も与えない。
ＵＳ５  ４１２  ７５４（ニュウリー他）はパターン認識システムに関し、データビットと所定のビットパターンを含むビットのシリアルストリームを送信し受信する送信機と受信機を含んでなるが、このシステムを前記ビットパターンの認識用に適応させることができる。このシステムは、所定のビットパターンが認識されるまで、各受信ビットをチェックして、先行ビットの状態値と比較する。このシステムは、各受信ビットを比較しチェックすることを要するので、遅いシステムである。言い換えれば、各第８受信ビットについてのみ比較またはチェックすることについて、この発明は何も語らない。
シリアルデータ転送に関するＵＳ５  ４１２  ６１０（鈴木）は、シリアルデータがＦＩＦＯバッファへ／から転送されるシリアルデータ転送装置に関する。しかしながら、この公報には、そうしたバッファにおいて、ある特定のビットパターン、たとえばシリアル通信リンクから受信されたデータが、どのように認識されるかに関して何の情報もない。
結論として、Ｖ．１１０プロトコルによるフレーム内の同期パターンを如何にして認識するかに関して、引例はいずれも何の情報も与えないし、ましてやそうしたＶ．１１０同期パターンのための高速サーチアルゴリズムにより、この認識を遂行できることについて、何の情報も与えない。
発明の要約
この発明の主要な目的は、Ｖ．１１０同期パターンのための高速サーチアルゴリズムを供給することである。
ビットストリーム内で１個の一（１）が後に続く１１個のゼロ（０）（ＥＯＬ、すなわちエンドオブラインとして知られる）を認識するのが目的のＦＡＸアプリケーションのための高速サーチアルゴリズムを供給することもこの発明の一つの目的である。
この発明のもう一つの目的は、そうした高速サーチアルゴリズムに関して使用される適当なチェックビットマスクテーブル（ＣｈｅｃｋＢｉｔＭａｓｋＴａｂｌｅ）を供給することである。
この発明の更なる目的は、２つの任意のビットグループまたはバイトを互いに比較して、その結果を、Ｖ．１１０が与える更なる規準と比較するアルゴリズムを供給することである。
その発明の更にもう一つの目的は、ソフトウェア内で処理しやすく、ソフトウェア内の関係する処理に比較して非常に僅かな負荷しか表現しないアルゴリズムを供給することである。
この発明のなおもう一つの目的は、ビット分配されないビットパターンを発見するアルゴリズムを供給することである。
この発明のなお更なる目的は、ビットストリーム内の各８番目に受信されるビットのみについて比較またはチェックを行うアルゴリズムを供給して、これにより、アルゴリズムが作動できる速度を増大することである。
発明の簡単な開示
上記の諸目的は前文中に述べた方法に関連して達成され、この方法はこの発明によれば、二つの相次ぐ要素を検査して、第１要素と、第２要素からなるチェック要素の間でバイナリＡＮＤ演算を遂行することにより、それから前記第１要素と第２要素が同期パターンとして適格であるかどうかを確立し、更に問題のフレームにより与えられた更なる規準をチェックすることにより前記候補を更に検証することを特徴とする。
この発明により与えられる更なる特徴と利点は、同封の特許請求の範囲から見えてくると共に、同封の図面および付録と共にされる以下の説明から見えてくるであろう。
図面および付録の簡単な説明
図１は、８０ビットＣＣＩＴＴ  Ｖ．１１０フレームのレイアウトを示す。ビットの番号付けの方式が図２と比較して使用されていることに注意されたい。Ｖ．１１０フレーム内のオクテットを参照するときは、ビットは通常左から右へ、１から８まで番号をつけられる。１バイト内のビットは、図２のように、右から始まり左へ、０から７まで番号をつけられる。アステリスク（＊）は、フレーム同期ビットを指摘する。
図２は、あるコンピュータメモリ内のバッファへ受信された任意のシリアルビットストリームを図解するテーブルである。アステリスク（＊）に注意し、またバイトアドレス可能なバッファに対してオクテットが如何に半端に整列しているかに注意されたい。
付録Ａは、この発明による方法に関連して使用されるチェック値を生成するのに使用され得るテーブルの実施例を図示する。
付録Ｂは、この発明による方法を実現するために使用され得るコンピュータプログラムの印刷出力である。
発明の実施例の詳細な説明
図１に関連して以前に説明したように、Ｖ．１１０フレーム同期パターンが８０ビットで現れ、一つのフレームは常に８個のゼロ（０）ビットに１個の一（０）ビットが続く。図２に示すように、このシリアルビットストリームは、バイトアドレス可能な複数の位置の中に連続的だが任意の位置を取り得るし、またこの発明の一実施例が、バッファ／アレイ内のそうした任意の位置に関連して説明される。
同じく図２を参照すると、下記の仮定が観察される。
−  受信されたビットストリームは、バイトアドレス可能なバッファ／アレイ内に記憶される。
−  バッファ内のバイトは、シリアル線からビットが次々と入ってくるときに、左から右へ書きこまれ、ここで最上位ビット（ＭＳＢ）が最初に受信されると仮定される。しかしながら、最下位ビット（ＬＳＢ）も同様に使用できるが、そのときはチェックバイト（後で説明する）を反転しなければならない。
上記の仮定が実現すると、この発明の一実施例は、検査すべき各受信されたバイトについて、下記のステップを含んでなる。
1.  検討されるバイトと特別なチェックバイトの間でＡＮＤ演算をすることにより、問題のバイトをチェックせよ。このチェックバイトは、問題のバイトに続くバイト内に先行ゼロビットがあるのと同じ数の先行ゼロビットを有すべきである。このチェックバイト内のその他のビットは、一（１）にセットされなければならない。
2.  このＡＮＤ演算の結果がもしゼロであって、問題のバイトに続くバイトがそれ自体ゼロでなければ、そのときは８個の連続したゼロ（０）に続いて、少なくとも一個の一（１）ビットが発見されているであろう。
以下の例は、図２を参照することにより、それが如何に作動するかがより良く説明されるであろう。この例では、バイト０、バイト１、バイト２などの表記は、それぞれのメモリオフセット０、１、２などのバイトを言及する。
もしバイト０が８個の連続したゼロビットの開始のための候補であったならば、バイト０に続くバイト１は２個だけのゼロビット（ｂ７とｂ６）を有するので、ビット０からビット５まではゼロでなければならない。
バイト０と、先行の２個のビットだけがゼロで残りが一（１）にセットされたバイトとによるバイナリＡＮＤは、もしバイト０候補であれば、結果ゼロを与える。
0004152442.tif 000002
もしバイト１が８個の連続したゼロビットの開始のための候補であったならば、バイト２が４個の先行ビット（ビット７からビット４まで）を含むので、ビット０からビット３まではゼロでなければならない。
バイト１と、先行の４個のビットだけがゼロで残りが一（１）にセットされたバイトとによるバイナリＡＮＤは、もしバイト１候補であれば、結果ゼロを与える。
0004152442.tif 000003
８個の連続したゼロ（０）ビットが発見された。最初の４個はバイト１内のｂ３−ｂ０に発見され、残りはバイト２内のｂ７−ｂ４に続いて発見された。バイト２は非ゼロなので、セットされる最初の同期ビット（図１のオクテット１内のビット８）が、ビット位置ｂ３でバイト２内に含まれなければならない。しかしｂ３は８個のバイトバイト３．．バイト８の全ての中にセットされてないので、バイト１は同期パターンの部分であり得ず、こうしてバイト２をチェックし続ける。
バイト２と、８個の先行ゼロ（バイト３におけると同じ数の先行ゼロ）を有する１バイトとによるバイナリＡＮＤは、常にゼロの結果を与えるが、バイト３はゼロ自体なので、この８個の連続ビットに一つの一（１）ビットが続くものは、バイト２の範囲内で開始できず、こうしてバイト２もまた除去される。
バイト３と、２個の先行ゼロ（バイト４におけると同じ数の先行ゼロ）を有する１バイトにより、続いてバイナリＡＮＤを行うことによりゼロの結果が与えられ、こうしてわれわれは、残りの一（１）の同期ビットをチェックしなければならない。バイト４内で最初の先行一（１）がビット位置ｂ５に見出されるので、ビットｂ５を残りのバイトバイト５．．バイト１２内でチェックしなければならない。そうしたｂ５位置は、これらのバイト内に全てセットされているので、有効なスタートが発見された。
図Ｂは、上記のアルゴリズムの実施例Ｃを示す。
0004152442.tif 000004
0004152442.tif 000005
0004152442.tif 000006
0004152442.tif 000007
0004152442.tif 000008
0004152442.tif 000009
0004152442.tif 000010
【図１】
0004152442.tif 000011
【図２】
0004152442.tif 000012