(57)【要約】【課題】ＲＴＬレベル記述を用いた論理回路設計において、プログラミング言語で表現されたアルゴリズムに忠実に、品質の良いハードウェアを、短期間に効率よく設計可能にする。【解決手段】論理回路設計装置は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートを記憶するテンプレート記憶部と、前記テンプレート記憶部に記憶されたテンプレートのうち、所望のテンプレートを選択する操作を受け付ける選択操作受付部と、表示装置の画面に、前記操作受付部が受け付けたテンプレートを並べて表示する制御を行う表示制御部と、を備える【選択図】  図１
2015125579.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートを記憶するテンプレート記憶部と、
前記テンプレート記憶部に記憶されたテンプレートのうち、所望のテンプレートを選択する操作を受け付ける選択操作受付部と、
表示装置の画面に、前記操作受付部が受け付けたテンプレートを並べて表示する制御を行う表示制御部と、
を備えることを特徴とする論理回路設計装置。
【請求項２】
ユーザから前記レジスタ転送レベルの命令文の入力操作を受け付ける入力操作受付部を更に備え、
前記表示制御部は、前記入力操作受付部が受け付けた前記レジスタ転送レベルの命令文を、前記テンプレートと並べて表示する、
ことを特徴とする請求項１に記載の論理回路設計装置。
【請求項３】
前記入力操作受付部は、接続する二つのテンプレートの内の一方のテンプレートに含まれる出力端子を示す記号と、他方のテンプレートに含まれる入力端子の記号と、を信号線を示す記号を用いて接続する記述を受け付ける、
ことを特徴とする請求項２に記載の論理回路設計装置。
【請求項４】
前記ソフトウェアプログラミング言語の命令文は、ループ構文、宣言文、メモリを表現する配列、または条件文である、
ことを特徴とする請求項１乃至３のいずれか一つの記載の論理回路設計装置。
【請求項５】
ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートの選択を受け付けるステップと、
前記選択されたテンプレートを、選択された順序に従って、表示装置の画面上に並べて表示するステップと、
を含むことを特徴とする論理回路設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）の論理回路設計方法及び方法に関し、特にプログラミング言語で表現されたアルゴリズムのハードウェア化に関するものである。
【背景技術】
【０００２】
従来、プログラミング言語で表現されたアルゴリズムをハードウェア化する設計工程では、論理設計者がプログラムの詳細を解析し、アルゴリズムに特化したハードウェアのインプリメント構成を検討した後、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）を設計している。
【０００３】
Ｃ言語で書かれたアルゴリズム記述から、品質の良いハードウェアを短期間に効率よく設計可能にする手法として、例えば特許文献１に記載の論理回路設計方法が公知である。この論理回路設計方法は、Ｃ言語で記述されたアルゴリズムを処理単位で複数の状態に分割し、分割した処理の実行順序を状態の遷移として記述して、制御記述が埋め込まれた機能Ｃ記述を生成する。そして、機能Ｃ記述にクロック記述を挿入してＲＴレベルＣ記述に変換し、既存の変換ツールによってＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）によるＲＴレベル記述に変換している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許公開２００６−１８５４６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、プログラミング言語で表現されたアルゴリズムのハードウェア化業務において、設計規模の大規模化が進んでおり、設計規模に対する相対的な設計期間は年々短期化している。この状況を踏まえ、プログラミング言語で表現されたアルゴリズムを、直接ＲＴＬレベル記述に変換する動作合成ツールが存在する。
【０００６】
動作合成ツールは高価であり、初期の必要コストが大きいという課題がある。
【０００７】
また、動作合成ツールはプログラミング言語で表現されたアルゴリズムからＲＴＬレベル記述を生成できる点で便利であるが、人が既述したアルゴリズムに含まれている欠陥がそのまま論理合成されて回路が生成される。また、欠陥がなくても人の記述をそのまま論理回路に反映するので、プログラミング言語の文法上正しくても、必ずしも動作合成ツールの使用者の意図とおりに回路を構成するとは限らない。従って、論理合成したＲＴＬ回路の検証が必須となる。
【０００８】
この点において、特許文献１では、論理合成したＲＴＬレベル記述に切れ目がないので、検証者がどこまでが一つの処理単位であるかを把握したり、動作合成ツールが生成した回路を読み取ったりすることが困難であるという課題がある。
【０００９】
一方、設計者がプログラムの詳細を解析し、アルゴリズムに特化したハードウェアをＲＴＬで設計する手法は、初期の必要コストは低く、設計者の意図とおりに回路を構成することができ、動作合成ツールに比べ、設計した回路の可読性がよく、設計者自身による品質向上が可能なため、メンテナンス性に優れるという特徴がある。
【００１０】
但し、データパスなどのハードウェア構成、アルゴリズムを実現するステートマシンなどの制御回路、複雑なパイプライン制御などのタイミング設計など、検討、設計、検証といった設計コストが大きいという課題がある。
【００１１】
また、プログラムの解析誤り、インプリメント構成の検討誤りが発生すると、設計工程で大きな手戻りが生じ、さらに設計コストが大きくなるという課題も残る。
【００１２】
本発明は、上記課題に鑑みてなされたものであり、本発明は、ＲＴＬレベル記述を用いた論理回路設計において、プログラミング言語で表現されたアルゴリズムに忠実に、品質の良いハードウェアを、短期間に効率よく設計可能にすることができる論理回路設計装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明に係る論理回路設計装置は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートを記憶するテンプレート記憶部と、前記テンプレート記憶部に記憶されたテンプレートのうち、所望のテンプレートを選択する操作を受け付ける選択操作受付部と、表示装置の画面に、前記操作受付部が受け付けたテンプレートを並べて表示する制御を行う表示制御部と、を備えることを特徴とする。
【００１４】
また、本発明に係る論理回路設計方法は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートの選択を受け付けるステップと、前記選択されたテンプレートを、選択された順序に従って、表示装置の画面上に並べて表示するステップと、を含むことを特徴とする。
【発明の効果】
【００１５】
ＲＴＬレベル記述を用いた論理回路設計において、プログラミング言語で表現されたアルゴリズムに忠実に、品質の良いハードウェアを、短期間に効率よく設計可能にすることができる論理回路設計装置及び方法を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本実施形態に係る論理回路設計装置１００のハードウェア構成を示す図
【図２】本実施形態に係る論理回路設計装置の機能構成を示すブロック図
【図３】本実施形態に係る論理回路設計装置の設計時に表示される画面表示例を示す図
【図４】Ｃ言語記述をＶＨＤＬ記述で書かれたテンプレートを組み合わせて論理回路を設計する際の設計画面例を示す説明図
【図５】図４の設計画面で設定された論理回路の構成を示す説明図
【図６】多重ループを含む論理回路の処理の流れを示すチャート
【図７】空サイクルが無いメモリアクセスを実現論理回路の処理の流れを示すチャート
【図８】数サイクルでアルゴリズムの中断を実現する論理回路の処理の流れを示すチャートを示す。
【発明を実施するための形態】
【００１７】
以下、図面を参照して、本発明の実施形態について説明する。全図に通して同一の構成には同一の符号を付し、重複説明を省略する。
【００１８】
図１は、本実施形態に係る論理回路設計装置１００のハードウェア構成を示す図である。図１に示すように、本実施形態に係る論理回路設計装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０３、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０４及びＩ／Ｆ（Ｉｎｅｒｆａｃｅ）１０５がバス１０８を介して接続されている。また、Ｉ／Ｆ１０５には表示装置１０６及び操作装置１０７が接続されている。
【００１９】
ＣＰＵ１０１は演算手段であり、論理回路設計装置１００全体の動作を制御する。ＲＡＭ１０２は、情報の高速な読み書きが可能な揮発性の記憶媒体であり、ＣＰＵ１０１が情報を処理する際の作業領域として用いられる。ＲＯＭ１０３は、読み出し専用の不揮発性記憶媒体であり、ファームウェア等のプログラムが格納されている。
【００２０】
ＨＤＤ１０４は、情報の読み書きが可能な不揮発性の記憶媒体であり、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や後述する論理回路設計プログラム、各種の制御プログラム、アプリケーション・プログラム等が格納されている。Ｉ／Ｆ１０５は、バス１０８と各種のハードウェアやネットワーク等を接続し制御する。
【００２１】
表示装置１０６は、ユーザが論理回路設計装置１００を用いて回路設計を行う際の視覚的ユーザインターフェースであり、例えばＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）を用いて構成される。
【００２２】
操作装置１０７は、キーボードやマウス等、ユーザが論理回路設計装置１００に情報を入力するためのユーザインターフェースである。
【００２３】
次に、図２を参照して、本実施形態に係る論理回路設計装置１００の機能構成について説明する。図２は、本実施形態に係る論理回路設計装置の機能構成を示すブロック図である。図２に示すように、本実施形態に係る論理回路設計装置１００は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるテンプレートを記憶するテンプレート記憶部２０１と、テンプレート記憶部２０１に記憶されたテンプレートのうち、所望のテンプレートを選択する操作を受け付ける選択操作受付部２０２と、表示装置１０６の画面（図３の３００参照）に、選択操作受付部２０２が選択操作を受け付けたテンプレートを並べて表示する制御を行う表示制御部２０３と、表示された複数のテンプレートを接続する操作を受け付ける接続操作受付部２０４と、ユーザからレジスタ転送レベルの命令文の入力操作を受け付ける入力操作受付部２０５と、備える。
【００２４】
テンプレート記憶部２０１は、ソフトウェアプログラミング言語の命令文に対応する、レジスタ転送レベルの命令文のセットの集合体からなるデータをＨＤＤ１０４に記憶して構成される。テンプレート記憶部２０１に記憶されるテンプレートの詳細については後述する。
【００２５】
選択操作受付部２０２、表示制御部２０３、接続操作受付部２０４、及び入力操作受付部２０５は、操作装置１０６のドライバを含むソフトウェアにより構成される。そして、選択操作受付部２０２、表示制御部２０３、接続操作受付部２０４、及び入力操作受付部２０５を含むソフトウェアと、図１で示したハードウェアとが協働することにより論理回路設計装置１００の機能を実現するためのソフトウェア制御部２００が構成される。
【００２６】
次に図３を参照して、本実施形態に係る論理回路設計装置１００による論理回路設計方法について説明する。図３は、本実施形態に係る論理回路設計装置の設計時に表示される画面表示例を示す図である。図３に示す設計用画面３００は、表示装置１０６（図１参照）の画面に表示されるものである。
【００２７】
設計用画面３００は、ソフトウェアプログラミング言語記述を表示する記述表示領域３０１、ＲＴＬで記述されたテンプレートを設計用画面３００の上から下（図３の上から下に向かう方向）に向かって順次並べて表示する設計領域３０２、及びテンプレート記憶部２０１（図２参照）に記憶されているテンプレートメニューを表示するテンプレート領域３０３と、を含む。
【００２８】
論理回路設計装置１００を用いた論理回路設計方法について説明する。記述表示領域３０１には、ＲＴＬ記述に変換したいソフトウェアプログラミング言語記述を表示する。この表示は、ユーザが参照するためのものであるので、ユーザが論理回路設計を、例えばソフトウェアプログラミング言語記述の印刷した印刷物を参照しながら行う場合には、記述表示領域３０１は不要である。その場合、記述表示領域３０１を非表示にし、代わりに設計領域３０２を非表示にした記述表示領域３０１にまで拡張してもよい。
【００２９】
ユーザは、テンプレート領域３０３に表示されたテンプレートの内、記述表示領域３０１に表示されたソフトウェアプログラミング言語記述の命令文に対応するテンプレートにカーソル３０４を合わせ、設計領域３０２にドラックする（選択操作）。このカーソル３０４の動きを選択操作受付部２０２（図２）が検知し、表示制御部２０３にその検知結果を出力する。表示制御部２０３は、選択操作されたテンプレートと同じものを、設計領域３０２におけるカーソル３０４の移動先にコピーをして表示する。すなわち、テンプレート領域３０３には、選択操作されたテンプレートは表示され続ける。
【００３０】
テンプレートが用意されていない命令文がソフトウェアプログラミング言語記述に含まれる場合、ユーザは、設計領域３０２におけるその記述に対応する位置にカーソル３０４を合わせダブルクリック操作（入力欄表示操作）を行う。これにより、ＲＴＬ入力欄３０５が表示される。このＲＴＬ入力欄３０５に、ユーザが操作装置１０７、例えばキーボードを用いてＲＴＬの命令を入力操作する。
【００３１】
上記テンプレート記憶部２０１に格納されるテンプレートの詳細について説明する。
【００３２】
以下、プログラミング言語がCソースコードの場合を例に説明する。
【００３３】
本実施形態では、for、whileといったループ構文、int、charと宣言いった宣言文、メモリを表現する配列、ifやcaseといった条件文など、Ｃソースコードを構成する主要な構文について、RTL記述のテンプレートを作成することとする。
【００３４】
for、whileといったループ文は、１つのループにつき、ループテンプレートと、バリアテンプレートの２種類で構成する。ループテンプレートは、Ｃソースコードのループ開始箇所に１対１で実装する。バリアテンプレートは、Ｃソースコードのループ終了箇所に１対１で実装する。
【００３５】
ループテンプレートは、ループの開始タイミングとループ回数の更新タイミングを示す入力信号線を１本ずつ実装する。
【００３６】
ループテンプレートはループ開始値と終了値、breakおよびcontine処理を指示することができる。
【００３７】
バリアテンプレートは、１ループの終了タイミングを示す入力信号と、ループ回数の更新タイミングを示す出力信号を１本ずつ実装する。
【００３８】
本発明では、ループテンプレートの開始タイミングを示す入力信号は、前段処理が出力する処理終了信号に、ループ回数の更新タイミングを示す入力信号は、対応するバリアテンプレートが出力する処理終了信号に、Ｃソースコードと１対１に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なループ動作を実現することとする。
【００３９】
ループテンプレート、およびバリアテンプレートは、接続形態により、並列動作や、多重ループを可能とする。テンプレート間の接続関係は、ＲＴＬレベルのハードウェア言語による記述により行う。その詳細は、図４を用いて後述する。
【００４０】
int、charと宣言いった宣言文は、レジスタテンプレートとして定義する。レジスタテンプレートは、Ｃソースコード内の宣言毎に１対１で実装する。
【００４１】
レジスタテンプレートは、レジスタの設定タイミングを示す入力信号と、レジスタの設定終了タイミングを示す出力信号を１本ずつ実装する。
【００４２】
レジスタテンプレートはレジスタのビット幅を指示することができる。
【００４３】
本実施形態では、レジスタの設定タイミングを示す入力信号は、前段処理が出力する処理終了信号に、レジスタの設定終了タイミングを示す出力信号は、後段処理に入力する処理開始信号に、Ｃソースコードと１対１に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なレジスタ設定動作を実現することとする。
【００４４】
レジスタテンプレートは、接続形態により並列動作を可能とする。また、ループテンプレート、およびバリアテンプレートとの接続形態により、パイプライン動作を可能とする。
【００４５】
メモリを表現する配列は、メモリアクセステンプレートとして定義する。メモリアクセステンプレートは、Ｃソースコードの各配列毎に１対１で実装する。
【００４６】
メモリアクセステンプレートは、メモリアクセス開始タイミングを示す入力信号と、メモリアクセス終了タイミングを示す出力信号を１本ずつ実装する。
【００４７】
本実施形態では、メモリアクセス開始タイミングを示す入力信号は、前段処理が出力する処理終了信号に、メモリアクセス終了タイミングを示す出力信号は、後段処理に入力する処理開始信号に、Ｃソースコードと１対１に対応させながら、数珠つなぎに接続することで、複雑なタイミング制御を撤廃しつつ、アルゴリズムに忠実なメモリアクセス動作を実現することとする。
【００４８】
メモリアクセステンプレートは、接続形態により並列動作を可能とする。また、ループテンプレート、およびバリアテンプレートとの接続形態により、パイプライン動作を可能とする。
【００４９】
本実施形態では、ifやcaseといった条件文は、テンプレートではなく、Ｃソースコードと１対１に対応させながら設計者がRTL記述を行う。タイミングの調整は、前段処理が出力する処理終了信号を、タイミングを調整し、後段処理に出力するテンプレートを備えることで実現することとする。
【００５０】
また、並列動作や、パイプライン動作は、テンプレート同士の接続形態や、固有のID番号の識別機能を有することにより可能となる。
【００５１】
更に処理単位の並列動作は、各テンプレートが１本ずつ実装している前段処理が出力する処理終了信号を、後段処理に入力する処理開始信号に並列に接続することで、実現することとする。
【００５２】
メモリアクセスの並列動作は、各メモリ資源単位に割り当てたID番号を識別することで可能とする。そして、メモリアクセスの並列動作は、メモリアクセステンプレート単位に行うこととする。各テンプレートはメモリ資源と対であり、メモリアクセステンプレートが生成したID番号を識別することにより、矛盾なく、メモリアクセスの並列動作を実行することとする。
【００５３】
パイプライン動作の処理単位は、ループテンプレート単位に行うこととする。各テンプレートは、ループテンプレートが生成したID番号を識別することにより、矛盾なく、パイプライン動作を実行することとする。
【００５４】
高速動作が必要なハードウェアでは、多重ループ中のメモリアクセスに、空サイクルが無いことが要求される。そのためには、多重ループの最下位ループは、空サイクルなしでループ回数を更新することが必要である。最下位ループ回数の終了と、上位ループ回数の更新との間にサイクル差が生じた場合は、上位ループ回数の状態を、ただちに下位ループへの反映が必要である。
【００５５】
本実施形態では、バッファ機能を有するテンプレートを用いることにより、サイクル差を隠蔽し、空サイクルが無いメモリアクセスを実現することとする。
【００５６】
本実施形態では、上位ループに接続するシェイクテンプレート、最下位ループに接続するボトムシェイクテンプレート、メモリアクセステンプレートに接続するバッファライトテンプレート、およびバッファリードテンプレートの４種類のテンプレートにより実現することとする。
【００５７】
更に、上位ループに接続するシェイクテンプレート、最下位ループに接続するボトムシェイクテンプレートにより、空サイクルの無い、多重ループのパイプラインを形成することとする。
【００５８】
また、本実施形態では、最下位ループに接続するボトムシェイクテンプレートと、多重ループ内の処理サイクル分のデータを保持するバッファライトテンプレートと、バッファライトテンプレートから読み出すデータのポインタを管理するバッファリードテンプレートにより、空サイクルのないメモリアクセスを実現することとする。
【００５９】
必要のない後続処理を中断することにより、アルゴリズムを高速化する手法がある。Ｃ言語のbreak文がこれにあたる。多重ループのパイプライン中に、下位ループ処理内で中断処理が発生した場合は、下位ループの処理をただちに中断し、上位ループのループ回数を更新する必要がある。また、ハードウェアでは、すでに先行してデータを受信しているため、そのデータを無効化する必要がある。
【００６０】
また本実施形態では、break文の動作向けに特化したブレイクマスクテンプレートと、下位ループテンプレートとの通信により、数サイクルでアルゴリズムの中断を実現することとする。
【００６１】
ブレイクマスクテンプレートは、下位ループテンプレートの後段に接続する。
【００６２】
Break文による中断条件が発生すると、下位ループテンプレートは処理を中断するが、パイプライン処理中のため、必要のないデータを余分に出力する。ブレイクマスクテンプレートは、その不要なデータを抑止することで、正常動作を保障する。
【００６３】
下位ループテンプレートによる処理中断は、シェイクテンプレートへ報告する。これにより、シェイクテンプレートは、あらかじめ登録済の次ループ回数を後段に出力することで、上位ループのループ回数の更新を実現することとする。
【００６４】
本実施形態に係る論理回路設計装置１００では、上記のテンプレートを格納する。この]状態で、ユーザがソフトウェアプログラミング言語としてＣ言語が用いられたソースコードを、ハードウェア記述言語としてＶＨＤＬ  （ｖｅｒｙ  ｈｉｇｈ−ｓｐｅｅｄ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ  ｈａｒｄｗａｒｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｌａｎｇｕａｇｅ）を使用した場合を例に説明する。
【００６５】
以下、図４乃至図８を参照しつつ、本実施形態に係る論理回路設計装置１００によるＲＴＬ設計について、具体例を挙げて説明する。図４は、Ｃ言語記述をＶＨＤＬ記述で書かれたテンプレートを組み合わせて論理回路を設計する際の設計画面例を示す説明図である。図５は、図４の設計画面で設定された論理回路の構成を示す説明図である。図６は、多重ループを含む論理回路の処理の流れを示すチャートを示す。図７は、空サイクルが無いメモリアクセスを実現論理回路の処理の流れを示すチャートを示す。図８は、数サイクルでアルゴリズムの中断を実現する論理回路の処理の流れを示すチャートを示す。
【００６６】
図４に示すように、論理回路設計に際して記述表示領域３０１にＣ言語記述（ソースコード）を表示する。そして、ユーザは、Ｃ言語記述の命令文に対応するテンプレートを、テンプレート領域３０３から選択し、設計領域３０２にドラッグする。以下、図４の設計画面４００に含まれるテンプレート、命令文等の詳細について説明する。
【００６７】
図４の設計画面４００において、符号１０はハードウェア化対象のＣソースによるアルゴリズム記述である。ここでは２重ｆｏｒループを例として取り上げる。
【００６８】
符号１１はテンプレートブロックの組み合わせで構成するハードウェア内サブモジュールのＲＴＬ記述である。
【００６９】
符号１２はモジュールの入力ポート記述である。この部分はテンプレートの埋め込みではない設計者記述であるが定型フォーマットの記述である。
【００７０】
符号１３はＣソースのｆｏｒ文に対応したループテンプレートである。Ｃソースのｆｏｒ文１行に対し１個のループテンプレートを配置する。ループテンプレートはスタート信号を受信すると、ｆｏｒループ値（ｊ、ｋ）を生成し、ｆｏｒ文内の演算処理を行う回路に送信する。ループテンプレートが送信するｆｏｒループ値は、ｆｏｒループ値送信先の演算回路レイテンシに合わせて更新する。ループテンプレートにはｆｏｒループの開始値及び終了値が設定できる。インスタンス名Ｌ０のループテンプレートが２重ｆｏｒループの外側ループのｆｏｒ文に対応し、インスタンス名Ｌ１のループテンプレートが２重ｆｏｒループの内側ループのｆｏｒ文に対応する。
【００７１】
ここで、テンプレート間の接続方法について、図４を参照して説明する。テンプレートの接続は、信号線を入力する操作により行う。例えば、図４のループテンプレート(外側ループ)とループテンプレート(内側ループ)を例にご説明する。
【００７２】
ループテンプレートには，SEという出力端子，SSという入力端子が含まれる。図４では、ループテンプレート(外側ループ)のSEと，ループテンプレート(内側ループ)のSSを下記のようにSE_L0という信号線で接続する。
【００７３】
L0:OoperL port map( … SE=>SE_L0, … )
L1:OoperL port map( … SS=>SE_L0(0), … )
上記「SE_L0」は人手で入力する。即ち、信号線を人手で入力してテンプレート間を接続する。
【００７４】
符号１４はＣソースの”ｊ＊ｋ”を算出する記述である。この部分テンプレートの埋め込みではない設計者記述である。ユーザは、設計領域３０２のうち、記述したい領域をダブルクックしてＲＴＬ入力欄３０５を表示させ、この中にＶＨＤＬ言語を用いて構文を記述する。
【００７５】
符号１５はＣソースの配列アクセスに対応した、メモリアクセステンプレートである。演算によって求めたＲＡＭアドレス、ＲＡＭライトデータを受信してＲＡＭに送信する。
【００７６】
符号１６はＣソースのｉｆ文に対応した条件判定の記述である。この部分テンプレートの埋め込みではない設計者記述である。
【００７７】
符号１７は、１つのｆｏｒループ終了示すステータス信号を生成するバリアテンプレートである。Ｃソースの１つｆｏｒ文の終了に対し、１個のバリアテンプレートを配置する。対応するループテンプレートがスタート信号を受信すると同時に、ステータス信号を”ループ処理中”にし、ｆｏｒループの終了によってステータス信号を”ループ終了”とする。
【００７８】
符号１８はアルゴリズムの終了を示す記述である。この部分はテンプレートの埋め込みではない設計者記述である。多重ループに対応する全てのバリアテンプレートの出力するステータス信号が”ループ終了”の状態で、多重ループ内の処理に対応した回路動作が完了した時、多重ループ終了信号を出力する。
【００７９】
符号１９はハードウェアモジュールの出力ポート記述である。符号１２と同様にこの部分はテンプレートの埋め込みではない設計者記述であるが定型フォーマットの記述である。
【００８０】
図５に、図４で論理回路設計をして得られたハードウェアモジュールの構成を示す。ハードウェアモジュールを構成は、テンプレートの組み合わせで構成したサブモジュールの外部にさらに、ステートマシンやテンプレートブロックなど周辺回路を付加することで構成する。
【００８１】
符号２０−１、２０−２、２０−３のそれぞれは、図４で示したテンプレートの組み合わせで構成したサブモジュールである。図５では、同一のサブモジュールを３つ含み、この３つのサブモジュールが並列実行する構成とする。
【００８２】
符号２１は、２０−１、２０−２、２０−３のそれぞれの起動を管理するステートマシンである。符号２０−１、２０−２、２０−３で示すサブモジュールは構成が同一であるので、以下では
符号２２はサブモジュール内のループテンプレートブロックがアクセスし、ループ値を生成するブロックである。このブロックをルーパーと呼ぶ。
【００８３】
符号２３は、サブモジュール内のメモリアクセステンプレートブロックのＩ／Ｆを、ＲＡＭ−Ｉ／Ｆに変換するブロックである。このブロックをコントラクタと呼ぶ。
【００８４】
符号２４はサブモジュール内のメモリアクセステンプレートブロックがアクセスするＲＡＭである。
【００８５】
符号２５は、ループテンプレートブロックのルーパーへのアクセス、またメモリアクセステンプレートブロックから、ＲＡＭへのアクセスを管理するブロックである、このブロックをメディエーターと呼ぶ。
【００８６】
符号２６は現在のステートマシンのステートに応じて、ＲＡＭ、ルーパーにアクセスするサブモジュールを切り替える回路である。
【００８７】
上記したブロックの内、ルーパー２２、コントラクタ２３、メディエーター２５は、テンプレートブロックである。
【００８８】
ステートマシン２１がスタート信号を受信すると、ステートの遷移を開始する。ステートマシン２１のステートに応じたサブモジュール（２０−１、２０−２、２０−３のいずれか）にスタート信号を送信し、スタート信号を受信したサブモジュール内の回路が動作を開始する。サブモジュール（２０−１、２０−２、２０−３のいずれか）内では順次、ループテンプレートブロックがルーパー２２へ、メモリアクセステンプレートがＲＡＭ２４へアクセスする。このとき、ステートマシン２１のステートによって、ＲＡＭ２４、ルーパー２２へのアクセス権を、現在起動中のサブモジュール（２０−１、２０−２、２０−３のいずれか）に与える。サブモジュール（２０−１、２０−２、２０−３のいずれか）内の回路動作が完了したら、サブモジュール（２０−１、２０−２、２０−３のいずれか）は動作終了信号をステートマシン２１に送信する。ステートマシン２１はサブモジュール（２０−１、２０−２、２０−３のいずれか）から受信した動作終了信号によってステートを次ステートに遷移させ、次ステートに対応したサブモジュール（２０−２又は２０−３）にスタート信号を送信する。
【００８９】
ステートマシン２１の遷移とサブモジュール（２０−１、２０−２、２０−３のいずれか）の起動を繰り返し、ステートマシン２１の最終ステートに対応したサブモジュール（２０−１、２０−２、２０−３のいずれか）の動作終了によって、ハードウェアモジュール全体の動作が完了する。
【００９０】
図６に示すように、ループテンプレート（上位）は、ループの開始タイミングを示すセットと、ループ回数の更新タイミングを示すアップを入力とする。
【００９１】
ループテンプレート（最下位）はループ開始値と終了値、ｂｒｅａｋおよびｃｏｎｔｉｎｅ処理指示するオーダを入力とする。
【００９２】
バリアテンプレート（上位）は、１ループの終了タイミングを示す信号を入力とし、ループ回数の更新タイミングを示す信号を出力する。
【００９３】
このように多重ループは、対となるループテンプレートとバリアテンプレートを、多重に組み合わせることで実現する。
【００９４】
図６では、メモリアクセス処理に空サイクルが生じている。高速動作が必要なハードウェアでは、多重ループ中のメモリアクセスは、空サイクルが無いことが要求される。そのためには、多重ループの最下位ループは、空サイクルなしでループ回数を更新することが必要である。最下位ループ回数の終了と、上位ループ回数の更新との間にサイクル差が生じた場合は、上位ループ回数の状態を、ただちに下位ループへ反映が必要である。
【００９５】
そこで、シェイクテンプレート、ボトムシェイクテンプレート、バッファライトテンプレート、及びバッファリードテンプレートと呼ぶ、４種類のバッファ機能を有するテンプレートを用いることにより、サイクル差を隠蔽し、空サイクルが無いメモリアクセスを実現する。  
図７では、上位ループテンプレートの後段にシェイクテンプレートを接続する。下位ループテンプレートの後段にボトムシェイクテンプレートを接続する。メモリアクセステンプレートの前段にバッファライトテンプレート、およびバッファリードテンプレートの順に接続する。
【００９６】
上位ループテンプレートは、ループ回数をシェイクテンプレートに送出する。シェイクテンプレートは、上位ループテンプレートからループ回数を受信すると、ただちに上位ループテンプレートにループ回数の更新を要求する。上位ループテンプレートは、シェイクテンプレートからのループ回数の更新要求に従い、ループ回数を更新し、ただちにシェイクテンプレートへ送出する。これにより、シェイクテンプレートは、自ループ回数と次ループ回数を保持する。
【００９７】
最下位ループテンプレートは、空サイクルなしに、ループ回数を更新し、順次、後段処理へ送出する。
【００９８】
ボトムシェイクテンプレートは、多重ループ内の処理レイテンシを考慮し、パイプラインを隠蔽する、タイミングを前倒しした、上位ループのループ回数更新タイミングを、シェイクテンプレートへ出力する（矢印４１で図示）。
【００９９】
バッファライトテンプレートは、パイプラインレイテンシ分データを保持する。データを保持したポインタは、バッファリードテンプレートに登録する。バッファリードテンプレートは、バッファライトテンプレートのポインタを、パイプラインレイテンシ分サイクルシフト後に、バッファライトテンプレートからデータを読み出しデータを供給することで、空サイクルの無いメモリアクセスを実現する（符号４２）。
【０１００】
多重ループのパイプライン中に、下位ループ処理内で中断処理が発生した場合は、下位ループの処理をただちに中断し、上位ループのループ回数を更新する必要がある。また、ハードウェアでは、すでに先行してデータを受信しているため、そのデータを無効化する必要がある。
【０１０１】
ブレイクマスクテンプレートと呼ぶ、ｂｒｅａｋ文の動作向けに特化したテンプレートと、下位ループテンプレートとの通信により、数サイクルでアルゴリズムを中断を実現する。図８にその処理動作を示す。
【０１０２】
ブレイクマスクテンプレートは、下位ループテンプレートの後段に接続する。
【０１０３】
ｂｒｅａｋ文による中断条件が発生すると、下位ループテンプレートは処理を中断するが、パイプライン処理中のため、必要のないデータを余分に出力する。ブレイクマスクテンプレートは、その不要なデータを抑止することで、正常動作を保障する（符号５１に相当する）。
【０１０４】
下位ループテンプレートによる処理中断は、シェイクテンプレートへの報告する。これにより、シェイクテンプレートは、あらかじめ登録済の、次ループ回数を後段に出力することで、上位ループのループ回数の更新を実現する。ループテンプレート内のオーダ５２が次ループの開始を示す。
【０１０５】
上記実施形態は、本発明を限定するものではなく、要旨を変更しない範囲で様々な変更態様がありうる。例えばソフトウェアプログラム言語記述として、Ｃ言語により記述されたソースプログラムを例に挙げ、これをＶＨＤＬ記述に変換する処理について説明したが、ソフトウェアプログラム言語記述は、Ｃ言語に限定されない。例えば、Ｐａｓｃａｌ、Ｃ＋＋などでもよい。また、ハードウェア記述言語もＶＨＤＬに限定されず、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＳＦＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｆｕｎｃｔｉｏｎ  ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）、ＵＤＬ／Ｉ（Ｕｎｉｆｉｅｄ  Ｄｅｓｉｇｎ  Ｌａｎｇｕａｇｅ  ｆｏｒ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ）でもよい。
【符号の説明】
【０１０６】
１００  論理回路設計装置
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  ＨＤＤ
１０５  Ｉ／Ｆ
１０６  表示装置
１０７  操作装置
１０８  バス
【図１】
2015125579.tif 000003
【図２】
2015125579.tif 000004
【図３】
2015125579.tif 000005
【図４】
2015125579.tif 000006
【図５】
2015125579.tif 000007
【図６】
2015125579.tif 000008
【図７】
2015125579.tif 000009
【図８】
2015125579.tif 000010