[go: up one dir, main page]

JP2023164403A - Method and system for reducing data stored in capture buffer - Google Patents

Method and system for reducing data stored in capture buffer Download PDF

Info

Publication number
JP2023164403A
JP2023164403A JP2023074726A JP2023074726A JP2023164403A JP 2023164403 A JP2023164403 A JP 2023164403A JP 2023074726 A JP2023074726 A JP 2023074726A JP 2023074726 A JP2023074726 A JP 2023074726A JP 2023164403 A JP2023164403 A JP 2023164403A
Authority
JP
Japan
Prior art keywords
stream
compressed
data
compression
tlp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023074726A
Other languages
Japanese (ja)
Inventor
アンドリュー・ロバート・ルヘイン
Robert Ruhein Andrew
ダニエル・アレハンドロ・ガルシア・ウジョア
Alexandro Garcia Ulloa Daniel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Keysight Technologies Inc
Original Assignee
Keysight Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Keysight Technologies Inc filed Critical Keysight Technologies Inc
Publication of JP2023164403A publication Critical patent/JP2023164403A/en
Pending legal-status Critical Current

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

To provide a method and system for reducing data stored in a capture buffer of an interposer circuit during communication of the data over a data link according to a high-speed, layered packet-based protocol for analysis.SOLUTION: The method includes: performing data integrity checks of the data in real time, and omitting data integrity bits corresponding to the data integrity checks from transaction layer packets (TLPs) and data link layer packets (DLLPs) of the data when the data is correct; performing ACK/NACK matching in real time to confirm successful delivery of the TLPs of the data using ACK/NACK packets, where the ACK/NACK packets are omitted from being stored in the capture buffer; removing and/or reducing fields in real time from the TLPs and/or the DLLPs of the data; and compressing data payloads of the TLPs and/or the DLLPs of the data in parallel.SELECTED DRAWING: Figure 2

Description

[関連出願の相互参照]
本出願は、米国特許法第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号の全開示は、その全体が具体的に引用することにより明確に本明細書の一部をなすものとする。
[Cross reference to related applications]
This application is filed under 35 U.S.C. 119(e) in U.S. Provisional Application No. 63/336,009, filed on April 28, 2022; Application No. 63/399,118, U.S. Provisional Application No. 63/418,761 filed October 24, 2022, and U.S. Provisional Application No. 63/431,100 filed December 8, 2022. No. 18/090,311, filed December 28, 2022, which claims priority to US Pat. The entire disclosures of U.S. Provisional Application No. 63/336,009, U.S. Provisional Application No. 63/399,118, U.S. Provisional Application No. 63/418,761, and U.S. Provisional Application No. 63/431,100 are incorporated herein by reference. The entirety of this document is hereby specifically incorporated by reference.

周辺機器相互接続エクスプレス(PCIe:Peripheral Component Interconnect Express)は、パーソナルコンピュータ(PC:personal computer)のホスト中央処理ユニット(CPU:central processing unit)と、例えば、グラフィックスカード、サウンドカード、ソリッドステートドライブ(SSD:solid state drive)、及びデータセンタで使用されるワークロードアクセラレータカード等の様々な高速周辺構成要素との間の代表的な相互接続プロトコルである。そのため、最新バージョンの仕様策定後、市場をできるだけ多く獲得するために、PCIeインターコネクトをベースとする新製品を迅速に発売することが求められる。市場投入までの時間を短縮するために、様々なツールで開発活動を支援し、加速させている。よく使用されるツールの1つに、PCIeプロトコルアナライザがある。従来のPCIeプロトコルアナライザは、PCIeバス上で通信する様々なモジュール同士のPCIe相互作用に関する詳細な解析とデバッグのユーザに対する支援を目的とする、様々な表示とプロトコル検索機能をサポートしている。 Peripheral Component Interconnect Express (PCIe) is a system that connects a personal computer's host central processing unit (CPU) to a computer, such as a graphics card, sound card, or solid-state drive (SSD). (solid state drives) and various high-speed peripheral components such as workload accelerator cards used in data centers. Therefore, after the latest version of the specification is developed, new products based on the PCIe interconnect must be launched quickly in order to capture as much of the market as possible. To reduce time to market, we use a variety of tools to support and accelerate development activities. One commonly used tool is a PCIe protocol analyzer. Conventional PCIe protocol analyzers support various display and protocol search functions intended to assist the user in detailed analysis and debugging of the PCIe interactions between the various modules communicating on the PCIe bus.

一般的に、PCIeは、周辺機器接続用の高速ハードウェアインタフェースとして使用されるレイヤパケットベースのプロトコルであり、このプロトコルでは、主として、データリンク層とトランザクション層と呼ばれる上位の2層でデータが転送される。データリンク層は、確認応答による配信の保証、フロー制御、及び電力管理機能をサポートする。データリンク層よりも上位にあるトランザクション層は、スプリットトランザクション(リクエストとレスポンスを時間で区切ったトランザクション)を実装して、ターゲットデバイスがレスポンス用のデータを収集している間、通信リンクが他のトラフィックを搬送できるようにする。階層型パケットベースプロトコルの最下層は、物理層と呼ばれる。 In general, PCIe is a layered packet-based protocol used as a high-speed hardware interface for connecting peripheral devices, and in this protocol, data is mainly transferred in the upper two layers called the data link layer and the transaction layer. be done. The data link layer supports guaranteed delivery with acknowledgments, flow control, and power management functions. Above the data link layer, the transaction layer implements split transactions (transactions where the request and response are separated by time) so that while the target device collects data for the response, the communication link collects data for other traffic. be able to be transported. The lowest layer of a hierarchical packet-based protocol is called the physical layer.

開発段階の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/秒のデータキャプチャをサポートし得る。 The latest version of PCIe in the development stage, the PCIe Gen6 protocol by the Peripheral Component Interconnect Special Interest Group (PCI-SIG(TM)), supports 64 GB/s for the PCIe Gen5 protocol and 32 GB for the PCIe Gen4 protocol. It is contemplated that the multi-lane bandwidth will increase from the traditional multi-lane bandwidth of 128 GB/sec to up to 128 GB/sec. By supporting very high throughput, the PCIe Gen6 protocol is widely used in the storage industry for Non-Volatile Memory Express (NVMe), Serial Advanced Technology Attachment (SATA), and small computer systems. In addition to being used in conjunction with the Small Computer System Interface (SCSI) express protocol, it is also expected to be used in future accelerator protocols such as CXL, CCIX, and Gen-Z. To accommodate such high bit rates, when PCIe protocol analyzers capture protocol exchanges on the PCIe bus, solutions proposed so far rely on large memory buffers for storage, e.g. It can support full 64GB/s data capture for up to 4 seconds on Gen5.

しかし、このようなアプローチは、転送、格納、最終的には、処理する必要のあるデータが膨大であることが原因で、材料コストがかかり、さらに、誤りも起こりやすくなることで、信号完全性、及びデータ処理に関する課題を招くことがある。 However, such approaches are costly due to the large amount of data that needs to be transferred, stored, and ultimately processed, and are also error-prone, resulting in poor signal integrity. , and can lead to data processing challenges.

例示的な実施形態は、添付の図面と併せて読むと、以下の詳細な説明から最も深く理解される。種々の特徴は必ずしも縮尺通りに描かれていないことを強調したい。実際には、検討を明確にするために、寸法が任意に拡大又は縮小される場合がある。適用可能で、実用的な場合にはいつでも、同じ参照番号が同じ要素を指している。 The exemplary embodiments are best understood from the following detailed description when read in conjunction with the accompanying drawings. It is emphasized that the various features are not necessarily drawn to scale. In practice, the dimensions may be arbitrarily enlarged or reduced for clarity of discussion. Wherever applicable and practical, like reference numbers refer to like elements.

代表的な実施形態に係る、高速データリンクを介したデータの通信のキャプチャ中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、格納されたデータ量を削減するシステムの簡略ブロック図である。A simplified block diagram of a system that reduces the amount of data stored during the capture of data communications over high-speed data links without loss of functionality and without loss of information available for analysis, according to exemplary embodiments. It is a diagram. 代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法を示す簡略流れ図である。Capture buffers of interposer circuits without loss of functionality and without loss of information available for analysis during communication of data over a data link that conforms to a high-speed hierarchical packet-based protocol, according to exemplary embodiments. 2 is a simplified flowchart illustrating a method for reducing the amount of data stored in a computer. 代表的な実施形態に係る、キャプチャバッファに格納せずに破棄するべき例示的なトランザクション層パケット(TLP:transaction layer packet)及び例示的なデータリンク層パケット(DLLP:data link layer packet)のCRCフィールドを示す図である。CRC fields of an example transaction layer packet (TLP) and an example data link layer packet (DLLP) to be discarded without being stored in a capture buffer, according to a representative embodiment. FIG. 代表的な実施形態に係る、キャプチャバッファに格納せずに、ACK/NACKパケットを破棄可能にする、TLPとDLLPのシーケンス番号フィールドを示す図である。FIG. 4 illustrates TLP and DLLP sequence number fields that allow ACK/NACK packets to be discarded without being stored in a capture buffer, according to an exemplary embodiment. 代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべきTLPとDLLPのフレーミングトークンフィールドを示す図である。FIG. 4 illustrates framing token fields of TLPs and DLLPs that should be discarded rather than stored in a capture buffer, according to an exemplary embodiment. 例示的な16レーンのGen6 PCIeリンクのFLITを示す図である。FIG. 2 illustrates FLIT of an exemplary 16-lane Gen6 PCIe link. 代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべき例示的な構成読み取りTLPの既知のフィールドを示す図である。FIG. 4 illustrates known fields of an example configuration read TLP to be discarded rather than stored in a capture buffer, according to a representative embodiment. 代表的な実施形態に係る、キャプチャバッファに格納する前に、サイズを削減するべき構成読み取りTLPの削減可能フィールドを示す図である。FIG. 6 is a diagram illustrating reducible fields of a configuration read TLP to be reduced in size before being stored in a capture buffer, according to an exemplary embodiment; 代表的な実施形態に係る、単一回路で並列データ圧縮を可能とするよう構成されたワイドワードデータのシンボルの例を示す図である。FIG. 3 is a diagram illustrating an example of wideword data symbols configured to enable parallel data compression in a single circuit, according to a representative embodiment. 代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、インターポーザ回路のキャプチャバッファに格納されるべきデータペイロードの並列データ圧縮を実行する方法を示す簡略流れ図である。4 illustrates a method for performing parallel data compression of a data payload to be stored in a capture buffer of an interposer circuit during communication of data over a data link that conforms to a high speed layered packet-based protocol, according to a representative embodiment; This is a simplified flowchart. 従来の圧縮解除技術で圧縮解除するためのワイドワードデータ入力のシンボルを示す図である。1 is a diagram illustrating symbols of wideword data input for decompression with conventional decompression techniques; FIG. 代表的な実施形態に係る、圧縮解除用の入力のために並べ替えられたワイドワードデータのシンボルを示す図である。FIG. 4 illustrates symbols of wideword data reordered for input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるその他の例を示す図である。FIG. 7 illustrates another example of reordering symbols of wideword data input for decompression, in accordance with representative embodiments. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるその他の例を示す図である。FIG. 7 illustrates another example of reordering symbols of wideword data input for decompression, in accordance with representative embodiments. 代表的な実施形態に係る、圧縮解除のための逆の構造体(inverse structure)を作成する方法を示す流れ図である。3 is a flowchart illustrating a method of creating an inverse structure for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えるためのワイドワードデータの並列圧縮を示す図である。FIG. 3 illustrates parallel compression of wideword data to reorder symbols of wideword data input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルを並べ替えることを示す図である。FIG. 3 is a diagram illustrating reordering symbols of a wideword data input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、ワイドワードデータの並べ替えられたシンボルの圧縮解除を示す図である。FIG. 3 illustrates decompression of permuted symbols of wideword data in accordance with a representative embodiment. 代表的な実施形態に係る、圧縮解除用の入力のためにシフトされたワイドワードデータのシンボルを示す図である。FIG. 3 illustrates symbols of wideword data shifted for input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルをシフトするためのワイドワードデータの並列圧縮を示す図である。FIG. 3 illustrates parallel compression of wideword data for shifting symbols of wideword data input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、圧縮解除用のワイドワードデータ入力のシンボルをシフトすることを示す図である。FIG. 3 is a diagram illustrating shifting symbols of a wideword data input for decompression, according to an exemplary embodiment. 代表的な実施形態に係る、ワイドワードデータのシフト後のシンボルの圧縮解除を示す図である。FIG. 3 illustrates decompression of shifted symbols of wideword data in accordance with an exemplary embodiment. 代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。2 is a simplified flowchart illustrating a method of providing decompressed wideword data during communication of wideword data over a data link, according to an exemplary embodiment. 代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。2 is a simplified flowchart illustrating a method of providing decompressed wideword data during communication of wideword data over a data link, according to an exemplary embodiment. 代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。1 is a simplified block diagram illustrating an example of a computer system that reduces the amount of data stored during communication of data over a high speed data link, according to a representative embodiment. FIG. 代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。1 is a simplified block diagram illustrating an example of a computer system that reduces the amount of data stored during communication of data over a high speed data link, according to a representative embodiment. FIG. 左側が非ランダムデータからの圧縮後の出力であるのに対して、右側がランダムデータからの圧縮後の出力の例を示す図である。The left side is an output after compression from non-random data, while the right side is a diagram showing an example of an output after compression from random data. 代表的な実施形態に係る、圧縮効率に優れた並列データ圧縮用に構成されたワイドワードデータのシンボルの例を示す図である。FIG. 3 is a diagram illustrating an example of symbols of wide word data configured for parallel data compression with excellent compression efficiency, according to a representative embodiment. 代表的な実施形態に係る、ワイドワードデータの圧縮をリアルタイムに向上させる方法の流れ図である。2 is a flowchart of a method for improving compression of wide word data in real time, according to an exemplary embodiment.

以下の詳細な説明では、説明のためであり、限定はしないが、本教示による一実施形態を完全に理解してもらうために、具体的な詳細を開示する代表的な実施形態が記述される。代表的な実施形態の説明を不明瞭にするのを避けるために、既知のシステム、デバイス、材料、動作方法及び製造方法の説明は省略される場合がある。それにもかかわらず、当業者の理解の範囲内にあるシステム、デバイス、材料及び方法は、本教示の範囲内にあり、代表的な実施形態に従って使用される場合がある。本明細書において使用される用語は特定の実施形態を説明することのみを目的としており、限定することを意図するものでないことは理解されたい。定義される用語は、定義された用語の科学技術的な意味に加えて、本教示の技術分野において一般的に理解され、受け入れられるような意味を有する。
種々の要素又は構成要素を説明するために、本明細書において第1の、第2の、第3の等の用語が使用される場合があるが、これらの要素又は構成要素はこれらの用語によって限定されるべきではないことは理解されたい。これらの用語は、或る要素又は構成要素を別の要素又は構成要素から区別するためにのみ使用される。したがって、以下に論じられる第1の要素又は構成要素は、本開示の教示から逸脱することなく、第2の要素又は構成要素と呼ぶことができる。
The following detailed description sets forth representative embodiments that disclose specific details for purposes of explanation, and not limitation, to provide a thorough understanding of an embodiment according to the present teachings. . Descriptions of known systems, devices, materials, methods of operation, and methods of manufacture may be omitted to avoid obscuring the description of the representative embodiments. Nevertheless, systems, devices, materials and methods within the understanding of those skilled in the art are within the scope of the present teachings and may be used in accordance with the exemplary embodiments. It is to be understood that the terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. Defined terms have meanings as commonly understood and accepted in the art to which the present teachings apply, in addition to their scientific and technical meanings.
Although terms such as first, second, third, etc. may be used herein to describe various elements or components, these elements or components are also referred to by these terms. It should be understood that it should not be limited. These terms are only used to distinguish one element or component from another. Accordingly, a first element or component discussed below may be referred to as a second element or component without departing from the teachings of this disclosure.

本明細書において使用される用語は、特定の実施形態を説明することのみを目的とし、限定することを意図するものではない。本明細書及び添付の特許請求の範囲において使用されるときに、「一つの(a、an)」及び「その、前記(the)」という単数形の用語は、文脈上、他の意味として明確に指示される場合を除いて、単数形及び複数形の両方を含むことを意図している。さらに、「備える、含む(comprises、comprising)」という用語及び/又は類似の用語(つまり、「備える、含む」という用語又は類似の用語あるいはそれらの全て)は、本明細書において使用されるときに、言及される特徴、要素及び/又は構成要素の存在を指定するが、1つ以上の他の特徴、要素、構成要素及び/又はそのグループの存在又は追加を除外しない。本明細書において使用されるときに、「及び/又は(and/or)」という用語は、関連して列挙される項目のうちの1つ以上の項目のありとあらゆる組み合わせを含む。 The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. As used in this specification and the appended claims, the singular terms "a," "an," "the," and "the" are clearly defined as having other meanings depending on the context. is intended to include both singular and plural forms, except where indicated. Additionally, the term "comprises, comprising" and/or similar terms (i.e., the term "comprises, including" and/or similar terms) as used herein , specifies the presence of the mentioned feature, element and/or component, but does not exclude the presence or addition of one or more other features, elements, components and/or groups thereof. As used herein, the term "and/or" includes any and all combinations of one or more of the associated listed items.

別段の言及がない限り、或る要素又は構成要素が、別の要素又は構成要素に「接続される(connected to)」又は「結合される(coupled to)」又は「隣接する(adjacent to)」と言われるとき、その要素又は構成要素を他の要素又は構成要素に直接接続又は結合することができるか、又は介在する要素又は構成要素が存在する場合があることは理解されたい。すなわち、これらの用語及び類似の用語は、2つの要素又は構成要素を接続するために、1つ以上の中間にある要素又は構成要素が利用される場合がある事例を含む。しかしながら、或る要素又は構成要素が、別の要素又は構成要素に「直接接続される」と言われるとき、これは、2つの要素又は構成要素が、任意の中間にある又は介在する要素又は構成要素を用いることなく、互いに接続される事例のみを含む。 Unless otherwise stated, an element or component is "connected to" or "coupled to" or "adjacent to" another element or component. It is to be understood that when referred to as, the element or component may be directly connected or coupled to other elements or components, or there may be intervening elements or components. That is, these terms and similar terms include instances where one or more intermediate elements or components may be utilized to connect two elements or components. However, when an element or component is said to be "directly connected" to another element or component, this does not mean that the two elements or components are connected to any intermediate or intervening elements or components. Contains only cases that are connected to each other without using any elements.

本開示は、それゆえ、その様々な態様、実施形態及び/又は具体的な特徴若しくはサブ構成要素のうちの1つ以上を通して、以下に具体的に言及されるような利点のうちの1つ以上を明らかにすることを意図している。説明のためであり、限定はしないが、本教示による一実施形態を完全に理解してもらうために、具体的な詳細を開示する例示的な実施形態が記述される。しかしながら、本明細書において開示される具体的な詳細から逸脱するが、本開示と矛盾しない他の実施形態も依然として、添付の特許請求の範囲内にある。さらに、例示的な実施形態の説明を不明瞭にしないように、既知の装置及び方法の説明は省略される場合がある。そのような方法及び装置は、本開示の範囲内にある。 The present disclosure, through one or more of its various aspects, embodiments and/or specific features or subcomponents, therefore provides one or more of the advantages as specifically mentioned below. is intended to clarify. For purposes of explanation, and not limitation, exemplary embodiments are described that disclose specific details to provide a thorough understanding of an embodiment according to the present teachings. However, other embodiments that depart from the specific details disclosed herein but are consistent with this disclosure are still within the scope of the following claims. Moreover, descriptions of well-known devices and methods may be omitted so as not to obscure the description of the example embodiments. Such methods and apparatus are within the scope of this disclosure.

代表的な実施形態によると、テスト対象システムと、解析用のプロトコルアナライザとの間の高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法が提供されている。この方法は、データのデータ完全性チェックをリアルタイムに実行し、このデータ完全性チェックにより、データが正しいことが示された場合には、データのトランザクション層パケット(TLP:transaction layer packet)及びデータリンク層パケット(DLLP:data link layer packet)からのデータ完全性チェックに対応するデータ完全性ビットを、キャプチャバッファに格納することから省くことと、ACK/NACKパケットを使用して、データのTLPが正常に配信されたことを確認するために、確認応答と否定応答(ACK/NACK)の照合をリアルタイムに実行し、このACK/NACKパケットを、キャプチャバッファに格納することから省くことと、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLP(つまり、TLP又はDLLPあるいはそれらの両方)からリアルタイムにフィールドを削除、及び/又は削減(つまり、削除又は削減あるいはそれらの両方)をすること、及び/又は、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPのペイロードを並列で圧縮することとを含む。 According to exemplary embodiments, during communication of data over a data link that conforms to a high-speed layered packet-based protocol between a system under test and a protocol analyzer for analysis, without loss of functionality and analysis. A method is provided to reduce the amount of data stored in the capture buffer of an interposer circuit without losing information available in the interposer circuit. This method performs a data integrity check of the data in real time, and if the data integrity check indicates that the data is correct, the data is transferred to a transaction layer packet (TLP) and a data link. Omitting the data integrity bits corresponding to data integrity checks from the data link layer packet (DLLP) from being stored in the capture buffer and using ACK/NACK packets to ensure that the TLP of the data is correct. In order to confirm that the packet has been delivered to the capture buffer, we perform real-time verification of the acknowledgment and negative response (ACK/NACK), and omit this ACK/NACK packet from being stored in the capture buffer. deleting and/or reducing fields (i.e., deleting and/or reducing) in real time from a TLP and/or DLLP (i.e., TLP and/or DLLP) of data to be stored; and/or or compressing the TLP and/or DLLP payload of the data to be stored in the capture buffer in parallel.

代表的な実施形態によると、システムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT)からホストコンピュータまでの高速階層型パケットベースのプロトコルでのデータを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、DUTとホストコンピュータとの間で送信されるデータを監視するために高速データリンクに接続されたインターポーザ回路(interposer circuit)であって、このインターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納するためのキャプチャバッファを含み、UIコンピュータがアナライザソフトウェアで解析するためにアクセスすることができるインターポーザ回路とを含む。上記インターポーザ回路は、データのデータ完全性チェックをリアルタイムに実行し、このデータ完全性チェックにより、データが正しいことが示された場合には、データのTLP及びDLLPからのデータ完全性チェックに対応するデータ完全性ビットを、キャプチャバッファに格納することから省くことと、ACK/NACKパケットを使用して、データのTLPが正常に配信されたことを確認するために、ACK/NACKの照合をリアルタイムに実行し、このACK/NACKパケットを、キャプチャバッファに格納することから省くことと、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPからリアルタイムにフィールドを削除、及び/又は削減すること、及び/又は、キャプチャバッファに格納されるべきデータのTLP及び/又はDLLPのペイロードを並列で圧縮することとを実行するようにプログラムされている。 According to an exemplary embodiment, the system transmits data in a high-speed layered packet-based protocol from a device under test (DUT) to a host computer via a high-speed data link that conforms to a high-speed layered packet-based protocol. A user interface (UI) computer configured to run analyzer software for analysis and an interposer circuit connected to a high-speed data link to monitor data transmitted between the DUT and the host computer. The interposer circuit includes a capture buffer for storing data transmitted between the DUT and the host computer, and the interposer circuit can be accessed by the UI computer for analysis with analyzer software. include. The interposer circuit performs a data integrity check of the data in real time, and if the data integrity check indicates that the data is correct, it responds to data integrity checks from the TLP and DLLP of the data. By omitting data integrity bits from being stored in the capture buffer and using ACK/NACK packets, ACK/NACK verification is performed in real time to ensure that the data's TLP is successfully delivered. executing and omitting this ACK/NACK packet from being stored in the capture buffer; and removing and/or reducing fields in real time from the TLP and/or DLLP of data to be stored in the capture buffer; and/or compressing the TLP and/or DLLP payload of data to be stored in the capture buffer in parallel.

代表的な実施形態によると、システムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、DUTからホストコンピュータまでのデータを高速階層型パケットベースのプロトコルで解析するアナライザソフトウェアを実行するように構成されたUIコンピュータと、DUTとホストコンピュータとの間で送信されるデータを監視するために高速データリンクに接続されたインターポーザ回路であって、このインターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納するためのキャプチャバッファを含み、UIコンピュータがアナライザソフトウェアで解析するためにアクセスできるインターポーザ回路とを含む。上記インターポーザ回路は、TLP及び/又はDLLPを並列圧縮し、圧縮されたTLP及び/又はDLLPをキャプチャバッファに格納するようプログラムされており、TLP及び/又はDLLPはそれぞれ、ヘッダ及びペイロードを含む。TLP及び/又はDLLPを圧縮することは、インターポーザ回路でのTLP及び/又はDLLPのシンボルを、複数のシリアル高速レーンで受信することと、シリアル高速レーンからのシンボルを、TLP及び/又はDLLPのクロックサイクルの各クロックに到着するワイドワードへとデスキューすることと、ワイドワードを入力ストリームに配列することであって、各入力ストリームは、クロックサイクルの各クロックに到着する各ワイドワードの同位置からのシンボルを含むことと、上記シンボルを圧縮するためのハッシュテーブルを用いてシンボルを圧縮し、最終的に圧縮されたシンボルをキャプチャバッファに格納することとを含む。 According to an exemplary embodiment, the system executes analyzer software that analyzes data from the DUT to the host computer via a high-speed data link that conforms to a high-speed hierarchical packet-based protocol. an interposer circuit connected to the high-speed data link for monitoring data transmitted between the DUT and the host computer, the interposer circuit configured to communicate with the DUT and the host computer; and an interposer circuit that the UI computer can access for analysis with analyzer software. The interposer circuit is programmed to compress TLPs and/or DLLPs in parallel and store the compressed TLPs and/or DLLPs in a capture buffer, each of which includes a header and a payload. Compressing a TLP and/or DLLP involves receiving TLP and/or DLLP symbols on multiple serial high-speed lanes at an interposer circuit and combining the symbols from the serial high-speed lanes with the TLP and/or DLLP clock. deskewing into widewords that arrive at each clock of the cycle; and arranging the widewords into input streams, each input stream containing the output from the same position of each wideword that arrives at each clock of the clock cycle. compressing the symbols using a hash table for compressing the symbols, and finally storing the compressed symbols in a capture buffer.

代表的な実施形態によると、並列圧縮されたワイドワードデータを圧縮解除(decompress)する方法が提供されている。この方法は、ワイドワードデータ内のワイドワードのメモリ構造のインスタンスを作成することであって、メモリ構造の上記インスタンスは、ワイドワードの圧縮辞書の反対(inverse)からの参照結果(instance)であることと、メモリ構造の上記インスタンスを使用して、ワイドワードデータの途切れのない(gap-free)圧縮後の出力ストリームから複数の圧縮後の符号を反復して取得することであって、上記複数の圧縮後の符号の各圧縮後の符号は、少なくとも1つの文字コード、及び逆方向のポインタ(reverse-pointer:逆ポインタ)を含み、上記複数の圧縮後の符号の少なくとも1つの圧縮後の符号は、複数の文字コードを有するマルチシンボルの文字列を含むことと、複数の圧縮後の符号である逆ポインタをそれぞれ繰り返し辿って、圧縮解除後の中間ストリームを形成することと、少なくとも1つの圧縮後の符号のマルチシンボル文字列の複数の文字コードの順序を逆転させて、圧縮解除後のストリームを形成することとを含む。 According to an exemplary embodiment, a method is provided for decompressing parallel compressed wideword data. The method is to create an instance of a wideword memory structure in wideword data, where the above instance of the memory structure is an instance of the inverse of a wideword compression dictionary. and using said instance of a memory structure to iteratively obtain a plurality of compressed symbols from a gap-free compressed output stream of wideword data, said plurality of Each compressed code of the compressed codes includes at least one character code and a reverse pointer, and each compressed code of the plurality of compressed codes includes at least one character code and a reverse pointer. includes a multi-symbol string having a plurality of character codes; repeatedly following each inverse pointer that is a plurality of compressed codes to form a decompressed intermediate stream; and at least one compressed reversing the order of the multiple character codes of the multi-symbol string of the subsequent code to form a decompressed stream.

図1は、代表的な実施形態に係る、高速データリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、格納されたデータ量を削減するシステムの簡略ブロック図である。 FIG. 1 illustrates a system for reducing the amount of data stored during communication of data over a high-speed data link without loss of functionality and without loss of information available for analysis, according to an exemplary embodiment. FIG. 2 is a simplified block diagram.

図1を参照すると、システム100は、ユーザインタフェース(UI)コンピュータ110、及びインターポーザ回路120を含む。インターポーザ回路120は、テスト対象デバイス(DUT)140とテスト対象システムのホストコンピュータ150との間を高速データリンク130で接続し、高速データリンク130を通じて通信されるデータを受信、処理するように構成される。データはインターポーザ回路120によりUIコンピュータ110に供給され、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザをホストする。 Referring to FIG. 1, system 100 includes a user interface (UI) computer 110 and an interposer circuit 120. The interposer circuit 120 is configured to connect a device under test (DUT) 140 and a host computer 150 of the system under test over a high speed data link 130 and to receive and process data communicated over the high speed data link 130. Ru. Data is provided by interposer circuit 120 to UI computer 110, which hosts a protocol analyzer for analyzing the data according to high speed data protocols.

したがって、インターポーザ回路120は、DUT140、ホストコンピュータ150、並びに、DUT140とホストコンピュータ150との間の高速データリンク130を含む、テスト対象システムをテストするための「中間者(man in the middle)」として機能する。つまり、インターポーザ回路120は、本明細書で記載の実施形態に従って、テスト中に高速データをキャプチャし、キャプチャしたデータの一部をキャプチャバッファ125に格納し、このデータは、キャプチャ後の解析用にUIコンピュータ110へと供給される。インターポーザ回路120は、例えば、ユニバーサルシリアルバス(USB)(例えば、USB3.0)又はイーサネット接続でUIコンピュータ110に接続され得る。 Thus, interposer circuit 120 serves as a "man in the middle" for testing a system under test that includes DUT 140, host computer 150, and high-speed data link 130 between DUT 140 and host computer 150. Function. That is, interposer circuit 120 captures high-speed data during testing and stores a portion of the captured data in capture buffer 125, in accordance with embodiments described herein, and this data is used for post-capture analysis. UI computer 110. Interposer circuit 120 may be connected to UI computer 110 with, for example, a universal serial bus (USB) (eg, USB 3.0) or Ethernet connection.

UIコンピュータ110は、例えば、パーソナルコンピュータ(PC)でもよいが、プロトコルアナライザを実行できる任意の処理ユニット(例えば、後述の処理ユニット810)を、本教示の範囲から逸脱することなく、組み込むこともできる。同様に、ホストコンピュータ150は、例えば、PCでもよいが、高速データプロトコルを介してDUT140とインタフェース接続できる任意の処理ユニット(例えば、後述の処理ユニット810)を、本教示の範囲から逸脱することなく、組み込むこともできる。例えば、DUT140は、ホストコンピュータ150に挿入可能であり、ホストコンピュータ150とインタフェース接続するアドインカード又はシステムボード等の高速周辺デバイスであり得る。高速周辺デバイスの例には、グラフィックカード、サウンドカード、SSD、ワークロードアクセラレータが含まれる。一般的に、高速周辺デバイスとは、仕様にもよるが(例えば、PCIe Gen6プロトコルのレーンあたり4GB/秒を超える)、レーンあたり毎秒0.25GB超のデータ速度で動作するものであり、それゆえ、信頼性の高いデータ転送のために、高速データリンク130を介した高速プロトコルにより、データを通信する必要がある。 UI computer 110 may be, for example, a personal computer (PC), but may also incorporate any processing unit capable of running a protocol analyzer (e.g., processing unit 810, described below) without departing from the scope of the present teachings. . Similarly, host computer 150 may be, for example, a PC, but may include any processing unit (e.g., processing unit 810 described below) that can interface with DUT 140 via a high-speed data protocol without departing from the scope of the present teachings. , can also be incorporated. For example, DUT 140 may be a high-speed peripheral device, such as an add-in card or a system board, that is insertable into and interfaces with host computer 150. Examples of high speed peripheral devices include graphics cards, sound cards, SSDs, and workload accelerators. In general, high-speed peripheral devices are those that operate at data rates greater than 0.25 GB/s per lane, depending on the specification (e.g., greater than 4 GB/s per lane in the PCIe Gen6 protocol); , data needs to be communicated with high speed protocols over high speed data link 130 for reliable data transfer.

高速データプロトコルは、例えば、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であり得る。 High-speed data protocols include, for example, PCI Express™ Base Specification Revision 3.0 (November 10, 2010) (“PCIe Gen3 Protocol”), PCI Express™ Base Specification Revision 4.0, Version 1.0 (October 5, 2017) ("PCIe Gen4 Protocol"), PCI Express(TM) Base Specification Revision 5.0, Version 1.0 (May 28, 2019)("PCIe Gen5 Protocol"), or PCI Express(TM) Base Specification Revision 6.0, Version 1.0 (January 11, 2022) (the "PCIe Gen6 Protocol"), all of which are incorporated by reference in their entirety. shall be taken as a thing. In this case, the protocol analyzer implemented by UI computer 110 may be, for example, a U4301B PCIe Protocol Analyzer, or a U4305B PCIe and LTSSM Exerciser available from Keysight Technologies, Inc.

図示の実施形態では、インターポーザ回路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として使用される。 In the illustrated embodiment, interposer circuit 120 includes a capture buffer 125 for temporarily storing data transmitted between DUT 140 and host computer 150, as described above. Interposer circuit 120 may include a field programmable gate array (FPGA) and/or an application specific integrated circuit (ASIC) (i.e., an FPGA and/or an ASIC); Any processing unit (eg, processing unit 810) capable of performing the functions of interposer circuit 120 described below with reference to FIG. 2 may also be incorporated without departing from the scope of the present teachings. In one embodiment, interposer circuit 120 is implemented by an FPGA having internal high bandwidth memory (HBM) dynamic random access memory (DRAM) available from Xilinx, Inc., for example. and is used as a capture buffer 125.

図2は、代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する方法を示す簡略流れ図である。図2の様々なステップは、上述のように、インターポーザ回路120によって実行可能である。この方法は、UIコンピュータ110及びインターポーザ回路120にプロトコルアナライザを提供する。これにより、従来のソリューションに付随する複雑な配線及び信号完全性(signal integrity:シグナルインテグリティ)の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(生データを削減した)を使用して、アップロード時間の高速化をサポートする。 FIG. 2 illustrates how an interposer can be used without loss of functionality and without loss of information available for analysis during communication of data over a data link that conforms to a high-speed layered packet-based protocol, according to an exemplary embodiment. 1 is a simplified flowchart illustrating a method for reducing the amount of data stored in a circuit's capture buffer. The various steps of FIG. 2 can be performed by interposer circuit 120, as described above. This method provides the UI computer 110 and interposer circuit 120 with a protocol analyzer. This eliminates the complex wiring and signal integrity issues associated with traditional solutions, reduces total cost, and allows the use of high-bandwidth interfaces (with reduced raw data), for example. to support faster upload times.

図2を参照すると、キャプチャバッファに格納されるデータの量は、4つの基本段階(basic step:基本ステップ)を踏まえており、それぞれについて、以下で詳しく説明する。ブロックS211において、キャプチャバッファに格納されるデータのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)から、リアルタイムに実行されるデータのデータ完全性(data integrity)チェックに対応するデータ完全性ビットを削除する。データ完全性チェックでデータが正しいことが示されると、データ完全性ビットは削除される。そうでない場合、つまり、データ完全性チェックでデータが正しくないことが示された場合、データ完全性ビットは、TLP及びDLLPに残され、UIコンピュータ110による解析のために、標準プロトコルに従って、キャプチャバッファ125に格納される。 Referring to FIG. 2, the amount of data stored in the capture buffer is based on four basic steps, each of which will be described in detail below. In block S211, data integrity bits corresponding to a data integrity check of the data performed in real time from the transaction layer packet (TLP) and data link layer packet (DLLP) of the data stored in the capture buffer. Delete. If the data integrity check indicates that the data is correct, the data integrity bit is removed. If not, that is, if the data integrity check indicates that the data is incorrect, the data integrity bits are left in the TLP and DLLP and stored in the capture buffer for analysis by the UI computer 110, according to standard protocols. 125.

ブロックS212において、意図された送信先におけるデータのTLPの到着成功(correct arrival)又は到着失敗(incorrect arrival)をそれぞれ示す確認応答(ACK:acknowledge)パケット及び否定応答(NACK:negative acknowledge)パケットを、キャプチャバッファ125に格納しない。その代わりとして、ACK/NACK照合をリアルタイムに実行し、ACKパケットとNACKパケットを使用してTLPの送達が成功したことを確認してから、ACK/NACKパケットを破棄する。TLPのACK/NACKの状態を、メタデータとしてキャプチャバッファ125に記録することもできる。 In block S212, an acknowledgment (ACK) packet and a negative acknowledge (NACK) packet indicating correct arrival or incorrect arrival, respectively, of the TLP of the data at the intended destination are transmitted. It is not stored in the capture buffer 125. Alternatively, ACK/NACK matching is performed in real time and the ACK and NACK packets are used to confirm successful delivery of the TLP before the ACK/NACK packet is discarded. The ACK/NACK state of the TLP can also be recorded in the capture buffer 125 as metadata.

ブロックS213において、データのTLP及び/又はDLLPから、或るフィールドをリアルタイムに削除するか、又は、リアルタイムにフィールドのサイズを削減する。これは、固定値又は空値を持つ既知のフィールドを削除することと、TLPとDLLPのパケットフローの始点と終点を示すために使用されるフレーミングトークンを削除することと、複数のアクティブデバイスではなく、単一のアクティブデバイスをテストするために、全体として不要なフィールドを削減することと、特定のユースケースをデバッグするための値を一切持たない非必須のフィールドを除去することとを含む。 In block S213, a certain field is deleted from the TLP and/or DLLP of the data or the size of the field is reduced in real time. This removes known fields with fixed or null values, removes framing tokens used to indicate the start and end points of TLP and DLLP packet flows, and eliminates multiple active devices. , including reducing unnecessary fields as a whole to test a single active device and removing non-essential fields that do not have any value for debugging a specific use case.

