(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023164403
(43)【公開日】2023-11-10
(54)【発明の名称】キャプチャバッファに格納されたデータを削減する方法及びシステム
(51)【国際特許分類】
H04L 43/028 20220101AFI20231102BHJP
【FI】
H04L43/028
【審査請求】未請求
【請求項の数】10
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023074726
(22)【出願日】2023-04-28
(31)【優先権主張番号】63/336,009
(32)【優先日】2022-04-28
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Blu-ray
(71)【出願人】
【識別番号】514046574
【氏名又は名称】キーサイト テクノロジーズ, インク.
(74)【代理人】
【識別番号】100099623
【弁理士】
【氏名又は名称】奥山 尚一
(74)【代理人】
【識別番号】100125380
【弁理士】
【氏名又は名称】中村 綾子
(74)【代理人】
【識別番号】100142996
【弁理士】
【氏名又は名称】森本 聡二
(74)【代理人】
【識別番号】100166268
【弁理士】
【氏名又は名称】田中 祐
(74)【代理人】
【識別番号】100218604
【弁理士】
【氏名又は名称】池本 理絵
(72)【発明者】
【氏名】アンドリュー・ロバート・ルヘイン
(72)【発明者】
【氏名】ダニエル・アレハンドロ・ガルシア・ウジョア
(57)【要約】 (修正有)
【課題】解析用の高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中に、インターポーザ回路のキャプチャバッファに格納されるデータを削減する方法及びシステムを提供する。
【解決手段】方法は、データのデータ完全性チェックをリアルタイムに実行し、データが正しい場合にはデータのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)からのデータ完全性チェックに対応するデータ完全性ビットを省き、ACK/NACKパケットを使用して、データのTLPが正常に配信を確認するために、ACK/NACKの照合をリアルタイムに実行し、このACK/NACKパケットを、キャプチャバッファに格納することから省き、データのTLP及び/又はDLLPから、リアルタイムにフィールドを削除及び/又は削減し、データのTLP及び/又はDLLPのデータペイロードを並列で圧縮する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
テスト対象システムと解析用のプロトコルアナライザとの間の高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中に、機能を損なうことなく、かつ前記解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納される前記データの量を削減する方法であって、
前記データのデータ完全性チェックをリアルタイムに実行し、該データ完全性チェックにより、前記データが正しいことが示された場合、前記データのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)からの前記データ完全性チェックに対応するデータ完全性ビットを、前記キャプチャバッファに格納することから省くことと、
確認応答と否定応答(ACK/NACK)パケットを使用して、前記データの前記TLPの到着成功又は到着失敗を示すために、ACK/NACKの照合をリアルタイムに実行し、前記ACK/NACKパケットを、前記キャプチャバッファに格納することから省くことと、
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPから、リアルタイムにフィールドを削除、及び/又は、削減することと
を含む方法。
【請求項2】
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPのペイロードを並列に圧縮することを更に含み、
前記データの前記TLP及び/又は前記DLLPのペイロードを圧縮することは、前記インターポーザ回路での前記TLP及び/又は前記DLLPのペイロードからシンボルを複数のシリアルレーンで受信することと、前記TLP及び/又は前記DLLPの前記ペイロードからの前記シンボルをクロックサイクルの各クロックに到着するワイドワードへとデスキューすることと、前記ワイドワードを入力ストリームに配列することであって、各入力ストリームは前記クロックサイクルの各クロックに到着する各ワイドワードの同位置からのシンボルを含むことと、前記配列されたデスキュー後のシンボルをハッシュテーブルを使用して圧縮することと、前記圧縮後のシンボルを前記キャプチャバッファに格納することとを含む、
請求項1に記載の方法。
【請求項3】
前記データの前記データ完全性チェックをリアルタイムに実行することは、前記インターポーザ回路上の前記TLPと前記DLLPにおいて巡回冗長検査(CRC)をチェックし、前記インターポーザ回路上の前記TLPにおいてフレームパリティビットをチェックすることを含み、
前記データ完全性ビットを格納することから省くことは、誤りがないことを示す前記CRCのチェックサムを削除することであって、誤りを示す前記CRCのチェックサムを前記キャプチャバッファに格納することと、誤りがないことを示すフレームパリティビットを省くことであって、誤りを示すフレームパリティビットを前記キャプチャバッファに格納することとを含む、
請求項1に記載の方法。
【請求項4】
前記ACK/NACKパケットはDLLPであり、
該ACK/NACK DLLPを格納する代わりに、前記TLPはそれぞれ、前記キャプチャバッファ内で付加されたメタデータを含み、前記メタデータは、それぞれの前記TLPのACK/NACKの状態を示す、請求項1に記載の方法。
【請求項5】
前記TLP及び/又は前記DLLPから前記フィールドを削除することは、固定値及び/又は空値を有する既知のフィールドを削除することであって、前記既知のフィールドは、ユーザインタフェースにおいて回復することと、前記TLP及び/又は前記DLLPのパケットフローの始点と終点を示すフレーミングトークンを削除することであって、前記フレーミングトークンは、より小さいシンボルに置き換えられるか、又は前記フレーミングトークンは削除されることと、前記ユーザインタフェースに入力された設定に基づき、必須ではないものとして特定されたフィールドを削除することとの1つ以上を含む、請求項1に記載の方法。
【請求項6】
高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT)からホストコンピュータまでの前記高速階層型パケットベースのプロトコルでのデータを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、
前記DUTと前記ホストコンピュータとの間で送信される前記データを監視するために前記高速データリンクに接続されたインターポーザ回路であって、該インターポーザ回路は、前記DUTと前記ホストコンピュータとの間で送信される前記データを格納するキャプチャバッファを含み、前記UIコンピュータが前記アナライザソフトウェアで解析するためにアクセスできるインターポーザ回路と
を含み、前記インターポーザ回路は、
前記データのデータ完全性チェックをリアルタイムに実行し、前記データ完全性チェックにより、前記データが正しいことが示された場合には、前記データのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)からの前記データ完全性チェックに対応するデータ完全性ビットを、前記キャプチャバッファに格納することから省くことと、
確認応答と否定応答(ACK/NACK)パケットを使用して、前記データの前記TLPの到着成功又は到着失敗を示すために、ACK/NACKの照合をリアルタイムに実行し、前記ACK/NACKパケットを、前記キャプチャバッファに格納することから省くことと、
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPから、リアルタイムにフィールドを削除、及び/又は、削減することと
を実行するようにプログラムされているシステム。
【請求項7】
前記インターポーザ回路は、
前記インターポーザ回路上の前記TLPと前記DLLPにおいて巡回冗長検査(CRC)をチェックし、前記インターポーザ回路上の前記TLPにおいてフレームパリティビットをチェックすることで、前記データの前記データ完全性チェックをリアルタイムに実行することと、
誤りがないことを示す前記CRCのチェックサムを削除することであって、誤りを示す前記CRCのチェックサムを前記キャプチャバッファに格納することと、誤りがないことを示すフレームパリティビットを省くことであって、誤りを示すフレームパリティビットを前記キャプチャバッファに格納することとを実行することで、前記データ完全性ビットを格納することから省くことと
を実行するようプログラムされている、請求項6に記載のシステム。
【請求項8】
前記ACK/NACKパケットはDLLPであり、
該ACK/NACK DLLPを格納する代わりに、前記TLPはそれぞれ、前記キャプチャバッファ内で付加されたメタデータを含み、前記メタデータは、それぞれの前記TLPのACK/NACKの状態を示す、
請求項6に記載のシステム。
【請求項9】
前記インターポーザ回路は、
固定値及び/又は空の値を有する既知のフィールドを削除することであって、該既知のフィールドは、ユーザインタフェースにおいて回復することと、
前記TLP及び/又は前記DLLPのパケットフローの始点と終点を示すフレーミングトークンを削除することであって、該フレーミングトークンは、より小さいシンボルに置き換えられるか、又は該フレーミングトークンは削除されることと、
前記ユーザインタフェースに入力された設定に基づき、必須ではないものとして特定されたフィールドを削除することと
のうちの1つ以上を実行することで、前記TLP及び/又は前記DLLPから前記フィールドを削除するようプログラムされている、請求項6に記載のシステム。
【請求項10】
前記インターポーザ回路は、前記TLPの様々なアドレスフィールドのサイズを削減することで、前記TLPから前記フィールドを削減するようプログラムされている、請求項6に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本出願は、米国特許法第119条(e)に基づいて、2022年4月28日に出願された米国仮出願第63/336,009号、2022年8月18日に出願された米国仮出願第63/399,118号、2022年10月24日に出願された米国仮出願第63/418,761号及び2022年12月8日に出願された米国仮出願第63/431,100号に対する優先権を主張する、2022年12月28日に出願された米国特許出願第18/090,311号に対する優先権を主張するものである。米国仮出願第63/336,009号、米国仮出願第63/399,118号、米国仮出願第63/418,761号、及び米国仮出願第63/431,100号の全開示は、その全体が具体的に引用することにより明確に本明細書の一部をなすものとする。
【背景技術】
【0002】
周辺機器相互接続エクスプレス(PCIe:Peripheral Component Interconnect Express)は、パーソナルコンピュータ(PC:personal computer)のホスト中央処理ユニット(CPU:central processing unit)と、例えば、グラフィックスカード、サウンドカード、ソリッドステートドライブ(SSD:solid state drive)、及びデータセンタで使用されるワークロードアクセラレータカード等の様々な高速周辺構成要素との間の代表的な相互接続プロトコルである。そのため、最新バージョンの仕様策定後、市場をできるだけ多く獲得するために、PCIeインターコネクトをベースとする新製品を迅速に発売することが求められる。市場投入までの時間を短縮するために、様々なツールで開発活動を支援し、加速させている。よく使用されるツールの1つに、PCIeプロトコルアナライザがある。従来のPCIeプロトコルアナライザは、PCIeバス上で通信する様々なモジュール同士のPCIe相互作用に関する詳細な解析とデバッグのユーザに対する支援を目的とする、様々な表示とプロトコル検索機能をサポートしている。
【0003】
一般的に、PCIeは、周辺機器接続用の高速ハードウェアインタフェースとして使用されるレイヤパケットベースのプロトコルであり、このプロトコルでは、主として、データリンク層とトランザクション層と呼ばれる上位の2層でデータが転送される。データリンク層は、確認応答による配信の保証、フロー制御、及び電力管理機能をサポートする。データリンク層よりも上位にあるトランザクション層は、スプリットトランザクション(リクエストとレスポンスを時間で区切ったトランザクション)を実装して、ターゲットデバイスがレスポンス用のデータを収集している間、通信リンクが他のトラフィックを搬送できるようにする。階層型パケットベースプロトコルの最下層は、物理層と呼ばれる。
【0004】
開発段階のPCIeの最新バージョンである周辺機器相互接続分科会(PCI-SIG(商標)(Peripheral Component Interconnect Special Interest Group))によるPCIe Gen6プロトコルでは、PCIe Gen5プロトコルで64GB/秒、PCIe Gen4プロトコルで32GB/秒という従来のマルチレーン帯域幅(multi-lane bandwidth)から最大128GB/秒まで増加するマルチレーン帯域幅を企図している。非常に高いスループットをサポートすることにより、PCIe Gen6プロトコルは、ストレージ業界において不揮発性メモリエクスプレス(NVMe:Non-Volatile Memory Express)、シリアルアドバンスドテクノロジアタッチメント(SATA:Serial Advanced Technology Attachment)、及び、スモールコンピュータシステムインタフェース(SCSI:Small Computer System Interface)エクスプレスプロトコルと併用される他、例えば、CXL、CCIX、Gen-Z等の将来のアクセラレータプロトコルにも使用されることが見込まれる。このような高いビットレートに対応すべく、PCIeプロトコルアナライザがPCIeバス上のプロトコル交換をキャプチャする場合、これまで提案されたソリューションは、ストレージ用の大容量メモリバッファに依存しており、例えば、PCIe Gen5で最大4秒間のフル64GB/秒のデータキャプチャをサポートし得る。
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、このようなアプローチは、転送、格納、最終的には、処理する必要のあるデータが膨大であることが原因で、材料コストがかかり、さらに、誤りも起こりやすくなることで、信号完全性、及びデータ処理に関する課題を招くことがある。
【課題を解決するための手段】
【0006】
例示的な実施形態は、添付の図面と併せて読むと、以下の詳細な説明から最も深く理解される。種々の特徴は必ずしも縮尺通りに描かれていないことを強調したい。実際には、検討を明確にするために、寸法が任意に拡大又は縮小される場合がある。適用可能で、実用的な場合にはいつでも、同じ参照番号が同じ要素を指している。
【図面の簡単な説明】
【0007】
【
図1】代表的な実施形態に係る、高速データリンクを介したデータの通信のキャプチャ中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、格納されたデータ量を削減するシステムの簡略ブロック図である。
【
図2】代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法を示す簡略流れ図である。
【
図3A】代表的な実施形態に係る、キャプチャバッファに格納せずに破棄するべき例示的なトランザクション層パケット(TLP:transaction layer packet)及び例示的なデータリンク層パケット(DLLP:data link layer packet)のCRCフィールドを示す図である。
【
図3B】代表的な実施形態に係る、キャプチャバッファに格納せずに、ACK/NACKパケットを破棄可能にする、TLPとDLLPのシーケンス番号フィールドを示す図である。
【
図3C】代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべきTLPとDLLPのフレーミングトークンフィールドを示す図である。
【
図4】例示的な16レーンのGen6 PCIeリンクのFLITを示す図である。
【
図5A】代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべき例示的な構成読み取りTLPの既知のフィールドを示す図である。
【
図5B】代表的な実施形態に係る、キャプチャバッファに格納する前に、サイズを削減するべき構成読み取りTLPの削減可能フィールドを示す図である。
【
図6】代表的な実施形態に係る、単一回路で並列データ圧縮を可能とするよう構成されたワイドワードデータのシンボルの例を示す図である。
【
図7】代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、インターポーザ回路のキャプチャバッファに格納されるべきデータペイロードの並列データ圧縮を実行する方法を示す簡略流れ図である。
【
図8】従来の圧縮解除技術で圧縮解除するためのワイドワードデータ入力のシンボルを示す図である。
【
図9】代表的な実施形態に係る、圧縮解除用の入力のために並べ替えられたワイドワードデータのシンボルを示す図である。
【
図10】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるその他の例を示す図である。
【
図11】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるその他の例を示す図である。
【
図12】代表的な実施形態に係る、圧縮解除のための逆の構造体(inverse structure)を作成する方法を示す流れ図である。
【
図13A】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるためのワイドワードデータの並列圧縮を示す図である。
【
図13B】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えることを示す図である。
【
図13C】代表的な実施形態に係る、ワイドワードデータの並べ替えられたシンボルの圧縮解除を示す図である。
【
図14】代表的な実施形態に係る、圧縮解除用の入力のためにシフトされたワイドワードデータのシンボルを示す図である。
【
図15A】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルをシフトするためのワイドワードデータの並列圧縮を示す図である。
【
図15B】代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルをシフトすることを示す図である。
【
図15C】代表的な実施形態に係る、ワイドワードデータのシフト後のシンボルの圧縮解除を示す図である。
【
図16】代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。
【
図17A】代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。
【
図17B】代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。
【
図18】代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。
【
図19】左側が非ランダムデータからの圧縮後の出力であるのに対して、右側がランダムデータからの圧縮後の出力の例を示す図である。
【
図20】代表的な実施形態に係る、圧縮効率に優れた並列データ圧縮用に構成されたワイドワードデータのシンボルの例を示す図である。
【
図21】代表的な実施形態に係る、ワイドワードデータの圧縮をリアルタイムに向上させる方法の流れ図である。
【発明を実施するための形態】
【0008】
以下の詳細な説明では、説明のためであり、限定はしないが、本教示による一実施形態を完全に理解してもらうために、具体的な詳細を開示する代表的な実施形態が記述される。代表的な実施形態の説明を不明瞭にするのを避けるために、既知のシステム、デバイス、材料、動作方法及び製造方法の説明は省略される場合がある。それにもかかわらず、当業者の理解の範囲内にあるシステム、デバイス、材料及び方法は、本教示の範囲内にあり、代表的な実施形態に従って使用される場合がある。本明細書において使用される用語は特定の実施形態を説明することのみを目的としており、限定することを意図するものでないことは理解されたい。定義される用語は、定義された用語の科学技術的な意味に加えて、本教示の技術分野において一般的に理解され、受け入れられるような意味を有する。
種々の要素又は構成要素を説明するために、本明細書において第1の、第2の、第3の等の用語が使用される場合があるが、これらの要素又は構成要素はこれらの用語によって限定されるべきではないことは理解されたい。これらの用語は、或る要素又は構成要素を別の要素又は構成要素から区別するためにのみ使用される。したがって、以下に論じられる第1の要素又は構成要素は、本開示の教示から逸脱することなく、第2の要素又は構成要素と呼ぶことができる。
【0009】
本明細書において使用される用語は、特定の実施形態を説明することのみを目的とし、限定することを意図するものではない。本明細書及び添付の特許請求の範囲において使用されるときに、「一つの(a、an)」及び「その、前記(the)」という単数形の用語は、文脈上、他の意味として明確に指示される場合を除いて、単数形及び複数形の両方を含むことを意図している。さらに、「備える、含む(comprises、comprising)」という用語及び/又は類似の用語(つまり、「備える、含む」という用語又は類似の用語あるいはそれらの全て)は、本明細書において使用されるときに、言及される特徴、要素及び/又は構成要素の存在を指定するが、1つ以上の他の特徴、要素、構成要素及び/又はそのグループの存在又は追加を除外しない。本明細書において使用されるときに、「及び/又は(and/or)」という用語は、関連して列挙される項目のうちの1つ以上の項目のありとあらゆる組み合わせを含む。
【0010】
別段の言及がない限り、或る要素又は構成要素が、別の要素又は構成要素に「接続される(connected to)」又は「結合される(coupled to)」又は「隣接する(adjacent to)」と言われるとき、その要素又は構成要素を他の要素又は構成要素に直接接続又は結合することができるか、又は介在する要素又は構成要素が存在する場合があることは理解されたい。すなわち、これらの用語及び類似の用語は、2つの要素又は構成要素を接続するために、1つ以上の中間にある要素又は構成要素が利用される場合がある事例を含む。しかしながら、或る要素又は構成要素が、別の要素又は構成要素に「直接接続される」と言われるとき、これは、2つの要素又は構成要素が、任意の中間にある又は介在する要素又は構成要素を用いることなく、互いに接続される事例のみを含む。
【0011】
本開示は、それゆえ、その様々な態様、実施形態及び/又は具体的な特徴若しくはサブ構成要素のうちの1つ以上を通して、以下に具体的に言及されるような利点のうちの1つ以上を明らかにすることを意図している。説明のためであり、限定はしないが、本教示による一実施形態を完全に理解してもらうために、具体的な詳細を開示する例示的な実施形態が記述される。しかしながら、本明細書において開示される具体的な詳細から逸脱するが、本開示と矛盾しない他の実施形態も依然として、添付の特許請求の範囲内にある。さらに、例示的な実施形態の説明を不明瞭にしないように、既知の装置及び方法の説明は省略される場合がある。そのような方法及び装置は、本開示の範囲内にある。
【0012】
代表的な実施形態によると、テスト対象システムと、解析用のプロトコルアナライザとの間の高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法が提供されている。この方法は、データのデータ完全性チェックをリアルタイムに実行し、このデータ完全性チェックにより、データが正しいことが示された場合には、データのトランザクション層パケット(TLP:transaction layer packet)及びデータリンク層パケット(DLLP:data link layer packet)からのデータ完全性チェックに対応するデータ完全性ビットを、キャプチャバッファに格納することから省くことと、ACK/NACKパケットを使用して、データのTLPが正常に配信されたことを確認するために、確認応答と否定応答(ACK/NACK)の照合をリアルタイムに実行し、このACK/NACKパケットを、キャプチャバッファに格納することから省くことと、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLP(つまり、TLP又はDLLPあるいはそれらの両方)からリアルタイムにフィールドを削除、及び/又は削減(つまり、削除又は削減あるいはそれらの両方)をすること、及び/又は、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPのペイロードを並列で圧縮することとを含む。
【0013】
代表的な実施形態によると、システムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT)からホストコンピュータまでの高速階層型パケットベースのプロトコルでのデータを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、DUTとホストコンピュータとの間で送信されるデータを監視するために高速データリンクに接続されたインターポーザ回路(interposer circuit)であって、このインターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納するためのキャプチャバッファを含み、UIコンピュータがアナライザソフトウェアで解析するためにアクセスすることができるインターポーザ回路とを含む。上記インターポーザ回路は、データのデータ完全性チェックをリアルタイムに実行し、このデータ完全性チェックにより、データが正しいことが示された場合には、データのTLP及びDLLPからのデータ完全性チェックに対応するデータ完全性ビットを、キャプチャバッファに格納することから省くことと、ACK/NACKパケットを使用して、データのTLPが正常に配信されたことを確認するために、ACK/NACKの照合をリアルタイムに実行し、このACK/NACKパケットを、キャプチャバッファに格納することから省くことと、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPからリアルタイムにフィールドを削除、及び/又は削減すること、及び/又は、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPのペイロードを並列で圧縮することとを実行するようにプログラムされている。
【0014】
代表的な実施形態によると、システムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、DUTからホストコンピュータまでのデータを高速階層型パケットベースのプロトコルで解析するアナライザソフトウェアを実行するように構成されたUIコンピュータと、DUTとホストコンピュータとの間で送信されるデータを監視するために高速データリンクに接続されたインターポーザ回路であって、このインターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納するためのキャプチャバッファを含み、UIコンピュータがアナライザソフトウェアで解析するためにアクセスできるインターポーザ回路とを含む。上記インターポーザ回路は、TLP及び/又はDLLPを並列圧縮し、圧縮されたTLP及び/又はDLLPをキャプチャバッファに格納するようプログラムされており、TLP及び/又はDLLPはそれぞれ、ヘッダ及びペイロードを含む。TLP及び/又はDLLPを圧縮することは、インターポーザ回路でのTLP及び/又はDLLPのシンボルを、複数のシリアル高速レーンで受信することと、シリアル高速レーンからのシンボルを、TLP及び/又はDLLPのクロックサイクルの各クロックに到着するワイドワードへとデスキューすることと、ワイドワードを入力ストリームに配列することであって、各入力ストリームは、クロックサイクルの各クロックに到着する各ワイドワードの同位置からのシンボルを含むことと、上記シンボルを圧縮するためのハッシュテーブルを用いてシンボルを圧縮し、最終的に圧縮されたシンボルをキャプチャバッファに格納することとを含む。
【0015】
代表的な実施形態によると、並列圧縮されたワイドワードデータを圧縮解除(decompress)する方法が提供されている。この方法は、ワイドワードデータ内のワイドワードのメモリ構造のインスタンスを作成することであって、メモリ構造の上記インスタンスは、ワイドワードの圧縮辞書の反対(inverse)からの参照結果(instance)であることと、メモリ構造の上記インスタンスを使用して、ワイドワードデータの途切れのない(gap-free)圧縮後の出力ストリームから複数の圧縮後の符号を反復して取得することであって、上記複数の圧縮後の符号の各圧縮後の符号は、少なくとも1つの文字コード、及び逆方向のポインタ(reverse-pointer:逆ポインタ)を含み、上記複数の圧縮後の符号の少なくとも1つの圧縮後の符号は、複数の文字コードを有するマルチシンボルの文字列を含むことと、複数の圧縮後の符号である逆ポインタをそれぞれ繰り返し辿って、圧縮解除後の中間ストリームを形成することと、少なくとも1つの圧縮後の符号のマルチシンボル文字列の複数の文字コードの順序を逆転させて、圧縮解除後のストリームを形成することとを含む。
【0016】
図1は、代表的な実施形態に係る、高速データリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、格納されたデータ量を削減するシステムの簡略ブロック図である。
【0017】
図1を参照すると、システム100は、ユーザインタフェース(UI)コンピュータ110、及びインターポーザ回路120を含む。インターポーザ回路120は、テスト対象デバイス(DUT)140とテスト対象システムのホストコンピュータ150との間を高速データリンク130で接続し、高速データリンク130を通じて通信されるデータを受信、処理するように構成される。データはインターポーザ回路120によりUIコンピュータ110に供給され、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザをホストする。
【0018】
したがって、インターポーザ回路120は、DUT140、ホストコンピュータ150、並びに、DUT140とホストコンピュータ150との間の高速データリンク130を含む、テスト対象システムをテストするための「中間者(man in the middle)」として機能する。つまり、インターポーザ回路120は、本明細書で記載の実施形態に従って、テスト中に高速データをキャプチャし、キャプチャしたデータの一部をキャプチャバッファ125に格納し、このデータは、キャプチャ後の解析用にUIコンピュータ110へと供給される。インターポーザ回路120は、例えば、ユニバーサルシリアルバス(USB)(例えば、USB3.0)又はイーサネット接続でUIコンピュータ110に接続され得る。
【0019】
UIコンピュータ110は、例えば、パーソナルコンピュータ(PC)でもよいが、プロトコルアナライザを実行できる任意の処理ユニット(例えば、後述の処理ユニット810)を、本教示の範囲から逸脱することなく、組み込むこともできる。同様に、ホストコンピュータ150は、例えば、PCでもよいが、高速データプロトコルを介してDUT140とインタフェース接続できる任意の処理ユニット(例えば、後述の処理ユニット810)を、本教示の範囲から逸脱することなく、組み込むこともできる。例えば、DUT140は、ホストコンピュータ150に挿入可能であり、ホストコンピュータ150とインタフェース接続するアドインカード又はシステムボード等の高速周辺デバイスであり得る。高速周辺デバイスの例には、グラフィックカード、サウンドカード、SSD、ワークロードアクセラレータが含まれる。一般的に、高速周辺デバイスとは、仕様にもよるが(例えば、PCIe Gen6プロトコルのレーンあたり4GB/秒を超える)、レーンあたり毎秒0.25GB超のデータ速度で動作するものであり、それゆえ、信頼性の高いデータ転送のために、高速データリンク130を介した高速プロトコルにより、データを通信する必要がある。
【0020】
高速データプロトコルは、例えば、PCI Express(商標)Base Specification Revision 3.0(2010年11月10日)(「PCIe Gen3プロトコル」)、PCI Express(商標)Base Specification Revision 4.0、Version 1.0(2017年10月5日)(「PCIe Gen4プロトコル」)、PCI Express(商標)Base Specification Revision 5.0、Version 1.0(2019年5月28日)(「PCIe Gen5プロトコル」)、又は、PCI Express(商標)Base Specification Revision 6.0、Version 1.0(2022年1月11日)(「PCIe Gen6プロトコル」)に記載されている、PCIeプロトコルである場合があり、これらは全て引用することにより、その全体が本明細書の一部をなすものとする。この場合、UIコンピュータ110によって実施されるプロトコルアナライザは、例えば、Keysight Technologies, Inc.社から入手可能なU4301B PCIeプロトコルアナライザ、又はU4305B PCIe、及びLTSSM Exerciserであり得る。
【0021】
図示の実施形態では、インターポーザ回路120は、上述のように、DUT140とホストコンピュータ150との間で送信されるデータを一時的に格納するためのキャプチャバッファ125を含む。インターポーザ回路120は、フィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)、及び/又は特定用途向け集積回路(ASIC:application specific integrated circuit)(つまり、FPGA又はASICあるいはそれらの両方)を含み得るが、
図2を参照して後述するインターポーザ回路120の機能を実行できる任意の処理ユニット(例えば、処理ユニット810)を、本教示の範囲を逸脱せずに、組み込むこともできる。一実施形態において、インターポーザ回路120は、例えば、Xilinx, Inc.社から入手可能な内部高帯域幅メモリ(HBM:high bandwidth memory)ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)を有するFPGAによって実装され、キャプチャバッファ125として使用される。
【0022】
図2は、代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法を示す簡略流れ図である。
図2の様々なステップは、上述のように、インターポーザ回路120によって実行可能である。この方法は、UIコンピュータ110及びインターポーザ回路120にプロトコルアナライザを提供する。これにより、従来のソリューションに付随する複雑な配線及び信号完全性(signal integrity:シグナルインテグリティ)の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(生データを削減した)を使用して、アップロード時間の高速化をサポートする。
【0023】
図2を参照すると、キャプチャバッファに格納されるデータの量は、4つの基本段階(basic step:基本ステップ)を踏まえており、それぞれについて、以下で詳しく説明する。ブロックS211において、キャプチャバッファに格納されるデータのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)から、リアルタイムに実行されるデータのデータ完全性(data integrity)チェックに対応するデータ完全性ビットを削除する。データ完全性チェックでデータが正しいことが示されると、データ完全性ビットは削除される。そうでない場合、つまり、データ完全性チェックでデータが正しくないことが示された場合、データ完全性ビットは、TLP及びDLLPに残され、UIコンピュータ110による解析のために、標準プロトコルに従って、キャプチャバッファ125に格納される。
【0024】
ブロックS212において、意図された送信先におけるデータのTLPの到着成功(correct arrival)又は到着失敗(incorrect arrival)をそれぞれ示す確認応答(ACK:acknowledge)パケット及び否定応答(NACK:negative acknowledge)パケットを、キャプチャバッファ125に格納しない。その代わりとして、ACK/NACK照合をリアルタイムに実行し、ACKパケットとNACKパケットを使用してTLPの送達が成功したことを確認してから、ACK/NACKパケットを破棄する。TLPのACK/NACKの状態を、メタデータとしてキャプチャバッファ125に記録することもできる。
【0025】
ブロックS213において、データのTLP及び/又はDLLPから、或るフィールドをリアルタイムに削除するか、又は、リアルタイムにフィールドのサイズを削減する。これは、固定値又は空値を持つ既知のフィールドを削除することと、TLPとDLLPのパケットフローの始点と終点を示すために使用されるフレーミングトークンを削除することと、複数のアクティブデバイスではなく、単一のアクティブデバイスをテストするために、全体として不要なフィールドを削減することと、特定のユースケースをデバッグするための値を一切持たない非必須のフィールドを除去することとを含む。
【0026】
ブロックS214において、キャプチャバッファ125に格納されるTLP及び/又はDLLPの全部又は一部を並列圧縮する。例えば、パケットのデータペイロードは、キャプチャバッファ125に格納するために圧縮されてもよい。データペイロードの圧縮は、例えば、ワイドワード(wide word)の各シンボルが、処理ユニットのクロックサイクルの次クロックにおいて、次シンボルと同じ場所で配置されるように、ペイロードでデータを配列することを含む。次に、既にメモリに格納されている以前のシンボルへのポインタを提供するハッシュテーブルを使用して、配列されたデータを圧縮する。全パケット(つまり、ヘッダを含めて)の圧縮は、実質的に同じ方法で実行することができる。
【0027】
[データ完全性チェック]
ブロックS211を参照すると、リアルタイムに実行可能で、キャプチャバッファ125への格納から省かれるデータ完全性ビットを提供するデータ完全性チェックには、様々な種類がある。種々の実施形態において、データ完全性チェックの種類には、巡回冗長検査(CRC:cyclic redundancy checker)チェック、フレームパリティチェック、フロー制御ユニット(FLIT:Flow Control Unit)チェックがあり、それぞれについては、以下で説明する。これらのチェックに対応するTLP及び/又はDLLPのデータ完全性ビットは、チェックから各データが正しいことが示された場合には、格納されない。そうでない場合、つまり、データ完全性ビットにより、各データが正しくないことを示す場合、これらはパケットに残され、キャプチャバッファ125に格納されてUIコンピュータ110で解析され得る。
【0028】
[CRCチェック]
CRCチェックについては、チェックサムを含むCRCフィールドが、データのTLP及びDLLPに含まれる。一般的に、チェックサムは、送信デバイス(例えば、DUT105)のCRCフィールドで提供され、受信デバイス(例えば、ホストPC)において取得され、そこで元データのチェックサムと比較される。チェックサムが一致した場合、データに誤りがないと判断される。チェックサムの一致に失敗した場合には、例えば、NACKによってパケットの再送信を要求する等、補正措置が取られ得る。本実施形態において、誤りがないことを示すCRCのチェックサムは、それぞれのパケットから削除されるが、誤りを示すCRCのチェックサムは削除されないので、キャプチャバッファ125に格納される。
【0029】
図3Aは、代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべき例示的なTLP及び例示的なDLLPのCRCフィールドを示す。TLP及びDLLPSのCRCフィールドは、例えば、PCIe Gen3プロトコルのセクション2.7に従って提供されているが、例えば、他のPCIeプロトコル(例えばPCIe Gen4~Gen6プロトコル)を含む、他のプロトコルにおけるCRCフィールドも、本教示の範囲から逸脱せずに組み込むことができる。
【0030】
図3Aを参照すると、例示的なTLP310は、以下の2つのCRCフィールドを含む。すなわち、4ビットを含むFCRCフィールド311、及び32ビットを含むLCRCフィールド312である。例示的なDLLP320は、16ビットを含むCRCフィールド321を含む。これまで考察したように、FCRCフィールド311、LCRCフィールド312、及びCRCフィールド321をキャプチャバッファ125に格納するのではなく、最初に、インターポーザ回路120自体でCRCのチェックサムをチェックする。誤りがないことを示すチェックサムは、キャプチャバッファ125に格納されず、それぞれのパケットから削除されるが、誤りを示すCRCのチェックサムは、通常どおり、キャプチャバッファ125に格納される。例えば、誤りがないことを示すチェックサムは、それぞれのパケットから削除することができる。通常、CRC誤りが発生しない場合、パケット単位でキャプチャバッファ125に保存される記憶領域は、既知で固定である(例えば、TLP310では36ビット、DLLP320では16ビット)。
【0031】
キャプチャバッファ125からUIコンピュータ110へのデータ転送インフラストラクチャは、データの完全性を保持すると見なしてもよいので、CRCを省略しても機能上の損失はない。その後、誤りが発生しない場合、CRCは、PCIeリンクの送信側が最初にCRCを計算するために使用するアルゴリズムの逆の処理を使用して、UIコンピュータ110上で静的に再構築できる。こうすることで、ユーザはチェックサムが省略されていることを認識しない。例えば、Gen3プロトコルのセクション2.7の
図2~
図38は、TLPエンドツーエンドのデータ完全性保護用の32ビットECRCを計算するためのECRCアルゴリズムを示している。UIコンピュータ110は、このアルゴリズムの逆の処理を使用して、TLP310から以前に削除された任意のECRCを再構築することができる。当然のことながら、例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)から提供されるアルゴリズムを含む、CRCを計算する他の既知のアルゴリズムを、本教示の範囲から逸脱することなく組み込むことができる。CRC誤りがある場合、プロトコルアナライザでCRCを全て解析できるように、CRC誤りを有するTLP310及び/又はDLLP320は、変更せずにキャプチャバッファ125に格納される。
【0032】
[フレームパリティビット]
フレームパリティビットはTLPに含まれ、インターポーザ回路120上でもチェックされる。一般的に、フレームパリティビットは、受信デバイスが対応するフレーミングトークンを正しく観測していることを確認するためにチェックされる。一実施形態において、誤りがないことを示すフレームパリティビットは、キャプチャバッファ125への格納が省かれ、誤りを示すフレームパリティビットは、キャプチャバッファ125に格納される。フレームパリティビットの値は、フレームパリティチェックに従って決定される。フレームパリティチェックの実行例は、フレーミングトークンに関するPCIe Gen3プロトコルのセクション4.2.2.3.1で記載されている。当然のことながら、例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)から提供されるプロセスを含む、フレームパリティチェックを実行する他の既知のプロセスも、本教示の範囲から逸脱することなく、組み込むことができる。一般的に、フレーミングトークンは、関連するシンボルの数、ひいては、次のフレーミングトークンの場所を指定又は示唆する。例えば、フレーミングトークンは、パケットの始点を示し、様々な種類のパケットを迅速、且つ容易に識別できるようにする特別なシンボルとすることができる。
【0033】
再度、
図3Aの例を参照すると、TLP310は、フレームパリティビットとして1ビットを含む、フレームパリティ(FP:frame parity)フィールド313も含む。このばあいもやはり、FPフィールド313を格納するのではなく、まずインターポーザ回路120でフレームパリティビットをチェックする。フレームパリティビットにより、誤りがないと示された場合、フレームパリティビットを各TLP310から削除してから、TLP310をキャプチャバッファ125に格納する。フレームパーティビットが誤りを示す場合、フレームパリティビットはTLP310に残り、UIコンピュータ110による解析が可能になるよう、通常どおり、キャプチャバッファ125に格納される。
【0034】
誤りがないことを示すフレームパリティビットを削除しても、TLP310あたりたった1ビットという僅かな節約にしかもたらさない。しかし、通常、パケットデコーダは、フレームパリティビットをチェックして、例えば、TLP310内の始点TLP(STP)トークン(フレーミングトークン)が正しく、データストリーム内で適切に形成されたTLP310を観測していることを確認する必要がある。例えば、インターポーザ回路120は、対応するパケットの始点を記録し、これに応じて、タイムスタンプを挿入することができるよう、フレームパリティビット、及びSTPトークンをチェックする。インターポーザ回路120は、フィルタリングを適用し、メタデータを挿入できるように、ヘッダを復号し、パケット境界を回復する必要がある。適用され得る圧縮技術とは関係なく、インターポーザ回路120上のパケット境界を計算する必要があるので、1ビットしか節約できなくても、フレームパリティビットを除去することには価値がある。
【0035】
[FLITチェック]
高速データプロトコルの中には、前方誤り訂正(FEC:forward error correction)を使用するものがあり(例えば、PCIe Gen6)、そうした場合、パケットは、例えば、256バイト等の固定長でなければならない。固定長パケットは、フロー制御ユニット(FLIT)と呼ばれる。各FLITは、通常、可変長である1つ以上のTLPを、所定バイト数含み得る。FLITより長いTLPの場合、TLPは複数のFLITに分割される。一般的に、FLITを受信すると、受信デバイス(例えば、ホストコンピュータ150)は、FLIT内の各FECグループ内の修正可能な誤りを訂正するFEC復号化を実行する。FEC復号化後、CRCチェックを実行する。CRCのチェックに失敗した場合、受信デバイスはFLITが正常に受信されなかったことを示す。これは、否定応答を送信デバイス(例えば、DUT140)に送り返すことによって実行できる。
【0036】
図4は、16レーンのPCIeリンクの例示的FLIT400を示す。図示の例では、FLIT400は256バイトを含み、これは、以下のように割り当てられる。すなわち、最初の236バイトは、1つ以上のTLP(バイト0~235)に割り当てられ、次の6バイトは、データリンク層ペイロード(DLP)に割り当てられ(バイト236~241をDLP0~DLP5として図示)、次の8バイトは、CRC411(バイト242~249をCRC0~CRC7として図示)に割り当てられ、さらに、最後の6バイトは、誤り訂正符号(ECC:error correction code)として示される、FEC412に割り当てられる(バイト250~255を、例えば、3つのグループECC0[0:1]~ECC2[0:1]で図示)。FECを実行したら、FLIT400について、CRCチェックを行う。CRCチェックに通れば、CRC411のCRC情報、及びFEC412のFEC情報の双方が、インターポーザ回路120上で破棄される。CRC411は8バイト、FEC412(又は、ECC)は2バイトの3ブロックで、それぞれ256バイトのFLITの末尾に配置される。そこで、CRC411とFEC412を破棄することで、FLIT400の256バイトのうち14バイトが、キャプチャバッファ125に格納されない。注目すべきは、FLITにカプセル化されているTLPは独自のCRCを持たないので、
図3Aを参照して上述したとおり、TLPのCRCチェックの代わりに、FLITのCRCチェックを実行できるということである。
【0037】
[ACK/NACK]
ブロックS212を参照すると、ACKパケットとNACKパケットを使用して関連データのTLPの送達の成功をリアルタイムに確認するために、ACKとNACKとの照合をリアルタイムに実行する。次に、ACKパケットとNACKパケットを破棄する、つまり、これらはキャプチャバッファ125に格納されない。概して、データリンク層は、確認応答と否定応答の仕組みを使用して、トランザクション層のパケットの配信を確実にするように支援する。一般的に、後続のDLLPで一致するシーケンス番号を使用して、送信先(例えば、ホストコンピュータ150)における送信元(例えば、DUT105)からの各TLPの到着成功又は到着失敗は、送信先から送信元に戻って報告される。このシーケンス番号を使用して、TLPと、ACKパケット及びNACKパケット(DLLPに相当)の双方との間を追跡し、これにより、TLPとDLLPにわたって一致するシーケンス番号を結び付けて、配信が成功したことを示す。タイマーを使用して、TLPの受信とそれに対応する確認応答の時間を計ることができる。送信先が確認応答(ACKパケット)を受信する前にタイマーが終了した場合(タイムアウト)、新しいTLPで元データを再送信する。TLPとDLLPのシーケンス番号は再利用(ラップアラウンド(wrap around))してもよいが、その場合、シーケンス番号が再利用される際にライブパケットが「インフライト(in-flight)」であってはならない。
【0038】
上記のように、インターポーザ回路120は、ACKパケット及びNACKパケットをキャプチャバッファ125に格納することから省く。当然のことながら、システムが、とりわけ確認応答自体の問題をデバッグしている場合、この機能を無効にすることができる。一実施形態において、ACKパケットとNACKパケット自体が格納されないにもかかわらず、TLPは、そのTLPの確認応答状態を示すメタデータを、これに付加してキャプチャバッファ125内に備えることができる。メタデータは、TLPがキャプチャバッファ125に格納される前に、インターポーザ回路120によってTLPに論理的に付加される。したがって、ACKパケットとNACKパケットを格納することなくインターポーザ回路120でACKとNACKとを照合し、メタデータでACKとNACKの結果を示すことにより、実質的に「ロスレス(lossless)」のデータ圧縮を実現することができる。
【0039】
この方法には、或る程度のコストがかかる。これまで考察したように、ACKパケットとNACKパケットのタイムスタンプを追加してより豊富なデータを作成しない限り、ACKパケットとNACKパケットの正確な到着時刻は失われる。メタデータにタイムスタンプを追加すると、パケットバッファに格納されるべきデータ量が増加するが、その増加分は、本来、ACKとNACKのパケット全体について格納されるはずのデータ量よりも少なくなる。TLP310からのシーケンス番号と、(適宜)ACKパケット又はNACKパケットに関連するタイムスタンプを与えると、根本的なプロトコルエラー(protocol error)がなければ、DLLP320は完全に再構築され得る。当然のことであるが、根本的なプロトコルエラーがあれば、DLLP320は全て格納されるはずである。さらに、DLLP320のタイムスタンプは、対応するTLP310の元のタイムスタンプとの差分として保持され得る。これにより、格納に必要なビット数が減少する一方、パケットストリームにおけるDLLP320の場所も、依然として復元され得る。
【0040】
図3Bは、代表的な実施形態に係る、キャプチャバッファ125に格納せずに、ACK/NACKパケットを破棄可能にする、上述の
図3Aに示したのと同じTLP310及び同じDLLP320におけるシーケンス番号フィールドを示す。
図3Bを参照すると、TLP310はシーケンス番号フィールド314を含み、DLLP320はDLLPシーケンス番号フィールド324を含む。シーケンス番号が一致することで、配信に成功したことが示され、TLPパケットのACKとなるはずである。例えば、TLP310内のシーケンス番号1つとDLLP320内のシーケンス番号1つという、シーケンス番号のペアが一致すれば、TLP310が確認応答された(ACKed)ことになる。この場合、シーケンス番号フィールド314及び324のシーケンス番号は格納されないが、TLP310、及び/又は、ACK、及び/又はNACKが到着したかどうかを示す3ビットシンボルは格納される。シーケンス番号が各方向(例えば、上下)に順番に並んでいるので、各3ビットシンボルがどのシーケンス番号を参照しているかは、後で判断できる。図示の例では、ACKパケットとNACKパケットのサイズ、ひいては、TLPごとに節約できるスペースは、既知で固定されている。例えば、PCIe Gen3プロトコルのセクション3.4.1において、非FLITモードでは、TLP310ごとにACK又はNACKのパケットがそれぞれ64ビットであるので、これまで考察したように、ACK/NACKの状態を示すメタデータを3ビット追加して、TLP310と関連付けてキャプチャバッファ125に格納すれば、61ビット分の節約が可能となる。例えば、PCIe Gen 6プロトコルのセクション3.5.1では、ACKとNACKのパケットの処理についても言及している。さらに、PCIe Gen6プロトコルでFLITモードを有効にすることで、FLITあたり6バイトの節約を実現した。例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen5プロトコル)を含む、他の既知のプロトコルにおけるACKとNACKのパケットを、本教示の範囲から逸脱することなく、組み込むことができる。
【0041】
[フィールドの削除/削減]
再度、
図2を参照すると、ブロックS213において、TLP及び/又はDLLPの特定のフィールドを削除するか、又は、フィールド内のデータをリアルタイムに削減する。この圧縮技術に含まれ得るフィールドには、いくつかの種類がある。例えば、既知の固定値又は空値を持つ既知のフィールド、パケットフローの始点と終点を示すフレーミングトークンフィールド、及び、所与のユースケースについて値を持たない非必須フィールドは、除去することができる。また、テスト条件で必要以上に広いフィールドは、削減されることもある。
【0042】
[既知のフィールドの除去]
TLPには、固定値及び空の値(empty value)を含む、値が既知のフィールドを含むものがある。通常、プロトコルは、とりわけ、例えば、ペイロードデータの前にある共通のヘッダフィールドに関して、本質的に規則的になるように設計されている。これは、プロトコルを復号化するために使用される状態機械を構築する際に必要な作業量を軽減するので、階層型プロトコル設計でよく検討される部分でもある。そのため、多くのパケットタイプには、一部のパケットで使用されるフィールドがあるが、別のタイプのパケットの場合では、固定の既知値、更には、空の値もある。例えば、様々なパケットにおいて、0でなければならない予備フィールド、未使用により0でなければならないトラフィッククラスインジケータ、(ペイロードには、常に単一のデータワード(例えば、4バイト)があることにより)1でなければならない長さフィールドがある。
【0043】
また、一部のパケットには、既知のフィルタ設定がある(例えば、PCIe Gen3プロトコルソフトウェアではトリガとして知られている)。例えば、バス上のいくつかのトーカ(talker)を検索する、又は、単一のエンドポイントデバイスをテストする場合には、デバイスアドレスフィールドは事前に分かっており、フィルタが正しく機能しているものとして、一致するパケットのみが格納される。例えば、2つのトーカを含むフィルタでは、既知の2つのトーカだけを識別すればよいので、大きなアドレス空間を必要とせず、アドレスフィールドのデータを削減することができる。場合によっては、16ビットのアドレスを、たった1ビット、2ビット、又は3ビットまで減らすことができる場合もある。
【0044】
既知の(固定又は空の)値を持つ既知のフィールドは、パケットタイプごとに異なる場合があるが、これらのフィールドを定義し、パケット格納時にそれらを省略することは比較的簡単である。フィールド値が既知であるので、インターポーザ回路120で既知の値が正しいかどうかをチェックしてから、キャプチャバッファ125から省く限り、ユーザインタフェースによって回復させることが可能である。当然のことであるが、期待される既知の値と異なる場合は、既知のフィールドを含め、パケット全体を格納して、後でデバッグする必要がある。
【0045】
図5Aは、代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべき例示的な構成読み取りTLP(Config Read TLP)の既知のフィールドを示す。構成読み取りTLPの既知のフィールドは、属性フィールド(Attr)に関するセクション2.2.6.3等のPCIe Gen3プロトコルに従って提供され、例えば、このセクションでは、トランザクションのデフォルト処理の変更を可能にするための更なる情報を提供している。
図5Aを参照すると、構成読み取りTLP330には、以下の規則が適用される。すなわち、TCフィールド331を000bとし、THフィールド333は、構成要求には適用されず、ビットは予備(恐らく、0)であり、Attr[2]フィールドは予備(恐らく、0)であり、A[1:0]フィールド334を00bとし、ATフィールド335を00bとし、長さフィールド336を00 0000 0001b(1つ)とし、さらに、最後のDW BEフィールド337を0000bとする。フィールド332、338、及び339は予備としてマークされ、0とする。PCIe Gen3プロトコルの他の既知のフィールド、並びに、例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)を含む、他のプロトコルの既知のフィールドも、本教示の範囲から逸脱せずに組み込むことができる。
【0046】
[フレーミングトークンの除去]
種々のトークンは、TLP及びDLLPのパケットフローの始点と終点を示すために使用されるシンボルである。フレーミングトークンは、その値を確認した後、より短いシンボルに置き換えることができる。一実施形態において、値ごとにフレーミングトークンをチェックし、値に誤りが見つかった場合は、例外又は特例を発生させて、その値を、より小さいが一意なビット系列に置き換える。この場合も、データがキャプチャバッファ125から抽出され、UIコンピュータ110に送信される際には、その完全性と間隔は、パケットを搬送する輸送システムによって保存されるものとする。
【0047】
図3Cは、代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべきTLPとDLLPのフレーミングトークンフィールドを示す。
図3Cは、これまで考察した
図3Aに示されるのと同じ例示的なTLP310とDLLP320を示す。
図3Cを参照すると、TLP310はSTPフィールド315を含み、DLLP320は、SDPトークン番号フィールド325を含む。STPフィールド315は、TLP310の始点パケットフロートークンを含み(終点パケットフロートークンを含むフィールドは、図示せず)、SDPトークン番号フィールド325は、DLLP320のフレーミングトークンを含む。STPフィールド315、及びSDPトークン番号フィールド325のそれぞれは、例えば、削除されてもよいし、より短いシンボルに置き換えられてもよい。
【0048】
[フィールドの削減]
これまで考察したように、プロトコル内の一部のパケットフィールドは、DUT140で必要と想定されるよりもより広い(より多くのビットを使用)。例えば、或るシステムで最小限の構成(単一のデバイス)をテストすることがよくある。それゆえ、サウンドカード、グラフィックスカード、複数のアクセラレータ等の複数のPCIeデバイス(カード)が使用されているライブシステムと比較して、ホストコンピュータ150と通信するアクティブなPCIeデバイスは、1つとすることができる。したがって、1つ又は2つのPCIeデバイス(例えば、DUT140)のみがアクティブである場合、複数のPCIeデバイスを収容できるアドレス空間は必要ない。
【0049】
一実施形態において、テスト対象システム(DUT140を含む)において、アクティブDUTがライブシステムよりも少ない場合、必要なアクティブDUTの数に応じて、アドレスフィールドのサイズを削減し、その代わりに、ルックアップテーブルを展開してもよい。例えば、アクティブDUTが2つ又は3つしかない場合、アドレスフィールドを、16ビットからそれぞれ1ビット、2ビット、又は3ビットだけに減らすことができる。インターポーザ回路120の起動時にルックアップテーブルのサイズをパラメータ化すれば、ユーザは、DUTの数と比較して利用可能なメモリを最大限活用できるよう、UIコンピュータ110でのメモリ圧縮を構成可能である。
【0050】
また、要求側(Requester)(送信者)及びコンプリータ側(Completer)(受信者)のアドレスは、ミラーリングされた値のペアである。2人の当事者のみが会話に参加している場合(例えば、1つのDUT140と、1つのホストコンピュータ150)、一意のペアは1つだけである。さらに、インターポーザ回路120は、「中間者」としてダウンリンクチャネルとアップリンクチャネルの双方へと物理的に接続されているという理由により、方向性を認識しているので、アドレス指定方式はまったく要求されない場合がある。この場合、アドレスフィールド全体を除去することができる。
【0051】
図5Bは、代表的な実施形態に係る、キャプチャバッファに格納する前に、サイズを削減するべき構成読み取りTLPの削減可能フィールドを示す図である。
図5Bは、これまで考察した
図5Aに示されるのと同じ例示的な構成読み取りTLP330を示す。この場合もやはり、例えば、PCIe Gen3プロトコルに従って、構成読み取りTLPの削減可能フィールドが提供される。例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)を含む、他のプロトコルの他の既知のフィールドの削減可能フィールドも、本教示の範囲から逸脱せずに組み込むことができる。
【0052】
図5Bを参照すると、削減可能フィールド340には、TLP330の送信者に関連するアドレスデータであるバス番号(要求側)、Dev#(Req)(すなわち、デバイス番号(要求側))、及びFunc#(R)(すなわち、機能番号(要求側))、並びに、TLP330の受信者に関連するアドレスデータであるバス番号(コンプリータ側)、Dev#(Compl)(すなわち、デバイス番号(コンプリータ側))、及びFunct#(C)(すなわち、機能番号(コンプリータ側))が含まれている。一実施形態において、2ビット~3ビット以外全てを、削減可能フィールド340から除去することができる。ビット数はシステム固有であるが、上記フィールドのアクティブな組み合わせと同数のビットのみが必要である。一方、元パケットの要求側とコンプリータ側の実際のPCIeアドレスの最小長のエイリアスを格納するルックアップテーブルが作成される。インターポーザ回路120の起動時にルックアップテーブルのサイズをパラメータ化すれば、ユーザは、アドレス指定可能なエンティティ(例えば、DUT)の数と比較して利用可能なメモリを最大限活用できるよう、UIコンピュータ110でのメモリ圧縮を構成することができる。
【0053】
[必須でないフィールド/パケットの除去]
所与のユースケースで値を持たないフィールド全体は、TLPとDLLPから削除することができる。値を持たないパケット全体も削除され得る。さらに、ペイロードが大きい/長いTLPやDLLPも、切り捨てることができる。つまり、特定のユースケースをデバッグする際に重要でない各フィールドを持つ多数のパケットタイプ(packet type)がある。このようなパケット、及び/又はパケット内の各フィールド(つまり、パケット、又はパケット内の各フィールド、あるいはそれらの両方)は、ユーザの構成に応じて省くことができる。例えば、UI設定に基づき、キャプチャストリームから除去することができるパケット、及び/又はパケットごとのフィールド(パケット、又はパケットごとのフィールド、あるいはそれらの両方)のリストが提供され得る。これでは、削除されたパケット及び/又はフィールド(つまり、パケット又はフィールドあるいはそれらの両方)が、UIコンピュータ110で再構成できないので、「ロッシー(lossy)」な圧縮となるはずである。また、このストレージ方式では、実行時にどのフィールドが存在するかを指定する必要もある。それゆえ、固定ストレージ方式ではなく、フィールドを削除した際に記憶容量を最大化する融通の利くストレージ方式が、実装されている。注目すべきは、フィールド全体が削除されたり、又は、パケットが切り捨てられたりすると、UIコンピュータ110において、これまで考察したデータ完全性チェック値がロスレスで回復されない場合があることである。
【0054】
[並列圧縮]
ブロックS214を参照すると、キャプチャバッファに格納されるワイドワードデータのTLP及び/又はDLLPのペイロードはリアルタイムに圧縮される。圧縮は、従来の圧縮技術のように直列に行われるのではなく、むしろ、並列に行われる。一実施形態において、ヘッダも、TLP及び/又はDLLPのペイロードと一緒にリアルタイムに圧縮することができる。以下の考察は、説明を容易にするために、データペイロード圧縮に焦点を当てているが、本教示の範囲から逸脱することなく、全パケット圧縮に適用することができる。
【0055】
背景として、全般的に理解されることは、例えば、LZW、LZ77、及びLZ78に基づくような既知の圧縮アルゴリズムにおける圧縮出力、及び圧縮で必要とされる辞書は、入力データの1シンボルを一度に読み取ることによって作成され、かかる辞書の内容は、ストリーム内で以前に出現したパターンの場所を知っているかどうかで異なるということである。それゆえ、このような依存性がある圧縮アルゴリズムは並列処理が困難である。
【0056】
一般的に、並列処理は、例えば複数のシンボルを同時に処理する単一の処理ユニットで圧縮アルゴリズムを1ステップで並列化する等により、効率を向上させる。このような戦略は、単一命令複数データ(SIMD:single instruction multiple data de-skewed lane)処理、又は「ワイドワード」処理と呼ばれることがあり、ワイドワードは、複数のシンボル(例えば、4、8、16、又はそれ以上のシンボル)、並びに単一の回路からなるものとすることができ、各シンボルは、通常、1動作(operation)あたり複数バイトを含む全ての動作で、データの1バイトに等い。PCIeに適用すると、各単一PCIeレーンのデータは、クロックサイクルごとに複数のバイトを既に搬送している。しかし、PCIeアナライザは、複数の単一のPCIeレーンではなく、結合されたデスキューレーンのデータを扱うので、最終的に、デスキューデータバスは、128バイト、256バイト、又はそれ以上の幅となり得る。この場合、従来のデータ圧縮では、各シンボルが8ビット幅である必要がないため、シンボルは複数バイトのデータからなると考えることができる。しかし、一般的に圧縮アルゴリズムは、入力シンボル(バイト)のビット幅が大きい場合(例えば、8ビットよりはるかに大きい、例えば、2^16(216)(2バイト)は、2^8(28)よりはるかに大きい)、圧縮効率が悪くなり、さらに、「n」をビット幅として、辞書のサイズが2n増えるため、圧縮アルゴリズムは全体として、はるかに多くのメモリを消費することとなる。
【0057】
例えば、各クロック入力のデータレートに辞書がリアルタイムに追従できるよう、ワイドワード設計では、辞書のワードサイズの変更(例えば、256バイトの変更)が必要となる。単一ポート付きメモリに1つの変更を書き込むのにハードウェアで1クロックサイクルが必要であり、ワードサイズ(例えば、256バイト)の変更が行われていることを踏まえると、データと同じペースを保ち、データ損失を避けるために必要な数のメモリポートを得るには、この例では、256のメモリブロックが必要である。さらに、従来のFPGAには、ブロックランダムアクセスメモリ(BRAM:block random access memory)が搭載されているが、各BRAMのサイズは36Kビットと小さく、256の辞書ごとに複数のBRAMが必要となる。現行の最大規模のFPGAでも、これだけの数の辞書を効率的に実装するのに十分なBRAMをサポートしていない。ラインレートでデータを処理するワイドワード(例えばSIMD)実施態様では、辞書への追加ごとに1回のメモリ書き込み動作(operation)と、1回のメモリ読み出し動作が必要となり、各動作について、1クロックサイクルかかり、さらに、1つのメモリポート(つまり、合計2つのメモリポート)を使用するので、ワイドワードを読み出す際に算出される新しいマルチシンボルの圧縮後の符号ごとに、1回の変更が必要となる。
【0058】
BRAMはツインポートであるので、各クロックサイクルの1クロックにつき、書き込み動作と読み出し動作をそれぞれ1度しか実行できない。それゆえ、圧縮アルゴリズムには、複数のBRAM(より一般的には、複数のポート)が必要となる。複数のBRAMを搭載することで、いわゆる「メモリ待ち時間(memory latency)」が軽減されるので、各更新は単一クロックサイクルで別個のメモリポート経由で書き込むことができる。ただし、BRAM等のメモリの数がワイドワードの幅と同じ場合、メモリが少なくとも256個あり、各メモリには、新しい辞書エントリの1ワードサイズのみが含まれることになる。そのため、複数のメモリは、本質的に非コヒーレント(non-coherent:非同期式の)である。つまり、全メモリブロックはそれぞれ、複数のワードサイズのメモリにわたり分散された圧縮辞書で断片化される。より多くのクロックサイクルが利用できれば、メモリのコヒーレント(coherent)を保つことは可能かもしれないが、圧縮アルゴリズムの実時間制約を踏まえると、メモリの同期を別のアルゴリズムで行うことは困難である。
【0059】
こうした問題に対処するために、様々な実施形態では、シンボルワイドワード(SIMD)ごとの実装におけるメモリの断片化が問題とならない圧縮アルゴリズムを提供する。
図6は、代表的な実施形態に係る、単一回路で並列データ圧縮を可能とするよう構成されたワイドワードデータのシンボルの例を示す。
【0060】
図6を参照すると、シリアルストリーム620は、それぞれのワイドワードにシンボル(バイト)b0~b10を含む。理解される点として、シリアルストリーム620は、高速プロトコル(例えば、PCIe Gen6プロトコルでは最大16レーン)に従って、複数のレーンを介して受信される。説明を簡略化するために、各ワイドワードは、より一般的な実装となる256シンボルとは異なり、図示の例では4つのシンボルからなる。例えば、第1のワイドワードには、バイトb0、b1、b2、及びb3が含まれ、第2のワイドワードには、バイトb4、b5、b6、及びb7が含まれる。各シンボルは、例えば、8ビットを持つバイトと仮定する。従来の圧縮アルゴリズムでは、シリアルストリームを「現状のままで(as is)」圧縮する、つまり、各シンボルの後に、シリアルストリームの次のシンボルが続くように圧縮する。
【0061】
しかし、図示の実施形態では、従来の圧縮アルゴリズムのように、シリアルストリームの次のシンボルを使用するのではなく、データストリームは、クロックサイクルの次クロックにおけるデータストリームの次の4シンボルのワイドワードの同じ場所から各シンボルの後に次のシンボルが続く入力ストリームを提供するよう、配列される。つまり、ワイドワードごとにシンボルが4つある場合、参照番号630によって示されるシンボルのシリアルストリーム内の異なる濃淡で示されるように、圧縮に関して、シンボルが4つおきにグループ化される。したがって、この例では、バイトb0、b4、b8、...は、第1の辞書(D1)について、第1の入力ストリーム631を形成し、バイトb1、b5、b9、...は、第2の辞書(D2)について、第2の入力ストリーム632を形成し、バイトb2、b6、b10、...は、第3の辞書(D3)について、第3の入力ストリーム633を形成し、そして、バイトb3、b7、b11、...は、第4の辞書(D4)について、第4の入力ストリーム634を形成し、各ワイドワードは4つのシンボルを持つ。そして、第1~第4の辞書内の同じ場所のバイトのセット(すなわち、
図6に示す配列の各列)に対して、クロックサイクルごとに圧縮が行われる。より一般的には、第1番目~第n番目の辞書に対して圧縮が行われ、ここで、nはワイドワードあたりのシンボル数である。これにより、効果的に並列圧縮を行うことができる。
【0062】
言い換えれば、データストリームが「abcd efgh ijkl mnop」として表されるビットとして提供されると仮定する。上記入力の場合、従来のLZW圧縮アルゴリズムでは、例えば、或るワイドワードについては、連続した一意のペア「ab」、「bc」、及び「cd」、次のワイドワードについては、「ef」、「fg」、及び「gh」といった具合で、新しい辞書エントリが作成される。従来のLZW圧縮アルゴリズムでは、入力と同じ順番で、「a」「b」「c」「d」...といった具合で出力される。プロセスのどの段階であっても、2つ以上のシンボルを組み合わせて単一の新しい出力シンボル(符号)にすることで、マルチシンボルの文字列を圧縮できる場合、圧縮アルゴリズムがそれを実行することになる。これが発生すると、新しい圧縮後の符号が出力される前に、相当のギャップが出力に生じる。
【0063】
しかし、種々の実施形態によると、この場合も、説明の便宜上、ワイドワードのサイズを4シンボルと仮定すると、以下で考察するように、n>=0の場合、圧縮ステップごとに、(4n+i)番目のシンボル(i=0、1、2、又は3)が考慮される。この場合、新しい辞書エントリは、連続クロック、及び、それぞれの入力が異なる辞書をアドレス指定する4つの配列済み入力(1~4)を含むクロックサイクルごとに、別個のメモリで次のようにペアリングされる、したがって、
1)ae、ei、im、...
2)bf、fj、jn、...
3)cg、gk、ko、...
4)dh、hl、lp、...
【0064】
つまり、辞書の断片化されたメモリをサポートするために、各クロックサイクル「n」で全ての「(word_size*n+input_stream-1)」の値として、シンボルは、圧縮アルゴリズムへ効果的に提示される。そして、各シーケンスは、そのシンボルが以前に観測されたことがない場合には、新しい複数バイトのシンボルを作成する。この例のように、ワイドワードサイズが4の場合、圧縮アルゴリズムは、iの値ごとに1つずつ、別個に断片化された4つの辞書を使用して、全ての(4n+i)番目の値(i=0、1、2、3)について動作する。したがって、表1に示すように、4つのシンボルの4つのブロックが、「aeim」、「bfjn」、「cgko」、及び「dhlp」等、4つのメモリに符号化されることになる。データは、1つのメモリ「ユニット」について複数のストリームとして処理されるので、ストリームごとに1つの辞書(ハッシュテーブル)が処理される(例えば、各辞書には、1つ以上のFPGAメモリが含まれ得る)。
【0065】
【0066】
表1で示した配列の列を読むと、バイトのペア「ae」、「ei」、及び「im」が、連続したクロックサイクルにおける第1の辞書への入力である。最終クロックサイクルでは、文字「m」は、その列の最後のシンボルであり、さらに、後での圧縮に使用される新しいペアを形成するための後続シンボルがないので、第1の辞書に新しい辞書エントリを追加しない。同様に、バイト「bf」、「fj」、及び「jn」は、連続クロックサイクル等での第2の辞書への入力であり、バイト「cg」、「gk」、及び「ko」は、連続クロックサイクル等での第3の辞書への入力であり、バイト「dh」、「hl」、及び「lp」は4クロックサイクル以降の連続クロックサイクル等での第4の辞書への入力である。
【0067】
辞書Dの単純な実装では、i番目(i=0、1、...、word_size-1)の要素にD[i]が格納されるような配列が、使用され得る。しかし、辞書Dの文字列の長さは可変であるため、FPGAが提供する固定メモリ上では、単純な実装は、効率的でも、自明でもないはずである。辞書Dの単純なソフトウェア実装では、例えば、キーとして可変長文字列を、値として圧縮後の符号を持つ連想配列を使用可能であり、これは平衡バイナリツリー(balanced binary tree)として実装することができる。しかし、符号が既に知られているかどうかバイナリツリーにより確認するための各メモリ検索には、O(log(n))の動作(operation)が必要であり、ここで、nは格納されている文字列/整数のペアの数である。FPGA上でのリアルタイムの動作には、O(1)の動作が必要であり、つまり、FPGAが、リアルタイムのデータを単数又は複数の辞書Dに圧縮するクロックサイクルが1つしかないということである。さらに、FPGAでは、FPGAのプログラミング時にメモリサイズを定義、固定する必要があるので、可変長文字列をキーとしてFPGAに格納することは、簡単(nontrivial)ではない。逆に、復号化の場合、各圧縮後の符号語(キー)は、未知の可変長のバイト(値)の文字列を指すことができ、この場合もやはり、FPGAでは、簡単ではない。圧縮解除時には、クロックサイクルごとに1つの非圧縮(クリア符号)バイトを放出するよう、辞書Dの逆引き結果(reverse)(又は、反対からの参照結果)をFPGAに格納する。
【0068】
種々の実施形態によると、圧縮されるべきバイト列(sequence of byte)、つまり、可変長文字列は、プログラミング言語「C」の文字列である場合と同様に格納される。つまり、各バイト列は、リスト全体をトラバースできる(traversal)ようにするポインタと共に、複数文字の終端リストにNULL(ヌル)として格納される。これで、可変長文字列をFPGAに格納することに関する課題が解決される。バイト列(文字列)は、標準的な「C」プログラミング言語のように厳密な配列ではなく、各文字とともに格納されたリンクがそれぞれ、文字列の前文字を指す、単独のリンクリスト(singly linked list)のデータ構造と酷似したものである。このようなリンクリストのデータ構造は、「逆ポインタテーブル(reverse-pointer table)」と称することがある。この設計により、圧縮後の符号が、FPGAメモリ内の可変長パターンを損失又は誤りなく指し示すことができる。ハッシュテーブルには、単純なバイナリツリーではなく、むしろハードウェアでハッシュ関数を介してアクセスされる。ハッシュ関数と逆ポインタテーブルとの組み合わせは、クロックサイクルにつき1回の読み出しと、クロックサイクルにつき1回の書き込みが要求されるリアルタイムのメモリアクセスをサポートする。
【0069】
逆ポインタテーブルは、例えば、Xilinx, Inc社から入手可能なUltraScale+(商標)FPGAのUltraRAM等の高密度、シングルクロック、2ポート、同期メモリを有する少なくとも1つのFPGAを用いて実装可能である。しかし、理解すべき点として、本教示の範囲を逸脱することなく、以下で検討するUltraRAMと実質的に同じ機能を持つFPGA、及び関連RAMを、組み込むことができる。一般的に、UltraRAMは、FPGAで使用される従来型BRAMの8倍の記憶容量を持つので、従来型FPGAでは、例えば、本明細書で検討する256ワイドワードの設計で十分なBRAMを含むことができない。
【0070】
UltraRAMはFPGAのカラムナアーキテクチャ(columnar architecture)と互換性があるので、FPGAの複数のUltraRAMをインスタンス化し、FPGAの全ての高さ(entire height)に対し、1つの列において直接的にカスケードすることが可能である。UltraRAMは、FPGAの1つ以上の列に配列された288Kbの単一クロック同期メモリブロックを含み、各メモリブロックは、最大288Kビットのデータを格納できる4K×72ビットメモリブロックとして構成される。FPGAの単一クロック領域の列には、16個のメモリブロックが含まれる。
【0071】
各UltraRAMは2ポートを備え、いずれも各メモリブロックの4K×72ビット全てをアドレス指定する。単一のURAMには、前述のように、単一のBRAMの8倍の容量がある。これら2つのポートはそれぞれ独立して、クロックサイクルにつき1回の読み出し動作、又は1回の書き込み動作のいずれかを実行可能である。しかし、内部的には、FPGAのスタティックランダムアクセスメモリ(SRAM:static random-access memory)配列はシングルポートメモリセルを使用する。デュアルポートの動作は、単一クロックサイクルでの第1のポートの動作に続く、第2のポートの動作により実行され、第1のポート及び第2のポートは、単一クロック入力を共有する。
【0072】
FPGA上で事前に必要なO(1)の動作を実現するハッシュテーブル又は辞書を使用して、逆ポインタテーブルを実装することができる。全般に、辞書は、ハードウェアではハッシュテーブルで実装されるが、ソフトウェアではバイナリツリーで実装することができる。ハッシュテーブル(辞書)は、下の表2で示すように、番号テーブル及びデータテーブルという、2つの別個のサブテーブルを含む。番号テーブルの各要素は、行ごとに2つのエントリを持つデータテーブルで使用されたエントリの数を格納する。FPGAにおいて、符号化済みのシンボル(symbol)(文字列(a string))が既知であるか、又は、新たに符号を作成する必要があるかを判断する。これを行うために、各ハッシュエントリは、合計で最大36ビットのメモリの利用可能なセルストレージを使用して、必要に応じ、最大14ビットまで可能な最大12ビットの圧縮後の符号と、8ビット文字(文字列の末尾シンボル)と、文字列内の前シンボルへの同サイズの逆ポインタが必要である。
【0073】
各データテーブルは、例えば、並列に格納されたワイドワードデータについてハッシュ関数を実行するために、1つ(又は、2つ)のUltraRAMで実装され、各番号テーブルは、辞書インスタンスごとに2つ(又は、4つ)のBRAMで実装される。ハッシュサイズは、UltraRAMのアドレス空間(4K×72ビット)と一致しており、表2で示すように、データの72ビットを各メモリ位置で使用して、36ビットのエントリを2個形成することができる。それゆえ、UltraRAMのデータレイアウトは、例えば、8個のBRAMと同じ全メモリフットプリントを有するが、例えば、BRAMで必要とされる36ビットエントリ8個よりも「より狭く」、かつ、「より深く」なっている。
【0074】
【0075】
番号テーブルは、データテーブルの使用済み容量を示す。したがって、UltraRAMをデータテーブルに使用すると、ワードサイズ*UltraRAM(256UltraRAMの可能性があり、これは従来の大規模FPGAの約20%に相当)、及び、ワードサイズ*2*BRAM(512BRAMの可能性がある)が得られる。表2において、両列のエントリe
h、i(例えば、e
0,0、e
1,0、e
2,0、...、及びe
0,1、e
1,1、e
2,1、...)はそれぞれ、ポインタ(j)、圧縮中のシンボル文字列の末尾バイト、又は(x)、並びに、jとxから計算した逆ポインタという3つの値を含む構造体である。例えば、圧縮されるべき文字列が「cat」という単語であるとすると、エントリe
00は「t」であり、別のエントリへの逆ポインタである可能性がある。その逆ポインタは、「a」、及び更に別のエントリへの逆ポインタを持ち、さらに、その逆ポインタは、「c」、及びNULLへの逆ポインタを持ち得る。NULLは逆ポインタがないことを示し、それがマルチシンボルの文字列の始点であることを示す。この配列によって、辞書に含まれる文字列の長さが可変であるという問題が解決される。注目すべきは、表1の各列が、
図6の入力シンボルの文字列と等価であることである。例えば、表1の第1の列は、
図6の第1の辞書の第1の入力ストリーム631に相当し得る。同様に、表1の各列、ひいては、
図6の各入力ストリームについて、1つの表2が存在する。そのため、例えば、256ワイドワード設計(
図6の4ワイドワード設計とは異なる)では、256の表2の異なるインスタンスを効果的に提供するはずである。
【0076】
圧縮に関するもう1つの例として、1つの入力ストリーム(例えば、第1の入力ストリーム631)で圧縮されるべき文字列、ひいては、1つの辞書(例えば、第1の辞書)をアドレス指定する文字列は、「a b ab aba b」であり(スペースを入れないが、本明細書では、分かりやすくするためにスペースを入れてある)、この場合、LZW圧縮アルゴリズムに従って圧縮された文字列は、例えば、97 98 256 258 98となるはずである。最初の「a」、及び最初の「b」は、これらの文字の最初の出現であるので、これらを圧縮できないが、文字「a」と「b」が最初に観測された場合、符号256を使用する第1の辞書に新しいマルチシンボル文字列「ab」が追加され、次に、このストリームに2回目の「ab」の出現が見られた際、この新しい符号を2回目に出現した「ab」に割り当てることができるので、マルチシンボル文字列は単一の符号へと圧縮される。同様に、「ab」が最初に観測された際、辞書に値258を持つ新しい多文字コード「aba」を作成する機会が得られる。文字コード「ba」に値257が割り当てられたが、アルゴリズムは圧縮を自動で最大化するので、値258を持つ「aba」が優先されることに留意されたい。2回目の「aba」の出現が観測されると、この新しい符号をマルチシンボル文字列で使用することができる。注意すべき点として、「a」と「b」の出力は、ASCIIテーブルの文字「a」と「b」それぞれの(例示的)数値表記97と98に過ぎない。
【0077】
「ab」については、以前に出現した文字を含み、逆ポインタ:256、x:98、j:97を持つエントリが辞書に存在することになる。文字x:98(つまり、文字「b」)、そして、ポインタj:97(つまり、文字「a」)が、一時的に出力される。この場合、ポインタjは文字「a」を指しているに過ぎない。「a」と「b」が逆になっているので、圧縮解除すると、圧縮値256は「ab」になる。エントリは、辞書の行h(j=256,x=97)=512に出現し、他のハッシュ関数が以前に512を提供していなければ、e512,0になる可能性が高く、その場合、エントリはe512,1となるはずである。このようなことが再び起こると、競合が発生し、この新しいマルチシンボル文字列は辞書に追加されず(圧縮は1クロックサイクルで行う必要があり、本来であれば、競合(conflict)を処理する方法がいくつかある)、圧縮効率が若干悪化することになる。それゆえ、ハッシュ関数h(j,x)は、効率的である必要があり、この例では、競合の可能性を最小限に抑えるために、4096個のアドレス全てについて、均一にアクセスできるようにする必要がある。
【0078】
この例を続けると、「aba」については、以前に出現した文字を含み、逆ポインタ:258,x:97,j:256を持つエントリ(h(j,x)で算出)が辞書に存在することになる。文字x:97(つまり、文字「a」)、そして、ポインタj:256が、一時的に出力される。ポインタj:256は以前の場所に移動し、逆ポインタは256となる。この場合、上記と同じ手順に従うことで、前文字に追加される「ab」の出力を再び提供し、「aba」となる。ここでいう「aba」は、実は逆になっているのだが、この例では、問題はない。文字の順序が問題であれば、例えば、上記の「cat」という文字列の例では、圧縮解除時に順序が逆になるはずである。「aba」の出力は258である。最後の文字は単に「b」であり、これ以上連結する文字列がないので、出力は単に98(すなわち、文字「b」)となる。
【0079】
注目すべきは、UltraRAMがBRAMほど柔軟ではなく、高性能でもないので、データがクロックサイクルごとに1回の圧縮の動作でクロック/ラインレートに到達し、読み取り動作と書き込み動作との間で遅延が発生するたびに、新たな遅延が発生する可能性があることである。このリスクを軽減するために、新しい符号語の挿入(書き込み動作)と、データを圧縮するためにその符号語の想定される使用(読み取り動作)との間で、最大「n」個の新たなクロックサイクルを追加して、圧縮アルゴリズムを実行することができる。これにより、待ち時間が新たに発生しても、符号化と復号化のアルゴリズムが正しく動作することをもたらすが、例えば、従来のLZ77又はLZ78圧縮アルゴリズムと比較して、新しい符号語が「n」クロックサイクル後まで使用できないことにより、圧縮が若干低下し得る。
【0080】
表2を使用して実装されるハッシュ関数h(j,x)は、式(1)で実装される、式中、「>>」と「<<」はそれぞれ、ビット単位の右シフトと左シフトであり、「^」は、ビット単位の排他的論理和(XOR)演算、そして、「&」は、ビット単位のAND論理和を表している。
h(j,x)=((j>>4)^(j<<2)^(x<<4))&"0xFFF" 式(1)
【0081】
ハッシュ関数h(j,x)は、12ビットの逆ポインタ(j)と、8ビットの文字(x)という、2つの入力パラメータを有する。ハッシュ関数h(j,x)は、例えば、表2に行が示されているクロックサイクルごとに、新しい行を計算する。したがって、例えば、h(j=0,x=1)=16の場合、表2の番号テーブルの16行目が、アクセスされるはずである。行16の番号サブテーブルには、表2のデータサブテーブルで満杯になっているエントリ数に応じ、0、1、又は2のいずれかが含まれることになる。16行目が0、又は1であれば、e16,0、又はe16,1のいずれかに文字xが書き込まれる。行16が2である場合(つまり、この行は満杯である)、これは競合となり、この新しくハッシュされた文字列のエントリを追加できないことにより、この新しくハッシュされた文字列がデータストリームの後半で検出された場合には、最適な圧縮よりも若干悪化し得る。この文字は各シンボルであり、逆ポインタは、このシンボルを表1に示す配列にある以前のシンボルに関連付ける。ハッシュ関数h(j,x)は、BRAMを使用した場合の10ビットの出力アドレスとは異なり、12ビットの出力アドレス(例えば、4096の異なるアドレス)を持ち、全ての出力アドレスへと均一にアクセスすることができる。つまり、或る1つのアドレスが、他のアドレスよりも多くアクセスされないものとする。ハッシュ関数h(j,x)は、ビット演算のみを用いるので、ハードウェア、例えばFPGAでの実装が容易で、しかも、類似した文字列について異なるハッシュ値をリアルタイムに一貫して生成することが可能である。
【0082】
他のハッシュ関数と同様、衝突(collision)の可能性がある。衝突とは、異なる文字列が同じハッシュ値を持つことである。或る行の双方の場所が使用された場合、競合(conflict)が発生する(上述のとおり)、つまり、その文字列に対する新たな圧縮後の符号を辞書に追加することはできず、既存の小さい方の符号を使用しなければならない。これにより、想定されていた圧縮が或る程度損なわれるが、ハッシュの競合を解決しようとしても、単一クロックサイクルでは達成できない2回目の検索として、リアルタイムの動作が可能となる。
【0083】
図7は、代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、インターポーザ回路のキャプチャバッファに格納されるべきデータペイロードの並列データ圧縮を実行する方法を示す簡略流れ図である。
【0084】
図7を参照すると、並列データ圧縮を実行することは、ブロックS711において、高速データリンク130のPCIeレーン等の複数のシリアル高速データレーンにおけるインターポーザ回路120でそれぞれのデータペイロードを含む、TLP及び/又はDLLPのシンボルを受信することを含む。ブロックS712において、TLP及び/又はDLLPのシンボルを、クロックサイクルの各クロックに到着するワイドワードのシリアルストリーム(例えば、シリアルストリーム620)へとデスキューする。ブロックS713において、ワイドワードを、入力ストリーム(例えば、第1のストリーム631~第4の入力ストリーム634)へと配列する。各入力ストリームは、クロックサイクルの各クロックに到着する各ワイドワードの同じ場所からのシンボルを含み、これにより、各シンボルが、次のシンボルと共に正しい場所に配置され、最大256バイト以上の幅の入力ストリームを形成する。つまり、インターポーザ回路120は、クロックサイクルの各クロックで圧縮されるべきワイドワードを形成するために、高速プロトコルから提供される(最大)16レーンから一度に圧縮する256以上のデータシンボル(バイト)を取得し、デスキューすることができる。上記考察において、バイトとシンボルはそれぞれ8ビットと仮定しているので、ワイドワードと圧縮に関して、これらの用語は同じ意味で使われる。
【0085】
ブロックS714において、式(1)で示されるハッシュ関数を実施し、ポインタを前シンボルに提供するハッシュテーブルを使用して、配列後のシンボルを圧縮する。ブロックS715において、圧縮後のシンボルは、キャプチャバッファ125に格納される。高速データプロトコルに従ってデータペイロードを解析するために、インターポーザ回路120、及び/又は、プロトコルアナライザを実行するUIコンピュータ110(つまり、インターポーザ回路120、又はプロトコルアナライザを実行するUIコンピュータ110、あるいはそれらの両方)によって、圧縮後のシンボルを圧縮解除することができる。
【0086】
図7のブロックS711~S715を参照して上述したプロセスは、プロトコルドメイン固有の圧縮技術と称することもある。これは、情報を失うことなく、キャプチャバッファ125に格納するのに必要なデータ量を圧縮、又は削減するために、プロセスごとにプロトコル設計を利用するためである。また、インターポーザ回路120が、DUT140とホストコンピュータ150に関する「中間者」として動作しているため、プロトコルトラフィックをキャプチャし、処理する仕組みについて、何かしらの仮定がなされる場合がある。また、ホストコンピュータ150とテスト自体のユースケースは、忠実度を損なわずにデータを削減する仕組みと更に関係している可能性がある。
【0087】
前述のように、TLP及び/又はDLLPのデータペイロードについて、又は、データペイロードとヘッダの双方について、圧縮を実行することができる。データペイロードとヘッダの双方について圧縮を実行する場合、ワイドワードが全て、そのまま圧縮器に渡される。これまで考察したように、圧縮がデータペイロードのみについて行われる場合には、データ完全性フィールドの削除、及び既知のフィールドの削除等、ワイドワードのヘッダに関して格納されるデータ量を削減する他の手法を実行してから、その後、残りの部分に対して圧縮を実行する。一実施形態において、圧縮前にデータペイロードを新たな256バイト幅のワードに再編成して、効率を高めるために、ギャップを最初に削除してもよい。
【0088】
[圧縮解除]
種々の実施形態において、必要なときに、圧縮後のデータを圧縮解除することができる。圧縮解除では、圧縮段階から辞書のコピーにアクセスする必要はないが、辞書は使用することができる。むしろ、一般的に言えば、圧縮後のワイドワードデータ入力の圧縮解除には、ワイドワード圧縮後データを適切に順序付けられた圧縮後の符号の単一ストリームとして表記する、結合された圧縮後の出力ストリームのコピーのみが必要となる。圧縮後のデータのみが、USB又はイーサネットリンクを介してUIコンピュータ110へと送信され、圧縮後のデータと辞書の完全セットが共に送信されないので、このことは、とりわけ、UIコンピュータ110について有用である。
【0089】
途切れのない連続した単一シーケンス(ストリーム)として、圧縮後のデータを格納すると、最適なデータ記憶機構が得られる。しかし、シンボルを正しく復号化する上で、圧縮で生成されるデータの出力ストリームにおけるデータの順序が重要である。圧縮解除では、どの圧縮後のシンボルが、どの個々の元のワイドワード入力ストリーム(例えば、第1の入力ストリーム631~第4の入力ストリーム634)のそれぞれに属するかを特定できるようにする必要があり、こうすれば、圧縮後のシンボルを正しい辞書Di(i=0、1、2、...、wideword-1)にアドレス指定することができる。
【0090】
例えば、従来型LZW圧縮アルゴリズムでは、圧縮後のシンボルが生成されると、このシンボルは出力ストリームに書き込まれる。したがって、ワイドワードシステム用に適応しない場合、入力ストリームにそれぞれ対応する複数の出力ストリームを、途切れのない理想的な単一出力ストリームへと統合する際に、LZW圧縮アルゴリズム(及び、他の従来型圧縮アルゴリズム)では、順序情報が失われることになる。
【0091】
1つ以上の非圧縮シンボルを表す圧縮後のシンボルを作成すると、キャプチャバッファにおけるワイドワードの圧縮後の出力ストリームの順序が変わることになる。
図8は、説明目的で、上述の圧縮技術を用いて生成された圧縮解除用ワイドワードデータの入力のシンボルの例を示す図である。
【0092】
図8を参照すると、ワイドワードデータの第1の入力ストリーム811(入力ストリーム0)及び第2の入力ストリーム812(入力ストリーム1)が、圧縮用に入力される。第1の入力ストリーム811及び第2の入力ストリーム812は、例えば、
図6を参照してこれまで考察した第1の入力ストリーム631及び第2の入力ストリーム632と本質的に対応するが、便宜上、シンボルの番号は異なっている。第1の圧縮(中間)ストリーム821(圧縮後0)は、第1の入力ストリーム811について算出され、データが圧縮される時と、圧縮プロセス中にデータがキャプチャバッファに書き込まれる直前との中間ステップでの動作の順序を表す。同様に、第2の圧縮(中間)ストリーム822(圧縮後1)は、第2の入力ストリーム812について算出され、データが圧縮される時と、圧縮プロセス中にデータがキャプチャバッファに書き込まれる直前との中間ステップでの動作の順序を表す。途切れのない最終的な圧縮後の単一出力ストリーム830は、順番に格納されるデータに相当するが、以下で検討するように、キャプチャバッファは、圧縮後の第1のストリーム821におけるノーオペレーション(no-operation)(「NoOp」)エントリの存在により、圧縮解除目的用の出力シンボルのその後の順序が回復不能となるような順序付けとなっている。
【0093】
図8において、「bn」は、ストリーム「i」のn番目の場所のシンボルを示し、「Di」は、ストリーム「i」について対応する辞書、すなわち、i番目の辞書を示す。これまで検討した圧縮プロセスと同様、当初は、ワイドワードシンボルの各入力ストリーム(例えば、第1の入力ストリーム631~第4の入力ストリーム634)が、大きい方の辞書(D)自身の断片化された一部を使用して圧縮されていたので、ワイドワードシンボルのセットの各入力が、圧縮解除用に別々に処理される。そのため、圧縮解除時に同じ照合情報を使用する必要がある。
図8の例では、第1の入力ストリーム811のシンボルは、第1の辞書D1をアドレス指定し、第2の入力ストリーム812のシンボルは、第2の辞書D2をアドレス指定しなければならないといった具合のルールとなっている。
【0094】
一般的に、圧縮アルゴリズムの入出力は、動作(operation)の観点からデータを処理する。圧縮段階中では、1回の動作では、単一のクロックサイクル(ハード制約に相当する)を要し、入力データの処理はリアルタイムに行われる必要がある。しかし、圧縮解除段階中では、このようなハード制約はなく、つまり、必要であれば、単一の動作に2クロック以上かかることもあり得る。説明を簡単にするために、最初に、動作の観点から、圧縮解除プロセスについて説明し、次に、ハードウェア上のクロックサイクルに動作をマッピングする例を示す(例えば、FPGA、又はASIC)。
【0095】
途切れのない圧縮後の出力ストリーム830におけるシンボルの順序に関して、圧縮処理中にシンボルb5とb6が単一符号に圧縮されると、通常、
図8で示す例示的な圧縮処理により、第1の辞書D1を使用する第1の入力ストリーム811における場所b5(動作番号5)で出力をスキップさせることになる。このスキップは、第1の入力ストリーム811について、計算された圧縮後の第1のストリーム821のNoOpエントリで示される。一般的に、2つ以上の元の入力シンボルを表す新しい圧縮後の符号が放出されようとしているが、まだ放出されていない場合には、NoOpは発生する。これは、複数の入力シンボルを単一符号に圧縮した場合に発生する。例えば、元の2つの入力シンボルを圧縮すると1つのNoOpとなり、3つの入力シンボルを圧縮すると2つのNoOpとなる。したがって、入力シンボルが消費されるたびに、圧縮アルゴリズムは、その入力シンボルを圧縮できるかどうかをテストする。入力シンボルと一致する長いマルチシンボル文字列が既に知られている場合、入力シンボルをその長いマルチシンボル文字列で圧縮することができる。これが発生すれば必ず、その場所のシンボルがなくなるため、NoOpエントリが導入される。したがって、新たに結合された圧縮後のシンボルb5及びb6を表す新たな圧縮後の符号は、シンボルb6(動作番号6)になるまで、第1の入力ストリーム811の出力において放出されない。
【0096】
単一出力ストリームを伴う非ワイドワード圧縮では、新たなマルチシンボル文字列b5/b6が、依然として、途切れのない圧縮後の出力ストリームにおいてシンボルb4と直列に続く次のシンボルのままであるため、NoOpは問題ではない。つまり、圧縮する入力ストリームが1つであれば、並べ替え(reordering)が発生する可能性はなくなる。しかし、ワイドワード圧縮では、様々な入力ストリームを、途切れのない理想的な単一出力ストリームへと結合する際、1つ以上のNoOpによって、入力シンボルの順序が変わる場合がある。特に、キャプチャバッファ内のスペース効率に優れた最適なレイアウトには、途切れのない圧縮後の単一出力ストリームが必要である。
【0097】
図示の例において、圧縮後の第1のストリーム821にNoOpが存在することにより、圧縮後の単一出力ストリーム830は、正しく順序付けされていないキャプチャバッファ内のデータに相当する。図示のように、圧縮後の出力ストリーム830は、圧縮後の第1のストリーム821と圧縮後の第2のストリーム822との間で交互にシンボルを受信する。すなわち、圧縮後の出力ストリーム830は、圧縮後の第1のストリーム821からシンボルb1を、圧縮後の第2のストリーム822からシンボルb1を、圧縮後の第1のストリーム821からシンボルb2を、圧縮後の第2のストリーム822からシンボルb2を、といった具合で受信する。しかし、圧縮後の第1のストリーム821のNoOpエントリをスキップすることで、圧縮後の第2のストリーム822のシンボルb4の直後に、同じく圧縮後の第2のストリーム822からのシンボルb5が続き、そして、圧縮後の第1のストリーム821からのマルチシンボル文字列b5/b6が続くようになる。第1の入力ストリーム811が第1の辞書D1にアドレス指定され、そして、第2の入力ストリーム812が第2の辞書D2にアドレス指定されることを保証する順序が失われ、回復できないので、圧縮後の出力ストリーム830を圧縮解除用の入力として使用すると、各辞書のデータが元の順序で回復できなくなる。例えば、第2の入力ストリーム812を起点とする2つの隣接シンボルb4及びb5は、圧縮後の出力ストリーム830(円835で示す)において連続する場所で出現するので、交互に出現するシンボルがラウンドロビン(round robin)方式で交互のストリームを目指す場合、それらが異なる入力ストリームを起点とするものと、誤って仮定されるはずである。また、第1の入力ストリーム811を起点とするシンボルb5及びb6からのマルチシンボル文字列b5/b6は、第2の入力ストリーム812を起点とするシンボルb5の後で出現するものとする。それゆえ、ワイドワードで複数の入力ストリームからデータを復元することを支援するために、より予測しやすい順序が必要となる。
【0098】
1つの解決策としては、元の入力ストリーム(例えば、第1の入力ストリーム811、又は第2の入力ストリーム812)、及び各シンボルbnの関連する辞書を示す追加情報を含めることがある。追加情報により、正しい辞書Diをアドレス指定できるようになる。ただし、キャプチャバッファ内の途切れのない単一の出力ストリームへの圧縮中にデータがインターリーブされた後、別個の入力ストリームを識別するのに必要な追加情報の量まで、格納後のデータの量が増加するので、追加情報を含めることは、使用可能なデータストレージを最大化するという目的には逆効果となる。代替的には、辞書のデータをそれぞれ、別個の場所に配置して、辞書ごとに1ストライプずつ、圧縮後のデータの複数ストライプ(行)を効果的に作成することができる。ただし、1つのストライプで利用できるスペースを使い切ると、キャプチャプロセスが停止するので、この手法も最適ではない。つまり、或るストライプが満杯になると、一部にまだ空き領域がある場合でも、キャプチャバッファ内の他のストライプにそれ以上のデータを書き込むことはできない。
【0099】
これに対し、本明細書の実施形態によれば、圧縮後のデータは、マルチシンボル文字列の最初のシンボルが、(圧縮前に)本来出現する順序でキャプチャバッファに書き込まれるため、並べ替えが回避される。これは、圧縮中に途切れのない圧縮後の出力ストリームが作成されたときのシンボルの場所ではなく、途切れのない圧縮後の出力ストリームが非圧縮のマルチシンボル文字列である場合と同様に、途切れのない圧縮後の出力ストリームのシンボルの場所を使用することによって行われる。
【0100】
図9は、代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替える例を示す図である。
図9を参照すると、第1の入力ストリーム811からの2つの元の到着シンボルb5及びb6に相当する圧縮後のマルチシンボル文字列は、第1の到着シンボルb5の場所には書き込まれ、次の着信シンボルb6の場所には書き込まれない。つまり、
図8で見られるように、マルチシンボル文字列b5/b6は、動作番号5で書き込まれ、動作番号6では書き込まれない。この「最初に到着するシンボル」の並び替えを行うことで、キャプチャバッファに格納された圧縮後の出力ストリーム930からシンボルb5及びb6の元の順序を復元するのに十分な情報が保持される。結合されたマルチシンボル文字列b5/b6が復号化される際、マルチシンボルb5/b6が、第1の辞書D1に属することも分かっている、第1の入力ストリーム911に関する元の2つの非圧縮シンボルb5及びb6に相当するかについて、取得されたデータ符号に問い合わせることができる。そのため、順序は守られる。また、シンボルを早期に書き込むことはできず、他のストリームの残りのシンボルは、出力を並べ替える時間を稼ぐために一時バッファで遅延させることができる。
【0101】
具体的には、
図9は、ワイドワードデータの第1の入力ストリーム911(入力ストリーム0)及び第2の入力ストリーム912(入力ストリーム1)を示し、これらは、圧縮用に以下で提供される。第1の入力ストリーム911及び第2の入力ストリーム912は、
図6を参照してこれまで考察した第1の入力ストリーム631及び第2の入力ストリーム632とそれぞれ対応し得るが、便宜上、シンボルの番号は異なっている。
図9は、第1の入力ストリーム911について計算され、本実施形態に従って並べ替えられた圧縮後の第1のストリーム921(圧縮後0)と、第2の入力ストリーム912について計算された圧縮後の第2のストリーム922(圧縮後1)も更に示しており、データが圧縮処理中に途切れのない圧縮後の出力ストリーム930としてキャプチャバッファに書き込まれる前の中間ステップにおける動作の順序を表している。その後の圧縮解除は、圧縮後の出力ストリーム930について、既知の圧縮解除アルゴリズムに従って実行される。最終的な圧縮解除後のストリーム940は、圧縮後の第1のストリーム921にNoOpエントリが存在するにもかかわらず、正しく順序付けられた、圧縮解除後のデータを示している。
【0102】
図示の実施形態によると、ワイドワード用の圧縮後の出力ストリーム930は、非圧縮文字列の元の場所における第1のシンボルに基づいて、交互に出現する第1の入力ストリーム911及び第2の入力ストリーム912からの連続する圧縮後のシンボルが互いに続くよう、圧縮中に書き込まれる。元の到着シンボルを圧縮できない場合、このシンボルは、無関係に、正しい動作中に正しい場所で放出される。1つ以上のシンボルがマルチシンボル文字列に圧縮されると、最終的に圧縮アルゴリズムが作成された際に、マルチシンボル文字列の最終動作ではなく、マルチシンボル文字列の第1のシンボルに対応する第1の動作で作成された場合と同様に、圧縮後の符号が出現するよう、圧縮後の符号は一時的にバッファされてから、第1の到着シンボルの順序で放出される。このインターリーブでは、入力ストリームのいずれか1つの入力シンボルが新たなマルチシンボル文字列に圧縮されれば必ず、全ての入力ストリームのシンボルを放出する際に適切な遅延を追加する必要がある。
【0103】
例えば、本明細書で説明する例示的なデュアルワイドワードシステムでは(説明をしやすくするため)、圧縮後の出力は常に、第1の入力ストリーム911、次いで、第2の入力ストリーム912のように、一対単位で放出させる。さらに、複数のシンボルを1つの新たなマルチシンボル文字列に圧縮すれば必ず、この新たな圧縮後のシンボル符号は、新たな符号内の最初の初期/第1の圧縮前のシンボルの場所に書き込まれる。例えば、圧縮後のマルチシンボル文字列b5/b6は、動作番号5では、シンボルb5の場所に書き込まれ、動作番号6ではシンボルb6の場所には書き込まれない。したがって、図示の例では、圧縮後の出力ストリーム930は、シンボルb5の場所ではなく、シンボルb6の場所で計算された圧縮後のストリーム921にNoOpが存在することにより、代表的な実施形態に従って、正しく順序付けられたキャプチャバッファ内のデータを表している。
【0104】
図示のように、圧縮後の出力ストリーム930は、圧縮後の第1のストリーム921と圧縮後の第2のストリーム922との間で交互にシンボルを受信する。すなわち、圧縮後の出力ストリーム930は、圧縮後の第1のストリーム921からシンボルb1を、圧縮後の第2のストリーム922からシンボルb1を、圧縮後の第1のストリーム921からシンボルb2を、圧縮後の第2のストリーム922からシンボルb2を、といった具合で受信する。このインターリーブ後の処理は、圧縮後の第2のストリーム922からシンボルb4を受信した後で、圧縮後の第1のストリーム921からマルチシンボル文字列b5/b6を受信することと、圧縮後の第2のストリーム922からシンボルb5を受信することとを含めるように進む。次に、またしても、切り替えられたNoOpエントリについて検討しているが、圧縮後の出力ストリーム930には書き込まれず、したがって、次のシンボルは、第2のストリーム922からのシンボルb6であり、そして、圧縮後の第1のストリーム921のシンボルb7が受信され、その後、圧縮後の第2のストリーム922からシンボルb7が受信される。したがって、図示の順序では、圧縮解除後のストリーム940(この場合も、円935で示す)で見られるように、元の順序で各辞書のデータを復元可能であり、ワイドワードにおける複数の入力ストリームからデータを復元できる。とりわけ、圧縮後の第1のストリーム921からのシンボルb6(参照番号941で図示)は、圧縮後の第2のストリーム922からのシンボルb5の直後で正しく配置される。
【0105】
「最初に到着するシンボル」の並び替え(デインターリーブ(de-interleaving))を行うことで、データを正しい順序で再構成するのに必要とされる2つの前提情報を保持することができる。第1に、図示の例では、マルチシンボル文字列b5/b6は、第2の入力ストリーム912のシンボルb5の場所ではなく、第1の入力ストリーム911のシンボルb5の場所に到着したことが分かっているので、それゆえ、第1の辞書D1でアドレス指定される。第2に、マルチシンボル文字列b5/b6に関する取得されたデータを調べると、最終的に圧縮されない文字列の長さが、1シンボルを超えることが分かっている。したがって、圧縮後のマルチシンボル文字列b5/b6を復号化して、例えば、圧縮解除ストリーム940を得る場合、正しいタイミングが来たら、シンボルb5を先に書き出してから、シンボルb6を後で書き出すことになる。このようにして、シンボルb5とb6が共に、圧縮解除後の最終ストリーム940の正しい位置へと書き込まれる。さらに、マルチシンボル文字列b5/b6の最終的な長さは、非圧縮の2シンボルであることが分かっているので、圧縮後の出力ストリーム930の次の符号が属する辞書を算出できる。特に、FPGA(又は、ASIC)を用いたハードウェア実装では、以下で考察する逆ポインタ技術により、シンボルを逆順に並び替える。
【0106】
つまり、圧縮後の単一符号が複数の入力シンボルに相当する場合、本実施形態に従って、圧縮解除後のシンボルの長さと位置を算出することができる。図示の例では、圧縮後の出力ストリーム930のバイトb5の位置に2バイトが図示されている。この情報を使用して、圧縮解除後のストリーム940を提供するために、他のインターリーブ後の入力ストリーム全ての圧縮解除後のシンボルを正しく読み取る方法を計算できる。
【0107】
図10及び
図11は、代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるその他の例を示す図である。
図10を参照すると、マルチシンボル文字列b5/b6は、圧縮後の第1のストリーム及び第2のストリーム(図示せず)のそれぞれにおいて、シンボルb5の位置にあるものと仮定する。したがって、圧縮後の出力ストリーム1030は、圧縮後の第2のストリームからのシンボルb4に続いて、圧縮後の第1のストリームからマルチシンボル文字列b5/b6を受信し、さらに、圧縮後の第1のストリームからのマルチシンボル文字列b5/b6に続いて、圧縮後の第2のストリームからマルチシンボル文字列b5/b6を受信する。それゆえ、圧縮解除後の後続ストリーム1040は、圧縮後の第1のストリームからのシンボルb6(参照番号1041で図示)及び圧縮後の第2のストリームからのシンボルb6(参照番号1042で図示)が、圧縮後の第2のストリームからのシンボルb5の直後に正しく配置されていることによって示されるように、正しい順序を備える。
【0108】
図11を参照すると、結合された圧縮後のシンボルb5、b6、及びb7を示すマルチシンボル文字列b5~b7は、圧縮後の第1のストリーム(図示せず)内のシンボルb5の位置にあると仮定する。したがって、圧縮後の出力ストリーム1130は、圧縮後の第2のストリームからのシンボルb4に続いて、圧縮後の第1のストリームからマルチシンボル文字列b5~b7を受信し、引き続き更に、マルチシンボル文字列b5~b7に続いて、圧縮後の第2のストリームからシンボルb5、b6、及びb7を受信する。それゆえ、圧縮解除後の後続ストリーム1140は、圧縮後の第1のストリームからのシンボルb6(参照番号1141で図示)が、圧縮後の第2のストリームからのシンボルb5の直後に正しく配置され、さらに、圧縮後の第1のストリームからのシンボルb7(参照番号1142で図示)が、圧縮後の第2のストリームからのシンボルb6の直後に正しく配置されることで示されるように、正しい順序を備える。
【0109】
FPGA(又は、ASIC)を用いたハードウェア実施態様では、使用できるメモリが限られるため、複数長の文字列(マルチシンボル文字列)を効率よく格納するために逆ポインタ技術が利用されている。それゆえ、圧縮解除を確実に行うために、例えば、表2を参照して、これまで検討した圧縮段階中、複数の辞書用の逆構造体を作成する必要がある。
【0110】
図12は、代表的な実施形態に係る、圧縮解除のための逆構造体を作成する方法を示す流れ図である。全般に、逆構造体の作成には、4つの復号プロセスが必要であるが、復号後の各出力シンボル(バイト)に対する各復号プロセスを1回の処理と見なしてもよい。各動作は、(i)途切れのない圧縮後の出力ストリームの圧縮後の符号を読み取り、この圧縮後の符号で表される非圧縮シンボルを放出すること、又は、(ii)圧縮後の符号がマルチシンボル文字列で表される場合、文字列が全て書き出されるまで、マルチシンボル文字列内の個々のシンボルを1つずつ正しい順序で放出することのいずれかを含む。
【0111】
図12を参照すると、ステップS1201において、ワイドワードの到着入力シンボルのそれぞれについて、メモリ構造のインスタンスを作成する。メモリ構造のインスタンスの例を、以下の表3Aに示す。表3Aは、各入力辞書Diの圧縮辞書の逆引きであり、1バイトの基本値(例えば、値0~255)を適切な文字コード値及び逆ポインタと関連付けたものである。注目すべきは、0~255バイトの逆ポインタがNULLエントリであることで、これらのバイトは常に、複数シンボル文字列で想定される第1のバイト(又は、文字)であることを示している。したがって、表3Aは、圧縮後の出力ストリームを圧縮解除する際に形成され得る、想定される全ての複数シンボル文字列の第1の想定文字のみを示している。
【0112】
【0113】
ステップS1202では、上述の第1の到着シンボル並び替えプロセスを使用して、辞書ごとの別個の入力ストリームに関する文字コードを途切れのない圧縮後の出力ストリームから繰り返し読み込んで、表3Bを作成する。
【0114】
【0115】
図9の例を参照すると、第1の入力ストリーム911及び第2の入力ストリーム912の双方に対して、途切れのない圧縮後の出力ストリーム930に圧縮後の符号が提供される。この符号のストリームでは、圧縮後の符号は、第1の入力ストリーム911及び第2の入力ストリーム912のそれぞれ(ひいては、第1の辞書D1及び第2の辞書D2のそれぞれ)について、表3Bの別コピーへと追加される。効率化のため、入力ストリームと同数の演算を並列に実行することができる。
図9では、入力ストリームが2つあるので、2つの演算を同時並列的に行うことができる。
【0116】
単一入力ストリーム(第1の入力ストリーム)に関するより詳細な例を以下で説明し、最終的な途切れのない圧縮後のストリームの読み取り方法、及び圧縮後の符号の圧縮解除方法を示すことにする。結合されたインターリーブ後の最終的な途切れのない圧縮後のストリームの第1の入力ストリームの一部は、第1の辞書(D1)を使用して元の入力ストリームに関する圧縮後の符号を含む。例として、第1の入力ストリームには、シンボル(バイト)「cacatcat」が含まれ、この例では、圧縮後の符号「99、97、256、116、258」へと圧縮することができる。前述したように、既知のASCIIテーブルを使用して単一バイト値から文字を変換できるため、表3Aはメモリ内では必要ない。したがって、例えば、ASCII表によれば、「c」=99、「a」=97、「t」=116である。圧縮後の符号256と258は値が255より大きいので、これらはマルチシンボル文字列であり、表3Bに格納される。圧縮後の符号は、第1の入力ストリームについて、途切れのない圧縮後の出力ストリームから反復して取得され得る一方、対応する圧縮後の第2の入力ストリームでは、表3Bの別のインスタンス(図示せず)について、同じ動作が並列して実行されるといった具合である。さらに、このプロセスでは、第2の辞書(D2)を使用して第2の入力ストリームを復号化するのに必要なデータを作成する。
【0117】
本例の第1の入力ストリームに関して、ステップ1202の反復的な検索プロセスは、最初に、圧縮後の出力符号の圧縮後の符号99を読み取ることと、さらに、255の後で次に使用可能なロケーション(addr)の表3B(図の例では、ロケーションaddr=256)に逆ポインタ値99を追加することを含む。次に、圧縮後の符号99のaddr=99における「c」という文字コードを検索し、圧縮後の符号256のaddr=256に格納する。
【0118】
このプロセスは、他の圧縮後の符号についても継続される。つまり、反復的な検索プロセスには、圧縮後の符号97を読み取ることと、次に使用可能なロケーションaddr=257(addr=256の次の場所)での表3Bに逆ポインタ値97を追加することと、「a」というaddr=97の文字コードを検索し、addr=257に格納することとも更に含まれる。そして、このプロセスには、圧縮後の符号256を読み取ることと、次に使用可能なロケーションaddr=258での表3Bに逆ポインタ値256を追加することと、「c」というaddr=256の文字コードを検索し、addr=258に格納することとも含まれる。注目すべきは、このようにして、addr=258は、255より大きい逆ポインタの値を有しており、この場合、後述のように、次の演算は、第1の入力ストリームに関する新たな圧縮後の符号を読まないが、逆ポインタを辿って、第1の入力ストリームに関する次の演算で取るべき動作を決定することである。そして、このプロセスには、圧縮後の符号116を読み取ることと、次に使用可能なロケーションaddr=259の表3Bに逆ポインタ値116を追加することと、「t」というaddr=116の文字コードを検索し、addr=259に格納することとも含まれる。
【0119】
ステップ1203において、第1の入力ストリームと第1の辞書について、途切れのない圧縮後の出力ストリームの各圧縮後の符号の逆ポインタを反復して辿ることにより、圧縮解除後の中間出力ストリームを形成する。圧縮解除後の中間出力ストリームは、一時バッファに格納可能である。この説明では、表3Bは、FPGA上のBRAM又はURAMメモリに格納された、又は、ASIC上のデュアルポートSRAMに格納された2つの単一アドレスのデュアルポートメモリ構造とみなすことができる。各演算の出力は1文字とする。
【0120】
第1の入力ストリームについて実行される反復プロセスの結果として、NULLエントリに逆ポインタとして達するまで逆ポインタのチェーンを辿ることで、各シンボル文字列の非圧縮出力を決定可能であり、この場合、NULLエントリはマルチシンボル文字列の先頭を示す。逆ポインタをトラバースしている間、復号化後の各マルチシンボル文字列の長さは、第3のBRAM又はFPGAの「分散メモリ」であり得る、別個のメモリ配列Lに記録されるが、この場合、メモリ配列L[0]には、第1の文字列の長さ、L[1]には、第2の文字列の長さといった具合に、文字列の長さが記録される。動作ごとに1つの文字コードが放出される。このように逆ポインタを辿ることで、マルチシンボル文字列は一時キューに前後逆に書き出され、後述するステップS1204で逆順にされる。
【0121】
本例では、圧縮後の符号「99、97、256、116、258」を圧縮解除()する第1の圧縮後の符号は、圧縮後の符号99である。表3Aを見ると、ロケーションaddr=99は、逆ポインタがNULLで、文字コードが「c」であることを示す。これは、1文字コードなので、文字列の長さはL[0]=1である。文字コード「c」が出力されるので、それゆえ、第1の入力ストリームと第1の辞書の一時出力ストリームには、「c」が含まれることになる。
【0122】
次に圧縮解除する圧縮後の符号は、圧縮後の符号97である。表3Aを見ると、ロケーションaddr=97は、逆ポインタがNULLで、文字コードが「a」であることを示す。文字列の長さはL[1]=1である。文字コード「a」が出力されるので、これで、第1の入力ストリームと第1の辞書の一時出力ストリームには、「ca」が含まれることになる。
【0123】
次に圧縮解除する圧縮後の符号は、圧縮後の符号256である。addr=256は表3Aの最終アドレス(addr=255)より大きいので、表3Bを使用する。表3Bを見ると、ロケーションaddr=256は、逆ポインタが非NULLで、99の値を備えることを示している。したがって、アドレス値i+1(すなわち、256+1=257)の第1の文字コードを読み出して、出力する。ロケーションaddr=257は、第1の文字コードが「a」であることを示す。ロケーションaddr=256の逆ポインタ値99の後にaddr=99が続き、これは、逆ポインタがNULLで、第2の文字コードが「c」であることを示す。したがって、圧縮後の符号256の逆ポインタをNULLエントリに達するまで辿ることで、第1の文字コード「a」及び第2の文字コード「c」が、マルチシンボル文字列「ac」として出力されることになる。文字コードが2つあるので、この文字列の長さはL[2]=2である。注目すべき点として、圧縮後の符号256の2つの文字コードが共に出力されるまで、第1の入力に関する次の圧縮後の符号は、次の反復では途切れのない圧縮後の出力ストリームから読み出されない。これで、第1の入力ストリームと第1の辞書の一時出力ストリームは、「caac」を含むようになった。
【0124】
次に圧縮解除する圧縮後の符号は、圧縮後の符号116である。表3Aを見ると、ロケーションaddr=116は、逆ポインタがNULLで、文字コードが「t」であることを示す。文字列の長さはL[3]=1である。文字コード「t」が出力されるので、これで、第1の入力ストリームと第1の辞書D1の一時出力ストリームには、「caact」が含まれることになる。
【0125】
次に圧縮解除する圧縮後の符号は、圧縮後の符号258である。この場合もやはり、addr=258は表3Aの最終アドレスより大きいので、表3Bを使用する。表3Bを見ると、ロケーションaddr=258は、逆ポインタが非NULLで、256の値を備えることを示している。したがって、アドレス値i+1(すなわち、258+1=259)の第1の文字コードを読み出して、出力する。ロケーションaddr=259は、第1の文字コードが「t」であることを示す。ロケーションアドレス258の256の逆ポインタ値がaddr=256に続き、これもまた非NULLである(上述のとおり)。したがって、アドレス値i+1(すなわち、256+1=257)の第2の文字コードを読み出して、出力する。ロケーションaddr=257は、第2の文字コードが「a」であることを示す。addr=256の逆ポインタ値99の後にaddr=99が続き、この場合、逆ポインタがNULLで、文字コードは、第3の文字コードの「c」である。したがって、圧縮後の符号258の逆ポインタをNULLエントリに達するまで辿ることで、第1の文字コード「t」、第2の文字コード「a」及び第3の文字コード「c」が、マルチシンボル文字列「tac」として出力される。文字コードが3つあるので、この文字列の長さはL[4]=3である。これで、第1の入力ストリームと第1の辞書の一時出力ストリームは、「caacttac」を含むようになった。また、それぞれのサブレングス(sub-length)は、L[0]=1、L[1]=1、L[2]=2、L[3]=1、及びL[4]=3である。この情報により、「c」、「a」、「ac」、「t」、及び「tac」の文字列を逆の順序にして、正しい順序が得られる。
【0126】
ステップS1204において、一時バッファからの圧縮解除後の中間出力ストリーム中のマルチシンボル文字列の文字コードの順序を逆にすることにより、第1の入力ストリームと第1の辞書の圧縮解除ストリームを形成する。例えば、圧縮後の符号256では、「ac」が「ca」となり、圧縮後の符号258では、「tac」が「cat」となる。これは、ハードウェアの構造体が逆ポインタを保持しているため、したがって、複数バイトを符号化する圧縮後のシンボルでは、逆の順序になった文字列を並べ替える必要があるためである。この例では、「tac」のような3つの元の文字を符号化するシンボルが、逆方向の3回の動作サイクルにわたって、正しい文字列「c」、次に「a」、次に「t」のように放出され、「cat」が得られる。それゆえ、ステップ1204において、一時バッファのマルチシンボル文字列を繰り返し逆の順序にして、「c」、「a」、「ca」、「t」、及び「cat」へと到達させ、出力後の非圧縮ストリームを形成する。マルチシンボル文字列は、値が1より大きいそれぞれの長さL[n]に従って逆の順序にされる。
【0127】
ハードウェア(例えば、FPGA、又はASIC)では、1回の動作で1文字が放出される。したがって、動作の観点から、ステップS1201は、ステップS1203に相当する動作より、1動作先に実行され得る。すなわち、ステップS1201の演算が完了してから、ステップS1203に相当する動作を試みる必要がある。なお、ステップS1203で逆ポインタが辿られるたびに、このマルチシンボル文字列に関する格納済みの長さが増分される。この長さ情報は、ステップS1204で適用される。
【0128】
長さの値の更新と格納は1回の動作を要するが、ステップS1203で行う全計算における他の動作と同時に更新することも可能である。いずれにしても、ステップS1203で逆の順序にされたマルチシンボル文字列の最後の文字が算出されるまでは、長さ配列の情報を使用して、マルチシンボル文字列の最初の逆の順序にされていない文字を放出することはできない。したがって、ステップS1204は、ステップS1203の同等の動作の後、少なくとも「Llongest」の動作が発生する。ここで、「Llongest」とは、最も長い長さLの文字列である。
【0129】
ステップS1202は、ステップ1203の直前で、このステップと重複するパイプラインで実行される。つまり、ステップ1203は、入力ストリーム[n-1]を計算し、ステップ1202では、入力ストリーム[n]を計算している。すなわち、ステップ1202の圧縮後の符号を全て計算してから、ステップ1203の同じ圧縮後の符号へと移行する。ステップ1204は重複しているが、最長のマルチシンボル文字列の長さで決まるいくつかの演算により遅延する。
【0130】
ハードウェアでは、データを圧縮解除する際に使用するモデルは、キャプチャバッファをスキャンし、データから対象ポイントを検索する。検索時間は、キャプチャ時間ほどタイムクリティカルではないので、必要に応じて、各圧縮解除動作に1クロックサイクル以上かかる場合がある。それゆえ、圧縮解除にかかる時間に対する制約は、圧縮の場合よりも緩和され得る。
【0131】
複数の入力ストリームを並列処理する場合、255を超える圧縮後の符号では、圧縮後の文字列がマルチシンボル文字列となるため、圧縮後の文字列の長さを1より長くする必要がある。同様に、逆ポインタを辿る場合、255より大きい値は、少なくとももう1文字読まなければならないことを意味する。文字列がまだ十分に復号化されていない場合でも、圧縮後の符号がマルチシンボル文字列であると分かれば、次の動作で入力ストリームの次の圧縮後の符号を読み取るべきではないと判断するのに十分な情報が得られる。その代わりに、次のワイドワード入力を読み取る次の動作では、同じワイドワード入力の次の圧縮後の符号を読み取るのではなく、逆ポインタを辿って、次の動作中に出力すべき次の文字を取得する。つまり、マルチシンボル文字列が作成されると、複数の入力から作成された圧縮後の符号の途切れのない圧縮後のインターリーブされた出力ストリームを読み取り、複数の辞書Diをアドレス指定する際に考慮する必要のある、1つ以上のNoOpが存在することになる。
【0132】
要するに、表3Bでは、0~255の間の値を持つ逆ポインタは、次のシンボルがマルチシンボル文字列の最後であることを示し、さらに、プロセスは、現在の入力ストリームと辞書に関する次の入力圧縮後の符号に進む必要がある。ただし、値が255より大きい逆ポインタは、後続の逆ポインタが少なくとも1つあることを示す。次の反復の後、入力ストリームの前ステップの逆ポインタがNULLでない場合、圧縮中に別のNoOpが生成されているので、入力ストリームに関する途切れのない圧縮後の出力ストリーム内の次の圧縮後の符号を読み取るべきではない。そのため、次の圧縮後の符号を読むのではなく、逆ポインタを再び辿って、出力すべき文字コードを抽出する。同様に、後続の逆ポインタも非NULLである場合、出力されるべきマルチシンボル文字列に更に別の文字があることを示している。ただし、逆ポインタがNULLの場合、マルチシンボル文字列内の結合されたシンボルは全て抽出されており、プロセスは現在の入力ストリームと辞書の次の入力圧縮後の符号に進む必要がある。
【0133】
ワードサイズの動作を並列に実行する場合、該当入力ストリームの前の圧縮後の符号が単一文字コードで表される限り、各動作「i」で、次の入力ストリームについて、次の文字コードが読み取られる。そうでない場合、入力ストリームの前の文字コードがマルチシンボル文字列であれば、単一の反復「i」の終了を示すワイドワードの同じ入力ストリームに戻るまで、次の代替入力ストリームからの次の文字コード、又は、次の入力ストリームへのスキップのいずれかを優先させて、文字コードの読み取りをスキップするといった具合であり、この場合もやはり、必要に応じて、入力ごとに文字コードが読み込まれるか、又は、入力と辞書ごとにマルチシンボル文字列が出力される。注目すべきは、各入力ストリーム/辞書の組み合わせi=0における最初の文字コードが、常に単一の文字を表すということである。このようにして、圧縮後の出力ストリームの文字コードが、ラウンドロビン方式で読み取られる。
【0134】
図10と
図11の例では、ワイドワードのワードサイズが2であるため、ペアワイズ(pair-wise:一対単位)方式で反復が行われる。
図13A~
図13Cも同様に、代表的な実施形態に係る、圧縮用の複数のワイドワード入力のシンボルを順序付けする例を示しており、ここで、ワイドワードサイズは、2である。
【0135】
図13Aを参照すると、圧縮されるべきシリアルストリーム1320は、シンボル「ccbaccbactbccadt」を含む2つのワイドワードで、16個のシンボル(バイト)を含む。参照番号1330で示すシンボルのシリアルストリームにおける異なる濃淡で示されるように、シリアルストリーム1320は、1つおきのシンボルが2つのワイドワードの一方に割り当てられるように配列される。したがって、第1の辞書(D1)用のシンボル「cbcbcbcd」を持つ第1の入力ストリーム1331と、第2の辞書(D2)用のシンボル「cacatcat」を持つ第2の入力ストリーム1332とを含む、別々の入力ストリームへの圧縮の観点から、他のシンボルは全て、グループ化される。注目すべきは、第2の入力ストリーム1332は、表3A及び表3Bを参照して、これまで考察した例示的な第1の入力ストリームと同じであることである。
【0136】
上記の圧縮に関する実施形態に従って、cc1~cc8で示される8クロックサイクルで第1の入力ストリーム1331及び第2の入力ストリーム1332について、並列圧縮を実行する。第1の入力ストリーム1331及び第2の入力ストリーム1332は、例えば、既知のASCIIテーブルを使用して圧縮され得る。第1の入力ストリーム1331を圧縮すると、圧縮後の第1のストリーム1341(圧縮後0)が得られ、第2の入力ストリーム1332を圧縮すると、圧縮後の第2のストリーム1342(圧縮後1)が得られる。図示の例では、圧縮後の第1のストリーム1341は圧縮符号「99、98、NoOp、256、NoOp、NoOp、258、100」を含み、圧縮後の第2のストリーム1342は圧縮符号「99、97、NoOp、256、116、NoOp、NoOp、258」(前述)を含む。
【0137】
図13Bを参照すると、圧縮後の第1のストリーム1341及び第2のストリーム1342は、第1の到着シンボルの並び替えに従って並び替えられ、一時バッファに格納されるので、前述のように、マルチシンボル文字列は、複数シンボルのグループ内の第1のシンボルの位置に再配置される。とりわけ、圧縮後の第1のストリーム1341では、圧縮後の符号256で表されるマルチシンボル文字列を第4の位置から第3の位置に移動して、NoOpエントリを右方向に1つシフトし、圧縮後の符号258を第7の位置から第5の位置に移動して、NoOpエントリを右方向に1つシフトすることで、並べ替えられた圧縮後の第1のストリーム1341’(圧縮後0’)が得られる。圧縮後の第2のストリーム1342では、圧縮後の符号256で表されるマルチシンボル文字列を第4の位置から第3の位置に移動して、NoOpエントリを右方向に1つシフトし、圧縮後の符号258を第8の位置から第6の位置に移動して、NoOpエントリを右方向に1つシフトすることで、並べ替えられた圧縮後の第2のストリーム1342’(圧縮後1’)が得られる。注目すべきは、圧縮後の第2のストリーム1342の圧縮後の符号256及び258は、圧縮後の第1のストリーム1341の圧縮後の符号256及び258とは異なる文字コードを含むことである。
【0138】
並び替えられた圧縮後の第1のストリーム1341’と圧縮後の第2のストリーム1342’から順番にシンボルを交互に入力することで、圧縮後の最終的な出力ストリーム1350が形成される。NoOpエントリは、この処理から除外されるため、圧縮後の出力ストリーム1350は、途切れのないものとなる。したがって、並べ替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号258は、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号256の直後に続き、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号258は、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号116の直後に続き、さらに、並べ替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号100は、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号258の直後に続く。
【0139】
図13Cを参照すると、代表的な実施形態に従って、圧縮後の出力ストリーム1350に対する圧縮解除を実行して、圧縮解除後のストリーム1360を提供し、圧縮解除後のストリーム1360は、
図13Aで示される元のシリアルストリーム1320と一致する。圧縮解除は、図示の構成で左から右への反復的な演算で行われる。圧縮後の出力ストリーム1350は、
図13Cの上部に示されており、ここで、便宜上、対応するアドレスを有するシンボル及びマルチシンボル文字列を示すブロックは、分けられている。これまで考察したように、対応する文字コード(複数の場合もある)を決定するためのそれぞれの逆ポインタを使用して、一連の反復的な復号化の動作で圧縮解除を実行し、圧縮解除後の中間ストリーム1355を形成し、これを一時バッファに格納することができる。圧縮解除後の最終ストリーム1360は、圧縮後の出力ストリーム1350の各マルチシンボル文字列の文字コードの順序を逆転させることで形成される。
【0140】
便宜上、
図13Cの圧縮解除後の中間ストリーム1355の全体が示されており、全復号処理(overall decoding process)、及び復号後の文字コードの順序が示されている。ただし、復号後の文字コードを圧縮解除後の最終ストリーム1360に入力する次ステップに進む前に、圧縮解除後の中間ストリーム1355全体が、必ずしも形成されるとは限らない。つまり、いくつかの実施形態において、圧縮解除後の中間ストリーム1355を構築する際、圧縮解除後の中間ストリーム1355の復号済み文字コードを、圧縮解除後の最終ストリーム1360へと区分的に提示可能であり、これによって、中間の圧縮解除に必要な一時バッファのサイズが削減される。例えば、復号後の各文字コードは、対応する逆ポインタがNULLの場合、圧縮解除後の中間ストリーム1355から圧縮解除後の最終ストリーム1360へと入力可能である。前述のように、null(ヌル)の逆ポインタに到達するには、マルチシンボル文字列の複数の復号化ステップ(及び、圧縮解除後の最終ストリーム1360に入力するときの順序の逆転)が必要である。
【0141】
図示の例では、並び替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号99は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1355の先頭位置には文字コード「c」が出力される。並び替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号99は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1355の次位置には文字コード「c」が出力される。並び替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号98は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1355の次位置には文字コード「b」が出力される。並び替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号97は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1355の次位置には文字コード「a」が出力される。これらそれぞれの文字列の長さをL=1と表記している。
【0142】
並べ替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号256は、マルチシンボル文字列「bc」を提供しており、圧縮後の符号256は、文字コード「b」と、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。したがって、並び替えられた圧縮後の第1のストリーム1341’を伴う次の2回の演算にわたって、文字コード「b」が、圧縮解除後の中間ストリーム1360の次位置に出力され、さらに、文字コード「c」が、次の位置をスキップした直後の位置へと出力される。(後述するように、その後、圧縮解除後のストリーム1360を形成する際、文字コード「b」と「c」の順序が入れ替わる)。同様に、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号256は、マルチシンボル文字列「ac」を提供しており、ここで、圧縮後の符号256は、文字コード「a」と、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。したがって、並び替えられた圧縮後の第2のストリーム1342’を伴う次の2回の演算にわたって、文字コード「a」が、並び替えられた圧縮後の第1のストリーム1341’の圧縮後の符号256から、文字コード「b」に続けて、圧縮解除後の中間ストリーム1355の次の位置に出力され、さらに、文字コード「c」が、次の位置をスキップした直後の位置へと出力される。これらそれぞれの文字列の長さをL=2と表記している。注目すべきは、復号後の圧縮後の符号が、圧縮解除後の最終ストリーム1360に入力され得るタイミングを決定するために、文字列長の値Lを使用できることである。
【0143】
次に、並べ替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号258は、マルチシンボル文字列「cbc」を提供しており、ここで、圧縮後の符号258は、文字コード「c」と、文字コードが「b」の256への逆ポインタと、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。したがって、並び替えられた圧縮後の第1のストリーム1341’を伴う次の3回の演算にわたって、文字コード「c」が、圧縮解除後の中間ストリーム1355の次の位置に出力され、文字コード「b」は、その次の位置をスキップした直後の位置に出力され、さらに、文字コード「c」が、次の位置をスキップした直後の位置へと出力される。一方、並び替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号116は、NULLへの逆ポインタを持つので、文字コード「t」は、圧縮後の符号258から最初に出現した文字コード「c」の次の圧縮解除後の中間ストリーム1355の位置に出力される。圧縮後の符号258の文字列の長さをL=3、圧縮後の符号116の文字列の長さをL=1として示している。
【0144】
最後に、並べ替えられた圧縮後の第2のストリーム1342’からの圧縮後の符号258は、マルチシンボル文字列「tac」を提供しており、圧縮後の符号258は、文字コード「t」と、文字コードが「a」の256への逆ポインタと、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。したがって、並び替えられた圧縮後の第2のストリーム1342’を伴う次の3回の動作にわたって、文字コード「t」は、並び替えられた圧縮後の第1のストリーム1341’の圧縮後の符号258から、文字コード「b」に続けて、圧縮解除後の中間ストリーム1355の次の位置に出力され、文字コード「a」は、次の位置にスキップした直後の位置に出力され、さらに、文字コード「c」は、次の位置をスキップした直後の位置へと出力される。一方、並び替えられた圧縮後の第1のストリーム1341’からの圧縮後の符号100は、NULLへの逆ポインタを持つので、文字コード「d」は、圧縮後の符号258からの文字コード「a」の次の圧縮解除後の中間ストリーム1355の次の位置に出力される。圧縮後の符号258の文字列の長さをL=3、圧縮後の符号100の文字列の長さをL=1として示している。
【0145】
圧縮解除後のストリーム1360は、マルチシンボル文字列内のそれぞれの文字コードの順序を逆にすることで、圧縮解除後の中間ストリーム1355から形成される。図示の例では、並び替えられた圧縮後の第1のストリーム1341’のマルチシンボル文字列は、文字コード「bc」に関する圧縮後の符号256と、文字コード「cbc」に関する圧縮後の符号258とを含み、さらに、並び替えられた圧縮後の第2のストリーム1342’のマルチシンボル文字列は、文字コード「ac」に関する圧縮後の符号256と、文字コード「tac」に関する圧縮後の符号258とを含む。
図13Cで見られるように、並び替えられた圧縮後の第1のストリーム1341’の圧縮後の符号256からの文字コード「bc」の順序は、圧縮解除後のストリーム1360において、「c」の後に「b」という逆の順序(逆順)で受信される。並び替えられた圧縮後の第2のストリーム1342’の圧縮後の符号256からの文字コード「ac」の順序は、圧縮解除後のストリーム1360において、「c」の後に「a」という逆順で受信される。並び替えられた圧縮後の第1のストリーム1341’の圧縮後の符号258からの文字コード「cbc」の順序は、圧縮解除後のストリーム1360において、「c」の後に「b」、その後に「c」という逆順に受信される。並び替えられた圧縮後の第2のストリーム1342’の圧縮後の符号258からの文字コード「tac」の順序は、圧縮解除後のストリーム1360において、「c」の後に「a」、その後に「t」という逆順に受信される。
【0146】
完了すると、結果としての圧縮解除後のストリーム1360は、
図13Aで示される元のシリアルストリーム1320と同じになる。代替実施形態において、並べ替えられた圧縮後の第1のストリーム1341’を起点とする圧縮後の符号を、第1の一時バッファに格納された第1の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除し、さらに、並べ替えられた圧縮後の第2のストリーム1342’を起点とする圧縮後の符号を、第2の一時バッファに格納された第2の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除する。そして、第1の一時出力ストリーム及び第2の一時出力ストリームから順番にシンボルを交互に入力することにより、圧縮解除後のストリーム1360を形成することができる。
【0147】
代替実施形態において、各NoOpエントリが次に使用できるマルチシンボル文字列に入れ替えられるバッファリングステップの代わりに、このバッファリングステップは、圧縮後のストリームをまとめる前に全てのNoOpエントリが削除されるよう、各NoOpエントリを削除するだけで、マルチシンボル文字列がNoOpエントリの場所へとシフトされるプロセスを含む。つまり、マルチシンボルの値は、それぞれのNoOp動作の最初の出現位置に移動する。これにより、有利には、複数回の書き込み動作の代わりに、NoOpの各エントリに対応する1回の書き込み動作に置き換えられる。
【0148】
図14は、代表的な実施形態に係る、圧縮解除用の入力のために並べ替えられたワイドワードデータのシンボルを示す。
図14を参照すると、第1の入力ストリーム1411を圧縮することで、2つの元の到着シンボルb5及びb6に相当する圧縮後のマルチシンボル文字列が得られるものと仮定する。従来では、例えば、
図8の圧縮後の第1のストリーム821で示されているように、この圧縮により、シンボルb5の元の位置にNoOpエントリが配置され、さらに、対応する圧縮後の第1のストリーム内のシンボルb6の元の位置にマルチシンボル文字列b5/b6が配置される。しかし、
図14で示す実施形態において、この圧縮動作では、第1の入力ストリーム1411に対応する圧縮後の第1のストリーム1421からNoOpエントリを削除し、さらに、マルチシンボル文字列b5/b6を、削除したNoOpエントリの位置(シンボルb5の元の位置)までシフトさせる。この「シフト後のシンボル(shifted symbol)」の並び替えと、入力ストリームの元のサイズの格納を行うことで、キャプチャバッファに格納された圧縮後の出力ストリーム1430からシンボルb5及びb6の元の順序を復元するのに十分な情報が保持される。結合されたマルチシンボル文字列b5/b6が復号化される際、マルチシンボル文字列b5/b6が、第1の辞書D1に属することも分かっている、第1の入力ストリーム1411に関する元の2つの非圧縮シンボルb5及びb6に相当するかについて、取得されたデータ符号に問い合わせることができる。そのため、順序は守られる。
【0149】
具体的には、
図14は、ワイドワードデータの第1の入力ストリーム1411(入力ストリーム0)及び第2の入力ストリーム1412(入力ストリーム1)を示し、これらは、圧縮用に以下では提供される。第1の入力ストリーム1411及び第2の入力ストリーム1412は、
図6を参照してこれまで考察した第1の入力ストリーム631及び第2の入力ストリーム632とそれぞれ対応し得るが、便宜上、シンボルの番号は異なっている。
図14は、第1の入力ストリーム1411について算出され、本実施形態に従って並び替えられた(シフト後)圧縮後の第1のストリーム1421(圧縮後0)、及び第2の入力ストリーム1412について算出された圧縮後の第2のストリーム1422(圧縮後1)も更に示す。圧縮後の第1のストリーム1421及び第2のストリーム1422は、圧縮処理中、データが途切れのない圧縮後の出力ストリーム1430としてキャプチャバッファに書き込まれる前の中間ステップにおける動作の順序に相当する。その後の圧縮解除は、圧縮後の出力ストリーム1430について、既知の圧縮解除アルゴリズムに従って実行される。最終的な圧縮解除後のストリーム1440は、第1の入力ストリーム1411の圧縮中に生成されたNoOpエントリにもかかわらず、正しく順序付けられた圧縮解除後のデータを示している。
【0150】
図示の実施形態によると、ワイドワード用の途切れのない圧縮後の出力ストリーム1430は、交互に出現する圧縮後の第1のストリーム1421及び第2のストリーム1422からの圧縮後の連続シンボルが、NoOpエントリなしで互いに続くように圧縮中に書き込まれる。1つ以上のシンボルがマルチシンボル文字列に圧縮される場合には、圧縮後のシンボルは、一時的にバッファリングされてから、NoOpエントリの元の位置に作成された場合と同様に、圧縮後のシンボルが出現するよう、先行のNoOpエントリ位置に放出される。元の到着シンボルを圧縮できない場合には、これらはそれぞれ、正しい動作中に正しい場所に放出されるか、又は、先行するマルチシンボル文字列がシフトされたのと同じエントリ数だけシフトされる。
【0151】
本明細書で説明する例示的なデュアルワイドワードシステムでは(説明をしやすくするため)、圧縮後の出力は常に、第1の入力ストリーム1411、次いで、第2の入力ストリーム1412のように一対を単位として放出される。第1の入力ストリーム1411に対応する圧縮後の第1のストリーム1421は、シンボルb5の該当位置に書き込まれた圧縮後のマルチシンボル文字列b5/b6を含み、この位置では、NoOpエントリ(例えば、
図8の圧縮後の第1のストリーム821で図示)が削除され、さらに、圧縮後のマルチシンボル文字列b5/b6がシンボルb5の位置までシフトされている。圧縮後の第2のストリーム1422は、第2の入力ストリーム1412の全てのシンボルを含む。
【0152】
圧縮後の出力ストリーム1430は、圧縮後の第1のストリーム1421と圧縮後の第2のストリーム1422との間で交互にシンボルを受信する。注目すべきは、或る入力ストリームの方が他の入力ストリームよりも圧縮が上手くいき、これにより、圧縮後のストリームがもたらされる場合が挙げられる。例えば、第1の入力ストリーム1411の圧縮は、第2の入力ストリーム1412の圧縮よりも優れており、その結果、圧縮後の第1のストリーム1421は、圧縮後の第2のストリーム1422よりも短くなる。この場合、圧縮後の第2のストリーム1422からのシンボルb6及びb7が圧縮後の出力ストリーム1430の終端で互いに隣接する等のように、圧縮後のストリームの終端に向かって、長いストリームからの圧縮後のシンボルが一緒に配置されることになる。したがって、圧縮後の各ストリームの圧縮後のシンボルの数は、圧縮解除中に追跡され、さらに、その数が圧縮後のストリームの対応する圧縮解除後の入力ストリームの元のサイズに達すると、該当ワイドワードの圧縮解除の残りの部分については、その圧縮後のストリームはスキップされる。
【0153】
図の例では、圧縮後の第1のストリーム1421に対応する第1の入力ストリーム1411と、第2のストリーム1422に対応する第2の入力ストリーム1412のそれぞれの元のサイズは、7である。元の入力ストリームのサイズが、ワイドワードストリーム内で正確に収まるように選択されるので、圧縮後のストリーム全てについて、この値は同じである。図の例では、元の入力ストリームが14となるように選択されているので、第1の入力ストリーム1411及び第2の入力ストリーム1412(それぞれのサイズは7)は、合計14となる。一般的に、n%wide_word=0(すなわち、ページのサイズは、ワイドワードで割り切れる)になるよう、ページのサイズnは選択される。圧縮解除時では、以下で考察するように、圧縮後の第1のストリーム1421及び/又は第2のストリーム1422(つまり、第1のストリーム1421又は第2のストリーム1422あるいはそれらの両方)が、7つの圧縮解除値に達するとすぐに、その圧縮後のストリームが完全に圧縮解除されたことが分かる。
【0154】
圧縮後の第1のストリーム1421及び第2のストリーム1422からのシンボルを交互に受信することに関して、圧縮後の出力ストリーム1430は、圧縮後の第1のストリーム1421からシンボルb1を、圧縮後の第2のストリーム1422からシンボルb1を、圧縮後の第1のストリーム1421からシンボルb2を、圧縮後の第2のストリーム1422からシンボルb2をといった具合で受信する。このインターリーブ後のプロセスは、圧縮後の第2のストリーム1422からシンボルb4を受信した後で、圧縮後の第1のストリーム1421からマルチシンボル文字列b5/b6を受信することと、圧縮後の第2のストリーム1422からシンボルb5を受信することと、圧縮後の第1のストリーム1421からシンボルb7を受信することと、さらに、圧縮後の第2のストリーム1422からシンボルb7を受信することとを含むように進む。図示の順序では、圧縮解除後のストリーム1440(この場合も、円1435で示す)で見られるように、元の順序で各辞書のデータを復元可能であり、複数の入力ストリームからワイドワードとしてデータを復元できる。とりわけ、圧縮後の第1のストリーム1421からのシンボルb6(参照番号1441で図示)は、圧縮後の第2のストリーム1422からのシンボルb5の直後で正しく配置される。
【0155】
「シフト後のシンボル」の並び替え(デインターリーブ)を行うことで、データを正しい順序で再構成するのに必要とされる2つの前提情報を保持することができる。第1に、図示の例では、マルチシンボル文字列b5/b6は、シンボルb6の場所ではなく、第1の入力ストリーム1411のシンボルb5の場所に到着したことが分かっているので、それゆえ、第1の辞書D1にアドレス指定される。第2に、マルチシンボル文字列b5/b6に関する取得されたデータを調べると、最終的に圧縮されない文字列の長さが、1シンボルを超えることが分かっている。したがって、圧縮後のマルチシンボル文字列b5/b6を復号化して、例えば、圧縮解除ストリーム1440を得る場合、その書き込み動作の正しいタイミングが来たら、シンボルb5を先に書き出してから、シンボルb6を後で書き出すことになる。このようにして、シンボルb5とb6は共に、圧縮解除後の最終ストリーム1440の正しい位置へと書き込まれる。さらに、マルチシンボル文字列b5/b6の最終的な長さは、非圧縮の2つのシンボルであることが分かっているので、圧縮後の出力ストリーム1430の次の符号が属する辞書を算出できる。特に、FPGA(又は、ASIC)を用いたハードウェア実装では、以下で考察する逆ポインタ技術により、シンボルが逆の順序にされる。
【0156】
図15A~
図15Cも同様に、代表的な実施形態に係る、圧縮解除用の複数のワイドワード入力のシンボルを順序付けする例を示しており、ここで、ワイドワードサイズは、2である。とりわけ、
図15A~
図15Cは、NoOpエントリを削除するステップと、後続のマルチシンボル文字列を削除されたNoOpエントリの位置にまでそれぞれシフトするステップとをより詳細に示している。
【0157】
図15Aを参照すると、圧縮されるべきシリアルストリーム1520は、シンボル「ccbaccbactbccadt」を含む2つのワイドワードで、16個のシンボル(バイト)を含む。参照番号1530で示すシンボルのシリアルストリームにおける異なる濃淡で示されるように、シリアルストリーム1520は、1つおきのシンボルが2つのワイドワードの一方に割り当てられるように配列される。したがって、第1の辞書(D1)用のシンボル「cbcbcbcd」を持つ第1の入力ストリーム1531と、第2の辞書(D2)用のシンボル「cacatcat」を持つ第2の入力ストリーム1532とを含む、別々の入力ストリームへの圧縮の観点から、他のシンボルは全て、グループ化される。注目すべきは、第2の入力ストリーム1532は、上記の表3A及び表3Bを参照して、これまで考察した例示的な第1の入力ストリームと同じであることである。
【0158】
上記の圧縮に関する実施形態に従って、cc1~cc8で示される8クロックサイクルで第1の入力ストリーム1531及び第2の入力ストリーム1532について、並列圧縮を実行する。第1の入力ストリーム1531及び第2の入力ストリーム1532は、例えば、既知のASCIIテーブルを使用して圧縮され得る。第1の入力ストリーム1531を圧縮すると、圧縮後の第1のストリーム1541(圧縮後0)が得られ、第2の入力ストリーム1532を圧縮すると、圧縮後の第2のストリーム1542(圧縮後1)が得られる。図示の例では、圧縮後の第1のストリーム1541は圧縮符号「99、98、NoOp、256、NoOp、NoOp、258、100」を含み、圧縮後の第2のストリーム1542は圧縮符号「99、97、NoOp、256、116、NoOp、NoOp、258」(前述)を含む。
【0159】
図15Bを参照すると、圧縮後の第1のストリーム1541及び第2のストリーム1542は、シフト後のシンボルの並べ替えに従ってシフトされ、一時バッファに格納される場合も、格納されない場合もあるので、前述のように、マルチシンボル文字列を表す圧縮後の符号は、圧縮中に作成された対応するNoOpエントリにシフトされる。とりわけ、圧縮後の第1のストリーム1541では、第3の位置のNoOpエントリが削除され、圧縮後の符号256が表すマルチシンボル文字列が第4の位置から第3の位置へシフトされる。また、第5の位置と第6の位置のNoOpエントリは削除され、圧縮後の符号258は、第7の位置から第5の位置(すなわち、圧縮後の符号258の前の隣接する2つのNoOpエントリの最初のNoOpエントリ)にシフトされる。この結果は、並べ替えられた(シフトされた)圧縮後の第1のストリーム1541’(圧縮後0’)である。圧縮後の第2のストリーム1542では、NoOpエントリが第3の位置から削除され、圧縮後の符号256で表されるマルチシンボル文字列が第4の位置から第3の位置へとシフトし、第6の位置及び第7の位置のNoOpエントリが削除され、さらに、圧縮後の符号258が第8の位置から第6の位置にシフトすることで、並べ替えられた(シフトされた)圧縮後の第2のストリーム1542’(圧縮後1’)が提供される。これは、並べ替えられた圧縮後の第1のストリーム1541’及び第2のストリーム1542’がバッファに格納されるかどうかに関係なく、バッファリングステップと称されることもある。注目すべきは、圧縮後の第2のストリーム1542の圧縮後の符号256及び258は、圧縮後の第1のストリーム1541の圧縮後の符号256及び258とは異なる文字コードを含み、このことは、こうした圧縮後のストリームの起点となる入力ストリームを追跡し続ける重要な理由である。
【0160】
並び替えられた(シフトされた)圧縮後の第1のストリーム1541’と圧縮後の第2のストリーム1542’から順番にシンボルを交互に入力することで、圧縮後の最終的な出力ストリーム1550が形成される。NoOpエントリは事前に削除されているので、圧縮後の出力ストリーム1550は途切れのないものである。したがって、並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号256は、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号97の直後に続き、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号256は、並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号256の直後に続き、並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号258は、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号256の直後に続き、さらに、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号258は、並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号100の直後に続く。異なるバッファリングステップにより、圧縮後の最終的なストリーム1550は、上述した
図13Bで見られる実施形態の圧縮後の最終的な出力ストリーム1350とは異なるものである。
【0161】
図15Cを参照すると、代表的な実施形態に従って、圧縮後の出力ストリーム1550に対する圧縮解除を実行して、圧縮解除後のストリーム1560を提供し、ここで、圧縮解除後のストリーム1560は、
図15Aで示される元のシリアルストリーム1520と一致する。圧縮解除は、図示の構成で左から右への反復的な演算で行われる。圧縮後の出力ストリーム1550は、
図15Cの上部に示されており、ここで、便宜上、シンボル及びマルチシンボル文字列、並びに対応するアドレス及びパラメータを示すブロックは、分けられている。これまで考察したように、対応する文字コード(複数の場合もある)を決定するためのそれぞれの逆ポインタを使用して、一連の反復的な復号化動作で圧縮解除を実行し、圧縮解除後の中間ストリーム1555を形成し、これを全て、又は一部を一時バッファに格納することができる。圧縮解除後の最終ストリーム1560は、圧縮後の出力ストリーム1550の各マルチシンボル文字列の文字コードの順序を逆転させることで形成される。
【0162】
圧縮解除後の中間ストリーム1555を決定する際、圧縮後の符号のそれぞれと関連付けて、アドレス情報、及びパラメータを更新する。アドレス情報には、圧縮解除後のストリーム1560に含まれる現在の圧縮後の符号のアドレス(adr)が含まれる。パラメータには、圧縮後の符号内の圧縮後のシンボルの数で決まるその圧縮後の符号の長さ(L)、ワイドワード内の入力ストリームの数であるワイドワード(w)、並びに、現在の圧縮後の符号が圧縮解除される圧縮解除処理の時点における同一入力ストリームからの圧縮解除後のシンボルの累積数を示す圧縮解除値(dc)が含まれる。同じ入力ストリームを起点とする次の圧縮後の符号の次のアドレスは、現在のアドレス(adr+Lw)に長さ(L)とワイドワード(w)との積を加算して計算される。同じ入力ストリームに関する次の圧縮解除値は、現在の圧縮解除値(dc+L)に長さ(L)を加算して計算される。
【0163】
便宜上、
図15Cの圧縮解除後の中間ストリーム1555の全体が示されており、全復号プロセス、及び復号後の文字コードの順序が示されている。ただし、復号後の文字コードを圧縮解除後の最終ストリーム1560に入力する次ステップに進む前に、圧縮解除後の中間ストリーム1555全体が、必ずしも形成されるとは限らない。つまり、いくつかの実施形態において、圧縮解除後の中間ストリーム1555を構築する際、圧縮解除後の中間ストリーム1555の復号済み文字コードを、圧縮解除後の最終ストリーム1560へと区分的に提示可能であり、これによって、中間の圧縮解除に必要な一時バッファのサイズが削減される。例えば、復号後の各文字コードは、対応する逆ポインタがNULLの場合、圧縮解除後の中間ストリーム1555から圧縮解除後の最終ストリーム1560へと入力可能である。前述のように、nullの逆ポインタに到達するには、マルチシンボル文字列の複数の復号化ステップ(及び、圧縮解除後の最終ストリーム1560に入力するときの順序の逆転)が必要である。
【0164】
また、圧縮解除では、並べ替えられた圧縮後の第1のストリーム1541’及び第2のストリーム1542’のそれぞれについて、部分的に出力する必要はない。圧縮解除では、アドレスを使用して、圧縮解除後の文字列が最終的に出力される圧縮解除後のストリーム1560に含まれる位置を追跡し続けることで、必要なバッファメモリの量が削減され、さらに、個別に形成されたインターリーブステップとして、圧縮解除後の中間ストリーム1555が効果的に削除され得る。アドレスはワイドワードのサイズ(例えば、本例では2)の配列で追跡され、各ストリームは効果的に独立して圧縮解除されるので、圧縮解除処理は並列に実行できる。並び替えられた圧縮後の第1のストリーム1541’及び第2のストリーム1542’の最終位置は、それらが復号化される際に既知であるので、圧縮後の出力ストリーム1550がまだ完全に復号されていないときであっても、圧縮解除後の最終ストリーム1560の最初のいくつかの復号化文字を出力することができる。マルチシンボル文字列は、圧縮解除後のストリーム1560に提供されるべき復号化後の文字コードの順序を逆にするために、圧縮解除中に一時的に格納される必要があり、その後、必要に応じて、マルチシンボル文字列をストレージから削除することができる。
【0165】
とりわけ、図示の例を参照すると、並び替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号99は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の第1の位置には、文字コード「c」が、対応するアドレス情報、及びパラメータと共に出力される。図に示すように、圧縮後の符号99のアドレスは、これが圧縮解除後のストリーム1560の圧縮解除後の第1のシンボルであるため、0(adr[0]=0)であり、圧縮後の符号99の長さは、これが圧縮後の1のシンボルに相当するため、1(L=1)であり、さらに、圧縮後の符号99の圧縮解除値は、これまで圧縮解除されたシンボルがないため、0(dc[0]=0)である。第1の入力ストリーム1531を起点とする次の圧縮解除後のシンボルの次のアドレスは、2であり、この値は、圧縮後の符号99の長さ(L)とワイドワードのサイズ(w)との積を、圧縮後の符号99の現在のアドレスに加算したもの(adr[0]+L*w=0+(1*2)=2)で求められる。また、これまでの第1の入力ストリーム1531から圧縮解除したシンボルの累積数を示す次の圧縮解除値(dc)は、1であり、この値は、現在の符号99の圧縮解除値に長さ(L)の値を加算して求められる(dc[0]+L=0+1=1)。次の圧縮解除値を元の第1の入力ストリーム1511のシンボルの総数(8)と比較して、並び替えられた圧縮後の第1のストリーム1541’が完全に圧縮解除されたか否かを判断する。この場合、次の圧縮解除値は1であり、1は8未満であるため、圧縮後の第1のストリーム1541’の圧縮解除は、ここでは停止しない。
【0166】
並び替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号99は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の次位置には、文字コード「c」が、対応するアドレス情報、及びパラメータと共に出力される。つまり、圧縮後の符号99のアドレスは、これが圧縮解除後のストリーム1560の圧縮解除後の第2のシンボルであるため、1(adr[1]=1)であり、圧縮後の符号99の長さは、これが圧縮後の1シンボルに相当するため、1(L=1)であり、さらに、並び替えられた圧縮後の第2のストリーム1542’について、これまで圧縮解除されたシンボルはないため、圧縮後の符号の圧縮解除値99は、0(dc[1]=0)である。第2の入力ストリーム1532を起点とする次の圧縮解除後のシンボルの次のアドレスは、3であり、この値は、圧縮後の符号99の長さ(L)とワイドワードのサイズ(w)との積を、圧縮後の符号99の現在のアドレスに加算したもの(adr[1]+L*w=1+(1*2)=3)で求められる。第2の入力ストリーム1532から圧縮解除したシンボルの累積数を示す次の圧縮解除値(dc)は、1であり、この値は、現在の符号99の圧縮解除値に長さ(L)の値を加算して求められる(dc[1]+L=0+1=1)。次の圧縮解除値を元の第2の入力ストリーム1512のシンボルの総数(8)と比較して、並び替えられた圧縮後の第2のストリーム1542’が完全に圧縮解除されたか否かを判断する。この場合、次の圧縮解除値は1であり、1は8未満であるため、圧縮後の第2のストリーム1542’の圧縮解除は、ここでは停止しない。
【0167】
並び替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号98は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の次位置には文字コード「b」が出力される。対応するアドレス情報は、adr[0]=2を含み(これは、以前に、並び替えられた圧縮後の第1のストリーム1541’からの先行する圧縮後の符号99で更新されている)、そして、対応するパラメータは、L=1、及びdc[0]=1である(これは、以前に、並び替えられた圧縮後の第1のストリーム1541’から先行する圧縮後の符号99で更新されている)。その後、アドレスadr[0]は、次の値で更新され、adr[0]+Lw=2+(1*2)=4となる。圧縮解除後の値dc[0]も、次の値で更新され、dc[0]+L=1+1=2となるが、これは8未満なので、圧縮後の第1のストリーム1541’の圧縮解除は停止しない。同様に、並び替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号97は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の次位置には文字コード「a」が出力される。対応するアドレス情報は、adr[1]=3を含み(これは、以前に、並び替えられた圧縮後の第2のストリーム1542’からの先行する圧縮後の符号99で更新されている)、そして、対応するパラメータは、L=1、及びdc[1]=1である(これは、以前に、並び替えられた圧縮後の第2のストリーム1542’から先行する圧縮後の符号99で更新されている)。その後、アドレスadr[1]は、更新されて、adr[1]+Lw=5となる。圧縮解除後の値dc[1]も、次の値で更新され、dc[1]+L=2となるが、これは8未満なので、圧縮後の第2のストリーム1542’の圧縮解除は停止しない。
【0168】
並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号256は、次にマルチシンボル文字列「bc」を提供しており、圧縮後の符号256は、文字コード「b」と、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。そのため、文字コード「b」と「c」がそれぞれ出力され、その後、圧縮解除後のストリーム1560に書き込まれる際、位置が逆になる。対応するアドレス情報は、adr[0]=4を含み、次いで、これを8に更新する。対応するパラメータは、L=2、及びdc[0]=2であり、次いで、これを4に更新する。圧縮後の符号256には、第1の入力ストリーム1531の2つのシンボルからの2つの文字コード(「bc」)が含まれているので、長さ(L)は2である。adr[0]+Lw=4+(2*2)=8に従って、アドレス(adr[0])を8に更新する。dc[0]+L=2+2=4に従って、圧縮解除後の値(dc[0])を4に更新し、これは、第1の入力ストリーム1531からの4つのシンボル(「cbcb」)が復号化されることになる。4は8未満であるため、並べ替えられた圧縮後の第1のストリーム1541’の圧縮解除は停止しない。
【0169】
同様に、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号256は、マルチシンボル文字列「ac」を提供しており、圧縮後の符号256は、文字コード「a」と、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを持つ。そのため、文字コード「a」と「c」がそれぞれ出力され、その後、圧縮解除後のストリーム1560に書き込まれる際、位置が逆になる。対応するアドレス情報は、adr[1]=5を含み、これを9に更新する。対応するパラメータは、L=2、及びdc[1]=2であり、これを4に更新する。圧縮後の符号256には、第2の入力ストリーム1532の2つのシンボルからの2つの文字コード(「ac」)が含まれているので、長さ(L)は2である。adr[1]+Lw=5+(2*2)=9に従って、アドレス(adr[1])を9に更新する。dc[1]+L=2+2=4に従って、圧縮解除後の値(dc[1])を4に更新し、これは、第2の入力ストリーム1532からの4つのシンボル(「ccaca」)が復号化されることを示す。4は8未満であるため、並べ替えられた圧縮後の第2のストリーム1542’の圧縮解除は停止しない。
【0170】
次に、並べ替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号258は、マルチシンボル文字列「cbc」を提供しており、圧縮後の符号258は、文字コード「c」と、文字コードが「b」の256への逆ポインタと、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを備える。そのため、文字コード「c」、「b」及び「c」がそれぞれ出力され、その後、圧縮解除後のストリーム1560に書き込まれる際、位置が逆になる。対応するアドレス情報は、adr[0]=8を含み、次いで、これを14に更新し、さらに、対応するパラメータは、L=3、及びdc[0]=4であり、これを7に更新する。圧縮後の符号258には、第1の入力ストリーム1531の3つのシンボルからの3つの文字コード(「cbc」)が含まれているので、長さ(L)は3である。adr[0]+Lw=8+(3*2)=14に従って、アドレスを14に更新する。dc[0]+L=4+3=7に従って、圧縮解除後の値(dc[0])を7に更新し、これは、第1の入力ストリーム1531からの7つのシンボル(「cbcbcbc」)が復号化されることを示す。7は8未満であるため、並べ替えられた圧縮後の第1のストリーム1541’の圧縮解除は停止しない。
【0171】
次に、並び替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号116は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の次位置には、文字コード「t」が、対応するアドレス情報、及びパラメータと共に出力される。つまり、対応するアドレス情報は、adr[1]=9を含み、次いで、これを11に更新し、さらに、対応するパラメータは、L=1、及びdc[1]=4であり、次いで、これを5に更新する。adr[1]+Lw=9+(1*2)=11に従って、アドレス(adr[1])を11に更新する。dc[1]+L=4+1=5に従って、圧縮解除後の値(dc[1])を5に更新し、これは、第2の入力ストリーム1532からの5つのシンボル(「cacat」)が復号化されることを示す。5は8未満であるため、並べ替えられた圧縮後の第2のストリーム1542’の圧縮解除は停止しない。
【0172】
次に、並び替えられた圧縮後の第1のストリーム1541’からの圧縮後の符号100は、NULLへの逆ポインタを持つので、圧縮解除後の中間ストリーム1555の次位置には、文字コード「d」が、対応するアドレス情報、及びパラメータと共に出力される。つまり、対応するアドレス情報は、adr[0]=14を含み、さらに、対応するパラメータは、L=1、及びdc[0]=7であり、次いで、これを8に更新する。dc[0]+L=7+1=8に従って、圧縮解除後の値(dc[0])を8に更新し、これは、第1の入力ストリーム1531からの8つのシンボル(「cbcbcbcd」)全てが復号化されることを示す。それゆえ、dc[0]は8に等しいので、並べ替えられた圧縮後の第1のストリーム1541’の圧縮解除は停止する。これで、並び替えられた圧縮後の第1のストリーム1541’の圧縮解除が完了したので、並び替えられた次の圧縮後の第1のストリームの圧縮解除を開始するために、アドレス(adr[0])を0に更新する。
【0173】
最後に、並べ替えられた圧縮後の第2のストリーム1542’からの圧縮後の符号258は、マルチシンボル文字列「tac」を提供しており、圧縮後の符号258は、文字コード「t」と、文字コードが「a」の256への逆ポインタと、文字コードが「c」の99への逆ポインタと、NULLへの逆ポインタとを備える。そのため、文字コード「t」、「a」及び「c」がそれぞれ出力され、その後、圧縮解除後のストリーム1560に書き込まれる際、位置が逆になる。対応するアドレス情報は、adr[1]=11を含み、さらに、対応するパラメータは、L=3、及びdc[1]=5であり、次いで、これを8に更新する。圧縮後の符号258には、第2の入力ストリーム1532の3つのシンボルからの3つの文字コード(「tac」)が含まれているので、長さ(L)は3である。圧縮解除後の値(dc[1])を8に更新し、これは、第2の入力ストリーム1532からの8つのシンボル(「cacatcat」)全てが復号化されることを示す。それゆえ、dc[1]は8に等しいため、並べ替えられた圧縮後の第2のストリーム1542’の圧縮解除は停止する。これで、並び替えられた圧縮後の第2のストリーム1542’の圧縮解除が完了したので、並び替えられた次の圧縮後の第2のストリームの圧縮解除を開始するために、アドレス(adr[1])を0に更新する。
【0174】
これまで考察したように、圧縮解除後のストリーム1560は、マルチシンボル文字列内のそれぞれの文字コード順を逆にすることで、圧縮解除後の中間ストリーム1555から形成される。文字コードの順序を逆にして、圧縮解除ストリーム1560を作成することは、反復的な圧縮解除プロセス中に行ってもよいし、又は、圧縮解除後の中間ストリーム1555が完成した後に行ってもよい。最終的な結果は、
図15Cで見られるとおりであり、並び替えられた圧縮後の第1のストリーム1541’の圧縮後の符号256からの文字コード「bc」の順序は、圧縮解除後のストリーム1560において、「c」の後に「b」という逆順で受信される。並び替えられた圧縮後の第2のストリーム1542’の圧縮後の符号256からの文字コード「ac」の順序は、圧縮解除後のストリーム1560において、「c」の後に「a」という逆順で受信される。並び替えられた圧縮後の第1のストリーム1541’の圧縮後の符号258からの文字コード「cbc」の順序は、圧縮解除後のストリーム1560において、「c」の後に「b」、その後に「c」という逆順で受信される。並び替えられた圧縮後の第2のストリーム1542’の圧縮後の符号258からの文字コード「tac」の順序は、圧縮解除後のストリーム1560において、「c」の後に「a」、その後に「t」という逆順で受信される。
【0175】
完了すると、結果としての圧縮解除後のストリーム1560は、
図15Aで示される元のシリアルストリーム1520と同じになる。代替実施形態において、並べ替えられた圧縮後の第1のストリーム1541’を起点とする圧縮後の符号を、第1の一時バッファに格納された第1の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除し、さらに、並べ替えられた圧縮後の第2のストリーム1542’を起点とする圧縮後の符号を、第2の一時バッファに格納された第2の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除する。そして、第1の一時出力ストリーム及び第2の一時出力ストリームから順番にシンボルを交互に入力することにより、圧縮解除後のストリーム1560を形成することができる。
【0176】
図16は、代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。この方法は、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中に、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する。
図16の様々なステップは、上述のインターポーザ回路120、及び/又はUIコンピュータ110(つまり、インターポーザ回路120、又はUIコンピュータ110、あるいはそれらの両方)で実行可能であり、従来のソリューションに付随する複雑な配線及び信号完全性の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(及びより少ない生データ)を使用して、アップロード時間の高速化をサポートする。これまで考察した
図13A~
図13Cは、
図16で示される方法の一例を示す。
【0177】
図16を参照すると、ブロックS1601において、圧縮されるべきシリアルストリームを、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割する。各入力ストリームは、所定数のシンボルを含む。
【0178】
ブロックS1602において、複数の入力ストリームに対して並列圧縮を実行して、対応する圧縮後のストリームを得る。圧縮後の各ストリームは、複数の圧縮後の符号を含み、各圧縮後の符号は、少なくとも1つの文字コード及び少なくとも1つの逆ポインタを含む。圧縮後のストリームの中には、複数の文字コードを有するマルチシンボル文字列と、そのマルチシンボル文字列に対応する少なくとも1つのNoOpエントリとを含む少なくとも1つの圧縮後の符号を有する。
図8を参照して上述したように、各マルチシンボル文字列は、入力ストリーム中の2つ以上の元の入力シンボルを表す圧縮後の符号を示し、さらに、NoOpエントリは、対応するマルチシンボル文字列に含まれる圧縮後のストリーム中の最初の、又は、次に圧縮される任意の元の入力シンボルの位置を効率良く取る。マルチシンボル文字列が2つを超える入力シンボルからの圧縮後の符号を含む場合には、圧縮後のストリームの入力シンボルの最後の位置を除く全ての位置にNoOpエントリが出現する。
【0179】
ブロックS1603において、圧縮後のストリームは、それぞれ、第1の到着シンボル並べ替え処理で並べ替えられ、並べ替えられた複数の圧縮後のストリームを形成する。少なくとも1つのマルチシンボル文字列を有する圧縮後のストリームごとに、各マルチシンボル文字列は、そのマルチシンボル文字列の第1のシンボルの位置まで移動し、対応するNoOpエントリ(複数の場合もある)は、第1のシンボルの位置からシフトする。つまり、記録された圧縮後のストリームにおいて、マルチシンボル文字列の位置がNoOpエントリ(複数の場合もある)の前に来るように、マルチシンボル文字列とNoOpエントリ(複数の場合もある)の位置が切り替わる。
【0180】
ブロックS1604では、NoOpエントリを除いて、並び替えられた圧縮後のストリームから圧縮後の符号を交互に入力することにより、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが2つある場合には、2つの並べ替えられた圧縮後のストリームからの圧縮後の符号同士をそれぞれ交互に配置することで、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが4つある場合には、4つの並べ替えられた圧縮後のストリームからの圧縮後の符号を通じてそれぞれ反復的に循環させることで、途切れのない圧縮後の出力ストリームが形成される。
【0181】
ブロックS1605において、並べ替えられた異なる圧縮後のストリームから、途切れのない圧縮後の出力ストリーム内の圧縮後の符号を反復的に受信することによって、圧縮後の出力ストリームの圧縮解除を開始する。圧縮後の符号はそれぞれ、少なくとも1つの文字コードと、少なくとも1つの逆ポインタとを含む。少なくとも1つのマルチシンボル文字列を含む圧縮後のストリームにおいて、各マルチシンボル文字列は、それぞれ複数の文字コード、及び複数の逆ポインタを含む。
【0182】
ブロックS1606において、圧縮後の符号の逆ポインタをそれぞれ辿って、圧縮後の様々なストリームからの圧縮後の符号を反復的に復号化することによって、圧縮解除後の中間ストリームは形成される。すなわち、NULLエントリに達して、少なくとも1つの文字コードが得られるまで、各圧縮後の符号の少なくとも1つの逆ポインタを辿ることで、圧縮後の符号の復号化を実施する。圧縮後の符号がNULLエントリを指す逆ポインタを1つ含む場合には、圧縮後の符号は、1文字コードを含む。圧縮後の符号が複数の逆ポインタを含み、その最後の逆ポインタがNULLエントリを指す場合には、圧縮後の符号は、それぞれ複数の文字コードを含み、圧縮後の符号は、マルチシンボル文字列を含む。
【0183】
ブロックS1607において、圧縮後のストリームのそれぞれから各マルチシンボル文字列の文字コードの順序を逆転させることにより、圧縮解除された中間ストリームから圧縮解除されたストリームが形成される。残りの文字コードの順序は変わらない。圧縮解除後のストリームは、更なる処理と解析のために出力される。例えば、これまで考察したように、圧縮解除後のストリームは、UIコンピュータ110に出力可能であり、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザを圧縮解除後のストリームに適用する。
【0184】
図17A及び
図17Bは、代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。この方法では、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減可能である。
図17A及び
図17Bの様々なステップは、上述のインターポーザ回路120、及び/又はUIコンピュータ110で実行可能であり、従来のソリューションに付随する複雑な配線及び信号完全性の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(及びより少ない生データの)を使用して、アップロード時間の高速化をサポートする。これまで考察した
図15A~
図15Cは、
図17A及び
図17Bで示される方法の一例を示す。
【0185】
図17Aを参照すると、ブロック1701において、圧縮されるべきデータのシリアルストリームを、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割する。各入力ストリームは、所定数のシンボルを含む。
【0186】
ブロックS1702において、複数の入力ストリームに対して並列圧縮を実行して、対応する圧縮後のストリームを得る。圧縮後の各ストリームは、複数の圧縮後の符号を含み、各圧縮後の符号は、少なくとも1つの文字コード及び少なくとも1つの逆ポインタを含む。圧縮後のストリームの中には、複数の文字コードを有するマルチシンボル文字列と、そのマルチシンボル文字列に対応する少なくとも1つのNoOpエントリとを含む少なくとも1つの圧縮後の符号を有するものがある。
図8を参照して上述したように、各マルチシンボル文字列は、入力ストリーム中の2つ以上の元の入力シンボルを表す圧縮後の符号を示し、さらに、NoOpエントリは、対応するマルチシンボル文字列に含まれる圧縮後のストリーム中の最初の元の入力シンボルの位置を効率よく得る。マルチシンボル文字列が2つを超える入力シンボルからの圧縮後の符号を含む場合には、圧縮後のストリームの入力シンボルの最後の位置を除く全ての位置にNoOpエントリが出現する。
【0187】
ブロックS1703では、該当する圧縮後のストリーム内の各NoOpエントリを削除し、削除された各NoOpエントリに続く複数の圧縮後の符号のうち任意の圧縮後の符号を、削除されたNoOpエントリの位置までシフトさせることによって、複数の圧縮後ストリームにおける各圧縮後ストリームを並べ替える。例えば、NoOpエントリを1つ削除すると、圧縮後のストリーム中のNoOpエントリに続く圧縮後の符号は全て、削除されたNoOpエントリの方向に1つシフトして、並べ替えられた対応する圧縮後のストリームが形成される。隣接する2つのNoOpエントリを削除すると、圧縮後のストリーム中のNoOpエントリに続く圧縮後の符号は全て、削除されたNoOpエントリの方向に2つシフトして、並べ替えられた対応する圧縮後のストリームが形成されるといった具合である。
【0188】
ブロックS1704において、並べ替えられた複数の圧縮後のストリームから圧縮後の符号を反復的に入力することで(削除されたNoOpエントリがない場合)、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが2つある場合、2つの並べ替えられた圧縮後のストリームからの圧縮後の符号同士をそれぞれ交互に配置することで、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが4つある場合、4つの並べ替えられた圧縮後のストリームからの圧縮後の符号を通じてそれぞれ反復的に循環させることで、途切れのない圧縮後の出力ストリームが形成される。並べ替えられた圧縮後のストリームの圧縮後の符号の数が異なる場合、並べ替えられた圧縮後の長い方のストリームの末尾に追加された圧縮後の符号が、途切れのない圧縮後の出力ストリームの末尾に隣接して提供される。
【0189】
ブロックS1705では、途切れのない圧縮後の出力ストリームの圧縮解除が実行される。一般的に、この圧縮解除は、並び替えられたそれぞれの圧縮後のストリームに従って、途切れのない圧縮後の出力ストリームから圧縮後の符号を反復的に復号化して、対応する文字コードを取得することと、マルチシンボルを含む圧縮後の符号から取得された文字コードの順序を逆にすることと、取得された文字コードから圧縮解除されたストリームを構築することとにより、並列に実行される。
図17Bを参照して、圧縮解除を実行するプロセスについて詳細に検討する。圧縮解除後のストリームは、更なる処理と解析のために出力される。例えば、これまで考察したように、圧縮解除後のストリームは、UIコンピュータ110に出力可能であり、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザを圧縮解除後のストリームに適用する。
【0190】
図17Bは、
図17AのブロックS1705で示される圧縮解除プロセスの例示的実施態様である。
図17Bを参照すると、ブロックS1751~S1756は、圧縮後の出力ストリーム内の圧縮後の符号ごとに、圧縮解除後のストリーム内の現在のアドレス(adr)で実行される。ブロックS1751では、途切れのない圧縮後の出力ストリームにおいて、現在のアドレスの圧縮後の符号が含まれる、並べ替えられた圧縮後のストリームを特定する。例えば、元のシリアルストリームに2つのワイドワードが含まれている場合、途切れのない圧縮後の出力ストリーム内の各圧縮後の符号は、並べ替えられた2つの圧縮後のストリームの一方から取得される。
【0191】
ブロックS1752において、NULLエントリに達して、少なくとも1つの文字コードが得られるまで、少なくとも1つの逆ポインタを辿ることで、圧縮後の符号の復号化を実施する。圧縮後の符号がNULLエントリを指す逆ポインタを1つ含む場合、圧縮後の符号は、1文字コードを含む。圧縮後の符号が複数の逆ポインタを含み、その最後の逆ポインタがNULLエントリを指す場合には、圧縮後の符号は、それぞれ複数の文字コードを含むことにより、圧縮後の符号は、マルチシンボル文字列を含む。
【0192】
ブロックS1753において、圧縮解除後のコードのアドレスを特定する。アドレス(adr)は、圧縮解除後のストリーム中の圧縮解除後の文字コード(複数の場合もある)が占有すべき第1のアドレスである。例えば、圧縮後の符号が1文字コードを含む場合、その1文字コードが特定されたアドレスを占有することになる。圧縮後の符号に2つの文字コードが含まれている場合、この2つの文字コードは、特定されたアドレスと、並べ替えられた同じ圧縮後のストリーム(つまり、並べ替えられた他の圧縮後のストリーム(複数の場合もある)からの文字コード(複数の場合もある)のアドレスで区切られる)に提供される次のアドレスとをそれぞれ占有するといった、具合である。
【0193】
ブロックS1754において、圧縮後の符号のパラメータを決定する。パラメータには、例えば、圧縮後の符号の長さ(L)と、圧縮解除値(dc)が含まれる。圧縮後の符号の長さは、ブロックS1752で逆ポインタを辿ることにより実行された復号化に基づいて決定される。つまり、長さは、圧縮後の符号の文字コードの数に対応する。したがって、文字コードが1つの圧縮後の符号の長さはL=1、文字コードが2つの圧縮後の符号の長さはL=2といった具合になる。圧縮解除値は、現在の圧縮解除後のシンボルの前に、同じ入力ストリーム(ひいては、並び替えられた同じ圧縮後のストリーム)からの圧縮解除されたシンボルの累積数として決定される。圧縮後の符号が特定入力ストリームの最初の1つである場合には、シンボルがまだ圧縮解除されていないため、圧縮解除値は、0になる。同じ入力ストリームからの次の圧縮後の符号については、前の圧縮後の符号の圧縮解除値に前の圧縮後の符号の長さを加算した値を、圧縮解除値とする。一般的に、圧縮後の符号が1文字コードを含む場合、復号化値は1増分される。一般的に、圧縮後の符号が2文字コードを含む場合、復号化値は2増分されるといった具合である。
【0194】
ブロックS1755では、累積された圧縮解除値が、並べ替えられた圧縮後のストリームに対応する元の入力ストリームのシンボル数と等しいかどうかを判定する。例えば、これまで考察したように、元の入力ストリームには、8つのシンボルが含まれる場合がある。圧縮解除値がシンボル数と等しくない場合(ブロックS1755:No)、プロセスは、S1756のブロックに進み、並び替えられた同じ圧縮後のストリームからの次の圧縮後の符号の圧縮解除後のストリーム内の次のアドレスを、決定する。次アドレスは、現在のアドレス、長さ、及び、シリアルストリーム内のワイドワードの数(w)に基づいて、決定することができる。つまり、前述のように、次のアドレスは、長さ(L)と数(w)との積を現在のアドレス(adr)に加算した数になる。現在のアドレスは、並べ替えられた同じ圧縮後のストリームの次の反復処理のために、圧縮解除後のストリーム内で決定された次のアドレスに設定される。
【0195】
その後、プロセスはブロックS1751に戻り、ここで、途切れのない圧縮後の出力ストリームにおいて、次の圧縮後の符号が含まれ、並べ替えられた圧縮後のストリームを特定する。これまで考察したように、並べ替えられた圧縮後のストリームは、以前の並べ替えられた圧縮後のストリームとは異なっており、これにより、圧縮後の符号は、圧縮解除を実行するためにインターリーブされる。例えば、元のシリアルストリームが2つのワイドワードを含む場合には、並べ替えられた圧縮後のストリームは、圧縮解除を行うために、並べ替えられた圧縮後の第1のストリームと並べ替えられた圧縮後の第2のストリームとの間で交互に並べられる。そして、プロセスを反復する。
【0196】
圧縮解除値がシンボル数と等しい場合(ブロックS1755:Yes)には、入力ストリーム内のシンボルに対応するその並び替えられた圧縮後のストリームからの圧縮後の符号が全て圧縮解除されたことを示しており、プロセスはブロックS1757に進む。ブロックS1757で、まだ完全に圧縮解除されていない並べ替えられた圧縮後のストリームが残っているかどうかを判断する。並べ替えられた圧縮後ストリームが、残っていない場合(ブロックS1757:No)には、プロセスは、後述するブロックS1758に進む。圧縮後の符号が残っている、並べ替えられた圧縮後のストリームが少なくとも1つある場合(ブロックS1757:Yes)には、プロセスはブロックS1751に戻り、ここで、途切れのない圧縮後の出力ストリームにおいて、次の圧縮後の符号が含まれ、並べ替えられた圧縮後のストリームを特定する。この時点で、他の並べ替えられた圧縮後のストリーム(複数の場合もある)からの圧縮後の符号を使い果たした可能性があるので、次の圧縮後の符号は、同じ並べ替えられた圧縮後のストリームからのものであり得る。そして、プロセスを反復する。
【0197】
ブロックS1758において、圧縮後の符号の現在のアドレスに対応する圧縮解除後のストリーム内のアドレスに、並び替えられた各圧縮後ストリームの各圧縮後の符号からの文字コード(複数の場合もある)を入力することによって、圧縮解除後のストリームが形成される。少なくとも1つの文字コードを入力することは、各圧縮後のストリームからの少なくとも1つのマルチシンボル文字列内のそれぞれの文字コードの順序を逆転させることを含む。マルチシンボル文字列ごとに、逆順の第1の文字コードが現在のアドレスに入力され、さらに、残りの文字コード(複数の場合もある)は、並べ替えられた同じ圧縮後のストリームで使用可能な圧縮解除後のストリーム内の次の連続するアドレス(複数の場合もある)へと入力される。残りの文字コードの順序とアドレスは、変わらない。最終的な結果は、前述の
図17AのブロックS1701において分割され、S1702において圧縮された元のシリアルストリームと同じ順序の文字コードを持つ圧縮解除後のストリームである。
【0198】
図18は、代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。
【0199】
図18を参照すると、コンピュータシステム1800は、処理ユニット1810と、本明細書で説明するプロセスを実行するために処理ユニット1810によって実行可能な命令を格納するためのメモリ1820と、並びに、ユーザが利用できるようにするためのディスプレイ1830及びインタフェース1840とを含む。処理ユニット1810は、1つ以上の処理デバイスを代表するものであり、本明細書の様々な実施形態で説明されている機能を実施するソフトウェア命令を実行するように構成されている。処理ユニット1810は、汎用コンピュータ、中央処理ユニット、1つ以上のプロセッサ、マイクロプロセッサ若しくはマイクロコントローラ、状態機械、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、又はこれらの組み合わせにより、ハードウェア、ソフトウェア、ファームウェア、配線接続論理回路、又はそれらの組み合わせの任意の組み合わせを使用して実装することができる。「プロセッサ(processor)」という用語は、特に、プログラム、又は機械実行可能命令を実施できる電子部品を包含する。「プロセッサ」への言及は、マルチコアプロセッサ、及び/又は、並列プロセッサ(つまり、マルチコアプロセッサ、又は並列プロセッサ、あるいはそれらの両方)のように、2つ以上のプロセッサ、又は処理コアを含むものと解釈するものとする。また、プロセッサは、単一コンピュータシステム内のプロセッサの集合体、又は、クラウドベース若しくは他のマルチサイトアプリケーション等、複数のコンピュータシステム間で分散されたプロセッサを称する場合もある。プログラムは、同じコンピューティングデバイス内、又は、複数のコンピューティングデバイスにわたって分散し得る1つ以上のプロセッサによって実行されるソフトウェア命令を含む。
【0200】
メモリ1820は、主メモリ、及び/又はスタティックメモリ(つまり、主メモリ、又はスタティックメモリ、あるいはそれらの両方)を含んでもよく、かかるメモリは、1つ以上のバスを介して互いに、及び処理ユニット1810と通信することができる。メモリ1820は、本明細書で記載される方法、及びプロセスのいくつかの、又は、全ての態様を実装するために使用される命令を格納する。メモリ1820は、例えば、任意の数、種類、及び、組み合わせのランダムアクセスメモリ(RAM:random-access memory)と読み取り専用メモリ(ROM:read-only memory)で実装することができ、さらに、ソフトウェアアルゴリズム、及びコンピュータプログラム等の様々な種類の情報を格納することができ、それらは全て処理ユニット1810によって実行可能である。様々な種類のROMとRAMには、ディスクドライブ、フラッシュメモリ、電気的にプログラム可能な読み取り専用メモリ(EPROM:electrically programmable read-only memory)、電気的に消去可能、且つプログラム可能な読み取り専用メモリ(EEPROM:electrically erasable and programmable read only memory)、レジスタ、ハードディスク、リムーバブルディスク、テープ、コンパクトディスク読み取り専用メモリ(CD-ROM:compact disk read only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、フロッピーディスク、blu-rayディスク、ユニバーサルシリアルバス(USB:universal serial bus)ドライブ、又は、当該技術分野で知られている他の任意の形態の記憶媒体等、任意の数、種類、及び組み合わせのコンピュータ可読記憶媒体を含み得る。処理ユニット1810がFPGAを含む場合、例えば、メモリ1820は、上述のUltraRAM、又は、読み出し及び書き込み機能を備える他のRAMを含めることができる。
【0201】
メモリ1820は、データと実行可能ソフトウェア命令を格納するための有形の記憶媒体であり、ソフトウェア命令が内部に格納されている間は、非一時的である。本明細書で使用する場合、「非一時的(non-trasitory)」という用語は、状態の永遠の特性ではなく、或る期間続く状態の特性として解釈されるものとする。「非一時的」という用語は、具体的に言えば、任意の時点で任意の場所に一時的にしか存在しない、搬送波若しくは信号、又は、他の形態の特性等、一時的な特性を否定するという意味である。メモリ1820は、様々な機能の実行を可能にするソフトウェア命令、及び/又はコンピュータ可読コード(つまり、ソフトウェア命令、又はコンピュータ可読コード、あるいはそれらの両方)を格納し得る。メモリ1820は、セキュア及び/又は暗号化(つまり、セキュア又は暗号化あるいはそれらの両方が)されているか、又は、セキュアでない場合及び/又は暗号化されていない場合(つまり、セキュアでない場合又は暗号化されていない場合あるいはそれらの両方の場合)もある。
【0202】
ディスプレイ1830は、例えば、コンピュータモニタ、テレビ、液晶ディスプレイ(LCD:liquid crystal display)、有機発光ダイオード(OLED:organic light emitting diode)、フラットパネルディスプレイ、固体ディスプレイ、又は陰極線管(CRT:cathode ray tube)ディスプレイ等のモニタ、又は、電子ホワイトボードであり得る。また、ディスプレイ1830は、ユーザとの間で情報を表示及び受信するためのグラフィカルユーザインタフェース(GUI:graphic user interface)を提供することもできる。
【0203】
インタフェース1840は、処理ユニット1810及び/又はメモリ1820(つまり、処理ユニット1810又はメモリ1820あるいはそれらの両方)によって出力された情報及びデータをユーザに提供するため、及び/又はユーザから入力された情報及びデータを受信するためのユーザインタフェース及び/又はネットワークインタフェース(つまり、ユーザインタフェース又はネットワークインタフェースあるいはそれらの両方)を含むことができる。すなわち、インタフェース1840は、ユーザがデータを入力し、本明細書に記載のプロセスの態様を制御又は動作することを可能にし、さらに、処理ユニット1810がユーザの制御又は動作の効果を示すことを可能にする。インタフェース1840は、例えば、マウス、キーボード、トラックボール、ジョイスティック、触覚デバイス、マイクロフォン、ビデオカメラ、タッチパッド、タッチスクリーン、マイクロフォン若しくはビデオカメラによってキャプチャされた音声若しくはジェスチャ認識等の1つ以上のユーザインタフェース、若しくは、コンピュータワークステーション1805からのユーザフィードバック、及びコンピュータワークステーションとの相互作用を可能にする他の周辺機器、又はコントロールを接続することができる。インタフェース1840は、ポート、ディスクドライブ、無線アンテナ、又は他の種類の受信機回路の1つ以上も含み得る。
【0204】
上記実施形態は、インターポーザ回路を通じて送信される複数の入力ストリームに対して並列ワイドワード圧縮を実行して、対応する圧縮後のストリームを取得することと、その圧縮後のストリームをキャプチャバッファに格納することとに依拠している。例えば、上述の
図9、
図13A、及び
図15Aの例で見られるように、LZW圧縮アルゴリズム等に従って、入力ストリームの1つに対する圧縮が正常に実行されると、バイトの反復を示す1つ以上のNoOpエントリが、対応する圧縮後のストリームに出現する。
【0205】
ただし、例えば、ランダムデータ等の反復パターンを多く持たないデータが入力ストリームに含まれる場合、インターポーザ回路120でのワイドワード圧縮(例えば、FPGA及び/又はASICを含む)は、キャプチャバッファ125等のバイナリ出力ストレージに読み書きする際に問題となり得る。一般的に、ランダムデータには、以前に出現したバイト列の反復がほとんど含まれていないため、圧縮率が悪くなる。ランダムデータの圧縮後のストリームは、格納される際、対応する入力ストリームの元の生の非圧縮バイト(8ビット)よりも多く、所与の出力を表現するビットを必要とする。これは、出力のサイズが、255より大きい数として符号化された新しい圧縮後のマルチシンボル出力に対応できる必要があるからである。圧縮後のシンボルとしての新たなマルチシンボル文字列(バイト列)は、最初は0~511の範囲の10進数であり、元の非圧縮バイトあたり、9ビットを記憶媒体に書き込む必要がある。したがって、バイトを圧縮できない場合には、そのバイトは、依然として9ビットのストレージを必要とし、これは、記憶サイズが12.5パーセント増加することと同じであり、効果が得られない(すなわち、実際には圧縮されない)。
【0206】
本明細書に記載の並列圧縮は、一般的な反復シーケンスが、複数の元の非圧縮のバイトを格納するために9ビットしか必要としないという事実に依拠している。ただし、ランダムデータ又は反復パターンがあまり多くない他のデータ(まとめて、「ランダムデータ」と称する)の場合には、データの大幅な削減を実現するには、これらの反復シーケンスが十分ではない。さらに、圧縮処理中も、圧縮辞書は増え続けている、つまり、10進数511より大きい新しい出力では、キャプチャバッファ125に書き込むべきビット数が更に多くなるということである。これでは、圧縮せずに書き込むために8ビットしか必要としない非圧縮値が、9、10、又はそれ以上のビットで書き込まれるようになると、スペースが無駄になる。
【0207】
図19は、左側が非ランダムデータからの圧縮出力であるのに対して、右側がランダムデータからの圧縮出力の例を示す。入力ストリームが非ランダムデータを含む場合には、圧縮後の出力には、通常8ビットより大きい値が含まれる、これは、この値が以前に出現した反復バイトのシーケンスを表すからである。一般的に、最初の512個の値(10進数0~511)は、9ビットを必要とし、次の512個の値(10進数512~1023)は、10ビットを必要とし、次の1024個の値(10進数1024~2047)は、11ビットを必要とし、次の2048個の値(10進数2048~4095)は、12ビットを必要とするといった具合である。辞書の最大エントリに達するまで、最初の512個の値を9ビットを使用して格納でき、次の512個の値を10ビットを使用して格納でき、その後、全ての値をそのビット数で読み取ることを示しているので、この圧縮アルゴリズムの性質は、圧縮解除で有用である。例えば、辞書の最大エントリが4095の場合、12ビットを使用して最大数の値を格納する。アルゴリズムでは、9ビットから10ビット(
図19の破線で示す)、10ビットから11ビットといった具合に変更するタイミングを決定する。別の方法としては、圧縮後の各値と共に何かしらのメタデータを格納し、このメタデータには、値ごとに使用されるビット数が記載される。そして、各値は、最適ビット数の他、メタデータで表現可能である。しかし、メタデータは、必要なストレージを増加させる。したがって、読み取る値の数は事前に分かっているので、この「無駄な」メタデータは、書き込みと読み取り用の各シンボルのサイズを特定するのに必要ない。圧縮アルゴリズムは、単純に9ビットの書き込みから始まったら、次に高い辞書エントリの値が512に達したことを検出すると、10ビットの書き込みを開始するといった、具合になる。そうでなければ、アルゴリズムは、ビットストリーム内のどこで1つの圧縮後の値が始まり、以前の圧縮後の値が終了したかが分からなくなるはずなので、各シンボルに書き込むビット数が分からないまま、データストレージからデータを正常に再読み取りすることができなくなる。
【0208】
比較すると、入力ストリームがランダムデータを含む場合には、書き込みと読み取りに10ビット以上を必要とするデータストレージの領域では、256未満のストレージに書き込まれる値が多くなる。例えば、
図19の右側で図示される代表的な出力では、最初の511個の値を読み取った後、値2、61、32、9、47、及び12を読み取るために10ビットが使用されているが、これらは全て512未満であるため、10ビットの読み取りは必要ないはずである。その結果、入力ストリームの8ビットからなる大量の非圧縮バイトが、「圧縮後」の出力ストリームに10ビット以上として書き込まれるので、非圧縮値に必要なものよりも多くのビットが使用される。これはスペースの無駄であり、ランダムデータが原因で生じる圧縮不良を引き起こし、理想よりも多くのビットで非圧縮値をあまりにも多く書き込むことによって、更なる連鎖反応が起こる。
【0209】
様々な実施形態によると、入力ストリームそれぞれのデータが、反復パターンを持たない(例えば、ランダムデータの場合)ことにより、上手く圧縮できない場合には、すぐに判別される。この判別を行うために、インターポーザ回路120は、圧縮中の入力ストリームにnバイト(例えば、n=500)の窓を適用し、対応する圧縮後のストリームに出力がないクロックのクロックサイクル数をカウントする。インターポーザ回路120が、マルチシンボルシーケンスである入力ストリームの現在のデータで以前に観測されたシーケンスを観測し、さらに、出力された圧縮後のストリームでマルチシンボルシーケンスを表す1つの新しい値として出力するために、より長いシーケンスを構築している場合には、クロックサイクルの出力はない。これまで考察したように、圧縮がアクティブなクロックサイクル中に出力が不足するのは、NoOp関数である。窓の終了時に、インターポーザ回路120は、窓内のバイト/クロック数nに対する窓内のNoOpの比率(NoOp/n)を決定する。NoOpの比率が所定の比率閾値未満の場合には、これは、入力ストリームのデータが十分に圧縮されていないことを意味する。この比率の所定閾値は、例えば、約0.05~約0.20の範囲内とすることができる。この比率が所定の比率閾値未満の場合には、入力ストリームの圧縮は完全に停止し、入力ストリームの送信は、圧縮されずに続行する。この比率が所定の比率閾値よりも高い場合には、これは、データの圧縮は良好であり、入力ストリームの圧縮は続行することを意味する。
【0210】
代表的な実施形態によると、リアルタイムにワイドワードデータを圧縮する方法が提供されている。この方法は、シリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、各入力ストリームは、所定数のシンボルを含むことと、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームを送信することと、インターポーザ回路を通じて送信される入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、圧縮の副産物として生成され、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、これは、NoOpエントリの数が少なすぎて並列圧縮が効率的でないことを示しており、複数の入力ストリームに対する並列圧縮の実行、及び/又は、圧縮後のストリームの格納(つまり、複数の入力ストリームに対する並列圧縮の実行、又は圧縮後のストリームの格納、あるいはそれらの両方)を停止し、並列圧縮を実行せずに、インターポーザ回路を通して、入力ストリームを出力に送信し続けることで、データの格納時に元の8ビットのみが使用されるようにすることとを含む。
【0211】
別の代表的な実施形態によると、非一時的コンピュータ可読媒体は、並列圧縮された圧縮解除後のワイドワードデータを提供するための命令を格納する。少なくとも1つのプロセッサにより実行されると、この命令は、少なくとも1つのプロセッサに対して、シリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、各入力ストリームは、所定数のシンボルを含むことと、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームの送信を制御することと、この入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、複数の入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、複数の入力ストリームに対して実行された並列圧縮、及び/又は、圧縮後のストリームの格納(つまり、複数の入力ストリームに対して実行された並列圧縮、又は圧縮後のストリームの格納、あるいはそれらの両方)を停止し、並列圧縮を実行せずに、インターポーザ回路を通して、複数の入力ストリームの送信の制御を続行することとを実行させる。
【0212】
別の代表的な実施形態によると、システムは、並列圧縮された圧縮解除後のワイドワードデータを提供する。このシステムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT:device under test)からホストコンピュータまでの高速階層型パケットベースのプロトコルでのデータのシリアルストリームを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、高速データリンクに接続し、DUTとホストコンピュータとの間で送信されるデータを監視するインターポーザ回路とを含む。インターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納し、アナライザソフトウェアを使用して解析するために、UIコンピュータからアクセス可能なキャプチャバッファを含む。インターポーザ回路は更に、少なくとも1つの処理ユニットも含み、この処理ユニットは、上記送信されたデータのシリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、ここで各入力ストリームは、所定数のシンボルを含むことと、この複数の入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、その圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、複数の入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、複数の入力ストリームに対して実行された並列圧縮、及び/又は、圧縮後のストリームの格納を停止することであって、上記データは、並列圧縮なしで、DUTとホストコンピュータとの間で送信され続けることとを実行するようにプログラムされる。
【0213】
図20は、代表的な実施形態に係る、圧縮効率に優れた並列データ圧縮用に構成されたワイドワードデータのシンボルの例を示す。
【0214】
図20を参照すると、例えば、
図6、
図13A、及び
図15Aを参照して、これまで考察したように、ワイドワード2020は、並列圧縮を実行するために並列入力ストリームとして配列された256の入力ストリームを含む。図の例では、元のシリアルストリームは「0FAC1500...B00FAC1500...B00FAC1500...B001020407...0517192230...」であり、元のシリアルストリームのバイトは256の入力ストリームに分割されている。各入力ストリームの最初の3バイトには、非ランダム構成データ及びヘッダ等の圧縮可能データが含まれているものと仮定する。各入力ストリーム内の第3のバイト以降のバイトには、例えば、トランザクション層パケット(TLP)内のランダムペイロードデータ等の圧縮不能データが含まれるものと更に仮定する。圧縮アルゴリズムは、例えば、LZW圧縮アルゴリズム、又は、例えば、LZ78圧縮アルゴリズムから派生した他の圧縮アルゴリズムとすることができる。
【0215】
入力データが圧縮不能になる時点は、事前に分からない。そのため、データが圧縮不能になった箇所を特定するために、圧縮を実行し、さらに、そのパフォーマンスをリアルタイムに解析して、各入力ストリームの入力データが圧縮を停止したタイミングを実用上の問題として判断する。より詳細には、入力ストリームの圧縮に成功すると、例えば、変形版のLZWを使用して、対応する圧縮後の出力ストリームの反復バイトを表すNoOpエントリが生成されるので、以下で検討するように、圧縮後の出力ストリームの所定バイト数に対するNoOpエントリの数を数えることによって、圧縮の成功を判定することができる。
【0216】
図20は、例示的な第1の入力ストリームのみに対する圧縮の成功を判定する処理を示す。第1の入力ストリームの最初の3バイトは、同じ16進数値0F(すなわち、10進数15)である。このバイトが第1の入力ストリームで初めて現れるため、最初に出現した16進数値0Fは、第1の(圧縮後の)出力ストリームの第1のクロックサイクルで10進数15へと変換される。次のクロックサイクルでは、アルゴリズムは以前に見られた別の16進数値0Fを探し、最大限長い部分列を構築しようとするので、第1の出力ストリームにNoOpエントリが入力される。次のクロックサイクルでは、アルゴリズムは、別の16進値0Fを探し、第1の出力ストリームにおいて、元の2バイト0F0Fを表す次の出力値256を出力する。これにより、第1の出力ストリームの圧縮部2022では、15、NoOp,256の文字列となる。しかし、次の2クロックサイクルで読み取られる次の2バイト1と17は、初めて見られるので、出力値は、元の入力値の非圧縮の等価値に過ぎない。これにより、第1の出力ストリームの非圧縮部2024に、10進数1(すなわち、16進数1から)、及び10進数23(すなわち、16進数17から)の文字列が生成される。
【0217】
この簡略例では、3つの出力エントリに1つのNoOpがあるので、第1の出力ストリームの最初の3つの出力値のNoOp比は、0.33と高くなる。ペイロードの「ランダムデータ」が出現し、NoOpエントリが生成されない場合には、次の2つの出力値のNoOp比は、0と低くなる。なお、この例は、説明目的にすぎない。実際のところ、データがランダムで圧縮不能であることを判断する値が2つしかない場合、少なすぎて正確ではない、つまり、有用ではない。したがって、様々な実施形態によると、NoOpの比率を決定するためにnバイトの窓(例えば、離散窓)が適用される、ここで、nは所定の値である。経験上、n=500は、入力データが上手く圧縮されるかどうかを判断する上で良好な結果をもたらしたが、本教示の範囲から逸脱せずに、他のn値も取り入れてもよい。
【0218】
入力ストリームのデータがランダムであり、したがって圧縮が上手くいかないかどうかを判断するために、NoOpエントリの数と窓あたりのバイト数nとの比率を所定の比率閾値と比較する。この比率の所定の比率閾値は、例えば、約0.05~約0.20の範囲内とすることができる。より具体的には、この比率の所定の比率閾値は、例えば、データがランダムである場合の適切な指標を提供するために、約0.10とすることができる。なお、本教示の範囲から逸脱することなく、他の所定の比率閾値を適用してもよいことは言うまでもない。
【0219】
窓のサイズは、入力ストリームが圧縮不能になったタイミングをすぐに識別できるように、データに関して十分に小さくする必要があるが、窓を適用したことで、結果が信頼できなくなるほど小さくする必要はない。例えば、
図20の図示の例において、n=3バイトの離散窓は、データが圧縮不能になるタイミングを直ちに示すが、それがランダムであるかどうかに関するデータの性質を正確に反映するものではない。離散窓が大きすぎると、データが圧縮不能となるタイミングを特定するのが遅れることになる。例えば、n=5の場合、NoOpの比率は、1/5=0.2となり、ランダムデータのフローが既に開始しても、圧縮性テストに合格したことになる。
【0220】
一実施形態において、窓は、nバイトの離散窓とすることができる。離散窓の終了時に、次のnバイトのセットをカバーするよう、離散窓がシフトされる。代替実施形態において、窓は、nバイトのスライディングウィンドウ(sliding window)としてもよく、スライディングウィンドウの終わりに達する度に、1バイトずつスライドする。この場合には、一時バッファを使用して、スライディングウィンドウを形成し、この一時バッファは、キャプチャバッファのnバイトを保持し、ここで、圧縮後のコンテンツのnバイトは、スライディングウィンドウである。NoOpの数は、現在のウィンドウのコンテンツ全体でカウントされる。一時バッファは、例えば、現在の圧縮値を格納し(先頭にプッシュする)、n+1番目の圧縮値を後方に削除する(末尾からポップする)ファーストインファーストアウト(FIFO)バッファとすることができる。別の実施形態において、この比率は、窓を使用せずにnバイトごとにチェックされるだけである。
【0221】
図21は、代表的な実施形態に係る、ワイドワードデータの圧縮をリアルタイムに向上させる方法の流れ図である。この方法では、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減可能である。さらに、この方法は、格納に関して、圧縮プロセスが効率的でなくなったら必ず、圧縮をリアルタイムに停止し、圧縮せずに入力ストリームの転送を続行できる。
図21の様々なステップは、上述のように、インターポーザ回路120、及び/又は、UIコンピュータ110によって実行可能である。
【0222】
図21を参照すると、ブロックS2111において、圧縮されるべきデータのシリアルストリームは、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割される。各入力ストリームは、所定数のシンボルを含む。これまで考察したように、さらに、各入力ストリームには、圧縮可能(非ランダム)データと、圧縮不能(ランダム)データが含まれ得る。
【0223】
ブロックS2112において、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームを送信する。入力ストリームを、例えば、DUT140からUIコンピュータ110及び/又はホストコンピュータ150(つまり、UIコンピュータ110又はホストコンピュータ150あるいはそれらの両方)へと送信される。
【0224】
ブロックS2113において、インターポーザ回路を通じて送信される入力ストリームに対して、並列圧縮を実行して、対応する圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納する。この並列圧縮の後、入力ストリームに対応する1つ以上の圧縮後の出力ストリームは、それぞれの入力ストリームのバイトの反復を示す、NoOpエントリを生成する。圧縮は、所定のクロック周期を有するクロックで制御され、クロック周期ごとに入力ストリームの入力シンボルごとに、圧縮の判定を実施する。注目すべき点として、現バイトが入力ストリームの以前の連続バイトの反復である場合には、対応するクロックサイクルでの出力がないこと、つまり、そのクロックサイクルでは、ノーオペレーションであること(NoOpエントリ)を示している。
【0225】
ブロックS2114において、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数(n)で発生するNoOpエントリの数を特定する。並列圧縮を実行しながら、圧縮出力をスキップした(すなわち、NoOp)クロックサイクル数をカウントすることで、所定バイト数で発生するNoOpエントリの数を特定できる。圧縮出力をスキップするクロックサイクル数は、NoOpエントリの数と等しくなる。一実施形態において、圧縮出力をスキップするクロックサイクルの数は、カウンタを使用してカウントすることができる。
【0226】
一実施形態において、NoOpエントリの数は、入力ストリームに窓を適用することで特定され、ここで、窓のサイズは所定バイト数(n)に等しくなる。つまり、nバイトの窓を適用し、窓内のNoOpエントリの数を特定し、さらに、nバイトの窓を次のnバイトのセットに移動させる。
【0227】
ブロックS2115では、入力ストリームごとに、所定バイト数に対するNoOpエントリ数の比率を決定する。すなわち、比率=NoOpエントリ/nであり、ここで、nは比率を決定する窓内のバイト数である。注目すべき点として、上述したように、NoOpエントリは、圧縮アルゴリズムの性質上、反復を示すために一時的に生成されるもので、キャプチャバッファには格納されない。したがって、NoOpエントリは、事実上圧縮アルゴリズムの副産物として出現するが、代表的な実施形態に従って、ランダムデータの存在を特定するために使用される。
【0228】
ブロックS2116で、比率が所定の比率閾値を超えるかどうかを判定する。一実施形態において、この判定は、入力ストリームごとに行われる。代替実施形態において、この比率が所定の比率閾値を超えているかどうかに関する判定は、例えば、入力ストリームの1つを一次コンプレッサ(compressor)として使用して、他の入力ストリームのコンプレッサに通知することで、全ての並列入力ストリームに対して行われる。これまで考察したように、例えば、所定の比率閾値は、約0.05~約0.20の範囲とすることができる。この比率が所定の比率閾値を超えた場合(ブロックS2116:Yes)には、これは入力ストリーム中の圧縮可能(非ランダム)データを示すので、入力ストリーム中の次の所定バイト数(n)にわたり、圧縮後のデータの並列圧縮と格納が継続される。これは、ブロックS2117でカウントをゼロにリセットし、さらに、入力ストリームの次の所定バイト数(n)で並列圧縮を続行するブロックS2113のように、カウントを再スタートすることで示される。
【0229】
この比率が所定の比率閾値を超えない場合(ブロックS2116:No)には、これは、圧縮不能(ランダム)データであることを示しており、入力ストリームの並列圧縮と格納が停止する。その後、インターポーザ回路を通じた入力ストリームの送信は、並列圧縮を実行せずに、ブロックS2118で続行可能である。つまり、データ送信は、圧縮後の符号ではなく、クリア符号で続行される。これまで考察したように、この比率が所定の比率閾値を超えない場合には、これは、NoOpエントリの数が少なすぎて並列圧縮が効率的でないことを示す。各入力ストリームの比率が決定されると、入力ストリームの圧縮を個別に停止することができる。或る入力ストリームを一次コンプレッサとして使用して、全ての入力ストリームの比率が決定されると、この一次コンプレッサは、他の入力ストリームに対して圧縮不能となったデータにフラグを付ける。一実施形態において、この比率は、この入力ストリームについて引き続き決定され、比率が再び好ましい状態になると、圧縮、又は格納を再開することができる。
【0230】
上記の実施形態には多くの利点がある。第1に、実装が容易である。クロックサイクルが出力をスキップする回数(すなわち、NoOp)をカウントするには、カウンタのみが必要である。カウンタは一定のクロックサイクル数(例えば、離散窓において)ごとにチェックされ、データがランダムかどうかが判断される。時間に対して測定されるNoOpの比率は、圧縮率に関する代理指標(proxy measure)である。さらに、データがランダムでない場合、通常のLZWアルゴリズムは、変わらず続行し、リアルタイムに動作し続ける。
【0231】
第2に、この実施形態は、圧縮に失敗したバイト数の上限を、n×幅のワードに制限する。ここで、nはウィンドウ内のバイト数、例えば、n=500である。例えば、ワイドワードが256の場合、キャプチャバッファに書き込まれる圧縮に失敗したバイトは最大で128Kbであり、通常、これは、入力データストリーム内の総データの1%未満に相当する。ランダムデータに遭遇したら、対応する圧縮後のデータストリームの出力ファイルが対応する入力ファイルより大きくなる前に、できるだけ早く圧縮を停止させ、これにより、圧縮処理の出力が圧縮処理への入力より大きくならないようにする。
【0232】
第3に、入力データストリームは、非ランダムデータで開始可能であり、これにより、圧縮に成功してから、ランダムデータに移行することができる。これは、例えば、データ転送に移行する前に、リンクが最初に起動モードになっている場合に発生し、この場合、そのペイロードのいずれかのランダムデータが送信される。この窓は、このような状況でも、たとえ、ランダムデータのペイロードがデータストリームの後半に出現し、最終的に、動作リンクの主要なトラフィックタイプになった場合であっても、このランダムデータのペイロードが確実に認識されるようにする。
【0233】
前述の実施形態は全て、コンピュータの機能を改善し、本来、UIコンピュータ110及びインターポーザ回路120等のコンピュータ及び/又は他の処理デバイス(つまり、UIコンピュータ110及びインターポーザ回路120等のコンピュータ、又は他の処理デバイス、あるいはそれらの両方)の機能に関する技術を改善させる。とりわけ、本明細書に記載の並列圧縮及び圧縮解除技術は、データをインターポーザ回路120からUIコンピュータ110まで高帯域幅で非常に迅速に提供し、UIコンピュータ110、及び/又は、UIコンピュータ110がホストするプロトコルアナライザ(UIコンピュータ110、又はUIコンピュータ110がホストするプロトコルアナライザ、あるいはそれらの両方)による全てのデータのリアルタイム処理及び解析を可能とする。また、本明細書に記載の並列圧縮及び圧縮解除技術は、主として、圧縮後のストリーム中の圧縮符号の並び替えに基づいて、データの位置を追跡するので、実行に必要なメモリはごく僅かとなる。さらに、この並列圧縮及び圧縮解除技術では、コードを見ながらリアルタイムに、つまり、後戻りすることなく、圧縮と圧縮解除が可能である。圧縮されるデータの性質上、有効な結果が得られない場合、圧縮を監視して、中断することもできる。
【0234】
本発明は、図面及び上記説明に詳細に図示及び説明されてきたが、そのような説明図及び説明は、例示又は模範とみなされるべきであり、限定とみなされるべきではなく、本発明は、開示された実施形態に限定されるものではない。当業者であれば、請求項に係る発明を実施する際に、図面、開示及び添付の特許請求の範囲の検討により、開示される実施形態に対する他の変形形態を理解し、それを行うことができる。特許請求の範囲において、「を含む(comprising)」という単語は他の要素又はステップを排除せず、不定冠詞「一つの("a" or "an")」は複数形を排除しない。或る特定の手段が互いに異なる複数の従属請求項に列挙されているだけであれば、それらの手段を組み合わせて有利に使用することができないことは示されていないものとする。
【0235】
本発明の態様は、装置、方法又はコンピュータプログラム製品として具現化することができる。したがって、本発明の態様は、全体がソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様及びハードウェアの態様を組み合わせた実施形態の形を取ることができる。これらは全て、本明細書において、「回路」、「モジュール」又は「システム」と総称される場合がある。さらに、本発明の態様は、コンピュータ実行可能コードが具現化された1つ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形を取ることができる。
【0236】
代表的な実施形態が本明細書に開示されているが、当業者であれば、本教示に従った多くの変形形態が可能であり、添付の特許請求の範囲の範囲内にあることが分かる。したがって、本発明は、添付の特許請求の範囲の範囲内にあることを除いて限定されるものではない。
【0237】
本開示の要約書は、米国特許法施行規則第1.72(b)に準拠するように与えられ、特許請求の範囲又は意味を解釈又は制限するために使用されないという了解の下に提出される。さらに、これまでの発明を実施するための形態において、本開示を簡素化する目的で、種々の特徴がまとめられる場合があるか、又は単一の実施形態において説明される場合がある。本開示は、特許請求される実施形態が、各請求項において明確に列挙されるより多くの特徴を必要とするという意図を反映すると解釈されるべきではない。むしろ、添付の特許請求の範囲が反映するように、発明の主題は、開示される実施形態のいずれかの実施形態の全ての特徴より少ない特徴を対象にする場合がある。したがって、添付の特許請求の範囲は発明を実施するための形態に組み込まれ、各請求項は、別々に特許請求される主題を規定するものとして自立している。
【外国語明細書】