(57)【要約】【課題】回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算を含む場合であっても、効率良く処理を実行することができるＶＬＩＷプロセッサを実現する。【解決手段】ＶＬＩＷプロセッサ１０００は、命令制御部１と、レジスタファイル部２と、命令実行部３と、を備える。命令実行部３は、複数のスロットを有しており、第２スロット３２と第３スロット３３との間に、両スロット間でＮビットデータの受け渡すためのステートレジスタ３４が設けられている。このステートレジスタ３４に第３スロットから出力されるデータを格納し、利用することで、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算であっても効率良く処理を行うことができる。【選択図】図１
2015185076.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタを含むレジスタファイル部と、
第１スロットと、Ｎビット分（Ｎ：自然数）のデータを格納することができるステートレジスタと、を含む命令実行部と、
を備え、
前記第１スロットは、
前記レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、
前記レジスタファイル部にデータを出力するためのＮビットの第１出力ポートと、
前記ステートレジスタにデータを出力するためのＮビットの第２出力ポートと、
Ｎビットデータに対して演算処理を行うことで、２×Ｎビットデータの出力データを取得する第１スロット用第１拡張演算ユニットと、
を含み、
前記拡張演算ユニットにより取得された２×Ｎビットデータの前記出力データのうちのＮビット分のデータを、第１データとして、前記第１出力ポートから前記レジスタファイル部に出力し、
前記拡張演算ユニットにより取得された２×Ｎビットデータの前記出力データのうちの前記第１データを除くＮビット分のデータを、第２データとして、前記ステートレジスタに出力する、
ＶＬＩＷプロセッサ。
【請求項２】
前記第１スロットは、
前記第１スロットから前記ステートレジスタに出力され、前記ステートレジスタにより保持されている前記第２データを入力するＮビットの入力ポートをさらに含む、
請求項１に記載のＶＬＩＷプロセッサ。
【請求項３】
前記命令実行部は、
前記レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、
前記レジスタファイル部にデータを出力するためのＮビットの出力ポートと、
Ｎビットデータに対して処理の演算を行う第２スロット用第１演算ユニットと、
を含む第２スロットをさらに備え、
前記第１スロットは、
前記第１スロットから前記レジスタファイル部に出力され、前記レジスタファイル部により保持されている前記第１データを入力し、
前記ステートレジスタは、
前記第１スロットから出力された前記第２データを、前記第２スロットに出力する、
請求項１に記載のＶＬＩＷプロセッサ。
【請求項４】
前記第２スロットは、Ｎビットデータを読み出す読み出し部をさらに含み、
前記第２スロットの前記読み出し部は、前記ステートレジスタから出力されるデータを読み出し、読み出したデータを、前記レジスタファイル部に出力する、
請求項３に記載のＶＬＩＷプロセッサ。
【請求項５】
前記第２スロットは、
前記レジスタファイル部から出力されるデータ、および、前記ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを前記第２スロット用第１演算ユニットに入力させる第２スロット用選択部をさらに含む、
請求項３または４に記載のＶＬＩＷプロセッサ。
【請求項６】
前記第１スロットは、Ｎビットデータに対して処理の演算を行う第１スロット用第１演算ユニットをさらに含み、
前記第１スロット用第１拡張演算ユニットは、２つのＮビットデータに対して、乗算処理を行う第１スロット用乗算ユニットであり、
前記第１データは、前記第１スロット用乗算ユニットが乗算処理により取得した２×Ｎビットデータのうちの下位Ｎビットのデータであり、
前記第２データは、前記第１スロット用乗算ユニットが乗算処理により取得した２×Ｎビットデータのうちの上位Ｎビットのデータであり、
前記第１スロット用第１演算ユニットは、２つのＮビットデータに対して、加減算処理を行う第１スロット用加減算ユニットであり、
前記第２スロット用第１演算ユニットは、２つのＮビットデータに対して、加減算処理を行う第２スロット用加減算ユニットである、
請求項５に記載のＶＬＩＷプロセッサ。
【請求項７】
前記ステートレジスタは、保持しているＮビットデータを、前記第１スロットに出力し、
前記第１スロットは、
Ｎビットデータに対して演算処理を行うことで、２×Ｎビットデータの出力データを取得する第１スロット用第２拡張演算ユニットと、
Ｎビットデータに対して処理の演算を行う第１スロット用第１演算ユニットと、
前記レジスタファイル部から出力されるデータ、および、前記ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを前記第１スロット用第２拡張演算ユニットに入力させる第１スロット用選択部と、
をさらに含む、
請求項３から６のいずれかに記載のＶＬＩＷプロセッサ。
【請求項８】
前記第１スロット用第２拡張演算ユニットは、２つのＮビットデータに対して、シフト演算を行い、２×Ｎビットデータの出力データを取得する第１スロット用シフト演算ユニットである、
請求項７に記載のＶＬＩＷプロセッサ。
【請求項９】
前記第１スロット用シフト演算ユニットは、
シフト演算の処理対象のデータの上位Ｎビットデータを、前記第１スロット用選択部から出力されるデータとして、シフト演算を行う、
請求項８に記載のＶＬＩＷプロセッサ。
【請求項１０】
前記レジスタファイル部は、
前記第１スロット用加算ユニットの加減算処理により取得されるキャリーフラグを格納する領域を有しており、
前記第２スロット用加算ユニットは、前記レジスタファイル部に格納されている前記キャリーフラグを用いて、２つのＮビットデータに対して、加減算処理を行う、
請求項６に記載のＶＬＩＷプロセッサ。
【請求項１１】
前記第２スロット用加算ユニットは、
加減算処理の処理対象の一方のＮビットデータを、前記第２スロット用選択部から出力されるデータとして、加減算処理を行う、
請求項６に記載のＶＬＩＷプロセッサ。
【請求項１２】
前記命令実行部は、
前記レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、
前記レジスタファイル部にデータを出力するためのＮビットの出力ポートと、
所定のメモリからデータを取得するロード処理、および、前記所定のメモリにデータを格納するストア処理の少なくとも一方の処理を行うロード／ストアユニットと、
を含む第３スロットをさらに含む、
請求項１から１１のいずれかに記載のＶＬＩＷプロセッサ。
【請求項１３】
前記第１データは、前記拡張演算ユニットにより取得された２×Ｎビットデータの前記出力データのうちの下位Ｎビット分のデータであり、
前記第２データは、前記拡張演算ユニットにより取得された２×Ｎビットデータの前記出力データのうちの上位Ｎビット分のデータである、
請求項１から１２のいずれかに記載のＶＬＩＷプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＶＬＩＷ（Ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）アーキテクチャを採用するプロセッサ（ＶＬＩＷプロセッサ）に関する。
【背景技術】
【０００２】
画像データのような大容量データに対して効率良く演算処理を行うために、多様なプロセッサ技術が開発されている。
【０００３】
例えば、特許文献１には、グラフィックス処理用の画像処理プロセッサであって、ロード／ストアユニットと、複数の演算ユニットと、複数の演算ユニットの間において、ある演算ユニットの演算結果を、他の演算ユニットに入力させるための切り替えチャネルとを備える画像処理プロセッサの開示がある。
【０００４】
ところで、従来のプロセッサにおいて、画像処理や画像認識処理を実行する場合、主として、８ビットあるいは１６ビット単位での演算が実行されていた。近年、画像処理や画像認識処理の高度化・複雑化に伴い、画像処理や画像認識処理を実行するためのプロセッサでは、３２ビット単位の演算を実行する割合が大幅に増えてきている。
【０００５】
これに伴い、８ビットあるいは１６ビット単位での演算だけでなく、３２ビット単位の演算にも対応可能なプロセッサ（ＶＬＩＷプロセッサ）が求められている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２１６９４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、特許文献１の技術を用いて、１６ビット単位での演算だけでなく、３２ビット単位の演算にも対応可能なプロセッサを構成する場合、図１３に示すような構成が考えられる。
【０００８】
図１３は、従来技術を用いて構成した３２ビット単位の演算にも対応可能なプロセッサ９００の概略構成図である。
【０００９】
図１３に示すように、プロセッサ９００は、命令制御部９１と、切替チャネル９２と、命令実行部９３と、命令メモリＭ９１と、データメモリＭ９２とを備える。
【００１０】
命令制御部９１は、命令メモリＭ９１から命令を読み出し（命令フェッチ処理を行い）、読み出した命令をデコードする（命令デコード処理を行う）。そして、命令制御部９１は、命令デコード処理の結果に基づいて、切替チャネル９２および命令実行部９３に対する制御を行う。
【００１１】
命令実行部９３は、１サイクル（１クロックサイクル）で複数の命令を同時実行するために、１サイクルで同時に演算可能な複数の命令スロットを備える。命令実行部９３は、図１３に示すように、３つのスロット、すなわち、第１スロット９３１、第２スロット９３２、および、第３スロット９３３を有している。
【００１２】
第１スロット９３１は、データメモリＭ９２に対してデータのロード／ストアを行うロード／ストアユニットを有している。
【００１３】
第２スロット９３２は、３２ビット演算を行う加算ユニット（図１３に「Ａｄｄ３２」で示したユニット）と、１６ビット演算を行う論理演算ユニット（図１３に「Ｌｏｇｉｃ１６」で示したユニット）と、３２ビット演算を行うシフト演算ユニット（図１３に「Ｓｈｉｆｔ３２」で示したユニット）とを有している。
【００１４】
第３スロット９３３は、１６ビット演算を行う加算ユニット（図１３に「Ａｄｄ１６」で示したユニット）と、１６ビット演算を行う論理演算ユニット（図１３に「Ｌｏｇｉｃ１６」で示したユニット）と、１６ビット演算を行う乗算ユニット（図１３に「Ｍｕｌ１６」で示したユニット）とを有している。
【００１５】
命令メモリＭ９１は、プロセッサ９００で、演算を実行するための命令等を記憶する記憶装置である。
【００１６】
データメモリＭ９２は、プロセッサ９００で、演算を実行するためのデータ等を記憶することができる記憶装置である。
【００１７】
図１３から分かるように、プロセッサ９００では、第２スロット９３２に、３２ビット演算を行うユニットを設けたので、切替チャネル９２から、第２スロット９３２に、３２ビットのデータを２つ分送信する必要がある。例えば、加算ユニットＡｄｄ１６にて、３２ビットデータの加算演算を行う場合、２つの３２ビットデータが必要となる。このため、プロセッサ９００では、図１３に示すように、切替チャネル９２と第２スロット９３２との間に１６ビットデータの転送用パスが４つ（データパスＤｉ９２〜Ｄｉ９５）必要となる。つまり、プロセッサ９００において、切替チャネル９２と第２スロット９３２との間に、６４ビット分のデータパスが必要となる。
【００１８】
また、第２スロット９３２で３２ビット演算が実行された場合、その出力結果は、３２ビットデータとなるため、当該出力結果を、第２スロット９３２から切替チャネル９２に送信するために、３２ビット分のデータパスが必要となる。図１３では、１６ビットのデータ転送用のデータパスＤｏ９２、Ｄｏ９３により、第２スロット９３２から切替チャネル９２に送信するために、３２ビット分のデータパスを確保している。
【００１９】
また、プロセッサ９００では、第３スロット９３３に、出力結果が３２ビットとなる１６ビットデータの乗算を行う乗算ユニットＭｕｌ１６を設けたので、当該出力結果を、第３スロット９３３から切替チャネル９２に送信するために、３２ビット分のデータパスが必要となる。図１３では、１６ビットのデータ転送用のデータパスＤｏ９４、Ｄｏ９５により、第３スロット９３３から切替チャネル９２に送信するために、３２ビット分のデータパスを確保している。
【００２０】
このように、従来技術を用いて、３２ビット単位の演算にも対応可能なプロセッサ９００を構成した場合、切替チャネル９２と命令実行部９３との間に設置しなければならない入出力ポート数が多くなり、回路規模の増大を招く。また、切替チャネル９２を、例えば、汎用レジスタファイルに置換する構成も考えられるが、この場合であっても、汎用レジスタファイルと命令実行部９３との間に設置しなければならない入出力ポート数が多くなり、回路規模の増大を招く。
【００２１】
そこで、本発明は、上記問題点に鑑み、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算を含む場合であっても、効率良く処理を実行することができるＶＬＩＷプロセッサを実現することを目的とする。
【課題を解決するための手段】
【００２２】
上記課題を解決するために、第１の発明は、レジスタファイル部と、命令実行部と、を備えるＶＬＩＷプロセッサである。
【００２３】
命令実行部は、第１スロットと、Ｎビット分（Ｎ：自然数）のデータを格納することができるステートレジスタと、を含む。
【００２４】
第１スロットは、レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、レジスタファイル部にデータを出力するためのＮビットの第１出力ポートと、ステートレジスタにデータを出力するためのＮビットの第２出力ポートと、を含む。また、第１スロットは、Ｎビットデータに対して演算処理を行うことで、２×Ｎビットデータの出力データを取得する第１スロット用第１拡張演算ユニットを含む。
【００２５】
そして、第１スロットは、拡張演算ユニットにより取得された２×Ｎビットデータの出力データのうちのＮビット分のデータを、第１データとして、第１出力ポートからレジスタファイル部に出力し、拡張演算ユニットにより取得された２×Ｎビットデータの出力データのうちの第１データを除くＮビット分のデータを、第２データとして、前記ステートレジスタに出力する。
【００２６】
このＶＬＩＷプロセッサでは、第１スロットが、拡張演算ユニットにより取得された２×Ｎビットデータを、Ｎビットずつに分けた２つのデータとして、レジスタファイル部およびステートレジスタに出力する。つまり、このＶＬＩＷプロセッサでは、処理対象が２×Ｎビットデータとなる２×Ｎビット演算を実行する場合であっても、当該２×ＮビットデータのうちのＮビットデータが、ステートレジスタにより、保持され、例えば、次のサイクル（クロックサイクル）において、所定の演算ユニットにより利用することができる。
【００２７】
また、このＶＬＩＷプロセッサでは、第１スロットにおいて、レジスタファイル部からの入力ポートは、Ｎ×２ビット（Ｎ×２ビット分の入力ポート）であり、レジスタファイル部への出力ポートは、Ｎビット（Ｎビット分の出力ポート）であるため、ＶＬＩＷプロセッサが、Ｎビット演算のみを実行する場合に比べて、入出力ポート数を増やす必要がない。
【００２８】
このように、ＶＬＩＷプロセッサでは、上記の通り、レジスタファイル部の入出力ポート数を増加させることなく、２×Ｎビットの演算をサポートすることが可能となる。
【００２９】
したがって、ＶＬＩＷプロセッサでは、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算（Ｎ×２ビット演算）を含む場合であっても、効率良く処理を実行することができる。
【００３０】
第２の発明は、第１の発明であって、第１スロットは、第１スロットからステートレジスタに出力され、ステートレジスタにより保持されている第２データを入力する。
【００３１】
これにより、このＶＬＩＷプロセッサでは、例えば、１つ前のサイクルにおいて、第１スロットから出力されたＮビットデータを、現在のサイクルにおいて、ステートレジスタから第１スロットに入力させ、第１スロットでの演算に用いることができる。
【００３２】
第３の発明は、第１の発明であって、命令実行部は、第２スロットをさらに備える。
【００３３】
第２スロットは、レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、レジスタファイル部にデータを出力するためのＮビットの出力ポートと、Ｎビットデータに対して処理の演算を行う第２スロット用第１演算ユニットと、
を含む。
【００３４】
そして、第１スロットは、第１スロットから前記レジスタファイル部に出力され、レジスタファイル部により保持されている前記第１データを入力する。
【００３５】
ステートレジスタは、第１スロットから出力された第２データを、第２スロットに出力する。
【００３６】
これにより、このＶＬＩＷプロセッサでは、例えば、１つ前のサイクルにおいて、第１スロットから出力されたＮビットデータを、現在のサイクルにおいて、ステートレジスタから第２スロットに入力させ、第２スロットでの演算に用いることができる。
【００３７】
第４の発明は、第３の発明であって、第２スロットは、Ｎビットデータを読み出す読み出し部をさらに含む。
【００３８】
第２スロットの読み出し部は、ステートレジスタから出力されるデータを読み出し、読み出したデータを、レジスタファイル部に出力する。
【００３９】
このＶＬＩＷプロセッサでは、第２スロットの読み出し部により、ステートレジスタに保持されているＮビットデータを読み出し、所定のタイミングで、レジスタファイル部に出力することができるため、２×Ｎビットデータを扱う演算が存在していても効率良くレジスタファイル部に所定のデータを出力し、レジスタファイル部において、必要なデータを保持させることができる。
【００４０】
第５の発明は、第３または第４の発明であって、第２スロットは、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを第２スロット用第１演算ユニットに入力させる第２スロット用選択部をさらに含む。
【００４１】
これにより、このＶＬＩＷプロセッサでは、第２スロット用第１演算ユニットに、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方を選択して入力させることができるので、必要なデータを、第２スロット用第１演算ユニットに、入力することができる。例えば、第２スロット用第１演算ユニットが加減算処理を行う演算ユニットである場合、当該演算ユニットをＮビットデータの加減算処理に用いる場合、第１選択部により、レジスタファイル部から出力される２つのＮビットデータが入力されるようにすることができる。一方、上記演算ユニットを２×Ｎビットデータの加減算処理の上位Ｎビット分の加減算処理に用いる場合、ステートレジスタに２×Ｎビットデータのうちの上位Ｎビット分のデータ（例えば、第１スロットの加算演算ユニットで取得されたＮビット分のデータ）を保持し、第２スロット用選択部により、ステートレジスタの出力が上記演算ユニットに入力されるようにし、さらに、当該上位Ｎビット分のデータと加算する２×Ｎビットデータの上位Ｎビットデータをレジスタファイル部から入力されるようにすればよい。これにより、当該演算ユニットにおいて、２×Ｎビットデータの加減算処理の上位Ｎビットデータの加減算処理を実行することができる。
【００４２】
第６の発明は、第５の発明であって、第１スロットは、Ｎビットデータに対して処理の演算を行う第１スロット用第１演算ユニットをさらに含む。
【００４３】
第１スロット用第１拡張演算ユニットは、２つのＮビットデータに対して、乗算処理を行う第１スロット用乗算ユニットである。
【００４４】
第１データは、第１スロット用乗算ユニットが乗算処理により取得した２×Ｎビットデータのうちの下位Ｎビットのデータである。
【００４５】
第２データは、第１スロット用乗算ユニットが乗算処理により取得した２×Ｎビットデータのうちの上位Ｎビットのデータである。
【００４６】
第１スロット用第１演算ユニットは、２つのＮビットデータに対して、加減算処理を行う第１スロット用加算ユニットである。
【００４７】
第２スロット用第１演算ユニットは、２つのＮビットデータに対して、加減算処理を行う第２スロット用加算ユニットである。
【００４８】
これにより、第１スロットに、Ｎビットの乗算を行うユニット（乗算ユニット）と、Ｎビットの加減算処理を行うユニット（下位Ｎビットデータの加算ユニット）を割り当て、第２スロットに、Ｎビットの加減算処理を行うユニット（上位Ｎビットデータの加算ユニット）を割り当てることができる。
【００４９】
第７の発明は、第３から第６のいずれかの発明であって、ステートレジスタは、保持しているＮビットデータを、第１スロットに出力する。
【００５０】
第１スロットは、第１スロット用第２拡張演算ユニットと、第１スロット用第１演算ユニットと、第１スロット用選択部と、をさらに含む。
【００５１】
第１スロット用第２拡張演算ユニットは、Ｎビットデータに対して演算処理を行うことで、２×Ｎビットデータの出力データを取得する。
【００５２】
第１スロット用第１演算ユニットは、Ｎビットデータに対して処理の演算を行う。
【００５３】
第１スロット用選択部は、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを第１スロット用第２拡張演算ユニットに入力させる。
【００５４】
これにより、このＶＬＩＷプロセッサでは、例えば、１つ前のサイクルにおいて、第１スロットから出力されたＮビットデータを、現在のサイクルにおいて、ステートレジスタから第１スロットの第１スロット用第２拡張演算ユニットに入力させ、当該演算ユニットでの演算に用いることができる。
【００５５】
第８の発明は、第７の発明であって、第１スロット用第２拡張演算ユニットは、２つのＮビットデータに対して、シフト演算を行い、２×Ｎビットデータの出力データを取得する第１スロット用シフト演算ユニットである。
【００５６】
これにより、このＶＬＩＷプロセッサでは、第１スロット用シフト演算ユニットにより、例えば、ステートレジスタから出力されたＮビットデータと、レジスタファイル部から出力されたＮビットデータとを用いて、シフト演算処理を実行することができる。
【００５７】
第９の発明は、第８の発明であって、第１スロット用シフト演算ユニットは、シフト演算の処理対象のデータの上位Ｎビットデータを、第１スロット用選択部から出力されるデータとして、シフト演算を行う。
【００５８】
これにより、このＶＬＩＷプロセッサでは、第１スロット用シフト演算ユニットにより、例えば、ステートレジスタから出力されたＮビットデータを上位Ｎビットデータとし、レジスタファイル部から出力されたＮビットデータを下位Ｎビットデータとして、シフト演算処理を実行することができる。
【００５９】
第１０の発明は、第６の発明であって、レジスタファイル部は、第１スロット用加算ユニットの加減算処理により取得されるキャリーフラグを格納する領域を有している。
【００６０】
第２スロット用加算ユニットは、レジスタファイル部に格納されているキャリーフラグを用いて、２つのＮビットデータに対して、加減算処理を行う。
【００６１】
これにより、このＶＬＩＷプロセッサでは、例えば、第１スロットの演算ユニットでの加減算処理により生成されたキャリーフラグであって、レジスタファイル部に格納されたキャリーフラグを用いて、第２スロット用加算ユニットが、２つのＮビットデータに対する加減算処理を実行することができる。
【００６２】
第１１の発明は、第６の発明であって、第２スロット用加算ユニットは、加減算処理の処理対象の一方のＮビットデータを、第２スロット用選択部から出力されるデータとして、加減算処理を行う。
【００６３】
これにより、第２スロットにおいても、ステートレジスタに保持されているデータを利用することが可能となり、Ｎビットデータの演算処理（例えば、Ｎビットデータの加減算処理）および２×Ｎビットの演算処理（拡張演算処理（例えば、２×Ｎビットデータの加減算処理））を効率良く実行することが可能となる。
【００６４】
第１２の発明は、第１から第１１のいずれかの発明であって、命令実行部は、第３スロットをさらに備える。
【００６５】
第３スロットは、レジスタファイル部からの出力データを入力するためのＮ×２ビット（Ｎ：自然数）の入力ポートと、レジスタファイル部にデータを出力するためのＮビットの出力ポートと、所定のメモリからデータを取得するロード処理、および、前記所定のメモリにデータを格納するストア処理の少なくとも一方の処理を行うロード／ストアユニットと、を含む。
【００６６】
これにより、ロード／ストアユニットを含む第３スロットを備えるＶＬＩＷプロセッサを実現することができる。
【００６７】
第１３の発明は、第１から第１２のいずれかの発明であって、第１データは、拡張演算ユニットにより取得された２×Ｎビットデータの出力データのうちの下位Ｎビット分のデータである。
【００６８】
第２データは、拡張演算ユニットにより取得された２×Ｎビットデータの出力データのうちの上位Ｎビット分のデータである。
【００６９】
これにより、このＶＬＩＷプロセッサでは、第１データ（レジスタファイル部に出力するデータ）を下位Ｎビットデータとし、第２データ（ステートレジスタに出力するデータ）を上位Ｎビットデータとして、効率良く演算処理を実行することができる。
【発明の効果】
【００７０】
本発明によれば、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算を含む場合であっても、効率良く処理を実行することができるＶＬＩＷプロセッサを実現することができる。
【図面の簡単な説明】
【００７１】
【図１】第１実施形態に係るＶＬＩＷプロセッサ１０００の概略構成図。
【図２】命令実行部３の構成例（一例）の概略図。
【図３】ＭｕｌＳｈｉｆｔ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル２においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図４】ＭｕｌＳｈｉｆｔ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル３においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図５】ＭｕｌＳｈｉｆｔ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル４においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図６】ＭｕｌＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル３においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図７】ＭｕｌＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル４においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図８】ＭｕｌＳｈｉｆｔＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル４においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図９】ＭｕｌＳｈｉｆｔＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル５においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図１０】ＳｈｉｆｔＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル２においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図１１】ＳｈｉｆｔＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル３においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図１２】ＳｈｉｆｔＡｄｄ処理における各スロットに割り当てられる演算処理を示した図、および、サイクル４においてアクティブになっているＶＬＩＷプロセッサ１０００の部分を明示した図。
【図１３】従来技術を用いて構成した３２ビット単位の演算にも対応可能なプロセッサ９００の概略構成図。
【発明を実施するための形態】
【００７２】
［第１実施形態］
第１実施形態について、図面を参照しながら、以下、説明する。
【００７３】
＜１．１：ＶＬＩＷプロセッサの構成＞
図１は、第１実施形態に係るＶＬＩＷプロセッサ１０００の概略構成図である。
【００７４】
ＶＬＩＷプロセッサ１０００は、Ｎビット（Ｎ：自然数）単位の演算、および、２×Ｎビット単位の演算を行うＶＬＩＷプロセッサである。
【００７５】
なお、以下では、説明便宜のため、Ｎ＝１６、つまり、ＶＬＩＷプロセッサ１０００が、１６ビット単位の演算および３２ビット単位の演算を行うＶＬＩＷプロセッサである場合について、説明する。
【００７６】
ＶＬＩＷプロセッサ１０００は、図１に示すように、命令制御部１と、レジスタファイル部２と、命令実行部３と、命令メモリＭ１と、データメモリＭ２とを備える。
【００７７】
命令制御部１は、命令メモリＭ１から命令を読み出し（命令フェッチ処理を行い）、読み出した命令をデコードする（命令デコード処理を行う）。そして、命令制御部１は、命令デコード処理の結果に基づいて、レジスタファイル部２を制御するための制御信号Ｃｔｌ１を生成し、生成した制御信号Ｃｔｌ１をレジスタファイル部２に出力する。
【００７８】
また、命令制御部１は、命令デコード処理の結果に基づいて、命令実行部３を制御するための制御信号Ｃｔｌ２を生成し、生成した制御信号Ｃｔｌ２を命令実行部３に出力する。
【００７９】
レジスタファイル部２は、複数のレジスタを有しており、命令制御部１からの制御信号Ｃｔｌ１に基づいて、所定のレジスタのデータを命令実行部３の所定のスロットに出力する。また、レジスタファイル部２は、制御信号Ｃｔｌ１に基づいて、命令実行部３から出力されるデータを、所定のレジスタに入力されるように制御する。
【００８０】
命令実行部３は、１サイクル（１クロックサイクル）で複数の命令を実行するために、１サイクルで同時に演算可能な複数の命令スロットを備える。以下では、説明便宜のため、命令スロット数が「３」である場合について説明する。
【００８１】
命令実行部３は、図１に示すように、３つのスロット、すなわち、第１スロット３１、第２スロット３２、および、第３スロット３３を有している。また、命令実行部３は、ステートレジスタ３４を備える。
【００８２】
第１スロット３１は、データメモリＭ２に対して１６ビットのデータのロード／ストアを行うロード／ストアユニット３１１を備える。
【００８３】
第２スロット３２は、１６ビットデータの加算処理を行う加算ユニット３２１と、１６ビットデータに対して論理演算を行う論理演算ユニット３２２と、ステートレジスタ３４から１６ビットデータを読み出すステート読み出しユニット３２３と、を備える。なお、「加算処理」は、減算処理を含んでもよい。つまり、「加算処理」は、加減算処理であってもよい（以下、同様）。
【００８４】
第３スロット３３は、１６ビットデータの加算処理を行う加算ユニット３３１と、１６ビットデータに対して論理演算を行う論理演算ユニット３３２と、１６ビットデータの乗算を行う乗算ユニット３３３と、３２ビットデータに対してビットシフト処理を行うシフト演算ユニット３３４と、を備える。
【００８５】
ステートレジスタ３４は、第３スロット３３から出力される１６ビットデータを入力し、入力された１６ビットデータを記憶保持する。ステートレジスタ３４は、保持している１６ビットデータを第２スロット３２および第３スロット３３に出力する。
【００８６】
ここで、命令実行部３の構成例（一例）について、図２を用いて説明する。
【００８７】
図２は、命令実行部３の構成例（一例）の概略図である。
【００８８】
図２に示すように、命令実行部３の第２スロット３２は、加算ユニット３２１と、論理演算ユニット３２２と、ステート読み出しユニット３２３と、第１切替部３２４と、第２切替部３２５と、を備える。
【００８９】
第１切替部３２４は、レジスタファイル部２から出力される１６ビットデータＤｉ２１と、ステートレジスタ３４から出力される１６ビットデータＤｓｏとを入力とする。第１切替部３２４は、命令制御部１の指令（制御信号Ｃｔｌ２）に従い、１６ビットデータＤｉ２１および１６ビットデータＤｓｏのいずれか一方のデータを加算ユニット３２１に出力する。
【００９０】
加算ユニット３２１は、レジスタファイル部２から出力される１６ビットデータＤｉ２２と、第１切替部３２４から出力される１６ビットデータとを入力とし、入力された２つの１６ビットデータに対して加算処理を行う。そして、加算ユニット３２１は、加算処理後のデータを第２切替部３２５に出力する。
【００９１】
また、加算ユニット３２１は、３２ビット加算処理の上位１６ビットの加算処理を実行する場合、１６ビットデータＤｉ２２と第１切替部３２４から出力される１６ビットデータと、例えば、第３スロットの加算ユニット３３１が生成しレジスタファイル部２のキャリーレジスタ（不図示）に格納されているキャリーフラグ（キャリービット（１ビットデータ））とを入力とし、入力された３つのデータに対して加算処理を行う。そして、加算ユニット３２１は、加算処理後のデータを第２切替部３２５に出力する。
【００９２】
論理演算ユニット３２２は、レジスタファイル部２から出力される２つの１６ビットデータＤｉ２１、Ｄｉ２２を入力とし、入力された２つの１６ビットデータに対して所定の論理演算処理を行う。そして、論理演算ユニット３２２は、論理演算処理後のデータを第２切替部３２５に出力する。
【００９３】
ステート読み出しユニット３２３は、ステートレジスタ３４で保持されている１６ビットデータを読み出す。そして、ステート読み出しユニット３２３は、ステートレジスタ３４から読み出したデータを第２切替部３２５に出力する。
【００９４】
第２切替部３２５は、加算ユニット３２１からの出力、論理演算ユニット３２２からの出力、および、ステート読み出しユニット３２３からの出力を入力とする。そして、第２切替部３２５は、命令制御部１の指令（制御信号Ｃｔｌ２）に従い、加算ユニット３２１からの出力、論理演算ユニット３２２からの出力、および、ステート読み出しユニット３２３からの出力のいずれかをデータＤｏ２として、レジスタファイル部２に出力する。なお、第２切替部３２５は、加算ユニット３２１からの出力を選択して、レジスタファイル部２に出力する場合、加算演算のキャリーフラグをデータＤｏ２に含めて、レジスタファイル部２に出力するようにしてもよいし、また、別のパスを用いて、加算演算のキャリーフラグを、レジスタファイル部２に出力するようにしてもよい。
【００９５】
図２に示すように、命令実行部３の第３スロット３３は、加算ユニット３３１と、論理演算ユニット３３２と、乗算ユニット３３３と、シフト演算ユニット３３４と、第３切替部３３５と、第４切替部３３６と、第５切替部３３７とを備える。
【００９６】
第３切替部３３５は、レジスタファイル部２から出力される１６ビットデータＤｉ３２と、ステートレジスタ３４から出力される１６ビットデータＤｓｏとを入力とする。第３切替部３３５は、命令制御部１の指令（制御信号Ｃｔｌ２）に従い、１６ビットデータＤｉ３２および１６ビットデータＤｓｏのいずれか一方のデータをシフト演算ユニット３３４に出力する。
【００９７】
加算ユニット３３１は、レジスタファイル部２から出力される２つの１６ビットデータＤｉ３１とＤｉ３２とを入力とし、入力された２つの１６ビットデータに対して加算処理を行う。そして、加算ユニット３３１は、加算処理後のデータを第４切替部３３６に出力する。
【００９８】
また、加算ユニット３３１は、３２ビット加算処理の下位１６ビットの加算処理を実行する場合、１６ビットデータＤｉ３１と１６ビットデータＤｉ３２との加算処理により取得されるキャリーフラグ（キャリービット（１ビットデータ））を、レジスタファイル部２に出力し、例えば、レジスタファイル部２のキャリーレジスタに格納する（出力パスについて不図示）。
【００９９】
論理演算ユニット３３２は、レジスタファイル部２から出力される２つの１６ビットデータＤｉ３１と、Ｄｉ３２とを入力とし、入力された２つの１６ビットデータに対して所定の論理演算処理を行う。そして、論理演算ユニット３３２は、論理演算処理後のデータを第４切替部３３６に出力する。
【０１００】
乗算ユニット３３３は、レジスタファイル部２から出力される２つの１６ビットデータＤｉ３１、Ｄｉ３２を入力とし、入力された２つの１６ビットデータに対して乗算処理を行う。そして、乗算ユニット３３３は、乗算処理後の３２ビットデータのうち、下位１６ビットデータを第４切替部３３６に出力し、上位１６ビットのデータを第５切替部３３７に出力する。
【０１０１】
シフト演算ユニット３３４は、レジスタファイル部２から出力される１６ビットデータＤｉ３１と、第３切替部３３５から出力される１６ビットデータとを入力とし、入力された２つの１６ビットデータに対してシフト演算処理（３２ビットシフト演算処理）を行う。そして、シフト演算ユニット３３４は、シフト演算処理後の３２ビットデータのうち、下位１６ビットデータを第４切替部３３６に出力し、上位１６ビットのデータを第５切替部３３７に出力する。
【０１０２】
第４切替部３３６は、加算ユニット３３１からの出力、論理演算ユニット３３２からの出力、乗算ユニット３３３から出力される乗算結果データの下位１６ビットデータ、および、シフト演算ユニット３３４から出力されるシフト演算結果データの下位１６ビットデータを入力とする。そして、第４切替部３３６は、命令制御部１の指令（制御信号Ｃｔｌ２）に従い、上記４つのユニットからの出力のいずれかを選択して、データＤｏ３として、レジスタファイル部２に出力する。
【０１０３】
なお、第４切替部３３６は、加算ユニット３３１の加算処理で取得されたキャリーフラグをデータＤｏ３に含めて、出力するようにしてもよいし、また、別のパスを用いて、当該キャリーフラグを、レジスタファイル部２に出力するようにしてもよい。
【０１０４】
第５切替部３３７は、乗算ユニット３３３から出力される乗算結果データの上位１６ビットデータ、および、シフト演算ユニット３３４から出力されるシフト演算結果データの上位１６ビットデータを入力とする。そして、第５切替部３３７は、命令制御部１の指令（制御信号Ｃｔｌ２）に従い、上記２つのユニットからの出力のいずれかを選択して、データＤｓ３として、ステートレジスタ３４に出力する。
【０１０５】
ステートレジスタ３４は、第３スロット３３の第５切替部３３７から出力される１６ビットデータを入力し、入力された１６ビットデータを記憶保持する。ステートレジスタ３４は、保持している１６ビットデータを第２スロット３２のステート読み出しユニット３２３および第１切替部３２４と、第３スロット３３の第３切替部３３５に出力する。
【０１０６】
命令メモリＭ１は、ＶＬＩＷプロセッサ１０００で、演算を実行するための命令等を記憶することができる記憶装置である。命令メモリＭ１は、命令制御部１によりアクセス可能なメモリである。
【０１０７】
データメモリＭ２は、ＶＬＩＷプロセッサ１０００で、演算を実行するためのデータ等を記憶することができる記憶装置である。データメモリＭ２は、命令実行部３の第１スロット３１のロード／ストアユニット３１１によりアクセス可能なメモリである。
【０１０８】
なお、命令メモリＭ１およびデータメモリＭ２は、１つのメモリ（記憶装置）に実現されるものであってもよい。
【０１０９】
＜１．２：ＶＬＩＷプロセッサの動作＞
以上のように構成されたＶＬＩＷプロセッサ１０００の動作について、以下、図面を参照しながら、説明する。
【０１１０】
以下では、
（１）乗算処理を実行し、乗算結果に対してシフト演算処理を実行する場合（ＭｕｌＳｈｉｆｔ処理）、
（２）乗算処理を実行し、乗算結果に対して、加算処理を実行する場合（ＭｕｌＡｄｄ処理）、
（３）乗算処理を実行し、乗算結果に対して、シフト演算処理を実行し、シフト演算結果に対して加算処理を実行する場合（ＭｕｌＳｈｉｆｔＡｄｄ処理）、および、
（４）シフト演算処理を実行し、シフト演算結果に対して、加算処理を実行する場合（ＳｈｉｆｔＡｄｄ処理）、
について、説明する。
【０１１１】
（１．２．１：ＭｕｌＳｈｉｆｔ処理）
ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータを、３２ビットシフトする場合（この場合の処理を「ＭｕｌＳｈｉｆｔ処理」という。）について、説明する。
【０１１２】
図３の左図は、ＶＬＩＷプロセッサ１０００がＭｕｌＳｈｉｆｔ処理を実行する場合において、各スロット（第１スロット３１、第２スロット３２および第３スロット３３）に割り当てられる演算処理を、サイクル毎に示した図である。また、図３の右図は、サイクル２（Ｃｙｃ２）においてアクティブになっている部分を明示した図である。なお、アクティブになっている部分は、太線で示している（以下、同様）。
【０１１３】
図４、図５も、図３と同様の図である。
【０１１４】
図４の右図は、サイクル３（Ｃｙｃ３）においてアクティブになっている部分を明示した図である。
【０１１５】
図５の右図は、サイクル４（Ｃｙｃ４）においてアクティブになっている部分を明示した図である。
【０１１６】
ＭｕｌＳｈｉｆｔ処理は、例えば、２つの１６ビットデータを乗算し、固定小数点位置を合わせる処理に相当する。
【０１１７】
（Ｃｙｃ０）：
サイクル０（Ｃｙｃ０）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、ロード／ストア命令を発行し、第１スロット３１のロード／ストアユニット３１１は、当該ロード／ストア命令に基づいて、第３スロット３３の乗算ユニット３３３による乗算処理（Ｍｕｌ１６）に必要な２つの１６ビットデータ（ソースオペランド）のうちの１つを、データメモリＭ２から読み出す。そして、第１スロット３１は、読み出した１６ビットデータをレジスタファイル部２に出力する。
【０１１８】
レジスタファイル部２は、第１スロット３１から読み出された１６ビットデータを所定のレジスタに格納する。
【０１１９】
（Ｃｙｃ１）：
サイクル１（Ｃｙｃ１）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、ロード／ストア命令を発行し、第１スロット３１のロード／ストアユニット３１１は、当該ロード／ストア命令に基づいて、第３スロット３３の乗算ユニット３３３による乗算処理（Ｍｕｌ１６）に必要な２つの１６ビットデータ（ソースオペランド）のうちのもう１つのデータを、データメモリＭ２から読み出す。そして、第１スロット３１は、読み出した１６ビットデータをレジスタファイル部２に出力する。
【０１２０】
レジスタファイル部２は、第１スロット３１から読み出された１６ビットデータを所定のレジスタに格納する。
【０１２１】
（Ｃｙｃ２）：
サイクル２（Ｃｙｃ２）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、乗算命令を発行し、第３スロット３３の乗算ユニット３３３が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル０、１で、所定のレジスタに格納された乗算処理対象の２つの１６ビットデータを、データパスＤｉ３１、Ｄｉ３２を介して、第３スロット３３に出力する。
【０１２２】
第３スロット３３の乗算ユニット３３３は、データパスＤｉ３１、Ｄｉ３２を介して、入力された２つの１６ビットデータに対して乗算処理を実行する。そして、乗算ユニット３３３は、乗算結果の３２ビットデータのうち上位１６ビットのデータを１６ビットデータＤｓ３として、第５切替部３３７を介して、ステートレジスタ３４に出力する。そして、ステートレジスタ３４は、第３スロット３３から出力された１６ビットデータＤｓ３を格納する。
【０１２３】
また、乗算ユニット３３３は、乗算結果の３２ビットデータのうち下位１６ビットのデータを１６ビットデータＤｏ３として、第４切替部３３６を介して、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。
【０１２４】
（Ｃｙｃ３）：
サイクル３（Ｃｙｃ３）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、シフト演算命令を発行し、第３スロット３３のシフト演算ユニット３３４が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル２で、所定のレジスタに格納されたシフト演算対象の１６ビットデータ（乗算結果の下位１６ビットデータ）を、データパスＤｉ３１を介して、第３スロット３３に出力する。
【０１２５】
シフト演算ユニット３３４は、レジスタファイル部２から、データパスＤｉ３１を介して入力された１６ビットデータと、ステートレジスタ３４から出力された１６ビットデータ（乗算結果の上位１６ビットデータ）とを取得する。なお、このとき、第３切替部３３５は、命令制御部１からの指令により、ステートレジスタ３４からの出力を選択して、シフト演算ユニット３３４に出力するように制御されている。
【０１２６】
シフト演算ユニット３３４は、上記のようにして入力された、２つの１６ビットデータからなる３２ビットデータに対して、シフト演算処理を実行する。そして、シフト演算ユニット３３４は、シフト演算処理結果の３２ビットデータのうち上位１６ビットのデータを１６ビットデータＤｓ３として、第５切替部３３７を介して、ステートレジスタ３４に出力する。そして、ステートレジスタ３４は、第３スロット３３から出力された１６ビットデータＤｓ３を格納する。
【０１２７】
また、シフト演算ユニット３３４は、シフト演算処理結果の３２ビットデータのうち下位１６ビットのデータを１６ビットデータＤｏ３として、第４切替部３３６を介して、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。
【０１２８】
（Ｃｙｃ４）：
サイクル４（Ｃｙｃ４）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、読み出し命令を発行し、第２スロット３２のステート読み出しユニット３２３が実行可能な状態となる。ステート読み出しユニット３２３は、サイクル３でのシフト演算結果の上位１６ビットデータを、第２切替部３２５を介して、１６ビットデータＤｏ２として、レジスタファイル部２に出力する。なお、このとき、第２切替部３２５は、制御信号Ｃｔｌ２により、ステート読み出しユニット３２３からの出力を選択し、出力するように制御されている。
【０１２９】
レジスタファイル部２は、受信した上記の１６ビットデータＤｏ２を所定のレジスタに格納する。
【０１３０】
また、別のデータに対する乗算処理（第３スロットの乗算ユニット３３３による乗算処理）が、上記と同様にして、実行される。なお、この乗算処理の処理対象となる２つの１６ビットデータは、図５の右図に示すように、サイクル２、３において、第１スロット３１のロード／ストアユニット３１１により、データメモリＭ２から読み出され、レジスタファイル部２の所定のレジスタに格納されている。
【０１３１】
以上により、ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータを、３２ビットシフトする処理（ＭｕｌＳｈｉｆｔ処理）を実行することができる。
【０１３２】
（１．２．２：ＭｕｌＡｄｄ処理）
次に、ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータを、他の３２ビットデータと加算する場合（この場合の処理を「ＭｕｌＡｄｄ処理」という。）について、図６、図７を用いて説明する。このＭｕｌＡｄｄ処理の一例として、２つの１６ビットデータの乗算結果の累積加算処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【０１３３】
図６の左図は、ＶＬＩＷプロセッサ１０００がＭｕｌＡｄｄ処理を実行する場合において、各スロット（第１スロット３１、第２スロット３２および第３スロット３３）に割り当てられる演算処理を、サイクル毎に示した図である。また、図６の右図は、サイクル３（Ｃｙｃ３）においてアクティブになっている部分を明示した図である。
【０１３４】
図７は、図６と同様の図である。
【０１３５】
図７の右図は、サイクル４（Ｃｙｃ４）においてアクティブになっている部分を明示した図である。
【０１３６】
（Ｃｙｃ０〜２）：
サイクル０〜２（Ｃｙｃ０〜２）の処理は、「１．２．１：ＭｕｌＳｈｉｆｔ処理」におけるサイクル０〜２の処理と同様であるので、詳細な説明を省略する。
【０１３７】
（Ｃｙｃ３）：
サイクル３（Ｃｙｃ３）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＬ命令）を発行し、第３スロット３３の加算ユニット３３１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル２で、所定のレジスタに格納した乗算結果の下位１６ビットデータを、データパスＤｉ３１を介して、第３スロット３３に出力する。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の下位１６ビットデータを、データパスＤｉ３２を介して、第３スロット３３に出力する。
【０１３８】
第３スロット３３の加算ユニット３３１は、データパスＤｉ３１、Ｄｉ３２を介して、入力された２つの１６ビットデータに対して加算処理を実行する。そして、加算ユニット３３１は、加算結果の１６ビットデータを、１６ビットデータＤｏ３として、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。なお、加算ユニット３３１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１３９】
（Ｃｙｃ４）：
サイクル４（Ｃｙｃ４）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＨ命令）を発行し、第２スロット３２の加算ユニット３２１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の上位１６ビットデータを、データパスＤｉ２２を介して、第２スロット３２に出力する。
【０１４０】
また、ステートレジスタ３４は、サイクル２で格納した乗算結果（乗算ユニット３３３による乗算結果の上位１６ビットデータ）を、第１切替部３２４を介して、加算ユニット３２１に出力する。このとき、第１切替部３２４は、制御信号Ｃｔｌ２により、ステートレジスタ３４の出力が、加算ユニット３２１に出力されるように制御されている。
【０１４１】
第２スロット３２の加算ユニット３２１は、データパスＤｉ２２を介して、入力された１６ビットデータと、第１切替部３２４から出力される１６ビットデータ（乗算ユニット３３３による乗算結果の上位１６ビットデータ）と、加算ユニット３３１での加算処理により取得されたキャリービット（キャリービットの入力パスについては不図示）とに対して、加算処理を実行する。そして、加算ユニット３２１は、加算結果の１６ビットデータを、第２切替部３２５を介して、１６ビットデータＤｏ２として、レジスタファイル部２に出力する。なお、このとき、第２切替部３２５は、制御信号Ｃｔｌ２により、加算ユニット３２１の出力が、レジスタファイル部２に出力されるように制御されている。
【０１４２】
レジスタファイル部２は、受信した当該１６ビットデータＤｏ２を所定のレジスタに格納する。なお、加算ユニット３２１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１４３】
また、サイクル４において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、乗算命令を発行し、第３スロット３３の乗算ユニット３３３が実行可能な状態となる。そして、サイクル２の第３スロット３３の乗算ユニット３３３の処理と同様の処理が実行される。つまり、別のデータに対する乗算処理（第３スロットの乗算ユニット３３３による乗算処理）が、上記と同様にして、実行される。なお、この乗算処理の処理対象は、サイクル２、３において、第１スロット３１のロード／ストアユニット３１１により、データメモリＭ２から読み出され、レジスタファイル部２の所定のレジスタに格納されている。
【０１４４】
以上により、ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータを、他の３２ビットデータと加算する処理（ＭｕｌＡｄｄ処理）を実行することができる。
【０１４５】
（１．２．３：ＭｕｌＳｈｉｆｔＡｄｄ処理）
次に、ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータに対してシフト演算を行い、そのシフト演算結果を、他の３２ビットデータと加算する場合（この場合の処理を「ＭｕｌＳｈｉｆｔＡｄｄ処理」という。）について、図８、図９を用いて説明する。このＭｕｌＳｈｉｆｔＡｄｄ処理の一例として、２つの１６ビットデータの乗算結果データに対して固定小数点位置を合わせた後、累積加算する処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【０１４６】
図８の左図は、ＶＬＩＷプロセッサ１０００がＭｕｌＳｈｉｆｔＡｄｄ処理を実行する場合において、各スロット（第１スロット３１、第２スロット３２および第３スロット３３）に割り当てられる演算処理を、サイクル毎に示した図である。また、図８の右図は、サイクル４（Ｃｙｃ４）においてアクティブになっている部分を明示した図である。
【０１４７】
図９は、図８と同様の図である。
【０１４８】
図９の右図は、サイクル５（Ｃｙｃ５）においてアクティブになっている部分を明示した図である。
【０１４９】
（Ｃｙｃ０〜３）：
サイクル０〜３（Ｃｙｃ０〜３）の処理は、「１．２．１：ＭｕｌＳｈｉｆｔ処理」におけるサイクル０〜３の処理と同様であるので、詳細な説明を省略する。
【０１５０】
（Ｃｙｃ４）：
サイクル４（Ｃｙｃ４）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＬ命令）を発行し、第３スロット３３の加算ユニット３３１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル３で、所定のレジスタに格納したシフト演算処理結果の下位１６ビットデータを、データパスＤｉ３１を介して、第３スロット３３に出力する。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の下位１６ビットデータを、データパスＤｉ３２を介して、第３スロット３３に出力する。
【０１５１】
第３スロット３３の加算ユニット３３１は、データパスＤｉ３１、Ｄｉ３２を介して、入力された２つの１６ビットデータに対して加算処理を実行する。そして、加算ユニット３３１は、加算結果の１６ビットデータを、１６ビットデータＤｏ３として、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。なお、加算ユニット３３１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１５２】
（Ｃｙｃ５）：
サイクル５（Ｃｙｃ５）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＨ命令）を発行し、第２スロット３２の加算ユニット３２１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の上位１６ビットデータを、データパスＤｉ２２を介して、第２スロット３２に出力する。
【０１５３】
また、ステートレジスタ３４は、サイクル３で格納したシフト演算処理結果（シフト演算ユニット３３４によるシフト演算処理結果の上位１６ビットデータ）を、第１切替部３２４を介して、加算ユニット３２１に出力する。このとき、第１切替部３２４は、制御信号Ｃｔｌ２により、ステートレジスタ３４の出力が、加算ユニット３２１に出力されるように制御されている。
【０１５４】
第２スロット３２の加算ユニット３２１は、データパスＤｉ２２を介して、入力された１６ビットデータと、第１切替部３２４から出力される１６ビットデータ（シフト演算ユニット３３４によるシフト演算処理結果の上位１６ビットデータ）と、加算ユニット３３１での加算処理により取得されたキャリービット（キャリービットの入力パスについては不図示）とに対して、加算処理を実行する。そして、加算ユニット３２１は、加算結果の１６ビットデータを、第２切替部３２５を介して、１６ビットデータＤｏ２として、レジスタファイル部２に出力する。なお、このとき、第２切替部３２５は、制御信号Ｃｔｌ２により、加算ユニット３２１の出力が、レジスタファイル部２に出力されるように制御されている。
【０１５５】
レジスタファイル部２は、受信した当該１６ビットデータＤｏ２を所定のレジスタに格納する。なお、加算ユニット３２１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１５６】
また、サイクル５において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、乗算命令を発行し、第３スロット３３の乗算ユニット３３３が実行可能な状態となる。そして、サイクル２の第３スロット３３の乗算ユニット３３３の処理と同様の処理が実行される。つまり、別のデータに対する乗算処理（第３スロットの乗算ユニット３３３による乗算処理）が、上記と同様にして、実行される。なお、この乗算処理の処理対象は、サイクル３、４において、第１スロット３１のロード／ストアユニット３１１により、データメモリＭ２から読み出され、レジスタファイル部２の所定のレジスタに格納されている。
【０１５７】
以上により、ＶＬＩＷプロセッサ１０００において、２つの１６ビットデータに対して乗算処理を実行し、その乗算結果である３２ビットデータに対してシフト演算を行い、そのシフト演算結果を、他の３２ビットデータと加算する処理（ＭｕｌＳｈｉｆｔＡｄｄ処理）を実行することができる。
【０１５８】
（１．２．４：ＳｈｉｆｔＡｄｄ処理）
次に、ＶＬＩＷプロセッサ１０００において、３２ビットデータに対してシフト演算処理を実行し、そのシフト演算処理結果である３２ビットデータと、他の３２ビットデータと加算する場合（この場合の処理を「ＳｈｉｆｔＡｄｄ処理」という。）について、図１０〜１２を用いて説明する。このＳｈｉｆｔＡｄｄ処理の一例として、固定小数点位置を合わせた累積加算処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【０１５９】
図１０の左図は、ＶＬＩＷプロセッサ１０００がＳｈｉｆｔＡｄｄ処理を実行する場合において、各スロット（第１スロット３１、第２スロット３２および第３スロット３３）に割り当てられる演算処理を、サイクル毎に示した図である。また、図１０の右図は、サイクル２（Ｃｙｃ２）においてアクティブになっている部分を明示した図である。
【０１６０】
図１１、図１２は、図１０と同様の図である。
【０１６１】
図１１の右図は、サイクル３（Ｃｙｃ３）においてアクティブになっている部分を明示した図である。
【０１６２】
図１２の右図は、サイクル４（Ｃｙｃ４）においてアクティブになっている部分を明示した図である。
【０１６３】
（Ｃｙｃ０〜１）：
サイクル０〜１（Ｃｙｃ０〜１）の処理は、「１．２．１：ＭｕｌＳｈｉｆｔ処理」におけるサイクル０〜１の処理と同様であるので、詳細な説明を省略する。
【０１６４】
（Ｃｙｃ２）：
サイクル２（Ｃｙｃ２）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、シフト演算命令（Ｓｈｉｆｔ３２命令）を発行し、第３スロット３３のシフト演算ユニット３３４が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル０、１で、所定のレジスタに格納したシフト演算処理対象の３２ビットデータの下位１６ビットデータを、データパスＤｉ３１を介して、当該データの上位１６ビットデータを、データパスＤｉ３２を介して、第３スロット３３に出力する。
【０１６５】
第３スロット３３のシフト演算ユニット３３４は、データパスＤｉ３１を介して入力された１６ビットデータと、データパスＤｉ３２および第３切替部３３５を介して入力された１６ビットデータの２つの１６ビットデータに対してシフト演算処理を実行する。そして、シフト演算ユニット３３４は、シフト演算処理結果の３２ビットデータの上位１６ビットデータを、第５切替部３３７を介して、１６ビットデータＤｓ３として、ステートレジスタ３４に出力する。
【０１６６】
ステートレジスタ３４は、受信した１６ビットデータＤｓ３を格納する。
【０１６７】
また、シフト演算ユニット３３４は、シフト演算処理結果の３２ビットデータの下位１６ビットデータを、１６ビットデータＤｏ３として、第４切替部３３６を介して、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。
【０１６８】
（Ｃｙｃ３）：
サイクル３（Ｃｙｃ３）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＬ命令）を発行し、第３スロット３３の加算ユニット３３１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、サイクル２で、所定のレジスタに格納したシフト演算処理結果の下位１６ビットデータを、データパスＤｉ３１を介して、第３スロット３３に出力する。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の下位１６ビットデータを、データパスＤｉ３２を介して、第３スロット３３に出力する。
【０１６９】
第３スロット３３の加算ユニット３３１は、データパスＤｉ３１、Ｄｉ３２を介して、入力された２つの１６ビットデータに対して加算処理を実行する。そして、加算ユニット３３１は、加算結果の１６ビットデータを、１６ビットデータＤｏ３として、レジスタファイル部２に出力する。レジスタファイル部２は、受信した当該１６ビットデータＤｏ３を所定のレジスタに格納する。なお、加算ユニット３３１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１７０】
（Ｃｙｃ４）：
サイクル４（Ｃｙｃ４）において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、加算命令（ＡｄｄＨ命令）を発行し、第２スロット３２の加算ユニット３２１が実行可能な状態となる。また、レジスタファイル部２は、命令制御部１からの制御信号Ｃｔｌ２に基づいて、加算される３２ビットデータ（例えば、累積加算値（３２ビットデータ））の上位１６ビットデータを、データパスＤｉ２２を介して、第２スロット３２に出力する。
【０１７１】
また、ステートレジスタ３４は、サイクル２で格納したシフト演算処理結果（シフト演算ユニット３３４によるシフト演算処理結果の上位１６ビットデータ）を、第１切替部３２４を介して、加算ユニット３２１に出力する。このとき、第１切替部３２４は、制御信号Ｃｔｌ２により、ステートレジスタ３４の出力が、加算ユニット３２１に出力されるように制御されている。
【０１７２】
第２スロット３２の加算ユニット３２１は、データパスＤｉ２２を介して、入力された１６ビットデータと、第１切替部３２４から出力される１６ビットデータ（シフト演算ユニット３３４によるシフト演算処理結果の上位１６ビットデータ）とに対して、加算処理を実行する。そして、加算ユニット３２１は、加算結果の１６ビットデータを、第２切替部３２５を介して、１６ビットデータＤｏ２として、レジスタファイル部２に出力する。なお、このとき、第２切替部３２５は、制御信号Ｃｔｌ２により、加算ユニット３２１の出力が、レジスタファイル部２に出力されるように制御されている。
【０１７３】
レジスタファイル部２は、受信した当該１６ビットデータＤｏ２を所定のレジスタに格納する。なお、加算ユニット３２１での加算処理により取得されたキャリービットも、レジスタファイル部２に出力され、所定のレジスタ（例えば、キャリーレジスタ）に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【０１７４】
また、サイクル４において、命令制御部１は、命令実行部３に対して、制御信号Ｃｔｌ２により、シフト演算命令（Ｓｈｉｆｔ３２命令）を発行し、第３スロット３３のシフト演算ユニット３３４が実行可能な状態となる。そして、サイクル２の第３スロット３３のシフト演算ユニット３３４の処理と同様の処理が実行される。つまり、別のデータに対するシフト演算処理が、上記と同様にして、実行される。なお、このシフト演算処理の処理対象は、サイクル２、３において、第１スロット３１のロード／ストアユニット３１１により、データメモリＭ２から読み出され、レジスタファイル部２の所定のレジスタに格納されている。
【０１７５】
以上により、ＶＬＩＷプロセッサ１０００において、３２ビットデータに対してシフト演算処理を実行し、そのシフト演算処理結果である３２ビットデータと、他の３２ビットデータと加算する処理（ＳｈｉｆｔＡｄｄ処理）を実行することができる。
【０１７６】
以上のように、ＶＬＩＷプロセッサ１０００では、処理対象が３２ビットデータとなる３２ビット演算を実行する場合であっても、当該３２ビットデータの上位１６ビットデータが、ステートレジスタ３４により、保持され、次のサイクルにおいて、所定の演算ユニットにより利用することができる。
【０１７７】
また、上記の通り、ＶＬＩＷプロセッサ１０００では、ステートレジスタ３４が、第３スロット３３から出力される３２ビットデータの上位１６ビットデータを格納保持し、格納したデータを第２スロット３２または第３スロット３３に出力することができる。したがって、ＶＬＩＷプロセッサ１０００では、第３スロット３３から３２ビットデータをレジスタファイル部２に出力する必要がなく、また、レジスタファイル部２から第３スロット３３に３２ビットデータを出力する必要もない。つまり、ＶＬＩＷプロセッサ１０００では、レジスタファイル部２と命令実行部３との間において、１６ビットデータのみが入出力されることが保証されるので、レジスタファイル部２と命令実行部３との間の入出力ポートを、１６ビット演算のみを実行する場合に比べて、増やす必要がない。
【０１７８】
すなわち、ＶＬＩＷプロセッサ１０００では、上記の通り、レジスタファイル部２の入出力ポート数を増加させることなく、Ｎビット演算（Ｎ：自然数）を各スロットに割り当てながら、２×Ｎビットの演算をサポートすることが可能となる。
【０１７９】
このように、ＶＬＩＷプロセッサ１０００では、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算（上記では、３２ビット演算）を含む場合であっても、効率良く処理を実行することができる
［他の実施形態］
上記実施形態において、第３スロット３３から出力される３２ビットデータの上位１６ビットデータをステートレジスタ３４に出力し、下位１６ビットデータをレジスタファイル部２に出力する場合について説明したが、これに限定されることはない。ＶＬＩＷプロセッサ１０００において、例えば、第３スロット３３から出力される３２ビットデータの下位１６ビットデータをステートレジスタ３４に出力し、上位１６ビットデータをレジスタファイル部２に出力するようにしてもよい。
【０１８０】
また、上記実施形態では、第２スロット３２の加算ユニット３２１と、第３スロット３３の加算ユニット３３１とは、３２ビット加算処理に使用される場合について説明したが、これに限定されることはない。例えば、第２スロット３２の加算ユニット３２１および第３スロット３３の加算ユニット３３１を、それぞれ、１６ビットデータの加算処理を実行する演算処理ユニットして機能させてもよい。これにより、ＶＬＩＷプロセッサ１０００において、１６ビットデータの加算処理を、同一サイクルにおいて、第２スロット３２と、第３スロット３３とに割り当てることも可能となる。
【０１８１】
上記実施形態では、ＶＬＩＷプロセッサ１０００において、命令実行部３のスロット数が「３」の場合について説明したが、これに限定されることはなく、命令実行部３は、他の数のスロットを有するものであってもよい。
【０１８２】
また、上記実施形態の一部または全部を組み合わせるようにしてもよい。
【０１８３】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【０１８４】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【０１８５】
１０００  ＶＬＩＷプロセッサ
１  命令制御部
２  レジスタファイル部
３  命令実行部
３１  第１スロット
３２  第２スロット
３３  第３スロット
３１１  ロード／ストアユニット
３２１、３３１  加算ユニット
３２２、３３２  論理演算ユニット
３２３  ステート読み出しユニット
３３３  乗算ユニット
３３４  シフト演算ユニット
３２４  第１切替部
３２５  第２切替部
３３５  第３切替部
３３６  第４切替部
３４  ステートレジスタ
【図１】
2015185076.tif 000003
【図２】
2015185076.tif 000004
【図３】
2015185076.tif 000005
【図４】
2015185076.tif 000006
【図５】
2015185076.tif 000007
【図６】
2015185076.tif 000008
【図７】
2015185076.tif 000009
【図８】
2015185076.tif 000010
【図９】
2015185076.tif 000011
【図１０】
2015185076.tif 000012
【図１１】
2015185076.tif 000013
【図１２】
2015185076.tif 000014
【図１３】
2015185076.tif 000015