JPWO2004025468A1 - 半導体装置 - Google Patents
半導体装置 Download PDFInfo
- Publication number
- JPWO2004025468A1 JPWO2004025468A1 JP2004535852A JP2004535852A JPWO2004025468A1 JP WO2004025468 A1 JPWO2004025468 A1 JP WO2004025468A1 JP 2004535852 A JP2004535852 A JP 2004535852A JP 2004535852 A JP2004535852 A JP 2004535852A JP WO2004025468 A1 JPWO2004025468 A1 JP WO2004025468A1
- Authority
- JP
- Japan
- Prior art keywords
- software
- register
- drc
- arithmetic
- instruction
- 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.)
- Withdrawn
Links
- 239000004065 semiconductor Substances 0.000 title claims abstract description 22
- 238000012545 processing Methods 0.000 claims description 34
- 238000004364 calculation method Methods 0.000 claims description 16
- 238000012546 transfer Methods 0.000 claims description 10
- 239000000872 buffer Substances 0.000 description 17
- 238000000034 method Methods 0.000 description 11
- 238000003860 storage Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 239000012536 storage buffer Substances 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000002360 preparation method Methods 0.000 description 4
- MHABMANUFPZXEB-UHFFFAOYSA-N O-demethyl-aloesaponarin I Natural products O=C1C2=CC=CC(O)=C2C(=O)C2=C1C=C(O)C(C(O)=O)=C2C MHABMANUFPZXEB-UHFFFAOYSA-N 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008602 contraction Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
- G06F9/381—Loop buffering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
- G06F9/3897—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Stored Programmes (AREA)
- Microcomputers (AREA)
- Executing Machine-Instructions (AREA)
Abstract
動的書き換え可能な回路を搭載した半導体装置において、動的書き換え可能な回路の構成にかかわらず、ソフトウェアの互換性を維持する機構を提供する。ソフトウェアが実行されると同時に、動的書き換え可能な回路を書き換えるデータ及びこれを動作させるドライバ・ソフトウェアを自動生成し、元のプログラムを途中から置き換える。このように、ソフトウェアの互換性を維持することで、既存のソフトウェア資産を流用しつつ様々な機器で同じソフトウェアを用いることができる。
Description
本発明は、動的に書き換え可能な回路を搭載した半導体装置の構成と、その利用方法に関する。
近年、情報処理機器の普及と高性能化に伴い、様々なアプリケーションが登場しており、これらアプリケーションはソフトウェアで記述され、汎用プロセッサで実行される形態が主流となっている。ところが、アプリケーションの中には汎用プロセッサよりも高度な演算処理能力を要求するものもあり、プロセッサにはより一層の処理能力の向上が要求されるようになっている。
このため、汎用プロセッサに加えて特定のアプリケーションに特化した専用回路を1チップに搭載することにより、処理能力を向上させる例がある。さらに、この専用回路を動的に書き換え可能な回路(Dynamically Reconfigurable Circuit、以下、DRCと称する)により構成する例が、特開平10−4345号公報や特開平10−335462号公報に開示されている。
かかる先行技術では、DRC書き換えデータをアプリケーションのソフトウェア作成時にあらかじめ作成しておく。DRC書き換えデータによってDRCを書き換えることによって、DRCは特定のアプリケーションのための専用回路として機能するようになる。汎用プロセッサで実行されるソフトウェアには、DRC書き換えデータと書き換え命令とが含まれている。
これにより、汎用プロセッサはアプリケーションの実行中にDRCを書き換えて専用回路として機能させることにより、その処理能力を向上させることができる。
本願の発明者らは、以上の先行技術のようにDRC書き換えデータとドライバ・ソフトウェアとを利用するDRCとチップ構成にあわせてあらかじめ用意し、DRC書き換え命令とDRC書き換えデータをソフトウェア内に記述する構成では、DRCの構成が異なるチップではそのソフトウェアの実行ができなくなってしまうという問題があることに気づいた。このことは、DRCの構成により適用できるソフトウェアの範囲が制限を受けることとなり、同じ命令セットを持つプロセッサソフトウェアでありながら、DRCの構成が異なるためにソフトウェアが利用できないという事態を生じさせることになる。
本発明の目的は、DRCを利用して処理能力を向上させながらも、DRCの構成によらずソフトウェアの互換性を確保できる半導体集積回路装置を提供することである。
このため、汎用プロセッサに加えて特定のアプリケーションに特化した専用回路を1チップに搭載することにより、処理能力を向上させる例がある。さらに、この専用回路を動的に書き換え可能な回路(Dynamically Reconfigurable Circuit、以下、DRCと称する)により構成する例が、特開平10−4345号公報や特開平10−335462号公報に開示されている。
かかる先行技術では、DRC書き換えデータをアプリケーションのソフトウェア作成時にあらかじめ作成しておく。DRC書き換えデータによってDRCを書き換えることによって、DRCは特定のアプリケーションのための専用回路として機能するようになる。汎用プロセッサで実行されるソフトウェアには、DRC書き換えデータと書き換え命令とが含まれている。
これにより、汎用プロセッサはアプリケーションの実行中にDRCを書き換えて専用回路として機能させることにより、その処理能力を向上させることができる。
本願の発明者らは、以上の先行技術のようにDRC書き換えデータとドライバ・ソフトウェアとを利用するDRCとチップ構成にあわせてあらかじめ用意し、DRC書き換え命令とDRC書き換えデータをソフトウェア内に記述する構成では、DRCの構成が異なるチップではそのソフトウェアの実行ができなくなってしまうという問題があることに気づいた。このことは、DRCの構成により適用できるソフトウェアの範囲が制限を受けることとなり、同じ命令セットを持つプロセッサソフトウェアでありながら、DRCの構成が異なるためにソフトウェアが利用できないという事態を生じさせることになる。
本発明の目的は、DRCを利用して処理能力を向上させながらも、DRCの構成によらずソフトウェアの互換性を確保できる半導体集積回路装置を提供することである。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
演算命令を含むソフトウェアを実行する半導体装置であって、複数の演算セルと複数のレジスタセルとを含み、演算セルが実行する演算種と複数の演算セル及び複数のレジスタセル間の配線接続とを設定可能な演算回路と、ソフトウェアに基づき、演算セルの演算種及び配線接続を設定する設定データと、演算回路を用いてソフトウェアと等価な処理を行うためのドライバ・ソフトウェアとを生成する制御回路とを有する。
ここで演算種とは、セル演算の実行可能な論理和、論理積、排他的論理和といった論理演算、加減乗除といった算術演算、比較演算が含まれる。このような構成により、半導体装置上でドライバ・ソフトウェアを生成することが可能になり、ソフトウェアの互換性が確保できる。さらに、ソフトウェアの実行中にドライバ・ソフトウェアを作成することにより、ドライバ・ソフトウェアを作成するオーバーヘッドをユーザが意識することなく、演算回路を用いた高速処理が可能になる。
また、演算命令を含むソフトウェアを実行する半導体装置であって、レジスタと、演算器と、複数の演算セルと複数のレジスタセルとを含み、演算セルが実行する演算種と複数の演算セル及び複数のレジスタセル間の配線接続とを設定可能な演算回路と、ソフトウェアを格納する第1メモリ領域と、演算回路を用いてソフトウェアと等価な処理を行うためのドライバ・ソフトウェアを格納する第2メモリ領域と、実行するソフトウェアを制御する制御回路とを有し、ソフトウェアの処理はn回繰り返され、第1回から第i回(i<n)までの処理は、レジスタと演算器とを用いて第1メモリから読み出されたソフトウェアを実行することによって行われ、制御回路は第i回の処理を受けて、実行するソフトウェアをドライバ・ソフトウェアに切り換えることにより、第i+1回から第n回までの処理は、演算回路を用いて第2メモリ領域から読み出されたドライバ・ソフトウェアを実行することによって行われる。このようなソフトウェアとドライバ・ソフトウェアとを別のメモリ領域に記憶し、制御回路がソフトウェアとドライバ・ソフトウェアとを切り換える構成により、ソフトウェアの互換性が確保できる。
このような構成は、特に複数回繰り返されるソフトウェア(例えば、ループを形成しているソフトウェア)に有効であり、このようなループは画像処理や音声処理でよく現れる処理である。
演算命令を含むソフトウェアを実行する半導体装置であって、複数の演算セルと複数のレジスタセルとを含み、演算セルが実行する演算種と複数の演算セル及び複数のレジスタセル間の配線接続とを設定可能な演算回路と、ソフトウェアに基づき、演算セルの演算種及び配線接続を設定する設定データと、演算回路を用いてソフトウェアと等価な処理を行うためのドライバ・ソフトウェアとを生成する制御回路とを有する。
ここで演算種とは、セル演算の実行可能な論理和、論理積、排他的論理和といった論理演算、加減乗除といった算術演算、比較演算が含まれる。このような構成により、半導体装置上でドライバ・ソフトウェアを生成することが可能になり、ソフトウェアの互換性が確保できる。さらに、ソフトウェアの実行中にドライバ・ソフトウェアを作成することにより、ドライバ・ソフトウェアを作成するオーバーヘッドをユーザが意識することなく、演算回路を用いた高速処理が可能になる。
また、演算命令を含むソフトウェアを実行する半導体装置であって、レジスタと、演算器と、複数の演算セルと複数のレジスタセルとを含み、演算セルが実行する演算種と複数の演算セル及び複数のレジスタセル間の配線接続とを設定可能な演算回路と、ソフトウェアを格納する第1メモリ領域と、演算回路を用いてソフトウェアと等価な処理を行うためのドライバ・ソフトウェアを格納する第2メモリ領域と、実行するソフトウェアを制御する制御回路とを有し、ソフトウェアの処理はn回繰り返され、第1回から第i回(i<n)までの処理は、レジスタと演算器とを用いて第1メモリから読み出されたソフトウェアを実行することによって行われ、制御回路は第i回の処理を受けて、実行するソフトウェアをドライバ・ソフトウェアに切り換えることにより、第i+1回から第n回までの処理は、演算回路を用いて第2メモリ領域から読み出されたドライバ・ソフトウェアを実行することによって行われる。このようなソフトウェアとドライバ・ソフトウェアとを別のメモリ領域に記憶し、制御回路がソフトウェアとドライバ・ソフトウェアとを切り換える構成により、ソフトウェアの互換性が確保できる。
このような構成は、特に複数回繰り返されるソフトウェア(例えば、ループを形成しているソフトウェア)に有効であり、このようなループは画像処理や音声処理でよく現れる処理である。
第1図は、本発明の半導体集積回路装置の構成を示すブロック図である。
第2図は、DRCドライバSWの生成及び実行のタイミングを示すための図である。
第3図は、DRCの構成例を示すブロック図である。
第4図は、DRCの構成要素である入出力レジスタ・セルIORCの構成例を示すブロック図である。
第5図は、DRCの構成要素である演算セルCCの構成例を示すブロック図である。
第6図は、書き換え判定ユニットCDUの構成例を示すブロック図である。
第7図は、書き換え判定ユニットCDUの動作を示すフロー図である。
第8図(A)は、通常SW、第8図(B)は通常SWからHW/SW生成ユニットGUによって切り出された通常SW、第8図(C)はHW/SW生成ユニットGUによって作成されたDRCドライバSW、第8図(D)はプログラム中の命令の動作一覧である。
第9図は、HW/SW生成ユニットGUの動作を示すフロー図である。
第10図は、CDFGの例である。
第11図は、縮約処理を行ったCDFGの例である。
第12図は、ALAP(As Late As Possible)アルゴリズムを用いてスケジューリングを行ったCDFGの例である。
第13図は、さらにASAP(As Soon As Possible)アルゴリズムを用いてスケジューリングを行ったCDFGの例である。
第14図は、本発明の半導体集積回路装置の別の構成を示すブロック図である。
第15図は、本発明の半導体集積回路装置のさらに別の構成を示すブロック図である。
第2図は、DRCドライバSWの生成及び実行のタイミングを示すための図である。
第3図は、DRCの構成例を示すブロック図である。
第4図は、DRCの構成要素である入出力レジスタ・セルIORCの構成例を示すブロック図である。
第5図は、DRCの構成要素である演算セルCCの構成例を示すブロック図である。
第6図は、書き換え判定ユニットCDUの構成例を示すブロック図である。
第7図は、書き換え判定ユニットCDUの動作を示すフロー図である。
第8図(A)は、通常SW、第8図(B)は通常SWからHW/SW生成ユニットGUによって切り出された通常SW、第8図(C)はHW/SW生成ユニットGUによって作成されたDRCドライバSW、第8図(D)はプログラム中の命令の動作一覧である。
第9図は、HW/SW生成ユニットGUの動作を示すフロー図である。
第10図は、CDFGの例である。
第11図は、縮約処理を行ったCDFGの例である。
第12図は、ALAP(As Late As Possible)アルゴリズムを用いてスケジューリングを行ったCDFGの例である。
第13図は、さらにASAP(As Soon As Possible)アルゴリズムを用いてスケジューリングを行ったCDFGの例である。
第14図は、本発明の半導体集積回路装置の別の構成を示すブロック図である。
第15図は、本発明の半導体集積回路装置のさらに別の構成を示すブロック図である。
以下、本発明による代表的な実施の形態を図面に従って詳細に説明する。なお、以下においては、同じ参照符号は同じもの、もしくは類似のものを表す。
本発明では、DRCを用いることなく汎用プロセッサで実行されるアプリケーションソフトウェア(以下、このようなソフトウェアを「通常SW」と呼ぶ)から、アプリケーションソフトウェアの一部分をDRCで実行させるためのDRCドライバ・ソフトウェア(以下、このようなソフトウェアを「DRCドライバSW」と呼ぶ)を自動生成し、汎用プロセッサは、通常SWの一部をDRCドライバSWに置き換えて実行することで処理能力を向上させる。
通常SWとDRCドライバSWとの関係を第8図(A)〜(D)を用いて説明する。第8図(A)の例は高速フーリエ変換のプログラムの一部である。高速フーリエ変換はマルチメディア処理でよく用いられる処理である。第8図(A)のプログラムは汎用プロセッサの命令セットにより記述されている。プログラムの各命令の意味は第8図(D)に示している。第8図で用いた命令セットは一例であって、本発明が当該命令セットに限定されるものではないことは.、以下の説明から明らかであろう。
本実施例では通常SWのうち繰り返し実行されるソフトウェア部分(ループ)を、DRCに実行させる。これは、DRCドライバSWを通常SWの実行中に自動生成するため、複数回実行されるソフトウェア部分をDRCに実行させるようにすることが効率的であると考えられるためである。第8図(A)の例では、第4行目から第18行目までのプログラムがその対象となる(第8図(B))。
本発明では、第8図(B)の通常SWに基づき、DRC書き換えデータとDRCドライバSW(第8図(C))とを生成する。DRC書き換えデータは、DRCが第8図(B)のプログラムで実行される演算を実行するようにDRCを設定するためのデータである。また、DRCドライバSWは、通常SWのプログラム中のDRCでは実行できない命令を実行し、汎用プロセッサからDRCへデータを入力し、DRCで実行された結果を汎用プロセッサに戻すためのプログラムである。したがって、汎用プロセッサは、汎用レジスタGRと演算器ALUを用いて第8図(B)を実行する代わりに、第8図(C)を実行してDRCを用いて演算を実行することにより、処理能力を向上させることができるのである。
第1図に本発明のLSIチップ100の構成を示す。LSIチップ100は、バス・ステート・コントローラBSCと、ダイレクト・メモリ・アクセス・コントローラDMACと、オンチップ・メモリOCMと、DRCドライバSW格納メモリDSMと、命令キャッシュICHと、データ・キャッシュDCHと、キャッシュ制御ユニットCCNと、CPU101により構成される。CPU101はDRC制御ユニット102と、命令バッファIBFと、命令フェッチ・ユニットIFUと、セレクタSELと、命令デコーダIDCと、汎用レジスタGRと、演算器ALUと、DRCにより構成される。DRC制御ユニット102は、書き換え判定ユニットCDUと、ハードウェア/ソフトウェア生成ユニットGU(以下、HW/SW生成ユニットと記述する)により構成される。
CPU101が実行する命令は命令キャッシュICHに格納され、命令フェッチ・ユニットIFUの命令ロード信号に従って命令キャッシュICH内に格納されている命令は命令バッファIBFに転送される。同時に、書き換え判定ユニットCDUは、命令キャッシュICHから命令バッファIBFへ転送される命令を常に監視する。
書き換え判定ユニットCDUは第8図(A)の例でいえば、条件分岐命令BFを検出し、それに基づきDRCで実行する候補となるプログラムとして第8図(B)に示すソフトウェア部分を切り出し、格納する。DRCで実行するソフトウェア部分が決定すると、書き換え判定ユニットCDUはHW/SW生成ユニットGUに対して、DRC書き換えデータの作成、DRC書き換え、及びDRCドライバSWの作成を指示する。
HW/SW生成ユニットGUは、切り出されたプログラムからDRC書き換えデータを生成し、DRCの書き換えを行う。また、書き換えたDRCを利用するためのDRCドライバSWを生成し、生成されたDRCドライバSWはドライバSW格納メモリDSMに格納する。これらの処理が終了すると、HW/SW生成ユニットGUは書き換え判定ユニットCDUに終了を通知するとともに、DRCドライバSWが格納される先頭アドレスを通知する。
なお、通常SWはオンチップ・メモリOCMや外部メモリ・チップEXTMに格納されているのが一般的である。
CPU101によるプログラムの実行は以下のようになる。第8図の例により説明する。最初は第8図(A)の通常SWがそのまま実行される。HW/SW生成ユニットGUから終了通知を受けた後に、書き換え判定ユニットCDUは、命令キャッシュICHから命令バッファIBFへ転送される通常SWの実行中の命令が、DRCドライバSWに置き換えられるプログラムの条件分岐命令(第8図(B)の第15行、すなわち第8図(A)の第18行に相当する)まで処理が進んだことを確認すると、命令フェッチ・ユニットIFUを介してセレクタSELを切り替え、命令デコーダIDCに入力される命令を命令バッファIBPから判定ユニットCDUに切り替える。次に、条件分岐命令の分岐先アドレスをDRCドライバSWの格納される先頭アドレスに変換した命令を、セレクタSELを介して命令デコーダIDCに出力する。次のCPUクロック・サイクルでは、書き換え判定ユニットCDUは命令フェッチ・ユニットIFUを介してセレクタSELを切り替え、命令デコーダIDCに入力される命令を判定ユニットCDUから命令バッファIBFに切り替える。これにより、以降はDRCドライバSWが実行される。DRCドライバSWの最後の命令は、切り出した通常SWの次の命令が格納されたアドレスへの無条件分岐命令(第8図(C)第15行)であり、この命令の実行によって通常SWの実行に戻る。
ここで、命令キャッシュICHへの命令の格納は、命令デコーダIDCの実行を受けて、キャッシュ・コントローラCCNによって行われる。キャッシュ・コントローラCCNは、プロセッサ・バスPRCB上のモジュールであるオンチップ・メモリOCMと、ダイレクト・メモリ・アクセス・コントローラDMACと、バス・コントローラBSC(外部メモリ・チップEXTMへのアクセスの場合)に加えてドライバSW格納メモリDSMに対してもメモリ・アクセスを実行可能に構成されている点が一つの特徴である。
第2図にDRCドライバSWの生成及び実行のタイミングを示す。
まず通常SWが実行され、命令フェッチ・ユニットIFU内のプログラム・カウンタに格納されている現在実行中の命令のアドレスより前のアドレスへの条件分岐が起こった場合(第8図(A)第18行)には、書き換え判定ユニットCDUは、通常SW中にループがあると仮決定する。
書き換え判定ユニットCDUは、以降の実行で命令キャッシュICHから命令バッファIBFへロードされる命令、すなわち第8図(A)第4行〜第18行の命令を取得して格納する。再度、条件分岐命令により格納された先頭の命令に戻った場合には、格納された命令はループを形成していると判定し、DRCの利用を本決定する。
HW/SW生成ユニットGUは、3回目のループでDRC書き換えデータの作成、DRCドライバSWの作成、およびDRCの書き換えを行う。3回目のループにおいてDRCの利用が可能になるので、CPU101は、演算ユニットALUによる演算に代えて、第4回目以降のループはDRCドライバSWを実行することによりDRCにより演算を行うようにする。なお、DRCの書き換えが3回目のループ実行中に終わらない場合は、CPU101はDRCの書き換えが終了する時点を含むループの最後まで通常SWを実行することになる。
次に、DRCの構造を第3図〜第5図を用いて詳しく説明する。第3図はDRCの内部構成を示している。入出力レジスタセルIORCと、演算セルCCと、入出力レジスタセルIORCへのデータ入力ポート200と、レジスタ指定入力ポート201と、セル入力線203a、203b、203cと、DRCのデータ出力ポート202と、各セルからのセル出力線204a、204bと、配線領域205と、配線プログラム素子206から構成される。配線プログラム素子206は、配線領域205中の配線同士の結線を決定するためのスイッチ素子とこれらスイッチ素子のオン/オフ状態を記憶するための図示しない記憶素子(例えば、SRAM、Flashメモリ等)により構成される。
DRCへのデータ入力時には、命令デコーダIDCからレジスタ指定入力ポート201にレジスタ指定信号が入力され、1つの入出力レジスタ・セルIORCが選択される。データはデータ入力ポート200より入力され、選択された入出力レジスタ・セルIORCのみに入力される。また、DRCからのデータの出力時には、命令デコーダIDCからレジスタ指定入力ポート201にレジスタ指定信号が入力される。これにより出力セレクタOSELが切り換えられ、1つの入出力レジスタ・セルIORCの出力が選択される。データは、セル出力線204aより出力セレクタOSELに入り、選択されたデータのみデータ出力ポート202より出力される。
第4図は、第3図の入出力レジスタ・セルIORCの構成を示している。入出力レジスタ・セルIORCは入力セレクタISELとセル・レジスタCRにより構成されている。入力セレクタISELは、レジスタ指定入力ポート201からの入力に応じて、配線からのセル入力線203aまたはデータ入力ポート200からの入力に切り換える。入力セレクタISELを介して入力されたデータは、セル・レジスタCRに保持される。このセル・レジスタCRはクロック入力301と同期して動作し、リセット入力302によってリセットされる。なお、第3図ではクロック及びリセットの配線は省略しているが、全ての入出力レジスタ・セルIORCと演算セルCCとに接続されている。セル・レジスタCRに保持されたデータはセル出力線204aより外部に出力される。
なお、本実施例ではデータは8ビット単位で入出力が行われているが、この大きさには限定されない。
第5図は、第3図の演算セルCCの構成を示している。演算セルCCは、セル演算ユニットCALUと、フリップ・フロップFFと、演算プログラム素子400から構成される。セル演算ユニットCALUは、CPU内のALUと同じ機能を持ち、演算プログラム素子400によってどの演算機能を使用するかを設定する。セル演算ユニットCALUの実行可能な論理和、論理積、排他的論理和といった論理演算、加減乗除といった算術演算、比較演算のうちから、演算プログラム素子400はセル演算ユニットCALUが実行する演算を設定する。
このように、演算セルCCの演算プログラム素子400の設定により、演算セルCCの演算内容を決定できる。また、配線プログラム素子206の設定により、いかなるデータを入出力レジスタ・セルIORC、演算セルCCに入力するのか、また入出力レジスタ・セルIORCのデータまたは演算セルCCの演算結果をどこに出力するのかを設定することができる。このようにDRC書き換えデータは、演算プログラム素子400の設定値と配線プログラム素子206の設定値とを含み、所望の演算を実行可能にする。
第6図に書き換え判定ユニットCDUの構成を、第7図に書き換え判定ユニットCDUの動作を示す。書き換え判定ユニットCDUは、分岐アドレス格納バッファBABと、ループ・カウンタLCと、命令アドレス判定ユニットIADUと、DRC状態レジスタDSRと、通常SW一時格納バッファTBFと、分岐コントローラBCLから構成される。さらに、DRC状態レジスタDSRは、HW/SW生成ユニットGUの状態を示す部分、DRCドライバSWへの分岐アドレスを格納する部分、およびDRCドライバSWに置き換える通常SWの次の命令があるアドレスを格納する部分の3つの部分で構成される。
以下、第7図に即して書き換え判定ユニットCDUの動作を説明する。まず、命令キャッシュICHから命令バッファIBFへ送られる命令を命令アドレス判定ユニットIADUに取り込む(500)。命令アドレス判定ユニットIADUは、命令フェッチ・ユニットIFU中のプログラム・カウンタPC内のアドレスを取り出し、その現在実行中の命令のアドレスがドライバSW格納メモリDSMのアドレス領域に該当するかどうかを判定する(501)。
該当する場合は現在DRCドライバSWを実行中であることを意味する。このとき、ループカウンタLCが0以外の値であれば(502)DRCドライバSWの第1行の命令(即ち第8図(C)の第1行のMOV命令)であるため、ループ・カウンタLCを0にリセットし、分岐コントローラBCLは、セレクタSELに命令バッファIBF側に切り換えさせる。ループカウンタLCが0の場合には何もしない。ループ・カウンタLCには、通常SW中で連続して実行されるループの回数が保持されており、リセット信号によりリセットされる。
該当しない場合には現在通常SWを実行中であることを意味するので、命令アドレス判定ユニットIADUは、命令が条件分岐命令であるかどうかを判定する。条件分岐命令ではなく、かつこのときループ・カウンタLCの値が1であれば、第2回目のループを実行していることになる。そのため、通常SWを取得するため(第2図を参照)、命令アドレス判定ユニットIADUは命令を通常SW一時格納バッファTBFに格納する。
ステップ505において、命令アドレス判定ユニットIADUは、DRC状態レジスタDSRをチェックする。DRC状態レジスタDSRは、DRCの状態を示す第1レジスタと、DRCドライバSWへの分岐アドレス(例えば第8図(C)の第1行のMOV命令が格納されたアドレス)を格納する第2レジスタと、DRCドライバSWに切り換えられる通常SWの次のアドレス(例えば第8図(A)のL003:(第19行))を格納する第3アドレスとから構成される。第1レジスタには「DRC利用不可」、「DRC利用準備中」、「DRC利用準備完了」の3状態のいずれかが格納されている。CPUリセットを受けて「DRC利用不可」の値に更新され、HW/SW生成ユニットGUによるDRC利用準備開始時に「DRC利用準備中」の値に更新され、DRC利用準備完了時に「DRC利用準備完了」の値に更新される。DRC利用準備完了時に第2アドレスは更新され、GUへの動作開始の通知時に第3アドレスは更新される。
DRC状態レジスタDSRの第1レジスタが「DRC利用準備完了」の値であれば、分岐コントローラBCLは、命令フェッチ・ユニットIFUを介してセレクタSELをDRC制御ユニットCDUに切り換えて、書き換え判定ユニットCDUからの出力が命令デコーダIDCに繋がるようにする。その後、分岐命令の分岐先アドレスをドライバSW格納メモリDSM内のDRCドライバSWの先頭アドレスに変更した分岐命令を送る。
DRC状態レジスタDSRの第1レジスタが「DRC利用準備完了」の値以外であれば、ループの存在の判定を行う(第2図における仮決定処理)。まず、命令アドレス判定ユニットIADUは、現在のプログラム・カウンタPCと分岐先アドレスとを比較する(513)。分岐先アドレスの方が大きい場合はループは存在しないので、ループ・カウンタLCを0とする(514)。プログラム・カウンタPCの方が大きい場合には、さらに命令アドレス判定ユニットIADUは、分岐アドレス・バッファBABに格納された分岐先アドレスと、分岐命令の分岐先とを比較する。分岐アドレス・バッファBABは、分岐命令を実行した場合にその分岐先アドレスを上書き保存するバッファである。したがって、分岐先が分岐アドレス・バッファBABのアドレスに等しければ、ループの存在を決定し、DRC書き換えデータ、DRCドライバSWの生成処理に移る。具体的には、ループ・カウンタに1を加算し(509)、その値が2であれば(510)、命令アドレス判定ユニットIADUは、分岐命令を通常SW一時格納バッファTBFに格納し、DRC状態レジスタDSRの第3レジスタに現在のPCの値を1つ進めた値(例えば図8(A)のL003:(第19行)のアドレス)を代入して、HW/SW生成ユニットGUに対してDRC利用準備の開始信号を送る(511)。
一方、分岐先が分岐アドレス・バッファBABのアドレスと異なっていれば、新たなループの存在の可能性がある。そこで、命令アドレス判定ユニットIADUは、ループ・カウンタLCに1を代入し、通常SW一時格納バッファTBFを一括クリアする。
上記動作を第8図のプログラム例に基づいて説明すると以下のようになる。
第1回目のループの実行では、第8図(A)の第1行〜第17行の命令は、ループ・カウンタLCは0であり、第7図のフローでは何も実行されない。18行目の条件分岐命令BFが取り込まれると、ループ・カウンタLCを1にするとともに(508)、分岐先アドレス(第4行)が分岐アドレス・バッファBABに上書きされる。
第2回目のループの実行では、第5行〜第17行目の各命令は、ループ・カウンタLCが1なので、通常SW一時格納バッファTBFに格納される(504)。第18行目の条件分岐命令BFが取り込まれると、その分岐先アドレスと分岐アドレス・バッファBABに格納されたアドレスとは一致するので(507)、ループ・カウンタLCを2として(509)、条件分岐命令BFを通常SW一時格納バッファTBFに送るとともに、HW/SW生成ユニットGUにDRC利用準備を開始させる(510,511)。
第3回目のループの実行では、第5行〜第17行目の各命令は、ループ・カウンタLCは2であるので、第7図のフローでは何も実行されない。第18行目の条件分岐命令BFが取り込まれ、DRCが利用可能な状態になっていれば、分岐命令の分岐先アドレスをDRCドライバSWの先頭アドレス(第8図(C)第1行)に変更することで、以降のループの実行はDRCを利用して行われる。
DRCドライバSWの実行では、JMP命令(第8図(C)の第15行)により通常SWのL003(第8図(A)の第19行)に分岐し、通常SWの実行に復帰する。
次に、HW/SW生成ユニットGUの動作を第9図のフロー図を元に説明する。HW/SW生成ユニットGUは、書き換え判定ユニットCDUからの命令を受け、通常SW一時格納バッファTBFから通常SW(第8図(B))を取得するとともに、DRC状態レジスタDSRの第1レジスタには「DRC利用準備中」の値を入力する(600)。
HW/SW生成ユニットGUは、まず取得した通常SWから第10図に示すようなCDFG(Control Data Flow Graph)を作成する(601)。CDFGは、入力された通常SW中の各命令をノード(命令)で、命令オペランドのデータ依存関係をエッジ(矢印)で表したものである。なお、第10図におけるブロックの括弧内の数字は第8図(B)の対応する行数を表している。
第10図は、第8図(B)の通常SWからそのままCDFGを作成したものである。依存関係には、「制御上の依存関係」と「データ上の依存関係」の2種類がある。「制御上の依存関係」とは、例えばDT命令でレジスタR0の値を設定し、レジスタR0の値に応じて条件分岐命令BFを実行するといった依存関係である。これは汎用プロセッサの命令セットに依存するものであり、あらかじめ依存関係を登録しておく必要がある。「データ上の依存関係」は、例えばMOV命令で転送されたデータを用いてSUBで演算を行うといった依存関係である。したがって、プログラムの内容によって決定していく必要がある。オペランドに他の命令のオペランドと依存関係のないものを最上位に配置し、依存関係に応じてより下位に配置する。「データ上の依存関係」は具体的には以下のようにして決定する。
第8図(B)第2行〜第4行、第10行の命令のオペランドはそれより前の命令のオペランドに依存関係がないので、同列に位置する。「MOV@R6,R2」とは「レジスタR6の指示するアドレスに格納されたデータをレジスタR2に転送する」という意味である。すなわち、オペランドの右の値が@を含むMOV命令は外部からレジスタにデータを読み込むという命令であり、さらに@のついたオペランドは第8図(B)内で初の出現であるため、「データ上の依存関係」としては最上位に位置することになる。第5行の命令「MUL」は、レジスタR2,R3のデータを用いるため、第3行〜第4行の命令と依存関係を有する。第7行の命令は「MUL」の実行結果はレジスタMACLに入力されるため、レジスタMACLのデータをレジスタR7に転送するためのものである。
以下のプログラムについても同様にして依存関係を決定するが、エッジの決定には同じレジスタ名であっても内容が更新されている場合があることに注意する必要がある。例えば、第8行の「SUB R7,R1」は「レジスタR7のデータとレジスタR1のデータの差をレジスタR1に格納する」という意味である。第8行の命令の実行によりデータが更新されているため、第9行の「MOV R1,@R5」は第8行の命令と依存関係はあるが、第6行の「MOV @R4,R1」とは依存関係が存在しない。
このように、着目する命令に対して、それ以前に実行された命令のうち、オペランドに共通のレジスタ名を有する命令と依存関係を設定することでCDFGが作成できる。ただし、共通のレジスタ名を有する命令が複数ある場合にはレジスタのデータが更新される可能性を考慮して、直前に実行された命令との間に依存関係を設定する。
第10図のCDFGを縮約したのが、第11図のCDFGである。縮約することでDRCの回路構成を単純にし、DRCでの演算処理が高速に行えるといった効果がある。
第1の縮約の形態が701の2命令(第10図)を801の1命令(第11図)に縮約するものである。STS命令は一切の演算処理を行うことなくデータをレジスタ間で転送する命令である。このような転送は汎用プロセッサで処理する場合には命令セットの構成上必要となる命令ではあるものの、DRCで処理する場合には直接必要なデータの格納されたレジスタと演算セルとを接続するようにすればよいため、このような命令をDRCの構成に反映させる必要はない。このような、データをレジスタ間で転送する命令はあらかじめ縮約対象とする命令として事前に登録しておくことで第1の縮約を実行できる。
第2の縮約の形態が702の4命令(第10図)を802の3命令(第11図)に縮約するものである。汎用プロセッサでは時系列で処理がされるため、レジスタ名が違っていてもその内容が同じであるということが生じうる。DRCで処理する場合には必要なデータの格納されたレジスタと演算セルとを接続するようにすればよいため、このようなレジスタ名の相違をDRCの構成に反映させる必要はない。そのため、演算命令(第8図の例ではMUL命令、ADD命令、SUB命令)については、そのレジスタのデータの内容を比較し、レジスタが異なっていても同じデータが格納されている場合には縮約するようにする。例えば、第8行のSUB命令と第11行のADD命令のオペランドは、レジスタR7が共通し、レジスタR1、レジスタR3とで異なっている。しかしながら、それぞれデータ上の依存関係をたどるといずれのレジスタに格納された内容も「レジスタR4の指示するアドレスに格納されたデータ」であるため、上記のような縮約が可能になる。
次に、HW/SW生成ユニットGUは、ステップ601で作成した第11図に示すCDFGの各ノードに対して、スケジューリング、すなわちハードウェア・リソースの制約を考慮した上で各ノードを実行するクロック・サイクルの割り当てを行う(602)。
このスケジューリングの一方法としてALAPアルゴリズムとASAPアルゴリズムを第11図のCDFGに対して併用して適用した例を第12図及び第13図に示す。ALAP(As Late As Possible)アルゴリズムは同時に実行可能な命令を後から詰めて行くスケジューリングである。同時に実行できない命令の第一は相互に依存関係のある命令である。第二は、DRCの外部にアクセスする命令はそのサイクルに1つしか実行することができない。この結果が第12図である。
さらに、第12図のスケジューリングに対して、同時に実行可能な命令を前から詰めて行くASAP(As Soon As Possible)アルゴリズムを適用したものが第13図である。できるだけ、命令を実行するサイクルを前に詰めることによって、処理時間に余裕が生まれる。
1サイクルに含まれる命令は1クロック・サイクルで実行することができ、サイクル1〜8の8クロック・サイクルで全ての命令を実行することができる。
HW/SW生成ユニットGUは、第13図に示すスケジューリングされたCDFGより、DRC書き換えデータを生成する。具体的には、以下の通りである。ノード部分を入出力レジスタ・セルIORC及び演算セルCCに割り当てる。MOV命令については入出力レジスタ・セルIORCを割り当て、演算命令については演算セルCCを割り当てる。演算命令の内容に応じて、演算セルの演算内容の設定を行う演算プログラム素子400の設定データを作成する。また、CDFGのエッジはデータの流れを示しているので、CDFGのエッジの接続関係にしたがって、入出力レジスタ・セルIORC及び演算セルCCが相互に配線されるように、配線プログラム素子206の設定データを作成する(603)。この演算プログラム素子400の設定データ及び配線プログラム素子206の設定データがDRC書き換えデータである。
HW/SW生成ユニットGUは、DRC書き換えデータにしたがってDRCの演算プログラム素子303と配線プログラム素子206を書き換える(604)。これと並行してDRCドライバSWの作成を行う(605)。
DRCドライバSWの作成方法について説明する。第13図のCDFGから第8図(C)に示すDRCドライバSWを生成する。
まず、汎用レジスタGRに格納されているデータをDRCの入出力レジスタ・セルIORCに移動させる必要がある。例えば、第8図(B)第3行の「MOV @R6,R3」という命令は「汎用レジスタR6の指示するアドレスに格納されたデータを汎用レジスタR3に転送する」命令である。この命令をDRCで実行するためには、まず汎用レジスタR6のデータをDRC中に移動させておく必要がある。したがって、第8図(C)第1行「MOV R6,dR6」という命令が設けられる。この命令は「汎用レジスタR6に格納されたデータ(アドレス)をDRCの入出力レジスタ・セルdR6に転送する」という意味である。このような命令が第8図(C)の第1行〜第3行に設けられている。
その後、第13図の各ノードのうち、DRC以外で実行される命令がDRCドライバSWに設けられる。第8図(C)の第5行〜第12行の命令はそれぞれ第13図のサイクル1〜8に含まれるノードに対応している。
第8図(C)第5行「MOV @dR6,dR3」は「入出力レジスタ・セルdR6の指示するアドレスに格納されたデータを入出力レジスタ・セルdR3に転送する」命令であり、これは第13図のサイクル1の「MOV @R6,R3」に対応している。以下同様であるが、例えばサイクル3では「MOV @R4,R1」、「MUL」の2つのノードが存在しており、後者はDRCが実行する命令であるから、DRCドライバSWには現れない。また、サイクル6は「ADD」というDRCが実行する命令しか存在していない。その場合には、空きサイクルが発生しているとして、ノー・オペレーション命令(NOP)を追加する。
なお、演算命令についてはDRCで実行させるために、演算に必要なデータは汎用レジスタGRではなく、DRCの入出力レジスタ・セルIORCに格納することになる。そのため、演算実行後の値を汎用レジスタGRに戻す必要がある。したがって、第8図(C)の第13行と第14行の命令が設けられている。例えば、「MOV dR5,R5」は「入出力レジスタ・セルdR5に格納されたデータを汎用レジスタR5に転送する」命令である。
最後に、通常SWの実行に復帰するために、通常SWにおける条件分岐命令の次のアドレスへの無条件分岐命令(JMP)(第8図(C)第15行)を設ける。この無条件分岐命令の分岐先はDRC状態レジスタの第3レジスタに格納されたアドレスとする。
このように、第13図のスケジューリングされたCDFGを元に第8図(C)のDRCドライバSWが生成できる。キャッシュのミスや割り込みなどの外的要因を排除して考えると、もとの通常SWが一回のループの実行に14サイクル必要だったのに対して、ループのコア部分(第8図(C)の第5行〜第12行)の8サイクルで実行できる。
作成されたDRCドライバSWは、ドライバSW格納メモリDSMに格納される。格納する場所は、初回ならばドライバSW格納メモリDSMの先頭アドレスとし、以降は前回書き込んだ部分の後ろに書き込む。書き込む領域が十分でない場合には、再びドライバSW格納メモリDSMの先頭アドレスから書き込むようにする。
ステップ605まで終了すると、HW/SW生成ユニットGUはDRC状態レジスタDSRの第1レジスタに「DRC利用準備完了」の値を書き込み、DRC状態レジスタDSRの第2レジスタにステップ605で作成したDRCドライバSWの格納されたメモリの先頭アドレスを書き込む(606)。
以上に述べたフローにしたがってHW/SW生成ユニットGUを動作させることにより、プログラム実行時に自動的にDRC書き換えデータ作成および書き換えと、DRCドライバSWの作成を行うことができる。
第14図を用いて第1図の構成の変形例を説明する。この実施例は、第1図に示した第1の実施例のDRC、書き換え判定ユニットCDU、HW/SW生成ユニットGUを、CPU101から分離した例である。具体的には、DRCをプロセッサ・バスPRCBに接続し、セレクタSELの制御を書き換え判定ユニットCDUが直接制御する。また、命令バッファIBFをセレクタSELの後に配置している。
第1図の構成との動作の違いは、DRCの入出力レジスタ・セルIORCへのアクセスがアドレスを指定して行われることである。例えば、第8図(C)のDRCドライバSWの第1行目[MOV R6 dR6]などのようなDRCの入出力レジスタ・セルIORCにアクセスしている命令は、DRCが直接プロセッサ・バスPRCBに接続しているために、入出力レジスタ・セルIORCのアドレスが直接指定ではなく、間接指定となる。例えば、[MOV R6 @R12]のようなアドレス指定になる。この命令は、汎用レジスタR6のデータを汎用レジスタR12で指示される入出力レジスタ・セルIORCに転送することを意味している。
この変形例では、DRCをCPUの外部に配置することで、第1図の構成に比べてDRCのサイズを大きくすることが可能である。また、DRCと、書き換え判定ユニットCDUと、HW/SW生成ユニットGUがCPU101と分離されているために、設計の変更が容易である。さらに、CPU以外のモジュールがDRCを利用することも可能である。例えば、ダイレクト・メモリ・アクセス・コントローラDMACにより、DRC上の入出力レジスタセルIORCにアクセスしてDRCを利用することができる。この場合には、DRCとCPU101とで異なる処理を同時に実行させることもできる。
第15図を用いて第1図の構成のさらに別の変形例を説明する。この構成例では、第1図に示したDRC制御ユニット102の機能を、DRC制御専用プロセッサDCPで実現している点が異なる。本構成例では、DRC制御ユニット102の機能をDRC制御専用プロセッサDCPで実装するため、その内部の書き換え判定ユニットCDU、およびHW/SW生成ユニットGUの動作をソフトウェアで実現する。従って、DRC制御専用プロセッサDCPのソフトウェアを入れ替えるだけで容易にDRC制御ユニット102を更新することができ、本技術を利用したLSIチップ製造後においても本LSIの性能を向上させることが可能となる。もちろん、第14図の構成と第15図の構成を組み合わせて実施することも可能である。
さらに、本発明は種々の変形が可能である。例えば、実行する通常SWを予備的に実行しておき、DRC書き換えデータ及びDRCドライバSWを予め登録しておくようにしてもよい。この場合には通常SWの実行中にDRC書き換えデータ及びDRCドライバSWの生成処理が不要になるため、第2回目のループからDRCを用いた演算処理が行える。
本発明の構成により、プロセッサとDRCを搭載する半導体装置において、ソフトウェアからDRC書き換えデータとDRCドライバSWとを自動生成することが可能になる。かかる構成により、DRCを利用する場合にもDRCにあわせた専用のプログラムを記述する必要がなくなり、ソフトウェアの互換性を保つことができる。このように、ソフトウェアの互換性を維持することで、既存のソフトウェア資産を流用しつつ少なくとも同じ命令セットで機能するプロセッサであれば同じソフトウェアを用いることができる。
産業の利用可能性
本発明は、特に複数回繰り返されるソフトウェア(例えば、ループを形成しているソフトウェア)に有効であり、このようなループは画像処理や音声処理でよく現れる処理である。
本発明では、DRCを用いることなく汎用プロセッサで実行されるアプリケーションソフトウェア(以下、このようなソフトウェアを「通常SW」と呼ぶ)から、アプリケーションソフトウェアの一部分をDRCで実行させるためのDRCドライバ・ソフトウェア(以下、このようなソフトウェアを「DRCドライバSW」と呼ぶ)を自動生成し、汎用プロセッサは、通常SWの一部をDRCドライバSWに置き換えて実行することで処理能力を向上させる。
通常SWとDRCドライバSWとの関係を第8図(A)〜(D)を用いて説明する。第8図(A)の例は高速フーリエ変換のプログラムの一部である。高速フーリエ変換はマルチメディア処理でよく用いられる処理である。第8図(A)のプログラムは汎用プロセッサの命令セットにより記述されている。プログラムの各命令の意味は第8図(D)に示している。第8図で用いた命令セットは一例であって、本発明が当該命令セットに限定されるものではないことは.、以下の説明から明らかであろう。
本実施例では通常SWのうち繰り返し実行されるソフトウェア部分(ループ)を、DRCに実行させる。これは、DRCドライバSWを通常SWの実行中に自動生成するため、複数回実行されるソフトウェア部分をDRCに実行させるようにすることが効率的であると考えられるためである。第8図(A)の例では、第4行目から第18行目までのプログラムがその対象となる(第8図(B))。
本発明では、第8図(B)の通常SWに基づき、DRC書き換えデータとDRCドライバSW(第8図(C))とを生成する。DRC書き換えデータは、DRCが第8図(B)のプログラムで実行される演算を実行するようにDRCを設定するためのデータである。また、DRCドライバSWは、通常SWのプログラム中のDRCでは実行できない命令を実行し、汎用プロセッサからDRCへデータを入力し、DRCで実行された結果を汎用プロセッサに戻すためのプログラムである。したがって、汎用プロセッサは、汎用レジスタGRと演算器ALUを用いて第8図(B)を実行する代わりに、第8図(C)を実行してDRCを用いて演算を実行することにより、処理能力を向上させることができるのである。
第1図に本発明のLSIチップ100の構成を示す。LSIチップ100は、バス・ステート・コントローラBSCと、ダイレクト・メモリ・アクセス・コントローラDMACと、オンチップ・メモリOCMと、DRCドライバSW格納メモリDSMと、命令キャッシュICHと、データ・キャッシュDCHと、キャッシュ制御ユニットCCNと、CPU101により構成される。CPU101はDRC制御ユニット102と、命令バッファIBFと、命令フェッチ・ユニットIFUと、セレクタSELと、命令デコーダIDCと、汎用レジスタGRと、演算器ALUと、DRCにより構成される。DRC制御ユニット102は、書き換え判定ユニットCDUと、ハードウェア/ソフトウェア生成ユニットGU(以下、HW/SW生成ユニットと記述する)により構成される。
CPU101が実行する命令は命令キャッシュICHに格納され、命令フェッチ・ユニットIFUの命令ロード信号に従って命令キャッシュICH内に格納されている命令は命令バッファIBFに転送される。同時に、書き換え判定ユニットCDUは、命令キャッシュICHから命令バッファIBFへ転送される命令を常に監視する。
書き換え判定ユニットCDUは第8図(A)の例でいえば、条件分岐命令BFを検出し、それに基づきDRCで実行する候補となるプログラムとして第8図(B)に示すソフトウェア部分を切り出し、格納する。DRCで実行するソフトウェア部分が決定すると、書き換え判定ユニットCDUはHW/SW生成ユニットGUに対して、DRC書き換えデータの作成、DRC書き換え、及びDRCドライバSWの作成を指示する。
HW/SW生成ユニットGUは、切り出されたプログラムからDRC書き換えデータを生成し、DRCの書き換えを行う。また、書き換えたDRCを利用するためのDRCドライバSWを生成し、生成されたDRCドライバSWはドライバSW格納メモリDSMに格納する。これらの処理が終了すると、HW/SW生成ユニットGUは書き換え判定ユニットCDUに終了を通知するとともに、DRCドライバSWが格納される先頭アドレスを通知する。
なお、通常SWはオンチップ・メモリOCMや外部メモリ・チップEXTMに格納されているのが一般的である。
CPU101によるプログラムの実行は以下のようになる。第8図の例により説明する。最初は第8図(A)の通常SWがそのまま実行される。HW/SW生成ユニットGUから終了通知を受けた後に、書き換え判定ユニットCDUは、命令キャッシュICHから命令バッファIBFへ転送される通常SWの実行中の命令が、DRCドライバSWに置き換えられるプログラムの条件分岐命令(第8図(B)の第15行、すなわち第8図(A)の第18行に相当する)まで処理が進んだことを確認すると、命令フェッチ・ユニットIFUを介してセレクタSELを切り替え、命令デコーダIDCに入力される命令を命令バッファIBPから判定ユニットCDUに切り替える。次に、条件分岐命令の分岐先アドレスをDRCドライバSWの格納される先頭アドレスに変換した命令を、セレクタSELを介して命令デコーダIDCに出力する。次のCPUクロック・サイクルでは、書き換え判定ユニットCDUは命令フェッチ・ユニットIFUを介してセレクタSELを切り替え、命令デコーダIDCに入力される命令を判定ユニットCDUから命令バッファIBFに切り替える。これにより、以降はDRCドライバSWが実行される。DRCドライバSWの最後の命令は、切り出した通常SWの次の命令が格納されたアドレスへの無条件分岐命令(第8図(C)第15行)であり、この命令の実行によって通常SWの実行に戻る。
ここで、命令キャッシュICHへの命令の格納は、命令デコーダIDCの実行を受けて、キャッシュ・コントローラCCNによって行われる。キャッシュ・コントローラCCNは、プロセッサ・バスPRCB上のモジュールであるオンチップ・メモリOCMと、ダイレクト・メモリ・アクセス・コントローラDMACと、バス・コントローラBSC(外部メモリ・チップEXTMへのアクセスの場合)に加えてドライバSW格納メモリDSMに対してもメモリ・アクセスを実行可能に構成されている点が一つの特徴である。
第2図にDRCドライバSWの生成及び実行のタイミングを示す。
まず通常SWが実行され、命令フェッチ・ユニットIFU内のプログラム・カウンタに格納されている現在実行中の命令のアドレスより前のアドレスへの条件分岐が起こった場合(第8図(A)第18行)には、書き換え判定ユニットCDUは、通常SW中にループがあると仮決定する。
書き換え判定ユニットCDUは、以降の実行で命令キャッシュICHから命令バッファIBFへロードされる命令、すなわち第8図(A)第4行〜第18行の命令を取得して格納する。再度、条件分岐命令により格納された先頭の命令に戻った場合には、格納された命令はループを形成していると判定し、DRCの利用を本決定する。
HW/SW生成ユニットGUは、3回目のループでDRC書き換えデータの作成、DRCドライバSWの作成、およびDRCの書き換えを行う。3回目のループにおいてDRCの利用が可能になるので、CPU101は、演算ユニットALUによる演算に代えて、第4回目以降のループはDRCドライバSWを実行することによりDRCにより演算を行うようにする。なお、DRCの書き換えが3回目のループ実行中に終わらない場合は、CPU101はDRCの書き換えが終了する時点を含むループの最後まで通常SWを実行することになる。
次に、DRCの構造を第3図〜第5図を用いて詳しく説明する。第3図はDRCの内部構成を示している。入出力レジスタセルIORCと、演算セルCCと、入出力レジスタセルIORCへのデータ入力ポート200と、レジスタ指定入力ポート201と、セル入力線203a、203b、203cと、DRCのデータ出力ポート202と、各セルからのセル出力線204a、204bと、配線領域205と、配線プログラム素子206から構成される。配線プログラム素子206は、配線領域205中の配線同士の結線を決定するためのスイッチ素子とこれらスイッチ素子のオン/オフ状態を記憶するための図示しない記憶素子(例えば、SRAM、Flashメモリ等)により構成される。
DRCへのデータ入力時には、命令デコーダIDCからレジスタ指定入力ポート201にレジスタ指定信号が入力され、1つの入出力レジスタ・セルIORCが選択される。データはデータ入力ポート200より入力され、選択された入出力レジスタ・セルIORCのみに入力される。また、DRCからのデータの出力時には、命令デコーダIDCからレジスタ指定入力ポート201にレジスタ指定信号が入力される。これにより出力セレクタOSELが切り換えられ、1つの入出力レジスタ・セルIORCの出力が選択される。データは、セル出力線204aより出力セレクタOSELに入り、選択されたデータのみデータ出力ポート202より出力される。
第4図は、第3図の入出力レジスタ・セルIORCの構成を示している。入出力レジスタ・セルIORCは入力セレクタISELとセル・レジスタCRにより構成されている。入力セレクタISELは、レジスタ指定入力ポート201からの入力に応じて、配線からのセル入力線203aまたはデータ入力ポート200からの入力に切り換える。入力セレクタISELを介して入力されたデータは、セル・レジスタCRに保持される。このセル・レジスタCRはクロック入力301と同期して動作し、リセット入力302によってリセットされる。なお、第3図ではクロック及びリセットの配線は省略しているが、全ての入出力レジスタ・セルIORCと演算セルCCとに接続されている。セル・レジスタCRに保持されたデータはセル出力線204aより外部に出力される。
なお、本実施例ではデータは8ビット単位で入出力が行われているが、この大きさには限定されない。
第5図は、第3図の演算セルCCの構成を示している。演算セルCCは、セル演算ユニットCALUと、フリップ・フロップFFと、演算プログラム素子400から構成される。セル演算ユニットCALUは、CPU内のALUと同じ機能を持ち、演算プログラム素子400によってどの演算機能を使用するかを設定する。セル演算ユニットCALUの実行可能な論理和、論理積、排他的論理和といった論理演算、加減乗除といった算術演算、比較演算のうちから、演算プログラム素子400はセル演算ユニットCALUが実行する演算を設定する。
このように、演算セルCCの演算プログラム素子400の設定により、演算セルCCの演算内容を決定できる。また、配線プログラム素子206の設定により、いかなるデータを入出力レジスタ・セルIORC、演算セルCCに入力するのか、また入出力レジスタ・セルIORCのデータまたは演算セルCCの演算結果をどこに出力するのかを設定することができる。このようにDRC書き換えデータは、演算プログラム素子400の設定値と配線プログラム素子206の設定値とを含み、所望の演算を実行可能にする。
第6図に書き換え判定ユニットCDUの構成を、第7図に書き換え判定ユニットCDUの動作を示す。書き換え判定ユニットCDUは、分岐アドレス格納バッファBABと、ループ・カウンタLCと、命令アドレス判定ユニットIADUと、DRC状態レジスタDSRと、通常SW一時格納バッファTBFと、分岐コントローラBCLから構成される。さらに、DRC状態レジスタDSRは、HW/SW生成ユニットGUの状態を示す部分、DRCドライバSWへの分岐アドレスを格納する部分、およびDRCドライバSWに置き換える通常SWの次の命令があるアドレスを格納する部分の3つの部分で構成される。
以下、第7図に即して書き換え判定ユニットCDUの動作を説明する。まず、命令キャッシュICHから命令バッファIBFへ送られる命令を命令アドレス判定ユニットIADUに取り込む(500)。命令アドレス判定ユニットIADUは、命令フェッチ・ユニットIFU中のプログラム・カウンタPC内のアドレスを取り出し、その現在実行中の命令のアドレスがドライバSW格納メモリDSMのアドレス領域に該当するかどうかを判定する(501)。
該当する場合は現在DRCドライバSWを実行中であることを意味する。このとき、ループカウンタLCが0以外の値であれば(502)DRCドライバSWの第1行の命令(即ち第8図(C)の第1行のMOV命令)であるため、ループ・カウンタLCを0にリセットし、分岐コントローラBCLは、セレクタSELに命令バッファIBF側に切り換えさせる。ループカウンタLCが0の場合には何もしない。ループ・カウンタLCには、通常SW中で連続して実行されるループの回数が保持されており、リセット信号によりリセットされる。
該当しない場合には現在通常SWを実行中であることを意味するので、命令アドレス判定ユニットIADUは、命令が条件分岐命令であるかどうかを判定する。条件分岐命令ではなく、かつこのときループ・カウンタLCの値が1であれば、第2回目のループを実行していることになる。そのため、通常SWを取得するため(第2図を参照)、命令アドレス判定ユニットIADUは命令を通常SW一時格納バッファTBFに格納する。
ステップ505において、命令アドレス判定ユニットIADUは、DRC状態レジスタDSRをチェックする。DRC状態レジスタDSRは、DRCの状態を示す第1レジスタと、DRCドライバSWへの分岐アドレス(例えば第8図(C)の第1行のMOV命令が格納されたアドレス)を格納する第2レジスタと、DRCドライバSWに切り換えられる通常SWの次のアドレス(例えば第8図(A)のL003:(第19行))を格納する第3アドレスとから構成される。第1レジスタには「DRC利用不可」、「DRC利用準備中」、「DRC利用準備完了」の3状態のいずれかが格納されている。CPUリセットを受けて「DRC利用不可」の値に更新され、HW/SW生成ユニットGUによるDRC利用準備開始時に「DRC利用準備中」の値に更新され、DRC利用準備完了時に「DRC利用準備完了」の値に更新される。DRC利用準備完了時に第2アドレスは更新され、GUへの動作開始の通知時に第3アドレスは更新される。
DRC状態レジスタDSRの第1レジスタが「DRC利用準備完了」の値であれば、分岐コントローラBCLは、命令フェッチ・ユニットIFUを介してセレクタSELをDRC制御ユニットCDUに切り換えて、書き換え判定ユニットCDUからの出力が命令デコーダIDCに繋がるようにする。その後、分岐命令の分岐先アドレスをドライバSW格納メモリDSM内のDRCドライバSWの先頭アドレスに変更した分岐命令を送る。
DRC状態レジスタDSRの第1レジスタが「DRC利用準備完了」の値以外であれば、ループの存在の判定を行う(第2図における仮決定処理)。まず、命令アドレス判定ユニットIADUは、現在のプログラム・カウンタPCと分岐先アドレスとを比較する(513)。分岐先アドレスの方が大きい場合はループは存在しないので、ループ・カウンタLCを0とする(514)。プログラム・カウンタPCの方が大きい場合には、さらに命令アドレス判定ユニットIADUは、分岐アドレス・バッファBABに格納された分岐先アドレスと、分岐命令の分岐先とを比較する。分岐アドレス・バッファBABは、分岐命令を実行した場合にその分岐先アドレスを上書き保存するバッファである。したがって、分岐先が分岐アドレス・バッファBABのアドレスに等しければ、ループの存在を決定し、DRC書き換えデータ、DRCドライバSWの生成処理に移る。具体的には、ループ・カウンタに1を加算し(509)、その値が2であれば(510)、命令アドレス判定ユニットIADUは、分岐命令を通常SW一時格納バッファTBFに格納し、DRC状態レジスタDSRの第3レジスタに現在のPCの値を1つ進めた値(例えば図8(A)のL003:(第19行)のアドレス)を代入して、HW/SW生成ユニットGUに対してDRC利用準備の開始信号を送る(511)。
一方、分岐先が分岐アドレス・バッファBABのアドレスと異なっていれば、新たなループの存在の可能性がある。そこで、命令アドレス判定ユニットIADUは、ループ・カウンタLCに1を代入し、通常SW一時格納バッファTBFを一括クリアする。
上記動作を第8図のプログラム例に基づいて説明すると以下のようになる。
第1回目のループの実行では、第8図(A)の第1行〜第17行の命令は、ループ・カウンタLCは0であり、第7図のフローでは何も実行されない。18行目の条件分岐命令BFが取り込まれると、ループ・カウンタLCを1にするとともに(508)、分岐先アドレス(第4行)が分岐アドレス・バッファBABに上書きされる。
第2回目のループの実行では、第5行〜第17行目の各命令は、ループ・カウンタLCが1なので、通常SW一時格納バッファTBFに格納される(504)。第18行目の条件分岐命令BFが取り込まれると、その分岐先アドレスと分岐アドレス・バッファBABに格納されたアドレスとは一致するので(507)、ループ・カウンタLCを2として(509)、条件分岐命令BFを通常SW一時格納バッファTBFに送るとともに、HW/SW生成ユニットGUにDRC利用準備を開始させる(510,511)。
第3回目のループの実行では、第5行〜第17行目の各命令は、ループ・カウンタLCは2であるので、第7図のフローでは何も実行されない。第18行目の条件分岐命令BFが取り込まれ、DRCが利用可能な状態になっていれば、分岐命令の分岐先アドレスをDRCドライバSWの先頭アドレス(第8図(C)第1行)に変更することで、以降のループの実行はDRCを利用して行われる。
DRCドライバSWの実行では、JMP命令(第8図(C)の第15行)により通常SWのL003(第8図(A)の第19行)に分岐し、通常SWの実行に復帰する。
次に、HW/SW生成ユニットGUの動作を第9図のフロー図を元に説明する。HW/SW生成ユニットGUは、書き換え判定ユニットCDUからの命令を受け、通常SW一時格納バッファTBFから通常SW(第8図(B))を取得するとともに、DRC状態レジスタDSRの第1レジスタには「DRC利用準備中」の値を入力する(600)。
HW/SW生成ユニットGUは、まず取得した通常SWから第10図に示すようなCDFG(Control Data Flow Graph)を作成する(601)。CDFGは、入力された通常SW中の各命令をノード(命令)で、命令オペランドのデータ依存関係をエッジ(矢印)で表したものである。なお、第10図におけるブロックの括弧内の数字は第8図(B)の対応する行数を表している。
第10図は、第8図(B)の通常SWからそのままCDFGを作成したものである。依存関係には、「制御上の依存関係」と「データ上の依存関係」の2種類がある。「制御上の依存関係」とは、例えばDT命令でレジスタR0の値を設定し、レジスタR0の値に応じて条件分岐命令BFを実行するといった依存関係である。これは汎用プロセッサの命令セットに依存するものであり、あらかじめ依存関係を登録しておく必要がある。「データ上の依存関係」は、例えばMOV命令で転送されたデータを用いてSUBで演算を行うといった依存関係である。したがって、プログラムの内容によって決定していく必要がある。オペランドに他の命令のオペランドと依存関係のないものを最上位に配置し、依存関係に応じてより下位に配置する。「データ上の依存関係」は具体的には以下のようにして決定する。
第8図(B)第2行〜第4行、第10行の命令のオペランドはそれより前の命令のオペランドに依存関係がないので、同列に位置する。「MOV@R6,R2」とは「レジスタR6の指示するアドレスに格納されたデータをレジスタR2に転送する」という意味である。すなわち、オペランドの右の値が@を含むMOV命令は外部からレジスタにデータを読み込むという命令であり、さらに@のついたオペランドは第8図(B)内で初の出現であるため、「データ上の依存関係」としては最上位に位置することになる。第5行の命令「MUL」は、レジスタR2,R3のデータを用いるため、第3行〜第4行の命令と依存関係を有する。第7行の命令は「MUL」の実行結果はレジスタMACLに入力されるため、レジスタMACLのデータをレジスタR7に転送するためのものである。
以下のプログラムについても同様にして依存関係を決定するが、エッジの決定には同じレジスタ名であっても内容が更新されている場合があることに注意する必要がある。例えば、第8行の「SUB R7,R1」は「レジスタR7のデータとレジスタR1のデータの差をレジスタR1に格納する」という意味である。第8行の命令の実行によりデータが更新されているため、第9行の「MOV R1,@R5」は第8行の命令と依存関係はあるが、第6行の「MOV @R4,R1」とは依存関係が存在しない。
このように、着目する命令に対して、それ以前に実行された命令のうち、オペランドに共通のレジスタ名を有する命令と依存関係を設定することでCDFGが作成できる。ただし、共通のレジスタ名を有する命令が複数ある場合にはレジスタのデータが更新される可能性を考慮して、直前に実行された命令との間に依存関係を設定する。
第10図のCDFGを縮約したのが、第11図のCDFGである。縮約することでDRCの回路構成を単純にし、DRCでの演算処理が高速に行えるといった効果がある。
第1の縮約の形態が701の2命令(第10図)を801の1命令(第11図)に縮約するものである。STS命令は一切の演算処理を行うことなくデータをレジスタ間で転送する命令である。このような転送は汎用プロセッサで処理する場合には命令セットの構成上必要となる命令ではあるものの、DRCで処理する場合には直接必要なデータの格納されたレジスタと演算セルとを接続するようにすればよいため、このような命令をDRCの構成に反映させる必要はない。このような、データをレジスタ間で転送する命令はあらかじめ縮約対象とする命令として事前に登録しておくことで第1の縮約を実行できる。
第2の縮約の形態が702の4命令(第10図)を802の3命令(第11図)に縮約するものである。汎用プロセッサでは時系列で処理がされるため、レジスタ名が違っていてもその内容が同じであるということが生じうる。DRCで処理する場合には必要なデータの格納されたレジスタと演算セルとを接続するようにすればよいため、このようなレジスタ名の相違をDRCの構成に反映させる必要はない。そのため、演算命令(第8図の例ではMUL命令、ADD命令、SUB命令)については、そのレジスタのデータの内容を比較し、レジスタが異なっていても同じデータが格納されている場合には縮約するようにする。例えば、第8行のSUB命令と第11行のADD命令のオペランドは、レジスタR7が共通し、レジスタR1、レジスタR3とで異なっている。しかしながら、それぞれデータ上の依存関係をたどるといずれのレジスタに格納された内容も「レジスタR4の指示するアドレスに格納されたデータ」であるため、上記のような縮約が可能になる。
次に、HW/SW生成ユニットGUは、ステップ601で作成した第11図に示すCDFGの各ノードに対して、スケジューリング、すなわちハードウェア・リソースの制約を考慮した上で各ノードを実行するクロック・サイクルの割り当てを行う(602)。
このスケジューリングの一方法としてALAPアルゴリズムとASAPアルゴリズムを第11図のCDFGに対して併用して適用した例を第12図及び第13図に示す。ALAP(As Late As Possible)アルゴリズムは同時に実行可能な命令を後から詰めて行くスケジューリングである。同時に実行できない命令の第一は相互に依存関係のある命令である。第二は、DRCの外部にアクセスする命令はそのサイクルに1つしか実行することができない。この結果が第12図である。
さらに、第12図のスケジューリングに対して、同時に実行可能な命令を前から詰めて行くASAP(As Soon As Possible)アルゴリズムを適用したものが第13図である。できるだけ、命令を実行するサイクルを前に詰めることによって、処理時間に余裕が生まれる。
1サイクルに含まれる命令は1クロック・サイクルで実行することができ、サイクル1〜8の8クロック・サイクルで全ての命令を実行することができる。
HW/SW生成ユニットGUは、第13図に示すスケジューリングされたCDFGより、DRC書き換えデータを生成する。具体的には、以下の通りである。ノード部分を入出力レジスタ・セルIORC及び演算セルCCに割り当てる。MOV命令については入出力レジスタ・セルIORCを割り当て、演算命令については演算セルCCを割り当てる。演算命令の内容に応じて、演算セルの演算内容の設定を行う演算プログラム素子400の設定データを作成する。また、CDFGのエッジはデータの流れを示しているので、CDFGのエッジの接続関係にしたがって、入出力レジスタ・セルIORC及び演算セルCCが相互に配線されるように、配線プログラム素子206の設定データを作成する(603)。この演算プログラム素子400の設定データ及び配線プログラム素子206の設定データがDRC書き換えデータである。
HW/SW生成ユニットGUは、DRC書き換えデータにしたがってDRCの演算プログラム素子303と配線プログラム素子206を書き換える(604)。これと並行してDRCドライバSWの作成を行う(605)。
DRCドライバSWの作成方法について説明する。第13図のCDFGから第8図(C)に示すDRCドライバSWを生成する。
まず、汎用レジスタGRに格納されているデータをDRCの入出力レジスタ・セルIORCに移動させる必要がある。例えば、第8図(B)第3行の「MOV @R6,R3」という命令は「汎用レジスタR6の指示するアドレスに格納されたデータを汎用レジスタR3に転送する」命令である。この命令をDRCで実行するためには、まず汎用レジスタR6のデータをDRC中に移動させておく必要がある。したがって、第8図(C)第1行「MOV R6,dR6」という命令が設けられる。この命令は「汎用レジスタR6に格納されたデータ(アドレス)をDRCの入出力レジスタ・セルdR6に転送する」という意味である。このような命令が第8図(C)の第1行〜第3行に設けられている。
その後、第13図の各ノードのうち、DRC以外で実行される命令がDRCドライバSWに設けられる。第8図(C)の第5行〜第12行の命令はそれぞれ第13図のサイクル1〜8に含まれるノードに対応している。
第8図(C)第5行「MOV @dR6,dR3」は「入出力レジスタ・セルdR6の指示するアドレスに格納されたデータを入出力レジスタ・セルdR3に転送する」命令であり、これは第13図のサイクル1の「MOV @R6,R3」に対応している。以下同様であるが、例えばサイクル3では「MOV @R4,R1」、「MUL」の2つのノードが存在しており、後者はDRCが実行する命令であるから、DRCドライバSWには現れない。また、サイクル6は「ADD」というDRCが実行する命令しか存在していない。その場合には、空きサイクルが発生しているとして、ノー・オペレーション命令(NOP)を追加する。
なお、演算命令についてはDRCで実行させるために、演算に必要なデータは汎用レジスタGRではなく、DRCの入出力レジスタ・セルIORCに格納することになる。そのため、演算実行後の値を汎用レジスタGRに戻す必要がある。したがって、第8図(C)の第13行と第14行の命令が設けられている。例えば、「MOV dR5,R5」は「入出力レジスタ・セルdR5に格納されたデータを汎用レジスタR5に転送する」命令である。
最後に、通常SWの実行に復帰するために、通常SWにおける条件分岐命令の次のアドレスへの無条件分岐命令(JMP)(第8図(C)第15行)を設ける。この無条件分岐命令の分岐先はDRC状態レジスタの第3レジスタに格納されたアドレスとする。
このように、第13図のスケジューリングされたCDFGを元に第8図(C)のDRCドライバSWが生成できる。キャッシュのミスや割り込みなどの外的要因を排除して考えると、もとの通常SWが一回のループの実行に14サイクル必要だったのに対して、ループのコア部分(第8図(C)の第5行〜第12行)の8サイクルで実行できる。
作成されたDRCドライバSWは、ドライバSW格納メモリDSMに格納される。格納する場所は、初回ならばドライバSW格納メモリDSMの先頭アドレスとし、以降は前回書き込んだ部分の後ろに書き込む。書き込む領域が十分でない場合には、再びドライバSW格納メモリDSMの先頭アドレスから書き込むようにする。
ステップ605まで終了すると、HW/SW生成ユニットGUはDRC状態レジスタDSRの第1レジスタに「DRC利用準備完了」の値を書き込み、DRC状態レジスタDSRの第2レジスタにステップ605で作成したDRCドライバSWの格納されたメモリの先頭アドレスを書き込む(606)。
以上に述べたフローにしたがってHW/SW生成ユニットGUを動作させることにより、プログラム実行時に自動的にDRC書き換えデータ作成および書き換えと、DRCドライバSWの作成を行うことができる。
第14図を用いて第1図の構成の変形例を説明する。この実施例は、第1図に示した第1の実施例のDRC、書き換え判定ユニットCDU、HW/SW生成ユニットGUを、CPU101から分離した例である。具体的には、DRCをプロセッサ・バスPRCBに接続し、セレクタSELの制御を書き換え判定ユニットCDUが直接制御する。また、命令バッファIBFをセレクタSELの後に配置している。
第1図の構成との動作の違いは、DRCの入出力レジスタ・セルIORCへのアクセスがアドレスを指定して行われることである。例えば、第8図(C)のDRCドライバSWの第1行目[MOV R6 dR6]などのようなDRCの入出力レジスタ・セルIORCにアクセスしている命令は、DRCが直接プロセッサ・バスPRCBに接続しているために、入出力レジスタ・セルIORCのアドレスが直接指定ではなく、間接指定となる。例えば、[MOV R6 @R12]のようなアドレス指定になる。この命令は、汎用レジスタR6のデータを汎用レジスタR12で指示される入出力レジスタ・セルIORCに転送することを意味している。
この変形例では、DRCをCPUの外部に配置することで、第1図の構成に比べてDRCのサイズを大きくすることが可能である。また、DRCと、書き換え判定ユニットCDUと、HW/SW生成ユニットGUがCPU101と分離されているために、設計の変更が容易である。さらに、CPU以外のモジュールがDRCを利用することも可能である。例えば、ダイレクト・メモリ・アクセス・コントローラDMACにより、DRC上の入出力レジスタセルIORCにアクセスしてDRCを利用することができる。この場合には、DRCとCPU101とで異なる処理を同時に実行させることもできる。
第15図を用いて第1図の構成のさらに別の変形例を説明する。この構成例では、第1図に示したDRC制御ユニット102の機能を、DRC制御専用プロセッサDCPで実現している点が異なる。本構成例では、DRC制御ユニット102の機能をDRC制御専用プロセッサDCPで実装するため、その内部の書き換え判定ユニットCDU、およびHW/SW生成ユニットGUの動作をソフトウェアで実現する。従って、DRC制御専用プロセッサDCPのソフトウェアを入れ替えるだけで容易にDRC制御ユニット102を更新することができ、本技術を利用したLSIチップ製造後においても本LSIの性能を向上させることが可能となる。もちろん、第14図の構成と第15図の構成を組み合わせて実施することも可能である。
さらに、本発明は種々の変形が可能である。例えば、実行する通常SWを予備的に実行しておき、DRC書き換えデータ及びDRCドライバSWを予め登録しておくようにしてもよい。この場合には通常SWの実行中にDRC書き換えデータ及びDRCドライバSWの生成処理が不要になるため、第2回目のループからDRCを用いた演算処理が行える。
本発明の構成により、プロセッサとDRCを搭載する半導体装置において、ソフトウェアからDRC書き換えデータとDRCドライバSWとを自動生成することが可能になる。かかる構成により、DRCを利用する場合にもDRCにあわせた専用のプログラムを記述する必要がなくなり、ソフトウェアの互換性を保つことができる。このように、ソフトウェアの互換性を維持することで、既存のソフトウェア資産を流用しつつ少なくとも同じ命令セットで機能するプロセッサであれば同じソフトウェアを用いることができる。
産業の利用可能性
本発明は、特に複数回繰り返されるソフトウェア(例えば、ループを形成しているソフトウェア)に有効であり、このようなループは画像処理や音声処理でよく現れる処理である。
Claims (12)
- 演算命令を含むソフトウェアを実行する半導体装置であって、
レジスタと、
演算器と、
複数の演算セルと複数のレジスタセルとを含み、上記演算セルが実行する演算種と上記複数の演算セル及び上記複数のレジスタセル間の配線接続とを設定可能な演算回路と、
上記ソフトウェアに基づき、上記演算セルの上記演算種及び上記配線接続を設定する設定データと、上記演算回路を用いて上記ソフトウェアと等価な処理を行うためのドライバ・ソフトウェアとを生成する制御回路とを有する半導体装置。 - 請求項1において、
上記制御回路は、上記レジスタと上記演算器とを用いて上記ソフトウェアを実行している期間中に、上記設定データ及び上記ドライバ・ソフトウェアを生成するように構成された半導体装置。 - 請求項2において、
上記ソフトウェアの処理はn回繰り返され、
第1回から第i回(i<n)までの処理は、上記レジスタと上記演算器とを用いて上記ソフトウェアを実行することによって行われ、
第i+1回から第n回までの処理は、上記演算回路を用いて上記ドライバ・ソフトウェアを実行することによって行われる半導体装置。 - 請求項1において、
上記ドライバ・ソフトウェアは少なくとも上記レジスタから上記演算回路の上記レジスタセルへのデータ転送命令と、上記演算回路の上記レジスタセルから上記レジスタへのデータ転送命令とを含む半導体装置。 - 請求項1において、
制御回路は、上記設定データ及び上記ドライバ・ソフトウェアを生成するソフトウェアを実行することにより、上記設定データ及び上記ドライバ・ソフトウェアを生成する半導体装置。 - 請求項1において、
上記演算回路はバスに接続された半導体装置。 - 請求項1において、
上記ソフトウェアを実行するのに要するクロックサイクル数は上記ドライバ・ソフトウェアを実行するのに要するクロックサイクル数よりも小さい半導体装置。 - 演算命令を含むソフトウェアを実行する半導体装置であって、
レジスタと、
演算器と、
複数の演算セルと複数のレジスタセルとを含み、上記演算セルが実行する演算種と上記複数の演算セル及び上記複数のレジスタセル間の配線接続とを設定可能な演算回路と、
上記ソフトウェアを格納する第1メモリ領域と、
上記演算回路を用いて上記ソフトウェアと等価な処理を行うためのドライバ・ソフトウェアを格納する第2メモリ領域と、
実行するソフトウェアを制御する制御回路とを有し、
上記ソフトウェアの処理はn回繰り返され、
第1回から第i回(i<n)までの処理は、上記レジスタと上記演算器とを用いて上記第1メモリ領域から読み出された上記ソフトウェアを実行することによって行われ、
上記制御回路は上記第i回の処理を受けて、実行するソフトウェアを上記ドライバ・ソフトウェアに切り換えることにより、第i+1回から第n回までの処理は、上記演算回路を用いて上記第2メモリ領域から読み出された上記ドライバ・ソフトウェアを実行することによって行われる半導体装置。 - 請求項8において、
上記制御回路は、上記ソフトウェアに基づき、上記演算セルの上記演算種及び上記配線接続を設定する設定データと、上記演算回路を用いて上記ソフトウェアと等価な処理を行うためのドライバ・ソフトウェアとを生成する半導体装置。 - 請求項8において、
上記制御回路は、演算回路の上記演算種及び上記配線接続を設定する設定データを有し、
上記ソフトウェアを実行している期間中に、上記演算回路は、上記設定データにより、上記演算セルの上記演算種及び上記配線接続を設定する半導体装置。 - 請求項8において、
上記ドライバ・ソフトウェアは少なくとも上記レジスタから上記演算回路の上記レジスタセルへのデータ転送命令と、上記演算回路の上記レジスタセルから上記レジスタへのデータ転送命令とを含む半導体装置。 - 請求項8において、
上記ドライバ・ソフトウェアを実行するのに要するクロックサイクル数は上記ソフトウェアを実行するのに要するクロックサイクル数よりも小さい半導体装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2002/009437 WO2004025468A1 (ja) | 2002-09-13 | 2002-09-13 | 半導体装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2004025468A1 true JPWO2004025468A1 (ja) | 2006-01-12 |
Family
ID=31986105
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004535852A Withdrawn JPWO2004025468A1 (ja) | 2002-09-13 | 2002-09-13 | 半導体装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20050272197A1 (ja) |
EP (1) | EP1550950A4 (ja) |
JP (1) | JPWO2004025468A1 (ja) |
CN (1) | CN1639690A (ja) |
TW (1) | TWI249130B (ja) |
WO (1) | WO2004025468A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4594666B2 (ja) | 2004-07-12 | 2010-12-08 | 富士通株式会社 | 再構成可能な演算装置 |
JP5617282B2 (ja) * | 2010-03-09 | 2014-11-05 | 富士通セミコンダクター株式会社 | データ処理システム |
JP5971214B2 (ja) * | 2013-08-16 | 2016-08-17 | 富士ゼロックス株式会社 | データ処理装置及びデータ処理プログラム |
JP6713410B2 (ja) * | 2016-11-21 | 2020-06-24 | 日立オートモティブシステムズ株式会社 | 電子制御装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5752035A (en) * | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
US6112020A (en) * | 1996-10-31 | 2000-08-29 | Altera Corporation | Apparatus and method for generating configuration and test files for programmable logic devices |
EP1059580A1 (de) * | 1999-06-10 | 2000-12-13 | Siemens Aktiengesellschaft | Programmgesteuerte Einheit |
JP3678270B2 (ja) * | 1999-08-25 | 2005-08-03 | 富士ゼロックス株式会社 | 情報処理システムおよび情報処理方法 |
US6438737B1 (en) * | 2000-02-15 | 2002-08-20 | Intel Corporation | Reconfigurable logic for a computer |
JP3636986B2 (ja) * | 2000-12-06 | 2005-04-06 | 松下電器産業株式会社 | 半導体集積回路 |
US6766406B1 (en) * | 2001-10-08 | 2004-07-20 | Lsi Logic Corporation | Field programmable universal serial bus application specific integrated circuit and method of operation thereof |
JP3940668B2 (ja) * | 2002-12-05 | 2007-07-04 | 株式会社東芝 | 論理回路設計方法、論理回路設計プログラムおよび論理回路設計装置 |
FR2850768B1 (fr) * | 2003-02-03 | 2005-11-18 | St Microelectronics Sa | Dispositif electronique configurable a granularite mixte |
-
2002
- 2002-09-13 EP EP02770197A patent/EP1550950A4/en not_active Withdrawn
- 2002-09-13 CN CNA028293924A patent/CN1639690A/zh active Pending
- 2002-09-13 JP JP2004535852A patent/JPWO2004025468A1/ja not_active Withdrawn
- 2002-09-13 US US10/522,712 patent/US20050272197A1/en not_active Abandoned
- 2002-09-13 WO PCT/JP2002/009437 patent/WO2004025468A1/ja not_active Application Discontinuation
- 2002-10-29 TW TW091132079A patent/TWI249130B/zh not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
WO2004025468A1 (ja) | 2004-03-25 |
US20050272197A1 (en) | 2005-12-08 |
EP1550950A4 (en) | 2007-03-07 |
TW200406701A (en) | 2004-05-01 |
CN1639690A (zh) | 2005-07-13 |
TWI249130B (en) | 2006-02-11 |
EP1550950A1 (en) | 2005-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2372530A1 (en) | Data processing method and device | |
JPH04299436A (ja) | メモリ回路および機能ユニットのグループを備えた処理装置 | |
KR20000076310A (ko) | 리스크 구조를 갖는 8 비트 마이크로콘트롤러 | |
KR100210205B1 (ko) | 스톨캐쉬를 제공하기 위한 장치 및 방법 | |
US6986028B2 (en) | Repeat block with zero cycle overhead nesting | |
JP3790626B2 (ja) | デュアルワードまたは複数命令をフェッチしかつ発行する方法および装置 | |
US6012138A (en) | Dynamically variable length CPU pipeline for efficiently executing two instruction sets | |
JP4073721B2 (ja) | データ処理装置 | |
JPWO2004025468A1 (ja) | 半導体装置 | |
JP4800582B2 (ja) | 演算処理装置 | |
US8200943B2 (en) | Microprocessor | |
KR100631396B1 (ko) | 반도체장치 | |
US20030051123A1 (en) | Microprocessor | |
JP2002157115A (ja) | データ処理装置 | |
JP3740321B2 (ja) | データ処理装置 | |
JP3825328B2 (ja) | プロセッサ合成装置、システムlsi合成装置、プロセッサ合成方法、システムlsi合成方法、及び記録媒体 | |
JP3097602B2 (ja) | データ処理装置 | |
WO2007039837A2 (en) | Implied instruction set computing (iisc) / dual instruction set computing (disc) / single instruction set computing (sisc) / recurring multiple instruction set computing (rmisc) based computing machine / apparatus / processor | |
US20020129229A1 (en) | Microinstruction sequencer stack | |
JP3828040B2 (ja) | マイクロコンピュータの制御方法 | |
JP2003162411A (ja) | データプロセッサ | |
KR100658485B1 (ko) | 마이크로프로세서 개발시스템 | |
JP2000029508A (ja) | プログラマブルコントローラ | |
JP3874104B2 (ja) | プログラム処理装置及びプログラム処理方法 | |
JP2004199630A (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20060421 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20070724 |