特許第6237241号(P6237241)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特許6237241-処理装置 図000002
  • 特許6237241-処理装置 図000003
  • 特許6237241-処理装置 図000004
  • 特許6237241-処理装置 図000005
  • 特許6237241-処理装置 図000006
  • 特許6237241-処理装置 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6237241
(24)【登録日】2017年11月10日
(45)【発行日】2017年11月29日
(54)【発明の名称】処理装置
(51)【国際特許分類】
   G06F 9/30 20060101AFI20171120BHJP
   G06F 9/38 20060101ALI20171120BHJP
   G06F 9/34 20060101ALI20171120BHJP
【FI】
   G06F9/30 350F
   G06F9/38 370B
   G06F9/34 330
   G06F9/30 370
【請求項の数】9
【全頁数】16
(21)【出願番号】特願2014-1102(P2014-1102)
(22)【出願日】2014年1月7日
(65)【公開番号】特開2015-130057(P2015-130057A)
(43)【公開日】2015年7月16日
【審査請求日】2016年9月5日
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100090273
【弁理士】
【氏名又は名称】國分 孝悦
(72)【発明者】
【氏名】伴野 充
(72)【発明者】
【氏名】伊藤 真紀子
【審査官】 清木 泰
(56)【参考文献】
【文献】 特表2008−513878(JP,A)
【文献】 特表2002−516002(JP,A)
【文献】 特開平06−230969(JP,A)
【文献】 特表2010−530677(JP,A)
【文献】 特表2006−506727(JP,A)
【文献】 特表2003−526157(JP,A)
【文献】 特表2002−527812(JP,A)
【文献】 米国特許第07315935(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/42
G06F17/16
(57)【特許請求の範囲】
【請求項1】
1つの超長命令語に含まれる複数の命令であって、命令のそれぞれが互いに異なるスロットに対応付けられる、前記複数の命令をデコードする命令デコーダと、
複数のスロット処理ユニットであって、スロット毎に対応するスロット処理ユニットが少なくとも1つ備えられているものであり、前記命令デコーダのデコードに応じて、1つの超長命令語に含まれる前記複数の命令のそれぞれ毎に、命令に対応するスロットのためのスロット処理ユニットのいずれかにより当該命令の処理を実行することにより、1つの超長命令語に含まれる前記複数の命令を並列に実行する、前記複数のスロット処理ユニットと、
前記命令デコーダのデコードに応じて、1つの超長命令語に含まれる複数の命令のそれぞれにおいて、命令のオペランドによりレジスタが指定されている場合に、指定されたレジスタに記憶されている値を、当該命令に対応付けられるスロットのための前記スロット処理ユニットのいずれかに出力するレジスタファイルを有し、
前記複数のスロット処理ユニットのうち、互いに異なるスロットのための少なくとも2個のスロット処理ユニットは、前記レジスタファイルの同じ出力ポートの同じ値を入力することを特徴とする処理装置。
【請求項2】
前記複数のスロット処理ユニットは、前記複数スロットのうちの少なくとも1個のスロットに対して、ロード命令及びストア命令を実行するためのロードストアユニットと、前記ロード命令及び前記ストア命令以外の処理を行う実行ユニットとを有することを特徴とする請求項1記載の処理装置。
【請求項3】
前記少なくとも2個のスロット処理ユニットは、ロード命令及びストア命令以外の処理を行う実行ユニットであることを特徴とする請求項1又は2記載の処理装置。
【請求項4】
前記少なくとも2個のスロット処理ユニットは、それぞれ、一の入力値が前記レジスタファイルの同じ出力ポートから入力され、他の入力値が前記レジスタファイルの異なる出力ポートから入力されることを特徴とする請求項1〜3のいずれか1項に記載の処理装置。
【請求項5】
さらに、前記少なくとも2個のスロット処理ユニットのうちの一のスロット処理ユニットの複数の入力値のうちの1個の入力値を、前記少なくとも2個のスロット処理ユニットのうちの他のスロット処理ユニットの入力値として選択するセレクタを有することを特徴とする請求項1〜4のいずれか1項に記載の処理装置。
【請求項6】
前記セレクタは、前記命令デコーダがデコードする命令に応じて選択することを特徴とする請求項5記載の処理装置。
【請求項7】
さらに、前記少なくとも2個のスロット処理ユニットのうちの一のスロット処理ユニットを含む複数のスロット処理ユニットの入力値のうちの1個の入力値を、前記少なくとも2個のスロット処理ユニットのうちの他のスロット処理ユニットの入力値として選択するセレクタを有することを特徴とする請求項1〜4のいずれか1項に記載の処理装置。
【請求項8】
前記セレクタは、前記命令デコーダがデコードする命令に応じて選択することを特徴とする請求項7記載の処理装置。
【請求項9】
前記少なくとも2個のスロット処理ユニットの入力ポートは、前記レジスタファイルの同じ出力ポートに直接接続されていることを特徴とする請求項1〜4のいずれか1項に記載の処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、処理装置に関する。
【背景技術】
【0002】
VLIW(超長命令語:Very Long Instruction Word)プロセッサでは、複数の命令を1つの超長命令語に含めることで、それらの命令を並列に実行する。このスケジューリングをソースコードのコンパイル時に行うことで、複雑な機構を用いることなく、性能を向上させることが可能である。
【0003】
また、並列処理装置におけるレジスタ読み出し方法が知られている(例えば、特許文献1参照)。まず、レジスタファイルに入力された読み出しレジスタ番号に従って、そのレジスタ番号で指定された格納領域の内容を読み出す。次に、その読み出した内容とフィードバックされた演算結果とのいずれかをオペランドセレクタによって選択してオペランドレジスタに保持させる。次に、その保持内容を演算装置が読み出して演算するとともに、その演算結果をレジスタファイル及びオペランドセレクタにフィードバックする。使用頻度の高いレジスタの内容をあらかじめ指定されたコピーレジスタへコピー入力し、使用頻度の高いレジスタのレジスタ番号が指定された場合には、コピーレジスタから読み出して、レジスタファイルからの読み出しをしないようにする。
【0004】
また、命令が発行されたサイクルから、命令の結果がターゲットレジスタに書き込まれるまでの間に、ターゲットレジスタへの定義及び参照が可能なプロセッサが知られている(例えば、特許文献2参照)。変数の定義・参照で構成されるライブレンジに対してレジスタを割り付けるレジスタ割り付け処理が行われる。命令が発行されたサイクルから命令の結果がターゲットレジスタに書き込まれるまでの間に、ターゲットレジスタをターゲットを定義する命令以外の命令で使用するようにレジスタを割り付ける。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平5−165639号公報
【特許文献2】特開2001−290659号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
VLIWプロセッサが複数の命令を並列に実行するには、レジスタファイルへアクセスする必要があり、複数の命令に対応するレジスタファイルの出力ポート数が増え、その結果として面積が増加するという課題がある。
【0007】
本発明の目的は、レジスタファイルの出力ポート数を減らし、面積を削減することができる処理装置を提供することである。
【課題を解決するための手段】
【0008】
処理装置は、1つの超長命令語に含まれる複数の命令であって、命令のそれぞれが互いに異なるスロットに対応付けられる、前記複数の命令をデコードする命令デコーダと、複数のスロット処理ユニットであって、スロット毎に対応するスロット処理ユニットが少なくとも1つ備えられているものであり、前記命令デコーダのデコードに応じて、1つの超長命令語に含まれる前記複数の命令のそれぞれ毎に、命令に対応するスロットのためのスロット処理ユニットのいずれかにより当該命令の処理を実行することにより、1つの超長命令語に含まれる前記複数の命令を並列に実行する、前記複数のスロット処理ユニットと、前記命令デコーダのデコードに応じて、1つの超長命令語に含まれる複数の命令のそれぞれにおいて、命令のオペランドによりレジスタが指定されている場合に、指定されたレジスタに記憶されている値を、当該命令に対応付けられるスロットのための前記スロット処理ユニットのいずれかに出力するレジスタファイルを有し、前記複数のスロット処理ユニットのうち、互いに異なるスロットのための少なくとも2個のスロット処理ユニットは、前記レジスタファイルの同じ出力ポートの同じ値を入力する。
【発明の効果】
【0009】
レジスタファイルの同じ出力ポートの値を入力することにより、レジスタファイルの出力ポート数を減らし、面積を削減することができる。
【図面の簡単な説明】
【0010】
図1図1は、第1の実施形態による処理装置の構成例を示す図である。
図2図2は、複数のスロットの命令を含む超長命令語を示す図である。
図3図3は、図1の処理装置の一部の構成例を示す図である。
図4図4は、図1の処理装置の処理方法を示すフローチャートである。
図5図5は、第2の実施形態による処理装置の構成例を示す図である。
図6図6は、第3の実施形態による処理装置の構成例を示す図である。
【発明を実施するための形態】
【0011】
(第1の実施形態)
図1は、第1の実施形態による処理装置の構成例を示す図である。処理装置は、命令メモリ101、命令フェッチユニット102、命令デコーダ103、パイプラインコントローラ104、スカラレジスタファイル105、ベクトルレジスタファイル106、セレクタ107,108、第1のスロット処理ユニットSL1a、第3のスロット処理ユニットSL3a、第1のスロット処理ユニットSL1b、第3のスロット処理ユニットSL3b、第2のスロット処理ユニットSL2、第4のスロット処理ユニットSL4、セレクタ109〜112、及びデータメモリ113を有する。
【0012】
演算装置は、VLIWプロセッサ又はデジタルシグナルプロセッサ(DSP)である。命令メモリ101は、図2に示すように、複数のスロットの命令を含む超長命令語を記憶する。以下、4ウェイVLIWプロセッサの例を説明するが、スロット数は4個に限定されない。超長命令語は、4個のスロットの命令を有し、演算装置は、4個のスロットの命令を並列処理することができる。第1のスロットは、ロード(LD)命令、ストア(ST)命令、又はロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第2のスロットは、ロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第3のスロットは、ロード(LD)命令、ストア(ST)命令、又はロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。第4のスロットは、ロード命令及びストア命令以外の処理(ALU)命令を割り当てることができる。なお、各スロットには、何もしないNOP命令を割り当てることも可能である。
【0013】
第1のスロット処理ユニットSL1aは、超長命令語の第1のスロットのロード(LD)命令及びストア(ST)命令の処理を実行するロードストアユニットである。第1のスロット処理ユニットSL1bは、超長命令語の第1のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットであり、例えば算術論理演算ユニット(ALU)の処理を行う。第2のスロット処理ユニットSL2は、超長命令語の第2のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。第3のスロット処理ユニットSL3aは、超長命令語の第3のスロットのロード(LD)命令及びストア(ST)命令の処理を実行するロードストアユニットである。第3のスロット処理ユニットSL3bは、超長命令語の第3のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。第4のスロット処理ユニットSL4は、超長命令語の第4のスロットのロード命令及びストア命令以外の処理(ALU)命令を実行する実行ユニットである。
【0014】
命令フェッチユニット102は、パイプラインコントローラ104の制御により、命令メモリ101に記憶されている超長命令語を読み出してフェッチする。次に、命令デコーダ103は、パイプラインコントローラ104の制御により、命令フェッチユニット102にフェッチされている超長命令語を入力してデコードする。
【0015】
スカラレジスタファイル105及びベクトルレジスタファイル106は、パイプラインコントローラ104の制御により、命令デコーダ103のデコードに応じて、超長命令語内の4個のスロットの命令のオペランドにより指定されたレジスタに記憶されている値を6個のスロット処理ユニットSL1a〜SL4にそれぞれ出力する。
【0016】
第1のスロット処理ユニットSL1a及びSL1bは、超長命令語内の第1のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第2のスロット処理ユニットSL2は、超長命令語内の第2のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第3のスロット処理ユニットSL3a及びSL3bは、超長命令語内の第3のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。第4のスロット処理ユニットSL4は、超長命令語内の第4のスロットの命令のオペランドにより指定されたレジスタに記憶されている値をレジスタファイル105及び/又は106から入力する。
【0017】
スカラレジスタファイル105は、16個の32ビットレジスタ、8個の出力ポート及び4個の入力ポートを有し、各出力ポートから32ビット値を出力することができる。データメモリ113は、32ビットアドレスを有するので、スカラレジスタファイル105の各レジスタは、データメモリ113のアドレスを記憶することができる。スカラレジスタファイル105は、第1のスロットの2個の出力ポートが第1のスロット処理ユニットSL1a及びSL1bに接続され、第2のスロットの2個の出力ポートが第2のスロット処理ユニットSL2に接続され、第3のスロットの2個の出力ポートが第3のスロット処理ユニットSL3a及びSL3bに接続され、第4のスロットの2個の出力ポートが第4のスロット処理ユニットSL4に接続される。
【0018】
ベクトルレジスタファイル106は、16個の128ビットレジスタ、6個の出力ポート及び4個の入力ポートを有し、各出力ポートから128ビット値を出力することができる。データメモリ113は、各アドレスに128ビットデータを記憶するので、ベクトルレジスタファイル106の各レジスタは、データメモリ113のデータを記憶することができる。ベクトルレジスタファイル106は、第1のスロットの1個の出力ポートが第1のスロット処理ユニットSL1a及びSL1bに接続され、第2のスロットの2個の出力ポートが第2のスロット処理ユニットSL2に接続され、第3のスロットの1個の出力ポートが第3のスロット処理ユニットSL3a及びSL3bに接続され、第4のスロットの2個の出力ポートが第4のスロット処理ユニットSL4に接続される。
【0019】
セレクタ107は、命令デコーダ103のデコードに応じて、ベクトルレジスタファイル106の第2のスロットの2個の出力ポートの値のいずれかを選択し、第1のスロット処理ユニットSL1bに出力する。すなわち、第1のスロット処理ユニットSL1bの2入力値のうちの一方の入力値は、第2のスロット処理ユニットSL2の2入力値のうちのいずれかの1入力値と同じである。第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106の同じ1個の出力ポートの値を入力する。
【0020】
セレクタ108は、命令デコーダ103のデコードに応じて、ベクトルレジスタファイル106の第4のスロットの2個の出力ポートの値のいずれかを選択し、第3のスロット処理ユニットSL3bに出力する。すなわち、第3のスロット処理ユニットSL3bの2入力値のうちの一方の入力値は、第4のスロット処理ユニットSL4の2入力値のうちのいずれかの1入力値と同じである。第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4は、ベクトルレジスタファイル106の同じ1個の出力ポートの値を入力する。
【0021】
スカラレジスタファイル105の出力ポート数は8であり、ベクトルレジスタファイル106の出力ポート数は6であり、ベクトルレジスタファイル106の出力ポート数の方が少ない。セレクタ107及び108を設けることにより、ベクトルレジスタファイル106の出力ポート数を減らし、ベクトルレジスタファイル106の面積を削減することができる。セレクタ107及び108を用いて、入力データを共有する例を、後に、図3を参照しながら説明する。
【0022】
6個のスロット処理ユニットSL1a〜SL4は、命令デコーダ103のデコードに応じて、超長命令語内の4個のスロットの命令の処理をそれぞれ並列に実行する。第1のスロット処理ユニットSL1a及びSL1bは、命令デコーダ103のデコードに応じて、超長命令語内の第1のスロットの命令の処理を実行する。第2のスロット処理ユニットSL2は、命令デコーダ103のデコードに応じて、超長命令語内の第2のスロットの命令の処理を実行する。第3のスロット処理ユニットSL3a及びSL3bは、命令デコーダ103のデコードに応じて、超長命令語内の第3のスロットの命令の処理を実行する。第4のスロット処理ユニットSL4は、命令デコーダ103のデコードに応じて、超長命令語内の第4のスロットの命令の処理を実行する。
【0023】
スロット処理ユニット(ロードストアユニット)SL1a,SL3aは、データメモリ113に対して、32ビットアドレス及び128ビットデータを出力し、データをストアすることができる。また、ロードストアユニットSL1a,SL3aは、データメモリ113に対して、32ビットアドレスを出力し、128ビットデータをロードすることができる。ロードストアユニットSL1aは、データメモリ113からロードした128ビットデータをセレクタ109に出力する。ロードストアユニットSL3aは、データメモリ113からロードした128ビットデータをセレクタ110に出力する。スロット処理ユニット(実行ユニット)SL1bは、128ビットデータをセレクタ109に出力する。スロット処理ユニット(実行ユニット)SL3bは、128ビットデータをセレクタ110に出力する。
【0024】
セレクタ109は、命令デコーダ103のデコードに応じて、第1のスロット処理ユニットSL1aの出力データ又は第1のスロット処理ユニットSL1bの出力データを選択し、ベクトルレジスタファイル106の第1のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第1のスロットの命令のデコードに応じたレジスタに、第1のスロットの入力ポートに入力されたデータを書き込む。
【0025】
スロット処理ユニット(実行ユニット)SL2は、128ビットデータをベクトルレジスタファイル106の第2のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第2のスロットの命令のデコードに応じたレジスタに、第2のスロットの入力ポートに入力されたデータを書き込む。
【0026】
セレクタ110は、命令デコーダ103のデコードに応じて、第3のスロット処理ユニットSL3aの出力データ又は第3のスロット処理ユニットSL3bの出力データを選択し、ベクトルレジスタファイル106の第3のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第3のスロットの命令のデコードに応じたレジスタに、第3のスロットの入力ポートに入力されたデータを書き込む。
【0027】
スロット処理ユニット(実行ユニット)SL4は、128ビットデータをベクトルレジスタファイル106の第4のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、命令デコーダ103の第4のスロットの命令のデコードに応じたレジスタに、第4のスロットの入力ポートに入力されたデータを書き込む。
【0028】
例えば、第1のスロットの命令が下記のストア命令である場合を説明する。
v.store vx,sx,「即値」
【0029】
ここで、v.storeは、オペコードである。オペランドvxは、ベクトルレジスタファイル106内のストアデータを記憶するレジスタ番号を示す。オペランドsxは、スカラレジスタファイル105内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【0030】
第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106内のレジスタvxのストアデータを入力し、スカラレジスタファイル105内のレジスタsxのベースアドレスを入力する。次に、第1のスロット処理ユニットSL1aは、レジスタsxのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスと、レジスタvxのストアデータとをデータメモリ113に出力し、データメモリ113の指定アドレスにストアデータをストアする。
【0031】
次に、第1のスロットの命令が下記のロード命令である場合を説明する。
v.load vx,sx,「即値」
【0032】
ここで、v.loadは、オペコードである。オペランドvxは、ベクトルレジスタファイル106内のロードデータを書き込むレジスタ番号を示す。オペランドsxは、スカラレジスタファイル105内のベースアドレスを記憶するレジスタ番号を示す。オペランド「即値」は、オフセットアドレスを示す。
【0033】
第1のスロット処理ユニットSL1aは、スカラレジスタファイル105内のレジスタsxのベースアドレスを入力する。次に、第1のスロット処理ユニットSL1aは、レジスタsxのベースアドレスと「即値」のオフセットアドレスとを加算したアドレスをデータメモリ113に出力し、データメモリ113の指定アドレスからデータをロードする。次に、第1のスロット処理ユニットSL1aは、ロードしたデータをセレクタ109に出力する。セレクタ109は、第1のスロット処理ユニットSL1aが出力するデータを選択してベクトルレジスタファイル106の第1のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、第1のスロットの入力ポートに入力したデータをレジスタvxに書き込む。
【0034】
次に、第2のスロットの命令が下記の加算命令である場合を説明する。
v.add v10,v14,v15
【0035】
ここで、v.addは、オペコードである。オペランドv10は、ベクトルレジスタファイル106内の加算結果を書き込むレジスタ番号を示す。オペランドv14及びv15は、ベクトルレジスタファイル106内の加算対象の値を記憶するレジスタ番号を示す。
【0036】
第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106内のレジスタv14及びv15の値を入力し、レジスタv14及びv15の値を加算し、その加算結果をベクトルレジスタファイル106の第2のスロットの入力ポートに出力する。ベクトルレジスタファイル106は、第2のスロットの入力ポートに入力したデータをレジスタv10に書き込む。
【0037】
図3は、図1の処理装置の一部の構成例を示す図である。処理装置は、例えば、無線通信の信号処理などのため、ベクトルレジスタファイル106に記憶されているデータを入れ換える処理を行う。第1のスロット処理ユニットSL1bは、入力データを保持する入力レジスタ301,302と、データを入れ換えるためのセレクタ303と、出力データを保持する出力レジスタ304とを有する。第2のスロット処理ユニットSL2は、入力データを保持する入力レジスタ311,312と、データを入れ換えるためのセレクタ313と、出力データを保持する出力レジスタ314とを有する。
【0038】
例えば、ベクトルレジスタファイル106内の各レジスタは、16ビット×8個=128ビットのデータを記憶する。例えば、命令メモリ101は、次式(1)の第2のスロットの入換命令と次式(2)の第1のスロットの入換命令とを含む超長命令語を記憶する。
v.select.i v0,v1,v2,「即値」 ・・・(1)
v.select_share.i v3,v4,SELx,「即値」 ・・・(2)
【0039】
ここで、v.select.iは、第2のスロットの入換命令のオペコードである。オペランドv0は、ベクトルレジスタファイル106内の入れ換え後のデータD6を記憶するレジスタ番号を示す。オペランドv1及びv2は、ベクトルレジスタファイル106内の入れ換え前のデータD3及びD4を記憶するレジスタ番号を示す。オペランド「即値」は、データ入れ換えのパターンを示す。
【0040】
また、v.select_share.iは、第1のスロットの入換命令のオペコードである。オペランドv3は、ベクトルレジスタファイル106内の入れ換え後のデータD5を記憶するレジスタ番号を示す。オペランドv4は、ベクトルレジスタファイル106内の入れ換え前のデータD1を記憶するレジスタ番号を示す。オペランドSELxは、セレクタ107が第2のスロット処理ユニットSL2の2入力データD3及びD4のうちのいずれを選択するかを示す識別子である。オペランド「即値」は、データ入れ換えのパターンを示す。
【0041】
命令フェッチユニット102は、命令メモリ101内から上記の超長命令語をフェッチする。命令デコーダ103は、命令フェッチユニット102によりフェッチされた超長命令語をデコードする。ベクトルレジスタファイル106は、第2のスロットの上式(1)の入換命令で指定されたレジスタv1のデータD3及びレジスタv2のデータD4を第2のスロット処理ユニットSL2に出力する。また、ベクトルレジスタファイル106は、第1のスロットの上式(2)の入換命令で指定されたレジスタv4のデータD1を第1のスロット処理ユニットSL1bに出力する。セレクタ107は、第1のスロットの上式(2)の入換命令で指定された識別子SELxに応じて、レジスタv1のデータD3又はレジスタv2のデータD4を選択し、データD2を第1のスロット処理ユニットSL1bに出力する。例えば、セレクタ107は、識別子SELxが「0」の場合にはレジスタv1のデータD3を選択し、識別子SELxが「1」の場合にはレジスタv2のデータD4を選択する。図3の場合、セレクタ107は、レジスタv1のデータD3を選択し、データD2として出力する。
【0042】
入力レジスタ311は、「0」〜「7」で示すレジスタv1の16ビット×8個=128ビットのベクトルデータD3を記憶する。入力レジスタ312は、「8」〜「15」で示すレジスタv2の16ビット×8個=128ビットのベクトルデータD4を記憶する。
【0043】
入力レジスタ301は、「16」〜「23」で示すレジスタv4の16ビット×8個=128ビットのベクトルデータD1を記憶する。入力レジスタ302は、「0」〜「7」で示すレジスタv2の16ビット×8個=128ビットのデータD2を記憶する。入力レジスタ302及び311の記憶データは、相互に同じになる。
【0044】
セレクタ303は、第1のスロットの上式(2)の入換命令で指定された「即値」に応じたパターンで、入力レジスタ301のデータD1及び入力レジスタ302のデータD2の入れ換えを行い、入れ換え後のデータD5を出力レジスタ304に書き込む。例えば、セレクタ303は、「0」〜「7」で示される16×8ビットのデータD2のうちの上位半分の「0」〜「3」で示される16×4ビットのデータを選択し、「16」〜「23」で示される16×8ビットのデータD1のうちの上位半分の「16」〜「19」で示される16×4ビットのデータを選択し、それらを結合した16×8ビットのデータD5を出力する。
【0045】
セレクタ313は、第2のスロットの上式(1)の入換命令で指定された「即値」に応じたパターンで、入力レジスタ311のデータD3及び入力レジスタ312のデータD4の入れ換えを行い、入れ換え後のデータD6を出力レジスタ314に書き込む。例えば、セレクタ313は、「0」〜「7」で示される16×8ビットのデータD3のうちの上位半分の「0」〜「3」で示される16×4ビットのデータを選択し、「8」〜「15」で示される16×8ビットのデータD4のうちの上位半分の「8」〜「11」で示される16×4ビットのデータを選択し、それらを結合した16×8ビットのデータD6を出力する。
【0046】
図1のセレクタ109は、第1のスロットの命令が上式(2)の入換命令であるので、第1のスロット処理ユニットSL1bの出力データD5を選択し、ベクトルレジスタファイル106に出力する。ベクトルレジスタファイル106は、第1のスロットの上式(2)の入換命令で指定されたレジスタv3にデータD5を書き込み、第2のスロットの上式(1)の入換命令で指定されたレジスタv0にデータD6を書き込む。
【0047】
なお、セレクタ303及び313は、上位半分のデータを選択する例を示したが、下位半分のデータを選択したり、奇数番目のデータを選択したり、偶数番目のデータを選択するなど様々な選択が可能である。これらの選択は、上式(1)及び(2)の入換命令の「即値」により指定可能である。
【0048】
また、上式(1)及び(2)は、「即値」により、データ入れ換えパターンを指定する例を示したが、次式(3)及び(4)のように、スカラレジスタファイル105内のレジスタs0及びs1により、データ入れ換えパターンを指定するようにしてもよい。
v.select v0,v1,v2,s0 ・・・(3)
v.select_share v3,v4,SELx,s1 ・・・(4)
【0049】
上記では、第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2の場合を例に説明したが、第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4の場合も同様である。
【0050】
上記のように、無線通信の信号処理などでは、第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の入力データD3と同じデータD2を入力する場合がある。本実施形態では、第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2は、ベクトルレジスタファイル106の同じ出力ポートのデータを入力し、第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4は、ベクトルレジスタファイル106の同じ出力ポートのデータを入力する。これにより、ベクトルレジスタファイル106の出力ポート数を減らし、面積を削減することができる。
【0051】
図4は、図1の処理装置の処理方法を示すフローチャートである。ステップS401では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロット及び第3のスロットの命令が2リードタイプか否かをチェックする。2リードタイプの命令は、例えば、実行ユニットSL1b,SL2,SL3b,SL4が行う加算命令及び入れ換え命令等であり、ベクトルレジスタファイル106に対して、2入力の命令である。1リードタイプの命令は、例えば、ロードストアユニットSL1a,SL3aが行うロード命令及びストア命令であり、ベクトルレジスタファイル106に対して、1入力の命令である。第1のスロット及び第3のスロットの命令の両方が2リードタイプである場合には、ステップS402に進み、それ以外の場合には、ステップS404に進む。
【0052】
ステップS402では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であり、かつ、第3のスロットの命令の識別子SELxが0であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS403に進み、上記の条件を満たさない場合には、ステップS413に進む。
【0053】
ステップS403では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。
【0054】
ステップS413では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが1であり、かつ、第3のスロットの命令の識別子SELxが0であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS414に進み、上記の条件を満たさない場合には、ステップS415に進む。
【0055】
ステップS414では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。
【0056】
ステップS415では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であり、かつ、第3のスロットの命令の識別子SELxが1であるという条件を満たすか否かをチェックする。上記の条件を満たす場合には、ステップS416に進み、上記の条件を満たさない場合には、ステップS417に進む。
【0057】
ステップS416では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。
【0058】
ステップS417では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。
【0059】
ステップS404では、処理装置は、命令デコーダ103のデコード結果に応じて、第1及び第3のスロットのうちの第1のスロットの命令のみが2リードタイプか否かをチェックする。第1のスロットの命令のみが2リードタイプである場合には、ステップS405に進み、それ以外の場合には、ステップS408に進む。
【0060】
ステップS405では、処理装置は、命令デコーダ103のデコード結果に応じて、第1のスロットの命令の識別子SELxが0であるか否かをチェックする。識別子SELxが0である場合には、ステップS407に進み、それ以外の場合には、ステップS406に進む。
【0061】
ステップS407では、セレクタ107は、第2のスロット処理ユニットSL2の第1の入力データD3を選択し、第1のスロット処理ユニットSL1bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第1の入力データD3と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
【0062】
ステップS406では、セレクタ107は、第2のスロット処理ユニットSL2の第2の入力データD4を選択し、第1のスロット処理ユニットSL1bに出力する。第1のスロット処理ユニットSL1bは、第2のスロット処理ユニットSL2の第2の入力データD4と同じデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
【0063】
ステップS408では、処理装置は、命令デコーダ103のデコード結果に応じて、第1及び第3のスロットのうちの第3のスロットの命令のみが2リードタイプか否かをチェックする。第3のスロットの命令のみが2リードタイプである場合には、ステップS410に進み、それ以外の場合には、ステップS409に進む。
【0064】
ステップS409では、第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。第3のスロット処理ユニットSL3aは、ベクトルレジスタファイル106から1個のデータを入力し、第3のスロットの命令を実行する。
【0065】
ステップS410では、処理装置は、命令デコーダ103のデコード結果に応じて、第3のスロットの命令の識別子SELxが0であるか否かをチェックする。識別子SELxが0である場合には、ステップS412に進み、それ以外の場合には、ステップS411に進む。
【0066】
ステップS412では、セレクタ108は、第4のスロット処理ユニットSL4の第1の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第1の入力データと同じデータを入力し、第3のスロットの命令を実行する。第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。
【0067】
ステップS411では、セレクタ108は、第4のスロット処理ユニットSL4の第2の入力データを選択し、第3のスロット処理ユニットSL3bに出力する。第3のスロット処理ユニットSL3bは、第4のスロット処理ユニットSL4の第2の入力データと同じデータを入力し、第3のスロットの命令を実行する。第1のスロット処理ユニットSL1aは、ベクトルレジスタファイル106から1個のデータを入力し、第1のスロットの命令を実行する。
【0068】
以上のように、セレクタ107は、一のスロット処理ユニットSL2の複数の入力値のうちの1個の入力値を、他のスロット処理ユニットSL1bの入力値として選択する。セレクタ108は、一のスロット処理ユニットSL4の複数の入力値のうちの1個の入力値を、他のスロット処理ユニットSL3bの入力値として選択する。セレクタ107及び108は、命令デコーダ103がデコードする命令の識別子SELxに応じて選択する。
【0069】
2個のスロット処理ユニットSL1b及びSL2は、それぞれ、一の入力値がベクトルレジスタファイル106の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル106の異なる出力ポートから入力される。同様に、2個のスロット処理ユニットSL3b及びSL4は、それぞれ、一の入力値がベクトルレジスタファイル106の同じ出力ポートから入力され、他の入力値がベクトルレジスタファイル106の異なる出力ポートから入力される。
【0070】
本実施形態によれば、ベクトルレジスタファイル106の同じ出力ポートの値を入力することにより、ベクトルレジスタファイル106の出力ポート数を減らし、面積を削減することができる。無線通信などの信号処理では、複数のスロット処理ユニットが入力を共有する場合が少なくないので、本実施形態の効果は大きい。
【0071】
(第2の実施形態)
図5は、第2の実施形態による処理装置の構成例を示す図である。本実施形態(図5)は、第1の実施形態(図1)に対して、セレクタ107及び108を削除したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
【0072】
第1のスロット処理ユニットSL1bは、2個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル106の第1のスロットの出力ポートに接続され、2個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル106の第2のスロットの2個の出力ポートのうちのいずれか1個の出力ポートに接続される。第1のスロット処理ユニットSL1b及び第2のスロット処理ユニットSL2の一方の入力ポートは、ベクトルレジスタファイル106の同じ出力ポートに直接接続されている。
【0073】
また、第3のスロット処理ユニットSL3bは、2個の入力ポートのうちの一方の入力ポートがベクトルレジスタファイル106の第3のスロットの出力ポートに接続され、2個の入力ポートのうちの他方の入力ポートがベクトルレジスタファイル106の第4のスロットの2個の出力ポートのうちのいずれか1個の出力ポートに接続される。第3のスロット処理ユニットSL3b及び第4のスロット処理ユニットSL4の一方の入力ポートは、ベクトルレジスタファイル106の同じ出力ポートに直接接続されている。
【0074】
第1のスロット処理ユニットSL1b及び第3のスロット処理ユニットSL3bの入力を固定できる場合には、本実施形態のように、セレクタ107及び108を削除することができる。これにより、処理装置の面積をさらに削減することができる。
【0075】
(第3の実施形態)
図6は、第3の実施形態による処理装置の構成例を示す図である。本実施形態(図6)は、第1の実施形態(図1)に対して、セレクタ107及び108の入力が異なる。以下、本実施形態が第1の実施形態と異なる点を説明する。
【0076】
ベクトルレジスタファイル106は、第1のスロットの1個の出力ポートと、第3のスロットの1個の出力ポートと、第2のスロットの2個の出力ポート(第1及び第2の出力ポート)と、第4のスロットの2個の出力ポート(第1及び第2の出力ポート)とを有する。また、ベクトルレジスタファイル106は、第2のスロットの第1の出力ポートが第2のスロット処理ユニットSL2の第1の入力ポートに接続され、第2のスロットの第2の出力ポートが第2のスロット処理ユニットSL2の第2の入力ポートに接続される。また、ベクトルレジスタファイル106は、第4のスロットの第1の出力ポートが第4のスロット処理ユニットSL4の第1の入力ポートに接続され、第4のスロットの第2の出力ポートが第4のスロット処理ユニットSL4の第2の入力ポートに接続される。
【0077】
セレクタ107は、ベクトルレジスタファイル106の第2のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第2のスロットの第2の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第2の出力ポートのデータとを入力し、その4入力データのうちのいずれか1個のデータを選択して第1のスロット処理ユニットSL1bに出力する。第1のスロットの上式(2)の命令の識別子SELxは、「0」から「3」のうちのいずれかの値をとる。セレクタ107は、第1の実施形態と同様に、第1のスロットの命令の識別子SELxの値に応じて選択する。
【0078】
同様に、セレクタ108は、ベクトルレジスタファイル106の第2のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第2のスロットの第2の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第1の出力ポートのデータと、ベクトルレジスタファイル106の第4のスロットの第2の出力ポートのデータとを入力し、その4入力データのうちのいずれか1個のデータを選択して第3のスロット処理ユニットSL3bに出力する。第3のスロットの上式(2)の命令の識別子SELxは、「0」から「3」のうちのいずれかの値をとる。セレクタ108は、第1の実施形態と同様に、第3のスロットの命令の識別子SELxの値に応じて選択する。
【0079】
以上のように、セレクタ107は、複数のスロット処理ユニットSL2及びSL4の入力値のうちの1個の入力値を、第1のスロット処理ユニットSL1bの入力値として選択する。セレクタ108は、複数のスロット処理ユニットSL2及びSL4の入力値のうちの1個の入力値を、第3のスロット処理ユニットSL3bの入力値として選択する。セレクタ107及び108は、命令デコーダ103がデコードする命令の識別子SELxに応じて選択する。
【0080】
第1〜第3の実施形態では、2個のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力する場合を例に説明したが、3個以上のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力するようにしてもよい。少なくとも2個のスロット処理ユニットがベクトルレジスタファイル106の同じ出力ポートの値を入力すればよい。
【0081】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【0082】
101 命令メモリ
102 命令フェッチユニット
103 命令デコーダ
104 パイプラインコントローラ
105 スカラレジスタファイル
106 ベクトルレジスタファイル
107〜112 セレクタ
113 データメモリ
図1
図2
図3
図4
図5
図6