ブロックS214において、キャプチャバッファ125に格納されるTLP及び/又はDLLPの全部又は一部を並列圧縮する。例えば、パケットのデータペイロードは、キャプチャバッファ125に格納するために圧縮されてもよい。データペイロードの圧縮は、例えば、ワイドワード(wide word)の各シンボルが、処理ユニットのクロックサイクルの次クロックにおいて、次シンボルと同じ場所で配置されるように、ペイロードでデータを配列することを含む。次に、既にメモリに格納されている以前のシンボルへのポインタを提供するハッシュテーブルを使用して、配列されたデータを圧縮する。全パケット(つまり、ヘッダを含めて)の圧縮は、実質的に同じ方法で実行することができる。 In block S214, all or part of the TLP and/or DLLP stored in the capture buffer 125 is compressed in parallel. For example, the data payload of a packet may be compressed for storage in capture buffer 125. Compression of the data payload includes, for example, arranging the data in the payload such that each symbol of a wide word is placed in the same location as the next symbol in the next clock cycle of the processing unit. . The arrayed data is then compressed using a hash table that provides pointers to previous symbols already stored in memory. Compression of entire packets (ie, including headers) can be performed in substantially the same way.

[データ完全性チェック]
ブロックS211を参照すると、リアルタイムに実行可能で、キャプチャバッファ125への格納から省かれるデータ完全性ビットを提供するデータ完全性チェックには、様々な種類がある。種々の実施形態において、データ完全性チェックの種類には、巡回冗長検査(CRC:cyclic redundancy checker)チェック、フレームパリティチェック、フロー制御ユニット(FLIT:Flow Control Unit)チェックがあり、それぞれについては、以下で説明する。これらのチェックに対応するTLP及び/又はDLLPのデータ完全性ビットは、チェックから各データが正しいことが示された場合には、格納されない。そうでない場合、つまり、データ完全性ビットにより、各データが正しくないことを示す場合、これらはパケットに残され、キャプチャバッファ125に格納されてUIコンピュータ110で解析され得る。
[Data integrity check]
Referring to block S211, there are various types of data integrity checks that can be performed in real time and provide data integrity bits that are omitted from storage in the capture buffer 125. In various embodiments, the types of data integrity checks include cyclic redundancy checker (CRC) checks, frame parity checks, and flow control unit (FLIT) checks, each of which is described below. I will explain. The TLP and/or DLLP data integrity bits corresponding to these checks are not stored if the checks indicate that the respective data is correct. Otherwise, if the data integrity bits indicate that the respective data are incorrect, they may be left in the packet and stored in the capture buffer 125 to be analyzed by the UI computer 110.

[CRCチェック]
CRCチェックについては、チェックサムを含むCRCフィールドが、データのTLP及びDLLPに含まれる。一般的に、チェックサムは、送信デバイス(例えば、DUT105)のCRCフィールドで提供され、受信デバイス(例えば、ホストPC)において取得され、そこで元データのチェックサムと比較される。チェックサムが一致した場合、データに誤りがないと判断される。チェックサムの一致に失敗した場合には、例えば、NACKによってパケットの再送信を要求する等、補正措置が取られ得る。本実施形態において、誤りがないことを示すCRCのチェックサムは、それぞれのパケットから削除されるが、誤りを示すCRCのチェックサムは削除されないので、キャプチャバッファ125に格納される。
[CRC check]
For CRC checking, a CRC field containing a checksum is included in the TLP and DLLP of the data. Typically, the checksum is provided in the CRC field of the transmitting device (eg, DUT 105) and obtained at the receiving device (eg, host PC), where it is compared to the checksum of the original data. If the checksums match, it is determined that there is no error in the data. If checksum matching fails, corrective action may be taken, such as requesting retransmission of the packet by NACK, for example. In this embodiment, a CRC checksum indicating no error is deleted from each packet, but a CRC checksum indicating an error is not deleted and is stored in the capture buffer 125.

図3Aは、代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべき例示的なTLP及び例示的なDLLPのCRCフィールドを示す。TLP及びDLLPSのCRCフィールドは、例えば、PCIe Gen3プロトコルのセクション2.7に従って提供されているが、例えば、他のPCIeプロトコル(例えばPCIe Gen4~Gen6プロトコル)を含む、他のプロトコルにおけるCRCフィールドも、本教示の範囲から逸脱せずに組み込むことができる。 FIG. 3A shows CRC fields of an example TLP and an example DLLP that should be discarded rather than stored in a capture buffer, according to a representative embodiment. Although the CRC field for TLP and DLLPS is provided, for example, in accordance with section 2.7 of the PCIe Gen3 protocol, the CRC field in other protocols, including, for example, other PCIe protocols (e.g., PCIe Gen4 to Gen6 protocols) may be incorporated without departing from the scope of the present teachings.

図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ビット)。 Referring to FIG. 3A, the example TLP 310 includes the following two CRC fields. That is, the FCRC field 311 includes 4 bits, and the LCRC field 312 includes 32 bits. Exemplary DLLP 320 includes a CRC field 321 that includes 16 bits. As previously discussed, rather than storing the FCRC field 311, LCRC field 312, and CRC field 321 in the capture buffer 125, the interposer circuit 120 itself first checks the CRC checksum. Checksums indicating no errors are not stored in the capture buffer 125 and are removed from each packet, but checksums of CRCs indicating errors are stored in the capture buffer 125 as usual. For example, an error-free checksum can be removed from each packet. Normally, when a CRC error does not occur, the storage area stored in the capture buffer 125 in units of packets is known and fixed (for example, 36 bits for TLP 310 and 16 bits for DLLP 320).

キャプチャバッファ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に格納される。 The data transfer infrastructure from capture buffer 125 to UI computer 110 may be assumed to preserve data integrity, so there is no loss of functionality by omitting the CRC. Thereafter, if no errors occur, the CRC can be statically reconstructed on the UI computer 110 using the inverse of the algorithm used by the sender of the PCIe link to initially calculate the CRC. This way, the user will not be aware that the checksum has been omitted. For example, FIGS. 2-38 of Section 2.7 of the Gen3 protocol illustrate an ECRC algorithm for computing a 32-bit ECRC for TLP end-to-end data integrity protection. UI computer 110 may use the inverse of this algorithm to reconstruct any ECRC previously removed from TLP 310. It will be appreciated that other known algorithms for calculating the CRC may be incorporated without departing from the scope of the present teachings, including, for example, algorithms provided from other PCIe protocols (e.g., PCIe Gen4-Gen6 protocols). Can be done. If there is a CRC error, the TLP 310 and/or DLLP 320 with the CRC error is stored unchanged in the capture buffer 125 so that the CRC can be fully analyzed with a protocol analyzer.

[フレームパリティビット]
フレームパリティビットはTLPに含まれ、インターポーザ回路120上でもチェックされる。一般的に、フレームパリティビットは、受信デバイスが対応するフレーミングトークンを正しく観測していることを確認するためにチェックされる。一実施形態において、誤りがないことを示すフレームパリティビットは、キャプチャバッファ125への格納が省かれ、誤りを示すフレームパリティビットは、キャプチャバッファ125に格納される。フレームパリティビットの値は、フレームパリティチェックに従って決定される。フレームパリティチェックの実行例は、フレーミングトークンに関するPCIe Gen3プロトコルのセクション4.2.2.3.1で記載されている。当然のことながら、例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)から提供されるプロセスを含む、フレームパリティチェックを実行する他の既知のプロセスも、本教示の範囲から逸脱することなく、組み込むことができる。一般的に、フレーミングトークンは、関連するシンボルの数、ひいては、次のフレーミングトークンの場所を指定又は示唆する。例えば、フレーミングトークンは、パケットの始点を示し、様々な種類のパケットを迅速、且つ容易に識別できるようにする特別なシンボルとすることができる。
[Frame parity bit]
The frame parity bit is included in the TLP and is also checked on interposer circuit 120. Generally, frame parity bits are checked to ensure that the receiving device is correctly observing the corresponding framing token. In one embodiment, frame parity bits indicating no errors are omitted from being stored in capture buffer 125, and frame parity bits indicating errors are stored in capture buffer 125. The value of the frame parity bit is determined according to the frame parity check. An example of performing a frame parity check is described in section 4.2.2.3.1 of the PCIe Gen3 protocol for framing tokens. It will be appreciated that other known processes for performing frame parity checking, including, for example, processes provided by other PCIe protocols (e.g., PCIe Gen4-Gen6 protocols), may be used without departing from the scope of the present teachings. , can be incorporated. Typically, a framing token specifies or suggests the number of associated symbols and thus the location of the next framing token. For example, a framing token can be a special symbol that indicates the beginning of a packet and allows different types of packets to be quickly and easily identified.

再度、図3Aの例を参照すると、TLP310は、フレームパリティビットとして1ビットを含む、フレームパリティ(FP:frame parity)フィールド313も含む。このばあいもやはり、FPフィールド313を格納するのではなく、まずインターポーザ回路120でフレームパリティビットをチェックする。フレームパリティビットにより、誤りがないと示された場合、フレームパリティビットを各TLP310から削除してから、TLP310をキャプチャバッファ125に格納する。フレームパーティビットが誤りを示す場合、フレームパリティビットはTLP310に残り、UIコンピュータ110による解析が可能になるよう、通常どおり、キャプチャバッファ125に格納される。 Referring again to the example of FIG. 3A, TLP 310 also includes a frame parity (FP) field 313 that includes one bit as a frame parity bit. Again, rather than storing the FP field 313, the interposer circuit 120 first checks the frame parity bit. If the frame parity bits indicate that there are no errors, the frame parity bits are removed from each TLP 310 before the TLP 310 is stored in the capture buffer 125. If the frame party bit indicates an error, the frame parity bit remains in TLP 310 and is stored in capture buffer 125 as usual for analysis by UI computer 110.

誤りがないことを示すフレームパリティビットを削除しても、TLP310あたりたった1ビットという僅かな節約にしかもたらさない。しかし、通常、パケットデコーダは、フレームパリティビットをチェックして、例えば、TLP310内の始点TLP(STP)トークン(フレーミングトークン)が正しく、データストリーム内で適切に形成されたTLP310を観測していることを確認する必要がある。例えば、インターポーザ回路120は、対応するパケットの始点を記録し、これに応じて、タイムスタンプを挿入することができるよう、フレームパリティビット、及びSTPトークンをチェックする。インターポーザ回路120は、フィルタリングを適用し、メタデータを挿入できるように、ヘッダを復号し、パケット境界を回復する必要がある。適用され得る圧縮技術とは関係なく、インターポーザ回路120上のパケット境界を計算する必要があるので、1ビットしか節約できなくても、フレームパリティビットを除去することには価値がある。 Removing frame parity bits that indicate no errors results in a small savings of only 1 bit per TLP 310. However, typically the packet decoder checks the frame parity bits to ensure that, for example, the source TLP (STP) token (framing token) in the TLP 310 is correct and observes a properly formed TLP 310 in the data stream. need to be confirmed. For example, interposer circuit 120 checks the frame parity bit and STP token so that it can record the start of the corresponding packet and insert a timestamp accordingly. Interposer circuit 120 must decode headers and recover packet boundaries so that filtering can be applied and metadata can be inserted. Regardless of the compression technique that may be applied, the packet boundaries on the interposer circuit 120 need to be calculated, so it is worthwhile to remove the frame parity bit even if only one bit is saved.

[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)に送り返すことによって実行できる。
[FLIT check]
Some high-speed data protocols use forward error correction (FEC) (eg, PCIe Gen6), in which case the packets must be of a fixed length, such as 256 bytes. Fixed length packets are called flow control units (FLIT). Each FLIT may include one or more TLPs, typically of variable length, for a predetermined number of bytes. For TLPs longer than a FLIT, the TLP is divided into multiple FLITs. Generally, upon receiving a FLIT, a receiving device (eg, host computer 150) performs FEC decoding to correct correctable errors within each FEC group within the FLIT. After FEC decoding, perform a CRC check. If the CRC check fails, the receiving device indicates that the FLIT was not successfully received. This can be done by sending a negative response back to the sending device (eg, DUT 140).

図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チェックを実行できるということである。 FIG. 4 shows an exemplary FLIT 400 for a 16 lane PCIe link. In the illustrated example, FLIT 400 includes 256 bytes, which are allocated as follows. That is, the first 236 bytes are allocated to one or more TLPs (bytes 0-235) and the next 6 bytes are allocated to the data link layer payload (DLP) (bytes 236-241 are shown as DLP0-DLP5). ), the next 8 bytes are assigned to CRC411 (bytes 242-249 are shown as CRC0-CRC7), and the last 6 bytes are assigned to FEC412, denoted as error correction code (ECC). (Bytes 250 to 255 are illustrated in, for example, three groups ECC0[0:1] to ECC2[0:1]). After executing FEC, CRC check is performed on FLIT400. If the CRC check passes, both the CRC information of the CRC 411 and the FEC information of the FEC 412 are discarded on the interposer circuit 120. The CRC411 is 8 bytes, and the FEC412 (or ECC) is 3 blocks of 2 bytes, each of which is placed at the end of the 256-byte FLIT. Therefore, by discarding the CRC 411 and the FEC 412, 14 bytes out of the 256 bytes of the FLIT 400 are not stored in the capture buffer 125. Note that since the TLP encapsulated in FLIT does not have its own CRC, a FLIT CRC check can be performed instead of a TLP CRC check, as described above with reference to Figure 3A. be.

[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)」であってはならない。
[ACK/NACK]
Referring to block S212, ACK and NACK matching is performed in real time to confirm successful delivery of the TLP of related data using the ACK packet and NACK packet in real time. Next, the ACK packet and NACK packet are discarded, ie, they are not stored in the capture buffer 125. Generally, the data link layer uses an acknowledgment and negative acknowledgment mechanism to help ensure the delivery of transaction layer packets. In general, each TLP's successful or failed arrival from a source (e.g., DUT 105) at a destination (e.g., host computer 150) is determined by a sequence number that matches the sequence number in subsequent DLLPs. Will be reported back. This sequence number is used to track between the TLP and both ACK and NACK packets (equivalent to DLLP), thereby tying matching sequence numbers across TLP and DLLP to indicate successful delivery. shows. A timer can be used to time the reception of a TLP and its corresponding acknowledgment. If the timer expires (timeout) before the destination receives an acknowledgment (ACK packet), the original data is retransmitted with a new TLP. TLP and DLLP sequence numbers may be reused (wrap around), but in this case live packets may be "in-flight" when the sequence numbers are reused. Must not be.

上記のように、インターポーザ回路120は、ACKパケット及びNACKパケットをキャプチャバッファ125に格納することから省く。当然のことながら、システムが、とりわけ確認応答自体の問題をデバッグしている場合、この機能を無効にすることができる。一実施形態において、ACKパケットとNACKパケット自体が格納されないにもかかわらず、TLPは、そのTLPの確認応答状態を示すメタデータを、これに付加してキャプチャバッファ125内に備えることができる。メタデータは、TLPがキャプチャバッファ125に格納される前に、インターポーザ回路120によってTLPに論理的に付加される。したがって、ACKパケットとNACKパケットを格納することなくインターポーザ回路120でACKとNACKとを照合し、メタデータでACKとNACKの結果を示すことにより、実質的に「ロスレス(lossless)」のデータ圧縮を実現することができる。 As mentioned above, interposer circuit 120 omits ACK and NACK packets from being stored in capture buffer 125. Of course, this feature can be disabled if the system is debugging problems, especially the acknowledgment itself. In one embodiment, the TLP may have metadata appended thereto in the capture buffer 125 indicating the acknowledgment status of the TLP, even though the ACK and NACK packets themselves are not stored. Metadata is logically appended to the TLP by interposer circuit 120 before the TLP is stored in capture buffer 125. Therefore, by collating ACKs and NACKs in the interposer circuit 120 without storing ACK packets and NACK packets, and indicating the results of ACKs and NACKs in metadata, virtually "lossless" data compression can be achieved. It can be realized.

この方法には、或る程度のコストがかかる。これまで考察したように、ACKパケットとNACKパケットのタイムスタンプを追加してより豊富なデータを作成しない限り、ACKパケットとNACKパケットの正確な到着時刻は失われる。メタデータにタイムスタンプを追加すると、パケットバッファに格納されるべきデータ量が増加するが、その増加分は、本来、ACKとNACKのパケット全体について格納されるはずのデータ量よりも少なくなる。TLP310からのシーケンス番号と、(適宜)ACKパケット又はNACKパケットに関連するタイムスタンプを与えると、根本的なプロトコルエラー(protocol error)がなければ、DLLP320は完全に再構築され得る。当然のことであるが、根本的なプロトコルエラーがあれば、DLLP320は全て格納されるはずである。さらに、DLLP320のタイムスタンプは、対応するTLP310の元のタイムスタンプとの差分として保持され得る。これにより、格納に必要なビット数が減少する一方、パケットストリームにおけるDLLP320の場所も、依然として復元され得る。 This method involves some cost. As discussed above, the exact arrival times of ACK and NACK packets are lost unless time stamps of ACK and NACK packets are added to create richer data. Adding a timestamp to the metadata increases the amount of data that should be stored in the packet buffer, but this increase is less than the amount of data that would originally be stored for the entire ACK and NACK packet. Given the sequence number from TLP 310 and the timestamp associated with the ACK or NACK packet (as appropriate), DLLP 320 can be completely rebuilt unless there is an underlying protocol error. Of course, if there is a fundamental protocol error, all DLLPs 320 should be stored. Further, the timestamp of the DLLP 320 may be maintained as a difference from the original timestamp of the corresponding TLP 310. This reduces the number of bits required for storage while still allowing the location of DLLP 320 in the packet stream to be recovered.

図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のパケットを、本教示の範囲から逸脱することなく、組み込むことができる。 FIG. 3B shows a sequence number field in the same TLP 310 and the same DLLP 320 as shown in FIG. show. Referring to FIG. 3B, TLP 310 includes a sequence number field 314 and DLLP 320 includes a DLLP sequence number field 324. A match between the sequence numbers indicates successful delivery and should result in an ACK of the TLP packet. For example, if a pair of sequence numbers, one sequence number in TLP 310 and one sequence number in DLLP 320, match, TLP 310 is acknowledged (ACKed). In this case, sequence numbers in sequence number fields 314 and 324 are not stored, but a 3-bit symbol indicating whether a TLP 310 and/or an ACK and/or a NACK has arrived is stored. Since the sequence numbers are ordered in each direction (eg, up and down), it can be determined later which sequence number each 3-bit symbol refers to. In the illustrated example, the size of the ACK and NACK packets, and thus the space saved per TLP, is known and fixed. For example, in section 3.4.1 of the PCIe Gen3 protocol, in non-FLIT mode, each TLP 310 has a 64-bit ACK or NACK packet, so as discussed above, the metadata indicating the ACK/NACK status is By adding 3 bits of data and storing it in the capture buffer 125 in association with the TLP 310, it is possible to save 61 bits. For example, section 3.5.1 of the PCIe Gen 6 protocol also mentions the handling of ACK and NACK packets. Furthermore, by enabling FLIT mode in the PCIe Gen6 protocol, we achieved a savings of 6 bytes per FLIT. For example, ACK and NACK packets in other known protocols, including other PCIe protocols (eg, PCIe Gen4-Gen5 protocols), may be incorporated without departing from the scope of the present teachings.

[フィールドの削除/削減]
再度、図2を参照すると、ブロックS213において、TLP及び/又はDLLPの特定のフィールドを削除するか、又は、フィールド内のデータをリアルタイムに削減する。この圧縮技術に含まれ得るフィールドには、いくつかの種類がある。例えば、既知の固定値又は空値を持つ既知のフィールド、パケットフローの始点と終点を示すフレーミングトークンフィールド、及び、所与のユースケースについて値を持たない非必須フィールドは、除去することができる。また、テスト条件で必要以上に広いフィールドは、削減されることもある。
[Delete/reduce field]
Referring again to FIG. 2, in block S213, certain fields of the TLP and/or DLLP are deleted or the data in the fields is reduced in real time. There are several types of fields that can be included in this compression technique. For example, known fields with known fixed or null values, framing token fields that indicate the start and end points of a packet flow, and non-required fields that have no value for a given use case can be removed. Also, fields that are wider than necessary under test conditions may be reduced.

[既知のフィールドの除去]
TLPには、固定値及び空の値(empty value)を含む、値が既知のフィールドを含むものがある。通常、プロトコルは、とりわけ、例えば、ペイロードデータの前にある共通のヘッダフィールドに関して、本質的に規則的になるように設計されている。これは、プロトコルを復号化するために使用される状態機械を構築する際に必要な作業量を軽減するので、階層型プロトコル設計でよく検討される部分でもある。そのため、多くのパケットタイプには、一部のパケットで使用されるフィールドがあるが、別のタイプのパケットの場合では、固定の既知値、更には、空の値もある。例えば、様々なパケットにおいて、0でなければならない予備フィールド、未使用により0でなければならないトラフィッククラスインジケータ、(ペイロードには、常に単一のデータワード(例えば、4バイト)があることにより)1でなければならない長さフィールドがある。
[Remove known fields]
Some TLPs include fields with known values, including fixed values and empty values. Typically, protocols are designed to be regular in nature, inter alia, with respect to common header fields that precede payload data, for example. This is also a frequently considered part of layered protocol design, as it reduces the amount of work required in building the state machine used to decode the protocol. Therefore, many packet types have fields that are used in some packets, but have fixed, known values, or even empty values, for other types of packets. For example, in various packets, a reserved field that must be 0, a traffic class indicator that must be 0 due to unused (because there is always a single data word (e.g. 4 bytes) in the payload), 1 There is a length field that must be .

また、一部のパケットには、既知のフィルタ設定がある(例えば、PCIe Gen3プロトコルソフトウェアではトリガとして知られている)。例えば、バス上のいくつかのトーカ(talker)を検索する、又は、単一のエンドポイントデバイスをテストする場合には、デバイスアドレスフィールドは事前に分かっており、フィルタが正しく機能しているものとして、一致するパケットのみが格納される。例えば、2つのトーカを含むフィルタでは、既知の2つのトーカだけを識別すればよいので、大きなアドレス空間を必要とせず、アドレスフィールドのデータを削減することができる。場合によっては、16ビットのアドレスを、たった1ビット、2ビット、又は3ビットまで減らすことができる場合もある。 Also, some packets have known filter settings (eg, known as triggers in PCIe Gen3 protocol software). For example, if you are searching for several talkers on the bus or testing a single endpoint device, the device address field is known in advance and the filter is functioning correctly. , only matching packets are stored. For example, a filter that includes two talkers only needs to identify two known talkers, so it does not require a large address space and data in the address field can be reduced. In some cases, a 16-bit address can be reduced to just 1, 2, or 3 bits.

既知の(固定又は空の)値を持つ既知のフィールドは、パケットタイプごとに異なる場合があるが、これらのフィールドを定義し、パケット格納時にそれらを省略することは比較的簡単である。フィールド値が既知であるので、インターポーザ回路120で既知の値が正しいかどうかをチェックしてから、キャプチャバッファ125から省く限り、ユーザインタフェースによって回復させることが可能である。当然のことであるが、期待される既知の値と異なる場合は、既知のフィールドを含め、パケット全体を格納して、後でデバッグする必要がある。 Although known fields with known (fixed or empty) values may differ for each packet type, it is relatively easy to define these fields and omit them when storing packets. Since the field value is known, it can be recovered by the user interface as long as the interposer circuit 120 checks whether the known value is correct and then omit it from the capture buffer 125. Of course, if it differs from the expected known value, the entire packet, including the known fields, must be stored for later debugging.

図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プロトコル)を含む、他のプロトコルの既知のフィールドも、本教示の範囲から逸脱せずに組み込むことができる。 FIG. 5A illustrates known fields of an example Config Read TLP that should be discarded rather than stored in a capture buffer, according to a representative embodiment. The known fields of the Configuration Read TLP are provided according to the PCIe Gen3 protocol, such as Section 2.2.6.3 for the Attribute field (Attr), which includes, for example, Provides further information. Referring to FIG. 5A, the following rules apply to the Read Configuration TLP 330. That is, the TC field 331 is 000b, the TH field 333 does not apply to configuration requests, the bit is reserved (probably 0), the Attr[2] field is reserved (probably 0), and the A[ 1:0] field 334 is 00b, the AT field 335 is 00b, the length field 336 is 00 0000 0001b (one), and the last DW BE field 337 is 0000b. Fields 332, 338, and 339 are marked as reserved and are zero. Other known fields of the PCIe Gen3 protocol, as well as other protocols, including, for example, other PCIe protocols (e.g., PCIe Gen4-Gen6 protocols) may be incorporated without departing from the scope of the present teachings. I can do it.

[フレーミングトークンの除去]
種々のトークンは、TLP及びDLLPのパケットフローの始点と終点を示すために使用されるシンボルである。フレーミングトークンは、その値を確認した後、より短いシンボルに置き換えることができる。一実施形態において、値ごとにフレーミングトークンをチェックし、値に誤りが見つかった場合は、例外又は特例を発生させて、その値を、より小さいが一意なビット系列に置き換える。この場合も、データがキャプチャバッファ125から抽出され、UIコンピュータ110に送信される際には、その完全性と間隔は、パケットを搬送する輸送システムによって保存されるものとする。
[Framing Token Removal]
Various tokens are symbols used to indicate the start and end points of TLP and DLLP packet flows. A framing token can be replaced with a shorter symbol after confirming its value. In one embodiment, the framing token is checked for each value, and if a value is found to be incorrect, an exception or exception is raised to replace the value with a smaller but unique bit sequence. Again, as the data is extracted from capture buffer 125 and transmitted to UI computer 110, its integrity and spacing shall be preserved by the transport system that transports the packets.

図3Cは、代表的な実施形態に係る、キャプチャバッファに格納せずに、破棄すべきTLPとDLLPのフレーミングトークンフィールドを示す。図3Cは、これまで考察した図3Aに示されるのと同じ例示的なTLP310とDLLP320を示す。図3Cを参照すると、TLP310はSTPフィールド315を含み、DLLP320は、SDPトークン番号フィールド325を含む。STPフィールド315は、TLP310の始点パケットフロートークンを含み(終点パケットフロートークンを含むフィールドは、図示せず)、SDPトークン番号フィールド325は、DLLP320のフレーミングトークンを含む。STPフィールド315、及びSDPトークン番号フィールド325のそれぞれは、例えば、削除されてもよいし、より短いシンボルに置き換えられてもよい。 FIG. 3C illustrates framing token fields of TLPs and DLLPs that should be discarded rather than stored in a capture buffer, according to an exemplary embodiment. FIG. 3C shows the same exemplary TLP 310 and DLLP 320 shown in FIG. 3A discussed above. Referring to FIG. 3C, TLP 310 includes an STP field 315 and DLLP 320 includes an SDP token number field 325. The STP field 315 contains the originating packet flow token of the TLP 310 (the field containing the destination packet flow token is not shown), and the SDP token number field 325 contains the framing token of the DLLP 320. Each of the STP field 315 and the SDP token number field 325 may be deleted or replaced with a shorter symbol, for example.

[フィールドの削減]
これまで考察したように、プロトコル内の一部のパケットフィールドは、DUT140で必要と想定されるよりもより広い(より多くのビットを使用)。例えば、或るシステムで最小限の構成(単一のデバイス)をテストすることがよくある。それゆえ、サウンドカード、グラフィックスカード、複数のアクセラレータ等の複数のPCIeデバイス(カード)が使用されているライブシステムと比較して、ホストコンピュータ150と通信するアクティブなPCIeデバイスは、1つとすることができる。したがって、1つ又は2つのPCIeデバイス(例えば、DUT140)のみがアクティブである場合、複数のPCIeデバイスを収容できるアドレス空間は必要ない。
[Reduce fields]
As previously discussed, some packet fields within the protocol are wider (using more bits) than expected to be needed at DUT 140. For example, a system often tests a minimal configuration (a single device). Therefore, compared to a live system where multiple PCIe devices (cards) are used, such as a sound card, graphics card, multiple accelerators, etc., only one active PCIe device communicates with the host computer 150. can. Therefore, if only one or two PCIe devices (eg, DUT 140) are active, there is no need for an address space that can accommodate multiple PCIe devices.

一実施形態において、テスト対象システム(DUT140を含む)において、アクティブDUTがライブシステムよりも少ない場合、必要なアクティブDUTの数に応じて、アドレスフィールドのサイズを削減し、その代わりに、ルックアップテーブルを展開してもよい。例えば、アクティブDUTが2つ又は3つしかない場合、アドレスフィールドを、16ビットからそれぞれ1ビット、2ビット、又は3ビットだけに減らすことができる。インターポーザ回路120の起動時にルックアップテーブルのサイズをパラメータ化すれば、ユーザは、DUTの数と比較して利用可能なメモリを最大限活用できるよう、UIコンピュータ110でのメモリ圧縮を構成可能である。 In one embodiment, if the system under test (including DUT 140) has fewer active DUTs than the live system, the size of the address field is reduced depending on the number of active DUTs required and instead a lookup table may be expanded. For example, if there are only two or three active DUTs, the address field can be reduced from 16 bits to only 1, 2, or 3 bits, respectively. By parameterizing the size of the lookup table at startup of the interposer circuit 120, the user can configure memory compression in the UI computer 110 to maximize the use of available memory relative to the number of DUTs. .

また、要求側(Requester)(送信者)及びコンプリータ側(Completer)(受信者)のアドレスは、ミラーリングされた値のペアである。2人の当事者のみが会話に参加している場合(例えば、1つのDUT140と、1つのホストコンピュータ150)、一意のペアは1つだけである。さらに、インターポーザ回路120は、「中間者」としてダウンリンクチャネルとアップリンクチャネルの双方へと物理的に接続されているという理由により、方向性を認識しているので、アドレス指定方式はまったく要求されない場合がある。この場合、アドレスフィールド全体を除去することができる。 Additionally, the Requester (sender) and Completer (receiver) addresses are a mirrored pair of values. If only two parties are participating in the conversation (eg, one DUT 140 and one host computer 150), there will be only one unique pair. Furthermore, since the interposer circuit 120 is directionally aware by virtue of being physically connected to both the downlink and uplink channels as a "man in the middle," no addressing scheme is required. There are cases. In this case, the entire address field can be removed.

図5Bは、代表的な実施形態に係る、キャプチャバッファに格納する前に、サイズを削減するべき構成読み取りTLPの削減可能フィールドを示す図である。図5Bは、これまで考察した図5Aに示されるのと同じ例示的な構成読み取りTLP330を示す。この場合もやはり、例えば、PCIe Gen3プロトコルに従って、構成読み取りTLPの削減可能フィールドが提供される。例えば、他のPCIeプロトコル(例えば、PCIe Gen4~Gen6プロトコル)を含む、他のプロトコルの他の既知のフィールドの削減可能フィールドも、本教示の範囲から逸脱せずに組み込むことができる。 FIG. 5B is a diagram illustrating reducible fields of a configuration read TLP to be reduced in size prior to storage in a capture buffer, according to an exemplary embodiment. FIG. 5B shows the same example configuration read TLP 330 shown in FIG. 5A previously discussed. Again, a reducible field in the configuration read TLP is provided, eg, in accordance with the PCIe Gen3 protocol. Reducible fields of other known fields of other protocols may also be incorporated without departing from the scope of the present teachings, including, for example, other PCIe protocols (eg, PCIe Gen4-Gen6 protocols).

図5Bを参照すると、削減可能フィールド340には、TLP330の送信者に関連するアドレスデータであるバス番号(要求側)、Dev#(Req)(すなわち、デバイス番号(要求側))、及びFunc#(R)(すなわち、機能番号(要求側))、並びに、TLP330の受信者に関連するアドレスデータであるバス番号(コンプリータ側)、Dev#(Compl)(すなわち、デバイス番号(コンプリータ側))、及びFunct#(C)(すなわち、機能番号(コンプリータ側))が含まれている。一実施形態において、2ビット~3ビット以外全てを、削減可能フィールド340から除去することができる。ビット数はシステム固有であるが、上記フィールドのアクティブな組み合わせと同数のビットのみが必要である。一方、元パケットの要求側とコンプリータ側の実際のPCIeアドレスの最小長のエイリアスを格納するルックアップテーブルが作成される。インターポーザ回路120の起動時にルックアップテーブルのサイズをパラメータ化すれば、ユーザは、アドレス指定可能なエンティティ(例えば、DUT)の数と比較して利用可能なメモリを最大限活用できるよう、UIコンピュータ110でのメモリ圧縮を構成することができる。 Referring to FIG. 5B, the reducible field 340 includes address data related to the sender of the TLP 330, such as bus number (requester), Dev# (Req) (i.e., device number (requester)), and Func#. (R) (i.e., function number (request side)), as well as address data related to the recipient of TLP 330, such as bus number (completer side), Dev# (Compl) (i.e., device number (completer side)), and Funct#(C) (ie, function number (completer side)). In one embodiment, all but 2-3 bits may be removed from reducible field 340. The number of bits is system specific, but only as many bits as there are active combinations of the above fields are required. Meanwhile, a lookup table is created that stores the minimum length aliases of the actual PCIe addresses of the requester and completer of the original packet. Parameterizing the size of the lookup table at startup of the interposer circuit 120 allows the user to configure the UI computer 110 to maximize the available memory compared to the number of addressable entities (e.g., DUTs). You can configure memory compression in

[必須でないフィールド/パケットの除去]
所与のユースケースで値を持たないフィールド全体は、TLPとDLLPから削除することができる。値を持たないパケット全体も削除され得る。さらに、ペイロードが大きい/長いTLPやDLLPも、切り捨てることができる。つまり、特定のユースケースをデバッグする際に重要でない各フィールドを持つ多数のパケットタイプ(packet type)がある。このようなパケット、及び/又はパケット内の各フィールド(つまり、パケット、又はパケット内の各フィールド、あるいはそれらの両方)は、ユーザの構成に応じて省くことができる。例えば、UI設定に基づき、キャプチャストリームから除去することができるパケット、及び/又はパケットごとのフィールド(パケット、又はパケットごとのフィールド、あるいはそれらの両方)のリストが提供され得る。これでは、削除されたパケット及び/又はフィールド(つまり、パケット又はフィールドあるいはそれらの両方)が、UIコンピュータ110で再構成できないので、「ロッシー(lossy)」な圧縮となるはずである。また、このストレージ方式では、実行時にどのフィールドが存在するかを指定する必要もある。それゆえ、固定ストレージ方式ではなく、フィールドを削除した際に記憶容量を最大化する融通の利くストレージ方式が、実装されている。注目すべきは、フィールド全体が削除されたり、又は、パケットが切り捨てられたりすると、UIコンピュータ110において、これまで考察したデータ完全性チェック値がロスレスで回復されない場合があることである。
[Remove non-essential fields/packets]
Entire fields that have no value in a given use case can be removed from the TLP and DLLP. Entire packets with no value may also be deleted. Furthermore, TLPs and DLLPs with large/long payloads can also be truncated. That is, there are many packet types with each field not important when debugging a particular use case. Such packets and/or fields within the packets (ie, the packets, fields within the packets, or both) may be omitted depending on the user's configuration. For example, based on UI settings, a list of packets and/or per-packet fields (packets and/or per-packet fields) that can be removed from the capture stream may be provided. This would result in a "lossy" compression since deleted packets and/or fields (ie, packets and/or fields) cannot be reconstructed at the UI computer 110. This storage method also requires specifying which fields are present at runtime. Therefore, rather than a fixed storage scheme, a flexible storage scheme is implemented that maximizes storage capacity when fields are deleted. It should be noted that if an entire field is removed or a packet is truncated, the data integrity check values discussed above may not be recovered losslessly at the UI computer 110.

[並列圧縮]
ブロックS214を参照すると、キャプチャバッファに格納されるワイドワードデータのTLP及び/又はDLLPのペイロードはリアルタイムに圧縮される。圧縮は、従来の圧縮技術のように直列に行われるのではなく、むしろ、並列に行われる。一実施形態において、ヘッダも、TLP及び/又はDLLPのペイロードと一緒にリアルタイムに圧縮することができる。以下の考察は、説明を容易にするために、データペイロード圧縮に焦点を当てているが、本教示の範囲から逸脱することなく、全パケット圧縮に適用することができる。
[Parallel compression]
Referring to block S214, the TLP and/or DLLP payload of wideword data stored in the capture buffer is compressed in real time. Compression is not done serially as in conventional compression techniques, but rather in parallel. In one embodiment, the header may also be compressed in real time along with the TLP and/or DLLP payload. The discussion below focuses on data payload compression for ease of explanation, but can be applied to full packet compression without departing from the scope of the present teachings.

背景として、全般的に理解されることは、例えば、LZW、LZ77、及びLZ78に基づくような既知の圧縮アルゴリズムにおける圧縮出力、及び圧縮で必要とされる辞書は、入力データの1シンボルを一度に読み取ることによって作成され、かかる辞書の内容は、ストリーム内で以前に出現したパターンの場所を知っているかどうかで異なるということである。それゆえ、このような依存性がある圧縮アルゴリズムは並列処理が困難である。 By way of background, it is generally understood that the compression output in known compression algorithms, such as those based on LZW, LZ77, and LZ78, and the dictionaries required for compression, are limited to one symbol of input data at a time. The content of such a dictionary depends on knowing the location of previously occurring patterns in the stream. Therefore, compression algorithms with such dependencies are difficult to process in parallel.

