(57)【要約】【課題】演算器の使用時間効率を上げ、逐次処理の性能向上をすることができるプロセッサを提供する。【解決手段】プロセッサ１は、クロック信号CLKを制御するための制御信号S_CYCLEに応じて、供給されたクロック信号CLKに基づいて生成された制御クロック信号ECLKを出力するクロック制御回路２１と、直列に接続された複数のALU２２〜２５とを有する。この複数のALU２２〜２５によって複数の演算が実行される演算ステージにおいて、直列に実行される前記複数の演算を、クロック制御回路２１からの制御クロック信号ECLKに基づいて、実行サイクルを変更して１つの実行サイクル内で実行させるようにした。【選択図】図１
2010262600.tif 000002
【特許請求の範囲】
【請求項１】
メモリから読み出した命令コードを実行するプロセッサであって、
クロック信号を制御するためのクロック信号制御情報に応じて、供給されたクロック信号に基づいて生成された制御クロック信号を出力する制御クロック生成部と、
直列に接続された複数の演算器と、
を有し、
前記複数の演算器のそれぞれが実行する演算処理の内容の情報及び前記演算処理に必要なデータの情報を含む動作モード情報に応じて、前記複数の演算器によって複数の演算が実行される演算ステージにおいて、直列に実行される前記複数の演算を、前記制御クロック生成部からの前記制御クロック信号に基づいて、実行サイクルを変更して１つの実行サイクル内で実行させるようにしたことを特徴とするプロセッサ。
【請求項２】
前記直列に接続された複数の演算器は、前記複数の演算器間の接続を変更できるように構成されていて、
前記複数の演算器間の接続を複数の接続パターンで接続可能な切換部を有し、
前記切換部は、前記複数の接続パターンのうち、接続情報に応じた接続パターンにより前記複数の演算器間の接続を切り換えることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記命令コードは、前記制御クロック生成部への前記クロック信号制御情報と、前記複数の演算器の前記動作モード情報との情報を含むことを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記制御クロック生成部への前記クロック信号制御情報と、前記複数の演算器の前記動作モード情報との情報の組を１つ以上記憶する記憶部を有し、
前記命令コードは、前記記憶部に含まれる前記情報を指定するコードを有することを特徴とする請求項１に記載のプロセッサ。
【請求項５】
前記プロセッサの動作周波数または動作電圧は変更可能であって、
前記制御クロック生成部への前記クロック信号制御情報は、変更された動作周波数または動作電圧に応じて異なることを特徴とする請求項１に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、制御クロック信号によって演算の実行サイクル数を変更することができるプロセッサに関する。
【背景技術】
【０００２】
従来、パーソナルコンピュータ、組み込み機器等の情報機器において、プロセッサは性能を左右する重要な要素の１つである。プロセッサの性能向上には、高クロック化、処理の並列化等が広く実施されていて、特に近年は消費電力あるいは熱の問題から高クロック化が困難になり、並列処理に重点が置かれるようになっている。しかし、並列化できずに順番に実行しなければならない逐次演算処理も多数存在し、これらの処理時間を最適化することも必要である。
【０００３】
上述したように、逐次演算処理を同期クロック式プロセッサで実行する場合の問題として、演算時間の非効率性がある。演算の中にはビット数の大きい加減算もあれば、ビット数の小さい論理演算もある。これらの演算に必要な時間は大きく異なるが、マイクロプロセッサで実行する場合、等しく１クロック時間かけなければならない場合多い。
【０００４】
ここでは、プロセッサの演算ステージだけに着目し、前後の命令フェッチ、メモリ制御などは演算ステージの動作に影響しないと仮定する。例えば、６個の演算A〜Fを実行するために６サイクル掛かっているが、１サイクル時間のほぼ全てを使う演算もあれば、非常に短い時間で実行可能な演算もある。このように、非常に短い時間で実行可能な演算の場合、従来の構成では演算を実行していない無駄な時間が存在するという問題があった。
【０００５】
また、積和演算等の特定の複合演算のみ１サイクルで実行できるようした構成のプロセッサがある。この構成は、例えばマルチメディア処理の性能向上を目的として適用されるが、上述した無駄な時間を削減する効果もある。しかし、この構成では、複合演算を１サイクル時間に収めるため、クロック周期が長くなりやすい。そのため、演算の種類によっては、無駄な時間が増えてしまうという問題があった。
【０００６】
そこで、命令の実行時間の相違に基づくハザードの発生を防ぐ情報処理装置が提案されている（例えば、特許文献１参照）。この提案の情報処理装置は、命令コードの実行サイクル数に基づいて、クロック信号の周期を変化させ、その周期が変化されたクロック信号に従って、命令コードを実行する。
【０００７】
しかしながら、この提案の情報処理装置は、１つの演算が複数サイクルかかる場合、クロック信号をマスクして、命令を効率的に実行するものであり、演算器の使用効率を上げて、複数の演算を１度に直列に実行するものではない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−１２６８９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、演算器の使用時間効率を上げ、逐次処理の性能向上をすることができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、メモリから読み出した命令コードを実行するプロセッサであって、クロック信号を制御するためのクロック信号制御情報に応じて、供給されたクロック信号に基づいて生成された制御クロック信号を出力する制御クロック生成部と、直列に接続された複数の演算器と、を有し、前記複数の演算器のそれぞれが実行する演算処理の内容の情報及び前記演算処理に必要なデータの情報を含む動作モード情報に応じて、前記複数の演算器によって複数の演算が実行される演算ステージにおいて、直列に実行される前記複数の演算を、前記制御クロック生成部からの前記制御クロック信号に基づいて、実行サイクルを変更して１つの実行サイクル内で実行させるようにしたことを特徴とするプロセッサを提供することができる。
【発明の効果】
【００１１】
本発明のプロセッサによれば、演算器の使用時間効率を上げ、逐次処理の性能向上をすることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【図２】命令コードの例を説明するための説明図である。
【図３】命令コードを生成する処理の流れの例を説明するためのフローチャートである。
【図４】ALU２２の構成の例を説明するための説明図である。
【図５】モード情報と演算処理との対応の例を説明するための説明図である。
【図６】演算部１５ａによって実行される演算ステージの動作の例を説明するための説明図である。
【図７】本発明の第２の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【図８】命令コードの例を説明するための説明図である。
【図９Ａ】ALU３１〜３８の接続の例を説明するための説明図である。
【図９Ｂ】ALU３１〜３８の接続の例を説明するための説明図である。
【図１０】ALU３１の構成の例を説明するための説明図である。
【図１１】モード情報と演算処理の例を説明するための説明図である。
【図１２】演算処理の例を説明するための説明図である。
【図１３】本発明の第３の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【図１４】エントリ０〜１５のそれぞれが有している情報の例を説明するための説明図である。
【図１５】命令コードの生成の処理の流れの例を説明するためのフローチャートである。
【図１６】命令コードの生成の処理の流れの例を説明するためのフローチャートである。
【図１７】本発明の第４の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施の形態について詳細に説明する。  
（第１の実施の形態）  
まず、図１に基づき、本発明の第１の実施の形態に係るプロセッサシステムの構成について説明する。図１は、本発明の第１の実施の形態に係るプロセッサシステムの構成を示すブロック図である。
【００１４】
図１に示すように、プロセッサシステム１００は、プロセッサ１と、クロック発生器１０１と、メモリインターファイス（以下、メモリI/Fという）１０２と、バス１０３と、メモリ１０４とを有して構成されている。
【００１５】
クロック発生器１０１は、所定の周波数のクロック信号CLKを発生し、発生したクロック信号CLKをプロセッサ１に供給する。プロセッサ１は、メモリ１０４に格納されている命令コードをバス１０３及びメモリI/F１０２を介して読み出し、読み出した命令コードに基づいた所定の演算処理を実行する。また、プロセッサ１は、所定の演算処理を実行して得られた演算結果をメモリI/F１０２及びバス１０３を介してメモリ１０４に格納する。
【００１６】
プロセッサ１は、命令フェッチ部１１と、命令デコード部１２と、３つのパイプラインレジスタ１３ａ、１３ｂ及び１３ｃと、データレジスタ１４と、演算部１５ａ及び１５ｂと、セレクタ１６と、メモリアクセス部１７と、ライトバック部１８とを有して構成されている。
【００１７】
本実施の形態のプロセッサ１は、５段パイプライン構造のプロセッサであり、パイプライン処理は、命令フェッチ部１１によって実行されるフェッチステージ、命令デコード部１２によって実行されるデコードステージ、演算部１５ａまたは演算部１５ｂによって実行される演算ステージ、メモリアクセス部１７によって実行されるメモリアクセスステージ及びライトバック部１８によって実行されるライトバックステージにより構成される。
【００１８】
演算部１５ａは、クロック制御回路２１と、直列に接続された複数、ここでは４つの演算器（以下、ALUという）２２、２３、２４及び２５とを含み、演算部１５ｂは、汎用のALU２６を含んで構成されている。
【００１９】
命令フェッチ部１１は、図示しないプログラムカウンタに格納されているアドレスを読み出す。そして、命令フェッチ部１１は、そのアドレスに格納されている命令コードをメモリ１０４から読み出し、読み出した命令コードを命令デコード部１２に出力する。
【００２０】
命令デコード部１２は、命令フェッチ部１１により読み出された命令コードをデコードし、デコード結果をパイプラインレジスタ１３ａ又は１３ｂに出力する。命令デコード部１２は、命令コード中の後述する命令動作を示すビットをデコードした結果、命令コードが本実施の形態の命令動作を示す命令コードの場合、デコード結果をパイプラインレジスタ１３ａに出力する。さらに、命令デコード部１２は、命令コードが本実施の形態の命令動作を示す命令コードの場合、演算部１５ａの出力を選択するための選択信号をセレクタ１６に出力する。
【００２１】
一方、命令デコード部１２は、命令コードが通常の命令動作を示す命令コードの場合、デコード結果をパイプラインレジスタ１３ｂに出力する。さらに、命令デコード部１２は、命令コードが通常の命令動作を示す命令コードの場合、演算部１５ｂの出力を選択するための選択信号をセレクタ１６に出力する。
【００２２】
パイプラインレジスタ１３ａは、後述するクロック制御回路２１からの制御クロック信号ECLKにより制御され、この制御クロック信号ECLKの立ち上がりエッジにより命令デコード部１２からのデコード結果を取り込み、取り込んだデコード結果を演算部１５ａに出力する。
【００２３】
演算部１５ａは、パイプラインレジスタ１３ａからのデコード結果に基づいて、所定の演算処理を実行し、演算結果をセレクタ１６に出力する。
【００２４】
一方、パイプラインレジスタ１３ｂは、図示を省略しているが、後述するクロック制御回路２１からの制御クロック信号ECLKにより制御され、この制御クロック信号ECLKの立ち上がりエッジにより命令デコード部１２からのデコード結果を取り込み、取り込んだデコード結果を演算部１５ｂに出力する。
【００２５】
演算部１５ｂは、パイプラインレジスタ１３ｂからのデータに基づいて、所定の演算処理を実行し、演算結果をセレクタ１６に出力する。
【００２６】
セレクタ１６は、命令デコード部１２から選択信号に基づいて、演算部１５ａから出力された演算結果又は演算部１５ｂから出力された演算結果のいずれか一方を選択し、選択した演算結果をパイプラインレジスタ１３ｃに出力する。
【００２７】
パイプラインレジスタ１３ｃは、後述するクロック制御回路２１からの制御クロック信号ECLKにより制御され、この制御クロック信号ECLKの立ち上がりエッジによりセレクタ１６からの演算結果を取り込み、取り込んだ演算結果をメモリアクセス部１７に出力する。
【００２８】
メモリアクセス部１７は、メモリI/F１０２及びバス１０３を介してメモリアクセスを行うとともに、演算結果をライトバック部１８に出力する。
【００２９】
ライトバック部１８は、演算結果をデータレジスタ１４あるいは図示しない他のデータレジスタに書き込む処理を行う。
【００３０】
ここで、演算部１５ａの詳細な構成について説明する。クロック制御回路２１には、クロック発生器１０１からのクロック信号CLKとパイプラインレジスタ１３ａからの制御信号S_CYCLEとが供給される。クロック制御回路２１は、クロック信号CLKをクロック信号制御情報である制御信号S_CYCLEが示す値だけストールし、制御クロック信号ECLKを生成する。このストールとは、クロック信号CLKをマスクすることである。即ち、クロック制御回路２１は、制御信号S_CYCLEが示す値が０の場合、クロック信号をストールせず、クロック信号CLKを制御クロック信号ECLKとして出力する。制御信号S_CYCLEが示す値が１の場合、クロック信号CLKを１クロックだけストールした制御クロック信号ECLKを生成し、生成した制御クロック信号ECLKを出力する。このように、クロック制御回路２１は、クロック信号CLKを制御するための制御信号S_CYCLEに応じて、供給されたクロック信号CLKに基づいて生成された制御クロック信号ECLKを出力する制御クロック生成部を構成する。
【００３１】
クロック制御回路２１は、生成した制御クロック信号ECLKをパイプラインレジスタ１３ａ、１３ｂ及び１３ｃに供給する。なお、パイプラインレジスタ１３ａ及び１３ｂには、クロック制御回路２１からの制御クロック信号ECLKに代わり、クロック発生器１０１からのクロック信号CLKを供給するようにしてもよい。
【００３２】
ALU２２〜２５には、パイプラインレジスタ１３ａからそれぞれモード情報i0〜i3及びデータである即値v0〜v3が供給される。モード情報i0〜i3は、ALU２２〜２５のそれぞれが実行する演算処理の内容の情報であり、即値v0〜v3は、それらの演算処理に必要な即値の情報である。このように、モード情報i0〜i3及び即値v0〜v3は、ALU２２〜２５のそれぞれに供給される動作モード情報である。また、ALU２２には、データレジスタ１４に格納されているデータA0が供給される。
【００３３】
ALU２２は、モード情報i0に基づいて、データレジスタ１４に格納されているデータA0と即値v0とに所定の演算処理を施し、データである演算結果をALU２３に出力する。ALU２３は、モード情報i1に基づいて、ALU２２からの演算結果と即値v1とに所定の演算処理を施し、演算結果をALU２４に出力する。ALU２４は、モード情報i2に基づいて、ALU２３からの演算結果と即値v2とに所定の演算処理を施し、演算結果をALU２５に出力する。ALU２５は、モード情報i3に基づいて、ALU２４からの演算結果と即値v3とに所定の演算処理を施し、演算結果をセレクタ１６に出力する。これらのALU２２〜２５は、演算パスにフリップフロップ等の順序回路を含まず、組み合わせ回路により構成されている。
【００３４】
ここで、プロセッサ１により実行される命令コードについて説明する。図２は、命令コードの例を説明するための説明図である。
【００３５】
図２に示すように、命令コードは、３２ビットのビットフィールドを有している。ビット３１〜２６は、命令動作の情報を示すビットであり、ビット２５及び２４は、ストール情報を示すビットであり、ビット２３〜０は、モード情報及び即値を示すビットである。
【００３６】
ビット３１〜２６が全て１の場合、本実施の形態の命令動作であることを示し、ビット３１〜２６が全て１でない場合、通常の命令動作であることを示す。そのため、命令デコード部１２では、ビット３１〜２６が全て１の場合、デコード結果をパイプラインレジスタ１３ａに出力し、ビット３１〜２６が全て１でない場合、デコード結果をパイプラインレジスタ１３ｂに出力する。
【００３７】
ビット２５及び２４は命令実行時のストールサイクル数を表し、ビットフィールドが０の場合、演算実行に１サイクルかかることを表し、ビットフィールドが１の場合、演算実行に２サイクルかかることを表し、ビットフィールドが２の場合、演算実行に３サイクルかかることを表し、ビットフィールドが３の場合、演算実行に４サイクルかかることを表す。命令デコード部１２は、このビット２５及び２４に基づいて、上述した制御信号S_CYCLEを生成し、生成した制御信号S_CYCLEをパイプラインレジスタ１３ａを介してクロック制御回路２１に供給する。
【００３８】
ビット２３〜０は後述するALUのモード情報及び即値を表し、３ビットのモード情報と３ビットの即値とを一組として、ALU２２〜２５用に４組分のビットフィールドを有している。
【００３９】
ビット５〜３及びビット２〜０は、それぞれALU２２用のモード情報i0及び即値v0であり、ビット１１〜９及びビット８〜６は、それぞれALU２３用のモード情報i1及び即値v1であり、ビット１７〜１５及びビット１４〜１２は、それぞれALU２４用のモード情報i2及び即値v2であり、ビット２３〜２１及びビット２０〜１８は、それぞれALU２５用のモード情報i3及び即値v3である。
【００４０】
ここで、このような命令コードを生成する処理について説明する。図３は、命令コードを生成する処理の流れの例を説明するためのフローチャートである。
【００４１】
まず、初期値として、ｐ＝０及びｒ＝３が設定される（ステップＳ１）。ここで、ｒは、演算部１５ａのALU２２〜２５の個数から１を引いた値である。次に、ｑ＝ｐ＋ｒが算出される（ステップＳ２）。入力コードのｐ〜ｑ行目が演算部１５ａで実行可能な命令に変換できるか否かが判定される（ステップＳ３）。この判定では、ｐ〜ｑ行目の全ての命令がALU２２〜２５により実行可能であり、ｐ〜ｑ行目の命令パターンが逐次処理により構成可能であり、かつ、ｐ＋１〜ｑ行目の命令がジャンプ命令のジャンプ先になっていない場合、変換可能と判定される。
【００４２】
ステップＳ３において、変換可能でないと判定された場合、NOとなり、ｐとｑの値が同じか否かが判定される（ステップＳ４）。ｐとｑの値が同じでないと判定された場合、NOとなり、ｑ＝ｑ−１が算出され（ステップＳ５）、ステップＳ３に戻る。ｐとｑの値が同じと判定された場合、ｐ行目の命令がそのまま出力され（ステップＳ６）、ステップＳ９に進む。
【００４３】
一方、ステップＳ３において、変換可能と判定された場合、YESとなり、ｐ〜ｑ行目を変換してストール数が計算され（ステップＳ７）、変換後の命令が出力される（ステップＳ８）。次に、ｐ＝ｑ＋１が算出され（ステップＳ９）、ｐが最終行を過ぎているか否かが判定される（ステップＳ１０）。ｐが最終行を過ぎていないと判定された場合、ステップＳ２に戻り、上述した処理を繰り返す。ｐが最終行を過ぎていると判定された場合、YESとなり、処理を終了する。以上の処理により、図２に示す命令コードの生成が行われる。
【００４４】
ここで、ALU２２〜２５の構成について説明する。なお、ALU２２〜２５のそれぞれは、同様の構成をしているため、代表としてALU２２を例に説明する。図４は、ALU２２の構成の例を説明するための説明図である。
【００４５】
図４に示すように、ALU２２は、端子ｍ、ｎ、ｉ及びｘを有している。端子ｍには、データレジスタ１４に格納されているデータA0が供給される。なお、ALU２３、２４及び２５の端子ｍには、それぞれ前段のALU２２、２３及び２４の出力が供給される。端子ｎには、パイプラインレジスタ１３ａからALU２２用の即値v0が供給される。端子ｉには、パイプラインレジスタ１３ａからALU２２用のモード情報i0が供給される。ALU２２では、モード情報i0に基づいて、端子ｍと端子ｎとに供給されたデータに、後述する図４の演算が実行される。この演算によって得られた演算結果は、端子ｘから次段のALU２３の端子ｍに出力される。
【００４６】
図５は、モード情報と演算処理との対応の例を説明するための説明図である。ALU２２では、図４に示すモード情報i0に対応した演算処理が実行される。ALU２２は、例えば、３ビットのモード情報i0として“000”が入力された場合、ｍ＋ｎの演算処理、即ち、端子ｍと端子ｎとに供給されたデータを加算する。同様に、ALU２２は、３ビットのモード情報i0として“001”が入力された場合、ｍ−ｎの演算処理、即ち、端子ｍと端子ｎとに供給されたデータを減算する。
【００４７】
また、ALU２２は、モード情報i0が“010”の場合、左シフト演算、モード情報i0が“011”の場合、右シフト演算、モード情報i0が“100”の場合、AND演算、モード情報i0が“101”の場合、OR演算、モード情報i0が“110”の場合、EXOR演算、モード情報i0が“111”の場合、絶対値演算を実行する。
【００４８】
ここで、Z＝（（A0+２）>>１）&７という演算を例にプロセッサ１の動作を説明する。  
この計算を通常のプロセッサにより実行すると、加算、シフト演算及びAND演算の３サイクルが必要である。本実施の形態のプロセッサ１により実現するには、例えば、
（i0，v0）＝（2’b000，2’b010）
（i1，v1）＝（2’b011，2’b001）
（i2，v2）＝（2’b100，2’b111）
（i3，v3）＝（2’b101，2’b000）
と設定すればよい。
【００４９】
ALU２２は、モード情報i0に基づいて、データレジスタ１４からのデータA0と即値v0との加算を実行し、加算結果をALU２３に出力する。ALU２３は、モード情報i1に基づいて、この加算結果を即値v1の値だけ右シフト演算を実行し、演算結果をALU２４に出力する。ALU２４は、モード情報i2に基づいて、この演算結果と即値v2とのAND演算を実行する。なお、ALU２５は、OR演算を実行し、ALU２４からの演算結果をそのまま出力しているものであり、通常のマイクロプロセッサにより上述した演算を実行する場合は省略することができる。
【００５０】
ところで、通常、クロック信号CLKの周期はALU２２、２３、２４又は２５の最悪遅延時間以上に設定しなければならない。この最悪遅延時間は、命令、即ち、モード情報及び入力データに応じて決まる最も長い演算時間である。しかし、ALU２２、２３、２４又は２５が演算に要する時間は、短時間で終わる演算が使用されている、あるいは、入力データの上位ビットが０固定である場合、１クロック周期より短くなることがある。仮に、上述した演算において、ALU２２、２３、２４及び２５による演算にかかる時間の合計が２クロック周期である場合、従来のマイクロプロセッサでは１サイクル分の時間を無駄にしていることになる。
【００５１】
しかし、本実施の形態のプロセッサ１は、演算にかかる時間の合計が２クロック周期である場合、命令コード中のストール情報の値を１に設定する。そして、クロック制御回路２１は、ストール情報から生成された制御信号S_CYCLEに基づいて、クロック信号CLKを１クロック分だけストールした制御クロック信号ECLKを生成する。さらに、プロセッサ１は、この制御クロック信号ECLKによりパイプラインレジスタ１３ｃを制御することにより、上述した演算を２サイクルで実行することができる。
【００５２】
図６は、演算部１５ａによって実行される演算ステージの動作の例を説明するための説明図である。
【００５３】
図６（ａ）に示すように、従来、演算部１５ａによって実行される演算ステージは、直列に実行される３つの演算A、B及びCを、クロック信号CLKに基づいて、３つの実行サイクル内で実行させるようにしていた。
【００５４】
しかし、図６（ｂ）に示すように、本実施の形態の演算部１５ａによって実行される演算ステージは、直列に実行される３つの演算A、B及びCを、クロック制御回路２１からの制御クロック信号ECLKに基づいて、実行サイクルを変更して１つの実行サイクル内で実行させるようにしている。この結果、演算A、B及びCにかかる時間の合計が２クロック周期である場合、演算ステージは、制御クロック信号ECLKに基づいて、演算A、B及びCを２サイクルで実行することができる。
【００５５】
以上のように、プロセッサ１は、複数の演算にかかるサイクルをストール情報により指定し、このストール情報に基づいて、制御クロック信号ECLKを生成する。そして、パイプラインレジスタ１３ｃは、この制御クロック信号ECLKによって演算結果を取り込むようにした。この結果、従来無駄になっていた演算を実行していない時間を詰めることが可能になり、マイクロプロセッサの処理を高速化できる。
【００５６】
よって、本実施の形態のプロセッサによれば、演算器の使用時間効率を上げ、逐次処理の性能向上をすることができる。
【００５７】
（第２の実施の形態）
次に、第２の実施の形態について説明する。図７は、本発明の第２の実施の形態に係るプロセッサシステムの構成を示すブロック図である。なお、図７において図１と同様の構成については、同一の符号を付して説明を省略する。
【００５８】
本実施の形態のプロセッサシステム１００ａは、図１のプロセッサ１に代わり、プロセッサ１ａを用いて構成されている。なお、説明を簡単にするため図示を省略しているが、メモリI/F１０２は、図１と同様にバス１０３を介してメモリ１０４に接続されている。
【００５９】
本実施の形態のプロセッサ１ａは、図１の演算部１５ａに代わり、演算部１５ｃを用いて構成されている。なお、説明を簡単にするため図示を省略しているが、図１と同様に、通常の命令動作の場合、パイプラインレジスタ１３ｂ及び演算部１５ｂにより得られた演算結果がセレクタ１６の一方の入力端子に供給されるようになっている。
【００６０】
演算部１５は、クロック制御回路２１と、クロスバスイッチ３０と、複数、ここでは８個のALU３１〜３８とを有して構成されている。
【００６１】
パイプラインレジスタ１３ａは、後述するクロスバスイッチ３０の接続情報を示すビットから生成された接続情報信号XB_CONFをクロスバスイッチ３０に出力する。
【００６２】
クロスバスイッチ３０には、データレジスタ１４からのデータA0、図示しないデータレジスタからのデータA1及びデータA2が供給される。また、クロスバスイッチ３０には、パイプラインレジスタ１３ａから即値v0〜v7が供給される。クロスバスイッチ３０は、接続情報信号XB_CONFに基づいて、後述する図９A及び図９Bに示すように、ALU３１〜３８の接続を変更する。このように、クロスバスイッチ３０は、複数のALU３１〜３８間の接続を複数の接続パターンで接続可能な切換部を構成する。
【００６３】
図８は、命令コードの例を説明するための説明図である。図８に示すように、命令コードは、６４ビットのビットフィールドを有している。
【００６４】
本実施の形態の命令コードは、図２の命令コードにクロスバスイッチ３０の接続情報を示すビットが追加されている。クロスバスイッチ３０の接続情報を示すビット５７及び５６により、クロスバスイッチ３０の接続が変更され、ALU３１〜ALU３８の接続が変更される。
【００６５】
ビット６３〜６１は、命令動作の情報を示すビットであり、ビット６３〜６１が全て１の場合、本実施の形態の命令動作であることを表し、ビット６３〜６１が全て１でない場合、通常の命令動作であることを表す。そのため、命令デコード部１２では、ビット６３〜６１が全て１の場合、デコード結果をパイプラインレジスタ１３ａに出力し、ビット６３〜６１が全て１でない場合、デコード結果を図示を省略しているパイプラインレジスタ１３ｂに出力する。
【００６６】
ビット６０〜５８は命令実行時のストールサイクル数を表し、このビットフィールドが０の場合、演算実行に１サイクルかかることを表し、このビットフィールドが７の場合、演算実行に８サイクルかかることを表す。
【００６７】
ビット５５〜０は後述するALUのモード情報及び即値を表し、４ビットのモード情報と３ビットの即値とを一組として、ALU３１〜３８用に８組分のビットフィールドを有している。
【００６８】
ビット６〜３及びビット２〜０は、それぞれALU３１用のモード情報i0及び即値v0である。同様に、ビット５５〜５２及びビット５１〜２９は、それぞれALU３８用のモード情報i7及び即値v7である。
【００６９】
このような命令コードは、図３と同様のフローチャートにより生成することができる。ただし、図３のステップＳ３の判定において、ｐ〜ｑ行目の全ての命令がALUで実行可能であり、ｐ〜ｑ行目の命令パターンがクロスバスイッチ３０で構成可能であり、かつ、ｐ＋１〜ｑ行目の命令がジャンプ命令のジャンプ先になっていない場合、変換可能と判定される。
【００７０】
図９A及び図９Bは、ALU３１〜３８の接続の例を説明するための説明図である。クロスバスイッチ３０は、接続情報信号XB_CONFが００の場合、図９Aに示すように、ALU３１〜３８の接続を変更し、接続情報信号XB_CONFが０１の場合、図９Bに示すように、ALU３１〜３８の接続を変更する。なお、クロスバスイッチ３０は、接続情報信号XB_CONFが１０及び１１の場合にも、ALU３１〜３８の接続をそれぞれ所定の接続になるように変更する。
【００７１】
ここで、ALU３１〜３８の構成について説明する。なお、ALU３１〜３８のそれぞれは、同様の構成をしているため、代表としてALU３１を例に説明する。図１０は、ALU３１の構成の例を説明するための説明図である。
【００７２】
図１０に示すように、ALU３１は、図３のALU２２に端子ｃが追加されて構成されている。この端子ｃには、条件設定の情報が供給される。そのため、ALU３１は、条件設定の情報に基づいて、条件付の演算を実行することができる。
【００７３】
端子ｉには、パイプラインレジスタ１３ａからALU３１用のモード情報i0が供給される。端子ｍ、端子ｎ及び端子ｃのそれぞれには、クロスバスイッチ３０の接続状況によって異なり、データA0〜A2、即値v0〜v7及び他のALU３２〜３８の出力のいずれか１つからのデータが供給される。ALU３１では、モード情報i0及び条件設定の情報に基づいて、端子ｍと端子ｎとに供給されたデータに、後述する図１１の演算が実行される。この演算によって得られた演算結果は、端子ｘからクロスバスイッチ３０の接続状況によって決まる接続先に出力される。
【００７４】
図１１は、モード情報と演算処理の例を説明するための説明図である。ALU３１では、図１１に示すモード情報i0に対応した演算処理が実行される。ALU３１は、例えば、４ビットのモード情報i0として“1000”が入力された場合、ｃ？（ｍ＋ｎ）：ｍの演算処理を実行する。この“ｃ？（ｍ＋ｎ）：ｍ”は、条件付の演算であり、端子ｃに入力された値が１ならば、端子ｍと端子ｎとに供給されたデータを加算し、この加算結果が端子ｘから出力される。一方、端子ｃに入力された値が１でなければ、端子ｍに入力されたデータが端子ｘから出力される。
【００７５】
ここで、以下の演算を例にプロセッサ１ａの動作を説明する。  
if((A0&1)==1)
Z=((~A1)>>1)&7
else
Z=((A2&2)>>1)&7
この演算を通常のプロセッサで実行すると最悪８サイクルかかり、並列処理を理想的に行うことができるプロセッサであっても４サイクル必要である。
【００７６】
この演算を並列処理により実行する場合、図９Bに示す回路を用いるとよい。即ち、クロスバスイッチ３０に接続情報信号XB_CONFとして０１が供給されることにより、図９Bに示す回路が構成される。
【００７７】
このように構成された回路による上述した演算の処理について説明する。図１２は、演算処理の例を説明するための説明図である。  
ALU３１は、データA0と即値v0とのAND演算を実行し、演算結果をALU３８の端子ｃに条件設定の情報として出力する。
【００７８】
ALU３２は、データA1と即値v1とのEXOR演算を実行し、演算結果をALU３３に出力する。ALU３３は、この演算結果を即値v2に示すビットだけ右にシフト演算を実行し、演算結果をALU３４に出力する。ALU３４は、この演算結果と即値v3とのAND演算を実行し、演算結果をALU３８の端子ｍに出力する。即ち、ALU３２〜３４では、上述した演算の((~A1)>>1)&7の演算が実行され、演算結果がALU３８に出力されている。
【００７９】
ALU３５は、データA2と即値v4との加算演算が実行され、演算結果をALU３６に出力する。ALU３６は、この演算結果を即値v5に示すビットだけ右にシフト演算を実行し、演算結果をALU３７に出力する。ALU３７は、この演算結果と即値v6とのAND演算を実行し、演算結果をALU３８の端子ｎに出力する。即ち、ALU３５〜３７では、上述した演算の((A2&2)>>1)&7の演算が実行され、演算結果がALU３８に出力される。
【００８０】
ALU３８は、ALU３１から入力された条件設定、即ち、データA0と即値v0とのAND演算の演算結果が１の場合、端子ｍに入力された演算結果を出力し、データA0と即値v0とのAND演算の演算結果が１でない場合、端子ｎに入力された演算結果を出力する。
【００８１】
仮に、ALU３５、３６、３７及び３８による演算時間の合計が３クロック周期で、かつこの演算全体の最長パスである場合、従来のプロセッサでは１サイクル分の時間を無駄にしていることになる。
【００８２】
しかし、本実施の形態のプロセッサ１ａは、演算にかかる時間の合計が３クロック周期である場合、命令コード中のストール情報の値を２に設定する。そして、クロック制御回路２１は、ストール情報から生成された制御信号S_CYCLEに基づいて、クロック信号CLKを２クロック分だけストールした制御クロック信号ECLKを生成する。さらに、プロセッサ１ａは、この制御クロック信号ECLKによりパイプラインレジスタ１３ｃを制御することにより、上述した演算を３サイクルで実行することができる。
【００８３】
以上のように、プロセッサ１ａは、接続情報信号XB_CONFをクロスバスイッチ３０に供給し、ALU３１〜３８の接続を直列あるいは並列に接続することができようにした。この結果、プロセッサ１ａは、ALU３１〜３８の接続の自由度を上げることができ、演算処理を高速化することができる。
【００８４】
（第３の実施の形態）
次に、第３の実施の形態について説明する。図１３は、本発明の第３の実施の形態に係るプロセッサシステムの構成を示すブロック図である。なお、図１３において図７と同様の構成については、同一の符号を付して説明を省略する。
【００８５】
本実施の形態のプロセッサシステム１００ｂは、図１のプロセッサ１に代わり、プロセッサ１ｂを用いて構成されている。
【００８６】
本実施の形態のプロセッサ１ｂは、図８に示す命令コードに相当する情報をテーブル情報としてプロセッサ１ｂ内に持つようにしている。  
図１３に示すように、プロセッサ１ｂは、図７のプロセッサ１ａにコンフィグテーブル４１を加えて構成されている。
【００８７】
コンフィグテーブル４１は、１６個のエントリ０〜１５を有し、エントリ０〜１５のそれぞれは、ストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報及び即値を保持している。
【００８８】
命令デコード部１２は、コンフィグテーブル４１のエントリ０〜１５のいずれか１つを指定する命令コードが供給されると、指定されたエントリの情報をコンフィグテーブル４１に出力する。コンフィグテーブル４１は、この情報に基づいて、指定されたエントリ内のストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報i0〜i7及び即値v0〜v7をパイプラインレジスタ１３ａに出力する。これにより、パイプラインレジスタ１３ａから演算部１５ｃにストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報i0〜i7及び即値v0〜v7が供給され、第２の実施の形態と同様に、演算部１５ｃによって所定の演算処理が施される。
【００８９】
このようにプロセッサ１ｂにコンフィグテーブル４１を有する構成により、命令コードは、ストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報i0〜i7及び即値v0〜v7を持つ必要がなくなる。そのため、命令コードは、エントリ０〜１５の１６種類の情報を指定できるだけのビットフィールドを有していればよく、命令コードのビットフィールドを短縮することが可能になる。
【００９０】
なお、コンフィグテーブル４１は、１６種類の情報を有しているが、１６種類以上の情報を有していてもよい。また、コンフィグテーブル４１のエントリ０〜１５の情報を書き換える命令をプロセッサ１ｂに持つようにする、あるいは、プロセッサ１ｂの外部からエントリ０〜１５の情報を書き換えることができるようにしてもよい。この結果、プロセッサ１ｂは、ALU３１〜３８の接続パターンをプロセッサ１ａよりも多く持つことが可能となり、演算を効率的に実行することが可能になる。
【００９１】
図１４は、エントリ０〜１５のそれぞれが有している情報の例を説明するための説明図である。
【００９２】
エントリ０〜１５のそれぞれは、図８の命令コードと同様に、ストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報及び即値を有している。
【００９３】
クロスバスイッチ３０の接続情報は、命令コードとして実現する場合に比べ、ビット長を短くする必要性が少ないため、全ての接続パターンを実現できる構成を示している。例えば、ビット３〜０のXB_0ｍは、ALU３１の端子ｍに接続する信号情報を表す。ALU３１の端子ｍには、データA0〜A2、即値v0及びALU３２〜３８の出力のいずれか１つが接続される可能性があり、４ビットあれば全ての接続パターンを実現できる。ALU３１の端子ｎ及び端子ｃについても、それぞれ４ビットあれば全ての接続パターンを実現できる。そのため、ALU３１の接続情報は１２ビットとなり、８個のALU３１〜３８までの９６ビットとなる。
【００９４】
図１５及び図１６は、命令コードの生成の処理の流れの例を説明するためのフローチャートである。なお、図１５において、図３と同一の処理については同一の符号を付して説明を省略する。
【００９５】
まず、初期値として、ｐ＝０、ｒ＝３及びｓ＝０が設定される（ステップＳ１１）。ステップＳ７において、ｐ〜ｑ行目を変換してストール数が計算されると、命令エントリｓ〜ｓ−１で一致する命令があるか否かが判定される（ステップＳ１２）。一致する命令がある場合、YESとなり、一致する命令エントリ番号の命令を出力し（ステップＳ１３）、ステップＳ９に進む。一方、一致する命令がない場合、NOとなり、命令エントリ番号としてｓを用い、変換後の命令を出力する（ステップＳ１４）。次に、ｓ＝ｓ＋１が算出され（ステップＳ１５）、ステップＳ９に進む。以上の処理により、命令エントリデータを含むアセンブラコードが生成される。
【００９６】
次に図１６に移り、図１５の処理により生成された命令エントリデータを含むアセンブラコードが読み込まれ（ステップＳ２１）、ｔ＝２が設定される（ステップＳ２２）。次に、命令エントリデータの命令数がプロセッサ１ｂのコンフィグテーブル４１に収まるか否かが判定される（ステップＳ２３）。命令エントリデータの命令数がコンフィグテーブル４１に収まる場合、YESとなり、処理を終了する。命令エントリデータの命令数がコンフィグテーブル４１に収まらない場合、NOとなり、使用ALU数がｔの命令が命令エントリデータに存在するか否かが判定される（ステップＳ２４）。使用ALU数がｔの命令が存在する場合、YESとなり、命令エントリデータ中の使用ALU数がｔである命令を１つ選び、その命令について、命令エントリデータから削除し、出力コードを元の命令に書き戻し（ステップＳ２５）、ステップＳ２３に戻る。一方、使用ALU数がｔの命令が存在しない場合、NOとなり、ｔ＝ｔ＋１が算出され（ステップＳ２６）、ステップＳ２５に進み、上述した処理を繰り返す。
【００９７】
なお、テーブルを第２の実施の形態のプロセッサ１ａが有しているが、第１の実施の形態のプロセッサ１が有していてもよい。この場合、エントリ０〜１５のそれぞれが持っているクロスバスイッチ３０の接続情報を削除すればよい。
【００９８】
以上のように、プロセッサ１ｂは、コンフィグテーブル４１にストールサイクル数、クロスバスイッチ３０の接続情報、ALU３１〜３８それぞれのモード情報及び即値を持つようにした。この結果、プロセッサ１ｂは、第２の実施の形態のプロセッサ１ａによりも、命令コードのビットフィールドを短縮することができる。さらに、プロセッサ１ｂは、第２の実施の形態のプロセッサ１ａによりも、ALU３１〜３８の接続の自由度をあげることができ、より多くのパターンの演算を効率的に実行することが可能である。
【００９９】
（第４の実施の形態）
次に、第４の実施の形態について説明する。図１７は、本発明の第４の実施の形態に係るプロセッサシステムの構成を示すブロック図である。なお、図１７において、図１と同様の構成については同一の符号を付して説明を省略する。
【０１００】
近年、例えば、携帯機器向けのシステムでは、低消費電力、低発熱の要求がさらに高まっており、より細かい電力制御が求められている。そこで、本実施の形態のプロセッサシステム１００ａは、第１の実施の形態のプロセッサシステム１００にプロセッサ１の周波数あるいは動作電圧を変更し、より細かい電力制御を可能にするとともに、演算処理の最適化を可能にしている。
【０１０１】
図１７に示すように、プロセッサシステム１００ｃは、図１のプロセッサシステム１００にクロック制御部１０５及び電源制御部１０６を加えて構成されるとともに、プロセッサ１にモード信号が供給されている。なお、プロセッサシステム１００ｃは、プロセッサ１に代わり、第２の実施の形態のプロセッサ１ａまたは第３の実施の形態のプロセッサ１ｂを用いてもよい。
【０１０２】
メモリ１０４には、低消費電力モード用のプログラム、高速動作モード用のプログラム及び通常動作用のプログラムが格納されている。
【０１０３】
プロセッサ１に供給されるモード信号は、低消費電力モード信号、高速動作モード信号及び通常動作モード信号等のモード信号である。このモード信号がプロセッサ１に供給されることにより、プロセッサ１は、モード信号に対応するモードに変更する。
【０１０４】
プロセッサ１に低消費電力モード信号が供給されると、クロック制御部１０５は、プロセッサ１の周波数を下げる制御を行う。その後、プロセッサ１は、メモリ１０４から低消費電力モード用のプログラムを読み出し、読み出したプログラムを実行する。
【０１０５】
例えば、低消費電力化のためプロセッサ１のクロック周波数は低くしておかなければならないが、特定の演算だけは高速に演算を実行したい場合がある。この場合、特定の演算列については、命令コード中のストールサイクル数を増やして、１度に動作させるALUを増やすように命令コードを変更し、この命令コードをプロセッサ１により実行することで、クロック周波数は下げたまま、演算処理の最適化が可能である。
【０１０６】
一方、プロセッサ１に高速動作モード信号が供給されると、電源制御部１０６は、プロセッサ１の電圧を上げる制御を行う。その後、プロセッサ１は、メモリ１０４から高速動作モード用のプログラムを読み出し、読み出したプログラムを実行する。
【０１０７】
例えば、プロセッサ１の電圧を上げて特定の演算だけは高速に演算を実行したいが、クロック周波数はシステムに合わせて低いままにしたい場合がある。この場合、特定の演算列については、命令コード中のストールサイクル数を減らし、この命令コードをプロセッサ１により実行することで、クロック周波数を下げたまま、演算処理の最適化が可能である。
【０１０８】
以上のように、本実施の形態のプロセッサシステム１００ｃは、クロック制御部１０５によりプロセッサ１の周波数の制御を行う。あるいは、プロセッサシステム１００ｃは、電源制御部１０６によりプロセッサ１の電圧の制御を行うようにした。その結果、プロセッサシステム１００ｃは、プロセッサ１の周波数あるいは動作電圧を変更し、より細かい電力制御を行うとともに、演算処理の最適化を行うことができる。
【０１０９】
なお、本明細書におけるフローチャート中の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
【０１１０】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【０１１１】
１，１ａ，１ｂ…プロセッサ、１１…命令フェッチ部、１２…命令デコード部、１３ａ，１３ｂ，１３ｃ…パイプラインレジスタ、１４…データレジスタ、１５ａ，１５ｂ，１５ｃ…演算部、１６…セレクタ、１７…メモリアクセス部、１８…ライトバック部、２１…クロック制御回路、２２〜２６…ALU、３０…クロスバスイッチ、３１〜３８…ALU、４１…コンフィグテーブル、１００，１００ａ，１００ｂ，１００ｃ…プロセッサシステム、１０１…クロック発生器、１０２…メモリI/F、１０３…バス、１０４…メモリ、１０５…クロック制御部、１０６…電源制御部。
【図１】
2010262600.tif 000003
【図２】
2010262600.tif 000004
【図３】
2010262600.tif 000005
【図４】
2010262600.tif 000006
【図５】
2010262600.tif 000007
【図６】
2010262600.tif 000008
【図７】
2010262600.tif 000009
【図８】
2010262600.tif 000010
【図９Ａ】
2010262600.tif 000011
【図９Ｂ】
2010262600.tif 000012
【図１０】
2010262600.tif 000013
【図１１】
2010262600.tif 000014
【図１２】
2010262600.tif 000015
【図１３】
2010262600.tif 000016
【図１４】
2010262600.tif 000017
【図１５】
2010262600.tif 000018
【図１６】
2010262600.tif 000019
【図１７】
2010262600.tif 000020