(57)【特許請求の範囲】
【請求項１】
集積回路を設計するために使用される動作合成ツールにおいて、配列レイアウトを再構成する方法であって、
前記集積回路に関連するソースコード記述を前記動作合成ツールに読み込むステップであって、前記ソースコード記述は複数の配列を定義する、ステップと、
前記動作合成ツール内の前記ソースコード記述に関連するデータを記憶する中間データ構造を生成するステップであって、前記中間データ構造は、前記集積回路内に存在する可能性のある各メモリリソースに関連するメモリ割り当て制約条件を格納する複数のフィールドと、前記ソースコード記述により定義される前記複数の配列の各々に関連するメモリ割り当て制約条件を格納する複数のフィールドとを含み、前記複数の配列の前記選択された１つに関連する前記メモリ割り当て制約条件は、前記配列の前記選択された１つが第１のレイアウト形式に従って１つ又は複数のメモリリソースに割り当てられるべきであることを示す、ステップと、
前記集積回路のレジスタ転送レベル記述が合成される前にユーザが前記配列の前記選択された１つに関連する前記メモリ割り当て制約条件の任意の１つ又は複数を修正することにより前記中間データ構造を修正することを可能にする、グラフィックユーザインターフェースを提供するステップであって、前記グラフィックユーザインターフェースは、前記配列の前記選択された１つの名前及び前記配列の前記選択された１つに関連する前記メモリ割り当て制約条件を表示する、ステップと、
前記グラフィックユーザインターフェースを介して、前記配列の前記選択された１つに関連する前記メモリ割り当て制約条件の２つ又はそれ以上に対するユーザによる修正を受け取るステップと、
前記ユーザによる修正に応答して、前記集積回路の前記レジスタ転送レベル記述が合成される前に、前記配列の前記選択された１つについて配列レイアウトを前記第１のレイアウト形式から第２のレイアウト形式に変換し、前記ユーザによる修正に基づいて、前記集積回路の面積及びタイミングの解析を前記ユーザに対して表示するステップと
を含み、前記第１のレイアウト形式及び前記第２のレイアウト形式は前記配列の前記選択された１つを前記集積回路に実装する方法に関連し、前記変換するステップは前記配列の前記選択された１つをメモリリソースにパックするステップを含み、前記パックするステップは、以下の、
前記配列の前記選択された１つの単一のワードを前記メモリリソースの複数のワードにパックするステップ、
前記配列の前記選択された１つを前記メモリリソースにインターレーシング形式でパックするステップ、
前記配列の前記選択された１つを前記メモリリソースにおけるユーザにより選択されたロケーションにパックするステップ、又は
前記配列の前記選択された１つを前記メモリリソースの配列のユーザにより選択されたワード内のユーザにより選択されたビットロケーションにパックするステップ
のうちの少なくとも１つをさらに含む方法。
【請求項２】
請求項１に記載の方法であって、前記グラフィックユーザインターフェースは、前記複数の配列のうちの任意の１つに関連するメモリ割り当て制約条件をユーザに修正させる方法。
【請求項３】
請求項１に記載の方法であって、前記メモリ割り当て制約条件の１つは、配列をメモリリソースにパックする形式を指定する方法。
【請求項４】
請求項３に記載の方法であって、前記指定された形式はさらに、可能なメモリ割り当てエラーを訂正する方法を表現する方法。
【請求項５】
請求項１に記載の方法であって、前記集積回路内に存在する可能性のある各メモリリソースに関連する前記メモリ割り当て制約条件の少なくとも１つは、前記メモリリソースがオンチップになるかオフチップになるか、前記メモリリソースがシングルポートになるかマルチポートになるか、あるいは前記メモリリソースが同期式になるか非同期式になるかというメモリリソースのタイプのうちの少なくとも１つを指定する方法。
【請求項６】
請求項１乃至５のうちいずれか１項に記載の方法を実行するコンピュータ実行可能命令を有するコンピュータ読取り可能媒体。
【請求項７】
集積回路の設計における、対話的なメモリ割り当てを可能にする合成ツールであって、
ソースコード記述ファイルに関連するデータを記憶する中間データ構造を記憶する第１のメモリであって、前記ソースコード記述ファイルは、集積回路の機能を記述し且つ複数の配列を定義し、前記中間データ構造は、前記集積回路内に存在する可能性のある各メモリリソースに関連するメモリ割り当て制約条件を格納する複数のフィールドと、前記ソースコード記述により定義される前記複数の配列の各々に関連するメモリ割り当て制約条件を格納する複数のフィールドとを含む、第１のメモリと、
前記集積回路のレジスタ転送レベル記述が生成される前に、ユーザが前記配列の選択された１つに関連する複数のメモリ割り当て制約条件を対話的に修正し且つ前記ユーザによる修正に基づく前記集積回路の面積及びタイミングの解析を見ることを可能にする、グラフィックユーザインターフェースと
を含み、前記ユーザによる修正により、前記配列の前記選択された１つに関連したレイアウト形式が第１のレイアウト形式から第２のレイアウト形式に変換され、前記第１のレイアウト形式及び前記第２のレイアウト形式は前記配列の前記選択された１つが前記集積回路のメモリにおいてどのように割り当てられるかに関連し、
第１のレイアウト形式から第２のレイアウト形式への前記変換は、
前記配列の前記選択された１つを前記メモリにインターレーシング形式でパックするステップ、
前記配列の前記選択された１つを前記メモリにおけるユーザにより選択されたロケーションにパックするステップ、又は
前記配列の前記選択された１つを前記メモリのユーザにより選択されたワード内のユーザにより選択されたビットロケーションにパックするステップ
のうちの少なくとも１つを含む合成ツール。
【請求項８】
請求項７に記載の合成ツールであって、前記合成ツールは、どのようにして前記複数の配列の任意の１つが前記集積回路の前記メモリにパックされるかをユーザが修正できるようにする合成ツール。
【請求項９】
請求項７に記載の合成ツールであって、前記メモリ割り当て制約条件の１つは、前記メモリ割り当て制約条件の前記１つに関連する前記配列の前記選択された１つをどのようにしてパックするかを決定するモードを指定する合成ツール。
【請求項１０】
請求項９に記載の合成ツールであって、前記指定されたモードはさらに、可能なメモリ割り当てエラーを訂正する方法を表現する合成ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、集積回路を開発するための動作合成ツールに関し、より詳細には、メモリに対する配列の改善されたパッキング（packing）を実現する動作合成ツールに関する。
【背景技術】
【０００２】
音声処理、画像処理およびビデオ処理などデータ集約的な用途の普及と共に、メモリ・サブシステムが、電子システム設計の重要な関心の的になってきている。データ集約的なシステムの４分の３以上が、記憶構成要素からなる可能性があり、これにより、メモリ・サブシステムが集積回路の設計における最も重要な部分になっている。これらのシステムのほとんどは、関与する大量のデータのために高速である必要があり、また、注意深く設計して解決結果が予想以上に大きくなるのを回避する必要がある。
【０００３】
集積回路の設計は、もはや回路図から開始されてはいない。その代わりに、集積回路の設計は、回路の動作または機能を記述するソフトウェアプログラムから開始される。このソフトウェアプログラムは、実装の詳細が限られた実施すべきアルゴリズムを定義するソースコード記述である。設計者は、動作合成ツールに指示してこのソースコード記述をＲＴＬ（register transfer level、レジスタ転送レベル）記述へと変換する。このＲＴＬ記述を使用して最終的に回路中のコンポーネントのリストおよびコンポーネント間の相互接続を含むネットリストを生成する。このネットリストを使用して物理的な集積回路を作成する。
【０００４】
配列は、ソースコード記述におけるメモリの動作をモデリングするための強力で便利な方法を提供する。すなわち、動作記述を使用して配列を使用した抽象的な方法でデータのグループを操作する。これらの配列は、設計者の制御の下で、メモリへとパックされる。動作合成ツールは、自動的にメモリを制御するためのロジックを構築し、設計者が、（例えば、同期式対非同期式、シングルポート対デュアルポートなど）様々な特性を持つ様々なメモリを使用してアーキテクチャを探求する必要をなくし、また設計のための適切な実装についての知的な判断を行う必要もなくする。
【０００５】
配列をメモリにパックするために、設計者は、特にソースコード中で配列を表現する変数をメモリに割り当て、メモリのタイプおよび他のメモリパラメータを指定する必要がある。これは、１組の属性または指示文を使用して達成される。例えば、Ｓｙｎｏｐｓｉｓ（登録商標）ツールは、「プラグマ（pragma）」ステートメントを使用する。
【０００６】
設計者がソースコード記述中で（プラグマステートメントまたは他の指示文を使用して）メモリ割付けの詳細を指定した後、この設計者は、合成ツールを介してソースコード記述を処理する。この合成ツールは、設計者が回路性能を解析するために使用できるレポートを生成する。例えば、ユーザは、回路の速度および面積を調べて現在のメモリ割付けが受入れ可能かどうかを判定することができる。このメモリ割付けが受入れ可能でない場合には、設計者はエディタに戻り、ソースコード記述を再編集してメモリ割付けの詳細を変更し、この合成ツールを介してもう一度ソースコード記述を処理する必要がある。メモリ割付けを修正するためのかかる技法は、時間がかかり非効率的であり、どのようにしてメモリを割り付けるかを指定するための限られた選択肢しか設計者に提供しない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、設計者がメモリリソースをより速やかに簡単に修正できるようにすると共に、設計者にどのようにして配列をメモリにパックするかを指定するためのさらに拡張された選択肢を提供できるようにする方法および合成ツールを提供することが望ましい。
【課題を解決するための手段】
【０００８】
回路のソースコード記述をＲＴＬ記述に変換する際に、メモリパッキングプロセス中に配列をどのようにしてメモリにパックするかについての形式を設計者が変更できるようにする方法、システム、動作合成ツールが提供される。設計者は、設計すべき回路の動作を記述するアルゴリズムレベルでソースコード記述を書くことができる。次いで設計者は、動作合成ツールを使用して合成技法を使用したいくつかの異なるアーキテクチャ設計を生成する。各設計では、ＲＡＭ対レジスタのどちらを使用すべきか、どのタイプのＲＡＭを使用すべきか、どれだけ多くのメモリを使用すべきか、オンチップメモリまたはオフチップメモリのどちらを使用すべきかなど、設計者は、いくつかの異なる制約条件を変更できるようにすることによって異なるメモリ割付けを実装することができる。設計者が配列の選択されたメモリへのパッキングを速やかに簡単に制御できるように、設計者には、ソースコード記述中の配列のレイアウト形式を変換する機能も提供される。グラフィックユーザインターフェースを使用して、その動作合成ツール内の制約条件を変更して、あるいはソースコード記述を手動で操作することによって、これらの制約条件を変更することができる。次いで動作合成ツールは、回路の性能を解析するためのレポートを各設計ごとに作成する。例えば、設計者は、各設計から作成される回路の速度および面積を調査し比較してそのメモリ性能およびメモリサイズが受入れ可能かどうかを判定することができる。
【０００９】
ハードウェア記述を有するソースコードファイルが、動作合成ツール内でデータベースに読み出される。この動作合成ツールは、ソースコード記述を解析し、このソースコード記述に関連するデータ構造を生成する。次いで、設計者は、メモリタイプ、メモリ数、メモリサイズなどメモリ割付けの詳細を指示するいくつかの制約条件を修正することができる。したがって、ソースコード記述を再編集する必要はなくなり、設計者は、メモリのパッキングプロセス中にこれらのメモリ制約条件を対話的に動的に変更してどのようにして配列をメモリ中にパックするかを制御することができる。設計者が設計に満足した後に、ＲＴＬ記述をそのデータ構造から生成する。
【００１０】
配列をメモリにパックするためのいくつかの追加の選択肢が、動作合成ツールによって設計者に対して提供され、その結果、設計者は、メモリのパッキングプロセス中に複数の配列レイアウト形式のうちの１つを選択することができる。配列のレイアウトを動的に変換する機能を設計者に提供することにより、設計者にとって合成すべき回路のメモリ割付けをカスタマイズする高速で効率のよい方法が可能になる。
【００１１】
本発明のさらなる特徴および利点は、以下の詳細な説明および添付図面を参照することによって明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】対話的なメモリ割付けを可能にするシステムのブロック図である。
【図２】図１のシステムを使用して集積回路を開発するための設計フローを示す詳細な図である。
【図３】メモリへの配列の直接パッキングを示す図である。
【図４】図４ａは、メモリの単一ワードへの配列の複数ワードのパッキングを示す図であり、図４ｂは、メモリの単一ワードへの配列の複数ワードのパッキングを示す別の図である。
【図５】図５ａは、リトルエンディアン形式を使用したメモリへの配列のパッキングを示す図であり、図５ｂは、ビッグエンディアン形式を使用したメモリへの配列のパッキングを示す図である。
【図６】図６ａは、インターレーシング形式における、メモリへの配列のパッキングを示す図であり、図６ｂは、インターレーシング形式における、メモリへの配列のパッキングを示す別の図である。
【図７−ａ】メモリの複数ワードへの配列の単一ワードのパッキングを示す図である。
【図７−ｂ】メモリの複数ワードへの配列の単一ワードのパッキングを示す別の図である。
【図８】メモリ中のカスタマイズされたロケーションへの配列のパッキングを示す図である。
【図９】図９ａは、複数のメモリへの単一配列のパッキングを示す図であり、図９ｂは、複数のメモリへの単一配列のパッキングを示す別の図である。
【図１０】単一メモリへの複数の配列のパッキングを示す図である。
【図１１】メモリの使用において重複する配列を伴う、単一メモリへの複数の配列のパッキングを示す図である。
【図１２−ａ】デフォルト動作を定義し設計者のエラーを訂正する解決モードの使用を示す図のうちの１つである。
【図１２−ｂ】デフォルト動作を定義し設計者のエラーを訂正する解決モードの使用を示す図のうちの１つである。
【図１２−ｃ】はデフォルト動作を定義し設計者のエラーを訂正する解決モードの使用を示す図のうちの１つである。
【図１３】設計者が動作合成ツール中のメモリリソースを修正できるようにするユーザインターフェースの一例を示す図である。
【図１４】動作合成ツールを実装するためのネットワーク環境の一実施形態のブロック図である。
【図１５】本発明による方法、システム、およびツールを実施するシステムの一実施形態を示すブロック図である。
【図１６】メモリ割付けをＳＩＦに適用する一例である。
【発明を実施するための形態】
【００１３】
図１に、集積回路を生成するためのシステム１０を示す。設計者は一般に、別のエディタ（図示せず）を使用してソースコード１２を生成することによって集積回路の動作記述を作成する。このソースコード記述は、Ｃ、Ｃ＋＋、ＶＨＤＬ、Ｖｅｒｉｌｏｇ、Ｐａｓｃａｌなど、動作レベルで回路を記述することが可能な任意のプログラミング言語で書くことができる。ソースコード記述１２が完成した後に、動作合成ツール１４は、このソースコード記述１２を読み込み、設計者が設計プロセスの早期において回路アーキテクチャを評価し修正することができるようにする。特に、ソースコード記述１２は、この動作記述をデータ構造として保持する中間データベース１６中に読み込まれる。ＳＩＦ（synthesis intermediate format、合成中間形式）と呼ばれるこのデータ構造は、ＧＵＩ（graphical user interface、グラフィックユーザインターフェース）１８を介してユーザによる修正が可能である。このＧＵＩ１８により、設計者は、このデータ構造中のメモリ割付けを対話的に動的に修正できるようになる。しかし、設計者はまた、元のソースコード記述を手動で編集することによって、またはＧＵＩの助けなしにこのＳＩＦを修正することによってこのメモリ割付けを修正することもできる。例えば、設計者は、コマンドを発行して、このＳＩＦ内のメモリ割付けを修正することもできる。次いで、設計者は、異なるメモリアーキテクチャに関連する面積および待ち時間を速やかに評価することができる。設計者がそのアーキテクチャに満足した後に、そのＲＴＬコードを２０に示すように生成する。次いでさらなる処理をそのＲＴＬコードに対して実施して最終的にその集積回路が生成される。
【００１４】
図２に、本発明の一実施形態による、集積回路を生成するためのより詳細なフローチャートを示す。プロセスブロック３０において、動作合成ツールは、すでに説明したように、この集積回路の動作を記述するソースコードを読み込む。このソースコード記述は、最初のメモリ割付けを確立するための１組のデフォルト制約条件を含むことができる。あるいは、このソースコード記述をこの動作合成ツール中に読み込んだ後に、選択済みのパッキングモードまたは設計者によって、このデフォルト制約条件を提供することができる。プロセスブロック３２において、動作合成ツール１４（図１参照）は、このソースコード記述を中間データベース１６中に読み込み、設計者が変更可能なデータ構造を生成する。このデータ構造を生成する際に、この合成ツールは、このソースコード記述の解析を実施する。例えば、この合成ツールは、このソースコード記述中のオペレータ、信号、および変数を探索し、これらのステートメントに基づいてこのデータ構造を生成する。さらに、この合成ツールは、指示文を求めて探索し、これらの指示文をこのデータ構造中のメモリ割付けについてのデフォルトとして使用する。
【００１５】
このフロー中のこのポイントで、メモリ割付け情報が中間データベースに独立に記憶され、すなわちこれは、この情報がまだ完全にはこのＳＩＦ中に統合されてはいないことを意味することになる。かかる変更がこのＳＩＦに適用されるとき、これによって、設計者がこのメモリ割付けと制御を対話的に変更できるようになる。このメモリ割付け情報は、この設計についての１組のリソースとして記憶され、ここで各リソースは、最終的な集積回路設計中に存在する可能性もあるメモリリソースを表現する。さらに、このソースコード記述中の配列もまた、このデータ構造中に記憶される。このデータ構造は、多くの異なる方法で構成することができる。１つの可能な構成は、このデータ構造に記憶されるこれらのリソースおよび配列に関連する様々なフィールドをもつ構成である。例えば、一実施形態では、以下のフィールドをこのデータ構造に記憶されたリソースに関連づけることができる：
このリソースについての一意的な識別子、
このリソースについて使用すべきメモリタイプ、
このリソースにパックされる変数リスト、
このリソースについてのパッキングモード、
このリソースがこの設計の外部にあるかどうかを示すフラグ、
このリソースに対するパッキング変数についての形式。
同様に、一実施形態では、以下のフィールドをこのデータ構造に記憶される配列に関連づけることができる：
このリソースについての一意的な識別子、
配列長、
配列幅、
リソース中の開始アドレス、
このリソース中の開始ビット、
このリソースに配列をパックするための形式。
【００１６】
プロセスブロック３４において、設計者は、このソースコード記述中にある変数についてのメモリ割付けを対話的に変更することができる。すなわち、このソースコード記述は、（場合によっては、配列はメモリにパックされないが）メモリ記憶域に関連づけられる配列を表現する変数を含んでいる。この配列を表現する変数についてのこのメモリ割付けは、メモリ割付けに関連したいくつかの制約条件を設計者が操作できるようにすることによって修正される。例えば、第１の制約条件により、設計者が回路設計中で使用可能な多くの異なるメモリから選択できるようにすることもできる。追加の制約条件では、選択されるメモリ（例えば、デュアルポートメモリ、シングルポートメモリなど）のサイズおよびタイプを変更することができる。したがって、プロセスブロック３４において、設計者は、どのメモリを使用すべきか、これらのメモリに関連する変数、パッキングモードなどを選択することができる。
【００１７】
設計者に、さらに多くの、設計における柔軟性を提供するために、設計者には、プロセスブロック３４において、配列のレイアウトを様々な形式に変換する機能も提供される。配列をメモリにパックするために使用される形式は、回路の全体的なメモリ性能にかなりの影響を及ぼす可能性がある。この使用される形式は、しばしば配列またはメモリの所与数のワードにアクセスするために必要な読取りおよび／または書込みの回数に影響を与えることになる。回路のサイズを所与の仕様の範囲内に維持することに重点を置いた様々な形式を選択することができるが、（クロックサイクル／読取り／書込みの数を減らす）回路速度に重点を置いた他の形式を選択することもできる。特定の配列レイアウト形式については、図３〜図１１について長く時間をかけて説明することにする。
【００１８】
設計者は、いくつかの方法で、前述のメモリ割付け制約条件（すなわち、サイズ、数、メモリタイプ、パッキングモード、形式）のうちのどれでも修正することができる。設計者は、図１に示すＧＵＩ１８を使用してメモリ割付けを制御する制約条件を変更することができる。あるいは、設計者は、ＳＩＦ中の制約条件を手動で変更することもでき、またそのソースコード記述を手動で編集して制約条件を含めることもできる。
【００１９】
メモリが適切に割り付けられた後、設計者は、初期検査を実施してその回路の面積およびタイミングを解析することができる（プロセスブロック３６）。これは、例えば、そのメモリ割付けが満足できるものであるかどうかの何らかの直接フィードバックを設計者に提供する面積対待ち時間グラフを表示することによって行うことができる。設計者が、その面積およびタイミングに不満な場合、設計者は、矢印３８に示すようにプロセスブロック３４に戻ってさらにそのメモリ割付けを修正することができる。他方、設計者が、そのメモリ割付けに満足する場合には、そのＲＴＬコードを生成しシミュレーションを行うことができる（プロセスブロック４０および４２）。最終的には、ＲＴＬ合成ツールでＲＴＬ合成を実施することができ（プロセスブロック４４）、そのゲートレベル設計を検証し解析することができる（プロセスブロック４６）。
【００２０】
各配列または各メモリごとに、同時に読み取られ、または書き込まれる固定したデータブロックが存在する。この固定データブロックは、ワードと呼ばれる。配列またはメモリは、ワードサイズおよびワード数によって特徴づけることができる。メモリまたは配列の第１のパラメータは、ワードサイズであり、これは、単一のアクセスで読み取られ、または書き込まれるビット数のことである。第２のパラメータは、メモリが記憶することができるワード数である。各ワードは、その下でワードを読み取り、または書き込むことができる一意的なアドレスを有しており、このアドレスは、通常０からワード数−１に至る数字である。配列には通常、実行中に計算される表現によってインデックス付けすることができる。ハードウェアユニットとしてのメモリは、遅延やポート数などの追加パラメータをもつことができる。
【００２１】
次に、メモリ割付けがどのようにしてＳＩＦに適用されるかについてのさらなる詳細について説明することにする。設計者がそのメモリ割付けに満足した後に、設計者は、ＧＵＩに指示して、そのメモリ割付け情報をＳＩＦに適用する。したがって、このポイントで、１組の独立なリソースおよびそれらのフィールド情報を修正することにより、設計者がメモリ割付けに対して行ったどのような変更もデータベース中に反映される。この情報のＳＩＦに対する適用は、以下のいくつかのステップを含んでいる。
【００２２】
１．各メモリリソースを表現するメモリデータオブジェクトを作成する。これは、そのパッキングモードと共に、そのメモリにパックされる変数および変数のサイズに基づいてメモリのサイズを決定するものである。また、（そのメモリ上のパッキングモードおよび変数の順序に基づいて）最初の変数インデックスが異なるメモリアドレスにパックされることもあり得るので、オフセットは、各配列／インデックスごとに計算される。
【００２３】
２．メモリリソースにパックされる任意の変数に対するすべての読取り／書込みアクセスをステップ１中の作成済みのメモリデータオブジェクトに対する対応する読取り／書込みに変換する。変換は、そのＳＩＦを適切に修正して実際のメモリアドレスロケーションへの最初の配列ンデックスのパッキングを反映するステップを含んでいる。このパッキングは、これらの変数の順序付けおよび使用されるパッキングモードに依存する。適切なオフセットが各配列インデックスアクセスごとに挿入される。このオフセットの挿入は、アドレス計算としても知られるものである。
【００２４】
図１６を参照すると、どのようにしてメモリ割付けがＳＩＦに対して適用されるかについての例が示されている。図１６は、３つのコードセグメントを示している。第１のコードセグメント１６０は、配列Ａを宣言し、次いでこの配列の様々なワードを変数に割り当てるための基本コードの例である。セグメント１６０中で、配列Ａは、１００の配列長および３２ビットのワード幅を伴うものとして宣言される。その後、配列Ａのワード５が、変数ｂに割り当てられ、配列Ａのワード９が変数ｃに割り当てられる。
【００２５】
この例で、設計者は、コードセグメント１６０を動作合成ツール中に読み取っており、今や、幅が５０ワードしかなく、６４ビット幅となるようにこの配列の形式を変換したいと思っているものと想定する。以前の方法を用いてこのポイントで、コードセグメント１６２に示すように配列について宣言する際も、配列をアクセスするときもいつでも、設計者は、ソースコードセグメント１６０を再編集してこの変更を反映する必要があるはずである。コードセグメント１６２は、新しいサイズを反映するように変更された配列Ａの宣言を示しているが、この配列に対する後続のアクセスに対して行う必要がある変更も示している。この配列アクセスがサイズ変更後に配列Ａの正しいワードを依然として割り当てられるようにするために、所望のワードについて新しいアドレスを計算する必要がある。行われる変更によっては、この計算はかなり難しいものになる可能性がある。したがって、この新しいコードを手動で作成するためには、設計者側でかなりの編集時間が必要であり、図１６に示すような最も簡単なコードについてさえも、エラーが起こりやすい傾向がある。集積回路の動作を記述するために書かれるコードは、しばしばさらにずっと複雑であり、したがって、時間とエラーの可能性は、それに従って長く、また大きくなる。
【００２６】
しかし、本実施形態の動作合成ツールにより、設計者は、制約条件を簡単に変更して配列Ａのレイアウトを３２×１００から６４×５０に変換することができる。ソースコードセグメント１６０は、すでにＳＩＦに読み込まれているので、提供されたＧＵＩは、配列Ａを現行のサイズ３２×１００を用いて表示することになる。次いで、設計者は、配列を６４×５０形式に変換すべきことを示す配列についてのサイズ制約条件を変更する。これを確認した後に、配列ＡのサイズについてのＳＩＦ内の制約条件を変更してこの設計者の所望の変更を反映し、この動作合成ツールは、これらの制約条件のどのような変更をも反映したＲＴＬコードを作成する。換言すれば、たとえ、コードセグメント１６０がＳＩＦ中に読み込まれていたとしても、ＧＵＩを介したこれら制約条件の設計者の設定によって、このＲＴＬコードは、まるでコードセグメント１６２が最初に読み込まれていたかのように作成される。これは、コードセグメント１６０を実際に作成し編集してコードセグメント１６２の機能を反映することにより、コード１６０のＳＩＦを編集してコードセグメント１６２の機能を反映することにより、またはコードセグメント１６０を変更しないままＲＴＬコードを作成してコードセグメント１６２の機能を反映することにより、この動作合成ツールによって実現することができる。
【００２７】
あるいは、他の実施形態では、設計者は、コードセグメント１６４に示すようなサイズ制約条件をソースコードセグメント１６０に手動で追加することができ、次いでコードセグメント１６４をＳＩＦに読み込んでいる。さらに他の実施形態では、このＳＩＦ内のサイズ制約条件を、設計者がＧＵＩの助けなしに手動で変更することもできる。
【００２８】
この選択されたアーキテクチャは、そのメモリシステムの性能にかなりの影響があるはずなので、集積回路を合成する際のメモリパッキングプロセス中にどのようにして配列をメモリにパックするかについての設計者の制御を可能にすることが望ましい。例えば、配列ワードがどのようにアクセスされるかによっては、配列ワードサイズと異なるＲＡＭワードサイズを有することがより効果的なこともある。配列からの２つの連続的なワードが一緒にアクセスされる場合、２つの配列ワードを単一のＲＡＭワードにパックすることが効率的なこともある。あるいは逆に、配列ワードの半分がしばしばアクセスされる場合には、この配列ワードを２つのＲＡＭワードに分割することが効果的なこともある。
【００２９】
２つの配列Ａ（ワードサイズ：１６）と配列Ｂ（ワードサイズ：３２）を、一緒にパックすべき場合について考察する。ＲＡＭワードサイズは、例えば１６または３２であるように選択することができる。設計者が、３２を選択する場合、配列Ａワードは、パッドなしですべてのＡワードおよびＢワードを同じサイズにすることができる。提案したばかりの解決方法は、メモリ使用の観点からは明らかに非常に無駄が多い。別の解決方法では、２つの配列Ａのワードを単一のＲＡＭワードにパックすることになる。第３の解決方法では、１６をＲＡＭワードサイズとして選択し配列Ｂの各ワードを２つのＲＡＭワードに分割することになる。第２の形式か第３の形式かの選択は、２つの配列についてのワードアクセスパターンによる影響を受けるはずである。しばしば、同じ設計記述について使用可能な数多くの形式が存在し、それぞれは、他の形式に比べて利点および欠点を有している。
【００３０】
図３は、メモリへの配列の直接パッキングを示す図である。この例では、配列５０およびメモリ５２は同じ長さ（１０ワード）および幅（４ビット）をもっている。しかし、配列５０をより大きなメモリのサブセクションにパックすることもできる。配列５０をメモリ５２にパックするために、配列５０のワード０は、メモリ５２のワード０に直接にパックされ、後続のワード１からワード９も同様である。各配列のアクセスは１つのメモリアクセスをもたらす。アドレス変換はなく、配列アドレスはそのままメモリアドレスとして使用することができる。したがって、直接パッキングは、かなり単純であり、動作合成ツールによって速やかに処理される。
【００３１】
多くの場合に、メモリ要素へのアクセスは、実施される機能の最大の並列性を制限するので、設計のボトルネックになる。１つの選択肢は、メモリワードの幅を広げることであり、それによって、各メモリアクセスが、複数の配列ワードを読み取りまたは書き込むことになる。配列をより大きなワードサイズをもつメモリにパックすることは、複数ポートをもつメモリへと置き換えることでメモリポートのスループットを増大させる典型的な変換である。図４（ａ）は、メモリの単一ワードへの配列の複数ワードのパッキングを示す図である。図４（ａ）に示す配列６０は、１０ワードの長さと４ビットの幅を有している。配列６０は、幅が８ワード、すなわち配列６０のワード幅の２倍のワード幅のメモリ６２にパックされる。したがって、配列６０のワード０およびワード１は、メモリ６２のワード０にパックすることができる。同様に、配列６０のワード２およびワード３は、メモリ６２のワード１にパックされ、以下同様にすることができる。
【００３２】
図４（ｂ）は、メモリの単一ワードへの配列の複数ワードのパッキングを示す別の図である。図４（ｂ）中の配列６４は、４ビットのワード幅を有する。しかし、メモリ６６は、ワード幅１２、すなわち配列６４のワード幅の３倍のワード幅を有する。したがって、配列６４のワード０、ワード１、およびワード２は、メモリ６６のワード０にパックすることができる。同様に、配列６４のワード３、ワード４、およびワード５は、メモリ６６のワード１にパックされ、以下同様にすることができる。
【００３３】
メモリの単一ワードへの複数の配列ワードのパッキングには、各配列のアクセスを１つのメモリアクセスに変換することが必要であり、メモリワードのある種のアドレス計算および副次的な選択を実施することが必要である。配列の要素への書込みにはまずメモリワードの読取りが必要であり、さもないと、同じメモリワードを共有する配列要素が上書きされない。換言すれば、各配列読取りは、１つのメモリ読取りに変換され、配列書込みは複数のメモリアクセスに変換される。したがって、複数の配列アクセスを単一メモリアクセスにパックすることができる場合には、設計者はこの形式が有用であることを見出すはずである。ソースコード記述が順番に配列要素にアクセスする多数のループを含むとき、またはソースコード記述が常に、またはしばしば対をなす配列ワードにアクセスする場合には、このようなことがあり得る。
【００３４】
図５（ａ）および図５（ｂ）は、エンディアン形式（Endian format）を使用したメモリへの配列のパッキングを示す図である。図５（ａ）および図５（ｂ）中の配列７０は、長さ１０の配列長および４ビットのワード幅を有する。配列７０は、８ビットのワード幅をもつメモリ７２へとパックされ、図４（ａ）に関して以前に説明したように２つの配列ワードが単一のメモリワードにパックされる。しかし、配列またはメモリの形式、すなわちワード幅または長さは、エンディアン形式を使用する目的では重要ではない。エンディアン形式では、本明細書中で説明するフォーマットのすべてと同様に他の形式と組み合わせて使用して配列レイアウトを変換することもできる。
【００３５】
図５（ａ）は、「リトルエンディアン（Little Endian）」形式を使用したメモリへの配列のパッキングを示す図である。この形式は、メモリ７２の各ワードの最下位のビットで開始されるメモリ７２に配列７０をパックする。したがって、図５（ａ）におけるメモリ７２は、配列７０のワード０およびワード１が最下位のビットで開始されるメモリ７２のワード０にパックされ、配列７０のワード２およびワード３が最下位のビットで開始されるメモリ７２のワード１にパックされ、以下同様に続くように示される。リトルエンディアン形式は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓプラットフォームを使用したパーソナルコンピュータ用のほとんどのＩｎｔｅｌプロセッサで使用される。
【００３６】
図５（ｂ）は、「ビッグエンディアン（Big Endian）」形式を使用したメモリ７４への配列７０のパッキングを示す図である。この形式は、メモリ７４の各ワードの最上位のビットで開始されるメモリ７４に配列７０をパックする。したがって、図５（ｂ）におけるメモリ７４は、配列７０のワード０およびワード１が最上位のビットで開始されるメモリ７４のワード０にパックされ、配列７０のワード２およびワード３が最上位のビットで開始されるメモリ７４のワード１にパックされ、以下同様に続くように示される。ビッグエンディアン形式は、Ｍａｃｉｎｔｏｓｈプラットフォームを使用したパーソナルコンピュータ用のほとんどのＭｏｔｏｒｏｌａプロセッサで使用される。
【００３７】
インターレーシング（interlacing）は、配列から読み取る際に特定のワード数をスキップしてワードを所与の順にメモリへとパックする形式である。配列の奇数アドレスワードと偶数アドレスワードが、そのアルゴリズムの別々の部分で使用される場合が典型的なアプリケーションとなるはずである。図６（ａ）は、インターレーシング形式のメモリへの配列のパッキングを示す図である。配列８０は、配列８０の偶数ワードがメモリ８２の最初の５ワードへとパックされ、配列８０の奇数ワードがメモリ８２の第２番目の５ワードへとパックされるようにして、パックされるワードごとに３ワードをスキップするインターレーシング形式でパックすることができる。
【００３８】
図６（ｂ）は、インターレーシング形式のメモリへの配列のパッキングを示す別の図である。この例では、メモリ８６にパックされる配列８４の各ワード間で２ワードだけがスキップされ、メモリ８６は、ワード幅が配列８４の２倍である。したがって、メモリ８６にパックすべき配列８４の最初の２ワード、すなわちワード０とワード３がメモリ８６の最初のワードにパックされる。次いで、同様に、配列８４のワード６とワード９がメモリ８６の次のワードにパックされ、以下同様である。
【００３９】
図７（ａ）は、メモリの複数ワードへの配列の単一ワードのパッキングを示す図である。図７（ａ）は、８ビット幅の配列９０が４ビット長をもつメモリ９２へとパックされるのを示している。したがって、この配列ワードは、配列ワード０の前半がメモリ９２の第１のワードにパックされ、配列ワード０の後半がメモリ９２のワード１にパックされるように分割される。配列ワードの残りも、配列ワード１が分割され前半がメモリワード２に後半がメモリワード３に記憶され、以下同様になるように同様な方法で分割される。配列ワードは、分割し高位ビットから低位ビットへ、またはその逆に順番にメモリワードにパックすることができる。例えば、各メモリワード０および１は、メモリ９２中の配列ワード０の半分ずつを含んでいる。配列ワード０の半分ずつをメモリ９２に任意の順序でパックすることができる。配列ワード０の最初の４ビット（ＡＢ０〜ＡＢ３）は、メモリワード０にパックすることができ、また配列ワード０の最後の４ビット（ＡＢ４〜ＡＢ７）は、メモリワード０にパックすることができる。
【００４０】
この場合には、各配列アクセスは、複数のメモリアクセスをもたらす。これは、その設計の性能を低下させるが、例えば、ある種のメモリワードサイズだけしか使用可能でないときには設計の制約条件となることもある。
【００４１】
図７（ｂ）は、メモリの複数ワードへの配列の単一ワードのパッキングを示す別の図である。図７（ｂ）では、長さが１０ワードで幅が８ビットの配列９４が、幅が６ビットのメモリ９６上にパックされる。配列ワードサイズの厳密な倍数または約数ではないメモリワードサイズを選択することによって、より複雑なアドレス変換およびスライスオペレーションのうちの一方がもたらされる。第１の配列ワード、すなわちワード０（８ビット）は、メモリワード０（６ビット）とメモリワード１の最初の２ビットにパックされる。これによって、メモリワード１中に未使用スペースの４ビットが残る。したがって、第２の配列ワード、ワード１の最初の４ビットは、メモリワード１中の自由スペースの残りの４ビットにパックされ、配列ワード１の残りの４ビットは、メモリワード２にパックされる。これは、すべての配列ワードがメモリ９６にパックされてしまうまで続行される。この場合、１４語のメモリワードが、配列９４の８０ビットすべてを保持するために必要とされる。これによって、４ビットの未使用ビット９８が残り（８０配列ビットが６＊１４＝８４メモリビットにパックされ）、これらの未使用ビットは、メモリ９６中のどこにも割り付けることができる。図７（ｂ）では、これらのビット９８は、メモリ９６の末尾に割り付けられる。
【００４２】
図７（ｂ）に示すパッキングは、図７（ａ）と同様に、このメモリ中のある種の配列要素にアドレス指定をするために多大な計算を必要とする。しかし、かかるパッキングは、使用可能なメモリが非常に制約されている場合に有用となる可能性がある。配列要素が２つのメモリ要素上に分散しているので、複数のメモリアクセスが各配列のアクセスについて必要なこともある。
【００４３】
図８は、メモリ中のカスタマイズされたロケーションへの配列のパッキングを示す図である。配列１００は、８ビットの幅と４ワードの長さを有している。メモリ１０２は、長さが指定されていないが、配列１００よりも大きく、配列長１２を有している。配列１００は、配列１００によって占有されるのに十分大きなメモリ１０２中の任意のロケーションにパックすることができる。図８で、配列１００は、配列１００の最初のワードがメモリワード６にパックされるようにパックされ、配列ワード０の最初のビットがメモリワード６のビット４にパックされるように配置される。配列１００の後続の各ワードは、この配列ワードの最初のビットがこのメモリワードのビット４に配置されるようにメモリ１０２の後続のワードにパックされる。
【００４４】
図９（ａ）は、複数のメモリへの単一配列のパッキングを示す図である。配列１１０は、長さが１０ワード、幅が４ビットである。２つのメモリ、すなわち１１２および１１４が示されており、これらの各メモリは、幅が４ビットで、長さが５ワードである。配列１１０は、様々な方法でこれらのメモリにパックすることができる。例えば、配列１１０は、各配列ワードを第１のメモリ１１２へ、次いで第２のメモリ１１４へと交互にパックすることによりメモリ１１２およびメモリ１１４にパックすることができる。かかる場合が、図９（ａ）の場合である。配列１１０のワード０は、メモリ１１２のワード０にパックされ、配列１１０のワード１は、メモリ１１４のワード０にパックされる。次いで配列１１０のワード２は、メモリ１１２のワード１にパックされ、また配列１１０のワード３は、メモリ１１４のワード１にパックされる。この形式は、配列１１０中のワードの残りがメモリにパックされるまで続行する。
【００４５】
代わりに、図９（ｂ）に示すように、配列１１０の最初の５ワードがメモリ１１２に順次パックされ、配列１１０の第２番目の５ワードがメモリ１１４にパックされるように、配列１１０をパックすることもできる。配列を２つの別々のメモリに分割することは、全体回路のサイズを増大させるが、２つのメモリは独立にアクセスすることができるので、この設計の速度を上げるのに効果的である。したがって、この設計者は、配列１１０の２ワードを効果的に並行してアクセスできるようにしている。
【００４６】
図１０は単一メモリへの複数の配列のパッキングを示す図である。２つの配列１２０および１２２が、４ワードの長さと８ビットの幅をもつように示されている。メモリ１２４は、中間的な幅のものであるが、配列１２０および配列１２２よりも大きい。メモリ１２４の長さは、１２ワードである。配列１２０のワード０は、メモリ１２０のワード２にパックされ、配列ワードのビット０が、メモリ１２４のワード２のビット４に配置されている。配列１２０の後続の各ワードは、配列ワードの最下位のビットがそのメモリワードのビット４に配置されてメモリ１２０の後続のワードにパックされる。
【００４７】
配列１２２は、メモリ１２４中の、配列１２０にすぐ隣接した場所を占めるようにパックされる。したがって、配列１２２のワード０は、配列１２０のワード０と同様にメモリ１２４のワード２にパックされる。しかし、配列１２２のワード０は、最下位のビットがこのメモリワードのビット１２に配置されるように位置がずらされている。次いで、配列１２２の後続のワードは、各配列ワードの最下位のビットをメモリワードのビット１２に配置し、メモリ１２４の後続のワードにパックされる。
【００４８】
したがって、設計者には、図９に示すように複数のメモリ上に１つの配列をパックすることによって回路速度を増加させるか、あるいは図１０に示すように同じメモリ上に複数の配列をパックすることによってメモリ数を、したがって回路サイズを減少させるかについての代替的な選択肢が提供される。
【００４９】
図１１は、メモリの使用において重複する配列を伴う、単一メモリへの複数の配列のパッキングを示す図である。配列１３０および１３２とメモリ１３４は、図１０に関して説明したものと同じ大きさのものである。しかし、この例では、配列１３０および１３２は、配列１３０のワード０および１の後の方の部分が配列１３２のワード２および３の最初の部分とロケーションが重複するようにパックされている。配列１３０および１３２が共通の生存期間（life time）をもつ場合には、これらのセクションは、別々になっている必要があり、図に示すパッキングは、メモリ割付けエラーを引き起こすことになる。しかし、これらの配列が異なる生存期間を有する場合には、この構成がメモリリソースを節約する効果的な方法になることもある。
【００５０】
図３〜図１１に関して説明した形式は、配列を別の配列にまたはメモリにパックする配列レイアウト形式に影響を与える制約条件を調整する際に、設計者に柔軟性を与えるものである。面積の影響を考慮すべき設計では、すべてのデータを１つのメモリにマージしてしまいがちである。しかし、これは、各メモリが別々のメモリにパックされる場合に比べてずっとメモリアクセスを制約することになる。並行性を介しての速度増加は、回路サイズが大きくなる欠点があるが、使用可能なときには複数のメモリを使用して実現することができる。
【００５１】
これらの説明した形式が、解決モードと組み合わせて使用することができることも注目に値する。図１２は、設計のデフォルト動作を設定し、または設計者のエラーを訂正するための解決モードの使用を示す図である。例では、図１２（ａ）に示す４つの配列が、ＳＩＦに読み込まれるソースコード中で宣言されているが、第１の解決モードしか指定されていないものと想定する。したがって、図１２（ａ）中の配列の位置は、この第１の解決モードによる、各配列ごとの１組の制約条件によって決定されたものである。次いで、図１２（ｂ）は、設計者がその後、配列１４４に対応する制約条件を変更し、配列１４４が配列１４２と重複するようになった後の４つの配列の位置を示している。次に、設計者には、配列を図１２（ｂ）に示すように（重複して）配置されたままにし、制約条件を変更して、配列１４２または配列１４４をメモリ中の代替位置に移動してこの問題を訂正する、あるいはこの現行の解決モードに基づいてこの配列を自動的に他の場所にパックするという選択肢が与えられる。あるいは、設計者は、新しく選択された解決モードに基づいてこの配列をメモリ１４０中の他の場所にパックすることもできる。例えば、設計者は、図１２（ｃ）に示すように、配列１４４についての新しい位置を決定するための基礎として第２の解決モードを選択することによってこの問題を訂正するように選択できる。この解決モードでは、この配列を任意方向に移動し、この配列のサイズ変更を行い、この配列を別のメモリリソースにパックするなど、様々な方法で配列１４４を再配置するタスクを知的に取り扱うことができる。
【００５２】
図１３は、設計者がメモリリソースを対話的にまた動的に修正できるようにするためのユーザインターフェース１５０の一例を示している。このユーザインターフェースは、プロセス、およびこれらのプロセス内でアクセスされる配列変数をリストアップする表示ペイン１５２を含んでいる。これらのプロセスおよび配列変数は、データベース１６に記憶された現在のメモリ割付けを示し、グラフィックオブジェクトとして表現される。合成ツール１４がデータベース１６に記憶されるデータ構造を生成するとき、変数およびメモリ割付けに関するソースコード指示文が識別され、メモリ割付けについてのデフォルト設定として使用される。このＧＵＩを使用して設計者は、メモリ割付けを示す指示文をもたないソースコードを作成することを選択することができる。かかる場合では、設計者は、このＧＵＩを介してメモリ割付けを対話的に指定する。あるいは、設計者は、ソースコード中に、デフォルト設定として使用される指示文を含めることもできる。
【００５３】
例えば、ＧＵＩ１５０中で選択された配列１５４は、サイズ６４×２１であり、すなわち配列の幅が６４ビットで長さが２１ワードであることを意味している。表示ペイン１５２は、変数に関するリソースの記号名を提供する。この場合には、「ｄｃｔ＿ｔｅｍｐ＿ｒｓｃ」は、「ｄｃｔ＿ｔｅｍｐ」と名付けられた配列１５４のために使用されるメモリリソースである。ＧＵＩ１５０は、提供された制約条件を使用して回路のメモリ割付けを変更するために設計者が使用する設定タブ１５６を示している。この例における設定タブ１５６は、回路設計のメモリ割付けをカスタマイズするために提供することができる多数の制約条件のうちの１つだけを示している。ここでは、入力ウィンドウ１５８を介して配列ワード幅制約条件を所望の幅に変更することができる。新しい幅を入力した後に、表示ペイン１５４は、配列ｄｃｔ＿ｔｅｍｐについての新しい幅を反映することになる。このポイントで、設計者は、配列ｄｃｔ＿ｔｅｍｐの形式、他の配列、メモリタイプの変更など他の変更を行うことができる。あるいは、設計者が満足する場合には、設計者は、「ＯＫ」ボタンを選択してこのＳＩＦに対するこの変更を適用することができる。
【００５４】
前述の方法、システム、および動作合成ツールの態様のうちのいずれについても、分散コンピュータネットワーク中で実施することもできる。図１４は、ネットワークの一例を示している。サーバコンピュータ１７０は、（サーバコンピュータの内部または外部に）関連する記憶装置１７２を有することもできる。サーバコンピュータ１７０は、前述の方法の実装形態のうちのどれを実施するようにも構成することができる。サーバコンピュータ１７０は、１７４に全体を示すネットワークに結合することができる。１７６、１７８に示すものなど、１つまたは複数のクライアントコンピュータは、ネットワーク１７４に結合され、ネットワークプロトコルを使用してサーバコンピュータ１７０とインターフェースすることができる。
【００５５】
図１５は、ユーザがメモリ割付けを変更できるようにするＧＵＩまたは代替手段をクライアント上に提供することができることを示している。次いでクライアントは、動作合成ツールの他の態様を提供するサーバと対話する。例えば、プロセスブロック１８０で、クライアントコンピュータは、回路の動作を記述するソースコードを送信する。このソースコードは、最初のソースコードの可能性もあり、また以前に送信されたソースコードの更新バージョンの可能性もある。プロセスブロック１８２で、ソースコードが受信され、サーバが提供する動作合成ツールに読み込まれる。次いで、プロセスブロック１８４で、このソースコードがＳＩＦで表現され、これによってメモリ割付け制約条件を、クライアントが修正できるようになる。プロセスブロック１８６で、メモリ割付け制約条件などのメモリ割付け情報が、ユーザに表示するためにクライアントに伝送される。プロセスブロック１８４で、クライアントは、そのように望む場合にはこのメモリ割付け情報を修正することができ、あるいはこれらの制約条件を承認しそれらを修正しないままにしておくこともできる。このユーザが、その制約条件を修正する場合には、この修正結果がサーバに伝送され、ここでプロセスブロック１９０は、この修正結果に基づいてこのＳＩＦ中のメモリ割付けを更新し、このユーザが現行のメモリ割付けを承認するまでプロセスブロック１８６および１８８を反復することができる。ユーザがメモリ割付けを承認すると、プロセスブロック１９２を処理して承認されたメモリ割付けを含むこのＳＩＦからＲＴＬコードを作成する。次いで、プロセスブロック１９４は、クライアントがサーバからＲＴＬコードを受信するステップを示している。
【００５６】
例示の実施形態についての原理を示し説明してきたが、これらの実施形態は、かかる原理を逸脱することなく構成および細部について修正できることが当業者には明らかであろう。
【００５７】
例えば、特定のＧＵＩについて示したが、このユーザインターフェースを修正して変数およびリソースを異なる方法で示すこともできる。使用される特定のユーザインターフェースは、本発明にとっては重要ではない。
【００５８】
また、このパッキングプロセス中の１つの形式から別の形式への配列の変換については、様々な方法で実現することができる。例えば、第１の形式の配列は、第２の形式の中間配列に変換し、次いでメモリに直接にパックすることができる。あるいは、第１の形式の配列は、次いでその配列が所望の第２の形式でメモリに記憶されるように、メモリにパックされているときに変換することもできる。
【００５９】
本明細書中で説明した形式および方法は一般に、分かりやすくするために分離して示しているが、本明細書中で説明した配列レイアウトを変換する方法および形式は、組み合わせ修正することができることが当業者には理解されよう。例えば、図８に示すものなどカスタマイズされたロケーションにパックされる配列は、図５に示すエンディアン形式のいずれかのカスタマイズされたロケーションにパックすることもでき、また図６（ａ）および図６（ｂ）に示すようなインターレーシング形式にパックすることもできる。
【００６０】
さらに、データベース１６に記憶されるデータ構造は、多種多様の方法で構築することができる。使用される特定のデータ構造は、本発明にとっては、重要ではない。
さらに、説明では、配列に注目しているが、集積回路中の単一レジスタに関連する変数を、説明した形式およびツールを使用して修正することもできる。さらに、任意の単一変数または非配列データを配列として表現し、説明した動作合成ツールの実施形態によって処理することもできる。
【００６１】
特定のデータ構造について示しているが、多種多様のデータ構造を使用できることが当業者には理解されよう。
本発明の原理を適用することができる多くの実施形態が可能なことを考慮すれば、例示の実施形態は本発明の好ましい例であるにすぎず、本発明の範囲を限定するものと考えるべきではないことを理解されたい。それとは逆に、本発明の範囲は、添付の特許請求の範囲によって定義される。したがって、本発明者らは、これらの特許請求の範囲の範囲内に含まれるものすべてを本発明として請求するものである。
【図１】
0004833303.tif 000002
【図２】
0004833303.tif 000003
【図３】
0004833303.tif 000004
【図４】
0004833303.tif 000005
【図５】
0004833303.tif 000006
【図６】
0004833303.tif 000007
【図７−ａ】
0004833303.tif 000008
【図７−ｂ】
0004833303.tif 000009
【図８】
0004833303.tif 000010
【図９】
0004833303.tif 000011
【図１０】
0004833303.tif 000012
【図１１】
0004833303.tif 000013
【図１２−ａ】
0004833303.tif 000014
【図１２−ｂ】
0004833303.tif 000015
【図１２−ｃ】
0004833303.tif 000016
【図１４】
0004833303.tif 000017
【図１５】
0004833303.tif 000018
【図１６】
0004833303.tif 000019
【図１３】
0004833303.tif 000020