(57)【要約】【課題】  関数ブロックにおいて動作タイミングの変更や並列動作の構成に変更が生じた場合、その関数ブロックに接続している別の関数ブロックの動作タイミングにも影響が及ぶため、ハードウエア開発の開発効率が低下するという課題がある。【解決手段】  ソースコード１０２及び動作タイミング仕様書１０１から動作タイミング制御や並列動作制御のハードウエア用ソースコード１０４を自動生成する。【選択図】  図１
2011221725.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理を実行するように動作記述されるソースコードと上記ソースコードに記述される複数の関数ブロックの動作タイミング仕様との入力を受け、
上記複数の関数ブロックのそれぞれの実行開始及び実行終了を制御する動作タイミング制御ソースコードと上記動作タイミング制御ソースコードにより生成される動作タイミング制御回路と接続するための回路記述を加えたハードウエア用ソースコードとを生成するハードウエア開発方法であって、
上記動作タイミング仕様は、上記複数の関数ブロックのうち並列動作する第１関数ブロック及び第２回路ブロックが定義され、
上記ハードウエア用ソースコードは、上記関数ブロックに対して上記動作タイミング制御回路からの起動信号を受けて動作開始する起動部と上記動作タイミング制御回路に上記関数ブロックの処理の終了を示す終了信号を生成する終了部の記述が上記ソースコードに加えられ、
上記動作タイミング制御ソースコードは、上記第１及び第２関数ブロックの開始判定部と上記第１及び第２関数ブロックの終了判定部とを含み、
上記開始判定部は、上記第１関数ブロックの実行開始条件及び上記第２関数ブロックの実行開始条件を満たした場合に、上記第１関数ブロックを起動する第１起動信号及び上記第２関数ブロックを起動する第２起動信号を生成し、
上記終了判定部は、上記第１関数ブロックからの終了信号を受けて上記第１関数ブロックの処理の終了を判定し、上記第２関数ブロックからの終了信号を受けて上記第２関数ブロックの処理の終了を判定することを特徴とするハードウエア開発方法。
【請求項２】
請求項１において、
上記動作タイミング仕様は、列(水平方向)および行(垂直方向)のセルを集合させた２次元の表形式で構成され、
１個のセルに１個の関数ブロックの仕様が記述され、
列方向のセルには関数ブロック実行の時間経過が表現され、行方向のセルには複数の関数ブロックが並列動作することが表現されることを特徴とするハードウエア開発方法。
【請求項３】
請求項２記載において、
上記動作タイミング仕様の１個のセルに記載する項目は、設定対象ブロック名称と、上記設定対象ブロックの外部からの入力信号と、上記設定対象ブロックの外部への出力信号と、上記入力信号および上記出力信号を用いた論理式で記述するブロック実行開始条件とを含むことを特徴とするハードウエア開発方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウエア開発方法に関する。
【背景技術】
【０００２】
近年のハードウエア開発において、C言語等の高級言語で記述したソフトウエアのソースコードからRTL(Register Transfer Level)等のハードウエア記述言語への変換を自動で実行する動作合成ツールが徐々に普及してきている。動作合成ツールは、効率良く活用することでソフトウエアのアルゴリズムをハードウエア化する工程において一定の負担軽減効果が得られるため、今後もハードウエア開発現場での導入拡大が進むと予想される。
【０００３】
一方、ハードウエア開発では、処理ブロック間の信号接続だけではなく、処理ブロック毎の動作タイミングや並列動作を考慮する必要がある。しかし、C言語等では、そもそも動作タイミングや並列動作の概念がないために、これらの動作を記述することは不可能である。従って、現時点では関数ブロックの動作タイミング制御や並列動作制御等のアーキテクチャ設計を動作合成ツールのみで設計仕様を満足することは難しく、同アーキテクチャ開発は現在も開発者が人手で設計してハードウエア記述言語で実装を行っている。
【０００４】
ソフトウエアの関数ブロックの動作タイミング制御や並列動作制御等のアーキテクチャ設計を実現する手法として以下の先行技術がある。
【０００５】
特開2009-134739および特開2006-202262には、同期回路設計用ハードウエア記述言語に非同期プロセス間通信を可能とするプリミティブを付加した非同期回路設計言語を用いることで、前記のアーキテクチャ設計を実現する方法が公開されている。
【０００６】
特開2000-187681には、ソフトウエアの動作記述に並列動作記述および可変時間処理記述を表現可能なように機能追加することで、前記のアーキテクチャ設計を実現する方法が公開されている。
【０００７】
特開平10-116302には、機能の並列処理および同期通信をサポートするプログラミング言語を新たに定義することで、前記のアーキテクチャ設計を実現する方法が公開されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2009-134739号公報
【特許文献２】特開2006-202262号公報
【特許文献３】特開2000-187681号公報
【特許文献４】特開平10-116302号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記の先行技術文献で示した特開2009-134739および特開2006-202262の方法は、ソフトウエアの関数ブロックの動作タイミング制御や並列動作制御のアーキテクチャ設計をハードウエア記述言語のソースコード上で実装を行っている。また、特開2000-187681および特開平10-116302の方法は、動作記述言語(ソフトウエアソースコード上)に動作タイミング制御や並列動作制御を表現する記述拡張を行うことで実装を行っている。しかし、いずれの方法も、例えば、ある関数ブロックにおいて動作タイミングの変更や並列動作の構成に変更が生じた場合、その関数ブロックに接続している別の関数ブロックの動作タイミングにも影響が及ぶため、ソースコードの修正および動作の再検証を行う範囲が拡大し、結果的にハードウエア開発の開発効率が低下するという課題がある。
【課題を解決するための手段】
【００１０】
本発明のハードウエア開発方法は、ソースコードに記述(動作記述)した関数ブロックの動作タイミング制御や並列動作制御のアーキテクチャ設計をソースコード上への直接記述ではなく、動作タイミング仕様(電子データ)に入力することで行い、動作タイミング仕様書から動作タイミング制御や並列動作制御のハードウエア用ソースコードを自動生成するように構成する。
【発明の効果】
【００１１】
関数ブロックの動作タイミング制御や並列動作制御のアーキテクチャ設計を動作タイミング仕様書(電子データ)で行い、同制御のハードウエア用ソースコードを自動生成するため、ある関数ブロックの動作タイミング変更や並列動作の構成に変更が生じた場合でも、開発者がソースコードを直接変更する必要がなく、ハードウエア開発の開発効率が向上するという効果がある。また、関数ブロックの動作タイミング制御や並列動作制御のアーキテクチャ部分のソースコードを動作タイミング仕様書から自動生成するため、ハードウエアの回路品質が向上して、且つ、検査工程を短縮できることから、ハードウエア開発のコスト低減に繋がるという効果がある。
【図面の簡単な説明】
【００１２】
【図１】動作タイミング制御回路生成方法を示す図。
【図２】ソースコードの一例を示す図。
【図３】図２のソースコードに対応するフロー図。
【図４】動作タイミング仕様書の構成を示す図。
【図５】動作タイミング仕様書のセルの記載項目を示す図。
【図６】動作タイミング仕様書のセルの記載例を示す図。
【図７】各ブロックに追加する動作タイミング制御用の信号を示す図。
【図８】動作タイミング制御部と各ブロック間の接続状態を示す図。
【図９】動作タイミング制御部と各ブロック間の接続状態の別の一例を示す図。
【図１０】動作タイミング制御ソースコードの構成を示す図。
【図１１】入出力信号用変数の宣言記述部に記述するソースコードの一例を示す図。
【図１２】信号reqと信号ack用変数の宣言記述部に記述するソースコードの一例を示す図。
【図１３】関数名称の宣言記述部に記述するソースコードの一例を示す図。
【図１４】入出力信号用変数の一時保存用変数の宣言記述部に記述するソースコードの一例を示す図。
【図１５】動作タイミング制御部の開始判定部の動作を示すフロー図。
【図１６】動作タイミング制御部の開始判定部の動作を実装したソースコードの一例を示す図。
【図１７】動作タイミング制御部の終了判定部の動作を示すフロー図。
【図１８】動作タイミング制御部の終了判定部の動作を実装したソースコードの一例を示す図
【図１９】2個の制御対象ブロックが並列動作する場合における動作タイミング制御部の開始判定部の動作を示すフロー図。
【図２０】動作タイミング制御部の開始判定部の動作を実装したソースコードの一例を示す図。
【図２１】2個の制御対象ブロックが並列動作する場合における動作タイミング制御部の終了判定部の動作を示すフロー図。
【図２２】2個の制御対象ブロックが並列動作する場合における動作タイミング制御部の終了判定部の動作を実装したソースコードの一例を示す図。
【図２３】本発明の動作タイミング制御回路生成方法の全体フローを示す図。
【発明を実施するための形態】
【００１３】
図１は、本発明の動作タイミング制御回路生成方法を示す図である。図１に示すように、所定の処理を実行するように記述(動作記述)したソースコード102と、ソースコード102に記述した複数の関数ブロックのそれぞれの入出力信号、実行開始および実行終了の条件等を所定のフォーマットで入力した電子データである動作タイミング仕様書101とが動作タイミング制御回路生成部100に入力される。動作タイミング制御回路生成部100は、ソースコード102の中に記述されている複数の関数ブロックに対して、その実行開始および実行終了を制御する動作タイミング制御ソースコード104を新規に生成して出力し、さらに入力したソースコード102に動作タイミング制御回路(動作タイミング制御ソースコード104に基づき生成されるハードウエア)と接続するための回路記述を加えたハードウエア用ソースコード103を出力する。なお、動作タイミング制御回路生成部100は、コンピュータ、サーバのような一般的な情報処理装置により実現できる。
【００１４】
図２に、ソースコード102の一例を示す。ソースコード102に記述される複数の関数ブロック(以下、ブロックと称する)は、それぞれ所定の機能を持ち、１個または複数の信号を入力して所定の処理を実行し、実行結果として１個または複数の信号を出力する。例えば、ブロックＡ(200)は、信号S1(206)を入力して信号S4(209)を出力することを表している。その他のブロックB(201)、ブロックC(202)、ブロックD(203)、ブロックE(204)およびブロックF(205)についても同様である。各ブロックには、所定のシステム外部からの信号（S1, S2, S3, S11）および／または、他のブロックからの出力信号(S4, S5, S6, S7, S8)が入力される。なお、ソースコード102の記述には、処理のアルゴリズムだけが記述されており、処理タイミングや並列処理といった時間的な側面の記述はなされていない。
【００１５】
図３は、動作記述および並列処理を考慮した記述の処理概念を示す図である。
【００１６】
図３(a)は、図２に示したブロック図の動作記述に対応するフロー図である。まずブロックAを実行し(ステップ300)、その次にブロックBを実行し(ステップ302)、さらにブロックCを実行(ステップ303)、ブロックDを実行(ステップ304)、ブロックEを実行(ステップ305)、ブロックFを実行(ステップ306)と逐次に処理を実行する。
【００１７】
しかしながら、図２に示したブロック図では並列実行可能なブロックが存在しており、図３(b)は、並列処理を考慮したフロー図である。図２に示したブロックのうち、ブロックA(200)、ブロックB(201)およびブロックC(202)は、他のブロックの出力信号を参照しないため並列に実行開始が可能である(ステップ307)。一方、ブロックD(203)は、ブロックB(201)およびブロックC(202)の実行結果が確定してから実行開始する必要がある(ステップ308)。また、ブロックE(204)は、ブロックD(203)およびブロックA(200) の実行結果が確定してから実行開始する必要がある。同様に、ブロックF(205)は、ブロックD(203)の実行結果が確定してから実行開始する必要があるが、ブロックE(204)とブロックF(205)は、ブロックD(203)の実行結果が確定した後に並列に実行開始が可能である(ステップ309)。
【００１８】
このように、動作記述のソースコード102では、処理タイミングおよび並列処理を考慮した動作を直接記述することが不可能である。処理タイミングおよび並列処理を考慮した動作記述を行うためには、例えばSystemC(ハードウエア記述用システム設計言語)やVerilog(ハードウェア記述言語)を用いることで詳細な動作を記述することが可能である。しかし、従来、タイミング設計や並列実行設計は開発者自身が行い、その詳細な動作の振る舞いをソースコードに直接記述する必要があった。本発明は、ハードウエア開発の負担軽減を目的に、各ブロックを実行するタイミング設計や並列実行設計を動作タイミング仕様書から生成するようにしたものであり、以下のその方法の詳細を述べる。
【００１９】
図４は、動作タイミング仕様書101の構成を示す図である。動作タイミング仕様書は、二次元(列および行)のセルの集合で構成する。１個のセルに対してある１個のブロックの仕様を記述する。仕様の記述自体は開発者が手動入力で行う。
【００２０】
動作タイミング仕様書の列(水平方向)は、ブロックが実行する場合の時間経過を表現する。右にあるブロック程、実行の開始時間が遅いことを表している。行(垂直方向)は、複数ブロックが並列実行することを表現する。
【００２１】
同図の動作タイミング仕様書の例では、H1列のブロックA(401)、ブロックB(402)およびブロックC(403)の３個のブロックがある時間軸において並列に動作、H2列のブロックD(404)がある時間軸において単独で動作、H3列のブロックE(405)およびブロックF(406)の２個のブロックがある時間軸において並列に動作することを表している。また、動作タイミング仕様書には、動作タイミング制御ソースコードに実装する制御関数の関数名称(407)も記載する。
【００２２】
図５は、動作タイミング仕様書101のセルの記載項目を示す図である。セルに記載する項目は、ブロック名称501、入力信号502、出力信号503、ブロック実行開始条件504である。ブロック名称501には、設定対象ブロックの名称(関数名称)を入力する。入力信号502には、設定対象ブロック外部からの入力信号名を入力する。出力信号503には、設定対象ブロック外部への出力信号名を入力する。ブロック実行開始条件504には、設定対象ブロックの実行開始条件を入力する。前記の入力信号名および出力信号名とは、ブロックの入出力端子の名称がそれに該当する。
【００２３】
図６に、動作タイミング仕様書101のセルの記載例を示す。図６(a)は、図２記載のブロックD(203)の仕様を入力した例である。ブロック名称601は「BLOCK_D」、入力信号602は「S5およびS6」、出力信号603は「S7およびS8」、ブロック実行開始条件604は「(S5==1)AND(S6==2)」という仕様であることを表している。なお、ブロック実行開始条件604の「(S5==1)AND(S6==2)」とは、入力信号S5の値が「1」で、且つ入力信号S6の値が「2」である時にBLOCK_Dの実行を開始することを表している。
【００２４】
図６(b)は、図２記載のブロックE(204)の仕様を入力した例である。ブロック名称606は「BLOCK_E」、入力信号607は「S4およびS7」、出力信号608は「S9」、ブロック実行開始条件609は「((S4==10)OR(S7==20))AND(S11!=0)」という仕様であることを表している。なお、ブロック実行開始条件609の「((S4==10)OR(S7==20))AND(S11!=0)」とは、入力信号S4の値が「10」または入力信号S7の値が「20」であるときで、かつ入力信号S11の値が「0」である時にBLOCK_Eの実行を開始することを表している。
【００２５】
図６(c)は、図２記載のブロックF(205)の仕様を入力した例である。ブロック名称611は「BLOCK_F」、入力信号612は「S8」、出力信号613は「S10」、ブロック実行開始条件614は「(S8==1)」という仕様であることを表している。なお、ブロック実行開始条件614の「(S8==1)」とは、入力信号S8の値が「1」である時にBLOCK_Fの実行を開始することを表している。
【００２６】
図７は、ハードウエア用ソースコード103を生成する過程で各ブロックに追加する動作タイミング制御用の信号を示す図である。動作タイミング制御回路生成部100が出力するハードウエア用ソースコード103に記載の各ブロック(同図ではBLOCK_D(700))には、動作タイミング制御部104から実行開始を伝達するための信号req(701)と、各ブロックの実行終了を動作タイミング制御部104へ伝達するための信号ack(702)が追加される。信号req(701)および信号ack(702)は動作タイミング制御部104と接続する。すなわち、ハードウエア用ソースコード103には、ブロックに対して動作タイミング制御回路（詳細は後述する）からの起動信号reqを受けて動作開始する起動部と動作タイミング制御回路にブロックの処理の終了を示す終了信号ackを生成する終了部の記述がソースコードに加えられる。
【００２７】
図８は、動作タイミング制御回路生成部100が出力する動作タイミング制御部803(104)と各ブロック間の入出力信号の接続状態を示す図である。ここでは、一例として、動作タイミング制御部803(104)と１個のブロック(BLOCK_D(800))間の入出力信号の接続状態を示している。
【００２８】
動作タイミング制御部803は、各ブロックに実行開始信号を出力する開始判定部804と、各ブロックから実行終了信号を入力する終了判定部805を備える。BLOCK_D(800)の入力信号S5およびS6と信号req(801)を開始判定部804と接続する。さらに、BLOCK_D(800)の信号ack(802)を終了判定部805と接続する。
【００２９】
図９は、動作タイミング制御回路生成部100が出力する動作タイミング制御部803と各ブロック間の入出力信号の接続状態の別の一例を示す図である。同図では、動作タイミング制御部906(104)と2個のブロック(BLOCK_E(900)およびBLOCK_F(901))間の入出力信号の接続状態を示している。BLOCK_E(900)の入力信号S4、S7、S11と信号req1(902)およびBLOCK_F(901)の入力信号S8と信号req2(903)を開始判定部907と接続する。さらに、BLOCK_E(900)の信号ack1(904)およびBLOCK_F(901)の信号ack2(905)を終了判定部908と接続する。
【００３０】
図１０は、動作タイミング制御ソースコード104の構成を示す図である。動作タイミング制御回路生成部100が生成する動作タイミング制御ソースコード104は、制御対象ブロックの入出力信号用変数の宣言記述部1001と、信号req(出力)と信号ack(入力)用変数の宣言記述部1002と、動作タイミング制御部の関数名称の宣言記述部1003と、入出力信号用変数の一時保存用変数の宣言記述部1004と、制御対象ブロックの開始判定部の動作記述部1005と、制御対象ブロックの終了判定部の動作記述部1006とで構成される。
【００３１】
図１１は、制御対象ブロックの入出力信号用変数の宣言記述部1001に記述するソースコードの一例を示す図である。同図は、図６(a)記載のBLOCK_Dの動作タイミング仕様書のセルの入力信号および出力信号を参照して生成したソースコードの出力例である。１行目のinput文は、BLOCK_Dの入力信号にS5およびS6が存在することを表している。２行目のoutput文は、BLOCK_Dの出力信号にS7およびS8が存在することを表している。
【００３２】
図１２は、制御対象ブロックの信号req(出力)と信号ack(入力)用変数の宣言記述部1002に記述するソースコードの一例を示す図である。この部分のソースコードは、動作タイミング制御ソースコード104生成時に制御対象ブロック毎に追加する。１行目のinput文は、BLOCK_Dの入力信号にackが存在することを表している。２行目のoutput文は、BLOCK_Dの出力信号にreqが存在することを表している。
【００３３】
図１３は、動作タイミング制御部の関数名称の宣言記述部1003に記述するソースコードの一例を示す図である。module文で始まる関数名称は、図４に示した動作タイミング仕様書400に記載した動作タイミング制御部用の関数名称(407)を参照してソースコードに出力する。module文は、入出力信号用変数の一時保存用変数の宣言記述部1301と、制御対象ブロックの開始判定部の動作記述部1302と、制御対象ブロックの終了判定部の動作記述部1303とで構成する。
【００３４】
図１４は、入出力信号用変数の一時保存用変数の宣言記述部1004に記述するソースコードの一例を示す図である。
【００３５】
１行目の変数kickは、出力信号reqの一時保存用変数である。２行目の変数doneは、入力信号ackの一時保存用変数である。３行目および４行目は、kickおよびdoneの初期化を表している。
【００３６】
図１５は、動作タイミング制御部803の開始判定部804の動作を示すフロー図である。
【００３７】
制御対象ブロックの開始判定のソースコードは、動作タイミング仕様書の制御対象ブロックのセルに記載したブロック実行開始条件の内容を参照して出力する。まず、制御対象ブロックの実行開始条件を満たしたかどうかを判定する(ステップ1500)。実行開始条件を満たした場合は、変数kickに「1」を代入し(ステップ1501)、変数doneに「0」を代入し(ステップ1502)、出力信号reqに変数kickの値を代入する(ステップ1503)。実行開始条件を満たさない場合は、変数kickに「0」を代入し(ステップ1504)、変数doneに「1」を代入し(ステップ1505)、出力信号reqに変数kickの値を代入する(ステップ1503)。
【００３８】
出力信号reqに「1」が代入されて制御対象ブロックに伝達された時点で、同制御対象ブロックが実行開始される。出力信号reqに「0」が代入された場合は、制御対象ブロックの実行は開始されずに待機状態となる。
【００３９】
図１６は、動作タイミング制御部803の開始判定部804の動作を実装したソースコードの一例を示す図である。同図は、図６(a)で示したBLOCK_Dの動作タイミング仕様書の記述を参照して生成したソースコードの一例であり、図１５で示したフロー図の処理を実装している。１行目のif文が制御対象ブロックの実行開始判定部分である。
【００４０】
図１７は、動作タイミング制御部803の終了判定部805の動作を示すフロー図である。
【００４１】
制御対象ブロックの終了判定のソースコードは、信号ackの状態を観測する構造で出力する。まず、制御対象ブロックの処理が未終了かどうかを信号ackの一時保存用変数doneを参照して判定する(ステップ1700)。制御対象ブロックの処理が未終了の場合、さらに、信号ackが「1」かどうかを判定する(ステップ1701)。信号ackが「1」の場合は、変数doneに「1」を代入する(ステップ1701)。信号ackが「1」でない場合は、ステップ1700に戻る。
【００４２】
信号ackが「1」になることは制御対象ブロックの処理が終了していることを表している。同フローでは、信号ackが「1」に変化した後に変数doneを「1」に代入しているので、ステップ1700の判定において、変数doneが「1」である場合は、制御対象ブロックの処理が終了していることを表している。制御対象ブロックの処理が終了した場合は、同フローを終了する。
【００４３】
図１８は、動作タイミング制御部803の終了判定部805の動作を実装したソースコードの一例を示す図である。同図は、図１７で示したフロー図の処理を実装している。１行目のwhile文が制御対象ブロックの終了開始判定部分である。
【００４４】
なお、while文の中で信号ackを直接観測していない理由は、並列動作の複数の制御対象ブロックの終了判定を行う構成(後述する)の場合、常に複数の制御対象ブロックの終了が同時に発生することは考えにくいため、終了タイミングがずれた場合でも１つの判定文で終了判定が可能なようにするためである。
【００４５】
図１９は、２個の制御対象ブロックが並列動作する場合における動作タイミング制御部906の開始判定部907の動作を示すフロー図である。
【００４６】
制御対象ブロックの開始判定のソースコードは、動作タイミング仕様書の制御対象ブロックのセルに記載したブロック実行開始条件の内容を参照して出力する。まず、制御対象ブロックの実行開始条件を満たしたかどうかを判定する(ステップ1900)。実行開始条件を満たした場合は、変数kick_eおよび変数kick_fに「1」を代入し(ステップ1901)、変数done_eおよび変数done_fに「0」を代入し(ステップ1902)、出力信号req_eに変数kick_eの値を代入および出力信号req_fに変数kick_fの値を代入する(ステップ1903)。実行開始条件を満たさない場合は、変数kick_eおよびkick_fに「0」を代入し(ステップ1904)、変数done_eおよび変数done_fに「1」を代入し(ステップ1905)、出力信号req_eに変数kick_eの値を代入および出力信号req_fに変数kick_fの値を代入する(ステップ1903)。
【００４７】
出力信号req_eおよび出力信号req_fに「1」が代入されて2個の制御対象ブロックに伝達された時点で、同2個の制御対象ブロックが実行開始される。出力信号req_eおよび出力信号req_fに「0」が代入された場合は、同2個の制御対象ブロックの実行は開始されずに待機状態となる。
【００４８】
図２０は、動作タイミング制御部906の開始判定部907の動作を実装したソースコードの一例を示す図である。
【００４９】
同図は、図６(b)および図６(c)で示したBLOCK_EおよびBLOCK_Fの動作タイミング仕様書の記述を参照して生成したソースコードの一例であり、図１９で示したフロー図の処理を実装している。1行目のif文がBLOCK_EおよびBLOCK_Fの2個の制御対象ブロックの実行開始判定部分である。
【００５０】
図２１は、2個の制御対象ブロックが並列動作する場合における動作タイミング制御部906の終了判定部908の動作を示すフロー図である。
【００５１】
２個の制御対象ブロックの終了判定のソースコードは、信号ack_eおよび信号ack_fの2個の信号状態を観測する構造で出力する。まず、制御対象ブロックの処理が未終了かどうかを信号ack_eおよび信号ack_fの一時保存用の変数done_eおよび変数done_fを参照して判定する(ステップ2100)。制御対象ブロックの処理が未終了の場合、さらに、信号ack_eが「1」かどうかを判定する(ステップ2101)。信号ack_eが「1」の場合は、変数done_eに「1」を代入する(ステップ2102)。信号ack_eが「1」でない場合は、次に、信号ack_fが「1」かどうかを判定する(ステップ2103)。信号ack_fが「1」の場合は、変数done_fに「1」を代入する(ステップ2104)。信号ack_fが「1」でない場合は、ステップ2100に戻る。
【００５２】
信号ack_eおよび信号ack_fが「1」になることは2個の制御対象ブロックの処理が終了していることを表している。同フローでは、信号ack_eおよび信号ack_fが「1」に変化した後に変数done_eおよび変数done_fを「1」に代入しているので、ステップ2100の判定において、変数done_eおよび変数done_fが「1」である場合は、2個の制御対象ブロックの処理が終了していることを表している。2個の制御対象ブロックの処理が終了した場合は、同フローを終了する。
【００５３】
図２２は、2個の制御対象ブロックが並列動作する場合における動作タイミング制御部906の終了判定部908の動作を実装したソースコードの一例を示す図である。
【００５４】
同図は、図２１で示したフロー図の処理を実装している。1行目のwhile文が2個の制御対象ブロックの終了開始判定部分である。
【００５５】
図２３は、本発明の動作タイミング制御回路生成方法で実施する手順の全体フローを示す図である。本手順では、動作タイミング仕様書101（図４を参照）のHn列の左端(時間軸の先頭)のセルから処理を開始し、Hn列の右端(時間軸の後端)に向かって回路生成処理を実行する。
【００５６】
まず、動作タイミング仕様書101の現在参照しているHn列の仕様記述が終了している(以後のセルに仕様記述が存在しない)かどうかを判定する(ステップ2300)。現在参照しているHn列の仕様記述が終了していない(以後のセルに仕様記述が存在する)場合は、現在参照しているHn列の並列動作ブロック数を取得し、その数をVnとする(ステップ2301)。次に、Vn個の制御対象ブロックの入出力信号用変数の宣言記述を出力し(ステップ2302)、続いて、Vn個の制御対象ブロックの信号reqおよび信号ack用変数の宣言記述を出力する(ステップ2303)。次に、動作タイミング制御部の関数名称の宣言記述を出力する(ステップ2304)。動作タイミング制御部の関数ブロックの中に、Vn個の制御対象ブロックの入出力信号用変数の一時保存用変数の宣言記述を出力し(ステップ2305)、Vn個の制御対象ブロックの開始判定部の動作記述を出力し(ステップ2306)、さらに、Vn個の制御対象ブロックの終了判定部の動作記述を出力する(ステップ2307)。この後、次のHn列に移り(ステップ2308)、以後のHn列の仕様記述が終了している(以後のセルに仕様記述が存在しない)かどうかの判定を行い、以後のHn列の仕様記述が終了している場合は本フローを終了する。
【符号の説明】
【００５７】
100…動作タイミング制御回路生成部、101…動作タイミング仕様書、102…ソースコード、103…ハードウエア用ソースコード、104…動作タイミング制御ソースコード。
【図１】
2011221725.tif 000003
【図２】
2011221725.tif 000004
【図３】
2011221725.tif 000005
【図４】
2011221725.tif 000006
【図５】
2011221725.tif 000007
【図６】
2011221725.tif 000008
【図７】
2011221725.tif 000009
【図８】
2011221725.tif 000010
【図９】
2011221725.tif 000011
【図１０】
2011221725.tif 000012
【図１１】
2011221725.tif 000013
【図１２】
2011221725.tif 000014
【図１３】
2011221725.tif 000015
【図１４】
2011221725.tif 000016
【図１５】
2011221725.tif 000017
【図１６】
2011221725.tif 000018
【図１７】
2011221725.tif 000019
【図１８】
2011221725.tif 000020
【図１９】
2011221725.tif 000021
【図２０】
2011221725.tif 000022
【図２１】
2011221725.tif 000023
【図２２】
2011221725.tif 000024
【図２３】
2011221725.tif 000025