一般的に、並列処理は、例えば複数のシンボルを同時に処理する単一の処理ユニットで圧縮アルゴリズムを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(2)よりはるかに大きい)、圧縮効率が悪くなり、さらに、「n」をビット幅として、辞書のサイズが2n増えるため、圧縮アルゴリズムは全体として、はるかに多くのメモリを消費することとなる。 In general, parallel processing improves efficiency, such as by parallelizing compression algorithms in one step with a single processing unit that processes multiple symbols simultaneously. Such a strategy is sometimes referred to as single instruction multiple data de-skewed lane (SIMD) processing, or "wideword" processing, where a wideword consists of multiple symbols (e.g., 4, 8 , 16, or more symbols) as well as a single circuit, with each symbol typically representing one byte of data, with all operations involving multiple bytes per operation. Equal. Applying to PCIe, each single PCIe lane's data already carries multiple bytes per clock cycle. However, because the PCIe analyzer handles data in combined deskew lanes rather than multiple single PCIe lanes, the final deskew data bus can be 128 bytes, 256 bytes, or more wide. In this case, since conventional data compression does not require each symbol to be 8 bits wide, a symbol can be considered to consist of multiple bytes of data. However, in general, compression algorithms use 2^ 8 (2 8 )), the compression efficiency is worse, and the compression algorithm as a whole consumes much more memory since the size of the dictionary increases by 2n, where 'n' is the bit width.

例えば、各クロック入力のデータレートに辞書がリアルタイムに追従できるよう、ワイドワード設計では、辞書のワードサイズの変更(例えば、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回の変更が必要となる。 For example, a wide word design requires a change in the word size of the dictionary (eg, a 256-byte change) so that the dictionary can track the data rate of each clock input in real time. It takes one clock cycle in hardware to write a single change to single-ported memory, and given that word-sized (e.g., 256 bytes) changes are being made, it is possible to keep up with the data. , 256 memory blocks are required in this example to obtain the required number of memory ports to avoid data loss. Further, conventional FPGAs are equipped with block random access memory (BRAM), but the size of each BRAM is as small as 36K bits, and a plurality of BRAMs are required for each of 256 dictionaries. Even the largest current FPGAs do not support enough BRAM to efficiently implement this many dictionaries. In a wideword (e.g., SIMD) implementation that processes data at line rate, each addition to the dictionary requires one memory write operation and one memory read operation, with each operation requiring one clock It takes cycles, and since it uses one memory port (i.e. two memory ports total), one change is required for each new multi-symbol compressed code computed when reading a wideword. Become.

BRAMはツインポートであるので、各クロックサイクルの1クロックにつき、書き込み動作と読み出し動作をそれぞれ1度しか実行できない。それゆえ、圧縮アルゴリズムには、複数のBRAM(より一般的には、複数のポート)が必要となる。複数のBRAMを搭載することで、いわゆる「メモリ待ち時間(memory latency)」が軽減されるので、各更新は単一クロックサイクルで別個のメモリポート経由で書き込むことができる。ただし、BRAM等のメモリの数がワイドワードの幅と同じ場合、メモリが少なくとも256個あり、各メモリには、新しい辞書エントリの1ワードサイズのみが含まれることになる。そのため、複数のメモリは、本質的に非コヒーレント(non-coherent:非同期式の)である。つまり、全メモリブロックはそれぞれ、複数のワードサイズのメモリにわたり分散された圧縮辞書で断片化される。より多くのクロックサイクルが利用できれば、メモリのコヒーレント(coherent)を保つことは可能かもしれないが、圧縮アルゴリズムの実時間制約を踏まえると、メモリの同期を別のアルゴリズムで行うことは困難である。 Since BRAM is a twin port, it can perform only one write operation and one read operation per clock of each clock cycle. Therefore, the compression algorithm requires multiple BRAMs (more generally, multiple ports). Having multiple BRAMs reduces so-called "memory latency" so that each update can be written via a separate memory port in a single clock cycle. However, if the number of memories, such as BRAM, is the same as the wideword width, there will be at least 256 memories, and each memory will contain only one word size of a new dictionary entry. As such, multiple memories are inherently non-coherent. That is, each full memory block is fragmented with compression dictionaries distributed across multiple word-sized memories. It may be possible to keep memory coherent if more clock cycles are available, but the real-time constraints of compression algorithms make it difficult to synchronize memory with another algorithm.

こうした問題に対処するために、様々な実施形態では、シンボルワイドワード(SIMD)ごとの実装におけるメモリの断片化が問題とならない圧縮アルゴリズムを提供する。図6は、代表的な実施形態に係る、単一回路で並列データ圧縮を可能とするよう構成されたワイドワードデータのシンボルの例を示す。 To address these issues, various embodiments provide compression algorithms in which memory fragmentation in symbol wide word (SIMD) implementations is not an issue. FIG. 6 illustrates an example of a wideword data symbol configured to enable parallel data compression in a single circuit, in accordance with a representative embodiment.

図6を参照すると、シリアルストリーム620は、それぞれのワイドワードにシンボル(バイト)b0~b10を含む。理解される点として、シリアルストリーム620は、高速プロトコル(例えば、PCIe Gen6プロトコルでは最大16レーン)に従って、複数のレーンを介して受信される。説明を簡略化するために、各ワイドワードは、より一般的な実装となる256シンボルとは異なり、図示の例では4つのシンボルからなる。例えば、第1のワイドワードには、バイトb0、b1、b2、及びb3が含まれ、第2のワイドワードには、バイトb4、b5、b6、及びb7が含まれる。各シンボルは、例えば、8ビットを持つバイトと仮定する。従来の圧縮アルゴリズムでは、シリアルストリームを「現状のままで(as is)」圧縮する、つまり、各シンボルの後に、シリアルストリームの次のシンボルが続くように圧縮する。 Referring to FIG. 6, serial stream 620 includes symbols (bytes) b0-b10 in each wide word. It will be appreciated that serial stream 620 is received over multiple lanes according to a high speed protocol (eg, up to 16 lanes for PCIe Gen6 protocol). To simplify explanation, each wide word consists of four symbols in the illustrated example, as opposed to 256 symbols in the more common implementation. For example, a first wide word includes bytes b0, b1, b2, and b3, and a second wide word includes bytes b4, b5, b6, and b7. Assume that each symbol is a byte with, for example, 8 bits. Traditional compression algorithms compress serial streams "as is", ie, each symbol is followed by the next symbol in the serial stream.

しかし、図示の実施形態では、従来の圧縮アルゴリズムのように、シリアルストリームの次のシンボルを使用するのではなく、データストリームは、クロックサイクルの次クロックにおけるデータストリームの次の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はワイドワードあたりのシンボル数である。これにより、効果的に並列圧縮を行うことができる。 However, in the illustrated embodiment, rather than using the next symbol of the serial stream, as in conventional compression algorithms, the data stream uses a wide word of the next four symbols of the data stream in the next clock cycle. Arranged to provide an input stream where each symbol is followed by the next symbol from the same location. That is, if there are four symbols per wideword, the symbols are grouped into every fourth for compression, as indicated by the different shadings in the serial stream of symbols indicated by reference numeral 630. Therefore, in this example, bytes b0, b4, b8, . .. .. forms a first input stream 631 for the first dictionary (D1), containing bytes b1, b5, b9, . .. .. forms a second input stream 632 for the second dictionary (D2), containing bytes b2, b6, b10, . .. .. forms a third input stream 633 for the third dictionary (D3) and contains bytes b3, b7, b11, . .. .. forms a fourth input stream 634 for the fourth dictionary (D4), each wide word having four symbols. The set of bytes at the same location in the first to fourth dictionaries (ie, each column of the array shown in FIG. 6) is then compressed every clock cycle. More generally, compression is performed on the first through nth dictionaries, where n is the number of symbols per wideword. This allows effective parallel compression.

言い換えれば、データストリームが「abcd efgh ijkl mnop」として表されるビットとして提供されると仮定する。上記入力の場合、従来のLZW圧縮アルゴリズムでは、例えば、或るワイドワードについては、連続した一意のペア「ab」、「bc」、及び「cd」、次のワイドワードについては、「ef」、「fg」、及び「gh」といった具合で、新しい辞書エントリが作成される。従来のLZW圧縮アルゴリズムでは、入力と同じ順番で、「a」「b」「c」「d」...といった具合で出力される。プロセスのどの段階であっても、2つ以上のシンボルを組み合わせて単一の新しい出力シンボル(符号)にすることで、マルチシンボルの文字列を圧縮できる場合、圧縮アルゴリズムがそれを実行することになる。これが発生すると、新しい圧縮後の符号が出力される前に、相当のギャップが出力に生じる。 In other words, assume that the data stream is provided as bits expressed as "abcd efgh ijkl mnop". For the above input, the conventional LZW compression algorithm uses, for example, sequential unique pairs "ab", "bc", and "cd" for one wide word, "ef", and "cd" for the next wide word. New dictionary entries are created such as "fg" and "gh". In the conventional LZW compression algorithm, "a", "b", "c", "d" . .. .. It is output like this. At any stage in the process, if a multi-symbol string can be compressed by combining two or more symbols into a single new output symbol (code), the compression algorithm will do so. Become. When this occurs, there is a significant gap in the output before the new compressed symbol is output.

しかし、種々の実施形態によると、この場合も、説明の便宜上、ワイドワードのサイズを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、...
However, in accordance with various embodiments, again assuming for the sake of illustration a wide word size of 4 symbols, for each compression step for n>=0, as discussed below, (4n+i) The th symbol (i=0, 1, 2, or 3) is considered. In this case, a new dictionary entry is paired as follows in a separate memory every clock cycle with consecutive clocks and four ordered inputs (1-4), each input addressing a different dictionary. be done, therefore,
1) ae, ei, im, . .. ..
2) bf, fj, jn, . .. ..
3) cg, gk, ko, . .. ..
4) dh, hl, lp, . .. ..

つまり、辞書の断片化されたメモリをサポートするために、各クロックサイクル「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メモリが含まれ得る)。 That is, to support fragmented memory of the dictionary, symbols are effectively presented to the compression algorithm as a value of all "(word_size*n+input_stream-1)" in each clock cycle "n". Each sequence then creates a new multi-byte symbol if that symbol has not been observed before. If the wide word size is 4, as in this example, then the compression algorithm uses four separately fragmented dictionaries, one for each value of i, for every (4n+i)th value ( i=0, 1, 2, 3). Therefore, as shown in Table 1, four blocks of four symbols will be encoded into four memories, such as "aeim", "bfjn", "cgko", and "dhlp". Data is processed as multiple streams for one memory "unit", so one dictionary (hash table) is processed per stream (e.g. each dictionary contains one or more FPGA memories). obtain).

表1で示した配列の列を読むと、バイトのペア「ae」、「ei」、及び「im」が、連続したクロックサイクルにおける第1の辞書への入力である。最終クロックサイクルでは、文字「m」は、その列の最後のシンボルであり、さらに、後での圧縮に使用される新しいペアを形成するための後続シンボルがないので、第1の辞書に新しい辞書エントリを追加しない。同様に、バイト「bf」、「fj」、及び「jn」は、連続クロックサイクル等での第2の辞書への入力であり、バイト「cg」、「gk」、及び「ko」は、連続クロックサイクル等での第3の辞書への入力であり、バイト「dh」、「hl」、及び「lp」は4クロックサイクル以降の連続クロックサイクル等での第4の辞書への入力である。 Reading the columns of the array shown in Table 1, the pair of bytes "ae", "ei", and "im" are the inputs to the first dictionary in successive clock cycles. In the last clock cycle, the letter "m" is the last symbol in its sequence, and since there are no subsequent symbols to form new pairs that will be used for later compression, a new dictionary is added to the first dictionary. Do not add entries. Similarly, bytes "bf", "fj", and "jn" are inputs to the second dictionary in consecutive clock cycles, etc., and bytes "cg", "gk", and "ko" are input in consecutive clock cycles, etc. The bytes "dh", "hl", and "lp" are inputs to the fourth dictionary at consecutive clock cycles, etc. from the fourth clock cycle onwards.

辞書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に格納する。 In a simple implementation of dictionary D, an array may be used such that D[i] is stored in the i-th (i=0, 1, . . . , word_size−1) element. However, since the length of the strings in dictionary D is variable, a simple implementation would not be efficient or trivial on the fixed memory provided by the FPGA. A simple software implementation of dictionary D could, for example, use variable-length strings as keys and associative arrays with compressed codes as values, which could be implemented as a balanced binary tree. can. However, each memory lookup to check by the binary tree whether the code is already known requires O(log(n)) operations, where n is the stored character is the number of column/integer pairs. Real-time operation on an FPGA requires O(1) operation, which means that the FPGA has only one clock cycle to compress the real-time data into one or more dictionaries D. . Furthermore, in an FPGA, it is necessary to define and fix the memory size during programming of the FPGA, so it is not easy (nontrivial) to store variable-length character strings as keys in the FPGA. Conversely, for decoding, each compressed codeword (key) can point to a string of unknown variable length bytes (values), which again is not trivial in FPGAs. During decompression, the reverse lookup result of dictionary D is stored in the FPGA so that one uncompressed (clear code) byte is released every clock cycle.

種々の実施形態によると、圧縮されるべきバイト列(sequence of byte)、つまり、可変長文字列は、プログラミング言語「C」の文字列である場合と同様に格納される。つまり、各バイト列は、リスト全体をトラバースできる(traversal)ようにするポインタと共に、複数文字の終端リストにNULL(ヌル)として格納される。これで、可変長文字列をFPGAに格納することに関する課題が解決される。バイト列(文字列)は、標準的な「C」プログラミング言語のように厳密な配列ではなく、各文字とともに格納されたリンクがそれぞれ、文字列の前文字を指す、単独のリンクリスト(singly linked list)のデータ構造と酷似したものである。このようなリンクリストのデータ構造は、「逆ポインタテーブル(reverse-pointer table)」と称することがある。この設計により、圧縮後の符号が、FPGAメモリ内の可変長パターンを損失又は誤りなく指し示すことができる。ハッシュテーブルには、単純なバイナリツリーではなく、むしろハードウェアでハッシュ関数を介してアクセスされる。ハッシュ関数と逆ポインタテーブルとの組み合わせは、クロックサイクルにつき1回の読み出しと、クロックサイクルにつき1回の書き込みが要求されるリアルタイムのメモリアクセスをサポートする。 According to various embodiments, a sequence of bytes to be compressed, ie, a variable length string, is stored as if it were a string in the programming language "C". That is, each byte string is stored as NULL in a multi-character terminal list, along with a pointer that allows traversal of the entire list. This solves the problem associated with storing variable length strings in an FPGA. A byte string (string) is not a strict array as in the standard "C" programming language, but rather a singly linked list, where each link stored with each character points to the previous character in the string. It is very similar to the data structure of list). Such a linked list data structure is sometimes referred to as a "reverse-pointer table." This design allows the compressed code to point to variable length patterns in FPGA memory without loss or error. Hash tables are accessed via hash functions in hardware rather than simple binary trees. The combination of hash functions and inverted pointer tables supports real-time memory accesses that require one read per clock cycle and one write per clock cycle.

逆ポインタテーブルは、例えば、Xilinx, Inc社から入手可能なUltraScale+(商標)FPGAのUltraRAM等の高密度、シングルクロック、2ポート、同期メモリを有する少なくとも1つのFPGAを用いて実装可能である。しかし、理解すべき点として、本教示の範囲を逸脱することなく、以下で検討するUltraRAMと実質的に同じ機能を持つFPGA、及び関連RAMを、組み込むことができる。一般的に、UltraRAMは、FPGAで使用される従来型BRAMの8倍の記憶容量を持つので、従来型FPGAでは、例えば、本明細書で検討する256ワイドワードの設計で十分なBRAMを含むことができない。 The reverse pointer table can be implemented using at least one FPGA with high-density, single-clock, two-port, synchronous memory, such as the UltraRAM of the UltraScale+™ FPGA available from Xilinx, Inc., for example. However, it should be understood that an FPGA and associated RAM having substantially the same functionality as the UltraRAM discussed below may be incorporated without departing from the scope of the present teachings. Typically, UltraRAM has eight times the storage capacity of conventional BRAM used in FPGAs, so conventional FPGAs, for example, cannot include enough BRAM in the 256-wideword design considered herein. I can't.

UltraRAMはFPGAのカラムナアーキテクチャ(columnar architecture)と互換性があるので、FPGAの複数のUltraRAMをインスタンス化し、FPGAの全ての高さ(entire height)に対し、1つの列において直接的にカスケードすることが可能である。UltraRAMは、FPGAの1つ以上の列に配列された288Kbの単一クロック同期メモリブロックを含み、各メモリブロックは、最大288Kビットのデータを格納できる4K×72ビットメモリブロックとして構成される。FPGAの単一クロック領域の列には、16個のメモリブロックが含まれる。 Because UltraRAM is compatible with the FPGA's columnar architecture, you can instantiate multiple UltraRAMs in the FPGA and cascade them directly in a single column for the entire height of the FPGA. is possible. UltraRAM includes 288 Kb single clock synchronous memory blocks arranged in one or more columns of the FPGA, with each memory block configured as a 4K x 72 bit memory block that can store up to 288 Kbits of data. A single clock domain column of an FPGA includes 16 memory blocks.

各UltraRAMは2ポートを備え、いずれも各メモリブロックの4K×72ビット全てをアドレス指定する。単一のURAMには、前述のように、単一のBRAMの8倍の容量がある。これら2つのポートはそれぞれ独立して、クロックサイクルにつき1回の読み出し動作、又は1回の書き込み動作のいずれかを実行可能である。しかし、内部的には、FPGAのスタティックランダムアクセスメモリ(SRAM:static random-access memory)配列はシングルポートメモリセルを使用する。デュアルポートの動作は、単一クロックサイクルでの第1のポートの動作に続く、第2のポートの動作により実行され、第1のポート及び第2のポートは、単一クロック入力を共有する。 Each UltraRAM has two ports, both of which address all 4K x 72 bits of each memory block. A single URAM has eight times the capacity of a single BRAM, as mentioned above. These two ports can each independently perform either one read operation or one write operation per clock cycle. However, internally, the FPGA's static random-access memory (SRAM) array uses single-port memory cells. Dual port operation is performed by operation of the first port followed by operation of the second port in a single clock cycle, the first port and the second port sharing a single clock input.

FPGA上で事前に必要なO(1)の動作を実現するハッシュテーブル又は辞書を使用して、逆ポインタテーブルを実装することができる。全般に、辞書は、ハードウェアではハッシュテーブルで実装されるが、ソフトウェアではバイナリツリーで実装することができる。ハッシュテーブル(辞書)は、下の表2で示すように、番号テーブル及びデータテーブルという、2つの別個のサブテーブルを含む。番号テーブルの各要素は、行ごとに2つのエントリを持つデータテーブルで使用されたエントリの数を格納する。FPGAにおいて、符号化済みのシンボル(symbol)(文字列(a string))が既知であるか、又は、新たに符号を作成する必要があるかを判断する。これを行うために、各ハッシュエントリは、合計で最大36ビットのメモリの利用可能なセルストレージを使用して、必要に応じ、最大14ビットまで可能な最大12ビットの圧縮後の符号と、8ビット文字(文字列の末尾シンボル)と、文字列内の前シンボルへの同サイズの逆ポインタが必要である。 The reverse pointer table can be implemented using a hash table or dictionary that achieves the required O(1) operation a priori on the FPGA. In general, dictionaries are implemented in hardware as hash tables, but in software they can be implemented as binary trees. The hash table (dictionary) includes two separate sub-tables: a number table and a data table, as shown in Table 2 below. Each element of the number table stores the number of entries used in the data table with two entries per row. In the FPGA, it is determined whether an encoded symbol (a string) is already known or whether a new code needs to be created. To do this, each hash entry has a compressed code of up to 12 bits, which can be up to 14 bits, and 8 Requires a bit character (the last symbol in the string) and an equal-sized inverted pointer to the previous symbol in the string.

各データテーブルは、例えば、並列に格納されたワイドワードデータについてハッシュ関数を実行するために、1つ(又は、2つ)のUltraRAMで実装され、各番号テーブルは、辞書インスタンスごとに2つ(又は、4つ)のBRAMで実装される。ハッシュサイズは、UltraRAMのアドレス空間(4K×72ビット)と一致しており、表2で示すように、データの72ビットを各メモリ位置で使用して、36ビットのエントリを2個形成することができる。それゆえ、UltraRAMのデータレイアウトは、例えば、8個のBRAMと同じ全メモリフットプリントを有するが、例えば、BRAMで必要とされる36ビットエントリ8個よりも「より狭く」、かつ、「より深く」なっている。 Each data table is implemented with one (or two) UltraRAM, e.g. to perform a hash function on wideword data stored in parallel, and each number table is implemented with two ( Or, it is implemented with 4 BRAMs. The hash size matches the UltraRAM address space (4K x 72 bits) and uses 72 bits of data at each memory location to form two 36-bit entries, as shown in Table 2. Can be done. Therefore, the data layout of UltraRAM has the same total memory footprint as, for example, eight BRAMs, but is "narrower" and "deeper" than, for example, the eight 36-bit entries required by BRAM. ” has become.

番号テーブルは、データテーブルの使用済み容量を示す。したがって、UltraRAMをデータテーブルに使用すると、ワードサイズ*UltraRAM(256UltraRAMの可能性があり、これは従来の大規模FPGAの約20%に相当)、及び、ワードサイズ*2*BRAM(512BRAMの可能性がある)が得られる。表2において、両列のエントリeh、i(例えば、e0,0、e1,0、e2,0、...、及びe0,1、e1,1、e2,1、...)はそれぞれ、ポインタ(j)、圧縮中のシンボル文字列の末尾バイト、又は(x)、並びに、jとxから計算した逆ポインタという3つの値を含む構造体である。例えば、圧縮されるべき文字列が「cat」という単語であるとすると、エントリe00は「t」であり、別のエントリへの逆ポインタである可能性がある。その逆ポインタは、「a」、及び更に別のエントリへの逆ポインタを持ち、さらに、その逆ポインタは、「c」、及びNULLへの逆ポインタを持ち得る。NULLは逆ポインタがないことを示し、それがマルチシンボルの文字列の始点であることを示す。この配列によって、辞書に含まれる文字列の長さが可変であるという問題が解決される。注目すべきは、表1の各列が、図6の入力シンボルの文字列と等価であることである。例えば、表1の第1の列は、図6の第1の辞書の第1の入力ストリーム631に相当し得る。同様に、表1の各列、ひいては、図6の各入力ストリームについて、1つの表2が存在する。そのため、例えば、256ワイドワード設計(図6の4ワイドワード設計とは異なる)では、256の表2の異なるインスタンスを効果的に提供するはずである。 The number table indicates the used capacity of the data table. Therefore, if UltraRAM is used for the data table, word size *UltraRAM (possible 256 UltraRAM, which corresponds to about 20% of a conventional large-scale FPGA), and word size *2 * BRAM (possible 512 BRAM). ) is obtained. In Table 2, the entries e h,i in both columns (e.g. e 0,0 , e 1,0 , e 2,0 , ... and e 0,1 , e 1,1 , e 2,1 , ...) are each a structure containing three values: a pointer (j), the last byte of the symbol string being compressed, or (x), and an inverse pointer computed from j and x. For example, if the string to be compressed is the word "cat", entry e 00 is "t", which may be a reverse pointer to another entry. The reverse pointer may have "a" and a reverse pointer to yet another entry, and the reverse pointer may have "c" and a reverse pointer to NULL. NULL indicates that there is no reverse pointer and indicates that it is the starting point of the multi-symbol string. This arrangement solves the problem of variable length strings in the dictionary. Note that each column in Table 1 is equivalent to a string of input symbols in FIG. For example, the first column of Table 1 may correspond to the first input stream 631 of the first dictionary of FIG. Similarly, there is one Table 2 for each column in Table 1, and thus for each input stream in FIG. So, for example, a 256 wideword design (different from the 4 wideword design of FIG. 6) would effectively provide 256 different instances of Table 2.

圧縮に関するもう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に過ぎない。 As another example regarding compression, a string to be compressed in one input stream (e.g., first input stream 631), and thus a string addressing one dictionary (e.g., first dictionary), is , "a b ab aba b" (without spaces, but spaces are included here for clarity), in which case the string compressed according to the LZW compression algorithm is, for example, It should be 97 98 256 258 98. The first "a" and the first "b" cannot be compressed because they are the first occurrences of these characters, but if the letters "a" and "b" were observed first, then the code 256 would be compressed. When a new multi-symbol string "ab" is added to the first dictionary used, and then a second occurrence of "ab" is seen in this stream, this new code is added to the second occurrence of "ab". ”, the multi-symbol string is compressed into a single code. Similarly, when "ab" is first observed, there is an opportunity to create a new multi-letter code "aba" with value 258 in the dictionary. Note that although the character code "ba" was assigned the value 257, "aba" with the value 258 is preferred since the algorithm automatically maximizes compression. When a second occurrence of "aba" is observed, this new code can be used in a multi-symbol string. Note that the outputs for "a" and "b" are just the (illustrative) numerical representations 97 and 98 of the letters "a" and "b", respectively, in the ASCII table.

「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個のアドレス全てについて、均一にアクセスできるようにする必要がある。 For "ab", there will be an entry in the dictionary that includes the previously occurring character and has reverse pointers: 256, x: 98, j: 97. Character x: 98 (ie, character "b") and pointer j: 97 (ie, character "a") are temporarily output. In this case, pointer j simply points to the character "a". Since "a" and "b" are reversed, when decompressed, the compressed value 256 becomes "ab". The entry appears in the dictionary at row h(j=256,x=97)=512 and is likely to be e 512,0 unless some other hash function has previously provided 512, in which case , the entry should be e 512,1 . If something like this happens again, a conflict will occur and this new multi-symbol string will not be added to the dictionary (compression has to be done in one clock cycle, and it would otherwise have handled the conflict). (there are several methods), the compression efficiency will be slightly worse. Therefore, the hash function h(j, There is a need to.

この例を続けると、「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」)となる。 Continuing this example, for "aba", there is an entry (calculated by h(j, x)) in the dictionary that includes the previously occurring character and has reverse pointers: 258, It turns out. The character x: 97 (that is, the character "a") and the pointer j: 256 are temporarily output. Pointer j:256 moves to its previous location and the reverse pointer becomes 256. In this case, following the same procedure as above would again provide the output of "ab" added to the previous character, resulting in "aba". The word "aba" here is actually reversed, but in this example, there is no problem. If the order of the characters matters, for example, in the string "cat" example above, the order would be reversed when decompressed. The output of "aba" is 258. Since the last character is simply a "b" and there are no more strings to concatenate, the output is simply 98 (ie, the character "b").

注目すべきは、UltraRAMがBRAMほど柔軟ではなく、高性能でもないので、データがクロックサイクルごとに1回の圧縮の動作でクロック/ラインレートに到達し、読み取り動作と書き込み動作との間で遅延が発生するたびに、新たな遅延が発生する可能性があることである。このリスクを軽減するために、新しい符号語の挿入(書き込み動作)と、データを圧縮するためにその符号語の想定される使用(読み取り動作)との間で、最大「n」個の新たなクロックサイクルを追加して、圧縮アルゴリズムを実行することができる。これにより、待ち時間が新たに発生しても、符号化と復号化のアルゴリズムが正しく動作することをもたらすが、例えば、従来のLZ77又はLZ78圧縮アルゴリズムと比較して、新しい符号語が「n」クロックサイクル後まで使用できないことにより、圧縮が若干低下し得る。 Of note, UltraRAM is not as flexible or high-performance as BRAM, so data reaches clock/line rate with one compression operation per clock cycle, and there is no delay between read and write operations. Each time a new delay occurs, a new delay may occur. To mitigate this risk, up to 'n' new Additional clock cycles can be added to run the compression algorithm. This results in the encoding and decoding algorithms operating correctly even though new latencies are introduced, but compared to, for example, traditional LZ77 or LZ78 compression algorithms, the new codeword 'n' Not being available until after a clock cycle may degrade compression slightly.

表2を使用して実装されるハッシュ関数h(j,x)は、式(1)で実装される、式中、「>>」と「<<」はそれぞれ、ビット単位の右シフトと左シフトであり、「^」は、ビット単位の排他的論理和(XOR)演算、そして、「&」は、ビット単位のAND論理和を表している。
h(j,x)=((j>>4)^(j<<2)^(x<<4))&"0xFFF" 式(1)
The hash function h(j,x) implemented using Table 2 is implemented in Equation (1), where “>>” and “<<” represent bitwise right shift and left is a shift, "^" represents a bitwise exclusive OR (XOR) operation, and "&" represents a bitwise AND OR.
h(j,x)=((j>>4)^(j<<2)^(x<<4))&"0xFFF" Formula (1)

