(57)【要約】【課題】  ユーザの所望するカスタムＬＳＩを高級プログラミング言語により、作成可能なカスタムＬＳＩ開発プラットフォームを提供することにある。【解決手段】  動的論理回路再構成可能プロセッサとソフトウェアプログラムとから成るカスタムＬＳＩ開発プラットフォームであり、前記ソフトウェアプログラムは、高級言語で記述されたプログラムから動的論理回路構成可能プロセッサの命令セットと論理素子接続情報とを含む命令セット・アーキテクチャ（以下、ＩＳＡ）を生成するＩＳＡジェネレータと、前記論理素子接続情報と、前記動的論理回路構成可能プロセッサのプログラマブル・エレメント（以下、ＰＥ）の機能及び配置配列情報とから前記ＰＥの配置配線情報を生成する論理回路構成・ジェネレータとを備えたカスタムＬＳＩ開発プラットフォーム。【選択図】  図１
2006185423.tif 000002
【特許請求の範囲】
【請求項１】
高級言語で記述されたプログラム（以下、ソースプログラム）から命令セット・アーキテクチャ（以下、ＩＳＡ）を自動生成する手段（以下、ＩＳＡジェネレータ）を含むソフトウェアプログラムと、前記生成されたＩＳＡに対応して論理回路を再構成する手段を含む再構成可能プロセッサとを備えたカスタムＬＳＩ開発プラットフォームであって、
前記ＩＳＡジェネレータは、
ソースプログラムの命令のパターンを抽出する手段と、
前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、前記抽出した命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換する手段と
を備えたことを特徴とするカスタムＬＳＩ開発プラットフォーム。
【請求項２】
前記ソフトウェアプログラムは、前記再構成可能プロセッサの論理回路を構成するプログラマブル・エレメント（以下、ＰＥ）の配置配列情報と前記生成されたＩＳＡとから前記プロセッサの論理回路構成情報を生成する論理回路構成ジェネレータを備えたことを特徴とする請求項１に記載のカスタムＬＳＩ開発プラットフォーム。
【請求項３】
前記ソフトウェアプログラムは、
前記生成されたＩＳＡを前記再構成可能プロセッサの実行可能可能なコード（以下、プログラム・オブジェクトコード）に変換する手段と、
前記論理回路構成情報を前記再構成可能プロセッサの実行可能可能なコード（以下、論理回路構成・オブジェクトコード）に変換する手段と
を備えたことを特徴とする請求項１または２に記載のカスタムＬＳＩ開発プラットフォーム。
【請求項４】
前記再構成可能プロセッサは、前記プログラム・オブジェクトコードと前記論理回路構成・オブジェクトコードとに基づいて、ＰＥを再配置し論理回路を再構成する手段を備えたことを特徴とする請求項１から３のいずれかに記載のカスタムＬＳＩ開発プラットフォーム。
【請求項５】
前記ＩＳＡジェネレータは、
ライブラリに格納されているカスタム命令を呼び出すファンクションコール手段と、
前記プロセッサの制御命令を含む中間コードを生成する手段と
を備えたことを特徴とする請求項１から４のいずれかに記載のカスタムＬＳＩ開発プラットフォーム。
【請求項６】
前記プログラム・オブジェクトコードと前記論理回路再構成・オブジェクトコードに基づいて、前記再構成可能プロセッサが前記ソースプログラムを実行するパフォーマンスをシミュレートする手段を備えたことを特徴とする請求項１から５のいずれかに記載のカスタムＬＳＩ開発プラットフォーム。
【請求項７】
前記抽出した命令をカスタム命令に置換するプロセスにおいて、カスタム命令に置き換えられなかった命令を新たなカスタム命令として生成する手段を備えたことを特徴とする請求項１から６のいずれかに記載のカスタムＬＳＩ開発プラットフォーム。
【請求項８】
再構成可能プロセッサの命令セット・アーキテクチャ（以下、ＩＳＡ）の生成方法であって、
高級言語で記述されたプログラム（以下、ソースプログラム）の命令のパターンを抽出し、
前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、
前記抽出した命令をカスタム命令、及び／又はカスタム命令の組み合わせで置換し、前記再構成可能プロセッサ用のＩＳＡを生成することを特徴とするＩＳＡの生成方法。
【請求項９】
置換されたカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報を抽出し、該論理素子接続情報を含んでＩＳＡを生成することを特徴とする請求項８に記載のＩＳＡの生成方法。
【請求項１０】
前記プロセッサが動的再構成可能プロセッサであることを特徴とする請求項８又は９に記載のＩＳＡの生成方法。
【請求項１１】
前記抽出した命令をカスタム命令、及び／又はカスタム命令の組み合わせで置換するプロセスにおいて、前記ソースプログラムの命令中、カスタム命令に置換できなかった命令を、新たなカスタム命令として定義するとともに前記ライブラリに追加し、カスタム命令の再抽出を行うことを特徴とする請求項８から１０のいずれかに記載のＩＳＡの生成方法。
【請求項１２】
再構成可能プロセッサの論理回路構成情報の生成方法であって、
高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出し、
前記抽出された命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、
前記抽出された命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換し、
前記抽出したカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報と、前記プロセッサのプログラマブル・エレメント（以下、ＰＥ）の配置配列情報とから、論理回路構成情報を生成することを特徴とする論理回路構成情報の生成方法。
【請求項１３】
前記再構成可能プロセッサが、動的再構成可能プロセッサであることを特徴とする請求項１２に記載の論理回路構成情報の生成方法。
【請求項１４】
請求項３に記載のプログラム・オブジェクトコードと前記論理回路構成・オブジェクトコードとを実行する手段を備えた再構成可能プロセッサ。  
【請求項１５】
動的再構成可能論理回路と、
前記動的再構成可能論理回路を構成するプログラマブル・エレメント（以下、ＰＥ）の命令毎の配置配列情報を記憶するコンフィギュレーション・メモリと、
命令の実行の中間結果を一時的に保持するレジスタ・ファイルと、
命令を保持するメモリと、
命令の実行順序を含むプロセッサの管理を行うコントローラと
を備えたことを特徴とする請求項１４に記載の再構成可能プロセッサ。
【請求項１６】
前記コントローラは、前記メモリにアクセスするときのインデックスを記憶するインデックス・レジスタを備えたことを特徴とする請求項１４又は１５に記載の再構成可能プロセッサ。
【請求項１７】
前記インデックス・レジスタの値を記憶するスタックを更に備えたことを特徴とする請求項１４から１６のいずれかに記載の再構成可能プロセッサ。
【請求項１８】
コンピュータに実行させ再構成可能プロセッサの命令セット・アーキテクチャ（以下、ＩＳＡ）を生成するコンピュータ・プログラムであって、
前記コンピュータ・プログラムは、高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出するステップと、
前記抽出した命令パターンとライブラリに格納されているカスタム命令のパターンとを比較するステップと、
前記抽出した命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換するステップと
をコンピュータに実行させるＩＳＡを生成するコンピュータ・プログラム。
【請求項１９】
コンピュータに実行させ動的再構成可能プロセッサの論理回路構成情報を生成するコンピュータ・プログラムであって、
前記コンピュータ・プログラムは、高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出するステップと、
前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較するステップと、
前記抽出された命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換するステップと、
前記命令セットに含まれるカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報と前記再構成可能プロセッサのプログラマブル・エレメント（以下、ＰＥ）の配置配列情報とから、論理回路構成情報を生成するステップと
をコンピュータに実行させる論理回路構成情報を生成するコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定用途向けのカスタムＬＳＩを設計、開発及び製造する技術に関し、特に、高級言語で記述されたアプリケーション・プログラムから命令セット・アーキテクチャ（Instruction Set Architecture、以下、ＩＳＡという。）と、かかるアプリケーション・プログラムを実行するプロセッサの一連の論理回路構成情報を生成する技術に関する。また、生成したＩＳＡと論理回路構成情報とを動的に再構成可能プロセッサに適用することにより、短期間に特定用途向けカスタムＬＳＩを設計、開発及び製造可能ならしめるカスタムＬＳＩ開発プラットフォーム技術に関する。
【背景技術】
【０００２】
特定用途向け集積回路（Application Specific Integrated Circuit：ＡＳＩＣ）を含むカスタムＬＳＩを使用する分野においては、仕様変更や製品の開発期間を短縮するため、プロセッサ内部の論理回路の構成を自由に変更できる、フィールド・プログラマブル・ゲート・アレイ（Field Programmable Gate Array：FPGA）や、プログラマブル・ロジック・デバイス（Programmable Logic Device：PLD）などのプログラマブル論理回路が広く用いられている。
【０００３】
しかし、カスタムＬＳＩに要求される論理回路構成は複雑となり、規模も増大しているため、多数の算術論理ユニット（Arithmetic and Logic Unit：ＡＬＵ）をＦＰＧＡやＰＬＤに組み込まなくてはならないという問題がある。
【０００４】
規模が増大した論理回路においても、その全てが常に動作している訳ではないことに着目し、動的にプロセッサの論理回路を再構成する、動的再構成可能プロセッサが、例えば下記の特許文献１、特許文献２において提案されている。
【０００５】
カスタムＬＳＩのシステム設計・開発を行う際、どこまでをハードウェアで実現し、どこまでをソフトウェアで実現するかという機能分割は大きな問題である。アプリケーションの全てをハードウェアで実現できれば、動作速度、低消費電力性を実現できる。しかし、設計・開発にかかる、１）チップ製造費、２）設計期間、３）ハードウェア設計者の確保等のコストは大きくなる。
【０００６】
逆に全てを汎用プロセッサ上で動作するソフトウェアで実現すると、要求されるシステム性能を満たすことは難しいが、設計・開発コストは小さくて済むという利点がある。
【０００７】
ソフトウェア開発者がカスタムＬＳＩを開発する上での課題として、カスタムＬＳＩの仕様を記述するのに「Verilog-HDL」や「VHDL」といったソフトウェア開発者にはなじみ
の薄いハードウェア記述言語（ＨＤＬ）を利用しなければならないという問題がある。かかるＨＤＬのコードは記述量が多いことから作成に時間がかかる上、コンパイルやシミュレーションにかかる時間も長いという問題がある。
【０００８】
ＬＳＩに実装するアルゴリズムの検討には、Ｃ言語のように抽象度の高い高級言語や、モデリング・ツールを使うことが多い。しかし、高級言語で作成したアルゴリズムを使って論理回路を作成するには、検討したアルゴリズムをＨＤＬで書き直す必要があり、これには多くの時間がかかるという問題がある。しかも、いったんＨＤＬで論理回路構成を記述するとアルゴリズムを変更しにくいという問題もある。
【０００９】
更に、動作合成の段階でハードウェア特有の制限を考慮しなければならないことも、ソフトウェア開発者にとっては大きな障壁となっている。
【特許文献１】特開２００３−１９８３６２号公報
【特許文献２】特開２００３−０２９９６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
そこで、本発明の課題は、ソフトウェア開発者が高級記述言語、例えばＣ言語でアプリケーション・プログラムを作成すれば、これに基づいてＩＳＡ及び論理回路構成情報が自動的に生成され、生成されたＩＳＡ及び論理回路構成情報が再構成可能プロセッサに自動的に反映され、これにより準汎用的に製造する再構成可能プロセッサをカスタムＬＳＩとして作成可能なカスタムＬＳＩ開発プラットフォームを提供することにある。
【００１１】
また、本発明の他の課題は、高級記述言語、例えばＣ言語で作成されたアプリケーション・プログラムから、ＩＳＡ及び論理回路構成情報を生成するソフトウェアプログラム、及び生成されたＩＳＡと論理回路構成情報とが自動的に反映される再構成可能プロセッサを提供することにある。
【００１２】
また、本発明の他の課題は、高級記述言語、例えばＣ言語で作成されたアプリケーション・プログラムから、ＩＳＡ及び論理回路構成情報を生成するプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
（１）本発明は、高級言語で記述されたプログラム（以下、ソースプログラム）から命令セット・アーキテクチャ（以下、ＩＳＡ）を自動生成する手段（以下、ＩＳＡジェネレータ）を含むソフトウェアプログラムと、前記生成されたＩＳＡに対応して論理回路を再構成する手段を含む再構成可能プロセッサとを備えたカスタムＬＳＩ開発プラットフォームであって、前記ＩＳＡジェネレータは、ソースプログラムの命令のパターンを抽出する手段と、前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、前記抽出した命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換する手段とを備えたことを特徴とする。
【００１４】
（２）前記ソフトウェアプログラムが、前記再構成可能プロセッサの論理回路を構成するプログラマブル・エレメント（以下、ＰＥ）の配置配列情報と前記生成されたＩＳＡとから前記プロセッサの論理回路構成情報を生成する論理回路構成ジェネレータを備えることは好ましい。
【００１５】
（３）前記ソフトウェアプログラムが、前記生成されたＩＳＡを前記再構成可能プロセッサの実行可能可能なコード（以下、プログラム・オブジェクトコード）に変換する手段と、前記論理回路構成情報を前記再構成可能プロセッサの実行可能可能なコード（以下、論理回路構成・オブジェクトコード）に変換する手段とを備えることは好ましい。
【００１６】
（４）前記再構成可能プロセッサが、前記プログラム・オブジェクトコードと前記論理回路構成・オブジェクトコードとに基づいて、ＰＥを再配置し論理回路を再構成する手段を備えることは好ましい。
【００１７】
（５）前記ＩＳＡジェネレータが、ライブラリに格納されているカスタム命令を呼び出すファンクションコール手段と、前記プロセッサの制御命令とを含む中間コードを生成する手段とを備えることは好ましい。
【００１８】
（６）前記プログラム・オブジェクトコードと前記論理回路再構成・オブジェクトコードに基づいて、前記再構成可能プロセッサが前記ソースプログラムを実行するパフォーマンスをシミュレートする手段を備えることは好ましい。
【００１９】
（７）前記抽出した命令をカスタム命令に置換するプロセスにおいて、カスタム命令に置き換えられなかった命令を新たなカスタム命令として生成する手段を備えることは好ましい。
【００２０】
（８）本発明は、再構成可能プロセッサの命令セット・アーキテクチャ（以下、ＩＳＡ）の生成方法であって、高級言語で記述されたプログラム（以下、ソースプログラム）の命令のパターンを抽出し、前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、前記抽出した命令をカスタム命令、及び／又はカスタム命令の組み合わせで置換し、前記再構成可能プロセッサ用のＩＳＡを生成することを特徴とする。
【００２１】
（９）置換されたカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報を抽出し、該論理素子接続情報を含んでＩＳＡを生成することは好ましい。
【００２２】
（１０）前記プロセッサが動的再構成可能プロセッサであることは好ましい。
【００２３】
（１１）前記抽出した命令をカスタム命令、及び／又はカスタム命令の組み合わせで置換するプロセスにおいて、前記ソースプログラムの命令中、カスタム命令に置換できなかった命令を、新たなカスタム命令として定義するとともに前記ライブラリに追加し、カスタム命令の再抽出を行うことは好ましい。
【００２４】
（１２）本発明は、再構成可能プロセッサの論理回路構成情報の生成方法であって、高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出し、前記抽出された命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較し、前記抽出された命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換し、前記抽出したカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報と、前記プロセッサのプログラマブル・エレメント（以下、ＰＥ）の配置配列情報とから、論理回路構成情報を生成することを特徴とする。
【００２５】
（１３）前記再構成可能プロセッサが、動的再構成可能プロセッサであることは好ましい。
【００２６】
（１４）本発明は、（３）に記載のプログラム・オブジェクトコードと前記論理回路構成・オブジェクトコードとを実行する手段を備えたことを特徴とする再構成可能プロセッサである。  
【００２７】
（１５）（１４）に記載の再構成可能プロセッサは、動的再構成可能論理回路と、前記動的再構成可能論理回路を構成するプログラマブル・エレメント（以下、ＰＥ）の命令毎の配置配列情報を記憶するコンフィギュレーション・メモリと、命令の実行の中間結果を一時的に保持するレジスタ・ファイルと、命令を保持するメモリと、命令の実行順序を含むプロセッサの管理を行うコントローラとを備えることは好ましい。
【００２８】
（１６）前記コントローラは、前記メモリにアクセスするときのインデックスを記憶するインデックス・レジスタを備えることは好ましい。
【００２９】
（１７）前記インデックス・レジスタの値を記憶するスタックを更に備えることは好ましい。
【００３０】
（１８）本発明は、コンピュータに実行させ再構成可能プロセッサの命令セット・アーキテクチャ（以下、ＩＳＡ）を生成するコンピュータ・プログラムであって、前記コンピュータ・プログラムは、高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出するステップと、前記抽出した命令パターンとライブラリに格納されているカスタム命令のパターンとを比較するステップと、前記抽出した命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換するステップとをコンピュータに実行させるＩＳＡを生成することを特徴とするコンピュータ・プログラムである。
【００３１】
（１９）本発明は、コンピュータに実行させ動的再構成可能プロセッサの論理回路構成情報を生成するコンピュータ・プログラムであって、前記コンピュータ・プログラムは、高級言語で記述されたプログラム（以下、ソースプログラム）の命令パターンを抽出するステップと、前記抽出した命令のパターンとライブラリに格納されているカスタム命令のパターンとを比較するステップと、前記抽出された命令を前記カスタム命令、及び／又はカスタム命令の組み合わせで置換するステップと、前記命令セットに含まれるカスタム命令と関連付けられてライブラリに格納されている論理素子接続情報と前記再構成可能プロセッサのプログラマブル・エレメント（以下、ＰＥ）の配置配列情報とから、論理回路構成情報を生成するステップとをコンピュータに実行させ論理回路構成情報を生成することを特徴とするコンピュータ・プログラムである。
【発明の効果】
【００３２】
本発明によれば、ソフトウェア開発者は、ハードウェアの特徴に関する部分を意識することなく、アプリケーション（コンピュータプログラム）を開発できる。その結果、開発に要する全体的な実行サイクル数を減らすことができ、所望の用途に特化したＬＳＩを短期間に開発できる。
【００３３】
また、カスタムＬＳＩを開発する資産の共通化（プラットフォーム化）が可能となり、設計・開発資産の標準化を図ることができる。
【発明を実施するための最良の形態】
【００３４】
［用語の定義］
本明細書において、動的論理回路再構成可能プロセッサとは、動的にプロセッサ内部の論理回路を命令に従い、再構成しながら処理を行う機能を備えたプロセッサをいう。
【００３５】
カスタムＬＳＩとは、ニーズに合わせて設計、製造された特定用途向け集積回路（Application Specific Integrated Circuit：ＡＳＩＣ）を含むＬＳＩをいう。
【００３６】
カスタム命令とは、プロセッサが実行する命令であって、ユーザが定義した命令である。
【００３７】
命令セットとは、インストラクションセット （Instruction Set：ＩＳ）ともいい、プロセッサが備えるカスタム命令の集合である。
【００３８】
命令セット・アーキテクチャ （Instruction Set Architecture：ＩＳＡ）は、命令セットとプロセッサの論理回路構成情報を生成するのに必要な論理素子接続情報とからなる。
【００３９】
論理素子接続情報とは、例えば、ＡＮＤ回路の次にＯＲ回路、その次にＸＯＲ回路といった情報が定義されている情報である。従って、再構成可能プロセッサの論理回路上で、ＡＮＤ回路をどこに配置し、ＯＲ回路やＸＯＲ回路をどこに配置し、それらをどの配線を使って接続するのかという情報は含まれない。
【００４０】
カスタム論理回路とは、カスタム命令を実現する論理回路をいい、汎用プロセッサ上では性能上の理由等で実現しない、あるいは実現することができない回路や機能のことである。
【００４１】
プラットフォームとは、異なるカスタム論理回路を実現するために利用可能な共通のハードウェア（再構成可能プロセッサ）とソフトウェアプログラムとで構成されるシステムである。
【００４２】
データ・パスとは、カスタム命令を実行するプロセッサの論理回路である。
【００４３】
プログラマブル・エレメント（Programmable Element）とは、ＡＮＤ回路、ＯＲ回路、ＸＯＲ回路、あるいはＡＬＵ等の論理回路を構成する素子である。
【００４４】
図１は本発明のカスタムＬＳＩ開発プラットフォーム１の全体構成ブロック図を示したものである。カスタムＬＳＩ開発プラットフォーム１は、再構成可能プロセッサ２０と、ソフトウェアプログラム１０とで構成される。
【００４５】
ソフトウェアプログラム１０は、再構成可能プロセッサ２０のＩＳＡ、及び再構成可能プロセッサ２０内の再構成可能論理回路２４（リコンフィギュラブル・データ・パス）をカスタム命令毎に動的に変更させるための論理回路構成情報等を生成する一連のプログラムから構成されている。
【００４６】
ソフトウェア開発者がＣ言語でソースプログラム１００を記述すると、ＩＳＡジェネレータ１１０は、中間コード１１１とＩＳＡ１１２とを生成し、これらをコンパイル等することにより、プログラム・オブジェクトコード１４１と論理回路構成・オブジェクトコード１４２とを生成する。
【００４７】
再構成可能プロセッサ２０は、プログラム・オブジェクトコード１４１及び論理回路構成・オブジェクトコード１４２に基づいて、再構成可能論理回路２４をカスタム命令毎に変化させながら入力データ２７を演算処理し、最終的な結果としてデータ２８を出力する。
【００４８】
図２は、ソフトウェアプログラム１０の詳細ブロック図を示したものである。Ｃソースプログラム１００が与えられると、ＩＳＡジェネレータ１１０が起動し、Ｃソースプログラム１００の命令構造を解析する。なお、ライブラリ１６０には、事前に定義された複数のカスタム命令が格納されている。
【００４９】
ＩＳＡジェネレータ１１０は、Ｃソースプログラム１００中で使われている命令のパターン、あるいは繰り返し使われている命令のパターンを抽出し、ライブラリ１６０内のカスタム命令のパターンと比較し、Ｃソースプログラム１００内の命令をカスタム命令に置換し、中間コード１１１とＩＳＡ１１２とを生成する。
【００５０】
中間コード１１１は、カスタム命令のファンクションコールと制御命令とから成り、ＩＳＡ１１２は、カスタム命令と論理素子接続情報とから成る。
【００５１】
中間コード１１１は、コンパイラ１２０によりアセンブラコード１２１にコンパイルされた後、アセンブラ１４０によりプログラム・オブジェクトコード１４１となる。なお、コンパイラ１２０は、中間コード１１１と、ＩＳＡ１１２のカスタム命令、例えば乗算は“×”で定義されているといったカスタム命令を、アセンブラコード１２１にコンパイルするものである。
【００５２】
ＩＳＡ１１２のカスタム命令は、コンパイラ１２０により中間コード１１１とともにアセンブラコード１２１に変換された後、アセンブラ１４０によりプログラム・オブジェクトコード１４１となる。
【００５３】
論理回路構成ジェネレータ１３０は、ＩＳＡ１１２の論理素子接続情報と、再構成可能論理回路２４のプログラマブル・エレメント（ＰＥ）の配置配列情報１３１０とから、論理回路構成情報１３１１を生成し、これをアセンブラ１４０により論理回路構成・オブジェクトコード１４２に変換する。
【００５４】
図３はＩＳＡジェネレータ１１０の詳細ブロック図を示したものである。図３に示すパターニング・モジュール１１１０は、ライブラリ１６０を参照しながら、Ｃソースプログラム１００中に使われている命令、あるいは繰り返し使われている命令を抽出し、抽出した命令のパターンとライブラリ１６０に格納されているカスタム命令のパターンとを比較し、一致する命令をカスタム命令で置換する。
【００５５】
パターニング・モジュール１１１０によりカスタム命令として抽出されなかった（事前にカスタム命令として用意されていなかった）雑多な命令は、クリエータ１５０により新たに定義し作成するか、既存のカスタム命令に合成可能であれば合成し、新たなカスタム命令として定義する。ライブラリ１６０中のカスタム命令は、カスタム命令の追加、合成により常に更新される。
【００５６】
パターンニング・モジュール１１１０は、Ｃソースプログラム全体が実行可能になるまで、Ｃソースプログラムの命令をカスタム命令に置き換える。また、パターンニング・モジュール１１１０は論理素子接続情報（カスタム命令と関連付けられてライブラリ１６０に格納されている。）と、ＰＥの配置配列情報とを参照して、カスタム命令毎に再構成可能論理回路２４の論理回路構成情報を生成する。
【００５７】
図４は本発明の一実施の形態である再構成可能プロセッサ２０のブロック図を示したものである。動的再構成可能プロセッサ２０は、リコンフィギュラブル・データ・パス（再構成可能論理回路）２４を備え、順序制御によりプログラムを実行するプロセッサである。この再構成可能プロセッサ２０は、１ステップ毎に論理回路構成の再設定を行いながら、Ｃソースプログラム１００の処理内容を実行する。なお、ステップとは、論理回路構成の設定と演算の実行を合わせた、一命令の実行にかかる期間である。また、論理回路構成情報とは、カスタム命令を実行するための再構成可能な論理回路の構成情報である。
【００５８】
再構成可能プロセッサ２０は、コントローラ２１、スタック２２、コンフィギュレーション・メモリ２３、リコンフィギュラブル・データ・パス２４、レジスタ・ファイル２５、及びメモリ２６を備える。
【００５９】
コントローラ２１は、コンフィギュレーション・データのロード、メモリ２６内のデータのロードなど、再構成可能プロセッサ２０の全体管理を行う。内部には２２ビットのインデックス・レジスタ２１１を７つ備え、インデックス・レジスタ２１１内の値を用いてメモリ２６にアクセスすることができる。また、インデックス・レジスタ２１１内の値を格納するスタック２２と接続している。
【００６０】
メモリ２６は、再構成可能プロセッサ２０の命令を保持する記憶装置である。
【００６１】
図５は、メモリ２６が保持する命令フォーマットの構成を示した図である。
【００６２】
図５中、Exe_Non欄では、命令をリコンフィギュラブル・データ・パス２４により演算
を行う場合、あるいはリコンフィギュラブル・データ・パス２４によらずにインデックス・レジスタ２１１内の値の操作のみを行う場合のどちらを選択するかを指示するものである。
【００６３】
リコンフィギュラブル・データ・パス２４で演算を行う命令の場合は、適切なコンフィギュレーション・データが格納されているコンフィギュレーション・メモリ２３のアドレスと演算に用いるレジスタ・ファイル２５とを指定する。インデックス・レジスタ２１１内の値を操作する命令の場合は、操作内容と操作に用いるインデックス・レジスタ２１１とを指定する。
【００６４】
Dt_Adr欄に例えばメモリアドレスを指定すれば、メモリ２６とインデックス・レジスタ２１１間のデータのやり取りを行わせることができる。
【００６５】
Flow_Code欄では、プログラムの実行順序制御を指定することができ、ここで、分岐条
件の指定を行えば、リコンフィギュラブル・データ・パス２４での演算結果を用いて処理を分岐させることも可能である。
【００６６】
Dt_Adrは絶対アドレスの指定に用い、Rel_Adr欄は相対アドレスの指定に用いる。
【００６７】
Work_Rateは、リコンフィギュラブル・データ・パス２４での処理を行う際のクロック
・サイクル数を処理内容によって、１，２，４，８クロック・サイクルに指定することに用いることができる。
【００６８】
コンフィギュレーション・メモリ２３は、コンフィギュレーション・データを格納するメモリである。カスタム命令のコンフィギュレーションを１２８個まで保持することができる。
【００６９】
レジスタ・ファイル２５は、リコンフィギュラブル・データ・パス２４の各ＰＥでの演算結果を保存し、異なるファンクションに引き渡すレジスタである。１ワードは２５６ビット幅である。レジスタ・ファイル２５は、リコンフィギュラブル・データ・パス２４のＰＥに接続されており、データが出力されるＰＥの位置によって、格納されるレジスタ・ファイル２５中のビット位置が決定される。
【００７０】
図６は、リコンフィギュラブル・データ・パス２４の構成の一実施形態を示したものである。リコンフィギュラブル・データ・パス２４は、ＰＥが１６行８列で配置されている。ＰＥは６入力２出力であり、入力に対して任意の論理関数を割り当てることができる。各ＰＥ間は、垂直ライン（ＶＬ：Vertical Line）と水平ライン（ＨＬ：Horizontal Line）で接続されている。
【００７１】
ＶＬが一列の各ＰＥに接続しており、各ＶＬはＨＬで接続されている。ＶＬからＨＬ、あるいはＨＬからＶＬへの信号受け渡しはスイッチ部（ＳＷ）が制御している。ＶＬは６４ビット幅で８本、ＨＬは６４ビット幅で７本である。また、メモリからコンフィギュラブル・データ・パス２４へは一度に６４ビットのデータをロードすることができる。
【００７２】
この再構成可能プロセッサ２０は、まずコントローラ２１がメモリ２６からプログラムを読み出し、リコンフィギュラブル・データ・パス２４を使う命令か、それともインデックス・レジスタ２１１内の値のみを操作する命令かの判断をする。
【００７３】
リコンフィギュラブル・データ・パス２４を使う場合、コントローラ２１がプログラム中に指定されたコンフィギュレーション・メモリ２３のアドレスから適切なコンフィギュレーション・データを読み出し、このデータをリコンフィギュラブル・データ・パス２４にロードする。
【００７４】
リコンフィギュラブル・データ・パス２４は、コンフィギュレーション（論理回路構成）が確定すると、入力データに対して処理を行う。各ＰＥで実行された演算結果はＶＬに出力されるとともにレジスタ・ファイル２５に書き込むことができる。中間結果として別のファンクションにデータを引き渡して使うことができる。レジスタ・ファイル２５を用いることで大きな処理を複数ファンクションに分割して実行することができる。
【００７５】
インデックス・レジスタ２１１内の値を用いる場合は、インデックス・レジスタ２１１内に演算回路が用意されているので、プログラム中に指定された操作を演算回路で行い、次の命令に遷移する。
【実施例１】
【００７６】
本発明の一実施の形態であるソフトウェアプログラム１０と、再構成可能プロセッサ２０とを用いて、ＡＥＳ（Advanced Encryption Standard）の暗号化用カスタムＬＳＩを開発した。
【００７７】
ＡＥＳはＤＥＳ（Data Encryption Standard）に代わる標準暗号化方式として選定されているものである。Ｃ言語で作成したＡＥＳのプログラムからＩＳＡを生成するとともに、ＡＥＳ暗号化処理を再構成可能プロセッサ２０に実装し性能評価を行った。
【００７８】
ＡＥＳでは、平文のビット数や鍵のビット数を選択可能であるが、この実施例では両者とも１２８ビットとした。
【００７９】
図７にＡＥＳ暗号化の処理の流れを示す。先ず、Stateと呼ばれる、２次元配列のデータ形式平文を配置する。ラウンド鍵を生成し（Ｓ１）、Stateとラウンド鍵とで排他的論理和をとる（Ｓ２）。ラウンド関数を規定回数実行する。この実施例においては次の条件で９回実行した。ラウンド関数は次の４つの変換で実行する。まず、８ビット入力８ビット出力のいわゆるs-box変換処理（バイト・サブ（Byte-Sub）)を実行する（Ｓ３）。
【００８０】
次に、行に対してバイト単位の周期的シフトを施すシフト・ロウ（Shift-Row）を実行する（Ｓ４）。次に、列ごとの行列演算の実行であるミックス・コラム（Mix-Column）を行う（Ｓ５）。そして、そのStateとラウンド鍵とで排他的論理（Add-Round-key）を実行する（Ｓ６）。Ｓ３からＳ６のステップを９回繰り返し実行する。
【００８１】
そして、最後にバイト・サブ（Byte-Sub）（Ｓ７）、シフト・ロウ（Shift-Row）（Ｓ８）、ラウンド鍵処理（Add-Round-Key）（Ｓ９）を実行し、暗号文（Encrypted）を得る（Ｓ１０）。
【００８２】
暗号化処理の中心となるのは、バイト・サブ（Byte-sub）やシフト・ロウ（Shift-Row）、ミックス・コラム（Mix-Column）、ラウンド鍵処理（Add-Round-Key）の４つの変換処理である。これら４つの変換処理を実現するにあたり、各変換処理を実現するためのカスタム命令を作成した。
【００８３】
この実施例においては、バイト・サブ（Byte-Sub）は３２ビット、シフト・ロウ（Shift-Row）は１２８ビット、ミックス・コラム（Mix-Column）は６４ビット、ラウンド鍵処理（Add-Round-Key）は１２８ビットずつの単位に分けて処理を行う実装をした。このため、それらの前後でデータの分割、結合などを行うための命令も追加した。
【００８４】
図８、図９はバイト・サブ（Byte-sub）、シフト・ロウ（Shift-Row）、ミックス・コラム（Mix-Column）、ラウンド鍵処理（Add-Round-Key）を含むＣ言語で記述したＡＥＳの暗号化処理の中間コード１１１の記述例である。
【００８５】
図８、図９に示すように、ＡＥＳ暗号化のメインルーチンは、「Encrypt」関数である。図８の中間コード中、カスタム命令は、先頭に「vu1_」がつている箇所である。
【００８６】
これにより、全体処理で３０９サイクル、暗号化の処理部分で７９サイクルの結果が得られた。
【実施例２】
【００８７】
ＤＥＳは米国商務省標準局で標準化されている暗号規格である。暗号化と復号化に同じ鍵を使用する共通鍵暗号で、６４ビットの平文と５６ビットの鍵を入力することによって、暗号文６４ビットを出力する。
【００８８】
ＤＥＳの暗号化処理では、まず６４ビットのビット列を入力し、それに対して、転置表を元に初期転置を行う。転置したビット列を３２ビットずつ分割する。分割したビット列をそれぞれ鍵と暗号化関数Ｆで暗号化する。鍵は入力した５６ビット鍵から生成された４８ビットのラウンド鍵を使用する。
【００８９】
この処理を１６回行い、作成した左右ビット列を結合して最終転置を行い、その結果が暗号文として出力される。
【００９０】
図１０はＤＥＳ暗号化処理のフローチャートを示したものである。動的論理回路再構成可能プロセッサ２０上でのＤＥＳ暗号化処理には、カスタム命令を６つ必要とした。
【００９１】
表１は、ＤＥＳ暗号化処理に用いたカスタム命令とその内容を示したものである。
【００９２】
【表１】
2006185423.tif 000003
【００９３】
先ず、命令０で鍵５６ビットをメモリからリコンフィギュラブル・データ・パス２４に入力し同時に転置を行う。同様に命令１で平文６４ビットを入力し、同時に初期転置を行う。次にラウンド回数によって、命令２、あるいは命令３で鍵の循環シフトを行う。命令４では鍵の縮約転置および暗号化Ｆ関数を一命令で行う。
【００９４】
各命令間のデータの授受は全てレジスタ・ファイル２５を介して行っている。このラウンドを１６回繰り返す。図１０では繰り返しが条件分岐処理になっているが、本実施例では繰り返しは展開して逐次処理を行った。これは条件分岐処理で実行するにはラウンド回数を判定するための回路を余分につくる必要があり、設計する回路規模を縮小するためである。最後に初期転置の逆の転置を行い、暗号文６４ビットをメモリに出力する。
【００９５】
表２は、再構成可能プロセッサ２０でＤＥＳ暗号化処理を行った際の動作周波数とスループットを示したものである。
【００９６】
【表２】
2006185423.tif 000004
【００９７】
この実施例ではＤＥＳ暗号化処理の動作周波数は6.25MHZであった。比較対象として、Intel Pentium（登録商標）４上でＤＥＳ暗号化処理を行った際の結果も表２に示す。Intel Pentium（登録商標）４上へのＤＥＳ暗号化処理の実装は、Ｃ言語によってＤＥＳ暗号
化処理の仕様を忠実に記述したものをコンパイルすることによって行った。コンパイルオプションには−Ｏ２を用いた。
【００９８】
表２から再構成可能プロセッサ２０上でのＤＥＳ暗号化処理は、Intel Pentium（登録商標）４上でのＤＥＳ暗号化処理よりも３．８倍高い性能を示した。これは、動的再構成可能プロセッサ２０の構成要素であるＰＥが入力に対して１ビット単位で任意の論理関数を割り当てることが可能であるとう特徴をＤＥＳ暗号化処理に生かすことができたためである。
【００９９】
ＤＥＳ暗号化処理では、１ビット単位での転置や換字を繰り返す。Intel Pentium（登録商標）４などの３２ビットマイクロプロセッサでは、１ビット単位で処理を行う際には、１ビットを取り出す処理が必要となる。動的再構成可能プロセッサ２０のＰＥは１ビット単位の転置処理では、データをレジスタ・ファイル２５からリコンフィギュラブル・データ・パス２４に取り込み、指定のビット位置に移動させて再びレジスタ・ファイル２５に格納する。これによって、大量のデータの転置処理が一命令で可能となった。
【０１００】
また、ＰＥでは入力に対して任意の論理関数を割り当てることができるので、データ依存関係のある複数の処理を合成し、一命令で実行することによって、実行クロック・サイクル数を削減することが可能であった。リコンフィギュラブル・データ・パス２４上でのＤＥＳ暗号化処理において、平文６４ビットの暗号化に要したクロック・サイクル数は７０サイクルであった。
【産業上の利用可能性】
【０１０１】
本発明は、カスタムＬＳＩの設計及び開発を行う場合のプラットフォームとして利用することができる。また、アプリケーションに特化したカスタムＬＳＩの製造に利用することもでき、産業上の利用可能性がある。
【図面の簡単な説明】
【０１０２】
【図１】本発明のカスタムＬＳＩ開発プラットフォーム１の全体構成ブロック図である。
【図２】ソフトウェアプログラム１０の詳細ブロック図を示したものである。
【図３】ＩＳＡジェネレータ１１０の詳細ブロック図を示したものである。
【図４】本発明の一実施の形態である再構成可能プロセッサ２０のブロック図を示したものである。
【図５】命令フォーマットの構成を示した図である。
【図６】リコンフィギュラブル・データ・パス２４の構成の一実施形態を示したものである。
【図７】ＡＥＳ暗号化の処理の流れを示した図である。
【図８】ＡＥＳの暗号化処理の中間コードの記述例である。
【図９】ＡＥＳの暗号化処理の中間コードの記述例である。
【図１０】ＤＥＳ暗号化処理のフローチャートを示したものである。
【符号の説明】
【０１０３】
１  カスタムＬＳＩ開発プラットフォーム  
１０  ソフトウェアプログラム  
２０  再構成可能プロセッサ  
２１  コントローラ
２２  スタック
２３  コンフィギュレーション・メモリ
２４  再構成可能論理回路（リコンフィギュラブル・データ・パス）
２５  レジスタ・ファイル
２６  メモリ
１００  Ｃソースプログラム  
１１０  ＩＳＡジェネレータ
１１１  中間コード
１１２  命令セット・アーキテクチャ（ＩＳＡ）
１３０  論理回路構成ジェネレータ
１３１  論理回路構成情報
１４１  プログラム・オブジェクトコード
１４２  論理回路構成・オブジェクトコード
１６０  ライブラリ
【図１】
2006185423.tif 000005
【図２】
2006185423.tif 000006
【図３】
2006185423.tif 000007
【図４】
2006185423.tif 000008
【図５】
2006185423.tif 000009
【図６】
2006185423.tif 000010
【図７】
2006185423.tif 000011
【図８】
2006185423.tif 000012
【図９】
2006185423.tif 000013
【図１０】
2006185423.tif 000014