JP2008530642A - 低レイテンシーの大量並列データ処理装置 - Google Patents

低レイテンシーの大量並列データ処理装置 Download PDF

Info

Publication number
JP2008530642A
JP2008530642A JP2007553552A JP2007553552A JP2008530642A JP 2008530642 A JP2008530642 A JP 2008530642A JP 2007553552 A JP2007553552 A JP 2007553552A JP 2007553552 A JP2007553552 A JP 2007553552A JP 2008530642 A JP2008530642 A JP 2008530642A
Authority
JP
Japan
Prior art keywords
alu
register
instruction
stage
opcode
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
JP2007553552A
Other languages
English (en)
Inventor
フォアバッハ マルティン
マイ フランク
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.)
PACT XPP Technologies AG
Original Assignee
PACT XPP Technologies AG
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 PACT XPP Technologies AG filed Critical PACT XPP Technologies AG
Publication of JP2008530642A publication Critical patent/JP2008530642A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Image Processing (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

ALUの多次元アレイを有し、少なくとも2つの次元を有し、次元におけるALUの数は2以上であり、相応のアレイ内のALUのうち少なくとも幾つかの間でレジスタに起因するレイテンシーを伴わずにデータを処理するように適合されている、データ処理装置。

Description

発明の説明
本発明は、実行パイプラインを有するプロセッサのための次のようなデータ処理方法と、とりわけ最適化されたアーキテクチャとに関する。すなわち、パイプラインの各ステージごとに条件付き実行を行い、とりわけ、パイプラインの機能停止による全体的なパフォーマンスの低減なしで条件付きのジャンプを行えるようにするデータ処理方法と、とりわけ最適化されたアーキテクチャとに関する。本発明によるアーキテクチャはとりわけ、すべての逐次アルゴリズムに適合されており、とりわけハフマン型アルゴリズム、たとえばCAVLCに適合されており、多数の条件およびジャンプを有するたとえばCABAC等の算術コーデックに適合されている。さらに、本発明はとりわけフレーム内符号化に適しており、たとえばビデオコーデックH.264によって提案されているようなフレーム内符号化に適している。
データ処理では、使用可能なリソースの最適化と、データ処理に関与する回路の電力消費の最適化とが必要とされる。このことはとりわけ、リコンフィギュラブルなプロセッサが使用される場合に当てはまる。
リコンフィギュラブルなアーキテクチャは、コンフィギュラブルな機能および/または相互接続を有するモジュール(VPU)を有し、とりわけ、1次元または多次元に配置された算術および/または論理および/またはアナログおよび/または記憶および/または内部/外部接続モジュールを複数有する集積モジュールを有する。これらのモジュールは、直接またはバスシステムを介して相互に接続されている。
このような通常のモジュールはとりわけ、シストリックアレイ、ニューラルネットワーク、マルチプロセッサシステム、複数の算術ユニットおよび/または論理セルおよび/または通信/周辺セル(IO)を有するプロセッサ、クロスバースイッチ等である接続ネットワーク化モジュールを含み、FPGA,DPGA、Chameleon、XPUTER等の種類の公知のモジュールも含む。ここではまた、とりわけ同出願人の以下の特許および特許出願も引用する。
P4416881.0−53,DE19781412.3,DE19781483.2,DE19654846.2−53,DE19654593.5−53,DE19704044.6−53,DE19880129.7,DE1986108.82−53,DE19980312.9,PCT/DE00/01869,DE10036627.9−33,DE10028397.7,DE10110530.4,DE10111014.6,PCT/EP00/10516,EP01102674.7,DE10206856.9,60/317,876,DE10202044.2,DE10129237.6−53,DE10139170.6,PCT/EP03/09957,PCT/EP2004/006547,EP03015015.5,PCT/EP2004/009640,PCT/EP2004/003603,EP04013557.6。
これらの引用文献は、とりわけアーキテクチャ要素のコンフィギュレーション、ルーティング、配置、構成、トリガ手法等の詳細に関して開示する目的で含まれることに留意されたい。これらの引用文献は特定の実施形態において、専用のコンフィギュレーション系統を使用するコンフィギュレーションに関して述べているが、絶対的に必要というわけではないことに留意すべきである。本発明から、本発明の範囲から逸脱せずに、同一の入力ラインを使用して、データとインターメッシュして命令を処理アーキテクチャへ転送することが可能であることが理解できる。さらに本発明は、通信用の任意のプロトコルを使用する環境で使用できる基本的原理を開示していることにも留意すべきであり、本発明はとりわけ、入力側および出力側にプロトコルレジスタも含むことができることにも留意すべきである。また、とりわけハイパースレッドアプリケーションに限らず、本願で開示されている発明は、別の任意のプロセッサの一部として、とりわけマルチコアプロセッサ等の一部として使用できることは自明である。
本発明の課題は、工業用途に対して新規の構成を提供することである。
前記課題は、独立請求項の構成によって解決される。従属請求項に有利な実施形態が示されている。
従来技術によるプロセッサの大部分は、パフォーマンスを向上するためにパイプライン方式またはベクトル演算論理回路を使用する。条件の場合、とりわけ条件付きジャンプの場合、パイプライン内および/またはベクトル演算論理回路内の実行を停止しなければならない。最悪のケースのシナリオでは、実行完了された計算さえも放棄しなければならない。このようないわゆるパイプライン停止により、特定のプロセッサアーキテクチャに依存して、10〜30クロックサイクルが無駄になる。これが頻繁に発生する場合には、プロセッサ全体のパフォーマンスが有意に影響される。したがって、頻繁にパイプライン停止が発生することによって2GHzプロセッサの処理能力が、100MHzプロセッサの処理能力にまで実使用処理能力が低減されるおそれがある。したがってパイプライン停止を低減するためには、たとえば分岐予測および分岐叙述(branch-predication)等の複雑な手法が使用されるが、このような手法は、エネルギー消費およびシリコン面積に関して非常に非効率的である。
それとは対照的に、VLIWプロセッサは一見すると、深くまでパイプライン化されたアーキテクチャよりはフレキシブルに見えるが、ジャンプの場合には命令語全体が放棄されることにもなり、さらに、パイプラインおよび/またはベクトル演算論理回路を組み込まなければならない。
本発明によるプロセッサアーキテクチャは、パイプライン内で任意のジャンプを行うことができるが、たとえば分岐予測に使用されるハードウェア等の複雑である付加的なハードウェアを必要としない。パイプライン停止が発生することはないので、このアーキテクチャによって、理論的な最大パフォーマンスに近い、従来のプロセッサよりも格段に高い平均パフォーマンスを実現することができ、このことはとりわけ、ジャンプおよび/または条件の数が多いアルゴリズムの場合に当てはまる。
本発明はたとえば従来のマイクロプロセッサとして使用するのにも適しているが、それだけではなく、コプロセッサとして、かつ/または再構築可能なアーキテクチャと結合するために使用するのにも適している。異なる結合手法を使用することができ、たとえば、共通のバスおよび/またはメモリを使用して「疎」結合を行う手法、いわゆるコプロセッサインタフェースを使用する(再構築可能な)プロセッサと結合する手法、再構築可能なプロセッサのデータパスに再構築可能なユニットを組み込む手法、および/または、2つのアーキテクチャをスレッドリソースとしてハイパースレッドアーキテクチャにおいて結合する手法を使用することができる。ここで、とりわけハイパースレッドアーキテクチャに関する結合についての記載があるPCT/EP2004/003603(PACT50/PCTE)を引用する。この引用文献の開示内容はすべて、参照のために本願の開示内容に含まれるものとする。
本発明のアーキテクチャは、相当数の逐次演算を含むデータ処理が行われる既知のプロセッサアーキテクチャより顕著な利点を有し、とりわけVLIWアーキテクチャと比較して顕著な利点を有する。実行すべきアルゴリズムが、並列処理すべき相当数の命令を有し、暗示的なベクトル変換性または命令レベルの並列性ILPを含む場合、本発明のアーキテクチャはVLIW等の他のプロセッサおよびコプロセッサ、一般的に言うと他のデータ処理ユニットと比較して高水準のパフォーマンスを維持する。というのも、所与のプロセッサアーキテクチャの特殊性を整合および接続できるという利点をフルに実現できるからである。
このことはとりわけ、一般的にはシーケンサ構造に最良にマッピングできるデータ処理ステップを実行すべき場合に当てはまる。
本発明によるアーキテクチャ
以下では、本発明によるアーキテクチャをプロセッサとして参照することに留意されたい。しかし、本発明をフル稼働のプロセッサと見なすことができ、かつ/または本発明をこのようなフル稼働のプロセッサを構成するために使用できる限りは、本発明のコアが複数のコアのうち1つのコア、とりわけ相互に異なるコアのうち1つのコアを成す、たとえばマルチコアプロセッサ等のより複雑な環境で使用するための1つのプロセッサコアのみを導き出し、より一般的に言うと1つのデータ処理コアのみを導き出すことも可能であることを理解すべきである。さらに、(粗粒度および/または中間粒度の)「シー・オブ・ロジック」に含まれる処理アレイ要素または処理アレイ回路を成すためにも本発明のコアを使用できることも理解できる。上記で幾つか留意点を述べたが、以下の記載は大部分において、本発明によるプロセッサを参照する。これは本発明を限定するものではなく、当業者が本発明を理解しやすいようにするためだけのものである。より一般的に言うと、各パラグラフおよび/または各文および/または各用語および/または各対象および/または各主体および/または別の所与の文法的な構造を参照すること、または関連づけすること、または繰り返すことなく、可能な択一的構成および/または任意の特徴、または実施可能な択一的構成および/または任意の特徴、または有利な択一的構成および/または任意の特徴、または、特許審査官、特許関係従業員、弁理士または特許審判官が記載の開示内容の実際の対象である技術的事項にフォーカスすることなく文言上の子細を解釈してより完全な開示内容の必要な部分または有用な部分として見なされるが当業者はそう見なさない評価が低い択一的構成および/または任意の特徴のうちいずれもすべて、または少なくとも幾つかは、本願開示内容の範囲を限定すると見なされることは決してない。
以上のことを述べた上で、本発明によるプロセッサ(XMP)は、ロウで接続された幾つかのALUステージを有し、各ALUステージは先行のALUステージの状態に応答して条件付きで命令を実行する。どのような所与のプログラム構造も実行できるようにするため、それぞれの面上で実行可能な命令の最大数を各ALUステージ上に記憶することにより、完全なプログラムフローツリーを実行することができる。先行のステージの状態および/またはプロセッサ状態レジスタの状態を使用することにより、それぞれ実際に実行すべきステージに対する命令が1つのクロックサイクルから別のクロックサイクルまでに決定される。完全なプログラムフローツリーをインプリメントするためには、最初のALUステージでは1つの命令を実行することが必要であり、第2のALUステージでは(少なくとも)2つの命令のうち1つの命令の条件付き実行が必要であり、第3のALUステージでは(少なくとも)4つの命令のうち1つの命令の条件付き実行が必要であり、n番目のステージでは(少なくとも)2個のオペコードのうち1つのオペコードの条件付き実行が必要である。有利な実施形態では、すべてのALUが共通のレジスタセットに対して読み込みおよび書き込みのアクセス権を有することができる。有利には、1つのALUステージの結果はオペランドとして後続のALUステージへ送信される。ここでは「結果」という用語は、たとえば繰り上げ、あふれおよび符号フラグ等の結果関連のデータも指すことに留意すべきである。パイプラインレジスタステージは、異なるALUステージ間で使用することができる。とりわけ、すべてのALUステージの下流側にパイプライン状のレジスタが設けられるのではなく、ALUの所与のグループの下流側にのみパイプライン状のレジスタが設けられるようにインプリメントすることができる。とりわけ、グループごとのALUとパイプラインステージとの関係性は、ALUグループ内でちょうど1つの条件付き実行のみが行われるように形成されるのが有利である。
ALUステージの有利な実施形態
図1は、本発明によるプロセッサ(XMP)のデータパスの基本的な構成を示す。プロセッサのデータおよび/またはアドレスレジスタは0109によって示されている。4つのALUステージが0101,0102,0103,0104によって示されている。これらのステージは相互にパイプライン状に接続されており、各ALUにはマルチプレクサ/レジスタステージ0105,0106,0107が続く。各ステージのマルチプレクサは、後続のALUのオペランドのソースを選択する。このソースはこの実施形態では、プロセッサレジスタおよびそれぞれの先行のALUの結果のいずれかである。この実施形態では、マルチプレクサが、ALUがそれぞれのマルチプレクサに対してどれだけ上流に位置するかに依存せずに、かつ/または、ALUがどのカラムに位置するかに依存せずに、オペランドとして上流の任意のALUの結果を選択する有利な構成が使用される。ALU結果は先行のALUから直接引き継がれるので、プロセッサレジスタにライトバックする必要はない。したがって、ALU/レジスタデータ転送はとりわけシンプルであり、ここで提案および開示されているマシンではエネルギー効率が高い。それと同時に、解決するのが困難なデータ依存性の問題は存在しない(とりわけ、コンパイラによって解決するのが困難なデータ依存性の問題)。したがって、VLIWプロセッサから周知であるようなALU間のデータ依存性は、ここでは問題にならない。
マルチプレクサに任意に続くレジスタステージが、ALUステージ間のデータ転送をパイプライン方式で分離する。有利な実施形態では、このようなレジスタステージはインプリメントされないことに留意すべきである。プロセッサレジスタ0109の出力端に直接続いて、マルチプレクサステージ0110が第1のALUステージに対するオペランドを選択するように構成されている。別のマルチプレクサステージ0111が、0109におけるターゲットレジスタに対するALUステージの結果を選択する。
図2に、図1のALUステージ構成体0130のプログラムフロー制御が示されている。命令レジスタ0201は、所与の時点で0130において実行すべき命令を保持する。従来技術のプロセッサから公知であるように、命令は命令フェッチャによって通常のようにフェッチされる。この命令フェッチャは、プログラムポインタPPによって定義されたプログラムメモリ内のアドレスから実行すべき命令をフェッチする(0210)。
第1のALUステージ0101は、マルチプレクサステージ0110を使用するALUに対するオペランドを決定する命令レジスタ0201によって固定的に定義された命令0201aを実行する。また、ALUの関数は同様に設定されている。0101によって生成されたALUフラグはプロセッサフラグレジスタ0202と組み合わせることができ(0203)、後続のALU0102のフラグ入力データとして該ALU0102へ送信される。
0103内の各ALUステージは状態を生成し、この状態に応答して後続のステージは相応のジャンプを遅延なしで実行し、相応の命令を続行する。
0203で得られた状態に依存して、ALUステージ0102に対し、0201からの2つの可能な命令のうち1つの命令0205がマルチプレクサによって選択される。ジャンプターゲットのこのような選択は、ジャンプベクトル0204によって後続のALUステージへ転送される。選択された命令0205に依存して、マルチプレクサステージ0105は後続のALUステージ0102に対するオペランドを選択する。さらにALUステージ0102の関数が、選択された命令0205によって決定される。
0102によって選択されたALUフラグは、0101から受け取られたフラグ0204と組み合わされ(0206を参照)、後続のALU0103のフラグ入力データとして該後続のALU0103へ送信される。0206で得られた状態と、先行のALU0102から受け取られたジャンプベクトル0204とに依存して、マルチプレクサはALUステージ0103に対し、0201からの4つの可能な命令のうち1つの命令0207を選択する。
ALUステージ0101の可能なジャンプターゲットは2つであるから、ALU0102に対する可能な命令は2つである。ALU0102ではジャンプターゲットは2つであるが、このことは0101の2つの各ジャンプターゲットに当てはまる。換言すると、可能なジャンプターゲットのバイナリツリーが作成され、このバイナリツリーの各ノードは2つの分岐を有する。このようにして、ALU0102は2=4個の可能なジャンプターゲットを有し、これらは0201に記憶されている。
選択されたジャンプターゲットは信号0208によって後続のALUステージ0103へ送信される。選択された命令0207に依存して、マルチプレクサステージ0106は後続のALUステージ0103に対するオペランドを選択する。さらに、ALUステージ0103の関数が、選択された命令0207によって決定される。
ALUステージ0103,0104で実行される処理は、他のステージ0101および0102それぞれに関する説明に相応するが、事前定義された状態による選択に使用される命令セットはそれぞれ8個(0103の場合)または16個(0104の場合)である。先行のステージと同様に、2=16個(n=ステージの順番=4)のジャンプターゲットを有するジャンプベクトル0211がALUステージ0104の出力端で生成される。この出力は、次に実行すべきオペコードのアドレスとして16個の可能なアドレス0212のうち1つのアドレスを選択するマルチプレクサへ送信される。ジャンプアドレスメモリは有利には、命令語0201の一部としてインプリメントされる。有利には、ジャンプアドレスメモリ0212にはアドレスは相対的に記憶され(たとえば±127)、0213を使用して、選択されたジャンプアドレスを現在のプログラムポインタ0210に足し、該プログラムポインタを、ロードおよび実行すべき次の命令に送る。留意点:本発明の1つの実施形態では、各ALUステージに対して選択できる有効な命令はそれぞれ1つだけであり、他のすべての選択肢は、NOP(no operation)命令または「無効」命令を出すだけである。本願開示内容の一部を成す添付書類を参照されたい。
ALUステージ0104のフラグは先行のALUステージと同様に(0209を参照されたい)、先行のステージから得られたフラグと組み合わされ、フラグレジスタにライトバックされる。このフラグは、ALUステージ構成体0130におけるすべてのALU演算の結果フラグであり、次のサイクルでALUパス0130へのフラグ入力として使用される。
4つのALUステージと後続のパイプラインレジスタとを有するこの有利な実施形態は、単なる一例である。通常の知識を有する者であれば、ここに挙げられた構成から、たとえばALUステージ数、パイプラインステージの数および配置、カラムの数、隣接するカラムおよび/または隣接しないカラムとの接続、および/またはレジスタセットの配置および構成に関して異なるインプリメンテーションを導き出すことが可能であることが理解できる。
このような基本的なデータ処理方法により、マルチALUステージ構成体の各ALUステージが、条件および/またはジャンプを実行および/または生成することができる。条件の結果またはジャンプターゲットの結果は、たとえば0206等のフラグベクトルによって、またはたとえば0208等のジャンプベクトルによって、各後続のALUステージへ転送され、たとえば0206および0208等の入力されたベクトルに依存して、たとえばオペランドとしてデータ処理に対するフラグおよび/またはフラグベクトルを使用して、かつ/または、ジャンプベクトルによって実行すべき命令を選択することによって演算を実行する。このことは、ノーオペレーション命令を選択してALUを有効に使用不能にすることを含むことができる。このALUステージ構成体0130内では各ALUは、命令語0201内で暗示的に符号化され明示的なジャンプコマンドを必要および/または実行しない任意のジャンプを実行することができる。プログラムポインタは、0213を介してALUステージ構成体内で演算が実行された後に、ロードすべき次の命令へのジャンプ実行を開始する。
プロセッサフラグ0202は連続的にALUステージから消費され、各ALUの結果フラグによって組み合わせかつ/または置換される。上記のALUステージ構成体(ALUパス)の出力側において、すべてのALUの最終的結果の結果フラグがプロセッサフラグレジスタ0202に戻され、新たなプロセッサ状態を定義する。図2に示されたALUステージの構成または構築は、非常に複雑および高消費となる場合がある。このことは、実行されるジャンプの数が多くなり、必要とされるスペースが大きくなると同時に、設計およびシミュレーションの複雑性が増大することに拠る。大部分のアルゴリズムでは複数の分岐を直接連続的に行う必要がない事実を鑑みると、ALUパスを簡略化することができる。提案の一例として、1つの実施形態が図3に示されている。図3では全般的な構成は図2の構成に近いが、可能なジャンプのセットは2つに制限されている。最初の2つのALU0101および0102に対する命令が命令レジスタ0301において、固定的な方式で符号化される(この固定的な符号方式は、命令がハードウェア設計工程中に固定化されるのではなく、図3の装置に一度ロードされた1つのプログラム部分の実行中に命令を変更する必要がないことを暗示する)。ALUステージ0102はジャンプを実行し、ALUステージ0103および0104それぞれに対して命令が2つずつ0302に記憶される。各命令対のうち1つの命令は実行時に、マルチプレクサを使用するALUステージ0102の状態に応答してジャンプターゲットに依存して選択される。ALUステージ0104は、0303に4つの可能なターゲットが記憶されたジャンプを実行する。ALUステージ0104の状態に依存して実行時にマルチプレクサによってターゲットが選択され、加算器0213を使用してプログラムポインタ0210と結合される。各ALUステージ間にマルチプレクサステージ0304,0305,0306が設けられており、これはそれぞれレジスタステージを有することができる。有利には、レイテンシーを低減するためにレジスタステージはインプリメントされない。
並列接続された命令
有利には別の構成体0101,0102,0103,0104=0130では、簡単かつ時間的に高速で実行可能な命令のみがALUにインプリメントされる。このことは有利であり、実質的な制限にならない。プログラム内で最も高頻度の命令は(たとえばADD命令、SUB命令、SHL命令、SHR命令、CMP命令等を参照されたい)このような制限に該当する事実に起因して、処理時間が比較的長くひいてはクロック周波数に関してALUステージ構成に制限を課す比較的複雑な命令を、副次的なALU0131として接続し、有利には、上記のALUステージに対して並列に接続することができる。2つの「副次的ALU」が0120および0121としてインプリメントされているのが示されている。上記のようなより複雑な命令は、乗算器、複雑なシフタおよびディバイダとすることができる。
有利な実施形態ではとりわけ、プロセッサチップ上で大きなインプリメント面積を必要とする命令はすべて、各ALU内にインプリメントされる代わりに前記副次的ALU構成体にインプリメントすることができ、またインプリメントされることを明示的に述べておく。択一的な実施可能な構成では、ALUステージの各ALUにおいてハードウェア実装のために比較的大きな面積を必要とする命令を実行することはできず、ALUステージのサブセットでのみ、たとえば2番目ごとのALUでのみこのような命令を実行することができる。
副次的ALU0131は、図面ではパイプラインの側方に示されているが、物理的にALUステージ/パイプライン構成体の側方に配置する必要はない。その代わり、プロセッサのハードウェアを構成するのに必要とされる実際の実施可能な工程に依存して、副次的ALU0131をALUステージ/パイプライン構成体の頂部および/または下方にインプリメントすることができる。副次的ALU0131は、マルチプレクサ0110を介してプロセッサレジスタ0109から必要なオペランドを受け取り、マルチプレクサ0111を使用して該プロセッサレジスタに結果をライトバックする。したがって、副次的ALUが必要なオペランドを受け取る手法は、ALUステージ構成体がオペランドを受け取る手法に相応する。プロセッサレジスタ0109からオペランドを受け取るだけでなく、副次的ALUは、1つのALUの出力端またはALUステージの出力端または複数のALUステージの出力端に接続することもできることを述べておく。命令群がALUステージ構成体0130または副次的ALU0131で実行されるマシンモデルは存在するが、両ALUユニットおよび0131に同時に存在するハイパースカラ実行モデル処理データをインプリメントすることもできる。
再構築可能なプロセッサ、たとえばVPUを副次的ALUに組み込むことにより、シーケンシャルアーキテクチャとの密な接続および結合が実現される。本発明のプロセッサコア内のプロセッサ自体は、再構築可能なプロセッサすなわち再構築可能なエレメントのアレイに結合できることを述べておく。したがって、副次的ALU側は再構築可能なプロセッサを有することができる。このようなプロセッサは、ALU構成体0130が接続された処理アレイと比較して、たとえば設けられる処理エレメントが比較的少ないこと、かつ/または直近で隣接して接続が行われること、かつ/または異なるプロトコルが設けられることにより、複雑性を低減することができる。有利な場合には、バブーシュカ状(またはチェーン状)の結合を簡単に実現することができることを述べておく。また必要な場合には、副次的ALUは比較的大きなアレイにデータを転送できることも留意されたい。さらに、副次的ALUが再構築可能なプロセッサおよび/または再構築可能なプロセッサのアーキテクチャおよび/または再構築可能なプロセッサのプロトコルを有する場合、これらは、本発明のALU構成体が比較的大きなスケールで結合されたものと同じである必要がないことを述べておく。すなわち、バブーシュカを考察すれば、外側のバブーシュカ再構築可能プロセッサアレイは、内側のバブーシュカ再構築可能プロセッサアレイのプロトコルと異なるプロトコルを有することができる。その理由は、比較的小さなアレイでは、異なるプロトコルおよび/または接続が有利である場合があるということになる。たとえば本発明のALU構成体が20×20アレイに結合され、該ALU構成体のALUに含まれる再構築可能な処理アレイがそれより小さい場合、たとえば3×3アレイである場合、この3×3アレイでは直近で隣接して接続する必要はなく、とりわけこのことは、多次元トロイダル接続が行われる場合には必要ない。また、内側バブーシュカプロセッサアレイを部分的に再構築する必要もなくなる。副次的ALUの比較的小さいアレイでは、この(比較的小さい)アレイ全体を再構築するだけで十分である。
副次的ユニット0131を上記で言及し、以下では副次的「ALU」と称するが、XPP状のアレイを副次的ALUとして本発明のアーキテクチャに結合できるのと同様に、別のユニットを「ALU」として使用することもでき、たとえばルックアップテーブル、RAM、ROM、FIFOまたは別の種類のメモリ、とりわけ本発明の多列ALU構成体内の各ALUステージまたはALUおよび/または複数のALUステージまたはALUに書き込み可能および/または読み出し可能なメモリを使用することもできる。これらは本発明を限定するものではない。さらに、本願出願前の出願で開示されたセル要素および/またはセル要素の機能のうち任意のセル要素および/または機能を副次的ALUとしてインプリメントすることができ、たとえばFPGAグリッド、VLIW‐ALU、DSPコア、浮動点ユニット、任意の種類のアクセラレータ、当分野においてすでに公知であるかまたは将来の技術で開示される周辺インタフェース、たとえばメモリバスおよび/またはI/Oバス等と組み合わされたALUを、副次的ALUとしてインプリメントすることができることに留意すべきである。
また、本発明のALU構成体に含まれるALUステージのロウのALUが上記で開示および記載されており、以下では、たとえばレイテンシーが制限された縮小された命令セット等である所与の命令セットを実行できるALUとされるが、パス内のALUのうち少なくとも幾つかは別の機能を有するように構築および/または構成することができることも理解すべきである。非常に多数の浮動点命令を必要とする本発明の構成体上でアルゴリズムを処理すべきであることを前提とするのが妥当である場合には、上記の記載にかかわらず、副次的ALUに含まれるだけではなくALUステージパスにも含まれるALUのうち少なくとも幾つかは、浮動点機能を有することができる。パフォーマンスが重要点であり、別の機能より低速で実行されかつ高頻度では使用されない機能を有するようにALUをインプリメントすべき場合、この機能を参照するオペコードを定義または条件付きで実行すべき場合にクロックを低速化することができる。クロック周波数は、他のケースと同様に、ALU構成体全体に対してロードされる命令で指示することもできる。また必要な場合には、カラムのうち少なくとも1つに含まれるALUのうち幾つかを、それ自体が構築可能であるように構成し、(必要な場合には事前構築された)コンフィギュレーションを参照することによって命令が定義されるようにすることもできる。ここで、ALUの1つのロウから別のロウに転送される状態および/またはALUのカラム間で転送される状態を、((再)構築可能な)アレイ全体の状態とすることができる。このことにより、命令を非常に効率的に選択できる手法を定義することができる。このようなケースでは、本発明で使用されALUにロードすべき命令は、全体のコンフィギュレーションおよび/または別の命令およびトリガ値等を使用して選択できる複数のコンフィギュレーションを含むことが可能であることを理解すべきである。
さらに特定のケースでは、上記で副次的ALU(または、より正確には副次的ユニット)のための慣用の伝統的なALUに対して択一的な選択肢として記載されたユニットを、データパスの少なくとも幾つかの部分で、すなわち本発明のALU構成体に含まれる少なくとも1つのALUに使用することも可能であることを理解すべきである。したがって1つまたは複数の「ALU状」要素を、ルックアップテーブル、RAM、ROM、FIFOまたは別のメモリ、(1つまたは複数の)I/Oインタフェース、FPGA、DSPコア、VLIWユニットまたはこれらの組み合わせとして構成することができる。また、オペランドが複数である場合でも、処理ユニットおよび/または変更ユニットおよび/または組み合わせユニット、すなわち「従来の」ALUは、たとえば乗算器ステージを省略することによってオペランド処理手段の集合が縮小された場合でも維持されることにも留意すべきである。さらにこのような場合でも、本発明から従来のXPPまたは別の再構築可能なアレイまでには、状態の定義が完全に異なるという決定的な相違が存在することにも留意されたい。
従来のXPPでは、状態はアレイ全体に分布され、すべてのトリガベクトルがアレイ全体のALU間およびプロトコル関連の状態間で交換されるアレイ全体を考慮する際にのみ、アレイの状態を定義することができる。それとは対照的に、本発明はさらに、1つのロウから別のロウへ転送でき明確に定義された状態を各ロウ(ステージ)ごとに有する。1つのロウから別のロウへこのようなプロセッサ状の状態を交換する他にさらに、本発明による装置の異なるカラム間で状態(または状態状の)情報を交換することもできる。このことが、公知のプロセッサと明確に異なる点である。
並列接続および/またはスイッチングおよび/または並列化されたオペランドによって、残りのデータパスとりわけALUデータパスの演算を実行することができる。したがって、データ処理を命令レベルで並列化し、命令レベルの並列性(ILP)を活用することができる。
レジスタアクセス
ALU構成体0130に含まれる各ALUは、本発明の有利な実施形態では各マルチプレクサ/レジスタステージ0105,0106,0107を介して、プロセッサレジスタ0109の任意のレジスタをオペランドレジスタ0140として選択することができる。各ALUステージの演算および/または計算の結果0141,0142,0143,0144は各後続のステージへ送信され、各後続のステージのマルチプレクサ/レジスタステージ0105,0106,0107によってオペランドとして選択される。この各後続のステージは通常の場合には、直接後続するステージおよび/またはこの後の1つまたは複数のステージである。上記のものは状態情報を保持し、これは直接後続するステージへ送信され、かつ/またはさらに下流の1つまたは複数のステージへ送信される。
マルチプレクサステージ0111はバスシステム0145を介して接続され、実行すべき命令による演算/計算0141,0142,0143,0144の結果を、プロセッサレジスタ0109に書き込むために転送するのに使用される。
複数の並列ALUパスにおけるALUの非同期の連結のインプリメンテーション
上記の実施形態では、次の欠点が残されている。ALUステージパスはとりわけCABAC等のアルゴリズムでは、完全にパイプラインを使用せずに最大パフォーマンスに達するまで動作しなければならない。その理由は、このようにした場合にのみ、すべてのALUステージが各クロックサイクルごとに演算を実効的に実行できる事実に拠る。ここでは、計算演算が相互に時間的に線形(連続的)に依存するため、新たな演算は最後のパイプラインステージの結果が得られた後にのみ開始できるという事実により、パイプラインは利点を有さない。したがって、ALUステージのうち大部分は常に空実行することになる。それゆえ、ALUステージを非同期接続するのが有利である。従来技術によるトランジスタ幾何的構成に基づけば、このことは問題ではない。それは、本発明によるALUステージ内の個々のALUは有利な実施形態ではADD,SUB,AND,OR,XOR,SL,SRおよびCMP等の高速かつ簡単なコマンドのみを有するという事実に拠るからであり、数百MHzの複数のALUステージを非同期結合することができ、たとえば4つのALUステージを非同期結合することができる。
しかし、ALUステージ構成体内の符号に分岐することで、タイミング上の問題が生じることがある。というのも、相応のALUは実行時に命令を非同期で変更することがあり、実行時間の増大に繋がるからである。
ここで、有利な実施形態ではALUステージ構成体内のALUが非常に簡略的に構成されているという事実に拠れば、複数のALUステージをインプリメントし、各ALUステージを可能な分岐のうち1つでは固定的に構築することができる。
図4は、ALUステージ構成体0401(上記の実施形態における0101〜0104に相応する)が多重化によって2重化され、0402={0101a〜0104a}から0403={0101zz〜0104zz}までのzz‐ALUステージ構成体の分岐のためにインプリメントされている相応の構成体を示す。各ALUステージ構成体0401〜0403では演算は、実行中は変更されないオペコードの固有の命令によって定義される。このような命令は、各個別のALUに対する各オペランドの固有のALUコマンドおよびソースと、いずれかのALUのターゲットレジスタとを含む。レジスタセットは、レジスタおよび/またはスタックマシンのプロセッサモデルと両立するように定義できることに留意されたい。状態信号は1つのALUステージから最も隣のALUステージへ転送される0412。このようにして、1つのALUロウ0404,0405,0406,0407へ入力された状態信号は、1つのロウにある相応のアクティブ状態の(複数の)ALUを選択することができ、選択されたALUはその後、(複数の)状態信号を後続のロウに伝搬する。ALUロウ内で入力された状態信号0412に依存してALUをアクティブ化することにより、パイプライン化のためのアクティブ状態のALUの連結が実現され、グリッド/網内で実際に実行すべきジャンプの「仮想的な」パスが形成される。各ALUはバスシステム0408(図4参照)を介して、(バス0411を介して)レジスタセットにアクセスし、また上流のALUロウにあるALUの結果にもアクセスする。(図4では、幾つかの要素で参照符号の使い方が、図1で使用される参照符号と異なることに留意すべきである。たとえば0408は0140に相応し、0409は0111に相応し、0410は0145に相応する。別の図対でも同じような違いが存在することがある。)ALU内の完全な処理と、データ信号および状態信号の送信とは、非同期で実行される。ALUステージの出力端において幾つかのマルチプレクサ0409は、入力された状態信号0413に依存して、仮想的に実行されたジャンプにしたがって実際に供給してデータレジスタ(0410)に書き込むべき結果を選択する。第1のALUロウ0404は状態信号0414を、プロセッサの状態レジスタから受け取る。ALUロウ内で生成された状態信号は、上記のように「仮想」パスの状態に相応し、ひいてはジャンプ先であり実際に経由されるデータパスに相応し、0413を介してプロセッサの状態レジスタ0920にライトバックされる。
このようなALUインプリメンテーションの特別な利点は、ALUステージ構成体0401,0402,0403が分岐の択一的経路として動作するだけでなく、命令レベルの並列性(ILP)で命令の並列処理を行うためにも使用することができ、1つのALUロウの幾つかのALUはオペランドを同時に処理し、これらはすべて、後続のロウのうち1つで使用され、かつ/またはレジスタに書き込まれることである。図6に、ALUユニットに対するプログラムポインタの制御回路の可能なインプリメンテーションが示されている。この実施形態の詳細を以下で説明する。
ロード‐記憶
本発明による技術の有利な実施形態では、0131は有利には「副次的ALU」と称されるのではなく副次的L/S(ロード/記憶)ユニットと称されるにもかかわらず、ロード/記憶プロセッサは副次的要素に組み込まれている。ここでは、たとえば0131を参照されたい。このようなユニットにより、メモリに並列および独立してアクセスすることが可能になる。とりわけ、異なるメモリおよび/またはメモリ部分および/またはメモリ階層構造にアクセスするように複数の副次的L/Sユニットを構成することができる。たとえば、内部のルックアップテーブルに高速アクセスし、かつ外部メモリアクセスを行うために、L/Sユニットを構成することができる。(複数の)L/Sユニットは副次的ユニットとしてインプリメントする必要はなく、当分野で公知であるようにプロセッサ内部に組み込むことが可能であることを明示的に述べておく。ルックアップテーブルに最適にアクセスするためには、有利には、次のような付加的なロード‐記憶コマンドを使用する(MCOPY)。すなわち、第1のサイクルにおいてロードアクセスでデータ語をメモリにロードし、第2のサイクルにおいてデータ語の記憶アクセスを使用して、メモリ内の別の位置に書き込むロード‐記憶コマンドを使用する。このようなコマンドはとりわけ、たとえばメモリがマルチポートインタフェースを有するプロセッサに接続されており、たとえばデュアルポートインタフェースまたは2ポートインタフェースを使用するプロセッサに接続されており、メモリに読み出しと書き込みとを同時に行うことができる場合に有利である。このことにより、MCOPY命令に続く次のサイクルで新たなロード命令を直接実行することができる。ロード命令は、MCOPYの記憶アクセス中に同じメモリに並列してアクセスする。
XMPプロセッサ
図5は、XMPプロセッサモジュールの全体的構成を示す。コアにはALUステージ構成体0130が設けられており、このALUステージ構成体0130は相互間で、必要な場合には、図4に示された有利な実施形態で開示されているように、データパス矢印0501によって示されたようにデータ交換することができる。これに並列して、副次的ALU0131およびロード/記憶ユニット0502が設けられている。ここでも、メモリおよび/またはルックアップテーブル0503に並列にアクセスするように複数のロード/記憶ユニットをインプリメントすることができる。データ処理ユニット0130および0131とロード/記憶ユニット0502にはレジスタ0109からバスシステム0140を介してデータ(および状態情報)がロードされる。結果はバスシステム0145を介して0109にライトバックされる。
これに並列して、オペコードフェッチャ0510が設けられており、並列動作して、次に続く各オペコードをロードする。有利には、複数の可能な後続のオペコードが並列でロードされる。このことにより、ターゲットオペコードをロードするための時間損失はなくなる。オペコードの並列ロードを簡略化するために、オペコードフェッチャは複数の符号メモリ0511に並列アクセスすることができる。
XPPプロセッサへの簡略的かつ高パフォーマンスな組み込み、および/または、複数のXMPおよび/または複数のXMPおよびXPPの結合を実現するためには、特定のレジスタP0520がインプリメントされる。このレジスタは、XPPとXMPとへの入出力ポート0521として機能する。このポートは、XPPまたは別のXMP上でインプリメントされるプロトコルに一致し、かつ/または、このようなプロトコルを翻訳する。とりわけ、PCT/EP03/09957(PACT34/PCTac)、PCT/DE0300489(PACT16/PCTD)、PCT/EP02/02403(PACT18/PCTE)、PCT/DE97/02949(PACT02/PCT)に記載されたようなRDY/ACKハンドシェイクプロトコルを参照されたい。
外部ソースからのデータ入力はRDYフラグによって、レジスタでVALIDフラグをセットするPに書き込まれる。このような相応のレジスタに読み出しアクセスを行うことにより、VALIDフラグはリセットされる。VALIDがセットされていない場合にはこの実行は、レジスタにデータが書き込まれVALIDがセット完了されるまで、レジスタ読み出しアクセス中は停止する。レジスタが空である場合(no VALID)、外部書き込みアクセスがACKハンドシェイクによって直ちに指示される。レジスタが有効データを有する場合、外部書き込みされたデータは受け入れられず、レジスタがXMPによって読み出し完了されるまでACKハンドシェイクは送信されない。出力されたレジスタの場合、新規のデータが書き込み完了されると常にVALIDおよびRDYがセットされる。外部からACKが受け取られることにより、RDYおよびVALIDはリセットされる。ACKがセットされていない場合、外部からのデータがレジスタから読み出されてVALIDがリセットされるまで、次のレジスタ書き込みアクセスの実行は停止される。レジスタがフルである場合(VALID)、RDYハンドシェイクが外部に伝送され、データが外部読み出し完了されてACKハンドシェイクによって指示完了されると直ちに該RDYハンドシェイクはリセットされる。RDYがセットされない限り、レジスタは外部から読み出すことができない。
上記ではレジスタに対して1つのステージのみを言及したが、多重的なレジスタステージを含むレジスタ、たとえばFIFOを含むレジスタをインプリメントすることができることも述べておく。使用可能なプロトコルのうち幾つかのプロトコルの説明に関しては、開示目的で、PCT/DE97/02949(PACT02/PCT)、PCT/DE03/00489(PACT16/PCTD)、PCT/EP02/02403(PACT18/PCTE)を引用する。
フェッチユニット
図6は、オペコードフェッチユニットのインプリメンテーションを示す。プログラムポインタ0601は、現在実行中のサイクルの相応のオペコードをポインティングする。1つのオペコード命令で、次のオペコードへ複数のジャンプを行うことができる。ジャンプは幾つかの種類に区別される。
a)CONTはプログラムポインタに関し、次に実行すべきオペコードをポインティングし、データ処理に並列してロードされる。CONTの処理は、ALUデータ処理に対して並列に行われるプログラムポインタの増分と、従来技術による従来のプロセッサの次のオペコードのロードとに相応する。したがって、CONTは実行のために付加的なサイクルを必要としない。
b)JMPはプログラムポインタに関し、ジャンプ先であり次に実行すべきオペコードをポインティングする。従来技術のJMPによれば、プログラムポインタは再計算され、次のサイクル(t+1)において新規のオペコードがロードされ、これはサイクル(t+2)で実行される。したがって、JMPの処理中に1つのデータ処理サイクルが損失される。
プログラムコードの線形処理中に、CONT命令は、パラメータ「one」が送信されることによって実行される。このことは、プログラムポインタの慣用のインプリメンテーションに相応する。付加的に、転送されるこのパラメータを「one」と異なるパラメータとし、このパラメータをプログラムポインタに足すことによって相対的なジャンプを行うこともできる。このジャンプは、パラメータの正負符号に依存して順方向または逆方向に行うことができる。ALUデータ処理中に、ジャンプは計算および実行される。複数のCONT分岐をインプリメントし、実行サイクルを緩和することなく複数のジャンプターゲットをサポートすることができる。2つのCONT分岐0602,0603が図示されており、一方のCONT分岐はたとえばパラメータ「one」を有し、すぐ後に続く命令をポインティングする。他方の第2のCONT分岐はたとえば−14とされ、メモリ位置14個分だけ戻る位置に記憶されたオペコードにジャンプする機能を有する。
複数のCONTパラメータ、たとえば2つのCONTパラメータを(カウント0604,0605によって得られるような)プログラムポインタと組み合わせて、次の可能なオペコードを複数の符号メモリから、たとえば2つの符号メモリ0606,0607から読み出すことができる。ALUデータ処理の最後に、実際に実行すべきオペコード0613が状態信号に応答して選択される。すなわち、ジャンプターゲットは処理の終了時に「仮想」パスを使用して選択される。すべての可能なオペコードは事前にすでにロードされている事実に起因して、データ処理はすぐ次のサイクルで続行することができる。
幾つかのオペコードを並列ロードするために符号メモリへのメモリアクセスを並列して実行しなければならず、かつ/または多重的および/またはマルチポート形式のメモリを使用しなければならない事実を鑑みれば、CONTの実行は比較的高コストである。
それとは対照的に、JMPは従来技術に相応する。JMPの場合、相対的なパラメータ0608,0609がプログラムポインタと組み合わされ、プログラムポインタはマルチプレクサ0612を使用する。次のクロックサイクル(cycle + 1)において、符号メモリ0607,0608はプログラムポインタを介してアドレス指定される。次のオペコードへのジャンプが実行されて応答し、次のオペコードは次のサイクル(cycle +2)で実行される。したがって、1つの処理サイクルが損失されるにもかかわらず、付加的なコストは必要ない。
コスト効率とパフォーマンスとの組み合わせを最適化するためには、XMPは両手法をインプリメントする。1つの複雑なオペコードでは、CONTを使用する付加的な遅延サイクル無しで、後続の演算のセットに直接ジャンプすることができる。複雑なオペコード内で付加的なジャンプを使用する場合、JMPを使用することができる。
さらに、CALLを実行する特定の手法が存在する。基本的にCALLは、従来技術に相応して、外部スタックを使用してインプリメントすることができる。この外部スタックは、図6には示されていない。しかしここでは、最小戻りアドレススタックをフェッチユニットにインプリメントする任意および/または付加的な手法が示されている。このスタックはレジスタのセット0620から構成されており、このレジスタのセット0620には、プログラムポインタが次にポインティングするアドレスが書き込まれる0623。1つの実施形態では、スタックポインタはアップダウンカウンタ0621としてインプリメントされ、スタックの現在の書き込み位置をポインティングし、値(pointer + 1)0622は現在の読み出し位置をポインティングする。デマルチプレクサ0625,0623を使用して、スタックからの読み出しのためにマルチプレクサ0624を使用するレジスタ0620に次のプログラムポインタアドレスが書き込まれる。小さいレジスタスタックを使用して、メモリスタックアクセスを必要とせずに、レジスタ0620の数によって決定された複数のCALL‐RETジャンプを実行することができる。このようにして、小さいプロセッサにおいてスタックのインプリメントを行う必要はなく、それと同時に、通常のスタックアクセスより高パフォーマンス‐高効率のアクセスが実現される。
通常はスタックレジスタを、目標であるターゲットアプリケーションによって保存する必要はなく、また、このようなターゲットアプリケーションのために保存する必要はない。たとえばCABACを参照されたい。しかしそうしなければならない場合には、特定の数のレジスタを2重化してジャンプ後に切り換え、かつ/またはオプションとしてスタックをインプリメントすることができる。これは有利には、絶対に必要であり、かつそれに付随する内在的なパフォーマンス損失が受け入れられる場合にのみ使用される。
一例として挙げられたインプリメンテーションでは、2つのCONTおよび2つのJMPが設けられる。しかしその数はインプリメンテーションにのみ依存し、0〜nの間で任意に変更することができ、とりわけCONTとJMPとで異なることができることを明示的に述べておく。
図7は、複数のXMPの相互接続と、XPPとの結合とを示す。
図7aでは、複数のXMP(0701)がPレジスタおよびポート0521を介して相互に接続されている。有利には、実行時に構築可能なバスシステム、たとえばXPPで使用されるバスシステム等が使用される。このことによりPのすべてのレジスタが、有利である場合にはバスシステムを介して独立的に接続される。この点ではレジスタPは、たとえばPCT/DE97/02949(PACT02/PCT)、PCT/DE98/00456(PACT07/PCT)、PCT/DE03/00489(PACT16/PCTD)、PCT/EP01/11593(PACT22aII/PCTE)およびPCT/EP03/09957(PACT34/PCTac)に記載されたようなXPP技術の複数の入出力レジスタから成る構成体に相応する。
図7bおよび図7cは、XMP0701とXPPプロセッサとの可能な結合を示している。ここではXMPおよびXPPプロセッサは、ALU‐PAE0702のアレイと、複数のRAM‐PAE0703とを有するのが図示されており、これは構築可能なバスシステム0704を介して相互に接続されている。図7aに示されているように、ここに開示されたXMPは、1つの実施形態ではバスシステム0704を介して接続されている。
基本的にXMPプロセッサは、ALU‐PAE、SEQ‐PAEと全く同じように、および/またはSEQ‐PAEの代わりにXPPのアレイに組み込むことができ、とりわけ、PCT/EP03/09957(PACT34/PCTac)に記載のXPPに組み込むことができ、また、別の何らかのPAEを組み込む手法で組み込むこともできる。
プログラミング例
後続の符号例は、以下のパラメータを有するXMPプロセッサに対して設けられる:
・レジスタセットP
・レジスタセットP:16個のレジスタ
・4つのALUステージ(0404,0405,0406,0407)
・2つの並列ALUパス(0401および0402)
・1つの副次的ALU:乗算器
・1つのロード‐記憶ユニット
・2つの並列符号RAM
・演算ごとに2つのCONTジャンプ
(たとえばHPCおよびLPC。添付書類を参照されたい)
・演算ごとに2つのJMPジャンプ
最良な公知技術によるビデオコーデックは、エントロピー符号化にCABACアルゴリズムを使用する。CABAC内で最も重要なルーティンを以下で、3アドレスアセンブラコードとして示す:
LOAD state, *stateptr ; RangeLPS = ...
SHR range2, range, #14
AND range2, range2, #3
SHL state2, state, #2
OR adr1, state2, range2
ADD adr1, adr1, Ipsrangeptr
LOAD rangelps, *adr1
SUB range, range, rangelps ; range -= ...
AND bit, state, #1 ; bit = (*state) & 1
CMP low, range ; if (low < range)
JMP GE L1 ; jump if previous condition met
ADD state3, mpsstateptr, state ; *state = mps_state[*state]
LOAD state4, *state3
STORE stateptr, state4
JMP L2
L1: XOR bit2,bit,#1
SUB low, low, range
MOV range, rangelps
ADD state3, Ipsstateptr, state ; *state = lps_state[*state]
LOAD state4, *state3
STORE stateptr, state4
L2: CMP range, 0x10000 ; renorm_cabac_decoder function
JMP GE L3 ; while-loop exit condition
SHL range, range, #2
SHL low, low, #2
SUB bitsleft, bitsleft, #1 ; --bits_left
JMP NZ L2 ; jump if not zero
CMP bytestreamptr, bytestreamendptr
JMP GE L4
LOAD byte, *bytestreamptr
ADD low, low, byte ; low += *bytestream
L4: ADD bytestreamptr, bytestreamptr, #1
MOV bitsleft, #8
JMP L2
L3:
このルーティンは、34個のアセンブラオペコードと、それに相応して少なくとも同数の処理サイクルとを有する。さらに付加的に、ジャンプは通常2つのサイクルを使用し、付加的なサイクルが必要となるパイプライン停止を引き起こす可能性があることを考慮しなければならない。
次に、ルーティンは再符号化されることにより、XMPプロセッサを使用して実行できるようにされる。このXMPプロセッサは、有利な実施形態では4つのALUステージを有し、ALUステージ間にパイプラインを有さない。さらに、2つの並列するALUステージ部分がインプリメントされ、第2の部分は、明示的なジャンプオペコードを必要とせず、またはパイプライン停止のリスクを負わずに、オペコード暗示ジャンプを実行するようにインプリメントされる。ALUパス内、すなわち共通して両ALUストリップパス内では、暗示的条件付きジャンプを実行することができる。オペコードの処理中、可能な2つの次のオペコードが並列してロードされ、実行終了時には、付加的なサイクルを必要とせずに、ジャンプ先のオペコードが選択される。さらに、この有利な実施形態のプロセッサは、ALUステージパスに対して並列しており該ALUステージパスに対して並列実行するロード/記憶ユニットを有する。
図8に、異なる要素の構成が示されている。0801はメインALUステージパスを示しており、0802は分岐の場合に実行されるALUステージパスを示す。0803はロード/記憶ユニットの処理を含んでおり、1つのロード/記憶演算が4つのALUステージ演算に対して(すなわち、1つのALUステージサイクル中に)実行される。
ここで示された枠(0810,0811,0812,0813,0814,0815,0816,0817,0818)に相応して、4つのALUステージ命令がクロックサイクルごとに1つのオペコードを構成する。オペコードは両ALUステージ(4つの命令+それぞれのジャンプターゲット)とロード/記憶命令とを有する。
0811では、0801および0802において最初の命令が並列して実行され、その結果は次にデータパス0801で処理される。
0814では0801または0802のいずれかが実行される。
0816では、CONT NZ L2を使用してSUBの次に実行停止が行われるか、またはCMPを使用して実行が続行される。CMPの結果に依存して、実行はCONT GE L4またはCONT LT L4/を使用して続行される。この例では、オペコード内の3つのCONTが見られるが、このことはこの例の実施形態では許容されないことに留意されたい。ここでは、CONTはJMPに置換しなければならない。
MCOPY0815はメモリ位置 *state3 を *stateprt にコピーし、実行サイクル0815中に state3 からデータを読み出す。0816ではデータが *stateptr に書き込まれ、それと同時に、0816においてLOADを使用してメモリへの読み出しアクセスがすでに実行される。
ルーティンへジャンプするためには、呼び出し側(呼び出しルーティン)がLOAD0804を実行する。したがってルーティンへのジャンプ時には、呼び出しルーティンは、次の最初のサイクルでMCOPYによって書き込むためにメモリへのアクセスを担当する必要がない。
CONT命令は、次に実行すべきオペコードのアドレスをポインティングする。有利には、これはアセンブラによって翻訳される。このことにより、これは明示的な命令として現れるのではなく、単に、プログラムポインタのオフセットに対して相対的なジャンプターゲットを足すだけにされる。
相応のアセンブラプログラムは、以下に挙げられたようにプログラミングすることができる:オペコードの記述には3つの{ }括弧が使用され、第1の括弧は4つの命令とメインALUステージパスの相対的なプログラムポインタターゲットとを囲んでおり、第2の括弧は相応の分岐ALUステージパスを囲んでおり、第3の括弧はロード/記憶ユニットに対するオペコードを決定する。
アセンブラコード構成:
L: {
main-ALU-stages instructions (4)
jump to next OpCode
}
L/: {
branching-ALU-stages instructions (4)
jump to next OpCode
}
{
load-store instruction (1)
}
4つのALUステージ命令の実行中に1つのロード‐記憶命令だけが実行される。これは、レイテンシーとプロセッサコアの外部アクセスとに起因して、より長い実行時間が必要とされるからである。メインALUステージブロックおよび分岐ALUステージブロックの各括弧ごとに、従来技術で公知であるようにジャンプターゲットを指定してラベルを定義することができる。たとえば、ここに示されているような L: および L/: は、逆のジャンプターゲットに対して使用される。
実行すべき次のオペコードが、プログラミングポインタ+1(PP++)によってアドレス指定すべきオペコードである限りは、次の命令(CONT)へジャンプする必要はない。
さらに、NOPを「埋める」必要もない。
{
SHR range2, range, #14
AND range2, range2, #3
}{
}{
LOAD state, *stateptr
}
{
SHL state2, state, #2
OR adr1, state2, range2
ADD adr1, adr1, Ipsrangeptr
}{
}{
}
{
}{
}{
LOAD rangelps, *adr1
}{
SUB range, range, rangelps
AND bit, state, #1
CMP low, range
CONT GE L1
}{
CONT LT L1/
}{
}
L1/: {
ADD state3, mpsstateptr, state
CONT next
L1: }{
XOR bit2, bit, #1
SUB low, low, range
MOV range, rangelps
ADD state3, Ipsstateptr, state
}{
}
L2: {
CMP range,0x10000
CONT GE Next
L2/: }{
CONT L3(C)
}{
MCOPY *stateptr, *state3
}
{
SHL range, range, #2
SHL low, low, #2
SUB bitsleft, bitsleft, #1
CONT Z next
}{
CONT NZ L2
}{
; RESERVED (MCOPY)
}
{
CMP bytestreamptr, bytestreamendptr
CONT GE L4
}{
CONT LT L4/
}{
LOAD byte, *bytestreamptr
}
L4/: {
ADD low, low, byte
ADD bytestreamptr, bytestreamptr, #1
MOV bitsleft, #8
CONT L2
}{
ADD bytestreamptr, bytestreamptr, #1
MOV bitsleft, #8
CONT L2
}{
}
L3:
最適なインプリメンテーション
図9は、本発明によるデータパスの構成の詳細を示す。ここでは、上記で言及したが簡略化のために図1〜4で示されなかった多くの詳細が含まれている。2つのALUストリップパスに並列して、2つの特別なユニット0101xyz,0103xyzが各ストリップごとにインプリメントされており、ALUパス0101..4bの代わりに演算する。これらの特別なユニットは、より複雑かつ/またはより長い実行時間を必要とする演算、すなわち、2つのALUステージの実行時間中に実行される演算を含むことができ、本発明において異なるインプリメントを行うべき場合かつ/または行いたい場合には、それより多くのALUステージの実行時間中に実行される演算を含むことができる。図9の実施形態では、たとえば1つのサイクルでカウントリーディングゼロ(count-leading-zero)DSP命令を実行するために特別なユニットが適合されている。特別なユニットには、たとえばRAM、ROMおよびLUT等のメモリと、FPGA回路および/または周辺機能の任意の種類、および/またはアクセラレータASIC機能が含まれる。副次的ユニットまたはALU‐PAEまたはALUチェーンの一部として使用できる別のユニットが、添付書類2に開示されている。
さらに付加的なマルチプレクサステージ0910が、複数のレジスタ0109から、クロックサイクルごとに後続のデータ処理で使用すべきレジスタを選択し、これを0140に接続する。このことによりレジスタ0109の数は、バス0140を拡張することなく、またマルチプレクサ0110,0105...0107の複雑性およびレイテンシーを上昇させることなく、格段に増大することができる。状態レジスタ0920および制御パス0414,0412,0413も図示されている。制御ユニット0921は、入力された状態信号を検査する。この制御ユニット0921は、演算に応答して有効なデータパスを選択し、ALUパスにおける状態にしたがって符号フェッチャ(CONT)およびジャンプ(JMP)を制御する。
このようなユニットのインプリメントにより、データバスの信号遅延および電力散逸の観点から見ると、マルチプレクサ0110の後に単一のドライバステージを使用する代わりに、またはドライバのツリー構造をインプリメントする代わりに、ドライバステージのチェーンを使用し、有利にはALUに対して並列に該チェーンを構築することにより、レジスタからの信号が増幅されるように構成するのが有利であることが実証されている。ALUに対して並列にドライバをインプリメントすることにより、より小型かつより高エネルギー効率のドライバを使用することができる(0931,0932,0933,0934)。このようなドライバの大きな遅延は許容範囲内である。というのも、非常にエネルギー効率が高いために非常に低速の構成のドライバでさえ、バッファされた信号は、ドライバに対して並列のALUを介して下流のALUへ信号が転送されるよりも高速に、下流のALUへ転送されるからである。ドライバは、データレジスタ0109の信号および各先行のALUステージの信号の双方を増幅する。これらのドライバは重要とは見なされず単なるオプションであることを理解すべきである。
このようなユニットのインプリメントでは、マルチプレクサステージ0105,0106,0107にオプションとして設けられたレジスタは使用されず、すべての信号がALUパスの全ゲートを非同期で通過する場合、別の問題が生じる。したがって、論理ゲートを連続的に導通切り換えすることにより、情報を全く有さない有意な量の信号エラーおよびハザードが引き起こされる。このことにより有意な量の不所望のノイズが生成され、また、ゲートを再チャージするために大量のエネルギーが必要になる。この作用は、クロックユニットによって制御され遅延チェーン0941,0943,0944に送られる処理の開始時に信号0940を生成することによって抑圧することができる。遅延要素0941...0944は、各ALUステージの最大遅延時間で信号を遅延するように構成されている。各遅延ステージの後、これによって遅延された信号は、相応のマルチプレクサユニット0105〜0107のステージに伝搬され、ここでENABLE信号として機能し、入力データの伝搬をイネーブルする。ENABLEがセットされていない場合、マルチプレクサはパッシブであり、入力された信号を伝搬しない。ENABLE信号がセットされている場合のみ、入力された信号は伝搬される。これは、信号エラーおよびハザードを十分に抑圧する。というのもマルチプレクサステージは、このコンテクストではレジスタステージ機能を有すると見なされるからである。このようなハザード/信号エラー低減は重要とされず、単なるオプションであることを理解すべきである。
エネルギー消費が重要である場合、マルチプレクサステージの出力側にラッチを設け、このラッチは、データ移行をイネーブルするENABLE信号によって透過状態にセットされ、ENABLEがセットされない場合には先行の内容を保持することに留意されたい。このことは、下流のゲートの(再)チャージ動作を有意に低減する。
ジャンプ演算およびコンフィギュラブルALUパスの最適化
回路および/または回路システムおよび/またはこれらとともに構成されたI/Oのクロック周波数が比較的低いことにより、多重符号メモリを1つに低減できる別の最適化を実現することができる。ここでは、複数の符号メモリアクセスが1つのALUステージサイクル内で実行され、ここでは、ここに記載された異なるプログラムポインタへの複数の命令フェッチアクセスが連続的に実行される。ALUステージクロックサイクル内でn個の命令フェッチアクセスを実行するためには、符号メモリインタフェースをALUステージクロック周波数のn倍で動作させる。
ALUパスが完全にプログラマブルである場合、非常に大きな命令語をロードしなければならないという欠点が存在することを考慮しなければならない。それと同時に、上記のように、ジャンプおよび分岐を高速で、かつクロックサイクルの損失なしで実行するのが有利である。このことにより、ハードウェアの複雑性がより高くなることにもなる。
ジャンプの頻度は、チップ/プロセッサ全体の構成において同様に組み込まれたALUユニット0130および0131に並列して新規のコンフィギュラブルALUユニット0132をインプリメントすることにより、低減することができる。このようなユニットは一般的には、0130のALUステージと可能な限り同じであるALUステージを有する。しかし、新規のALUユニット0132におけるALUステージの関数および相互接続は、サイクルごとにロードされた命令によって決定されるのではなく構築されるという基本的な相違点が存在する。すなわち、関数および/または接続/相互接続は1つまたは複数の命令語によって決定することができ、1つまたは複数の新規の命令語がコンフィギュレーションを変更するまで、複数のクロックサイクルにわたって同じに維持される。1つまたは複数のALUステージパスは0132においてインプリメントすることによって複数のコンフィギュラブルパスが形成されることに留意すべきである。また、1つのストリップ内で、命令ロードされたALUもコンフィギュラブルエレメントも双方使用することも可能である。
特定のジャンプ命令を有するジャンプ、またはたとえば除外アドレスによって表されるジャンプを使用する際には、プログラム実行を0132内のALUステージのうち1つ(または複数)のALUステージへ転送し、該1つ(または複数)のALUステージはアクティブ化されてレジスタファイルからデータをロードし、データを処理してライトバックする。ここでは、レジスタソースおよびターゲットは事前構築されている。
ここでは、使用頻度が高いコアルーティンおよび/またはジャンプ先であるサブルーティンを1つまたは複数の事前構築および/またはコンフィギュラブルのALUステージに高速に構築することが可能である。たとえばCABACアルゴリズムのコアは、事前構築されたALUステージのうち1つまたは複数のALUステージに構築し、クロックサイクルの損失なしで該コアにジャンプすることができる。このような場合、事前構築されたアルゴリズムを呼び出すための呼び出しコマンドまたはジャンプコマンド以外の、CABAC命令をロードするための演算は必要ない。それによって処理が加速化されると同時に、コマンドのロードが低減されることによる電力消費が低減される。
コンフィギュラブルALUステージをインプリメントするためには、このコンフィギュラブルALUステージを乗算し、かつ/または、コンフィギュレーションレジスタを単に乗算した後、該コンフィギュレーションレジスタのうち1つをアクティブ化の前に選択する。
構築可能なALUステージにおいてたとえば波形再構築等のデータ処理手法をインプリメントする手段に留意されたい(たとえばPCT/DE99/00504=PACT10b/PCT、PCT/DE99/00505=PACT10c/PCT、PCT/DE00/01869=PACT13/PCTを参照されたい)。
複数のコンフィギュラブルALUステージをインプリメントすることが特に高エネルギー効率であることが実証されていることを述べておく。さらに、(高速ジャンプを可能にするために)複数のオペコードを1つの実行サイクル中に並行ロードする必要はないので、相応のメモリインタフェースおよび符号メモリは格段に小型に構成することができ、このことによって、付加的にコンフィギュラブルALUステージを使用する代わりに面積全体を低減することができる。
CABACディスパッチャ例
ディスパッチャのインプリメントをより良好に理解できるようにするため、ディスパッチャのアセンブラコードを以下に挙げる:
init: MOV range, #0x1fe
IBIT offset, #9
entry: MOV cmd, p0
CMP cmd, 0x8000
CONT GE dispatch
CMP cmd, 276
CONT EQ terminate
decode:
dispatch: CMP cmd, 0x8001
CONT EQ init
第1のXMPインプリメンテーションを以下で説明する。JMP命令は、従来技術のプロセッサで公知であるように、新規のオペコードをフェッチするために1つの付加的なクロックサイクルを必要とする明示的なジャンプ命令である。JMP命令は有利には、パフォーマンスが比較的重要でないディスパッチャの分岐でジャンプが実行される分岐で使用される。
init: {
MOV range, #01x1fe
IBIT offset, #9
}{
}{
}
entry: {
MOV cmd, p0
CMP cmd, 0x8000
CONT GE dispatch
CMP cmd, 276
JMP EQ terminate
CONT decode
}{
}{
}
dispatch: {
CMP cmd, 0x8001
CONT EQ init
CONT bypass
}{
}{
}
このルーティンは、XMPの条件付きパイプ機能を使用することによって最適化することができる。
init: {
MOV range, #01x1fe
IBIT offset, #9
}{
}{
}
entry: {
MOV cmd, p0
CMP cmd, 0x8000
CMP LT cmd, 276 ; Conditional-Pipe
JMP EQ terminate
CONT decode
}{
NOP
NOP
CMP cmd, 0x800 ; Conditional-Pipe
JMP EQ init
CONT bypass
}{
}
本発明の装置を使用および動作させるための手法は、数多く存在する。
図10には、2倍精度の演算を実現するための構成が開示されている。この図では、1つのALUステージでの結果に由来する桁上げ信号が、反対側の次のロウのALUステージへ転送される。このことにより、比較的上位のALUは比較的下位のワード結果と、該結果の桁上げとの双方を計算し、比較的下位のALUステージは桁上げ情報を考慮して最上位のワードMSWを計算する。たとえば、一方の側の比較的上位のステージALUではADDが計算され、反対側の半分のALUステージのうち次のALUステージではADDC(add-carry)が実施される。図10に示されているように、典型的な実施形態では複数の2倍精度の演算を実行できることに留意されたい。たとえば、1つの実施形態において2つの16ビットALUのステージが4つ設けられている場合、図10に示された構成および接続を使用して、3つの32ビット2倍精度演算を同時に実行することができる。残り2つのALUは別の演算に使用するか、または無演算を実行することができる。
図11に、異なる符号命令を使用する択一的なインプリメンテーションが示されている。ここでは、比較的上位のALUステージは最下位ワードを計算し、その下位のALUステージは最上位ワードを計算する。ここでももちろん、桁上げ信号情報が考慮される。
また、2倍精度を実現するための前記思想を、2つより多くのカラムを有する構成にまで拡張できることに留意されたい。このコンテクストにおいて、通常の知識を有する者であれば、本発明の装置において2つのカラムを使用するのが有利であるが、この数に決して限定されないことは明示的に理解できる。さらに、2つより多くのロウおよび/またはカラムが設けられている場合には、本発明の原理を使用して3倍の精度またはn倍の精度を実行することも実現可能である。また典型的な実施形態では、桁上げ情報を後続のALUステージに使用できることにも留意されたい。したがって、本発明のALU構成を変更する必要はない。
図11の実施形態は、各ALUのフラグユニット間にいかなる付加的なハードウェア接続も必要としない。しかし図10の実施形態では、CARRYを転送するために付加的な接続線路が設けられる。
またこのようなデータ処理手法は、本発明の開示内容に見られる原理による状態伝搬に適合されたVLIW状構造において非常に有利であり、かつ推奨されることも述べておく。オペランド処理結果および/または条件評価に関する状態情報を1つのALUから別のALUへ転送すること、たとえば同一のクロックサイクルおよび/または同一のロウで独立して演算できる1つのALUへ転送することは、VLIWプロセッサを増強するのに有利であることに留意されたい。したがってこのこと自体、発明と見なされる。
CARRY情報を1つのステージから、同一のカラムまたは隣接するカラムのいずれかに存在する次のステージに転送することは、タイミングに関してクリティカルとはならない。というのも、CARRY情報は次のステージのALUに、該ALUに入力されるオペランドデータとほぼ同時点で到着するからである。したがって、CARRY信号等である状態情報を次のステージへ転送することと、同一のステージで隣接するALUの動作状態に関する情報を交換することとを組み合わせることは、タイミングに関していずれの場合にもクリティカルにはならず、有利な実施形態では許容される。とりわけ特に有利な実施形態では、所与のセルの動作状態に関する情報は同一のステージでは評価されないが次のステージでは評価される。このことにより、カラム間で状態情報を伝搬することは、該当する1つのステージでは行われず、かつ/または、行われるがそれだけではなく、下流の隣接する少なくとも1つの該当のカラムにも行われる。(このような実施形態の最大ピークパフォーマンスに関する効果は、当業者であれば明白である。)
有利な実施形態では構成を合成することにより、90nmシリコンプロセスでインプリメントされ約450MHzで動作できることが実証されていることを述べておく。このようなパフォーマンスを実現するためには、幾つかの基準を満たさなければならず、たとえば図1の0111のようなマルチプレクサを空間的および/またはたとえばオペコードフェッチャに関して分布しなければならない。図14にこの有利な高パフォーマンスの実施形態が示されており、当業者であればこの実施形態の動作は理解できる。
このこととは無関係でありこのことに関する分割出願で請求できる対象と見なすことが可能である本発明および/または本発明に関する発明の完全な開示内容を、本発明を理解しやすくするために挙げたが、本願の開示内容の一部でもある添付書類に、本発明の1つの特別な実施形態の詳細が記載されている。この添付書類は、決して本発明の範囲を限定するためのものではないことに留意されたい。添付書類では必要事項が言及されており、かつ/または、択一的特徴は記載されていない。このことは単に、添付書類に開示されたある特定の実施形態に、通常の知識を有する者を混乱させずに開示できる別のインプリメンテーションが存在しないと見なされるということのみに拠ることは、容易に理解できる。すなわち、数多くの択一的構成および/または付加的特徴が存在し、有利でありかつ/または存在すると言及されていないかまたは記載されていない実体でもインプリメントすることが可能であり、このような記載はいかなるものも、文言上の記載であるか、または添付書類から解釈によって導き出せる記載であることは明らかである。
しかし、以下の記載は添付書類に基づいて記載されている。
添付書類では、XPPとFNC‐PAEとの相互接続が引用される。ここでも一般的には、FNCの相互接続および/または接続に任意のプロトコルを使用できること、すなわち、本発明のXMP発明の構成の有利な実施形態に任意のプロトコルを使用できることを述べておく。しかし当業者であれば、いずれかのデータフロープロトコルが特に有利であり、とりわけRDY/ACK、RDY/ABLE、CREDITプロトコル、および/またはデータおよび状態および/または制御情報および/またはグループ情報をインターメッシュするプロトコル等のプロトコルを使用できることは理解できる。
さらに、添付書類に記載されたアーキテクチャ概観に関しては、本発明の全般的な原理またはその一部を使用してVLIWプロセッサを変更することにより、パフォーマンスを上昇できることが記載されている。
添付書類のパラグラフ2.6には、本発明の構成のオペコード構造が示されており、この構成は添付書類では「FNC‐PAE」および/または「XMP」として指定されているが、このパラグラフに関しては、上記で言及されたCONTコマンドは添付書類では、より理解しやすくなるようにHPCおよびLPCとして指定されている。
添付書類のパラグラフ2.8.2.1に関しては、リンクレジスタを使用することがそれ自体で有利であり、本発明のマルチロウおよび/またはマルチカラム形式のALU構成体もともに使用することが特に有利ではあるものの、これらをともに使用することだけが有利であるわけではない。次のようなプログラム構造、すなわち、まずリンクレジスタが呼び出され側のアドレスにセットされた後に、その後の命令でプログラムポインタが、リンクレジスタに予め記憶された値にセットされると同時に、リンクレジスタに呼び出されたサブルーティンの戻りアドレスが書き込まれるプログラム構造を使用することによって。その後、サブルーティンから戻るためにプログラムポインタをリンクレジスタの値に再びセットすることにより、サブルーティンのペナルティフリーの呼び出し‐戻りインプリメンテーションを実現することができる。このことは、すべての所与のプロセッサアーキテクチャに当てはまり、それ自体で発明と見なされる。
さらにサブルーティンから戻る場合には、該サブルーティンの開始アドレスをポインティングするようにリンクレジスタをセットすることもできる。このことにより呼び出し側は、サブルーティンを1つのサイクルだけで再び呼び出すことができる。たとえば、サイクル(t)でサブルーティンの最後のオペコードが実行された場合、サイクル(t+1)で呼び出し側は終了条件をチェックし、リンクレジスタが該呼び出し側自体をポインティングし戻すようにセットし、該リンクレジスタの現在の内容にジャンプする。これらはすべて、1つのオペコードひいては1つのサイクルで実行される。サイクル(t+2)でサブルーティンの第1のオペコードが実行される。
ここで開示されている(付加的な)発明によるリンクレジスタを使用することにより、ネスティングされた呼び出しも、別のサブルーティンの呼び出し前に別の演算が実行されている間にバックグラウンドでリンクレジスタ内容をスタックにプッシュして、サブルーティンから呼び出された(必要な場合にはネスティングされた)(サブ)サブルーティンから戻った後にリンクレジスタ情報をスタックからポップすることによって、付加的な遅延無しで実現することができることも留意されたい。図12に、その一例が示されている。
「opposite path active(反対側パスがアクティブ)」条件と「opposite path inactive(反対側パスが非アクティブ)」(OPI/OPA)条件の使用を開示するこの例に関しては、以下の点に留意すべきである。
まず、パラグラフ3.6.2の図7に示された実施形態ではOPI条件/OPA条件は、反対側のパスにあり少なくとも1つのステージだけ下流に位置するALUステージへ伝搬される。このことにより、タイミング問題が生じないことが保証される。しかし通常の知識を有する者であれば、電力消費に関して有利である回路に適切な構成および/または十分に低いクロック周波数を使用することにより、OPI/OPA情報および/または別の状態情報を同一のステージ内で1つのカラム(S)から別のカラムへ伝搬し、有利には隣接するパス(ストリップ)へ伝搬することが可能であることを理解できる。
さらに、とりわけOPI/OPA条件に関して、またALU間での状態情報の交換に関しては、図13を参照する。ここでは、4つのカラムに配置されたALUの4つのロウが、状態レジスタと、ALUフラグ等の状態情報を転送するための接続部とともに示されている。図13では、より見やすくするため、またより理解しやすくするため、データ(オペランド)交換のためのパスは示されていない。ここで明らかであるように、図13に示された実施形態では、状態情報は状態レジスタからALUユニットの第1のロウへ転送され、各ALUユニットは各カラムに対するレジスタから状態情報を受け取る。ここに図示された実施形態では、ロウ間で状態情報が伝搬される。したがってALU状態情報に関しては、同一のカラム内で隣接する下流のALUへパスが存在する。それゆえ、OPI/OPA接続線路によって示されているように、状態情報は1つのロウ内でも交換される。図中の実施形態では、すぐ隣同士のみが相互に接続される。しかし、このことを適用する必要はなく、このような接続を回路の複雑性の関数とすることが可能であることは理解できる。ここでは、1つのロウにおいてALU間の矢印はOPI/OPA情報を指しているが、これは、反対側(隣接する)カラムがアクティブ状態(OPA)または非アクティブ状態(OPI)であるかに関する情報であり、たとえばあふれフラグおよび条件評価フラグ等の別の情報をカラム間で転送することは容易に実現することができる。
また最後のロウでは、状態情報は適切な接続部を介して状態レジスタの入力側に転送されることも述べておく。
このような構成は、ALU間で状態情報を以下のように転送することができる。
ロウ間においてALUフラグを転送する。これはたとえば、あふれフラグ、繰り上げフラグ、ゼロフラグおよび別の典型的なプロセッサフラグである。さらに、先行の(上流側の)1つまたは複数のALUステージがアクティブ状態であったかを示す情報が伝搬される。この場合には所与のALUステージは、同一のカラム内の上流側のALUステージがちょうどそのクロックサイクルでアクティブ状態であったか否かに依存して、演算を実行する。最上位のALUロウ(ステージ)は状態レジスタから、直前のクロックサイクルで得られた最下位のALUステージの出力を受け取る。ここでの本発明の特別な利点は、異なるカラムが、完全に独立したALUパイプライン(またはALUチェーン)を定義するだけでなく、状態情報を相互間で転送できることにより、分岐および条件等の評価が可能になる。このことは、上記および下記にも記載されている。さらに、1つまたは2つまたはそれ以上の数のALUが下流の1つの同じロウまたは複数の同じロウに存在する場合には、隣接するカラムに状態情報を転送することもできる。また、このような情報を受け取るALUにおいて条件付き実行をインプリメントすることも可能である。添付書類の表29に、幾つかのテスト条件が挙げられている。これらは本発明を限定するものではない。それによればこのような条件例には、「zero-flag set(ゼロフラグはセットされている)」、「zero-flag not set(ゼロフラグはセットされていない)」、「carry-flag set(繰り越しフラグはセットされている)」、「carry-flag not set(繰り越しフラグはセットされていない)」、「overflow-flag set(あふれフラグはセットされている)」、「overflow-flag not set(あふれフラグはセットされていない)」、これらのフラグから派生した条件として、「opposite ALU-column is active(反対側のALUフラグがアクティブ状態である)」、「opposite ALU-column is inactive(反対側のALUフラグが非アクティブ状態である)」、「if last condition (in one of the previous cycles) enabled left column (status register flag)((先行のサイクルのうち1つのサイクルにおいて)直前の条件が左側のカラムをイネーブルした場合(状態レジスタフラグ))」、「if last condition (in one of the previous cycles) enabled right column (status register flag)((先行のサイクルのうち1つのサイクルにおいて)直前の条件が右側のカラムをイネーブルした場合(状態レジスタフラグ))」、「activate ALU-column if deactivated(ALUカラムが非アクティブ化されている場合には該ALUカラムをアクティブ化せよ)」が含まれる。図13にはカラム間に水平方向の接続のみが設けられているが、別のインプリメンテーションでは択一的および/または付加的に、カラム間の非水平方向の接続および/またはすぐ隣接しないカラム間の水平方向および/または非水平方向の接続を設けることも選択できることが理解できる。
異なるカラム間のこのような情報の伝搬は、効率的かつ高パフォーマンスのプログラムをプログラミングするのに、以下のように役立つ:
まず、すべてのALUが1つの命令を実行すべきであること、すなわちすべてのカラムがイネーブルされることを仮定する。このような場合、状態情報が交換されないことにより、1つのカラム内のALUが同一のカラムまたは隣接するカラムにおいて満たされた条件に応答してデータをもはや処理しない限りは、ALUは単にチェーン接続されているだけである。しかし、何らかの条件が真でない場合、この条件が与えられたカラムの下流のALUは非アクティブ化される。ここで、1つのプログラム部分が2つの異なる分岐に分岐する必要があると仮定する。1つの分岐は左側のカラムで処理され、他方の分岐は右側のカラムで処理される。もちろん、最後に実行しなければならない分岐は1つだけである。どちらの分岐がアクティブ状態になるかは、処理中に決定される条件に依存する。この条件に関する情報が転送されることにより、条件が満たされる分岐のみを評価することが可能になり、かつ有利には、他方の分岐に与えられた条件が満たされなかったために関与しない該他方の分岐における演算が、相応のカラムによってディスエーブルされることによって実行されないことを実現することができる。したがって、このような条件に関する情報を使用して、隣接するカラムおよび/または同一のカラムのALUをアクティブ化または非アクティブ化することができる。非アクティブ化は、たとえば「反対側のパスは非アクティブ状態」条件または「反対側のパスはアクティブ状態」条件を使用し、カラム間で転送される相応の信号を使用して行うことができる。カラムのディスエーブルは、該カラムから出力されたデータすべての伝搬を単にイネーブルしないことだけでインプリメントすることができることを述べておく。動作不能状態のALUからデータ出力は実効的に行われないが、動作不能状態のALUおよび/またはカラムからの状態情報は伝搬されることは容易に理解できる。
ここで、隣接するカラムのALUがディスエーブルされることにより、同じ隣接するカラムにあり該ALUより下流にあるALUもすべてディスエーブルされるケースを考察する。このことは、第1のステップでディスエーブル情報を隣接するカラムの第1のALUへ転送した後、該ディスエーブル情報を同カラム内で下流のALUへ伝搬することによって行われる。最終的には、このようなディスエーブル情報は状態レジスタへ戻される。このことはたとえば、1つの先行の条件に応答して非常に長い分岐を実行しなければならない場合に必要とされる。しかし、1つの分岐において制限された数の演算のみが必要とされる特定のケースが存在する。このようなケースでは、すでにディスエーブルされたカラムを次のステージで再び「アクティブ状態にし」なければならない。このような再アクティブ化の一例に、2つの分岐が再びマージし、すでに非アクティブ化されたカラムを再び使用するケースがある。このことはACT(アクティブ化)条件によって、該ACT信号を受け取ったALUのカラムにおいて下流のALUカラムをアクティブ化することによって行われる。ここでは有利には、該当のカラムが非アクティブ化されている場合に、ALUは前記信号を受信する。ACT条件を使用する代わりに、別の条件が満たされない限り、相応のALUと、同一のカラムにあり該相応のALUより下流にあるすべてのALUを無条件でイネーブルできることが理解できる。
また上記では、特定のALUがディスエーブルされることにより、このディスエーブルが分岐評価時の電力消費を低減するのに有利であることを示唆したが、データ処理を改善するために別の条件をインプリメントすることも有利である。
したがって、以下のインプリメンテーションが非常に有利である:
OPI:反対側のカラムの同一のロウのALUを非アクティブ化すべき場合、該当のカラム内のALUはアクティブ化される。
OPA:反対側のカラムの同一のロウにあるALUがアクティブ状態である場合、同一のロウにあり該当のカラムに存在するALUもアクティブ化される。そうでない場合には、該当のカラム内のALUは非アクティブ化される。
有利な実施形態では、該当のカラムにおいて上流にあるALUのアクティブ化状態が何であるかにかかわらず、非アクティブ化が行われる。通常の知識を有する者であれば、たとえばOPA条件の評価によって非アクティブ化されたカラムは、下流のALUにおいてアクティブ化(ACT)条件を使用して再アクティブ化できることを容易に理解できる。
さらに、先行のサイクルのうち1つのサイクルで行われた直前の条件が評価されるようにインプリメントすることも非常に有利である。添付書類の表29に、このような2つの条件、すなわちLCLおよびLCRが挙げられている。これらは以下の意味を有する:
LCL:先行して評価された直前の条件がどの程度先行して行われたかにかかわらず、該条件が左側のカラムをイネーブルされている場合、該当のカラムのALUはイネーブルされる。評価された先行の条件がどの程度先行して行われたかにかかわらず、該条件が左側のカラムをディスエーブルされている場合、該当のカラムのALUはディスエーブルされる。この条件が、先行の条件で左側のカラムがイネーブルされているか否かをチェックするにもかかわらず、このことは、LCL条件を使用して左側のカラムおよび/または右側のカラムのいずれかに対して実効的に評価できることを述べておく。
LCR:LCLと同様に、LCR条件は以下の作用を有する:先行の条件が右側のカラムをアクティブ化している場合、該当のカラムが左側のカラムにあるかまたは右側のカラムにあるかにかかわらず、該当のカラム内のALUもアクティブ化される。しかし先行の条件が右側のカラムをディスエーブルされている場合、該当のカラムもディスエーブルされる。
LCLおよびLCRのいずれにおいても、カラムがアクティブ状態である場合にはアクティブ化されず、アクティブ状態に維持されることを述べておく。カラムがアクティブ状態でない場合、LCL/LCR条件は実効性を有さない。
LCL,LCR,OPIまたはOPAを使用して行われるアクティブ化/非アクティブ化はVLIWアーキテクチャでも有利であり、レジスタのイネーブルによって、クロックサイクル等に逆方向の作用を及ぼさずにVLIWアーキテクチャをインプリメントできることを再度述べておく。
より一般的に言うと、LCLに類する条件が、1つまたは複数のカラムに対する先行の最後の条件を評価することにより、LCLに類する該条件の評価が適用された該当の(複数の)カラムのアクティブ化状態が決定される。
以下の添付書類1は開示目的で、依拠する本願の一部を成し、本願の不可欠部分として公表すべきものである。
添付書類1
FNC PAE‐参照マニュアル アドバンス情報‐変更対象
目次
第1章 緒言・・・4
1.1 アプリケーション空間・・・4
第2章 FNC‐PAEアーキテクチャ・・・6
2.1 XPPアレイへの組み込み・・・6
2.2 FNC‐PAEとの相互接続・・・7
2.3 FNC‐PAE アーキテクチャ概観・・・7
2.4 ALUデータパス・・・10
2.5 レジスタファイル・・・10
2.6 命令フェッチおよび命令復号化・・・11
2.7 条件付き演算・・・12
2.8 分岐・・・12
2.8.1 オペコード暗示的プログラムポインタ修飾子・・・12
2.8.1.1 LPCインプリメンテーション固有の挙動・・・14
2.8.2 明示的プログラムポインタ修飾子・・・15
2.8.2.1 リンクレジスタ(lnk)・・・16
2.9 ロード/記憶ユニット・・・16
2.9.1 アドレス発生器・・・16
2.10 メモリロード/記憶命令・・・18
2.11 ローカルメモリ・・・20
2.11.1 命令メモリ・・・20
2.11.2 ローカルデータメモリ・・・20
2.12 ALU・・・20
2.12.1 ALU命令・・・20
2.12.2 命令の可用性・・・22
2.12.2.1 算術命令、論理命令およびSFU命令・・・23
2.12.2.2 移動命令・・・24
2.12.2.3 ロード/記憶命令・・・25
2.12.2.4 プログラムポインタ変更命令・・・27
2.12.2.5 ポート読み出し/書き込み命令・・・28
2.12.2.6 雑命令・・・30
2.12.3 多義的なターゲット・・・31
2.13 レジスタサマリ・・・31
2.13.1 汎用レジスタ・・・31
2.13.2 アドレス発生器レジスタ・・・32
2.13.3 Mem‐inメモリ、Mem‐outレジスタ・・・32
2.13.4 リンクレジスタおよびIntlnkレジスタ・・・32
2.13.5 状態レジスタ・・・33
2.13.6 ポート・・・33
2.14 SFU・・・34
2.14.1 マルチサイクルSFU・・・34
2.14.2 SFU 0・・・34
2.14.3 SFU 1・・・35
2.15 メモリ階層構造・・・35
2.15.1.1 ブートストラップ・・・37
2.15.1.2 ALU/RAM‐PAEアレイ(リ)コンフィギュレーションおよびFNC‐PAEブート・・・37
2.16 XPPアレイへの組み込み・・・37
2.17 プランニングされている拡張・・・37
2.17.1 シャドウレジスタファイル・・・37
2.17.2 遅延スロットにおけるオペコード実行・・・37
2.17.2.1 複数のセグメントにわたるジャンプ・・・38
2.17.3 データセグメントポインタ・・・38
第3章 アセンブラ・・・39
3.1 一般的なアセンブラ要素・・・39
3.1.1 オペコード構文・・・39
3.1.2 コメント・・・40
3.1.3 数、定数およびエイリアス・・・40
3.1.4 オブジェクトネーミング、デフォルトエイリアス・・・40
3.1.5 ラベル・・・41
3.1.6 メモリ・・・41
3.1.7 条件付き実行・・・43
3.1.8 プログラムフロー・・・44
3.1.8.1 EXIT分岐・・・45
3.1.8.2 ELSE分岐・・・48
3.1.8.3 ロングジャンプ・・・49
3.2 アセンブラ命令・・・50
3.3 シャドウレジスタ・・・53
3.4 入力/出力・・・53
3.5 リセットベクトルおよび割込ベクトル・・・54
3.6 例・・・54
3.6.1 例1・・・54
3.6.2 例2・・・55
3.6.3 例3・・・54
3.6.4 例4・・・58
3.6.5 例5・・・61
3.6.6 例6・・・63
3.6.7 例7・・・65
付録A・・・68
図面リスト
図1:FNC‐PAEおよびXPP I/Oを有するXPP20.8.4・・・6
図2:FNC‐PAE概観・・・10
図3:アドレス発生器およびAGREG・・・17
図4:メモリ階層構造・・・36
図5:アセンブラオペコード構造・・・39
図6:FNCDBG RAM表示・・・43
図7:命令レベルフロー図・・・55
図8:異なる3つの実行時間パス(陰影を有するブロックがイネーブルされている)・・・56
図9:図6のiビットシーケンス・・・64
図10:FNC‐PAEデバッガ(ベータ)・・・68
表リスト
表1:FNC‐PAEオペコード構造・・・11
表2:PPを変更する命令・・・15
表3:AGREG機能・・・16
表4:アドレス発生器モード・・・18
表5:記憶命令・・・18
表6:ロード命令・・・19
表7:スタック命令・・・19
表8:ALUハードウェア命令サマリ・・・21
表9:算術命令、論理命令およびSFU ALU命令・・・23
表10:移動命令・・・24
表11:メモリロード/記憶命令・・・25
表12:プッシュ/ポップ命令・・・26
表13:lnkを介するジャンプ、呼び出し、呼び出し・・・27
表14:リンクレジスタロード命令・・・28
表15:サブルーティンおよびlnkからの戻り・・・28
表16:ポート読み出し/書き込み命令・・・29
表17:雑命令・・・30
表18:レジスタ書き込み優先権・・・31
表19:汎用レジスタファイル・・・31
表20:AGレジスタ・・・32
表21:Memレジスタ・・・32
表22:リンクレジスタ・・・32
表23:状態レジスタビット・・・33
表24:ポート・・・33
表25:SFU命令フォーマット・・・34
表26:SFU 0命令・・・34
表27:SFU 1命令・・・35
表28:オブジェクトおよびレジスタのアセンブラネーミング・・・40
表29:条件・・・44
表30:EXIT挙動(1)・・・46
表31:EXIT挙動(2)・・・47
表32:ELSE挙動・・・49
表33:アセンブラALU命令(1)・・・51
表34:アセンブラALU命令(2)・・・52
表35:アセンブラオペコード命令・・・52
表36:アセンブラSFU 0命令・・・52
表37:アセンブラSFU1命令・・・53
表38:確保済みラベル・・・54
表39:例7のスタック使用・・・65
第1章
緒言
XPPアーキテクチャは、基本的な処理アレイ要素から厳密にモジュール構成されている。XPP‐IIbアーキテクチャのPAEは、フロー図をアレイに静的にマッピングするために最適化されている。フロー図をマッピングするためのPAEには2つの基本的な種類が存在する;
・ALU PAEは、基本的な算術論理演算を実行する
・RAN PAEは、たとえば間接的な結果に対するデータを記憶するか、または使用されるルックアップテーブルであるプログラムフローは、独立した1ビットイベントネットワークによって操作することができる。このことにより、データフローの条件付き演算と、外部プロセッサとの同期とが可能になる。このようなXPPの特徴により、比較的均質な構造を有し処理時間に対して高いデータ要件を課すアルゴリズムに必要な帯域幅と並列性とが提供される(データフロー指向的)。
しかし、大部分の新規の信号処理アルゴリズムは、データフロー部分のみから構成されるのではなく、複雑な制御フロー指向のセクションを必要とすることが多くなってきている。このようなセクションは、より高次のプログラミング言語、たとえばC言語等をサポートするシーケンシャルプロセッサによって処理しなければならない。1つの解決手段に、システム・オン・チップ(SoC)において、制御フローセクションに対して、たとえばARMまたはMIPS等の組み込み型マイクロプロセッサを使用し、データフローセクションに対して、組み込み型XPPアレイを使用する解決手段がある。この解決手段は、制御フローセクションに対して極端な処理要件を課さないアプリケーションでは、パフォーマンスおよび開発の努力の点では、実用的なソリューションである。
しかしすぐに入手可能なマイクロプロセッサでは、とりわけ高精細度ビデオアプリケーション(HDビデオ)において、新たなアルゴリズムの要求に追いつくことはできない。
そこでPACTは、XPPアレイにシームレスに組み込むことが可能な機能PAE(FNC‐PAE)アーキテクチャを紹介する。FNC‐PAEは、典型的な制御フローアプリケーション用の並列演算方式のALUのセットから成り、これによって高度な並列性が実現されるとともに、シーケンシャルアルゴリズムのためのゼロオーバヘッド分岐もともに実現される。
1.1 アプリケーション空間
以下の要約では、ALU‐PAEとRAM‐PAEとを有するXPPアレイによって高パフォーマンスのプログラマブルソリューションを提供するアルゴリズムの思想を紹介する。
・ビデオコーデック用のコサイン変換
・エンコーダ動き推定およびデコーダ動き補償
・ピクチャ改善、デブロッキングフィルタ
・スケーリングおよび適応フィルタ
・ベースバンド処理用のFFTまたはソフトウェア定義ラジオ
FNC‐PAEは、XPPアレイのアプリケーション空間を次のようなアルゴリズムにまで拡張する。
・ビデオコーデック用のCAVLC
・CABAC算術エンコーダ/デコーダ
・ハフマンエンコーダ/デコーダ
・オーディオ処理
・FFTアドレス発生
・ソフトウェア定義ラジオ用の順方向誤り訂正、たとえばViterbi,ターボコーダ
FNC‐PAEのシーケンシャル特性に起因して、これをアレイの再構築用の制御プロセッサとして使用し、またSoCに存在する別のモジュールとの通信用の制御プロセッサとして使用することもできる。さらにFNC‐PAEは、効率的なコンパイラ設計を可能にするハードウェア構造を提供する。FNC‐PAEはVLIWアーキテクチャと幾つか類似点を有するが、多くの点で異なっている。FNC‐PAEは、アルゴリズムで必要とされる決定および分岐が多い制御フロー処理のための最大帯域幅に対して構成されている。
本マニュアルでは、FNC‐PAEおよびアセンブラのコンセプトおよびアーキテクチャを記載する。
XPPアレイの詳細に関しては、ALU‐PAEおよびRAM PAEを基礎として、XPP‐IIb参照マニュアルおよびXPP‐IIbプログラミングチュートリアルを参照されたい。
第2章
FNC‐PAEアーキテクチャ
2.1 XPPアレイへの組み込み
図1は、4つのFNC PAEが組み込まれたXPPアレイ(XPP 40.16.8)を示す。
Figure 2008530642
図1:FNC‐PAEおよびXPP I/Oを有するXPP20.8.4
ALU‐PAEおよびRAM‐PAEはXPPアレイの中心に配置される。FNC‐PAEはXPP‐IIbアレイの右縁部に、データフロー同期されるポートを有する各ロウごとに取り付けられている。XPP BREGと同様に、方向はボトムアップであり、4つの入力ポートと4つの出力ポートを有する。FNC‐PAEは、FNC‐PAEコア間に垂直に、直接通信用の付加的なポートを提供する。通信プロトコルは、XPPアレイ内における水平方向XPPバスと同じであり、データパケットはポイント間接続によって転送される。垂直方向のイベントバスを有するFNC‐PAE間では偶数も交換することができる。RAM‐PAEに組み込まれるXPPアレイのI/Oは維持される。このアレイは、ロウおよびカラムの数でスケーリング可能である。
第1図はALU‐PAEの数を定義しており、第2図はRAM‐PAEの数を定義しており、第3図はFNC‐PAEの数を定義する。左縁部および右縁部には常に16個のRAM‐PAEが配置されているので、番号付与パターンによって、コアにおける5×8ALU‐PAEアレイも定義される。
2.2 FNC‐PAEとの相互接続
他のPAEと同様に、この相互接続はXPPデータフロープロトコルを基礎とする:ソースは、受信側によって消費される個々のワードパケットを送信する。受信側オブジェクトは、すべての必要な入力が使用可能になった場合のみ、このパケットを消費する。このような簡単なメカニズムによって、自己同期ネットワークが提供される。FNC‐PAEのシーケンシャル特性に起因して、受信側オブジェクトは各クロックごとに結果を供給しないか、または入力を消費しないケースが多く存在する。しかし、このようなデータフロープロトコルによって、すべてのXPPオブジェクトはFNC‐PAEの入力および出力に自動的に同期することが保証される。4つのFNC‐PAE入力ポートはボトム水平方向バスに接続されており、4つの出力ポートはデータパケットをトップ水平方向バスへ転送する。データと同様に、水平方向のイベントバスを使用してイベントを送受信することもできる。
2.3 FNC‐PAE アーキテクチャ概観
FNC‐PAEはロード/記憶VLIWアーキテクチャを基礎とする。VLIWプロセッサと異なってこのロード/記憶VLIWアーキテクチャでは、同一クロックサイクル内でALUの暗示的な条件付き演算と、逐次演算と、並列演算とが行われる。
FNC‐PAEのコアはALUデータパスであり、これは16ビット幅整数ALUを8つ有し、これらのALUは4ロウ×2カラムに配置されている(図2)。データパス全体の動作は非パイプライン方式であり、データパス全体で1つのクロックサイクルで実行されるオペコードは1つである。処理方向はトップからボトムである。
各ALUはオペランドをレジスタファイルDREGから受け取るか、または拡張レジスタファイルEREGから受け取るか、またはアドレス発生器レジスタファイルAGREGから受け取るか、またはメモリレジスタMEM‐outから受け取る。レジスタおよびデータパスはすべて16ビット幅である。ALUは、上方に位置するすべてのALUの結果にアクセスできる。さらにトップロウのALUは、FNC‐PAEと別のPAEとを接続する32個の自動同期方式のIOポートのうち最大1つにアクセスすることができる。前記別のPAEは、たとえばALU‐PAEおよびRAM‐PAEのアレイであるか、または任意の種類のプロセッサである。
EREGおよびDREGはシャドウレジスタの1セットを提供し、サブルーティンの呼び出し時には高速のコンテクストスイッチングを可能にする。DREG r2...r7およびすべてのEREGは2倍化されているのに対し、DREG r0およびr1はパラメータ転送を行うのに使用される。
ロード/記憶ユニットはアドレス発生器およびデータメモリインタフェースを有する。アドレス発生器は複数のベースポインタを提供し、メモリアクセスのためのポストインクリメントおよびポストデクリメントをサポートする。ロード/記憶ユニットインタフェースはALUデータパスに直接接続される。実行サイクルごとに1つのロード/記憶演算がサポートされる
最大16個の特別関数ユニット(SFU)がALUデータパスに対して並列に動作する。ALUデータパスとは対照的に、SFUはパイプライン方式で動作することができる。SPUは、ALUのトップロウと同一のオペランドソースにアクセスすることができ、ボトム左側ALUを使用してその結果をライトバックする。SFU命令セットは、各SFUごとに最大7つのコマンドをサポートする。SFU 0は16×16乗算器のために確保されており、オプションとして16ビットディバイダのために確保されている。ビットフィールド演算等の特別な演算をサポートする特別なオペコードはSFUとして組み込まれる。
現在は、シャドウレジスタは未だサポートされない。
注意点:FNC‐PAEアーキテクチャはロード/記憶ユニットの2倍化を実現することにより、将来の増強として、多重的な同時データメモリ転送をサポートすることができる。
FNC‐PAEは、8つのALUがすべて同一サイクルで動作し、ALUデータパス内で条件を実行できるので、高い逐次パフォーマンスを実現する。ALU演算は実行時間時に、上方に配置されたALUの状態フラグに基づいてイネーブルまたはディスエーブルされる。ALUの演算は条件付きで、同一のカラムにあり上方のロウにあるALUの状態フラグに基づいて制御することができる。トップALUは、その時点のサイクル前の同一のカラムの最後のALUの状態レジスタを介して入力された状態の入力を使用する。データパスに並列して、次のサイクルでの実行のために2つの命令候補が同時にフェッチされる。各処理サイクルの終了時には、ALUデータパス全体の状態に基づいて、これらの命令のうち1つの命令が選択される。このことにより、命令レベルでいかなる遅延も伴わずに、2つのターゲットへの分岐が可能になる。付加的な条件付きジャンプ演算によって、1サイクルの遅延を引き起こす2つの別のターゲットへの分岐が可能になる。
同時に命令をフェッチするためには、2つの命令メモリが必要である(オプション)。
Figure 2008530642
図2:FNC‐PAE概観
2.4 ALUデータパス
ALUデータパスは16ビット幅の整数ALUを8つ有し、これらのALUは4ロウ×2カラムに配置されている。左側または右側のALUカラム(パス)でのデータ処理は、厳密にトップからボトムに行われる。このことは重要事項である。というのも、条件付き演算は左側パスまたは右側パスの次のALUをディスエーブルできるからである。完全なALUデータパスは1つのクロックサイクルで実行される。ALUはすべて、3つの16ビットレジスタファイルDREG(r0...r7)、EREG(e0...e7)およびAGREG(bp0...bp7)にアクセスすることができる。また、ALUの各ロウも、上方のALUすべての先行して処理された結果にアクセスすることができる。
ALUデータパス内で高速なデータ処理を可能にするためには、ALUは制限された演算セットをサポートする。これらの演算セットは、加算、減算、比較、バレルシフト、およびブール関数ならびにジャンプである。より複雑な演算は、別個にSFU関数としてインプリメントされる。大部分のALU命令はすべてのALUで使用可能であるが、これらのうち幾つかは、ALUの特別なロウに制限されている。さらに、AGREG、EREG、I/Oからのソースオペランドにアクセスすることは、ALUの幾つかのロウでは制限されており、また、使用可能なターゲットはコラムごとに異なることもできる
このような厳密な制限により、データパス内部のデータ処理は最小遅延で、いかなるパイプラインステージも使用せずに行うことができる。さらに、プログラムメモリの所要サイズを制限することができる制約も幾つか存在する。レジスタファイルからのオペランドはALUに供給される。1つのロウのALU出力は、次のロウのALUに供給することができる。したがって、各コラムごとに最大4つの連続したALU演算を同一のクロックサイクル内で実行することができる。最後の結果はその同一のサイクル内で、レジスタファイルに書き込まれるかまたは別のターゲットレジスタに書き込まれる。ALUの状態フラグはALUの次のロウに供給される。ボトムALUの状態フラグは状態レジスタに記憶される。状態レジスタからのフラグは第1のロウのALUと命令デコーダとによって、条件付き演算を操作するために使用される。このようなモデルにより、各演算が先行の演算の結果に依存する非常に逐次的なアルゴリズムを効率的に実行することができる。
2.5 レジスタファイル
ALUは、複数の16ビットレジスタに同時にアクセスすることができる。汎用レジスタDREG(r0..r7)には、すべてのALUが独立して同時読み出しおよび同時書き込みによってアクセスすることができる。拡張レジスタEREG(e0...e7)、アドレス発生器レジスタbp0...bp7およびポートにもALUはアクセスできるが、幾つかのALUには制限がある。1サイクル以内でのこれらのレジスタへの同時書き込みは、同一のインデックスが使用される場合にのみ可能である。たとえば、1つのALUがelに書き込む場合、別のALUはbplに書き込むことしか許可されない。
mem‐outレジスタからデータをレジスタに直接読み出すことが計画されている。現在、ALUはmem‐outから読み出した後に、必要な場合にはデータをレジスタへ転送しなければならない。
DREGおよびEREGはシャドウレジスタを有する。これによって、たとえば割込ルーティンに対して高速のコンテキストスイッチが実現される。シャドウレジスタr0およびr1はr0またはr1とそれぞれ同一である。このことにより、シャドウレジスタセットが選択された場合にパラメータの転送を行うことができる。シャドウレジスタは、呼び出し命令およびret命令によって選択することができる。
命令は個々のALUを操作する。オペコードは、すべてのALUに対する命令と別の情報とを有する。オペコードは1クロックサイクル以内で実行される。
2 詳細は第2.12.2章を参照されたい。
2.6 命令フェッチおよび復号化
命令メモリは256ビット幅である。表1は、FNC‐PAEの256ビット幅の一般的なオペコード構造を示す。
Figure 2008530642
表1:FNC‐PAEオペコード構造
このオペコードは、8つのALUに対して28ビット命令を供給する。別のビットフィールドの機能は、以下の通りである:
・EXIT‐L,EXIT‐R:2つのビットが、相対的ポインタ(HPC,LPCまたはIJMP0)のうちどれを次のオペコードに対してフェッチするかを指定する。左側ALUカラムおよび右側ALUカラムの別個の出口が、同時にフェッチされた2つのオペコードの選択を可能にする。
・HPC:高優先度継続:6ビット(正負符号付き)が、現在のプログラムポインタPPに対して相対的にフェッチすべき次のオペコードを指定する。HPCはデフォルトポインタである。というのも、これはどのようなケースでも必ず事前フェッチされているからである。1つのコードが、lnkレジスタを使用して次のオペコードを絶対的に選択することを指定する。
・LPC:低優先度継続:HPCと同様に6ビット(正負符号付き)が、分岐の場合にフェッチすべき次のオペコードを指定する。1つのコードが、次のオペコードを絶対的にポインティングするためにlnkレジスタを使用することを指定する。
・IJMP0:暗示的ショートジャンプ:6ビット(正負符号付き)が、現在のプログラムポインタPPに対して相対的にフェッチすべき次のオペコードを指定する。ジャンプは常に1つのサイクル遅延を必要とする。というのも、次のオペコードは事前フェッチできないからである。
FNC‐PAEは2ステージパイプラインを使用してインプリメントされ、ステージ命令フェッチ(IF)および実行(EX)が含まれる。IFは、命令メモリからの命令フェッチと、1サイクル以内での命令デコードとを有する。したがって命令メモリは、高速非同期SRAMとしてインプリメントされる。
EXの際には、8つのALU、ロード/記憶ユニットおよびSFU(特別関数ユニット)はコマンドを並列実行する。ALUデータパスおよびアドレス発生器はパイプライン化されない。ロード命令も記憶命令も、1つのパイプラインステージを有する。SFUは任意の深さのパイプラインをインプリメントすることができる(詳細に関しては、セクション2.14を参照されたい)。
通常のプロセッサと異なり、プログラムポインタppは、ジャンプが行われない場合には逐次的に増分されない。その代わり、オペコードのHPCエントリによって定義された値はppに足される。
2つの並列命令メモリが使用可能である場合(インプリメンテーション固有)、2つの命令は同時にフェッチされる。この場合、HPCおよびLPCはppに足され、2つの択一的な命令をポインティングする。
我々は「プログラムポインタ」という用語は、別のマイクロプロセッサで通常のように無条件に1だけ増分する「プログラムカウンタ」と区別して使用している。
前記択一的な命令のうちHPCによって定義された1つの命令は、メイン命令メモリ内に位置しており、LPCによって定義された他方の命令は、付加的な並列命令メモリに位置する。したがって両命令ともすでにフェッチ完了していることが可能であり、次のオペコードを遅延無しで実行することができる。ジャンプセクションは±15個の位置を有する相対的なジャンプを有するか、またはリンクレジスタlnkを介する絶対的ジャンプを有する。ジャンプおよびサブルーティン呼び出しによって、サブルーティンの実行中に使用されるシャドウレジスタファイルを選択することができる。
2.7 条件付き演算
多くのALU命令は、先行のALU演算の結果に依存して、上方のロウのALU状態フラグから、または第1のALUロウでは、先行のクロックサイクルの結果に由来する第3ロウのALUの状態を保持する状態レジスタから、条件付き実行をサポートする。条件の要約に関しては第3.1.7章を参照されたい。条件がFALSEである場合、条件付きの命令および同一のALUカラムにおける次のすべての命令は非アクティブ化される。カラムがアクティブ化/非アクティブ化されていることを示す状態フラグを次のオペコードに使用することもできる(LCL条件またはLCR条件)。非アクティブ化されたALUカラムは、ACT条件によってのみ再アクティブ化することができる。
LCL条件またはLCR条件によって、遅延スロットを引き起こさずに分岐を効率的にインプリメントすることができる。というのもこれによって、条件によって先行のオペコードで選択されたのと同一のパスを現在の命令で実行できるからである。
HPC、LPCおよびIJMP0ポインタは、条件に基づいて分岐するのに使用することができる。条件が存在しない場合、HPCは次のオペコードを定義する。6ビット値で分岐ターゲットに対する条件の結果に基づいて、3つのポインタのうち1つのポインタを定義することができる。専用のALUオペコードによってロングジャンプを行うことができる。
2.8 分岐
プログラムポインタppを変更できる命令が幾つか存在する。
複数の種類のジャンプ命令がサポートされる:
・HPC,LPCおよびIJMP0ポインタを使用する、オペコード暗示的プログラムポインタ修飾子
・明示的プログラムポインタ修飾子(すなわちALU命令)。
・lnkレジスタ(lnk)およびスタックを介して行われるサブルーティンの呼び出しおよび戻り。
・Intlnkレジスタを介して行われる割込呼び出しおよび戻り
アドレスは常に、命令メモリの256ビットワードとされる(バイトアドレスとはされない)。
したがってアセンブラオペコードには、pp修飾子に対する直接的な参照が存在する。
2.8.1 オペコード暗示的プログラムポインタ修飾子
暗示的なプログラムポインタ修飾子はすべてのオペコードとともに使用することができ、±15個のオペコードによって、または命令がそれ自体でループを処理する場合には0個によって、PPの相対的なジャンプを可能にする。ポインタHPCまたはLPC(それぞれ6ビット)は相対的な分岐オフセットを定義する。EXIT‐LフィールドおよびEXIT‐Rフィールドは、前記ポインタのうちどのポインタを使用するかを定義する。1つのHPCコードまたはLPCコードが、lnkレジスタを介してジャンプを選択するために確保されている。
アセンブラステートメント:HPC,LPC,JMPS
HPC‐高優先度継続
HPCは、実行すべき次の命令を、実際のppに対して相対的にポインティングする。HPCポインタの使用は、パス(すなわちALUカラム)のうち1つのパスで明示的に指定することができる。EXIT‐LまたはEXIT‐Rによって、HPCポインタが次のオペコードをポインティングするか否かが指定される。「通常の」プログラムカウンタをエミュレートするためには、HPCを1にセットする。アセンブラはこれをデフォルトごとに実行する。
条件付き命令では「Else」ステートメント(アセンブラ構文:! HPC <label>)が次のことを定義する。すなわち、条件がNOT TRUEである場合、分岐オフセットとしてLPCポインタを使用することを定義する。そうでない場合には、LPC(デフォルト)またはIJMP0(指定されている場合)が次の分岐ターゲットとして使用される。「Else」はすべての命令とともに使用できるわけではないことに留意されたい。
LPC‐低優先度継続
LPCは、実行すべき次の命令を、実際のppに対して相対的にポインティングする。LPCポインタの使用は、パス(すなわちALUカラム)のうち1つのパスで明示的に指定することができる。このステートメントは、指定されているパスがアクティブ化されている場合にのみ評価される。
条件付き命令では「Else」ステートメント(アセンブラ構文:! LPC <label>)が次のことを定義する。すなわち、条件がNOT TRUEである場合、分岐オフセットとしてLPCポインタを使用することを定義する。そうでない場合には、HPC(デフォルト)またはIJMP0(指定されている場合)が次の分岐ターゲットとして使用される。「Else」はすべての命令とともに使用できるわけではないことに留意されたい。
IJMP0‐ショートジャンプ
HPC/LPCの他に付加的に、6ビットポインタであるIJMP0が択一的な命令を相対的にポインティングし、複雑なディスパッチアルゴリズムにおいて使用される。
IJMP0は、実行すべき次の命令を、実際のppに対して相対的にポインティングする。IJMP0ポインタの使用は、パス(すなわちALUカラム)のうち1つのパスで明示的に指定することができる。このステートメントは、それぞれのパスがアクティブ化されている場合にのみ評価される。
条件付き命令では「Else」ステートメント(アセンブラ構文:! JMPS <label>)が次のことを定義する。すなわち、条件がNOT TRUEである場合、分岐オフセットとしてIJMP0ポインタを使用することを定義する。そうでない場合には、HPC(デフォルト)またはLPC(指定されている場合)が次の分岐ターゲットとして使用される。「Else」はすべての命令とともに使用できるわけではないことに留意されたい。
ショートジャンプは、実行には使用できない1つの遅延スロットを引き起こす。
2.8.1.1 LPCインプリメンテーション固有の挙動
FNC‐PAEは、1つまたは2つの命令メモリとともにインプリメントできる:
1つの命令メモリによるインプリメンテーション
FNC‐PAEの標準的なインプリメンテーションは、LPCポインタによって条件付きジャンプ演算を実行する。これによって遅延スロットが発生する。その理由は、分岐に対する次の命令をまずはフェッチおよび復号化しなければならないからである。このハードウェアオプションは、面積効率がより高くなる。というのも、1つの命令メモリを使用すればよいからである。
2つの命令メモリによるインプリメンテーション
FNC‐PAEの高パフォーマンスのインプリメンテーションは、2つの命令メモリを有する。これによって、並列アクセスが可能になる。この場合、HPCおよびLPCによって参照される命令は同時にフェッチされる。実行すべき実際の命令は実行直前に、先行の命令の実行状態に依存して選択される。
このラベルはオプションである。ラベルが指定されていない場合、pp+1を使用する。絶対値(たとえば#3)が指定されている場合、この絶対値がppに加算される(たとえばpp+3)。
これによって遅延スロットは消失し、LPCによる分岐が最大パフォーマンスを提供することもできる。
LPCを使用するプログラムは、両種類のFNC‐PAEインプリメンテーションで実行することができる。FNC‐PAEのために書かれたプログラムは両インプリメンテーション(命令メモリが1つまたは2つ)に対して両立するように構成されているので、命令メモリが1つであることによって生じる遅延スロットは、オペコードの実行に使用すべきではない
2.8.2 明示的プログラムポインタ修飾子
明示的ジャンプは、相対的ジャンプおよびサブルーティンの呼び出し/戻りを含むALU命令である。表2に、プログラムポインタPPを直接的または間接的に変更するALU命令がまとめられている。
Figure 2008530642
表2:PPを変更する命令
明示的ジャンプは、次の命令を定義するALU命令である。各オペコードごとに許可される命令は1つだけである。
JMP‐明示的ジャンプ
明示的ジャンプは伝統的な手法でインプリメントされる。JMPターゲットは、直接値によって絶対的に定義されるか、または現在のppに対して相対的なレジスタまたはALUの内容によって定義される。
アセンブラステートメント JMPL <label> によって、絶対的アドレスへのロングジャンプが定義される。
呼び出し(CALL)/戻り(RET)
サブルーティンCALLおよびRETは伝統的な手法でインプリメントされる。すなわち、戻りアドレスはスタックにプッシュされ、戻りアドレスはRETの後にポップされる。
スタックポインタはAGREGレジスタspである。CALLターゲットアドレスは、16ビットの直接値によって絶対的に定義されるか、またはレジスタまたはALUの内容によって定義される。
いずれにせよ、現在のインプリメンテーションでは遅延スロットを使用することは許容されない。
アセンブラ命令JMPL
戻りアドレスは、pp+IJMP0として定義されることに留意されたい。
2.8.2.1 リンクレジスタ(lnk)
リンクレジスタは、callおよびretのようにスタック演算を要求するペナルティ無しでサブルーティンへ高速アクセスを行うのをサポートする。リンクレジスタは、ルーティンから戻るために復元された次の命令をポインティングするプログラムポインタを記憶するために使用される。
lnkは、16ビット定数をppに加算するかまたはレジスタ値またはsetlnki、またはALU値をppに加算するsetlinkrオペコードによって明示的にセットすることができる。
HPCポインタおよびLPCポインタ(0x1F符号。2.8.1を参照せよ)の特別な暗示的pp修飾子が、次の命令の絶対的アドレスとしてレジスタlnkの内容を選択する。lnk命令はリンクレジスタの内容をppに移動する。このようにして、lnkレジスタに先行して記憶されたアドレスは新規の実行アドレスとなる。
2.9 ロード/記憶ユニット
ロード/記憶ユニットは、AGREG、アドレス発生器、メモリインレジスタおよびメモリアウトレジスタを有する。
ロード/記憶ユニットは、ALUデータパスの実行に並行して、データメモリに対するアドレスを発生する。ロード/記憶ユニットは、最大8つのベースポインタをサポートする。8つのベースポインタのうち1つは、スタック演算(プッシュ、ポップ、呼び出し、ret)が使用されている場合には常に、スタックポインタとして専用に使用される。Cコンパイラでは、別のベースポインタがフレームポインタfpとして専用に使用される。さらにbp5およびbp6は、ポストインクリメント/ポストデクリメントによるアドレスポインタap0およびap1として使用することができる。
Figure 2008530642
表3:AGREG機能
2.9.1 アドレス発生器
すべてのロード/記憶アクセスは、メモリアドレスを発生するためにベースポインタbp0...bp7のうち1つを使用する。オプションとして、図3に示されたようにオフセットを加算することができる。データRAMアドレス出力が、バイトアドレスを供給する。
1 このことは、戻りアドレスに1を加算する通常のマイクロプロセッサインプリメンテーションとは異なる。
アドレス発生器は、以下のソースを加算するのに使用される:
・ap0(表4のポストインクリメントモード/ポストデクリメントモードを参照されたい)
・ap1(表4のポストインクリメントモード/ポストデクリメントモードを参照されたい)
・0
・ロード演算のためのオペコードに由来する6ビット正負符号付き定数
・レジスタr0...r7
・e1,e3,e5,e7に制限されたEREGレジスタ
Figure 2008530642
図3:アドレス発生器およびAGREG
表4に、自動増分モード/自動減分モードを定義する任意選択肢がまとめられている。これらの任意選択肢は、bp5/ap0およびbp6/ap1に使用可能である。
ポストインクリメントおよびポストデクリメントを行うためのモードは、オペコードに依存する。バイトロード/記憶(stb, ldbu, ldbs, cpw)では、ap0ないしはap1はそれぞれ1つずつ増分または減分される。ワードロード/記憶(stw, ldw, cpw)では、ap0ないしはap1はそれぞれ2つずつ増分または減分される。
Figure 2008530642
表4:アドレス発生器モード
2.10 メモリロード/記憶命令
記憶演算は、データをメモリに書き込む際にパイプラインステージを使用する。しかしハードウェアインプリメンテーションは、プログラマからパイプラインを隠す。メモリ記憶演算は常に、アドレス計算のためにアドレス発生器を使用する。記憶演算は、バイトで実行されるかまたは16ビットワードで実行される。バイト順序はリトルエンディアンであるから、アドレスライン0=0は16ビットワードのLSBを選択する。
注意点:
オペコードごとに実行できるロードまたは記憶演算は1つだけである。
Figure 2008530642
表5:記憶命令
先行のサイクルでロード命令によって読み出されたデータは、ALUデータパスのmemレジスタで使用できる。このデータは、ロード演算結果が出された後の1サイクル後に、ターゲット(たとえばレジスタのうち1つ、ALU入力端)において使用される。ロード演算は16ビットワードのロードと、正負符号付きバイトおよび正負符号無しバイトとをサポートする。
デバッガは、ワードの右側にLSBを有する16ビットワードとして定義されたメモリセクションを示す。
Figure 2008530642
表6:ロード命令
Mem‐outからレジスタへの読み出しには、移動演算が必要である。
スタック演算にはbp7/spが必要であり、各演算はそれにしたがってspを変更する。
Figure 2008530642
表7:スタック命令
2.11 ローカルメモリ
FNC‐PAEはハーバード処理モデルを使用してインプリメントされる。それゆえ少なくとも1つのメモリと1つの命令メモリとが必要とされる。両メモリとも高速SRAMとしてインプリメントされるので、1つのパイプラインステージのみによる演算が可能である。
2.11.1 命令メモリ
命令メモリは256ビット幅である。これによって、VLIWと同様の命令フォーマットがサポートされる。典型的な埋込アプリケーションでは、プログラムメモリは16〜256エントリの大きさでなければならない。プログラムポインタppは、1つのオペコードを保持するプログラムメモリの1つの256ビットワードをアドレス指定する。
低優先度継続(LPC)を遅延スロット無しでサポートするためには、第2の命令メモリが必要とされる。しかし、第2の命令メモリは格段に小さくすることができ、典型的にはメイン命令メモリの1/4〜1/16で十分である。
2.11.2 ローカルデータメモリ
ALUワード幅に関しては、データメモリは16ビット幅である。典型的な埋込アプリケーションでは、データメモリは2048〜8196エントリの大きさでなければならない。メモリには、アドレス発生器と、メモリ書き込み用のMem‐inレジスタと、メモリ読み出し用のMem‐outレジスタとを使用してアクセスする。
データメモリは、第1レベルキャッシュとしてメモリ階層構造に組み込まれる。キャッシュの選択は、タイムクリティカルなデータのタイミング挙動を予測可能にするために、ロックすることができる。
付加的なブロック移動コマンドによって、ALUデータパスを使用せずに、メモリ間転送と外部メモリとのデータ交換とを実現できる。
ブロック移動ユニットは、未だインプリメントされない。
2.12 ALU
2.12.1 ALU命令
ALUは基本的な計算機能を提供する。すべてのオペコードがすべての位置において有利または可能であるというわけではなく、命令メモリにおいて使用可能なオペコードビットのビット数は256に制限される。さらに、オペコードの許可されているソースおよびターゲット(表8を参照せよ)は、ロウ間ののALUと異なることができる。
キャッシュのインプリメンテーションに関する詳細は、使用中のインプリメンテーションに依存する。
Figure 2008530642
表8:ALUハードウェア命令サマリ
2.12.2 命令の可用性
以下の表に、ALU命令の可用性がまとめられている。行はALUを指定し、列は、許可されるオペランドソースおよびオペランドターゲットを指定する。
・(x):命令が使用可能である
・(o)アドレス発生器に対するオフセットソース+ベースポイントのうち1つ・(f)sregに書き込まれる結果フラグ
・(i)未だインプリメントされていないシャドウレジスタサポート
・(b)状態ポートへ転送されるビットは2つのみである
・(?)最終的なインプリメンテーションに依存する
2.12.2.1 算術命令、論理命令およびSFU命令
これらの命令が2つのソースおよび1つのターゲットを定義する。算術/論理オペコードには、 nop, not, , and, or, xor, add, sub, addc, subc, shru, shrs および shlが含まれる。
Figure 2008530642
表9:算術命令、論理命令およびSFU ALU命令
2.12.2.2 移動命令
この命令は、ソースをターゲットに移動する。
Figure 2008530642
表10:移動命令
2.12.2.3 ロード/記憶命令
この命令はALU間でデータを転送するか、またはレジスタファイルをメモリから転送しメモリへ転送する。このコピー命令によって、メモリ内においてソースおよびターゲットを定義することができる。アドレス発生器は前記ベースポインタ(bp0...bp7)のうち1つと、テーブルで指定されたオフセットとを使用する。オプションとして、ポストインクリメント/ポストデクリメントをap0およびap1とともに使用することができる。
Figure 2008530642
表11:メモリロード/記憶命令
プッシュ/ポップは、ポストデクリメントまたはプリインクリメントのいずれかを伴うスタックポインタとしてbp7/spを使用する。スタックからのポップにより、結果はレジスタに直接ロードされる。すなわち、mem‐outレジスタを使用せずに、ロード/記憶演算と同様にロードされる。
Figure 2008530642
表12:プッシュ/ポップ命令
2.12.2.4 プログラムポインタ変更命令
この命令は、プログラムポインタを暗示的に変更する。SETLNKオペコードをここに挙げる。その理由は、SETLNKオペコードはppを、次のrfl命令によって間接的に変更するからである。
Figure 2008530642
表13:lnkを介するジャンプ、呼び出し、呼び出し
Figure 2008530642
表14:リンクレジスタロード命令
戻りを行うためには、スタック、lnkレジスタまたは割込lnkレジスタintlnkを使用することができる。
Figure 2008530642
表15:サブルーティンおよびlnkからの戻り
2.12.2.5 ポート読み出し/書き込み命令
この命令はポートへの読み出しまたは書き込みを行う。RDSおよびWRSが、状態レジスタの2つのビットをポートから転送し、ポートへ転送する。
Figure 2008530642
表16:ポート読み出し/書き込み命令
2.12.2.6 雑命令
・hitはプロセッサを停止する。
・intenは割込をイネーブルする。
・intdisは割込をディスエーブルする。
Figure 2008530642
表17:雑命令
2.12.3 多義的なターゲット
複数のALUが1サイクル内で、同一のターゲットレジスタに書き込みを試行することができる。この場合、以下の優先度リストを適用する:
Figure 2008530642
表18:レジスタ書き込み優先権
最高優先度を有するオブジェクトのみがターゲットに書き込む。別のオブジェクトの書き込み試行は破棄される。
2.13 レジスタサマリ
以下のセクションの表には、FNC PAE内のレジスタがまとめられている。
2.13.1 汎用レジスタ
Figure 2008530642
表19:汎用レジスタファイル
2.13.2 アドレス発生器レジスタ
Figure 2008530642
表20:AGレジスタ
2.13.3 Mem‐inレジスタ、Mem‐outレジスタ
メモリレジスタは、FNCコアとメモリとの間の転送に使用される。メモリ(ldw,ldbu,ldbs)からの読み出しにより、mem‐outに結果値がロードされる。ALUは次のサイクルでレジスタにアクセスすることができる。レジスタへの書き込みは、記憶命令によって暗示的に実行される。Ramは次のサイクルで書き込まれる。
Figure 2008530642
表21:Memレジスタ
2.13.4 リンクレジスタおよびIntlnkレジスタ
lnkレジスタおよびintlnkレジスタはプログラムポインタを記憶する。レジスタを読み出すことはできない。
Figure 2008530642
表22:リンクレジスタ
2.13.5 状態レジスタ
状態レジスタに直接アクセスすることはできないが、第1のALUロウにおける条件付きステートメントはこのレジスタを使用する。
Figure 2008530642
表23:状態レジスタビット
2.13.6 ポート
I/Oポートの使用は、以下のように定義されている。
Figure 2008530642
表24:ポート
2.14 SFU
FNC‐PAEは最大16個のSFUをサポートし、これらはそれぞれ、最大7つの異なる定義のSFU命令を実行することができる。SFUはALUデータパスに並列して動作する。各命令は最大2つのSFUコマンドを含むことができる。各SFUコマンドは、ボトムロウにおいてal3またはar3をディスエーブルする。SFU演算の結果はボトムマルチプレクサへ供給され、ディスエーブルされたal3の結果は供給されない。SFU命令は無条件であり、各ALUパスがアクティブであるか、またはそうでないかで実行される。
SFUは、ソースとしてすべてのレジスタにアクセスできるが、ALU出力側にはアクセスできない。
表25に、SFU命令フォーマットが示されている。
ビットフィールド
ビット
Figure 2008530642
表25:SFU命令フォーマット
SFUは32ビットの結果を生成することができる(たとえば乗算)。この場合、結果は2つの隣接するレジスタに書き込みされ、ターゲットレジスタは偶数であることが要求される。結果の最下位の16ビットワードは偶数のレジスタに書き込まれ、最上位ワードは奇数のレジスタに書き込まれる。
16個のSFUではそれぞれ、コプロ命令=7がマルチサイクルSFUのために確保されている。(2.14.1を参照されたい)Copro#は、最大16個のSFUのうち1つを選択する。SFU0〜7は、PACT標準版のために確保されている。
2.14.1 マルチサイクルSFU
典型的にはSFUは、ALUデータパスによって決定されたタイムスロット(1サイクル)内で演算を処理することが要求される。SFUが複数のサイクルを必要とする場合(たとえば分割)、結果の使用の可否を識別する有効フラグをサポートしなければならない。パイプラインSFU演算は、複数のSFUコマンドを出すことによってサポートされる。結果が使用可能であることが有効フラグによって示され、かつ新規のSFUコマンドが出された場合、その結果はレジスタファイルに書き込まれる。SFUはすべて、レジスタファイルに使用可能な結果を書き込む"SFU Write Back" コマンド(CWB,CMD=7)をサポートしなければならない。
2.14.2 SFU 0
SFU 0は、16ビットオペランドに符号付き乗算および符号無し乗算を施す。その結果の最下位ワードは、指定されたターゲットレジスタに書き込まれる。最上位ワードは破棄される。
結果はそのターゲットレジスタにおいて、次のクロックサイクルで使用される。
Figure 2008530642
表26:SFU 0命令
2.14.3 SFU 1
SFU1は、ポートからのビットのブロックを読み出しおよび書き込みする特別関数を提供する。
ビットブロック入力(ibit)
SFUはポートから16ビットワードを読み出し、指定された数のビットをターゲットにシフトする(左シフト)。すべてのビットが「消費」完了されると、新規の16ビットワードが読み出される。
ビットブロック出力(obit)
ソースの指定された数のビットは、SFUに左シフトされる。16ビット全体がシフト完了されると直ちに、SFUはこのワードを出力ポートに書き込む。
Figure 2008530642
表27:SFU 1命令
メモリ階層構造
FNC‐PAEは、データ(DMEM)と符号(IMEM)とで別個のメモリを使用する。異なるコンセプトがインプリメントされる:
・DMEMは密結合されたメモリ(TCM)であり、プログラマによって明示的に制御される。
・IMEMは、4方向結合のキャッシュとしてインプリメントされ、プログラマに対してトランスペアレントである。
FNC‐PAEの外側の次の階層レベルは、SoCにおけるシステムインプリメンテーションに依存する。本マニュアルでは、面積とパフォーマンスとの間で良好な均衡性を提供する参考的設計を想定する。この参考的設計は、4方向結合キャッシュと、外部のGGDR3 DRAMに対するインタフェースとから成る。幾つかの機能PAEは汎用32ビットアドレス空間にマッピングされ、両インタフェースを共用する。インタフェースへのアクセスは公平に調停される。
Figure 2008530642
図4:メモリ階層構造
図4は、幾つかのPAEにわたるメモリ階層構造の基本的構造と、共用Dキャッシュと、共用Sysmemインタフェースとを示す。命令デコーダはローカルIRAMにアクセスし、ローカルIRAMは該ローカルIRAMのLRUアクセスメカニズムにしたがって内容を自動更新する。ロード‐記憶ユニットは、ローカルTCMまたは共用Dキャッシュまたは共用SYSMEMにアクセスすることができる。TCMはプログラムの明示的制御によって、ロード/記憶オペコードを使用して更新するか、またはブロック移動ユニットを使用して更新しなければならない。すべてのデータバスは256ビット幅である。したがって、256ビットオペコードを1サイクルで転送するか、ブロック移動ユニットを使用して最大8×16ビット(16ビット配列)を転送することができる。
注意点
DキャッシュおよびSYSMEMのインプリメンテーションは、本書の記載にはない。
しかし、SYSMEMは可能な限り高い帯域幅をサポートするように設計しなければならない。
(たとえば外部DRAMへのバースト転送を使用することによって設計する)。
Dキャッシュ調停:
・最高優先度はFNC0を有する。
・FNC1〜FNCnはラウンドロビンを使用する。
SYSMEM調停:
・最高優先度はFNC0を有する。
・FNC1〜FNC3の優先度は下降していく。
・FNC4〜FNCnはラウンドロビンを使用する。
2.15.11 ブートストラップ
定義する必要がある
2.15.1.2 ALU/RAM‐PAEアレイ(リ)コンフィギュレーションおよびFNC‐PAEブート
FNC‐PAEのうち1つのFNC‐PAEのブロック移動ユニットは、別のFNC‐PAEをブートするか、または、外部メモリから符号またはコンフィギュレーションデータをフェッチすることによって、ALU/RAM‐PAEのアレイを(再)構築することができる。別のデバイスが構築されている間は、ブロック移動ユニットは再構築またはブートすべきターゲットを選択する。それと同時に、ブロック移動ユニットはコンフィギュレーション出力信号を上昇して、ターゲットユニットに対してコンフィギュレーションサイクルを指示する。
2.16 XPPアレイへの組み込み
FNC‐PAEは、XPPアレイの偶数ロウのRAM‐PAEの近傍に接続される。FNC‐PAEは、XPPアレイデータパスを通る必要なく、FNC‐PAEコア間または外部コンポーネント間でデータを直接交換するためのポートを有する。
2.17 プランニングされている拡張
幾つかのフィーチャは未だインプリメントされておらず、以下のセクションでまとめる。
2.17.1 シャドウレジスタファイル
ppを変更するすべての命令はSDW(シャドウ)ビットを有し、ジャンプ後に使用すべきレジスタファイルを選択する。SDWが1にセットされている場合、シャドウレジスタファイルは使用されている。ret命令およびlnk命令に対しては、SDWビットは呼び出しサブルーティンによって復元される。
シャドウレジスタの使用は、未だインプリメントされていない。
2.17.2 遅延スロットにおけるオペコード実行
メモリがアクセスされている間、パイプラインステージに起因して遅延スロットを引き起こすオペコードが幾つか存在する。HPCは遅延スロットを発生しないが、ターゲット命令を次のサイクルで実行する。パフォーマンスが低いインプリメンテーションでLPCによって引き起こされる遅延スロットは、両立性の理由から使用すべきではない。IJMP0によって引き起こされる遅延スロットは、別のオペコードを実行するために使用することはできない。
jmpおよびcall(アセンブラステートメントJMKL,CALL)は、別のオペコードによって使用できる遅延スロットを1つ引き起こす。retは2つの遅延スロットを引き起こす。
遅延スロットをオペコード実行に使用することは、アプリケーションの種類でこのようなふるまいが許容される限りは、ジャンプ中のパフォーマンス低減を解消する。しかし、プログラムまたはスタックポインタを変更する演算は禁止される。さらに、RETによって引き起こされた第1の遅延スロット中は、メモリアクセスは不可能である。
現在のインプリメンテーションでは、遅延スロットを使用することはできない。
2.17.2.1 複数のセグメントにわたるジャンプ
FNCオペコードの定義は、最大4つのプログラムセグメントポインタ(psp)を使用してロングジャンプを行うためのビットを確保している。
このフィーチャは、将来の拡張のためにプランニングされている。
2.17.3 データセグメントポインタ
この命令フォーマットは、最大4つのデータセグメントポインタを定義するために使用される。セグメントを選択することにより、アドレス指定可能なメモリ空間が拡張される。
第3章
アセンブラ
機能PAEはアセンブラ言語でプログラミングすることができ、第2のプロジェクトフェーズではC言語でプログラミングすることができる。FNCアセンブラは、ハードウェアが提供するすべてのフィーチャをサポートする。したがって、高パフォーマンスのアプリケーションに最適な符号を書き込むことができる。アセンブラ言語は、習得するのが容易な幾つかの要素のみを提供する。標準的なCプリプロセッサを使用することにより、"#"シンボルが前に置かれたコマンドを定義することができる。たとえば #include は、#if...#endif を有する条件付きアセンブリである。
組み込まれたアセンブラ、シミュレータおよびデバッガであるFNCDBGは、プログラムをサイクル精度でシミュレートおよびテストするために使用される。デバッガは、すべてのALU出力、レジスタファイルおよびメモリ内容を示す。これは、プログラムにわたる単独のステップと、ブレークポイントの定義とを使用する。
3.1 一般的なアセンブラ要素
3.1.1 オペコード構文
アセンブラは大部分の命令に、典型的なツリーアドレス符号を使用する。ターゲットおよび2つのソースを定義することができる。複数のALU命令をマージして1つのFNCオペコードを形成することができる。右側のALUパスは "|" によって左側のALUパスから分離される。各FNCオペコードは、キーワード 'NEXT' によって終了される。
例である図5に、1つのオペコードの構造が示されている。ALUのロウが必要でない場合、オープンのままにすることができる(アセンブラはここで自動的にNOPを挿入する)。
この例には、OPI条件によって右側パスに分岐する典型的なオペコードが示されている。
Figure 2008530642
図5:アセンブラオペコード構造
カラム区切りおよび右側カラムに対する命令を、次の符号ラインに書き込むこともできる。このことにより、コメントの編集および書き込みを簡略化することができる(第3.6.4章を参照されたい)。カラム区切りが定義されていない場合、アセンブラはこの命令を左側カラム(左側パス)にマッピングする。プログラムポインタの変更が必要ない場合、アセンブラはHPCを自動的に、次のオペコードをポインティングするようにセットする。
3.1.2 コメント
コメントは次のものによって指定される。
・";" ラインの終了まで
・"//" ラインの終了まで
・/*コメント*/ ネスティングされたコメントが可能である。
3.1.3 数、定数およびエイリアス
数は、
・正負符号付き10進数
・構文0x0000を有する16進数
・構文0b0000000000000000を有する2進数
を有することができる。
定数定義の前に、キーワードCONSTが先行する。定数表現は、小括弧 ( ) 内になければならない。

CONST max_line_count = 96
CONST line_length = 144
CONST frame = max_line_count * line_lenght
CONST macroblock_last_element = ((8*8) - 1)
CONST frame =
CONST MB_I4x4 = 0
エイリアスの前には ALIAS が先行する。

ALIAS state = r6
ALIAS ctx = r7
ALIAS trnsTab = bp3
3.1.4 オブジェクトネーミング、デフォルトエイリアス
Figure 2008530642
表28:オブジェクトおよびレジスタのアセンブラネーミング
直接値の前には "#" が来る。直接値の許可されたビットの数はALU命令に依存する。
固有の命令に対してどの直接値が使用可能であるかの定義に関しては、表9〜表17を参照されたい。
3.1.5 ラベル
ラベルは命令メモリ内のアドレスを定義し、オペコード間であればどこでも定義することができる。ラベルはコロン ":" によって区切られる。命令JMPL,JMPS,HPC,LPCおよびCALLはラベルを参照する。さらに、データメモリセクションもラベルを使用してネーミングすることができる。データセクションに関しては、アセンブラはバイトアドレスをラベルに割り当て、プログラムメモリに関しては、アセンブラは絶対的なエントリを割り当てる(256ビットオペコードワード)。リセットおよび割込のために確保されたラベルの定義に関しては、セクション3.5を参照されたい。
オプションとして、ラベルへのジャンプ時に使用されるようにセットされたレジスタセットを、(RS0)および(RS1)のいずれかを有する指定子とすることができる。
3.1.6 メモリ
命令RAM
命令RAMはキーワードFNC_IRAM(0)によって初期化される。このパラメータ(ここでは0)は、命令メモリセクションの割当先であるFNC‐PAEコアを定義する。FNC_IRAM(0)は、別のRAMセクションが定義された場合にのみ指定すればよい(デフォルトはFNC_IRAM(0)である)。
データRAM
データRAMセクションは、キーワードFNC_DRAM(0)によって指定される。このパラメータ(ここでは0)は、命令メモリセクションの割当先であるFNC‐PAEコアを定義する。
さらに、データメモリセクションもラベルを使用してネーミングすることができる。セクションの長さは、データが初期化されない場合に、指定しなければならない。
RAMSECTION; BYTE [length] ?
or
RAMSECTION; WORD [length] ?
"?" シンボルは、未初期化データを指定する。長さは、バイトの数またはワードの数のいずれかである。ワードは、ビッグエンディアンバイト順序によって2つのバイトを確保する。MSBはアドレスビット0=0によってアドレス指定される。すなわち、最下位の記憶アドレスで記憶されている。
データセクションは、値リストを使用して初期化することもできる。
RAMSECTION: BYTE <list of values>2
現在、ビッグエンディアンがサポートされている。また、リトルエンディアンモードも可能にすることがプランニングされている。したがってFNCDBGは、ワード内の確保済みバイトの順序による初期化された該ワードを表示する。
2005年12月26日からのXDSDBGは、数の前に # シンボルを必要とする。
この値は、スペース文字によって分離される。第1の値は最下位アドレスにロードされる。
データセクションはデータRAMにおいて、定義の順序で確保されている。プログラムにおいてRAMセクションをポインティングするために、ラベルを使用することができる。

Figure 2008530642
注意点:
FNCDBGは未初期化データRAMセクションに、次のようなデフォルト値を満たす:
・0xfefe:確保されたデータセクション
・0xdede:自由なRAM
FNCDBGは右側の別個のフレームにおいて、メモリ内容を示す。(複数の)先行のサイクルで変更されたバイトまたはワードは赤色で強調されている。
Figure 2008530642
図6:FNCDBG RAM表示
2.7 条件付き演算
算術ALU命令および移動ALU命令は、条件のうち1つによって事前固定化することができる。どのALU命令に条件を指定できるかの制限に関しては、表9〜表17の「条件」列を参照されたい。
ALUの状態フラグは、当該ロウの下の同一のカラムのALUに対して評価に使用される。条件がTRUEである場合、このロウの後続のALUがイネーブルされる。条件が偽である場合、条件ステートメントを有するALUと当該カラムのすべての後続のALUは、指定されたソースに結果を書き込まない
ボトムカラム(al3,ar3)のALUの状態は状態レジスタに書き込まれ、次のオペコード中に第1のロウにおいてALUによる評価のために使用される。
OPI(opposite column inactive)条件およびOPA(opposite column active)条件は、反対側のカラムの動作状態に基づいて、アクティブ状態のカラムをディスイネーブルするのに使用される。ACTによって、ディスイネーブルされているカラムを再びイネーブルすることができる。
LCL(last column active left)およびLCR(last column active right)はそれぞれ、先行のオペコードのALUの最終ロウの状態を反映する条件として使用される。
このような条件は、3つのALUフラグから導き出される:
・ZE:結果がゼロであった
・CY:繰り上げ
・OV:あふれを伴う結果
いずれにせよ、ディスイネーブルされたALUは出力側で、別のALUによって使用可能な結果を供給する。
Figure 2008530642
表29:条件
3.1.8 プログラムフロー
FNC‐PAEは古典的な意味ではプログラムカウンタを有さず、その代わり、プログラムポインタが次のオペコードをポインティングしなければならない。アセンブラによって、次のオペコードを定義する3つのオペコードフィールドであるHPC,LPCおよびIJMP0をセットすることができる。このような分岐の最大分岐距離は±31である。アセンブラ命令は別個のソース符号ラインで定義しなければならない。
3.1.8.1 EXIT分岐
HPC命令、LPC命令およびJMPS命令は、カラムから出る際に次のオペコードを定義する。HPC,LPCまたはJMPSを指定できるのは、カラムごとに1回のみである。相対的ポインタは、±15の範囲内になければならない。この範囲外の分岐では、JMPLを使用しなければならない。
構文
・デフォルト:HPC,LPCまたはLMPSの指定が無い場合、HPCフィールドはpp+1をポインティングする。
・HPC HPCはpp+1をポインティングする。
・HPCラベル HPCはラベルをポインティングする。
・HPC #const HPCはpp+constをポインティングする。
・LPC LPCはpp+1をポインティングする。
・LPCラベル LPCはラベルをポインティングする。
・LPC #const LPCはpp+constをポインティングする。
・JMPS JMPSはpp+1をポインティングする。
・JMPSラベル JMPSはラベルをポインティングする。
・JMPS #const JMPSはpp+constをポインティングする。
ポインタの定義では、アセンブラは以下のスキームを使用する:
・ELSE分岐の指定(3.1.8.2を参照されたい)が優先権を有する。指定されたポインタは、このようなセッティングによって満たされる。
その後、アセンブラコードで指定された定義は、未使用のポインタに満たされる。カラムにおいて何も指定されていない場合、HPCがJMPSに未だ満たされていない場合にはHPCが使用され、そうである場合には、LPCがすでにJMPSに満たされていない場合、LPCが使用される。
以下の表(表30,表31)は、どのポインタにアセンブラが(設計時に)入るか、どのポインタがカラムの実行時間動作状態に基づいて使用されるかを指定する。「デフォルト」とは、出口ポインタがアセンブラコードで明示的に指定されていないことを意味する。右側カラムに対するセッティングは、左側カラムが非アクティブ状態でありかつ右側カラムがアクティブ状態である場合にのみ適用される。
注意点:
ELSE分岐による挙動に関しては、3.1.8.2を参照されたい。ELSE分岐が適用される場合、出口セッティングはオーバーライドされる。ロングジャンプ(JMPL)も出口セッティングをオーバーライドする。
Figure 2008530642
表30:EXIT挙動(1)
Figure 2008530642
表31:EXIT挙動(2)
3.1.8.2 ELSE分岐
ALU命令の中には、「ELSE」分岐を定義するALU命令が幾つか存在する。ELSE分岐は条件付きALU命令の結果を評価して、ターゲットまたはデフォルトによって指定されたように次のオペコードをポインティングするようにHPC,LPCまたはJMPSのうち1つを定義する(ターゲットが指定されていない場合)。どのALU命令にELSEが分岐を許可するかの制限に関しては、表9〜表17の「ELSE」列を参照されたい。
条件がTRUEである場合、ALUカラムはイネーブルされ、EXIT分岐に対するセッティングが使用される。
条件がFALSEである場合、ALUカラムはディスイネーブルされ、EXIT分岐に対するセッティングが使用される。
ALUカラムが先行の条件によってディスイネーブルされている場合、ELSE分岐は評価されない。
1つより多くのELSE分岐がオペコードで定義されている場合、ボトム指定が使用される。
ロングジャンプ(JMPL)は、両ELSE分岐がアクティブ状態である場合、これらのELSE分岐をオーバーライドする。
構文:
以下に定義されたようなELSEステートメントは、同一の命令ラインに書き込まれなければならない。
・!HPCラベル:先行の命令における条件がFALSEであった場合、HPCを使用する。
・!LPCラベル:先行の命令における条件がFALSEであった場合、LPCを使用する。
・!JMPCラベル:先行の命令における条件がFALSEであった場合、IJHP0を使用する。
表32は、ELSEステートメントに基づいてどのポインタを使用するかを示している。このラインにおける条件がTRUEである場合、EXIT分岐の指定が使用され(表30,表31)、条件がFALSEである場合、ELSEターゲット(e)が使用される。
Figure 2008530642
表32:ELSE挙動
3.1.8.3 ロングジャンプ
ロングジャンプはALU命令jmpによって実行され、直接値または別のソースをプログラムポインタに加算する。ロングジャンプ命令が実行される場合、HPC,LPCまたはIJMP0は無視される。
構文:
・JMPLソース:実際のプログラムポインタに対して相対的なジャンプターゲットとして、レジスタまたはALUまたは6ビット直接値を使用する。このソースはppに加算される。
・JMEL #const:相対的なジャンプターゲットとして直接値を使用する。この一定値はppに加算される。
注意点:
各オペコードごとに許可されるJMPL命令は1つだけである。
3.2 アセンブラ命令
アセンブラは大抵の場合、ALU命令を使用する。しかしハードウェア命令のうち幾つかは、プログラミングを簡略化するためにマージされる(たとえばMOVでは、mov、movr,movai)。ALU命令の他に、命令セットによってプログラムフローをオペコードレベルで制御することもできる(たとえば、次のオペコードをポインティングするためのHPCの定義。先行の章を参照されたい)。
オブジェクトに対するプレースホルダ:
・ターゲット:結果を書き込む先であるターゲットオブジェクト。ターゲット "-" は、レジスタファイルには何も書き込まれないがALU出力は使用可能であることを意味する。
・src:ソースオペランド。4ビットまたは6ビットの直接値とすることもできる。
・src0:左側ソースオペランド。4ビットまたは6ビットの直接値とすることもできる。
・src1:右側ソースオペランド。4ビットまたは6ビットの直接値とすることもできる。
・const:16ビットの直接値
・bpreg:AGREGのベースレジスタのうちの1つ
・ポート:I/Oポートのうちの1つ
すべてのALU命令がすべてのALUにおいて使用できるわけではない。制約に関しては、表9〜表17を参照されたい。
Figure 2008530642
表33:アセンブラALU命令(1)
注意点:movai(MOV‐,#CONST)は16ビットの直接値をALU出力側へ移動し、これは次のALUステージによって使用できる。
Figure 2008530642
表34:アセンブラALU命令(2)
Figure 2008530642
表35:アセンブラオペコード命令
Figure 2008530642
表36:アセンブラSFU 0命令
Figure 2008530642
表37:アセンブラSFU1命令
3.3 シャドウレジスタ
シャドウレジスタセットは、以下の手法のうち1つの手法によって選択される:
・CALL命令、JMPL命令の後ろに指定されるか、またはlnkレジスタがセットされている場合に指定されたRS0(標準的レジスタセット)は、レジスタセット1を選択する。例としてCALL RS0ラベル1は、標準的レジスタセットを選択する。RETは呼び出し側のルーティンのレジスタセットに戻る。
・CALL命令、JMPL命令の後ろに指定されるか、またはlnkレジスタがセットされている場合に指定されたRS1(シャドウレジスタセット)は、レジスタセット1を選択する。例としてCALL RS1ラベル1は、標準的レジスタセットを選択する。RETは呼び出し側のルーティンのレジスタセットに戻る。
・レジスタセットは、構文 label(RS0): または label(RS1): を有するラベルで指定することもできる。lnkレジスタへのMOVまたはADD、このラベルを使用するCALLまたはJMPLはすべて、ラベルによって指定されたレジスタセットに切り換えられる。RETは呼び出し側のルーティンのレジスタセットに戻る。
(RS0)定義および(RS1)定義のいずれかのHPC、LPCまたはJMPSは、ラベルをポインティングする。しかし、HPC Ink,LPC Ink,JMPS Ink によってレジスタセットが選択される。
3.4 入力/出力
スティミュラスをファイルで定義して、FNC‐PAE I/Oポートを使用して読み出すことができる。その逆に、ポートを介してデータをファイルに書き込むことができる。
現在は、入力ポートおよび出力ポート0のみがサポートされている。
ファイルは、コマンド行スイッチを使用して定義しなければならない。
・-inX <file>、Xはポート番号を指定する(現在は0)。
・-outX <file>、Xはポート番号を指定する(現在は0)。
同様にSFU命令IBITは、入力ビットフィールドをファイルから読み出す。OBITはビットフィールドをファイルに書き込む。
ファイルは、コマンド行スイッチを使用して定義しなければならない。
・-ibit <file>
・-obit <file>
スティミュラスファイル内の番号は16ビットに適合しなければならず、ホワイトスペース文字によって分離しなければならない。10進数および16進数(0×0000)の図形を指定することができる。
3.5 リセットベクトルおよび割込ベクトル
アセンブラは、プログラムメモリにアドレス0x0000でロードされたリセットおよび割込ベクトルを定義するデフォルトモジュール "FNC DISPATCHER" を生成する。これは、リセットおよび最大7つの割込サービスルーティンのエントリポイントへのロングジャンプのリストから成る。
Figure 2008530642
アセンブラは分岐アドレスを、表38に定義されたような確保済みの各ラベルに挿入する。
Figure 2008530642
表38:確保済みラベル
FNC_RESET:ラベルは必須であり、ISRルーティンのエントリポイントは任意である。
割込ルーティン(ISR)の呼び出し後は、別の割込はディスエーブルされる。ISRはEl命令によって、ネスティング化された割込に対して、またはRETIの実行前に、別の割込をイネーブルしなければならない。
注意点
ISRは、スタックまたは別の手段のいずれかを使用して、変更されたレジスタすべてを明示的に保存し、回復しなければならない。
割込要求は、HPCを使用するオペコードでのみ許容される。したがって、LPCまたはJMPSを使用するオペコードには割込することができない。それゆえ、ループは常に、存在する場合にはHPCおよびLPCを使用しなければならない。
3.6 例
以下の例は、機能PAEの基本的なフィーチャを示す。この例では、アーキテクチャのハードウェアフィーチャを示すためにエイリアスを定義しない。
3.6.1 例1
これらの例はFNC‐PAEフィーチャを示すためだけのものであり、幾つかの例は異なって最適化または書かれている場合があるが、このことは例の対象ではない。
これらの例は、条件無しの基本的な並列演算を示す。
r1...r5およびe0...e2の内容は累算されてr0の結果になる。第1のオペコードは、レジスタに定数をロードする。
第2のオペコードはレジスタを累算し、結果をr0に書き込む。
EREGSはロウ0においてソースとして使用できないので、r1...r4が第1のロウで加算される。
Figure 2008530642
3.6.2 例2
この例は、命令レベル(すなわちオペコード内)の条件をどのように使用するかを示す。
この例では、r1およびr2で定義された下限および上限で、レジスタr0内の値を区切る。したがって、結果は6ビットの左シフトにより、64を乗算される。
Figure 2008530642
図7:命令レベルフローチャート
この演算は、図7に示されたように2つの比較と判定とを必要とする。まず最初に、r0が上限r2と比較される。このことに関しては、r2−r0の減算を行う。結果が0以上である場合(すなわちr0≧上限)、カラムLはディスイネーブルされ、カラムRはOPI条件によってイネーブルされる。その後、右側パスはr2(上限)をr0に移動する。
第2の比較も左側パスで行わなければならない。r1をr0から減算し、結果が下限以上である場合(すなわちr0≦下限)、r1はr0に移動される。そうでない場合、右側パスがイネーブルされ、さらなる演算は実行されない。図8は実行時間中の挙動を示す。陰影付きのALUはイネーブルされており、"-" は、これらのALUがディスイネーブルされていることを意味する。
Figure 2008530642
図8:異なる3つの実行時間パス(陰影を有するブロックがイネーブルされている)
このコードは、r0に関して3つの異なる値を有する挙動を示す。アセンブラソースで明示的に定義されるNOPオペコードは省略することができる。NOPがロウで定義されていない場合、アセンブラはこれらを自動的に挿入する。たとえば第2のOPIは必要ではない。というのも、NOPは何もしないので、NOPをアクティブ化する必要がないからである。我々は、一般的な原理を図解するためだけにNOPを使用する。
Figure 2008530642
3.6.3 例3
この例では、命令レベル(すなわちオペコード内)の条件をどのように使用するか、HPCの条件付き指定によってループをどのように定義するかを示す。さらに、FNC‐PAEコードのコンパクトさも示す。
この例はr0およびr1における2つの8ビット番号を連続的に乗算し、r2において結果を得る。ループカウンタはr7であり、これは0になるまで減分される。ループカウンタが0でない場合、!HPCループ(ELSE HPC ループ)ステートメントは、ループターゲットアドレスにオペコードのHPCエントリを使用することを指定する。ループカウンタを減分するSUBの結果がゼロでなかった場合、HPCはラベル "loop" をポインティングする。そうでない場合(ループの後に)、オペコードのLPCエントリは次のオペコードをポインティングする。それにしたがって、アセンブラはHPCビットおよびLPCビットをロードする。分岐が次のオペコードをポインティングする場合、LPCは明示的に定義しなければならない。ACT条件付きステートメントは、左側カラムを再アクティブ化するために必要である。こうすることによってループカウンタは、ゼロが繰り上げにシフトされた場合に処理される。このようにして、ADD命令だけは省略される。
Figure 2008530642
アセンブラはHPCの絶対値を使用する。物理的な側では、HPCポインタの生成された6ビットは現在のPPに対して相対的である。
3.6.4 例4
この例では、データメモリにアクセスする手法、FNCDBGにおける可視化、およびアドレスポインタap0およびap1の自動増分の挙動を示す。この例でも、"|" 区切りを次のラインで使用することが可能であることが示されている。このことにより、左側カラムと右側カラムとを別個に注釈するのを簡略化する。
タスク
第1のループで、データメモリには択一的に、0x1111および0x2222(initloop)のいずれかがロードされる。
第2のループ(変更ループ)はメモリの内容を読み出し、該内容を0x1111と比較する。0x1111が読み出された場合には0x9999が足され(結果0xaaaa)、そうでない場合には低いバイトが0x00にセットされる。
インプリメンテーション4a
例4aのインプリメンテーションは、メモリセクションをバイトとして定義する。デバッガは、左側の最小バイトのアドレスから増大する順にメモリライン内のバイトを示す。
ベースレジスタbp0はDemoRam0をポインティングする。アドレス発生器はbp0をベースアドレスとして使用し、オフセットr3を足してメモリアドレスを構成する。メモリへの書き込みにはバイト記憶STBが使用され、r3は1増分しなければならない。r3のオフセットアドレスビット1はチェックされ、次のループに書き込むべき値はr0に移動される。変更ループ
メモリからの読み出しはワードアクセスによって行われ、2つのステップを必要とする。LDW命令の結果は、1サイクル後にmemレジスタに使用可能である。したがって、第1のループ中にmemにおいて使用可能な第1の結果を得るためのループを行う前に、1つのLDWを開始しなければならない。ap0読み出しポインタおよびap1書き込みポインタは2増分される。比較演算は第1のオペコードで実行され、その結果はループ内の第2のオペコードに書き込まれる。
Figure 2008530642
Figure 2008530642
インプリメンテーション4b
例4bのインプリメンテーションは、メモリセクションをワードとして定義する。デバッガは、左側の最小ワードのアドレスから増大する順にメモリライン内のワードを示す。リトルエンディアンモードを使用するので、デバッガは右側に正確に整列されたLSBを示す。
メモリはバイトアクセスを使用してロードされる。ap0のアドレスビットはチェックされ、22または11のうちいずれを次のサイクルで使用すべきかの決定はアドレスビットに依存する。我々はap0のポストインクリメントモードを使用する。LDBが使用されるので、ap0は1増分される。増分されたap0の値は現在のサイクル中に使用することはできず、ap0が読み出され、ビット1がチェックされる前に1が値に加算される(0x10とのAND)。ループにわたってステップすると、各ワードのLSBが最初に書き込まれることが理解できる。
変更ループ
メモリからの読み出しは例4aと同様に、ワードアクセスによって行われる。しかし、ap0読み出しポインタおよびap1書き込みポインタのポストインクリメントモードが使用される。我々はLDJVまたはSTWのいずれかを使用するので、ポインタは2増分される。
Figure 2008530642
Figure 2008530642
3.6.5 例5
以下の例は、HPC、LPCまたはIJMP0ポインタを使用する分岐の使用を示す。分岐の図解ではループは、一定値と比較されるr0を増分する。例5aでは、完全なアセンブラコードが示されている。例5b〜5dは、分岐を制御するためのオペコードのみを示す。
Figure 2008530642
例5a
左側パスと右側パスとでHPCアセンブラステートメントおよびLPCアセンブラステートメントを使用する2つのターゲット分岐を示す。アクティブ状態のパスのHPCステートメントないしはLPCステートメントのみが分岐に使用される。LPCは付加的なサイクルを必要とする。というのも現在のインプリメンテーションは、1つの命令メモリしか有さないからである。ループエンドラベルでの命令は、16ビット幅のジャンプを行うためのJMPLループALU命令を使用する。この例では、条件無しのHTCループも使用することができる。
ハードウェア背景
アセンブラはHPCポインタをdest0にセットし、LPCをdest1にセットする。さらにアセンブラは、左側パスがイネーブルされた場合にHPCポインタを選択するようにオペコードのEXIT‐Lフィールドをセットし、右側パスが出口においてイネーブルされた場合にLPCポインタを選択するようにEXIT‐Rフィールドをセットする。
例5b
ELSE分岐を使用する2つのターゲット分岐と、LPCを使用する左側パスの出口とを示す。この比較が等しい場合、左側パスはアクティブ化され、LPC dest0ステートメントは評価される。すなわち、分岐はdest0に行く。そうでない場合には、HPC dest1が使用され、ジャンプターゲットはdest1となる。
ハードウェア背景
アセンブラはポインタHPCをdest1にセットし、LPCをdest0にセットし、さらに、LPCを選択するようにオペコードのEXIT‐Lフィールドをセットする。条件がTRUEである場合、EXIT‐Lフィールドは次のオペコードをポインティングするポインタとしてLPCを選択する。というのも、左側パスがイネーブルされているからである。条件がNOT TRUEである場合、ALU命令のELSEビットはHPCポインタを選択する。
注意点:
LPC dest0ステートメントが省略される場合、アセンブラはデフォルトごとに、次のオペコードをポインティングするようにLPCをセットする(label dest_next)。
Figure 2008530642
例5c
EXIT分岐とELSE分岐とを使用する3つのターゲット分岐を示す。第1の比較によって、r0≧2である場合には左側パスがイネーブルされ、LEC dest2が評価され、LPCポインタが使用される。そうでない場合には、右側パスがアクティブ化される。第2の比較(ALU ar1)によって、r0=1である場合には右側パスがイネーブルされ、JMPS dest1が評価され、ポインタIJMP0が使用される。そうでない場合には、!HPC destが評価され、分岐はHPCポインタを使用してdest0に行く。
ハードウェア背景
アセンブラはHPCポインタをdest0にセットし、LPCをdest2にセットし、IJMP0をdest1にセットする。EXIT‐Lフィールドは、左側パスがアクティブ状態である場合にLPCを使用することを指定する。EXIT‐Rフィールドは、右側パスがアクティブ状態である場合にIJMP1を使用することを指定する。ALU ar1に対するNOP命令のELSEビットは、条件がNOT TRUEである場合にHPCを使用することを定義する。
実行時間中、ハードウェアはどのポインタを使用すべきかを決定しなければならない。まず、条件がNOT TRUEである場合、elseビットはチェックされる。そうでない場合、イネーブルされたパスはそれぞれEXIT‐LまたはEXIT‐Rを使用してポインタを選択する。
注意点:両パスがイネーブルされている場合、HPC‐LPC‐IJMP0(最下位)の順の優先度が適用される。
Figure 2008530642
3.6.6 例6
この例は、ファイルからどのように読み出しおよび書き込みするかを示す。2つの種類のポートが存在する。汎用ストリーミングポートと、IBIT命令およびOBIT SFU命令に対する特別なポート。両タイプが以下の例に挙げられている。これらのファイルは、以下のコマンド行によって指定される:
xfncdbg -in0 infile.dat -out0 outfile.dat -ibit ibitfile.dat -obit obitfile.dat exa6.fnc
Figure 2008530642
スティミュラスファイルは以下のように定義される:
第1のループが8つの値をファイルから読み出し、10を加算して、結果を outfile.dat にライトバックする。
第2のループは、ビットフィールドを抽出するためにibit機能をどのように使用するかと、可変数のビットをどのように連続的に読み出すかということを示す。
入力ビットストリームは連続した16ビットワードにパッキングされ、この16ビットワードの第1のビットは、MSBに右寄せされている。ビットストリームの最初の4ビットは、読み出さなければならない次のビットの数を定義するコマンドである。コマンドワード=0は、ループを終了する。iビット命令のSrc0は常に#0にセットされる。図9は、サンプル ibitfile.dat のシーケンスを示す。この例では、抽出されたビットは累算される。
Figure 2008530642
図9:図6のiビットシーケンス
Figure 2008530642
3.6.7 例7
この例では、スタックおよびサブルーティンの呼び出しおよび戻りの使用を示す。呼び出し側ルーティンは、RAMをポインティングするポインタ Dataram を増分し、これはサブルーティンへパスされる。サブルーティンはレジスタを保存させた後、スタックからポインタを引き出す。サブルーティンは8つの連続したワードの平均値を計算し、その結果を、ポインタがパスされたのと同位置でスタックにライトバックする。サブルーティンは、影響されたすべてのレジスタをスタックに保存し、戻りの前にこれを回復する。一般的に言うと、古典的なマイクロプロセッサ設計との差はない。
注意点
サブルーティンは大抵の場合、スタック処理およびレジスタの保存でオーバーヘッドを有する。したがってサブルーティンをタイムクリティカルなアルゴリズムの内部ループで使用することは、注意して評価しなければならない。リンクレジスタlnkを使用すると高速な手段が実現されるが、lnkは同時に1回しか使用することができない。
表39は、この例のスタックの使用を示す。
Figure 2008530642
表39:例7のスタック使用
Figure 2008530642
Figure 2008530642
Figure 2008530642
付録A
FNCデバッグベータ(2005年10月28日)
以下のピクチャは、FNCDBG.EXEの現在の状態の注釈付きビューを示す。
デバッガは、初期ファイルを有するコマンド行によって引き起こされる。Cプリプロセッサをシステムにインストールしなければならない。
Figure 2008530642
図10:FNC‐PAEデバッガ(ベータ)
先行して実行されたオペコードのフレームには、以下のものが示されている:
・緑色:処理された命令
・赤色:ディスエーブルされたALU命令。この結果はいずれにせよ、ALU出力側で得られる。
・----:NOP
ブレイクポイントは、オペコードを右マウスクリックすることによってトグルすることができる。
以下の添付書類2は、開示目的で依拠すべきでありかつ本願の不可欠部分として公開すべきである本願の一部分を構成する。
添付書類2
序文
IS‐95は2つのPN発生器を使用して、約1.25MHzの物理的な帯域幅にわたって信号出力を均質に拡散する。逆のリンクにおけるこのようなPN拡散はさらに、近似的な直交性も提供するので、各携帯電話機からの信号間の干渉も最小にする。このことにより、使用可能な周波数の帯域を汎用的に再利用することができ、このことがCDMAの利点であり、ハンドオフをソフトにし、よりソフトにすることができる。
擬似ランダムノイズ(PN)シーケンスは2進数のシーケンスであり、たとえば±1であり、ランダムであるように見えるが、実際は完全に決定論的である。このようなシーケンスは、公正な「コイントス」経験に基づいて生成されるのと同じ状態で該シーケンスにバイナリ値および同じバイナリ値のグループまたはランが生じるという点ではランダムに見える。このような経験では、各ヘッドは1つのバイナリ値となり、末尾は別の値となる。PNシーケンスはこのような経験から生成されているかのように見える。PNシーケンスを生成するために設計されたソフトウェアデバイスまたはハードウェアデバイスは、PN発生器と称される。
PN発生器は典型的には、N個のカスケード接続されたフリップフロップ回路と、特別に選定されたフィードバック回路とから成る。以下にPN発生器が示されている。
Figure 2008530642
フリップフロップ回路はこのように使用される場合にはシフトレジスタと称される。というのも、フリップフロップに供給された各クロックパルスは各フリップフロップの内容を右にシフトさせるからである。このようなフィードバック接続により、最左側のフリップフロップへの入力が供給される。N個のバイナリステージでは、シフトレジスタが有することのできる異なるパターンの最大数は2Nである。しかし、すべてのバイナリ値がゼロである状態(all-binary-zero)は許容されない。その理由は、このようにするとシフトレジスタの残りの状態のすべてと該状態の出力はバイナリゼロになってしまうからである。モジュール2加算器に入力されるフリップフロップの数が偶数である場合、すべてのバイナリ値が1である状態は、バイナリ1が繰り返される同様の問題を引き起こさない。したがって、PNシーケンスの周期は2N−1であるが、IS‐95は特別なバイナリゼロを導入して2Nの周期を達成する。ここでは、N=15である。
ここに示されているように001状態のレジスタから開始して、次の7つの状態は100,010,101,110,111,011、その後再び001となり、この状態が繰り返され続ける。最右側のフリップフロップから得られる出力は1001011であり、これが繰り返される。ここに示された3段のシフトレジスタでは、周期は23−1であるかまたは7である。
PNシーケンスは一般的に、2N/2個のバイナリ1と(2N/2)−1個のバイナリゼロとを有する。たとえば、第23−1周期のPNシーケンス1001011は4つのバイナリ1と3つのバイナリゼロとを有する。さらに、バイナリ1とバイナリゼロとがグループまたはラン内で繰り返される回数も、PNシーケンスが実際にコイントス経験によって生成されたのと同じような状態に見える。
取り出してモジュール2加算器に供給しなければならないフリップフロップは、1次の既約多項式または因数分解不可の多項式と称される同定された特定のバイナリ多項式を有する上級代数によって決定される。このような多項式は、フィードバックのタップを仕様するのに使用される。たとえばIS‐95は、同相のPN発生器を特徴的な以下の多項式に基づいて形成しなければならないことを規定する。
PI(x)=x15+x13+x9+x8+x7+x5+1(1)
ここで、15段のシフトレジスタを視覚化する。ここでは最右側の段は0で示されており、左側に向かって連続して1,2,3等が段に与えられ、最終的には最左側の段は14が与えられている。したがって、数式(1)における15より小さいべき指数は、段0,5,7,8,9および13を取り出してモジュール2加算器で加算しなければならないことを示す。加算器の出力は最左側の段に入力される。シフトレジスタPNシーケンス発生器を以下に示す。
Figure 2008530642
PN拡散は、帯域幅にわたって信号の出力を分布または拡散するためにPNシーケンスを使用することである。この帯域幅は、信号自体の帯域幅より格段に大きい。PN逆拡散は、信号の幅広いPN拡散帯域幅を制限して、該信号を格段に狭い帯域幅で再構築するプロセスである。
注意点:PNシーケンスを使用して信号出力を幅広い帯域幅に拡散するには、少なくとも2つの手法が存在する。1つは、いわゆる周波数ホッピング(FH)である。ここでは、狭帯域の信号の中心周波数を、PN符号を使用して擬似ランダムシフトする。第2の手法はいわゆる直接拡散(DS)法である。DSでは、実際には狭帯域の信号に広帯域のPNシーケンスを乗算することによって、信号出力を広い帯域幅にわたって拡散する。広帯域の信号と狭帯域の信号とが乗算されると、得られる積信号は、広帯域信号の帯域幅にほぼ等しい帯域幅を有するようになる。
IS‐95ではDS PN拡散を使用して、幾つかの信号伝送上の利点を達成する。このような利点には、帯域幅を拡大してより多くのユーザを受け入れられるようにできること、PNシーケンスの近似的に直交するセグメントを生成して、逆方向リンクにおける複数のアクセスの分離と汎用的な周波数の再利用とを実現できること、干渉に対するトレランスが増大すること、ならびに、RAKE受信器によってマルチパスを解いて建設的に組み合わせることが可能であることが含まれる。マルチパスは、マルチパス成分信号間のマルチパス遅延が信号帯域幅の逆数より大きい場合にのみ分解することができ、かつ建設的に組み合わせることができる。拡散ひいては信号の帯域幅の拡大により、比較的小さい遅延差を有する信号を分解することが可能になる。
信号s(t)が19200sym/secのシンボルレートを有すると仮定する。各シンボルは1/19200または52.0833μsecの持続時間を有する。s(t)が1.2288Mchips/secのレートでのチップ交代で、PNシーケンスPN(t)にモジュール2加算された場合、各シンボルは1.2288×52.0833個のPNチップまたはちょうど64個のPNチップを有する。信号の帯域幅は、64〜64×19200倍増大されるか、または1.2288MHz増大される。受信された拡散信号はPN(t−t)s(t−t)の形態を有する。受信側では、送信側で使用されるPN発生器の複製品がシーケンスPN(t−x)を生成し、積を形成する。変数xがtに等しく調整される場合、PN(t−x)PN(t−t)s(t−t)はPN(t−t)2s(t−t)に等しくなり、所望のシンボルストリームs(t−t)に等しくなる。というのも、PN(t−t)2は常に1に等しいからである。ここでは逆拡散を図解する。
典型的なPN符号長
IS‐95では、2つの異なる種類のPNシーケンスが使用される:
Figure 2008530642
PAEビット論理拡張
XPP‐III PAEは、データパス内の1つの行の論理エレメントをサポートする。最大3つのレジスタがビットロジックライン(BLL)にデータを供給することができ、結果は最大2つのレジスタに記憶することができる。
個々のビットロジックエレメントには3つの入力側と2つの出力側のルックアップテーブル(LUT)が含まれる。
Figure 2008530642
高いシリコン効率を実現するためには、BLL内の各ビットを同様に処理する。このことは、LUT全体のラインに必要とされるメモリセットは1つだけであることを意味する。
下記の図は、PN発生器で使用されるようなBLLのコンフィギュレーションを示す。
Figure 2008530642
PAEは最大4つのBLLコンフィギュレーションを記憶し、このBLLコンフィギュレーションには、オペコードと同様のコマンドbl1,bl2,bl3およびbl4を使用してアクセスすることができる。
下記の図は、XPP20プロセッサにおけるビットレベル拡張の構成を示す。メモリPAEに隣接する副次的ALU‐PAEがBLL拡張を提供する。面積効率上の理由のため、コアALU‐PAEはこのようなインプリメントされた拡張部を有さない。
Figure 2008530642
PN発生器インプリメンテーション
各LUT内にはモジュロ2加算器が構築されている。各LUTは同様に構成されているので、LUT内にはさらにマルチプレクサもインプリメントされ、これによって加算器は、使用される多項式にしたがってバイパスされる。下記のピクチャは、LUTの概略図とコンフィギュレーション関連のデータとを示す。
Figure 2008530642
Q0はフラグレジスタFUに供給される。フラグレジスタFUは、生成されたビットを記憶するために使用され、使用されるアルゴリズムをイベントネットワークにわたって分布させる。
レジスタR0にはPNデータが記憶されており、R1はこの例では、各LUTでマルチプレクサのセッティングによって実施例に示されているように多項式を定義するpを含む。
Figure 2008530642
複数回の連続した繰り返しにより、PNシーケンスは発生する:
Figure 2008530642
このように非常に基本的な手法により、最大でALUのワード長のPNシーケンスが生成される。
長いPNシーケンス
比較的長いシーケンス(たとえばIS‐95の長いPN符号は242である。)の場合、生成は多重的なパートに分割しなければならない。XPP‐IIIは、24ビット幅のALUを有するソフトウェア定義ラジオアプリケーションのためにプランニングされたものであり、42ビット長のPNシーケンスを計算するためには2つの処理ステップが必要である。
Figure 2008530642
第1のステップでは、PNシーケンスの比較的下位の半分を計算する。繰越フラグ(C)は、シーケンスの比較的上位の半分の最下位ビットをシフタに移動するために使用される。FV3は、モジュロ2加算器の和をより上位の半分の処理に繰り越しするために使用される。
Figure 2008530642
比較的上位の半分の処理は、最下位を繰り越しフラグ(C)に移動し、FVフラグをモジュロ2加算器チェーンのためにFV3フラグを使用する。
必須条件である場合には、ここに図示された演算は、ループ開始を処理する前に、事前ロードを必要とする。
アルゴリズム例が下記に挙げられている。r0,r1,r2,r3はコンフィギュレーションによって定数として事前設定されている。r0およびr1はPN発生用のベース値を有し、r2およびr3はPN処理の高次の部分と低次の部分とに対する多項式定義を含む。r1は右シフトされることにより破壊されるので、直ちにコンフィギュレーションメモリから再ロードされる。
sr r1, r1; # Preload C R1 scratch
load r1, <const>;
loop: bl1 r0, r0, r2; # process lower half with key r2
bl2 r1, r1, r3; # process higher half with key r3
write fu3;
jmp loop;
このコードは、コンフィギュレーションメモリにおいて7つのエントリを必要とする。
本発明によるプロセッサ(XMP)のデータパスの基本的な構成を示す。 図1のALUステージ構成体0130のプログラムフロー制御が示されている。 1つの実施形態を示す。 ALUステージ構成体0401(上記の実施形態における0101〜0104に相応する)が多重化によって2重化され、0402={0101a〜0104a}から0403={0101zz〜0104zz}までのzz‐ALUステージ構成体の分岐のためにインプリメントされている相応の構成体を示す。 XMPプロセッサモジュールの全体的構成を示す。 オペコードフェッチユニットのインプリメンテーションを示す。 複数のXMPの相互接続と、XPPとの結合とを示す。 異なる要素の構成が示されている。 本発明によるデータパスの構成の詳細を示す。 2倍精度の演算を実現するための構成が開示されている。 異なる符号命令を使用する択一的なインプリメンテーションが示されている。 本発明の一例を示す。 ALU間での状態情報の交換を示す。 高パフォーマンスの実施形態を示す。

Claims (6)

  1. ALUの多次元のアレイを有するデータ処理装置において、
    少なくとも2つの次元を有し、次元におけるALUの数は2以上であり、
    該ALUの数は、相応のアレイ内のALUのうち少なくとも幾つかの間でレジスタに起因するレイテンシーを伴わないようにデータを処理するように適合されていることを特徴とする、データ処理装置。
  2. 少なくとも1つのALUチェーンが、該チェーンのALUステージ間にレジスタを有さずに構成されている、請求項1記載のデータ処理装置。
  3. 少なくとも2つのALUパイプラインを有し、
    異なるパイプラインに存在するALU間に、他方のパイプラインにおける状態および/または条件を示す信号が設けられている、請求項1または2記載のデータ処理装置。
  4. 少なくとも1つのALU、有利にはパイプライン内のALU、有利にはパイプライン内の各ALU、有利には各パイプライン内の各ALUは、条件を評価して該条件に応答して演算を実行し、かつ/または該条件に応答して演算を実行しないように構成されており、
    該条件の評価および該条件に応答する実行または非実行は、有利には1つのクロックサイクルで行われる、請求項1から3までのいずれか1項記載のデータ処理装置。
  5. 少なくとも1つのユニット、有利にはALUは、
    別のユニットの評価に応答して、有利には同一または隣接するパイプライン内の1つのユニットに応答して、有利には同一または上流のステージにおける1つのユニットに応答して、演算を実行するかまたは実行しないように構成されている、請求項4記載のデータ処理装置。
  6. 擬似ノイズパターンを生成するためのデータ処理装置において、
    セルの再構築可能なアレイの一部を構成する複数のセル、またはセルの再構築可能なアレイとして使用されるように構成された複数のセルと、
    少なくとも1つの拡張部
    とを有し、該少なくとも1つの拡張部は、
    レジスタと複数のビットロジックラインとを有し、とりわけLUTのストライプを有し、
    各LUTはそれぞれ同一の内容を有し、かつ/または有利には3:2LUTであることを特徴とする、データ処理装置。
JP2007553552A 2005-02-07 2006-02-06 低レイテンシーの大量並列データ処理装置 Pending JP2008530642A (ja)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
DE102005005766 2005-02-07
EP05003174 2005-02-15
DE102005010846 2005-03-07
EP05005832 2005-03-17
DE102005014860 2005-03-30
DE102005023785 2005-05-19
EP05019296 2005-09-06
PCT/EP2006/001014 WO2006082091A2 (en) 2005-02-07 2006-02-06 Low latency massive parallel data processing device

Publications (1)

Publication Number Publication Date
JP2008530642A true JP2008530642A (ja) 2008-08-07

Family

ID=36112636

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007553552A Pending JP2008530642A (ja) 2005-02-07 2006-02-06 低レイテンシーの大量並列データ処理装置

Country Status (4)

Country Link
US (1) US20090031104A1 (ja)
EP (1) EP1849095B1 (ja)
JP (1) JP2008530642A (ja)
WO (1) WO2006082091A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010117806A (ja) * 2008-11-12 2010-05-27 Toshiba Corp 半導体装置、および、半導体装置によるデータ処理方法

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
US8117137B2 (en) 2007-04-19 2012-02-14 Microsoft Corporation Field-programmable gate array based accelerator system
US8131659B2 (en) * 2008-09-25 2012-03-06 Microsoft Corporation Field-programmable gate array based accelerator system
US9152427B2 (en) 2008-10-15 2015-10-06 Hyperion Core, Inc. Instruction issue to array of arithmetic cells coupled to load/store cells with associated registers as extended register file
WO2011151000A1 (en) 2010-04-30 2011-12-08 Pact Xpp Technologies Ag Method and device for data processing
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
TWI548994B (zh) 2011-05-20 2016-09-11 軟體機器公司 以複數個引擎支援指令序列的執行之互連結構
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9354880B2 (en) * 2012-04-27 2016-05-31 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Processing device for high-speed execution of an xRISC computer program
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9183174B2 (en) * 2013-03-15 2015-11-10 Qualcomm Incorporated Use case based reconfiguration of co-processor cores for general purpose processors
JP2016178229A (ja) 2015-03-20 2016-10-06 株式会社東芝 再構成可能な回路
US10372358B2 (en) 2015-11-16 2019-08-06 International Business Machines Corporation Access processor
US11803507B2 (en) 2018-10-29 2023-10-31 Secturion Systems, Inc. Data stream protocol field decoding by a systolic array
RU199929U1 (ru) * 2019-12-31 2020-09-29 Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский государственный университет геодезии и картографии» Устройство для обработки потоков пространственно-временных данных в режиме реального времени
CN113760394B (zh) * 2020-06-03 2022-05-13 阿里巴巴集团控股有限公司 数据处理方法、装置、电子设备及存储介质
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
CN117667220B (zh) * 2024-01-30 2024-05-17 芯来智融半导体科技(上海)有限公司 指令处理方法、装置、计算机设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6364178A (ja) * 1986-08-29 1988-03-22 インタ−ナショナル・ビジネス・マシ−ンズ・コ−ポレ−ション 画像処理システム
JPH08212168A (ja) * 1995-02-03 1996-08-20 Nippon Steel Corp アレイプロセッサ
JPH11296345A (ja) * 1998-04-08 1999-10-29 Hitachi Ltd プロセッサ
JP2002544587A (ja) * 1999-05-12 2002-12-24 アナログ デバイセス インコーポレーテッド デジタル信号プロセッサ計算コア
JP2004506261A (ja) * 2000-06-13 2004-02-26 ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト パイプラインctプロトコルおよびct通信

Family Cites Families (111)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2067477A (en) * 1931-03-20 1937-01-12 Allis Chalmers Mfg Co Gearing
GB971191A (en) * 1962-05-28 1964-09-30 Wolf Electric Tools Ltd Improvements relating to electrically driven equipment
US4498172A (en) * 1982-07-26 1985-02-05 General Electric Company System for polynomial division self-testing of digital networks
US4566102A (en) * 1983-04-18 1986-01-21 International Business Machines Corporation Parallel-shift error reconfiguration
US4571736A (en) * 1983-10-31 1986-02-18 University Of Southwestern Louisiana Digital communication system employing differential coding and sample robbing
US4646300A (en) * 1983-11-14 1987-02-24 Tandem Computers Incorporated Communications method
US4720778A (en) * 1985-01-31 1988-01-19 Hewlett Packard Company Software debugging analyzer
US5225719A (en) * 1985-03-29 1993-07-06 Advanced Micro Devices, Inc. Family of multiple segmented programmable logic blocks interconnected by a high speed centralized switch matrix
US4720780A (en) * 1985-09-17 1988-01-19 The Johns Hopkins University Memory-linked wavefront array processor
US4910665A (en) * 1986-09-02 1990-03-20 General Electric Company Distributed processing system including reconfigurable elements
US5367208A (en) * 1986-09-19 1994-11-22 Actel Corporation Reconfigurable programmable interconnect architecture
GB2211638A (en) * 1987-10-27 1989-07-05 Ibm Simd array processor
FR2606184B1 (fr) * 1986-10-31 1991-11-29 Thomson Csf Dispositif de calcul reconfigurable
US4811214A (en) * 1986-11-14 1989-03-07 Princeton University Multinode reconfigurable pipeline computer
US5287511A (en) * 1988-07-11 1994-02-15 Star Semiconductor Corporation Architectures and methods for dividing processing tasks into tasks for a programmable real time signal processor and tasks for a decision making microprocessor interfacing therewith
US4901268A (en) * 1988-08-19 1990-02-13 General Electric Company Multiple function data processor
US5081375A (en) * 1989-01-19 1992-01-14 National Semiconductor Corp. Method for operating a multiple page programmable logic device
GB8906145D0 (en) * 1989-03-17 1989-05-04 Algotronix Ltd Configurable cellular array
US5203005A (en) * 1989-05-02 1993-04-13 Horst Robert W Cell structure for linear array wafer scale integration architecture with capability to open boundary i/o bus without neighbor acknowledgement
CA2021192A1 (en) * 1989-07-28 1991-01-29 Malcolm A. Mumme Simplified synchronous mesh processor
US5489857A (en) * 1992-08-03 1996-02-06 Advanced Micro Devices, Inc. Flexible synchronous/asynchronous cell structure for a high density programmable logic device
GB8925723D0 (en) * 1989-11-14 1990-01-04 Amt Holdings Processor array system
US5099447A (en) * 1990-01-22 1992-03-24 Alliant Computer Systems Corporation Blocked matrix multiplication for computers with hierarchical memory
US5483620A (en) * 1990-05-22 1996-01-09 International Business Machines Corp. Learning machine synapse processor system apparatus
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US5708836A (en) * 1990-11-13 1998-01-13 International Business Machines Corporation SIMD/MIMD inter-processor communication
US5276836A (en) * 1991-01-10 1994-01-04 Hitachi, Ltd. Data processing device with common memory connecting mechanism
US5260610A (en) * 1991-09-03 1993-11-09 Altera Corporation Programmable logic element interconnections for programmable logic array integrated circuits
JP2791243B2 (ja) * 1992-03-13 1998-08-27 株式会社東芝 階層間同期化システムおよびこれを用いた大規模集積回路
US5386154A (en) * 1992-07-23 1995-01-31 Xilinx, Inc. Compact logic cell for field programmable gate array chip
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
US5857109A (en) * 1992-11-05 1999-01-05 Giga Operations Corporation Programmable logic device for real time video processing
US5392437A (en) * 1992-11-06 1995-02-21 Intel Corporation Method and apparatus for independently stopping and restarting functional units
US5386518A (en) * 1993-02-12 1995-01-31 Hughes Aircraft Company Reconfigurable computer interface and method
US5596742A (en) * 1993-04-02 1997-01-21 Massachusetts Institute Of Technology Virtual interconnections for reconfigurable logic systems
AU6774894A (en) * 1993-04-26 1994-11-21 Comdisco Systems, Inc. Method for scheduling synchronous data flow graphs
DE4416881C2 (de) 1993-05-13 1998-03-19 Pact Inf Tech Gmbh Verfahren zum Betrieb einer Datenverarbeitungseinrichtung
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5600845A (en) * 1994-07-27 1997-02-04 Metalithic Systems Incorporated Integrated circuit computing device comprising a dynamically configurable gate array having a microprocessor and reconfigurable instruction execution means and method therefor
US5625789A (en) * 1994-10-24 1997-04-29 International Business Machines Corporation Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle
US5493239A (en) * 1995-01-31 1996-02-20 Motorola, Inc. Circuit and method of configuring a field programmable gate array
US5862403A (en) * 1995-02-17 1999-01-19 Kabushiki Kaisha Toshiba Continuous data server apparatus and data transfer scheme enabling multiple simultaneous data accesses
JP3313007B2 (ja) * 1995-04-14 2002-08-12 三菱電機株式会社 マイクロコンピュータ
JP3948494B2 (ja) * 1995-04-28 2007-07-25 ザイリンクス,インコーポレイテッド プログラム可能論理装置によってアクセス可能な分散レジスタを有するマイクロプロセサ
GB9508931D0 (en) * 1995-05-02 1995-06-21 Xilinx Inc Programmable switch for FPGA input/output signals
US5600597A (en) * 1995-05-02 1997-02-04 Xilinx, Inc. Register protection structure for FPGA
JPH08328941A (ja) * 1995-05-31 1996-12-13 Nec Corp メモリアクセス制御回路
JP3677315B2 (ja) * 1995-06-01 2005-07-27 シャープ株式会社 データ駆動型情報処理装置
US5784313A (en) * 1995-08-18 1998-07-21 Xilinx, Inc. Programmable logic device including configuration data or user data memory slices
US5884059A (en) * 1996-01-26 1999-03-16 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US6020758A (en) * 1996-03-11 2000-02-01 Altera Corporation Partially reconfigurable programmable logic device
US6173434B1 (en) * 1996-04-22 2001-01-09 Brigham Young University Dynamically-configurable digital processor using method for relocating logic array modules
US5894565A (en) * 1996-05-20 1999-04-13 Atmel Corporation Field programmable gate array with distributed RAM and increased cell utilization
US6023742A (en) * 1996-07-18 2000-02-08 University Of Washington Reconfigurable computing architecture for providing pipelined data paths
US6023564A (en) * 1996-07-19 2000-02-08 Xilinx, Inc. Data processing system using a flash reconfigurable logic device as a dynamic execution unit for a sequence of instructions
US5859544A (en) * 1996-09-05 1999-01-12 Altera Corporation Dynamic configurable elements for programmable logic devices
US6178494B1 (en) * 1996-09-23 2001-01-23 Virtual Computer Corporation Modular, hybrid processor and method for producing a modular, hybrid processor
US5860119A (en) * 1996-11-25 1999-01-12 Vlsi Technology, Inc. Data-packet fifo buffer system with end-of-packet flags
DE19654593A1 (de) 1996-12-20 1998-07-02 Pact Inf Tech Gmbh Umkonfigurierungs-Verfahren für programmierbare Bausteine zur Laufzeit
US6338106B1 (en) * 1996-12-20 2002-01-08 Pact Gmbh I/O and memory bus system for DFPS and units with two or multi-dimensional programmable cell architectures
DE19654595A1 (de) * 1996-12-20 1998-07-02 Pact Inf Tech Gmbh I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen
DE19654846A1 (de) 1996-12-27 1998-07-09 Pact Inf Tech Gmbh Verfahren zum selbständigen dynamischen Umladen von Datenflußprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o. dgl.)
DE19704044A1 (de) 1997-02-04 1998-08-13 Pact Inf Tech Gmbh Verfahren zur automatischen Adressgenerierung von Bausteinen innerhalb Clustern aus einer Vielzahl dieser Bausteine
US5865239A (en) * 1997-02-05 1999-02-02 Micropump, Inc. Method for making herringbone gears
DE19704728A1 (de) * 1997-02-08 1998-08-13 Pact Inf Tech Gmbh Verfahren zur Selbstsynchronisation von konfigurierbaren Elementen eines programmierbaren Bausteines
US5857097A (en) * 1997-03-10 1999-01-05 Digital Equipment Corporation Method for identifying reasons for dynamic stall cycles during the execution of a program
US6507898B1 (en) * 1997-04-30 2003-01-14 Canon Kabushiki Kaisha Reconfigurable data cache controller
US6011407A (en) * 1997-06-13 2000-01-04 Xilinx, Inc. Field programmable gate array with dedicated computer bus interface and method for configuring both
US5966534A (en) * 1997-06-27 1999-10-12 Cooke; Laurence H. Method for compiling high level programming languages into an integrated processor with reconfigurable logic
US6020760A (en) * 1997-07-16 2000-02-01 Altera Corporation I/O buffer circuit with pin multiplexing
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
SG82587A1 (en) * 1997-10-21 2001-08-21 Sony Corp Recording apparatus, recording method, playback apparatus, playback method, recording/playback apparatus, recording/playback method, presentation medium and recording medium
JPH11147335A (ja) * 1997-11-18 1999-06-02 Fuji Xerox Co Ltd 描画処理装置
JP4197755B2 (ja) * 1997-11-19 2008-12-17 富士通株式会社 信号伝送システム、該信号伝送システムのレシーバ回路、および、該信号伝送システムが適用される半導体記憶装置
DE69841256D1 (de) * 1997-12-17 2009-12-10 Panasonic Corp Befehlsmaskierung um Befehlsströme einem Prozessor zuzuleiten
DE19861088A1 (de) 1997-12-22 2000-02-10 Pact Inf Tech Gmbh Verfahren zur Reparatur von integrierten Schaltkreisen
US6172520B1 (en) * 1997-12-30 2001-01-09 Xilinx, Inc. FPGA system with user-programmable configuration ports and method for reconfiguring the FPGA
US6105106A (en) * 1997-12-31 2000-08-15 Micron Technology, Inc. Computer system, memory device and shift register including a balanced switching circuit with series connected transfer gates which are selectively clocked for fast switching times
DE19807872A1 (de) * 1998-02-25 1999-08-26 Pact Inf Tech Gmbh Verfahren zur Verwaltung von Konfigurationsdaten in Datenflußprozessoren sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstruktur (FPGAs, DPGAs, o. dgl.
US6173419B1 (en) * 1998-05-14 2001-01-09 Advanced Technology Materials, Inc. Field programmable gate array (FPGA) emulator for debugging software
JP3123977B2 (ja) * 1998-06-04 2001-01-15 日本電気株式会社 プログラマブル機能ブロック
DE19835189C2 (de) 1998-08-04 2001-02-08 Unicor Rohrsysteme Gmbh Vorrichtung zur kontinuierlichen Herstellung von nahtlosen Kunststoffrohren
JP3551353B2 (ja) * 1998-10-02 2004-08-04 株式会社日立製作所 データ再配置方法
US6694434B1 (en) * 1998-12-23 2004-02-17 Entrust Technologies Limited Method and apparatus for controlling program execution and program distribution
DE10028397A1 (de) 2000-06-13 2001-12-20 Pact Inf Tech Gmbh Registrierverfahren
US6191614B1 (en) * 1999-04-05 2001-02-20 Xilinx, Inc. FPGA configuration circuit including bus-based CRC register
US6512804B1 (en) * 1999-04-07 2003-01-28 Applied Micro Circuits Corporation Apparatus and method for multiple serial data synchronization using channel-lock FIFO buffers optimized for jitter
US7007096B1 (en) * 1999-05-12 2006-02-28 Microsoft Corporation Efficient splitting and mixing of streaming-data frames for processing through multiple processing modules
US6211697B1 (en) * 1999-05-25 2001-04-03 Actel Integrated circuit that includes a field-programmable gate array and a hard gate array having the same underlying structure
US6347346B1 (en) * 1999-06-30 2002-02-12 Chameleon Systems, Inc. Local memory unit system with global access for use on reconfigurable chips
US6341318B1 (en) * 1999-08-10 2002-01-22 Chameleon Systems, Inc. DMA data streaming
US6507947B1 (en) * 1999-08-20 2003-01-14 Hewlett-Packard Company Programmatic synthesis of processor element arrays
US6349346B1 (en) * 1999-09-23 2002-02-19 Chameleon Systems, Inc. Control fabric unit including associated configuration memory and PSOP state machine adapted to provide configuration address to reconfigurable functional unit
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6519674B1 (en) * 2000-02-18 2003-02-11 Chameleon Systems, Inc. Configuration bits layout
US6845445B2 (en) * 2000-05-12 2005-01-18 Pts Corporation Methods and apparatus for power control in a scalable array of processor elements
DE10036627A1 (de) 2000-07-24 2002-02-14 Pact Inf Tech Gmbh Integrierter Schaltkreis
DE10129237A1 (de) 2000-10-09 2002-04-18 Pact Inf Tech Gmbh Verfahren zur Bearbeitung von Daten
US7164422B1 (en) * 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US6518787B1 (en) * 2000-09-21 2003-02-11 Triscend Corporation Input/output architecture for efficient configuration of programmable input/output cells
US20040015899A1 (en) * 2000-10-06 2004-01-22 Frank May Method for processing data
US6525678B1 (en) * 2000-10-06 2003-02-25 Altera Corporation Configuring a programmable logic device
US6847370B2 (en) * 2001-02-20 2005-01-25 3D Labs, Inc., Ltd. Planar byte memory organization with linear access
EP1402382B1 (de) * 2001-06-20 2010-08-18 Richter, Thomas Verfahren zur bearbeitung von daten
AU2002336644A1 (en) 2001-09-20 2003-04-01 Steven B. Siepser A warranty method and system
US7000161B1 (en) * 2001-10-15 2006-02-14 Altera Corporation Reconfigurable programmable logic system with configuration recovery mode
US6976131B2 (en) * 2002-08-23 2005-12-13 Intel Corporation Method and apparatus for shared cache coherency for a chip multiprocessor or multiprocessor system
ATE554443T1 (de) 2003-06-25 2012-05-15 Koninkl Philips Electronics Nv Anweisungsgesteuerte datenverarbeitungseinrichtung und -verfahren
US20060179436A1 (en) * 2005-02-07 2006-08-10 Sony Computer Entertainment Inc. Methods and apparatus for providing a task change application programming interface
US7526633B2 (en) * 2005-03-23 2009-04-28 Qualcomm Incorporated Method and system for encoding variable length packets with variable instruction sizes
US7750915B1 (en) * 2005-12-19 2010-07-06 Nvidia Corporation Concurrent access of data elements stored across multiple banks in a shared memory resource

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6364178A (ja) * 1986-08-29 1988-03-22 インタ−ナショナル・ビジネス・マシ−ンズ・コ−ポレ−ション 画像処理システム
JPH08212168A (ja) * 1995-02-03 1996-08-20 Nippon Steel Corp アレイプロセッサ
JPH11296345A (ja) * 1998-04-08 1999-10-29 Hitachi Ltd プロセッサ
JP2002544587A (ja) * 1999-05-12 2002-12-24 アナログ デバイセス インコーポレーテッド デジタル信号プロセッサ計算コア
JP2004506261A (ja) * 2000-06-13 2004-02-26 ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト パイプラインctプロトコルおよびct通信

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010117806A (ja) * 2008-11-12 2010-05-27 Toshiba Corp 半導体装置、および、半導体装置によるデータ処理方法
US8402251B2 (en) 2008-11-12 2013-03-19 Kabushiki Kaisha Toshiba Selecting configuration memory address for execution circuit conditionally based on input address or computation result of preceding execution circuit as address

Also Published As

Publication number Publication date
EP1849095A2 (en) 2007-10-31
WO2006082091A2 (en) 2006-08-10
US20090031104A1 (en) 2009-01-29
WO2006082091A8 (en) 2006-12-07
WO2006082091A3 (en) 2006-09-21
EP1849095B1 (en) 2013-01-02

Similar Documents

Publication Publication Date Title
JP2008530642A (ja) 低レイテンシーの大量並列データ処理装置
US20120017066A1 (en) Low latency massive parallel data processing device
US10515046B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10445451B2 (en) Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10469397B2 (en) Processors and methods with configurable network-based dataflow operator circuits
US11086816B2 (en) Processors, methods, and systems for debugging a configurable spatial accelerator
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US8510534B2 (en) Scalar/vector processor that includes a functional unit with a vector section and a scalar section
CN111512292A (zh) 用于可配置空间加速器中的非结构化数据流的装置、方法和系统
CN111566623A (zh) 用于可配置空间加速器中的集成性能监视的装置、方法和系统
JP2001256038A (ja) 柔軟な乗算ユニットを有するデータ・プロセッサ
CN111767080A (zh) 用于可配置空间加速器中的操作的设备、方法和系统
WO2020005444A1 (en) Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US20220100680A1 (en) Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
JP4073721B2 (ja) データ処理装置
Dolle et al. A 32-b RISC/DSP microprocessor with reduced complexity
US6728741B2 (en) Hardware assist for data block diagonal mirror image transformation
KR100267092B1 (ko) 멀티미디어신호프로세서의단일명령다중데이터처리
WO2011151000A1 (en) Method and device for data processing
Shi et al. 32b RISC/DSP media processor: MediaDSP3201
Nurmi et al. A new generation of parameterized and extensible DSP cores
JP4382076B2 (ja) データ処理装置
Sunitha et al. Design and Comparison of Risc Processors Using Different Alu Architectures
Butscher The Dataparallel Computer MasPar MP—1
Mayer-Lindenberg A modular processor architecture for high-performance computing applications on FPGA

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120328

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120907