ハッシュ関数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での実装が容易で、しかも、類似した文字列について異なるハッシュ値をリアルタイムに一貫して生成することが可能である。 The hash function h(j,x) has two input parameters: a 12-bit inverse pointer (j) and an 8-bit character (x). The hash function h(j,x) calculates a new row every clock cycle, eg, the rows are shown in Table 2. Therefore, for example, if h(j=0, x=1)=16, the 16th row of the number table in Table 2 should be accessed. The number subtable in row 16 will contain either 0, 1, or 2, depending on the number of entries filled in the data subtable of Table 2. If the 16th line is 0 or 1, the character x is written to either e 16,0 or e 16,1 . If row 16 is 2 (i.e., this row is full), this is a conflict and the inability to add an entry for this newly hashed string causes this newly hashed string to appear later in the data stream. If detected, compression may be slightly worse than optimal. This character is each symbol, and the reverse pointer associates this symbol with the previous symbol in the array shown in Table 1. The hash function h(j,x) has a 12-bit output address (for example, 4096 different addresses), unlike the 10-bit output address when using BRAM, and has uniform access to all output addresses. can do. In other words, it is assumed that one address is not accessed more often than other addresses. Since the hash function h(j, It is.

他のハッシュ関数と同様、衝突(collision)の可能性がある。衝突とは、異なる文字列が同じハッシュ値を持つことである。或る行の双方の場所が使用された場合、競合(conflict)が発生する(上述のとおり)、つまり、その文字列に対する新たな圧縮後の符号を辞書に追加することはできず、既存の小さい方の符号を使用しなければならない。これにより、想定されていた圧縮が或る程度損なわれるが、ハッシュの競合を解決しようとしても、単一クロックサイクルでは達成できない2回目の検索として、リアルタイムの動作が可能となる。 As with any hash function, there is a possibility of collisions. A collision is when different strings have the same hash value. If both locations of a line are used, a conflict will occur (as described above), i.e. a new compressed code for the string cannot be added to the dictionary, and an existing The smaller sign shall be used. This compromises some of the expected compression, but allows for real-time operation as a second search that cannot be achieved in a single clock cycle, even when attempting to resolve hash conflicts.

図7は、代表的な実施形態に係る、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、インターポーザ回路のキャプチャバッファに格納されるべきデータペイロードの並列データ圧縮を実行する方法を示す簡略流れ図である。 FIG. 7 illustrates parallel data compression of a data payload to be stored in a capture buffer of an interposer circuit during communication of data over a data link that conforms to a high-speed layered packet-based protocol, according to an exemplary embodiment. 1 is a simplified flowchart illustrating a method for

図7を参照すると、並列データ圧縮を実行することは、ブロックS711において、高速データリンク130のPCIeレーン等の複数のシリアル高速データレーンにおけるインターポーザ回路120でそれぞれのデータペイロードを含む、TLP及び/又はDLLPのシンボルを受信することを含む。ブロックS712において、TLP及び/又はDLLPのシンボルを、クロックサイクルの各クロックに到着するワイドワードのシリアルストリーム(例えば、シリアルストリーム620)へとデスキューする。ブロックS713において、ワイドワードを、入力ストリーム(例えば、第1のストリーム631~第4の入力ストリーム634)へと配列する。各入力ストリームは、クロックサイクルの各クロックに到着する各ワイドワードの同じ場所からのシンボルを含み、これにより、各シンボルが、次のシンボルと共に正しい場所に配置され、最大256バイト以上の幅の入力ストリームを形成する。つまり、インターポーザ回路120は、クロックサイクルの各クロックで圧縮されるべきワイドワードを形成するために、高速プロトコルから提供される(最大)16レーンから一度に圧縮する256以上のデータシンボル(バイト)を取得し、デスキューすることができる。上記考察において、バイトとシンボルはそれぞれ8ビットと仮定しているので、ワイドワードと圧縮に関して、これらの用語は同じ意味で使われる。 Referring to FIG. 7, performing parallel data compression includes, in block S711, a TLP and/or DLLP symbols are received. At block S712, the TLP and/or DLLP symbols are deskewed into a serial stream of widewords (eg, serial stream 620) that arrives each clock of the clock cycle. At block S713, wide words are arranged into input streams (eg, first stream 631 through fourth input stream 634). Each input stream contains symbols from the same location in each wideword that arrive at each clock of the clock cycle, ensuring that each symbol is placed in the correct location with the next symbol, for inputs up to 256 bytes wide or more. form a stream. That is, the interposer circuit 120 compresses 256 or more data symbols (bytes) at a time from (up to) 16 lanes provided by the high speed protocol to form a wide word to be compressed on each clock cycle. can be acquired and deskewed. In the discussion above, we have assumed that bytes and symbols are each 8 bits, so with respect to widewords and compression, these terms are used interchangeably.

ブロックS714において、式(1)で示されるハッシュ関数を実施し、ポインタを前シンボルに提供するハッシュテーブルを使用して、配列後のシンボルを圧縮する。ブロックS715において、圧縮後のシンボルは、キャプチャバッファ125に格納される。高速データプロトコルに従ってデータペイロードを解析するために、インターポーザ回路120、及び/又は、プロトコルアナライザを実行するUIコンピュータ110(つまり、インターポーザ回路120、又はプロトコルアナライザを実行するUIコンピュータ110、あるいはそれらの両方)によって、圧縮後のシンボルを圧縮解除することができる。 At block S714, the hash function shown in equation (1) is implemented to compress the arrayed symbols using a hash table that provides pointers to previous symbols. In block S715, the compressed symbols are stored in the capture buffer 125. an interposer circuit 120 and/or a UI computer 110 running a protocol analyzer (i.e., an interposer circuit 120 and/or a UI computer 110 running a protocol analyzer) to analyze a data payload according to a high-speed data protocol; The compressed symbols can be decompressed by

図7のブロックS711~S715を参照して上述したプロセスは、プロトコルドメイン固有の圧縮技術と称することもある。これは、情報を失うことなく、キャプチャバッファ125に格納するのに必要なデータ量を圧縮、又は削減するために、プロセスごとにプロトコル設計を利用するためである。また、インターポーザ回路120が、DUT140とホストコンピュータ150に関する「中間者」として動作しているため、プロトコルトラフィックをキャプチャし、処理する仕組みについて、何かしらの仮定がなされる場合がある。また、ホストコンピュータ150とテスト自体のユースケースは、忠実度を損なわずにデータを削減する仕組みと更に関係している可能性がある。 The process described above with reference to blocks S711-S715 of FIG. 7 is sometimes referred to as a protocol domain-specific compression technique. This is because each process utilizes a protocol design to compress or reduce the amount of data required to be stored in the capture buffer 125 without losing information. Also, because interposer circuit 120 is acting as a "man in the middle" with respect to DUT 140 and host computer 150, certain assumptions may be made about how protocol traffic is captured and processed. Also, the use case of the host computer 150 and the test itself may further relate to mechanisms for reducing data without compromising fidelity.

前述のように、TLP及び/又はDLLPのデータペイロードについて、又は、データペイロードとヘッダの双方について、圧縮を実行することができる。データペイロードとヘッダの双方について圧縮を実行する場合、ワイドワードが全て、そのまま圧縮器に渡される。これまで考察したように、圧縮がデータペイロードのみについて行われる場合には、データ完全性フィールドの削除、及び既知のフィールドの削除等、ワイドワードのヘッダに関して格納されるデータ量を削減する他の手法を実行してから、その後、残りの部分に対して圧縮を実行する。一実施形態において、圧縮前にデータペイロードを新たな256バイト幅のワードに再編成して、効率を高めるために、ギャップを最初に削除してもよい。 As mentioned above, compression can be performed on the TLP and/or DLLP data payload or on both the data payload and the header. When performing compression on both the data payload and the header, all wide words are passed to the compressor unchanged. As previously discussed, if compression is performed only on the data payload, there are other techniques to reduce the amount of data stored for wideword headers, such as removing data integrity fields and removing known fields. and then perform compression on the remaining portion. In one embodiment, the data payload may be reorganized into new 256-byte wide words before compression to first remove gaps to increase efficiency.

[圧縮解除]
種々の実施形態において、必要なときに、圧縮後のデータを圧縮解除することができる。圧縮解除では、圧縮段階から辞書のコピーにアクセスする必要はないが、辞書は使用することができる。むしろ、一般的に言えば、圧縮後のワイドワードデータ入力の圧縮解除には、ワイドワード圧縮後データを適切に順序付けられた圧縮後の符号の単一ストリームとして表記する、結合された圧縮後の出力ストリームのコピーのみが必要となる。圧縮後のデータのみが、USB又はイーサネットリンクを介してUIコンピュータ110へと送信され、圧縮後のデータと辞書の完全セットが共に送信されないので、このことは、とりわけ、UIコンピュータ110について有用である。
[Decompress]
In various embodiments, the compressed data can be decompressed when needed. Decompression does not require access to a copy of the dictionary from the compression stage, but the dictionary can be used. Rather, generally speaking, decompression of compressed wideword data input involves combining the combined compressed Only a copy of the output stream is required. This is particularly useful for the UI computer 110 since only the compressed data is sent to the UI computer 110 via the USB or Ethernet link, and not the full set of dictionaries together with the compressed data. .

途切れのない連続した単一シーケンス(ストリーム)として、圧縮後のデータを格納すると、最適なデータ記憶機構が得られる。しかし、シンボルを正しく復号化する上で、圧縮で生成されるデータの出力ストリームにおけるデータの順序が重要である。圧縮解除では、どの圧縮後のシンボルが、どの個々の元のワイドワード入力ストリーム(例えば、第1の入力ストリーム631~第4の入力ストリーム634)のそれぞれに属するかを特定できるようにする必要があり、こうすれば、圧縮後のシンボルを正しい辞書Di(i=0、1、2、...、wideword-1)にアドレス指定することができる。 Storing the compressed data as a single uninterrupted sequence (stream) provides optimal data storage. However, the order of data in the output stream of data produced by compression is important in correctly decoding symbols. Decompression must be able to identify which compressed symbols belong to each of the individual original wideword input streams (e.g., first input stream 631 to fourth input stream 634). Yes, this allows the symbols after compression to be addressed to the correct dictionary Di (i=0, 1, 2, . . . , wideword-1).

例えば、従来型LZW圧縮アルゴリズムでは、圧縮後のシンボルが生成されると、このシンボルは出力ストリームに書き込まれる。したがって、ワイドワードシステム用に適応しない場合、入力ストリームにそれぞれ対応する複数の出力ストリームを、途切れのない理想的な単一出力ストリームへと統合する際に、LZW圧縮アルゴリズム(及び、他の従来型圧縮アルゴリズム)では、順序情報が失われることになる。 For example, in a conventional LZW compression algorithm, once a compressed symbol is generated, the symbol is written to the output stream. Therefore, when not adapted for wideword systems, the LZW compression algorithm (and other conventional (compression algorithm), ordering information will be lost.

1つ以上の非圧縮シンボルを表す圧縮後のシンボルを作成すると、キャプチャバッファにおけるワイドワードの圧縮後の出力ストリームの順序が変わることになる。図8は、説明目的で、上述の圧縮技術を用いて生成された圧縮解除用ワイドワードデータの入力のシンボルの例を示す図である。 Creating compressed symbols that represent one or more uncompressed symbols will change the order of the compressed output stream of widewords in the capture buffer. FIG. 8 is a diagram illustrating, for illustrative purposes, an example of input symbols for decompressing wideword data generated using the compression technique described above.

図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」)エントリの存在により、圧縮解除目的用の出力シンボルのその後の順序が回復不能となるような順序付けとなっている。 Referring to FIG. 8, a first input stream 811 (input stream 0) and a second input stream 812 (input stream 1) of wideword data are input for compression. The first input stream 811 and the second input stream 812 correspond essentially to the first input stream 631 and the second input stream 632 discussed above with reference to FIG. 6, for example, but for convenience: The symbol numbers are different. A first compressed (intermediate) stream 821 (0 after compression) is computed for the first input stream 811 and is an intermediate step between when the data is compressed and just before the data is written to the capture buffer during the compression process. Represents the order of operations in . Similarly, a second compressed (intermediate) stream 822 (post-compressed 1) is computed for the second input stream 812 at the time the data is compressed and just before the data is written to the capture buffer during the compression process. represents the order of operations at intermediate steps. The uninterrupted final compressed single output stream 830 corresponds to data stored sequentially, but as discussed below, the capture buffer is configured to handle no operations in the compressed first stream 821 ( The presence of the no-operation ("NoOp") entry results in an ordering such that the subsequent ordering of the output symbols for decompression purposes is unrecoverable.

図8において、「bn」は、ストリーム「i」のn番目の場所のシンボルを示し、「Di」は、ストリーム「i」について対応する辞書、すなわち、i番目の辞書を示す。これまで検討した圧縮プロセスと同様、当初は、ワイドワードシンボルの各入力ストリーム(例えば、第1の入力ストリーム631~第4の入力ストリーム634)が、大きい方の辞書(D)自身の断片化された一部を使用して圧縮されていたので、ワイドワードシンボルのセットの各入力が、圧縮解除用に別々に処理される。そのため、圧縮解除時に同じ照合情報を使用する必要がある。図8の例では、第1の入力ストリーム811のシンボルは、第1の辞書D1をアドレス指定し、第2の入力ストリーム812のシンボルは、第2の辞書D2をアドレス指定しなければならないといった具合のルールとなっている。 In FIG. 8, "bn" indicates the symbol at the nth location of stream "i", and "Di" indicates the corresponding dictionary for stream "i", that is, the i-th dictionary. As with the compression processes considered so far, initially each input stream of wideword symbols (e.g., first input stream 631 to fourth input stream 634) is fragmented from the larger dictionary (D) itself. Each input of the set of wideword symbols is processed separately for decompression. Therefore, it is necessary to use the same collation information when decompressing. In the example of FIG. 8, symbols in the first input stream 811 must address the first dictionary D1, symbols in the second input stream 812 must address the second dictionary D2, and so on. This is the rule.

一般的に、圧縮アルゴリズムの入出力は、動作(operation)の観点からデータを処理する。圧縮段階中では、1回の動作では、単一のクロックサイクル(ハード制約に相当する)を要し、入力データの処理はリアルタイムに行われる必要がある。しかし、圧縮解除段階中では、このようなハード制約はなく、つまり、必要であれば、単一の動作に2クロック以上かかることもあり得る。説明を簡単にするために、最初に、動作の観点から、圧縮解除プロセスについて説明し、次に、ハードウェア上のクロックサイクルに動作をマッピングする例を示す(例えば、FPGA、又はASIC)。 In general, the inputs and outputs of compression algorithms process data from an operational perspective. During the compression stage, one operation requires a single clock cycle (corresponding to a hard constraint) and the processing of the input data needs to occur in real time. However, during the decompression phase there is no such hard constraint; a single operation can take more than one clock, if necessary. For ease of explanation, we first describe the decompression process from an operational perspective and then provide an example of mapping the operations to clock cycles on hardware (eg, an FPGA, or an ASIC).

途切れのない圧縮後の出力ストリーム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の出力において放出されない。 Regarding the order of symbols in the output stream 830 after seamless compression, once symbols b5 and b6 are compressed into a single symbol during the compression process, the exemplary compression process shown in FIG. This will cause the output to be skipped at location b5 (action number 5) in the first input stream 811 using D1. This skip is indicated by the NoOp entry of the computed compressed first stream 821 for the first input stream 811 . Generally, a NoOp occurs when a new compressed symbol representing two or more original input symbols is about to be emitted, but has not yet been emitted. This occurs when multiple input symbols are compressed into a single code. For example, compressing two original input symbols results in one NoOp, and compressing three input symbols results in two NoOps. Therefore, each time an input symbol is consumed, the compression algorithm tests whether it can compress that input symbol. If a long multi-symbol string that matches the input symbol is already known, the input symbol can be compressed with that long multi-symbol string. Whenever this occurs, there will be no symbol at that location, so a NoOp entry is introduced. Therefore, a new compressed code representing the newly combined compressed symbols b5 and b6 is not released at the output of the first input stream 811 until symbol b6 (operation number 6).

単一出力ストリームを伴う非ワイドワード圧縮では、新たなマルチシンボル文字列b5/b6が、依然として、途切れのない圧縮後の出力ストリームにおいてシンボルb4と直列に続く次のシンボルのままであるため、NoOpは問題ではない。つまり、圧縮する入力ストリームが1つであれば、並べ替え(reordering)が発生する可能性はなくなる。しかし、ワイドワード圧縮では、様々な入力ストリームを、途切れのない理想的な単一出力ストリームへと結合する際、1つ以上のNoOpによって、入力シンボルの順序が変わる場合がある。特に、キャプチャバッファ内のスペース効率に優れた最適なレイアウトには、途切れのない圧縮後の単一出力ストリームが必要である。 For non-wideword compression with a single output stream, the new multi-symbol string b5/b6 remains the next symbol serially following symbol b4 in the uninterrupted compressed output stream, so NoOp is not a problem. That is, if there is only one input stream to compress, there is no possibility of reordering occurring. However, in wideword compression, one or more NoOps may change the order of input symbols when combining various input streams into an ideally uninterrupted single output stream. In particular, an optimal, space-efficient layout within the capture buffer requires a single uninterrupted compressed output stream.

図示の例において、圧縮後の第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の後で出現するものとする。それゆえ、ワイドワードで複数の入力ストリームからデータを復元することを支援するために、より予測しやすい順序が必要となる。 In the illustrated example, the presence of a NoOp in the first stream 821 after compression causes the single output stream 830 after compression to correspond to data in the capture buffer that is not properly ordered. As shown, compressed output stream 830 receives symbols alternating between compressed first stream 821 and compressed second stream 822 . In other words, the compressed output stream 830 extracts the symbol b1 from the compressed first stream 821, the symbol b1 from the compressed second stream 822, and the symbol b2 from the compressed first stream 821. Symbol b2 is received from the subsequent second stream 822, and so on. However, by skipping the NoOp entry of the compressed first stream 821, symbol b4 of the compressed second stream 822 is immediately followed by symbol b5 from the compressed second stream 822. Then, the multi-symbol character string b5/b6 from the compressed first stream 821 continues. Since the order ensuring that the first input stream 811 is addressed to the first dictionary D1 and the second input stream 812 is addressed to the second dictionary D2 is lost and cannot be recovered, the compression Using the later output stream 830 as input for decompression makes it impossible to recover the data in each dictionary in its original order. For example, two adjacent symbols b4 and b5 originating from the second input stream 812 appear in consecutive locations in the compressed output stream 830 (indicated by a circle 835), so that the symbols that appear alternately are round robin If we aim for alternating streams in a (round robin) manner, it would be incorrectly assumed that they originate from different input streams. It is also assumed that multi-symbol character string b5/b6 from symbols b5 and b6 starting from the first input stream 811 appears after symbol b5 starting from the second input stream 812. Therefore, a more predictable order is needed to help recover data from multiple input streams in widewords.

1つの解決策としては、元の入力ストリーム(例えば、第1の入力ストリーム811、又は第2の入力ストリーム812)、及び各シンボルbnの関連する辞書を示す追加情報を含めることがある。追加情報により、正しい辞書Diをアドレス指定できるようになる。ただし、キャプチャバッファ内の途切れのない単一の出力ストリームへの圧縮中にデータがインターリーブされた後、別個の入力ストリームを識別するのに必要な追加情報の量まで、格納後のデータの量が増加するので、追加情報を含めることは、使用可能なデータストレージを最大化するという目的には逆効果となる。代替的には、辞書のデータをそれぞれ、別個の場所に配置して、辞書ごとに1ストライプずつ、圧縮後のデータの複数ストライプ(行)を効果的に作成することができる。ただし、1つのストライプで利用できるスペースを使い切ると、キャプチャプロセスが停止するので、この手法も最適ではない。つまり、或るストライプが満杯になると、一部にまだ空き領域がある場合でも、キャプチャバッファ内の他のストライプにそれ以上のデータを書き込むことはできない。 One solution is to include additional information indicating the original input stream (eg, first input stream 811 or second input stream 812) and the associated dictionary of each symbol bn. The additional information allows the correct dictionary Di to be addressed. However, after the data is interleaved during compression into a single uninterrupted output stream in the capture buffer, the amount of data after storage is limited to the amount of additional information required to identify separate input streams. Including additional information is counterproductive to the goal of maximizing available data storage. Alternatively, each dictionary's data can be placed in a separate location, effectively creating multiple stripes (rows) of compressed data, one stripe for each dictionary. However, this approach is also not optimal because the capture process stops when the available space in one stripe is used up. That is, when a stripe becomes full, no more data can be written to other stripes in the capture buffer, even if there is still some free space.

これに対し、本明細書の実施形態によれば、圧縮後のデータは、マルチシンボル文字列の最初のシンボルが、(圧縮前に)本来出現する順序でキャプチャバッファに書き込まれるため、並べ替えが回避される。これは、圧縮中に途切れのない圧縮後の出力ストリームが作成されたときのシンボルの場所ではなく、途切れのない圧縮後の出力ストリームが非圧縮のマルチシンボル文字列である場合と同様に、途切れのない圧縮後の出力ストリームのシンボルの場所を使用することによって行われる。 In contrast, according to embodiments herein, the compressed data is not reordered because the first symbols of the multi-symbol string are written to the capture buffer in the order in which they originally appear (before compression). Avoided. This is not the location of the symbols when the unbroken compressed output stream is created during compression, but rather the unbroken compressed output stream, as if the unbroken compressed output stream were an uncompressed multi-symbol string. This is done by using the symbol locations of the output stream without compression.

図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に相当するかについて、取得されたデータ符号に問い合わせることができる。そのため、順序は守られる。また、シンボルを早期に書き込むことはできず、他のストリームの残りのシンボルは、出力を並べ替える時間を稼ぐために一時バッファで遅延させることができる。 FIG. 9 is a diagram illustrating an example of reordering symbols of a wideword data input for decompression, according to a representative embodiment. Referring to FIG. 9, the compressed multi-symbol string corresponding to the two original arriving symbols b5 and b6 from the first input stream 811 is written in the place of the first arriving symbol b5 and the next It is not written to the location of the incoming symbol b6. That is, as seen in FIG. 8, multi-symbol string b5/b6 is written with action number 5 and not with action number 6. By performing this "first arriving symbol" reordering, sufficient information is retained to restore the original order of symbols b5 and b6 from the compressed output stream 930 stored in the capture buffer. When the combined multi-symbol string b5/b6 is decoded, the multi-symbol b5/b6 is decoded from the original two uncompressed strings for the first input stream 911, which are also known to belong to the first dictionary D1. The acquired data code can be queried as to whether it corresponds to symbols b5 and b6. Therefore, the order is preserved. Also, symbols cannot be written early, and remaining symbols from other streams can be delayed in temporary buffers to buy time to reorder the output.

具体的には、図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エントリが存在するにもかかわらず、正しく順序付けられた、圧縮解除後のデータを示している。 Specifically, FIG. 9 shows a first input stream 911 (input stream 0) and a second input stream 912 (input stream 1) of wideword data, which are provided below for compression. . The first input stream 911 and the second input stream 912 may respectively correspond to the first input stream 631 and the second input stream 632 discussed above with reference to FIG. are different. FIG. 9 shows the compressed first stream 921 (0 compressed) computed for the first input stream 911 and reordered according to the present embodiment, and the compressed compressed stream computed for the second input stream 912. A second stream 922 (post-compressed 1) is also shown, representing the order of operations at intermediate steps during the compression process before the data is written to the capture buffer as a continuous compressed output stream 930. Subsequent decompression is performed on the compressed output stream 930 according to known decompression algorithms. The final decompressed stream 940 shows correctly ordered decompressed data despite the presence of NoOp entries in the first compressed stream 921.

図示の実施形態によると、ワイドワード用の圧縮後の出力ストリーム930は、非圧縮文字列の元の場所における第1のシンボルに基づいて、交互に出現する第1の入力ストリーム911及び第2の入力ストリーム912からの連続する圧縮後のシンボルが互いに続くよう、圧縮中に書き込まれる。元の到着シンボルを圧縮できない場合、このシンボルは、無関係に、正しい動作中に正しい場所で放出される。1つ以上のシンボルがマルチシンボル文字列に圧縮されると、最終的に圧縮アルゴリズムが作成された際に、マルチシンボル文字列の最終動作ではなく、マルチシンボル文字列の第1のシンボルに対応する第1の動作で作成された場合と同様に、圧縮後の符号が出現するよう、圧縮後の符号は一時的にバッファされてから、第1の到着シンボルの順序で放出される。このインターリーブでは、入力ストリームのいずれか1つの入力シンボルが新たなマルチシンボル文字列に圧縮されれば必ず、全ての入力ストリームのシンボルを放出する際に適切な遅延を追加する必要がある。 According to the illustrated embodiment, the compressed output stream 930 for a wideword consists of a first input stream 911 and a second input stream that alternate based on the first symbol in the original location of the uncompressed string. Successive compressed symbols from input stream 912 are written during compression so that they follow each other. If the originally arriving symbol cannot be compressed, it will be emitted at the correct location during correct operation regardless. When one or more symbols are compressed into a multi-symbol string, the final compression algorithm created corresponds to the first symbol of the multi-symbol string, rather than the final operation of the multi-symbol string. The compressed code is temporarily buffered so that it appears as if it were created in the first operation, and then released in the order of the first arriving symbols. This interleaving requires adding an appropriate delay in emitting the symbols of all input streams whenever the input symbols of any one of the input streams are compressed into a new multi-symbol string.

例えば、本明細書で説明する例示的なデュアルワイドワードシステムでは(説明をしやすくするため)、圧縮後の出力は常に、第1の入力ストリーム911、次いで、第2の入力ストリーム912のように、一対単位で放出させる。さらに、複数のシンボルを1つの新たなマルチシンボル文字列に圧縮すれば必ず、この新たな圧縮後のシンボル符号は、新たな符号内の最初の初期/第1の圧縮前のシンボルの場所に書き込まれる。例えば、圧縮後のマルチシンボル文字列b5/b6は、動作番号5では、シンボルb5の場所に書き込まれ、動作番号6ではシンボルb6の場所には書き込まれない。したがって、図示の例では、圧縮後の出力ストリーム930は、シンボルb5の場所ではなく、シンボルb6の場所で計算された圧縮後のストリーム921にNoOpが存在することにより、代表的な実施形態に従って、正しく順序付けられたキャプチャバッファ内のデータを表している。 For example, in the exemplary dual wide word system described herein (for ease of explanation), the output after compression is always first input stream 911, then second input stream 912, etc. , released in pairs. Furthermore, whenever we compress multiple symbols into one new multi-symbol string, this new compressed symbol code is written at the location of the first initial/first uncompressed symbol in the new code. It will be done. For example, the compressed multi-symbol string b5/b6 is written at the location of symbol b5 in operation number 5, and is not written at the location of symbol b6 in operation number 6. Thus, in the illustrated example, the compressed output stream 930, in accordance with the representative embodiment, is Represents data in a properly ordered capture buffer.

図示のように、圧縮後の出力ストリーム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の直後で正しく配置される。 As shown, compressed output stream 930 receives symbols alternating between compressed first stream 921 and compressed second stream 922. That is, the compressed output stream 930 extracts the symbol b1 from the compressed first stream 921, the symbol b1 from the compressed second stream 922, and the symbol b2 from the compressed first stream 921. Symbol b2 is received from the subsequent second stream 922, and so on. This post-interleaving process includes receiving multi-symbol character strings b5/b6 from the compressed first stream 921 after receiving symbol b4 from the compressed second stream 922, and receiving the multi-symbol string b5/b6 from the compressed first stream 921. 2. Proceeding to include receiving symbol b5 from stream 922 of 2. Next, we are again considering a switched NoOp entry, but it is not written to the compressed output stream 930, so the next symbol is symbol b6 from the second stream 922, Then, symbol b7 of the compressed first stream 921 is received, and then symbol b7 is received from the compressed second stream 922. Therefore, in the illustrated order, it is possible to recover the data for each dictionary in its original order, as seen in decompressed stream 940 (again, indicated by circle 935), and multiple input streams in widewords. You can restore data from. In particular, symbol b6 (illustrated with reference numeral 941) from the compressed first stream 921 is placed right after symbol b5 from the compressed second stream 922.

「最初に到着するシンボル」の並び替え(デインターリーブ(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)を用いたハードウェア実装では、以下で考察する逆ポインタ技術により、シンボルを逆順に並び替える。 By performing a "first-to-arrive symbol" reordering (de-interleaving), two pieces of prior information needed to reconstruct the data in the correct order can be preserved. First, in the illustrated example, it is known that the multi-symbol string b5/b6 arrived at the location of symbol b5 of the first input stream 911 rather than at the location of symbol b5 of the second input stream 912. Therefore, it is addressed in the first dictionary D1. Second, by examining the obtained data regarding the multi-symbol string b5/b6, it is found that the length of the final uncompressed string exceeds one symbol. Therefore, when decoding the compressed multi-symbol string b5/b6 to obtain, for example, a decompressed stream 940, when the timing is right, symbol b5 will be written out first and symbol b6 will be written out later. Become. In this way, symbols b5 and b6 are both written into the correct position of the final stream 940 after decompression. Further, since it is known that the final length of the multi-symbol string b5/b6 is two uncompressed symbols, it is possible to calculate the dictionary to which the next code of the compressed output stream 930 belongs. In particular, in hardware implementations using FPGAs (or ASICs), symbols are rearranged in reverse order using the reverse pointer technique discussed below.

つまり、圧縮後の単一符号が複数の入力シンボルに相当する場合、本実施形態に従って、圧縮解除後のシンボルの長さと位置を算出することができる。図示の例では、圧縮後の出力ストリーム930のバイトb5の位置に2バイトが図示されている。この情報を使用して、圧縮解除後のストリーム940を提供するために、他のインターリーブ後の入力ストリーム全ての圧縮解除後のシンボルを正しく読み取る方法を計算できる。 That is, if a single code after compression corresponds to multiple input symbols, the length and position of the symbol after decompression can be calculated according to this embodiment. In the example shown, two bytes are shown in the position of byte b5 of the output stream 930 after compression. Using this information, one can calculate how to correctly read the decompressed symbols of all other interleaved input streams to provide decompressed stream 940.

図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の直後に正しく配置されていることによって示されるように、正しい順序を備える。 10 and 11 are diagrams illustrating other examples of reordering symbols of wideword data input for decompression, according to representative embodiments. Referring to FIG. 10, it is assumed that the multi-symbol string b5/b6 is located at the position of symbol b5 in each of the first stream and second stream (not shown) after compression. Thus, the compressed output stream 1030 receives symbol b4 from the compressed second stream, followed by multi-symbol string b5/b6 from the compressed first stream, and also receives the compressed multi-symbol string b5/b6 from the compressed first stream. Following the multi-symbol string b5/b6 from one stream, the multi-symbol string b5/b6 is received from the second stream after compression. Therefore, the subsequent stream 1040 after decompression includes symbol b6 from the first stream after compression (illustrated at reference numeral 1041) and symbol b6 from the second stream after compression (illustrated at reference numeral 1042). , with the correct order, as shown by being placed right after symbol b5 from the second stream after compression.

図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の直後に正しく配置されることで示されるように、正しい順序を備える。 Referring to FIG. 11, a multi-symbol string b5-b7 representing the combined compressed symbols b5, b6, and b7 is at the position of symbol b5 in the compressed first stream (not shown). Assume that Thus, the compressed output stream 1130 receives symbol b4 from the compressed second stream, followed by multi-symbol strings b5-b7 from the compressed first stream, and subsequently further multi-symbol strings b5-b7 from the compressed first stream. Following the sequences b5-b7, symbols b5, b6 and b7 are received from the second stream after compression. Therefore, the subsequent stream 1140 after decompression has symbol b6 (illustrated with reference numeral 1141) from the first stream after compression placed right after symbol b5 from the second stream after compression; Additionally, the correct ordering is ensured, as shown by symbol b7 (illustrated by reference numeral 1142) from the first compressed stream being placed right after symbol b6 from the compressed second stream. Be prepared.

FPGA(又は、ASIC)を用いたハードウェア実施態様では、使用できるメモリが限られるため、複数長の文字列(マルチシンボル文字列)を効率よく格納するために逆ポインタ技術が利用されている。それゆえ、圧縮解除を確実に行うために、例えば、表2を参照して、これまで検討した圧縮段階中、複数の辞書用の逆構造体を作成する必要がある。 In hardware implementations using FPGAs (or ASICs), available memory is limited, so reverse pointer technology is used to efficiently store strings of multiple lengths (multi-symbol strings). Therefore, in order to ensure decompression, it is necessary to create inverse structures for multiple dictionaries during the compression stage discussed so far, for example with reference to Table 2.

図12は、代表的な実施形態に係る、圧縮解除のための逆構造体を作成する方法を示す流れ図である。全般に、逆構造体の作成には、4つの復号プロセスが必要であるが、復号後の各出力シンボル(バイト)に対する各復号プロセスを1回の処理と見なしてもよい。各動作は、(i)途切れのない圧縮後の出力ストリームの圧縮後の符号を読み取り、この圧縮後の符号で表される非圧縮シンボルを放出すること、又は、(ii)圧縮後の符号がマルチシンボル文字列で表される場合、文字列が全て書き出されるまで、マルチシンボル文字列内の個々のシンボルを1つずつ正しい順序で放出することのいずれかを含む。 FIG. 12 is a flowchart illustrating a method of creating an inverse structure for decompression, according to an exemplary embodiment. In general, four decoding processes are required to create the inverse structure, but each decoding process for each output symbol (byte) after decoding may be considered one operation. Each operation consists of: (i) reading a compressed symbol of an uninterrupted compressed output stream and emitting an uncompressed symbol represented by the compressed symbol; or (ii) When represented by a multi-symbol string, it involves either emitting the individual symbols in the multi-symbol string one by one in the correct order until the entire string is written out.

図12を参照すると、ステップS1201において、ワイドワードの到着入力シンボルのそれぞれについて、メモリ構造のインスタンスを作成する。メモリ構造のインスタンスの例を、以下の表3Aに示す。表3Aは、各入力辞書Diの圧縮辞書の逆引きであり、1バイトの基本値(例えば、値0~255)を適切な文字コード値及び逆ポインタと関連付けたものである。注目すべきは、0~255バイトの逆ポインタがNULLエントリであることで、これらのバイトは常に、複数シンボル文字列で想定される第1のバイト(又は、文字)であることを示している。したがって、表3Aは、圧縮後の出力ストリームを圧縮解除する際に形成され得る、想定される全ての複数シンボル文字列の第1の想定文字のみを示している。 Referring to FIG. 12, in step S1201, an instance of a memory structure is created for each incoming wideword input symbol. Examples of instances of memory structures are shown in Table 3A below. Table 3A is a reverse lookup of the compressed dictionary for each input dictionary Di, which associates a 1-byte basic value (eg, a value from 0 to 255) with an appropriate character code value and reverse pointer. Note that the reverse pointer for bytes 0 to 255 is a NULL entry, indicating that these bytes are always the first expected byte (or character) in a multi-symbol string. . Therefore, Table 3A shows only the first possible character of all possible multi-symbol strings that may be formed when decompressing the compressed output stream.

ステップS1202では、上述の第1の到着シンボル並び替えプロセスを使用して、辞書ごとの別個の入力ストリームに関する文字コードを途切れのない圧縮後の出力ストリームから繰り返し読み込んで、表3Bを作成する。 In step S1202, the first arriving symbol reordering process described above is used to iteratively read character codes for separate input streams for each dictionary from the uninterrupted compressed output stream to create Table 3B.

図9の例を参照すると、第1の入力ストリーム911及び第2の入力ストリーム912の双方に対して、途切れのない圧縮後の出力ストリーム930に圧縮後の符号が提供される。この符号のストリームでは、圧縮後の符号は、第1の入力ストリーム911及び第2の入力ストリーム912のそれぞれ(ひいては、第1の辞書D1及び第2の辞書D2のそれぞれ)について、表3Bの別コピーへと追加される。効率化のため、入力ストリームと同数の演算を並列に実行することができる。図9では、入力ストリームが2つあるので、2つの演算を同時並列的に行うことができる。 Referring to the example of FIG. 9, compressed codes are provided in a continuous compressed output stream 930 for both the first input stream 911 and the second input stream 912. In this stream of codes, the compressed code is determined by the classification of Table 3B for each of the first input stream 911 and the second input stream 912 (and thus each of the first dictionary D1 and the second dictionary D2). added to the copy. For efficiency, as many operations as there are input streams can be performed in parallel. In FIG. 9, since there are two input streams, two operations can be performed simultaneously and in parallel.

単一入力ストリーム(第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の入力ストリームを復号化するのに必要なデータを作成する。 A more detailed example regarding a single input stream (first input stream) will be described below to show how to read the final uninterrupted compressed stream and how to decompress the compressed code. . A portion of the first input stream of the final uninterrupted compressed stream after combined interleaving includes the compressed symbols for the original input stream using the first dictionary (D1). As an example, the first input stream includes the symbol (byte) "cacatcat", which in this example can be compressed into the compressed code "99, 97, 256, 116, 258". As mentioned above, Table 3A is not needed in memory because known ASCII tables can be used to convert characters from single byte values. Therefore, for example, according to the ASCII table, "c"=99, "a"=97, and "t"=116. Since the codes 256 and 258 after compression have values greater than 255, they are multi-symbol strings and are stored in Table 3B. The compressed codes may be iteratively obtained for the first input stream from the uninterrupted compressed output stream, while for the corresponding compressed second input stream, another instance of Table 3B (Fig. (not shown), the same operations are performed in parallel. Additionally, the process uses a second dictionary (D2) to create the data necessary to decode the second input stream.

本例の第1の入力ストリームに関して、ステップ1202の反復的な検索プロセスは、最初に、圧縮後の出力符号の圧縮後の符号99を読み取ることと、さらに、255の後で次に使用可能なロケーション(addr)の表3B(図の例では、ロケーションaddr=256)に逆ポインタ値99を追加することを含む。次に、圧縮後の符号99のaddr=99における「c」という文字コードを検索し、圧縮後の符号256のaddr=256に格納する。 For the first input stream of this example, the iterative search process of step 1202 includes first reading the compressed code 99 of the compressed output code, and furthermore, after 255 the next available It includes adding a reverse pointer value of 99 to Table 3B of locations (addr) (in the illustrated example, location addr=256). Next, the character code "c" at addr=99 of code 99 after compression is searched and stored at addr=256 of code 256 after compression.

このプロセスは、他の圧縮後の符号についても継続される。つまり、反復的な検索プロセスには、圧縮後の符号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に格納することとも含まれる。 This process continues for other compressed codes. That is, the iterative search process involves reading the compressed code 97 and adding the reverse pointer value 97 to Table 3B at the next available location addr=257 (next to addr=256). It further includes searching for the character code "a" with addr=97 and storing it in addr=257. This process then involves reading the compressed code 256, adding the reverse pointer value 256 to table 3B at the next available location addr=258, and adding the character "c" at addr=256. It also includes retrieving the code and storing it at addr=258. Note that in this way addr=258 has a reverse pointer value greater than 255, in which case the next operation is a new compression on the first input stream, as explained below. It does not read the subsequent code, but follows the reverse pointer to determine the action to take in the next operation on the first input stream. This process then includes reading the compressed code 116, adding the reverse pointer value 116 to Table 3B at the next available location addr=259, and the character code for addr=116 as "t". It also includes searching for and storing in addr=259.

ステップ1203において、第1の入力ストリームと第1の辞書について、途切れのない圧縮後の出力ストリームの各圧縮後の符号の逆ポインタを反復して辿ることにより、圧縮解除後の中間出力ストリームを形成する。圧縮解除後の中間出力ストリームは、一時バッファに格納可能である。この説明では、表3Bは、FPGA上のBRAM又はURAMメモリに格納された、又は、ASIC上のデュアルポートSRAMに格納された2つの単一アドレスのデュアルポートメモリ構造とみなすことができる。各演算の出力は1文字とする。 Step 1203 forms a decompressed intermediate output stream by iteratively following the inverse pointer of each compressed code of the uninterrupted compressed output stream for the first input stream and the first dictionary. do. The intermediate output stream after decompression can be stored in a temporary buffer. In this discussion, Table 3B can be viewed as two single-address, dual-port memory structures stored in BRAM or URAM memory on an FPGA, or dual-port SRAM on an ASIC. The output of each operation is one character.

第1の入力ストリームについて実行される反復プロセスの結果として、NULLエントリに逆ポインタとして達するまで逆ポインタのチェーンを辿ることで、各シンボル文字列の非圧縮出力を決定可能であり、この場合、NULLエントリはマルチシンボル文字列の先頭を示す。逆ポインタをトラバースしている間、復号化後の各マルチシンボル文字列の長さは、第3のBRAM又はFPGAの「分散メモリ」であり得る、別個のメモリ配列Lに記録されるが、この場合、メモリ配列L[0]には、第1の文字列の長さ、L[1]には、第2の文字列の長さといった具合に、文字列の長さが記録される。動作ごとに1つの文字コードが放出される。このように逆ポインタを辿ることで、マルチシンボル文字列は一時キューに前後逆に書き出され、後述するステップS1204で逆順にされる。 As a result of the iterative process performed on the first input stream, the uncompressed output of each symbol string can be determined by following the chain of reverse pointers until a NULL entry is reached as a reverse pointer, in which case the NULL An entry indicates the beginning of a multi-symbol string. While traversing the reverse pointer, the length of each multi-symbol string after decoding is recorded in a separate memory array L, which may be a third BRAM or a "distributed memory" of an FPGA; In this case, the length of the character string is recorded in the memory array L[0], the length of the first character string, and the length of the second character string in L[1]. One character code is emitted for each action. By following the reverse pointer in this manner, the multi-symbol character string is written out to the temporary queue in reverse order, and is reversed in step S1204, which will be described later.

本例では、圧縮後の符号「99、97、256、116、258」を圧縮解除()する第1の圧縮後の符号は、圧縮後の符号99である。表3Aを見ると、ロケーションaddr=99は、逆ポインタがNULLで、文字コードが「c」であることを示す。これは、1文字コードなので、文字列の長さはL[0]=1である。文字コード「c」が出力されるので、それゆえ、第1の入力ストリームと第1の辞書の一時出力ストリームには、「c」が含まれることになる。 In this example, the first compressed code that decompresses the compressed code "99, 97, 256, 116, 258" is the compressed code 99. Looking at Table 3A, location addr=99 indicates that the reverse pointer is NULL and the character code is "c". Since this is a one-character code, the length of the character string is L[0]=1. Since the character code "c" is output, the first input stream and the temporary output stream of the first dictionary will therefore contain "c".

次に圧縮解除する圧縮後の符号は、圧縮後の符号97である。表3Aを見ると、ロケーションaddr=97は、逆ポインタがNULLで、文字コードが「a」であることを示す。文字列の長さはL[1]=1である。文字コード「a」が出力されるので、これで、第1の入力ストリームと第1の辞書の一時出力ストリームには、「ca」が含まれることになる。 The compressed code to be decompressed next is the compressed code 97. Looking at Table 3A, location addr=97 indicates that the reverse pointer is NULL and the character code is "a". The length of the character string is L[1]=1. Since the character code "a" is output, the first input stream and the temporary output stream of the first dictionary now include "ca".

次に圧縮解除する圧縮後の符号は、圧縮後の符号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」を含むようになった。 The compressed code to be decompressed next is the compressed code 256. Since addr=256 is greater than the final address (addr=255) in Table 3A, Table 3B is used. Looking at Table 3B, location addr=256 indicates that the reverse pointer is non-NULL and has a value of 99. Therefore, the first character code of address value i+1 (ie, 256+1=257) is read and output. Location addr=257 indicates that the first character code is "a". The reverse pointer value 99 for location addr=256 is followed by addr=99, which indicates that the reverse pointer is NULL and the second character code is "c". Therefore, by tracing the inverse pointer of the compressed code 256 until it reaches a NULL entry, the first character code "a" and the second character code "c" are output as the multi-symbol character string "ac". It turns out. Since there are two character codes, the length of this character string is L[2]=2. Note that the next compressed code for the first input is read from the unbroken compressed output stream in the next iteration until the two character codes of compressed code 256 are output together. Not served. The first input stream and temporary output stream of the first dictionary now contain "caac".

次に圧縮解除する圧縮後の符号は、圧縮後の符号116である。表3Aを見ると、ロケーションaddr=116は、逆ポインタがNULLで、文字コードが「t」であることを示す。文字列の長さはL[3]=1である。文字コード「t」が出力されるので、これで、第1の入力ストリームと第1の辞書D1の一時出力ストリームには、「caact」が含まれることになる。 The compressed code to be decompressed next is the compressed code 116. Looking at Table 3A, location addr=116 indicates that the reverse pointer is NULL and the character code is "t". The length of the character string is L[3]=1. Since the character code "t" is output, "caact" is now included in the first input stream and the temporary output stream of the first dictionary D1.

次に圧縮解除する圧縮後の符号は、圧縮後の符号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」の文字列を逆の順序にして、正しい順序が得られる。 The next compressed code to be decompressed is the compressed code 258. Again, addr=258 is greater than the final address in Table 3A, so Table 3B is used. Looking at Table 3B, location addr=258 indicates that the reverse pointer is non-NULL and has a value of 256. Therefore, the first character code of address value i+1 (ie, 258+1=259) is read and output. Location addr=259 indicates that the first character code is "t". A reverse pointer value of 256 for location address 258 follows addr=256, which is also non-NULL (as described above). Therefore, the second character code of address value i+1 (ie, 256+1=257) is read and output. Location addr=257 indicates that the second character code is "a". The reverse pointer value 99 of addr=256 is followed by addr=99, and in this case, the reverse pointer is NULL and the character code is "c", which is the third character code. Therefore, by tracing the inverse pointer of the compressed code 258 until it reaches the NULL entry, the first character code "t", the second character code "a", and the third character code "c" are converted to the multi-symbol Output as the character string "tac". Since there are three character codes, the length of this character string is L[4]=3. The first input stream and temporary output stream of the first dictionary now contain "caacttac". Also, the respective sub-lengths are L[0]=1, L[1]=1, L[2]=2, L[3]=1, and L[4]=3. . With this information, the strings "c", "a", "ac", "t", and "tac" can be reversed to obtain the correct order.

ステップ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]に従って逆の順序にされる。 In step S1204, a decompressed stream of the first input stream and the first dictionary is formed by reversing the order of character codes of the multi-symbol string in the intermediate output stream after decompression from the temporary buffer. . For example, in the code 256 after compression, "ac" becomes "ca", and in the code 258 after compression, "tac" becomes "cat". This is because the hardware structure holds a reverse pointer, and therefore compressed symbols that encode multiple bytes must rearrange the reversed strings. In this example, a symbol encoding three original characters, such as ``tac'', is converted into the correct string ``c'', then ``a'', then ``t'' over three cycles of operation in the opposite direction. is released as ``cat'' is obtained. Therefore, in step 1204, the multi-symbol string in the temporary buffer is repeatedly reversed to arrive at "c", "a", "ca", "t", and "cat", and the output Form an uncompressed stream. The multi-symbol string is reverse ordered according to the length L[n] of each value greater than one.

ハードウェア(例えば、FPGA、又はASIC)では、1回の動作で1文字が放出される。したがって、動作の観点から、ステップS1201は、ステップS1203に相当する動作より、1動作先に実行され得る。すなわち、ステップS1201の演算が完了してから、ステップS1203に相当する動作を試みる必要がある。なお、ステップS1203で逆ポインタが辿られるたびに、このマルチシンボル文字列に関する格納済みの長さが増分される。この長さ情報は、ステップS1204で適用される。 In hardware (eg, FPGA or ASIC), one character is emitted per operation. Therefore, from an operational standpoint, step S1201 may be executed one operation ahead of the operation corresponding to step S1203. That is, it is necessary to attempt the operation corresponding to step S1203 after the calculation in step S1201 is completed. Note that each time the reverse pointer is followed in step S1203, the stored length for this multi-symbol string is incremented. This length information is applied in step S1204.

長さの値の更新と格納は1回の動作を要するが、ステップS1203で行う全計算における他の動作と同時に更新することも可能である。いずれにしても、ステップS1203で逆の順序にされたマルチシンボル文字列の最後の文字が算出されるまでは、長さ配列の情報を使用して、マルチシンボル文字列の最初の逆の順序にされていない文字を放出することはできない。したがって、ステップS1204は、ステップS1203の同等の動作の後、少なくとも「Llongest」の動作が発生する。ここで、「Llongest」とは、最も長い長さLの文字列である。 Although updating and storing the length value requires one operation, it is also possible to update the length value simultaneously with other operations in the entire calculation performed in step S1203. In any case, until the last character of the reversed multi-symbol string is calculated in step S1203, the information in the length array is used to calculate the first reverse order of the multi-symbol string. It is not possible to emit characters that are not specified. Therefore, in step S1204, at least the "Llongest" operation occurs after the equivalent operation in step S1203. Here, "Llongest" is a character string with the longest length L.

ステップS1202は、ステップ1203の直前で、このステップと重複するパイプラインで実行される。つまり、ステップ1203は、入力ストリーム[n-1]を計算し、ステップ1202では、入力ストリーム[n]を計算している。すなわち、ステップ1202の圧縮後の符号を全て計算してから、ステップ1203の同じ圧縮後の符号へと移行する。ステップ1204は重複しているが、最長のマルチシンボル文字列の長さで決まるいくつかの演算により遅延する。 Step S1202 is executed immediately before step 1203 in a pipeline that overlaps with this step. That is, step 1203 calculates input stream [n-1], and step 1202 calculates input stream [n]. That is, after calculating all codes after compression in step 1202, the process moves to step 1203 to calculate the same codes after compression. Step 1204 is redundant, but delayed by several operations determined by the length of the longest multi-symbol string.

ハードウェアでは、データを圧縮解除する際に使用するモデルは、キャプチャバッファをスキャンし、データから対象ポイントを検索する。検索時間は、キャプチャ時間ほどタイムクリティカルではないので、必要に応じて、各圧縮解除動作に1クロックサイクル以上かかる場合がある。それゆえ、圧縮解除にかかる時間に対する制約は、圧縮の場合よりも緩和され得る。 In hardware, the model used when decompressing data scans the capture buffer and searches the data for points of interest. Search time is not as time-critical as capture time, so each decompression operation may take one or more clock cycles, if desired. Therefore, constraints on the time taken for decompression may be more relaxed than for compression.

複数の入力ストリームを並列処理する場合、255を超える圧縮後の符号では、圧縮後の文字列がマルチシンボル文字列となるため、圧縮後の文字列の長さを1より長くする必要がある。同様に、逆ポインタを辿る場合、255より大きい値は、少なくとももう1文字読まなければならないことを意味する。文字列がまだ十分に復号化されていない場合でも、圧縮後の符号がマルチシンボル文字列であると分かれば、次の動作で入力ストリームの次の圧縮後の符号を読み取るべきではないと判断するのに十分な情報が得られる。その代わりに、次のワイドワード入力を読み取る次の動作では、同じワイドワード入力の次の圧縮後の符号を読み取るのではなく、逆ポインタを辿って、次の動作中に出力すべき次の文字を取得する。つまり、マルチシンボル文字列が作成されると、複数の入力から作成された圧縮後の符号の途切れのない圧縮後のインターリーブされた出力ストリームを読み取り、複数の辞書Diをアドレス指定する際に考慮する必要のある、1つ以上のNoOpが存在することになる。 When processing multiple input streams in parallel, the length of the compressed character string needs to be longer than 1 because the compressed character string becomes a multi-symbol character string with a compressed code exceeding 255. Similarly, when following a reverse pointer, a value greater than 255 means that at least one more character must be read. Even if the string is not fully decoded yet, if the compressed code is found to be a multi-symbol string, the next operation determines that the next compressed code in the input stream should not be read. sufficient information can be obtained. Instead, on the next operation that reads the next wideword input, rather than reading the next compressed symbol of the same wideword input, the inverse pointer is followed to determine the next character to be output during the next operation. get. That is, once a multi-symbol string is created, it reads the unbroken compressed and interleaved output stream of compressed codes created from multiple inputs and takes them into account when addressing multiple dictionaries Di. There will be one or more NoOps required.

要するに、表3Bでは、0~255の間の値を持つ逆ポインタは、次のシンボルがマルチシンボル文字列の最後であることを示し、さらに、プロセスは、現在の入力ストリームと辞書に関する次の入力圧縮後の符号に進む必要がある。ただし、値が255より大きい逆ポインタは、後続の逆ポインタが少なくとも1つあることを示す。次の反復の後、入力ストリームの前ステップの逆ポインタがNULLでない場合、圧縮中に別のNoOpが生成されているので、入力ストリームに関する途切れのない圧縮後の出力ストリーム内の次の圧縮後の符号を読み取るべきではない。そのため、次の圧縮後の符号を読むのではなく、逆ポインタを再び辿って、出力すべき文字コードを抽出する。同様に、後続の逆ポインタも非NULLである場合、出力されるべきマルチシンボル文字列に更に別の文字があることを示している。ただし、逆ポインタがNULLの場合、マルチシンボル文字列内の結合されたシンボルは全て抽出されており、プロセスは現在の入力ストリームと辞書の次の入力圧縮後の符号に進む必要がある。 In summary, in Table 3B, a reverse pointer with a value between 0 and 255 indicates that the next symbol is the last of the multi-symbol string, and the process also It is necessary to proceed to the code after compression. However, a reverse pointer with a value greater than 255 indicates that there is at least one subsequent reverse pointer. After the next iteration, if the inverse pointer of the previous step in the input stream is not NULL, then another NoOp has been generated during compression, so the next compression in the output stream after uninterrupted compression with respect to the input stream The code should not be read. Therefore, instead of reading the next compressed code, the inverse pointer is traced again to extract the character code to be output. Similarly, if the subsequent reverse pointer is also non-NULL, it indicates that there is another character in the multi-symbol string to be output. However, if the reverse pointer is NULL, all combined symbols in the multi-symbol string have been extracted and the process needs to proceed to the next input compressed code in the current input stream and dictionary.

ワードサイズの動作を並列に実行する場合、該当入力ストリームの前の圧縮後の符号が単一文字コードで表される限り、各動作「i」で、次の入力ストリームについて、次の文字コードが読み取られる。そうでない場合、入力ストリームの前の文字コードがマルチシンボル文字列であれば、単一の反復「i」の終了を示すワイドワードの同じ入力ストリームに戻るまで、次の代替入力ストリームからの次の文字コード、又は、次の入力ストリームへのスキップのいずれかを優先させて、文字コードの読み取りをスキップするといった具合であり、この場合もやはり、必要に応じて、入力ごとに文字コードが読み込まれるか、又は、入力と辞書ごとにマルチシンボル文字列が出力される。注目すべきは、各入力ストリーム/辞書の組み合わせi=0における最初の文字コードが、常に単一の文字を表すということである。このようにして、圧縮後の出力ストリームの文字コードが、ラウンドロビン方式で読み取られる。 When word-sized operations are executed in parallel, each operation 'i' reads the next character code for the next input stream, as long as the previous compressed code of the corresponding input stream is represented by a single character code. It will be done. Otherwise, if the previous character code of the input stream is a multi-symbol string, the next Skip reading the character code in favor of either the character code or skip to the next input stream; again, the character code is read for each input, if necessary. Or, a multi-symbol string is output for each input and dictionary. Note that the first character code in each input stream/dictionary combination i=0 always represents a single character. In this way, the character codes of the compressed output stream are read in a round-robin manner.

図10と図11の例では、ワイドワードのワードサイズが2であるため、ペアワイズ(pair-wise:一対単位)方式で反復が行われる。図13A~図13Cも同様に、代表的な実施形態に係る、圧縮用の複数のワイドワード入力のシンボルを順序付けする例を示しており、ここで、ワイドワードサイズは、2である。 In the examples of FIGS. 10 and 11, the word size of the wide word is 2, so repetition is performed in a pair-wise manner. 13A-13C similarly illustrate an example of ordering the symbols of multiple wideword inputs for compression, in accordance with a representative embodiment, where the wideword size is two.

図13Aを参照すると、圧縮されるべきシリアルストリーム1320は、シンボル「ccbaccbactbccadt」を含む2つのワイドワードで、16個のシンボル(バイト)を含む。参照番号1330で示すシンボルのシリアルストリームにおける異なる濃淡で示されるように、シリアルストリーム1320は、1つおきのシンボルが2つのワイドワードの一方に割り当てられるように配列される。したがって、第1の辞書(D1)用のシンボル「cbcbcbcd」を持つ第1の入力ストリーム1331と、第2の辞書(D2)用のシンボル「cacatcat」を持つ第2の入力ストリーム1332とを含む、別々の入力ストリームへの圧縮の観点から、他のシンボルは全て、グループ化される。注目すべきは、第2の入力ストリーム1332は、表3A及び表3Bを参照して、これまで考察した例示的な第1の入力ストリームと同じであることである。 Referring to FIG. 13A, the serial stream 1320 to be compressed includes 16 symbols (bytes), with two wide words including the symbol "ccbaccbactbccadt". The serial stream 1320 is arranged such that every other symbol is assigned to one of the two widewords, as indicated by the different shading in the serial stream of symbols designated by reference numeral 1330. Therefore, it includes a first input stream 1331 with the symbol "cbcbcbcd" for the first dictionary (D1) and a second input stream 1332 with the symbol "cacatcat" for the second dictionary (D2). All other symbols are grouped together for compression into separate input streams. Note that the second input stream 1332 is the same as the exemplary first input stream discussed above with reference to Tables 3A and 3B.

上記の圧縮に関する実施形態に従って、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」(前述)を含む。 In accordance with the compression embodiments described above, parallel compression is performed on the first input stream 1331 and the second input stream 1332 in eight clock cycles denoted cc1 to cc8. First input stream 1331 and second input stream 1332 may be compressed using, for example, known ASCII tables. Compressing the first input stream 1331 results in a compressed first stream 1341 (0 after compression), and compressing the second input stream 1332 results in a compressed second stream 1342 (1 after compression). is obtained. In the illustrated example, the first stream 1341 after compression includes the compression codes "99, 98, NoOp, 256, NoOp, NoOp, 258, 100", and the second stream 1342 after compression includes the compression codes "99, 98, NoOp, 258, 100". 97, NoOp, 256, 116, NoOp, NoOp, 258'' (described above).

図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とは異なる文字コードを含むことである。 Referring to FIG. 13B, the first stream 1341 and the second stream 1342 after compression are reordered according to the reordering of the first arriving symbols and stored in the temporary buffer, so that the first stream 1341 and the second stream 1342 after compression are stored in the temporary buffer, so that the first stream 1341 and the second stream 1342 after compression are stored in the temporary buffer, so that the first stream 1341 and the second stream 1342 after compression are reordered according to the reordering of the first arriving symbols and stored in the temporary buffer. The string is relocated to the position of the first symbol within the group of symbols. In particular, in the compressed first stream 1341, the compressed multi-symbol string represented by the symbol 256 is moved from the fourth position to the third position, and the NoOp entry is shifted one position to the right. , by moving the compressed code 258 from the seventh position to the fifth position and shifting the NoOp entry by one position to the right, the reordered compressed first stream 1341' (post-compressed 0') is obtained. In the compressed second stream 1342, the compressed multi-symbol string represented by the symbol 256 is moved from the fourth position to the third position, the NoOp entry is shifted one place to the right, and the compressed By moving the latter code 258 from the eighth position to the sixth position and shifting the NoOp entry one place to the right, the reordered compressed second stream 1342' (compressed 1' ) is obtained. Notably, the compressed codes 256 and 258 of the compressed second stream 1342 include different character codes than the compressed codes 256 and 258 of the compressed first stream 1341.

並び替えられた圧縮後の第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の直後に続く。 By alternately inputting symbols from the rearranged compressed first stream 1341' and compressed second stream 1342', a final compressed output stream 1350 is formed. NoOp entries are excluded from this process, so the compressed output stream 1350 is seamless. Therefore, the compressed code 258 from the reordered compressed first stream 1341' immediately follows the compressed code 256 from the reordered compressed second stream 1342' and is reordered. The compressed code 258 from the permuted compressed second stream 1342' immediately follows the compressed code 116 from the permuted compressed second stream 1342', and further The compressed code 100 from the reordered compressed first stream 1341' immediately follows the compressed code 258 from the reordered compressed second stream 1342'.

図13Cを参照すると、代表的な実施形態に従って、圧縮後の出力ストリーム1350に対する圧縮解除を実行して、圧縮解除後のストリーム1360を提供し、圧縮解除後のストリーム1360は、図13Aで示される元のシリアルストリーム1320と一致する。圧縮解除は、図示の構成で左から右への反復的な演算で行われる。圧縮後の出力ストリーム1350は、図13Cの上部に示されており、ここで、便宜上、対応するアドレスを有するシンボル及びマルチシンボル文字列を示すブロックは、分けられている。これまで考察したように、対応する文字コード(複数の場合もある)を決定するためのそれぞれの逆ポインタを使用して、一連の反復的な復号化の動作で圧縮解除を実行し、圧縮解除後の中間ストリーム1355を形成し、これを一時バッファに格納することができる。圧縮解除後の最終ストリーム1360は、圧縮後の出力ストリーム1350の各マルチシンボル文字列の文字コードの順序を逆転させることで形成される。 Referring to FIG. 13C, in accordance with a representative embodiment, decompression is performed on the compressed output stream 1350 to provide a decompressed stream 1360, which is shown in FIG. 13A. Matches the original serial stream 1320. Decompression is performed in an iterative operation from left to right in the configuration shown. The compressed output stream 1350 is shown at the top of FIG. 13C, where, for convenience, blocks representing symbols and multi-symbol strings with corresponding addresses have been separated. As discussed above, decompression is performed in a series of iterative decoding operations, using each inverse pointer to determine the corresponding character code(s), and decompression A later intermediate stream 1355 may be formed and stored in a temporary buffer. The final decompressed stream 1360 is formed by reversing the order of the character codes of each multi-symbol string in the compressed output stream 1350.

便宜上、図13Cの圧縮解除後の中間ストリーム1355の全体が示されており、全復号処理(overall decoding process)、及び復号後の文字コードの順序が示されている。ただし、復号後の文字コードを圧縮解除後の最終ストリーム1360に入力する次ステップに進む前に、圧縮解除後の中間ストリーム1355全体が、必ずしも形成されるとは限らない。つまり、いくつかの実施形態において、圧縮解除後の中間ストリーム1355を構築する際、圧縮解除後の中間ストリーム1355の復号済み文字コードを、圧縮解除後の最終ストリーム1360へと区分的に提示可能であり、これによって、中間の圧縮解除に必要な一時バッファのサイズが削減される。例えば、復号後の各文字コードは、対応する逆ポインタがNULLの場合、圧縮解除後の中間ストリーム1355から圧縮解除後の最終ストリーム1360へと入力可能である。前述のように、null(ヌル)の逆ポインタに到達するには、マルチシンボル文字列の複数の復号化ステップ(及び、圧縮解除後の最終ストリーム1360に入力するときの順序の逆転)が必要である。 For convenience, the entire decompressed intermediate stream 1355 of FIG. 13C is shown to illustrate the overall decoding process and the order of character codes after decoding. However, the entire decompressed intermediate stream 1355 is not necessarily formed before proceeding to the next step of inputting the decoded character codes into the final decompressed stream 1360. That is, in some embodiments, when constructing the decompressed intermediate stream 1355, the decoded character codes of the decompressed intermediate stream 1355 may be presented piecewise into the decompressed final stream 1360. , which reduces the size of the temporary buffer required for intermediate decompression. For example, each decoded character code can be input from the decompressed intermediate stream 1355 to the decompressed final stream 1360 if the corresponding reverse pointer is NULL. As mentioned above, arriving at a null inverse pointer requires multiple decoding steps of the multi-symbol string (and reversal of the order when entering the final stream 1360 after decompression). be.

図示の例では、並び替えられた圧縮後の第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と表記している。 In the illustrated example, the compressed code 99 from the rearranged compressed first stream 1341' has a reverse pointer to NULL, so the character code is placed at the beginning position of the decompressed intermediate stream 1355. "c" is output. Since the compressed code 99 from the rearranged compressed second stream 1342' has a reverse pointer to NULL, the character code "c" is output at the next position of the decompressed intermediate stream 1355. be done. Since the compressed code 98 from the rearranged compressed first stream 1341' has a reverse pointer to NULL, the character code "b" is output at the next position of the decompressed intermediate stream 1355. be done. Since the compressed code 97 from the rearranged compressed second stream 1342' has a reverse pointer to NULL, the character code "a" is output at the next position of the decompressed intermediate stream 1355. be done. The length of each of these character strings is expressed as L=1.

並べ替えられた圧縮後の第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を使用できることである。 The compressed code 256 from the reordered compressed first stream 1341' provides the multi-symbol string "bc", and the compressed code 256 includes the character code "b" and the character It has a reverse pointer to 99 whose code is "c" and a reverse pointer to NULL. Therefore, over the next two operations with the reordered compressed first stream 1341', the character code "b" is output in the next position of the decompressed intermediate stream 1360, and the character code "c" is output to the position immediately after skipping the next position. (As described below, the order of the character codes "b" and "c" is then swapped when forming the decompressed stream 1360). Similarly, the compressed code 256 from the reordered compressed second stream 1342' provides the multi-symbol string "ac", where the compressed code 256 is the character code It has a reverse pointer to "a", a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, over the next two operations with the reordered compressed second stream 1342', the character code "a" is changed to the compressed code of the reordered compressed first stream 1341'. 256, the character code "b" is output to the next position of the intermediate stream 1355 after decompression, and the character code "c" is output to the position immediately after skipping the next position. . The length of each of these character strings is expressed as L=2. Note that the string length value L can be used to determine when the decoded and compressed symbols may be input into the final decompressed stream 1360.

次に、並べ替えられた圧縮後の第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として示している。 The compressed code 258 from the reordered compressed first stream 1341' then provides the multi-symbol string "cbc", where the compressed code 258 is the character code "c", a reverse pointer to 256 whose character code is "b", a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, over the next three operations with the reordered compressed first stream 1341', the character code "c" is output to the next position of the decompressed intermediate stream 1355, and the character code "c" is output to the next position of the decompressed intermediate stream 1355, "b" is output to the position immediately after the next position is skipped, and furthermore, the character code "c" is output to the position immediately after the next position is skipped. On the other hand, the compressed code 116 from the reordered compressed second stream 1342' has a reverse pointer to NULL, so the character code "t" first appears from the compressed code 258. It is output to the position of the intermediate stream 1355 after decompression following the character code "c". The length of the character string with code 258 after compression is shown as L=3, and the length of the character string with code 116 after compression is shown as L=1.

最後に、並べ替えられた圧縮後の第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として示している。 Finally, the compressed code 258 from the reordered compressed second stream 1342' provides the multi-symbol string "tac", and the compressed code 258 has the character code "t". , a reverse pointer to 256 whose character code is "a", a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, over the next three operations with the reordered compressed second stream 1342', the character code "t" is changed to the compressed code of the reordered compressed first stream 1341'. 258, the character code "b" is output to the next position of the intermediate stream 1355 after decompression, the character code "a" is output to the position immediately after skipping to the next position, and the character code "a" is output to the position immediately after skipping to the next position, and The code "c" is output to the position immediately after the next position is skipped. On the other hand, since the compressed code 100 from the rearranged compressed first stream 1341' has a reverse pointer to NULL, the character code "d" is the character code "d" from the compressed code 258. a'' is output to the next position of the decompressed intermediate stream 1355. The length of the character string with code 258 after compression is shown as L=3, and the length of the character string with code 100 after compression is shown as L=1.

圧縮解除後のストリーム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」という逆順に受信される。 Decompressed stream 1360 is formed from decompressed intermediate stream 1355 by reversing the order of the respective character codes within the multi-symbol string. In the illustrated example, the multi-symbol character string of the rearranged and compressed first stream 1341' includes a compressed code 256 regarding the character code "bc" and a compressed code 258 regarding the character code "cbc". Furthermore, the multi-symbol character string of the rearranged and compressed second stream 1342' includes a compressed code 256 regarding the character code "ac" and a compressed code 258 regarding the character code "tac". including. As seen in FIG. 13C, the order of the character code "bc" from the compressed code 256 of the reordered compressed first stream 1341' is the same as that of "c" in the decompressed stream 1360. It is later received in the reverse order (reverse order) as "b". The order of the character codes "ac" from the compressed code 256 of the rearranged compressed second stream 1342' is received in the reverse order of "c" followed by "a" in the decompressed stream 1360. be done. The order of the character code "cbc" from the compressed code 258 of the rearranged compressed first stream 1341' is such that in the decompressed stream 1360, "c" is followed by "b", followed by " c" in reverse order. The order of the character code "tac" from the compressed code 258 of the rearranged compressed second stream 1342' is such that in the decompressed stream 1360, "c" is followed by "a", followed by " t'' in reverse order.

完了すると、結果としての圧縮解除後のストリーム1360は、図13Aで示される元のシリアルストリーム1320と同じになる。代替実施形態において、並べ替えられた圧縮後の第1のストリーム1341’を起点とする圧縮後の符号を、第1の一時バッファに格納された第1の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除し、さらに、並べ替えられた圧縮後の第2のストリーム1342’を起点とする圧縮後の符号を、第2の一時バッファに格納された第2の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除する。そして、第1の一時出力ストリーム及び第2の一時出力ストリームから順番にシンボルを交互に入力することにより、圧縮解除後のストリーム1360を形成することができる。 Once complete, the resulting decompressed stream 1360 will be the same as the original serial stream 1320 shown in FIG. 13A. In an alternative embodiment, the compressed symbols originating from the reordered compressed first stream 1341' are transferred to the first temporary output stream (characters of the multi-symbol string) stored in the first temporary buffer. The compressed codes originating from the reordered compressed second stream 1342' are then decompressed into a second temporary Decompress as a buffered second temporary output stream (which may or may not contain the character codes of the multi-symbol string in reverse order). The decompressed stream 1360 can then be formed by alternately inputting symbols from the first temporary output stream and the second temporary output stream.

代替実施形態において、各NoOpエントリが次に使用できるマルチシンボル文字列に入れ替えられるバッファリングステップの代わりに、このバッファリングステップは、圧縮後のストリームをまとめる前に全てのNoOpエントリが削除されるよう、各NoOpエントリを削除するだけで、マルチシンボル文字列がNoOpエントリの場所へとシフトされるプロセスを含む。つまり、マルチシンボルの値は、それぞれのNoOp動作の最初の出現位置に移動する。これにより、有利には、複数回の書き込み動作の代わりに、NoOpの各エントリに対応する1回の書き込み動作に置き換えられる。 In an alternative embodiment, instead of a buffering step in which each NoOp entry is replaced with the next available multi-symbol string, this buffering step is such that all NoOp entries are removed before putting together the compressed stream. , involves a process in which the multi-symbol string is shifted to the location of the NoOp entry by simply deleting each NoOp entry. That is, the value of the multi-symbol moves to the first occurrence of each NoOp operation. This advantageously replaces multiple write operations with a single write operation corresponding to each entry of the NoOp.

図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に相当するかについて、取得されたデータ符号に問い合わせることができる。そのため、順序は守られる。 FIG. 14 illustrates symbols of wideword data reordered for input for decompression, according to an exemplary embodiment. Referring to FIG. 14, it is assumed that compressing the first input stream 1411 results in a compressed multi-symbol string corresponding to the two original arriving symbols b5 and b6. Conventionally, for example, as shown in the compressed first stream 821 of FIG. Multi-symbol string b5/b6 is placed at the original position of symbol b6 in the stream. However, in the embodiment shown in FIG. 14, this compression operation deletes the NoOp entry from the compressed first stream 1421 corresponding to the first input stream 1411, and further converts the multi-symbol string b5/b6 into It is shifted to the position of the deleted NoOp entry (the original position of symbol b5). By rearranging the "shifted symbols" and storing the original size of the input stream, the original order of symbols b5 and b6 can be obtained from the compressed output stream 1430 stored in the capture buffer. Sufficient information is retained to restore the data. When the combined multi-symbol string b5/b6 is decoded, the multi-symbol string b5/b6 is decoded from the original two with respect to the first input stream 1411, which is also known to belong to the first dictionary D1. The obtained data code can be queried as to whether it corresponds to uncompressed symbols b5 and b6. Therefore, the order is preserved.

具体的には、図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エントリにもかかわらず、正しく順序付けられた圧縮解除後のデータを示している。 Specifically, FIG. 14 shows a first input stream 1411 (input stream 0) and a second input stream 1412 (input stream 1) of wideword data, which are provided below for compression. . The first input stream 1411 and the second input stream 1412 may correspond to the first input stream 631 and the second input stream 632, respectively, discussed above with reference to FIG. are different. FIG. 14 shows the first stream 1421 after compression (0 after compression) calculated for the first input stream 1411 and rearranged (after shifting) according to the present embodiment, and the calculated value for the second input stream 1412. A second stream 1422 (after compression 1) is also shown after compression. The compressed first stream 1421 and the second compressed stream 1422 correspond to the order of operations at intermediate steps during the compression process before the data is written to the capture buffer as a continuous compressed output stream 1430. Subsequent decompression is performed on the compressed output stream 1430 according to known decompression algorithms. The final decompressed stream 1440 shows correctly ordered decompressed data despite the NoOp entries generated during compression of the first input stream 1411.

図示の実施形態によると、ワイドワード用の途切れのない圧縮後の出力ストリーム1430は、交互に出現する圧縮後の第1のストリーム1421及び第2のストリーム1422からの圧縮後の連続シンボルが、NoOpエントリなしで互いに続くように圧縮中に書き込まれる。1つ以上のシンボルがマルチシンボル文字列に圧縮される場合には、圧縮後のシンボルは、一時的にバッファリングされてから、NoOpエントリの元の位置に作成された場合と同様に、圧縮後のシンボルが出現するよう、先行のNoOpエントリ位置に放出される。元の到着シンボルを圧縮できない場合には、これらはそれぞれ、正しい動作中に正しい場所に放出されるか、又は、先行するマルチシンボル文字列がシフトされたのと同じエントリ数だけシフトされる。 According to the illustrated embodiment, the uninterrupted compressed output stream 1430 for wide words is such that consecutive compressed symbols from the alternating compressed first stream 1421 and the compressed second stream 1422 are Written during compression so that they follow each other without entries. When one or more symbols are compressed into a multi-symbol string, the compressed symbols are temporarily buffered and then stored in the compressed state as if they had been created in the original position of the NoOp entry. is emitted to the previous NoOp entry position so that the symbol appears. If the original arriving symbols cannot be compressed, they are each ejected into the correct location during correct operation, or shifted by the same number of entries as the preceding multi-symbol string was shifted.

本明細書で説明する例示的なデュアルワイドワードシステムでは(説明をしやすくするため)、圧縮後の出力は常に、第1の入力ストリーム1411、次いで、第2の入力ストリーム1412のように一対を単位として放出される。第1の入力ストリーム1411に対応する圧縮後の第1のストリーム1421は、シンボルb5の該当位置に書き込まれた圧縮後のマルチシンボル文字列b5/b6を含み、この位置では、NoOpエントリ(例えば、図8の圧縮後の第1のストリーム821で図示)が削除され、さらに、圧縮後のマルチシンボル文字列b5/b6がシンボルb5の位置までシフトされている。圧縮後の第2のストリーム1422は、第2の入力ストリーム1412の全てのシンボルを含む。 In the exemplary dual-wideword system described herein (for ease of explanation), the compressed output always pairs as the first input stream 1411 and then the second input stream 1412. released as a unit. The compressed first stream 1421 corresponding to the first input stream 1411 includes the compressed multi-symbol string b5/b6 written at the corresponding position of symbol b5, and at this position, the NoOp entry (e.g. The compressed first stream 821 in FIG. 8) is deleted, and the compressed multi-symbol character string b5/b6 is further shifted to the position of symbol b5. The compressed second stream 1422 includes all the symbols of the second input stream 1412.

圧縮後の出力ストリーム1430は、圧縮後の第1のストリーム1421と圧縮後の第2のストリーム1422との間で交互にシンボルを受信する。注目すべきは、或る入力ストリームの方が他の入力ストリームよりも圧縮が上手くいき、これにより、圧縮後のストリームがもたらされる場合が挙げられる。例えば、第1の入力ストリーム1411の圧縮は、第2の入力ストリーム1412の圧縮よりも優れており、その結果、圧縮後の第1のストリーム1421は、圧縮後の第2のストリーム1422よりも短くなる。この場合、圧縮後の第2のストリーム1422からのシンボルb6及びb7が圧縮後の出力ストリーム1430の終端で互いに隣接する等のように、圧縮後のストリームの終端に向かって、長いストリームからの圧縮後のシンボルが一緒に配置されることになる。したがって、圧縮後の各ストリームの圧縮後のシンボルの数は、圧縮解除中に追跡され、さらに、その数が圧縮後のストリームの対応する圧縮解除後の入力ストリームの元のサイズに達すると、該当ワイドワードの圧縮解除の残りの部分については、その圧縮後のストリームはスキップされる。 The compressed output stream 1430 receives symbols alternating between a compressed first stream 1421 and a compressed second stream 1422. Of note, there are cases where one input stream compresses better than another, resulting in a compressed stream. For example, compression of the first input stream 1411 is better than compression of the second input stream 1412, such that the first stream 1421 after compression is shorter than the second stream 1422 after compression. Become. In this case, the compression from the long stream towards the end of the compressed stream such that symbols b6 and b7 from the compressed second stream 1422 are adjacent to each other at the end of the compressed output stream 1430, etc. Later symbols will be placed together. Therefore, the number of compressed symbols of each compressed stream is tracked during decompression, and furthermore, when the number reaches the original size of the corresponding decompressed input stream of the compressed stream, the corresponding For the remainder of the wideword decompression, the compressed stream is skipped.

図の例では、圧縮後の第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つの圧縮解除値に達するとすぐに、その圧縮後のストリームが完全に圧縮解除されたことが分かる。 In the illustrated example, the original size of each of the first input stream 1411 corresponding to the compressed first stream 1421 and the second input stream 1412 corresponding to the second stream 1422 is 7. This value is the same for all compressed streams since the size of the original input stream is chosen to fit exactly within the wideword stream. In the illustrated example, the original input stream is selected to be 14, so the first input stream 1411 and the second input stream 1412 (each having a size of 7) have a total of 14. Generally, the size n of the page is chosen such that n%wide_word=0 (ie, the size of the page is divisible by the wideword). Upon decompression, as discussed below, the compressed first stream 1421 and/or second stream 1422 (i.e., first stream 1421 and/or second stream 1422) is As soon as a decompression value of 1 is reached, it is known that the compressed stream is completely decompressed.

圧縮後の第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の直後で正しく配置される。 With respect to receiving symbols b1 from the compressed first stream 1421 and the compressed second stream 1422 alternately, the compressed output stream 1430 receives the symbols b1 from the compressed first stream 1421 and the symbols b1 from the compressed first stream 1421. The symbol b1 is received from the second stream 1422, the symbol b2 is received from the compressed first stream 1421, the symbol b2 is received from the compressed second stream 1422, and so on. This post-interleaving process includes receiving multi-symbol string b5/b6 from the compressed first stream 1421 after receiving symbol b4 from the compressed second stream 1422; 2; receiving symbol b7 from compressed first stream 1421; and further receiving symbol b7 from compressed second stream 1422. Proceed as follows. In the illustrated order, it is possible to recover the data in each dictionary in its original order, as seen in the decompressed stream 1440 (again, indicated by circle 1435), and the data from multiple input streams as widewords. can be restored. In particular, symbol b6 (illustrated with reference numeral 1441) from the compressed first stream 1421 is placed right after symbol b5 from the compressed second stream 1422.

「シフト後のシンボル」の並び替え(デインターリーブ)を行うことで、データを正しい順序で再構成するのに必要とされる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)を用いたハードウェア実装では、以下で考察する逆ポインタ技術により、シンボルが逆の順序にされる。 By rearranging (deinterleaving) the "symbols after shifting," it is possible to maintain two pieces of prerequisite information required to reconstruct data in the correct order. First, in the illustrated example, we know that the multi-symbol string b5/b6 arrived at the location of symbol b5 in the first input stream 1411 rather than at the location of symbol b6, and therefore 1 dictionary D1. Second, by examining the obtained data regarding the multi-symbol string b5/b6, it is found that the length of the final uncompressed string exceeds one symbol. Therefore, when decoding the compressed multi-symbol string b5/b6 to obtain, for example, a decompressed stream 1440, when the correct timing for the write operation comes, symbol b5 is written out first, then symbol b6 is written out. I will write it out. In this way, symbols b5 and b6 are both written to the correct position in the final stream 1440 after decompression. Furthermore, since the final length of the multi-symbol string b5/b6 is known to be two uncompressed symbols, the dictionary to which the next code of the compressed output stream 1430 belongs can be calculated. In particular, in hardware implementations using FPGAs (or ASICs), symbols are reversed in order due to the reverse pointer technique discussed below.

図15A~図15Cも同様に、代表的な実施形態に係る、圧縮解除用の複数のワイドワード入力のシンボルを順序付けする例を示しており、ここで、ワイドワードサイズは、2である。とりわけ、図15A~図15Cは、NoOpエントリを削除するステップと、後続のマルチシンボル文字列を削除されたNoOpエントリの位置にまでそれぞれシフトするステップとをより詳細に示している。 15A-15C similarly illustrate an example of ordering symbols of multiple wideword inputs for decompression, in accordance with a representative embodiment, where the wideword size is two. In particular, FIGS. 15A-15C illustrate in more detail the steps of deleting a NoOp entry and respectively shifting subsequent multi-symbol strings to the position of the deleted NoOp entry.

図15Aを参照すると、圧縮されるべきシリアルストリーム1520は、シンボル「ccbaccbactbccadt」を含む2つのワイドワードで、16個のシンボル(バイト)を含む。参照番号1530で示すシンボルのシリアルストリームにおける異なる濃淡で示されるように、シリアルストリーム1520は、1つおきのシンボルが2つのワイドワードの一方に割り当てられるように配列される。したがって、第1の辞書(D1)用のシンボル「cbcbcbcd」を持つ第1の入力ストリーム1531と、第2の辞書(D2)用のシンボル「cacatcat」を持つ第2の入力ストリーム1532とを含む、別々の入力ストリームへの圧縮の観点から、他のシンボルは全て、グループ化される。注目すべきは、第2の入力ストリーム1532は、上記の表3A及び表3Bを参照して、これまで考察した例示的な第1の入力ストリームと同じであることである。 Referring to FIG. 15A, the serial stream 1520 to be compressed includes 16 symbols (bytes), with two wide words including the symbol "ccbaccbactbccadt". The serial stream 1520 is arranged such that every other symbol is assigned to one of the two widewords, as indicated by the different shading in the serial stream of symbols designated by the reference numeral 1530. Therefore, it includes a first input stream 1531 with the symbol "cbcbcbcd" for the first dictionary (D1) and a second input stream 1532 with the symbol "cacatcat" for the second dictionary (D2). All other symbols are grouped together for compression into separate input streams. Note that the second input stream 1532 is the same as the exemplary first input stream discussed above with reference to Tables 3A and 3B above.

上記の圧縮に関する実施形態に従って、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」(前述)を含む。 In accordance with the compression embodiments described above, parallel compression is performed on the first input stream 1531 and the second input stream 1532 in eight clock cycles denoted cc1 to cc8. First input stream 1531 and second input stream 1532 may be compressed using, for example, known ASCII tables. Compressing the first input stream 1531 results in a compressed first stream 1541 (0 after compression), and compressing the second input stream 1532 results in a compressed second stream 1542 (1 after compression). is obtained. In the illustrated example, the first stream 1541 after compression includes the compression codes "99, 98, NoOp, 256, NoOp, NoOp, 258, 100", and the second stream 1542 after compression includes the compression codes "99, 98, NoOp, 258, 100". 97, NoOp, 256, 116, NoOp, NoOp, 258'' (described above).

図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とは異なる文字コードを含み、このことは、こうした圧縮後のストリームの起点となる入力ストリームを追跡し続ける重要な理由である。 Referring to FIG. 15B, the first stream 1541 and the second stream 1542 after compression are shifted according to the rearrangement of the symbols after the shift, and may or may not be stored in the temporary buffer. , the compressed code representing the multi-symbol string is shifted into the corresponding NoOp entry created during compression. In particular, in the compressed first stream 1541, the NoOp entry in the third position is deleted, and the multi-symbol string represented by the compressed code 256 is shifted from the fourth position to the third position. Also, the NoOp entries in the fifth and sixth positions are deleted, and the compressed code 258 is transferred from the seventh position to the fifth position (i.e., the two adjacent NoOp entries before the compressed code 258). the first NoOp entry). The result is a reordered (shifted) compressed first stream 1541' (0' after compression). In the compressed second stream 1542, the NoOp entry is removed from the third position and the compressed multi-symbol string, represented by the symbol 256, is shifted from the fourth position to the third position and the NoOp entry is removed from the third position. The NoOp entry in the 6th position and the 7th position are deleted, and the compressed code 258 is further shifted from the 8th position to the 6th position, so that the compressed code 258 is rearranged (shifted). A second stream 1542' (1' after compression) is provided. This may also be referred to as a buffering step, regardless of whether the reordered compressed first stream 1541' and second stream 1542' are stored in a buffer. Of note, the compressed codes 256 and 258 of the compressed second stream 1542 include different character codes than the compressed codes 256 and 258 of the compressed first stream 1541; , which is an important reason to keep track of the input stream from which these compressed streams originate.

