(57)【要約】      （修正有）【課題】複数のパイプラインで同じデータに対するメモリアクセスがある場合に、同じデータに対するメモリアクセスの重複をなくすプロセッサを提供する。【解決手段】命令メモリ１０１から読み出したベクトル命令をデコードし、パイプライン１０４Ａ−１０４Ｄに発行する命令発行制御部１０２が第１のロード命令をパイプライン１０４Ａ−１０４Ｄに発行し、かつ第１のロード命令がアクセスするメモリ１１０の領域と同じ領域に対する第２のロード命令が他のパイプライン１０４Ａ−１０４Ｄで処理中である場合に、第１のロード命令のメモリ１１０に対するアクセスアドレスが第２のロード命令のメモリ１１０に対するアクセスアドレスと一致するように、第２のロード命令における処理済のサイクル数に応じて決定したオフセット値に基づいて、パイプライン１０４Ａ−１０４Ｄでの第１のロード命令内の処理順番を変更する。【選択図】図１
2016066218.tif 000002
【特許請求の範囲】
【請求項１】
メモリからデータを読み出すロード命令を含むベクトル命令をパイプライン処理する複数のパイプラインと、
命令メモリから読み出した前記ベクトル命令をデコードし、前記パイプラインに前記ベクトル命令を発行する命令発行部と、
前記命令発行部がメモリに対する第１のロード命令を第１のパイプラインに発行する場合に、前記第１のロード命令と前記メモリの同じ領域に対する第２のロード命令が第２のパイプラインで処理中であるとき、前記第１のロード命令の前記メモリに対するアクセスアドレスが前記第２のロード命令の前記メモリに対するアクセスアドレスと一致するように、前記第２のロード命令における処理済のサイクル数に応じてオフセット値を決定し、前記第１のパイプラインでの前記第１のロード命令内の処理順番を前記オフセット値に基づいて変更する制御部とを有することを特徴とするプロセッサ。
【請求項２】
カウンタを有し、前記カウンタの値を基に前記ベクトル命令内の処理順番を制御するシーケンサを前記パイプラインの各々が有し、
前記制御部は、前記第２のパイプラインが有する前記シーケンサのカウンタの値を前記オフセット値にすることを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記制御部は、前記オフセット値を保持する保持部を有し、前記第１のロード命令の発行後に発行される前記ベクトル命令の各々に対して、前記ベクトル命令内の処理順番を前記オフセット値に基づいて変更することを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
前記制御部は、
前記第１のパイプラインに発行するベクトル命令及び前記第２のパイプラインで処理中のベクトル命令が前記ロード命令であるか否かを検出する命令検出部と、
前記第１のパイプラインに発行するベクトル命令及び前記第２のパイプラインで処理中のベクトル命令のそれぞれ、前記ベクトル命令で指定される、前記ベクトル命令がロード命令であったときの前記メモリに対するアクセスアドレスのベースアドレスが一致するか否かを比較する比較部とを有することを特徴とする請求項１〜３の何れか１項に記載のプロセッサ。
【請求項５】
前記第２のパイプラインで前記第２のロード命令が処理中であるときは、前記第１のパイプラインは、前記メモリに対するアクセスを行わずに、前記第２のパイプラインによる前記メモリに対するアクセスでのデータを前記第１のロード命令のデータとして取り込み、前記第２のパイプラインでの前記第２のロード命令の処理が終了すると、前記第１のパイプラインは、前記第１のロード命令に応じたメモリに対するアクセスを行ってデータを取り込むことを特徴とする請求項１〜４の何れか１項に記載のプロセッサ。
【請求項６】
データを記憶するメモリと、
前記メモリに対してアクセスを行うプロセッサとを有し、
前記プロセッサは、
前記メモリからデータを読み出すロード命令を含むベクトル命令をパイプライン処理する複数のパイプラインと、
命令メモリから読み出した前記ベクトル命令をデコードし、前記パイプラインに前記ベクトル命令を発行する命令発行部と、
前記命令発行部がメモリに対する第１のロード命令を第１のパイプラインに発行する場合に、前記第１のロード命令と前記メモリの同じ領域に対する第２のロード命令が第２のパイプラインで処理中であるとき、前記第１のロード命令の前記メモリに対するアクセスアドレスが前記第２のロード命令の前記メモリに対するアクセスアドレスと一致するように、前記第２のロード命令における処理済のサイクル数に応じてオフセット値を決定し、前記第１のパイプラインでの前記第１のロード命令内の処理順番を前記オフセット値に基づいて変更する制御部とを有することを特徴とする半導体集積回路。
【請求項７】
メモリからデータを読み出すロード命令を含むベクトル命令をパイプライン処理する複数のパイプラインを有するプロセッサにおけるベクトル命令の処理方法であって、
命令メモリから読み出した前記ベクトル命令をデコードし、前記パイプラインに前記ベクトル命令を発行し、
第１のパイプラインに発行するベクトル命令及び第２のパイプラインで処理中のベクトル命令がロード命令であるか否かを判断し、
前記第１のパイプラインに発行するベクトル命令及び前記第２のパイプラインで処理中のベクトル命令のそれぞれの、前記ベクトル命令で指定される、前記ベクトル命令がロード命令であったときの前記メモリに対するアクセスアドレスのベースアドレスが一致するか否かを判断し、
前記第１のパイプラインに発行するベクトル命令及び前記第２のパイプラインで処理中のベクトル命令がロード命令であり、かつ前記アクセスアドレスのベースアドレスが一致する場合に、前記第１のパイプラインに発行するベクトル命令に基づく前記アクセスアドレスが前記第２のパイプラインで処理中のベクトル命令に基づく前記アクセスアドレスと一致するように前記第２のパイプラインでのベクトル命令の処理済のサイクル数に応じてオフセット値を決定し、前記第１のパイプラインでのベクトル命令内の処理順番を前記オフセット値に基づいて変更することを特徴とするベクトル命令の処理方法。
【請求項８】
前記第１のパイプラインでのベクトル命令内の処理順番を前記オフセット値に基づいて変更した後、前記ベクトル命令の発行後に発行される後続ベクトル命令の各々に対して前記後続ベクトル命令内の処理順番を前記オフセット値に基づいて変更することを特徴とする請求項７記載のベクトル命令の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、半導体集積回路、及びベクトル命令の処理方法に関する。
【背景技術】
【０００２】
ベクトルプロセッサ（ベクトル処理装置）は、配列型のレジスタファイル（ベクトルレジスタ）を有し、配列型のデータに対してベクトル命令に応じた演算処理やロード／ストア処理等を行う。配列データのサイズ、すなわち配列要素の個数は、ベクトル長（ＶＬ）によって指定される。すなわち、ベクトルプロセッサは、１つのベクトル命令によって、ベクトル長（ＶＬ）で指定された個数のデータに対する演算等をまとめて処理することができる。
【０００３】
図１２は、ベクトルプロセッサでのベクトル命令の処理例を示す図である。図１２には、命令フェッチステージＩＦ、命令デコードステージＩＤ、演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、及びライトバックステージＷＢの５ステージのパイプライン構成で、パイプラインＡ、Ｂ、Ｃ、及びＤの４つの実行パイプラインを有するベクトルプロセッサでの処理例を示している。
【０００４】
命令フェッチステージＩＦでは、命令列が格納されている命令メモリから命令（ベクトル命令）を読み出す（フェッチする）。命令デコードステージＩＤでは、命令フェッチステージＩＦにおいて読み出した命令をデコードし、実行パイプラインのシーケンサに命令を投入する。シーケンサは、投入された命令に応じてパイプラインの制御を行う。シーケンサは、例えば内部のカウンタ値を基にソースレジスタやデスティネーションレジスタのインデックスを計算し、データ（オペランド）を読み出す。
【０００５】
演算実行ステージＥＸでは、命令によって指定された演算処理を実行し、演算結果を各種レジスタに書き込む。ここで、命令がメモリに対するロード命令やストア命令である場合には、命令デコードステージＩＤで読み出したオペランド（ベースアドレス）と内部のカウンタ値とを用いてアドレス計算を行い、計算したアドレスに対するメモリアクセスを実行する。メモリアクセスステージＭＥＭでは、命令がメモリに対するロード命令である場合、演算実行ステージＥＸにおいて実行したメモリアクセスに対応するロードデータを読み出す。ライトバックステージＷＢでは、メモリアクセスステージＭＥＭにおいて読み出したロードデータを各種レジスタへ書き込む。
【０００６】
すなわち、ベクトル命令が演算命令（例えば、加算命令ｖａｄｄ）である場合、命令フェッチステージＩＦで命令メモリから演算命令が読み出され、命令デコードステージＩＤで演算命令がデコードされ、パイプラインＡ〜Ｄの内のあいている実行パイプラインに入力される。パイプラインは、命令デコードステージＩＤでベクトルレジスタからデータ要素を読み出す。そして、命令実行ステージＥＸで、読み出したデータ要素で演算を行い、演算結果をベクトルレジスタに書き込む。ここで、命令実行ステージＥＸでは、同じインデックスのデータ同士で演算を行い、演算結果をデスティネーションレジスタの対応するインデックスのフィールドに格納する。
【０００７】
また、例えばベクトル命令がメモリに対するロード命令（例えば、ロード命令ｖｌｄ）である場合、命令フェッチステージＩＦで命令メモリからロード命令が読み出され、命令デコードステージＩＤでロード命令がデコードされ、パイプラインＡ〜Ｄの内のあいている実行パイプラインに入力される。パイプラインは、命令実行ステージＥＸでアクセスするメモリアドレスを計算して、計算したメモリアドレスに対するメモリアクセスを行う。メモリアドレスは、命令デコードステージＩＤで読み出したオペランドにより指定されているベースアドレスにアドレスオフセット（シーケンサのカウンタ値×メモリアクセスサイズ）を加算することで求められる。そして、メモリアクセスステージＭＥＭでメモリアドレスに対応するメモリの領域からデータ要素を読み出し、読み出したデータ要素をライトバックステージＷＢでベクトルレジスタに書き込む。
【０００８】
例えば、１サイクルに発行可能なベクトル命令の数が１であるベクトルプロセッサにおいて、それぞれが８サイクルで実行されるベクトル命令Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、及びＨを順に実行する場合の処理は、図１２に示すようになる。なお、図１２に示した例において、命令Ａ〜Ｈに依存関係はないものとする。なお、図１２における「（英文字）−（数字）」の表記は、英文字が実行されている命令を示し、数字がシーケンサのカウンタ値を示している。
【０００９】
まず、ベクトル命令Ａが命令メモリから読み出されてパイプラインＡに投入され処理される。次のサイクルで、ベクトル命令Ｂが命令メモリから読み出されてパイプラインＢに投入され処理される。その次のサイクルで、ベクトル命令Ｃが命令メモリから読み出されてパイプラインＣに投入され処理され、その次のサイクルで、ベクトル命令Ｄが命令メモリから読み出されてパイプラインＤに投入され処理される。そして、実行パイプラインＡ〜Ｄに空きがなくなると、実行パイプラインがあくまで次のベクトル命令の実行が待機される。
【００１０】
図１２に示した例では、パイプラインＡのベクトル命令Ａの処理が終了する（Ａ−７の処理が終了する）と、次のベクトル命令Ｅが命令メモリから読み出されてパイプラインＡに投入され処理される。同様に、パイプラインＢのベクトル命令Ｂの処理が終了する（Ｂ−７の処理が終了する）と、次のベクトル命令Ｆが命令メモリから読み出されてパイプラインＢに投入され処理される。また、同様にして、パイプラインＣ、Ｄのベクトル命令Ｃ、Ｄの処理がそれぞれ終了すると、次のベクトル命令Ｇ、Ｈが命令メモリから読み出されてパイプラインＣ、Ｄに投入され処理される。
【００１１】
リソースへのアクセス処理とその他の処理を分けて並列処理を行い、リソースへのアクセス処理を先行して進めるようにしたプロセッサシステムがある（例えば、特許文献１参照）。また、特許文献１には、ロード命令とストア命令との実行順序を入れ替えることで、プロセッサシステムが有するＣＰＵ部の高効率化を図る技術が提案されている。また、複数のプロセッサが共有リソースを共有する情報処理装置において、複数のプロセッサから受け付けたリードアクセスのアドレスを比較し、一致したアドレスのデータを共有リソースからリードして、リードしたデータをそのアドレスを出力した複数のプロセッサに同じタイミングで出力する技術が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平７−１９１９４５号公報
【特許文献２】特開２０１１−２２１５６９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ここで、ベクトルプロセッサにおいて、例えばベースバンド処理におけるパイロット信号処理のように、長いベクトル長でデータメモリにおける同じ領域のデータを読み出すロード命令が頻繁に実行されることがある。ここで、パイロット信号処理とは、無線通信における伝送経路の特性を測るために通信信号（通信データ）にサンプル信号を入れておき、それを使って補正等を行う処理であり、同じデータを何度も読み出して補正を行うような処理であるので同じメモリ領域へのメモリアクセスが何度も発生する。
【００１４】
例えば、図１２に示した例において、ベクトル命令Ａとベクトル命令Ｃとが同じメモリ領域に対するロード命令である場合、それぞれの命令がメモリアクセスを行う。このように複数のパイプラインで同じデータを使用する場合に、複数のパイプラインにおいて同じメモリ領域へのメモリアクセスを重複して行うために無駄があった。本発明の目的は、複数のパイプラインで共通のデータに対するメモリアクセスがある場合に、同じデータに対するメモリアクセスの重複をなくすことができるプロセッサを提供することにある。
【課題を解決するための手段】
【００１５】
プロセッサの一態様は、メモリに対するロード命令を含むベクトル命令をパイプライン処理する複数のパイプラインと、命令メモリから読み出したベクトル命令をデコードし、パイプラインにベクトル命令を発行する命令発行部と、パイプラインでのベクトル命令内の処理順番を制御する制御部とを有する。制御部は、命令発行部がメモリに対する第１のロード命令を第１のパイプラインに発行する場合に、第１のロード命令とメモリの同じ領域に対する第２のロード命令が第２のパイプラインで処理中であるとき、第１のロード命令のメモリに対するアクセスアドレスが第２のロード命令のメモリに対するアクセスアドレスと一致するように、第２のロード命令における処理済のサイクル数に応じてオフセット値を決定し、第１のパイプラインでの第１のロード命令内の処理順番をオフセット値に基づいて変更する。
【発明の効果】
【００１６】
開示のプロセッサは、複数のパイプラインで同じデータに対するメモリアクセスがある場合に、メモリアクセスの重複をなくしてメモリアクセスの回数を減らすことができ、メモリアクセス効率を向上させ、消費電力を低減することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施形態におけるプロセッサの構成例を示す図である。
【図２】本実施形態におけるベクトルレジスタの例を示す図である。
【図３】本実施形態におけるデータメモリの例を示す図である。
【図４】本実施形態における処理オフセット決定部の構成例を示す図である。
【図５】本実施形態における処理オフセット決定部の動作例を示すフローチャートである。
【図６】本実施形態におけるシーケンサの動作例を示すフローチャートである。
【図７】本実施形態における実行パイプラインでの処理例を示すフローチャートである。
【図８】本実施形態におけるプロセッサの動作例を説明するための図である。
【図９】本実施形態におけるプロセッサの他の動作例を説明するための図である。
【図１０】本実施形態におけるプロセッサの他の動作例を説明するための図である。
【図１１】本実施形態におけるプロセッサを有する半導体集積回路の例を示す図である。
【図１２】ベクトルプロセッサでのベクトル命令の処理例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態におけるプロセッサの構成例を示す図である。図１には、命令フェッチステージＩＦ、命令デコードステージＩＤ、演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、及びライトバックステージＷＢの５ステージのパイプライン構成で、パイプラインＡ、Ｂ、Ｃ、及びＤの４つの実行パイプライン１０４（１０４Ａ〜１０４Ｄ）を有するベクトルプロセッサを一例として示している。実行パイプライン１０４における前段のステージから後段のステージへのデータ等の供給は、パイプラインレジスタＰＲＥＧを介して行われる。
【００１９】
命令フェッチステージＩＦでは、命令列が格納されている命令メモリ１０１から命令（ベクトル命令）を読み出す（フェッチする）。命令デコードステージＩＤでは、命令発行制御部１０２が、命令フェッチステージＩＦにおいて読み出したベクトル命令をデコードし、実行パイプラインＡ〜Ｄの内の空き状態である（命令処理中状態でない）パイプライン１０４のシーケンサ１０５（１０５Ａ〜１０５Ｄ）に命令を投入する。シーケンサ１０５は、命令発行制御部１０２からの起動信号を受けて、命令に応じたパイプラインの制御を行う。シーケンサ１０５は、例えば内部のカウンタ値を基に処理対象となるソースレジスタや処理結果を格納するデスティネーションレジスタのインデックスを計算し、各種レジスタ（スカラレジスタ１０３、ベクトルレジスタ１０８、及びマスクレジスタ１１１）のデータ（オペランド）を読み出す。
【００２０】
ベクトルレジスタ１０８は、配列データ（ベクトルデータ）が格納されている。ベクトルレジスタ１０８に格納されている配列データは、セレクタ１０９を介して実行パイプライン１０４に供給される。なお、ベクトルレジスタ１０８にはまだ書き込まれていないが、すでに処理結果として得られている配列データが、セレクタ１０９を介して実行パイプライン１０４に供給可能になっている。
【００２１】
ベクトルレジスタ１０８は、例えば図２に示すように複数のレジスタを有する。配列データのサイズ、すなわち配列データにおけるデータ要素の個数は、ベクトル長（ＶＬ）によって指定される。言い換えれば、使用可能なレジスタの個数は、ベクトル長（ＶＬ）によって指定される。ベクトル長（ＶＬ）が４である場合には、４個のレジスタが１つのベクトルレジスタ番号（論理レジスタ番号）に対応し、例えば物理番号０ｘ０〜０ｘ３のレジスタがベクトルレジスタ番号ＶＲ０に対応し、物理番号０ｘ４〜０ｘ７のレジスタがベクトルレジスタ番号ＶＲ１に対応する。
【００２２】
また、ベクトル長（ＶＬ）が８である場合には、８個のレジスタが１つのベクトルレジスタ番号（論理レジスタ番号）に対応し、例えば物理番号０ｘ０〜０ｘ７のレジスタがベクトルレジスタ番号ＶＲ０に対応し、物理番号０ｘ８〜０ｘＦのレジスタがベクトルレジスタ番号ＶＲ１に対応する。また、ベクトル長（ＶＬ）が１６である場合には、１６個のレジスタが１つのベクトルレジスタ番号（論理レジスタ番号）に対応し、例えば物理番号０ｘ０〜０ｘＦのレジスタがベクトルレジスタ番号ＶＲ０に対応し、物理番号０ｘ１０〜０ｘ１Ｆのレジスタがベクトルレジスタ番号ＶＲ１に対応する。
【００２３】
スカラレジスタ１０３は、スカラデータが格納されている。また、マスクレジスタ１１１は、ベクトル命令によって処理される配列データ（ベクトルデータ）の内の一部を使用するときなどに他を無効化するためのマスクデータが格納されている。マスクレジスタ１１１に格納されているマスクデータは、セレクタ１１２を介して実行パイプライン１０４に供給される。なお、マスクレジスタ１１１にはまだ書き込まれていないが、すでに得られているマスクデータが、セレクタ１１２を介して実行パイプライン１０４に供給可能になっている。
【００２４】
演算実行ステージＥＸでは、ベクトル命令によって指定された演算処理を演算器１０６（１０６Ａ〜１０６Ｄ）で実行し、演算結果を各種レジスタに書き込む。ここで、ベクトル命令がデータメモリ１１０に対するロード命令やストア命令である場合には、命令デコードステージＩＤで読み出したオペランド（ベースアドレス）と内部のカウンタ値とを用いてアドレス計算を行う。そして、計算したアドレスからデータメモリ１１０のアクセスするメモリバンクのバンクセレクト信号を生成して、データメモリ１１０に対するメモリアクセスを実行する。
【００２５】
メモリアクセスステージＭＥＭでは、ベクトル命令がデータメモリ１１０に対するロード命令である場合、演算実行ステージＥＸにおいて生成されたバンクセレクト信号を基に、データメモリ１１０の対応するメモリバンクのロードデータを読み出す。ライトバックステージＷＢでは、メモリアクセスステージＭＥＭにおいて読み出したロードデータを各種レジスタへ書き込む。
【００２６】
データメモリ１１０は、例えば図３に示すように、複数のメモリバンクを有する。図３に示した例では、データメモリ１１０は４個のメモリバンクを有し、メモリバンクのそれぞれは３２ビット幅を有する。データメモリ１１０におけるアドレスは、図３に示すようにバンクインタリーブ方式で割り振られている。また、データメモリ１１０のそれぞれのメモリバンクが個別にアクセスポートを有しており、並列にメモリアクセスを行うことが可能となっている。なお、図３に示したデータメモリ１１０の構成は一例であり、これに限定されるものではない。
【００２７】
図４は、図１に示した処理オフセット決定部１０７の構成例を示す図である。処理オフセット決定部１０７は、ロード命令検出部４０１、ロード命令検出部４０２（４０２Ａ〜４０２Ｄ）、比較器４０３（４０３Ａ〜４０３Ｄ）、論理積演算回路（ＡＮＤ回路）４０５（４０５Ａ〜４０５Ｄ）、論理和演算回路（ＯＲ回路）４０６、ＡＮＤ回路４０７、セレクタ４０８、４０９、及びオフセット保持レジスタ４１０を有する。
【００２８】
処理オフセット決定部１０７には、発行する命令（後続命令）と処理を実行中の命令（先行命令）との依存関係の有無を示す依存関係検出情報ＳＧ１、発行する命令のオペコード情報ＯＰＣＡ、及び発行する命令のソースオペランドＯＰＲＡが命令発行制御部１０２から入力される。本実施形態では、依存関係検出情報ＳＧ１は、先行命令と後続命令との依存関係がない場合に“１”（真）であり、依存関係がある場合に“０”（偽）である。
【００２９】
また、処理オフセット決定部１０７には、実行パイプラインで処理中の命令（先行命令）のオペコード情報ＯＰＣＢ、その命令のソースオペランドＯＰＲＢ、及び実行パイプラインの現在のシーケンサカウンタ値ＣＮＴＡがそれぞれの実行パイプラインのシーケンサＡ〜Ｄから入力される。ここで、命令がロード命令である場合には、命令のソースオペランドＯＰＲＡ、ＯＰＲＢは、メモリアクセスのベースアドレスを示す。
【００３０】
ロード命令検出部４０１は、命令発行制御部１０２から入力される、発行する命令のオペコード情報ＯＰＣＡを基に、発行する命令がロード命令であるか否かを検出する。ロード命令検出部４０２Ａ〜４０２Ｄは、対応する実行パイプラインのシーケンサＡ〜Ｄから入力される、現在処理中の命令のオペコード情報ＯＰＣＢを基に、現在処理中の命令（先行命令）がロード命令であるか否かをそれぞれ検出する。本実施形態では、ロード命令検出部４０１及びロード命令検出部４０２Ａ〜４０２Ｄの出力は、命令がロード命令である場合に“１”（真）となり、命令がロード命令でない場合に“０”（偽）となる。
【００３１】
比較器４０３Ａ〜４０３Ｄは、命令発行制御部１０２から入力される、発行する命令のソースオペランドＯＰＲＡと、対応する実行パイプラインのシーケンサＡ〜Ｄから入力される、現在処理中の命令のソースオペランドＯＰＲＢをそれぞれ比較する。すなわち、比較器４０３Ａ〜４０３Ｄは、発行する命令及び現在処理中の命令がともにロード命令であるとしたときに、メモリアクセスのベースアドレスが一致するか否かを検出する。本実施形態では、比較器４０３Ａ〜４０３Ｄの出力は、命令のソースオペランドＯＰＲＡ、ＯＰＲＢが一致する場合に“１”（真）となり、命令のソースオペランドＯＰＲＡ、ＯＰＲＢが異なる場合に“０”（偽）となる。
【００３２】
ＡＮＤ回路４０５Ａ〜４０５Ｄは、対応するロード命令検出部４０２Ａ〜４０２Ｄ及び比較器４０３Ａ〜４０３Ｄの出力を論理積演算し、演算結果を出力する。ＡＮＤ回路４０５Ａ〜４０５Ｄは、対応する実行パイプラインで現在処理中の命令がロード命令であり、かつ発行する命令のソースオペランドＯＰＲＡと、対応する実行パイプラインで現在処理中の命令のソースオペランドＯＰＲＢとが一致する（メモリアクセスのベースアドレスが一致する）場合に“１”（真）を出力し、それ以外の場合には“０”（偽）を出力する。ＡＮＤ回路４０５Ａ〜４０５Ｄの出力は、パイプラインＩＤ情報ＰＩＤ（本例では４ビットの情報）として、セレクタ４０８に供給されるとともに、実行パイプラインのシーケンサＡ〜Ｄに供給される。
【００３３】
ＯＲ回路４０６は、ＡＮＤ回路４０５Ａ〜４０５Ｄの出力を論理和演算し、演算結果を出力する。したがって、実行パイプラインで現在処理中の命令の内に、発行する命令のソースオペランドＯＰＲＡと命令のソースオペランドＯＰＲＢが一致するロード命令がある場合に、ＯＲ回路４０６の出力は“１”（真）となる。
【００３４】
ＡＮＤ回路４０７は、命令発行制御部１０２から入力される、依存関係検出情報ＳＧ１、ロード命令検出部４０１の出力、及びＯＲ回路４０６の出力を論理積演算し、演算結果を出力する。すなわち、ＡＮＤ回路４０７は、発行する命令が現在処理中の命令と依存関係がないロード命令であって、かつ実行パイプラインで現在処理中の命令の内にメモリアクセスのベースアドレスが一致する（同じメモリ領域に対してメモリアクセスを行う）ロード命令がある場合に“１”（真）を出力する。ＡＮＤ回路４０７の出力は、ロード命令一致検出情報ＳＧ２として、セレクタ４０９に供給されるとともに、実行パイプラインのシーケンサＡ〜Ｄに供給される。
【００３５】
セレクタ４０８は、ＡＮＤ回路４０５Ａ〜４０５Ｄの出力（パイプラインＩＤ情報ＰＩＤ）に応じて、実行パイプラインのシーケンサＡ〜Ｄから入力される、現在のシーケンサカウンタ値ＣＮＴＡを選択的に出力する。セレクタ４０８は、ＡＮＤ回路４０５Ａ〜４０５Ｄの出力が“１”である実行パイプラインのシーケンサＡ〜Ｄの現在のシーケンサカウンタ値ＣＮＴＡを選択して出力する。
【００３６】
セレクタ４０９は、ＡＮＤ回路４０７から出力されるロード命令一致検出情報ＳＧ２に応じて、セレクタ４０８の出力ＣＮＴＢ又はオフセット保持レジスタ４１０の出力の一方を選択して出力する。セレクタ４０９は、ロード命令一致検出情報ＳＧ２が“１”である場合にはセレクタ４０８の出力ＣＮＴＢを出力し、ロード命令一致検出情報ＳＧ２が“０”である場合にはオフセット保持レジスタ４１０の出力を選択して出力する。セレクタ４０９の出力は、処理オフセット値ＯＦＦＳＥＴとして、オフセット保持レジスタ４１０に保持されるとともに、実行パイプラインのシーケンサＡ〜Ｄに供給される。オフセット保持レジスタ４１０の初期値は０である。
【００３７】
図５は、本実施形態における処理オフセット決定部１０７の動作例を示すフローチャートである。図５には、１サイクルのなかで行われる処理の流れを示している。
【００３８】
ステップＳ１０１にて、処理オフセット決定部１０７は、命令発行制御部１０２から入力される、発行する命令のオペコード情報を基に、発行する命令がロード命令であるか否かを検出する。発行する命令がロード命令であれば（ステップＳ１０１のＹｅｓ）、ステップＳ１０２にて、処理オフセット決定部１０７は、実行パイプライン１０４のシーケンサＡ〜Ｄから入力される、現在処理中の命令のオペコード情報を基に、現在処理中の命令（先行命令）にロード命令があるか否かを検出する。
【００３９】
現在処理中の命令にロード命令があれば（ステップＳ１０２のＹｅｓ）、ステップＳ１０３にて、処理オフセット決定部１０７は、命令発行制御部１０２から入力される、発行するロード命令のソースオペランドと、実行パイプライン１０４のシーケンサＡ〜Ｄから入力される、現在処理中のロード命令のソースオペランドが同じであるか否かを検出する。すなわち、処理オフセット決定部１０７は、発行するロード命令及び現在処理中のロード命令におけるメモリアクセスのベースアドレスが一致するか否かを検出する。
【００４０】
命令のソースオペランドが同じである、すなわちロード命令におけるメモリアクセスのベースアドレスが一致する場合には、ステップＳ１０４にて、処理オフセット決定部１０７は、命令発行制御部１０２から入力される、依存関係検出情報を基に、発行するロード命令と現在処理中の各命令に依存関係がないか否かを検出する。発行するロード命令と現在処理中の各命令に依存関係がある場合には、後述するように発行するロード命令の処理順番の並べ替えを行うとストールが発生してしまうので、通常の順番で処理を行わせるために依存関係の検出を行っている。
【００４１】
発行するロード命令と現在処理中の各命令に依存関係がない場合（ステップＳ１０４のＹｅｓ）、すなわち、発行する命令がロード命令であり、かつ現在処理中の命令の内にメモリアクセスのベースアドレスが一致するロード命令があり、かつ発行するロード命令と現在処理中の各命令に依存関係がない場合、ステップＳ１０５に進む。ステップＳ１０５にて、処理オフセット決定部１０７は、メモリアクセスのベースアドレスが一致する、現在処理中のロード命令があることを示すロード命令一致検出情報を出力する。
【００４２】
次に、ステップＳ１０６にて、処理オフセット決定部１０７は、発行するロード命令とメモリアクセスのベースアドレスが一致するロード命令を現在処理している実行パイプラインを示すパイプラインＩＤ情報を取得して、実行パイプライン１０４のシーケンサに出力する。続いて、ステップＳ１０７にて、処理オフセット決定部１０７は、発行するロード命令とメモリアクセスのベースアドレスが一致するロード命令を現在処理している実行パイプライン１０４のシーケンサのカウンタ値を取得する。
【００４３】
ステップＳ１０８にて、処理オフセット決定部１０７は、オフセット保持レジスタの値を、ステップＳ１０７において取得したカウンタ値に更新する。また、ステップＳ１０９にて、処理オフセット決定部１０７は、ステップＳ１０７において取得したカウンタ値を、処理オフセット値として実行パイプライン１０４のシーケンサに出力する。これにより、後述するように発行する命令において命令内での処理順番の並べ替えが行われる。
【００４４】
発行する命令がロード命令でない、又は現在処理中の命令の内にメモリアクセスのベースアドレスが一致するロード命令がない、又は発行するロード命令と現在処理中の各命令に依存関係がある場合（ステップＳ１０１〜Ｓ１０４の何れかでＮｏ）、ステップＳ１１０に進む。ステップＳ１１０にて、処理オフセット決定部１０７は、メモリアクセスのベースアドレスが一致する、現在処理中のロード命令がないと判定し、その旨を示すロード命令一致検出情報を出力する。次に、ステップＳ１１１にて、処理オフセット決定部１０７は、オフセット保持レジスタに保持されているオフセット値を、処理オフセット値として実行パイプライン１０４のシーケンサに出力する。
【００４５】
このようにして、処理オフセット決定部１０７での処理により、発行するロード命令とメモリアクセスのベースアドレスが一致するロード命令を現在処理している実行パイプライン１０４のシーケンサのカウンタ値を、発行するロード命令の処理オフセット値に設定することで、発行するロード命令のメモリアクセスアドレスと先行のロード命令のメモリアクセスアドレスとを一致させることができる。なお、ステップＳ１０１〜Ｓ１０４の処理を行う順序は、図５に例示したものに限定されず、ステップＳ１０１〜Ｓ１０４の処理を行う順序は任意である。また、図５に例示した処理オフセット決定部１０７での処理は、図４に示したようなハードウェア構成の処理オフセット決定部１０７に限らず、適宜ソフトウェア処理により実行するようにしても良い。
【００４６】
図６は、本実施形態におけるシーケンサ１０５の動作例を示すフローチャートである。図６には、１サイクルのなかで行われる処理の流れを示している。
【００４７】
ステップＳ２０１にて、シーケンサ１０５は、命令発行制御部１０２から起動信号が入力されているか否かを確認する。命令発行制御部１０２からの起動信号が入力されている場合（ステップＳ２０１のＹｅｓ）、ステップＳ２０２にて、シーケンサ１０５は、ベクトル命令実行制御用のカウンタの値を、処理オフセット決定部１０７から入力される処理オフセット値に初期化する。なお、後述する処理において、旧処理オフセット値（初期化前の処理オフセット値）を使用するため、旧処理オフセット値はシーケンサ１０５内部に保持しておく。
【００４８】
次に、ステップＳ２０３にて、シーケンサ１０５は、命令によりオペランドが必要であるかを判断する。オペランドが必要であれば（ステップＳ２０３のＹｅｓ）、ステップＳ２０４にて、シーケンサ１０５は、カウンタ値からソースレジスタのインデックスを生成し、生成したソースレジスタのインデックスを基に、各種レジスタ（スカラレジスタ１０３、ベクトルレジスタ１０８、マスクレジスタ１１１）の値を読み出す。
【００４９】
次に、ステップＳ２０５にて、シーケンサ１０５は、実行する命令がロード命令であるか否かを判断する。実行する命令がロード命令であれば（ステップＳ２０５のＹｅｓ）、ステップＳ２０６にて、シーケンサ１０５は、処理オフセット決定部１０７からロード命令一致検出信号が入力されているか否かを確認する。
【００５０】
処理オフセット決定部１０７からロード命令一致検出信号が入力されている場合（ステップＳ２０６のＹｅｓ）、ステップＳ２０７にて、シーケンサ１０５は、メモリ共有可能フラグをオンにする。一方、処理オフセット決定部１０７からロード命令一致検出信号が入力されていない場合（ステップＳ２０６のＮｏ）、ステップＳ２０８にて、シーケンサ１０５は、メモリ共有可能フラグをオフにする。ここで、メモリ共有可能フラグがオンである場合には、メモリアクセスのベースアドレスが一致する先行ロード命令のロードデータを共有し、オフである場合には通常のロード命令処理を行う。
【００５１】
ステップＳ２０９にて、シーケンサ１０５は、ステップＳ２０４において読み出したオペランド、ステップＳ２０７やＳ２０８において設定したメモリ共有可能フラグ、及び処理オフセット決定部１０７から入力されるパイプラインＩＤ情報をパイプラインレジスタＰＲＥＧに書き込む。また、シーケンサ１０５は、カウンタ値を基に生成した制御信号（例えばロード命令やストア命令であればメモリアクセスに係るバンクイネーブル信号等）やデスティネーションレジスタのインデックスをパイプラインレジスタＰＲＥＧに書き込む。
【００５２】
ステップＳ２１０にて、シーケンサ１０５は、ベクトル命令の処理を開始する（命令処理中状態に移行）。そして、パイプラインレジスタＰＲＥＧの値に従って、演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、ライトバックステージＷＢでの処理が行われる。
【００５３】
ステップＳ２０１において命令発行制御部１０２から起動信号が入力されていない場合（ステップＳ２０１のＮｏ）、ステップＳ２１１にて、シーケンサ１０５は、実行パイプラインで命令を処理中（命令処理中状態）であるか否かを確認する。実行パイプラインで命令を処理中（命令処理中状態）であれば、ステップＳ２１２にて、シーケンサ１０５は、ベクトル命令制御用のカウンタの値を１インクリメントする。次に、ステップＳ２１３にて、シーケンサ１０５は、カウンタ値がベクトル長未満であるか否かを判断し、カウンタ値がベクトル長以上であれば、カウンタ値を０にリセットする（ステップＳ２１４）。
【００５４】
次に、ステップＳ２１５にて、シーケンサ１０５は、命令によりオペランドが必要であるかを判断する。オペランドが必要であれば（ステップＳ２１５のＹｅｓ）、ステップＳ２１６にて、シーケンサ１０５は、カウンタ値からソースレジスタのインデックスを生成し、生成したソースレジスタのインデックスを基に、各種レジスタ（スカラレジスタ１０３、ベクトルレジスタ１０８、マスクレジスタ１１１）の値を読み出す。
【００５５】
次に、ステップＳ２１７にて、シーケンサ１０５は、処理中の命令がロード命令であるか否かを判断する。処理中の命令がロード命令であれば（ステップＳ２１７のＹｅｓ）、ステップＳ２１８にて、シーケンサ１０５は、メモリ共有可能フラグがオンであるか否かを判断する。
【００５６】
メモリ共有可能フラグがオンであれば（ステップＳ２１８のＹｅｓ）、ステップＳ２１９にて、シーケンサ１０５は、現在のカウンタ値とステップＳ２０２において保持した旧オフセット値とを比較する。その結果、現在のカウンタ値と旧オフセット値とが等しければ（ステップＳ２１９のＹｅｓ）、メモリアクセスのベースアドレスが一致する先行ロード命令の処理が終了する（処理中のロード命令のメモリアクセスと重なっている部分の処理が終了する）ため、ステップＳ２２０にて、シーケンサ１０５は、メモリ共有可能フラグをオフにする。
【００５７】
次に、ステップＳ２２１にて、シーケンサ１０５は、ステップＳ２１６において読み出したオペランド、メモリ共有可能フラグ、及び処理オフセット決定部１０７から入力されるパイプラインＩＤ情報をパイプラインレジスタＰＲＥＧに書き込む。また、シーケンサ１０５は、カウンタ値を基に生成した制御信号やデスティネーションレジスタのインデックスをパイプラインレジスタＰＲＥＧに書き込む。そして、更新されたパイプラインレジスタＰＲＥＧの値に従って、演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、ライトバックステージＷＢでの処理が行われる。
【００５８】
ステップＳ２２２にて、シーケンサ１０５は、処理オフセット決定部１０７から入力される処理オフセット値が０であるか否かを確認する。処理オフセット決定部１０７から入力される処理オフセット値が０である場合（ステップＳ２２２のＹｅｓ）、ステップＳ２２３にて、シーケンサ１０５は、現在のカウンタ値が（ベクトル長−１）であるか否かを判断し、現在のカウンタ値が（ベクトル長−１）であれば、ベクトル命令の処理を終了する（アイドル状態に移行）（ステップＳ２２５）。
【００５９】
処理オフセット決定部１０７から入力される処理オフセット値が０でない場合（ステップＳ２２２のＮｏ）、ステップＳ２２４にて、シーケンサ１０５は、現在のカウンタ値が（処理オフセット値−１）であるか否かを判断し、現在のカウンタ値が（処理オフセット値−１）であれば、ベクトル命令の処理を終了する（アイドル状態に移行）（ステップＳ２２５）。
【００６０】
図７は、本実施形態における実行パイプライン１０４での処理例を示すフローチャートである。図７には、実行パイプライン１０４での演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、及びライトバックステージＷＢの処理を示している。
【００６１】
演算実行ステージＥＸでは、ステップＳ３０１にて、命令がロード命令であるか否かを判定する。命令がロード命令であれば（ステップＳ３０１のＹｅｓ）、ステップＳ３０２にて、命令のソースオペランド（ベースアドレス）とカウンタ値とを基に、メモリアクセスのアドレスを算出する。メモリアクセスのアドレスは、オペランドで指定されているベースアドレスに（シーケンサのカウンタ値×メモリアクセスサイズ）を加算することで算出する。なお、ステップＳ３０１での判定の結果、命令がロード命令でなければ（ステップＳ３０１のＮｏ）、ステップＳ３０８にて命令に応じた処理を行う。
【００６２】
次に、ステップＳ３０３にて、シーケンサ１０５で生成されたメモリ共有可能フラグがオンであるか否かを判定する。メモリ共有可能フラグがオンであれば（ステップＳ３０３のＹｅｓ）、メモリアクセスのベースアドレスが一致する先行ロード命令とロードデータを共有するので、ステップＳ３０４にて、処理オフセット決定部１０７で生成されたパイプラインＩＤ情報が指すパイプライン１０４のバンクセレクト信号を自パイプラインのバンクセレクト信号に設定する。そして、ステップＳ３０５にて、自パイプラインのメモリアクセスイネーブル信号をディセーブルとし、自パイプラインではメモリアクセスを行わないように設定する。
【００６３】
また、ステップＳ３０３での判定の結果、メモリ共有可能フラグがオフであれば（ステップＳ３０３のＮｏ）、通常のロード命令処理を行うので、ステップＳ３０６にて、ステップＳ３０２において算出したアドレスに応じた自パイプラインのバンクセレクト信号を設定する。そして、ステップＳ３０７にて、自パイプラインのメモリアクセスイネーブル信号をイネーブルとし、自パイプラインによるメモリアクセスを行うように設定する。
【００６４】
メモリアクセスステージＭＥＭでは、ステップＳ３０９にて、メモリ共有可能フラグがオンであるかオフであるかにかかわらず、バンクセレクト信号に基づいて、データメモリ１１０からのロードデータを取り込む。続いて、ライトバックステージＷＢでは、ステップＳ３１０にて、メモリアクセスステージＭＥＭで取り込んだロードデータを各種レジスタに書き込む。
【００６５】
本実施形態によれば、発行するロード命令と同じ領域に対してメモリアクセスを行うロード命令が実行パイプラインにて処理中である場合には、現在処理している実行パイプライン１０４のシーケンサのカウンタ値を、発行するロード命令の処理オフセット値に設定することで、発行するロード命令のメモリアクセスアドレスと先行ロード命令のメモリアクセスアドレスとを一致させることができる。そして、発行するロード命令では、自パイプラインによるメモリアクセスを行わずに、他パイプラインによる先行ロード命令のメモリアクセスによるデータメモリ１１０からのデータを、ロードデータとして取り込む。これにより、複数のパイプラインで同じデータを使用する場合に、同じデータに対するメモリアクセスの重複をなくしてメモリアクセスの回数を減らすことができ、メモリアクセス効率を向上させ、消費電力を低減することができる。
【００６６】
例えば、図８（Ａ）に示すような、それぞれが８サイクルで実行されるベクトル命令Ａ〜ベクトル命令Ｈを実行するとする。このとき、ベクトル命令Ａのロード命令とベクトル命令Ｃのロード命令とは、ソースオペランドが“＠Ｒ４”で一致している。すなわち、ベクトル命令Ａのロード命令とベクトル命令Ｃのロード命令は、データメモリ１１０の同じ領域に対してメモリアクセスを行う。
【００６７】
この場合、本実施形態によれば図８（Ｂ）に示すように、後続ロード命令（ベクトル命令Ｃ）の処理をパイプラインＣで開始するときに、先行ロード命令（ベクトル命令Ａ）を処理しているパイプラインＡのシーケンサの現在のカウンタ値である“２”を、処理オフセット値としてパイプラインＣのシーケンサのカウンタ値として設定する。これにより、パイプラインＣでは、シーケンサのカウンタ値が２〜７の間においてはパイプラインＣによるメモリアクセスは行わずに、パイプラインＡによるメモリアクセスでのデータをロードデータとして取り込むことで、メモリアクセスの重複をなくしてメモリアクセスの回数を減らすことができる。
【００６８】
ここで、図８（Ａ）に示したようにベクトル命令ＣのデスティネーションレジスタがＶＲ１であり、ベクトル命令ＤのソースレジスタがＶＲ１であるので、ベクトル命令Ｃとベクトル命令Ｄとは依存関係を有する。そのため、ベクトル命令Ｃについてのみ処理オフセット値をパイプラインのシーケンサのカウンタ値に設定すると、図８（Ｃ）に示すようにパイプラインストールとなってしまう（ＲＡＷハザード）。そこで、本実施形態では、ベクトル命令Ｃ以降のベクトル命令Ｄ〜Ｈについても処理オフセット値をパイプラインのシーケンサのカウンタ値に設定することで、図８（Ｂ）に示すようにストールを発生させることなく処理を行うことができる。
【００６９】
また、例えば、図９（Ａ）に示すような、それぞれが８サイクルで実行されるベクトル命令Ａ〜ベクトル命令Ｈを実行するとする。このとき、ベクトル命令Ａのロード命令とベクトル命令Ｃのロード命令とは、ソースオペランドが“＠Ｒ４”で一致している。すなわち、ベクトル命令Ａのロード命令とベクトル命令Ｃのロード命令は、データメモリ１１０の同じ領域に対してメモリアクセスを行う。
【００７０】
この場合、本実施形態によれば図８に示した例と同様にして、図９（Ｂ）に示すように、後続ロード命令（ベクトル命令Ｃ）の処理をパイプラインＣで開始するときに、先行ロード命令（ベクトル命令Ａ）を処理しているパイプラインＡのシーケンサの現在のカウンタ値である“２”を、処理オフセット値としてパイプラインＣのシーケンサのカウンタ値として設定する。これにより、パイプラインＣでは、シーケンサのカウンタ値が２〜７の間においてはパイプラインＣによるメモリアクセスは行わずに、パイプラインＡによるメモリアクセスでのデータをロードデータとして取り込むことで、メモリアクセスの重複をなくしてメモリアクセスの回数を減らすことができる。
【００７１】
ここで、図９（Ａ）に示したようにベクトル命令ＣのデスティネーションレジスタがＶＲ１であり、ベクトル命令ＥのソースレジスタがＶＲ１であるので、ベクトル命令Ｃとベクトル命令Ｅとは依存関係を有する。そのため、ベクトル命令Ｃについてのみ処理オフセット値をパイプラインのシーケンサのカウンタ値に設定すると、図９（Ｃ）に示すようにパイプラインストールとなってしまう（ＲＡＷハザード）。そこで、本実施形態では、ベクトル命令Ｃ以降のベクトル命令Ｄ〜Ｈについても処理オフセット値をパイプラインのシーケンサのカウンタ値に設定することで、図９（Ｂ）に示すようにストールを発生させることなく処理を行うことができる。
【００７２】
また、例えば、図１０に示すように、以前に実行したベクトル命令により処理オフセット値が変更されている状態で、ベクトル命令Ａのロード命令とベクトル命令Ｄのロード命令でデータメモリ１１０の同じ領域に対してメモリアクセスを行う場合に、さらに処理オフセット値を変更しても動作に影響はなく、同様の効果が得られる。
【００７３】
なお、前述した説明では、命令フェッチステージＩＦ、命令デコードステージＩＤ、演算実行ステージＥＸ、メモリアクセスステージＭＥＭ、及びライトバックステージＷＢの５ステージのパイプライン構成のベクトルプロセッサを例に説明したが、これに限定されるものではなく、異なるステージ数のパイプライン構成のベクトルプロセッサに対しても適用可能である。また、ベクトルプロセッサが有する実行パイプラインの数も４つに限定されるものではなく、複数の実行パイプラインを有すれば良い。
【００７４】
図１１は、本実施形態におけるプロセッサ（ベクトルプロセッサ）を有する半導体集積回路の例を示す図である。図１１には、無線通信におけるベースバンド信号処理機能を有する半導体集積回路５０１を一例として示している。半導体集積回路５０１は、ＰＨＹ部（物理部）５０２、インタフェース部５０３、及びベースバンド処理部５０４を有する。ＲＦベースバンド信号は、ＰＨＹ部５０２及びインタフェース部５０３を介してベースバンド処理部５０４に供給される。
【００７５】
ベースバンド処理部５０４は、本実施形態におけるベクトルプロセッサを有するモデム５０５、スカラプロセッサ（ＣＰＵ）を有するモデム５０６、ベースバンド信号処理を含む各処理に使用されるデータ等を記憶するメモリ５０７、及びその他の処理機能を実現するハードウェア５０８、５０９を有する。ベースバンド処理部５０４が有する各機能部は、バスＢＵＳを介して通信可能に接続される。
【００７６】
図１１には、無線通信におけるベースバンド信号処理を行う半導体集積回路に本実施形態におけるプロセッサ（ベクトルプロセッサ）を用いた例を示したが、これに限定されるものではない。本実施形態におけるプロセッサ（ベクトルプロセッサ）は、例えば画像処理を行う半導体集積回路等にも適用可能である。
【００７７】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００７８】
１０１  命令メモリ
１０２  命令発行制御部
１０３  スカラレジスタ
１０４  実行パイプライン
１０５  シーケンサ
１０６  演算器
１０７  処理オフセット決定部
１０８  ベクトルレジスタ
１０９  セレクタ
１１０  データメモリ
１１１  マスクレジスタ
１１２  セレクタ
ＰＲＥＧ  パイプラインレジスタ
ＩＦ  命令フェッチステージ
ＩＤ  命令デコードステージ
ＥＸ  演算実行ステージ
ＭＥＭ  メモリアクセスステージ
ＷＢ  ライトバックステージ
【図１】
2016066218.tif 000003
【図２】
2016066218.tif 000004
【図３】
2016066218.tif 000005
【図４】
2016066218.tif 000006
【図５】
2016066218.tif 000007
【図６】
2016066218.tif 000008
【図７】
2016066218.tif 000009
【図８】
2016066218.tif 000010
【図９】
2016066218.tif 000011
【図１０】
2016066218.tif 000012
【図１１】
2016066218.tif 000013
【図１２】
2016066218.tif 000014