(57)【特許請求の範囲】
【請求項１】
算術論理ユニット、乗算器、シフタ、およびレジスタ・ファイルを含む計算ブロックにより、ビット・フィールドを連続ビット・ストリームとの間で抽出又は挿入する方法であって、
前記ビット・ストリームは、前記計算ブロック内の複数のレジスタを連結したレジスタであるビットＦＩＦＯに、ビット・フォーマットで格納されており、
前記ビットＦＩＦＯは、前記計算ブロック内に位置するポインタ・レジスタに格納されているビット・ポインタによって、前記ビットＦＩＦＯの抽出済みビット位置を追跡するものであり、
前記計算ブロックは、前記ビットＦＩＦＯおよび前記シフタ間で、任意のビット長のビット・フィールドの転送を単一のクロック・サイクル内において行うものであり、
前記計算ブロック内に位置する長さレジスタに抽出すべきビット・フィールドのビット長を指定し、
前記計算ブロックに対するビット・フィールドの抽出命令を実行することによって、転送を行うステップであって、
前記転送を行うステップは、
前記ビット・ポインタによって指定された前記ビットＦＩＦＯ内の位置にある前記ビット長のビット・フィールドを抽出して前記命令で指定された前記計算ブロック内のレジスタに格納するステップと、
前記ビット・ポインタに前記ビット長を加算し、前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となった場合は、前記ビット・ポインタを前記ビットＦＩＦＯの長さの半分に等しい数のモジュロを戻すステップと、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、前記ビットＦＩＦＯの上位半分を下位半分に転送し、かつ、デジタル信号プロセッサのメモリから前記ビットＦＩＦＯの上位半分に、データをロードするステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、
前記ビットＦＩＦＯは、前記レジスタ・ファイル内に位置するポインタ・レジスタに格納されているビット・ポインタによって、前記ビットＦＩＦＯの挿入済みビット位置を追跡するものであり、
前記長さレジスタに、挿入すべきビット・フィールドのビット長を格納し、
前記計算ブロックに対するビット・フィールドの挿入命令を実行することによって、転送を行うステップであって、
前記転送を行うステップは、
前記計算ブロック内の前記命令で指定されたレジスタに格納され、前記ビット長を有するビット・フィールドを、前記ビットＦＩＦＯ内の、前記ビット・ポインタによって指定された位置へ挿入するステップと、
前記ビット・ポインタに前記ビット長を加算し、前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となった場合は、前記ビット・ポインタを前記ビットＦＩＦＯの長さの半分に等しい数のモジュロを戻すステップと、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、デジタル信号プロセッサのメモリへ前記ビットＦＩＦＯの下位半分をストアし、かつ前記ビットＦＩＦＯの上位半分を下位半分に転送するステップと、
を含む方法。
【請求項３】
メモリを備えたデジタル信号プロセッサにおいて用いられ、ビット・フィールドを連続ビット・ストリームとの間で抽出又は挿入する計算ブロックであって、
前記計算ブロックは、
算術論理ユニット、乗算器、シフタ、レジスタ・ファイル、および、ビット転送機構を備え、
さらに、前記計算ブロック内の複数のレジスタを連結したレジスタであるビットＦＩＦＯを備え、該ビットＦＩＦＯは、前記ビット・ストリームをビット・フォーマットで格納するものであり、
前記計算ブロックは、ビット・ポインタを格納するように構成されているポインタ・レジスタと、抽出すべきビット・フィールドのビット長を格納するように構成されている長さレジスタを含み、
前記ビット・ポインタは、前記ビットＦＩＦＯに格納されている前記連続ビット・ストリームにおける抽出済みビット位置を追跡するように構成されており、
前記ビット転送機構は、任意のビット長のビット・フィールドを前記ビットＦＩＦＯと前記シフタとの間において単一クロック・サイクル内において転送するように構成され配列されており、
ビット・フィールドの抽出命令を実行することによって、
前記ビット転送機構は、前記ビット長を有し、前記ビット・ポインタによって指定された位置にある前記ビット・フィールドを前記ビットＦＩＦＯから抽出して前記計算ブロック内の前記命令で指定したレジスタに格納し、
前記算術論理ユニットは、前記ビット・ポインタに前記ビット長を加算し、加算結果が前記ビットＦＩＦＯの容量の半分以上となった場合は、前記ビットＦＩＦＯの容量の半分に等しい数のモジュロを戻し、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、前記ビットＦＩＦＯの上位半分を下位半分に転送し、かつデジタル信号プロセッサのメモリから前記ビットＦＩＦＯの上位半分に、データをロードするように構成されている計算ブロック。
【請求項４】
請求項３記載の計算ブロックにおいて、
前記ビット・ポインタは、前記ビットＦＩＦＯに格納されている前記連続ビット・ストリームにおける挿入済みビット位置を追跡するように構成されており、
前記長さレジスタに、挿入すべきビット・フィールドのビット長を格納し、
ビット・フィールドの挿入命令を実行することによって、
前記ビット転送機構は、前記計算ブロック内の前記命令で指定したレジスタに格納されている、前記ビット長を有するビット・フィールドを、前記ビットＦＩＦＯの前記ビット・ポインタによって指定された位置に挿入し、
前記算術論理ユニットは、前記ビット・ポインタに前記ビット長を加算し、前記ビットＦＩＦＯの容量の半分以上となった場合は、前記ビットＦＩＦＯの容量の半分に等しい数のモジュロを戻し、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、前記ビットＦＩＦＯの下位半分をデジタル信号プロセッサのメモリへストアし、かつ、前記ビットＦＩＦＯの上位半分を下位半分に転送するように構成されている計算ブロック。
【請求項５】
ビット・フィールドを連続ビット・ストリームとの間で抽出又は挿入するデジタル信号プロセッサであって、
前記デジタル信号プロセッサは、
算術論理ユニット、乗算器、シフタ、レジスタ・ファイル、および、ビット転送機構を備える計算ブロックを備え、
さらに、前記計算ブロック内の複数のレジスタを連結したレジスタであるビットＦＩＦＯを備え、該ビットＦＩＦＯは、前記ビット・ストリームをビット・フォーマットで格納するものであり、
前記計算ブロックは、ビット・ポインタを格納するように構成されているポインタ・レジスタと、抽出すべきビット・フィールドのビット長を格納するように構成されている長さレジスタを含み、
前記ビット・ポインタは、前記ビットＦＩＦＯに格納されている前記連続ビット・ストリームにおける抽出済みビット位置を追跡するように構成されており、
前記ビット転送機構は、任意のビット長のビット・フィールドを前記ビットＦＩＦＯと前記シフタとの間において単一クロック・サイクル内において転送するように構成され配列されており、
ビット・フィールドの抽出命令を実行することによって、
前記ビット転送機構は、前記ビット長を有し、前記ビット・ポインタによって指定された位置にある前記ビット・フィールドを前記ビットＦＩＦＯから抽出して前記計算ブロック内の前記命令で指定したレジスタに格納し、
前記算術論理ユニットは、前記ビット・ポインタに前記ビット長を加算し、加算結果が前記ビットＦＩＦＯの容量の半分以上となった場合は、前記ビットＦＩＦＯの容量の半分に等しい数のモジュロを戻し、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、前記ビットＦＩＦＯの上位半分を下位半分に転送し、かつデジタル信号プロセッサのメモリから前記ビットＦＩＦＯの上位半分に、データをロードするように構成されているデジタル信号プロセッサ。
【請求項６】
請求項５記載のデジタル信号プロセッサにおいて、
前記ビット・ポインタは、前記ビットＦＩＦＯに格納されている前記連続ビット・ストリームにおける挿入済みビット位置を追跡するように構成されており、
前記長さレジスタに、挿入すべきビット・フィールドのビット長を格納し、
ビット・フィールドの挿入命令を実行することによって、
前記ビット転送機構は、前記計算ブロック内の前記命令で指定したレジスタに格納されている、前記ビット長を有するビット・フィールドを、前記ビットＦＩＦＯの前記ビット・ポインタによって指定された位置に挿入し、
前記算術論理ユニットは、前記ビット・ポインタに前記ビット長を加算し、前記ビットＦＩＦＯの容量の半分以上となった場合は、前記ビットＦＩＦＯの容量の半分に等しい数のモジュロを戻し、
前記加算において、該加算後の前記ビット・ポインタが前記ビットＦＩＦＯの長さの半分以上となったという条件付きで、前記ビットＦＩＦＯの下位半分をデジタル信号プロセッサのメモリへストアし、かつ、前記ビットＦＩＦＯの上位半分を下位半分に転送するように構成されているデジタル信号プロセッサ。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明は、ディジタル信号プロセッサに関し、更に特定すれば、ビットＦＩＦＯを含む新規な計算ブロックを備えたディジタル信号プロセッサに関する。
（発明の背景）
ディジタル信号プロセッサは、音声分析および合成のようなディジタル信号処理用途に最適化され、音声計算、画像処理、またはディジタル・フィルタリングを行なう特殊目的プロセッサである。ディジタル信号処理用途では、メモリ・アクセス動作が集中的となる傾向があり、しかも大量のデータ入出力が必要となる傾向がある。リアルタイム・ディジタル信号処理は、多数の計算を実行するために、高速のハードウエアを必要とする。多くのアルゴリズムでは、計算は、非常に多数の乗算および蓄積機能の繰り返しを伴う。これらの計算は、個々のデータ・サンプル間でプロセッサによってリアルタイムで実行されるので、その回数によってサンプリング・レートが低下し、信号処理が制限される場合がある。したがって、プロセッサは、高スループットの数値処理および高割込率が得られるように設計されている。
【０００２】
一般に、ディジタル信号プロセッサは、コア・プロセッサ、動作に用いられる命令およびオペランドを格納する少なくとも１つのメモリ、通信ポートと通信するリンク・ポート・バッファ、ならびに外部データ・バスおよび外部アドレス・バスを通じた通信を制御する外部ポートを含む。コア・プロセッサは、制御ブロック、一次命令デコーダに接続されている命令整合バッファ、およびディジタル信号処理動作を実行する少なくとも１つの計算ブロックを含む。計算ユニットは、レジスタ・ファイル、乗算器／アキュミュレータ、算術論理ユニット（ＡＬＵ）、およびシフタを含む。コア・プロセッサは、数個の異なる計算方式、ならびにデータ格納および転送方式を用いて、速度、精度、サイズおよび性能を最適化することもできる。
【０００３】
通常、シフタは、ｎ−ビット・ワードとして編成されたデータ上で動作する。シフタは、シーケンサから命令を受け取り、レジスタ・ファイルからオペランドを受け取り、レジスタ・ファイルにオペランドを格納する。全ての動作はｎ−ビットの境界上で行われる。例えば、シフタは左シフトを行なう際、ｉ番目のビットを（ｉ＋１）番目のビットと置換し、右シフトを行なう際、ｉ番目のビットを（ｉ−１）場目のビットと置換する。論理シフトでは、シフト・アウトされるビットは失われ、シフト・インされるビットは０である。循環シフトでは、一端からシフト・アウトされるビットは他端にシフト・インされるため、情報は失われない。算術演算シフトでは、シフタはビット・ストリングを左にシフトすることによって、当該ビット・ストリングが表す二進数に２を乗算し、シフタはビット・ストリングを右にシフトすることによって、二進数を２で除算する。
【０００４】
レジスタ・ファイルは、命令、オペランドおよび結果の一時的な格納のために、選択されたビット・サイズを有する多数のレジスタを含む。レジスタ・ファイルは、メモリからオペランドを受け取り、数系統のオペランド・バスを通じて、オペランドを乗算器とＡＬＵとシフタ（ｓｈｉｆｔｅｒ）に供給する。計算の後、レジスタ・ファイルは、数系統のバスを通じて、乗算器とＡＬＵとシフタから結果を受け取る。通常、乗算器、ＡＬＵおよびシフタは、固定ワード・サイズを有するデータ上で動作する。しかしながら、固定ワード・サイズは、全ての信号処理用途にとって必ずしも最適ではない。
【０００５】
例えば、ある通信用途ではハフマン・コーディング（Ｈｕｆｆｍａｎ  ｃｏｄｉｎｇ）を用いる場合があり、これは（キャラクタ毎に固定数のビットを用いるキャラクタ・エンコード方式とは異なり）可変長キャラクタ・エンコード方式を用いる。ハフマン・コーディングは、最も高い頻度で現れるキャラクタの全ビット数を最少に抑える。このコーディングは、既知の確率に基づいてビット数を選択するので、データ・ストリングは、ビットがデータ・ストリーム内で到達する毎にデコードされる。このコーディングは、データ・パックの厳格化をもたらす。何故なら、最も共通して出現するキャラクタは短く、出現する頻度が少ないキャラクタは長いからであり、出現する確率が最も高い最短のキャラクタは１ビット長に過ぎない。殆どのディジタル信号プロセッサは、固定ワード・サイズ（例えば、１６ビットまたは３２ビット・ワード）を有するデータを操作するように設計されている。このような設計は、ハフマン・コーディングを実現するには最適ではない。
（発明の概要）
本発明は、新規な計算ブロックを備えたディジタル信号プロセッサ、および単一サイクルで任意のビット長のビット・フィールド（または可変ビット長のワード）を転送し、転送したビット・フィールドを別の動作に用いる方法である。
【０００６】
ディジタル信号プロセッサは、算術論理ユニット、乗算器、シフタおよびレジスタ・ファイルを備えた計算ブロックを含む。また、計算ブロックは、ビット・フォーマットで命令およびオペランドを連続ビット・ストリームとして格納する複数のレジスタを含み、単一サイクルで任意のビット長のビット・フィールドを複数のレジスタおよびシフタ間で転送するように構成され配列されたビット転送機構を用いる。
【０００７】
一実施形態では、複数のレジスタは、レジスタ・ファイル内に位置する汎用レジスタである。レジスタ・ファイルは、更に、ビット転送機構が用いる制御情報を格納するように構成された少なくとも１つの制御情報レジスタを含んでもよい。
【０００８】
好ましくは、ビット転送機構は、更に、制御情報にしたがって指定される長さのビット・フィールドを、複数のレジスタ内に保持されている連続ビット・ストリームから抽出し、抽出したビット・フィールドをシフタに格納するように構成されている。
【０００９】
好ましくは、レジスタ・ファイルは、更に、ビット・ポインタを格納するように構成されたポインタ・レジスタ、およびビット長を格納するように構成された長さレジスタを含む。更に、ビット転送機構は、長さレジスタ内で指定されたビット長を有し、ビット・ポインタによって指定された位置にあるビット・フィールドを、複数のレジスタから抽出し、抽出したビット・フィールドをシフタに格納するように構成してもよい。ビット・ポインタは、複数のレジスタ内に格納されている連続ビット・ストリームにおける現ビット位置を追跡するように構成してもよい。算術論理ユニットは、指定された長さだけビット・ポインタを更新するように構成してもよい。
【００１０】
好ましくは、算術論理ユニットは、指定の長さだけビット・ポインタを更新する際、ビット・ポインタに指定の長さを追加し、ポインタ・レジスタに、複数のレジスタの容量の半分に等しい数のモジュロを戻す。ディジタル信号プロセッサは、メモリを含んでもよく、ビット転送機構は、更に、条件付きでデータをメモリから複数のレジスタにロードするように構成してもよい。ビット転送機構は、ポインタを更新した際にレジスタの選択ビット容量を超えて増大した場合、条件付きロードを永続的とするように構成してもよい。選択ビット容量は、６４ビットとするとよい。
【００１１】
別の実施形態では、レジスタ・ファイルは、ビット・ポインタを格納するように構成されたポインタ・レジスタ、およびビット長を格納するように構成された長さレジスタを含む。ビット転送機構は、更に、シフタから複数のレジスタに、長さレジスタ内に指定されたビット長を有し、ビット・ポインタによって指定された位置に格納されているビット・フィールドを保管する（ｄｅｐｏｓｉｔ）ように構成してもよい。ビット・ポインタは、汎用レジスタ内に格納されている連続ビット・ストリーム内の現ビット位置を追跡するように構成してもよい。算術論理ユニットは、ポインタ・レジスタを前述の長さだけ更新するように構成してもよい。算術論理ユニットは、ビット・ポインタに指定の長さを追加し、ポインタ・レジスタに加算のモジュロ６４を戻すようにして指定の長さだけポインタ・レジスタを更新してもよい。あるいは、算術論理ユニットは、レジスタのビット容量が３２ビットである場合、加算のモジュロ３２に等しい数をポインタ・レジスタに戻してもよい。
【００１２】
好ましくは、ビット転送機構は、条件付きで複数のレジスタからディジタル信号プロセッサのメモリにデータをロードするように構成してもよい。ビット転送機構は、更新したポインタが、更新前のポインタのビット番号よりも小さいビット番号を指し示す場合、条件付きロードを永続的とすることができる。
【００１３】
これらのディジタル信号プロセッサは、ビット指向設計とした計算ブロックを有し、可変ビット長のオペランドおよび命令を効率的に操作することができる。計算ブロックは、ワードの境界を横切ってワードの抽出および保管を行い、ワード・グループの位置を合わせ直すことができる。例えば、ディジタル信号プロセッサは、３２ビット・レジスタを用いて、共通に用いられている１６ビットまたは３２ビット・フォーマット以外の任意のワード長を有するデータを効率的に処理する。本プロセッサは、例えば、標準的なプロセッサが頻繁に行なうように、１８ビット・ワードを３２ビットに拡張し、１４ビットの格納領域を無駄にすることによって、１８ビット・ワードを３２ビット・レジスタに格納する必要はないという利点がある。任意長のビット・フィールドを転送可能なことに加えて、本発明は、例えば、ハフマン・コーディングに用いられるビット・フィールドの効率的なパックおよびアンパックを可能にする。
（好適な実施形態の説明）
一般に、ディジタル信号プロセッサ（ＤＳＰ）は、主な計算およびデータ処理機能を実行するコア・プロセッサを含む。以下で特定して説明するが、コア・プロセッサは、新規の設計の少なくとも１つの計算ブロックを含む。計算ブロックは、数個の計算ユニットを含み、複数のレジスタ内にビット・フォーマットでデータの連続ビット・ストリーム（即ち、命令またはオペランド）を格納することができる。計算ブロックは、単一サイクルで、連続ビット・ストリームからビット・フィールドを抽出したり、あるいは連続ビット・ストリームにビット・フィールドを保管することによって、任意のビット長のビット・フィールドを操作することができる。この操作は、プロセッサに供給されるデータまたはプロセッサによって処理されるデータのワード境界には無関係に実行される。
【００１４】
図１を参照すると、ＤＳＰ１０は、計算ブロック１２および１４、メモリ２０、制御ブロック３０、リンク・ポート・バッファ４０、外部ポート４５ならびに、Ｄ−ＲＡＭコントローラ５０を含む。ＤＳＰ１０は、１組の計算ブロック１２、１４、メモリ２０、制御ブロック３０、リンク・ポート・バッファ４０、外部ポート４５およびＤ−ＲＡＭコントローラ５０を含む。また、ＤＳＰ１０は、命令整合レジスタおよび一次命令デコーダ（図１には示されていない）も含む。計算ブロック、命令整合バッファ、一次命令デコーダ、および制御ブロックは、主な計算およびデータ処理機能を実行するコア・プロセッサを構成する。メモリ２０は、例えば、３つの独立した２Ｍビット・メモリ・バンク２２、２４および２６（メモリ・ブロック０、１および２として示す）を含む。各メモリ・バンクは、３２ビット長のワード６４Ｋ分の容量を有する。各メモリ・バンクは、１２８ビット幅のデータ・バスおよび１６ビット幅のアドレス・バスに接続されている。単一のクロック・サイクル内において、各々３２ビットを有する、連続的に整合されたデータ・ワードを４つまで、各メモリ・バンクに、そして各メモリ・バンクから転送することができる。
【００１５】
制御ブロック３０は、プログラム・シーケンサ３２、第１整数ＡＬＵ３４（ＪＡＬＵ）、第２整数ＡＬＵ３６（ＫＡＬＵ）、第１ＤＭＡアドレス発生器３８、および第２ＤＭＡアドレス発生器３９を含む。一般に、ＡＬＵ３６およびＡＬＵ３６は、整数ＡＬＵ命令を実行し、データ・アドレスを発生し、アドレス・バス上でデータ・アドレスをメモリに供給する。プログラム・シーケンサ３２は、アドレス・バス上に命令アドレスを供給し、アクセスされた命令を命令整合バッファ（図示せず）に供給する。
【００１６】
ＤＳＰ１０は、アドレスを供給する数系統のアドレス・バス、およびデータを供給するデータ・バスを含む。第１アドレス・バス６０（ＭＡ０）は、メモリ・バンク２２（Ｍ０）および制御ブロック３０を相互接続する。第２アドレス・バス６２（ＭＡ１）、および第２アドレス・バス６４（ＭＡ２）は、それぞれ、メモリ・バンク２４（Ｍ１）、２６（Ｍ２）を制御ブロック３０と相互接続する。アドレス・バスの各々は、好ましくは、１６ビット幅であり、二進情報の並列転送のために多数のラインを含む。３２ビット幅の外部アドレス・バス６６（ＭＡＥ）が、制御ブロック３０を外部ポート４５と相互接続する。外部ポート４５は、外部アドレス・バス４７に接続されている。外部アドレス・バス４７は、３２ビット幅であることが好ましい。
【００１７】
ＤＰＳ１０は、例えば、３系統の１２８ビット幅のデータ・バスを含む。第１データ・バス６８（ＭＤ０）は、計算ブロック１２および１４、メモリ・バンク２２、制御ブロック３０、リンクポート・バッファ４０、命令整合バッファ（図示せず）ならびに外部ポート４５を相互接続する。同様に、第２データ・バス７０（ＭＤ１）および第３データ・バス７２（ＭＤ２）は、計算ブロック１２および１４、各メモリ・バンク２４および２６、制御ブロック３０、リンク・ポート・バッファ４０、命令整合バッファ（図示せず）、ならびに外部ポート４５を相互接続する。外部ポート４５は、外部データ・バス４９に接続されている。外部データ・バス４９は、６４ビット幅であることが好ましい。このように、ＤＳＰ１０は、外部ポート４５、データ・バス６８、７０および７２、ならびにアドレス・バス６６を用いて、ホストまたは外部メモリと通信する。また、ＤＳＰ１０は、数個のシリアル・ポート（図示せず）およびリンク・ポート・バッファ４０に接続されている１つ以上のリンク・ポート４２を用いて通信することも可能である。これは、例えば、米国特許第５，６１９，７２０号に詳細に記載されている。
【００１８】
ＤＳＰ１０は、最適なデータ処理を求めて設計されている。「データ」とは二進ワードのことであり、ＤＳＰ１０の動作に関連する命令またはオペランドのいずれかを表すことができる。メモリ・バンク４０、４２および４４の各々は別個のバスを有するので、これらに同時にアクセスすることもできる。典型的な動作モードでは、プログラム命令をメモリ・バンクの１つに格納し、オペランドを他の２つのメモリ・バンクに格納する。このように、単一クロック・サイクルにおいて、少なくとも１つの命令および２つのオペランドを計算ブロック１２および１４に供給することができる。メモリ・バンク２２、２４および２６の各々は、単一のクロック・サイクルで多数のデータ・ワードの読み取りおよび書き込みが可能となるように構成されている。多数のデータ・ワードの各メモリ・バンクから計算ブロック１２または１４への単一クロック・サイクルでの同時転送は、命令キャッシュやデータ・キャッシュを必要せずに、達成される。
【００１９】
制御ブロック３０は、整数ＡＬＵ３４および３６を含み、これらは異なる時点で整数ＡＬＵ命令を実行し、データ・アドレスを発生する。プログラムの実行中、プログラム・シーケンサ３２は、命令シーケンスの位置に応じて、アドレス・バス（６０、６２または６４）の１つに、命令アドレス・シーケンスを供給する。典型的に、メモリ・バンクの１つ（２２、２４または２６）は、命令シーケンスの格納に用いられる。加えて、整数ＡＬＵ（３４および３６）の各々は、命令が要求するオペランドの位置に応じて、アドレス・バスの１つ（６０、６２または６４）にデータ・アドレスを供給する。例えば、命令シーケンスをメモリ・バンク２２に格納し、オペランドをメモリ・バンク２４および２６に格納する場合、プログラム・シーケンサ３２は命令アドレスをアドレス・バス６０上に供給し、アクセスした命令を命令整合バッファ（図示せず）に供給する。
【００２０】
整数ＡＬＵ３４および３６は、アドレス・バス６２および６４にそれぞれオペランドのアドレスを出力することができる。整数ＡＬＵ３４および３６が発生するアドレスに応答して、メモリ・バンク２４および２６は、それぞれ、データ・バス７０および７２上で、計算ブロック１２および１４の一方または双方にオペランドを供給する。メモリ・バンク２２、２４および２６は、命令およびオペランドの格納に関しては相互交換可能である。プロセッサは、パイプライン・アーキテクチャを有し、メモリ２０への高速アクセスを可能とし、ＤＳＰ１０のユニットは非パイプライン・アーキテクチャの２倍の速さで動作することができる。
【００２１】
図２を参照すると、各計算ブロック１２または１４は、レジスタ・ファイル８０、乗算器／アキュミュレータ９０、算術論理ユニット（ＡＬＵ）９２、およびシフタ９４を含む。レジスタ・ファイル８０は、多数のポートを含み、オペランドおよび結果を一時的に格納する。好適な実施形態では、レジスタ・ファイル８０は、各々３２ビットを有するワード３２個分の容量を有し、各々１２８ビットの列８本で編成されている。レジスタ・ファイル８０は、標準的な方法で、マルチプレクサおよびラッチ（図示せず）を介して、データ・バス６８、７０および７２（図１に示す）の各々に接続されている。前述のように、メモリ２０からオペランドをフェッチする際、３系統のデータ・バスの内２つがオペランドをレジスタ・ファイル８０に、バス８２（ｉｏｂ０）およびバス８４（ｉｏｂ１）を通じて供給する。これらのバスは、各々、１２８ビット幅である。（別の実施形態では、レジスタ・ファイルは異なる容量を有してもよく、更にバスは異なる幅を有してもよい。これらは全て、本発明の範囲内のことである）
当技術分野では公知であるが、レジスタ・ファイル８０からメモリ２０に（または外部メモリに）データを書き込む場合、バス８２および８４ならびにデータ・バス６８、７０および７２（図１に示す）に接続されているマルチプレクサおよびラッチ（図示せず）にデータを供給する。マルチプレクサおよびラッチは、メモリに書き込む場合データ・バス６８、７０および７２を選択し、命令制御の下で各バス内においてワードの選択を可能にする。マルチプレクサおよびラッチは、二次命令デコーダ（図示せず）によって制御される。二次命令デコーダは、レジスタ・ファイル８０をアドレスし、マルチプレクサおよびラッチ、乗算器／アキュミュレータ９０、ＡＬＵ９２またはシフタ９４に制御信号を供給するために用いられる。各計算ブロック１２または１４は、同じクロック・サイクルで３つまでの命令を実行することができる。この場合、これらの命令は乗算器／アキュミュレータ９０、ＡＬＵ９２またはシフタ９４によって実行される。
【００２２】
単一ワードの転送では、マルチプレクサおよびラッチは、アクセスされたデータ・ワードを選択してもしなくてもよい。二重ワードの転送では、マルチプレクサおよびラッチは、データ・ワードのいずれかまたは双方を選択する。四重ワードの転送では、マルチプレクサおよびラッチは、二重データ・ワードの異なる組み合わせを選択するか、あるいは四重データ・ワード全体を選択する。単一、二重、または四重データ・ワードは、単一クロック・サイクルで、計算ブロック１２に、計算ブロック１４に、または双方に転送することができる。クロック・サイクル毎に多数の命令にアクセスすることができるため、サイクル毎に多数の動作を実行し、これによってプロセッサの処理能力を高めることができる。計算ブロック１２および１４によって要求されるよりも速くオペランドを供給することができる場合、メモリ・サイクルに空きができる。これらのメモリ・サイクルは、ＤＭＡアドレス発生器３８および３９が使用して、新たなデータをメモリ・バンク２２、２４および２６に供給することができ、コア・プロセッサからサイクルを盗むことはない。最後に、多数のデータ・ワードにアクセスすることができるため、２つ以上の計算ブロックを利用し、これらにオペランドを供給し続けることが可能となる。
【００２３】
再度図２を参照すると、乗算器／アキュミュレータ９０、ＡＬＵ９２およびシフタ９４は、十分な命令およびオペランドを計算ブロックに供給できる範囲で、同時に命令を実行することができる。４系統の６４幅のオペランド・バス（ｏｂ０）、（ｏｂ１）、（ｏｂ２）および（ｏｂ３）が、レジスタ・ファイル８０から乗算器／アキュミュレータ９０、ＡＬＵ９２およびシフタ９４にオペランドを供給する。３系統の６４ビット幅の結果バスｒｍ、ｒａおよびｒｓも、乗算器／アキュミュレータ９０、ＡＬＵ９２およびシフタ９４に接続されており、結果をレジスタ・ファイル８０に返送する。更に、結果バスは計算ユニットの各々にも接続されているので、各計算ユニットは直接オペランドを得ることができる。一次命令デコーダは、命令を二次命令デコーダ（図示せず）に供給し、二次命令デコーダがこれらの命令をデコードする。
【００２４】
図２に示すように、バイパス・バス９６、９７および９８がオペランド・バスを結果バスに接続する。バイパス・バス９６、９７および９８は、計算速度を高めるように設計されている。レジスタ・ファイル８０またはメモリ・アクセスからのオペランドは、前述のように、計算ユニットのために使用可能である。更に、バイパス・バス９６、９７および９８は、一方の計算ユニットから他方に直接オペランドを供給するのであり、最初にオペランドをレジスタ・ファイル８０に書き込み、次いでこれをレジスタ・ファイル８０から宛先の計算ユニットに供給するのではない。
【００２５】
図３は、計算ブロック１２または１４において用いられる命令フォーマットを示す。命令は３２ビット長（あるいは、６４ビット長またはその他）であり、以下のフィールド、ＥＸ、ＣＣ、１０、ＸＹ、ＣＵ、ＴＹＰＥ、Ｏｐｃｏｄｅ／Ｒａ、Ｒｓ、ＲｍおよびＲｎを有する。ＥＸビットは、プロセッサが１サイクルに１つの命令を実行するのか、または数個の命令を実行するのかを指定する。ＥＸビットが論理１に等しい場合、命令はライン内の最後の命令である。ＥＸビットが論理０に等しい場合、当該命令に続いて、同じライン内に別の命令がある。ＣCビットは条件付き命令を識別する。ＣＣビットが論理１に等しい場合、命令ライン全体が条件付きであり、別の命令によって先に成立している条件が真と評価した場合にのみ実行する。ＸＹフィールドは、計算ブロックＸ（即ち図１におけるブロック１２）、計算ブロックＹ（即ち、図１におけるブロック１４）、または双方のどこで命令を実行するのかを指定する。フィールドＸＹが０１に等しい場合、計算ブロックＸが命令を実行する。フィールドＸＹが１０に等しい場合、計算ブロックＹが命令を実行し、フィールドＸＹが１１に等しい場合、双方の計算ブロックが命令を実行する。ＣＵフィールドは、命令を実行する特定の計算ユニット（即ち、ＡＬＵ、乗算器、またはシフタ）を指定する。ＴＹＰＥおよびＯｐｃｏｄｅ／Ｒａフィールドの組み合わせによって、計算ブロック１２および１４によって実行される動作を指定する。ＲｍおよびＲｎフィールドは、レジスタ・アドレスをオペランドに供給し、Ｒｓフィールドは、以下で説明するように、指定レジスタ・アドレスを供給する。
【００２６】
連続ビットＦＩＦＯは、図４の実施形態において説明するように、レジスタ・ファイル８０内に位置する１組の汎用レジスタを用いることによって、または図４Ａの実施形態において説明するように、１組の指定ＦＩＦＯレジスタを用いることによって、可変ビット長のワードを抽出および保管する。
【００２７】
図４を参照すると、現時点における好適な実施形態では、レジスタ・ファイル８０は、命令およびオペランドを連続ビット・ストリームとして格納する４つの汎用レジスタ（Ｒ４、Ｒ５、Ｒ６およびＲ７）、ならびに制御情報を格納する２つのレジスタ（Ｒ１６およびＲ１７）を含む。以下で説明するように、これらのレジスタは、連続ビットＦＩＦＯを簡便化するように構成されており、抽出されたビット・フィールドまたは保管されたビット・フィールドは、ワードの境界を交差してもよい。レジスタＲ４ないしＲ７は、連続ビット・ストリームがレジスタ・ファイル８０に保管される際、またはレジスタ・ファイル８０から抽出される際に、これを格納する。レジスタＲ１６およびＲ１７は、ビットＦＩＦＯポインタ（ＢＦＰ）および長さの値をそれぞれ格納する。連続ビットＦＩＦＯは、次の３つの命令、ＧＥＴＢＩＴＳ、ＰＵＴＢＩＴＳおよびＢＦＯＩＮＣを用いる。ＧＥＴＢＩＴＳおよびＰＵＴＢＩＴＳ命令は、シフタの命令であり、それぞれ、レジスタ・ファイル８０から入力データを抽出し、シフタ動作の結果をレジスタ・ファイル８０に返送する。ＢＦＯＩＮＣ命令は、ＡＬＵ命令であり、ＡＬＵ９２にビットＦＩＦＯへのＢＦＰを増分するように命令する。これについては、図７を参照しながら説明する。
【００２８】
図５は、ＧＥＴＢＩＴＳ命令の実行中に用いられる個々のレジスタを示す。ＧＥＴＢＩＴＳ命令を実行する際、シフタ９４は、レジスタ・ファイル８０内に位置するレジスタＲ４、Ｒ５、Ｒ６およびＲ７に格納されている任意長のビット・フィールドを抽出し、抽出したビット・フィールドを、シフタ９４内に位置するレジスタＲ０に保管する。次いで、シフタ９４は、レジスタＲ０内に配されているビット上で動作する。抽出したビット・フィールドの長さ（ｌｅｎ）を、レジスタＲ１６に、ＢＦＰをレジスタＲ１７に供給する。ＧＥＴＢＩＴＳ命令は、以下のフォーマットを有する。
【００２９】
【数１】
Ｒｓｄ＝ＧＥＴＢＩＴＳ  Ｒｎｑ  ＢＹ  Ｒｍｄ（ＳＥ）
この命令において、Ｒｓｄは指定されたシフト・レジスタであり、Ｒｎｑは連続ビット・ストリームを含む汎用レジスタを指定し、Ｒｍｄは長さおよび現ＢＦＰを含む制御情報レジスタを指定する。前述の命令フォーマットでは、オペランドを有するレジスタは、文字「Ｒ」、およびそれに続く、３つのレジスタを区別する小文字「ｓ、ｍまたはｎ」によって示されている。通常、「ｓ」は結果を示し、「ｎ」および「ｍ」はソース・オペランドを示す。３番目の文字は、レジスタが四重レジスタ（例えば、ＲｎｑがレジスタＲ７：４に用いられる）か、または二重レジスタ（例えば、ＲｍｄがレジスタＲ１６：１７に用いられる）かを指定する。３番目の文字がない場合、単一のレジスタ（例えば、レジスタＲ５に対するＲｎ）を示す。ＳＥは符号用拡張部であり、当技術分野では公知である。
【００３０】
図５に示すように、ＧＥＴＢＩＴＳ命令の実行時に、以下でＢＦＯＩＮＣ命令に関して説明するように、ＢＦＰは長さの値だけ左に進み、またはビット６３を超えた場合元に戻る。ＳＥオペランドがセットされている場合、宛先レジスタ対（Ｒｓｄ）内の保存フィールドの左側のビットが、保存フィールドの最上位ビットに等しくセットされる。それ以外では、レジスタＲｓｄ内の当初のビットは影響を受けない。ビットＦＩＦＯへのデータの一定の流入を維持するために、メモリ・バンク２２、２４または２６（図１）からのデータを条件付きでレジスタＲ５：４にロードする。更新されたＢＦＰが６３未満である場合、データをロードしない。更新されたＢＦＰが６３よりも大きい場合、条件付きでロードしたデータを永続的とする。ＧＥＴＢＩＴＳ命令は、以下のアセンブリ・コード・シーケンスによって実行することができる。
【００３１】
【表１】
XR1:0          hold extracted bit field
XR17:          holds control information
XR1:0 = GETBITS R7:4 BY R17:16;;   /*extract field */
XR17 = BFOINC R17:16;;            /*advance BFP*/
/*When BFP>63, move upper FIFO word into lower word, nd load next quad word: */
if ALT; do XR5:4 = XR7:6; do XR7:6 = L[j0+=2];;
このコード・シーケンスでは、「ＸＲ」は計算ブロックＸ（即ち、図１における計算ブロック１２）内のレジスタを示す。最後の条件付き命令では、ＡＬＴが０未満の場合、両命令を実行する。「Ｌ［ｊ０＋＝２］」は、メモリからレジスタ対Ｒ７：６にデータをロードする。
【００３２】
図４および図６を参照すると、１つまたは数個のシフタ動作を実行した後、シフタ９４はＰＵＴＢＩＴＳ命令を実行することができる。ＰＵＴＢＩＴＳ命令を実行する際、シフタ９４はレジスタＲ６において指定されている長さ（ｌｅｎ）のビット・フィールドを、レジスタＲ５：４からレジスタＲ１：０に保管する。これらのレジスタは全てレジスタ・フィールド８０内に位置する。保管されたビット・フィールドは、ＢＦＰによって指定された位置において右詰めで置かれる。その位置はレジスタＲ７に格納されている。ＰＵＴＢＩＴＳ命令は以下のフォーマットを有する。
【００３３】
【数２】
Ｒｓｄ＋＝ＰＵＴＢＩＴＳ  Ｒｎｄ  ＢＹ  Ｒｍｄ
ここで、Ｒｓｄは、ビット・フィールドを保管する汎用レジスタを指定し、Ｒｎｑは、ビット・フィールドを有するシフト・レジスタを指定し、Ｒｍｄは制御情報を有するレジスタ、即ち、現ＢＦＰを指定する。
【００３４】
シフタ９４がＰＵＴＢＩＴＳ命令を実行する際、レジスタ対Ｒｎｄの内容全体を、ＲｓｄおよびＢＦＯＴＭＰで形成される四重レジスタ内に置く。ＢＦＯＴＭＰレジスタは、シフタ９４の内部レジスタであり、ＰＵＴＢＩＴＳ命令を実行するときに、オーバーフロー・ビットを一時的に格納するために用いられる。挿入データを置く際、レジスタ対Ｒｍｄ内のＢＦＰが位置するフィールドによって指し示されるビットを始点とする。通常、挿入ビット・フィールドは６４ビット未満である。対象のフィールドは、レジスタＲｎｄ内に右詰めで入力され、対象フィールドの左側にある残りのビットは無関係であり、後に上書きされる。（例示のために、図６では、レジスタ対Ｒｎｄは、ビット・フィールド８５おｙび８６を収容するレジスタＲ５：４として示されている。ビット・フィールド８５は長さ「Ｌｅｎ」を有する。ビット・フィールド８５および８６は、レジスタＲ０、Ｒ１に置かれ、ＢＦＯＴＭＰは右揃えとなる。ビット・フィールド８５はレジスタＲ１：０内に得られる空間よりも長いので、ビット・フィールド８５Ａは溢れ、一時的にＢＦＯＴＭＰレジスタに格納される。）
ＡＬＵ９２は、以下で説明するように、ＢＦＰを更新し、ＢＦＰがビット６３を超えて溢れた場合、フラグ「ＡＮ」をセットする。ＢＦＰがビット６３を超えて溢れた場合、Ｒｓｄの内容をレジスタ・ファイル８０からメモリに移動し、ＢＦＯＴＭＰレジスタの内容をＲｓｄに移動する。ビットＦＩＦＯ挿入は、以下のアセンブリ・コード・シーケンスによって実現することができる。
【００３５】
【表２】
XR5:4  hold field to be inserted
XR7:6          hold control information
XR1:0  =  PUTBITS R5:4 BY R7:6;;      /* insert field */
XR7    =  BFOINC R7:6;;               /* advance BFP */
if ALT; do L[j0+=2]  = XR1:0;; /* when BFP.63, store assembled field to mem */
if ALT; do XR1:0 = BFOTMP;;     /* when BFP>63, move BFOTMP to XR1:0 */
図４および図７を参照すると、ＢＦＯＩＮＣ命令は、ＧＥＴＢＩＴＳおよびＰＵＴＢＩＴＳ命令を実行した後、ＢＦＰを更新する。ステップ１０８において、ＡＬＵ９２は、レジスタ１０４および１０６内の２つのオペランドの各々の下位側７ビットを加算し、その結果を６４で除算し（モジュロ演算１１０）、残余を第２オペランドの下位６ビットに戻す。結果はレジスタ１１２内に置かれ、加算によってビット６３を超えた場合ＡＮステータス・フラグがセットされる。ＢＦＯＩＮＣ命令は以下のフォーマットを有する。
【００３６】
【数３】
Ｒｓ  ＝  ＢＦＯＩＮＣ  Ｒｍｄ
ここで、レジスタＲｍｄ（１０４および１０６）は長さおよびＢＦＰ値を保持し、レジスタＲｓ（１１２）は結果を受け取る。
【００３７】
即ち、ＧＥＴＢＩＴＳ命令の一部としてＢＦＯＩＮＣ命令を実行する際、ＡＬＵ９２は、ＢＦＰを保持するレジスタＲ１７、および長さを保持するレジスタＲ１６からオペランドを受け取り、ＢＦＰ値をレジスタＲ１７に戻す。
【００３８】
図４Ａを参照すると、別の実施形態では、シフタ９４は４つの指定計算レジスタ（Ｓ３：０）１２０を含み、制御情報を格納するレジスタ１２２、１２４および１２６を含む。レジスタ１２２はＢＦＰ値を格納し、レジスタ１２４は長さ値を格納し、レジスタ１２６は、シフタ９４がＧＥＴＢＩＴＳまたはＰＵＴＢＩＴＳ命令を実行した後、無日付（ｕｎｄａｔｅｄ）ＢＦＰ値を格納する。レジスタ・ファイル８０は、Ｒｍ値を格納するレジスタ１３０、およびレジスタＳ３：０から抽出したビットを格納するレジスタ１３２を含む。Ｓ３：０レジスタは、連続ビット・ストリームを格納するために用いられる。条件付きロードがメモリおよびレジスタ・ファイル８０間で、図４に示したのと同様に行われる。ＧＥＴＢＩＴＳ命令を実行する際、転送されるビット・フィールドはレジスタ１３０からロードされ、自動的にレジスタ１２０に格納される。ＰＵＴＢＩＴＳ命令を実行する際、転送されるビット・フィールドは自動的にレジスタ１３０に格納される。
【００３９】
図４Ａの実施形態と図４の実施形態との間の主な相違は、ＢＦＰを更新する方法にある。図４に示す実施形態では、ＢＦＰはＡＬＵ９２によって更新され、一方図４Ａに示す実施形態では、ＢＦＰはシフタ９４によって更新される。シフタにおけるＢＦＰの更新は、命令ＧＥＴＢＩＴＳおよびＰＵＴＢＩＴＳ自体によって指定され、別個のＡＬＵ命令（図４）によるのではない。しかしながら、双方の場合において、ＢＦＰ（レジスタ１２２）の値がビット・フィールド長（レジスタ１２４）に加算され、次いでモジュロ演算において結果を６４で除算する。モジュロ演算の結果が６４を超過した場合、図４Ａに示すように、シフタは自動的にデータをロードし、これらを適切なレジスタに格納する。
【００４０】
パックされたストリーム（即ち、ＧＥＴＢＩＴＳ命令）からビット・フィールドを抽出した後、抽出したビットは種々の演算に用いられる。ハフマン・デコードでは、各ビット・フィールドは情報シンボルにマップされる。ｎ＜３２ビットのビット・フィールドを抽出した場合、このフィールドは３２ビット・レジスタに置かれるが、このレジスタ内の下位ｎビットのみが有用なコーディング情報となる。次いで、このレジスタは、情報シンボルを保持するテーブルに対するポインタとして用いられる。パックされたストリームに挿入するフィールドを発生するには、逆の動作シーケンスを用いる（ＰＵＴＢＩＴＳ命令を用いる）。ここでは、参照テーブルを用いて、情報シンボルを３２ビット・ワードに変換する。この３２ビット・ワードが有する有効な情報ビットはｎだけであり、ＰＵＴＢＩＴＳ情報への入力として用いられ、有効なｎ情報ビットのみを出力ストリームにパックする。
【００４１】
前述のディジタル信号プロセッサは、１６ビットや３２ビット・フォーマット以外でデータを書き込む、高品位テレビジョン（ＨＤＴＶ）において見られるデータ・フォーマットを処理する際に用いられる。あるいは、本プロセッサは、ワイヤレス電気通信システム、交換システム、およびコンピュータ・ネットワークおよび計算機を接続するリモート・アクセス・サーバを含むネットワーク状システムにも用いられる。また、本プロセッサは、レーダや医療用撮像のためのグラフィックス・システム、あるいは１６ビットや３２ビット・フォーマット以外で書き込まれたデータを使用するその他の用途にも用いられる。本プロセッサは、例えば、標準的なプロセッサが頻繁に行なうように、１８ビット・ワードを３２ビットに拡張し、１４ビットの格納領域を無駄にすることによって、１８ビット・ワードを３２ビット・レジスタに格納する必要はないという利点がある。
【００４２】
以上、本発明の代表的な実施形態について説明したが、種々の変形、変更および改良も当業者には容易に想起されよう。かかる変形、変更および改良は、本発明の精神および範囲に該当するものと見なす。したがって、前述の説明は一例に過ぎず、限定として意図した訳ではない。本発明は、特許請求の範囲およびその均等物における規定の通りにのみ限定されることとする。
【図面の簡単な説明】
【図１】  ディジタル信号プロセッサのブロック図である。
【図２】  図１に示す２つの計算ブロックの一方のブロック図である。
【図３】  計算ブロックによって用いられる命令フォーマットを示す図である。
【図４】  図４は、連続ビットＦＩＦＯによって用いられるレジスタ・ファイルを示す計算ブロックのブロック図である。
図４Ａは、連続ビットＦＩＦＯの代替実施形態のブロック図である。
【図５】  ＧＥＴＢＩＴＳ命令を実行する際のレジスタ間のデータ・フローを示す図である。
【図６】  ＰＵＴＢＩＴＳ命令を実行する際のレジスタ間のデータ・フローを示す図である。
【図７】  ＢＦＯＩＮＣ命令を実行する際のデータ・フローを示す図である。
【図１】
0004955149.tif 000002
【図２】
0004955149.tif 000003
【図３】
0004955149.tif 000004
【図４】
0004955149.tif 000005
0004955149.tif 000006
【図５】
0004955149.tif 000007
【図６】
0004955149.tif 000008
【図７】
0004955149.tif 000009