並び替えられた(シフトされた)圧縮後の第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とは異なるものである。 By alternately inputting symbols in order from the rearranged (shifted) compressed first stream 1541' and the compressed second stream 1542', the final compressed output stream 1550 is generated. It is formed. Since the NoOp entries were previously removed, the compressed output stream 1550 is continuous. Therefore, the compressed code 256 from the reordered compressed first stream 1541' immediately follows the compressed code 97 from the reordered compressed second stream 1542', and The compressed code 256 from the permuted compressed second stream 1542' immediately follows the compressed code 256 from the permuted compressed first stream 1541', and The compressed code 258 from the compressed first stream 1541' immediately follows the compressed code 256 from the reordered compressed second stream 1542', and further The compressed code 258 from the later second stream 1542' immediately follows the compressed code 100 from the reordered compressed first stream 1541'. Due to the different buffering steps, the final compressed stream 1550 is different from the compressed final output stream 1350 of the embodiment seen in FIG. 13B described above.

図15Cを参照すると、代表的な実施形態に従って、圧縮後の出力ストリーム1550に対する圧縮解除を実行して、圧縮解除後のストリーム1560を提供し、ここで、圧縮解除後のストリーム1560は、図15Aで示される元のシリアルストリーム1520と一致する。圧縮解除は、図示の構成で左から右への反復的な演算で行われる。圧縮後の出力ストリーム1550は、図15Cの上部に示されており、ここで、便宜上、シンボル及びマルチシンボル文字列、並びに対応するアドレス及びパラメータを示すブロックは、分けられている。これまで考察したように、対応する文字コード(複数の場合もある)を決定するためのそれぞれの逆ポインタを使用して、一連の反復的な復号化動作で圧縮解除を実行し、圧縮解除後の中間ストリーム1555を形成し、これを全て、又は一部を一時バッファに格納することができる。圧縮解除後の最終ストリーム1560は、圧縮後の出力ストリーム1550の各マルチシンボル文字列の文字コードの順序を逆転させることで形成される。 15C, in accordance with a representative embodiment, decompression is performed on the compressed output stream 1550 to provide a decompressed stream 1560, where the decompressed stream 1560 is the same as that shown in FIG. 15A. This corresponds to the original serial stream 1520 shown in . Decompression is performed in an iterative operation from left to right in the configuration shown. The compressed output stream 1550 is shown at the top of FIG. 15C, where blocks representing symbols and multi-symbol strings and corresponding addresses and parameters have been separated for convenience. As discussed above, decompression is performed in a series of iterative decoding operations, using each inverse pointer to determine the corresponding character code(s), and after decompression 1555, which may be stored in whole or in part in a temporary buffer. The final decompressed stream 1560 is formed by reversing the order of the character codes of each multi-symbol string in the compressed output stream 1550.

