以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図1は、複数のプロセッサを含む無線通信装置の構成を示す図である。無線通信装置は、RF(Radio Frequency)回路110、AD&DA変換部111、同期処理部112、復調処理部113、誤り訂正部114、変調処理部115、符号化処理部116、MAC(Media Access Control)部117、専用ハードウェア118及び119を含む。同期処理部112、復調処理部113、誤り訂正部114、変調処理部115、符号化処理部116、及びMAC部117の各々は、プロセッサ121、メモリ122、周辺回路123、及びバス124を含むプロセッサモジュール構成となっている。
プロセッサ121は各モジュールにおいて同一の構成であってよい。或いは、幾つかのモジュールにおいて、プロセッサ121の構成は、他のモジュールのプロセッサ121の構成と異なってもよい。周辺回路123は、例えばタイマ、割込みコントローラ、DMAC(Direct Memory Access Controller)等の基本回路を含み、この基本回路は各モジュールにおいて同一の構成であってよい。周辺回路123には、更に各モジュールでの処理に応じた専用の回路が含まれてもよい。メモリ122は、プログラム領域P、ワーク領域W、データ受け取り用入力領域I、データ受け渡し用出力領域Oを含んでよい。専用ハードウェア118は、例えばターボ復号処理を行なう専用の回路である。また専用ハードウェア119は、例えばMIMO(Multiple Input Multiple Output)処理を行なう専用の回路である。これらのターボ復号処理やMIMO処理は、一般に演算処理が複雑で且つ計算量も多く、専用のハードウェアにより高速に実行される。
アンテナより受信されたRF信号は、RF回路110により変調信号とされる。変調信号はAD&DA変換部111によりサンプリングされて、デジタルデータが生成される。同期処理部112がデジタルデータのタイミングを調整し、更に復調処理部113が復調処理を実行して軟判定データを抽出する。誤り訂正部114と専用ハードウェア118のターボ復号器とにより、軟判定データに基づいて誤り訂正と復号処理を実行し、ビットデータが復号される。復号されたビットデータは、上位レイヤであるMAC部117に渡される。
送信時にはMAC部117が送信指示を出すと共に、送信データを符号化処理部116に渡す。符号化処理部116は、送信データに対して符号化処理及びインターリーブ処理を実行して、符号化データを生成する。この符号化データは変調処理部115により変調されて変調信号となり、AD&DA変換部111によりアナログ変調信号に変換される。この変調信号がRF回路110によりRF信号に変換されて、アンテナから送信される。
図2は、符号化処理部116に用いるプロセッサ121の構成の一例を示す図である。図2に示すプロセッサは、符号化処理用に専用のレジスタを用いているが、専用レジスタを備えずに汎用レジスタのみを用いるプロセッサがより一般的な構成となる。図17にそのような一般的なプロセッサが示されており、その構成については後述する。
プロセッサ121は、プログラムカウンタ制御部31、命令デコード部32、汎用レジスタ33、専用レジスタ34、演算論理ユニット(ALU:Arithmetic Execution Unit)35、符号化ユニット36、及びロードストアアドレス制御部37を含む。プログラムカウンタ制御部31は、内部にプログラムカウンタレジスタと命令レジスタとを含む。プログラムカウンタ制御部31は、プログラムを構成する命令列を順次フェッチするために、現在のフェッチ対象である命令アドレスを指し示す値をプログラムカウンタレジスタに保持し、この値を順次カウントアップしていく。プログラムカウンタレジスタが指し示す命令アドレスは命令メモリに供給され、この命令アドレスの命令が読み出され、プログラムカウンタ制御部31内の命令レジスタに順次格納される。
命令デコード部32は、プログラムカウンタ制御部31の命令レジスタに格納される命令を受け取り、受け取った命令をデコードする。この命令のデコード結果に応じて、命令デコード部32は、例えば演算論理ユニット35を制御して演算処理を実行させる。汎用レジスタ33には、演算論理ユニット35により実行する演算処理のオペランドが格納されており、命令デコード部32の制御により、所望のオペランドが汎用レジスタ33から演算論理ユニット35に供給される。またデコード対象の命令が専用の符号化命令である場合、命令デコード部32は、この命令のデコード結果に応じて符号化ユニット36を制御して再帰的畳み込み符号化処理を実行させる。専用レジスタ34には、符号化ユニット36により実行する符号化処理に用いるデータ及びパラメータが格納されており、符号化ユニット36により適宜参照され、更新される。なお演算論理ユニット35による演算処理の結果は、汎用レジスタ33又は専用レジスタ34に送られ格納されてよい。また演算論理ユニット35は、分岐命令を実行して分岐先アドレスを計算してよい。演算論理ユニット35により計算された分岐先アドレスはプログラムカウンタ制御部31に供給され、プログラムカウンタ制御部31が、現在のフェッチ対象である命令アドレスを指し示す値を、分岐先アドレスを示す値に書き換えてよい。
命令デコード部32がデコードした命令がロード命令及びストア命令の場合には、ロードストアアドレス制御部37が、アクセス先を求めるためのアドレス計算を行い、ロード命令又はストア命令を実行する。このロード命令の実行により、読み出し対象のデータがデータメモリの所望のアドレスから読み出されて汎用レジスタ33に格納される。またストア命令の実行により、格納対象のデータが汎用レジスタ33から読み出されてデータメモリの所望のアドレスに書き込まれる。
符号化ユニット36は、後述するようにXOR回路及びAND回路を含む論理回路であり、再帰的畳み込み符号化処理を実行する。この符号化ユニット36が、1つの符号化命令の実行に応じて、符号化対象データのうちのどのくらいの長さのビット列を符号化するかは、要求される符号化処理の条件を考慮して適宜決めておけばよい。例えば、符号化対象データのうちの例えば4ビットが、1回の符号化命令実行により符号化ユニット36により符号化されてよい。また或いは、プログラムカウンタ制御部31のデータ幅に合わせて、1回の符号化命令実行により当該データ幅に等しい数のビット数の符号化処理を実行してよい。例えば、プロセッサ121のデータ幅が32ビットであれば、1回の符号化命令実行により、32ビットの符号化対象データを符号化処理することになる。
また符号化ユニット36は、以下に説明するように、符号化対象データ列の順方向にも逆方向にも符号化処理を実行可能なように構成されてよい。具体的には、符号化ユニット36は、符号化対象データを順方向に符号化する第1符号化器と、符号化対象データを逆方向に符号化する第2符号化器とを含んでよい。この第2の符号化器は、後述するように複数個設けられてよい。そして、第1符号化器による順方向の符号化と複数の第2符号化器による逆方向の符号化とが並行して実行されてよい。このように、符号対象のデータ列を前後から同時に符号化処理すれば、一方から符号化処理する場合と比較して、最も効率がよい場合に半分の時間で符号化処理を終了することができる。
また一般に、符号化処理は、データの順番を入れ替えるインターリーブを実行した後に実行する。この際、インターリーブと符号化とが並行して実行可能な実装の形態であれば、インターリーブ終了前に符号化処理を前倒しで開始して、符号化処理をなるべく早く完了させることも可能である。この場合、インターリーブによるデータ並べ替えの性質によっては、データ列の先頭から順方向に符号化処理するよりも、データ列の末尾から逆方向に符号化処理する方が早く符号化処理が終了する場合もある。例えば、並べ替え対象のデータ列の最後のデータがインターリーブ後のデータ列の第1番目のデータ位置に配置される場合、順方向への符号化処理はインターリーブ終了後に初めて開始できるが、逆方向への符号化処理はその前に開始することができる。従って、単純に順方向又は逆方向の何れかの方向の符号化を行なう構成であっても、インターリーブによるデータ並べ替えの性質を考慮することで、符号化処理終了時間を早めることが可能となる。
図3は、図2の演算論理ユニット35、符号化ユニット36、及びレジスタのより詳細な構成を示す図である。前述のように、符号化ユニット36は、符号化対象データを順方向に畳み込み符号化する第1符号化器(RSC)41と、符号化対象データを逆方向に畳み込み符号化する複数の第2符号化器(ReRSC)42−1乃至42−nとを含んでよい。ここでRSCは、再帰系統的畳み込み(Recursive Systematic Convolutional)符号化を表わしている。またReRSCは、逆方向(Reverse-direction)のRSCを表わしている。第2符号化器(ReRSC)42−1乃至42−nが複数個設けられる理由については、後程図5を用いて説明する。図3に示されるように、汎用レジスタ33のデータは、演算論理ユニット35及び符号化ユニット36の何れにも供給可能であり、また専用レジスタ34のデータも、演算論理ユニット35及び符号化ユニット36の何れにも供給可能である。これにより、通常の演算処理と符号化処理との間で自由なデータのやり取りが可能となる。
図4は、畳み込み符号化を行なう符号化器の一般化した構成を示す図である。D1乃至Dnは、クロックに同期して1ビットの入力を取り込み保持するレジスタであり、縦続接続されることによりシフトレジスタを構成する。レジスタD1乃至Dnの各々は、1クロックの遅延素子として機能する。AND回路10は、一方の入力であるパラメータβと他方の入力との論理和を演算する。複数のXOR回路11は、AND回路10の出力間の排他的論理和を演算することにより、出力データOUTを生成する。この符号化器のフィードフォワード多項式は、
g1(D) = β01 + β1D + β2D2 +・・・+βn Dn
となる。またAND回路12は、一方の入力であるパラメータαと他方の入力との論理和を演算する。複数のXOR回路13は、AND回路12の出力間の排他的論理和を演算することにより、フィードバックデータを生成する。このフィードバックデータを計算するフィードバック多項式は、
g0(D) = α01 + α1D + α2D2 +・・・+αn Dn
となる。なおここで、n次の再帰型畳み込み符号化器の定義として、n次の項のフィードバック係数であるαnは1である。
図4に示す再帰的畳み込み符号化を行なう符号化器は、入力データ列に対して先頭から順方向に畳み込み符号化を行ない、符号化データ列を生成する。この符号化器が生成する符号化データ列と同一のデータ列を生成する符号化器であって、上記入力データ列に対して最後尾から逆方向に畳み込み符号化を行なう符号化器を、以下のようにして設計する。逆向きの符号化を実現するためには、時刻t+1のレジスタの値から時刻tのレジスタの値が再現できる回路を求めればよい。
まず図4に示す順方向のシフトレジスタのレジスタD2乃至Dnのうち、任意のレジスタDi+1(i=1〜n−1)の時刻t+1の値Di+1(t+1)は、以下の式(1)で表わされる。
ここでD
i(t)は、レジスタDiの時刻tの値である。この式は、シフトレジスタ中の着目レジスタの値が、1つ前に接続されるレジスタの1時刻前の値に等しいことを示している。またレジスタからのフィードバックデータと時刻tの入力データIN(t)との排他的論理和が入力されるシフトレジスタD1の時刻t+1の値D
1(t+1)は、以下の式(2)で表わされる。
式(1)から、逆方向に畳み込み符号化を行なう符号化器においても、レジスタD1乃至Dn−1のうちの任意のレジスタDi(i=1〜n−1)の時刻tの値Di(t)は、時刻t+1のレジスタDi+1の値と等しければよいことが分かる。ここで、逆方向の畳み込み符号化であるから、データに着目すると、同期クロックが1つ進行すると時刻が1つ前に戻ることになる。従って、レジスタD1乃至Dnでシフトレジスタを構成し、同期クロックと共にDnからD1に向かってデータが逆方向にシフトする構成とすればよい。
更に、レジスタDnの値については、以下のように計算できる。前述のようにαnは1であり、上記式(2)に式(1)を代入すると、以下の式が得られる。
1ビットの排他的論理和演算は+も−も同一演算となることを考慮して、上式を移項によりDn(t)を表わす式に変形すると、以下の式(3)が得られる。
図5は、逆方向に畳み込み符号化を行なう符号化器の一般化した構成を示す図である。図5に示す符号化器は、上記の式(1)に相当する逆方向のシフトレジスタと、上記の式(3)に相当する演算を行なうことにより、各レジスタD1乃至Dnの値を決定する構成となっている。AND回路17は、一方の入力であるパラメータαと他方の入力との論理和を演算する。複数のXOR回路18は、AND回路17の出力間の排他的論理和を演算することにより、式(3)に相当する演算を実行する。なおレジスタD1の出力を一方の入力として受け取るAND回路17の他方の入力は、式(3)の右辺の最後の項に対応して係数値1である。
図5において、AND回路15は、一方の入力であるパラメータγと他方の入力との論理和を演算する。複数のXOR回路16は、AND回路15の出力間の排他的論理和を演算することにより、出力データOUTを生成する。この出力データOUTを計算する多項式は、以下のようにして計算できる。図4の符号化器における出力OUTの値は、
OUT=β0(α01+α1D+α2D2+・・・+αnDn)+β1D+β2D2+・・・+βnDn (4)
である。上式から、Di(i=1〜n)の項の係数値は、β0αi + βiと求められる。従って、図5に示されるパラメータγiは以下の値となる。
γ0=β0α0
γi=β0αi + βi (i=1〜n) (5)
以上のようにして、図5に示す逆方向の畳み込み符号化器の一般化した構成において、各パラメータの値が求められる。図5に示す符号化器は、図4の符号化器が生成する符号化データ列と同一のデータ列を生成する符号化器であって、入力データ列に対して最後尾から逆方向に畳み込み符号化を行なう符号化器である。但し、図5の逆方向符号化器の初期内部状態(レジスタD1乃至Dnの初期値)をどのような値にしておくべきなのか、不明である。そこで初期内部状態の全ての組み合わせについて逆方向の畳み込み符号化を別個に行い、複数の符号化データ列を各々別個に生成する。そして、全ての入力データ列の符号化を終了した段階で、複数の場合の各々について内部状態をチェックする。この終了時の内部状態が全てゼロ(レジスタD1乃至Dnの値が全て0)となるような逆方向符号化演算の結果を、順方向符号化演算と同一の符号化データ列を生成するものとして選択すればよい。何故なら、順方向符号化演算は、初期内部状態が全てゼロの状態から開始されるからである。
なお、順方向符号化と逆方向符号化とを例えば全データ列の前半分と後半分とのそれぞれについて実行する場合、中間点において、順方向符号化演算の内部状態と一致する内部状態となる逆方向符号化演算結果を選択すればよい。また、順方向符号化と逆方向符号化とが出会う位置は、中間点に限らず、例えば前段でインターリーブ処理が行なわれる場合、インターリーブの並べ替えにより最後に位置が決定されるデータの位置であってもよい。
図3の構成では、上記のように初期内部状態の全ての組み合わせについて逆方向の畳み込み符号化を別個に並行して行なうために、符号化対象データを逆方向に符号化する第2符号化器42−1乃至42−nが複数個設けられている。例えば、初期内部状態のn個の組み合わせについて第2符号化器42−1乃至42−nにより逆方向の符号化を実行すると、第2符号化器42−1乃至42−nの内部状態に相当するn個のデータが専用レジスタ34に格納される。また第1符号化器41により順方向の符号化を実行すると、第1符号化器41の内部状態に相当する1個のデータが専用レジスタ34に格納される。演算論理ユニット35は、専用レジスタ34から内部状態データを読み出すことで、逆方向符号化の内部状態であるn個のデータと順方向符号化の内部状態である1個のデータとを順次比較する。この比較動作により、逆方向のn個のデータのうちで順方向の1個のデータと一致するものを特定することができる。特定された内部状態データに対応する逆方向の符号化データが、正しい符号化データとして選択される。
図6は、順方向の符号化を行なう第1符号化器41及び専用レジスタ34の構成の一例を示す図である。図6に示す符号化器は、図4に示す符号化器に相当する。第1符号化器41は、デコード回路51、AND回路52、53、54−1乃至54−4、55−1乃至55−4、56−1乃至56−4、及びXOR回路57乃至59を含む。βレジスタ61、αレジスタ62、及びシフトレジスタ63−1乃至63−4は、図3に示す専用レジスタ34のレジスタ群の一部に相当する。ソースレジスタ64及びデスティネーションレジスタ65は、図3に示す汎用レジスタ33のレジスタ群の一部に相当する。なお汎用レジスタ33の各レジスタは、例えば32ビット長のレジスタであってよい。
βレジスタ61は、図4で説明した符号化器のフィードフォワード多項式のパラメータβを格納する。αレジスタ62は、図4で説明した符号化器のフィードバック多項式のパラメータαを格納する。ソースレジスタ64は、符号化対象のデータを格納しており、データの先頭から順番に1ビットずつ符号化器に供給される。デスティネーションレジスタ65は、符号化器から1ビットずつ出力される符号化されたデータを格納する。シフトレジスタ63−1乃至63−4は、図4で説明した符号化器のレジスタD1乃至Dnに相当し、内部状態データを格納する。なお図6では、4ビットのシフトレジスタに対応した符号化器の構成を示すが、シフトレジスタのビット数は4ビットに限られず、例えば8ビット、16ビット、32ビット等であってよく、符号化処理の条件や拡張性等を考慮して任意の数に設定してよい。
XOR回路58は、図4の符号化器の複数のXOR回路11に相当する。AND回路55−1乃至55−4は、図4の複数のAND回路10に相当する。XOR回路57及び59は、図4の符号化器の複数のXOR回路13に相当する。AND回路56−1乃至56−4は、図4の複数のAND回路12に相当する。図6に示す例では、βレジスタ61のパラメータβの値が1、0、1、0であり、αレジスタ62のパラメータαの値が0、1、1、0である。
図7は、図6に示す例に対応する符号化器の構成を示す図である。図6に示すようにβレジスタ61のパラメータβの値が1、0、1、0であり、αレジスタ62のパラメータαの値が0、1、1、0である場合、符号化器は、図7に示すような構成となる。このように、βレジスタ61及びαレジスタ62に所望のパラメータ値を設定することで、所望の構成(所望の生成多項式)の符号化器を実現することができる。
なお図6において、デコード回路51は、シフトレジスタ63−1乃至63−4のうち使用するレジスタの個数(図6及び図7に示す例の場合は3)を示す2ビットのデータimm2をデコードして、4ビットの信号を出力する。この4ビットのうち、使用するレジスタの個数に等しい数(この例の場合は3個)の上位側ビットの信号がHIGH(ビット値1)となり、残りの下位側ビットはLOW(ビット値0)とされる。即ち、デコード回路51の出力は“1110”となる。AND回路52及び53により、βレジスタ61の格納値及びαレジスタ62の格納値それぞれに対して、デコード回路51の出力でマスク処理を行なうことにより、不要なパラメータが間違いなく0になることを保証している。更に、デコード回路51の出力“1110”がAND回路54−1乃至54−4に入力され、シフトレジスタ63−1乃至63−4のうち使用する3つのレジスタのみについて、レジスタ間のデータのシフト動作が可能な状態となる。即ち、この例の場合には、レジスタ63−4の格納値は常時0となる。前述のように、順方向符号化のシフトレジスタの値(内部状態)は、逆方向符号化の内部状態と比較されるので、比較対象でない不要なビットを0にしておくことで、正しい比較結果を得ることができる。
図6の順方向の符号化器による符号化処理において、ソースレジスタ64に格納される符号化対象データは下位ビットから順番に符号化される。シフトレジスタ63−1乃至63−4には、最初の符号化命令実行時には“0”を格納しておく。次回以降の符号化命令実行時には、前回の符号化命令実行終了時のシフトレジスタ63−1乃至63−4の値をそのまま保持しておけばよい。フィードバック側のAND回路56−1乃至56−4が、マスク処理されたαレジスタ62の値とシフトレジスタ63−1乃至63−4の値とのビット毎の論理積を求める。更にXOR回路59が、この論理積の全ビット同士の排他的論理和を求める。更に、XOR回路57が、ソースレジスタ64の最下位ビットと上記XOR回路59の出力との排他的論理和を求める。このXOR回路57の出力がシフトレジスタ63−1乃至63−4の左側から入力され、シフトレジスタ63−1乃至63−4の各データは右に1ビットシフトされる。またフィードフォワード側のAND回路55−1乃至55−4が、マスク処理されたβレジスタ61の値とシフトレジスタ63−1乃至63−4の値とのビット毎の論理積を求める。更に、XOR回路58が、XOR回路57の出力と上記論理積の全ビットとの排他的論理和を求める。このXOR回路58の出力が、デスティネーションレジスタ65の最下位ビットに挿入される。ビット挿入の際、デスティネーションレジスタ65の内容を左に1ビットシフトさせておく。上記の一連の動作を、1回の符号化命令実行について例えば4回実行することで、ソースレジスタ64の4ビットの符号化対象データに対する4ビットの符号化後データが、デスティネーションレジスタ65に格納される。
図8は、逆方向の符号化を行なう第2符号化器及び専用レジスタ34の構成の一例を示す図である。図8に示す符号化器は、第2符号化器42−1乃至42−nのうちの1つであり、図5に示す符号化器に相当する。第2符号化器は、デコード回路71、AND回路72、73、74−1乃至74−4、75−1乃至75−4、76−1乃至76−4、及びXOR回路77及び78を含む。γレジスタ81、αレジスタ82、及びシフトレジスタ83−1乃至83−4は、図5に示す専用レジスタ34のレジスタ群の一部に相当する。ソースレジスタ84及びデスティネーションレジスタ85は、図5に示す汎用レジスタ33のレジスタ群の一部に相当する。
γレジスタ81は、図5で説明した符号化器のフィードフォワード多項式のパラメータγを格納する。αレジスタ82は、図5で説明した符号化器のフィードバック多項式のパラメータαを格納する。ソースレジスタ84は、符号化対象のデータを格納しており、データの先頭から順番に1ビットずつ符号化器に供給される。デスティネーションレジスタ85は、符号化器から1ビットずつ出力される符号化されたデータを格納する。シフトレジスタ83−1乃至83−4は、図5で説明した符号化器のレジスタD1乃至Dnに相当し、内部状態データを格納する。なお図8では、4ビットのシフトレジスタに対応した符号化器の構成を示すが、シフトレジスタのビット数は4ビットに限られず、例えば8ビット、16ビット、32ビット等であってよく、符号化処理の条件や拡張性等を考慮して任意の数に設定してよい。
XOR回路77は、図5の符号化器の複数のXOR回路16に相当する。AND回路75−1乃至75−4は、図5の複数のAND回路15に相当する。XOR回路78は、図5の符号化器の複数のXOR回路18に相当する。AND回路76−1乃至76−4は、図5の複数のAND回路17に相当する。図8に示す例では、γレジスタ81のパラメータγの値が0、1、1、0であり、αレジスタ82のパラメータαの値が0、1、0、1である。
図9は、図8に示す例に対応する符号化器の構成を示す図である。図6に示すようにγレジスタ81のパラメータγの値が0、1、1、0であり、αレジスタ82のパラメータαの値が0、1、0、1である場合、符号化器は、図9に示すような構成となる。このように、γレジスタ81及びαレジスタ82に所望のパラメータ値を設定することで、所望の構成(所望の生成多項式)の符号化器を実現することができる。
なお図8において、デコード回路71は、シフトレジスタ83−1乃至83−4のうち使用するレジスタの個数(図8及び図9に示す例の場合は3)を示す2ビットのデータimm2をデコードして、4ビットの信号を出力する。この4ビットのうち、使用するレジスタの個数に等しい数(この例の場合は3個)の下位側ビットの信号がHIGH(ビット値1)となり、残りの上位側ビットはLOW(ビット値0)とされる。即ち、デコード回路71の出力は“0111”となる。AND回路72及び73により、γレジスタ81の格納値及びαレジスタ82の格納値それぞれに対して、デコード回路71の出力でマスク処理を行なうことにより、不要なパラメータが間違いなく0になることを保証している。更に、デコード回路71の出力“0111”がAND回路74−1乃至74−4に入力され、シフトレジスタ83−1乃至83−4のうち使用する3つのレジスタのみについて、レジスタ間のデータのシフト動作が可能な状態となる。即ち、この例の場合には、レジスタ83−1の格納値は常時0となる。前述のように、逆方向符号化のシフトレジスタの値(内部状態)は、順方向符号化の内部状態と比較されるので、比較対象でない不要なビットを0にしておくことで、正しい比較結果を得ることができる。
図8の逆方向の符号化器による符号化処理において、ソースレジスタ84に格納される符号化対象データは上位ビットから順番に符号化される。シフトレジスタ83−1乃至83−4には、所定の初期状態の値を格納しておく。次回以降の符号化命令実行時には、前回の符号化命令実行終了時のシフトレジスタ83−1乃至83−4の値をそのまま保持しておけばよい。フィードバック側のAND回路76−1乃至76−4が、マスク処理されたαレジスタ82の値とシフトレジスタ83−1乃至83−4の値とのビット毎の論理積を求める。更にXOR回路78が、ソースレジスタ84の最上位ビットと上記論理積の全ビットとの排他的論理和を求める。このXOR回路78の出力がシフトレジスタ83−1乃至83−4の右側から入力され、シフトレジスタ83−1乃至83−4の各データは左に1ビットシフトされる。またフィードフォワード側のAND回路75−1乃至75−4が、マスク処理されたγレジスタ81の値とシフトレジスタ83−1乃至83−4の値とのビット毎の論理積を求める。更に、XOR回路77が、ソースレジスタ84の最上位ビットと上記論理積の全ビットとの排他的論理和を求める。このXOR回路77の出力が、デスティネーションレジスタ85の最上位ビットに挿入される。ビット挿入の際、デスティネーションレジスタ65の内容を右に1ビットシフトさせておく。上記の一連の動作を、1回の符号化命令実行について例えば4回実行することで、ソースレジスタ84の4ビットの符号化対象データに対する4ビットの符号化後データが、デスティネーションレジスタ85に格納される。
図10は、符号化命令の仕様を示す図である。(a)に示す順方向の符号化命令は、「RSC r0,#imm2,r1」の形式で指定される。(b)に示す逆方向の符号化命令は、「ReRSC r0,#imm2,r1」の形式で指定される。これら符号化命令において、r0は、入力データ(符号化対象データ)を格納するソースレジスタを示す。#imm2は、使用するシフトレジスタの個数を即値指定する。1〜4個の範囲で使用するシフトレジスタの個数を最少の2ビットで表現するために、実際には“個数−1”の2進数により、個数を表現してよい。例えば1つ使用する場合であれば“00”であり、3つ使用する場合であれば“10”となる。r1は、出力データ(符号化後データ)を格納するデスティネーションレジスタを示す。また明示的に符号化命令には現れないが、シフトレジスタ、αレジスタ、及びβレジスタの3つのレジスタを順方向の符号化命令の実行に際して使用する。また、シフトレジスタ、αレジスタ、及びγレジスタの3つのレジスタを逆方向の符号化命令の実行に際して使用する。
図11は、レジスタ設定命令の仕様を示す図である。(a)に示すレジスタ設定命令は、「MOVRE r0,e0」の形式で指定される。この命令を実行することにより、指定した汎用レジスタr0から指定した専用レジスタe0にデータを移動する。(b)に示すレジスタ設定命令は、「MOVER e0,r0」の形式で指定される。この命令を実行することにより、指定した専用レジスタe0から指定した汎用レジスタr0にデータを移動する。
図12は、専用レジスタ群の構成の一例を示す図である。図12に示す専用レジスタ群の構成は、符号化器のシフトレジスタが4ビットの場合に相当する。この場合、逆方向の符号化器は、16(=24)個の内部状態に対応して16個設けられる。従って、16個の逆方向の符号化器に対応して、シフトレジスタ、αレジスタ、及びγレジスタのセットが16個設けられる。順方向の符号化器に対しては、シフトレジスタ、αレジスタ、及びβレジスタのセットが1個設けられる。各レジスタは、0ビットから3ビットまでの4ビットに対して、書き込み及び読み出しが可能となっている。
ここまでの説明において、図2に示す符号化ユニット36の順方向の符号化器及び逆方向の符号化器は、1ビットずつ符号化演算を行なう構成としたが、これに限られるものではない。符号化ユニット36は、符号化対象データの複数ビットについて同時に符号化を実行する構成であってよい。
図13は、4ビット纏めた入力INと4ビット纏めた出力OUTとの論理関係を示したテーブルである。図13の(a)に示すテーブルは、図7の順方向符号化器が行なう論理演算を、順次入力される入力INの4つのビットX0乃至X3それぞれについて示したものであり、図7の構成から容易に導くことができる。また図13の(b)に示すテーブルは、図9の逆方向符号化器が行なう論理演算を、順次入力される入力INの4つのビットX0乃至X3それぞれについて示したものであり、図9の構成から容易に導くことができる。
図14は、順方向の符号化処理を行なう符号化器及び専用レジスタの構成の一例を示す図である。図14に示す符号化器は、図6に示す符号化器を4ビット同時処理できるように変形したものに相当する。符号化器は、デコード回路151、AND回路152−1乃至152−4、153−1乃至153−4、154、155−1乃至155−4、156−1乃至156−4、XOR回路158−1乃至158−4、159−1乃至159−4を含む。βレジスタ161−1乃至161−4、αレジスタ162−1乃至162−4、及びシフトレジスタ163は、図3に示す専用レジスタ34のレジスタ群の一部に相当する。ソースレジスタ164−1乃至164−4及びデスティネーションレジスタ165−1乃至165−4は、図3に示す汎用レジスタ33のレジスタ群の一部に相当する。
この符号化器は、XOR回路及びAND回路を含む複数の同一の論理回路201乃至204を含む。複数の同一の論理回路201乃至204が、複数入力ビット(この例では4ビット)に一対一に対応して設けられ、複数入力ビットのそれぞれに対応する符号化ビットを出力する。ソースレジスタ164−1乃至164−4は、図6に示すソースレジスタ64の下位4ビットに相当する。またデスティネーションレジスタ165−1乃至165−4は、図6に示すデスティネーションレジスタ65の下位4ビットに相当する。なおαレジスタ及びβレジスタはそれぞれ複数個設けられるかのように示されるが、これらのレジスタは実際には同一のレジスタであってよい。
この順方向の符号化器による符号化処理において、シフトレジスタ163には、最初の符号化命令実行時には“0”を格納しておく。次回以降の符号化命令実行時には、前回の符号化命令実行終了時のシフトレジスタ163の値をそのまま保持しておけばよい。
論理回路201において、フィードバック側のAND回路156−1が、AND回路152−1によりマスク処理されたαレジスタ162−1の値とシフトレジスタ163の値とのビット毎の論理積を求める。更にXOR回路159−1が、ソースレジスタ164−1の格納ビットと上記論理積の全ビットとの排他的論理和を求める。次段の論理回路202に入力される信号線において、シフトレジスタ163の各ビット位置は右に1つシフトされ、XOR回路159−1の出力がシフトレジスタ163の左端のビットの位置に配置される。これにより、次段の論理回路202へのシフトレジスタ163からの入力は、図6の構成において右に1ビットシフトした後のシフトレジスタの格納データ内容と同一となる。
またフィードフォワード側のAND回路155−1が、AND回路153−1によりマスク処理されたβレジスタ161−1の値とシフトレジスタ163の値とのビット毎の論理積を求める。更に、XOR回路158−1が、XOR回路159−1の出力と上記論理積の全ビットとの排他的論理和を求める。このXOR回路158−1の出力が、デスティネーションレジスタ165−1に格納される。
論理回路202乃至204においても、上記の論理回路201と同様の動作が実行される。これにより、図6の符号化器を4クロックサイクル動作(即ちシフトレジスタを4回シフト動作)させる場合と同等の演算を、1クロックサイクルで実行することができる。論理回路204から出力される4回のシフト動作後のシフトレジスタの値は、AND回路154により不要なビットがマスクされる。このマスク後の値により、シフトレジスタ163の格納データ内容を更新する。
図15は、逆方向の符号化処理を行なう符号化器及び専用レジスタの構成の一例を示す図である。図15に示す符号化器は、図8に示す符号化器を4ビット同時処理できるように変形したものに相当する。符号化器は、デコード回路171、AND回路172−1乃至172−4、173−1乃至173−4、174、175−1乃至175−4、176−1乃至176−4、XOR回路177−1乃至177−4、XOR回路178−1乃至178−4を含む。γレジスタ181−1乃至181−4、αレジスタ182−1乃至182−4、及びシフトレジスタ183は、図3に示す専用レジスタ34のレジスタ群の一部に相当する。ソースレジスタ184−1乃至184−4及びデスティネーションレジスタ185−1乃至185−4は、図3に示す汎用レジスタ33のレジスタ群の一部に相当する。
この符号化器は、XOR回路及びAND回路を含む複数の同一の論理回路301乃至304を含む。複数の同一の論理回路301乃至304が、複数入力ビット(この例では4ビット)に一対一に対応して設けられ、複数入力ビットのそれぞれに対応する符号化ビットを出力する。ソースレジスタ184−1乃至184−4は、図8に示すソースレジスタ84の上位4ビットに相当する。またデスティネーションレジスタ185−1乃至185−4は、図8に示すデスティネーションレジスタ85の上位4ビットに相当する。なおαレジスタ及びγレジスタはそれぞれ複数個設けられるかのように示されるが、これらのレジスタは実際には同一のレジスタであってよい。
この逆方向の符号化器による符号化処理において、シフトレジスタ183には、最初の符号化命令実行時には所定の初期値を格納しておく。次回以降の符号化命令実行時には、前回の符号化命令実行終了時のシフトレジスタ183の値を、そのまま保持しておけばよい。
論理回路301において、フィードバック側のAND回路176−1が、AND回路172−1によりマスク処理されたαレジスタ182−1の値とシフトレジスタ183の値とのビット毎の論理積を求める。更にXOR回路178−1が、ソースレジスタ184−1の格納ビットと上記論理積の全ビットとの排他的論理和を求める。次段の論理回路302に入力される信号線において、シフトレジスタ183の各ビット位置は左に1つシフトされ、XOR回路178−1の出力がシフトレジスタ183の右端のビットの位置に配置される。これにより、次段の論理回路302へのシフトレジスタ183からの入力は、図8の構成において左に1ビットシフトした後のシフトレジスタの格納データ内容と同一となる。
またフィードフォワード側のAND回路175−1が、AND回路173−1によりマスク処理されたγレジスタ181−1の値とシフトレジスタ183の値とのビット毎の論理積を求める。更に、XOR回路177−1が、ソースレジスタ184−1の格納ビットと上記論理積の全ビットとの排他的論理和を求める。このXOR回路177−1の出力が、デスティネーションレジスタ185−1に格納される。
論理回路302乃至304においても、上記の論理回路301と同様の動作が実行される。これにより、図8の符号化器を4クロックサイクル動作(即ちシフトレジスタを4回シフト動作)させる場合と同等の演算を、1クロックサイクルで実行することができる。論理回路304から出力される4回のシフト動作後のシフトレジスタの値は、AND回路174により不要なビットがマスクされる。このマスク後の値により、シフトレジスタ183の格納データ内容を更新する。
図16は、図2のプロセッサ121により符号化処理を実行する手順を示すフローチャートである。ステップS1で、順方向の畳み込み符号化処理(RSC)用の専用レジスタに所定のデータを設定する。ステップS2で、逆方向の畳み込み符号化処理(RRSC)用の専用レジスタに所定のデータを設定する。例えば図7及び図9に示すように3個のレジスタを使用する場合には、初期状態の数は8(=23)個であるので、8セットの逆符号化器の分についてレジスタ設定を行なう。またこのステップS2で、変数Iを0に初期設定する。
次にステップS3で、未だ符号化されていない符号化対象データ列の先頭の4ビットと末尾の4ビットとを例えばメモリから取得して、順方向符号化処理のソースレジスタ及び逆方向符号化処理のソースレジスタとして使用する汎用レジスタにそれぞれ格納する。ステップS4で、1つの順方向符号化処理及び8つの逆方向符号化処理を、それぞれの符号化命令により並列に実行する。なお逆方向符号化処理については、1つの符号化処理命令RRSCにより、必要数の逆符号化処理が並列に実行される構成としてよい。なおステップS4では、変数Iを1インクリメントする。
ステップS5で、符号化対象データのデータ長から8Iを減算した値が0であるか否かを判定する。この値が0であれば、全ての符号化対象データの符号化処理が終了したことになる。ステップS5の判定結果がNOであれば、ステップS6で、デスティネーションレジスタが満杯であるか否かを判定する。満杯であれば、ステップS7で、デスティネーションレジスタの値をメモリへ格納する。満杯でなければ、ステップS8で、デスティネーションレジスタの内容をシフトして、次の符号化処理の準備をする。その後、ステップS3に戻り、以降の処理を繰り返す。
ステップS5の判定結果がYESである場合、ステップS9で、複数個の逆方向符号化処理のシフトレジスタのうちで、順方向符号化処理のシフトレジスタの値と一致する値を有するものを探す。ステップS10で、デスティネーションレジスタに格納されている結果をメモリに格納する。なおステップS9で一致するとして特定された逆方向符号化処理を示す情報は、当該逆方向符号化処理による符号化後データを正しいデータとして選択するために用いられる。
図17は、図1の符号化処理部116に用いるプロセッサ121の構成の別の一例を示す図である。図17において、図2と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図7に示すプロセッサでは、専用レジスタを設けることなく、汎用レジスタのみを用いて符号化処理を実行する。
プロセッサ121は、プログラムカウンタ制御部31、命令デコード部32、汎用レジスタ33、専用レジスタ34、演算ユニット501、及びロードストアアドレス制御部37を含む。演算ユニット501は、演算論理ユニット(ALU:Arithmetic Execution Unit)35及び符号化ユニット36を含む。
命令デコード部32は、命令のデコード結果に応じて、演算論理ユニット35を制御して演算処理を実行させる。汎用レジスタ33には、演算論理ユニット35により実行する演算処理のオペランドが格納されており、命令デコード部32の制御により、所望のオペランドが汎用レジスタ33から演算論理ユニット35に供給される。またデコード対象の命令が専用の符号化命令である場合、命令デコード部32は、この命令のデコード結果に応じて符号化ユニット36を制御して再帰的畳み込み符号化処理を実行させる。符号化ユニット36により実行する符号化処理に用いるデータ及びパラメータは、汎用レジスタ33に格納されており、符号化ユニット36により適宜参照され、更新される。演算論理ユニット35による演算処理の結果や符号化ユニット36による符号化処理の結果は、汎用レジスタ33に送られ格納されてよい。符号化ユニット36としては、ここまで説明した何れの構成の符号化器を用いてもよい。
図18は、図17の演算論理ユニット35、符号化ユニット36、及びレジスタのより詳細な構成を示す図である。図3と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
符号化ユニット36は、符号化対象データを順方向に畳み込み符号化する第1符号化器(RSC)41と、符号化対象データを逆方向に畳み込み符号化する複数の第2符号化器(ReRSC)42−1乃至42−nとを含んでよい。汎用レジスタ33のデータは、演算論理ユニット35及び符号化ユニット36の何れにも供給可能である。これにより、通常の演算処理と符号化処理との間で自由なデータのやり取りが可能となる。
図19は、図17のプロセッサに対する符号化命令の仕様の一例を示す図である。図10に示す符号化命令では、符号化命令の実行に際して使用するシフトレジスタ、αレジスタ、及びβレジスタの3つのレジスタを明示的には示していない。これは、図2に示す専用レジスタ34をこれら3つのレジスタとして用いることを想定していたからである。それに対して、図17のプロセッサでは、専用レジスタが設けられておらず、汎用レジスタのみを用いて符号化処理を実行する。従って、図17のプロセッサに対する符号化命令においては、上記3つのレジスタとして使用する汎用レジスタを明示的に指定する記述形式となっている。
図19(a)に示す順方向の符号化命令は、「RSC r0,#imm2,r1,alpha,beta,sft,hasu」の形式で指定される。図19(b)に示す逆方向の符号化命令は、「RRSC r0,#imm2,r1,alpha,beta,sft,hasu」の形式で指定される。r0は、入力データ(符号化対象データ)を格納するソースレジスタを示す。#imm2は、使用するシフトレジスタの個数を例えば“個数−1”に対応する2進数により表現する。r1は、出力データ(符号化後データ)を格納するデスティネーションレジスタを示す。sftは、符号化処理においてシフトレジスタとして用いるレジスタを指定する。alphaは、フィードバック多項式の係数αを設定するレジスタを指定する。betaは、フィードフォワード多項式の係数βを設定するレジスタを指定する。hasuは、何ビット一括処理するかを指定する。図14及び図15に示す符号化器は4ビット一括処理する回路構成となっているが、後述するように回路を変形することで、1ビットから4ビットの範囲内の指定ビット数で一括処理する回路構成とすることができる。例えば、nビット長のデータを4ビットずつ符号化するときにnが4の倍数でない場合、最後にはnを4で割った余りに等しい数のビットが残るので、この残ったビットについてはhasuで指定したビット数で一括処理する。またr0及びr1を同一レジスタとして、一方の指定を省略するようなニーモニックの記述を許してもよい。例えば{RSC r0,#imm2,alpha,beta,sft,hasu」と記述した場合、r0のレジスタのデータをr0のレジスタに出力するように動作してよい。
図20は、図17のプロセッサ121により図19の命令を用いて符号化処理を実行する手順を示すフローチャートである。ステップS11で、順方向処理用パラメータIをゼロに設定するとともに、逆方向処理用パラメータIRをゼロに設定する。ステップS12で、符号化対象データのデータ長を2で割った商(整数部)に余りを足した数をDLとし、符号化対象データのデータ長を2で割った商(整数部)をDLRとする。ここで、データ長が偶数なら余りはゼロであり、データ長が奇数なら余りは1である。
ステップS13で、未だ符号化されていない符号化対象データ列の先頭の4ビットと末尾の4ビットとを例えばメモリから取得して、順方向符号化処理のソースレジスタ及び逆方向符号化処理のソースレジスタとして使用する汎用レジスタにそれぞれ格納する。ステップS14で、1つの順方向符号化処理及び8つの逆方向符号化処理を、それぞれの符号化命令により並列に実行する。なお逆方向符号化処理については、1つの符号化処理命令RRSCにより、必要数の逆符号化処理が並列に実行される構成としてよい。なおステップS14では、変数I及びIRをそれぞれ1インクリメントする。
ステップS15で、DLから4Iを減算した値又はDLRから4IRを減算した値の何れかが0以下であるか否かを判定する。ステップS15の判定結果がNOであれば、ステップS16で、デスティネーションレジスタが満杯であるか否かを判定する。満杯であれば、ステップS17で、デスティネーションレジスタの値をメモリへ格納する。満杯でなければ、ステップS18で、デスティネーションレジスタの内容をシフトして、次の符号化処理の準備をする。その後、ステップS13に戻り、以降の処理を繰り返す。
ステップS15の判定結果がYESである場合、ステップS19で、DLを4で割った余りを図19(a)に示す順方向符号化命令においてhasuとして設定し、最後の順方向符号化処理を実行する。また同様に、DLRを4で割った余りを図19(b)に示す逆方向符号化命令においてhasuとして設定し、最後の逆方向符号化処理を実行する。ステップS20で、複数個の逆方向符号化処理のシフトレジスタのうちで、順方向符号化処理のシフトレジスタの値と一致する値を有するものを探す。ステップS21で、シフトレジスタの値が一致したものについて、デスティネーションレジスタに格納されている結果をメモリに格納する。なおステップS20で一致するとして特定された逆方向符号化処理を示す情報は、当該逆方向符号化処理による符号化後データを正しいデータとして選択するために用いられる。
図21は、順方向の符号化処理を行なう符号化器の構成の一例を示す図である。図21に示す符号化器は、4ビット同時処理する図14に示す符号化器を変形して、1ビットから4ビットの範囲で指定したビット数での同時処理を実行可能としたものである。図21において、図14と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図21に示す回路構成は、図14に示す回路構成と比較して、セレクタ511乃至514が設けられ、これらセレクタ511乃至514により、変数hasuに応じて適切なシフトレジスタ値を選択できる点が異なる。図21に示す符号化器においても、論理回路201乃至204において、図14で説明した動作と同様の動作が実行される。これにより、図6の符号化器を4クロックサイクル動作(即ちシフトレジスタを4回シフト動作)させる場合と同等の演算を、1クロックサイクルで実行することができる。
4ビット一括処理の場合、即ちhasuの値が4である場合には、論理回路204から出力される4回のシフト動作後のシフトレジスタの値が、セレクタ511乃至514により選択される。即ち、各セレクタ511乃至514は、4つの入力のうちの一番左側の入力を選択し、選択した値を出力としてAND回路154に供給する。このAND回路154により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ163の格納データ内容を更新する。
3ビット一括処理の場合、即ちhasuの値が3である場合には、論理回路203から出力される3回のシフト動作後のシフトレジスタの値が、セレクタ511乃至514により選択される。即ち、各セレクタ511乃至514は、4つの入力のうちの左から2番目の入力を選択し、選択した値を出力としてAND回路154に供給する。このAND回路154により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ163の格納データ内容を更新する。なお論理回路204中に示す「C」は、論理回路203から出力される3回のシフト動作後のシフトレジスタの値のうちの一番右側の値を示し、セレクタ514の左から2番目の入力とされる。図示の都合上、結線が煩雑になることを避けるために、直接結線して示さずに「C」のラベルを付けて示してある。「A」や「B」についても同様である。
2ビット一括処理の場合、即ちhasuの値が2である場合には、論理回路202から出力される2回のシフト動作後のシフトレジスタの値が、セレクタ511乃至514により選択される。即ち、各セレクタ511乃至514は、4つの入力のうちの左から3番目の入力を選択し、選択した値を出力としてAND回路154に供給する。このAND回路154により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ163の格納データ内容を更新する。
1ビット処理の場合、即ちhasuの値が1である場合には、論理回路201から出力される1回のシフト動作後のシフトレジスタの値が、セレクタ511乃至514により選択される。即ち、各セレクタ511乃至514は、4つの入力のうちの左から4番目(一番右)の入力を選択し、選択した値を出力としてAND回路154に供給する。このAND回路154により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ163の格納データ内容を更新する。
図22は、逆方向の符号化処理を行なう符号化器の構成の一例を示す図である。図22に示す符号化器は、4ビット同時処理する図15に示す符号化器を変形して、1ビットから4ビットの範囲で指定したビット数での同時処理を実行可能としたものである。図22において、図15と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図22に示す回路構成は、図15に示す回路構成と比較して、セレクタ521乃至524が設けられ、これらセレクタ521乃至524により、変数hasuに応じて適切なシフトレジスタ値を選択できる点が異なる。図22に示す符号化器においても、論理回路201乃至204において、図15で説明した動作と同様の動作が実行される。これにより、図8の符号化器を4クロックサイクル動作(即ちシフトレジスタを4回シフト動作)させる場合と同等の演算を、1クロックサイクルで実行することができる。
4ビット一括処理の場合、即ちhasuの値が4である場合には、論理回路304から出力される4回のシフト動作後のシフトレジスタの値が、セレクタ521乃至524により選択される。即ち、各セレクタ521乃至524は、4つの入力のうちの一番右側の入力を選択し、選択した値を出力としてAND回路174に供給する。このAND回路174により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ183の格納データ内容を更新する。
3ビット一括処理の場合、即ちhasuの値が3である場合には、論理回路303から出力される3回のシフト動作後のシフトレジスタの値が、セレクタ521乃至524により選択される。即ち、各セレクタ521乃至524は、4つの入力のうちの右から2番目の入力を選択し、選択した値を出力としてAND回路174に供給する。このAND回路174により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ183の格納データ内容を更新する。なお論理回路304中に示す「C」は、論理回路303から出力される3回のシフト動作後のシフトレジスタの値のうちの一番左側の値を示し、セレクタ521の右から2番目の入力とされる。図示の都合上、結線が煩雑になることを避けるために、直接結線して示さずに「C」のラベルを付けて示してある。「A」や「B」についても同様である。
2ビット一括処理の場合、即ちhasuの値が2である場合には、論理回路302から出力される2回のシフト動作後のシフトレジスタの値が、セレクタ521乃至524により選択される。即ち、各セレクタ521乃至524は、4つの入力のうちの右から3番目の入力を選択し、選択した値を出力としてAND回路174に供給する。このAND回路174により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ183の格納データ内容を更新する。
1ビット処理の場合、即ちhasuの値が1である場合には、論理回路301から出力される1回のシフト動作後のシフトレジスタの値が、セレクタ521乃至524により選択される。即ち、各セレクタ521乃至524は、4つの入力のうちの右から4番目(一番左)の入力を選択し、選択した値を出力としてAND回路174に供給する。このAND回路174により、シフトレジスタの値のうちで不要なビットをマスクし、マスク後の値により、シフトレジスタ183の格納データ内容を更新する。
図23は、図21の順方向符号化器と図22の逆方向符号化器とを組み合わせることにより、両方向の符号化処理を実行可能とした符号化器の構成の一例を示す図である。図23において、図21及び図22と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図23に示す両方向符号化器においては、図21の順方向符号化器と図22の逆方向符号化器とを組み合わせ、更に、新たに設けたセレクタ531乃至537により、順方向処理と逆方向処理とに応じて適宜値を選択する。セレクタ531は、順方向又は逆方向の何れかを示す選択信号Sに応じて、ソースレジスタ164−1乃至164−4とソースレジスタ184−1乃至184−4との何れか一方を選択して、論理回路201乃至204に供給する。セレクタ537は、順方向又は逆方向の何れかを示す選択信号Sに応じて、ソースレジスタからの入力とXOR回路159−1乃至159−4の出力との何れか一方を選択して、XOR回路158−1乃至158−4に供給する。
セレクタ532は、順方向又は逆方向の何れかを示す選択信号Sに応じて、論理回路201から出力されるシフトレジスタの値が、1回の左シフト動作後のものであるのか或いは1回の右シフト動作後のものであるのか、を選択する。セレクタ533は、順方向又は逆方向の何れかを示す選択信号Sに応じて、論理回路202から出力されるシフトレジスタの値が、2回の左シフト動作後のものであるのか或いは2回の右シフト動作後のものであるのか、を選択する。セレクタ534は、順方向又は逆方向の何れかを示す選択信号Sに応じて、論理回路203から出力されるシフトレジスタの値が、3回の左シフト動作後のものであるのか或いは3回の右シフト動作後のものであるのか、を選択する。セレクタ535は、順方向又は逆方向の何れかを示す選択信号Sに応じて、論理回路204から出力されるシフトレジスタの値が、4回の左シフト動作後のものであるのか或いは4回の右シフト動作後のものであるのか、を選択する。
セレクタ536は、順方向又は逆方向の何れかを示す選択信号Sに応じて、セレクタ511乃至514の出力とセレクタ521乃至524の出力との何れか一方を選択し、選択した値をAND回路154に供給する。以上により、図23に示す符号化器は、選択信号Sに応じて、順方向又は逆方向の何れかの符号化処理を実行することができる。
図24は、符号化処理部116に用いるプロセッサ121の構成の更に別の一例を示す図である。図24において、図2及び図17と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図24に示すプロセッサ121は、プログラムカウンタ制御部31、命令デコード部32、汎用レジスタ33、専用レジスタ34、ロードストアアドレス制御部37、及び演算ユニット501−1乃至501−4を含む。演算ユニット501−1乃至501−4は、図17に示す演算ユニット501と同一の構成及び機能を有してよい。4つの演算ユニット501−1乃至501−4を設けることにより、VLIW(Very Long Instruction Word)形式の命令の実行に対応することができる。VLIW型のプロセッサでは、命令メモリとのフェッチビット幅を広くすることにより、より多くの命令を1サイクルで発行可能となる。例えばVLIW命令が128ビットのビット幅であり、4つの32ビット幅の命令を含む場合、これらの命令を4つの演算ユニット501−1乃至501−4によりそれぞれ実行させることができる。
図25は、命令を4つ並列に纏めて1つのVLIW命令を生成する様子を示す図である。符号化においてシフトレジスタが例えば図7に示すように3ビットの場合、順方向及び逆方向の双方から演算を行うためには、1つの順方向の命令と8つの逆方向の命令とを実行する。これら8つの逆方向の命令のシフトレジスタの初期値は、それぞれ0〜7の値である。図25に示す命令列の例では、1つの順方向符号化命令RSCの後に8つの逆方向符号化命令RRSC0乃至RRSC7が続き、更に次の1つの順方向符号化命令RSCの後に同様に次の8つの逆方向符号化命令RRSC0乃至RRSC7が続いている。1つの順方向符号化命令及び8つの逆方向符号化命令の各々は、前回の自分自身の命令との依存関係が存在する。しかし、レジスタ配置を正しく行えば、並列する4つの命令同士のデスティネーションの競合が起こることはない。従って、図25に一例として示すような4並列パッキングが可能である。例えば1列目に示す4並列パッキングされたVLIW命令の場合、RSCを演算ユニット501−1、RRSC0を演算ユニット501−2、RRSC1を演算ユニット501−3、RRSC2を501−4に割り当てて演算を実行すればよい。並列パッキングは、一般に、実行可能プログラムを生成する際にコンパイラが実行する。
図26は、符号化処理部116に用いるプロセッサ121の構成の更に別の一例を示す図である。図26に示すプロセッサは、命令FIFO551、命令デコーダ552、プリデコーダ553、命令選択フェッチ回路554、演算スロット555−1乃至555−3、レジスタ556を含む。命令メモリ560及びデータメモリ561は、例えば図1のメモリ122に相当する。
図26に示すプロセッサは、スーパースカラー型プロセッサであり、命令メモリ560から取得した命令を一時的に命令FIFO551に蓄積する。プリデコーダ553は、命令FIFO551に蓄積された命令のうちで先頭側にある複数の命令から、命令中のレジスタ番号に関する情報を取得し、取得した情報を命令デコーダ552に供給する。命令デコーダ552は、命令中のレジスタ番号に関する情報に基づいて命令間の依存関係を判断し、判断した依存関係に基づいて同時に発行できる命令を選択する。命令デコーダ552からの選択指示に基づいて、命令選択フェッチ回路554は、選択された命令を命令デコーダ552に供給する。命令デコーダ552は、供給された命令をデコードし、各演算スロット555−1乃至555−3に発行する。ここで演算スロット555−1及び555−2は、図17に示す演算ユニット501と同様の構成及び機能を有するものであってよく、演算スロット555−3は、図17に示すロードストアアドレス制御部37に相当する。符号化処理を行なう演算スロット555−1及び555−2の数は2つに限られるものではなく、例えば8つの演算スロットが設けられてよい。この場合、8並列で逆方向の符号化処理を同時に実行することができる。
図27は、符号化処理部116に用いるプロセッサ121の構成の更に別の一例を示す図である。図27において、図26と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図26に示すプロセッサは、命令FIFO551、命令デコーダ552、命令フェッチ回路554A、演算スロット555−1及び565−1乃至565−4、及びレジスタ556を含む。命令メモリ560及びデータメモリ561は、例えば図1のメモリ122に相当する。図27では、図26のプリデコーダ553及び命令選択フェッチ回路554を簡略化して、命令フェッチ回路554Aとして示してある。命令フェッチ回路554Aの構成及び機能は、プリデコーダ553及び命令選択フェッチ回路554の構成及び機能と同様である。
図27に示すプロセッサは、ベクトル型プロセッサであり、命令フェッチ、依存関係確認、及び演算スロットへの命令の割り当ての動作は、図26に示すスーパースカラー型プロセッサの場合と同様である。演算スロット555−1は、図26の演算スロット555−1と同一の構成であり、1つの命令実行サイクルで1命令の演算実行を終了するスカラー型の演算スロットである。それ以外の演算スロット565−1乃至565−4は、1命令に対して複数の命令実行サイクルに亘る複数の演算を実行するベクトル型の演算スロットである。レジスタ556は、通常のレジスタと、ベクトルレジスタと呼ばれる可変長のレジスタ列とを含む。
図28は、ベクトルレジスタの一例を示す図である。ベクトル長を指定する値Vector_length(以降VL)により、一度に実行される命令の数を指定する。このVL長の単位で、レジスタの論理番号が割り振られる。図28に示す例では、VL=16の場合であり、レジスタ論理番号VR0を指定すると、レジスタ物理番号VR0乃至VR15の16個のレジスタが指定される。また同様に、レジスタ論理番号VR1を指定すると、レジスタ物理番号VR16乃至VR31の16個のレジスタが指定される。
VL=16の場合に、命令が例えば「vadd vr0,vr1,vr2」と記述された場合、この命令を実行する演算により、以下のようなレジスタ物理番号を用いた演算が実行される。
For(i=0;i<16;i++) { vr(32+i)=vr(0+i)+vr(16+i);}
ベクトル型プロセッサへ実装する場合には、RSC符号化命令も1発行で複数サイクル分のデータを符号化する。例えばVL=16の場合、1サイクルで4ビット一括処理するRSC命令が発行されると、64ビット分のデータの符号化処理を16サイクルかけて演算する。例えばソースを論理番号VR0に指定し、デスティネーションを論理番号VR1に指定した場合、最初の演算サイクルでは物理番号VR0をソースレジスタとして使用し、物理番号VR16をデスティネーションレジスタとして使用する。次の演算サイクルでは物理番号VR1をソースレジスタとして使用し、物理番号VR17をデスティネーションレジスタとして使用する。以降同様にして、16回の演算を繰り返し、最後の演算サイクルでは物理番号VR15をソースレジスタとして使用し、物理番号VR31をデスティネーションレジスタとして使用する。
図29は、順方向符号化命令及び逆方向符号化命令により符号化処理を実行する場合のタイミングチャートの一例を示す。この例において、VL長は8である。図27に示すプロセッサの場合、符号化処理が可能なベクトル型の演算スロットとして、4つの演算スロット565−1乃至565−4が設けられている。これら4つの演算スロットの全てが空きの状態でRSC命令を発行した場合、図29の命令実行サイクル0〜3に示されるように、発行された4つの命令が順次空いているスロットに割り振られていく。4つの演算スロットが全て使用状態となると、利用可能な演算スロットがなくなり、命令実行サイクル3以降は待ち状態となる。命令実行サイクル8になると最初のRSC命令が終了するので、新たに空き状態となった演算スロットに、待ち状態であったRSC3が割り当てられ実行される。以下同様にして順次RSC4以降の命令が実行される。図21及び図22に示される符号化器を用いた場合、最後の端数分については、例えばVL長を1に設定すると共に変数hasuを設定すればよい。
ここで説明したVLIW、スーパースカラー、及びベクトル型プロセッサの例では、1演算スロットにおいて1つの演算が実行されるものとして説明したが、これに限定されるものではない。図18に示すように、1つの符号化ユニット36が複数の符号化器を含む構成の場合には、1演算スロットで複数の演算を並列動作させることが可能である。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
なお本願発明は、以下の内容を含む。
(付記1)
演算論理ユニットと、
XOR回路及びAND回路を含む符号化ユニットと、
第1命令のデコード結果に応じて前記演算論理ユニットを制御して演算処理を実行させると共に、前記第1命令とは別の第2命令のデコード結果に応じて前記符号化ユニットを制御して再帰的畳み込み符号化処理を実行させる命令デコード部と、
前記演算論理ユニットにより実行する演算処理のオペランドを格納するとともに、前記符号化ユニットにより実行する符号化処理に用いるデータ及びパラメータを格納するレジスタと
を含むことを特徴とするプロセッサ。
(付記2)
前記レジスタは、
前記演算論理ユニットにより実行する演算処理のオペランドを格納する第1レジスタと、
前記符号化ユニットにより実行する符号化処理に用いるデータ及びパラメータを格納する第2レジスタと
を含むことを特徴とする付記1記載のプロセッサ。
(付記3)
前記符号化ユニットは、符号化対象データを順方向に符号化する第1符号化器を含むことを特徴とする付記1又は2記載のプロセッサ。
(付記4)
前記符号化ユニットは、符号化対象データを逆方向に符号化する複数の第2符号化器を含むことを特徴とする付記1乃至3の何れか一項記載のプロセッサ。
(付記5)
前記符号化ユニットは、第1符号化器による順方向の符号化と前記複数の第2符号化器による逆方向の符号化を並行して実行することを特徴とする付記4記載のプロセッサ。
(付記6)
前記符号化ユニットは、符号化対象データの複数ビットについて同時に符号化を実行することを特徴とする付記1乃至5何れか一項記載のプロセッサ。
(付記7)
前記符号化ユニットは、XOR回路及びAND回路を含む複数の同一の論理回路を含み、前記複数の同一の論理回路が、前記複数ビットに一対一に対応して設けられ、前記複数ビットのそれぞれに対応する符号化ビットを出力することを特徴とする付記6記載のプロセッサ。
(付記8)
前記複数の同一の論理回路のn番目の論理回路は、1番目乃至n−1番目のn−1個の論理回路により計算されたn−1個のビット値と前記シフトレジスタに格納されている少なくとも1つのビット値とに基づいて符号化処理を実行することを特徴とする付記7記載のプロセッサ。
(付記9)
符号化対象データを符号化して符号化データを生成する符号化装置と、
前記符号化データを変調して変調信号を生成する変調部と、
前記変調信号をRF信号に変換するRF回路と
を含み、前記符号化装置は、
プロセッサと、
メモリと
を含み、前記プロセッサは、
演算論理ユニットと、
XOR回路及びAND回路を含む符号化ユニットと、
第1命令のデコード結果に応じて前記演算論理ユニットを制御して演算処理を実行させると共に、前記第1命令とは別の第2命令のデコード結果に応じて前記符号化ユニットを制御して再帰的畳み込み符号化処理を実行させる命令デコード部と、
前記演算論理ユニットにより実行する演算処理のオペランドを格納するとともに、前記符号化ユニットにより実行する符号化処理に用いるデータ及びパラメータを格納するレジスタと
を含むことを特徴とする無線通信装置。