(57)【要約】【課題】任意の機能安全機構を実装したＲＴＬ記述を生成すること。【解決手段】機能論理を規定する動作記述１１０と、高位合成制約を規定する高位合成スクリプト１２０と、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様１３０と、を用いて機能安全機構を挿入したＲＴＬ記述を生成する高位合成方法である。高位合成方法は、高位合成部が、動作記述１１０を用いてコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップＳ１と、コントロールデータフローグラフ生成ステップＳ１の後、高位合成部が、機能安全機構実装仕様１３０に従い、コントロールデータフローグラフに機能安全機構を挿入する第１機能安全機構挿入処理ステップＳ２と、を有する。【選択図】図１９
2020160650.tif 000002
【特許請求の範囲】
【請求項１】
機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて前記機能安全機構を挿入したＲＴＬ記述を生成する高位合成方法であって、
高位合成部が、前記動作記述を用いてコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、
前記コントロールデータフローグラフ生成ステップの後、前記高位合成部が、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入する第１機能安全機構挿入処理ステップと、を有する、
高位合成方法。
【請求項２】
請求項１に記載の高位合成方法において、
前記第１機能安全機構挿入処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対し前記機能安全機構論理を挿入する第１機能安全機構挿入ステップを有する、
高位合成方法。
【請求項３】
請求項２に記載の高位合成方法において、
前記第１機能安全機構挿入処理ステップの後、
前記高位合成部が、前記高位合成スクリプトで規定された高位合成制約に基づくスケジューリング処理を行うスケジューリング処理ステップと、
前記スケジューリング処理ステップの後、前記高位合成部が、コントロールデータフローグラフに対するバインディング処理を行うバインディング処理ステップと、を有する、
高位合成方法。
【請求項４】
請求項３に記載の高位合成方法において、
前記バインディング処理ステップの後、
前記高位合成部が、前記スケジューリング処理ステップ後のコントロールデータフローグラフ、及び前記バインディング処理ステップ後のコントロールデータフローグラフを用いて制御回路を作成する制御回路作成処理ステップと、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記制御回路作成処理ステップにおいて作成された前記制御回路に対する機能安全機構回路を挿入する第２機能安全機構挿入処理ステップと、を有する、
高位合成方法。
【請求項５】
請求項４に記載の高位合成方法において、
前記第２機能安全機構挿入処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された任意の制御回路に対し前記機能安全機構回路を挿入する、第２機能安全機構挿入ステップを有する、
高位合成方法。
【請求項６】
請求項４に記載の高位合成方法において、
前記第２機能安全機構挿入処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含むＲＴＬ回路のモジュールを作成するＲＴＬ記述生成処理を行う、ＲＴＬ記述生成処理ステップを有する、
高位合成方法。
【請求項７】
請求項６に記載の高位合成方法において、
前記ＲＴＬ記述生成処理ステップは、前記高位合成部が、挿入した前記機能安全機構を、前記機能安全機構実装仕様で指定されたモジュール階層に出力する、モジュール階層出力ステップを有する、
高位合成方法。
【請求項８】
機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて、ＲＴＬ記述と、前記ＲＴＬ記述に対する機能安全機構実装指示と、を生成する高位合成方法であって、
高位合成部が、前記動作記述を用いてコントロールデータフローグラフを生成した後、前記機能安全機構実装仕様に従い、前記ＲＴＬ記述に対応する前記機能安全機構の挿入位置を記録した前記コントロールデータフローグラフを生成する、第１機能安全機構挿入位置記録処理ステップを有する、
高位合成方法。
【請求項９】
請求項８に記載の高位合成方法において、
前記第１機能安全機構挿入位置記録処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対する前記機能安全機構の挿入位置を記録する、第１機能安全機構挿入位置記録ステップを有する、
高位合成方法。
【請求項１０】
請求項９に記載の高位合成方法において、
前記第１機能安全機構挿入位置記録処理ステップの後、
前記高位合成部が、前記高位合成スクリプトで規定された高位合成制約に基づくスケジューリング処理を行うスケジューリング処理ステップと、
前記高位合成部が、前記スケジューリング処理後のコントロールデータフローグラフに対するバインディング処理を行うバインディング処理ステップと、を有する、
高位合成方法。
【請求項１１】
請求項１０に記載の高位合成方法において、
前記バインディング処理ステップの後、
前記高位合成部が、前記スケジューリング処理ステップ後のコントロールデータフローグラフ、及び前記バインディング処理ステップ後のコントロールデータフローグラフを用いて制御回路を作成する制御回路作成処理ステップと、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記制御回路作成処理ステップにおいて作成された前記制御回路に対する機能安全機構の挿入位置を記録する第２機能安全機構挿入位置記録処理ステップを有する、
高位合成方法。
【請求項１２】
請求項１１に記載の高位合成方法において、
前記第２機能安全機構挿入位置記録処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された任意の制御回路に対し前記機能安全機構の挿入位置を記録する、第２機能安全機構挿入位置記録ステップを有する、
高位合成方法。
【請求項１３】
請求項１１に記載の高位合成方法において、
前記第２機能安全機構挿入位置記録処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含まないＲＴＬ回路のモジュールを作成するＲＴＬ記述生成処理ステップを有する、
高位合成方法。
【請求項１４】
請求項１３に記載の高位合成方法において、
前記ＲＴＬ記述生成処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含まないＲＴＬ回路のモジュールに対する機能安全機構実装指示を作成する機能安全機構実装指示生成処理ステップを有する、
高位合成方法。
【請求項１５】
請求項１３に記載の高位合成方法において、
前記ＲＴＬ記述生成処理ステップは、前記高位合成部が、前記機能安全機構を実装するモジュール階層を、前記機能安全機構実装仕様に従い指定する、モジュール階層指定ステップを有する、
高位合成方法。
【請求項１６】
請求項１４に記載の高位合成方法において、
前記機能安全機構実装指示生成処理ステップは、
前記高位合成部が、前記機能安全機構のモジュールに関するモジュール実装指示を行うモジュール実装指示ステップと、
前記高位合成部が、前記機能安全機構のモジュールのリソースに関するリソース実装指示を行うリソース実装指示ステップと、を有する、
高位合成方法。
【請求項１７】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成装置であって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いた高位合成を行い、前記機能安全機構を挿入したＲＴＬ記述を生成する高位合成部を備えた、高位合成装置。
【請求項１８】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成装置であって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いた高位合成を行い、ＲＴＬ記述と、前記ＲＴＬ記述に対する機能安全機構実装指示と、を生成する高位合成部を備えた、高位合成装置。
【請求項１９】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成システムであって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用い、前記動作記述を用いてコントロールデータフローグラフを生成し、前記コントロールデータフローグラフの生成後に、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入し、前記機能安全機構を挿入したＲＴＬ記述を生成する、
高位合成システム。
【請求項２０】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成システムであって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様とを用い、前記動作記述を用いてコントロールデータフローグラフを生成し、前記コントロールデータフローグラフの生成後に、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入し、ＲＴＬ記述と、前記ＲＴＬ記述に対する機能安全機構実装指示と、を生成する高位合成を行う、
高位合成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成方法、高位合成装置、及び高位合成システムに関する。
【背景技術】
【０００２】
回路規模が増大するにつれ、システムレベル言語やプログラミング言語を用いた集積回路設計が行われるようになっている。システムレベル言語やプログラミング言語からハードウェア記述言語への変換には、例えば、高位合成と呼ばれる手法が知られている。回路として実現する機能の機能論理のみを具体的に記述した動作記述と、高位合成の制約を指定する高位合成スクリプトと、を用いた高位合成を行うことにより、動作記述の内容を実現する回路構成がハードウェア記述言語として生成される。高位合成に関して、例えば、以下に示す特許文献、非特許文献が開示されている。
【０００３】
非特許文献１には、一般的な高位合成について記載されている。高位合成では、動作記述を入力とし、論理合成可能なＲＴＬ（Ｒｅｓｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）記述が生成される。その過程において、高位合成制約に基づき、ＣＤＦＧ（コントロールデータフローグラフ）作成、スケジューリング、バインディング、制御回路生成等の各処理が実施され、ＲＴＬ記述が生成される。ＣＤＦＧ作成では、動作記述の様々なステップ間のデータ依存関係が解析され、内部表現であるグラフが作成される。スケジューリングでは、ＣＤＦＧに記述された演算を実行するタイミングが決定される。バインディングでは、ＣＤＦＧの各演算にハードウェアリソースがマッピングされる。制御回路生成では、スケジューリングされた演算の実行を制御するための回路が生成される。
【０００４】
特許文献１には、エラー対策回路を備えて所望の動作周波数で動作する集積回路を設計できる回路設計装置が開示されている。回路設計装置における特徴的な入力は、エラー対策ライブラリ（多数決回路等の遅延情報）や、エラー対策の目標挿入数である。回路設計装置は、スケジュール済みＣＤＦＧを、演算パス毎に分割し、それぞれの演算パスに対して、エラー対策を追加した場合の遅延量を計算する。回路設計装置は、その遅延量が目標遅延量より小さければ、演算パスに三重化等のエラー対策を施したＲＴＬ記述を生成する。
【０００５】
また、回路設計装置は、入力されたエラー対策の目標挿入数により、エラー対策を行う数を制限する。エラー対策の目標挿入数に達しない場合、回路設計装置は、エラー対策を施していない演算パスを再分割する。回路設計装置は、分割した演算パスのそれぞれに対して、エラー対策を施した場合の遅延量を計算し、エラー対策を実施するかどうかを判定する。
【０００６】
非特許文献２では、ＲＴＬの決められた回路構造、もしくは、指定した回路要素に対して、エラー検出回路・エラー訂正回路を付加するＲＴＬ記述変換が行われる。ＲＴＬ記述とマクロリスト／ＦＦリストとを入力とし、エラー検出回路・エラー訂正回路を付加したＲＴＬ記述が生成される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１５／１５５８１５号
【非特許文献】
【０００８】
【非特許文献１】High-Level Synthesis Blue Book, ISBN 978-1-4500-9724-6
【非特許文献２】Austemper Design社ホームページ、項目「Safety Synthesis」、［平成３０年１０月１８日検索］、インターネット＜URL:http://www.austemperdesign.com/safety-synthesis/＞
【発明の概要】
【発明が解決しようとする課題】
【０００９】
車載用ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）等の集積回路の開発においては、搭載されるＩＰ・モジュールには、機能安全機構の実装が要求される場合がある。高位合成では、入力となる動作記述にはすべての回路要素は記述されておらず、高位合成の出力であるＲＴＬ記述にすべての回路要素が記述されている。
【００１０】
非特許文献１では、機能安全機構は、ハードウェア故障を検出するための仕組みであって、ハードウェア故障を想定しない場合、動作記述に記述された本来の機能に影響を与えない冗長論理である。
【００１１】
高位合成は、動作記述からＣＤＦＧを作成する際に、冗長論理を削除し最適化してからＲＴＬ記述を生成する。また、高位合成では、ハードウェア故障は想定されていない。このため、動作記述に機能安全機構を記述し、高位合成を実行しても、機能安全機構の論理を冗長論理と判断し、冗長論理が削除される。したがって、従来の高位合成は、動作記述に記述した機能安全機構の回路がＲＴＬ記述に反映されないという課題を有している。
【００１２】
特許文献１では、高位合成は、エラー対策を施したＲＴＬ記述を生成することが可能である。しかし、特許文献１では、演算パスにエラー対策を施す場合の遅延量の計算が主眼となっているため、動作記述の特定の論理に対して適切な機能安全機構を実装することができない。
【００１３】
また、高位合成から生成されたＲＴＬ記述に対して機能安全機構を実装しようとする場合、ＲＴＬ記述のみを見ても、各ＲＴＬ記述がどのような論理を実現した回路要素なのかを人手で判断することは難しい。このため、従来の高位合成を用いた集積回路設計において、機能安全機構を実装するためには、動作記述とＲＴＬ記述との対応関係を高位合成から出力し、その情報を元に機能安全機構を実装する必要のある回路要素に該当するＲＴＬ記述を抽出する必要がある。
【００１４】
このように、高位合成を利用した回路設計において、ＲＴＬ記述に対する任意の機能安全機構を実装することは極めて困難であった。
【００１５】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１６】
本明細書には、複数の実施の形態の高位合成方法等が記載されているが、一実施の形態の高位合成方法を述べると、次の通りである。高位合成方法は、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて機能安全機構を挿入したＲＴＬ記述を生成する。高位合成方法は、高位合成部が、動作記述を用いてコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、コントロールデータフローグラフ生成ステップの後、高位合成部が、機能安全機構実装仕様に従い、コントロールデータフローグラフに機能安全機構を挿入する第１機能安全機構挿入処理ステップと、を有する。
【発明の効果】
【００１７】
一実施の形態によれば、任意の機能安全機構を実装したＲＴＬ記述を生成することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明の実施の形態１に係る高位合成装置の一例を示す構成図である。
【図２】図２は、高位合成の概要を示す説明図である。
【図３】図３は、機能安全機構実装仕様を例示する図である。
【図４】図４は、ライン番号及び関数名を用いた機能安全機構を挿入する位置の指定方法を例示する図である。
【図５】図５は、高位合成により付加された回路要素に対して機能安全機構を実装する場合を説明する図である。
【図６】図６は、サイクル動作を制御する回路名による機能安全機構を挿入する位置の指定方法を例示する図である。
【図７】図７は、挿入する機能安全機構の例を説明する図である。
【図８】図８は、挿入する機能安全機構の他の例を説明する図である。
【図９】図９は、挿入する機能安全機構の他の例を説明する図である。
【図１０】図１０は、エラーチェックする入力信号の指定方法の一例を示す図である。
【図１１】図１１は、エラーチェックする入力信号の指定方法の他の例を示す図である。
【図１２】図１２は、エラーチェックする入力信号の指定方法の他の例を示す図である。
【図１３】図１３は、出力ポートによるエラーチェック出力信号の指定方法の一例を示す図である。
【図１４】図１４は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。
【図１５】図１５は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。
【図１６】図１６は、エラーチェック出力信号を格納するレジスタの指定方法の一例を示す図である。
【図１７】図１７は、クロックサイクル数によるエラーチェック実行周期の指定方法の一例を示す図である。
【図１８】図１８は、機能安全機構モジュール名による指定方法の一例を示す図である。
【図１９】図１９は、本発明の実施の形態１に係る高位合成方法の一例を示す説明図である。
【図２０】図２０は、高位合成方法を説明するための動作記述、高位合成スクリプト、及び機能安全機構実装仕様を例示する図である。
【図２１】図２１は、ＣＤＦＧの一例を示す図である。
【図２２】図２２は、機能安全機構挿入（１）の一例を示すフロー図である。
【図２３】図２３は、ｓｍ−ＣＤＦＧの一例を示す図である。
【図２４】図２４は、スケジューリングの一例を示すフロー図である。
【図２５】図２５は、ｓａｆｅ−Ｓｃｈｅｄに対する再スケジューリング方法を説明する図である。
【図２６】図２６は、バインディングの一例を示すフロー図である。
【図２７】図２７は、バインディング方法を説明するフロー図である。
【図２８】図２８は、各サイクルにおける動作を制御する制御回路の例を示す図である。
【図２９】図２９は、機能安全機構挿入（２）の一例を示すフロー図である。
【図３０】図３０は、機能安全機構挿入（２）において挿入される機能安全機構の一例を示す図である。
【図３１】図３１は、ＲＴＬ記述生成の一例を示すフロー図である。
【図３２】図３２は、ｓｍ−ＣｏｎｔｒｏｌｌｅｒのＲＴＬ回路の一例を示す図である。
【図３３】図３３は、ＲＴＬ記述生成において生成されるＲＴＬ回路の一例を示す図である。
【図３４】図３４は、モジュールｍｏｄＡのＲＴＬ回路である。
【図３５】図３５は、信号結線後のＲＴＬ回路の一例を示す図である。
【図３６】図３６は、本発明の実施の形態２に係る高位合成の概要を説明する図である。
【図３７】図３７は、本発明の実施の形態２に係る高位合成方法の一例を示す説明図である。
【図３８】図３８は、機能安全機構挿入位置記録（１）の一例を示すフロー図である。
【図３９】図３９は、Ｓｕｂ−ＣＤＦＧの一例を示す図である。
【図４０】図４０は、スケジューリングの一例を示すフロー図である。
【図４１】図４１は、ｓａｆｅ−ＣＤＦＧに対するスケジューリング方法を説明する図である。
【図４２】図４２は、バインディングの一例を示すフロー図である。
【図４３】図４３は、バインディング方法を説明する図である。
【図４４】図４４は、機能安全機構挿入位置記録（２）の一例を示すフロー図である。
【図４５】図４５は、本発明の実施の形態２に係るＲＴＬ記述生成の一例を示すフロー図である。
【図４６】図４６は、ステップＳ１７＿１３において生成されるＲＴＬ回路の一例を示す図である。
【図４７】図４７は、機能安全機構実装指示生成Ｓ１８の一例を示すフロー図である。
【図４８】図４８は、機能安全機構実装指示の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するためのすべての図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２０】
（実施の形態１）
＜高位合成装置の構成＞
図１は、本発明の実施の形態１に係る高位合成装置の一例を示す構成図である。図２は、高位合成の概要を示す説明図である。図１に示すように、プロセッサ１０、不揮発性メモリ２０、揮発性メモリ３０、データ格納部４０等を備えている。これらの要素は、内部バスに接続されてもよいし、個別配線により互いに接続されてもよい。高位合成装置１は、例えば、プロセッサを備えた情報処理装置等である。
【００２１】
プロセッサ１０は、不揮発性メモリ２０に格納された高位合成プログラムを読み出し、揮発性メモリ３０に展開する。プロセッサ１０が、揮発性メモリ３０に展開した高位合成プログラムを実行することにより、高位合成を行う高位合成部５０が構成される。
【００２２】
図２に示すように、高位合成部５０は、作成しようとする回路の機能論理が記述された動作記述１１０、高位合成スクリプト１２０、実装しようとする機能安全機構が記述された機能安全機構実装仕様１３０を入力とする高位合成を行い、機能安全機構を含む具体的回路構成をハードウェア記述言語により記述したＲＴＬ記述１４０を高位合成結果として生成する。プロセッサ１０は、入力された動作記述１１０、高位合成スクリプト１２０、機能安全機構実装仕様１３０、生成したＲＴＬ記述１４０等のデータをメモリであるデータ格納部４０に格納してもよい。
【００２３】
不揮発性メモリ２０は、例えば高位合成プログラム等のプログラム、高位合成装置１に関する設定情報等を格納する。不揮発性メモリ２０は、例えばフラッシュメモリＥＥＰＲＯＭ等のメモリを有する。揮発性メモリ３０は、不揮発性メモリ２０から読み出されたプログラムや設定情報等を一時的に保持する。また、揮発性メモリ３０は、高位合成部５０を含むプロセッサ１０における演算結果等も一時的に保持する。データ格納部４０は、例えば、高位合成に関する入力データや、ＲＴＬ記述が生成されるまでの各ステップにおける演算結果等を格納するメモリである。データ格納部４０は、例えばフラッシュメモリ等を含む。
【００２４】
動作記述１１０には、作成しようとする回路の動作内容が、例えばＳｙｓｔｅｍＣ等のシステムレベル言語や、Ｃ言語等のプログラミング言語等で記述される。高位合成スクリプト１２０には、高位合成により生成する回路や、各演算の実行タイミング等、高位合成の制約を規定する内容が記述される。
【００２５】
機能安全機構実装仕様１３０には、高位合成により、どのような機能安全機構を実装するかを指定する内容が記述される。
【００２６】
ＲＴＬ記述１４０には、高位合成結果として、データパス回路１４１、制御回路１４２、機能安全機構回路１４３等を規定する内容が記述される。機能安全機構回路１４３は、例えば機能安全機構実装仕様１３０の内容に従い作成されたＲＴＬ記述である。
【００２７】
＜機能安全機構実装仕様の詳細＞
次に、機能安全機構実装仕様の詳細について説明する。図３は、機能安全機構実装仕様を例示する図である。図３には、機能安全機構実装仕様１３０に記載される項目が列挙されている。具体的に述べると、機能安全機構実装仕様１３０は、例えば、（１）機能安全機構を挿入する対象、（２）挿入する機能安全機構、（３）エラーチェック入力信号、（４）エラーチェック出力信号、（５）エラーチェック実行周期、（６）機能安全機構モジュール名、の各項目を含む。
【００２８】
＜＜（１）機能安全機構を挿入する対象＞＞
まず、「機能安全機構を挿入する対象」の項目について説明する。この項目では、機能安全機構を挿入する対象の指定が行われる。図３に示すように、「機能安全機構を挿入する対象」は、（１−１）動作記述の位置、（１−２）高位合成制御回路、の各項目をさらに含む。
【００２９】
＜＜＜（１−１）動作記述の位置＞＞＞
項目「動作記述の位置」では、動作記述１１０の、例えば、ライン番号、関数名、スコープ、変数名、モジュール名、インスタンス名等により、機能安全機構を挿入する動作記述の位置が指定される。高位合成部５０は、ここで指定された位置の動作記述の論理を実現する回路要素に対し、機能安全機構を実装する。
【００３０】
図４は、ライン番号及び関数名を用いた機能安全機構を挿入する位置の指定方法を例示する図である。図４では、左側に動作記述１１０が示され、右側に機能安全機構実装仕様１３０が示されている。機能安全機構実装仕様１３０の１行目には、「２−５，ＴＭＲ，Ｏｕｔｐｕｔ」と記述されている。これは、動作記述における２−５行目の記述が、機能安全機構を挿入する対象として指定されていることを示す。また、機能安全機構実装仕様１３０の２行目には、「ｆｕｎｃ，ＤＭＲ，Ｏｕｔｐｕｔ」と記述されている。これは、動作記述における関数名「ｆｕｎｃ」が機能安全機構を挿入する対象として指定されていることを示す。
【００３１】
また、動作周波数等、高位合成スクリプト１２０で指定された制約を満たすため、高位合成により、機能安全機構実装仕様１３０により指定された動作記述の位置に対して回路要素が付加される場合がある。本実施の形態では、この回路要素も機能安全機構の実装対象に含まれる。
【００３２】
図５は、高位合成により付加された回路要素に対して機能安全機構を実装する場合を説明する図である。図５には、動作記述１１０、機能安全機構実装仕様１３０、高位合成結果に対応する回路２１０が例示されている。機能安全機構実装仕様１３０により、動作記述における２−４行目の記述が、機能安全機構の対象として指定されている。高位合成の実行時、高位合成スクリプトに指定された制約を満たすため、回路２１０には、レジスタ２１１、２１２が回路要素として付加されている。本実施の形態では、高位合成スクリプトの指定により付加されたレジスタ等の回路要素も、機能安全機構の実装対象となる。
【００３３】
＜＜＜（１−２）高位合成制御回路＞＞＞
次に、項目「高位合成制御回路」について説明する。高位合成では、高位合成スクリプト１２０に記述された高位合成の制約内容を満たすために、サイクル動作を実装し、このサイクル動作を制御するための回路を生成する。そこで、サイクル動作を制御する回路名を具体的に指定することにより、機能安全機構を挿入する回路が指定される。ここで指定される回路は、例えば、有限オートマトン（ＦＳＭ：Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）、パイプラインイネーブル回路等である。
【００３４】
図６は、サイクル動作を制御する回路名による機能安全機構を挿入する位置の指定方法を例示する図である。図６には、動作記述１１０、機能安全機構実装仕様１３０、高位合成結果に対応する回路２２０、２３０が例示されている。回路２２０は、高位合成スクリプト１２０で面積が最小となるように指定された場合の高位合成結果の例である。回路２２０には、選択回路２２１、２２２等の他、有限オートマトン２２３が付加されている。なお、以下では、各状態をＳｔ０、Ｓｔ１等として説明しているが、図６等の各図面では、各状態がＳ０、Ｓ１等として表示されている。ただし、ここで示すＳは状態を示すものであり、後述のフロー図における各ステップを表すものではない。
【００３５】
選択回路２２１において、Ｓｔ０入力は「ａ」、Ｓｔ１入力は「ｃ」である。選択回路２２２において、Ｓｔ０入力は「ｂ」、Ｓｔ１入力は「ｘ」である。有限オートマトン２２３は、Ｓｔ０とＳｔ１との間で状態を切り換える。有限オートマトン２２３は、まず、状態をＳｔ０に設定し、対応する信号を選択回路２２１、２２２へ出力する。選択回路２２１、２２２は、Ｓｔ０入力の値「ａ」、「ｂ」をそれぞれ出力する。次に、有限オートマトン２２３は、状態をＳｔ１に切り換え、対応する信号を選択回路２２１、２２２へ出力する。選択回路２２１、２２２は、Ｓｔ０入力の値「ｃ」、「ｘ」をそれぞれ出力する。動作記述１１０では加算が２回含まれるが、高位合成の結果、有限オートマトン２２３を付加することにより、１つの加算器のみで回路が構成されている。これにより、面積が最小化されている。
【００３６】
これに対し、回路２３０は、高位合成スクリプト１２０でスループットが最大となるように指定された場合の高位合成結果の例である。回路２３０には、パイプライン回路２３１の他、パイプラインイネーブル回路（ＣＴＲＬ０）２３２が付加されている。
【００３７】
パイプラインイネーブル回路２３２は、パイプライン回路２３１に対し、１段目、２段目の順で、回路をイネーブルに設定する回路である。１段目の回路がイネーブルに設定されると、ａ＋ｂの演算結果ｘが出力される。そして、パイプラインイネーブル回路（ＣＴＲＬ０）２３２により、２段目の回路がイネーブルに設定されると、ｘ＋ｃの演算結果ｙが出力される。パイプラインイネーブル回路２３２は、最終的に１段目の回路及び２段目の回路を同時にイネーブルに設定するため、スループットが最大化される。
【００３８】
機能安全機構実装仕様１３０では、付加された有限オートマトン（ＦＳＭ０）やパイプラインイネーブル回路（ＣＴＲＬ０）が、機能安全機構の対象として指定されている。
【００３９】
＜＜（２）挿入する機能安全機構＞＞
次に、「挿入する機能安全機構」の項目について説明する。この項目では、機能安全機構として使用される回路等の指定が行われる。挿入する機能安全機構として、例えば、二重化、デュアルコアロックステップ、三重化等の冗長化が挙げられる。また、挿入する機能安全機構として、パリティ、チェックサム、巡回冗長検査（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ：ＣＲＣ）、ハミング等のエラー検出・訂正用の符号生成や、データ転送におけるプロトコルチェック、転送オーダーチェック等が挙げられる。機能安全機構の指定について、例えば、高位合成プログラムでサポートされている機能安全機構を予め提示し、ユーザは、提示された機能安全機構の中から選択し、指定してもよい。
【００４０】
図７は、挿入する機能安全機構の例を説明する図である。図７では、機能安全機構実装仕様１３０により、高位合成により生成される有限オートマトン（ＦＳＭ０）を二重化（ＤＭＲ）するよう指定された場合が示されている。図７の左側には、機能安全機構実装仕様１３０と、二重化されていない回路２２０（図６を参照）が参考として示されている。図７の右側には、機能安全機構実装仕様１３０の指定に応じて二重化された回路を有する回路３２０が示されている。
【００４１】
具体的に述べると、高位合成により、有限オートマトン（ＦＳＭ０）２２３と同一の構成を備えた有限オートマトン（ＣＨＫ＿ＦＳＭ０）３２３が追加される。また、二重化した有限オートマトンの出力信号を比較する比較回路３２４も追加される。比較回路３２４は、比較結果を通知する信号を生成し、出力する。
【００４２】
図８は、挿入する機能安全機構の他の例を説明する図である。図８では、機能安全機構実装仕様１３０により、配列変数（Ｍ）に対してパリティチェック機構（Ｐａｒｉｔｙ）を実装するよう指定された場合が示されている。図８には、機能安全機構実装仕様１３０の指定に応じてパリティチェック機構が実装された回路３４０が示されている。
【００４３】
具体的に述べると、高位合成により、Ｍ［４］の書き込み側に、パリティビット生成回路３４１、Ｍ［４］の読み出し側に、パリティビットチェック回路３４２が追加される。パリティビットチェック回路３４２は、パリティチェック結果を通知する信号を生成し、出力する。
【００４４】
図９は、挿入する機能安全機構の他の例を説明する図である。図９では、機能安全機構実装仕様１３０により、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）に対して、データ転送順序チェック機構（Ｏｒｄｅｒ）を実装するよう指定された場合が示されている。図９には、機能安全機構実装仕様１３０の指定に応じてデータ転送順序チェック機構が実装された回路３５０が示されている。
【００４５】
具体的に述べると、高位合成により、Ｍ［３］の書き込み側にデータ転送順序ビット生成回路３５１が追加される。また、高位合成により、データ転送順序ビット格納用に、Ｍと同段数（図９では３段）のＦＩＦＯ３５２が追加される。また、高位合成により、Ｍ［３］の読み出し側に、データ転送順序チェック回路３５３が追加される。
【００４６】
＜＜（３）エラーチェック入力信号＞＞
次に、「エラーチェック入力信号」の項目について説明する。この項目では、機能安全機構においてエラーチェックする入力信号が指定される。エラーチェックされる入力信号として、例えば、機能安全機構が挿入される対象の出力信号（Ｏｕｔｐｕｔ）、フリップフロップ（Ｆ／Ｆ）やレジスタ等の出力信号が挙げられる。また、具体的な信号名により指定されてもよい。
【００４７】
図１０は、エラーチェックする入力信号の指定方法の一例を示す図である。図１０には、機能安全機構実装仕様１３０により、二重化（ＤＭＲ）された回路の出力信号（Ｏｕｔｐｕｔ）をエラーチェックするよう指定された場合が示されている。図１０には、動作記述１１０、機能安全機構実装仕様１３０がそれぞれ示されている。
【００４８】
図１０には、高位合成のバインディング結果の例が回路３６０として示されている。回路２６０は、二重化される前の元の回路を示し、回路３６１は、機能安全機構実装仕様１３０による指定に応じ、二重化により追加された回路を示している。
【００４９】
具体的に述べると、高位合成により、回路３６０は、回路２６０と同様の構成を備えた回路３６１と、比較回路３６２が、回路２６０に追加されている。比較回路３６２は、回路２６０の出力信号及び回路３６１の出力信号を入力し、両出力信号を比較した比較結果を出力する。このように、図１０の例では、高位合成結果に対し、機能安全機構を挿入する対象として指定された回路から出力される出力信号が、機能安全機構回路のチェック対象として指定される。
【００５０】
図１１は、エラーチェック方法の他の例を示す図である。図１１には、機能安全機構実装仕様１３０により、フリップフロップ（Ｆ／Ｆ）やレジスタの出力信号が、エラーチェックの入力信号として指定されている。図１１の回路３７０は、機能安全機構実装仕様１３０による指定に応じて二重化された回路を示している。回路２６０と、回路２６０を二重化するために追加された回路３７１に含まれる各フリップフロップ回路の出力信号は、比較回路３７２に入力されている。このように、図１１の例では、高位合成結果である回路のフリップフロップやレジスタ等の記憶素子から出力される出力信号が、機能安全機構回路のチェック対象として指定される。
【００５１】
図１２は、エラーチェック方法の他の例を示す図である。図１２では、機能安全機構実装仕様１３０により、エラーチェックの入力信号として、信号｛ｘ、ｙ｝が指定されている。図１２の例は、エラーチェックの入力信号の指定方法が、具体的な信号名｛ｘ、ｙ｝に変更された以外は図１１と同様である。このように、図１２の例では、機能安全機構の挿入対象として指定された回路内の信号名が指定され、指定された信号が機能安全機構回路のチェック対象となる。なお、信号名の指定は、高位合成結果だけでなく、動作記述を対象にしても構わない。また、これら３種類の方法を組み合わせて、チェック対象の出力信号が指定されてもよい。
【００５２】
＜＜（４）エラーチェック出力信号＞＞
次に、「エラーチェック出力信号」の項目について説明する。この項目では、機能安全機構のエラーチェック結果を外部に通知するための回路の生成方法が指定される。機能安全機構のエラーチェック結果を外部に通知するため、例えば、ポート名（Ｐｏｒｔ）やレジスタ名（Ｒｅｇ）等が指定される。
【００５３】
ポート名が指定されると、指定された名称の出力ポートにエラーチェック論理が接続される。なお、指定された名称のポートが動作記述に存在しない場合、高位合成において、指定された名称のポートが生成される。また、ポート名とともに、「Ｃｏｍｂ」が指定された場合、フリップフロップ等の記憶素子を通過せずに、外部にエラーチェック結果を通知する信号が生成される。一方、ポート名とともに、「ＦＦ」が指定された場合、フリップフロップ等の記憶素子を通過させ、外部にエラーチェック結果を通知する信号が生成される。
【００５４】
ここでも、図１０に示す高位合成のバインディング結果を用いて、エラーチェック出力信号の指定方法を説明する。図１３は、出力ポートによるエラーチェック出力信号の指定方法の一例を示す図である。図１３では、出力ポート「ＥＲＲ」が指定されている。また、出力ポートとともに、「Ｃｏｍｂ」が指定されている。このため、高位合成により、組み合わせ回路として構成される比較回路３７２の出力と直接接続された出力ポートＥＲＲが生成される。
【００５５】
図１４は、出力ポートによるエラーチェック方法の他の例を示す図である。図１４では、出力ポート「ＥＲＲ」とともに、「ＦＦ」が指定されている。このため、高位合成により、比較回路３７２の出力がフリップフロップ回路３７３に入力され、フリップフロップ回路３７３の出力と接続された出力ポートＥＲＲが生成される。このように、「ＦＦ」が指定されると、フリップフロップ回路３７３にエラーチェック結果が記憶されつつ、エラーチェック結果が出力される。
【００５６】
図１５は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。図１５では、機能安全機構実装仕様１３０により、同じポート名「ＥＲＲ」が２つ指定されている。動作記述のライン番号「２」に対しては、ポート名「ＥＲＲ」とともに、「Ｆ／Ｆ」が指定されている。これにより、回路３８０には、回路３８１の他、比較回路３８２、フリップフロップ回路３８３が追加されている。
【００５７】
一方、動作記述のライン番号「４」に対しては、ポート名「ＥＲＲ」とともに、「Ｃｏｍｂ」が指定されている。これにより、回路３８０には、回路３８４の他、比較回路３８５が追加されているが、比較回路３８５に対応するフリップフロップ回路は追加されていない。
【００５８】
また、ライン番号「２」、「４」の二重化（ＤＭＲ）に対し、同じポート名「ＥＲＲ」が指定されているので、回路３８０には、フリップフロップ回路３８３の出力信号、及び比較回路３８５の出力信号を入力とするＯＲ回路３８６が追加されている。ＯＲ回路３８６は、入力される２つの信号の論理和を機能安全機構のエラーチェック結果として外部に通知する。
【００５９】
次に、レジスタ名が指定された場合について説明する。レジスタ名が指定されると、ファンクションレジスタに機能安全機構のエラーチェック結果を書き込むための論理が接続される。また、指定された名称のレジスタが動作記述に存在しない場合、指定された名称のレジスタが新たに生成される。
【００６０】
図１６は、エラーチェック出力信号を格納するレジスタの指定方法の一例を示す図である。図１６では、機能安全機構実装仕様１３０により、エラーチェック結果としての出力信号ＥＲＲを、レジスタ空間のアドレス「０ｘ１０」に格納するよう指定されている。このようなレジスタ名の指名は、バスプロトコルを利用したファンクションレジスタアクセスによりエラーチェック結果を確認する場合等に利用される。
【００６１】
また、「エラーチェック出力信号」の項目では、ポート名の指定と、レジスタ名の指名とを組み合わせた指定も可能である。図１５、図１６では、エラーチェック結果が上書きされる構成となっているが、一度エラーを検出した後は、エラーチェック出力信号の値を更新しない回路が生成されてもよい。また、本項目において、エラーチェック出力信号の極性（０／１）を指定できるにようにしてもよい。
【００６２】
＜＜（５）エラーチェック実行周期＞＞
「エラーチェック実行周期」の項目では、機能安全機構によるエラーチェックの実行周期が指定される。本項目では、例えば、クロックサイクル数、イネーブル制御、実時間等が指定される。
【００６３】
「クロックサイクル数」は、エラーチェック結果を更新するクロックのサイクル数を規定する。図１７は、クロックサイクル数によるエラーチェック実行周期の指定方法の一例を示す図である。図１７の機能安全機構実装仕様１３０では、クロックサイクル数として「４」が指定されている。これにより、図１７に示す回路３９０が生成される。回路３９０は、４サイクルごとにエラーチェック結果を更新し、外部に通知する。
【００６４】
「イネーブル制御」は、指定したイネーブル条件が成立したときのみ、エラーチェックが実行されることを規定する。イネーブル制御の指定においては、例えば、高位合成により生成されるＦＳＭや内部信号等が利用できるようにしてもよい。
【００６５】
「実時間」は、エラーチェック結果の更新時間を規定する。高位合成スクリプトにより、動作周波数(クロック周期)の制約が記述されるため、指定した実時間をクロックサイクル数に変換することが可能である。変換されたクロックサイクル数に対して、すでに述べた「クロックサイクル数」と同じ処理が行われる。例えば、エラーチェック実行周期に４０ｎｓ、高位合成スクリプトによるクロック周期の制約に１０ｎｓが指定された場合、例えば図１７と同様の回路が生成される。
【００６６】
また、機能安全分析結果のＦＴＴＩ（Fault Tolerant Time Interval）を用いた実時間の指定も可能である。例えば、本項目では、ＦＴＴＩの１／２の時間（ＦＴＴＩ−１０ｎｓ）をオフセットとしたＦＴＴＩ時間等も実時間として指定可能とする。
【００６７】
また、これらを２つ以上組み合わせたエラーチェック実行周期の指定も可能である。例えば、「イネーブル制御で指定されたイネーブル条件の成立後、４クロックサイクルごとにエラーチェックを実行する」、等の指定も可能である。
【００６８】
＜＜（６）機能安全機構モジュール名＞＞
「機能安全機構モジュール名」の項目では、挿入する機能安全機構のモジュール名が指定される。例えば、機能安全機構の回路に対して、論理合成の最適化により消失させないための指定、レイアウトにおいて本来の機能とは別の領域に配置するための指定等、ＲＴＬ記述生成後に実行されるＥＤＡツールのそれぞれに特別な制約を与えるための指定が、モジュール名を用いて行われる。
【００６９】
図１８は、機能安全機構モジュール名による指定方法の一例を示す図である。図１８では、機能安全機構実装仕様１３０において指定された２つの機能安全機構が同一モジュール（ＣＨＫＣＭＰ）内に生成される例が示されている。また、複数種の回路が生成される機能安全機構では、それぞれの回路に対して、モジュール名が指定されてもよい。例えば、二重化回路の場合、冗長回路及び比較回路のそれぞれに対し、出力モジュール名が指定されるようにしてもよい。また、機能安全機構の回路は、高位合成が生成する機能モジュールの外側に生成されるようにすることも可能である。この場合、高位合成は、本来の機能モジュール及び機能安全機構モジュールを生成するとともに、これらを結線する上位モジュールも生成する。
【００７０】
＜高位合成方法の詳細＞
次に、任意の機能安全機構を実装したＲＴＬ記述を生成するための高位合成方法について詳しく説明する。図１９は、本発明の実施の形態１に係る高位合成方法の一例を示す説明図である。図２０は、高位合成方法を説明するための動作記述、高位合成スクリプト、及び機能安全機構実装仕様を例示する図である。以下では、図２０を例として高位合成方法を説明する。
【００７１】
図１９に示すように、本実施の形態の高位合成では、ＣＤＦＧ作成Ｓ１、機能安全機構挿入（１）Ｓ２、スケジューリングＳ３、バインディングＳ４、制御回路作成Ｓ５、機能安全機構挿入（２）Ｓ６、ＲＴＬ記述生成Ｓ７の各処理が実行される。ユーザは、まず、図２０に示す動作記述１１０、高位合成スクリプト１２０、及び機能安全機構実装仕様１３０の各ファイルを作成し、高位合成装置１に転送しておく。
【００７２】
動作記述１１０は、一般的なプログラム言語で記述されている。高位合成スクリプト１２０には、クロック周期が１０ｎｓ、最大レイテンシが３クロックサイクルという高位合成の制約が指定されている。
【００７３】
機能安全機構実装仕様１３０では、２つの機能安全機構が指定されている。１行目では、動作記述１１０の２−３行目を実現する回路に対して、二重化回路（１つの冗長回路と比較回路）を実装するよう指定されている。また、１行目では、エラーチェック入力信号に「Ｏｕｔｐｕｔ＋Ｆ／Ｆ」が指定されている。このため、動作記述１１０の２−３行目の出力信号ｔ２と高位合成結果により生成されるレジスタの出力信号とが、比較回路の入力信号となる。また、１行目では、エラーチェック出力信号として、フリップフロップ回路の出力信号が指定されている。フリップフロップ回路は、エラーチェック出力信号「ＥＲＲ」を生成し出力する。また、１行目では、エラーチェック実行周期として、「ＥｘｅｃＣｏｎｄ」が指定されている。このため、フリップフロップ回路は、エラーチェック入力信号の値が更新されるサイクルのみエラーチェック結果を出力する。
【００７４】
機能安全機構実装仕様１３０の２行目では、高位合成が生成する制御回路ＦＳＭ０に対して三重化回路（二つの冗長回路と多数決回路）を実装するよう指定されている。三重化回路を実装するため、本例では、外部へエラーチェック結果を通知しないこととする。このため、２行目では、エラーチェック出力信号に「−」が指定されている。エラーチェック実行周期には、クロックサイクル数「１」が指定されている。このため、多数決回路によるエラーチェックはクロックサイクルごとに行われる。１−２行目の各指定において、機能安全機構モジュール名「ＣＨＫ」が指定されている。このため、機能安全機構は、いずれもモジュールＣＨＫ内に生成される。
【００７５】
＜＜ＣＤＦＧ作成＞＞
ＣＤＦＧ作成Ｓ１では、動作記述１１０を入力としたＣＤＦＧが作成される。具体的に述べると、高位合成部５０は、動作記述１１０における冗長論理を最適化した後、制御フロー及びデータフローを抽出し、ＣＤＦＧを作成する。図２１は、ＣＤＦＧの一例を示す図である。図２１において、ＭＵＬ０は、動作記述１１０の２行目と対応している。ＡＤＤ０、ＭＵＬ１、ＭＵＬ２は、動作記述１１０の３−５行目とそれぞれ対応している。
【００７６】
＜＜機能安全機構挿入（１）＞＞
機能安全機構挿入（１）Ｓ２では、機能安全機構実装仕様１３０に従い、ＣＤＦＧに機能安全機構論理が挿入される。具体的に述べると、高位合成部５０は、機能安全機構実装仕様１３０で指定された動作記述位置（２−３行目）に対する機能安全機構論理を挿入する。
【００７７】
高位合成では、動作記述１１０からＣＤＦＧを作成する際に、冗長論理が削除される。言い換えれば、論理が最適化される。そのため、動作記述位置に従った冗長論理としての機能安全機構論理の挿入は、必ずＣＤＦＧ作成Ｓ１より後に行われる。これにより、挿入される機能安全機構論理が、ＣＤＦＧで削除されないようにしている。本例では、動作記述位置に従った機能安全機構論理の挿入は、ＣＤＦＧ作成Ｓ１の後、スケジューリングＳ３の前に実施される。なぜなら、機能安全機構として挿入する演算の実行サイクルや使用するハードウェアリソースの最適化が、最も容易に実施できるからである。
【００７８】
図２２は、機能安全機構挿入（１）の一例を示すフロー図である。図２２に示すように、機能安全機構挿入（１）Ｓ２は、ステップＳ２＿１〜Ｓ２＿８を含む。ステップＳ２＿１において、高位合成部５０は、ＣＤＦＧ作成Ｓ１で生成されたＣＤＦＧをＢａｓｅ−ＣＤＦＧとして、図１のデータ格納部４０に格納する。
【００７９】
ステップＳ２＿２では、高位合成部５０は、機能安全機構実装仕様から動作記述位置に対する実装仕様の記述のみを抽出する。本例において、高位合成部５０は、図２０の機能安全機構実装仕様１３０の１行目における、動作記述１１０の２−３行目に対する実装仕様に関する記述を抽出し、抽出した箇所を抽出記述Ｔ０としてデータ格納部４０に格納する。
【００８０】
ステップＳ２＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から実装仕様を取り出す。そして、後続のステップＳ２＿４の処理が実行される。
【００８１】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、機能安全機構挿入（１）Ｓ２の処理を終了させる。
【００８２】
本例では、直前のステップＳ２＿２において、２−３行目に対する実装仕様に関する記述が抽出される。このため、高位合成部５０は、抽出記述Ｔ０から動作記述１１０の２−３行目に対する実装仕様を仕様Ｔ１として取り出す。
【００８３】
ステップＳ２＿４において、高位合成部５０は、仕様Ｔ１の動作記述位置に対応するＣＤＦＧをＢａｓｅ−ＣＤＦＧから抽出し、抽出したＣＤＦＧをＳｕｂ−ＣＤＦＧとしてデータ格納部４０に格納する。本例では、仕様Ｔ１で指定されている動作記述位置から、２−３行目に対応する頂点ＭＵＬ０、ＡＤＤ０、辺ａ、ｂ、ｃ、ｔ１、ｔ２が抽出され、これらを含むＳｕｂ−ＣＤＦＧが生成、格納される。
【００８４】
ステップＳ２＿５において、高位合成部５０は、Ｓｕｂ−ＣＤＦＧを元に、挿入する機能安全機構のＣＤＦＧをｓｍ−ＣＤＦＧとして作成する。本例では、仕様Ｔ１に指定された機能安全機構が二重化回路であるため、高位合成部５０は、ステップＳ２＿４で作成されたＳｕｂ−ＣＤＦＧに対する冗長演算及び比較回路を作成する。
【００８５】
図２３は、ｓｍ−ＣＤＦＧの一例を示す図である。図２３では、冗長演算及び比較回路として、頂点ＭＵＬ３、ＡＤＤ１、ＣＭＰ０、辺ａ、ｂ、ｃ、ｔ４、ｔ５、ＥＲＲが作成されている。そして、これらを含むＣＤＦＧがｓｍ−ＣＤＦＧとして作成される。なお、仕様Ｔ１には、エラーチェック出力信号としてポート名ＥＲＲが指定されているため、ＣＭＰ０の出力の辺はＥＲＲである。
【００８６】
ステップＳ２＿６において、高位合成部５０は、ステップＳ２＿４で作成したＳｕｂ−ＣＤＦＧをＳＡＦＥ−ＣＤＦＧとしてデータ格納部４０に格納する。また、高位合成部５０は、ステップＳ２＿５で生成したｓｍ−ＣＤＦＧを、ＳＭ−ＣＤＦＧとしてデータ格納部４０に格納する。ＳＡＦＥ−ＣＤＦＧ及びＳＭ−ＣＤＦＧは、後述するスケジューリングＳ３で使用される。
【００８７】
ステップＳ２＿７では、高位合成部５０は、Ｓｕｂ−ＣＤＦＧとｓｍ−ＣＤＦＧとを合体し、新たなＳｕｂ−ＣＤＦＧとしてＮｅｗＳｕｂ−ＣＤＦＧを作成する。図２３のＮｅｗＳｕｂ−ＣＤＦＧは、頂点ＭＵＬ０、ＭＵＬ１、ＭＵＬ３、ＡＤＤ０、ＡＤＤ１、辺ａ、ｂ、ｃ、ｔ１、ｔ２、ｔ４、ｔ５を含んでいる。
【００８８】
ステップＳ２＿８において、高位合成部５０は、Ｂａｓｅ−ＣＤＦＧに対し、Ｓｕｂ−ＣＤＦＧに対応する箇所を、ステップＳ２＿７で作成したＮｅｗＳｕｂ−ＣＤＦＧに入れ替え、機能安全機構を挿入したＢａｓｅ−ＣＤＦＧを作成する。
【００８９】
そして、ステップＳ２＿３に戻る。ただし、前回のステップＳ２＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ２＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、機能安全機構挿入（１）Ｓ２の処理を終了させる。
【００９０】
＜＜スケジューリング＞＞
次に、スケジューリングＳ３について説明する。スケジューリングでは、例えば高位合成スクリプト１２０により指定された制約に基づき、演算の実行サイクルを決定する。ここでは、図２３のＣＤＦＧを入力とする。図２４は、スケジューリングの一例を示すフロー図である。図２４のスケジューリングＳ３には、ステップＳ３＿１〜Ｓ３＿７が含まれる。
【００９１】
ステップＳ３＿１において、高位合成部５０は、Ｂａｓｅ−ＣＤＦＧのスケジューリングを行う。例えば、高位合成部５０は、機能安全機構挿入（１）Ｓ２で追加した機能安全機構の演算も含めたＢａｓｅ−ＣＤＦＧの実行サイクルを決定する。
【００９２】
具体的に述べると、高位合成部５０は、高位合成スクリプト１２０において指定されたクロック周期１０ｎｓのところに、クロックサイクル境界（境界線）を挿入する。本例では、各演算における遅延を、乗算では８ｎｓ、加算では４ｎｓ、比較演算では２ｎｓとそれぞれ見積もる。
【００９３】
高位合成部５０は、遅延時間の見積り結果を用いてデータ格納部４０に格納されたＳＭ−ＣＤＦＧに対するスケジュールリングを行う。そして、高位合成部５０は、ＳＭ−ＣＤＦＧに対応するスケジューリング済みＣＤＦＧをＳＭ−Ｓｃｈｅｄとしてデータ格納部４０に格納する。また、高位合成部５０は、データ格納部４０に格納されたＳＡＦＥ−ＣＤＦＧ及びそれ以外のＣＤＦＧに対するスケジューリングも行う。そして、高位合成部５０は、これらに対するスケジューリング済みＣＤＦＧをＳｃｈｅｄとしてデータ格納部４０に格納する。
【００９４】
ステップＳ３＿２において、高位合成部５０は、機能安全機構実装仕様１３０から、動作記述位置に対する実装仕様のみを抽出する。ステップＳ３＿２は、図２２のステップＳ２＿２と同様である。高位合成部５０は、抽出記述Ｔ０をデータ格納部４０に格納する。
【００９５】
ステップＳ３＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。ステップＳ３＿３は、ステップＳ２＿３と類似している。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から実装仕様（仕様Ｔ１）を取り出す。そして、後続のステップＳ３＿４の処理が実行される。
【００９６】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、スケジューリングＳ３の処理を終了させる。
【００９７】
ステップＳ３＿４では、高位合成部５０は、仕様Ｔ１で指定されている動作記述位置から、２−３行目に対応するスケジューリング済みＣＤＦＧ及び同じサイクルにスケジューリングされたそれ以外のスケジューリング済みＣＤＦＧをｓａｆｅ−Ｓｃｈｅｄとして、Ｓｃｈｅｄから取り出す。
【００９８】
ステップＳ３＿５では、高位合成部５０は、指定されたエラーチェック実行周期に応じて、ｓａｆｅ−Ｓｃｈｅｄに対する再スケジューリングを行う。
【００９９】
高位合成部５０は、各演算の実行条件を把握している。このため、機能安全機構実装対象の演算の実行条件がエラーチェック実行周期の条件と一致する場合、機能安全機構実装対象の演算と、それ以外の演算とで演算器を共有しても、エラーチェック結果に影響を与えることはない。つまり、本例の場合、機能安全機構実装対象の演算結果と機能安全機構の演算結果に不一致が発生することはない。
【０１００】
本例では、仕様Ｔ１で指定されたエラーチェック実行周期には、図２０に示すように、演算実行時を意味する「ＥｘｅｃＣｏｎｄ」が指定されている。このため、高位合成部５０は、最大レイテンシの３クロックサイクルを満たす範囲で、ｓａｆｅ−Ｓｃｈｅｄに含まれる演算に対する演算器共有の可能性を探索する。
【０１０１】
図２５は、ｓａｆｅ−Ｓｃｈｅｄに対するスケジューリング方法を説明する図である。図２５は、図２３のＣＤＦＧに対応している。図２５に示すように、ｓａｆｅ−Ｓｃｈｅｄに対し、サイクル０で２つの乗算ＭＵＬ０及びＭＵＬ１を実行しようとすれば、乗算器が２つ必要になる。一方、サイクル１の演算には、乗算は含まれていない。そこで、高位合成部５０は、乗算ＭＵＬ１をサイクル０からサイクル１に移動させる。これにより各サイクルの乗算が１つずつになるので、全サイクルの乗算を１つの乗算器で実行することが可能となる。高位合成部５０は、この再スケジューリング結果を用いて、データ格納部４０に格納されたＳｃｈｅｄを更新する。
【０１０２】
ステップＳ３＿６では、高位合成部５０は、仕様Ｔ１で指定された動作記述位置に対して挿入した機能安全機構のスケジューリング済みＣＤＦＧをＳＭ−Ｓｃｈｅｄから取り出す。取り出されたＣＤＦＧは、ｓｍ−Ｓｃｈｅｄとする。
【０１０３】
ステップＳ３＿７では、高位合成部５０は、仕様Ｔ１で指定されたエラーチェック実行周期を元に、ｓｍ−Ｓｃｈｅｄの再スケジューリングを行い、再スケジューリング済みＣＤＦＧを新たなｓｍ−Ｓｃｈｅｄとしてデータ格納部４０に格納する。図２５の例では、ｓｍ−Ｓｃｈｅｄの演算ＭＵＬ３とＡＤＤ１を移動させることはできない。そのため、ｓｍ−Ｓｃｈｅｄの演算に対する再スケジューリング結果はステップＳ３＿１の結果と変わらない。
【０１０４】
そして、ステップＳ３＿３に戻る。ただし、前回のステップＳ３＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ３＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、スケジューリングＳ３の処理が終了する。
【０１０５】
＜＜バインディング＞＞
次に、バインディングＳ４について説明する。バインディングＳ４では、スケジューリングＳ３におけるスケジューリング結果に基づきバインディングが行われる。例えば、バインディングＳ４では、スケジューリングＳ３におけるスケジューリング結果を用いて、データパスに演算器やレジスタ等のマッピングが行われる。ここでは、図２５のスケジューリング済ＣＤＦＧを入力とする。
【０１０６】
図２６は、バインディングの一例を示すフロー図である。図２６のバインディングＳ４には、ステップＳ４＿１〜Ｓ４＿５が含まれる。図２７は、バインディング方法を説明する図である。
【０１０７】
ステップＳ４＿１では、高位合成部５０は、スケジューリングＳ３で更新したＳＭ−ｓｃｈｅｄに含まれるＣＤＦＧ（機能安全機構論理）にマッピングを行う。具体的に述べると、高位合成部５０は、図２７に示すように、乗算にｍｕｌ１、加算にａｄｄ１、比較演算にｃｍｐ０をそれぞれマッピングする。そして、高位合成部５０は、マッピング結果付ＣＤＦＧをＳＭ−Ｂｉｎｄとしてデータ格納部４０に格納する。また、高位合成部５０は、クロック境界を跨ぐデータパスにレジスタｒ３をマッピングし、レジスタｒ３のマッピング結果を含むＣＤＦＧをＳＭ−Ｂｉｎｄとして格納する。
【０１０８】
なお、本例では該当しないが、機能安全機構内の演算の間で、リソース共有が行われてもよい。ただし、リソース共有は、指定されたエラーチェック実行周期に応じて、ハードウェア故障がないにも関わらず、比較演算で不一致が起きないことを条件として行われるものとする。
【０１０９】
続いて、高位合成部５０は、スケジューリングＳ３で作成したＳｃｈｅｄのＣＤＦＧ（機能論理）にマッピングを行う。具体的に述べると、高位合成部５０は、乗算にｍｕｌ０、加算にａｄｄ０をマッピングする。これは、乗算にｍｕｌ０のみマッピングされるのは、スケジューリングＳ３により、Ｓｃｈｅｄの乗算が１つの乗算器で対応可能となったからである。
【０１１０】
そして、高位合成部５０は、Ｓｃｈｅｄに対するマッピング結果付ＣＤＦＧをＢｉｎｄとしてデータ格納部４０に格納する。また、高位合成部５０は、クロック境界を跨ぐデータパスにレジスタｒ０、ｒ１、ｒ２をそれぞれマッピングし、これらのマッピング結果を含むＣＤＦＧをＢｉｎｄとして格納する。なお、サイクル２のｍｕｌ０の出力パスにレジスタｒ２がマッピングされているのは、常にzの値を外部に出力させるためである。
【０１１１】
ここで作成されたＢｉｎｄ、ＳＭ−Ｂｉｎｄは、後述するＲＴＬ記述生成Ｓ７で利用される。
【０１１２】
ステップＳ４＿２では、高位合成部５０は、機能安全機構実装仕様１３０から、動作記述位置に対する実装仕様だけを抽出する。ステップＳ４＿２は、図２４のステップＳ３＿２等と同様である。高位合成部５０は、抽出記述Ｔ０をデータ格納部４０に格納する。
【０１１３】
ステップＳ４＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。ステップＳ４＿３は、ステップＳ３＿３等と類似している。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から実装仕様（仕様Ｔ１）を取り出す。そして、後続のステップＳ４＿４の処理が実行される。
【０１１４】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、バインディングＳ４の処理を終了させる。
【０１１５】
ステップＳ４＿４では、仕様Ｔ１で指定されたエラーチェック入力信号を元に、新たなリソースが追加される。具体的述べると、図２０に示すように、エラーチェック入力信号として、「Ｏｕｔｐｕｔ＋Ｆ／Ｆ」が指定されている。このため、Ｏｕｔｐｕｔであるｔ２、ｔ５に加えて、サイクル０とサイクル１とを跨ぐレジスタｒ０、レジスタｒ３の値もエラーチェック入力信号となるため、これらのエラーチェックを行うリソースが追加される。具体的に述べると、高位合成部５０は、レジスタｒ０、ｒ３の値を比較するｃｍｐ１、ｃｍｐ０及びｃｍｐ１におけるエラーチェック結果の論理和を出力するｏｒ０をそれぞれ追加し、これらのマッピング結果を含むＣＤＦＧをＳＭ−Ｂｉｎｄとして格納する。
【０１１６】
ステップＳ４＿５では、仕様Ｔ１で指定されたエラーチェック出力信号を元に、新たなリソースが追加される。具体的述べると、図２０に示すように、エラーチェック出力信号として、「Ｐｏｒｔ（ＥＲＲ、Ｆ／Ｆ）」が指定されている。このため、高位合成部５０は、ＥＲＲとｏｒ０との間にレジスタｒ４を追加し、レジスタｒ４のマッピング結果を含むＣＤＦＧをＳＭ−Ｂｉｎｄとして格納する。
【０１１７】
そして、ステップＳ４＿３に戻る。ただし、前回のステップＳ４＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ４＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、バインディングＳ４の処理が終了する。
【０１１８】
＜＜制御回路作成＞＞
次に、制御回路作成Ｓ５について説明する。制御回路作成Ｓ５では、スケジューリング結果により決定された各サイクルにおける動作を制御する制御回路が生成される。図２８は、各サイクルにおける動作を制御する制御回路の例を示す図である。高位合成部５０は、図２７等に示すサイクル０、サイクル１、サイクル２の演算を順次実行させるため、３つの状態Ｓｔ０、Ｓｔ１、Ｓｔ２を持つ制御回路ＦＳＭ０を作成する。制御回路ＦＳＭ０は、例えば、状態Ｓｔ０のときサイクル０の演算を実行させ、状態Ｓｔ１のときサイクル１の演算を実行させ、状態Ｓｔ２のときサイクル２の演算を実行させるように構成される。
【０１１９】
＜＜機能安全機構挿入（２）＞＞
次に、機能安全機構挿入（２）Ｓ６について説明する。機能安全機構挿入（２）Ｓ６では、機能安全機構実装仕様１３０に従い、制御回路作成Ｓ５において生成された制御回路を対象とした機能安全機構回路の挿入が行われる。
【０１２０】
高位合成では、バインディングＳ４の実行後に、制御回路が生成される。このため、高位合成が生成する制御回路を対象とした機能安全機構回路の挿入は、必ず、制御回路作成Ｓ５の後に行われる。図２９は、機能安全機構挿入（２）の一例を示すフロー図である。図２９の機能安全機構挿入（２）Ｓ６には、ステップＳ６＿１〜Ｓ６＿６が含まれる。図３０は、機能安全機構挿入（２）において挿入される機能安全機構の一例を示す図である。以下では、図２８の制御回路ＦＳＭ０を入力として、機能安全機構挿入（２）Ｓ６のフローを説明する。
【０１２１】
ステップＳ６＿１において、高位合成部５０は、制御回路作成Ｓ５において生成された制御回路ＦＳＭ０をＣｏｎｔｒｏｌｌｅｒｓとしてデータ格納部４０に格納する。格納された制御回路ＦＳＭ０に関する情報は、後述のＲＴＬ記述作成Ｓ７において使用される。
【０１２２】
ステップＳ６＿２では、機能安全機構実装仕様から高位合成制御回路に対する実装仕様の部分のみが抽出される。例えば、高位合成部５０は、図２０の機能安全機構実装仕様１３０から２行目の制御回路ＦＳＭ０に対する実装仕様を抽出する。高位合成部５０は、抽出した箇所を抽出記述Ｔ０としてデータ格納部４０に格納する。
【０１２３】
ステップＳ６＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。ステップＳ６＿３は、ステップＳ２＿３等と類似している。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から実装仕様（仕様Ｔ１）を取り出す。そして、後続のステップＳ６＿４の処理が実行される。
【０１２４】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、機能安全機構挿入（２）Ｓ６の処理を終了させる。
【０１２５】
ステップＳ６＿４では、高位合成部５０は、仕様Ｔ１で指定された高位合成制御回路に対応する制御回路（ＦＳＭ０）をＣｏｎｔｒｏｌｌｅｒｓから抽出する。なお、抽出された制御回路（ＦＳＭ０）は、Ｓｕｂ−Ｃｏｎｔｒｏｌｌｅｒとする。
【０１２６】
ステップＳ６＿５では、高位合成部５０は、Ｓｕｂ−Ｃｏｎｔｒｏｌｌｅｒを元に、挿入する機能安全機構の回路をｓｍ−Ｃｏｎｔｒｏｌｌｅｒとして作成する。具体的に述べると、図２０に示すように、仕様Ｔ１で指定された機能安全機構は三重化回路（ＴＲＭ）である。このため、高位合成部５０は、Ｓｕｂ−Ｃｏｎｔｒｏｌｌｅｒに対する冗長回路（ＦＳＭ１、ＦＳＭ２）、及び多数決回路（ｖｏｔｅ０）を、ｓｍ−Ｃｏｎｔｒｏｌｌｅｒとして作成する（図３０を参照）。
【０１２７】
ステップＳ６＿６では、高位合成部５０は、ステップＳ６＿５で作成したｓｍ−ＣｏｎｔｒｏｌｌｅｒをＳＭ−Ｃｏｎｔｒｏｌｌｅｒｓとしてデータ格納部４０に格納する。ＳＭ−Ｃｏｎｔｒｏｌｌｅｒｓとして格納された情報は、後述するＲＴＬ記述作成Ｓ７において使用される。
【０１２８】
そして、ステップＳ６＿３に戻る。ただし、前回のステップＳ６＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ６＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、機能安全機構挿入（２）Ｓ６の処理を終了させる。
【０１２９】
＜＜ＲＴＬ記述生成＞＞
次に、ＲＴＬ記述生成Ｓ７について説明する。ＲＴＬ記述生成Ｓ７では、機能安全機構実装仕様に従い、機能安全機構挿入（１）Ｓ２、機能安全機構挿入（２）Ｓ６において挿入された機能安全機構を含む、機能安全機構付きＲＴＬ記述が生成される。なお、以下では、理解を容易にするため、ＲＴＬ記述を回路図として示す。
【０１３０】
図３１は、ＲＴＬ記述生成の一例を示すフロー図である。図３１のＲＴＬ記述生成Ｓ７には、ステップＳ７＿１〜Ｓ７＿１６が含まれる。
【０１３１】
ステップＳ７＿１では、機能安全機構実装仕様から高位合成制御回路に対する実装仕様の部分のみが抽出される。例えば、高位合成部５０は、図２０の機能安全機構実装仕様１３０から２行目の制御回路ＦＳＭ０に対する実装仕様を抽出する。高位合成部５０は、抽出した箇所を抽出記述Ｔ０としてデータ格納部４０に格納する。
【０１３２】
ステップＳ７＿２では、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。ステップＳ７＿２は、ステップＳ２＿３等と類似している。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から制御回路ＦＳＭ０に対する実装仕様（仕様Ｔ１）を取り出す。そして、後続のステップＳ７＿３の処理が実行される。
【０１３３】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、ステップＳ７＿６の処理が実行される。
【０１３４】
ステップＳ７＿３では、高位合成部５０は、仕様Ｔ１に指定されている機能安全機構モジュール名に従い、モジュールＣＨＫを作成する。
【０１３５】
ステップＳ７＿４では、高位合成部５０は、仕様Ｔ１に指定されている制御回路ＦＳＭ０の機能安全機構を実現する回路を、機能安全機構挿入（２）Ｓ６で作成したＳＭ−Ｃｏｎｔｒｏｌｌｅｒｓから取り出す。取り出した回路は、ｓｍ−Ｃｏｎｔｒｏｌｌｅｒとする（ステップＳ６＿６を参照）。本例では、制御回路ＦＳＭ１、制御回路ＦＳＭ２、多数決回路ｖｏｔｅ０がｓｍ−Ｃｏｎｔｒｏｌｌｅｒとなる。
【０１３６】
ステップＳ７＿５では、高位合成部５０は、ステップＳ７＿４で取り出したｓｍ−ＣｏｎｔｒｏｌｌｅｒのＲＴＬ回路を作成する。図３２は、ｓｍ−ＣｏｎｔｒｏｌｌｅｒのＲＴＬ回路の一例を示す図である。図３２のモジュールＣＨＫは、制御回路ＦＳＭ１、ＦＳＭ２、多数決回路ｖｏｔｅ０を含む。多数決回路ｖｏｔｅ０は、制御回路ＦＳＭ０、ＦＳＭ１、ＦＳＭ２の出力信号の多数決を行い、多数決の結果を信号ｖｏｔｅ０として出力する。
【０１３７】
そして、ステップＳ７＿２に戻る。ただし、前回のステップＳ７＿２において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ７＿２では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、ステップＳ７＿６の処理を実行する。
【０１３８】
ステップＳ７＿６では、高位合成部５０は、機能安全機構実装仕様から動作記述位置に対する実装仕様の記述のみを抽出する。本例では、高位合成部５０は、図２０の機能安全機構実装仕様１３０の１行目における、動作記述１１０の２−３行目に対する実装仕様に関する記述を抽出し、抽出した箇所を抽出記述Ｔ０としてデータ格納部４０に格納する。
【０１３９】
ステップＳ７＿７は、ステップＳ７＿２と類似している。ステップＳ７＿７において、高位合成部５０は、抽出記述Ｔ０が空（φ）でないかどうかを判断する。抽出記述Ｔ０が空でないと判断した場合（Ｙｅｓ）、高位合成部５０は、抽出記述Ｔ０から動作記述の２−３行目に対する実装仕様（仕様Ｔ１）を取り出す。そして、後続のステップＳ７＿８の処理が実行される。
【０１４０】
一方、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断した場合（Ｎｏ）、ステップＳ７＿１２の処理が実行される。
【０１４１】
ステップＳ７＿８では、高位合成部５０は、仕様Ｔ１に指定された機能安全機構モジュール名に従い、モジュールＣＨＫを作成する。ただし、ステップＳ７＿３においてモジュールＣＨＫはすでに作成済みであるため、新たなモジュールは作成されない。
【０１４２】
ステップＳ７＿９では、高位合成部５０は、仕様Ｔ１に指定されている、動作記述の２−３行目の機能安全機構を実現する回路を、バインディングＳ４で作成したＳＭ−Ｂｉｎｄから取り出す。取り出した回路は、バインディング結果付ＣＤＦＧのｓｍ−Ｂｉｎｄとする。本例では、例えば後述する図３３に示すｍｕｌ１、ａｄｄ１、ｃｍｐ０、ｒ３、ｃｍｐ１、ｏｒ０、ｒ４が、ｓｍ−Ｂｉｎｄである。
【０１４３】
ステップＳ７＿１０では、高位合成部５０は、ステップＳ７＿９で取り出したｓｍ−ＢｉｎｄのＲＴＬ回路を作成する。
【０１４４】
ステップＳ７＿１１では、ステップＳ７＿１０で作成されたＲＴＬ記述に対し、新たな回路が追加される。仕様Ｔ１では、エラーチェック実行周期として「ＥｘｅｃＣｏｎｄ」が指定されている。このため、高位合成部５０は、エラーチェック入力信号の値を更新したサイクルに対応する状態Ｓｔ１においてのみｃｍｐ０、ｃｍｐ１、ｏｒ０の結果を伝搬する回路を生成する。具体的に述べると、ステップＳ７＿１１では、ｒ５、ｒ６、及びｒ４、ｒ５、ｒ６の前段に選択回路ＭＵＸ(マルチプレクサ)が生成される。ここで生成される選択回路ＭＵＸに入力される選択信号は、三重化回路の多数決結果である図３２の信号ｖｏｔｅ０である。図３３は、ＲＴＬ記述生成において生成されるＲＴＬ回路の一例を示す図である。図３３のモジュールＣＨＫは、ｍｕｌ１、ａｄｄ１、ｃｍｐ０、ｃｍｐ１、ｏｒ０、ｒ３、ｒ４、ｒ５、ｒ６、４つのＭＵＸを含む。
【０１４５】
そして、ステップＳ７＿７に戻る。ただし、前回のステップＳ７＿７において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ７＿７では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、ステップＳ７＿１２の処理を実行する。
【０１４６】
ステップＳ７＿１２では、高位合成対象の機能モジュール名に対応するモジュールが作成される。例えば、高位合成部５０は、動作記述１１０から、２−３行目を含む機能モジュール名を１行目の記述から識別し、新たなモジュールｍｏｄＡを作成する。
【０１４７】
ステップＳ７＿１３では、高位合成部５０は、バインディングＳ４で作成したＢｉｎｄと、機能安全機構挿入（２）Ｓ６で作成したＣｏｎｔｒｏｌｌｅｒｓを元に、機能モジュールのＲＴＬ回路を作成する。図３４は、ステップＳ７＿１３において生成されるＲＴＬ回路の一例を示す図である。図３４は、モジュールｍｏｄＡのＲＴＬ回路である。図３４に示すように、モジュールｍｏｄＡは、ＦＳＭ０等の機能論理と、機能安全機構を実装したモジュールＣＨＫとを含む。
【０１４８】
ステップＳ７＿１４では、高位合成部５０は、機能論理と機能安全機構のモジュールＣＨＫとの信号結線を行う。図３５は、信号結線後のＲＴＬ回路の一例を示す図である。
【０１４９】
ステップＳ７＿１５では、機能安全機構も含めたタイミング評価が行われる。タイミング評価は、高位合成部５０で行われてもよい。図３１のフローは、タイミングバイオレーションがない場合を示すが、タイミングバイオレーションが起きたと判定された場合、該当パスに対して、スケジューリングＳ３からの処理が再度実行される。これは、一般的な高位合成時において、制御回路作成後に行われるポストスケジュールと同等の処理である。
【０１５０】
ステップＳ７＿１６では、高位合成部５０は、図３２〜図３５を実現するＲＴＬ記述を生成する。ステップＳ７＿１６により、最終的に機能安全機構付きＲＴＬ記述１４０が生成される。
【０１５１】
＜その他の構成＞
図１では、プロセッサ１０及び不揮発性メモリ２０が高位合成装置１に含まれているが、これらが別の装置にそれぞれ設けられてもよい。具体的に述べると、プロセッサを含む装置及び不揮発性メモリを含む装置は、有線、無線、あるいはネットワークを介して接続された高位合成システムを構成する。このような高位合成システムにおいて、前述した高位合成が実行されてもよい。
【０１５２】
＜本実施の形態による主な効果＞
本実施の形態によれば、高位合成部５０は、動作記述１１０と、高位合成スクリプト１２０と、機能安全機構実装仕様１３０とを用いた高位合成を行い、機能安全機構を挿入したＲＴＬ記述を生成する。また、高位合成部５０は、機能安全機構実装仕様１３０で指定された動作記述１１０の任意の位置に対し、機能安全機構を挿入する。また、高位合成部５０は、動作記述１１０を用いてＣＤＦＧを生成（Ｓ１）した後、機能安全機構実装仕様１３０に従い、ＣＤＦＧに機能安全機構を挿入する第１機能安全機構挿入処理Ｓ２を行う。この構成によれば、冗長論理である機能安全機構が削除されないので、機能安全機構実装仕様１３０に基づき、任意の動作記述の論理を実行する回路、及び高位合成が生成する制御回路に対して、任意の機能安全機構を実装したＲＴＬ記述を生成することが可能となる。
【０１５３】
また、本実施の形態では、第１機能安全機構挿入処理Ｓ２において、機能安全機構を挿入したＣＤＦＧを生成した後、高位合成スクリプト１２０で規定された高位合成制約に基づくスケジューリング処理Ｓ３が行われる。この構成によれば、各サイクルにおける遅延時間の見積に基づき、各演算の実行タイミングが適切に設定されるので、必要となる回路素子の増大が抑えられる。
【０１５４】
（実施の形態２）
次に、実施の形態２について説明する。なお、以下では、前述の実施の形態と重複する箇所については、原則として説明を省略する。
【０１５５】
＜高位合成方法の詳細＞
図３６は、本発明の実施の形態２に係る高位合成の概要を説明する図である。図３６の動作記述１１０、高位合成スクリプト１２０、及び機能安全機構実装仕様１３０は、実施の形態１と同様、ユーザにより事前に準備される。本実施の形態の高位合成では、まず、機能安全機構未実装のＲＴＬ記述が生成される。このＲＴＬ記述とあわせて、機能安全機構実装仕様に従い、機能安全機構未実装のＲＴＬ記述を対象とした機能安全機構実装指示が生成される。そして、機能安全機構実装指示に基づき、ＲＴＬ記述に機能安全機構が追加される。この機能安全機構の追加は、例えば非特許文献２等に示されるプログラム自動変換、あるいは人手作業により行われる。
【０１５６】
図３７は、本発明の実施の形態２に係る高位合成方法の一例を示す説明図である。図３７に示すように、本実施の形態の高位合成では、ＣＤＦＧ作成Ｓ１１、機能安全機構挿入位置記録（１）Ｓ１２、スケジューリングＳ１３、バインディングＳ１４、制御回路作成Ｓ１５、機能安全機構挿入位置記録（２）Ｓ１６、ＲＴＬ記述生成Ｓ１７、機能安全機構実装指示生成Ｓ１８、機能安全機構挿入Ｓ１９の各処理が実行される。実施の形態１と同様、ユーザは、例えば図２０に示す動作記述１１０、高位合成スクリプト１２０、及び機能安全機構実装仕様１３０の各ファイルを作成し、高位合成装置１に転送しておく。
【０１５７】
図３７のＣＤＦＧ作成Ｓ１１は、図１９のＣＤＦＧ作成Ｓ１と同様であるので、説明は省略する。
【０１５８】
＜＜機能安全機構挿入位置記録（１）＞＞
機能安全機構挿入位置記録（１）Ｓ１２では、機能安全機構実装仕様に従い、機能安全機構の挿入位置が記録される。機能安全機構挿入位置記録（１）Ｓ１２は、図１９の機能安全機構挿入（１）Ｓ２と同様、必ず、ＣＤＦＧ作成Ｓ１の後、スケジューリングＳ３の前に実施される。
【０１５９】
図３８は、機能安全機構挿入位置記録（１）の一例を示すフロー図である。図３８に示す機能安全機構挿入位置記録（１）Ｓ１２は、ステップＳ１２＿１〜Ｓ１２＿５を含む。ステップＳ１２＿１〜Ｓ１２＿４では、図２２のステップＳ２＿１〜Ｓ２＿４と同様の処理がそれぞれ実行される。
【０１６０】
図３９は、Ｓｕｂ−ＣＤＦＧの一例を示す図である。図３９のＳｕｂ−ＣＤＦＧは、図２３のＳｕｂ−ＣＤＦＧと同様である。図３７においても、頂点ＭＵＬ０、ＡＤＤ０、辺ａ、ｂ、ｃ、ｔ１、ｔ２がＳｕｂ−ＣＤＦＧとして作成されている。このように、機能安全機構の挿入位置が、Ｓｕｂ−ＣＤＦＧに記録される。
【０１６１】
ステップＳ１２＿５では、高位合成部５０は、ステップＳ１２＿４で作成したＳｕｂ−ＣＤＦＧをＳＡＦＥ−ＣＤＦＧとしてデータ格納部４０に格納する。ＳＡＦＥ−ＣＤＦＧは、後述するスケジューリングＳ３で使用される。
【０１６２】
そして、ステップＳ１２＿３に戻る。ただし、前回のステップＳ１２＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１２＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、機能安全機構挿入位置記録（１）Ｓ１２の処理を終了させる。
【０１６３】
＜＜スケジューリング＞＞＞
次に、スケジューリングＳ１３について説明する。図４０は、スケジューリングの一例を示すフロー図である。図４０のスケジューリングＳ３には、ステップＳ１３＿１〜Ｓ１３＿５が含まれる。ここでも、クロック周期１０ｎｓに対して、クロックサイクル境界（境界線）が挿入される。
【０１６４】
ステップＳ１３＿１では、高位合成部５０は、遅延時間の見積り結果を用いてデータ格納部４０に格納された、機能安全機構挿入位置記録（１）Ｓ１２で作成したＳＡＦＥ−ＣＤＦＧに対するスケジュールリングを行う。そして、高位合成部５０は、ＳＡＦＥ−ＣＤＦＧに対応するスケジューリング済みＣＤＦＧを、ＳＡＦＥ−Ｓｃｈｅｄとしてデータ格納部４０に格納する。また、高位合成部５０は、これ以外のＣＤＦＧに対するスケジューリングも行い、スケジューリング済みＣＤＦＧをＳｃｈｅｄとしてデータ格納部４０に格納する。
【０１６５】
ステップＳ１３＿２〜Ｓ１３＿３では、ステップＳ３＿２〜Ｓ３＿３と同様の処理がそれぞれ実行される。ステップＳ１３＿４では、高位合成部５０は、仕様Ｔ１で指定されている動作記述位置から、２−３行目に対応するスケジューリング済みＣＤＦＧをＳＡＦＥ−Ｓｃｈｅｄから、同じサイクルにスケジューリングされたそれ以外のスケジューリング済みＣＤＦＧをＳｃｈｅｄから、それぞれ取り出し、取り出したＣＤＦＧをｓａｆｅ−Ｓｃｈｅｄとする。
【０１６６】
ステップＳ１３＿５では、高位合成部５０は、仕様Ｔ１で指定されているためエラーチェック実行周期に応じて、ｓａｆｅ−Ｓｃｈｅｄに対する再スケジューリングを行う。高位合成部５０は、この再スケジューリング結果を用いて、データ格納部４０に格納されたＳＡＦＥ−ＳｃｈｅｄとＳｃｈｅｄを更新する。図４１は、ｓａｆｅ−ＣＤＦＧに対するスケジューリング方法を説明する図である。図４１に示すスケジューリング結果は、図２５の右側のＳｃｈｅｄと同じ結果となっている。
【０１６７】
そして、ステップＳ１３＿３に戻る。ただし、前回のステップＳ１３＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１３＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、スケジューリングＳ１３の処理が終了する。
【０１６８】
＜＜バインディング＞＞
次に、バインディングＳ１４について説明する。図４２は、バインディングの一例を示すフロー図である。図４３は、バインディング方法を説明する図である。ステップＳ１４＿１では、高位合成部５０は、スケジューリングＳ１３で更新したＳＡＦＥ−ｓｃｈｅｄに含まれるＣＤＦＧ（機能安全機構論理）にマッピングを行う。
【０１６９】
具体的に述べると、高位合成部５０は、図４３に示すように、乗算にｍｕｌ０、加算にａｄｄ０をそれぞれマッピングする。そして、高位合成部５０は、マッピング結果付ＣＤＦＧをＳＡＦＥ−Ｂｉｎｄとしてデータ格納部４０に格納する。また、高位合成部５０は、クロック境界を跨ぐデータパスにレジスタｒ０をマッピングし、レジスタｒ０のマッピング結果を含むＣＤＦＧをＳＡＦＥ−Ｂｉｎｄとしてデータ格納部４０に格納する。また、高位合成部５０は、これ以外のＣＤＦＧに対するバインディングも行い、その結果をＢｉｎｄとしてデータ格納部４０に格納する。
【０１７０】
＜＜制御回路作成＞＞
次に、制御回路作成Ｓ１５では、図１９の制御回路作成Ｓ５と同様に、スケジューリング結果により決定された各サイクルにおける動作を制御する制御回路が生成される（図２８を参照）。
【０１７１】
＜＜機能安全機構挿入位置記録（２）＞＞
次に、機能安全機構挿入位置記録（２）Ｓ１６について説明する。機能安全機構挿入位置記録（２）Ｓ１６では、機能安全機構実装仕様に従い、制御回路に対する機能安全機構の挿入位置が記録される。ここでは、高位合成により生成された制御回路を対象として機能安全機構の挿入位置が記録される。機能安全機構挿入位置記録（２）Ｓ１６は、図１９の機能安全機構挿入（２）Ｓ６と同様、必ず、制御回路作成Ｓ１５の後に実施される。
【０１７２】
図４４は、機能安全機構挿入位置記録（２）の一例を示すフロー図である。図４４の機能安全機構挿入位置記録（２）Ｓ１６は、ステップＳ１６＿１〜Ｓ１６＿５を含む。ステップＳ１６＿１〜Ｓ１６＿４では、図２９のステップＳ６＿１〜Ｓ６＿４と同様の処理がそれぞれ実行される。ステップＳ１６＿４において作成されるＳｕｂ−Ｃｏｎｔｒｏｌｌｅｒに、制御回路（ＦＳＭ０）の機能安全機構の挿入位置が記録される。
【０１７３】
ステップＳ１６＿５では、高位合成部５０は、ステップＳ１６＿４で作成したＳｕｂ−ＣｏｎｔｒｏｌｌｅｒをＳＡＦＥ−Ｃｏｎｔｒｏｌｌｅｒｓとしてデータ格納部４０に格納する。ＳＡＦＥ−Ｃｏｎｔｒｏｌｌｅｒｓとして格納された情報は、後述するＲＴＬ記述作成Ｓ１７において使用される。
【０１７４】
そして、ステップＳ１６＿３に戻る。ただし、前回のステップＳ１６＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１６＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、機能安全機構挿入位置記録（２）Ｓ１６の処理を終了させる。
【０１７５】
＜＜ＲＴＬ記述生成＞＞
次に、ＲＴＬ記述生成Ｓ１７について説明する。前述したように、本実施の形態のＲＴＬ記述生成Ｓ１７では、機能安全機構を含まないＲＴＬ記述が生成される。図４５は、本発明の実施の形態２に係るＲＴＬ記述生成の一例を示すフロー図である。図４５のＲＴＬ記述生成Ｓ１７には、ステップＳ１７＿１〜Ｓ１７＿１３が含まれる。
【０１７６】
ステップＳ１７＿１では、図３１のステップＳ７＿１２と同様の処理が実行される。高位合成部５０は、高位合成対象の機能モジュール名に対応する新たなモジュールｍｏｄＡを作成する。ステップＳ１７＿２〜Ｓ１７＿３では、図３１のステップＳ７＿１〜Ｓ７＿２と同様の処理が実行される。
【０１７７】
ステップＳ１７＿４では、高位合成部５０は、仕様Ｔ１に指定されている制御回路ＦＳＭ０の機能安全機構を実現する回路を、機能安全機構挿入位置記録（２）Ｓ１６で作成したＳＡＦＥ−Ｃｏｎｔｒｏｌｌｅｒｓから取り出す。取り出した回路は、ｓａｆｅ−Ｃｏｎｔｒｏｌｌｅｒとする。具体的に述べると、高位合成部５０は、仕様Ｔ１において機能安全機構実装対象として指定されている制御回路ＦＳＭ０を、ＳＡＦＥ−Ｃｏｎｔｒｏｌｌｅｒｓから取り出し、ｓａｆｅ−Ｃｏｎｔｒｏｌｌｅｒとする。
【０１７８】
ステップＳ１７＿５では、高位合成部５０は、ステップＳ１７＿４で取り出したｓａｆｅ−ＣｏｎｔｒｏｌｌｅｒのＲＴＬ回路を作成する。
【０１７９】
ステップＳ１７＿６では、高位合成部５０は、ステップＳ１７＿５で作成したＲＴＬ回路を、ＳＡＦＥ−ＣｏｎｔｒｏｌｌｅｒＲＴＬとしてデータ格納部４０に格納する。ＳＡＦＥ−ＣｏｎｔｒｏｌｌｅｒＲＴＬとして格納された情報は、後述の機能安全機構実装指示生成Ｓ１８で利用される。
【０１８０】
そして、ステップＳ１７＿３に戻る。ただし、前回のステップＳ１７＿３において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１７＿３では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、ステップＳ１７＿７の処理を実行する。
【０１８１】
ステップＳ１７＿７〜Ｓ１７＿８では、図３１のステップＳ７＿６〜Ｓ７＿７と同様の処理が実行される。ステップＳ１７＿９では、高位合成部５０は、仕様Ｔ１に指定されている、動作記述の２−３行目の機能安全機構を実現する回路を、バインディングＳ１４で作成したＳＡＦＥ−Ｂｉｎｄから取り出す。取り出した回路は、バインディング結果付ＣＤＦＧのｓａｆｅ−Ｂｉｎｄとする。本例では、後述する図４６に示すｍｕｌ０、ａｄｄ０、ｒ０が、ｓａｆｅ−Ｂｉｎｄである。
【０１８２】
ステップＳ１７＿１０では、高位合成部５０は、ステップＳ１７＿９で取り出したｓａｆｅ−ＢｉｎｄのＲＴＬ回路を作成する。
【０１８３】
ステップＳ１７＿１１では、高位合成部５０は、ステップＳ１７＿１０で作成したＲＴＬ回路を、ＳＡＦＥ−ＤａｔａｐａｔｈＲＴＬとしてデータ格納部４０に格納する。ＳＡＦＥ−ＤａｔａｐａｔｈＲＴＬに含まれる情報は、後述の機能安全機構実装指示生成Ｓ１８で使用される。
【０１８４】
そして、ステップＳ１７＿８に戻る。ただし、前回のステップＳ１７＿８において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１７＿８では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、ステップＳ１７＿１２の処理を実行する。
【０１８５】
ステップＳ１７＿１２では、高位合成部５０は、バインディングＳ１４で作成したＢｉｎｄと、機能安全機構挿入位置記録（２）Ｓ１６で作成したＣｏｎｔｒｏｌｌｅｒｓとを用いてＲＴＬ記述１４０Ａを作成する（図３７を参照）。図４６は、ステップＳ１７＿１３において生成されるＲＴＬ回路の一例を示す図である。図４６は図３４に対応する図であり、実施の形態１との差異が明確に示されている。双方の図面を比較すると、図４６のＲＴＬ回路には、機能安全機構のモジュールＣＨＫが含まれていない。このように、本実施の形態のＲＴＬ記述生成Ｓ１７では、機能安全機構はまだ実装されない。
【０１８６】
ステップＳ１７＿１３では、高位合成部５０は、図４６のＲＴＬ回路を実現するＲＴＬ記述を生成する。
【０１８７】
＜＜機能安全機構実装指示生成＞＞
次に、機能安全機構実装指示生成Ｓ１８について説明する。機能安全機構実装指示生成Ｓ１８では、機能安全機構実装仕様、及びＲＴＬ記述生成Ｓ１７において生成されたＲＴＬ記述に従い、図３７に示す機能安全機構実装指示１５０が生成される。ここで生成される機能安全機構実装指示には、モジュール実装指示、及びリソース実装指示が含まれる。
【０１８８】
モジュール実装指示には、例えばモジュール名を指定する「Ｎａｍｅ」、入力信号を指定する「Ｉｎｐｕｔ」、出力信号を指定する「Ｏｕｔｐｕｔ」等の情報が出力される。すなわち、モジュール実装指示とは、機能安全機構のモジュールに関する情報が含まれる。
【０１８９】
一方、リソース実装指示には、例えば入力信号の接続元を指定する「Ｉｎｐｕｔ」、出力信号の接続先を指定する「Ｏｕｔｐｕｔ」、出力の更新条件を指定する「Ｅｎａｂｌｅ」、リソース作成用のモジュール名を指定する「Ｍｏｄｕｌｅ」等の情報が出力される。すなわち、リソース実装指示とは、機能安全機構のモジュールのリソースに関する情報が含まれる。
【０１９０】
図４７は、機能安全機構実装指示生成Ｓ１８の一例を示すフロー図である。図４７には、ステップＳ１８＿１〜Ｓ１８＿１２が含まれる。ステップＳ１８＿１〜Ｓ１８＿２では、例えば図４５のステップＳ１７＿２〜Ｓ１７＿３と同様の処理が実行される。
【０１９１】
ステップＳ１８＿３では、高位合成部５０は、仕様Ｔ１で指定された機能安全機構モジュール名に従い、モジュールＣＨＫに関するモジュール実装指示を作成する。
【０１９２】
ステップＳ１８＿４では、高位合成部５０は、ＳＡＦＥ−ＣｏｎｔｒｏｌｌｅｒＲＴＬから、仕様Ｔ１で指定された機能安全機構（ＦＳＭ０）を実現するＲＴＬ回路を抽出する。抽出されたＲＴＬ回路は、ｓａｆｅ−Ｃｏｎｔｒｏｌｌｅｒとする。
【０１９３】
ステップＳ１８＿５では、ステップＳ１８＿４で作成したｓａｆｅ−Ｃｏｎｔｒｏｌｌｅｒと、仕様Ｔ１で指定された機能安全機構とから、機能安全機構に関するＲＴＬ回路のリソース実装指示が生成される。具体的に述べると、仕様Ｔ１で指定された機能安全機構が三重化回路（ＴＭＲ）であるため、高位合成部５０は、ステップＳ１８＿４で作成したｓａｆｅ−Ｃｏｎｔｒｏｌｌｅｒに対する冗長回路と、多数決回路とを実現するためのリソース実装指示を作成する。
【０１９４】
本例では、高位合成部５０は、ＦＳＭ１、ＦＳＭ２、ｖｏｔｅ０のリソース実装指示を作成する。また、仕様Ｔ１には、エラーチェック入力信号として「Ｏｕｔｐｕｔ」、エラーチェック実行周期として、毎クロックサイクルがそれぞれ指定されている。このため、高位合成部５０は、毎クロックサイクル、三重化回路の多数決をとるｖｏｔｅ０を生成し、ＦＳＭ０、ＦＳＭ１、ＦＳＭ２をｖｏｔｅ０に接続する。また、仕様Ｔ１には、エラーチェック出力信号として「−」が指定されているため、高位合成部５０は、外部へのエラー通知信号の作成指示は出力しない。そして、高位合成部５０は、ＦＳＭ０を選択信号とするＭＵＸに対し、多数決結果である信号ｖｏｔｅ０を接続するための指示を生成する。ここで生成される指示は、ｖｏｔｅ０に対するリソース実装指示の「Ｏｕｔｐｕｔ」に関する情報となる。
【０１９５】
ステップＳ１８＿６では、機能論理のモジュール、及び機能安全機構モジュールの信号結線情報が、モジュール実装指示に追加される。具体的に述べると、高位合成部５０は、機能モジュールｍｏｄＡと、機能安全機構モジュールＣＨＫとの信号結線情報を、機能安全機構モジュールＣＨＫのモジュール実装指示に追加する。本例では、高位合成部５０は、ｖｏｔｅ０の入力としてＦＳＭ０、出力としてｖｏｔｅ０を作成させる指示を機能安全機構モジュールＣＨＫのモジュール実装指示に追加する。
【０１９６】
そして、ステップＳ１８＿２に戻る。ただし、前回のステップＳ１８＿２において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１８＿２では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、ステップＳ１８＿７の処理を実行する。ステップＳ１８＿７〜Ｓ１８＿８では、図４５のステップＳ１７＿７〜Ｓ１７＿８と同様の処理がそれぞれ実行される。
【０１９７】
ステップＳ１８＿９では、仕様Ｔ１に指定された機能安全機構モジュール名に従い、機能安全モジュールＣＨＫに関するモジュール実装指示が作成される。しかし、高位合成部５０は、ステップＳ１８＿３において、すでに機能安全モジュールＣＨＫのモジュール実装指示を作成しているので、機能安全モジュールＣＨＫの新たなモジュール実装指示は作成しない。
【０１９８】
ステップＳ１８＿１０では、ＳＡＦＥ−ＤａｔａｐａｔｈＲＴＬから、仕様Ｔ１の機能安全機構を実現する回路が抽出される。具体的に述べると、高位合成部５０は、仕様Ｔ１に指定されている、動作記述の２−３行目の内容を実現したＲＴＬ回路を、ＳＡＦＥ−ＤａｔａｐａｔｈＲＴＬから取り出す。取り出されたＲＴＬ回路は、ｓａｆｅ−Ｄａｔａｐａｔｈとする。本例では、ｍｕｌ０、ａｄｄ０、ｒ０及びこれらの入出力を制御するＭＵＸがｓａｆｅ−Ｄａｔａｐａｔｈに含まれる。
【０１９９】
ステップＳ１８＿１１では、ｓａｆｅ−Ｄａｔａｐａｔｈと仕様Ｔ１の指定とから、機能安全機構のＲＴＬ回路のリソース実装指示が生成される。具体的に述べると、仕様Ｔ１に指定された機能安全機構が二重化回路（ＤＭＲ）であるため、高位合成部５０は、ステップＳ１８＿１０で作成したｓａｆｅ−Ｄａｔａｐａｔｈに対する冗長回路と比較回路を実現するためのリソース実装指示を作成する。
【０２００】
本例では、高位合成部５０は、ｍｕｌ０、ａｄｄ０、ｒ０の冗長回路として、ｍｕｌ１、ａｄｄ１、ｒ３のリソース実装指示を作成する。ａｄｄ１の入力信号は、ａｄｄ０の入力信号ｒ０、ｃに対応するｒ３、ｃとし、ａｄｄ１の出力信号はａｄｄ０の出力信号のｔ２に対応するｔ５とする。ｒ３はｍｕｌ１の出力結果を格納し、更新条件はｒ０と同様に、状態Ｓｔ０とする。なお、更新情報は、ｒ３のリソース実装指示の「Ｅｎａｂｌｅ」の情報である。
【０２０１】
そして、比較回路として、仕様Ｔ１で指定されたエラーチェック入力信号が「Ｏｕｔｐｕｔ＋Ｆ／Ｆ」であるため、高位合成部５０は、動作記述の２−３行目の出力であるａｄｄ０の結果ｔ２とａｄｄ０の冗長回路であるａｄｄ１の結果ｔ５とを比較するｃｍｐ０、高位合成により追加したレジスタｒ０とｒ０の冗長回路であるｒ３の値とを比較するｃｍｐ１、及びｃｍｐ０とｃｍｐ１の比較結果の論理和ｏｒ０のリソース実装指示をそれぞれ作成する。
【０２０２】
また、仕様Ｔ１で指定されたエラーチェック結果出力信号が「Ｐｏｒｔ（ＥＲＲ、Ｆ／Ｆ）」であるため、ｏｒ０の結果を格納するｒ４、及び外部出力ＥＲＲのリソース実装指示をそれぞれ作成する。さらに、仕様Ｔ１には、エラーチェック実行周期として「ＥｘｅＣｏｎｄ」が指定されているため、高位合成部５０は、状態Ｓｔ１においてのみｃｍｐ０、ｃｍｐ１、ｏｒ０の結果を伝搬する回路のリソース実装指示を作成する。具体的に述べると、高位合成部５０は、ｃｍｐ０、ｃｍｐ１の結果を、状態Ｓｔ１以外において保持するためのｒ５、ｒ６を生成し、ｒ４、ｒ５、ｒ６の更新条件をＳｔ１とする。なお、更新情報は、ｒ４、ｒ５、ｒ６のリソース実装指示の「Ｅｎａｂｌｅ」の情報である。
【０２０３】
ステップＳ１８＿１２では、機能モジュールｍｏｄＡと機能安全機構モジュールＣＨＫとの信号結線情報を、機能安全機構モジュールＣＨＫのモジュール実装指示に追加される。本例では、高位合成部５０は、ｍｕｌ１の入力としてａ、ｂ、また、ａｄｄ１の入力としてｃ、ｃｍｐ０の入力としてｔ２、ｃｍｐ１の入力としてｒ０、エラーチェック出力信号としてＥＲＲをそれぞれ作成する指示を機能安全機構モジュールＣＨＫのモジュール実装指示に追加する。図４８は、機能安全機構実装指示の一例を示す図である。機能安全機構実装指示１５０の上側にはリソース実装指示が作成され、機能安全機構実装指示１５０の下側にはモジュール実装指示が作成されている。
【０２０４】
そして、ステップＳ１８＿８に戻る。ただし、前回のステップＳ１８＿８において、抽出記述Ｔ０から仕様Ｔ１が取り出されたため、抽出記述Ｔ０は、空（Ｔ０＝φ）となっている。このため、今回のステップＳ１８＿８では、高位合成部５０は、抽出記述Ｔ０が空（φ）であると判断し（Ｎｏ）、機能安全機構実装指示生成Ｓ１８の処理が終了する。
【０２０５】
＜＜機能安全機構挿入＞＞
次に、機能安全機構挿入Ｓ１９について説明する。図４８の機能安全機構実装指示１５０に基づき、ＲＴＬ記述に機能安全機構が挿入される。機能安全機構の挿入は、すでに述べたように、プログラム自動変換や人手作業により行われる。これにより、実施の形態１で述べた図３２〜図３５と同様のＲＴＬ回路が生成される。
【０２０６】
＜本実施の形態による主な効果＞
本実施の形態によれば、高位合成部５０は、動作記述１１０と、高位合成スクリプト１２０と、機能安全機構実装仕様１３０と、を用いた高位合成を行い、機能安全機構を含まないＲＴＬ記述１４０Ａと、ＲＴＬ記述１４０Ａに対する機能安全機構実装指示１５０とを生成する。この構成によれば、ＲＴＬ記述１４０Ａと、機能安全機構実装指示１５０とを用い、機能安全機構を実装可能な市販のツールや人手により、任意の機能安全機構を実装させたＲＴＬ記述を生成することが可能となる。このように、ＲＴＬ記述に対する機能安全機構の実装方法を増やすことができ、汎用性が向上する。
【０２０７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２０８】
１…高位合成装置、１０…プロセッサ、２０…不揮発性メモリ、３０…揮発性メモリ、４０…データ格納部、５０…高位合成部、１１０…動作記述、１２０…高位合成スクリプト、１３０…機能安全機構実装仕様、１４０、１４０Ａ…ＲＴＬ記述、１５０…機能安全機構実装指示
【図１】
2020160650.tif 000003
【図２】
2020160650.tif 000004
【図３】
2020160650.tif 000005
【図４】
2020160650.tif 000006
【図５】
2020160650.tif 000007
【図６】
2020160650.tif 000008
【図７】
2020160650.tif 000009
【図８】
2020160650.tif 000010
【図９】
2020160650.tif 000011
【図１０】
2020160650.tif 000012
【図１１】
2020160650.tif 000013
【図１２】
2020160650.tif 000014
【図１３】
2020160650.tif 000015
【図１４】
2020160650.tif 000016
【図１５】
2020160650.tif 000017
【図１６】
2020160650.tif 000018
【図１７】
2020160650.tif 000019
【図１８】
2020160650.tif 000020
【図１９】
2020160650.tif 000021
【図２０】
2020160650.tif 000022
【図２１】
2020160650.tif 000023
【図２２】
2020160650.tif 000024
【図２３】
2020160650.tif 000025
【図２４】
2020160650.tif 000026
【図２５】
2020160650.tif 000027
【図２６】
2020160650.tif 000028
【図２７】
2020160650.tif 000029
【図２８】
2020160650.tif 000030
【図２９】
2020160650.tif 000031
【図３０】
2020160650.tif 000032
【図３１】
2020160650.tif 000033
【図３２】
2020160650.tif 000034
【図３３】
2020160650.tif 000035
【図３４】
2020160650.tif 000036
【図３５】
2020160650.tif 000037
【図３６】
2020160650.tif 000038
【図３７】
2020160650.tif 000039
【図３８】
2020160650.tif 000040
【図３９】
2020160650.tif 000041
【図４０】
2020160650.tif 000042
【図４１】
2020160650.tif 000043
【図４２】
2020160650.tif 000044
【図４３】
2020160650.tif 000045
【図４４】
2020160650.tif 000046
【図４５】
2020160650.tif 000047
【図４６】
2020160650.tif 000048
【図４７】
2020160650.tif 000049
【図４８】
2020160650.tif 000050