圧縮解除後の中間ストリーム1555を決定する際、圧縮後の符号のそれぞれと関連付けて、アドレス情報、及びパラメータを更新する。アドレス情報には、圧縮解除後のストリーム1560に含まれる現在の圧縮後の符号のアドレス(adr)が含まれる。パラメータには、圧縮後の符号内の圧縮後のシンボルの数で決まるその圧縮後の符号の長さ(L)、ワイドワード内の入力ストリームの数であるワイドワード(w)、並びに、現在の圧縮後の符号が圧縮解除される圧縮解除処理の時点における同一入力ストリームからの圧縮解除後のシンボルの累積数を示す圧縮解除値(dc)が含まれる。同じ入力ストリームを起点とする次の圧縮後の符号の次のアドレスは、現在のアドレス(adr+Lw)に長さ(L)とワイドワード(w)との積を加算して計算される。同じ入力ストリームに関する次の圧縮解除値は、現在の圧縮解除値(dc+L)に長さ(L)を加算して計算される。 When determining the decompressed intermediate stream 1555, address information and parameters are updated in association with each compressed code. The address information includes the address (adr) of the current compressed code included in the decompressed stream 1560. The parameters include the compressed code length (L), which is the number of compressed symbols in the compressed code, the wideword (w), which is the number of input streams in the wideword, and the current A decompression value (dc) is included that indicates the cumulative number of decompressed symbols from the same input stream at the time of the decompression process when the compressed code is decompressed. The next address of the next compressed code starting from the same input stream is calculated by adding the product of length (L) and wideword (w) to the current address (adr+Lw). The next decompression value for the same input stream is calculated by adding the length (L) to the current decompression value (dc+L).

便宜上、図15Cの圧縮解除後の中間ストリーム1555の全体が示されており、全復号プロセス、及び復号後の文字コードの順序が示されている。ただし、復号後の文字コードを圧縮解除後の最終ストリーム1560に入力する次ステップに進む前に、圧縮解除後の中間ストリーム1555全体が、必ずしも形成されるとは限らない。つまり、いくつかの実施形態において、圧縮解除後の中間ストリーム1555を構築する際、圧縮解除後の中間ストリーム1555の復号済み文字コードを、圧縮解除後の最終ストリーム1560へと区分的に提示可能であり、これによって、中間の圧縮解除に必要な一時バッファのサイズが削減される。例えば、復号後の各文字コードは、対応する逆ポインタがNULLの場合、圧縮解除後の中間ストリーム1555から圧縮解除後の最終ストリーム1560へと入力可能である。前述のように、nullの逆ポインタに到達するには、マルチシンボル文字列の複数の復号化ステップ(及び、圧縮解除後の最終ストリーム1560に入力するときの順序の逆転)が必要である。 For convenience, the entire decompressed intermediate stream 1555 of FIG. 15C is shown to illustrate the entire decoding process and the order of character codes after decoding. However, the entire decompressed intermediate stream 1555 is not necessarily formed before proceeding to the next step of inputting the decoded character codes into the decompressed final stream 1560. That is, in some embodiments, when constructing the decompressed intermediate stream 1555, the decoded character codes of the decompressed intermediate stream 1555 may be presented piecewise into the decompressed final stream 1560. , which reduces the size of the temporary buffer required for intermediate decompression. For example, each decoded character code can be input from the decompressed intermediate stream 1555 to the decompressed final stream 1560 if the corresponding reverse pointer is NULL. As mentioned above, arriving at a null reverse pointer requires multiple decoding steps of the multi-symbol string (and reversal of the order when entering the final stream 1560 after decompression).

また、圧縮解除では、並べ替えられた圧縮後の第1のストリーム1541’及び第2のストリーム1542’のそれぞれについて、部分的に出力する必要はない。圧縮解除では、アドレスを使用して、圧縮解除後の文字列が最終的に出力される圧縮解除後のストリーム1560に含まれる位置を追跡し続けることで、必要なバッファメモリの量が削減され、さらに、個別に形成されたインターリーブステップとして、圧縮解除後の中間ストリーム1555が効果的に削除され得る。アドレスはワイドワードのサイズ(例えば、本例では2)の配列で追跡され、各ストリームは効果的に独立して圧縮解除されるので、圧縮解除処理は並列に実行できる。並び替えられた圧縮後の第1のストリーム1541’及び第2のストリーム1542’の最終位置は、それらが復号化される際に既知であるので、圧縮後の出力ストリーム1550がまだ完全に復号されていないときであっても、圧縮解除後の最終ストリーム1560の最初のいくつかの復号化文字を出力することができる。マルチシンボル文字列は、圧縮解除後のストリーム1560に提供されるべき復号化後の文字コードの順序を逆にするために、圧縮解除中に一時的に格納される必要があり、その後、必要に応じて、マルチシンボル文字列をストレージから削除することができる。 Furthermore, in decompression, it is not necessary to partially output each of the rearranged compressed first stream 1541' and second stream 1542'. Decompression uses addresses to keep track of the position in the decompressed stream 1560 where the decompressed string is ultimately output, reducing the amount of buffer memory required; Furthermore, as a separately formed interleaving step, the intermediate stream 1555 after decompression may be effectively deleted. Since the addresses are tracked in an array of wideword size (eg, 2 in this example) and each stream is effectively decompressed independently, the decompression process can be performed in parallel. The final positions of the reordered compressed first stream 1541' and second stream 1542' are known when they are decoded, so that the compressed output stream 1550 is not yet fully decoded. The first few decoded characters of the final stream 1560 after decompression can be output even when not. Multi-symbol strings need to be temporarily stored during decompression to reverse the order of decoded character codes that should be provided to the decompressed stream 1560, and then used as needed. The multi-symbol string can be deleted from storage accordingly.

とりわけ、図示の例を参照すると、並び替えられた圧縮後の第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’の圧縮解除は、ここでは停止しない。 In particular, referring to the illustrated example, the compressed code 99 from the reordered compressed first stream 1541' has a reverse pointer to NULL, so that the first compressed code 99 of the decompressed intermediate stream 1555 At the position, the character code "c" is output together with the corresponding address information and parameters. As shown in the figure, the address of code 99 after compression is 0 (adr[0]=0) since this is the first symbol after decompression of stream 1560 after compression; The length of code 99 is 1 (L=1) since this corresponds to 1 symbol after compression, and furthermore, the decompression value of code 99 after compression is such that no symbols have been decompressed so far. Therefore, 0 (dc[0]=0). The next address of the next decompressed symbol starting from the first input stream 1531 is 2, which is equal to the length of the compressed code 99 (L) and the wideword size (w). The product is added to the current address of code 99 after compression (adr[0]+L*w=0+(1*2)=2). Also, the next decompression value (dc), which indicates the cumulative number of symbols decompressed from the first input stream 1531 so far, is 1, and this value is equal to the length of the current decompression value of code 99. It is obtained by adding the values of (L) (dc[0]+L=0+1=1). Compare the following decompression value with the total number of symbols (8) in the original first input stream 1511 to determine whether the reordered compressed first stream 1541' is completely decompressed. do. In this case, the next decompression value is 1, and since 1 is less than 8, the decompression of the compressed first stream 1541' does not stop here.

並び替えられた圧縮後の第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’の圧縮解除は、ここでは停止しない。 Since the compressed code 99 from the rearranged compressed second stream 1542' has a reverse pointer to NULL, the character code "c" is placed in the next position of the decompressed intermediate stream 1555. , the corresponding address information, and parameters. In other words, the address of code 99 after compression is 1 (adr[1]=1) since this is the second symbol after decompression of stream 1560 after decompression, and the length of code 99 after compression is 1 (adr[1]=1). Since this corresponds to one symbol after compression, it is 1 (L=1), and furthermore, since there is no symbol that has been decompressed so far for the reordered compressed second stream 1542'. , the decompression value 99 of the code after compression is 0 (dc[1]=0). The next address of the next decompressed symbol starting from the second input stream 1532 is 3, which is equal to the length of the compressed code 99 (L) and the wideword size (w). The product is added to the current address of code 99 after compression (adr[1]+L*w=1+(1*2)=3). The next decompression value (dc), which indicates the cumulative number of symbols decompressed from the second input stream 1532, is 1, which is equal to the current code 99 decompression value plus the length (L) value. (dc[1]+L=0+1=1). Compare the following decompression value with the total number of symbols (8) in the original second input stream 1512 to determine whether the reordered compressed second stream 1542' is completely decompressed. do. In this case, the next decompression value is 1, and since 1 is less than 8, the decompression of the compressed second stream 1542' does not stop here.

