(58)【調査した分野】(Int.Cl.,DB名)
前記第1スロット用第2拡張演算ユニットは、2つのNビットデータに対して、シフト演算を行い、2×Nビットデータの出力データを取得する第1スロット用シフト演算ユニットである、
請求項5に記載のVLIWプロセッサ。
【発明の概要】
【発明が解決しようとする課題】
【0007】
例えば、特許文献1の技術を用いて、16ビット単位での演算だけでなく、32ビット単位の演算にも対応可能なプロセッサを構成する場合、
図13に示すような構成が考えられる。
【0008】
図13は、従来技術を用いて構成した32ビット単位の演算にも対応可能なプロセッサ900の概略構成図である。
【0009】
図13に示すように、プロセッサ900は、命令制御部91と、切替チャネル92と、命令実行部93と、命令メモリM91と、データメモリM92とを備える。
【0010】
命令制御部91は、命令メモリM91から命令を読み出し(命令フェッチ処理を行い)、読み出した命令をデコードする(命令デコード処理を行う)。そして、命令制御部91は、命令デコード処理の結果に基づいて、切替チャネル92および命令実行部93に対する制御を行う。
【0011】
命令実行部93は、1サイクル(1クロックサイクル)で複数の命令を同時実行するために、1サイクルで同時に演算可能な複数の命令スロットを備える。命令実行部93は、
図13に示すように、3つのスロット、すなわち、第1スロット931、第2スロット932、および、第3スロット933を有している。
【0012】
第1スロット931は、データメモリM92に対してデータのロード/ストアを行うロード/ストアユニットを有している。
【0013】
第2スロット932は、32ビット演算を行う加算ユニット(
図13に「Add32」で示したユニット)と、16ビット演算を行う論理演算ユニット(
図13に「Logic16」で示したユニット)と、32ビット演算を行うシフト演算ユニット(
図13に「Shift32」で示したユニット)とを有している。
【0014】
第3スロット933は、16ビット演算を行う加算ユニット(
図13に「Add16」で示したユニット)と、16ビット演算を行う論理演算ユニット(
図13に「Logic16」で示したユニット)と、16ビット演算を行う乗算ユニット(
図13に「Mul16」で示したユニット)とを有している。
【0015】
命令メモリM91は、プロセッサ900で、演算を実行するための命令等を記憶する記憶装置である。
【0016】
データメモリM92は、プロセッサ900で、演算を実行するためのデータ等を記憶することができる記憶装置である。
【0017】
図13から分かるように、プロセッサ900では、第2スロット932に、32ビット演算を行うユニットを設けたので、切替チャネル92から、第2スロット932に、32ビットのデータを2つ分送信する必要がある。例えば、加算ユニットAdd16にて、32ビットデータの加算演算を行う場合、2つの32ビットデータが必要となる。このため、プロセッサ900では、
図13に示すように、切替チャネル92と第2スロット932との間に16ビットデータの転送用パスが4つ(データパスDi92〜Di95)必要となる。つまり、プロセッサ900において、切替チャネル92と第2スロット932との間に、64ビット分のデータパスが必要となる。
【0018】
また、第2スロット932で32ビット演算が実行された場合、その出力結果は、32ビットデータとなるため、当該出力結果を、第2スロット932から切替チャネル92に送信するために、32ビット分のデータパスが必要となる。
図13では、16ビットのデータ転送用のデータパスDo92、Do93により、第2スロット932から切替チャネル92に送信するために、32ビット分のデータパスを確保している。
【0019】
また、プロセッサ900では、第3スロット933に、出力結果が32ビットとなる16ビットデータの乗算を行う乗算ユニットMul16を設けたので、当該出力結果を、第3スロット933から切替チャネル92に送信するために、32ビット分のデータパスが必要となる。
図13では、16ビットのデータ転送用のデータパスDo94、Do95により、第3スロット933から切替チャネル92に送信するために、32ビット分のデータパスを確保している。
【0020】
このように、従来技術を用いて、32ビット単位の演算にも対応可能なプロセッサ900を構成した場合、切替チャネル92と命令実行部93との間に設置しなければならない入出力ポート数が多くなり、回路規模の増大を招く。また、切替チャネル92を、例えば、汎用レジスタファイルに置換する構成も考えられるが、この場合であっても、汎用レジスタファイルと命令実行部93との間に設置しなければならない入出力ポート数が多くなり、回路規模の増大を招く。
【0021】
そこで、本発明は、上記問題点に鑑み、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算を含む場合であっても、効率良く処理を実行することができるVLIWプロセッサを実現することを目的とする。
【課題を解決するための手段】
【0022】
上記課題を解決するために、第1の発明は、レジスタファイル部と、命令実行部と、を備えるVLIWプロセッサである。
【0023】
命令実行部は、第1スロットと、Nビット分(N:自然数)のデータを格納することができるステートレジスタと、を含む。
【0024】
第1スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの第1出力ポートと、ステートレジスタにデータを出力するためのNビットの第2出力ポートと、を含む。また、第1スロットは、Nビットデータに対して演算処理を行うことで、2×Nビットデータの出力データを取得する第1スロット用第1拡張演算ユニットを含む。
【0025】
そして、第1スロットは、
第1スロット用第1拡張演算ユニットにより取得された2×Nビットデータの出力データのうちのNビット分のデータを、第1データとして、第1出力ポートからレジスタファイル部に出力し、
第1スロット用第1拡張演算ユニットにより取得された2×Nビットデータの出力データのうちの第1データを除くNビット分のデータを、第2データとして、前記ステートレジスタに出力する。
【0026】
このVLIWプロセッサでは、第1スロットが、
第1スロット用第1拡張演算ユニットにより取得された2×Nビットデータを、Nビットずつに分けた2つのデータとして、レジスタファイル部およびステートレジスタに出力する。つまり、このVLIWプロセッサでは、処理対象が2×Nビットデータとなる2×Nビット演算を実行する場合であっても、当該2×NビットデータのうちのNビットデータが、ステートレジスタにより、保持され、例えば、次のサイクル(クロックサイクル)において、所定の演算ユニットにより利用することができる。
【0027】
また、このVLIWプロセッサでは、第1スロットにおいて、レジスタファイル部からの入力ポートは、N×2ビット(N×2ビット分の入力ポート)であり、レジスタファイル部への出力ポートは、Nビット(Nビット分の出力ポート)であるため、VLIWプロセッサが、Nビット演算のみを実行する場合に比べて、入出力ポート数を増やす必要がない。
【0028】
このように、VLIWプロセッサでは、上記の通り、レジスタファイル部の入出力ポート数を増加させることなく、2×Nビットの演算をサポートすることが可能となる。
【0029】
したがって、VLIWプロセッサでは、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算(N×2ビット演算)を含む場合であっても、効率良く処理を実行することができる。
【0030】
第2の発明は、第1の発明であって、第1スロットは、第1スロットからステートレジスタに出力され、ステートレジスタにより保持されている第2データを入力する。
【0031】
これにより、このVLIWプロセッサでは、例えば、1つ前のサイクルにおいて、第1スロットから出力されたNビットデータを、現在のサイクルにおいて、ステートレジスタから第1スロットに入力させ、第1スロットでの演算に用いることができる。
【0032】
第3の発明は、第1の発明であって、命令実行部は、第2スロットをさらに備える。
【0033】
第2スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの出力ポートと、Nビットデータに対して処理の演算を行う第2スロット用第1演算ユニットと、
を含む。
【0034】
そして、第1スロットは、第1スロットから前記レジスタファイル部に出力され、レジスタファイル部により保持されている前記第1データを入力する。
【0035】
ステートレジスタは、第1スロットから出力された第2データを、第2スロットに出力する。
【0036】
これにより、このVLIWプロセッサでは、例えば、1つ前のサイクルにおいて、第1スロットから出力されたNビットデータを、現在のサイクルにおいて、ステートレジスタから第2スロットに入力させ、第2スロットでの演算に用いることができる。
【0037】
第4の発明は、第3の発明であって、第2スロットは、Nビットデータを読み出す読み出し部をさらに含む。
【0038】
第2スロットの読み出し部は、ステートレジスタから出力されるデータを読み出し、読み出したデータを、レジスタファイル部に出力する。
【0039】
このVLIWプロセッサでは、第2スロットの読み出し部により、ステートレジスタに保持されているNビットデータを読み出し、所定のタイミングで、レジスタファイル部に出力することができるため、2×Nビットデータを扱う演算が存在していても効率良くレジスタファイル部に所定のデータを出力し、レジスタファイル部において、必要なデータを保持させることができる。
【0040】
第5の発明は、第3または第4の発明であって、第2スロットは、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを第2スロット用第1演算ユニットに入力させる第2スロット用選択部をさらに含む。
【0041】
これにより、このVLIWプロセッサでは、第2スロット用第1演算ユニットに、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方を選択して入力させることができるので、必要なデータを、第2スロット用第1演算ユニットに、入力することができる。例えば、第2スロット用第1演算ユニットが加減算処理を行う演算ユニットである場合、当該演算ユニットをNビットデータの加減算処理に用いる場合、第1選択部により、レジスタファイル部から出力される2つのNビットデータが入力されるようにすることができる。一方、上記演算ユニットを2×Nビットデータの加減算処理の上位Nビット分の加減算処理に用いる場合、ステートレジスタに2×Nビットデータのうちの上位Nビット分のデータ(例えば、第1スロットの加算演算ユニットで取得されたNビット分のデータ)を保持し、第2スロット用選択部により、ステートレジスタの出力が上記演算ユニットに入力されるようにし、さらに、当該上位Nビット分のデータと加算する2×Nビットデータの上位Nビットデータをレジスタファイル部から入力されるようにすればよい。これにより、当該演算ユニットにおいて、2×Nビットデータの加減算処理の上位Nビットデータの加減算処理を実行することができる。
【0042】
第6の発明は、第5の発明であって、第1スロットは、Nビットデータに対して処理の演算を行う第1スロット用第1演算ユニットをさらに含む。
【0043】
第1スロット用第1拡張演算ユニットは、2つのNビットデータに対して、乗算処理を行う第1スロット用乗算ユニットである。
【0044】
第1データは、第1スロット用乗算ユニットが乗算処理により取得した2×Nビットデータのうちの下位Nビットのデータである。
【0045】
第2データは、第1スロット用乗算ユニットが乗算処理により取得した2×Nビットデータのうちの上位Nビットのデータである。
【0046】
第1スロット用第1演算ユニットは、2つのNビットデータに対して、加減算処理を行う第1スロット用加
減算ユニットである。
【0047】
第2スロット用第1演算ユニットは、2つのNビットデータに対して、加減算処理を行う第2スロット用加
減算ユニットである。
【0048】
これにより、第1スロットに、Nビットの乗算を行うユニット(乗算ユニット)と、Nビットの加減算処理を行うユニット(下位Nビットデータの加算ユニット)を割り当て、第2スロットに、Nビットの加減算処理を行うユニット(上位Nビットデータの加算ユニット)を割り当てることができる。
【0049】
第7の発明は、第3から第6のいずれかの発明であって、ステートレジスタは、保持しているNビットデータを、第1スロットに出力する。
【0050】
第1スロットは、第1スロット用第2拡張演算ユニットと、第1スロット用第1演算ユニットと、第1スロット用選択部と、をさらに含む。
【0051】
第1スロット用第2拡張演算ユニットは、Nビットデータに対して演算処理を行うことで、2×Nビットデータの出力データを取得する。
【0052】
第1スロット用第1演算ユニットは、Nビットデータに対して処理の演算を行う。
【0053】
第1スロット用選択部は、レジスタファイル部から出力されるデータ、および、ステートレジスタから出力されるデータのいずれか一方のデータを選択し、選択したデータを第1スロット用第2拡張演算ユニットに入力させる。
【0054】
これにより、このVLIWプロセッサでは、例えば、1つ前のサイクルにおいて、第1スロットから出力されたNビットデータを、現在のサイクルにおいて、ステートレジスタから第1スロットの第1スロット用第2拡張演算ユニットに入力させ、当該演算ユニットでの演算に用いることができる。
【0055】
第8の発明は、第7の発明であって、第1スロット用第2拡張演算ユニットは、2つのNビットデータに対して、シフト演算を行い、2×Nビットデータの出力データを取得する第1スロット用シフト演算ユニットである。
【0056】
これにより、このVLIWプロセッサでは、第1スロット用シフト演算ユニットにより、例えば、ステートレジスタから出力されたNビットデータと、レジスタファイル部から出力されたNビットデータとを用いて、シフト演算処理を実行することができる。
【0057】
第9の発明は、第8の発明であって、第1スロット用シフト演算ユニットは、シフト演算の処理対象のデータの上位Nビットデータを、第1スロット用選択部から出力されるデータとして、シフト演算を行う。
【0058】
これにより、このVLIWプロセッサでは、第1スロット用シフト演算ユニットにより、例えば、ステートレジスタから出力されたNビットデータを上位Nビットデータとし、レジスタファイル部から出力されたNビットデータを下位Nビットデータとして、シフト演算処理を実行することができる。
【0059】
第10の発明は、第6の発明であって、レジスタファイル部は、第1スロット用加
減算ユニットの加減算処理により取得されるキャリーフラグを格納する領域を有している。
【0060】
第2スロット用加
減算ユニットは、レジスタファイル部に格納されているキャリーフラグを用いて、2つのNビットデータに対して、加減算処理を行う。
【0061】
これにより、このVLIWプロセッサでは、例えば、第1スロットの演算ユニットでの加減算処理により生成されたキャリーフラグであって、レジスタファイル部に格納されたキャリーフラグを用いて、第2スロット用加
減算ユニットが、2つのNビットデータに対する加減算処理を実行することができる。
【0062】
第11の発明は、第6の発明であって、第2スロット用加
減算ユニットは、加減算処理の処理対象の一方のNビットデータを、第2スロット用選択部から出力されるデータとして、加減算処理を行う。
【0063】
これにより、第2スロットにおいても、ステートレジスタに保持されているデータを利用することが可能となり、Nビットデータの演算処理(例えば、Nビットデータの加減算処理)および2×Nビットの演算処理(拡張演算処理(例えば、2×Nビットデータの加減算処理))を効率良く実行することが可能となる。
【0064】
第12の発明は、第1から第11のいずれかの発明であって、命令実行部は、第3スロットをさらに備える。
【0065】
第3スロットは、レジスタファイル部からの出力データを入力するためのN×2ビット(N:自然数)の入力ポートと、レジスタファイル部にデータを出力するためのNビットの出力ポートと、所定のメモリからデータを取得するロード処理、および、前記所定のメモリにデータを格納するストア処理の少なくとも一方の処理を行うロード/ストアユニットと、を含む。
【0066】
これにより、ロード/ストアユニットを含む第3スロットを備えるVLIWプロセッサを実現することができる。
【0067】
第13の発明は、第1から第12のいずれかの発明であって、第1データは、
第1スロット用第1拡張演算ユニットにより取得された2×Nビットデータの出力データのうちの下位Nビット分のデータである。
【0068】
第2データは、
第1スロット用第1拡張演算ユニットにより取得された2×Nビットデータの出力データのうちの上位Nビット分のデータである。
【0069】
これにより、このVLIWプロセッサでは、第1データ(レジスタファイル部に出力するデータ)を下位Nビットデータとし、第2データ(ステートレジスタに出力するデータ)を上位Nビットデータとして、効率良く演算処理を実行することができる。
【発明の効果】
【0070】
本発明によれば、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算を含む場合であっても、効率良く処理を実行することができるVLIWプロセッサを実現することができる。
【発明を実施するための形態】
【0072】
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
【0073】
<1.1:VLIWプロセッサの構成>
図1は、第1実施形態に係るVLIWプロセッサ1000の概略構成図である。
【0074】
VLIWプロセッサ1000は、Nビット(N:自然数)単位の演算、および、2×Nビット単位の演算を行うVLIWプロセッサである。
【0075】
なお、以下では、説明便宜のため、N=16、つまり、VLIWプロセッサ1000が、16ビット単位の演算および32ビット単位の演算を行うVLIWプロセッサである場合について、説明する。
【0076】
VLIWプロセッサ1000は、
図1に示すように、命令制御部1と、レジスタファイル部2と、命令実行部3と、命令メモリM1と、データメモリM2とを備える。
【0077】
命令制御部1は、命令メモリM1から命令を読み出し(命令フェッチ処理を行い)、読み出した命令をデコードする(命令デコード処理を行う)。そして、命令制御部1は、命令デコード処理の結果に基づいて、レジスタファイル部2を制御するための制御信号Ctl1を生成し、生成した制御信号Ctl1をレジスタファイル部2に出力する。
【0078】
また、命令制御部1は、命令デコード処理の結果に基づいて、命令実行部3を制御するための制御信号Ctl2を生成し、生成した制御信号Ctl2を命令実行部3に出力する。
【0079】
レジスタファイル部2は、複数のレジスタを有しており、命令制御部1からの制御信号Ctl1に基づいて、所定のレジスタのデータを命令実行部3の所定のスロットに出力する。また、レジスタファイル部2は、制御信号Ctl1に基づいて、命令実行部3から出力されるデータを、所定のレジスタに入力されるように制御する。
【0080】
命令実行部3は、1サイクル(1クロックサイクル)で複数の命令を実行するために、1サイクルで同時に演算可能な複数の命令スロットを備える。以下では、説明便宜のため、命令スロット数が「3」である場合について説明する。
【0081】
命令実行部3は、
図1に示すように、3つのスロット、すなわち、第1スロット31、第2スロット32、および、第3スロット33を有している。また、命令実行部3は、ステートレジスタ34を備える。
【0082】
第1スロット31は、データメモリM2に対して16ビットのデータのロード/ストアを行うロード/ストアユニット311を備える。
【0083】
第2スロット32は、16ビットデータの加算処理を行う加算ユニット321と、16ビットデータに対して論理演算を行う論理演算ユニット322と、ステートレジスタ34から16ビットデータを読み出すステート読み出しユニット323と、を備える。なお、「加算処理」は、減算処理を含んでもよい。つまり、「加算処理」は、加減算処理であってもよい(以下、同様)。
【0084】
第3スロット33は、16ビットデータの加算処理を行う加算ユニット331と、16ビットデータに対して論理演算を行う論理演算ユニット332と、16ビットデータの乗算を行う乗算ユニット333と、32ビットデータに対してビットシフト処理を行うシフト演算ユニット334と、を備える。
【0085】
ステートレジスタ34は、第3スロット33から出力される16ビットデータを入力し、入力された16ビットデータを記憶保持する。ステートレジスタ34は、保持している16ビットデータを第2スロット32および第3スロット33に出力する。
【0086】
ここで、命令実行部3の構成例(一例)について、
図2を用いて説明する。
【0087】
図2は、命令実行部3の構成例(一例)の概略図である。
【0088】
図2に示すように、命令実行部3の第2スロット32は、加算ユニット321と、論理演算ユニット322と、ステート読み出しユニット323と、第1切替部324と、第2切替部325と、を備える。
【0089】
第1切替部324は、レジスタファイル部2から出力される16ビットデータDi21と、ステートレジスタ34から出力される16ビットデータDsoとを入力とする。第1切替部324は、命令制御部1の指令(制御信号Ctl2)に従い、16ビットデータDi21および16ビットデータDsoのいずれか一方のデータを加算ユニット321に出力する。
【0090】
加算ユニット321は、レジスタファイル部2から出力される16ビットデータDi22と、第1切替部324から出力される16ビットデータとを入力とし、入力された2つの16ビットデータに対して加算処理を行う。そして、加算ユニット321は、加算処理後のデータを第2切替部325に出力する。
【0091】
また、加算ユニット321は、32ビット加算処理の上位16ビットの加算処理を実行する場合、16ビットデータDi22と第1切替部324から出力される16ビットデータと、例えば、第3スロットの加算ユニット331が生成しレジスタファイル部2のキャリーレジスタ(不図示)に格納されているキャリーフラグ(キャリービット(1ビットデータ))とを入力とし、入力された3つのデータに対して加算処理を行う。そして、加算ユニット321は、加算処理後のデータを第2切替部325に出力する。
【0092】
論理演算ユニット322は、レジスタファイル部2から出力される2つの16ビットデータDi21、Di22を入力とし、入力された2つの16ビットデータに対して所定の論理演算処理を行う。そして、論理演算ユニット322は、論理演算処理後のデータを第2切替部325に出力する。
【0093】
ステート読み出しユニット323は、ステートレジスタ34で保持されている16ビットデータを読み出す。そして、ステート読み出しユニット323は、ステートレジスタ34から読み出したデータを第2切替部325に出力する。
【0094】
第2切替部325は、加算ユニット321からの出力、論理演算ユニット322からの出力、および、ステート読み出しユニット323からの出力を入力とする。そして、第2切替部325は、命令制御部1の指令(制御信号Ctl2)に従い、加算ユニット321からの出力、論理演算ユニット322からの出力、および、ステート読み出しユニット323からの出力のいずれかをデータDo2として、レジスタファイル部2に出力する。なお、第2切替部325は、加算ユニット321からの出力を選択して、レジスタファイル部2に出力する場合、加算演算のキャリーフラグをデータDo2に含めて、レジスタファイル部2に出力するようにしてもよいし、また、別のパスを用いて、加算演算のキャリーフラグを、レジスタファイル部2に出力するようにしてもよい。
【0095】
図2に示すように、命令実行部3の第3スロット33は、加算ユニット331と、論理演算ユニット332と、乗算ユニット333と、シフト演算ユニット334と、第3切替部335と、第4切替部336と、第5切替部337とを備える。
【0096】
第3切替部335は、レジスタファイル部2から出力される16ビットデータDi32と、ステートレジスタ34から出力される16ビットデータDsoとを入力とする。第3切替部335は、命令制御部1の指令(制御信号Ctl2)に従い、16ビットデータDi32および16ビットデータDsoのいずれか一方のデータをシフト演算ユニット334に出力する。
【0097】
加算ユニット331は、レジスタファイル部2から出力される2つの16ビットデータDi31とDi32とを入力とし、入力された2つの16ビットデータに対して加算処理を行う。そして、加算ユニット331は、加算処理後のデータを第4切替部336に出力する。
【0098】
また、加算ユニット331は、32ビット加算処理の下位16ビットの加算処理を実行する場合、16ビットデータDi31と16ビットデータDi32との加算処理により取得されるキャリーフラグ(キャリービット(1ビットデータ))を、レジスタファイル部2に出力し、例えば、レジスタファイル部2のキャリーレジスタに格納する(出力パスについて不図示)。
【0099】
論理演算ユニット332は、レジスタファイル部2から出力される2つの16ビットデータDi31と、Di32とを入力とし、入力された2つの16ビットデータに対して所定の論理演算処理を行う。そして、論理演算ユニット332は、論理演算処理後のデータを第4切替部336に出力する。
【0100】
乗算ユニット333は、レジスタファイル部2から出力される2つの16ビットデータDi31、Di32を入力とし、入力された2つの16ビットデータに対して乗算処理を行う。そして、乗算ユニット333は、乗算処理後の32ビットデータのうち、下位16ビットデータを第4切替部336に出力し、上位16ビットのデータを第5切替部337に出力する。
【0101】
シフト演算ユニット334は、レジスタファイル部2から出力される16ビットデータDi31と、第3切替部335から出力される16ビットデータとを入力とし、入力された2つの16ビットデータに対してシフト演算処理(32ビットシフト演算処理)を行う。そして、シフト演算ユニット334は、シフト演算処理後の32ビットデータのうち、下位16ビットデータを第4切替部336に出力し、上位16ビットのデータを第5切替部337に出力する。
【0102】
第4切替部336は、加算ユニット331からの出力、論理演算ユニット332からの出力、乗算ユニット333から出力される乗算結果データの下位16ビットデータ、および、シフト演算ユニット334から出力されるシフト演算結果データの下位16ビットデータを入力とする。そして、第4切替部336は、命令制御部1の指令(制御信号Ctl2)に従い、上記4つのユニットからの出力のいずれかを選択して、データDo3として、レジスタファイル部2に出力する。
【0103】
なお、第4切替部336は、加算ユニット331の加算処理で取得されたキャリーフラグをデータDo3に含めて、出力するようにしてもよいし、また、別のパスを用いて、当該キャリーフラグを、レジスタファイル部2に出力するようにしてもよい。
【0104】
第5切替部337は、乗算ユニット333から出力される乗算結果データの上位16ビットデータ、および、シフト演算ユニット334から出力されるシフト演算結果データの上位16ビットデータを入力とする。そして、第5切替部337は、命令制御部1の指令(制御信号Ctl2)に従い、上記2つのユニットからの出力のいずれかを選択して、データDs3として、ステートレジスタ34に出力する。
【0105】
ステートレジスタ34は、第3スロット33の第5切替部337から出力される16ビットデータを入力し、入力された16ビットデータを記憶保持する。ステートレジスタ34は、保持している16ビットデータを第2スロット32のステート読み出しユニット323および第1切替部324と、第3スロット33の第3切替部335に出力する。
【0106】
命令メモリM1は、VLIWプロセッサ1000で、演算を実行するための命令等を記憶することができる記憶装置である。命令メモリM1は、命令制御部1によりアクセス可能なメモリである。
【0107】
データメモリM2は、VLIWプロセッサ1000で、演算を実行するためのデータ等を記憶することができる記憶装置である。データメモリM2は、命令実行部3の第1スロット31のロード/ストアユニット311によりアクセス可能なメモリである。
【0108】
なお、命令メモリM1およびデータメモリM2は、1つのメモリ(記憶装置)に実現されるものであってもよい。
【0109】
<1.2:VLIWプロセッサの動作>
以上のように構成されたVLIWプロセッサ1000の動作について、以下、図面を参照しながら、説明する。
【0110】
以下では、
(1)乗算処理を実行し、乗算結果に対してシフト演算処理を実行する場合(MulShift処理)、
(2)乗算処理を実行し、乗算結果に対して、加算処理を実行する場合(MulAdd処理)、
(3)乗算処理を実行し、乗算結果に対して、シフト演算処理を実行し、シフト演算結果に対して加算処理を実行する場合(MulShiftAdd処理)、および、
(4)シフト演算処理を実行し、シフト演算結果に対して、加算処理を実行する場合(ShiftAdd処理)、
について、説明する。
【0111】
(1.2.1:MulShift処理)
VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータを、32ビットシフトする場合(この場合の処理を「MulShift処理」という。)について、説明する。
【0112】
図3の左図は、VLIWプロセッサ1000がMulShift処理を実行する場合において、各スロット(第1スロット31、第2スロット32および第3スロット33)に割り当てられる演算処理を、サイクル毎に示した図である。また、
図3の右図は、サイクル2(Cyc2)においてアクティブになっている部分を明示した図である。なお、アクティブになっている部分は、太線で示している(以下、同様)。
【0114】
図4の右図は、サイクル3(Cyc3)においてアクティブになっている部分を明示した図である。
【0115】
図5の右図は、サイクル4(Cyc4)においてアクティブになっている部分を明示した図である。
【0116】
MulShift処理は、例えば、2つの16ビットデータを乗算し、固定小数点位置を合わせる処理に相当する。
【0117】
(Cyc0):
サイクル0(Cyc0)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、ロード/ストア命令を発行し、第1スロット31のロード/ストアユニット311は、当該ロード/ストア命令に基づいて、第3スロット33の乗算ユニット333による乗算処理(Mul16)に必要な2つの16ビットデータ(ソースオペランド)のうちの1つを、データメモリM2から読み出す。そして、第1スロット31は、読み出した16ビットデータをレジスタファイル部2に出力する。
【0118】
レジスタファイル部2は、第1スロット31から読み出された16ビットデータを所定のレジスタに格納する。
【0119】
(Cyc1):
サイクル1(Cyc1)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、ロード/ストア命令を発行し、第1スロット31のロード/ストアユニット311は、当該ロード/ストア命令に基づいて、第3スロット33の乗算ユニット333による乗算処理(Mul16)に必要な2つの16ビットデータ(ソースオペランド)のうちのもう1つのデータを、データメモリM2から読み出す。そして、第1スロット31は、読み出した16ビットデータをレジスタファイル部2に出力する。
【0120】
レジスタファイル部2は、第1スロット31から読み出された16ビットデータを所定のレジスタに格納する。
【0121】
(Cyc2):
サイクル2(Cyc2)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、乗算命令を発行し、第3スロット33の乗算ユニット333が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル0、1で、所定のレジスタに格納された乗算処理対象の2つの16ビットデータを、データパスDi31、Di32を介して、第3スロット33に出力する。
【0122】
第3スロット33の乗算ユニット333は、データパスDi31、Di32を介して、入力された2つの16ビットデータに対して乗算処理を実行する。そして、乗算ユニット333は、乗算結果の32ビットデータのうち上位16ビットのデータを16ビットデータDs3として、第5切替部337を介して、ステートレジスタ34に出力する。そして、ステートレジスタ34は、第3スロット33から出力された16ビットデータDs3を格納する。
【0123】
また、乗算ユニット333は、乗算結果の32ビットデータのうち下位16ビットのデータを16ビットデータDo3として、第4切替部336を介して、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。
【0124】
(Cyc3):
サイクル3(Cyc3)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、シフト演算命令を発行し、第3スロット33のシフト演算ユニット334が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル2で、所定のレジスタに格納されたシフト演算対象の16ビットデータ(乗算結果の下位16ビットデータ)を、データパスDi31を介して、第3スロット33に出力する。
【0125】
シフト演算ユニット334は、レジスタファイル部2から、データパスDi31を介して入力された16ビットデータと、ステートレジスタ34から出力された16ビットデータ(乗算結果の上位16ビットデータ)とを取得する。なお、このとき、第3切替部335は、命令制御部1からの指令により、ステートレジスタ34からの出力を選択して、シフト演算ユニット334に出力するように制御されている。
【0126】
シフト演算ユニット334は、上記のようにして入力された、2つの16ビットデータからなる32ビットデータに対して、シフト演算処理を実行する。そして、シフト演算ユニット334は、シフト演算処理結果の32ビットデータのうち上位16ビットのデータを16ビットデータDs3として、第5切替部337を介して、ステートレジスタ34に出力する。そして、ステートレジスタ34は、第3スロット33から出力された16ビットデータDs3を格納する。
【0127】
また、シフト演算ユニット334は、シフト演算処理結果の32ビットデータのうち下位16ビットのデータを16ビットデータDo3として、第4切替部336を介して、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。
【0128】
(Cyc4):
サイクル4(Cyc4)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、読み出し命令を発行し、第2スロット32のステート読み出しユニット323が実行可能な状態となる。ステート読み出しユニット323は、サイクル3でのシフト演算結果の上位16ビットデータを、第2切替部325を介して、16ビットデータDo2として、レジスタファイル部2に出力する。なお、このとき、第2切替部325は、制御信号Ctl2により、ステート読み出しユニット323からの出力を選択し、出力するように制御されている。
【0129】
レジスタファイル部2は、受信した上記の16ビットデータDo2を所定のレジスタに格納する。
【0130】
また、別のデータに対する乗算処理(第3スロットの乗算ユニット333による乗算処理)が、上記と同様にして、実行される。なお、この乗算処理の処理対象となる2つの16ビットデータは、
図5の右図に示すように、サイクル2、3において、第1スロット31のロード/ストアユニット311により、データメモリM2から読み出され、レジスタファイル部2の所定のレジスタに格納されている。
【0131】
以上により、VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータを、32ビットシフトする処理(MulShift処理)を実行することができる。
【0132】
(1.2.2:MulAdd処理)
次に、VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータを、他の32ビットデータと加算する場合(この場合の処理を「MulAdd処理」という。)について、
図6、
図7を用いて説明する。このMulAdd処理の一例として、2つの16ビットデータの乗算結果の累積加算処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【0133】
図6の左図は、VLIWプロセッサ1000がMulAdd処理を実行する場合において、各スロット(第1スロット31、第2スロット32および第3スロット33)に割り当てられる演算処理を、サイクル毎に示した図である。また、
図6の右図は、サイクル3(Cyc3)においてアクティブになっている部分を明示した図である。
【0135】
図7の右図は、サイクル4(Cyc4)においてアクティブになっている部分を明示した図である。
【0136】
(Cyc0〜2):
サイクル0〜2(Cyc0〜2)の処理は、「1.2.1:MulShift処理」におけるサイクル0〜2の処理と同様であるので、詳細な説明を省略する。
【0137】
(Cyc3):
サイクル3(Cyc3)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddL命令)を発行し、第3スロット33の加算ユニット331が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル2で、所定のレジスタに格納した乗算結果の下位16ビットデータを、データパスDi31を介して、第3スロット33に出力する。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の下位16ビットデータを、データパスDi32を介して、第3スロット33に出力する。
【0138】
第3スロット33の加算ユニット331は、データパスDi31、Di32を介して、入力された2つの16ビットデータに対して加算処理を実行する。そして、加算ユニット331は、加算結果の16ビットデータを、16ビットデータDo3として、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。なお、加算ユニット331での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0139】
(Cyc4):
サイクル4(Cyc4)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddH命令)を発行し、第2スロット32の加算ユニット321が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の上位16ビットデータを、データパスDi22を介して、第2スロット32に出力する。
【0140】
また、ステートレジスタ34は、サイクル2で格納した乗算結果(乗算ユニット333による乗算結果の上位16ビットデータ)を、第1切替部324を介して、加算ユニット321に出力する。このとき、第1切替部324は、制御信号Ctl2により、ステートレジスタ34の出力が、加算ユニット321に出力されるように制御されている。
【0141】
第2スロット32の加算ユニット321は、データパスDi22を介して、入力された16ビットデータと、第1切替部324から出力される16ビットデータ(乗算ユニット333による乗算結果の上位16ビットデータ)と、加算ユニット331での加算処理により取得されたキャリービット(キャリービットの入力パスについては不図示)とに対して、加算処理を実行する。そして、加算ユニット321は、加算結果の16ビットデータを、第2切替部325を介して、16ビットデータDo2として、レジスタファイル部2に出力する。なお、このとき、第2切替部325は、制御信号Ctl2により、加算ユニット321の出力が、レジスタファイル部2に出力されるように制御されている。
【0142】
レジスタファイル部2は、受信した当該16ビットデータDo2を所定のレジスタに格納する。なお、加算ユニット321での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0143】
また、サイクル4において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、乗算命令を発行し、第3スロット33の乗算ユニット333が実行可能な状態となる。そして、サイクル2の第3スロット33の乗算ユニット333の処理と同様の処理が実行される。つまり、別のデータに対する乗算処理(第3スロットの乗算ユニット333による乗算処理)が、上記と同様にして、実行される。なお、この乗算処理の処理対象は、サイクル2、3において、第1スロット31のロード/ストアユニット311により、データメモリM2から読み出され、レジスタファイル部2の所定のレジスタに格納されている。
【0144】
以上により、VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータを、他の32ビットデータと加算する処理(MulAdd処理)を実行することができる。
【0145】
(1.2.3:MulShiftAdd処理)
次に、VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータに対してシフト演算を行い、そのシフト演算結果を、他の32ビットデータと加算する場合(この場合の処理を「MulShiftAdd処理」という。)について、
図8、
図9を用いて説明する。このMulShiftAdd処理の一例として、2つの16ビットデータの乗算結果データに対して固定小数点位置を合わせた後、累積加算する処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【0146】
図8の左図は、VLIWプロセッサ1000がMulShiftAdd処理を実行する場合において、各スロット(第1スロット31、第2スロット32および第3スロット33)に割り当てられる演算処理を、サイクル毎に示した図である。また、
図8の右図は、サイクル4(Cyc4)においてアクティブになっている部分を明示した図である。
【0148】
図9の右図は、サイクル5(Cyc5)においてアクティブになっている部分を明示した図である。
【0149】
(Cyc0〜3):
サイクル0〜3(Cyc0〜3)の処理は、「1.2.1:MulShift処理」におけるサイクル0〜3の処理と同様であるので、詳細な説明を省略する。
【0150】
(Cyc4):
サイクル4(Cyc4)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddL命令)を発行し、第3スロット33の加算ユニット331が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル3で、所定のレジスタに格納したシフト演算処理結果の下位16ビットデータを、データパスDi31を介して、第3スロット33に出力する。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の下位16ビットデータを、データパスDi32を介して、第3スロット33に出力する。
【0151】
第3スロット33の加算ユニット331は、データパスDi31、Di32を介して、入力された2つの16ビットデータに対して加算処理を実行する。そして、加算ユニット331は、加算結果の16ビットデータを、16ビットデータDo3として、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。なお、加算ユニット331での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0152】
(Cyc5):
サイクル5(Cyc5)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddH命令)を発行し、第2スロット32の加算ユニット321が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の上位16ビットデータを、データパスDi22を介して、第2スロット32に出力する。
【0153】
また、ステートレジスタ34は、サイクル3で格納したシフト演算処理結果(シフト演算ユニット334によるシフト演算処理結果の上位16ビットデータ)を、第1切替部324を介して、加算ユニット321に出力する。このとき、第1切替部324は、制御信号Ctl2により、ステートレジスタ34の出力が、加算ユニット321に出力されるように制御されている。
【0154】
第2スロット32の加算ユニット321は、データパスDi22を介して、入力された16ビットデータと、第1切替部324から出力される16ビットデータ(シフト演算ユニット334によるシフト演算処理結果の上位16ビットデータ)と、加算ユニット331での加算処理により取得されたキャリービット(キャリービットの入力パスについては不図示)とに対して、加算処理を実行する。そして、加算ユニット321は、加算結果の16ビットデータを、第2切替部325を介して、16ビットデータDo2として、レジスタファイル部2に出力する。なお、このとき、第2切替部325は、制御信号Ctl2により、加算ユニット321の出力が、レジスタファイル部2に出力されるように制御されている。
【0155】
レジスタファイル部2は、受信した当該16ビットデータDo2を所定のレジスタに格納する。なお、加算ユニット321での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0156】
また、サイクル5において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、乗算命令を発行し、第3スロット33の乗算ユニット333が実行可能な状態となる。そして、サイクル2の第3スロット33の乗算ユニット333の処理と同様の処理が実行される。つまり、別のデータに対する乗算処理(第3スロットの乗算ユニット333による乗算処理)が、上記と同様にして、実行される。なお、この乗算処理の処理対象は、サイクル3、4において、第1スロット31のロード/ストアユニット311により、データメモリM2から読み出され、レジスタファイル部2の所定のレジスタに格納されている。
【0157】
以上により、VLIWプロセッサ1000において、2つの16ビットデータに対して乗算処理を実行し、その乗算結果である32ビットデータに対してシフト演算を行い、そのシフト演算結果を、他の32ビットデータと加算する処理(MulShiftAdd処理)を実行することができる。
【0158】
(1.2.4:ShiftAdd処理)
次に、VLIWプロセッサ1000において、32ビットデータに対してシフト演算処理を実行し、そのシフト演算処理結果である32ビットデータと、他の32ビットデータと加算する場合(この場合の処理を「ShiftAdd処理」という。)について、
図10〜12を用いて説明する。このShiftAdd処理の一例として、固定小数点位置を合わせた累積加算処理がある。このような処理は、画像処理や画像認識処理等において多用される。
【0159】
図10の左図は、VLIWプロセッサ1000がShiftAdd処理を実行する場合において、各スロット(第1スロット31、第2スロット32および第3スロット33)に割り当てられる演算処理を、サイクル毎に示した図である。また、
図10の右図は、サイクル2(Cyc2)においてアクティブになっている部分を明示した図である。
【0161】
図11の右図は、サイクル3(Cyc3)においてアクティブになっている部分を明示した図である。
【0162】
図12の右図は、サイクル4(Cyc4)においてアクティブになっている部分を明示した図である。
【0163】
(Cyc0〜1):
サイクル0〜1(Cyc0〜1)の処理は、「1.2.1:MulShift処理」におけるサイクル0〜1の処理と同様であるので、詳細な説明を省略する。
【0164】
(Cyc2):
サイクル2(Cyc2)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、シフト演算命令(Shift32命令)を発行し、第3スロット33のシフト演算ユニット334が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル0、1で、所定のレジスタに格納したシフト演算処理対象の32ビットデータの下位16ビットデータを、データパスDi31を介して、当該データの上位16ビットデータを、データパスDi32を介して、第3スロット33に出力する。
【0165】
第3スロット33のシフト演算ユニット334は、データパスDi31を介して入力された16ビットデータと、データパスDi32および第3切替部335を介して入力された16ビットデータの2つの16ビットデータに対してシフト演算処理を実行する。そして、シフト演算ユニット334は、シフト演算処理結果の32ビットデータの上位16ビットデータを、第5切替部337を介して、16ビットデータDs3として、ステートレジスタ34に出力する。
【0166】
ステートレジスタ34は、受信した16ビットデータDs3を格納する。
【0167】
また、シフト演算ユニット334は、シフト演算処理結果の32ビットデータの下位16ビットデータを、16ビットデータDo3として、第4切替部336を介して、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。
【0168】
(Cyc3):
サイクル3(Cyc3)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddL命令)を発行し、第3スロット33の加算ユニット331が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、サイクル2で、所定のレジスタに格納したシフト演算処理結果の下位16ビットデータを、データパスDi31を介して、第3スロット33に出力する。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の下位16ビットデータを、データパスDi32を介して、第3スロット33に出力する。
【0169】
第3スロット33の加算ユニット331は、データパスDi31、Di32を介して、入力された2つの16ビットデータに対して加算処理を実行する。そして、加算ユニット331は、加算結果の16ビットデータを、16ビットデータDo3として、レジスタファイル部2に出力する。レジスタファイル部2は、受信した当該16ビットデータDo3を所定のレジスタに格納する。なお、加算ユニット331での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0170】
(Cyc4):
サイクル4(Cyc4)において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、加算命令(AddH命令)を発行し、第2スロット32の加算ユニット321が実行可能な状態となる。また、レジスタファイル部2は、命令制御部1からの制御信号Ctl2に基づいて、加算される32ビットデータ(例えば、累積加算値(32ビットデータ))の上位16ビットデータを、データパスDi22を介して、第2スロット32に出力する。
【0171】
また、ステートレジスタ34は、サイクル2で格納したシフト演算処理結果(シフト演算ユニット334によるシフト演算処理結果の上位16ビットデータ)を、第1切替部324を介して、加算ユニット321に出力する。このとき、第1切替部324は、制御信号Ctl2により、ステートレジスタ34の出力が、加算ユニット321に出力されるように制御されている。
【0172】
第2スロット32の加算ユニット321は、データパスDi22を介して、入力された16ビットデータと、第1切替部324から出力される16ビットデータ(シフト演算ユニット334によるシフト演算処理結果の上位16ビットデータ)とに対して、加算処理を実行する。そして、加算ユニット321は、加算結果の16ビットデータを、第2切替部325を介して、16ビットデータDo2として、レジスタファイル部2に出力する。なお、このとき、第2切替部325は、制御信号Ctl2により、加算ユニット321の出力が、レジスタファイル部2に出力されるように制御されている。
【0173】
レジスタファイル部2は、受信した当該16ビットデータDo2を所定のレジスタに格納する。なお、加算ユニット321での加算処理により取得されたキャリービットも、レジスタファイル部2に出力され、所定のレジスタ(例えば、キャリーレジスタ)に格納される。なお、キャリービットのデータパスについては、図示を省略している。
【0174】
また、サイクル4において、命令制御部1は、命令実行部3に対して、制御信号Ctl2により、シフト演算命令(Shift32命令)を発行し、第3スロット33のシフト演算ユニット334が実行可能な状態となる。そして、サイクル2の第3スロット33のシフト演算ユニット334の処理と同様の処理が実行される。つまり、別のデータに対するシフト演算処理が、上記と同様にして、実行される。なお、このシフト演算処理の処理対象は、サイクル2、3において、第1スロット31のロード/ストアユニット311により、データメモリM2から読み出され、レジスタファイル部2の所定のレジスタに格納されている。
【0175】
以上により、VLIWプロセッサ1000において、32ビットデータに対してシフト演算処理を実行し、そのシフト演算処理結果である32ビットデータと、他の32ビットデータと加算する処理(ShiftAdd処理)を実行することができる。
【0176】
以上のように、VLIWプロセッサ1000では、処理対象が32ビットデータとなる32ビット演算を実行する場合であっても、当該32ビットデータの上位16ビットデータが、ステートレジスタ34により、保持され、次のサイクルにおいて、所定の演算ユニットにより利用することができる。
【0177】
また、上記の通り、VLIWプロセッサ1000では、ステートレジスタ34が、第3スロット33から出力される32ビットデータの上位16ビットデータを格納保持し、格納したデータを第2スロット32または第3スロット33に出力することができる。したがって、VLIWプロセッサ1000では、第3スロット33から32ビットデータをレジスタファイル部2に出力する必要がなく、また、レジスタファイル部2から第3スロット33に32ビットデータを出力する必要もない。つまり、VLIWプロセッサ1000では、レジスタファイル部2と命令実行部3との間において、16ビットデータのみが入出力されることが保証されるので、レジスタファイル部2と命令実行部3との間の入出力ポートを、16ビット演算のみを実行する場合に比べて、増やす必要がない。
【0178】
すなわち、VLIWプロセッサ1000では、上記の通り、レジスタファイル部2の入出力ポート数を増加させることなく、Nビット演算(N:自然数)を各スロットに割り当てながら、2×Nビットの演算をサポートすることが可能となる。
【0179】
このように、VLIWプロセッサ1000では、回路規模の増大を抑えつつ、画像処理、画像認識処理等で多用される命令フローのようにビット拡張された演算(上記では、32ビット演算)を含む場合であっても、効率良く処理を実行することができる
。
[他の実施形態]
上記実施形態において、第3スロット33から出力される32ビットデータの上位16ビットデータをステートレジスタ34に出力し、下位16ビットデータをレジスタファイル部2に出力する場合について説明したが、これに限定されることはない。VLIWプロセッサ1000において、例えば、第3スロット33から出力される32ビットデータの下位16ビットデータをステートレジスタ34に出力し、上位16ビットデータをレジスタファイル部2に出力するようにしてもよい。
【0180】
また、上記実施形態では、第2スロット32の加算ユニット321と、第3スロット33の加算ユニット331とは、32ビット加算処理に使用される場合について説明したが、これに限定されることはない。例えば、第2スロット32の加算ユニット321および第3スロット33の加算ユニット331を、それぞれ、16ビットデータの加算処理を実行する演算処理ユニット
として機能させてもよい。これにより、VLIWプロセッサ1000において、16ビットデータの加算処理を、同一サイクルにおいて、第2スロット32と、第3スロット33とに割り当てることも可能となる。
【0181】
上記実施形態では、VLIWプロセッサ1000において、命令実行部3のスロット数が「3」の場合について説明したが、これに限定されることはなく、命令実行部3は、他の数のスロットを有するものであってもよい。
【0182】
また、上記実施形態の一部または全部を組み合わせるようにしてもよい。
【0183】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【0184】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。