(57)【要約】 【課題】  ＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路等において、復号処理の高速化を実現する。【解決手段】  辞書４から読み出された単位データを遅延させる第１の遅延手段２と、データを選択する選択手段１０と、選択手段１０によって選択されたデータを遅延させる第２の遅延手段３とを備え、辞書４には、第２の遅延手段３からの遅延データが書き戻され、選択手段１０は、第１の遅延手段２からの遅延データと第２の遅延手段３からの遅延データとが入力され、辞書４の読出しアドレスと書込みアドレスとが遅延手段２及び４での遅延量に応じた所定の近さの範囲内にある場合には第２の遅延手段３からの遅延データを選択し、それ以外の場合には第１の遅延手段２からの遅延データを選択する。【選択図】  図５
2006332982.tif 000002
【特許請求の範囲】
【請求項１】
メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した前記単位データを前記辞書の別のアドレスに書き戻した後、次の前記単位データを読み出すことによってデータを復号するデコーダ回路において、
前記辞書から読み出された前記単位データを遅延させる第１の遅延手段と、
データを選択する選択手段と、
前記選択手段によって選択されたデータを遅延させる第２の遅延手段と
を備え、
前記辞書には、前記第２の遅延手段からの遅延データが書き戻され、
前記選択手段は、前記第１の遅延手段からの遅延データと前記第２の遅延手段からの遅延データとが供給され、前記辞書の書込みアドレスと読出しアドレスとが前記第１の遅延手段及び前記第２の遅延手段での遅延量に応じた所定の近さの範囲内にある場合には前記第２の遅延手段からの遅延データを選択し、それ以外の場合には前記第１の遅延手段からの遅延データを選択する
ことを特徴とするデコーダ回路。
【請求項２】
請求項１に記載のデコーダ回路において、
前記第１の遅延手段，前記第２の遅延手段は、それぞれデータを動作クロックの１周期分遅延させ、
前記選択手段は、前記書込みアドレスと前記読出しアドレスとが同じアドレスであるか、または前記書込みアドレスの次のアドレスと前記読出しアドレスとが同じである場合に、前記第２の遅延手段からの遅延データを選択し、それ以外の場合には前記第１の遅延手段からの遅延データを選択する
ことを特徴とするデコーダ回路。
【請求項３】
請求項２に記載のデコーダ回路において、前記第２の遅延手段からの遅延データがそのまま前記選択手段に供給されるとともに、第３の遅延手段によってさらに前記動作クロックの１周期分遅延されて前記選択手段に供給され、
前記選択手段は、
前記書込みアドレスと前記読出しアドレスとが同じアドレスである場合に、現在の書込みアドレスへのデータの書込みを許可する書込みイネーブル信号が供給されていれば、前記第２の遅延手段からそのまま供給される遅延データを選択し、現在の書込みアドレスの次のアドレスへのデータの書込みを許可する書込みイネーブル信号が供給されていれば、前記第３の遅延手段からの遅延データを選択し、
前記書込みアドレスの次のアドレスと前記読出しアドレスとが同じである場合に、現在の書込みアドレス及びその次のアドレスの両方へのデータの書込みを許可する書込みイネーブル信号が供給されていれば、前記第２の遅延手段からそのまま供給される遅延データを選択する
ことを特徴とするデコーダ回路。
【請求項４】
メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した前記単位データを前記辞書の別のアドレスに書き戻した後、次の前記単位データを読み出すことによってデータを復号するデコード方法において、
前記辞書から読み出された前記単位データを遅延させる第１のステップと、
データを選択する第２のステップと、
前記第２のステップによって選択されたデータを遅延させて前記辞書に書き戻す第３のステップと
を有し、
前記第２のステップでは、前記第１のステップによる遅延データと前記第３のステップによる遅延データとのうち、前記辞書の書込みアドレスと読出しアドレスとが前記第１のステップ及び前記第３のステップによる遅延量に応じた所定の近さの範囲内にある場合には前記第３のステップによる遅延データを選択し、それ以外の場合には前記第１のステップによる遅延データを選択する
ことを特徴とするデコード方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路に関し、特に、復号処理の高速化を図ったものに関する。
【背景技術】
【０００２】
辞書型のデータ圧縮アルゴリズムの一種として、ＬＺ（Lempel-Ziv）７７法が存在している。ＬＺ７７法は、例えばＡＩＴフォーマット，Ｓ−ＡＩＴフォーマットまたはＬＴＯフォーマットのテープドライブ内のＡＬＤＣ（Adaptive Lossless Data Compression）エンコーダ・ＡＬＤＣデコーダなど、各種のデータ記録装置内のデータ圧縮・復号回路に採用されている（例えば、特許文献１参照。）。
【０００３】
ＬＺ７７法の圧縮原理は、過去に入力された文字列（データ列）のうちの直近の所定サイズの文字列を辞書（ヒストリ・バッファ）に登録し、新たに入力された（すなわち、圧縮しようとする）文字列と一致する文字列をその辞書から検索して、当該新たに入力された文字列をその一致する文字列のアドレス情報で置き換えるというものである。この辞書は、静的なものではなく、圧縮が進むにつれて、今まさに圧縮しようとする文字列の直前の文字列を追加して古い文字列を除外するようにアップデートされるので、スライド辞書とも呼ばれる。
【０００４】
図７は、この圧縮の様子を例示する図である。通常は辞書のサイズは５１２バイト，１０２４バイトまたは２０４８バイトであることが多いが、ここでは説明の都合上１６バイトとしている。過去に入力された文字列のうちの直近の１６文字の文字列「ＡＢＣＣＡＢ…ＢＣＣ」（各文字Ａ，Ｂ，Ｃは１バイト）が辞書として登録されている。１６バイト前に入力された文字「Ａ」にはアドレス０が付与されており、１５バイト前に入力された文字「Ｂ」にはアドレス１が付与されており、１バイト前に入力された文字「Ｃ」にはアドレス１５が付与されている。
【０００５】
例えば、新たに入力された文字列が「ＡＢＣＡ」である場合には、検索の結果、辞書内のアドレス９〜１２の文字列が「ＡＢＣＡ」と一致する。そこで、この場合には、検索結果を示す情報であるマッチアドレス（一致する文字列の最後のアドレスとして定義されるアドレス）として１２を出力する。そして、最終的には、この文字列「ＡＢＣＡ」を、一致長４及び先頭アドレス９を示す符号語（Copy Pointer，Match Count＝４，Match Address＝９）に変換することにより、４バイトから２バイトに圧縮する。
【０００６】
このようにして圧縮されたデータを復号するときには、逆に、この辞書を参照して、符号語（Copy Pointer，Match Count＝４，Match Address＝９）を文字列「ＡＢＣＡ」に変換する。その際、圧縮時の辞書のアップデートに対する逆の処理として、復号が進むにつれて、辞書の文字を書き換えることによって、圧縮時に使用した辞書を復元していく。
【０００７】
図８〜図１２は、この復号の様子を、図７に示した辞書と関連させて経時的に示す図である。まず、図８に示すように、読出しアドレスｒａｄｒとして辞書のアドレス９（符号語が示すMatch Address＝９）を指定するとともに、書込みアドレスｗａｄｒとして辞書のアドレス２を指定する。そして、図９に示すように、アドレス９から文字「Ａ」を読み出し、この文字「Ａ」をアドレス２に書き戻した後、読出しアドレスｒａｄｒ，書込みアドレスｗａｄｒとしてそれぞれアドレス１０，３を指定する。
【０００８】
続いて、図１０に示すように、アドレス１０から文字「Ｂ」を読み出し、この文字「Ｂ」をアドレス３に書き戻した後、読出しアドレスｒａｄｒ，書込みアドレスｗａｄｒとしてそれぞれアドレス１１，４を指定する。
【０００９】
続いて、図１１に示すように、アドレス１１から文字「Ｃ」を読み出し、この文字「Ｃ」をアドレス４に書き戻した後、読出しアドレスｒａｄｒ，書込みアドレスｗａｄｒとしてそれぞれアドレス１２，５を指定する。
【００１０】
続いて、図１２に示すように、アドレス１２から文字「Ａ」を読み出し、この文字「Ａ」をアドレス５に書き戻した後、読出しアドレスｒａｄｒ，書込みアドレスｗａｄｒとしてそれぞれアドレス１３，６を指定する。
【００１１】
このように、符号語（Copy Pointer，Match Count＝４，Match Address＝９）に基づき、辞書からデータを１文字（単位データ）ずつ読み出し、読み出した文字を辞書の別のアドレスに書き戻した後、次の１文字を読み出すことにより、文字列「ＡＢＣＡ」を復号する。
【００１２】
従来、このＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路では、読み出した単位データを、動作クロックの１周期で辞書に書き戻すようになっていた。
【００１３】
【特許文献１】国際公開番号Ｗ０２００３／０３２２９６の再公表特許公報（第１２〜１３頁、第３図、第４図）
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかし、この従来のデコーダ回路は、次のような理由から、復号処理を高速化するのに不向きであった。すなわち、例えば０．１１μｍＣＭＯＳプロセスを採用したＡＳＩＣ（特定用途向けＬＳＩ）上でデコーダ回路を設計し、このＡＳＩＣ上のＳＲＡＭに辞書を格納するようにした場合、辞書が５１２バイト，１０２４バイトまたは２０４８バイトのような大きなサイズであると、ＳＲＡＭに対してデータの読出し及び書戻しを行うのに２ナノ秒程度の時間がかかる。この動作は、例えばフリップ・フロップが０．３ナノ秒程度で動作するのと比較して低速である。
【００１５】
さらに、このようにサイズの大きい辞書を格納するＳＲＡＭは、ＬＳＩチップ上で占める面積が大きくなり、コントローラの近くに配置することが困難になるので、コントローラとの間の配線が長くなる。このことも、ＳＲＡＭの動作速度の低下につながる。
【００１６】
このようにＳＲＡＭの動作が低速であることから、辞書から読み出したデータを１クロック周期で辞書に書き戻すようにすると、クロック周期を長くとらなければならない。そのため、高速化に不向きであった。
【００１７】
本発明は、上述の点に鑑み、ＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路のように、辞書からデータを単位データずつ読み出し、読み出した単位データを辞書の別のアドレスに書き戻した後、次の単位データを読み出すことによってデータを復号するデコーダ回路において、復号処理の高速化を実現することを課題としてなされたものである。
【課題を解決するための手段】
【００１８】
この課題を解決するために、本発明に係るデコーダ回路は、メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した単位データをこの辞書の別のアドレスに書き戻した後、次の単位データを読み出すことによってデータを復号するデコーダ回路において、この辞書から読み出された単位データを遅延させる第１の遅延手段と、データを選択する選択手段と、この選択手段によって選択されたデータを遅延させる第２の遅延手段とを備え、この辞書には、この第２の遅延手段からの遅延データが書き戻され、この選択手段は、この第１の遅延手段からの遅延データとこの第２の遅延手段からの遅延データとが供給され、この辞書の書込みアドレスと読出しアドレスとがこれらの第１及び第２の遅延手段での遅延量に応じた所定の近さの範囲内にある場合にはこの第２の遅延手段からの遅延データを選択し、それ以外の場合にはこの第１の遅延手段からの遅延データを選択することを特徴とする。
【００１９】
このデコーダ回路では、辞書から読み出された単位データが、第１の遅延手段によって遅延されて、選択手段に供給される。また、この選択手段で選択されたデータが、第２の遅延手段によって遅延されて、辞書に書き戻されるとともに選択手段に供給される。
【００２０】
辞書から読み出されたデータが辞書に書き戻されるタイミングが第１及び第２の遅延手段での遅延量分遅れる関係で、辞書の書込みアドレスの近傍のアドレスが読出しアドレスとして指定されている場合には、その読出しアドレスから単位データを読み出した後、その読み出したデータを書き戻す前に、その読出しアドレスのデータが書き換わる（先に読み出したデータがその読み出しアドレスに書き戻される）可能性がある。
【００２１】
そして、このようにデータが書き換わるときには、その読出しアドレスから読み出したデータではなく、この書き換わる新しいデータのほうを書き戻さなければ、辞書を正確に復元することができない。
【００２２】
そこで、選択手段では、辞書の書込みアドレスと読出しアドレスとが第１及び第２の遅延手段での遅延量に応じた所定の近さの範囲内にある場合（すなわち、書込みアドレスの近傍が読出しアドレスとして指定されており、その読出しアドレスのデータが書き換わる可能性がある場合）には、第２の遅延手段からの遅延データが選択される。その結果、辞書から読み出されたデータが、第２の遅延手段からの遅延データにすり替えられて、辞書に書き戻される。
【００２３】
この第２の遅延手段からの遅延データは、先に辞書から読み出したデータ、すなわち、その読出しアドレスに書き戻されるデータ（書き換わる新しいデータ）である。これにより、書き換わる新しいデータのほうが書き戻されるので、辞書が正確に復元される。
【００２４】
他方、それ以外の場合には、選択手段では、第１の遅延手段からの遅延データが選択される。その結果、辞書から読み出されたデータが、単に第１及び第２の遅延手段によって遅延された後、辞書に書き戻される。
【００２５】
このように、このデコーダ回路によれば、辞書から読み出したデータを遅延させて辞書に書き戻し、且つ、書込みアドレスの近傍が読出しアドレスとして指定されている場合にも、辞書を正確に復元することができる。
【００２６】
そして、辞書から読み出されたデータを第１の遅延手段によって遅延させて選択手段に供給するので、辞書を格納したメモリの動作が低速であっても、第１の遅延手段でタイミングマージンをとることができる。その結果、選択手段には高速にデータを供給することができるので、選択手段から高速にデータを出力させることができる。これにより、パイプライン処理による復号処理の高速化を実現することができる。
【００２７】
次に、本発明に係るデコード方法は、メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した単位データをこの辞書の別のアドレスに書き戻した後、次の単位データを読み出すことによってデータを復号するデコード方法において、この辞書から読み出された単位データを遅延させる第１のステップと、データを選択する第２のステップと、この第２のステップによって選択されたデータを遅延させてこの辞書に書き戻す第３のステップとを有し、この第２のステップでは、この第１のステップによる遅延データとこの第３のステップによる遅延データとのうち、この辞書の書込みアドレスと読出しアドレスとがこの第１及び第３のステップによる遅延量に応じた所定の近さの範囲内にある場合には第３のステップによる遅延データを選択し、それ以外の場合には第１のステップによる遅延データを選択することを特徴とする。
【００２８】
この文字列検索方法によれば、前述の、本発明に係るデコーダ回路について述べたのと全く同様にして、書込みアドレスの近傍が読出しアドレスとして指定されている場合にも辞書を正確に復元しつつ、パイプライン処理による復号処理の高速化を実現することができる。
【発明の効果】
【００２９】
本発明によれば、メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した単位データをこの辞書の別のアドレスに書き戻した後、次の単位データを読み出すことによってデータを復号するデコーダ回路において、書込みアドレスの近傍が読出しアドレスとして指定されている場合にも辞書を正確に復元しつつ、パイプライン処理による復号処理の高速化を実現することができるという効果が得られる。
【発明を実施するための最良の形態】
【００３０】
以下、ＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路に本発明を適用した例について、図面を用いて具体的に説明する。
【００３１】
最初に、辞書から読み出した文字をフリップ・フロップによって動作クロックの２周期分遅延させて辞書に書き戻し、且つ、書込みアドレスの近傍が読出しアドレスとして指定されている場合に、辞書から読み出されたデータをフリップ・フロップのデータですり替えるアルゴリズムについて説明する。
【００３２】
図１は、こうしたアルゴリズムを採用したデコーダ回路の構成を示すブロック図である。このデコーダ回路には、組み合わせ論理回路１と、８ビットのレジスタ２及び３とが設けられている。レジスタ２，３は、それぞれ８個のＤ型フリップ・フロップを並列に配置することによって構成されている。
【００３３】
ＳＲＡＭ４には、図８に例示したような辞書（ヒストリ・バッファ）が格納されている。図示しないコントローラからは、読出しアドレスｒａｄｒと、書込みアドレスｗａｄｒと、現在のクロック周期についての書込みイネーブル信号ｗｅｎとが供給される。
【００３４】
この辞書からは、書込みイネーブル信号ｗｅｎが‘１’となったクロック周期に、読出しアドレスｒａｄｒとして指定されたアドレスから、図８に例示したようにして文字（１バイトのデータ）が読み出される。辞書から読み出されたこのデータｈｂｄａｔは、組み合わせ論理回路１に供給される。
【００３５】
組み合わせ論理回路１には、後述するレジスタ２の出力ｎｅｘｔ＿ｗｄａｔ及びレジスタ３の出力ｗｄａｔも供給される。
【００３６】
また、前述のコントローラからは、この組み合わせ論理回路１に、読出しアドレスｒａｄｒと、書込みアドレスｗａｄｒと、書込みイネーブル信号ｗｅｎと、次のクロック周期についての書込みイネーブル信号ｎｅｘｔ＿ｗｅｎとが供給される。
【００３７】
組み合わせ論理回路１は、読出しアドレスｒａｄｒ，書込みアドレスｗａｄｒ，書込みイネーブル信号ｎｅｘｔ＿ｗｅｎ及びｗｅｎの内容に基づき、辞書から読み出されたデータｈｂｄａｔと、レジスタ２の出力ｎｅｘｔ＿ｗｄａｔと、レジスタ３の出力ｗｄａｔとのうちのいずれか１つを、辞書から読み出したデータｒｄａｔとして選択して出力する回路である。
【００３８】
図２は、この組み合わせ論理回路１の構成をハードウェア回路として描いたブロック図である。３入力１出力のマルチプレクサ５と、２入力１出力のマルチプレクサ６と、３入力１出力のマルチプレクサ７とが設けられている。
【００３９】
マルチプレクサ５の入力端Ｓ１，Ｓ２，Ｓ３には、ｗｄａｔ，ｎｅｘｔ＿ｗｄａｔ，ｈｂｄａｔがそれぞれ供給される。マルチプレクサ５の選択制御端子Ｃ１，Ｃ２には、それぞれｗｅｎ，ｎｅｘｔ＿ｗｅｎが供給される。
【００４０】
マルチプレクサ５は、ｗｅｎ＝‘１’の場合には、入力端Ｓ１に供給されたｗｄａｔを選択して出力端Ｄから出力し、ｗｅｎ＝‘０’であるがｎｅｘｔ＿ｗｅｎ＝‘１’の場合には、入力端Ｓ２に供給されたｎｅｘｔ＿ｗｄａｔを選択して出力端Ｄから出力し、それ以外の場合には、入力端Ｓ３に供給されたｈｂｄａｔを選択して出力端Ｄから出力する。
【００４１】
マルチプレクサ６の入力端Ｓ１，Ｓ２には、ｎｅｘｔ＿ｗｄａｔ，ｈｂｄａｔがそれぞれ供給される。マルチプレクサ６の選択制御端子Ｃには、図示しないアンド回路から、ｗｅｎとｎｅｘｔ＿ｗｅｎとの論理積を示す信号が供給される。
【００４２】
マルチプレクサ６は、ｗｅｎとｎｅｘｔ＿ｗｅｎとの論理積が‘１’の場合（現在のクロック周期，次のクロック周期の両方について書込みが許可されている場合）には、供給さ端Ｓ１に供給されたｎｅｘｔ＿ｗｄａｔを選択して出力端Ｄから出力し、それ以外の場合には、入力端Ｓ２に供給されたｈｂｄａｔを選択して出力端Ｄから出力する。
【００４３】
マルチプレクサ７の入力端Ｓ１，Ｓ２，Ｓ３には、マルチプレクサ５の出力，マルチプレクサ６の出力，ｈｂｄａｔがそれぞれ供給される。マルチプレクサ７の選択制御端子Ｃ１，Ｃ２には、それぞれｒａｄｒ，ｗａｄｒが供給される。
【００４４】
マルチプレクサ７は、ｒａｄｒとｗａｄｒとが一致する場合には、入力端Ｓ１に供給されたマルチプレクサ５の出力を選択して出力端Ｄからｒｄａｔとして出力し、ｒａｄｒとｗａｄｒ＋１（書込みアドレスの次のアドレス）とが一致する場合には、入力端Ｓ２に供給されたマルチプレクサ６の出力を選択して出力端Ｄからｒｄａｔとして出力し、それ以外の場合には、入力端Ｓ３に供給されたｈｂｄａｔを選択して出力端Ｄからｒｄａｔとして出力する。
【００４５】
なお、図１の組み合わせ論理回路１のブロック内には、この組み合わせ論理回路１をＡＳＩＣ（特定用途向けＬＳＩ）やプログラマブル・ロジック・デバイス（ＦＰＧＡ等）として設計する場合のロジックを、ハードウェア記述言語の一種であるVerilog  ＨＤＬを表記している。
【００４６】
図１に示すように、組み合わせ論理回路１から出力されたデータｒｄａｔは、レジスタ２に供給される。レジスタ２からは、このデータｒｄａｔを１クロック周期遅延させたデータｒｄａｔ＿ｄ（次のクロック周期に辞書に書き戻すデータであるｎｅｘｔ＿ｗｄａｔ）が出力される、このデータｎｅｘｔ＿ｗｄａｔは、レジスタ３に供給されるとともに、前述のように組み合わせ論理回路１に供給される。
【００４７】
レジスタ３からは、このデータｎｅｘｔ＿ｗｄａｔを１クロック周期遅延させたデータｗｄａｔ（現在のクロック周期に辞書に書き戻すデータ）が出力される、このデータｗｄａｔは、ＳＲＡＭ４に供給されるとともに、前述のように組み合わせ論理回路１に供給される。
【００４８】
ＳＲＡＭ４内の辞書には、書込みイネーブル信号ｗｅｎが‘１’となったクロック周期に、書込みアドレスｗａｄｒとして指定されたアドレスに、このデータｗｄａｔが書き込まれる。
【００４９】
図３及び図４は、この図１のデコーダ回路において、辞書から読み出されたデータをフリップ・フロップ（レジスタ２またはレジスタ３）からの遅延データにすり替えて辞書に書き戻す場合を示す図である。
【００５０】
辞書から読み出されたデータが辞書に書き戻されるタイミングがレジスタ２及び３での遅延量である２クロック周期分遅れる関係で、書込みアドレスｗａｄｒと同じアドレスが読出しアドレスｒａｄｒとして指定されている場合や、書込みアドレスｗａｄｒの次のアドレスが読出しアドレスｒａｄｒとして指定されている場合には、その読出しアドレスから文字を読み出した後、その読み出した文字を書き戻す前に、その読出しアドレスの文字が書き換わる（先に読み出した文字がその読み出しアドレスに書き戻される）可能性がある。
【００５１】
そして、このようにデータが書き換わるときには、その読出しアドレスから読み出した文字ではなく、この書き換わる新しい文字のほうを書き戻さなければ、辞書を正確に復元することができない。
【００５２】
図３は、書込みアドレスｗａｄｒと同じアドレスが読出しアドレスｒａｄｒとして指定されている場合を例示している。この例の場合には、読出しアドレスｒａｄｒとして指定されたアドレス２から文字「Ｃ」を読み出した後、その文字「Ｃ」を辞書に書き戻す前に、アドレス２の文字が書き換わる（先に読み出したアドレス０の文字「Ａ」またはアドレス１の文字「Ｂ」がアドレス２に書き戻される）可能性がある。
【００５３】
すなわち、現在のクロック周期についての書込みイネーブル信号ｗｅｎが‘１’であれば、２クロック周期前に読み出したアドレス０の文字「Ａ」がアドレス２に書き戻されるので、アドレス２の文字が「Ａ」に書き換わる。したがって、この場合には、アドレス２から読み出した文字「Ｃ」ではなく、この書き換わる新しい文字「Ａ」のほうを書き戻さなければ、辞書を正確に復元することができない。
【００５４】
そして、この場合には、図１の組み合わせ論理回路１では、ｒａｄｒとｗａｄｒとが一致し、且つｗｅｎ＝‘１’であることから、レジスタ３の出力ｗｄａｔが選択されてｒｄａｔとして出力される（図２のブロック図では、ｗｅｎ＝‘１’であることからマルチプレクサ５でｗｄａｔが選択されてマルチプレクサ７に供給され、ｒａｄｒとｗａｄｒとが一致することからマルチプレクサ７でこのｗｄａｔが選択されてｒｄａｔとして出力される）。その結果、辞書から読み出されたデータｈｂｄａｔが、レジスタ３の出力ｗｄａｔにすり替えられて、辞書に書き戻される。
【００５５】
レジスタ３の出力ｗｄａｔは、２クロック周期前に図３の辞書のアドレス０から読み出した文字「Ａ」であり、したがって、アドレス２に書き戻されるデータ（書き換わる新しい文字）である。これにより、書き換わる新しい文字「Ａ」のほうが書き戻されるので、辞書が正確に復元される。
【００５６】
また、図３の例において、書込みイネーブル信号ｗｅｎは‘０’であるが次のクロック周期についての書込みイネーブル信号ｎｅｘｔ＿ｗｅｎが‘１’であれば、１クロック周期前に読み出したアドレス１の文字「Ｂ」がアドレス２に書き戻されるので、アドレス２の文字が「Ｂ」に書き換わる。したがって、この場合には、アドレス２から読み出した文字「Ｃ」ではなく、この書き換わる新しい文字「Ｂ」のほうを書き戻さなければ、辞書を正確に復元することができない。
【００５７】
そして、この場合には、図１の組み合わせ論理回路１では、ｒａｄｒとｗａｄｒ＋１とが一致し、且つｎｅｘｔ＿ｗｅｎ＝‘１’であることから、レジスタ２の出力ｎｅｘｔ＿ｗｄａｔが選択されてｒｄａｔとして出力される（図２のブロック図では、ｎｅｘｔ＿ｗｅｎ＝‘１’であることからマルチプレクサ５でｎｅｘｔ＿ｗｄａｔが選択されてマルチプレクサ７に供給され、ｒａｄｒとｗａｄｒとが一致することからマルチプレクサ７でこのｎｅｘｔ＿ｗｄａｔが選択されてｒｄａｔとして出力される）。その結果、辞書から読み出されたデータｈｂｄａｔが、レジスタ２の出力ｎｅｘｔ＿ｗｄａｔにすり替えられて、辞書に書き戻される。
【００５８】
レジスタ２の出力ｎｅｘｔ＿ｗｄａｔは、１クロック周期前に図３の辞書のアドレス１から読み出した文字「Ｂ」であり、したがって、アドレス２に書き戻されるデータ（書き換わる新しい文字）である。これにより、書き換わる新しい文字「Ｂ」のほうが書き戻されるので、辞書が正確に復元される。
【００５９】
他方、図４は、書込みアドレスｗａｄｒの次のアドレスが読出しアドレスｒａｄｒとして指定されている場合を例示している。この例の場合には、読出しアドレスｒａｄｒとして指定されたアドレス３から文字「Ｃ」を読み出した後、その文字「Ｃ」を辞書に書き戻す前に、アドレス３の文字が書き換わる（先に読み出したアドレス２の文字「Ｃ」がアドレス３に書き戻される）可能性がある。
【００６０】
すなわち、現在のクロック周期についての書込みイネーブル信号ｗｅｎが‘１’であり且つ次のクロック周期についての書込みイネーブル信号ｎｅｘｔ＿ｗｅｎが‘１’であれば、２クロック周期前に読み出したアドレス１の文字「Ｂ」がアドレス２に書き戻されるとともに、１クロック周期前に読み出したアドレス２の文字「Ｃ」がアドレス３に書き戻される。この例の場合には偶然アドレス２とアドレス３とが同じ文字なのでアドレス３の文字は書き換わらないが、多くの場合にはアドレス３が別の文字に書き換わるので、その書き換わる新しい文字のほうを書き戻さなければ、辞書を正確に復元することができない。
【００６１】
そして、この場合には、図１の組み合わせ論理回路１では、ｒａｄｒとｗａｄｒ＋１とが一致し、且つｗｅｎとｎｅｘｔ＿ｗｅｎとの論理積が‘１’であることから、レジスタ２の出力ｎｅｘｔ＿ｗｄａｔが選択されてｒｄａｔとして出力される（図２のブロック図では、ｗｅｎとｎｅｘｔ＿ｗｅｎとの論理積が‘１’であることからマルチプレクサ６でｎｅｘｔ＿ｗｄａｔが選択されてマルチプレクサ７に供給され、ｒａｄｒとｗａｄｒ＋１とが一致することからマルチプレクサ７でこのｎｅｘｔ＿ｗｄａｔが選択されてｒｄａｔとして出力される）。その結果、辞書から読み出されたデータｈｂｄａｔが、レジスタ２の出力ｎｅｘｔ＿ｗｄａｔにすり替えられて、辞書に書き戻される。
【００６２】
レジスタ２の出力ｎｅｘｔ＿ｗｄａｔは、１クロック周期前に図４の辞書のアドレス２から読み出した文字であり、したがって、アドレス３に書き戻される文字（多くの場合には、アドレス２とアドレス３とは別の文字なので、書き換わる新しい文字）である。これにより、書き換わる新しい文字のほうが書き戻されるので、辞書が正確に復元される。
【００６３】
以上に図３，図４を用いて説明した３つの場合以外の場合には、図１の組み合わせ論理回路１では、辞書から読み出されたデータｈｂｄａｔが選択されてｒｄａｔとして出力される（図２のブロック図では、マルチプレクサ７でｈｂｄａｔが選択されてｒｄａｔとして出力される）。その結果、辞書から読み出されたデータｈｂｄａｔが、単にレジスタ２及びレジスタ３によって２クロック周期分遅延された後、辞書に書き戻される。
【００６４】
このように、図１のデコーダ回路によれば、辞書から読み出したデータを２クロック周期分遅延させて辞書に書き戻し、且つ、書込みアドレスｗａｄｒの近傍が読出しアドレスｒａｄｒとして指定されている場合にも、辞書を正確に復元することができる。
【００６５】
ただし、図１のデコーダ回路では、ＳＲＡＭ４の動作がフリップ・フロップ（レジスタ２やレジスタ３）と比較して低速であることから、ＳＲＡＭ４から組み合わせ論理回路１にデータｈｂｄａｔを高速に供給することができない。そのため、組み合わせ論理回路１から高速にデータｒｄａｔを出力させることができないので、復号処理の高速化は困難である。
【００６６】
そこで、本発明によるデコーダ回路は、図１のデコーダ回路におけるように、辞書から読み出されたデータをフリップ・フロップのデータですり替えるアルゴリズムを採用し、且つ、パイプライン処理を最適化するように構成されている。図５は、この本発明によるデコーダ回路の構成を示すブロック図である。このデコーダ回路のうち、レジスタ２，レジスタ３及びＳＲＡＭ４は、図１に示したのと同一のものであり、重複説明を省略する。
【００６７】
このデコーダ回路には、図１に示した組み合わせ論理回路１が設けられておらず、その代わりに、レジスタ２とレジスタ３との間に組み合わせ論理回路１０が設けられている。
【００６８】
辞書から読み出されたこのデータｈｂｄａｔは、レジスタ２に供給される。レジスタ２からは、このデータｈｂｄａｔを１クロック周期遅延させたデータｈｂｄａｔ＿ｄが出力される、このデータｈｂｄａｔ＿ｄは、組み合わせ論理回路１０に供給される。
【００６９】
組み合わせ論理回路１０には、レジスタ３の出力ｗｄａｔがそのまま供給されるとともに、レジスタ３の出力ｗｄａｔをさらに１クロック周期遅延させたレジスタ９の出力ｗｄａｔ＿ｄが供給される。
【００７０】
また、読出しアドレスｒａｄｒと、書込みアドレスｗａｄｒと、書込みイネーブル信号ｎｅｘｔ＿ｗｅｎ，ｗｅｎをそれぞれ図示しないフリップ・フロップで１クロック周期遅延させたｗｅｎ，ｗｅｎ＿ｄとが組み合わせ論理回路１０に供給される。
【００７１】
組み合わせ論理回路１０は、ｒａｄｒ，ｗａｄｒ，ｗｅｎ及びｗｅｎ＿ｄの内容に基づき、データｈｂｄａｔ＿ｄと、ｗｄａｔと、ｗｄａｔ＿ｄとのうちのいずれか１つを、辞書から読み出したデータｒｄａｔ＿ｄとして選択して出力する回路である。
【００７２】
図６は、この組み合わせ論理回路１０の構成をハードウェア回路として描いたブロック図である。３入力１出力のマルチプレクサ１１と、２入力１出力のマルチプレクサ１２と、３入力１出力のマルチプレクサ１３とが設けられている。
【００７３】
マルチプレクサ１１の入力端Ｓ１，Ｓ２，Ｓ３には、ｗｄａｔ＿ｄ，ｗｄａｔ，ｈｂｄａｔ＿ｄがそれぞれ供給される。マルチプレクサ５の選択制御端子Ｃ１，Ｃ２には、それぞれｗｅｎ＿ｄ，ｗｅｎが供給される。
【００７４】
マルチプレクサ１１は、ｗｅｎ＿ｄ＝‘１’の場合には、入力端Ｓ１に供給されたｗｄａｔ＿ｄを選択して出力端Ｄから出力し、ｗｅｎ＿ｄ＝‘０’であるがｗｅｎ＝‘１’の場合には、入力端Ｓ２に供給されたｗｄａｔを選択して出力端Ｄから出力し、それ以外の場合には、入力端Ｓ３に供給されたｈｂｄａｔ＿ｄを選択して出力端Ｄから出力する。
【００７５】
マルチプレクサ１２の入力端Ｓ１，Ｓ２には、ｗｄａｔ，ｈｂｄａｔ＿ｄがそれぞれ供給される。マルチプレクサ１２の選択制御端子Ｃには、図示しないアンド回路から、ｗｅｎ＿ｄとｗｅｎとの論理積を示す信号が供給される。
【００７６】
マルチプレクサ１２は、ｗｅｎ＿ｄとｗｅｎとの論理積が‘１’の場合には、入力端Ｓ１に供給されたｗｄａｔを選択して出力端Ｄから出力し、それ以外の場合には、入力端Ｓ２に供給されたｈｂｄａｔ＿ｄを選択して出力端Ｄから出力する。
【００７７】
マルチプレクサ１３の入力端Ｓ１，Ｓ２，Ｓ３には、マルチプレクサ１１の出力，マルチプレクサ１２の出力，ｈｂｄａｔ＿ｄがそれぞれ供給される。マルチプレクサ１３の選択制御端子Ｃ１，Ｃ２には、それぞれｒａｄｒ，ｗａｄｒが供給される。
【００７８】
マルチプレクサ１３は、ｒａｄｒとｗａｄｒとが一致する場合には、入力端Ｓ１に供給されたマルチプレクサ１１の出力を選択して出力端Ｄからｒｄａｔ＿ｄとして出力し、ｒａｄｒとｗａｄｒ＋１（書込みアドレスの次のアドレス）とが一致する場合には、入力端Ｓ２に供給されたマルチプレクサ１２の出力を選択して出力端Ｄからｒｄａｔ＿ｄとして出力し、それ以外の場合には、入力端Ｓ３に供給されたｈｂｄａｔ＿ｄを選択して出力端Ｄからｒｄａｔ＿ｄとして出力する。
【００７９】
なお、図５の組み合わせ論理回路１０のブロック内には、この組み合わせ論理回路１０をＡＳＩＣ（特定用途向けＬＳＩ）やプログラマブル・ロジック・デバイス（ＦＰＧＡ等）として設計する場合のロジックを、ハードウェア記述言語の一種であるVerilog  ＨＤＬを表記している。
【００８０】
図５に示すように、組み合わせ論理回路１０から出力されたデータｒｄａｔ＿ｄは、レジスタ３に供給される。レジスタ３からは、このデータｒｄａｔ＿ｄを１クロック周期遅延させたデータｗｄａｔ（現在のクロック周期に辞書に書き戻すデータ）が出力される、このデータｗｄａｔは、ＳＲＡＭ４に供給されるとともに、前述のように組み合わせ論理回路１及びレジスタ９に供給される。
【００８１】
この図５のデコーダ回路によれば、図１のデコーダ回路について図３及び図４を用いて説明したのと全く同様にして、辞書から読み出したデータを２クロック周期分遅延させて辞書に書き戻し、且つ、書込みアドレスｗａｄｒの近傍が読出しアドレスｒａｄｒとして指定されている場合（書込みアドレスｗａｄｒと同じアドレスまたは書込みアドレスｗａｄｒの次のアドレスが読出しアドレスｒａｄｒとして指定されている場合）にも、辞書を正確に復元することができる。
【００８２】
そして、辞書から読み出されたデータをレジスタ２によって１クロック周期分遅延させて組み合わせ論理回路１０に供給するので、ＳＲＡＭ４の動作が低速であっても、レジスタ２でタイミングマージンをとることができる。その結果、組み合わせ論理回路１０には高速にデータを供給することができるので、組み合わせ論理回路１０から高速にデータｒｄａｔ＿ｄを出力させることができる。これにより、パイプライン処理による復号処理の高速化を実現することができる。
【００８３】
なお、以上の例では、辞書から読み出した文字を２クロック周期分遅延させて辞書に書き戻し、且つ、書込みアドレスの近傍が読出しアドレスとして指定されている場合に、辞書から読み出されたデータをフリップ・フロップのデータですり替える例について説明した。しかし、これに限らず、辞書から読み出した文字を３クロック周期分以上遅延させて辞書に書き戻し、且つ、書込みアドレスの近傍が読出しアドレスとして指定されている場合に、辞書から読み出されたデータをフリップ・フロップのデータですり替えるようにしてもよい。
【００８４】
また、以上の例では、ＬＺ７７法を採用して圧縮したデータを復号するデコーダ回路に本発明を適用した例について説明した。しかし、本発明は、これに限らず、メモリに格納された辞書から所定の単位データずつデータを読み出し、読み出した単位データをこの辞書の別のアドレスに書き戻した後、次の単位データを読み出すことによってデータを復号するようにしたあらゆるデコーダ回路において、復号処理の高速化のために適用することができる。
【図面の簡単な説明】
【００８５】
【図１】辞書から読み出されたデータをフリップ・フロップのデータですり替えるデコーダ回路の構成を示すブロック図である。
【図２】図１の組み合わせ論理回路１ハードウェア構成を示すブロック図である。本発明を適用した文字列検索回路の構成を示すブロック図である。
【図３】図１のデコーダ回路において、辞書から読み出されたデータをフリップ・フロップですり替えて辞書に書き戻す場合を示す図である。図２の文字列検索回路をハードウェア記述言語を用いて表記した図である。
【図４】図１のデコーダ回路において、辞書から読み出されたデータをフリップ・フロップですり替えて辞書に書き戻す場合を示す図である。
【図５】本発明のデコーダ回路の構成を示すブロック図である。
【図６】図５の組み合わせ論理回路のハードウェア構成を示すブロック図である。
【図７】辞書を利用した文字列の圧縮の様子を例示する図である。
【図８】辞書を利用した文字列の復号の様子を例示する図である。
【図９】辞書を利用した文字列の復号の様子を例示する図である。
【図１０】辞書を利用した文字列の復号の様子を例示する図である。
【図１１】辞書を利用した文字列の復号の様子を例示する図である。
【図１２】辞書を利用した文字列の復号の様子を例示する図である。
【符号の説明】
【００８６】
１，１０  組み合わせ論理回路
２，３，９  レジスタ
４  ＳＲＡＭ
５〜７，１１〜１３  マルチプレクサ
【図１】
2006332982.tif 000003
【図２】
2006332982.tif 000004
【図３】
2006332982.tif 000005
【図４】
2006332982.tif 000006
【図５】
2006332982.tif 000007
【図６】
2006332982.tif 000008
【図７】
2006332982.tif 000009
【図８】
2006332982.tif 000010
【図９】
2006332982.tif 000011
【図１０】
2006332982.tif 000012
【図１１】
2006332982.tif 000013
【図１２】
2006332982.tif 000014