並び替えられた圧縮後の第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’の圧縮解除は停止しない。 Since the compressed code 98 from the rearranged compressed first stream 1541' has a reverse pointer to NULL, the character code "b" is output at the next position of the decompressed intermediate stream 1555. be done. The corresponding address information includes adr[0]=2 (which was previously updated with the preceding compressed code 99 from the reordered compressed first stream 1541'); And the corresponding parameters are L=1 and dc[0]=1 (which was previously updated with the preceding compressed code 99 from the reordered compressed first stream 1541'). ). After that, address adr[0] is updated with the next value, and becomes adr[0]+Lw=2+(1*2)=4. The value dc[0] after decompression is also updated with the next value, dc[0]+L=1+1=2, which is less than 8, so the decompression of the first stream 1541' after compression is Do not stop. Similarly, since the compressed code 97 from the rearranged compressed second stream 1542' has a reverse pointer to NULL, the next position of the decompressed intermediate stream 1555 is the character code "a". " is output. The corresponding address information includes adr[1]=3 (which was previously updated with the preceding compressed code 99 from the reordered compressed second stream 1542'); And the corresponding parameters are L=1 and dc[1]=1 (which was previously updated with the preceding compressed code 99 from the reordered compressed second stream 1542'). ). Thereafter, address adr[1] is updated to become adr[1]+Lw=5. The value dc[1] after decompression is also updated with the next value, dc[1]+L=2, but since this is less than 8, the decompression of the second stream 1542' after compression is not stopped. .

並べ替えられた圧縮後の第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’の圧縮解除は停止しない。 The compressed code 256 from the reordered compressed first stream 1541' then provides the multi-symbol string "bc", and the compressed code 256 has the character code "b". , has a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, when the character codes "b" and "c" are respectively output and then written to the decompressed stream 1560, their positions are reversed. The corresponding address information includes adr[0]=4, which is then updated to 8. The corresponding parameters are L=2 and dc[0]=2, which is then updated to 4. The compressed code 256 includes two character codes (“bc”) from two symbols of the first input stream 1531, so the length (L) is two. Address (adr[0]) is updated to 8 according to adr[0]+Lw=4+(2*2)=8. Update the decompressed value (dc[0]) to 4 according to dc[0]+L=2+2=4, which means that the 4 symbols ("cbcb") from the first input stream 1531 are decoded. will be done. Since 4 is less than 8, the decompression of the reordered compressed first stream 1541' does not stop.

同様に、並べ替えられた圧縮後の第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’の圧縮解除は停止しない。 Similarly, the compressed code 256 from the reordered compressed second stream 1542' provides the multi-symbol string "ac", and the compressed code 256 is the character code "a". , a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, when the character codes "a" and "c" are respectively output and then written to the decompressed stream 1560, their positions are reversed. The corresponding address information includes adr[1]=5, which is updated to 9. The corresponding parameters are L=2 and dc[1]=2, which are updated to 4. Compressed code 256 contains two character codes (“ac”) from two symbols of second input stream 1532, so its length (L) is two. Address (adr[1]) is updated to 9 according to adr[1]+Lw=5+(2*2)=9. Update the decompressed value (dc[1]) to 4 according to dc[1]+L=2+2=4, which means that the 4 symbols ("ccaca") from the second input stream 1532 are decoded. Indicates that the Since 4 is less than 8, decompression of the reordered compressed second stream 1542' does not stop.

次に、並べ替えられた圧縮後の第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’の圧縮解除は停止しない。 The compressed code 258 from the reordered compressed first stream 1541' then provides the multi-symbol string "cbc" and the compressed code 258 has the character code "c". , a reverse pointer to 256 whose character code is "b", a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, when the character codes "c", "b", and "c" are respectively output and then written to the decompressed stream 1560, their positions are reversed. The corresponding address information includes adr[0]=8, which is then updated to 14, and the corresponding parameters are L=3 and dc[0]=4, which is updated to 7. do. The compressed code 258 contains three character codes (“cbc”) from the three symbols of the first input stream 1531, so the length (L) is three. Update the address to 14 according to adr[0]+Lw=8+(3*2)=14. Update the decompressed value (dc[0]) to 7 according to dc[0]+L=4+3=7, which means that 7 symbols (“cbcbcbc”) from the first input stream 1531 are decoded. Indicates that the Since 7 is less than 8, the decompression of the reordered compressed first stream 1541' does not stop.

次に、並び替えられた圧縮後の第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’の圧縮解除は停止しない。 Next, since the compressed code 116 from the rearranged compressed second stream 1542' has a reverse pointer to NULL, the character code " t'' is output along with the corresponding address information and parameters. That is, the corresponding address information includes adr[1]=9, which is then updated to 11, and further, the corresponding parameters are L=1 and dc[1]=4, and then this Update to 5. The address (adr[1]) is updated to 11 according to adr[1]+Lw=9+(1*2)=11. Update the decompressed value (dc[1]) to 5 according to dc[1]+L=4+1=5, which means that 5 symbols ("cacat") from the second input stream 1532 are decoded. Indicates that the Since 5 is less than 8, decompression of the reordered compressed second stream 1542' does not stop.

次に、並び替えられた圧縮後の第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に更新する。 Next, since the compressed code 100 from the rearranged compressed first stream 1541' has a reverse pointer to NULL, the character code " d" is output together with the corresponding address information and parameters. That is, the corresponding address information includes adr[0]=14, and the corresponding parameters are L=1 and dc[0]=7, which is then updated to 8. Update the decompressed value (dc[0]) to 8 according to dc[0]+L=7+1=8, which means that all eight symbols (“cbcbcbcd”) from the first input stream 1531 are decoded. Indicates that the Therefore, since dc[0] is equal to 8, the decompression of the reordered compressed first stream 1541' is stopped. Now that the decompression of the reordered compressed first stream 1541' is complete, in order to start decompressing the next reordered compressed first stream 1541', address (adr[ 0]) to 0.

最後に、並べ替えられた圧縮後の第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に更新する。 Finally, the compressed code 258 from the reordered compressed second stream 1542' provides the multi-symbol string "tac", and the compressed code 258 has the character code "t". , a reverse pointer to 256 whose character code is "a", a reverse pointer to 99 whose character code is "c", and a reverse pointer to NULL. Therefore, when the character codes "t", "a", and "c" are respectively output and then written to the decompressed stream 1560, their positions are reversed. The corresponding address information includes adr[1]=11, and the corresponding parameters are L=3 and dc[1]=5, which is then updated to 8. Compressed code 258 contains three character codes (“tac”) from three symbols of second input stream 1532, so its length (L) is three. The decompressed value (dc[1]) is updated to 8, indicating that all eight symbols (“cacatcat”) from the second input stream 1532 are decoded. Therefore, since dc[1] is equal to 8, decompression of the reordered compressed second stream 1542' is stopped. Now that the decompression of the reordered compressed second stream 1542' is complete, we need to start decompressing the next reordered compressed second stream 1542' at address (adr[ 1]) is updated to 0.

これまで考察したように、圧縮解除後のストリーム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」という逆順で受信される。 As discussed above, decompressed stream 1560 is formed from decompressed intermediate stream 1555 by reversing the order of the respective character codes within the multi-symbol string. Reversing the order of character codes to create the decompressed stream 1560 may be done during the iterative decompression process or after the decompressed intermediate stream 1555 is completed. . The final result is as seen in FIG. 15C, where the order of character codes "bc" from the compressed code 256 of the reordered compressed first stream 1541' is At 1560, "c" is received in reverse order, followed by "b". The order of the character codes "ac" from the compressed code 256 of the rearranged compressed second stream 1542' is received in the reverse order of "c" followed by "a" in the decompressed stream 1560. be done. The order of the character code "cbc" from the compressed code 258 of the rearranged compressed first stream 1541' is such that in the decompressed stream 1560, "c" is followed by "b", followed by " c" in reverse order. The order of the character code "tac" from the compressed code 258 of the rearranged compressed second stream 1542' is such that in the decompressed stream 1560, "c" is followed by "a", followed by " t'' in reverse order.

完了すると、結果としての圧縮解除後のストリーム1560は、図15Aで示される元のシリアルストリーム1520と同じになる。代替実施形態において、並べ替えられた圧縮後の第1のストリーム1541’を起点とする圧縮後の符号を、第1の一時バッファに格納された第1の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除し、さらに、並べ替えられた圧縮後の第2のストリーム1542’を起点とする圧縮後の符号を、第2の一時バッファに格納された第2の一時出力ストリーム(マルチシンボル文字列の文字コードを逆順に含む場合もあれば、含まない場合もある)として圧縮解除する。そして、第1の一時出力ストリーム及び第2の一時出力ストリームから順番にシンボルを交互に入力することにより、圧縮解除後のストリーム1560を形成することができる。 Once complete, the resulting decompressed stream 1560 will be the same as the original serial stream 1520 shown in FIG. 15A. In an alternative embodiment, the compressed symbols originating from the reordered compressed first stream 1541' are transferred to the first temporary output stream (characters of the multi-symbol string) stored in the first temporary buffer. The compressed codes starting from the reordered compressed second stream 1542' are then decompressed into a second temporary Decompress as a buffered second temporary output stream (which may or may not contain the character codes of the multi-symbol string in reverse order). The decompressed stream 1560 can then be formed by alternately inputting symbols from the first temporary output stream and the second temporary output stream.

図16は、代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。この方法は、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中に、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減する。図16の様々なステップは、上述のインターポーザ回路120、及び/又はUIコンピュータ110(つまり、インターポーザ回路120、又はUIコンピュータ110、あるいはそれらの両方)で実行可能であり、従来のソリューションに付随する複雑な配線及び信号完全性の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(及びより少ない生データ)を使用して、アップロード時間の高速化をサポートする。これまで考察した図13A~図13Cは、図16で示される方法の一例を示す。 FIG. 16 is a simplified flow diagram illustrating a method for providing decompressed wideword data during communication of wideword data over a data link, in accordance with an exemplary embodiment. This method allows data to be stored in the capture buffer of the interposer circuit during communication over a data link that conforms to a high-speed hierarchical packet-based protocol, without loss of functionality and without loss of information available for analysis. Reduce the amount of data used. The various steps of FIG. 16 can be performed in the interposer circuit 120 and/or the UI computer 110 (i.e., the interposer circuit 120, the UI computer 110, or both) described above, and the complexities associated with conventional solutions may be avoided. It eliminates significant wiring and signal integrity issues, reduces overall cost, and supports faster upload times, for example by using high-bandwidth interfaces (and less raw data). 13A-13C discussed above illustrate an example of the method shown in FIG. 16.

図16を参照すると、ブロックS1601において、圧縮されるべきシリアルストリームを、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割する。各入力ストリームは、所定数のシンボルを含む。 Referring to FIG. 16, in block S1601, a serial stream to be compressed is divided into multiple input streams corresponding to multiple wide words in the serial stream. Each input stream includes a predetermined number of symbols.

ブロックS1602において、複数の入力ストリームに対して並列圧縮を実行して、対応する圧縮後のストリームを得る。圧縮後の各ストリームは、複数の圧縮後の符号を含み、各圧縮後の符号は、少なくとも1つの文字コード及び少なくとも1つの逆ポインタを含む。圧縮後のストリームの中には、複数の文字コードを有するマルチシンボル文字列と、そのマルチシンボル文字列に対応する少なくとも1つのNoOpエントリとを含む少なくとも1つの圧縮後の符号を有する。図8を参照して上述したように、各マルチシンボル文字列は、入力ストリーム中の2つ以上の元の入力シンボルを表す圧縮後の符号を示し、さらに、NoOpエントリは、対応するマルチシンボル文字列に含まれる圧縮後のストリーム中の最初の、又は、次に圧縮される任意の元の入力シンボルの位置を効率良く取る。マルチシンボル文字列が2つを超える入力シンボルからの圧縮後の符号を含む場合には、圧縮後のストリームの入力シンボルの最後の位置を除く全ての位置にNoOpエントリが出現する。 In block S1602, parallel compression is performed on multiple input streams to obtain corresponding compressed streams. Each compressed stream includes a plurality of compressed symbols, and each compressed symbol includes at least one character code and at least one reverse pointer. The compressed stream includes at least one compressed code including a multi-symbol string having a plurality of character codes and at least one NoOp entry corresponding to the multi-symbol string. As described above with reference to FIG. 8, each multi-symbol string indicates a compressed symbol representing two or more original input symbols in the input stream; To efficiently locate the first or next compressed arbitrary original input symbol in a compressed stream included in a sequence. If a multi-symbol string contains compressed codes from more than two input symbols, NoOp entries appear in all but the last position of the input symbol in the compressed stream.

ブロックS1603において、圧縮後のストリームは、それぞれ、第1の到着シンボル並べ替え処理で並べ替えられ、並べ替えられた複数の圧縮後のストリームを形成する。少なくとも1つのマルチシンボル文字列を有する圧縮後のストリームごとに、各マルチシンボル文字列は、そのマルチシンボル文字列の第1のシンボルの位置まで移動し、対応するNoOpエントリ(複数の場合もある)は、第1のシンボルの位置からシフトする。つまり、記録された圧縮後のストリームにおいて、マルチシンボル文字列の位置がNoOpエントリ(複数の場合もある)の前に来るように、マルチシンボル文字列とNoOpエントリ(複数の場合もある)の位置が切り替わる。 In block S1603, the compressed streams are each reordered in a first arriving symbol reordering process to form a plurality of reordered compressed streams. For each compressed stream that has at least one multi-symbol string, each multi-symbol string is moved to the position of the first symbol of that multi-symbol string and the corresponding NoOp entry(s) is shifted from the position of the first symbol. That is, the position of the multi-symbol string and the NoOp entry(s) such that the position of the multi-symbol string comes before the NoOp entry(s) in the recorded compressed stream. is switched.

ブロックS1604では、NoOpエントリを除いて、並び替えられた圧縮後のストリームから圧縮後の符号を交互に入力することにより、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが2つある場合には、2つの並べ替えられた圧縮後のストリームからの圧縮後の符号同士をそれぞれ交互に配置することで、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが4つある場合には、4つの並べ替えられた圧縮後のストリームからの圧縮後の符号を通じてそれぞれ反復的に循環させることで、途切れのない圧縮後の出力ストリームが形成される。 In block S1604, an uninterrupted compressed output stream is formed by alternately inputting compressed codes from the rearranged compressed stream except for NoOp entries. For example, if there are two wide words, a seamless compressed output stream is formed by interleaving the compressed codes from the two reordered compressed streams. . For example, if there are four widewords, each can be iteratively cycled through the compressed symbols from the four reordered compressed streams to form a seamless compressed output stream. .

ブロックS1605において、並べ替えられた異なる圧縮後のストリームから、途切れのない圧縮後の出力ストリーム内の圧縮後の符号を反復的に受信することによって、圧縮後の出力ストリームの圧縮解除を開始する。圧縮後の符号はそれぞれ、少なくとも1つの文字コードと、少なくとも1つの逆ポインタとを含む。少なくとも1つのマルチシンボル文字列を含む圧縮後のストリームにおいて、各マルチシンボル文字列は、それぞれ複数の文字コード、及び複数の逆ポインタを含む。 In block S1605, decompression of the compressed output stream is initiated by iteratively receiving compressed symbols in the uninterrupted compressed output stream from the reordered different compressed streams. Each compressed code includes at least one character code and at least one reverse pointer. In a compressed stream including at least one multi-symbol string, each multi-symbol string includes a plurality of character codes and a plurality of reverse pointers.

ブロックS1606において、圧縮後の符号の逆ポインタをそれぞれ辿って、圧縮後の様々なストリームからの圧縮後の符号を反復的に復号化することによって、圧縮解除後の中間ストリームは形成される。すなわち、NULLエントリに達して、少なくとも1つの文字コードが得られるまで、各圧縮後の符号の少なくとも1つの逆ポインタを辿ることで、圧縮後の符号の復号化を実施する。圧縮後の符号がNULLエントリを指す逆ポインタを1つ含む場合には、圧縮後の符号は、1文字コードを含む。圧縮後の符号が複数の逆ポインタを含み、その最後の逆ポインタがNULLエントリを指す場合には、圧縮後の符号は、それぞれ複数の文字コードを含み、圧縮後の符号は、マルチシンボル文字列を含む。 In block S1606, a decompressed intermediate stream is formed by iteratively decoding the compressed symbols from the various compressed streams, following each compressed symbol's inverse pointer. That is, the compressed code is decoded by tracing at least one inverse pointer of each compressed code until a NULL entry is reached and at least one character code is obtained. If the compressed code includes one reverse pointer pointing to a NULL entry, then the compressed code includes a one-character code. If the compressed code includes multiple reverse pointers, and the last reverse pointer points to a NULL entry, then the compressed code each includes multiple character codes, and the compressed code is a multi-symbol string. including.

ブロックS1607において、圧縮後のストリームのそれぞれから各マルチシンボル文字列の文字コードの順序を逆転させることにより、圧縮解除された中間ストリームから圧縮解除されたストリームが形成される。残りの文字コードの順序は変わらない。圧縮解除後のストリームは、更なる処理と解析のために出力される。例えば、これまで考察したように、圧縮解除後のストリームは、UIコンピュータ110に出力可能であり、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザを圧縮解除後のストリームに適用する。 In block S1607, decompressed streams are formed from the decompressed intermediate streams by reversing the order of the character codes of each multi-symbol string from each of the compressed streams. The order of the remaining character codes remains unchanged. The decompressed stream is output for further processing and analysis. For example, as previously discussed, the decompressed stream can be output to the UI computer 110, which UI computer applies a protocol analyzer to the decompressed stream to analyze the data according to a high speed data protocol. Apply.

図17A及び図17Bは、代表的な実施形態に係る、データリンクを介したワイドワードデータの通信中、圧縮解除後のワイドワードデータを提供する方法を示す簡略流れ図である。この方法では、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減可能である。図17A及び図17Bの様々なステップは、上述のインターポーザ回路120、及び/又はUIコンピュータ110で実行可能であり、従来のソリューションに付随する複雑な配線及び信号完全性の問題を解消し、総コストを削減するとともに、例えば、高帯域インタフェース(及びより少ない生データの)を使用して、アップロード時間の高速化をサポートする。これまで考察した図15A~図15Cは、図17A及び図17Bで示される方法の一例を示す。 17A and 17B are simplified flowcharts illustrating a method for providing decompressed wideword data during communication of wideword data over a data link, according to an exemplary embodiment. In this method, during the communication of data over a data link that conforms to a high-speed hierarchical packet-based protocol, data is stored in the capture buffer of the interposer circuit without loss of functionality and without loss of information available for analysis. It is possible to reduce the amount of data. The various steps of FIGS. 17A and 17B can be performed in the interposer circuit 120 and/or the UI computer 110 described above, eliminating the complex wiring and signal integrity issues associated with traditional solutions and reducing the overall cost. and support faster upload times, e.g. by using high-bandwidth interfaces (and less raw data). 15A-15C discussed above illustrate an example of the method shown in FIGS. 17A and 17B.

図17Aを参照すると、ブロック1701において、圧縮されるべきデータのシリアルストリームを、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割する。各入力ストリームは、所定数のシンボルを含む。 Referring to FIG. 17A, at block 1701, a serial stream of data to be compressed is divided into multiple input streams corresponding to multiple wide words in the serial stream. Each input stream includes a predetermined number of symbols.

ブロックS1702において、複数の入力ストリームに対して並列圧縮を実行して、対応する圧縮後のストリームを得る。圧縮後の各ストリームは、複数の圧縮後の符号を含み、各圧縮後の符号は、少なくとも1つの文字コード及び少なくとも1つの逆ポインタを含む。圧縮後のストリームの中には、複数の文字コードを有するマルチシンボル文字列と、そのマルチシンボル文字列に対応する少なくとも1つのNoOpエントリとを含む少なくとも1つの圧縮後の符号を有するものがある。図8を参照して上述したように、各マルチシンボル文字列は、入力ストリーム中の2つ以上の元の入力シンボルを表す圧縮後の符号を示し、さらに、NoOpエントリは、対応するマルチシンボル文字列に含まれる圧縮後のストリーム中の最初の元の入力シンボルの位置を効率よく得る。マルチシンボル文字列が2つを超える入力シンボルからの圧縮後の符号を含む場合には、圧縮後のストリームの入力シンボルの最後の位置を除く全ての位置にNoOpエントリが出現する。 In block S1702, parallel compression is performed on multiple input streams to obtain corresponding compressed streams. Each compressed stream includes a plurality of compressed symbols, and each compressed symbol includes at least one character code and at least one reverse pointer. Some of the compressed streams have at least one compressed code including a multi-symbol string having multiple character codes and at least one NoOp entry corresponding to the multi-symbol string. As discussed above with reference to FIG. 8, each multi-symbol string indicates a compressed symbol representing two or more original input symbols in the input stream, and the NoOp entry also represents the corresponding multi-symbol string. To efficiently obtain the position of the first original input symbol in a compressed stream included in a column. If a multi-symbol string contains compressed codes from more than two input symbols, NoOp entries appear in all but the last position of the input symbol in the compressed stream.

ブロックS1703では、該当する圧縮後のストリーム内の各NoOpエントリを削除し、削除された各NoOpエントリに続く複数の圧縮後の符号のうち任意の圧縮後の符号を、削除されたNoOpエントリの位置までシフトさせることによって、複数の圧縮後ストリームにおける各圧縮後ストリームを並べ替える。例えば、NoOpエントリを1つ削除すると、圧縮後のストリーム中のNoOpエントリに続く圧縮後の符号は全て、削除されたNoOpエントリの方向に1つシフトして、並べ替えられた対応する圧縮後のストリームが形成される。隣接する2つのNoOpエントリを削除すると、圧縮後のストリーム中のNoOpエントリに続く圧縮後の符号は全て、削除されたNoOpエントリの方向に2つシフトして、並べ替えられた対応する圧縮後のストリームが形成されるといった具合である。 In block S1703, each NoOp entry in the corresponding compressed stream is deleted, and any compressed code among the plurality of compressed codes following each deleted NoOp entry is inserted into the position of the deleted NoOp entry. By shifting each compressed stream among the plurality of compressed streams. For example, if you delete one NoOp entry, all compressed codes following the NoOp entry in the compressed stream will be shifted by one in the direction of the deleted NoOp entry, and the corresponding compressed A stream is formed. When two adjacent NoOp entries are deleted, all compressed codes following the NoOp entry in the compressed stream are shifted by two in the direction of the deleted NoOp entry, and the reordered corresponding compressed symbols are A stream is formed, and so on.

ブロックS1704において、並べ替えられた複数の圧縮後のストリームから圧縮後の符号を反復的に入力することで(削除されたNoOpエントリがない場合)、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが2つある場合、2つの並べ替えられた圧縮後のストリームからの圧縮後の符号同士をそれぞれ交互に配置することで、途切れのない圧縮後の出力ストリームが形成される。例えば、ワイドワードが4つある場合、4つの並べ替えられた圧縮後のストリームからの圧縮後の符号を通じてそれぞれ反復的に循環させることで、途切れのない圧縮後の出力ストリームが形成される。並べ替えられた圧縮後のストリームの圧縮後の符号の数が異なる場合、並べ替えられた圧縮後の長い方のストリームの末尾に追加された圧縮後の符号が、途切れのない圧縮後の出力ストリームの末尾に隣接して提供される。 In block S1704, an uninterrupted compressed output stream is formed by repeatedly inputting compressed codes from the rearranged multiple compressed streams (if there are no deleted NoOp entries). . For example, if there are two wide words, a seamless compressed output stream is formed by interleaving the compressed codes from the two rearranged compressed streams. For example, if there are four widewords, a continuous compressed output stream is formed by repeatedly cycling through each of the compressed symbols from the four permuted compressed streams. If the reordered compressed streams have different numbers of compressed symbols, the compressed symbols added to the end of the longer reordered compressed stream are the unbroken compressed output stream. provided adjacent to the end of.

ブロックS1705では、途切れのない圧縮後の出力ストリームの圧縮解除が実行される。一般的に、この圧縮解除は、並び替えられたそれぞれの圧縮後のストリームに従って、途切れのない圧縮後の出力ストリームから圧縮後の符号を反復的に復号化して、対応する文字コードを取得することと、マルチシンボルを含む圧縮後の符号から取得された文字コードの順序を逆にすることと、取得された文字コードから圧縮解除されたストリームを構築することとにより、並列に実行される。図17Bを参照して、圧縮解除を実行するプロセスについて詳細に検討する。圧縮解除後のストリームは、更なる処理と解析のために出力される。例えば、これまで考察したように、圧縮解除後のストリームは、UIコンピュータ110に出力可能であり、このUIコンピュータは、高速データプロトコルに従って、データを解析するためのプロトコルアナライザを圧縮解除後のストリームに適用する。 In block S1705, decompression of the uninterrupted compressed output stream is performed. Generally, this decompression involves iteratively decoding the compressed codes from the uninterrupted compressed output stream according to each reordered compressed stream to obtain the corresponding character codes. and are executed in parallel by reversing the order of the character codes obtained from the compressed code containing the multi-symbols and constructing a decompressed stream from the obtained character codes. With reference to FIG. 17B, consider in more detail the process of performing decompression. The decompressed stream is output for further processing and analysis. For example, as previously discussed, the decompressed stream can be output to the UI computer 110, which UI computer applies a protocol analyzer to the decompressed stream to analyze the data according to a high speed data protocol. Apply.

図17Bは、図17AのブロックS1705で示される圧縮解除プロセスの例示的実施態様である。図17Bを参照すると、ブロックS1751~S1756は、圧縮後の出力ストリーム内の圧縮後の符号ごとに、圧縮解除後のストリーム内の現在のアドレス(adr)で実行される。ブロックS1751では、途切れのない圧縮後の出力ストリームにおいて、現在のアドレスの圧縮後の符号が含まれる、並べ替えられた圧縮後のストリームを特定する。例えば、元のシリアルストリームに2つのワイドワードが含まれている場合、途切れのない圧縮後の出力ストリーム内の各圧縮後の符号は、並べ替えられた2つの圧縮後のストリームの一方から取得される。 FIG. 17B is an example implementation of the decompression process shown in block S1705 of FIG. 17A. Referring to FIG. 17B, blocks S1751-S1756 are executed at the current address (adr) in the decompressed stream for each compressed symbol in the compressed output stream. In block S1751, a rearranged compressed stream that includes the compressed code of the current address is identified in the uninterrupted compressed output stream. For example, if the original serial stream contains two widewords, each compressed symbol in the uninterrupted compressed output stream is obtained from one of the two reordered compressed streams. Ru.

ブロックS1752において、NULLエントリに達して、少なくとも1つの文字コードが得られるまで、少なくとも1つの逆ポインタを辿ることで、圧縮後の符号の復号化を実施する。圧縮後の符号がNULLエントリを指す逆ポインタを1つ含む場合、圧縮後の符号は、1文字コードを含む。圧縮後の符号が複数の逆ポインタを含み、その最後の逆ポインタがNULLエントリを指す場合には、圧縮後の符号は、それぞれ複数の文字コードを含むことにより、圧縮後の符号は、マルチシンボル文字列を含む。 In block S1752, the compressed code is decoded by following at least one reverse pointer until a NULL entry is reached and at least one character code is obtained. If the compressed code includes one reverse pointer pointing to a NULL entry, then the compressed code includes a one-character code. If the compressed code includes multiple reverse pointers and the last reverse pointer points to a NULL entry, the compressed code includes multiple character codes each, so that the compressed code is a multi-symbol Contains strings.

ブロックS1753において、圧縮解除後のコードのアドレスを特定する。アドレス(adr)は、圧縮解除後のストリーム中の圧縮解除後の文字コード(複数の場合もある)が占有すべき第1のアドレスである。例えば、圧縮後の符号が1文字コードを含む場合、その1文字コードが特定されたアドレスを占有することになる。圧縮後の符号に2つの文字コードが含まれている場合、この2つの文字コードは、特定されたアドレスと、並べ替えられた同じ圧縮後のストリーム(つまり、並べ替えられた他の圧縮後のストリーム(複数の場合もある)からの文字コード(複数の場合もある)のアドレスで区切られる)に提供される次のアドレスとをそれぞれ占有するといった、具合である。 In block S1753, the address of the decompressed code is identified. Address (adr) is the first address that the decompressed character code(s) in the decompressed stream should occupy. For example, if the compressed code includes a one-character code, that one-character code will occupy the specified address. If the compressed code contains two character codes, the two character codes are the specified address and the same reordered compressed stream (i.e., the other reordered compressed and so on.

ブロックS1754において、圧縮後の符号のパラメータを決定する。パラメータには、例えば、圧縮後の符号の長さ(L)と、圧縮解除値(dc)が含まれる。圧縮後の符号の長さは、ブロックS1752で逆ポインタを辿ることにより実行された復号化に基づいて決定される。つまり、長さは、圧縮後の符号の文字コードの数に対応する。したがって、文字コードが1つの圧縮後の符号の長さはL=1、文字コードが2つの圧縮後の符号の長さはL=2といった具合になる。圧縮解除値は、現在の圧縮解除後のシンボルの前に、同じ入力ストリーム(ひいては、並び替えられた同じ圧縮後のストリーム)からの圧縮解除されたシンボルの累積数として決定される。圧縮後の符号が特定入力ストリームの最初の1つである場合には、シンボルがまだ圧縮解除されていないため、圧縮解除値は、0になる。同じ入力ストリームからの次の圧縮後の符号については、前の圧縮後の符号の圧縮解除値に前の圧縮後の符号の長さを加算した値を、圧縮解除値とする。一般的に、圧縮後の符号が1文字コードを含む場合、復号化値は1増分される。一般的に、圧縮後の符号が2文字コードを含む場合、復号化値は2増分されるといった具合である。 In block S1754, parameters of the code after compression are determined. The parameters include, for example, the length of the code after compression (L) and the decompression value (dc). The length of the compressed code is determined based on the decoding performed by following the inverse pointer in block S1752. In other words, the length corresponds to the number of character codes of the code after compression. Therefore, the length of a compressed code with one character code is L=1, and the length of a compressed code with two character codes is L=2. The decompression value is determined as the cumulative number of decompressed symbols from the same input stream (and thus the same reordered compressed stream) before the current decompressed symbol. If the compressed symbol is the first one of a particular input stream, the decompression value will be 0 since the symbol has not yet been decompressed. For the next compressed code from the same input stream, the decompressed value is the sum of the decompressed value of the previous compressed code and the length of the previous compressed code. Generally, if the compressed code includes a one-character code, the decoded value is incremented by one. Generally, if the compressed code includes a two-character code, the decoded value is incremented by two, and so on.

ブロックS1755では、累積された圧縮解除値が、並べ替えられた圧縮後のストリームに対応する元の入力ストリームのシンボル数と等しいかどうかを判定する。例えば、これまで考察したように、元の入力ストリームには、8つのシンボルが含まれる場合がある。圧縮解除値がシンボル数と等しくない場合(ブロックS1755:No)、プロセスは、S1756のブロックに進み、並び替えられた同じ圧縮後のストリームからの次の圧縮後の符号の圧縮解除後のストリーム内の次のアドレスを、決定する。次アドレスは、現在のアドレス、長さ、及び、シリアルストリーム内のワイドワードの数(w)に基づいて、決定することができる。つまり、前述のように、次のアドレスは、長さ(L)と数(w)との積を現在のアドレス(adr)に加算した数になる。現在のアドレスは、並べ替えられた同じ圧縮後のストリームの次の反復処理のために、圧縮解除後のストリーム内で決定された次のアドレスに設定される。 Block S1755 determines whether the accumulated decompression value is equal to the number of symbols in the original input stream corresponding to the reordered compressed stream. For example, as discussed above, the original input stream may contain eight symbols. If the decompression value is not equal to the number of symbols (block S1755: No), the process proceeds to block S1756, in which the next decompressed symbol from the same reordered compressed stream is Determine the next address. The next address can be determined based on the current address, length, and number of wide words (w) in the serial stream. That is, as described above, the next address is the product of the length (L) and the number (w) added to the current address (adr). The current address is set to the next address determined in the decompressed stream for the next iteration of the same reordered compressed stream.

その後、プロセスはブロックS1751に戻り、ここで、途切れのない圧縮後の出力ストリームにおいて、次の圧縮後の符号が含まれ、並べ替えられた圧縮後のストリームを特定する。これまで考察したように、並べ替えられた圧縮後のストリームは、以前の並べ替えられた圧縮後のストリームとは異なっており、これにより、圧縮後の符号は、圧縮解除を実行するためにインターリーブされる。例えば、元のシリアルストリームが2つのワイドワードを含む場合には、並べ替えられた圧縮後のストリームは、圧縮解除を行うために、並べ替えられた圧縮後の第1のストリームと並べ替えられた圧縮後の第2のストリームとの間で交互に並べられる。そして、プロセスを反復する。 The process then returns to block S1751, where a reordered compressed stream is identified that includes the next compressed code in the uninterrupted compressed output stream. As we have discussed, the reordered compressed stream is different from the previous reordered compressed stream, which allows the compressed code to be interleaved to perform the decompression. be done. For example, if the original serial stream contains two widewords, the reordered compressed stream is reordered with the reordered compressed first stream to perform decompression. and the compressed second stream. Then repeat the process.

圧縮解除値がシンボル数と等しい場合(ブロックS1755:Yes)には、入力ストリーム内のシンボルに対応するその並び替えられた圧縮後のストリームからの圧縮後の符号が全て圧縮解除されたことを示しており、プロセスはブロックS1757に進む。ブロックS1757で、まだ完全に圧縮解除されていない並べ替えられた圧縮後のストリームが残っているかどうかを判断する。並べ替えられた圧縮後ストリームが、残っていない場合(ブロックS1757:No)には、プロセスは、後述するブロックS1758に進む。圧縮後の符号が残っている、並べ替えられた圧縮後のストリームが少なくとも1つある場合(ブロックS1757:Yes)には、プロセスはブロックS1751に戻り、ここで、途切れのない圧縮後の出力ストリームにおいて、次の圧縮後の符号が含まれ、並べ替えられた圧縮後のストリームを特定する。この時点で、他の並べ替えられた圧縮後のストリーム(複数の場合もある)からの圧縮後の符号を使い果たした可能性があるので、次の圧縮後の符号は、同じ並べ替えられた圧縮後のストリームからのものであり得る。そして、プロセスを反復する。 If the decompression value is equal to the number of symbols (block S1755: Yes), it indicates that all compressed symbols from that reordered compressed stream that correspond to symbols in the input stream have been decompressed. , the process continues to block S1757. In block S1757, it is determined whether there are any remaining reordered compressed streams that have not yet been fully decompressed. If there are no rearranged compressed streams remaining (block S1757: No), the process proceeds to block S1758, which will be described later. If there is at least one reordered compressed stream with compressed codes remaining (block S1757: Yes), the process returns to block S1751 where the uninterrupted compressed output stream , a reordered compressed stream containing the next compressed code is identified. At this point, you may have exhausted the compressed symbols from the other reordered compressed stream(s), so the next compressed symbol will be the same reordered compressed stream. It could be from a later stream. Then repeat the process.

ブロックS1758において、圧縮後の符号の現在のアドレスに対応する圧縮解除後のストリーム内のアドレスに、並び替えられた各圧縮後ストリームの各圧縮後の符号からの文字コード(複数の場合もある)を入力することによって、圧縮解除後のストリームが形成される。少なくとも1つの文字コードを入力することは、各圧縮後のストリームからの少なくとも1つのマルチシンボル文字列内のそれぞれの文字コードの順序を逆転させることを含む。マルチシンボル文字列ごとに、逆順の第1の文字コードが現在のアドレスに入力され、さらに、残りの文字コード(複数の場合もある)は、並べ替えられた同じ圧縮後のストリームで使用可能な圧縮解除後のストリーム内の次の連続するアドレス(複数の場合もある)へと入力される。残りの文字コードの順序とアドレスは、変わらない。最終的な結果は、前述の図17AのブロックS1701において分割され、S1702において圧縮された元のシリアルストリームと同じ順序の文字コードを持つ圧縮解除後のストリームである。 In block S1758, the character code(s) from each compressed code of each reordered compressed stream is added to the address in the decompressed stream that corresponds to the current address of the compressed code. A decompressed stream is formed by inputting . Entering the at least one character code includes reversing the order of each character code within the at least one multi-symbol string from each compressed stream. For each multi-symbol string, the first character code in reverse order is entered at the current address, and the remaining character code(s) are available in the same reordered compressed stream. Input to the next consecutive address(es) in the decompressed stream. The order and addresses of the remaining character codes remain unchanged. The final result is a decompressed stream with character codes in the same order as the original serial stream that was split in block S1701 and compressed in S1702 of FIG. 17A above.

図18は、代表的な実施形態に係る、高速データリンクを介したデータの通信中、格納されたデータ量を削減するコンピュータシステムの一例を示す簡略ブロック図である。 FIG. 18 is a simplified block diagram illustrating an example of a computer system that reduces the amount of data stored during communication of data over a high speed data link, in accordance with a representative embodiment.

図18を参照すると、コンピュータシステム1800は、処理ユニット1810と、本明細書で説明するプロセスを実行するために処理ユニット1810によって実行可能な命令を格納するためのメモリ1820と、並びに、ユーザが利用できるようにするためのディスプレイ1830及びインタフェース1840とを含む。処理ユニット1810は、1つ以上の処理デバイスを代表するものであり、本明細書の様々な実施形態で説明されている機能を実施するソフトウェア命令を実行するように構成されている。処理ユニット1810は、汎用コンピュータ、中央処理ユニット、1つ以上のプロセッサ、マイクロプロセッサ若しくはマイクロコントローラ、状態機械、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、又はこれらの組み合わせにより、ハードウェア、ソフトウェア、ファームウェア、配線接続論理回路、又はそれらの組み合わせの任意の組み合わせを使用して実装することができる。「プロセッサ(processor)」という用語は、特に、プログラム、又は機械実行可能命令を実施できる電子部品を包含する。「プロセッサ」への言及は、マルチコアプロセッサ、及び/又は、並列プロセッサ(つまり、マルチコアプロセッサ、又は並列プロセッサ、あるいはそれらの両方)のように、2つ以上のプロセッサ、又は処理コアを含むものと解釈するものとする。また、プロセッサは、単一コンピュータシステム内のプロセッサの集合体、又は、クラウドベース若しくは他のマルチサイトアプリケーション等、複数のコンピュータシステム間で分散されたプロセッサを称する場合もある。プログラムは、同じコンピューティングデバイス内、又は、複数のコンピューティングデバイスにわたって分散し得る1つ以上のプロセッサによって実行されるソフトウェア命令を含む。 Referring to FIG. 18, computer system 1800 includes a processing unit 1810 and a memory 1820 for storing instructions executable by processing unit 1810 to perform the processes described herein, as well as for use by a user. A display 1830 and an interface 1840 are included for enabling. Processing unit 1810 is representative of one or more processing devices and is configured to execute software instructions to perform the functions described in various embodiments herein. Processing unit 1810 may be a general purpose computer, a central processing unit, one or more processors, a microprocessor or microcontroller, a state machine, a programmable logic device, a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), or the like. may be implemented using any combination of hardware, software, firmware, hardwired logic, or combinations thereof. The term "processor" specifically encompasses a program or an electronic component capable of implementing machine-executable instructions. References to "processor" shall be construed to include two or more processors or processing cores, such as multi-core processors and/or parallel processors (i.e., multi-core processors and/or parallel processors). It shall be. Processor may also refer to a collection of processors within a single computer system, or to processors distributed among multiple computer systems, such as cloud-based or other multi-site applications. A program includes software instructions that are executed by one or more processors that may be distributed within the same computing device or across multiple computing devices.

メモリ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を含めることができる。 Memory 1820 may include main memory and/or static memory (i.e., main memory and/or static memory), where such memory is interconnected to each other and to processing unit 1810 via one or more buses. can communicate with. Memory 1820 stores instructions used to implement some or all aspects of the methods and processes described herein. Memory 1820 may be implemented with, for example, any number, type, and combination of random-access memory (RAM) and read-only memory (ROM), and may further include software algorithms. , and computer programs, all of which can be executed by processing unit 1810 . The different types of ROM and RAM include disk drives, flash memory, electrically programmable read-only memory (EPROM), and electrically erasable and programmable read-only memory (EPROM). EEPROM (electrically erasable and programmable read only memory), register, hard disk, removable disk, tape, compact disk read only memory (CD-ROM), digital versatile disk (DVD), floppy Any number, type, and combination of computer-readable storage media, such as discs, Blu-ray discs, universal serial bus (USB) drives, or any other form of storage media known in the art. It may include a storage medium. If processing unit 1810 includes an FPGA, for example, memory 1820 may include UltraRAM, as described above, or other RAM with read and write capabilities.

メモリ1820は、データと実行可能ソフトウェア命令を格納するための有形の記憶媒体であり、ソフトウェア命令が内部に格納されている間は、非一時的である。本明細書で使用する場合、「非一時的(non-trasitory)」という用語は、状態の永遠の特性ではなく、或る期間続く状態の特性として解釈されるものとする。「非一時的」という用語は、具体的に言えば、任意の時点で任意の場所に一時的にしか存在しない、搬送波若しくは信号、又は、他の形態の特性等、一時的な特性を否定するという意味である。メモリ1820は、様々な機能の実行を可能にするソフトウェア命令、及び/又はコンピュータ可読コード(つまり、ソフトウェア命令、又はコンピュータ可読コード、あるいはそれらの両方)を格納し得る。メモリ1820は、セキュア及び/又は暗号化(つまり、セキュア又は暗号化あるいはそれらの両方が)されているか、又は、セキュアでない場合及び/又は暗号化されていない場合(つまり、セキュアでない場合又は暗号化されていない場合あるいはそれらの両方の場合)もある。 Memory 1820 is a tangible storage medium for storing data and executable software instructions that is non-transitory while the software instructions are stored therein. As used herein, the term "non-trasitory" shall be construed as a characteristic of a condition that lasts for a period of time, rather than an eternal characteristic of the condition. The term "non-transitory" specifically negates properties that are temporary, such as carrier waves or signals, or other forms of properties that exist only temporarily in any given location at any given time. That is what it means. Memory 1820 may store software instructions and/or computer readable code (ie, software instructions and/or computer readable code) that enable performance of various functions. Memory 1820 may be secure and/or encrypted (i.e., secure and/or encrypted) or insecure and/or unencrypted (i.e., insecure and/or encrypted). (or both).

ディスプレイ1830は、例えば、コンピュータモニタ、テレビ、液晶ディスプレイ(LCD:liquid crystal display)、有機発光ダイオード(OLED:organic light emitting diode)、フラットパネルディスプレイ、固体ディスプレイ、又は陰極線管(CRT:cathode ray tube)ディスプレイ等のモニタ、又は、電子ホワイトボードであり得る。また、ディスプレイ1830は、ユーザとの間で情報を表示及び受信するためのグラフィカルユーザインタフェース(GUI:graphic user interface)を提供することもできる。 Display 1830 may be, for example, a computer monitor, a television, a liquid crystal display (LCD), an organic light emitting diode (OLED), a flat panel display, a solid state display, or a cathode ray tube (CRT). It may be a monitor, such as a display, or an electronic whiteboard. Display 1830 can also provide a graphic user interface (GUI) for displaying and receiving information from a user.

インタフェース1840は、処理ユニット1810及び/又はメモリ1820(つまり、処理ユニット1810又はメモリ1820あるいはそれらの両方)によって出力された情報及びデータをユーザに提供するため、及び/又はユーザから入力された情報及びデータを受信するためのユーザインタフェース及び/又はネットワークインタフェース(つまり、ユーザインタフェース又はネットワークインタフェースあるいはそれらの両方)を含むことができる。すなわち、インタフェース1840は、ユーザがデータを入力し、本明細書に記載のプロセスの態様を制御又は動作することを可能にし、さらに、処理ユニット1810がユーザの制御又は動作の効果を示すことを可能にする。インタフェース1840は、例えば、マウス、キーボード、トラックボール、ジョイスティック、触覚デバイス、マイクロフォン、ビデオカメラ、タッチパッド、タッチスクリーン、マイクロフォン若しくはビデオカメラによってキャプチャされた音声若しくはジェスチャ認識等の1つ以上のユーザインタフェース、若しくは、コンピュータワークステーション1805からのユーザフィードバック、及びコンピュータワークステーションとの相互作用を可能にする他の周辺機器、又はコントロールを接続することができる。インタフェース1840は、ポート、ディスクドライブ、無線アンテナ、又は他の種類の受信機回路の1つ以上も含み得る。 Interface 1840 is configured to provide information and data output by processing unit 1810 and/or memory 1820 (i.e., processing unit 1810 and/or memory 1820) to the user and/or to provide information and data input from the user. A user interface and/or a network interface (ie, a user interface and/or a network interface) may be included for receiving data. That is, interface 1840 enables a user to enter data and control or operate aspects of the processes described herein, and further enables processing unit 1810 to indicate the effects of the user's controls or operations. Make it. Interface 1840 may include one or more user interfaces, such as, for example, a mouse, keyboard, trackball, joystick, haptic device, microphone, video camera, touch pad, touch screen, voice captured by a microphone or video camera, or gesture recognition; Alternatively, other peripherals or controls that enable user feedback from and interaction with the computer workstation 1805 can be connected. Interface 1840 may also include one or more ports, disk drives, wireless antennas, or other types of receiver circuitry.

上記実施形態は、インターポーザ回路を通じて送信される複数の入力ストリームに対して並列ワイドワード圧縮を実行して、対応する圧縮後のストリームを取得することと、その圧縮後のストリームをキャプチャバッファに格納することとに依拠している。例えば、上述の図9、図13A、及び図15Aの例で見られるように、LZW圧縮アルゴリズム等に従って、入力ストリームの1つに対する圧縮が正常に実行されると、バイトの反復を示す1つ以上のNoOpエントリが、対応する圧縮後のストリームに出現する。 The above embodiment performs parallel wideword compression on multiple input streams sent through an interposer circuit to obtain corresponding compressed streams, and stores the compressed streams in a capture buffer. It depends on things. For example, as seen in the examples of FIGS. 9, 13A, and 15A above, upon successful compression of one of the input streams, such as according to the LZW compression algorithm, one or more A NoOp entry appears in the corresponding compressed stream.

ただし、例えば、ランダムデータ等の反復パターンを多く持たないデータが入力ストリームに含まれる場合、インターポーザ回路120でのワイドワード圧縮(例えば、FPGA及び/又はASICを含む)は、キャプチャバッファ125等のバイナリ出力ストレージに読み書きする際に問題となり得る。一般的に、ランダムデータには、以前に出現したバイト列の反復がほとんど含まれていないため、圧縮率が悪くなる。ランダムデータの圧縮後のストリームは、格納される際、対応する入力ストリームの元の生の非圧縮バイト(8ビット)よりも多く、所与の出力を表現するビットを必要とする。これは、出力のサイズが、255より大きい数として符号化された新しい圧縮後のマルチシンボル出力に対応できる必要があるからである。圧縮後のシンボルとしての新たなマルチシンボル文字列(バイト列)は、最初は0~511の範囲の10進数であり、元の非圧縮バイトあたり、9ビットを記憶媒体に書き込む必要がある。したがって、バイトを圧縮できない場合には、そのバイトは、依然として9ビットのストレージを必要とし、これは、記憶サイズが12.5パーセント増加することと同じであり、効果が得られない(すなわち、実際には圧縮されない)。 However, if the input stream contains data that does not have many repetitive patterns, such as random data, wideword compression in interposer circuit 120 (including, for example, an FPGA and/or ASIC) This can be a problem when reading and writing to output storage. Random data typically contains few repeats of previously occurring bytes, resulting in poor compression. A compressed stream of random data, when stored, requires more bits to represent a given output than the original raw uncompressed bytes (8 bits) of the corresponding input stream. This is because the size of the output needs to be able to accommodate the new compressed multi-symbol output encoded as a number greater than 255. A new multi-symbol string (byte string) as a symbol after compression is initially a decimal number in the range 0 to 511, and 9 bits per original uncompressed byte need to be written to the storage medium. Therefore, if a byte cannot be compressed, it still requires 9 bits of storage, which equates to a 12.5 percent increase in storage size, with no benefit (i.e., (not compressed).

本明細書に記載の並列圧縮は、一般的な反復シーケンスが、複数の元の非圧縮のバイトを格納するために9ビットしか必要としないという事実に依拠している。ただし、ランダムデータ又は反復パターンがあまり多くない他のデータ(まとめて、「ランダムデータ」と称する)の場合には、データの大幅な削減を実現するには、これらの反復シーケンスが十分ではない。さらに、圧縮処理中も、圧縮辞書は増え続けている、つまり、10進数511より大きい新しい出力では、キャプチャバッファ125に書き込むべきビット数が更に多くなるということである。これでは、圧縮せずに書き込むために8ビットしか必要としない非圧縮値が、9、10、又はそれ以上のビットで書き込まれるようになると、スペースが無駄になる。 The parallel compression described herein relies on the fact that a typical repeating sequence requires only 9 bits to store multiple original uncompressed bytes. However, for random data or other data that does not have many repeating patterns (collectively referred to as "random data"), these repeating sequences are not sufficient to achieve significant data reduction. Additionally, during the compression process, the compression dictionary continues to grow, meaning that new outputs greater than decimal 511 require more bits to be written to the capture buffer 125. This wastes space when uncompressed values that require only 8 bits to write without compression are written with 9, 10, or more bits.

図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つの圧縮後の値が始まり、以前の圧縮後の値が終了したかが分からなくなるはずなので、各シンボルに書き込むビット数が分からないまま、データストレージからデータを正常に再読み取りすることができなくなる。 In FIG. 19, the left side shows a compressed output from non-random data, while the right side shows an example of a compressed output from random data. If the input stream contains non-random data, the output after compression will typically contain a value larger than 8 bits, since this value represents a previously occurring sequence of repeated bytes. Generally, the first 512 values (decimal 0-511) require 9 bits, the next 512 values (decimal 512-1023) require 10 bits, and the next 1024 The value (1024-2047 decimal) requires 11 bits, the next 2048 values (2048-4095 decimal) require 12 bits, and so on. The first 512 values can be stored using 9 bits, the next 512 values can be stored using 10 bits, and then all values can be stored using that number of bits, until the maximum dictionary entries are reached. This property of the compression algorithm is useful in decompression because it indicates reading. For example, if the dictionary has a maximum entry of 4095, then 12 bits are used to store the maximum number of values. The algorithm determines the timing of changing from 9 bits to 10 bits (indicated by the broken line in FIG. 19), from 10 bits to 11 bits, and so on. Another method is to store some metadata with each compressed value, which describes the number of bits used for each value. Each value can be expressed using metadata in addition to the optimum number of bits. However, metadata increases storage requirements. Therefore, this "wasted" metadata is not needed to specify the size of each symbol for writing and reading, since the number of values to read is known in advance. The compression algorithm simply starts writing 9 bits, detects that the value of the next highest dictionary entry reaches 512, starts writing 10 bits, and so on. Otherwise, the algorithm would not know where in the bitstream one compressed value begins and the previous compressed value ends, so the algorithm would not know where in the bitstream one compressed value begins and the previous compressed value ends. Data can no longer be successfully reread from storage.

比較すると、入力ストリームがランダムデータを含む場合には、書き込みと読み取りに10ビット以上を必要とするデータストレージの領域では、256未満のストレージに書き込まれる値が多くなる。例えば、図19の右側で図示される代表的な出力では、最初の511個の値を読み取った後、値2、61、32、9、47、及び12を読み取るために10ビットが使用されているが、これらは全て512未満であるため、10ビットの読み取りは必要ないはずである。その結果、入力ストリームの8ビットからなる大量の非圧縮バイトが、「圧縮後」の出力ストリームに10ビット以上として書き込まれるので、非圧縮値に必要なものよりも多くのビットが使用される。これはスペースの無駄であり、ランダムデータが原因で生じる圧縮不良を引き起こし、理想よりも多くのビットで非圧縮値をあまりにも多く書き込むことによって、更なる連鎖反応が起こる。 By comparison, in areas of data storage that require 10 or more bits to write and read, more values are written to less than 256 storage if the input stream contains random data. For example, in the typical output illustrated on the right side of Figure 19, after reading the first 511 values, 10 bits are used to read values 2, 61, 32, 9, 47, and 12. However, these are all less than 512, so there should be no need to read the 10 bits. As a result, a large number of uncompressed bytes of 8 bits in the input stream are written to the "post-compressed" output stream as 10 or more bits, thus using more bits than are needed for the uncompressed value. This is a waste of space, causes poor compression due to random data, and has a further knock-on effect by writing too many uncompressed values with more bits than ideal.

様々な実施形態によると、入力ストリームそれぞれのデータが、反復パターンを持たない(例えば、ランダムデータの場合)ことにより、上手く圧縮できない場合には、すぐに判別される。この判別を行うために、インターポーザ回路120は、圧縮中の入力ストリームにnバイト(例えば、n=500)の窓を適用し、対応する圧縮後のストリームに出力がないクロックのクロックサイクル数をカウントする。インターポーザ回路120が、マルチシンボルシーケンスである入力ストリームの現在のデータで以前に観測されたシーケンスを観測し、さらに、出力された圧縮後のストリームでマルチシンボルシーケンスを表す1つの新しい値として出力するために、より長いシーケンスを構築している場合には、クロックサイクルの出力はない。これまで考察したように、圧縮がアクティブなクロックサイクル中に出力が不足するのは、NoOp関数である。窓の終了時に、インターポーザ回路120は、窓内のバイト/クロック数nに対する窓内のNoOpの比率(NoOp/n)を決定する。NoOpの比率が所定の比率閾値未満の場合には、これは、入力ストリームのデータが十分に圧縮されていないことを意味する。この比率の所定閾値は、例えば、約0.05~約0.20の範囲内とすることができる。この比率が所定の比率閾値未満の場合には、入力ストリームの圧縮は完全に停止し、入力ストリームの送信は、圧縮されずに続行する。この比率が所定の比率閾値よりも高い場合には、これは、データの圧縮は良好であり、入力ストリームの圧縮は続行することを意味する。 According to various embodiments, it is immediately determined if the data in each input stream cannot be compressed well due to not having a repeating pattern (eg, in the case of random data). To make this determination, the interposer circuit 120 applies a window of n bytes (e.g., n=500) to the input stream being compressed and counts the number of clock cycles of the clock that has no output in the corresponding compressed stream. do. Because the interposer circuit 120 observes a sequence previously observed in the current data of the input stream that is a multi-symbol sequence and further outputs it as one new value representing the multi-symbol sequence in the output compressed stream. If you are building a longer sequence, there is no clock cycle output. As discussed above, it is a NoOp function that is underpowered during the clock cycle when compression is active. At the end of the window, interposer circuit 120 determines the ratio of NoOps in the window to the number of bytes/clocks n in the window (NoOp/n). If the NoOp ratio is less than a predetermined ratio threshold, this means that the data in the input stream is not sufficiently compressed. The predetermined threshold for this ratio can be, for example, within a range of about 0.05 to about 0.20. If this ratio is less than a predetermined ratio threshold, compression of the input stream is completely stopped and transmission of the input stream continues without compression. If this ratio is higher than a predetermined ratio threshold, this means that the compression of the data is good and the compression of the input stream continues.

代表的な実施形態によると、リアルタイムにワイドワードデータを圧縮する方法が提供されている。この方法は、シリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、各入力ストリームは、所定数のシンボルを含むことと、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームを送信することと、インターポーザ回路を通じて送信される入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、圧縮の副産物として生成され、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、これは、NoOpエントリの数が少なすぎて並列圧縮が効率的でないことを示しており、複数の入力ストリームに対する並列圧縮の実行、及び/又は、圧縮後のストリームの格納(つまり、複数の入力ストリームに対する並列圧縮の実行、又は圧縮後のストリームの格納、あるいはそれらの両方)を停止し、並列圧縮を実行せずに、インターポーザ回路を通して、入力ストリームを出力に送信し続けることで、データの格納時に元の8ビットのみが使用されるようにすることとを含む。 According to an exemplary embodiment, a method is provided for compressing wideword data in real time. The method includes splitting a serial stream into multiple input streams corresponding to multiple widewords of the serial stream, each input stream including a predetermined number of symbols and a capture buffer. Sending an input stream through an interposer circuit, performing parallel compression on the input stream sent through the interposer circuit to obtain multiple corresponding compressed streams, and storing the compressed streams in a capture buffer. one or more compressed streams of the plurality of compressed streams are generated as a by-product of compression and include a NoOp entry indicating a repetition of a corresponding byte; determining the number of NoOp entries occurring in a predetermined number of bytes of each input stream while performing parallel compression of the input stream; determining a ratio of the number of NoOp entries to the predetermined number of bytes; If this ratio exceeds a ratio threshold, then continue performing parallel compression on the input stream and storing the compressed stream; and if this ratio does not exceed a predetermined ratio threshold, this is a NoOp entry. This indicates that parallel compression is not efficient because the number of , or storing the stream after compression, or both) and continuing to send the input stream to the output through the interposer circuit without performing parallel compression, so that only the original 8 bits are stored when storing the data. including ensuring that the information is used.

別の代表的な実施形態によると、非一時的コンピュータ可読媒体は、並列圧縮された圧縮解除後のワイドワードデータを提供するための命令を格納する。少なくとも1つのプロセッサにより実行されると、この命令は、少なくとも1つのプロセッサに対して、シリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、各入力ストリームは、所定数のシンボルを含むことと、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームの送信を制御することと、この入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、複数の入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、複数の入力ストリームに対して実行された並列圧縮、及び/又は、圧縮後のストリームの格納(つまり、複数の入力ストリームに対して実行された並列圧縮、又は圧縮後のストリームの格納、あるいはそれらの両方)を停止し、並列圧縮を実行せずに、インターポーザ回路を通して、複数の入力ストリームの送信の制御を続行することとを実行させる。 According to another exemplary embodiment, a non-transitory computer-readable medium stores instructions for providing parallel compressed and decompressed wideword data. When executed by the at least one processor, the instructions are for the at least one processor to split a serial stream into a plurality of input streams corresponding to a plurality of widewords of the serial stream, the instructions comprising: each input stream contains a predetermined number of symbols; controlling the transmission of the input stream through an interposer circuit that includes a capture buffer; and performing parallel compression on this input stream to create corresponding multiple compressions. obtaining a compressed stream and storing the compressed stream in a capture buffer, the one or more compressed streams of the plurality of compressed streams having NoOp entries indicating repetitions of corresponding bytes; and determining the number of NoOp entries that occur in a given number of bytes of each input stream of the plurality of input streams while performing parallel compression of a given number of bytes, and determining the ratio of the number of NoOp entries to the given number of bytes. and if this ratio exceeds a predetermined ratio threshold, perform parallel compression on multiple input streams and continue storing the compressed streams; and if this ratio exceeds a predetermined ratio threshold, Parallel compression performed on multiple input streams and/or storage of the compressed streams (i.e., parallel compression performed on multiple input streams or post-compression (or both) and continue controlling the transmission of multiple input streams through the interposer circuit without performing parallel compression.

別の代表的な実施形態によると、システムは、並列圧縮された圧縮解除後のワイドワードデータを提供する。このシステムは、高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT:device under test)からホストコンピュータまでの高速階層型パケットベースのプロトコルでのデータのシリアルストリームを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、高速データリンクに接続し、DUTとホストコンピュータとの間で送信されるデータを監視するインターポーザ回路とを含む。インターポーザ回路は、DUTとホストコンピュータとの間で送信されるデータを格納し、アナライザソフトウェアを使用して解析するために、UIコンピュータからアクセス可能なキャプチャバッファを含む。インターポーザ回路は更に、少なくとも1つの処理ユニットも含み、この処理ユニットは、上記送信されたデータのシリアルストリームを、このシリアルストリームの複数のワイドワードに対応する複数の入力ストリームへと分割することであって、ここで各入力ストリームは、所定数のシンボルを含むことと、この複数の入力ストリームに対して並列圧縮を実行して、対応する複数の圧縮後のストリームを取得し、その圧縮後のストリームをキャプチャバッファに格納することであって、この複数の圧縮後のストリームの1つ以上の圧縮後のストリームは、対応するバイトの反復を示すNoOpエントリを含むことと、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数に発生するNoOpエントリの数を特定することと、所定バイト数に対するNoOpエントリ数の比率を決定することと、この比率が所定の比率閾値を超える場合には、複数の入力ストリームに対する並列圧縮の実行、及び、圧縮後のストリームの格納を続行することと、この比率が所定の比率閾値を超えない場合には、複数の入力ストリームに対して実行された並列圧縮、及び/又は、圧縮後のストリームの格納を停止することであって、上記データは、並列圧縮なしで、DUTとホストコンピュータとの間で送信され続けることとを実行するようにプログラムされる。 According to another exemplary embodiment, the system provides parallel compressed and decompressed wideword data. The system transmits a serial stream of data in a high-speed layered packet-based protocol from a device under test (DUT) to a host computer via a high-speed data link that conforms to a high-speed layered packet-based protocol. It includes a user interface (UI) computer configured to run analyzer software for analysis, and an interposer circuit that connects to the high speed data link and monitors data transmitted between the DUT and the host computer. The interposer circuit includes a capture buffer accessible from the UI computer for storing data transmitted between the DUT and the host computer and for analysis using analyzer software. The interposer circuit further includes at least one processing unit, the processing unit being operable to split the transmitted serial stream of data into a plurality of input streams corresponding to a plurality of widewords of the serial stream. Here, each input stream contains a predetermined number of symbols, and parallel compression is performed on these multiple input streams to obtain multiple corresponding compressed streams, and the compressed stream one or more compressed streams of the plurality of compressed streams include a NoOp entry indicating a repetition of a corresponding byte, and a predetermined number of bytes of parallel compression. determining, while executing, the number of NoOp entries occurring in a predetermined number of bytes of each input stream of the plurality of input streams; determining a ratio of the number of NoOp entries to the predetermined number of bytes; If the threshold is exceeded, continue to perform parallel compression on multiple input streams and store the compressed streams, and if this ratio does not exceed a predetermined ratio threshold, stopping the parallel compression performed on the data and/or storing the compressed stream, the data continuing to be transmitted between the DUT and the host computer without parallel compression; be programmed to do so.

図20は、代表的な実施形態に係る、圧縮効率に優れた並列データ圧縮用に構成されたワイドワードデータのシンボルの例を示す。 FIG. 20 illustrates an example of wideword data symbols configured for parallel data compression with high compression efficiency, according to a representative embodiment.

図20を参照すると、例えば、図6、図13A、及び図15Aを参照して、これまで考察したように、ワイドワード2020は、並列圧縮を実行するために並列入力ストリームとして配列された256の入力ストリームを含む。図の例では、元のシリアルストリームは「0FAC1500...B00FAC1500...B00FAC1500...B001020407...0517192230...」であり、元のシリアルストリームのバイトは256の入力ストリームに分割されている。各入力ストリームの最初の3バイトには、非ランダム構成データ及びヘッダ等の圧縮可能データが含まれているものと仮定する。各入力ストリーム内の第3のバイト以降のバイトには、例えば、トランザクション層パケット(TLP)内のランダムペイロードデータ等の圧縮不能データが含まれるものと更に仮定する。圧縮アルゴリズムは、例えば、LZW圧縮アルゴリズム、又は、例えば、LZ78圧縮アルゴリズムから派生した他の圧縮アルゴリズムとすることができる。 Referring to FIG. 20, the wide word 2020 is divided into 256 input streams arranged as parallel input streams to perform parallel compression, as previously discussed with reference to FIGS. 6, 13A, and 15A, for example. Contains the input stream. In the example shown, the original serial stream is "0FAC1500...B00FAC1500...B00FAC1500...B001020407...0517192230..." and the bytes of the original serial stream are divided into 256 input streams. There is. Assume that the first three bytes of each input stream contain compressible data such as non-random configuration data and headers. It is further assumed that bytes after the third byte in each input stream contain incompressible data, such as, for example, random payload data in a transaction layer packet (TLP). The compression algorithm may be, for example, the LZW compression algorithm or other compression algorithm derived from, for example, the LZ78 compression algorithm.

入力データが圧縮不能になる時点は、事前に分からない。そのため、データが圧縮不能になった箇所を特定するために、圧縮を実行し、さらに、そのパフォーマンスをリアルタイムに解析して、各入力ストリームの入力データが圧縮を停止したタイミングを実用上の問題として判断する。より詳細には、入力ストリームの圧縮に成功すると、例えば、変形版のLZWを使用して、対応する圧縮後の出力ストリームの反復バイトを表すNoOpエントリが生成されるので、以下で検討するように、圧縮後の出力ストリームの所定バイト数に対するNoOpエントリの数を数えることによって、圧縮の成功を判定することができる。 The point at which the input data becomes incompressible is not known in advance. Therefore, in order to identify where the data becomes uncompressible, we perform compression and then analyze its performance in real time to determine when the input data for each input stream stops being compressed as a practical matter. to decide. More specifically, successful compression of an input stream generates NoOp entries representing repeated bytes of the corresponding compressed output stream, e.g. using a modified version of LZW, as discussed below. , the success of compression can be determined by counting the number of NoOp entries for a given number of bytes of the output stream after compression.

図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から)の文字列が生成される。 FIG. 20 illustrates a process for determining compression success for an exemplary first input stream only. The first three bytes of the first input stream have the same hexadecimal value 0F (ie, decimal 15). Since this byte appears for the first time in the first input stream, the first occurrence of the hexadecimal value 0F is converted to the decimal number 15 in the first clock cycle of the first (post-compressed) output stream. On the next clock cycle, the algorithm looks for another previously seen hexadecimal value 0F and tries to build the longest possible subsequence, thus inputting a NoOp entry into the first output stream. On the next clock cycle, the algorithm looks for another hex value 0F and outputs the next output value 256 representing the original 2 bytes 0F0F in the first output stream. As a result, the first output stream compression unit 2022 produces a character string of 15, NoOp, and 256. However, the next two bytes 1 and 17, which are read in the next two clock cycles, are seen for the first time, so the output value is only the uncompressed equivalent of the original input value. This generates character strings of decimal 1 (ie, from hexadecimal 1) and decimal 23 (ie, from hexadecimal 17) in the uncompressed portion 2024 of the first output stream.

