(57)【特許請求の範囲】
【請求項１】
可変長コードを入力する第１入力手段と、
前記第１入力手段を介して既に入力済みの可変長コードに加算されるべき第１の桁上げ信号を入力する第２入力手段と、
前記第１入力手段により入力される可変長コードを隙間なく連結して連結コードを生成する生成手段と、
前記連結コードが所定の長さ以上であることを検出する検出手段と、
前記連結コードに１を加算したコードを生成すると共に、前記連結コードに１を加算した場合に桁上げが発生する可能性の有無を示す第２の桁上げ信号を生成する加算手段と、
前記加算手段により１が加算される前の連結コードの上位固定ビット長のコードを保持可能な第１のコード保持手段と、
前記加算手段により１が加算された後の連結コードの上位固定ビット長のコードを保持可能な第２のコード保持手段と、
前記検出手段の検出結果及び前記第２の桁上げ信号に基づいて、前記加算手段により１が加算される前の連結コードにおいて所定の長さ以上に連続する１が有る場合に、カウントアップするカウント手段と、
前記第１及び第２の桁上げ信号に基づいて前記第１及び第２のコード保持手段が保持するコードの何れか一方を出力する第１出力手段と、
前記カウント手段のカウント値に基づく回数のビット１またはビット０が連続するコードを出力する第２出力手段とを備えることを特徴とするパッキング回路。
【請求項２】
０〜１６ビットで表現される可変長コードを入力する第１入力手段と、
前記第１入力手段を介して既に入力済みの可変長コードに加算されるべき第１の桁上げ信号を入力する第２入力手段と、
前記第１入力手段により入力される可変長コードを隙間なく連結して最大３１ビットの連結コードを生成する生成手段と、
前記連結コードが１６ビット以上であることを検出する検出手段と、
前記連結コードに１を加算したコードを生成すると共に、前記連結コードに１を加算した場合に桁上げが発生する可能性の有無を示す第２の桁上げ信号を生成する加算手段と、
前記加算手段により１が加算される前の連結コードの上位１６ビットのコードを保持可能な第１のコード保持手段と、
前記加算手段により１が加算された後の連結コードの上位１６ビットのコードを保持可能な第２のコード保持手段と、
前記検出手段の検出結果及び前記第２の桁上げ信号に基づいて、前記加算手段により１が加算される前の連結コードにおいて所定の長さ以上に連続する１が有る場合に、カウントアップするカウント手段と、
前記第１及び第２の桁上げ信号に基づいて前記第１及び第２のコード保持手段が保持する１６ビットのコードの何れか一方を出力する第１出力手段と、
前記カウント手段のカウント値に基づく回数のビット１またはビット０が連続する１６ビットのコードを出力する第２出力手段とを備えることを特徴とするパッキング回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パッキング回路に関し、特に信号を符号化して得られる桁上げ信号付きの可変長コードを固定長化するためのパッキング回路の構成方法に関する。
【０００２】
【従来の技術】
一般に、算術符号化部内の算術演算器は、１シンボルの算術符号化を行なうごとに可変長のコードを発生すると共に、演算内容により、キャリーやボロー等の桁上げ信号を発生する。コードが可変長であるため、発生したコードの長さを示すためのコード長情報も同時に出力する。該可変長コードの長さは０からある値Ｎの間である。尚、Ｎの値は算術符号化器内のオージェントレジスタ、あるいはコードインターバルレジスタ（以下、Ａレジススタと略す）と呼ばれるレジスタ長に依存する。
【０００３】
算術符号の方式として代表的なものとして、ＩＴＵの機関であるＪＢＩＧ（Ｊｏｉｎｔ  Ｂｉ−ｌｅｖｅｌ  Ｉｍａｇｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）で標準化されたＪＢＩＧ方式（ＱＭ−ｃｏｄｅｒ）、ＩＢＭ社が提案しているＱ−ｃｏｄｅｒ等がある。以下では、特に算術符号の方式を特定せず、一般的な算術符号として話しを進めるが、用語や概念が一般的でないため説明の都合上やむを得ず専門用語を用いることがでてくるが、その場合は、標準方式であるＪＢＩＧに準ずるものとする。
【０００４】
１シンボルの算術符号化を行なうごとに、該Ａレジスタの値が所定の範囲（通常、該レジスタの最上位ビットの値が‘１’であれば、所定の範囲と見なす）に収まっているかどうかチェックし、収まっている場合は何もせずに、次のシンボルの算術符号化を行なう。この場合は、発生するコード長は０ビットとなる。逆に収まっていない場合は、該Ａレジスタの値が所定の範囲に収まるようシフト処理を行ない、それと同時にコードを発生する基となるレジスタであるコードレジスタ（以下、Ｃレジスタと略す）もシフト処理を行なう。これを正規化処理と称する（以下、シフト処理あるいは正規化処理と称す）。
【０００５】
このとき、シフトしたビット数が、発生するコード長となり、Ｃレジスタからシフトアウトされた情報がコードとなる。具体的な例を図１に示す。
【０００６】
Ａレジスタ及びＣレジスタの長さをＮ＋１ビットとし、算術符号化直後（シフト処理前）の各レジスタの値が図１（ａ）であったとする。この場合、Ａレジスタの最上位ビットが‘１’なので、所定の範囲に収まっていると判定され、図１（ｂ）の如く、シフト処理は行なわれず、発生するコード長は０ビットである。
【０００７】
次に、算術符号化直後の各レジスタの値が図１（ｃ）であったとする。この場合、Ａレジスタの最上位ビットが‘０’なので、所定の範囲にないと判定され、シフト処理を行なう。該シフト処理は、Ａレジスタの最上位ビットが‘１’になるまで、左シフトを行なう。
【０００８】
この例では図１（ｃ）においてＡレジスタの６ビット目に‘１’が存在するので、５ビットのシフトを行なう。この５ビットシフトはＣレジスタに対しても行なう。よって、Ｃレジスタから“１０１００”という５ビットのコードがシフトアウトされ、これがコードとなって出力される。該５ビットシフトを行なう際に、各レジスタの下位５ビットには、‘０’を補充する。その結果、シフト処理後の各レジスタの値は、図１（ｄ）のようになる。
【０００９】
次に、算術符号化直後の各レジスタの値が図１（ｅ）であったとする。この場合、Ａレジスタの値は最小値となり、発生するコードはＮビット（Ｃレジスタの上位Ｎビット）となる。Ａレジスタの値がこれより小さいと、値はゼロとなり、何ビットシフトしてもＡレジスタの最上位ビットが‘１’になることはなく、シフト処理が破綻してしまう。図１（ｅ）のシフト処理後の各レジスタの値は、図１（ｆ）のようになる。
【００１０】
これまでの説明で、算術演算に用いるレジスタの値と、それに対して発生するコード並びに、コード長の関係を示してきた。演算部で発生する情報が、可変長コードとコード長情報だけなら、話は簡単である。即ち、該可変長コードを隙間無く連結して、先頭から所定のビット長単位で切りだせば、固定長のコードを出力できる。
【００１１】
例えば、エントロピー符号化の一種であるハフマン符号器は、可変長コードとコード長情報だけを出力するので、前述の処理だけで固定長のコードが得られるわけである。このような処理を行なうものは、一般的に（固定長化）パッキング回路と言われ、ハフマン符号と同様、古くから使われている。参考のために該パッキング回路の一例を図２に示す。
【００１２】
可変長コードは、前詰めコードと後ろ詰めコードの２種類あり、どちらのコードに対応するかで、パッキング処理の方法が異なる。前詰めの可変長コードとは、例えば、１５ビットバスで６ビットの可変長コードを転送する時、先頭の６ビットに可変長コードを配置するものである。その際、後ろの９ビットは特定の値をとるかもしくは不定である。
【００１３】
一方、後詰めの可変長コードとは、末尾の６ビットに可変長コードを配置するものであり、その際、先頭の９ビットは特定の値をとるかもしくは不定である。
【００１４】
図２のパッキング回路は、０から１５ビットの前詰めの可変長コードを受け付け、それを連結して１６ビット単位にして出力するものである。ここでは、簡単化のため可変長コード以外の無効ビットはすべて０であるものとする。同図において、２０１は０から１５ビットの可変長コードを入力する端子、２０２は４ビットのコード長情報を入力する端子、２０３は当該パッキング回路に残存するコードのビット数に、入力されたコード長情報を加算する加算器、２０４は加算器２０３のキャリー出力、２０５は加算器２０３の下位４ビット出力、２０６は前記キャリー出力をラッチするＤフリップフロップ、２０７は加算器２０３の下位４ビット出力をラッチする４ビットのＤフリップフロップ、２０８はＤフリップフロップ２０６の出力信号、２１０は入力可変長コードをシフトするバレルシフタ、２１１は当該パッキング回路に残存するコードに入力可変長コードを連結する連結器、２１２は連結器２１１で連結したコードをラッチする３１ビットのＤフリップフロップ、２１３はＤフリップフロップ２１２から出力される連結コードを１６ビットシフトするシフタである。
【００１５】
以下に、簡単な動作説明を行なう。
【００１６】
まず、初期化動作により、Ｄフリップフロップ２０７の保持値がゼロにクリアされる。そして、最初の可変長コードが端子２０１から入力され、バレルシフタ２１０でまったくシフトされず、ストレートに連結器２１１に送られ、該入力可変長コードが連結コードの先頭にくる。この可変長コードのコード長をＳビットとすると、可変長コードの入力と同時に、端子２０２にＳという値のコード長情報が入力される。該コード長情報は加算器２０３を経由して、Ｄフリップフロップ２０７にラッチされる。以上により、最初のＳビットの可変長コードがパッキング回路に取り込まれる。
【００１７】
次に、Ｔビットの可変長コードが入力されるものとする。端子２０１から入力される可変長コードは、バレルシフタ２１０にて、Ｓビットだけシフトされ、連結器２１１に送られる。連結器２１１は、最初に入力されたＳビットの可変長コードの後ろに、ＳビットシフトされたＴビットの可変長コードを連結し、新たに（Ｓ＋Ｔ）ビットの連結コードを生成する。該連結コードは、Ｄフリップフロップ２１２にてラッチされる。
【００１８】
一方、端子２０２にはコード長情報である値Ｔが入力され、加算器２０３にて、Ｓ＋Ｔを演算する。Ｓ＋Ｔ＜１６の場合、連結したコードは保存され、次に入力される可変長コードをさらに連結する。Ｓ＋Ｔ≧１６の場合、連結したコードは１６ビット以上の長さがあるので、先頭１６ビットを信号線２１５にて外部に出力する。この場合、Ｓ＋Ｔの演算時にキャリーが発生し、Ｄフリップフロップ２０６に‘１’が取り込まれ信号２０８も‘１’になる。該信号２０８は、外部に１６ビットのコードを出力することを知らせる信号であり、該信号が‘１’の時、信号線２１５の１６ビットコードは有効な出力となる。キャリーが発生することにより、加算器２０３の下位４ビットの値はＳ＋Ｔ−１６となり、該加算結果が、Ｄフリップフロップ２０７に保持される。
【００１９】
その後は、上記処理と同じ処理を繰り返し、次々と可変長コードを連結、１６ビット化して出力する。算術符号器の出力が可変長コードと該コード長情報の２つだけなら、このような簡単なパッキング回路で用が足りるわけである。
【００２０】
尚、図２では、一番シンプルなパッキング回路を示すために、入力可能な可変長コードの長さを０〜１５にしたが、加算器２０３の若干の変更で、入力可能な可変長コードの長さを０〜１６にすることが出来る。また、出力する固定長コードの長さが１６ビットの場合、入力可能な可変長コードは、最悪条件（最長コードが連続して入力する場合）を考えると、最大１６ビットになる。もし入力の最大コード長を１７ビットにすると、該１７ビットコードが連続して入力した時、一回の入出力でパッキング回路の内部に残るコードの長さが１ビットとづつ増え、内部のレジスタで保持出来るビット数を超えてしまうことがありうるからである。
【００２１】
次に、算術演算器のもう１つの出力である桁上げ信号について述べる。
【００２２】
算術符号では、符号化するシンボル予測値に一致しているかどうかという情報と、符号化シンボルと予測値がどれぐらいの確率で一致しないかという確率推定値を用いる。前者の情報は、演算の選択に用いられ、後者の確率推定値は実際の演算に用いられる。
【００２３】
Ａレジスタに対しては、該確率推定値をＡレジスタから減算した値、あるいは、該確率推定値を、前述の一致／不一致情報に基づいて選択し、それを新たなＡレジスタの値とするのが一般的である。いずれの値が選択されても、Ａレジスタの値は前の値より小さくなり、それが所定の範囲に収まっていれば、シフト処理は行なわないが、所定の範囲より小さくなった場合は、所定の範囲に収まるまで左シフトを行なう。
【００２４】
Ｃレジスタに対しては、ＪＢＩＧという方式に限っても、ソフトウェア処理に適した演算、ハードウェア処理に適した演算、減算型、加算型等いろいろな演算方法がある。ここでは、Ｃレジスタに対する演算の種類が加算か減算かが問題となる。
【００２５】
演算が加算の場合、該Ｃレジスタに対して、何も加算しないか、ある値を加算するかが、前述の一致／不一致情報に基づいて選択される。この場合、加算演算によって、キャリー信号が発生することがある。それは、演算前のＣレジスタの値が十分大きくなっており、それにある値を加算することにより、レジスタがオーバーフローを起こすことがあるからである。オーバーフローを起こしたら、キャリー信号を外部へ出力し、残りの値を新たなＣレジスタの値（但し、シフト処理前の値）とすることで、破綻なく次の処理へ移ることができる。
【００２６】
演算が減算の場合、該Ｃレジスタに対して、何も減算しないか、ある値を減算するかが、前述の一致／不一致情報に基づいて選択される。この場合、減算演算によって、ボロー信号が発生することがある。それは、演算前のＣレジスタの値が十分小さくなっており、それにある値を減算することにより、レジスタが負にオーバーフローを起こすことがあるからである。オーバーフローを起こしたら、ボロー信号を外部へ出力し、残りの値を新たなＣレジスタの値（但し、シフト処理前の値）とすることで、破綻なく次の処理へ移ることができる。
【００２７】
このような桁上げ信号を処理するには新たな回路が必要となる。
【００２８】
従来のパッキング回路に、桁上げ信号を加算する加算回路を付加して処理する方法が提案されている（特公平７−１２３２２８号公報）が、該加算器によって新たな桁上げが発生し、結局、パッキング処理した出力にまた桁上げ信号が現われてしまう。分かりやすいように、該入出力関係のみを図３に示す。図３の桁上げ信号入出力付きのパッキング回路３０１は、図２と比較して、次のことが容易に分かる。
・従来のパッキング回路と同じ入出力信号を持っている。
・桁上げ信号入力があり、それに付随して桁上げ信号出力がある。
【００２９】
パッキング回路３０１から出力される桁上げ信号を処理するには、図４に示すように、桁上げ信号を処理する専用の回路４０１が必要であり、最終的に桁上げ信号の無い固定長コード信号とコード出力の有無を表す信号だけを出力する。
【００３０】
【発明が解決しようとしている課題】
以上説明した様に、桁上げ信号と共に供給される可変長コードを、桁上げ信号の無い固定長コードに変換する際、従来は以下の２段階で処理していた。
（１）可変長コードを固定長化する。出力には固定長コード以外に桁上げ信号が存在する。
（２）上記固定長コードに桁上げ信号を加算処理する。
【００３１】
そのために、以下の２つの問題があった。
（イ）上記２段階のそれぞれに桁上げ信号を加算する加算器が必要であった。
（ロ）次の桁上げ信号付き固定長コードが発生しないことには、前の固定長コードを出力することができないため、出力の遅延が大きかった。
【００３２】
【課題を解決するための手段】
上記課題を解決するために、本発明のパッキング回路は、以下の構成を備える。即ち、可変長コードを入力する第１入力手段と、前記第１入力手段を介して既に入力済みの可変長コードに加算されるべき第１の桁上げ信号を入力する第２入力手段と、前記第１入力手段により入力される可変長コードを隙間なく連結して連結コードを生成する生成手段と、前記連結コードが所定の長さ以上であることを検出する検出手段と、前記連結コードに１を加算したコードを生成すると共に、前記連結コードに１を加算した場合に桁上げが発生する可能性の有無を示す第２の桁上げ信号を生成する加算手段と、前記加算手段により１が加算される前の連結コードの上位固定ビット長のコードを保持可能な第１のコード保持手段と、前記加算手段により１が加算された後の連結コードの上位固定ビット長のコードを保持可能な第２のコード保持手段と、前記検出手段の検出結果及び前記第２の桁上げ信号に基づいて、前記加算手段により１が加算される前の連結コードにおいて所定の長さ以上に連続する１が有る場合に、カウントアップするカウント手段と、前記第１及び第２の桁上げ信号に基づいて前記第１及び第２のコード保持手段が保持するコードの何れか一方を出力する第１出力手段と、前記カウント手段のカウント値に基づく回数のビット１またはビット０が連続するコードを出力する第２出力手段とを備えることを特徴とする。
【００３３】
【発明の実施の形態】
（第１の実施例）
本発明による桁上げ信号入力付きパッキング回路の構成を図５に示す。本実施例は、前詰めの可変長コード入力を処理するものである。可変長コード以外の無効ビットは不定とする。
【００３４】
図５のパッキング回路は、０〜１６ビットの可変長コードと桁上げ信号を入力し、それをパッキングして１６ビット単位で出力するものである。
【００３５】
同図において、５０１は端子２０２から入力されるコード長情報（５ビット）の最上位ビット情報、５０２はパッキングコード長が１６ビット以上あることを検出する手段であるＯＲ素子、５０３は桁上げ信号を入力する端子、５０５は桁上げ信号加算位置に１を生成するデコーダである。
【００３６】
５０７はパッキング済みのコードに、１と仮定した桁上げ信号を加算する加算器、５０９は加算器５０７から出力される仮想桁上げ信号、５１０は、Ｄフリップフロップ２１２の出力と加算器５０７の出力の一方を選択するセレクタ、５１１は仮想桁上げ信号５０９を反転するＮＯＴ素子、５１３はレジスタ５２５，５２７に１６ビットの固定長コードを取り込むタイミングを検出するＡＮＤ素子、５１５はレジスタ５２５，５２７に保持している未出力のコードを出力するタイミングとカウンタ５４５をダウンカウントするタイミングを検出するＯＲ素子である。
【００３７】
５２１は不要なコードを‘０’にマスクするマスク回路、５２３はマスク回路５２１に必要なマスク信号を生成するデコーダ、５２５はセレクタ５１０で選択される信号の上位１６ビットを保持出力するレジスタ、５２７は加算器５０７から出力される加算出力の上位１６ビットを保持出力するレジスタ、５２８は上記仮想桁上げ信号５０９に基づいてレジスタ５２５，５２７の出力の一方を選択し出力するセレクタ、５２９は上記セレクタ５２８の出力とレジスタ５４１の出力の一方を選択し出力するセレクタ、５３１はレジスタ５２５，５２７に未出力のコードを保持していることを示すフラグレジスタ、５３３はレジスタ５２５，５２７に保持する未出力のコードを出力するのを検出するＡＮＤ素子、５３５は固定長コードを出力することを知らせるための信号を生成するＯＲ素子、５３７は上記ＯＲ素子５３５の出力信号、５４１はＯＲ素子５１５の出力値に基づいて仮想桁上げ信号５０９を取り込み該信号を反転し１６ビット化して出力するレジスタである。
【００３８】
５４３はアップダウンカウンタ５４５をアップカウントする条件を検出するＡＮＤ素子、５４５はアップダウンカウンタ、５４７は上記アップダンカウンタ５４５のカウント値が１以上であることを検出する検出器、５４９は上記アップダウンカウンタ５４５をダウンカウントする条件を検出するＡＮＤ素子、５５１は上記ＡＮＤ素子５４９の出力信号を遅延させる１ビットのＤフリップフロップ、５５３は上記アップダウンカウンタ５４５をダウンカウントする条件の一部を生成するＯＲ素子、５５５は１６ビットの固定長コード出力信号である。その他の要素は、前記従来例を示す図２における同一番号要素と同じである。
【００３９】
以下に、動作説明を行なう。
【００４０】
図２に示した従来例と同様、初期化処理により、レジスタ２０６，２０７の保持値をゼロにクリアする。クリアされたレジスタ２０７の値は、バレルシフタ２１０、デコーダ５０５とデコーダ５２３へ送られる。デコーダ５２３は該入力に基づいてオール‘０’の１５ビットの信号を生成し、マスク回路５２１にて内部のパッキング情報（連結コード）をすべてゼロにマスクしクリアする。
【００４１】
そして、最初の可変長コードが端子２０１から入力され、バレルシフタ２１０でまったくシフトされず、ストレートに連結器２１１に送られ、該入力可変長コードが連結コードの先頭にくる。
【００４２】
例えば、最初の入力可変長コードが９ビットで“０１１１０１１１１”であったとすると、バレルシフタ２１０の入力は“０１１１０１１１１ｘｘｘｘｘｘｘ”（ｘは不定ビット）となる。
【００４３】
バレルシフタ２１０では最大シフト量が１５ビットであるため、出力バス幅は１６＋１５＝３１ビットとなり、この場合の出力は“０１１１０１１１１ｘｘｘｘｘｘｘ０００００００００００００００”となる。該３１ビット情報は連結器２１１に与えられ、マスク回路５２１の出力と合成されて、前記３１ビット情報と同じデータがＤフリップフロップ２１２に送られ、次のサイクルで該Ｄフリップフロップから該３１ビット情報が出力される。
【００４４】
一方、コード長情報として値９が端子２０２から入力され、加算器２０３を経由してＤフリップフロップ２０７にて、取り込まれ次のサイクルで出力され、デコーダ５０５に送られる。この時Ｄフリップフロップ２０６からデコーダ５０５へは値０が送られている。
【００４５】
デコーダ５０５は、受け取った値９に基づいて“００００００００１０００００００００００００００００００００００”をデコード出力する。該出力値は前記レジスタ２１２の出力との間で、加算器５０７にて加算演算される。この加算演算は端子５０３からの桁上げ信号入力を１と仮定して行なう演算であり、該桁上げ信号入力が１の時、この演算結果はセレクタ５１０にて選択される。
【００４６】
該加算器５０７の出力には桁上げ信号出力５０９といわゆる加算出力（３１ビット）５０８がある。上記演算の結果、桁上げ信号出力５０９には０が加算出力５０８には“０１１１１００００ｘｘｘｘｘｘｘ０００００００００００００００”が、該加算器５０７より出力される。
【００４７】
加算出力５０８はセレクタ５１０と１６ビットのレジスタ５２７に送られ、桁上げ信号出力５０９はＮＯＴ素子５１１とレジスタ５４１等に送られる。
【００４８】
セレクタ５１０には、上記加算出力とレジスタ２１２の出力が入力されており、端子５０３から入力される桁上げ信号に基づいて、一方が選択される。該桁上げ信号が１の時は加算出力５０８が選択され、０の時はセレクタ２１２の出力が選択される。
【００４９】
次に、桁上げ信号＝‘１’、可変長コード＝“０１０１１０１１”、コード長＝８ビットが入力されるとする。
【００５０】
上記桁上げ信号はセレクタ５１０に直接入力されるのに対し、他の可変長コード、コード長情報は、Ｄフリップフロップを１段通ってから、該セレクタ５１０に達する。よって、上記桁上げ信号入力は、１サイクル前に入力された可変長コードとコード長に対して作用する。
【００５１】
セレクタ５１０は、上記桁上げ信号入力に基づき、加算出力５０８すなわち“０１１１１００００ｘｘｘｘｘｘｘ０００００００００００００００”を選択し出力する。この信号は、レジスタ５２５と１６ビットシフタ２１３に送られるが、パッキングコード長が１６ビット未満の場合、レジスタ５２５はデータ取り込みをしないので、１６ビットシフタ２１３の動作のみを考えればよい。
【００５２】
この場合、Ｄフリップフロップ２０６から該１６ビットシフタ２１３に入力される制御信号は０であり、該１６ビットシフタ２１３は前記３１ビット入力の上位１５ビット“０１１１１００００ｘｘｘｘｘｘ”を選択してマスク回路５２１におくる。ちなみに、Ｄフリップフロップ２０６からの信号が１の時は、前記３１ビット入力の上位１６ビットをシフタで取り除き、下位１５ビットを該１６ビットシフタ２１３から出力する。
【００５３】
一方、４ビットのＤフリップフロップ２０７から出力される値９がデコーダ５２３に送られ、該デコーダから９ビットの１と（１５−９）ビットの０、すなわち“１１１１１１１１１００００００”が出力される。
【００５４】
マスク回路５２１では、入力された２つの１５ビット信号のビット間の論理積を求め、“０１１１１００００００００００”を出力し、連結器２１１に送る。
【００５５】
端子２０１から入力された８ビットの可変長コード“０１０１１０１１ｘｘｘｘｘｘｘｘ”は、バレルシフタ２１０にて９ビットシフトされ、“００００００００００１０１１０１１ｘｘｘｘｘｘｘｘ００００００”となり、連結器２１１にて、マスク回路５２１の出力に連結される。連結結果は、“０１１１１０００００１０１１０１１ｘｘｘｘｘｘｘｘ００００００”となり、Ｄフリップフロップ２１２にてラッチされ、次のサイクルでセレクタ５１０と加算器５０７に送られる。
【００５６】
端子２０２から入力されたコード長情報８は加算器２０３にて、Ｄフリップフロップ２０７から出力される値９と加算され、この時発生するキャリー信号はＯＲ素子５０２を通してＤフリップフロップ２０６にラッチされ、キャリーを除いた値１がＤフリップフロップ２０７にラッチされ、次のサイクルで出力される。
【００５７】
Ｄフリップフロップ２０６，２０７の出力はデコーダ５０５に入力され、該デコーダから“００００００００００００００００１００００００００００００００”が出力され、加算器５０７に送られる。
【００５８】
加算器５０７は、“０１１１１０００００１０１１０１１ｘｘｘｘｘｘｘｘ００００００”＋“００００００００００００００００１００００００００００００００”の加算演算をし、該演算の結果、桁上げ信号出力５０９には０を、加算出力５０８には“０１１１１０００００１０１１１００ｘｘｘｘｘｘｘｘ００００００”を出力し、加算出力５０８の全３１ビットをセレクタ５１０に、上位１６ビット（下線部）をレジスタ５２７に送る。
【００５９】
次に、桁上げ信号＝‘０’、可変長コード＝“１１１１１１１１１１１１１１１１”、コード長＝１６ビットが入力されるとする。
【００６０】
セレクタ５１０では上記桁上げ信号入力に対して、Ｄフリップフロップ２１２出力である“０１１１１０００００１０１１０１１ｘｘｘｘｘｘｘｘ００００００”を選択し出力し、全３１ビットを１６ビットシフタ２１３に、上位１６ビット（下線部）はレジスタ５２５に送る。
【００６１】
今サイクルでは、Ｄフリップフロップ２０６の出力＝１、即ちパッキングコード長が１６ビット以上あるため、そのうちの上位１６ビットを固定長コードとして、加算器５０７の仮想的な桁上げ信号出力５０９に基づき、以下の処理を行なう。
（１）仮想桁上げ信号が０の時、レジスタ５２５，５２７は各々に入力している１６ビットコードを取り込む。
（２）仮想桁上げ信号が１の時、カウンタ５４５をカウントアップする。
【００６２】
現タイミングでは、仮想桁上げ信号が０なので、レジスタ５２５，５２７は各々に入力している１６ビットコードを取り込む。すなわち、レジスタ５２５では“０１１１１０００００１０１１０１”をレジスタ５２７では“０１１１１０００００１０１１１０”を取り込む。該処理を制御する信号として、前記仮想桁上げ信号をＮＯＴ素子５１１で反転し、該反転信号とＤフリップフロップ２０６からの出力との論理積を演算したＡＮＤ素子５１３の出力を用いる。該ＡＮＤ素子の出力が１の時にレジスタ５２５，５２７へ入力データを取り込む。その時、フラグレジスタ５３１のセットも同時に行ない、レジスタ５２５，５２７が未出力の固定長コードを保持していることを示す。
【００６３】
レジスタ５２５は加算器５０７の入力側の値を、レジスタ５２７は加算器５０７の出力側の値を、保持出力するため、レジスタ５２５の出力値≦レジスタ５２７の出力値、という関係がある。これを更に細かく見てみると、以下の２種類の関係がある。
（ａ）レジスタ５２７の出力値＝レジスタ５２５の出力値＋１
（ｂ）レジスタ５２７の出力値＝レジスタ５２５の出力値
【００６４】
上記（ａ）の場合は、下位ビットからの桁上げがある時にレジスタ５２７の値を出力し、下位ビットからの桁上げが無いと確定した時にレジスタ５２５の値を出力することで、２つのレジスタの値の違いが有効となる。それに対し（ｂ）の場合は、２つのレジスタの値が同じであるため、（ａ）のように切り換えて出力する意味が無い。これは、下位ビットからの桁上げが無いということがこの時点で既に確定している場合で、固定長コードを一旦レジスタに取り込むが、結果的には次のサイクルですぐに出力してしまう。
【００６５】
レジスタ５２５，５２７に取り込んだ固定長コードを出力する条件は、以下の２つがある。
（イ）加算器５０７から出力される仮想的な桁上げ信号が０の場合
（ロ）端子５０３からの入力桁上げ信号が１の場合
【００６６】
上記（イ）は下位ビットからの桁上げ信号が無い場合に対応し、上記（ロ）の場合はその時の仮想（的な）桁上げ信号の値が下位ビットからの確定した桁上げ信号となる。
【００６７】
いずれにしても、（イ）または（ロ）の条件が成立することを検出できれば、下位ビットからの桁上げ信号が確定でき、レジスタ５２５，５２７に取り込んだ固定長コードを出力できる。該条件の検出はＮＯＴ素子５１１及びＯＲ素子５１５により行なう。
【００６８】
上記（１）または（２）の処理により、上位１６ビットの固定長コードは次のステージに処理が移り、パッキングコード内の上位１６ビットは、１６ビットシフタ２１３にて取り除かれ、残りのビットがマスク回路５２１に送られる。この場合“１ｘｘｘｘｘｘｘｘ００００００”がマスク回路５２１に送られる。
【００６９】
Ｄフリップフロップ２０７からデコーダ５２３に送られる値１に基づいて、デコーダ５２３は“１００００００００００００００”を生成し、これをマスク回路２１１に入力する。マスク回路５２１は２つの１５ビット入力のビット間の論理積である“１００００００００００００００”を連結部２１１に出力する。
【００７０】
端子２０１から入力されると１６ビット長コード“１１１１１１１１１１１１１１１１”は、バレルシフタで１ビットシフトされ連結部２１１に送られる。該連結部では前記マスク回路の出力に該１６ビット長コードを連結して、“１１１１１１１１１１１１１１１１００００００００００００００”をＤフリップフロップ２１２に出力する。
【００７１】
一方端子２０２から入力されるコード長情報１６は、２進数で表現すると“１００００”であり、加算器２０３には４ビットのオール０信号が送られ、再上位ビットの１は信号線５０１，ＯＲ素子５０２を通してＤフリップフロップ２０６に取り込まれる。４ビットのＤフリップフロップ２０７で保持出力する値は１のまま変化しない。
【００７２】
Ｄフリップフロップ２０６，２０７の出力はデコーダ５０５に入力され、該デコーダから“００００００００００００００００１００００００００００００００”を出力する。
【００７３】
加算器５０７は、“１１１１１１１１１１１１１１１１１００００００００００００００”＋“００００００００００００００００１００００００００００００００”の加算演算をし、該演算の結果、桁上げ信号出力５０９には１を、加算出力５０８には“０００００００００００００００００００００００００００００００”を出力し、加算出力５０８の全３１ビットをセレクタ５１０に送る。
【００７４】
パッキングコード長が１６ビット以上あるが、今回は加算器５０７の仮想的な桁上げ信号出力５０９が１であるため、前記（２）の処理を行なう。該処理を行なうかどうかの検出はＡＮＤ素子５４３にて行ない。該出力が１の時に、カウンタ５４５をカウントアップする。
【００７５】
この結果、レジスタ５２５，５２７は未出力の固定長コードを保持し、カウンタ５４５はカウント値１を保持している。
【００７６】
次に、桁上げ信号＝‘０’、可変長コード＝“１１０１１”、コード長＝５ビットが入力されるとする。
【００７７】
セレクタ５１０では上記桁上げ信号入力に対して、Ｄフリップフロップ２１２出力である“１１１１１１１１１１１１１１１１１００００００００００００００”を選択し出力し、全３１ビットを１６ビットシフタ２１３に送る。
【００７８】
１６ビットシフタ２１３では、Ｄフリップフロップ２０６から送られる値１に基づき、上位１６ビットをシフトして取り除き、下位１５ビット“１００００００００００００００”を出力する。該出力は、マスク回路５２１を経て、連結器２１１にて上記５ビットの可変長コードが連結され、該連結器から“１１１０１１ｘｘｘｘｘｘｘｘｘｘｘ００００００００００００００”が出力される。該データはＤフリップフロップ２１２に送られ次のサイクルで出力される。
【００７９】
上記データに１と仮定した桁上げ信号を加算しても（仮想的な）桁上げ信号は１にならない。よって、次のサイクルでは前記（イ）の条件により、レジスタ５２５，５２７のいずれかが出力される。この場合、仮想的な桁上げ信号が０なので、セレクタ５２８により、レジスタ５２５の値が選択され出力される。
【００８０】
条件（イ）を検出したＯＲ素子５１５の出力は、フラグレジスタ５３１の出力との間でＡＮＤ素子５３３にて論理積が演算され、ＯＲ素子５３５を経由して信号線５３７に出力される。これにより、固定長コードの出力を外部に知らせる。一方、前記ＯＲ素子５１５の出力はフラグレジスタ５３１のリセット端子にも入力され、レジスタ５２５，５２７には未出力のコードがもう保持されていないことを示すようにする。さらに前記ＯＲ素子５１５の出力はカウンタ５４５のカウントダウン動作を開始する信号としても用いられる。
【００８１】
カウンタ５４５の値は、検出器５４７により１以上であることが検出され、該検出結果はＡＮＤ素子５４９に送られる。一方、ＯＲ素子５１５の出力はＯＲ素子５５３を通して前記ＡＮＤ素子５４９に送られ、該素子の出力は１となる。この信号はカウンタ５４５のダウンカウント端子に入力されダウンカウントが開始される。一度ダウンカウントが開始すると、前記ＡＮＤ素子５４９の出力がＤフリップフロップ５５１，ＯＲ素子５５３を経由して該ＡＮＤ素子５４９に戻ってくる。よって、カウンタ５４５の値が１以上である限りダウンカウント動作は継続する。したがって、一度ダウンカウントが開始するとカウント値がゼロになるまで、ダウンカウントを行なう。
【００８２】
ダウンカウントに同期して、Ｄフリップフロップ５５１の出力が１になるので、これによりレジスタ５４１から出力される１６ビットコードが選択され外部に出力される。該１６ビットコードは、カウントダウンを開始する時の仮想的な桁上げ信号５０９をレジスタ５４１に取り込んで、それを反転して１６ビット化したものである。この場合、前記桁上げ信号の値は０なので、該１６ビットコードは“１１１１１１１１１１１１１１１１”になる。
【００８３】
前記Ｄフリップフロップ５５１の出力値１はＯＲ素子５３５，信号線５３７を通して、外部に出力され、前記１６ビットコードを出力中であることを知らせる。
【００８４】
ここで、先に入力した、桁上げ信号＝‘０’、可変長コード＝“１１０１１”、コード長＝５ビットを取り消し、桁上げ信号＝‘０’、可変長コード＝“１１１１１”、コード長＝５ビットが入力されるとする。この入力によって変わるのは、次のサイクルでＤフリップフロップ２１２から出力される値が“１１１１１１ｘｘｘｘｘｘｘｘｘｘｘ００００００００００００００”になり、そして、加算器５０７から出力される仮想的な桁上げ信号が１になることである。
【００８５】
入力桁上げ信号が０で、仮想的な桁上げ信号が１の場合、前記（イ）（ロ）のどちらの条件も満たされないので、レジスタ５２５，５２７の値は出力されずに保持されたままである。
【００８６】
＜第１実施例の変形＞
カウンタ５４５をダウンカウント中は、新たなカウントアップ動作をすることが出来ない。そこで、該カウンタのダウンカウント動作及びそれに付随するコードの出力以外の処理をどこまで継続して行なってよいのかが問題となる。
【００８７】
１つ目の方法として、他の処理をすべて中断するということが考えられる。これは、可変長コードを生成する符号化処理を停止して、新たな可変長コードが入力されないようにするものである。これは、最も単純な制御であるが、符号化処理のスループットが低下する。
【００８８】
２つ目の方法として、空になったレジスタ５２５，５２７に新たな１６ビットコードを保持する処理までは行なうが、そこまできた所で符号化処理を停止し、新たな可変長コードが入力されないようにするものである。
【００８９】
この方法では、前記レジスタ５２５，５２７に新たな１６ビットコードを保持するまでの間に、前記ダウンカウント処理が終了する場合があり、符号化処理を停止する必要が無い場合も出てくる。よって、符号化処理のスループットの低下を防ぐことが出来る。
【００９０】
但し、この方法に対応するには、ダウンカウント中を表わすＤフリップフロップ５５１の出力信号でＯＲ素子５１５の出力をマスクする必要がある。すなわち、Ｄフリップフロップ５５１の出力信号が０の時にＯＲ素子５１５の出力が有効になるようなマスク回路を付加する必要がある。該マスク回路はわざわざ図示しなくてもすぐ解ると思うので、図示は省略する。
【００９１】
（第２の実施例）
本発明による桁上げ信号入力付きパッキング回路の第２の実施例の構成を図６に示す。前記第１の実施例と同様、本実施例も前詰めの可変長コード入力を処理するものであり、可変長コード以外の無効ビットは不定とする。
【００９２】
本実施例では、可変長コード以外の無効ビットをすべて１に置き換え、次段のバレルシフタでは、シフトしたビット数と同数の０を頭に付加し、（１５−シフトビット数）と同数の１をおしりに付加する。それにより連結器２１１の出力は有効なパッキングコード以外はすべて１という値になるので、いつも最下位ビットに１を加算するだけで、前記第１の実施例における加算器５０７と同じ内容の加算をしていることになる。
【００９３】
よって、本実施例では、前記加算器５０７やデコーダ５０５を用いる替わりに、以下の要素を使用する。
【００９４】
６０１は端子２０２から入力されるコード長情報に基づいて可変長コードに対応するビットには０を無効ビットには１を生成する１６ビット出力のデコーダ、６０３は端子２０１から入力される可変長コードと上記デコーダから出力される１６ビットデータの対応するビット間で論理和演算を行なう論理演算部、６０５は１を加算するプラス１回路である。
【００９５】
また、バレルシフタ２１０と若干機能の異なる別のバレルシフタ６０７を２０１の替わりに使用する。
【００９６】
例えば、最初の入力可変長コードが９ビットで“０１１１０１１１１”であったとする。
【００９７】
デコーダ６０１には、端子２０２から入力された値９が与えられ、これを基に“０００００００００１１１１１１１”をデコードして出力する。該デコード出力と入力可変長コードとの間で論理演算部６０３にて演算を行なうと“０１１１０１１１１１１１１１１１”という結果が得られる。該結果の上位９ビットは入力可変長コードであり、下位の７ビットはすべて１である。
【００９８】
該演算結果はバレルシフタ６０７に与えられ、０ビットシフトの結果“０１１１０１１１１１１１１１１１１１１１１１１１１１１１１１１”が出力される。該３１ビット情報は連結器２１１に与えられ、マスク回路５２１の出力と合成されて、前記３１ビット情報と同じデータがＤフリップフロップ２１２に送られ、次のサイクルで該Ｄフリップフロップ２１２から“０１１１０１１１１１１１１１１１１１１１１１１１１１１１１１１”が出力される。
【００９９】
該Ｄフリップフロップ２１２の出力はプラス１回路６０５に送られ、ここで１が加算され該演算の結果、仮想桁上げ信号出力５０９には０が加算出力５０８には“０１１１１００００００００００００００００００００００００００”が、該加算器より出力される。
【０１００】
いずれの３１ビット情報も上位９ビットだけに着目すれば、第１実施例と第２実施例におけるＤフリップフロップ２１２の出力は同じ値であり、第１実施例における加算器５０７の出力と第２実施例におけるプラス１回路６０５の出力は同じ値である。
【０１０１】
その他の構成は第１の実施例と同じであるため、結局本実施例と前記第１の実施例は同じ動作をすることが解る。
【０１０２】
（第３の実施例）
本発明による桁上げ信号入力付きパッキング回路の第３の実施例の構成を図７に示す。前記第１、第２の実施例と異なり、本実施例は後詰めの可変長コード入力を処理するものである。簡単化のため、可変長コード以外の無効ビットは０とする。
【０１０３】
第１、第２の実施例は、入力可変長コードをシフトしていたバレルシフタは無くなり、替わりに、本実施例では、パッキング済みの連結コードをシフトするためにバレルシフタを使用する。また、連結コードから上位１６ビットを抜き出し、２つのレジスタ５２５，５２７の各々に送るため、２つのバレルシフタが新たに必要となる。
【０１０４】
以上に述べたことが、本実施例の構成上の主な特徴である。以下に、本実施例で新たに必要となる構成要素を挙げる。図７において、７０１はパッキング済みの連結コードを、新たに入力する可変長コードのコード長情報に基づいてシフトするバレルシフタ、７０３は上記バレルシフタ７０１でシフトしたパッキング済みの連結コードと新たに入力する可変長コードとを連結する連結器、７０５及び７０７は連結コードから上位１６ビットを抜き出すためのバレルシフタ、７０９は入力された値に等しいビット数の０と、その上位に（１５−入力値）ビットの１を付加した計１５ビットのデータをデコードして出力するデコーダ、７１１は該デコーダ７０９の出力とセレクタ５１０の出力の下位１５ビットとの間で論理和を演算する論理演算部である。
【０１０５】
その他の構成要素は、前記第２の実施例の図６における同一番号要素と同じ機能である。
【０１０６】
本実施例でも、付図示のリセット信号により、Ｄフリップフロップ２０６，２０７をすべて０にクリアする。Ｄフリップフロップ２０７の値はデコーダ７０９に与えられ、そこでオール１の１５ビットデータがデコード生成され、倫理演算部７１１の１５ビット出力をオール１にする。
【０１０７】
第１の実施例で使用したバレルシフタ２０１、第２の実施例で使用したバレルシフタ６０７はいずれも右シフト（入力シフト量だけ下位方向へシフトする）を行なうバレルシフタであった。２つのレジスタ５２５，５２７の前段に設けられたバレルシフタ７０５，７０７も右シフトを行なうが、パッキング済みの連結コードをシフトするバレルシフタ７０１は、左（上位への）シフトを行なう。
【０１０８】
すなわち、バレルシフタ７０１は新たに入力する可変長コードのコード長だけ、パッキング済みのコードを左へシフトして、空いた位置に０を埋め、（１６−シフトビット数）と同数の１を先頭に付加して出力する。該空いた位置には、連結部７０３にて入力可変長コードを収める。
【０１０９】
例えば、桁上げ信号＝‘０’、可変長コード＝“０１１１０１１１１”、コード長＝９ビットが最初に入力されるとする。論理演算部７１１が出力している１５ビットのオール１すなわち、“１１１１１１１１１１１１１１１”がバレルシフタ７０１に入力される。
【０１１０】
該バレルシフタ７０１には、前記コード長情報９が与えられ、入力コードが上位へ９ビットシフトされ、そこに０が入り、先頭へ（１６−９）ビットの１が付加されて、“１１１１１１１１１１１１１１１１１１１１１１０００００００００”が出力される。
【０１１１】
該３１ビットのデータは連結器２１１に送られ、ビット０の位置に入力可変長コードがすっぽり入る。実際には、該３１ビットデータの下位１６ビットと無効ビットを含む全入力コード（１６ビット）との間で論理和を演算するだけで上記連結処理は終了する。
【０１１２】
連結器２１１出力は“１１１１１１１１１１１１１１１１１１１１１１０１１１０１１１１”となり、Ｄフリップフロップ２１２に入力され、次のサイクルで該Ｄフリップフロップから出力される。
【０１１３】
そこへ、桁上げ信号＝‘１’、可変長コード＝“０１０１１０１１”、コード長＝８ビットが入力されるとする。
【０１１４】
該Ｄフリップフロップ２１２の出力はプラス１回路６０５に送られ、ここで１が加算され該演算の結果、桁上げ信号出力５０９には０が加算出力５０８には“１１１１１１１１１１１１１１１１１１１１１１０１１１１００００”が、該加算器６０５より出力される。
【０１１５】
桁上げ信号入力が１であるため、プラス１回路６０５の出力がセレクタ５１０で選択され、該選択出力の下位１５ビット（下線部）が前記論理演算部７１１を経てバレルシフタ７０１に入力される。
【０１１６】
該バレルシフタ７０１には、前記コード長情報８が与えられ、入力コードが上位へ８ビットシフトされ、そこに０が入り、先頭へ（１６−８）ビットの１が付加されて、“１１１１１１１１１１１１１１０１１１１００００００００００００”が出力される。下線部は最初に入力された９ビットの可変長コードに桁上げ信号＝１を加算したコードである。連結器７０３の出力は“１１１１１１１１１１１１１１０１１１１０００００１０１１０１１”となり、Ｄフリップフロップ２１２に入力され、次のサイクルで該Ｄフリップフロップから出力される。
【０１１７】
一方、端子２０２から入力されるコード長情報は、最初に入力された値９に次に入力された値８が加算され、加算結果１７の最上位ビットがＤフリップフロップ２０６から、最上位ビットを除く残りの４ビットがＤフリップフロップ２０７から出力される。各々の出力は１と“０００１”である。
【０１１８】
前記第１の実施例と同様、Ｄフリップフロップ２０６の出力が１になると、パッキングされたコード長が１６ビット以上になるので、該パッキングコード内の有効なコードの上位１６ビットを取り出し、次のステージの処理へ移す。
【０１１９】
該処理は第１の実施例で既に述べたように、桁上げ信号出力５０９に基づき、以下の処理を行なう。
（１）桁上げ信号が０の時、レジスタ５２５，５２７は各々に入力している１６ビットコードを取り込む。
（２）桁上げ信号が１の時、カウンタ５４５をカウントアップする。
【０１２０】
上記Ｄフリップフロップ２１２の出力に１を加算してもキャリーは発生せず、桁上げ信号５０９は０であるため上記（１）の処理が行なわれる。但し前記第１の実施例の時とは異なり、レジスタ５２５，５２７各々の前段にバレルシフタ７０５，７０７があり、そこでシフト処理した結果がレジスタに取り込まれる。
【０１２１】
バレルシフタ７０５，７０７には、前記Ｄフリップフロップ２０７の出力“０００１”が与えられており、該バレルシフタにて１ビット右シフトされた後の下位１６ビットがレジスタ５２５，５２７に送られる。
【０１２２】
ここで、バレルシフタ７０５の入力を確定するため、次の入力を、桁上げ信号＝‘０’、可変長コード＝“１１１１１１１１１１１１１１１１”、コード長＝１６ビットと仮定する。
【０１２３】
桁上げ信号入力が０であるため、セレクタ５１０はＤフリップフロップ２１２の出力“１１１１１１１１１１１１１１０１１１１０００００１０１１０１１”を選択し、該選択結果がバレルシフタ７０５に入力される。該バレルシフタは上記下線部の１６ビットを出力し、レジスタ５２５に送る。バレルシフタ７０７へは、前記３１ビットデータに１を加算した結果である“１１１１１１１１１１１１１１０１１１１０００００１０１１１００”が入力され、下線部の１６ビットを出力し、レジスタ５２７に送る。各々のレジスタに入力される値は、前記第１の実施例と同じであることが解る。
【０１２４】
セレクタ５１０で選択された“１１１１１１１１１１１１１１０１１１１０００００１０１１０１１”の内、下位１５ビットが論理演算部７１１に送られ、デコーダ７０９が入力値１に基づいてデコードした１５ビットデータ“１１１１１１１１１１１１１１０”との間で論理和が演算されて、演算結果として“１１１１１１１１１１１１１１１”が出力され、バレルシフタ７０１に送られる。
【０１２５】
バレルシフタ７０１では、該データを上位へ１６ビットシフトし“１１１１１１１１１１１１１１１００００００００００００００００”を出力する。該出力の下位１６ビット（下線部）には、連結部７０３にて、入力可変長コード“１１１１１１１１１１１１１１１１”が入り、“１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１”がＤフリップフロップ２１２に送られる。該コードデータは次のサイクルでＤフリップフロップ２１２から出力される。
【０１２６】
Ｄフリップフロップ２１２から出力される前記３１ビットデータはプラス１回路６０５にて１が加算され、今度は仮想的な桁上げ信号５０９が１になる。この時、第１の実施例で説明したように、Ｄフリップフロップ２０６の出力が１であるため、ＡＮＤ素子５４３にて、カウンタ５４５をアップカウントする条件が検出され、カウンタ５４５が０から１へアップカウントされる。
【０１２７】
ここまでの説明で、本実施例も前記第１、第２の実施例と同じ動作をすることが解る。
【０１２８】
（第４の実施例）
本発明による桁上げ信号入力付きパッキング回路の第４の実施例の構成を図８に示す。本実施例は前記第３の実施例と同様、後詰めの可変長コード入力を処理するものである。簡単化のため、可変長コード以外の無効ビットは０とする。
【０１２９】
前記第３の実施例では、同じ機能のバレルシフタとレジスタを２組使用していたが（５２５，５２７，７０５，７０７）、本実施例ではこれを１組に減らし、その替わりにプラス１回路を増設して、同じ機能を実現するものである。図８において、８０１はレジスタ５２５から出力される１６ビットコードに１を加算するプラス１回路である。
【０１３０】
第１の実施例において述べたように、レジスタ５２５，５２７の出力値の間には以下の２種類の関係がある。
（ａ）レジスタ５２７の出力値＝レジスタ５２５の出力値＋１
（ｂ）レジスタ５２７の出力値＝レジスタ５２５の出力値
【０１３１】
上記（ｂ）の関係の場合は下位コードから桁上げはありえず、必ずレジスタ５２５の出力が選択される。上記（ａ）の関係の場合には、下位コードからの桁上げの可能性があり、桁上げがある時にはレジスタ５２７の出力を、桁上げがある時にはレジスタ５２５の出力を選択する。
【０１３２】
本実施例では、プラス１回路８０１でレジスタ５２５の出力値に１を加算し、その出力値をレジスタ５２７の出力値の替わりとする。よって、該プラス１回路の出力をセレクタ５２８に入力し、前記第１〜３実施例と同じ信号で該セレクタ５２８を選択制御すれば、これまでの実施例と同一の機能を実現する。
【０１３３】
さらに、処理速度の面では不利だが、本実施例の変形として、上記セレクタの制御信号をレジスタ５２５の出力値に加算し、その加算結果を用いる方法も考えられる。この場合、新たに前記演算を行なう加算器が必要になるが、プラス１回路８０１とセレクタ５２８は不要となる。
【０１３４】
以上説明した如く、桁上げ信号と共に供給される可変長コードを、桁上げ信号の無い固定長のコードに変換する際、従来のは以下の２段階で処理していた。
（１）可変長コードを固定長化する。出力には固定長コード以外に桁上げ信号が存在する。
（２）上記固定長コードに桁上げ信号を加算処理する。
そのために、以下の２つの問題があった。
（イ）上記２段階のそれぞれに桁上げ信号を加算する加算器が必要であった。
（ロ）次の桁上げ信号付き固定長コードが発生しないことには、前の固定長コードを出力することができないため、出力の遅延が大きかった。
【０１３５】
それに対し本実施例構成では、固定長コードを取り出す前の連結コードに、桁上げ入力信号を１と仮定した演算を行なう手段を設けることにより、
・従来、２つの加算器で行なっていた演算処理を、１つの演算器で出来るようになった。
・該演算手段から出力される仮想桁上げ信号と桁上げ入力信号に基づいて、固定長コードを出力することが可能となり、出力の遅延が大幅に小さくなった。
【０１３６】
【発明の効果】
以上説明した様に、本発明によると、可変長コードのパッキング処理において、桁上げ処理を効率的に実行できる。
【図面の簡単な説明】
【図１】算術演算レジスタのシフト処理前の値とシフト処理後の値を示す図。
【図２】従来の（固定長化）パッキング回路の構成を示す図。
【図３】桁上げ信号入出力付きパッキング回路の入出力信号を示す図。
【図４】桁上げ信号入出力付きパッキング回路と該パッキング回路の出力を処理する回路の入出力信号を示す図。
【図５】本発明の第１の実施例である桁上げ信号入力付きパッキング回路の構成を示す図。
【図６】本発明の第２の実施例である桁上げ信号入力付きパッキング回路の構成を示す図。
【図７】本発明の第３の実施例である桁上げ信号入力付きパッキング回路の構成を示す図。
【図８】本発明の第４の実施例である桁上げ信号入力付きパッキング回路の構成を示す図。
【符号の説明】
２０３，５０７  加算器
２０６，５５１  １ビット幅のＤフリップフロップ
２０７  ４ビット幅のＤフリップフロップ
２１０，７０１，７０５，７０７  バレルシフタ
２１１，７０３  連結器
２１２  ３１ビット幅のＤフリップフロップ
２１３  １６ビットシフタ
５１１  ＮＯＴ素子
５２１  マスク回路
５０５，５２３，７０９  デコーダ
５１０，５２８，５２９  セレクタ
５１３，５３３，５４３，５４９  ＡＮＤ素子
５２５，５２７，５４１  レジスタ
５３５，５５３  ＯＲ素子
５３１  フラグレジスタ
５４５  カウンタ
５４７  検出器
６０５，８０１  プラス１回路
６０３，７１１  論理演算部
【図１】
0003595659.tif 000002
【図２】
0003595659.tif 000003
【図３】
0003595659.tif 000004
【図４】
0003595659.tif 000005
【図５】
0003595659.tif 000006
【図６】
0003595659.tif 000007
【図７】
0003595659.tif 000008
【図８】
0003595659.tif 000009