(57)【要約】【課題】面積オーバヘッドや消費電力を低く抑えたマイクロプロセッサを提供する。【解決手段】本発明は、データ配列単位での順次処理が可能なマイクロプロセッサであって、フェッチされた命令がデータのロード命令である場合に、指定されたデータを含んだデータ列をメモリ幅単位でデータメモリ１６からロードし、また、命令の解析結果に基づいて、ロードしたデータ列のうち、次回のロード命令で指定される予定のデータを特定するロードストアユニット１４と、ロードストアユニット１４により特定されたデータを記憶するデータ一時記憶部１７と、を備える。【選択図】図４
2010191511.tif 000002
【特許請求の範囲】
【請求項１】
データ配列単位での順次処理が可能なマイクロプロセッサであって、
フェッチされた命令がデータのロード命令である場合に、指定されたデータを含んだデータ列をメモリ幅単位でデータメモリからロードし、また、前記命令の解析結果に基づいて、前記ロードしたデータ列のうち、次回のロード命令で指定される予定のデータを特定するロードストアユニットと、
前記ロードストアユニットにより特定されたデータである使用予定データを記憶するデータ一時記憶部と、
を備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記ロードストアユニットは、さらに、データをロードした場合、前回のロード命令実行時に使用予定データとして特定したデータが前記データ一時記憶部で記憶されていれば、当該記憶されている使用予定データを取得し、前記ロードしたデータのうちの、今回のロード命令で指定されたデータと結合して、今回のロード命令に対応する最終的な処理対象データを生成することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記データ一時記憶部は、
前記使用予定データを格納するメモリと、
プログラムカウンタの値に基づいて、前記メモリ内のアクセス対象領域を決定するアドレス生成部と、
前記アドレス生成部により決定されたアクセス対象領域にアクセスし、前記ロードストアユニットからの指示に従って、当該ロードストアユニットから受け取った使用予定データの書き込み処理、または、書き込み済みの使用予定データを読み出して当該ロードストアユニットへ出力する処理、を行う制御部と、
を備えることを特徴とする請求項１または２に記載のマイクロプロセッサ。
【請求項４】
前記メモリを２バンク構成のメモリとし、
前記アドレス生成部は、プログラムカウンタの値に基づいて、前記メモリ内の一方のバンクを指定するバンクセレクト信号および指定したバンク内のアクセス対象領域を示すアドレス信号を生成し、
前記制御部は、前記アドレス生成部により生成されたバンクセレクト信号およびアドレス信号に従い、使用予定データを前記メモリの一方のバンクに書き込む処理、および前記メモリの他方のバンクから使用予定データを読み出す処理、を並行して実行する
ことを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記アドレス生成部は、ルックアップテーブルを利用し、当該ルックアップテーブルの各レコード内の情報とプログラムカウンタ値との比較結果に基づいて前記アクセス対象領域を決定することを特徴とする請求項３または４に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関する。
【背景技術】
【０００２】
マイクロプロセッサは、命令が格納されたメモリ（命令メモリ）、命令メモリから実行する命令をフェッチする（読み出す）命令フェッチユニット、命令フェッチユニットにより読み出された命令に従い、データが格納されたメモリへのアクセスや演算を行うプロセッシングユニット、データメモリ、などを備え、１回の命令で複数のデータに対する処理を同時に行うことが可能である。
【０００３】
ここで、プロセッシングユニットが実行する命令には、命令が示す処理で使用するデータ（データメモリからロードするデータ）の幅（ビット数）とデータメモリのメモリ幅とがアラインされていないものも含まれる。そのため、従来のマイクロプロセッサでは、このような命令を実行する際のレイテンシ増加やスループット低下を防止するために、メモリインスタンスを分割してバンク数を増加させた構成を採用し、命令により指定されたデータが存在しているすべてのバンクに同時アクセスする手法が使用されていた。
【０００４】
しかしながら、上記のような手法では、バンク数の増加に伴って面積オーバヘッドも増大してしまう、という問題がある。また、同時アクセスするバンク数の増加に伴い消費電力も増加する。
【０００５】
なお、下記特許文献１には、従来のマイクロプロセッサの一例として、パフォーマンスの低下を抑えた画像処理装置が記載されている。また、下記特許文献２には、従来のマイクロプロセッサの他の例として、ＳＩＭＤ（Single  Instruction  Multiple  Data）演算を効率良く行う半導体集積回路が記載されている。しかしながら、これらの特許文献１および２に記載の技術においては、データメモリのバンク数については考慮されていない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−３８５４４号公報
【特許文献２】特開２００２−３５８２８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、面積オーバヘッドや消費電力を従来よりも低く抑えたマイクロプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願発明の一態様によれば、データ配列単位での順次処理が可能なマイクロプロセッサであって、フェッチした命令がデータのロード命令である場合に、指定されたデータを含んだデータ列をメモリ幅単位でデータメモリからロードし、また、前記命令の解析結果に基づいて、前記ロードしたデータ列のうち、次回のロード命令で指定される予定のデータを特定するロードストアユニットと、前記ロードストアユニットにより特定されたデータである使用予定データを記憶するデータ一時記憶部と、を備えるマイクロプロセッサが提供される。
【発明の効果】
【０００９】
本発明によれば、参照データとメモリ幅がアラインされていない命令を実行する際の同時に参照するデータメモリのバンク数を削減できる。この結果、面積オーバヘッドや消費電力を従来よりも低く抑えたプロセッサが実現できる、という効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、命令実行時に使用するデータ（処理対象データ）とデータメモリのメモリ幅がアラインされている場合の動作例を示した図。
【図２】図２は、命令実行時に使用するデータ（処理対象データ）とデータメモリのメモリ幅がアラインされていない場合の動作例を示した図。
【図３】図３は、３×３画素の画像データを示した図。
【図４】図４は、第１の実施の形態にかかるマイクロプロセッサの構成例を示す図。
【図５】図５は、データ幅がメモリ幅にアラインされていない場合のメモリアクセス動作の概念を示した図。
【図６】図６は、データ一時記憶部の内部構成例を示す図。
【図７】図７は、マイクロプロセッサの全体動作を示した図。
【図８】図８は、メモリの各バンクに対する動作の関係を例示した図。
【図９】図９は、第２の実施の形態にかかるマイクロプロセッサが備えるアドレス生成部の構成例を示す図。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明の実施の形態にかかるマイクロプロセッサ（以下、単に「プロセッサ」と記載する）を詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【００１２】
ここでまず、各実施の形態にかかるプロセッサが実行する命令の種類と、同じ命令を従来のプロセッサが実行した場合の動作例について説明する。
【００１３】
図１は、命令実行時に使用するデータ（処理対象データ）とデータメモリのメモリ幅がアラインされている場合におけるプロセッサの動作例を示した図である。図１は、dmem＿widthの幅を持つデータメモリに対し、処理対象の画像データがラスタスキャン順（Ｄ0(0)，Ｄ1(0)，Ｄ2(0)，…）に配置されている場合の動作例を示している。より詳細には、プロセッサ（ｐｕ）が、dmem＿width幅のデータの各要素（Ｄ0(k)，Ｄ1(k)，Ｄ2(k)，…，Ｄ7(k)、ただし、k=0,1,2,…,n-1,n,n+1,…）に対して、複数の演算器エレメント（ｐ＃０，ｐ＃１，…,ｐ＃７）を割り当てて並列に命令を実行することにより、dmem＿width単位でＳＤ(0)，ＳＤ(1)，…，ＳＤ(n)の順に処理を進めるＳＩＭＤ型演算の動作例を示している。なお、命令inst-lのＳＤ(n)に対する実行をinst-l(n)と表現している。
【００１４】
また、図１は、ＳＤ(n)のデータ（Ｄ0(n)，Ｄ1(n)，Ｄ2(n)，…，Ｄ7(n)）に対する演算において、命令inst-l(n)によるメモリ参照がメモリ幅dmem＿widthにアラインされている場合の例を示している。このようなケースでは、各演算レメント(ｐ＃０〜ｐ＃７)に供給するデータ（Ｄ0(n)，Ｄ1(n)，Ｄ2(n)，…，Ｄ7(n)）を１回のメモリアクセスでロード可能である。
【００１５】
また、図２は、図１の例とは異なり、命令実行時に使用するデータとデータメモリのメモリ幅がアラインされていない場合におけるプロセッサの動作例を示した図である。これは、たとえば、図３に示したような３×３画素の画像データに対するフィルタ処理などで、各演算エレメントが、ある画素データ（ある画素位置のデータ）およびこれの１つ前および１つ後ろの画素データの２つのデータ（たとえば、ｂ０とｂ２の位置にある２つの画素データ、ｂ３とｂ５の位置にある２つの画素データ、など）を同時に読み出すことで演算を高速化できる場合に有効な動作である。
【００１６】
図示したように、図２の動作においては、演算エレメントｐ０は、Ｄ7(n-1)とＤ1(n)を参照し、演算エレメントｐ１は、Ｄ0(n)とＤ2(n)を参照する。同様に、演算エレメントｐｉは、Ｄi-1(n)とＤi+1(n)を参照する（i=2,3,4,5,6）。また、演算エレメントｐ７は、Ｄ6(n)とＤ0(n+1)を参照する。すなわち、演算エレメントｐ０およびｐ７はメモリ幅dmem＿widthの境界を跨いだ領域から２つのデータをロードする必要がある。このような動作を処理速度の低下を回避しつつ実現する場合、従来のプロセッサでは、３つのバンク（bank）を同時に参照できるような構成を採用して実現していた。しかしながら、このような複数（この例では３つ）のバンクを同時に参照可能な構成とした場合、すでに述べたように、面積オーバヘッドや消費電力の増大を招くことになる。したがって、同時に参照するバンク数は必要最小限に抑えた方が、面積オーバヘッドや消費電力の面で有利であり、結果として、コスト削減や性能向上を実現できる。
【００１７】
（第１の実施の形態）
つづいて、第１の実施の形態にかかるプロセッサについて説明する。なお、本実施の形態および第２の実施の形態では、プロセッサがＳＩＭＤ型プロセッサの場合の例について説明するが、演算器の構成がＳＩＭＤではない場合にも適用可能である。図４は、本発明の第１の実施の形態にかかるプロセッサの構成例を示す図である。図示したように、本実施の形態にかかるプロセッサは、命令メモリ（imem）１と、命令フェッチユニット（ifu）２と、プロセッシングユニット（pu）４と、データメモリ（dmem）１６と、データ一時記憶部（prevldbuf）１７とを備える。
【００１８】
命令メモリ１は、プロセッシングユニット５を制御するための命令を保持するメモリである。命令フェッチユニット２は、実行する命令の番号を示す値を出力するプログラムカウンタ（pc）３を備えており、このプログラムカウンタ３の出力値に従い、実行する命令を命令メモリ１から取り出す。
【００１９】
プロセッシングユニット４は、命令デコーダ（dec）５、複数の演算エレメント（p）６〜１３およびロードストアユニット（lsu）１４を備え、命令フェッチユニット２が命令メモリ１から取り出した命令に従い、各種処理を実行する。具体的には、命令フェッチユニット２で取り出された命令を受け取り、それを命令デコーダ５がデコードし、デコード後の命令に従い、ロードストアユニット１４がデータメモリ１６との間のデータのやりとり行とともに、演算エレメント６〜１３が各種演算を実行する。なお、ロードストアユニット１４は、データメモリ１６との間のデータの読み出し（ロード）や書き込み（ストア）をメモリ幅単位で行う。また、ロードストアユニット１４は、ロードしたデータの中に、次回のロード命令でも指定される予定のデータが含まれている場合、そのデータをデータ一時記憶部１７に格納する。加えて、演算エレメントが次に実行する処理で使用するデータ（使用予定データ）がデータ一時記憶部１７に格納されている場合、その使用予定データを取得する。
【００２０】
ここで、本実施の形態にかかるプロセッサの制御で使用する各種命令のフォーマットについては特に規定しないが、命令フェッチユニット２から受け取ったロード命令には、データメモリ１６からロードしたデータが次回のロード命令でも指定される予定であるかどうかの情報を含むものとする。
【００２１】
データメモリ１６は、２つのバンク領域（バンク＃０，バンク＃１）からなり、これら２つのバンクをプロセッシングユニット４から同時に参照できるようになっている。
【００２２】
データ一時記憶部１７は、制御回路（ctrl）１８と、アドレス生成部（addr）１９と、２バンク（バンクＡ，バンクＢ）構成のメモリ（SRAM：Static  Random  Access  Memory）２０と、を備え、プロセッシングユニット４から、将来使用する予定のデータ（Ｄ１）を受け取った場合それを保持し、保持しているデータの読み出し要求を受けた場合、要求が示すデータ（Ｄ２）を出力する。
【００２３】
制御回路（制御部）１８は、ロードストアユニット１４から入力された制御信号Ｓ２およびＳ３に従い、メモリ２０との間で、データ読み出しおよびデータ書き込みを行う。アドレス生成部１９は、プログラムカウンタの出力値（Ｓ１）に基づいて、メモリ２０にアクセスするためのアドレスを生成する。メモリ２０は、プロセッシングユニット４から受け取ったデータを、いずれかのバンク領域で保持する。
【００２４】
以上のような構成をとる本実施の形態にかかるプロセッサは、データ配列単位（図１や図２に示したＳＤ(0)，ＳＤ(1)，…，ＳＤ(n)に相当）で処理をラスタスキャン順に進める機能を有する。ここで、上記データ配列単位で処理をラスタスキャン順に進める場合、inst-m(n)（ある命令ｍのｎ回目の実行）で処理するデータは、inst-m(n-1)で処理するデータ配列と隣接しており、ロード命令が指定するデータ幅とデータメモリのメモリ幅がアラインされていれば、inst-m(n)がＳＤ(n)に対するロード要求を出した場合、inst-m(n-1)はＳＤ(n-1)を、inst-m(n+1)はＳＤ(n+1)を参照することになる。
【００２５】
そこで、本実施の形態のプロセッサでは、inst-m(n)により読み出したデータの中に、inst-m(n+1)でも参照するデータが存在する場合、すなわち、ロード命令が指定するデータ幅とデータメモリのメモリ幅がアラインされていない場合、inst-m(n+1)でも参照するデータをデータ一時記憶部１７で保持しておく。たとえば、図２に示した例の場合、inst-m(n)でロードしたデータのうち、inst-m(n+1)でも共通して参照され、かつinst-m(n+1)にとってメモリアラインからずれたデータＤ7(n)をデータ一時記憶部１７に格納する。そして、inst-m(n+1)では、データメモリ１６からＤ0(n+1)〜Ｄ7(n+1)，Ｄ0(n+2)を読み出すと共に、inst-m(n)のロード命令実行時に格納しておいたＤ7(n)をデータ一時記憶部１７から取り出し、データメモリ１６から読み出したデータ（Ｄ0(n+1)〜Ｄ7(n+1)，Ｄ0(n+2)）と結合して、演算処理で使用する最終的なデータ（処理対象データ）を得る。なお、この動作（メモリ幅にアラインされていないアクセス動作）の概念を図５に示している。このような動作を実行することにより、メモリ幅にアラインされていないアクセスにおける、同時に参照するデータメモリのバンク数を必要最小限に抑えられる。
【００２６】
図６は、上述したメモリ幅にアラインされていないアクセス動作で利用されるデータ一時記憶部１７の内部構成例を示す図である。なお、図６において、図４で示したものと同じ構成要素には同一の符号を付している。また、図６においては、アドレス生成部１９およびメモリ２０を除いた残りの部分が制御回路１８に相当する。
【００２７】
このデータ一時記憶部１７で保持するデータ数の上限は、プロセッサが許容するメモリアラインからのずれ幅に依存する。すなわち、データ一時記憶部１７がもつメモリ（ＳＲＡＭ）２０の各バンクは、上記ずれ幅に相当する数のデータを格納できるだけのビット幅に制限することが可能である。たとえば、図２に示したアクセスのみに対応したプロセッサの場合、メモリアラインからのはみだし幅は１なので、メモリ２０の各バンクのデータ幅は、１データ相当の幅であればよい。具体例を示すと、１データが１６ｂｉｔであれば、各バンクのデータ幅は１６ｂｉｔでよい。このようにすることで、メモリ容量を抑えることができる。なお、図６では、データ幅を６４ｂｉｔとした場合の例を示している。
【００２８】
また、メモリ２０の各バンク（バンクＡ，Ｂ）のワード数は、ＳＤ(n-1)のデータを参照可能な命令数に制限することで小さくすることが可能である。たとえば、ロード命令で指定可能なメモリアラインからの最大のずれ幅を１６ｂｉｔ(１６ｂｉｔデータ×１個)、メモリアラインからずれたロード命令の発行可能数上限を３２命令とすると、バンクＡ，Ｂは１６ｂｉｔ×１６ワード構成（バンクＡとＢの合計ワード数が３２）であればよい。これにより、メモリ容量を抑えることができる。
【００２９】
上記構成のデータ一時記憶部１７は、命令フェッチユニット２のプログラムカウンタ３からの出力信号（プログラムカウンタ値）であるPC（Ｓ１）と、プロセッシンユニット４のロードストアユニット１４からの出力信号であるMemLdReq（Ｓ２）およびLeftAccess（Ｓ３）と、に従い、ロードストアユニット１４からwdata（Ｄ１）経由で受け取ったデータをメモリ２０に格納するとともに、メモリ２０で保持しておいたデータをrdata（Ｄ２）経由でロードストアユニット１４へ出力する。ここで、MemLdReq信号（Ｓ２）は、データ一時記憶部１７で保持しているデータの出力（ロード）を要求する信号であり、LeftAccess信号（Ｓ３）は、メモリアラインからずれたアクセスであることを示す信号である。なお、詳細については後述するが、データ一時記憶部１７では、メモリ２０の一方のバンクに対してデータを書き込む動作と他方のバンクからデータを読み出す動作とを同時に行うことにより、プロセッサ全体としての処理速度の低下を防止している。
【００３０】
次に、データ一時記憶部１７の詳細動作について、プロセッサ内の関連する他の部分の動作説明を交えながら説明する。
【００３１】
命令フェッチユニット２により命令メモリ１から取り出された命令がデータのロード命令であり、かつメモリアラインからずれたメモリアクセスを示す場合、ロードストアユニット１４は、データ一時記憶部１７に対するMemLdReq信号Ｓ２およびLeftAccess信号Ｓ３をアサート（活性化）する。
【００３２】
データ一時記憶部１７では、MemLdReq信号Ｓ２がアサートされたことを検出すると、メモリ２０の読み出し動作を行う。以降、このサイクルをＬ０と呼ぶ。
【００３３】
具体的には、まず、制御回路１８において、MemLdReq信号Ｓ２およびLeftAccess信号Ｓ３のＡＮＤをとることで、メモリ２０の読み出し動作を示す信号（PBuffReadReq）を生成する。また、読み出し動作に連続して後述の書き込み動作を行うために、PBuffReadReqをrPBuffReqとしてレジスタに書き込む。
【００３４】
また、アドレス生成部１９では、入力されたプログラムカウンタ値（以下「ＰＣ値」と記載する）に基づいて、メモリ２０のアクセス先を示すアドレス信号（ReadAddress）およびバンク選択信号（ReadBankSel）を生成する。より詳細には、ＰＣ値の最下位ビットをバンク選択信号とし、残りのビットをアドレス信号として出力する。このようにした場合、ＰＣ値が連続するロード命令により使用するバンクが逆になり、後述する更新動作を連続して行うことが可能となる。また、ReadBankSelとReadAddressは次のサイクル（Ｌ１）で参照するため、rBankSelおよびrAddressとしてレジスタに書きこむ。
【００３５】
また、制御回路１８では、上記PBuffReadReqがアサートされている場合、ReadBankSelに従いバンクを選択する。具体的には、ReadBankSelが０であればバンクＡ読み出し要求信号（ReadBankA）を有効に、一方、ReadBankSelが１であればバンクＢ読み出し要求信号（ReadBankB）を有効にする。
【００３６】
さらに、制御回路１８では、BankA制御回路に対して読み出し要求（ReadBankA）と読み出しアドレス（ReadAddress）が入力され、BankA制御回路は、入力された読み出し要求（ReadBankA）と後述する書き込み要求とが衝突しなければ、バンクＡのアクセス要求（Req(A)）を有効にする。同様に、BankB制御回路に対して読み出し要求（ReadBankB）と読み出しアドレス（ReadAddress）が入力され、BankB制御回路は、入力された読み出し要求（ReadBankB）と後述する書き込み要求とが衝突しなければ、バンクＢのアクセス要求（Req(B)）を有効にする。
【００３７】
そして、制御回路１８は、メモリ２０のバンクＡおよびバンクＢから出力されたデータのどちらか一方をrBankSelに従い選択し、データ一時記憶部１７の読み出しデータrdata（Ｄ２）としてロードストアユニット１４に向けて出力する。
【００３８】
データ一時記憶部１７から出力されたデータを受け取ったロードストアユニット１４は、図７の上段に示したように、データ一時記憶部１７から出力されたrdata（Ｄ２）と、データメモリ１６から読み出したデータを結合して、各演算エレメントにおける演算処理単位（長さ）のデータを生成する。生成されたデータは所定の演算エレメントに渡され、データを受け取った演算エレメントは、命令デコーダ５でデコードされた命令に従った演算を実行する。
【００３９】
ここで、図７は、プロセッサの全体動作を示した図であり、上段には、サイクルＬ０で実行するデータメモリ１６およびメモリ２０（ＳＲＡＭ）からのデータ読み出し動作を示している。また、下段には、その次のサイクルＬ１で実行する動作を示している。すなわち、サイクルＬ０の次のサイクルＬ１におけるデータ一時記憶部１７の動作では、サイクルＬ０の動作でアクセス（参照）したメモリ２０内の領域に格納されたデータを更新する。
【００４０】
更新動作を具体的に示すと、更新する領域を示すバンクとアドレスは、読み出し時のものと同じであるため、制御回路１８は、サイクルＬ０で使用した値を保持しているレジスタrBankSelおよびrAddressを読み出して、更新用のバンク選択信号WriteBankSelおよびアドレスWriteAddressとする。
【００４１】
また、制御回路１８は、サイクルＬ０で読み出し動作を行ったことを表す前述のrPBuffReqを保持しているレジスタから値を読み出し、それを書き込み要求信号PBuffWriteReqとする。そして、このPBuffWriteReqがアサートされている場合、上記WriteBankSelに従いバンクを選択する。すなわち、WriteBankSelが０であればバンクＡ書き込み要求信号（WriteBankA）を有効に、一方、WriteBankSelが１であればバンクＢ書き込み要求信号（WriteBankB）を有効にする。
【００４２】
さらに、制御回路１８では、BankA制御回路に対して書き込み要求（WriteBankA）と書き込みアドレス（WriteAddress）が入力され、BankA制御回路は、入力された書き込み要求（WriteBankA）と上述した読み出し要求（ReadBankA）とが衝突しなければ、バンクＡのアクセス要求（Req(A)）を有効にする。同様に、BankB制御回路に対して書き込み要求（WriteBankB）と書き込みアドレス（WriteAddress）が入力され、BankB制御回路は、入力された書き込み要求（WriteBankB）と上述した読み出し要求（ReadBankB）とが衝突しなければ、バンクＢのアクセス要求（Req(B)）を有効にする。
【００４３】
そして、制御回路１８は、上記アクセス要求（Req(A)またはReq(B)）と、ロードストアユニット１４から受け取った書き込みデータwdata（Ｄ２）をメモリ２０に与えてデータを更新する。ここで、wdata（Ｄ２）は、ロードストアユニット１４がデータメモリ１６から読み出したＤ(n)のデータのうち、次の命令（inst-m(n+1)）実行時にも参照する部分（図７に示した動作例では右端部分Ｄ7(n)に相当）のデータが選択されたものである。
【００４４】
なお、図６で例示したデータ一時記憶部１７において、バンク制御回路（BankA制御回路，BankB制御回路）は、入力された書き込み要求（WriteBankA，WriteBankB）と読み出し要求（ReadBankA，ReadBankB）が衝突した場合にはアクセス要求（Req(A)，Req(B)）が有効とならないように、ＥｘＯＲ回路を備えた構成としたが、これをＯＲ回路とし、ロードストアユニット１４からデータ一時記憶部１７への入力信号を制御することによって、上記書き込み要求と読み出し要求が衝突しないような動作を実現してもよい。
【００４５】
また、上記説明では、メモリ２０の一方のバンクに対するデータ読み出し動作およびデータ書き込み動作について示したが、プロセッサでは、他方のバンクに対して逆の動作（一方が読み出し動作を行っていれば、他方は書き込み動作を行う）を並行して行うことにより、全体としての処理速度の低下を防止している（図８参照）。図８は、メモリ２０の各バンクに対する動作の関係を例示した図である。なお、“update”と記載されたサイクルでデータ書き込み動作を行う。
【００４６】
このように、本実施の形態のプロセッサでは、参照データ（処理対象データ）とデータメモリのメモリ幅がアラインされていないロード命令を実行する際、ロードするデータ列の中に、次回実行するロード命令で参照されるデータ（次回実行するロード命令で指定される予定のデータ）が含まれていれば、そのデータをデータ一時記憶部に保持しておき、次のロード命令の実行時には、保持しておいたデータをデータ一時記憶部から読み出すとともに、データ一時記憶部から読み出したデータ以外の残りの処理対象データ（ロード命令で指定されたデータのうち、一時記憶部で保持されていないデータ）をデータメモリから読み出すこととした。また、メモリ内の一方のバンクからデータを読み出す処理と、他方のバンクへデータを書き込む処理を並列に実行することとした。これにより、参照データとメモリ幅がアラインされていない命令を実行する際のレイテンシ増加やスループット低下を防止するために設けるデータメモリ内のバンク数を、従来よりも少なくできる。この結果、処理性能を維持しつつ面積オーバヘッドや消費電力を低く抑えたプロセッサが実現できる。
【００４７】
なお、上記特許文献１に記載の技術では、入力ラインバッファからＳＩＭＤプロセッサへのデータ転送時間が増大するケースがある。すなわち、データ転送速度がＡビット／サイクル，ＳＩＭＤ処理で使用するデータのビット幅（ビット数）がＢビットの場合、転送時間はＢ／Ａサイクルとなるが、たとえば、Ａ＝１６，Ｂ＝１２８とした場合、転送時間は８サイクルとなり、入力ラインバッファにデータが格納されてからＳＩＭＤ演算を開始するまでの待ち時間が発生する。また、上記特許文献２に記載の技術では、デュアルポートのデータバッファの利用を前提としている。しかしながら、本実施の形態のＳＩＭＤプロセッサでは、上記のような演算開始までの待ち時間（２サイクル以上の待ち時間）が発生するケースはなく、また、デュアルポートのデータバッファ利用を前提とすることもない。
【００４８】
（第２の実施の形態）
上述した第１の実施の形態のプロセッサでは、データ一時記憶部１７のアドレス生成部１９がプログラムカウンタ値（ＰＣ値）の最下位ビットをバンクセレクト信号として使用し、残りのビットをアドレス信号として使用する構成を採用していた（図６参照）。これに対して、本実施の形態では、ＰＣ値とＬＵＴ（ルックアップテーブル）に基づいてバンクセレクト信号とアドレス信号を生成する構成のプロセッサについて示す。なお、プロセッサの全体構成は、第１の実施の形態のプロセッサと同一である（図４参照）。
【００４９】
図９は、第２の実施の形態にかかるプロセッサが備えるデータ一時記憶部のアドレス生成部の構成例を示す図である。なお、データ一時記憶部の構成は、アドレス生成部１９ａを除いて、実施の形態１のデータ一時記憶部１７と同一である（図６参照）。
【００５０】
図９に示したように、アドレス生成部１９ａは、ＬＵＴ２１、複数の比較器２２および信号選択部２３を備える。ＬＵＴ２１は、複数（図９ではｎ個）のレコード領域を含み、各レコードは、タグ（tag）、アドレス（address）およびバンク識別情報（bankID）のフィールドからなる。比較器２２は、ＬＵＴ２１内のレコード数と同じ数だけ存在し、対応付けられたレコード内のタグと入力されたＰＣ値との比較結果を出力する。各比較結果は信号選択部２３へ入力される。信号選択部２３は、入力された各比較結果に基づいていずれか一つのレコードを選択し、そこに登録されているアドレスおよびバンク識別情報を出力する。また、この動作を実現するための構成要素として、ＬＵＴ２１の各レコードに格納されたアドレスのうちの一つを各比較器２２における比較結果に基づいて選択する第１のマルチプレクサ（ｍｕｘ＃１）と、ＬＵＴ２１の各レコードに格納されたバンク識別情報のうちの一つを各比較器２２における比較結果に基づいて選択する第２のマルチプレクサ（ｍｕｘ＃２）とを備える。
【００５１】
上記のようなアドレス生成部１９ａを採用した場合にも、第１の実施の形態で示したプロセッサと同様の効果が得られるプロセッサが実現できる。
【符号の説明】
【００５２】
３  プログラムカウンタ、１４  ロードストアユニット、１６  データメモリ、１７  データ一時記憶部、１８  制御回路、１９，１９ａ  アドレス生成部、２０  メモリ。
【図１】
2010191511.tif 000003
【図２】
2010191511.tif 000004
【図３】
2010191511.tif 000005
【図４】
2010191511.tif 000006
【図５】
2010191511.tif 000007
【図６】
2010191511.tif 000008
【図７】
2010191511.tif 000009
【図８】
2010191511.tif 000010
【図９】
2010191511.tif 000011