この簡略例では、3つの出力エントリに1つのNoOpがあるので、第1の出力ストリームの最初の3つの出力値のNoOp比は、0.33と高くなる。ペイロードの「ランダムデータ」が出現し、NoOpエントリが生成されない場合には、次の2つの出力値のNoOp比は、0と低くなる。なお、この例は、説明目的にすぎない。実際のところ、データがランダムで圧縮不能であることを判断する値が2つしかない場合、少なすぎて正確ではない、つまり、有用ではない。したがって、様々な実施形態によると、NoOpの比率を決定するためにnバイトの窓(例えば、離散窓)が適用される、ここで、nは所定の値である。経験上、n=500は、入力データが上手く圧縮されるかどうかを判断する上で良好な結果をもたらしたが、本教示の範囲から逸脱せずに、他のn値も取り入れてもよい。 In this simplified example, there is one NoOp in three output entries, so the NoOp ratio of the first three output values of the first output stream is as high as 0.33. If "random data" of the payload appears and no NoOp entry is generated, the NoOp ratio of the next two output values will be as low as 0. Note that this example is for illustrative purposes only. In fact, if there are only two values to determine that the data is random and incompressible, it is too few to be accurate or useful. Thus, according to various embodiments, an n-byte window (eg, a discrete window) is applied to determine the NoOp ratio, where n is a predetermined value. In our experience, n=500 has provided good results in determining whether the input data compresses well, but other values of n may be incorporated without departing from the scope of the present teachings.

入力ストリームのデータがランダムであり、したがって圧縮が上手くいかないかどうかを判断するために、NoOpエントリの数と窓あたりのバイト数nとの比率を所定の比率閾値と比較する。この比率の所定の比率閾値は、例えば、約0.05~約0.20の範囲内とすることができる。より具体的には、この比率の所定の比率閾値は、例えば、データがランダムである場合の適切な指標を提供するために、約0.10とすることができる。なお、本教示の範囲から逸脱することなく、他の所定の比率閾値を適用してもよいことは言うまでもない。 To determine whether the data in the input stream is random and therefore cannot be compressed successfully, the ratio between the number of NoOp entries and the number of bytes per window n is compared to a predetermined ratio threshold. The predetermined ratio threshold for this ratio can be, for example, within a range of about 0.05 to about 0.20. More specifically, the predetermined ratio threshold for this ratio may be, for example, about 0.10 to provide a good indication if the data is random. It should be understood that other predetermined ratio thresholds may be applied without departing from the scope of the present teachings.

窓のサイズは、入力ストリームが圧縮不能になったタイミングをすぐに識別できるように、データに関して十分に小さくする必要があるが、窓を適用したことで、結果が信頼できなくなるほど小さくする必要はない。例えば、図20の図示の例において、n=3バイトの離散窓は、データが圧縮不能になるタイミングを直ちに示すが、それがランダムであるかどうかに関するデータの性質を正確に反映するものではない。離散窓が大きすぎると、データが圧縮不能となるタイミングを特定するのが遅れることになる。例えば、n=5の場合、NoOpの比率は、1/5=0.2となり、ランダムデータのフローが既に開始しても、圧縮性テストに合格したことになる。 The window size should be small enough with respect to the data that you can quickly identify when the input stream becomes incompressible, but not so small that applying the window makes the results unreliable. do not have. For example, in the illustrated example of Figure 20, a discrete window of n = 3 bytes immediately indicates when the data becomes incompressible, but does not accurately reflect the nature of the data as to whether it is random or not. . If the discrete window is too large, there will be a delay in determining when the data becomes uncompressible. For example, if n=5, the NoOp ratio is 1/5=0.2, which means that the compressibility test is passed even though the flow of random data has already started.

一実施形態において、窓は、nバイトの離散窓とすることができる。離散窓の終了時に、次のnバイトのセットをカバーするよう、離散窓がシフトされる。代替実施形態において、窓は、nバイトのスライディングウィンドウ(sliding window)としてもよく、スライディングウィンドウの終わりに達する度に、1バイトずつスライドする。この場合には、一時バッファを使用して、スライディングウィンドウを形成し、この一時バッファは、キャプチャバッファのnバイトを保持し、ここで、圧縮後のコンテンツのnバイトは、スライディングウィンドウである。NoOpの数は、現在のウィンドウのコンテンツ全体でカウントされる。一時バッファは、例えば、現在の圧縮値を格納し(先頭にプッシュする)、n+1番目の圧縮値を後方に削除する(末尾からポップする)ファーストインファーストアウト(FIFO)バッファとすることができる。別の実施形態において、この比率は、窓を使用せずにnバイトごとにチェックされるだけである。 In one embodiment, the window may be a discrete window of n bytes. At the end of the discrete window, the discrete window is shifted to cover the next set of n bytes. In an alternative embodiment, the window may be a sliding window of n bytes, sliding by one byte each time the end of the sliding window is reached. In this case, a temporary buffer is used to form a sliding window that holds n bytes of the capture buffer, where the n bytes of compressed content are the sliding window. The number of NoOps is counted across the contents of the current window. The temporary buffer may be, for example, a first-in-first-out (FIFO) buffer that stores the current compressed value (push to the beginning) and deletes the n+1th compressed value backwards (pops from the end). In another embodiment, this ratio is only checked every n bytes without using a window.

図21は、代表的な実施形態に係る、ワイドワードデータの圧縮をリアルタイムに向上させる方法の流れ図である。この方法では、高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中、機能を損なうことなく、かつ解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納されるデータ量を削減可能である。さらに、この方法は、格納に関して、圧縮プロセスが効率的でなくなったら必ず、圧縮をリアルタイムに停止し、圧縮せずに入力ストリームの転送を続行できる。図21の様々なステップは、上述のように、インターポーザ回路120、及び/又は、UIコンピュータ110によって実行可能である。 FIG. 21 is a flowchart of a method for improving compression of wide word data in real time, according to an exemplary embodiment. In this method, during the communication of data over a data link that conforms to a high-speed hierarchical packet-based protocol, data is stored in the capture buffer of the interposer circuit without loss of functionality and without loss of information available for analysis. It is possible to reduce the amount of data. Furthermore, the method can stop compression in real time and continue forwarding the input stream without compression whenever the compression process becomes inefficient with respect to storage. The various steps of FIG. 21 can be performed by interposer circuit 120 and/or UI computer 110, as described above.

図21を参照すると、ブロックS2111において、圧縮されるべきデータのシリアルストリームは、シリアルストリーム中の複数のワイドワードに対応する複数の入力ストリームに分割される。各入力ストリームは、所定数のシンボルを含む。これまで考察したように、さらに、各入力ストリームには、圧縮可能(非ランダム)データと、圧縮不能(ランダム)データが含まれ得る。 Referring to FIG. 21, in block S2111, the serial stream of data to be compressed is divided into multiple input streams corresponding to multiple wide words in the serial stream. Each input stream includes a predetermined number of symbols. As previously discussed, each input stream may also include compressible (non-random) data and non-compressible (random) data.

ブロックS2112において、キャプチャバッファを含むインターポーザ回路を通じて、入力ストリームを送信する。入力ストリームを、例えば、DUT140からUIコンピュータ110及び/又はホストコンピュータ150(つまり、UIコンピュータ110又はホストコンピュータ150あるいはそれらの両方)へと送信される。 At block S2112, the input stream is sent through an interposer circuit that includes a capture buffer. An input stream is sent, for example, from DUT 140 to UI computer 110 and/or host computer 150 (ie, UI computer 110 and/or host computer 150).

ブロックS2113において、インターポーザ回路を通じて送信される入力ストリームに対して、並列圧縮を実行して、対応する圧縮後のストリームを取得し、この圧縮後のストリームをキャプチャバッファに格納する。この並列圧縮の後、入力ストリームに対応する1つ以上の圧縮後の出力ストリームは、それぞれの入力ストリームのバイトの反復を示す、NoOpエントリを生成する。圧縮は、所定のクロック周期を有するクロックで制御され、クロック周期ごとに入力ストリームの入力シンボルごとに、圧縮の判定を実施する。注目すべき点として、現バイトが入力ストリームの以前の連続バイトの反復である場合には、対応するクロックサイクルでの出力がないこと、つまり、そのクロックサイクルでは、ノーオペレーションであること(NoOpエントリ)を示している。 In block S2113, parallel compression is performed on the input stream transmitted through the interposer circuit to obtain a corresponding compressed stream, and this compressed stream is stored in the capture buffer. After this parallel compression, one or more compressed output streams corresponding to the input stream generate NoOp entries indicating repetitions of the bytes of the respective input stream. Compression is controlled by a clock having a predetermined clock period, and a compression determination is performed for each input symbol of the input stream every clock period. Note that if the current byte is a repetition of a previous consecutive byte in the input stream, there is no output in the corresponding clock cycle, i.e., there is no operation (NoOp entry) in that clock cycle. ) is shown.

ブロックS2114において、所定バイト数の並列圧縮を実行しながら、複数の入力ストリームの各入力ストリームの所定バイト数(n)で発生するNoOpエントリの数を特定する。並列圧縮を実行しながら、圧縮出力をスキップした(すなわち、NoOp)クロックサイクル数をカウントすることで、所定バイト数で発生するNoOpエントリの数を特定できる。圧縮出力をスキップするクロックサイクル数は、NoOpエントリの数と等しくなる。一実施形態において、圧縮出力をスキップするクロックサイクルの数は、カウンタを使用してカウントすることができる。 In block S2114, the number of NoOp entries occurring in a predetermined number of bytes (n) of each input stream of the plurality of input streams is determined while performing parallel compression of a predetermined number of bytes. By counting the number of clock cycles in which compression output is skipped (ie, NoOp) while performing parallel compression, the number of NoOp entries that occur in a predetermined number of bytes can be determined. The number of clock cycles to skip compressed output will be equal to the number of NoOp entries. In one embodiment, the number of clock cycles to skip compressed output can be counted using a counter.

一実施形態において、NoOpエントリの数は、入力ストリームに窓を適用することで特定され、ここで、窓のサイズは所定バイト数(n)に等しくなる。つまり、nバイトの窓を適用し、窓内のNoOpエントリの数を特定し、さらに、nバイトの窓を次のnバイトのセットに移動させる。 In one embodiment, the number of NoOp entries is determined by applying a window to the input stream, where the size of the window is equal to a predetermined number of bytes (n). That is, apply an n-byte window, determine the number of NoOp entries in the window, and then move the n-byte window to the next set of n-bytes.

ブロックS2115では、入力ストリームごとに、所定バイト数に対するNoOpエントリ数の比率を決定する。すなわち、比率=NoOpエントリ/nであり、ここで、nは比率を決定する窓内のバイト数である。注目すべき点として、上述したように、NoOpエントリは、圧縮アルゴリズムの性質上、反復を示すために一時的に生成されるもので、キャプチャバッファには格納されない。したがって、NoOpエントリは、事実上圧縮アルゴリズムの副産物として出現するが、代表的な実施形態に従って、ランダムデータの存在を特定するために使用される。 In block S2115, the ratio of the number of NoOp entries to the predetermined number of bytes is determined for each input stream. That is, ratio=NoOp entries/n, where n is the number of bytes within the window that determines the ratio. It is worth noting that, as mentioned above, NoOp entries are generated temporarily to indicate iterations due to the nature of the compression algorithm and are not stored in the capture buffer. Thus, although NoOp entries appear in effect as a by-product of the compression algorithm, they are used to identify the presence of random data, according to a representative embodiment.

ブロックS2116で、比率が所定の比率閾値を超えるかどうかを判定する。一実施形態において、この判定は、入力ストリームごとに行われる。代替実施形態において、この比率が所定の比率閾値を超えているかどうかに関する判定は、例えば、入力ストリームの1つを一次コンプレッサ(compressor)として使用して、他の入力ストリームのコンプレッサに通知することで、全ての並列入力ストリームに対して行われる。これまで考察したように、例えば、所定の比率閾値は、約0.05~約0.20の範囲とすることができる。この比率が所定の比率閾値を超えた場合(ブロックS2116:Yes)には、これは入力ストリーム中の圧縮可能(非ランダム)データを示すので、入力ストリーム中の次の所定バイト数(n)にわたり、圧縮後のデータの並列圧縮と格納が継続される。これは、ブロックS2117でカウントをゼロにリセットし、さらに、入力ストリームの次の所定バイト数(n)で並列圧縮を続行するブロックS2113のように、カウントを再スタートすることで示される。 Block S2116 determines whether the ratio exceeds a predetermined ratio threshold. In one embodiment, this determination is made for each input stream. In an alternative embodiment, the determination as to whether this ratio exceeds a predetermined ratio threshold is made, for example, by using one of the input streams as a primary compressor and notifying the compressor of the other input stream. , is done for all parallel input streams. As previously discussed, for example, the predetermined ratio threshold may range from about 0.05 to about 0.20. If this ratio exceeds the predetermined ratio threshold (block S2116: Yes), this indicates compressible (non-random) data in the input stream, so , the parallel compression and storage of the compressed data continues. This is indicated by resetting the count to zero in block S2117 and restarting the count as in block S2113, which continues parallel compression with the next predetermined number (n) of bytes of the input stream.

この比率が所定の比率閾値を超えない場合(ブロックS2116:No)には、これは、圧縮不能(ランダム)データであることを示しており、入力ストリームの並列圧縮と格納が停止する。その後、インターポーザ回路を通じた入力ストリームの送信は、並列圧縮を実行せずに、ブロックS2118で続行可能である。つまり、データ送信は、圧縮後の符号ではなく、クリア符号で続行される。これまで考察したように、この比率が所定の比率閾値を超えない場合には、これは、NoOpエントリの数が少なすぎて並列圧縮が効率的でないことを示す。各入力ストリームの比率が決定されると、入力ストリームの圧縮を個別に停止することができる。或る入力ストリームを一次コンプレッサとして使用して、全ての入力ストリームの比率が決定されると、この一次コンプレッサは、他の入力ストリームに対して圧縮不能となったデータにフラグを付ける。一実施形態において、この比率は、この入力ストリームについて引き続き決定され、比率が再び好ましい状態になると、圧縮、又は格納を再開することができる。 If this ratio does not exceed the predetermined ratio threshold (block S2116: No), indicating incompressible (random) data, parallel compression and storage of the input stream is stopped. Thereafter, sending the input stream through the interposer circuit may continue at block S2118 without performing parallel compression. That is, data transmission continues with the clear code rather than the compressed code. As discussed above, if this ratio does not exceed a predetermined ratio threshold, this indicates that the number of NoOp entries is too small for parallel compression to be efficient. Once the ratio for each input stream is determined, compression of the input streams can be stopped individually. Once an input stream is used as a primary compressor to determine the ratio of all input streams, the primary compressor flags data that is no longer compressible with respect to other input streams. In one embodiment, this ratio is subsequently determined for this input stream, and compression or storage can be resumed once the ratio is again favorable.

上記の実施形態には多くの利点がある。第1に、実装が容易である。クロックサイクルが出力をスキップする回数(すなわち、NoOp)をカウントするには、カウンタのみが必要である。カウンタは一定のクロックサイクル数(例えば、離散窓において)ごとにチェックされ、データがランダムかどうかが判断される。時間に対して測定されるNoOpの比率は、圧縮率に関する代理指標(proxy measure)である。さらに、データがランダムでない場合、通常のLZWアルゴリズムは、変わらず続行し、リアルタイムに動作し続ける。 The embodiment described above has many advantages. First, it is easy to implement. Only a counter is needed to count the number of times a clock cycle skips an output (ie, NoOp). The counter is checked every fixed number of clock cycles (eg, in a discrete window) to determine whether the data is random. The NoOp ratio measured over time is a proxy measure for compression ratio. Furthermore, if the data is not random, the normal LZW algorithm continues unchanged and continues to operate in real time.

第2に、この実施形態は、圧縮に失敗したバイト数の上限を、n×幅のワードに制限する。ここで、nはウィンドウ内のバイト数、例えば、n=500である。例えば、ワイドワードが256の場合、キャプチャバッファに書き込まれる圧縮に失敗したバイトは最大で128Kbであり、通常、これは、入力データストリーム内の総データの1%未満に相当する。ランダムデータに遭遇したら、対応する圧縮後のデータストリームの出力ファイルが対応する入力ファイルより大きくなる前に、できるだけ早く圧縮を停止させ、これにより、圧縮処理の出力が圧縮処理への入力より大きくならないようにする。 Second, this embodiment limits the upper bound on the number of bytes that fail compression to n x wide words. Here, n is the number of bytes in the window, for example n=500. For example, if the wideword is 256, the uncompressed bytes written to the capture buffer are at most 128 Kb, which typically corresponds to less than 1% of the total data in the input data stream. When random data is encountered, stop compression as soon as possible before the output file of the corresponding compressed data stream becomes larger than the corresponding input file, so that the output of the compression process does not become larger than the input to the compression process. Do it like this.

第3に、入力データストリームは、非ランダムデータで開始可能であり、これにより、圧縮に成功してから、ランダムデータに移行することができる。これは、例えば、データ転送に移行する前に、リンクが最初に起動モードになっている場合に発生し、この場合、そのペイロードのいずれかのランダムデータが送信される。この窓は、このような状況でも、たとえ、ランダムデータのペイロードがデータストリームの後半に出現し、最終的に、動作リンクの主要なトラフィックタイプになった場合であっても、このランダムデータのペイロードが確実に認識されるようにする。 Third, the input data stream can start with non-random data, allowing successful compression before transitioning to random data. This occurs, for example, if the link is first in power-up mode before moving on to data transfer, in which case some random data of its payload is sent. This window allows this random data payload to be used even in such situations, even if it appears later in the data stream and eventually becomes the dominant traffic type on the operational link. ensure that it is recognized.

前述の実施形態は全て、コンピュータの機能を改善し、本来、UIコンピュータ110及びインターポーザ回路120等のコンピュータ及び/又は他の処理デバイス(つまり、UIコンピュータ110及びインターポーザ回路120等のコンピュータ、又は他の処理デバイス、あるいはそれらの両方)の機能に関する技術を改善させる。とりわけ、本明細書に記載の並列圧縮及び圧縮解除技術は、データをインターポーザ回路120からUIコンピュータ110まで高帯域幅で非常に迅速に提供し、UIコンピュータ110、及び/又は、UIコンピュータ110がホストするプロトコルアナライザ(UIコンピュータ110、又はUIコンピュータ110がホストするプロトコルアナライザ、あるいはそれらの両方)による全てのデータのリアルタイム処理及び解析を可能とする。また、本明細書に記載の並列圧縮及び圧縮解除技術は、主として、圧縮後のストリーム中の圧縮符号の並び替えに基づいて、データの位置を追跡するので、実行に必要なメモリはごく僅かとなる。さらに、この並列圧縮及び圧縮解除技術では、コードを見ながらリアルタイムに、つまり、後戻りすることなく、圧縮と圧縮解除が可能である。圧縮されるデータの性質上、有効な結果が得られない場合、圧縮を監視して、中断することもできる。 All of the foregoing embodiments improve the functionality of a computer and inherently improve the functionality of computers and/or other processing devices, such as UI computer 110 and interposer circuit 120 (i.e., computers such as UI computer 110 and interposer circuit 120, or other processing devices). (processing devices, and/or both); In particular, the parallel compression and decompression techniques described herein provide data very quickly with high bandwidth from the interposer circuit 120 to the UI computer 110, and/or the UI computer 110 hosts allows real-time processing and analysis of all data by a protocol analyzer (UI computer 110, a protocol analyzer hosted by UI computer 110, or both). Additionally, the parallel compression and decompression techniques described herein track the location of data primarily based on the reordering of compression symbols in the stream after compression, so they require very little memory to run. Become. Furthermore, this parallel compression and decompression technique allows compression and decompression to be performed while viewing the code in real time, ie, without backtracking. Compression can also be monitored and interrupted if the nature of the data being compressed does not yield useful results.

本発明は、図面及び上記説明に詳細に図示及び説明されてきたが、そのような説明図及び説明は、例示又は模範とみなされるべきであり、限定とみなされるべきではなく、本発明は、開示された実施形態に限定されるものではない。当業者であれば、請求項に係る発明を実施する際に、図面、開示及び添付の特許請求の範囲の検討により、開示される実施形態に対する他の変形形態を理解し、それを行うことができる。特許請求の範囲において、「を含む(comprising)」という単語は他の要素又はステップを排除せず、不定冠詞「一つの("a" or "an")」は複数形を排除しない。或る特定の手段が互いに異なる複数の従属請求項に列挙されているだけであれば、それらの手段を組み合わせて有利に使用することができないことは示されていないものとする。 Although the invention has been illustrated and described in detail in the drawings and foregoing description, such illustrations and description are to be regarded as illustrative or exemplary and not as limiting, and the invention is It is not limited to the disclosed embodiments. Those skilled in the art will understand and be able to make other variations to the disclosed embodiments from consideration of the drawings, disclosure, and appended claims in practicing the claimed invention. can. In the claims, the word "comprising" does not exclude other elements or steps, and the indefinite article "a" or "an" does not exclude a plurality. The mere fact that certain measures are recited in mutually different dependent claims does not indicate that a combination of these measures cannot be used to advantage.

本発明の態様は、装置、方法又はコンピュータプログラム製品として具現化することができる。したがって、本発明の態様は、全体がソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様及びハードウェアの態様を組み合わせた実施形態の形を取ることができる。これらは全て、本明細書において、「回路」、「モジュール」又は「システム」と総称される場合がある。さらに、本発明の態様は、コンピュータ実行可能コードが具現化された1つ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形を取ることができる。 Aspects of the invention may be embodied as an apparatus, method, or computer program product. Accordingly, aspects of the invention may take the form of an entirely software embodiment (including firmware, resident software, microcode, etc.) or an embodiment combining software and hardware aspects. All of these may be collectively referred to herein as "circuits," "modules," or "systems." Additionally, aspects of the invention may take the form of a computer program product embodied in one or more computer-readable media having computer-executable code embodied thereon.

代表的な実施形態が本明細書に開示されているが、当業者であれば、本教示に従った多くの変形形態が可能であり、添付の特許請求の範囲の範囲内にあることが分かる。したがって、本発明は、添付の特許請求の範囲の範囲内にあることを除いて限定されるものではない。 Although exemplary embodiments are disclosed herein, one of ordinary skill in the art recognizes that many variations are possible in accordance with the present teachings and are within the scope of the following claims. . Accordingly, the invention is not to be restricted except as within the scope of the appended claims.

本開示の要約書は、米国特許法施行規則第1.72(b)に準拠するように与えられ、特許請求の範囲又は意味を解釈又は制限するために使用されないという了解の下に提出される。さらに、これまでの発明を実施するための形態において、本開示を簡素化する目的で、種々の特徴がまとめられる場合があるか、又は単一の実施形態において説明される場合がある。本開示は、特許請求される実施形態が、各請求項において明確に列挙されるより多くの特徴を必要とするという意図を反映すると解釈されるべきではない。むしろ、添付の特許請求の範囲が反映するように、発明の主題は、開示される実施形態のいずれかの実施形態の全ての特徴より少ない特徴を対象にする場合がある。したがって、添付の特許請求の範囲は発明を実施するための形態に組み込まれ、各請求項は、別々に特許請求される主題を規定するものとして自立している。
The Abstract of this Disclosure is provided in compliance with 37 CFR 1.72(b) and is submitted with the understanding that it will not be used to interpret or limit the scope or meaning of the claims. . Furthermore, in the preceding Detailed Description, various features may be grouped together or described in a single embodiment in order to simplify the disclosure. This disclosure is not to be interpreted as reflecting an intention that the claimed embodiments require more features than are expressly recited in each claim. Rather, as the appended claims reflect, inventive subject matter may be directed to less than all features of any one of the disclosed embodiments. Thus, the following claims are hereby incorporated into the Detailed Description, with each claim standing on its own as defining separately claimed subject matter.

Claims (10)

テスト対象システムと解析用のプロトコルアナライザとの間の高速階層型パケットベースのプロトコルに準拠するデータリンクを介したデータの通信中に、機能を損なうことなく、かつ前記解析で利用できる情報を失うことなく、インターポーザ回路のキャプチャバッファに格納される前記データの量を削減する方法であって、
前記データのデータ完全性チェックをリアルタイムに実行し、該データ完全性チェックにより、前記データが正しいことが示された場合、前記データのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)からの前記データ完全性チェックに対応するデータ完全性ビットを、前記キャプチャバッファに格納することから省くことと、
確認応答と否定応答(ACK/NACK)パケットを使用して、前記データの前記TLPの到着成功又は到着失敗を示すために、ACK/NACKの照合をリアルタイムに実行し、前記ACK/NACKパケットを、前記キャプチャバッファに格納することから省くことと、
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPから、リアルタイムにフィールドを削除、及び/又は、削減することと
を含む方法。
During the communication of data between the system under test and the protocol analyzer for analysis via a data link that conforms to a high-speed layered packet-based protocol, without loss of functionality and the loss of information available for said analysis. A method for reducing the amount of data stored in a capture buffer of an interposer circuit, comprising:
Perform a data integrity check of the data in real time, and if the data integrity check indicates that the data is correct, then omitting data integrity bits corresponding to the data integrity check from being stored in the capture buffer;
performing ACK/NACK matching in real time to indicate successful or failed arrival of the TLP of the data using acknowledgment and negative acknowledgment (ACK/NACK) packets; omitting from storing in the capture buffer;
deleting and/or reducing fields from the TLP and/or the DLLP of the data to be stored in the capture buffer in real time.
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPのペイロードを並列に圧縮することを更に含み、
前記データの前記TLP及び/又は前記DLLPのペイロードを圧縮することは、前記インターポーザ回路での前記TLP及び/又は前記DLLPのペイロードからシンボルを複数のシリアルレーンで受信することと、前記TLP及び/又は前記DLLPの前記ペイロードからの前記シンボルをクロックサイクルの各クロックに到着するワイドワードへとデスキューすることと、前記ワイドワードを入力ストリームに配列することであって、各入力ストリームは前記クロックサイクルの各クロックに到着する各ワイドワードの同位置からのシンボルを含むことと、前記配列されたデスキュー後のシンボルをハッシュテーブルを使用して圧縮することと、前記圧縮後のシンボルを前記キャプチャバッファに格納することとを含む、
請求項1に記載の方法。
further comprising compressing the payload of the TLP and/or the DLLP of the data to be stored in the capture buffer in parallel;
Compressing the TLP and/or DLLP payload of the data includes receiving symbols from the TLP and/or DLLP payload in a plurality of serial lanes at the interposer circuit, and compressing the TLP and/or DLLP payload of the data. deskewing the symbols from the payload of the DLLP into widewords arriving at each clock of a clock cycle; and arranging the widewords into input streams, each input stream arriving at each clock of the clock cycle. including symbols from the same position of each wideword arriving at a clock; compressing the arranged deskewed symbols using a hash table; and storing the compressed symbols in the capture buffer. including
The method according to claim 1.
前記データの前記データ完全性チェックをリアルタイムに実行することは、前記インターポーザ回路上の前記TLPと前記DLLPにおいて巡回冗長検査(CRC)をチェックし、前記インターポーザ回路上の前記TLPにおいてフレームパリティビットをチェックすることを含み、
前記データ完全性ビットを格納することから省くことは、誤りがないことを示す前記CRCのチェックサムを削除することであって、誤りを示す前記CRCのチェックサムを前記キャプチャバッファに格納することと、誤りがないことを示すフレームパリティビットを省くことであって、誤りを示すフレームパリティビットを前記キャプチャバッファに格納することとを含む、
請求項1に記載の方法。
Performing the data integrity check of the data in real time includes checking a cyclic redundancy check (CRC) in the TLP and the DLLP on the interposer circuit, and checking a frame parity bit in the TLP on the interposer circuit. including doing;
Omitting from storing the data integrity bits is removing a checksum of the CRC indicating no errors, and storing a checksum of the CRC indicating errors in the capture buffer. , omitting a frame parity bit indicating no error, and storing the frame parity bit indicating an error in the capture buffer;
The method according to claim 1.
前記ACK/NACKパケットはDLLPであり、
該ACK/NACK DLLPを格納する代わりに、前記TLPはそれぞれ、前記キャプチャバッファ内で付加されたメタデータを含み、前記メタデータは、それぞれの前記TLPのACK/NACKの状態を示す、請求項1に記載の方法。
The ACK/NACK packet is a DLLP,
2. Instead of storing the ACK/NACK DLLP, each of the TLPs includes metadata appended within the capture buffer, the metadata indicating the ACK/NACK status of the respective TLP. The method described in.
前記TLP及び/又は前記DLLPから前記フィールドを削除することは、固定値及び/又は空値を有する既知のフィールドを削除することであって、前記既知のフィールドは、ユーザインタフェースにおいて回復することと、前記TLP及び/又は前記DLLPのパケットフローの始点と終点を示すフレーミングトークンを削除することであって、前記フレーミングトークンは、より小さいシンボルに置き換えられるか、又は前記フレーミングトークンは削除されることと、前記ユーザインタフェースに入力された設定に基づき、必須ではないものとして特定されたフィールドを削除することとの1つ以上を含む、請求項1に記載の方法。 Deleting the field from the TLP and/or the DLLP is deleting a known field with a fixed value and/or a null value, the known field being restored at a user interface; deleting a framing token indicating a start and end point of a packet flow of the TLP and/or the DLLP, wherein the framing token is replaced with a smaller symbol or the framing token is deleted; 2. The method of claim 1, comprising one or more of: removing fields identified as non-essential based on settings entered into the user interface. 高速階層型パケットベースのプロトコルに準拠する高速データリンクを介して、テスト対象デバイス(DUT)からホストコンピュータまでの前記高速階層型パケットベースのプロトコルでのデータを解析するアナライザソフトウェアを実行するように構成されたユーザインタフェース(UI)コンピュータと、
前記DUTと前記ホストコンピュータとの間で送信される前記データを監視するために前記高速データリンクに接続されたインターポーザ回路であって、該インターポーザ回路は、前記DUTと前記ホストコンピュータとの間で送信される前記データを格納するキャプチャバッファを含み、前記UIコンピュータが前記アナライザソフトウェアで解析するためにアクセスできるインターポーザ回路と
を含み、前記インターポーザ回路は、
前記データのデータ完全性チェックをリアルタイムに実行し、前記データ完全性チェックにより、前記データが正しいことが示された場合には、前記データのトランザクション層パケット(TLP)及びデータリンク層パケット(DLLP)からの前記データ完全性チェックに対応するデータ完全性ビットを、前記キャプチャバッファに格納することから省くことと、
確認応答と否定応答(ACK/NACK)パケットを使用して、前記データの前記TLPの到着成功又は到着失敗を示すために、ACK/NACKの照合をリアルタイムに実行し、前記ACK/NACKパケットを、前記キャプチャバッファに格納することから省くことと、
前記キャプチャバッファに格納されるべき前記データの前記TLP及び/又は前記DLLPから、リアルタイムにフィールドを削除、及び/又は、削減することと
を実行するようにプログラムされているシステム。
configured to run analyzer software that analyzes data in the high-speed layered packet-based protocol from the device under test (DUT) to the host computer via a high-speed data link compliant with the high-speed layered packet-based protocol; a user interface (UI) computer;
an interposer circuit connected to the high speed data link to monitor the data transmitted between the DUT and the host computer, the interposer circuit configured to monitor the data transmitted between the DUT and the host computer; a capture buffer for storing the data to be accessed by the UI computer for analysis with the analyzer software, the interposer circuit comprising:
Performing a data integrity check of the data in real time, and if the data integrity check indicates that the data is correct, processing a transaction layer packet (TLP) and a data link layer packet (DLLP) of the data. omitting data integrity bits corresponding to the data integrity check from storing in the capture buffer;
performing ACK/NACK matching in real time to indicate successful or failed arrival of the TLP of the data using acknowledgment and negative acknowledgment (ACK/NACK) packets; omitting from storing in the capture buffer;
removing and/or reducing fields in real time from the TLP and/or the DLLP of the data to be stored in the capture buffer.
前記インターポーザ回路は、
前記インターポーザ回路上の前記TLPと前記DLLPにおいて巡回冗長検査(CRC)をチェックし、前記インターポーザ回路上の前記TLPにおいてフレームパリティビットをチェックすることで、前記データの前記データ完全性チェックをリアルタイムに実行することと、
誤りがないことを示す前記CRCのチェックサムを削除することであって、誤りを示す前記CRCのチェックサムを前記キャプチャバッファに格納することと、誤りがないことを示すフレームパリティビットを省くことであって、誤りを示すフレームパリティビットを前記キャプチャバッファに格納することとを実行することで、前記データ完全性ビットを格納することから省くことと
を実行するようプログラムされている、請求項6に記載のシステム。
The interposer circuit includes:
performing the data integrity check of the data in real time by checking a cyclic redundancy check (CRC) in the TLP on the interposer circuit and the DLLP and checking a frame parity bit in the TLP on the interposer circuit; to do and
Deleting a checksum of the CRC indicating that there is no error, storing the checksum of the CRC indicating an error in the capture buffer, and omitting a frame parity bit indicating that there is no error. and storing frame parity bits indicative of an error in the capture buffer, thereby omitting the data integrity bits from storage. The system described.
前記ACK/NACKパケットはDLLPであり、
該ACK/NACK DLLPを格納する代わりに、前記TLPはそれぞれ、前記キャプチャバッファ内で付加されたメタデータを含み、前記メタデータは、それぞれの前記TLPのACK/NACKの状態を示す、
請求項6に記載のシステム。
The ACK/NACK packet is a DLLP,
Instead of storing the ACK/NACK DLLP, each of the TLPs includes metadata appended within the capture buffer, the metadata indicating the ACK/NACK status of the respective TLP;
The system according to claim 6.
前記インターポーザ回路は、
固定値及び/又は空の値を有する既知のフィールドを削除することであって、該既知のフィールドは、ユーザインタフェースにおいて回復することと、
前記TLP及び/又は前記DLLPのパケットフローの始点と終点を示すフレーミングトークンを削除することであって、該フレーミングトークンは、より小さいシンボルに置き換えられるか、又は該フレーミングトークンは削除されることと、
前記ユーザインタフェースに入力された設定に基づき、必須ではないものとして特定されたフィールドを削除することと
のうちの1つ以上を実行することで、前記TLP及び/又は前記DLLPから前記フィールドを削除するようプログラムされている、請求項6に記載のシステム。
The interposer circuit includes:
deleting a known field with a fixed value and/or an empty value, the known field being restored in a user interface;
deleting a framing token indicating a start and end point of a packet flow of the TLP and/or the DLLP, wherein the framing token is replaced with a smaller symbol or the framing token is deleted;
removing said fields from said TLP and/or said DLLP by performing one or more of the following: removing fields identified as non-essential based on settings entered into said user interface; 7. The system of claim 6, wherein the system is programmed to:
前記インターポーザ回路は、前記TLPの様々なアドレスフィールドのサイズを削減することで、前記TLPから前記フィールドを削減するようプログラムされている、請求項6に記載のシステム。
7. The system of claim 6, wherein the interposer circuit is programmed to reduce the fields from the TLP by reducing the size of various address fields of the TLP.
JP2023074726A 2022-04-28 2023-04-28 Method and system for reducing data stored in capture buffer Pending JP2023164403A (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US202263336009P 2022-04-28 2022-04-28
US63/336,009 2022-04-28

Publications (1)

Publication Number Publication Date
JP2023164403A true JP2023164403A (en) 2023-11-10

Family

ID=88651511

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023074726A Pending JP2023164403A (en) 2022-04-28 2023-04-28 Method and system for reducing data stored in capture buffer

Country Status (1)

Country Link
JP (1) JP2023164403A (en)

Similar Documents

Publication Publication Date Title
US7538695B2 (en) System and method for deflate processing within a compression engine
US11483009B2 (en) Self-checking compression
US8704686B1 (en) High bandwidth compression to encoded data streams
US10187081B1 (en) Dictionary preload for data compression
CN110868222B (en) LZSS compressed data error code detection method and device
US11620051B2 (en) System and method for data compaction and security using multiple encoding algorithms
US8407378B2 (en) High-speed inline data compression inline with an eight byte data path
US10509771B2 (en) System and method for data storage, transfer, synchronization, and security using recursive encoding
US11868616B2 (en) System and method for low-distortion compaction of floating-point numbers
US11700013B2 (en) System and method for data compaction and security with extended functionality
US9362948B2 (en) System, method, and computer program product for saving and restoring a compression/decompression state
US12061794B2 (en) System and method for multiple pass data compaction utilizing delta encoding
CN114764407A (en) Method for near memory acceleration for accelerator and dictionary decoding
US11928335B2 (en) System and method for data compaction utilizing mismatch probability estimation
US9934234B2 (en) Adaptive rate compression hash processor
US12052098B2 (en) Method and system for reducing data stored in capture buffer
JP2023164403A (en) Method and system for reducing data stored in capture buffer
JP2024062398A (en) Method and system for decompressing wide word data stream compressed in parallel
US7071854B1 (en) Hardware-implemented LZW data decompression
DE102023212379A1 (en) METHOD AND SYSTEM FOR PERFORMING PARALLEL COMPRESSION OF A WIDEWORD DATA STREAM
US20230342206A1 (en) Hardware-based generation of uncompressed data blocks
US20240419327A1 (en) Data compaction utilizing delta encoding
CN114416350A (en) A decompression method, device, and readable storage medium