JP4771079B2 - Vliw型プロセッサ - Google Patents

Vliw型プロセッサ Download PDF

Info

Publication number
JP4771079B2
JP4771079B2 JP2006183204A JP2006183204A JP4771079B2 JP 4771079 B2 JP4771079 B2 JP 4771079B2 JP 2006183204 A JP2006183204 A JP 2006183204A JP 2006183204 A JP2006183204 A JP 2006183204A JP 4771079 B2 JP4771079 B2 JP 4771079B2
Authority
JP
Japan
Prior art keywords
instruction
delay
unit
small
store
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006183204A
Other languages
English (en)
Other versions
JP2008015589A (ja
Inventor
友義 小堀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2006183204A priority Critical patent/JP4771079B2/ja
Publication of JP2008015589A publication Critical patent/JP2008015589A/ja
Application granted granted Critical
Publication of JP4771079B2 publication Critical patent/JP4771079B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、プロセッサアーキテクチャに関し、特にVLIW(Very Long Instruction Word)アーキテクチャに関する。
プロセッサの性能を表すときの一つの指標として、動作周波数と1サイクルに発行(実行)可能な命令数の積が用いられる。ゆえに、プロセッサの性能向上を達成するためには、動作周波数の向上や同時実行可能な命令数の向上が重要となる。VLIW方式は、同時実行可能な命令数を向上させる手段のひとつとして用いられている。
VLIW方式のプロセッサ(VLIW型プロセッサ)について述べる。VLIW型プロセッサは、非特許文献1に示されているように、複数の実行ユニットが並列に配置された構成をとる。命令は命令メモリに格納されており、プログラムカウンタで指定される一つの命令(以降、命令列と呼ぶ)は、多数の小命令(各実行ユニットに対する命令)で構成されている。同じ命令列に含まれる小命令は、同時に各実行ユニットに発行される。そうすることで、複数の実行ユニットを並列動作させることができる。この方式の特徴として、コンパイラはソースプログラムからデータの依存関係を考慮しながら並列演算が可能な小命令を抽出して1つの命令列に合成することがあげられる。小命令を抽出する過程で、ある演算ユニットが何も命令を実行しない時間があった場合、その時間で実行される命令列には何もしない演算命令を表すnop(No Operation)命令が配置される。
図13に、VLIW型プロセッサの構成の一例を示す。図13を参照すると、プロセッサは、それぞれが実行ユニットとして用いられる、ロードユニット44とストアユニット45とALU(Arithmetic Unit)43とが、並列に配置された構成をとる。これら実行ユニットの周辺には、命令を格納する命令メモリ41、命令メモリの制御を行うプログラムカウンタ40、小命令を各実行ユニットに振り分ける命令ディスパッチャ42、データを格納するために用いられる主記憶装置46、および汎用レジスタ47が存在する。
このプロセッサでは、ALU43での演算に必要なデータが、主記憶装置46から汎用レジスタ47に転送される。ALU43は、汎用レジスタ47に入力されたデータを用いて演算を行う。演算結果は、汎用レジスタ47に一旦格納され、その後、主記憶装置46に転送される。この一連の典型的な処理に対して、コンパイラは、命令シーケンス(複数の命令列のまとまり)を以下のように構成する。
まず、はじめの命令列にロード命令を配置する。次に、ロード命令を配置した命令列からALU命令が発行できるタイミングだけ遅れて発行される命令列にALU命令を配置する。これにより、ロード命令−ALU命令間の依存関係が保障される。ストア命令を配置する際には、コンパイラは、ALU命令−ストア命令間の依存関係を考慮した配置を行う。つまり、ストア命令は、ストア対象となるデータを演算結果として出力するALU命令が配置された命令列からストア命令が発行可能なタイミングだけ遅れて発行される命令列に配置される。
一例として、図14に、ロード命令、ストア命令、ALU命令が常に1サイクルで完了するプロセッサを想定した場合の演算式(d = (a + b)x (a - c))を処理するための命令シーケンスを示す。
図14の命令シーケンスにおいて、左側の数字は命令列が実行される順番を示す。最初のカンマで区切られたフィールドにロード命令、次のカンマで区切られたフィールドにストア命令、その次のカンマで区切られたフィールドにALU命令がそれぞれ配置される。ロード命令とALU命令とストア命令は、ロード命令−ALU命令間とALU命令−ストア命令間のデータ依存関係が保障されるように配置される。3番目から5番目の命令列にかけてのロード命令のフィールド、0番目、1番目、5番目の命令列のALU命令のフィールド、および0番目から4番目の命令列のストア命令のフィールドには、それぞれの実行ユニットにおいて何も命令を実行しないためnop命令が配置される。
しかし、上記の命令シーケンスでは、nop命令が多数配置されるために、命令メモリの使用効率が悪くなるという問題が発生する。そこで、nop命令数削減方式として、以下の第一および第二の方式(非特許文献2参照)が提案されている。
第一の方式は、命令列の先頭に、実行ユニットに対しての小命令かを表すマスクと一つの命令列に存在する小命令の個数(以下、PCincと呼ぶ)を追加することで、nop命令を削減するという方式である。
図15に、第一の方式の概要を示す。この第一の方式では、命令列の先頭に追加したマスクにより指定された命令バッファの位置に小命令を割り当てる。そして、命令バッファから各実行ユニットへ小命令を発行する。次に、マスクに付随しているPCincの値から次の命令のマスクの位置を判別して、次のマスクを読み込む。
図15に示した例では、命令キャッシュラインの最初の命令列の先頭に追加された「マスク0」は、命令バッファの位置を指定する情報として「11000111」が与えられており、次の命令列の先頭に追加された「マスク1」は、命令バッファの位置を指定する情報として「00110100」が与えられている。「マスク0」に付随しているPCincの値は「5」であり、「マスク1」に付随しているPCincの値は「3」である。「マスク0」が付与された命令列は、「命令00」、「命令01」、「命令05」、「命令06」、「命令07」を含む。「マスク1」が付与された命令列は、「命令12」、「命令13」、「命令15」を含む。「マスク0」の命令列においては、「11000111」の情報によって指定される命令バッファ0の位置に、小命令である「命令00」、「命令01」、「命令05」、「命令06」、「命令07」をそれぞれ割り当てる。「マスク1」の命令列においては、「00110100」の情報によって指定される命令バッファ1の位置に、小命令である「命令12」、「命令13」、「命令15」をそれぞれ割り当てる。
第二の方式は、小命令ごとに、Pbitと呼ばれる同一命令列に含まれる最後の小命令であることを示すビットを付加することで、nop命令を削減するという方式である。
図16に、第二の方式の概要を示す。この第二の方式では、それぞれの小命令のPbitの値を判定することによって、どの小命令までが一つの命令列であるかが識別される。この場合、Pbitの他に、それぞれの小命令がどの実行ユニットに対するものかを判別する手段が必要となる。
図16に示した例では、命令キャッシュラインの最初の命令列である「命令00」、「命令01」、「命令05」、「命令06」、「命令07」のうち、最後尾に位置する「命令07」のPbit値が「0」とされ、これ以外の命令のPbit値は「1」とされている。Pbit値が「0」である命令を判定することで、命令列の区切りを判断することができる。
上記の他、特許文献1には、並列配置された複数の実行パイプラインを備えるVLIW型プロセッサが記載されている。初段の実行パイプラインを除く他の実行パイプラインの入力側には、PR(パイプラインレジスタ)が設けられている。このVLIW型プロセッサでは、並列配置順に初段から1段ずつシフトした対角線上の各段で、VLIW命令内の複数の処理から選択指定した処理を1つずつ対角線方向にパイプライン実行する。
特開2002-333978号、図1、第19段落 富田眞治著「並列計算機構成論」昭晃堂出版、1986年11月15日、pp.131−142 Joseph A. Fisher外2名 著「エンベデッド コンピューティング (Embedded Computing)」Morgan Kaufmann Pub出版、2004年10月31日、pp. 115-117
しかし、上述した第一及び第二の方式においては、マスクやPbitとよばれるフラグを常に命令列や小命令中に付加し、その付加したマスクやフラグの値から同一命令列に存在する小命令の構成を判断して、小命令を各実行ユニットへ振り分ける、といった動作が行われる。このため、命令ディスパッチャの入力側または命令ディスパッチャ内部に、マスクやPbitにより小命令の発行先を特定するような手段を設ける必要があり、その分、命令発行制御の構成が複雑になる。
特許文献1に記載のVLIW型プロセッサは、並列配置順に初段から1段ずつシフトした対角線上の各段で、選択指定した処理を1つずつ対角線方向にパイプライン実行する構成である。このような構成では、実行パイプラインの配置が制限されることになるので、どうしても回路設計時における自由度が低くなってしまう。
また、実行パイプラインに、命令列中に設けられた選択ビットに基づく制御信号に従って、前段の実行パイプラインからのオペランドとパイライン転送されたオペランドとの切り替え制御を行う処理部を設ける必要があるので、その分、命令発行制御の構成が複雑になり、装置コストが増大する。
さらに、各実行パイプラインのパイプラインには実行パイプラインに対する小命令のほかに、レジスタオペランドで指定されたレジスタの値が入力されるようになっているため、その分、PRなどのハードウェアの構成が大掛かりになり、コストが増大する。
本発明の目的は、上記問題を解決し、簡単な構成でnop命令数を削減できるVLIW型プロセッサを提供することである。
上記目的を達成するため、本発明は、
それぞれが独立して処理を行う並列に配置された複数の実行ユニットと、
前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
前記ディレイ発生手段が、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給する、VLIW型プロセッサであって、
前記複数の実行ユニットは、
ロード命令に従って、主記憶部から演算に必要なデータをロードする少なくとも1つのロードユニットと、
演算命令に従って、前記主記憶部からロードされたデータを使用して演算する少なくとも1つの演算ユニットと、
ストア命令に従って、前記演算ユニットでの演算結果を前記主記憶部に格納する少なくとも1つのストアユニットと、を有し、
前記ディレイ発生手段は、
前記演算命令の前記演算ユニットへの供給タイミングを第1の遅延量だけ遅延させる第1のディレイ発生部と、
前記ストア命令の前記ストアユニットへの供給タイミングを前記第1の遅延量より大きな第2の遅延量に基づいて遅延させる第2のディレイ発生部と、を有し、
前記命令列は、前記ロード命令として、命令の実行完了に要するサイクル数が異なるロード命令の設定が可能とされ、
前記第1のディレイ発生部は、前記命令ディスパッチャから送出された前記ロード命令および演算命令を入力としており、
入力された前記演算命令を、設定された遅延量で遅延させるディレイレジスタと、
入力された前記ロード命令の実行完了に要するサイクル数から該ロード命令の実行完了タイミングを検出するサイクル検出部と、
前記サイクル検出部で検出された前記ロード命令の実行完了タイミングの値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
入力された前記演算命令の前のサイクルで前記命令ディスパッチャから前記演算ユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記演算命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
前記遅延量決定部は、前記現在の遅延量が前記ロード命令の実行完了タイミングの値以下の場合は、該実行完了タイミングに対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きである場合は、該実行完了タイミングの値から1サイクル分の時間を差し引いた値に対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定することを特徴とする。
別の本発明は、
それぞれが独立して処理を行う並列に配置された複数の実行ユニットと、
前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
前記ディレイ発生手段は、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給する、VLIW型プロセッサであって、
前記複数の実行ユニットは、
ロード命令に従って、主記憶部から演算に必要なデータをロードする少なくとも1つのロードユニットと、
演算命令に従って、前記主記憶部からロードされたデータを使用して演算する少なくとも1つの演算ユニットと、
ストア命令に従って、前記演算ユニットでの演算結果を前記主記憶部に格納する少なくとも1つのストアユニットと、を有し、
前記ディレイ発生手段は、
前記演算命令の前記演算ユニットへの供給タイミングを第1の遅延量だけ遅延させる第1のディレイ発生部と、
前記ストア命令の前記ストアユニットへの供給タイミングを前記第1の遅延量より大きな第2の遅延量に基づいて遅延させる第2のディレイ発生部と、を有し、
前記命令列は、前記演算命令として、命令の実行完了に要するサイクル数が異なる演算命令の設定が可能とされ、
前記第2のディレイ発生部は、前記命令ディスパッチャから送出された前記演算命令およびストア命令を入力としており、
入力された前記ストア命令を、設定された遅延量で遅延させるディレイレジスタと、
入力された前記演算命令の実行完了に要するサイクル数から該演算命令の実行完了タイミングを検出するサイクル検出部と、
前記サイクル検出部で検出された前記演算命令の実行完了タイミングの値と予め与えられている前記第1の遅延量との和である遅延加算値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
入力された前記ストア命令の前のサイクルで前記命令ディスパッチャから前記ストアユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記ストア命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
前記遅延量決定部は、前記現在の遅延量が前記遅延加算値以下の場合は、該遅延加算値を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きである場合は、前記演算命令の実行完了タイミングの値から1サイクル分の時間を差し引いた値に対応する遅延時間を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定することを特徴とする。
上記の構成によれば、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される。例えば、データ依存関係が存在する、ロード命令、ALU命令およびストア命令が、同一の命令列内に配列されており、命令ディスパッチャが、それらロード命令、ALU命令およびストア命令をロードユニット、ALUおよびストアユニットに向けて送出した場合、ディレイ発生手段によって、ロード命令の後続命令であるALU命令およびストア命令が適切なタイミングで送出先のALUおよびストアユニットに供給される。ここで、適切なタイミングとは、ロード命令−ALU命令間やALU命令−ストア命令間にデータ依存関係を保障することのできるタイミングである。このように、データ依存関係が存在する小命令であっても、同一の命令列内に配列することが可能となっているので、従来、データ依存関係により挿入されていたnop命令を削減することが可能である。
また、命令列を構成する小命令の配列順序は予め決められており、命令ディスパッチャは、その配列順序に従って小命令を実行ユニットに向けて送出するようになっているので、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加する必要がない。
また、ディレイ発生手段は、命令ディスパッチャから送出された小命令のみを入力としており、レジスタオペランドで指定されたレジスタの値が入力されることはない。
また、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される構成においては、特許文献1に記載の、並列配置順に初段から1段ずつシフトした対角線上の各段で、選択指定した処理を1つずつ対角線方向にパイプライン実行する構成のように、実行ユニットの配置が制限されることはない。
本発明によれば、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加することなくnop命令を削減することが可能であるので、従来に比べて、構成が簡単で、低コストのプロセッサを提供することができる。
また、実行ユニットの配置が制限されることはないので、回路設計における自由度も高い。
ディレイ発生手段は、命令ディスパッチャから送出された小命令のみを入力としているので、小命令およびレジスタオペランドで指定されたレジスタの値が入力されるパイプレジスタに比べて、より少ないハードウェアリソースで構成することができる。
次に、本発明の実施形態について図面を参照して説明する。
(第1の実施形態)
図1は、本発明の第1の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。図1を参照すると、VLIW型プロセッサの主要部は、プログラムカウンタ10、命令メモリ11、命令ディスパッチャ12、ディレイ発生部13、14、ALU15、ロードユニット16、ストアユニット17、主記憶部18、および汎用レジスタ19からなる。
命令メモリ11は、命令を格納するためのメモリである。プログラムカウンタ10は、命令メモリ11からの命令発行を制御する。プログラムカウンタ10で指定されるアドレスに従って命令メモリ11から命令が発行される。命令ディスパッチャ12は、命令メモリ11から発行された命令列に含まれる小命令(ロード命令、ALU命令、ストア命令)を、実行ユニットである、ALU15、ロードユニット16およびストアユニット17に振り分ける。
ディレイ発生部13は、命令ディスパッチャ12がALU15に向けて送出した小命令(ALU命令またはnop命令)のALU15への供給タイミングを調整するためのものである。ディレイ発生部14は、命令ディスパッチャ12がストアユニット17に向けて送出した小命令(ストア命令またはnop命令)のストアユニット17への供給タイミングを調整するためのものである。これらディレイ発生部13、14により、命令ディスパッチャ12から送出された小命令の各実行ユニット(ALU15、ロードユニット16、ストアユニット17)への供給タイミングを調整するディレイ発生手段が構成されている。
ロードユニット16は、命令ディスパッチャ12から供給されるロード命令に従って、主記憶部18から汎用レジスタ19へデータを転送する。ALU15は、命令ディスパッチャ12から供給されるALU命令に従って、汎用レジスタ19からの入力データを用いて演算を行い、その演算結果を汎用レジスタ19に出力する。ストアユニット17は、命令ディスパッチャ12から供給されるストア命令に従って、主記憶部18へ汎用レジスタ19のデータを転送する。
汎用レジスタ19は、ALU15への入力データやALU15での演算結果を格納する汎用のレジスタである。主記憶部18は、汎用レジスタ19では格納しきれないデータや外部入出力用のデータを格納する。
本実施形態のVLIW型プロセッサでは、次の2つの前提条件を満たしているものと仮定する。アーキテクチャにおいて、主記憶部18は、固定サイクルで応答するSRAM等の記憶装置により構成される。したがって、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するALU命令が発行できるようになるまでの時間(以下、T_loadと記す)は、ロード命令によらず一定である(第1の前提条件)。また、ALU命令がALUに発行されてからそのALUでの演算結果を対象としたストア命令が発行できるようになるまでの時間(以下、T_ALUと記す)も、ALU命令によらず一定である(第2の前提条件)。
次に、ディレイ発生部13、14の構成を具体的に説明する。ディレイ発生部13、14は、基本的には同じ構成であって、図2に示すように、シフトレジスタとして動作するディレイレジスタ20のみにより構成される。このようにディレイ発生部13、14は、非常にシンプルな構成とされている。
ディレイ発生部13のディレイレジスタの深さNはT_loadに等しい。よって、このディレイ発生部13は、命令ディスパッチャ12から出力されたALU命令に対してT_load分の遅延を与える。一方、ディレイ発生部14におけるディレイレジスタの深さNは、T_loadとT_ALUとの和に等しい。よって、このディレイ発生部14は、命令ディスパッチャ12から出力されたストア命令に対して、(T_load+T_ALU)分の遅延を与える。
次に、本実施形態のVLIW型プロセッサの命令発行動作について、図1を参照して具体的に説明する。以下に説明する動作では、1つの命令列に対しての発行処理から演算処理完了までを注目している。
まず、命令メモリ11からプログラムカウンタ10によって指定されたアドレスにある命令列が命令ディスパッチャ12に出力される。命令ディスパッチャ12は、入力された命令列を小命令ごとに分割して各実行ユニット(ALU15、ロードユニット16、ストアユニット17)に振り分ける。この命令振り分けによれば、例えば、命令メモリ11から小命令として「Load 0」、「Operation 0」および「Store 0」を含む命令列(3段のパイプラインの命令列に対応する)が入力された場合は、小命令「Load 0」はロードユニット16に直接供給され、小命令「Operation 0」はディレイ発生部13を介してALU15に供給され、小命令「Store 0」はディレイ発生部14を介してストアユニット17に供給される。
ロード命令は、命令ディスパッチャ12からロードユニット16に直接供給される。ロードユニット16では、命令ディスパッチャ12から直接供給されたロード命令に従って、主記憶部18から汎用レジスタ19へデータを転送するロード処理が実行される。
ALU命令は、命令ディスパッチャ12からディレイ発生部13を介してALU15に供給される。ディレイ発生部13では、命令ディスパッチャ12から供給されたALU命令は、図2に示した構成を有するディレイレジスタに入力され、そこで、(T_load)サイクル分の遅延を受ける。ALU15は、ディレイ発生部13から供給されるT_load分の遅延を受けたALU命令に従って、汎用レジスタ19からの入力データを用いた演算処理を実行し、その演算結果を汎用レジスタ19に出力する。このように、ALU命令は、ディレイ発生部13でT_load分の遅延を受けた後にALU15に供給されるので、ALU15によるALU命令の実行時には、演算に必要なデータは、ロードユニット16により主記憶部18から汎用レジスタ19にすでに転送されている。よって、ALU15は、ロード対象であるデータを入力データとして使用することができる。
ストア命令は、命令ディスパッチャ12からディレイ発生部14を介してストアユニット17に供給される。ディレイ発生部14では、命令ディスパッチャ12から供給されたストア命令は、図2に示した構成を有するディレイレジスタに入力され、そこで、(T_load+T_ALU)分の遅延を受ける。ストアユニット17は、ディレイ発生部13から供給される(T_load+T_ALU)分の遅延を受けたストア命令に従って、汎用レジスタ19に保持されているデータ(演算結果)を主記憶部18に転送する。このように、ストア命令は、ディレイ発生部14で(T_load+T_ALU)分の遅延を受けた後にストアユニット17に供給されるので、ストア命令の実行時には、ALU15での演算結果がすでに汎用レジスタ19に保持されている。
図3に、命令メモリ11内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を模式的に示す。命令メモリ11には、第1乃至第4の命令列が順番に格納されている。第1および第2の命令列はいずれも、「load」、「ALU operation」、「store」の3つの小命令からなる。第3の命令列は、「load」、「ALU operation」、「nop」の3つの小命令からなる。第4の命令列は、「nop」、「ALU operation」、「store」の3つの小命令からなる。この例では、第1の命令列、第2の命令列、第3の命令列、第4の命令列の順番で、命令メモリ11から命令列が読み出される。なお、図3において、命令発行タイミングは、各実行ユニットに小命令が供給されるタイミングを示し、その供給タイミングを示す指標として時間t=0〜8が示されている。時間t0〜t8のぞれぞれの間隔は1サイクルに相当する。
プログラムカウンタ10によって指定されるアドレスに従って命令メモリ11から第1番目〜第4の命令列が順番に読み出される。命令メモリ11から読み出された命令列は、命令ディスパッチャ12によって小命令に分割されてそれぞれ該当する実行ユニットに向けて出力される。
第1の命令列の小命令「load」、第2の命令列の小命令「load」、第3の命令列の小命令「load」、第4の命令列の小命令「nop」は、それぞれ時間t0、t1、t2、t3にロードユニット16に供給される。ロードユニット16では、各時間に供給された小命令に従って必要な処理が実行される。
第1の命令列の小命令「ALU operation」、第2の命令列の小命令「ALU operation」、第3の命令列の小命令「ALU operation」、第4番目の命令列の小命令「ALU operation」は、それぞれ時間t1、t2、t3、t4にALU15に供給される。第1の命令列の小命令「ALU operation」は、該小命令と同じ命令列にあるロードユニット16向けの小命令(すなわち、第1の命令列の小命令「load」)がロードユニット16に供給されてから、(T_load)サイクル遅れて、ALU15に供給される。同様に、第2の命令列の小命令「ALU operation」、第3の命令列の小命令「ALU operation」、第4番目の命令列の小命令「ALU operation」についても、該小命令と同じ命令列にあるロードユニット16向けの小命令がロードユニット16に供給されてから、(T_load)サイクル遅れて、ALU15に供給される。
第1番目の命令列の「store」命令、第2番目の命令列の「store」命令、第3番目の命令列の「nop」命令、第4番目の命令列の「store」命令は、それぞれ時間t5、t6、t7、t8にストアユニット17に供給される。第1番目の命令列の「store」命令は、該小命令と同じ命令列にあるALU15向けの小命令(すなわち、第1の命令列の小命令「ALU operation」)がALU15に供給されてから、(T_load)サイクル遅れて、ストアユニット17に供給される。同様に、第2番目の命令列の「store」命令、第3番目の命令列の「nop」命令、第4番目の命令列の「store」命令についても、該小命令と同じ命令列にあるALU15向けの小命令がALU15に供給されてから、(T_load)サイクル遅れて、ストアユニット17に供給される。
以上の本実施形態のVLIW型プロセッサによれば、ディレイ発生部13、14を設けたことにより、同一の命令列内に配置されたロード命令、ALU命令およびストア命令の各小命令を、適切な発行タイミング(ロード命令−ALU命令間やALU命令−ストア命令間にデータ依存関係を保障することのできるタイミング)で、各実行ユニット(ALU15、ロードユニット16、ストアユニット17)に供給することができる。したがって、ロード命令−ALU命令間やALU命令−ストア命令間にデータ依存関係が存在する場合であっても、ロード命令、ALU命令およびストア命令の各小命令を同一の命令列内に配置することができ、その結果、nop命令数を削減することができる。
具体的に説明すると、従来のプロセッサによる図14に示した命令シーケンスは、本実施形態のVLIW型プロセッサでは、図4に示すような命令シーケンスになる。この命令シーケンスでは、図14の命令シーケンスにおける第4および第5の命令列が、1つの命令列「nop, mul R3 R4 R5, store R5 addr0」で表される。この命令列「nop, mul R3 R4 R5, store R5 addr0」において、「mul R3 R4 R5」および「store R5 addr0」はそれぞれALU命令およびストア命令であり、これら小命令の間には、ALU命令−ストア命令間にデータ依存関係が存在する。この場合、第4の命令列の最後の小命令「nop」、第5の命令列の最初の小命令「nop」およびその次の小命令「nop」は削減されている。このように、nop命令数を削減することができるので、その分、命令メモリにおけるメモリ領域を有効に使用することができる。
また、本実施形態のVLIW型プロセッサでは、命令メモリに格納される命令列は、ロードユニットに対する小命令、ALUに対する小命令、ストアユニットに対する小命令の3つの小命令からなり、各小命令の配置順序は予め決められている(本実施形態では、ロードユニット、ALU、ストアユニットの順で配置されている)。このため、命令ディスパッチャは、命令メモリから読み出された命令列を所定の順序で振り分けることで、各小命令を該当する実行ユニットに供給することができる。このように、命令列を構成する小命令の配列順序は予め決められており、命令ディスパッチャは、その配列順序に従って小命令を実行ユニットに向けて送出するようになっているので、マスクやPbitのフラグ、選択ビットなどの情報を命令列や小命令中に付加する必要がない。よって、従来に比べて、構成が簡単で、低コストのプロセッサを提供することができる。
また、ディレイ発生手段(ディレイ発生部13、14)は、命令ディスパッチャから送出された小命令のみを入力としており、レジスタオペランドで指定されたレジスタの値が入力されることはない。よって、小命令およびレジスタオペランドで指定されたレジスタの値が入力されるパイプレジスタに比べて、より少ないハードウェアリソースで構成することができる。
また、命令ディスパッチャが各実行ユニットに向けて送出した小命令は、ディレイ発生手段によって適切なタイミングで送出先の実行ユニットに供給される構成であるので、特許文献1に記載の、並列配置順に初段から1段ずつシフトした対角線上の各段で、選択指定した処理を1つずつ対角線方向にパイプライン実行する構成のように、実行ユニットの配置が制限されることはない。よって、回路設計における自由度も高い。
なお、本実施形態では、2つディレイ発生部を設ける必要があるが、そのようなディレイ発生部は、図2に示したような構成のシンプルなディレイレジスタにより構成されるので、命令発行制御の構成が複雑になることはない。
(第2の実施形態)
図5は、本発明の第2の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。図5を参照すると、VLIW型プロセッサの主要部は、プログラムカウンタ70、命令メモリ71、命令ディスパッチャ72、ディレイ発生部73、74、専用演算器75、ロードユニット76、ストアユニット77、主記憶部78、および汎用レジスタ79からなる。
本実施形態のVLIW型プロセッサは、図1に示した第1の実施形態のVLIW型プロセッサのALU15に代えて専用演算器75を設けたものであり、専用演算器75以外の構成は、第1の実施形態で説明したものと基本的に同じである。
命令ディスパッチャ72は、命令メモリ71から出力された命令列を小命令に分割して専用演算器75、ロードユニット76およびストアユニット77の各実行ユニットに供給する。ロードユニット76への小命令は、命令ディスパッチャ72からロードユニット76に直接供給される。専用演算器75への小命令は、命令ディスパッチャ72からディレイ発生部73を介して専用演算器75に供給される。ストアユニット77への小命令は、命令ディスパッチャ72からディレイ発生部74を介してストアユニット77に供給される。
専用演算器75は、3つのALU75a〜75cと1つのアキュムレータ75dからなる。ディレイ発生部73から専用演算器75へ向けて出力された小命令(以下、OPE命令と記す)はALU75a、75cに供給される。ALU75aは、供給されたOPE命令に従って、汎用レジスタ79からの入力データを用いて演算を行い、その演算結果をALU75cに出力する。ALU75bも、汎用レジスタ79からの入力データを用いて演算を行い、その演算結果をALU75cに出力する。ALU75cは、供給されたOPE命令に従って、汎用レジスタ79からの入力データおよびALU75a、75bからの演算結果を用いて演算を行い、その演算結果を汎用レジスタ79に出力する。この専用演算器75における一連の演算処理に要するサイクル数は、汎用レジスタ79からのデータ入力で1サイクル、ALU75a、75bの演算処理で1サイクル、ALU75cの演算処理で1サイクル、汎用レジスタ79へのデータ出力で1サイクルの合計4サイクルである。
ロードユニット76は、小命令としてロード命令が供給されると、該ロード命令に従って、主記憶部78から汎用レジスタ79へデータを転送する。このロードユニット76におけるロード処理には、1サイクルを要する。ストアユニット77は、小命令としてストア命令が供給されると、該ストア命令に従って、主記憶部78へ汎用レジスタ79のデータを転送する。このストアユニット77におけるストア処理には、1サイクルを要する。
ディレイ発生部73、74は、いずれも図2に示したディレイレジスタよりなる。ディレイ発生部73におけるディレイレジスタの深さNは1、ディレイ発生部74におけるディレイレジスタの深さNは5である。これらディレイ発生部73、74により、専用演算器75およびストアユニット77に供給される小命令を遅延させることで、同一の命令列内に配置された各小命令を、適切な発行タイミング(ロード命令−OPE命令間やOPE命令−ストア命令間のデータ依存関係を保障することのできるタイミング)で、各実行ユニット(専用演算器75、ロードユニット76、ストアユニット77)に供給することができる。
次に、本実施形態のVLIW型プロセッサの命令発行動作について、図5を参照して具体的に説明する。以下に説明する動作では、1つの命令列についての発行処理から演算処理完了までを注目している。
命令メモリ71からプログラムカウンタ70によって指定されたアドレスにある命令列が命令ディスパッチャ72に出力される。命令ディスパッチャ72は、命令メモリ71からの命令列を小命令に分割し、分割した小命令を専用演算器75、ロードユニット76およびストアユニット77の各実行ユニットに向けて出力する。
ロードユニット76への小命令(Load命令)は、命令ディスパッチャ72からロードユニット76に直接供給される。ロードユニット76では、発行されたLoad命令によりロード処理が行われる。専用演算器75への小命令(OPE命令)は、命令ディスパッチャ72からディレイ発生部73を介して専用演算器75に供給される。専用演算器75では、発行されたOPE命令により演算処理が行われる。ストアユニット77への小命令(store命令)は、命令ディスパッチャ72からディレイ発生部74を介してストアユニット77に供給される。ストアユニット77では、発行されたstore命令によりストア処理が行われる。
上記の場合、OPE命令は、ディレイ発生部73により1サイクル遅れて専用演算器75に発行され、store命令は、ディレイ発生部74により5サイクル遅れてストアユニット77に発行されることになるので、Load命令−OPE命令間のデータ依存関係およびOPE命令−store命令間のデータ依存関係を保障することができる。
図6に、命令メモリ71内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を模式的に示す。命令メモリ71には、第1乃至第4の命令列が順番に格納されている。第1および第2の命令列はいずれも、「load」、「OPE operation」、「store」の3つの小命令からなる。第3の命令列は、「load」、「OPE operation」、「nop」の3つの小命令からなる。第4の命令列は、「nop」、「OPE operation」、「store」の3つの小命令からなる。この例では、第1の命令列、第2の命令列、第3の命令列、第4の命令列の順番で、命令メモリ11から命令列が読み出される。なお、図6において、命令発行タイミングは、各実行ユニットに小命令が供給されるタイミングを示し、その供給タイミングの指標として時間t=0〜8が示されている。時間t0〜t8のぞれぞれの間隔は1サイクルに相当する。
プログラムカウンタ70によって指定されるアドレスに従って命令メモリ71から第1乃至第4の命令列が順番に読み出される。命令メモリ71から読み出された命令列は、命令ディスパッチャ72によって小命令に分割されてそれぞれ該当する実行ユニットに向けて出力される。
第1の命令列の小命令「load」、第2の命令列の小命令「load」、第3の命令列の小命令「load」、第4の命令列の小命令「nop」は、それぞれ時間t0、t1、t2、t3にロードユニット76に供給される。ロードユニット76では、各時間に供給された小命令が実行される。
第1の命令列の小命令「OPE operation」、第2の命令列の小命令「OPE operation」、第3の命令列の小命令「OPE operation」、第4の命令列の小命令「OPE operation」は、それぞれ時間t1、t2、t3、t4に専用演算器75に供給される。専用演算器75では、各時間に供給された小命令が実行される。この場合の専用演算器75における小命令の実行は、ロードユニット76における小命令の実行に対して、1サイクル遅れて行われることになる。
第1の命令列の小命令「store」、第2の命令列の小命令「store」、第3の命令列の小命令「nop」、第4の命令列の小命令「store」は、それぞれ時間t5、t6、t7、t8にストアユニット77に供給される。ストアユニット77では、各時間に供給された小命令が実行される。この場合のストアユニット77における小命令の実行は、ロードユニット76における小命令の実行に対して、5サイクル遅れて行われることになる。
以上の本実施形態のVLIW型プロセッサにおいても、ディレイ発生部73、74を設けたことにより、同一の命令列内に配置されたロード命令、OPE命令およびストア命令の各小命令を、適切な発行タイミング(ロード命令−OPE命令間やOPE命令−ストア命令間にデータ依存関係を保障することのできるタイミング)で、各実行ユニット(専用演算器75、ロードユニット76、ストアユニット77)に供給することができる。したがって、ロード命令−OPE命令間やOPE命令−ストア命令間にデータ依存関係が存在する場合であっても、ロード命令、OPE命令およびストア命令の各小命令を同一の命令列内に配置することができ、その結果、nop命令数を削減することができる。この他、第1の実施形態と同様な効果も奏する。
本実施形態において、専用演算器75を、浮動小数点演算ユニットなどの他の専用演算器で置き換えた形態としてもよい。
(第3の実施形態)
図7は、本発明の第3の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。図7を参照すると、VLIW型プロセッサの主要部は、プログラムカウンタ90、命令メモリ91、命令ディスパッチャ92、ディレイ発生部93、94、ALU95a、95b、ロードユニット96a、96b、ストアユニット97a、97b、主記憶部98、および汎用レジスタ99からなる。
本実施形態のVLIW型プロセッサは、図1に示した第1の実施形態のVLIW型プロセッサにおいて、ALU、ロードユニット、ストアユニットの各実行ユニットをそれぞれ複数設けたものであり、これ以外の構成は、第1の実施形態で説明したものと基本的に同じである。図7の構成では、ALU、ロードユニット、ストアユニットの各実行ユニットはそれぞれ2つ設けられているが、3つ以上であってもよい。
命令ディスパッチャ92は、命令メモリ91から出力された命令列を小命令に分割してALU95a、95b、ロードユニット96a、96b、ストアユニット97a、97bの各実行ユニットに供給する。
ロードユニット96aへの小命令は、命令ディスパッチャ72からロードユニット96aに直接供給され、ロードユニット96bへの小命令は、命令ディスパッチャ72からロードユニット96bに直接供給される。ロードユニット96a、96bは、小命令としてロード命令が供給されると、該ロード命令に従って、主記憶部98から汎用レジスタ79へデータを転送する。
ALU95aへの小命令は、命令ディスパッチャ92からディレイ発生部93を介してALU95aに供給され、ALU95bへの小命令は、命令ディスパッチャ92からディレイ発生部93を介してALU95bに供給される。ALU95a、95bは、小命令としてALU命令が供給されると、該ALU命令に従って、汎用レジスタ79からの入力データを用いて演算処理を行う。
ストアユニット97aへの小命令は、命令ディスパッチャ92からディレイ発生部94を介してストアユニット97aに供給され、ストアユニット97bへの小命令は、命令ディスパッチャ92からディレイ発生部94を介してストアユニット97bに供給される。
ストアユニット97a、97bは、小命令としてストア命令が供給されると、該ストア命令に従って、主記憶部78へ汎用レジスタ79のデータを転送する。
ディレイ発生部93、94は、いずれも図2に示したディレイレジスタよりなる。ディレイ発生部93のディレイレジスタの深さNは、T_load(ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するALU命令が発行できるようになるまでの時間)に等しい。ディレイ発生部94のディレイレジスタの深さNは、T_loadとT_ALU(ALU命令がALUに発行されてからそのALUでの演算結果を対象としたストア命令が発行できるようになるまでの時間)との和に等しい。これらディレイ発生部93、94により、ALU95a、95bおよびストアユニット97a、97bに供給される小命令を遅延させることで、同一の命令列内に配置された各小命令を、適切な発行タイミング(ロード命令−ALU命令間やALU命令−ストア命令間のデータ依存関係を保障することのできるタイミング)で、各実行ユニット(ALU95a、95b、ロードユニット96a、96b、ストアユニット97a、97b)に供給することができる。
(第4の実施形態)
本発明の第4の実施形態であるVLIW型プロセッサの構成について説明する。本実施形態のVLIW型プロセッサは、第1の実施形態のVLIW型プロセッサの構成と基本的に同じであるが、ALU命令がALUに発行されてからそのALUでの演算結果を対象としたストア命令が発行できるようになるまでの時間(T1_ALU)がALU命令の種類によって異なるために、ストアユニットと接続されるディレイ発生部の構成が第1の実施形態のVLIW型プロセッサと異なる。なお、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するALU命令が発行できるようになるまでの時間(T1_load)は、AUL命令によらず一定である。
図8に、ストアユニットと接続されるディレイ発生部の構成を示す。図8を参照すると、ディレイ発生部は、ディレイレジスタ100、ディレイコントローラ101およびセレクタ103からなる。
ディレイレジスタ100は、命令ディスパッチャからの小命令を入力とし、入力された小命令に対して、設定された遅延量に基づく遅延を与える。セレクタ103は、ディレイコントローラ101からの制御信号の供給タイミングで、ディレイレジスタ100から遅延を与えられた小命令を読み出す。セレクタ103で読み出した小命令は、ストアユニットに供給される。
ディレイコントローラ101は、ALU命令の種類によるT1_ALUの違いに応じて、ディレイレジスタ100における小命令に与える遅延量を決定し、その決定した遅延量で小命令を読み出すための制御信号をセレクタ103に供給する。このディレイコントローラ101は、T1_ALUの値を検出するALUサイクル検出部と、ALUサイクル検出部で検出されたT1_ALU値と現在の遅延量(T_cur)を比較する比較部と、入力されたストア命令の前のサイクルにおける小命令が空きかどうか判断する空き命令判別部と、比較部における比較結果および空き命令判別部における判断結果に基づいて、入力された小命令に対する遅延量(T_next)を決定する遅延量決定部とを有する。ディレイ発生部におけるディレイレジスタ101の深さNは、T1_ALUの最大値とT1_loadの和に等しい。
図9に、ディレイコントローラ101による遅延量決定処理の一手順を示す。図9を参照すると、まず、ALUサイクル検出部が、命令ディスパッチャから供給されるALU命令に基づいてT1_ALUの値を検出する(ステップステップ110)。T1_ALUの値は、ALUのパイプラインの段数などのプロセッサのアーキテクチャやALUの構成によって、各ALU命令で、あらかじめ決まった値として設定されている。よって、ALU命令に応じて、例えばテーブルを引く形で、T1_ALUの値を得ることができる。例えば、5段のパイプラインを持つプロセッサ(IF、Decode、EXE、MEM、WB)においては、T1_ALUの値は、IFからWBまでに必要なサイクル数、すなわち5サイクルとなる。もし、このプロセッサで、乗算命令がALU内、つまりEXEのステージで2サイクル必要となる場合は、T1_ALUの値は、6サイクルとなる。このようなT1_ALUの値とALU命令の対応関係を有するテーブルを使用することで、ALUサイクル検出部で、入力されたALU命令に対するT1_ALUの値を検出する。
ALUサイクル検出部でT1_ALUの値が検出されると、比較部が、その検出されたT1_ALUの値と予め与えられているT1_loadの値との和(T1_ALU+T1_load)と、ディレイレジスタ101に対して現在設定している遅延量T_curとを比較し、現在の遅延量T_curの値が(T1_ALU+T1_load)値より大きいか否かを判断する(ステップ111)。ここで、現在の遅延量T_curは、同じ命令列に存在したLoad命令が発行されてからStore命令が発行されるまでのサイクル数で与えられる。具体的には、現在の遅延量T_curは、1つ前のサイクルで入力されたストア命令に対して設定した遅延量であり、各ユニットのディレイ発生部のディレイレジスタで使用した段数(遅延)に対応する。例えば、ALUに接続する遅延発生部のディレイレジスタが2段目(段数固定)から命令を発行し、ストアユニットに接続する遅延発生部のディレイレジスタが5段目(段数可変)から命令を発行している場合は、現在の遅延量T_curは7(=2+5)段(サイクル)となる。
ステップ111の判断で「no」となった場合は、遅延量決定部は、入力された小命令に対する遅延量(T_next)を(T1_ALU+T1_load)の値とする(ステップ112)。この場合は、ディレイレジスタに対して(T1_ALU+T1_load)が設定され、ディレイレジスタはその設定値(T1_ALU+T1_load)に相当する遅延を、入力されたストア命令に対して与える。
ステップ111の判断が「yes」となった場合は、次いで、空き命令判別部が、入力されたストア命令の前のサイクルにおける小命令が空き(nop命令)かどうか判断する(ステップ113)。ここで、ストア命令の前のサイクルとは、ストアユニットに発行されるストア命令のうちのターゲットとなっている命令の前のストア命令のサイクルを意味する。つまり、ディレイ発生部に入力されたストア命令の前のサイクルが空きかどうかとは、現在、ディレイ発生部に入力されたストア命令の前のサイクルでストア命令がディレイ発生部に入力されたかどうか、ということを意味する。
図10に、発行される命令列の一例を示す。図10に示す例において、時間T2で発行された命令列の小命令「store」が、ディレイ発生部に入力されたターゲットのストア命令である場合、このターゲットのストア命令の前のサイクルは、時間T1で発行された命令列を意味する。この場合は、時間T1で発行された命令列において、小命令「store」と小命令「nop」のいずれが含まれているかを判断する。小命令「nop」が含まれている場合は、ディレイ発生部に入力されたストア命令の前のサイクルは空きと判断されることになる。なお、前のサイクルの命令は、ディレイ発生部内のディレイレジスタに蓄えられているため、その蓄積データを参照することで、ディレイ発生部に入力されたストア命令の前のサイクルが空き(nop命令)かどうかを判定することができる。
ステップ113の判断が「no」となった場合は、遅延量決定部は、遅延量(T_next)を現在の遅延量T_curとする(ステップ114)。この場合は、ディレイレジスタに対して現在の遅延量T_curが設定され、ディレイレジスタはその現在の遅延量T_curに相当する遅延を、入力されたストア命令に対して与える。
ステップ113の判断が「yes」となった場合は、遅延量決定部は、遅延量(T_next)を遅延量T_curから1サイクルに相当する遅延量を差し引いた値(T_cur−1)とする(ステップ115)。この場合は、ディレイレジスタに対して遅延量(T_cur−1)が設定され、ディレイレジスタはその遅延量(T_cur−1)に相当する遅延を、入力されたストア命令に対して与える。
上述した遅延量決定処理によれば、ALU命令の種類によるT1_ALUの違いに応じて、ディレイレジスタ100における小命令に与える最適な遅延量が決定されるので、ALUの演算を行うサイクル数がALU命令によって異なる構成おいて、ALU命令−ストア命令間のデータ依存関係を保障しつつ、nop命令数を削減した命令列を用いて演算処理を行うことができる。
加えて、以下のような効果も得られる。
例えば、ALUにおいて、MUL(乗算命令)のEXEステージでの実行に2サイクル必要な場合で、乗算命令の実行後に、他のALU命令(EXEステージでの実行に1サイクル必要な命令)を実行する構成において、乗算命令の後に、他のALU命令が存在する場合を考える。この場合は、T1_ALU+T1_loadの値は、現在の遅延量T_curの値より小さくなる。例えば、現在の遅延量T_curの値が7サイクルであり、T1_ALUの値が5サイクル、T1_loadの値が1サイクルである場合、(T1_ALU+T1_load)の値は、現在の遅延量T_curの値より小さくなる。このような場合は、ステップ111の判断が「yes」となり、同じ命令列のストア命令の前のストア命令の状況をみて、ディレイレジスタの遅延量が制御されることになる。ターゲットとなっているストア命令(乗算命令)の前にあるストア命令が空きサイクル(nop命令)だった場合、そのストア命令は発行せずに、一段後のターゲットとなっているストア命令を出力するように、ディレイレジスタが制御される(ステップ115の処理)。これにより、ストア命令の発行タイミングを早くすることができる。
図11に、ディレイレジスタの制御状態を模式的に示す。時間T0において、ディレイレジスタには、上から2段目、3段目、4段目、5段目にそれぞれ、ストア命令#2、ストア命令#1、nop命令、ストア命令#0が格納されている。時間T1では、ストア命令#2、ストア命令#1、nop命令、ストア命令#0の各格納位置が全体で1段ずつシフトされ、ストア命令#0が発行される。時間T2では、ストア命令#2、ストア命令#3、nop命令の各格納位置が全体で1段ずつシフトされる。この時間T2において、ステップ111の判断は「yes」となり、ステップ113の判断は「yes」となるので、nop命令の次のストア命令#1が発行される。このようにnop命令を発行せずに、次命令であるストア命令#1を発行することで、ストア命令の発行タイミングを早くすることができる。
なお、本実施形態では、第1乃至第3の実施形態のものに比べて、ディレイレジスタの制御が必要な分、構成は複雑になると考えられる。しかし、ストア命令やALU命令のオペコードは通常5bit程度のものであるため、パイプラインの段数を5段程度のアーキテクチャを想定した場合において、4-5bit程度の比較やディレイレジスタ内のデータがnopか空きかを判定することが可能なユニットは、小規模なユニットとして構成することができる。
(第5の実施形態)
本発明の第5の実施形態であるVLIW型プロセッサの構成について説明する。本実施形態のVLIW型プロセッサは、第1の実施形態のVLIW型プロセッサの構成と基本的に同じであるが、ロード命令がロードユニットに発行されてからそのロード対象となっているデータを入力データとして使用するALU命令が発行できるようになるまでの時間(T1_load)がロード命令の種類によって異なるために、ALUと接続されるディレイ発生部の構成が第1の実施形態のVLIW型プロセッサと異なる。なお、ALU命令がALUに発行されてからそのALUでの演算結果を対象としたストア命令が発行できるようになるまでの時間(T1_ALU)は一定とする。
ALUと接続されるディレイ発生部は、図8に示したディレイ発生部の構成と基本的に同じで、ディレイレジスタ100、ディレイコントローラ101、およびセレクタ102からなる。ただし、ディレイレジスタ100の命令ディスパッチャからの入力がALU命令とされ、ディレイコントローラ101への「ALU命令」入力がロード命令入力とされる。また、本実施形態では、ディレイコントローラ101は、ロードサイクル検出部、比較部、空き命令判別部および遅延量決定部から構成される。
図12に、ディレイコントローラ101による遅延量決定処理の一手順を示す。図12を参照すると、まず、ロードサイクル検出部が、命令ディスパッチャから供給されるロードに基づいてT1_Loadの値を検出する(ステップステップ120)。T1_loadの値は、各ロード命令で、あらかじめ決まった値として設定されている。よって、ロード命令に応じて、例えばテーブルを引く形で、T1_Loadの値を得ることができる。
ロードサイクル検出部でT1_Loadの値が検出されると、比較部が、その検出されたT1_Loadの値と、ディレイレジスタ101に対して現在設定している遅延量T_curとを比較し、現在の遅延量T_curの値がT1_Loadの値より大きいか否かを判断する(ステップ121)。ここで、現在の遅延量T_curは、同じ命令列に存在したLoad命令が発行されてからALU命令が発行されるまでのサイクル数で与えられる。具体的には、現在の遅延量T_curは、1つ前のサイクルで入力されたALU命令に対して設定した遅延量であり、ALUに接続するディレイ発生部のディレイレジスタ100で使用した段数(遅延)に対応する。
ステップ121の判断で「no」となった場合は、遅延量決定部は、入力された小命令に対する遅延量(T_next)をT1_loadの値とする(ステップ122)。この場合は、ディレイレジスタに対してT1_loadの値が設定され、ディレイレジスタはその設定値(T1_load)に相当する遅延を、入力されたALU命令に対して与える。
ステップ121の判断が「yes」となった場合は、次いで、空き命令判別部が、入力されたALU命令の前のサイクルにおける小命令が空き(nop命令)かどうか判断する(ステップ123)。ここで、ALU命令の前のサイクルとは、ALUユニットに発行されるALU命令のうちのターゲットとなっている命令の前のALU命令のサイクルを意味する。つまり、ディレイ発生部に入力されたALU命令の前のサイクルが空きかどうかとは、現在、ディレイ発生部に入力されたALU命令の前のサイクルでALU命令がディレイ発生部に入力されたかどうか、ということを意味する。
ステップ123の判断が「no」となった場合は、遅延量決定部は、遅延量(T_next)を現在の遅延量T_curとする(ステップ124)。この場合は、ディレイレジスタに対して現在の遅延量T_curが設定され、ディレイレジスタはその現在の遅延量T_curに相当する遅延を、入力されたALU命令に対して与える。
ステップ123の判断が「yes」となった場合は、遅延量決定部は、遅延量(T_next)を遅延量T_curから1サイクルに相当する遅延量を差し引いた値(T_cur−1)とする(ステップ125)。この場合は、ディレイレジスタに対して遅延量(T_cur−1)が設定され、ディレイレジスタはその遅延量(T_cur−1)に相当する遅延を、入力されたストア命令に対して与える。
(他の実施形態)
第4および第5の実施形態を組み合わせることで、T1_loadの値およびT1_ALUの値がともに命令によって変化する構成に適用することができる。ただし、この場合は、第4の構成のディレイ発生部において、ディレイコントローラは、命令ディスパッチャから供給されるロード命令およびALU命令からT1_loadおよびT1_ALUを検出することになる。これ以外の動作は、第4および第5の実施形態の場合と同様に行われる。
本発明によれば、多量のストリームデータに対してデータに応じた処理を行う、データ通信処理装置などのデジタル信号処理装置といった用途に適用できる。
本発明の第1の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。 図1に示すディレイ発生部の構成を示す模式図である。 図1に示すVLIW型プロセッサにおける、命令メモリ内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を説明するための模式図である。 図1に示すVLIW型プロセッサで使用される命令シーケンスを説明するための図である。 本発明の第2の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。 図5に示すVLIW型プロセッサにおける、命令メモリ内に格納される小命令の構成と、その小命令の実行ユニットへの発行タイミングとの関係を説明するための模式図である。 本発明の第3の実施形態であるVLIW型プロセッサの概略構成を示すブロック図である。 本発明の第4の実施形態であるVLIW型プロセッサを構成するディレイ発生部の構成を示すブロック図である。 図8に示すディレイコントローラによる遅延量決定処理の一手順を示すフローチャートである。 本発明の第4の実施形態であるVLIW型プロセッサにおいて発行される命令列の一例を示す模式図である。 本発明の第4の実施形態であるVLIW型プロセッサにおけるディレイレジスタの制御状態を示す模式図である。 本発明の第5の実施形態であるVLIW型プロセッサのディレイコントローラによる遅延量決定処理の一手順を示すフローチャートである。 VLIW型プロセッサの構成を示すブロック図である。 図13に示すVLIW型プロセッサで使用される命令シーケンスを説明するための図である。 nop命令数削減方式の一例を示す模式図である。 nop命令数削減方式の他の例を示す模式図である。
符号の説明
10 プログラムカウンタ
11 命令メモリ
12 命令ディスパッチャ
13、14 ディレイ発生部
15 ALU
16 ロードユニット
17 ストアユニット
18 主記憶部
19 汎用レジスタ

Claims (2)

  1. それぞれが独立して処理を行う並列に配置された複数の実行ユニットと、
    前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
    前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
    前記ディレイ発生手段は、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給する、VLIW型プロセッサであって、
    前記複数の実行ユニットは、
    ロード命令に従って、主記憶部から演算に必要なデータをロードする少なくとも1つのロードユニットと、
    演算命令に従って、前記主記憶部からロードされたデータを使用して演算する少なくとも1つの演算ユニットと、
    ストア命令に従って、前記演算ユニットでの演算結果を前記主記憶部に格納する少なくとも1つのストアユニットと、を有し、
    前記ディレイ発生手段は、
    前記演算命令の前記演算ユニットへの供給タイミングを第1の遅延量だけ遅延させる第1のディレイ発生部と、
    前記ストア命令の前記ストアユニットへの供給タイミングを前記第1の遅延量より大きな第2の遅延量に基づいて遅延させる第2のディレイ発生部と、を有し、
    前記命令列は、前記ロード命令として、命令の実行完了に要するサイクル数が異なるロード命令の設定が可能とされ、
    前記第1のディレイ発生部は、前記命令ディスパッチャから送出された前記ロード命令および演算命令を入力としており、
    入力された前記演算命令を、設定された遅延量で遅延させるディレイレジスタと、
    入力された前記ロード命令の実行完了に要するサイクル数から該ロード命令の実行完了タイミングを検出するサイクル検出部と、
    前記サイクル検出部で検出された前記ロード命令の実行完了タイミングの値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
    入力された前記演算命令の前のサイクルで前記命令ディスパッチャから前記演算ユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
    前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記演算命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
    前記遅延量決定部は、前記現在の遅延量が前記ロード命令の実行完了タイミングの値以下の場合は、該実行完了タイミングに対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きである場合は、該実行完了タイミングの値から1サイクル分の時間を差し引いた値に対応する遅延量を前記ディレイレジスタに設定し、前記現在の遅延量が前記ロード命令の実行完了タイミングの値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定する、VLIW型プロセッサ
  2. それぞれが独立して処理を行う並列に配置された複数の実行ユニットと、
    前記複数の実行ユニットに一連の処理を実行させるための複数の小命令が所定の順番で配列された命令列を入力とし、該命令列に含まれる前記複数の小命令を、前記所定の順番に従って前記複数の実行ユニットにそれぞれ振り分けて送出する命令ディスパッチャと、
    前記命令ディスパッチャから送出された前記複数の小命令の前記複数の実行ユニットへの供給タイミングを調整するためのディレイ発生手段と、を有し、
    前記ディレイ発生手段は、前記複数の小命令について、他の小命令で処理されたデータを用いる小命令を、前記他の小命令の実行完了後に送出先の実行ユニットへ供給する、VLIW型プロセッサであって、
    前記複数の実行ユニットは、
    ロード命令に従って、主記憶部から演算に必要なデータをロードする少なくとも1つのロードユニットと、
    演算命令に従って、前記主記憶部からロードされたデータを使用して演算する少なくとも1つの演算ユニットと、
    ストア命令に従って、前記演算ユニットでの演算結果を前記主記憶部に格納する少なくとも1つのストアユニットと、を有し、
    前記ディレイ発生手段は、
    前記演算命令の前記演算ユニットへの供給タイミングを第1の遅延量だけ遅延させる第1のディレイ発生部と、
    前記ストア命令の前記ストアユニットへの供給タイミングを前記第1の遅延量より大きな第2の遅延量に基づいて遅延させる第2のディレイ発生部と、を有し、
    前記命令列は、前記演算命令として、命令の実行完了に要するサイクル数が異なる演算命令の設定が可能とされ、
    前記第2のディレイ発生部は、前記命令ディスパッチャから送出された前記演算命令およびストア命令を入力としており、
    入力された前記ストア命令を、設定された遅延量で遅延させるディレイレジスタと、
    入力された前記演算命令の実行完了に要するサイクル数から該演算命令の実行完了タイミングを検出するサイクル検出部と、
    前記サイクル検出部で検出された前記演算命令の実行完了タイミングの値と予め与えられている前記第1の遅延量との和である遅延加算値と前記ディレイレジスタに設定されている現在の遅延量とを比較する比較部と、
    入力された前記ストア命令の前のサイクルで前記命令ディスパッチャから前記ストアユニットへ送出された前回の小命令が空きかどうかを判断する空き命令判別部と、
    前記比較部における比較結果および前記空き命令判別部における判断結果に基づいて、入力された前記ストア命令に対する遅延量を決定して、該遅延量を前記ディレイレジスタに設定する遅延量決定部と、を有し、
    前記遅延量決定部は、前記現在の遅延量が前記遅延加算値以下の場合は、該遅延加算値を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きである場合は、前記演算命令の実行完了タイミングの値から1サイクル分の時間を差し引いた値に対応する遅延時間を前記ディレイレジスタに設定し、前記現在の遅延量が前記遅延加算値より大きく、かつ、前記前回の小命令が空きでない場合は、前記現在の遅延量を前記ディレイレジスタに設定する、VLIW型プロセッサ。
JP2006183204A 2006-07-03 2006-07-03 Vliw型プロセッサ Expired - Fee Related JP4771079B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006183204A JP4771079B2 (ja) 2006-07-03 2006-07-03 Vliw型プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006183204A JP4771079B2 (ja) 2006-07-03 2006-07-03 Vliw型プロセッサ

Publications (2)

Publication Number Publication Date
JP2008015589A JP2008015589A (ja) 2008-01-24
JP4771079B2 true JP4771079B2 (ja) 2011-09-14

Family

ID=39072566

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006183204A Expired - Fee Related JP4771079B2 (ja) 2006-07-03 2006-07-03 Vliw型プロセッサ

Country Status (1)

Country Link
JP (1) JP4771079B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8135941B2 (en) * 2008-09-19 2012-03-13 International Business Machines Corporation Vector morphing mechanism for multiple processor cores
JP2011145886A (ja) * 2010-01-14 2011-07-28 Nec Corp 情報処理装置
EP3005078A2 (en) 2013-05-24 2016-04-13 Coherent Logix Incorporated Memory-network processor with programmable optimizations
US11561792B2 (en) 2015-06-08 2023-01-24 Qualcomm Incorporated System, apparatus, and method for a transient load instruction within a VLIW operation

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0954693A (ja) * 1995-08-11 1997-02-25 Toshiba Corp Vliwプロセッサ
JPH1185513A (ja) * 1997-09-03 1999-03-30 Hitachi Ltd プロセッサ
JP2002333978A (ja) * 2001-05-08 2002-11-22 Nec Corp Vliw型プロセッサ
JP3705367B2 (ja) * 2004-05-24 2005-10-12 株式会社日立製作所 命令処理方法

Also Published As

Publication number Publication date
JP2008015589A (ja) 2008-01-24

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
US9965275B2 (en) Element size increasing instruction
JP2004234642A (ja) 命令実行ユニットのための統合化構造のレイアウト
CN108319559B (zh) 用于控制矢量内存存取的数据处理装置及方法
WO2015114305A1 (en) A data processing apparatus and method for executing a vector scan instruction
US20140317388A1 (en) Apparatus and method for supporting multi-modes of processor
KR20140131472A (ko) 상수 저장 레지스터를 구비하는 재구성 가능 프로세서
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
JP5720243B2 (ja) プロセッサ検証プログラム
JP4771079B2 (ja) Vliw型プロセッサ
KR102458467B1 (ko) 벡터 생성 명령
US8055883B2 (en) Pipe scheduling for pipelines based on destination register number
JPH1185513A (ja) プロセッサ
JP2874351B2 (ja) 並列パイプライン命令処理装置
KR19980034436A (ko) 듀얼 파이프라인 프로세서에서 로드 명령의 병렬 수행 장치
JP5871298B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
KR101118593B1 (ko) Vliw 명령어 처리 장치 및 방법
CN112579168B (zh) 指令执行单元、处理器以及信号处理方法
JP2861234B2 (ja) 命令処理装置
JP2013140472A (ja) ベクトルプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110302

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110428

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110525

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110607

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140701

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees