(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-28
(45)【発行日】2022-12-06
(54)【発明の名称】高位合成方法、高位合成装置、及び高位合成システム
(51)【国際特許分類】
G06F 30/32 20200101AFI20221129BHJP
G06F 30/333 20200101ALI20221129BHJP
【FI】
G06F30/32
G06F30/333
(21)【出願番号】P 2019057749
(22)【出願日】2019-03-26
【審査請求日】2021-09-13
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】今村 慎太郎
【審査官】堀井 啓明
(56)【参考文献】
【文献】国際公開第2015/155815(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/00-30/398
(57)【特許請求の範囲】
【請求項1】
機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて前記機能安全機構を挿入したRTL記述を生成する高位合成方法であって、
高位合成部が、前記動作記述を用いてコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、
前記コントロールデータフローグラフ生成ステップの後、前記高位合成部が、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入する第1機能安全機構挿入処理ステップと、を有
し、
前記第1機能安全機構挿入処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対し前記機能安全機構論理を挿入する第1機能安全機構挿入ステップを有する、
高位合成方法。
【請求項2】
請求項
1に記載の高位合成方法において、
前記第1機能安全機構挿入処理ステップの後、
前記高位合成部が、前記高位合成スクリプトで規定された高位合成制約に基づくスケジューリング処理を行うスケジューリング処理ステップと、
前記スケジューリング処理ステップの後、前記高位合成部が、コントロールデータフローグラフに対するバインディング処理を行うバインディング処理ステップと、を有する、
高位合成方法。
【請求項3】
請求項
2に記載の高位合成方法において、
前記バインディング処理ステップの後、
前記高位合成部が、前記スケジューリング処理ステップ後のコントロールデータフローグラフ、及び前記バインディング処理ステップ後のコントロールデータフローグラフを用いて制御回路を作成する制御回路作成処理ステップと、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記制御回路作成処理ステップにおいて作成された前記制御回路に対する機能安全機構回路を挿入する第2機能安全機構挿入処理ステップと、を有する、
高位合成方法。
【請求項4】
請求項
3に記載の高位合成方法において、
前記第2機能安全機構挿入処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された任意の制御回路に対し前記機能安全機構回路を挿入する、第2機能安全機構挿入ステップを有する、
高位合成方法。
【請求項5】
請求項
3に記載の高位合成方法において、
前記第2機能安全機構挿入処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含むRTL回路のモジュールを作成するRTL記述生成処理を行う、RTL記述生成処理ステップを有する、
高位合成方法。
【請求項6】
請求項
5に記載の高位合成方法において、
前記RTL記述生成処理ステップは、前記高位合成部が、挿入した前記機能安全機構を、前記機能安全機構実装仕様で指定されたモジュール階層に出力する、モジュール階層出力ステップを有する、
高位合成方法。
【請求項7】
機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて、RTL記述と、前記RTL記述に対する機能安全機構実装指示と、を生成する高位合成方法であって、
高位合成部が、前記動作記述を用いてコントロールデータフローグラフを生成した後、前記機能安全機構実装仕様に従い、前記RTL記述に対応する前記機能安全機構の挿入位置を記録した前記コントロールデータフローグラフを生成する、第1機能安全機構挿入位置記録処理ステップを有する、
高位合成方法。
【請求項8】
請求項
7に記載の高位合成方法において、
前記第1機能安全機構挿入位置記録処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対する前記機能安全機構の挿入位置を記録する、第1機能安全機構挿入位置記録ステップを有する、
高位合成方法。
【請求項9】
請求項
8に記載の高位合成方法において、
前記第1機能安全機構挿入位置記録処理ステップの後、
前記高位合成部が、前記高位合成スクリプトで規定された高位合成制約に基づくスケジューリング処理を行うスケジューリング処理ステップと、
前記高位合成部が、前記スケジューリング処理後のコントロールデータフローグラフに対するバインディング処理を行うバインディング処理ステップと、を有する、
高位合成方法。
【請求項10】
請求項
9に記載の高位合成方法において、
前記バインディング処理ステップの後、
前記高位合成部が、前記スケジューリング処理ステップ後のコントロールデータフローグラフ、及び前記バインディング処理ステップ後のコントロールデータフローグラフを用いて制御回路を作成する制御回路作成処理ステップと、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記制御回路作成処理ステップにおいて作成された前記制御回路に対する機能安全機構の挿入位置を記録する第2機能安全機構挿入位置記録処理ステップを有する、
高位合成方法。
【請求項11】
請求項
10に記載の高位合成方法において、
前記第2機能安全機構挿入位置記録処理ステップは、前記高位合成部が、前記機能安全機構実装仕様で指定された任意の制御回路に対し前記機能安全機構の挿入位置を記録する、第2機能安全機構挿入位置記録ステップを有する、
高位合成方法。
【請求項12】
請求項
10に記載の高位合成方法において、
前記第2機能安全機構挿入位置記録処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含まないRTL回路のモジュールを作成するRTL記述生成処理ステップを有する、
高位合成方法。
【請求項13】
請求項
12に記載の高位合成方法において、
前記RTL記述生成処理ステップの後、
前記高位合成部が、前記機能安全機構実装仕様に従い、前記機能安全機構を含まないRTL回路のモジュールに対する機能安全機構実装指示を作成する機能安全機構実装指示生成処理ステップを有する、
高位合成方法。
【請求項14】
請求項
12に記載の高位合成方法において、
前記RTL記述生成処理ステップは、前記高位合成部が、前記機能安全機構を実装するモジュール階層を、前記機能安全機構実装仕様に従い指定する、モジュール階層指定ステップを有する、
高位合成方法。
【請求項15】
請求項
13に記載の高位合成方法において、
前記機能安全機構実装指示生成処理ステップは、
前記高位合成部が、前記機能安全機構のモジュールに関するモジュール実装指示を行うモジュール実装指示ステップと、
前記高位合成部が、前記機能安全機構のモジュールのリソースに関するリソース実装指示を行うリソース実装指示ステップと、を有する、
高位合成方法。
【請求項16】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成装置であって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いた高位合成を行い、
前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対し前記機能安全機構を挿入したRTL記述を生成する高位合成部を備えた、高位合成装置。
【請求項17】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成装置であって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いた高位合成を行い、RTL記述と、前記RTL記述に対する機能安全機構実装指示と、を生成する高位合成部を備えた、高位合成装置。
【請求項18】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成システムであって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用い、前記動作記述を用いてコントロールデータフローグラフを生成し、前記コントロールデータフローグラフの生成後に、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入し、前記機能安全機構を挿入したRTL記述を生成
し、
前記機能安全機構論理は、前記機能安全機構実装仕様で指定された前記動作記述の任意の位置に対して挿入される、
高位合成システム。
【請求項19】
高位合成プログラムを格納するメモリと、
前記メモリから前記高位合成プログラムを読み出して実行するプロセッサと、を備えた高位合成システムであって、
前記プロセッサは、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様とを用い、前記動作記述を用いてコントロールデータフローグラフを生成し、前記コントロールデータフローグラフの生成後に、前記機能安全機構実装仕様に従い、前記コントロールデータフローグラフに機能安全機構論理を挿入し、RTL記述と、前記RTL記述に対する機能安全機構実装指示と、を生成する高位合成を行う、
高位合成システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、高位合成方法、高位合成装置、及び高位合成システムに関する。
【背景技術】
【0002】
回路規模が増大するにつれ、システムレベル言語やプログラミング言語を用いた集積回路設計が行われるようになっている。システムレベル言語やプログラミング言語からハードウェア記述言語への変換には、例えば、高位合成と呼ばれる手法が知られている。回路として実現する機能の機能論理のみを具体的に記述した動作記述と、高位合成の制約を指定する高位合成スクリプトと、を用いた高位合成を行うことにより、動作記述の内容を実現する回路構成がハードウェア記述言語として生成される。高位合成に関して、例えば、以下に示す特許文献、非特許文献が開示されている。
【0003】
非特許文献1には、一般的な高位合成について記載されている。高位合成では、動作記述を入力とし、論理合成可能なRTL(Resister Transfer Level)記述が生成される。その過程において、高位合成制約に基づき、CDFG(コントロールデータフローグラフ)作成、スケジューリング、バインディング、制御回路生成等の各処理が実施され、RTL記述が生成される。CDFG作成では、動作記述の様々なステップ間のデータ依存関係が解析され、内部表現であるグラフが作成される。スケジューリングでは、CDFGに記述された演算を実行するタイミングが決定される。バインディングでは、CDFGの各演算にハードウェアリソースがマッピングされる。制御回路生成では、スケジューリングされた演算の実行を制御するための回路が生成される。
【0004】
特許文献1には、エラー対策回路を備えて所望の動作周波数で動作する集積回路を設計できる回路設計装置が開示されている。回路設計装置における特徴的な入力は、エラー対策ライブラリ(多数決回路等の遅延情報)や、エラー対策の目標挿入数である。回路設計装置は、スケジュール済みCDFGを、演算パス毎に分割し、それぞれの演算パスに対して、エラー対策を追加した場合の遅延量を計算する。回路設計装置は、その遅延量が目標遅延量より小さければ、演算パスに三重化等のエラー対策を施したRTL記述を生成する。
【0005】
また、回路設計装置は、入力されたエラー対策の目標挿入数により、エラー対策を行う数を制限する。エラー対策の目標挿入数に達しない場合、回路設計装置は、エラー対策を施していない演算パスを再分割する。回路設計装置は、分割した演算パスのそれぞれに対して、エラー対策を施した場合の遅延量を計算し、エラー対策を実施するかどうかを判定する。
【0006】
非特許文献2では、RTLの決められた回路構造、もしくは、指定した回路要素に対して、エラー検出回路・エラー訂正回路を付加するRTL記述変換が行われる。RTL記述とマクロリスト/FFリストとを入力とし、エラー検出回路・エラー訂正回路を付加したRTL記述が生成される。
【先行技術文献】
【特許文献】
【0007】
【非特許文献】
【0008】
【文献】High-Level Synthesis Blue Book, ISBN 978-1-4500-9724-6
【文献】Austemper Design社ホームページ、項目「Safety Synthesis」、[平成30年10月18日検索]、インターネット<URL:http://www.austemperdesign.com/safety-synthesis/>
【発明の概要】
【発明が解決しようとする課題】
【0009】
車載用SoC(System on Chip)等の集積回路の開発においては、搭載されるIP・モジュールには、機能安全機構の実装が要求される場合がある。高位合成では、入力となる動作記述にはすべての回路要素は記述されておらず、高位合成の出力であるRTL記述にすべての回路要素が記述されている。
【0010】
非特許文献1では、機能安全機構は、ハードウェア故障を検出するための仕組みであって、ハードウェア故障を想定しない場合、動作記述に記述された本来の機能に影響を与えない冗長論理である。
【0011】
高位合成は、動作記述からCDFGを作成する際に、冗長論理を削除し最適化してからRTL記述を生成する。また、高位合成では、ハードウェア故障は想定されていない。このため、動作記述に機能安全機構を記述し、高位合成を実行しても、機能安全機構の論理を冗長論理と判断し、冗長論理が削除される。したがって、従来の高位合成は、動作記述に記述した機能安全機構の回路がRTL記述に反映されないという課題を有している。
【0012】
特許文献1では、高位合成は、エラー対策を施したRTL記述を生成することが可能である。しかし、特許文献1では、演算パスにエラー対策を施す場合の遅延量の計算が主眼となっているため、動作記述の特定の論理に対して適切な機能安全機構を実装することができない。
【0013】
また、高位合成から生成されたRTL記述に対して機能安全機構を実装しようとする場合、RTL記述のみを見ても、各RTL記述がどのような論理を実現した回路要素なのかを人手で判断することは難しい。このため、従来の高位合成を用いた集積回路設計において、機能安全機構を実装するためには、動作記述とRTL記述との対応関係を高位合成から出力し、その情報を元に機能安全機構を実装する必要のある回路要素に該当するRTL記述を抽出する必要がある。
【0014】
このように、高位合成を利用した回路設計において、RTL記述に対する任意の機能安全機構を実装することは極めて困難であった。
【0015】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0016】
本明細書には、複数の実施の形態の高位合成方法等が記載されているが、一実施の形態の高位合成方法を述べると、次の通りである。高位合成方法は、機能論理を規定する動作記述と、高位合成制約を規定する高位合成スクリプトと、高位合成の過程で挿入される機能安全機構を指定する機能安全機構実装仕様と、を用いて機能安全機構を挿入したRTL記述を生成する。高位合成方法は、高位合成部が、動作記述を用いてコントロールデータフローグラフを生成するコントロールデータフローグラフ生成ステップと、コントロールデータフローグラフ生成ステップの後、高位合成部が、機能安全機構実装仕様に従い、コントロールデータフローグラフに機能安全機構を挿入する第1機能安全機構挿入処理ステップと、を有する。
【発明の効果】
【0017】
一実施の形態によれば、任意の機能安全機構を実装したRTL記述を生成することが可能となる。
【図面の簡単な説明】
【0018】
【
図1】
図1は、本発明の実施の形態1に係る高位合成装置の一例を示す構成図である。
【
図2】
図2は、高位合成の概要を示す説明図である。
【
図3】
図3は、機能安全機構実装仕様を例示する図である。
【
図4】
図4は、ライン番号及び関数名を用いた機能安全機構を挿入する位置の指定方法を例示する図である。
【
図5】
図5は、高位合成により付加された回路要素に対して機能安全機構を実装する場合を説明する図である。
【
図6】
図6は、サイクル動作を制御する回路名による機能安全機構を挿入する位置の指定方法を例示する図である。
【
図7】
図7は、挿入する機能安全機構の例を説明する図である。
【
図8】
図8は、挿入する機能安全機構の他の例を説明する図である。
【
図9】
図9は、挿入する機能安全機構の他の例を説明する図である。
【
図10】
図10は、エラーチェックする入力信号の指定方法の一例を示す図である。
【
図11】
図11は、エラーチェックする入力信号の指定方法の他の例を示す図である。
【
図12】
図12は、エラーチェックする入力信号の指定方法の他の例を示す図である。
【
図13】
図13は、出力ポートによるエラーチェック出力信号の指定方法の一例を示す図である。
【
図14】
図14は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。
【
図15】
図15は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。
【
図16】
図16は、エラーチェック出力信号を格納するレジスタの指定方法の一例を示す図である。
【
図17】
図17は、クロックサイクル数によるエラーチェック実行周期の指定方法の一例を示す図である。
【
図18】
図18は、機能安全機構モジュール名による指定方法の一例を示す図である。
【
図19】
図19は、本発明の実施の形態1に係る高位合成方法の一例を示す説明図である。
【
図20】
図20は、高位合成方法を説明するための動作記述、高位合成スクリプト、及び機能安全機構実装仕様を例示する図である。
【
図22】
図22は、機能安全機構挿入(1)の一例を示すフロー図である。
【
図24】
図24は、スケジューリングの一例を示すフロー図である。
【
図25】
図25は、safe-Schedに対する再スケジューリング方法を説明する図である。
【
図26】
図26は、バインディングの一例を示すフロー図である。
【
図27】
図27は、バインディング方法を説明するフロー図である。
【
図28】
図28は、各サイクルにおける動作を制御する制御回路の例を示す図である。
【
図29】
図29は、機能安全機構挿入(2)の一例を示すフロー図である。
【
図30】
図30は、機能安全機構挿入(2)において挿入される機能安全機構の一例を示す図である。
【
図31】
図31は、RTL記述生成の一例を示すフロー図である。
【
図32】
図32は、sm-ControllerのRTL回路の一例を示す図である。
【
図33】
図33は、RTL記述生成において生成されるRTL回路の一例を示す図である。
【
図35】
図35は、信号結線後のRTL回路の一例を示す図である。
【
図36】
図36は、本発明の実施の形態2に係る高位合成の概要を説明する図である。
【
図37】
図37は、本発明の実施の形態2に係る高位合成方法の一例を示す説明図である。
【
図38】
図38は、機能安全機構挿入位置記録(1)の一例を示すフロー図である。
【
図40】
図40は、スケジューリングの一例を示すフロー図である。
【
図41】
図41は、safe-CDFGに対するスケジューリング方法を説明する図である。
【
図42】
図42は、バインディングの一例を示すフロー図である。
【
図44】
図44は、機能安全機構挿入位置記録(2)の一例を示すフロー図である。
【
図45】
図45は、本発明の実施の形態2に係るRTL記述生成の一例を示すフロー図である。
【
図46】
図46は、ステップS17_13において生成されるRTL回路の一例を示す図である。
【
図47】
図47は、機能安全機構実装指示生成S18の一例を示すフロー図である。
【
図48】
図48は、機能安全機構実装指示の一例を示す図である。
【発明を実施するための形態】
【0019】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するためのすべての図において、同一部分には原則として同一の符号を付し、その繰り返しの説明は省略する。
【0020】
(実施の形態1)
<高位合成装置の構成>
図1は、本発明の実施の形態1に係る高位合成装置の一例を示す構成図である。
図2は、高位合成の概要を示す説明図である。
図1に示すように、プロセッサ10、不揮発性メモリ20、揮発性メモリ30、データ格納部40等を備えている。これらの要素は、内部バスに接続されてもよいし、個別配線により互いに接続されてもよい。高位合成装置1は、例えば、プロセッサを備えた情報処理装置等である。
【0021】
プロセッサ10は、不揮発性メモリ20に格納された高位合成プログラムを読み出し、揮発性メモリ30に展開する。プロセッサ10が、揮発性メモリ30に展開した高位合成プログラムを実行することにより、高位合成を行う高位合成部50が構成される。
【0022】
図2に示すように、高位合成部50は、作成しようとする回路の機能論理が記述された動作記述110、高位合成スクリプト120、実装しようとする機能安全機構が記述された機能安全機構実装仕様130を入力とする高位合成を行い、機能安全機構を含む具体的回路構成をハードウェア記述言語により記述したRTL記述140を高位合成結果として生成する。プロセッサ10は、入力された動作記述110、高位合成スクリプト120、機能安全機構実装仕様130、生成したRTL記述140等のデータをメモリであるデータ格納部40に格納してもよい。
【0023】
不揮発性メモリ20は、例えば高位合成プログラム等のプログラム、高位合成装置1に関する設定情報等を格納する。不揮発性メモリ20は、例えばフラッシュメモリEEPROM等のメモリを有する。揮発性メモリ30は、不揮発性メモリ20から読み出されたプログラムや設定情報等を一時的に保持する。また、揮発性メモリ30は、高位合成部50を含むプロセッサ10における演算結果等も一時的に保持する。データ格納部40は、例えば、高位合成に関する入力データや、RTL記述が生成されるまでの各ステップにおける演算結果等を格納するメモリである。データ格納部40は、例えばフラッシュメモリ等を含む。
【0024】
動作記述110には、作成しようとする回路の動作内容が、例えばSystemC等のシステムレベル言語や、C言語等のプログラミング言語等で記述される。高位合成スクリプト120には、高位合成により生成する回路や、各演算の実行タイミング等、高位合成の制約を規定する内容が記述される。
【0025】
機能安全機構実装仕様130には、高位合成により、どのような機能安全機構を実装するかを指定する内容が記述される。
【0026】
RTL記述140には、高位合成結果として、データパス回路141、制御回路142、機能安全機構回路143等を規定する内容が記述される。機能安全機構回路143は、例えば機能安全機構実装仕様130の内容に従い作成されたRTL記述である。
【0027】
<機能安全機構実装仕様の詳細>
次に、機能安全機構実装仕様の詳細について説明する。
図3は、機能安全機構実装仕様を例示する図である。
図3には、機能安全機構実装仕様130に記載される項目が列挙されている。具体的に述べると、機能安全機構実装仕様130は、例えば、(1)機能安全機構を挿入する対象、(2)挿入する機能安全機構、(3)エラーチェック入力信号、(4)エラーチェック出力信号、(5)エラーチェック実行周期、(6)機能安全機構モジュール名、の各項目を含む。
【0028】
<<(1)機能安全機構を挿入する対象>>
まず、「機能安全機構を挿入する対象」の項目について説明する。この項目では、機能安全機構を挿入する対象の指定が行われる。
図3に示すように、「機能安全機構を挿入する対象」は、(1-1)動作記述の位置、(1-2)高位合成制御回路、の各項目をさらに含む。
【0029】
<<<(1-1)動作記述の位置>>>
項目「動作記述の位置」では、動作記述110の、例えば、ライン番号、関数名、スコープ、変数名、モジュール名、インスタンス名等により、機能安全機構を挿入する動作記述の位置が指定される。高位合成部50は、ここで指定された位置の動作記述の論理を実現する回路要素に対し、機能安全機構を実装する。
【0030】
図4は、ライン番号及び関数名を用いた機能安全機構を挿入する位置の指定方法を例示する図である。
図4では、左側に動作記述110が示され、右側に機能安全機構実装仕様130が示されている。機能安全機構実装仕様130の1行目には、「2-5,TMR,Output」と記述されている。これは、動作記述における2-5行目の記述が、機能安全機構を挿入する対象として指定されていることを示す。また、機能安全機構実装仕様130の2行目には、「func,DMR,Output」と記述されている。これは、動作記述における関数名「func」が機能安全機構を挿入する対象として指定されていることを示す。
【0031】
また、動作周波数等、高位合成スクリプト120で指定された制約を満たすため、高位合成により、機能安全機構実装仕様130により指定された動作記述の位置に対して回路要素が付加される場合がある。本実施の形態では、この回路要素も機能安全機構の実装対象に含まれる。
【0032】
図5は、高位合成により付加された回路要素に対して機能安全機構を実装する場合を説明する図である。
図5には、動作記述110、機能安全機構実装仕様130、高位合成結果に対応する回路210が例示されている。機能安全機構実装仕様130により、動作記述における2-4行目の記述が、機能安全機構の対象として指定されている。高位合成の実行時、高位合成スクリプトに指定された制約を満たすため、回路210には、レジスタ211、212が回路要素として付加されている。本実施の形態では、高位合成スクリプトの指定により付加されたレジスタ等の回路要素も、機能安全機構の実装対象となる。
【0033】
<<<(1-2)高位合成制御回路>>>
次に、項目「高位合成制御回路」について説明する。高位合成では、高位合成スクリプト120に記述された高位合成の制約内容を満たすために、サイクル動作を実装し、このサイクル動作を制御するための回路を生成する。そこで、サイクル動作を制御する回路名を具体的に指定することにより、機能安全機構を挿入する回路が指定される。ここで指定される回路は、例えば、有限オートマトン(FSM:Finite State Machine)、パイプラインイネーブル回路等である。
【0034】
図6は、サイクル動作を制御する回路名による機能安全機構を挿入する位置の指定方法を例示する図である。
図6には、動作記述110、機能安全機構実装仕様130、高位合成結果に対応する回路220、230が例示されている。回路220は、高位合成スクリプト120で面積が最小となるように指定された場合の高位合成結果の例である。回路220には、選択回路221、222等の他、有限オートマトン223が付加されている。なお、以下では、各状態をSt0、St1等として説明しているが、
図6等の各図面では、各状態がS0、S1等として表示されている。ただし、ここで示すSは状態を示すものであり、後述のフロー図における各ステップを表すものではない。
【0035】
選択回路221において、St0入力は「a」、St1入力は「c」である。選択回路222において、St0入力は「b」、St1入力は「x」である。有限オートマトン223は、St0とSt1との間で状態を切り換える。有限オートマトン223は、まず、状態をSt0に設定し、対応する信号を選択回路221、222へ出力する。選択回路221、222は、St0入力の値「a」、「b」をそれぞれ出力する。次に、有限オートマトン223は、状態をSt1に切り換え、対応する信号を選択回路221、222へ出力する。選択回路221、222は、St0入力の値「c」、「x」をそれぞれ出力する。動作記述110では加算が2回含まれるが、高位合成の結果、有限オートマトン223を付加することにより、1つの加算器のみで回路が構成されている。これにより、面積が最小化されている。
【0036】
これに対し、回路230は、高位合成スクリプト120でスループットが最大となるように指定された場合の高位合成結果の例である。回路230には、パイプライン回路231の他、パイプラインイネーブル回路(CTRL0)232が付加されている。
【0037】
パイプラインイネーブル回路232は、パイプライン回路231に対し、1段目、2段目の順で、回路をイネーブルに設定する回路である。1段目の回路がイネーブルに設定されると、a+bの演算結果xが出力される。そして、パイプラインイネーブル回路(CTRL0)232により、2段目の回路がイネーブルに設定されると、x+cの演算結果yが出力される。パイプラインイネーブル回路232は、最終的に1段目の回路及び2段目の回路を同時にイネーブルに設定するため、スループットが最大化される。
【0038】
機能安全機構実装仕様130では、付加された有限オートマトン(FSM0)やパイプラインイネーブル回路(CTRL0)が、機能安全機構の対象として指定されている。
【0039】
<<(2)挿入する機能安全機構>>
次に、「挿入する機能安全機構」の項目について説明する。この項目では、機能安全機構として使用される回路等の指定が行われる。挿入する機能安全機構として、例えば、二重化、デュアルコアロックステップ、三重化等の冗長化が挙げられる。また、挿入する機能安全機構として、パリティ、チェックサム、巡回冗長検査(Cyclic Redundancy Check:CRC)、ハミング等のエラー検出・訂正用の符号生成や、データ転送におけるプロトコルチェック、転送オーダーチェック等が挙げられる。機能安全機構の指定について、例えば、高位合成プログラムでサポートされている機能安全機構を予め提示し、ユーザは、提示された機能安全機構の中から選択し、指定してもよい。
【0040】
図7は、挿入する機能安全機構の例を説明する図である。
図7では、機能安全機構実装仕様130により、高位合成により生成される有限オートマトン(FSM0)を二重化(DMR)するよう指定された場合が示されている。
図7の左側には、機能安全機構実装仕様130と、二重化されていない回路220(
図6を参照)が参考として示されている。
図7の右側には、機能安全機構実装仕様130の指定に応じて二重化された回路を有する回路320が示されている。
【0041】
具体的に述べると、高位合成により、有限オートマトン(FSM0)223と同一の構成を備えた有限オートマトン(CHK_FSM0)323が追加される。また、二重化した有限オートマトンの出力信号を比較する比較回路324も追加される。比較回路324は、比較結果を通知する信号を生成し、出力する。
【0042】
図8は、挿入する機能安全機構の他の例を説明する図である。
図8では、機能安全機構実装仕様130により、配列変数(M)に対してパリティチェック機構(Parity)を実装するよう指定された場合が示されている。
図8には、機能安全機構実装仕様130の指定に応じてパリティチェック機構が実装された回路340が示されている。
【0043】
具体的に述べると、高位合成により、M[4]の書き込み側に、パリティビット生成回路341、M[4]の読み出し側に、パリティビットチェック回路342が追加される。パリティビットチェック回路342は、パリティチェック結果を通知する信号を生成し、出力する。
【0044】
図9は、挿入する機能安全機構の他の例を説明する図である。
図9では、機能安全機構実装仕様130により、FIFO(First In First Out)に対して、データ転送順序チェック機構(Order)を実装するよう指定された場合が示されている。
図9には、機能安全機構実装仕様130の指定に応じてデータ転送順序チェック機構が実装された回路350が示されている。
【0045】
具体的に述べると、高位合成により、M[3]の書き込み側にデータ転送順序ビット生成回路351が追加される。また、高位合成により、データ転送順序ビット格納用に、Mと同段数(
図9では3段)のFIFO352が追加される。また、高位合成により、M[3]の読み出し側に、データ転送順序チェック回路353が追加される。
【0046】
<<(3)エラーチェック入力信号>>
次に、「エラーチェック入力信号」の項目について説明する。この項目では、機能安全機構においてエラーチェックする入力信号が指定される。エラーチェックされる入力信号として、例えば、機能安全機構が挿入される対象の出力信号(Output)、フリップフロップ(F/F)やレジスタ等の出力信号が挙げられる。また、具体的な信号名により指定されてもよい。
【0047】
図10は、エラーチェックする入力信号の指定方法の一例を示す図である。
図10には、機能安全機構実装仕様130により、二重化(DMR)された回路の出力信号(Output)をエラーチェックするよう指定された場合が示されている。
図10には、動作記述110、機能安全機構実装仕様130がそれぞれ示されている。
【0048】
図10には、高位合成のバインディング結果の例が回路360として示されている。回路260は、二重化される前の元の回路を示し、回路361は、機能安全機構実装仕様130による指定に応じ、二重化により追加された回路を示している。
【0049】
具体的に述べると、高位合成により、回路360は、回路260と同様の構成を備えた回路361と、比較回路362が、回路260に追加されている。比較回路362は、回路260の出力信号及び回路361の出力信号を入力し、両出力信号を比較した比較結果を出力する。このように、
図10の例では、高位合成結果に対し、機能安全機構を挿入する対象として指定された回路から出力される出力信号が、機能安全機構回路のチェック対象として指定される。
【0050】
図11は、エラーチェック方法の他の例を示す図である。
図11には、機能安全機構実装仕様130により、フリップフロップ(F/F)やレジスタの出力信号が、エラーチェックの入力信号として指定されている。
図11の回路370は、機能安全機構実装仕様130による指定に応じて二重化された回路を示している。回路260と、回路260を二重化するために追加された回路371に含まれる各フリップフロップ回路の出力信号は、比較回路372に入力されている。このように、
図11の例では、高位合成結果である回路のフリップフロップやレジスタ等の記憶素子から出力される出力信号が、機能安全機構回路のチェック対象として指定される。
【0051】
図12は、エラーチェック方法の他の例を示す図である。
図12では、機能安全機構実装仕様130により、エラーチェックの入力信号として、信号{x、y}が指定されている。
図12の例は、エラーチェックの入力信号の指定方法が、具体的な信号名{x、y}に変更された以外は
図11と同様である。このように、
図12の例では、機能安全機構の挿入対象として指定された回路内の信号名が指定され、指定された信号が機能安全機構回路のチェック対象となる。なお、信号名の指定は、高位合成結果だけでなく、動作記述を対象にしても構わない。また、これら3種類の方法を組み合わせて、チェック対象の出力信号が指定されてもよい。
【0052】
<<(4)エラーチェック出力信号>>
次に、「エラーチェック出力信号」の項目について説明する。この項目では、機能安全機構のエラーチェック結果を外部に通知するための回路の生成方法が指定される。機能安全機構のエラーチェック結果を外部に通知するため、例えば、ポート名(Port)やレジスタ名(Reg)等が指定される。
【0053】
ポート名が指定されると、指定された名称の出力ポートにエラーチェック論理が接続される。なお、指定された名称のポートが動作記述に存在しない場合、高位合成において、指定された名称のポートが生成される。また、ポート名とともに、「Comb」が指定された場合、フリップフロップ等の記憶素子を通過せずに、外部にエラーチェック結果を通知する信号が生成される。一方、ポート名とともに、「FF」が指定された場合、フリップフロップ等の記憶素子を通過させ、外部にエラーチェック結果を通知する信号が生成される。
【0054】
ここでも、
図10に示す高位合成のバインディング結果を用いて、エラーチェック出力信号の指定方法を説明する。
図13は、出力ポートによるエラーチェック出力信号の指定方法の一例を示す図である。
図13では、出力ポート「ERR」が指定されている。また、出力ポートとともに、「Comb」が指定されている。このため、高位合成により、組み合わせ回路として構成される比較回路372の出力と直接接続された出力ポートERRが生成される。
【0055】
図14は、出力ポートによるエラーチェック方法の他の例を示す図である。
図14では、出力ポート「ERR」とともに、「FF」が指定されている。このため、高位合成により、比較回路372の出力がフリップフロップ回路373に入力され、フリップフロップ回路373の出力と接続された出力ポートERRが生成される。このように、「FF」が指定されると、フリップフロップ回路373にエラーチェック結果が記憶されつつ、エラーチェック結果が出力される。
【0056】
図15は、出力ポートによるエラーチェック出力信号の指定方法の他の例を示す図である。
図15では、機能安全機構実装仕様130により、同じポート名「ERR」が2つ指定されている。動作記述のライン番号「2」に対しては、ポート名「ERR」とともに、「F/F」が指定されている。これにより、回路380には、回路381の他、比較回路382、フリップフロップ回路383が追加されている。
【0057】
一方、動作記述のライン番号「4」に対しては、ポート名「ERR」とともに、「Comb」が指定されている。これにより、回路380には、回路384の他、比較回路385が追加されているが、比較回路385に対応するフリップフロップ回路は追加されていない。
【0058】
また、ライン番号「2」、「4」の二重化(DMR)に対し、同じポート名「ERR」が指定されているので、回路380には、フリップフロップ回路383の出力信号、及び比較回路385の出力信号を入力とするOR回路386が追加されている。OR回路386は、入力される2つの信号の論理和を機能安全機構のエラーチェック結果として外部に通知する。
【0059】
次に、レジスタ名が指定された場合について説明する。レジスタ名が指定されると、ファンクションレジスタに機能安全機構のエラーチェック結果を書き込むための論理が接続される。また、指定された名称のレジスタが動作記述に存在しない場合、指定された名称のレジスタが新たに生成される。
【0060】
図16は、エラーチェック出力信号を格納するレジスタの指定方法の一例を示す図である。
図16では、機能安全機構実装仕様130により、エラーチェック結果としての出力信号ERRを、レジスタ空間のアドレス「0x10」に格納するよう指定されている。このようなレジスタ名の指名は、バスプロトコルを利用したファンクションレジスタアクセスによりエラーチェック結果を確認する場合等に利用される。
【0061】
また、「エラーチェック出力信号」の項目では、ポート名の指定と、レジスタ名の指名とを組み合わせた指定も可能である。
図15、
図16では、エラーチェック結果が上書きされる構成となっているが、一度エラーを検出した後は、エラーチェック出力信号の値を更新しない回路が生成されてもよい。また、本項目において、エラーチェック出力信号の極性(0/1)を指定できるにようにしてもよい。
【0062】
<<(5)エラーチェック実行周期>>
「エラーチェック実行周期」の項目では、機能安全機構によるエラーチェックの実行周期が指定される。本項目では、例えば、クロックサイクル数、イネーブル制御、実時間等が指定される。
【0063】
「クロックサイクル数」は、エラーチェック結果を更新するクロックのサイクル数を規定する。
図17は、クロックサイクル数によるエラーチェック実行周期の指定方法の一例を示す図である。
図17の機能安全機構実装仕様130では、クロックサイクル数として「4」が指定されている。これにより、
図17に示す回路390が生成される。回路390は、4サイクルごとにエラーチェック結果を更新し、外部に通知する。
【0064】
「イネーブル制御」は、指定したイネーブル条件が成立したときのみ、エラーチェックが実行されることを規定する。イネーブル制御の指定においては、例えば、高位合成により生成されるFSMや内部信号等が利用できるようにしてもよい。
【0065】
「実時間」は、エラーチェック結果の更新時間を規定する。高位合成スクリプトにより、動作周波数(クロック周期)の制約が記述されるため、指定した実時間をクロックサイクル数に変換することが可能である。変換されたクロックサイクル数に対して、すでに述べた「クロックサイクル数」と同じ処理が行われる。例えば、エラーチェック実行周期に40ns、高位合成スクリプトによるクロック周期の制約に10nsが指定された場合、例えば
図17と同様の回路が生成される。
【0066】
また、機能安全分析結果のFTTI(Fault Tolerant Time Interval)を用いた実時間の指定も可能である。例えば、本項目では、FTTIの1/2の時間(FTTI-10ns)をオフセットとしたFTTI時間等も実時間として指定可能とする。
【0067】
また、これらを2つ以上組み合わせたエラーチェック実行周期の指定も可能である。例えば、「イネーブル制御で指定されたイネーブル条件の成立後、4クロックサイクルごとにエラーチェックを実行する」、等の指定も可能である。
【0068】
<<(6)機能安全機構モジュール名>>
「機能安全機構モジュール名」の項目では、挿入する機能安全機構のモジュール名が指定される。例えば、機能安全機構の回路に対して、論理合成の最適化により消失させないための指定、レイアウトにおいて本来の機能とは別の領域に配置するための指定等、RTL記述生成後に実行されるEDAツールのそれぞれに特別な制約を与えるための指定が、モジュール名を用いて行われる。
【0069】
図18は、機能安全機構モジュール名による指定方法の一例を示す図である。
図18では、機能安全機構実装仕様130において指定された2つの機能安全機構が同一モジュール(CHKCMP)内に生成される例が示されている。また、複数種の回路が生成される機能安全機構では、それぞれの回路に対して、モジュール名が指定されてもよい。例えば、二重化回路の場合、冗長回路及び比較回路のそれぞれに対し、出力モジュール名が指定されるようにしてもよい。また、機能安全機構の回路は、高位合成が生成する機能モジュールの外側に生成されるようにすることも可能である。この場合、高位合成は、本来の機能モジュール及び機能安全機構モジュールを生成するとともに、これらを結線する上位モジュールも生成する。
【0070】
<高位合成方法の詳細>
次に、任意の機能安全機構を実装したRTL記述を生成するための高位合成方法について詳しく説明する。
図19は、本発明の実施の形態1に係る高位合成方法の一例を示す説明図である。
図20は、高位合成方法を説明するための動作記述、高位合成スクリプト、及び機能安全機構実装仕様を例示する図である。以下では、
図20を例として高位合成方法を説明する。
【0071】
図19に示すように、本実施の形態の高位合成では、CDFG作成S1、機能安全機構挿入(1)S2、スケジューリングS3、バインディングS4、制御回路作成S5、機能安全機構挿入(2)S6、RTL記述生成S7の各処理が実行される。ユーザは、まず、
図20に示す動作記述110、高位合成スクリプト120、及び機能安全機構実装仕様130の各ファイルを作成し、高位合成装置1に転送しておく。
【0072】
動作記述110は、一般的なプログラム言語で記述されている。高位合成スクリプト120には、クロック周期が10ns、最大レイテンシが3クロックサイクルという高位合成の制約が指定されている。
【0073】
機能安全機構実装仕様130では、2つの機能安全機構が指定されている。1行目では、動作記述110の2-3行目を実現する回路に対して、二重化回路(1つの冗長回路と比較回路)を実装するよう指定されている。また、1行目では、エラーチェック入力信号に「Output+F/F」が指定されている。このため、動作記述110の2-3行目の出力信号t2と高位合成結果により生成されるレジスタの出力信号とが、比較回路の入力信号となる。また、1行目では、エラーチェック出力信号として、フリップフロップ回路の出力信号が指定されている。フリップフロップ回路は、エラーチェック出力信号「ERR」を生成し出力する。また、1行目では、エラーチェック実行周期として、「ExecCond」が指定されている。このため、フリップフロップ回路は、エラーチェック入力信号の値が更新されるサイクルのみエラーチェック結果を出力する。
【0074】
機能安全機構実装仕様130の2行目では、高位合成が生成する制御回路FSM0に対して三重化回路(二つの冗長回路と多数決回路)を実装するよう指定されている。三重化回路を実装するため、本例では、外部へエラーチェック結果を通知しないこととする。このため、2行目では、エラーチェック出力信号に「-」が指定されている。エラーチェック実行周期には、クロックサイクル数「1」が指定されている。このため、多数決回路によるエラーチェックはクロックサイクルごとに行われる。1-2行目の各指定において、機能安全機構モジュール名「CHK」が指定されている。このため、機能安全機構は、いずれもモジュールCHK内に生成される。
【0075】
<<CDFG作成>>
CDFG作成S1では、動作記述110を入力としたCDFGが作成される。具体的に述べると、高位合成部50は、動作記述110における冗長論理を最適化した後、制御フロー及びデータフローを抽出し、CDFGを作成する。
図21は、CDFGの一例を示す図である。
図21において、MUL0は、動作記述110の2行目と対応している。ADD0、MUL1、MUL2は、動作記述110の3-5行目とそれぞれ対応している。
【0076】
<<機能安全機構挿入(1)>>
機能安全機構挿入(1)S2では、機能安全機構実装仕様130に従い、CDFGに機能安全機構論理が挿入される。具体的に述べると、高位合成部50は、機能安全機構実装仕様130で指定された動作記述位置(2-3行目)に対する機能安全機構論理を挿入する。
【0077】
高位合成では、動作記述110からCDFGを作成する際に、冗長論理が削除される。言い換えれば、論理が最適化される。そのため、動作記述位置に従った冗長論理としての機能安全機構論理の挿入は、必ずCDFG作成S1より後に行われる。これにより、挿入される機能安全機構論理が、CDFGで削除されないようにしている。本例では、動作記述位置に従った機能安全機構論理の挿入は、CDFG作成S1の後、スケジューリングS3の前に実施される。なぜなら、機能安全機構として挿入する演算の実行サイクルや使用するハードウェアリソースの最適化が、最も容易に実施できるからである。
【0078】
図22は、機能安全機構挿入(1)の一例を示すフロー図である。
図22に示すように、機能安全機構挿入(1)S2は、ステップS2_1~S2_8を含む。ステップS2_1において、高位合成部50は、CDFG作成S1で生成されたCDFGをBase-CDFGとして、
図1のデータ格納部40に格納する。
【0079】
ステップS2_2では、高位合成部50は、機能安全機構実装仕様から動作記述位置に対する実装仕様の記述のみを抽出する。本例において、高位合成部50は、
図20の機能安全機構実装仕様130の1行目における、動作記述110の2-3行目に対する実装仕様に関する記述を抽出し、抽出した箇所を抽出記述T0としてデータ格納部40に格納する。
【0080】
ステップS2_3では、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から実装仕様を取り出す。そして、後続のステップS2_4の処理が実行される。
【0081】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、機能安全機構挿入(1)S2の処理を終了させる。
【0082】
本例では、直前のステップS2_2において、2-3行目に対する実装仕様に関する記述が抽出される。このため、高位合成部50は、抽出記述T0から動作記述110の2-3行目に対する実装仕様を仕様T1として取り出す。
【0083】
ステップS2_4において、高位合成部50は、仕様T1の動作記述位置に対応するCDFGをBase-CDFGから抽出し、抽出したCDFGをSub-CDFGとしてデータ格納部40に格納する。本例では、仕様T1で指定されている動作記述位置から、2-3行目に対応する頂点MUL0、ADD0、辺a、b、c、t1、t2が抽出され、これらを含むSub-CDFGが生成、格納される。
【0084】
ステップS2_5において、高位合成部50は、Sub-CDFGを元に、挿入する機能安全機構のCDFGをsm-CDFGとして作成する。本例では、仕様T1に指定された機能安全機構が二重化回路であるため、高位合成部50は、ステップS2_4で作成されたSub-CDFGに対する冗長演算及び比較回路を作成する。
【0085】
図23は、sm-CDFGの一例を示す図である。
図23では、冗長演算及び比較回路として、頂点MUL3、ADD1、CMP0、辺a、b、c、t4、t5、ERRが作成されている。そして、これらを含むCDFGがsm-CDFGとして作成される。なお、仕様T1には、エラーチェック出力信号としてポート名ERRが指定されているため、CMP0の出力の辺はERRである。
【0086】
ステップS2_6において、高位合成部50は、ステップS2_4で作成したSub-CDFGをSAFE-CDFGとしてデータ格納部40に格納する。また、高位合成部50は、ステップS2_5で生成したsm-CDFGを、SM-CDFGとしてデータ格納部40に格納する。SAFE-CDFG及びSM-CDFGは、後述するスケジューリングS3で使用される。
【0087】
ステップS2_7では、高位合成部50は、Sub-CDFGとsm-CDFGとを合体し、新たなSub-CDFGとしてNewSub-CDFGを作成する。
図23のNewSub-CDFGは、頂点MUL0、MUL1、MUL3、ADD0、ADD1、辺a、b、c、t1、t2、t4、t5を含んでいる。
【0088】
ステップS2_8において、高位合成部50は、Base-CDFGに対し、Sub-CDFGに対応する箇所を、ステップS2_7で作成したNewSub-CDFGに入れ替え、機能安全機構を挿入したBase-CDFGを作成する。
【0089】
そして、ステップS2_3に戻る。ただし、前回のステップS2_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS2_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、機能安全機構挿入(1)S2の処理を終了させる。
【0090】
<<スケジューリング>>
次に、スケジューリングS3について説明する。スケジューリングでは、例えば高位合成スクリプト120により指定された制約に基づき、演算の実行サイクルを決定する。ここでは、
図23のCDFGを入力とする。
図24は、スケジューリングの一例を示すフロー図である。
図24のスケジューリングS3には、ステップS3_1~S3_7が含まれる。
【0091】
ステップS3_1において、高位合成部50は、Base-CDFGのスケジューリングを行う。例えば、高位合成部50は、機能安全機構挿入(1)S2で追加した機能安全機構の演算も含めたBase-CDFGの実行サイクルを決定する。
【0092】
具体的に述べると、高位合成部50は、高位合成スクリプト120において指定されたクロック周期10nsのところに、クロックサイクル境界(境界線)を挿入する。本例では、各演算における遅延を、乗算では8ns、加算では4ns、比較演算では2nsとそれぞれ見積もる。
【0093】
高位合成部50は、遅延時間の見積り結果を用いてデータ格納部40に格納されたSM-CDFGに対するスケジュールリングを行う。そして、高位合成部50は、SM-CDFGに対応するスケジューリング済みCDFGをSM-Schedとしてデータ格納部40に格納する。また、高位合成部50は、データ格納部40に格納されたSAFE-CDFG及びそれ以外のCDFGに対するスケジューリングも行う。そして、高位合成部50は、これらに対するスケジューリング済みCDFGをSchedとしてデータ格納部40に格納する。
【0094】
ステップS3_2において、高位合成部50は、機能安全機構実装仕様130から、動作記述位置に対する実装仕様のみを抽出する。ステップS3_2は、
図22のステップS2_2と同様である。高位合成部50は、抽出記述T0をデータ格納部40に格納する。
【0095】
ステップS3_3では、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。ステップS3_3は、ステップS2_3と類似している。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から実装仕様(仕様T1)を取り出す。そして、後続のステップS3_4の処理が実行される。
【0096】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、スケジューリングS3の処理を終了させる。
【0097】
ステップS3_4では、高位合成部50は、仕様T1で指定されている動作記述位置から、2-3行目に対応するスケジューリング済みCDFG及び同じサイクルにスケジューリングされたそれ以外のスケジューリング済みCDFGをsafe-Schedとして、Schedから取り出す。
【0098】
ステップS3_5では、高位合成部50は、指定されたエラーチェック実行周期に応じて、safe-Schedに対する再スケジューリングを行う。
【0099】
高位合成部50は、各演算の実行条件を把握している。このため、機能安全機構実装対象の演算の実行条件がエラーチェック実行周期の条件と一致する場合、機能安全機構実装対象の演算と、それ以外の演算とで演算器を共有しても、エラーチェック結果に影響を与えることはない。つまり、本例の場合、機能安全機構実装対象の演算結果と機能安全機構の演算結果に不一致が発生することはない。
【0100】
本例では、仕様T1で指定されたエラーチェック実行周期には、
図20に示すように、演算実行時を意味する「ExecCond」が指定されている。このため、高位合成部50は、最大レイテンシの3クロックサイクルを満たす範囲で、safe-Schedに含まれる演算に対する演算器共有の可能性を探索する。
【0101】
図25は、safe-Schedに対するスケジューリング方法を説明する図である。
図25は、
図23のCDFGに対応している。
図25に示すように、safe-Schedに対し、サイクル0で2つの乗算MUL0及びMUL1を実行しようとすれば、乗算器が2つ必要になる。一方、サイクル1の演算には、乗算は含まれていない。そこで、高位合成部50は、乗算MUL1をサイクル0からサイクル1に移動させる。これにより各サイクルの乗算が1つずつになるので、全サイクルの乗算を1つの乗算器で実行することが可能となる。高位合成部50は、この再スケジューリング結果を用いて、データ格納部40に格納されたSchedを更新する。
【0102】
ステップS3_6では、高位合成部50は、仕様T1で指定された動作記述位置に対して挿入した機能安全機構のスケジューリング済みCDFGをSM-Schedから取り出す。取り出されたCDFGは、sm-Schedとする。
【0103】
ステップS3_7では、高位合成部50は、仕様T1で指定されたエラーチェック実行周期を元に、sm-Schedの再スケジューリングを行い、再スケジューリング済みCDFGを新たなsm-Schedとしてデータ格納部40に格納する。
図25の例では、sm-Schedの演算MUL3とADD1を移動させることはできない。そのため、sm-Schedの演算に対する再スケジューリング結果はステップS3_1の結果と変わらない。
【0104】
そして、ステップS3_3に戻る。ただし、前回のステップS3_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS3_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、スケジューリングS3の処理が終了する。
【0105】
<<バインディング>>
次に、バインディングS4について説明する。バインディングS4では、スケジューリングS3におけるスケジューリング結果に基づきバインディングが行われる。例えば、バインディングS4では、スケジューリングS3におけるスケジューリング結果を用いて、データパスに演算器やレジスタ等のマッピングが行われる。ここでは、
図25のスケジューリング済CDFGを入力とする。
【0106】
図26は、バインディングの一例を示すフロー図である。
図26のバインディングS4には、ステップS4_1~S4_5が含まれる。
図27は、バインディング方法を説明する図である。
【0107】
ステップS4_1では、高位合成部50は、スケジューリングS3で更新したSM-schedに含まれるCDFG(機能安全機構論理)にマッピングを行う。具体的に述べると、高位合成部50は、
図27に示すように、乗算にmul1、加算にadd1、比較演算にcmp0をそれぞれマッピングする。そして、高位合成部50は、マッピング結果付CDFGをSM-Bindとしてデータ格納部40に格納する。また、高位合成部50は、クロック境界を跨ぐデータパスにレジスタr3をマッピングし、レジスタr3のマッピング結果を含むCDFGをSM-Bindとして格納する。
【0108】
なお、本例では該当しないが、機能安全機構内の演算の間で、リソース共有が行われてもよい。ただし、リソース共有は、指定されたエラーチェック実行周期に応じて、ハードウェア故障がないにも関わらず、比較演算で不一致が起きないことを条件として行われるものとする。
【0109】
続いて、高位合成部50は、スケジューリングS3で作成したSchedのCDFG(機能論理)にマッピングを行う。具体的に述べると、高位合成部50は、乗算にmul0、加算にadd0をマッピングする。これは、乗算にmul0のみマッピングされるのは、スケジューリングS3により、Schedの乗算が1つの乗算器で対応可能となったからである。
【0110】
そして、高位合成部50は、Schedに対するマッピング結果付CDFGをBindとしてデータ格納部40に格納する。また、高位合成部50は、クロック境界を跨ぐデータパスにレジスタr0、r1、r2をそれぞれマッピングし、これらのマッピング結果を含むCDFGをBindとして格納する。なお、サイクル2のmul0の出力パスにレジスタr2がマッピングされているのは、常にzの値を外部に出力させるためである。
【0111】
ここで作成されたBind、SM-Bindは、後述するRTL記述生成S7で利用される。
【0112】
ステップS4_2では、高位合成部50は、機能安全機構実装仕様130から、動作記述位置に対する実装仕様だけを抽出する。ステップS4_2は、
図24のステップS3_2等と同様である。高位合成部50は、抽出記述T0をデータ格納部40に格納する。
【0113】
ステップS4_3では、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。ステップS4_3は、ステップS3_3等と類似している。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から実装仕様(仕様T1)を取り出す。そして、後続のステップS4_4の処理が実行される。
【0114】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、バインディングS4の処理を終了させる。
【0115】
ステップS4_4では、仕様T1で指定されたエラーチェック入力信号を元に、新たなリソースが追加される。具体的述べると、
図20に示すように、エラーチェック入力信号として、「Output+F/F」が指定されている。このため、Outputであるt2、t5に加えて、サイクル0とサイクル1とを跨ぐレジスタr0、レジスタr3の値もエラーチェック入力信号となるため、これらのエラーチェックを行うリソースが追加される。具体的に述べると、高位合成部50は、レジスタr0、r3の値を比較するcmp1、cmp0及びcmp1におけるエラーチェック結果の論理和を出力するor0をそれぞれ追加し、これらのマッピング結果を含むCDFGをSM-Bindとして格納する。
【0116】
ステップS4_5では、仕様T1で指定されたエラーチェック出力信号を元に、新たなリソースが追加される。具体的述べると、
図20に示すように、エラーチェック出力信号として、「Port(ERR、F/F)」が指定されている。このため、高位合成部50は、ERRとor0との間にレジスタr4を追加し、レジスタr4のマッピング結果を含むCDFGをSM-Bindとして格納する。
【0117】
そして、ステップS4_3に戻る。ただし、前回のステップS4_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS4_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、バインディングS4の処理が終了する。
【0118】
<<制御回路作成>>
次に、制御回路作成S5について説明する。制御回路作成S5では、スケジューリング結果により決定された各サイクルにおける動作を制御する制御回路が生成される。
図28は、各サイクルにおける動作を制御する制御回路の例を示す図である。高位合成部50は、
図27等に示すサイクル0、サイクル1、サイクル2の演算を順次実行させるため、3つの状態St0、St1、St2を持つ制御回路FSM0を作成する。制御回路FSM0は、例えば、状態St0のときサイクル0の演算を実行させ、状態St1のときサイクル1の演算を実行させ、状態St2のときサイクル2の演算を実行させるように構成される。
【0119】
<<機能安全機構挿入(2)>>
次に、機能安全機構挿入(2)S6について説明する。機能安全機構挿入(2)S6では、機能安全機構実装仕様130に従い、制御回路作成S5において生成された制御回路を対象とした機能安全機構回路の挿入が行われる。
【0120】
高位合成では、バインディングS4の実行後に、制御回路が生成される。このため、高位合成が生成する制御回路を対象とした機能安全機構回路の挿入は、必ず、制御回路作成S5の後に行われる。
図29は、機能安全機構挿入(2)の一例を示すフロー図である。
図29の機能安全機構挿入(2)S6には、ステップS6_1~S6_6が含まれる。
図30は、機能安全機構挿入(2)において挿入される機能安全機構の一例を示す図である。以下では、
図28の制御回路FSM0を入力として、機能安全機構挿入(2)S6のフローを説明する。
【0121】
ステップS6_1において、高位合成部50は、制御回路作成S5において生成された制御回路FSM0をControllersとしてデータ格納部40に格納する。格納された制御回路FSM0に関する情報は、後述のRTL記述作成S7において使用される。
【0122】
ステップS6_2では、機能安全機構実装仕様から高位合成制御回路に対する実装仕様の部分のみが抽出される。例えば、高位合成部50は、
図20の機能安全機構実装仕様130から2行目の制御回路FSM0に対する実装仕様を抽出する。高位合成部50は、抽出した箇所を抽出記述T0としてデータ格納部40に格納する。
【0123】
ステップS6_3では、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。ステップS6_3は、ステップS2_3等と類似している。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から実装仕様(仕様T1)を取り出す。そして、後続のステップS6_4の処理が実行される。
【0124】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、機能安全機構挿入(2)S6の処理を終了させる。
【0125】
ステップS6_4では、高位合成部50は、仕様T1で指定された高位合成制御回路に対応する制御回路(FSM0)をControllersから抽出する。なお、抽出された制御回路(FSM0)は、Sub-Controllerとする。
【0126】
ステップS6_5では、高位合成部50は、Sub-Controllerを元に、挿入する機能安全機構の回路をsm-Controllerとして作成する。具体的に述べると、
図20に示すように、仕様T1で指定された機能安全機構は三重化回路(TRM)である。このため、高位合成部50は、Sub-Controllerに対する冗長回路(FSM1、FSM2)、及び多数決回路(vote0)を、sm-Controllerとして作成する(
図30を参照)。
【0127】
ステップS6_6では、高位合成部50は、ステップS6_5で作成したsm-ControllerをSM-Controllersとしてデータ格納部40に格納する。SM-Controllersとして格納された情報は、後述するRTL記述作成S7において使用される。
【0128】
そして、ステップS6_3に戻る。ただし、前回のステップS6_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS6_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、機能安全機構挿入(2)S6の処理を終了させる。
【0129】
<<RTL記述生成>>
次に、RTL記述生成S7について説明する。RTL記述生成S7では、機能安全機構実装仕様に従い、機能安全機構挿入(1)S2、機能安全機構挿入(2)S6において挿入された機能安全機構を含む、機能安全機構付きRTL記述が生成される。なお、以下では、理解を容易にするため、RTL記述を回路図として示す。
【0130】
図31は、RTL記述生成の一例を示すフロー図である。
図31のRTL記述生成S7には、ステップS7_1~S7_16が含まれる。
【0131】
ステップS7_1では、機能安全機構実装仕様から高位合成制御回路に対する実装仕様の部分のみが抽出される。例えば、高位合成部50は、
図20の機能安全機構実装仕様130から2行目の制御回路FSM0に対する実装仕様を抽出する。高位合成部50は、抽出した箇所を抽出記述T0としてデータ格納部40に格納する。
【0132】
ステップS7_2では、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。ステップS7_2は、ステップS2_3等と類似している。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から制御回路FSM0に対する実装仕様(仕様T1)を取り出す。そして、後続のステップS7_3の処理が実行される。
【0133】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、ステップS7_6の処理が実行される。
【0134】
ステップS7_3では、高位合成部50は、仕様T1に指定されている機能安全機構モジュール名に従い、モジュールCHKを作成する。
【0135】
ステップS7_4では、高位合成部50は、仕様T1に指定されている制御回路FSM0の機能安全機構を実現する回路を、機能安全機構挿入(2)S6で作成したSM-Controllersから取り出す。取り出した回路は、sm-Controllerとする(ステップS6_6を参照)。本例では、制御回路FSM1、制御回路FSM2、多数決回路vote0がsm-Controllerとなる。
【0136】
ステップS7_5では、高位合成部50は、ステップS7_4で取り出したsm-ControllerのRTL回路を作成する。
図32は、sm-ControllerのRTL回路の一例を示す図である。
図32のモジュールCHKは、制御回路FSM1、FSM2、多数決回路vote0を含む。多数決回路vote0は、制御回路FSM0、FSM1、FSM2の出力信号の多数決を行い、多数決の結果を信号vote0として出力する。
【0137】
そして、ステップS7_2に戻る。ただし、前回のステップS7_2において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS7_2では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、ステップS7_6の処理を実行する。
【0138】
ステップS7_6では、高位合成部50は、機能安全機構実装仕様から動作記述位置に対する実装仕様の記述のみを抽出する。本例では、高位合成部50は、
図20の機能安全機構実装仕様130の1行目における、動作記述110の2-3行目に対する実装仕様に関する記述を抽出し、抽出した箇所を抽出記述T0としてデータ格納部40に格納する。
【0139】
ステップS7_7は、ステップS7_2と類似している。ステップS7_7において、高位合成部50は、抽出記述T0が空(φ)でないかどうかを判断する。抽出記述T0が空でないと判断した場合(Yes)、高位合成部50は、抽出記述T0から動作記述の2-3行目に対する実装仕様(仕様T1)を取り出す。そして、後続のステップS7_8の処理が実行される。
【0140】
一方、高位合成部50は、抽出記述T0が空(φ)であると判断した場合(No)、ステップS7_12の処理が実行される。
【0141】
ステップS7_8では、高位合成部50は、仕様T1に指定された機能安全機構モジュール名に従い、モジュールCHKを作成する。ただし、ステップS7_3においてモジュールCHKはすでに作成済みであるため、新たなモジュールは作成されない。
【0142】
ステップS7_9では、高位合成部50は、仕様T1に指定されている、動作記述の2-3行目の機能安全機構を実現する回路を、バインディングS4で作成したSM-Bindから取り出す。取り出した回路は、バインディング結果付CDFGのsm-Bindとする。本例では、例えば後述する
図33に示すmul1、add1、cmp0、r3、cmp1、or0、r4が、sm-Bindである。
【0143】
ステップS7_10では、高位合成部50は、ステップS7_9で取り出したsm-BindのRTL回路を作成する。
【0144】
ステップS7_11では、ステップS7_10で作成されたRTL記述に対し、新たな回路が追加される。仕様T1では、エラーチェック実行周期として「ExecCond」が指定されている。このため、高位合成部50は、エラーチェック入力信号の値を更新したサイクルに対応する状態St1においてのみcmp0、cmp1、or0の結果を伝搬する回路を生成する。具体的に述べると、ステップS7_11では、r5、r6、及びr4、r5、r6の前段に選択回路MUX(マルチプレクサ)が生成される。ここで生成される選択回路MUXに入力される選択信号は、三重化回路の多数決結果である
図32の信号vote0である。
図33は、RTL記述生成において生成されるRTL回路の一例を示す図である。
図33のモジュールCHKは、mul1、add1、cmp0、cmp1、or0、r3、r4、r5、r6、4つのMUXを含む。
【0145】
そして、ステップS7_7に戻る。ただし、前回のステップS7_7において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS7_7では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、ステップS7_12の処理を実行する。
【0146】
ステップS7_12では、高位合成対象の機能モジュール名に対応するモジュールが作成される。例えば、高位合成部50は、動作記述110から、2-3行目を含む機能モジュール名を1行目の記述から識別し、新たなモジュールmodAを作成する。
【0147】
ステップS7_13では、高位合成部50は、バインディングS4で作成したBindと、機能安全機構挿入(2)S6で作成したControllersを元に、機能モジュールのRTL回路を作成する。
図34は、ステップS7_13において生成されるRTL回路の一例を示す図である。
図34は、モジュールmodAのRTL回路である。
図34に示すように、モジュールmodAは、FSM0等の機能論理と、機能安全機構を実装したモジュールCHKとを含む。
【0148】
ステップS7_14では、高位合成部50は、機能論理と機能安全機構のモジュールCHKとの信号結線を行う。
図35は、信号結線後のRTL回路の一例を示す図である。
【0149】
ステップS7_15では、機能安全機構も含めたタイミング評価が行われる。タイミング評価は、高位合成部50で行われてもよい。
図31のフローは、タイミングバイオレーションがない場合を示すが、タイミングバイオレーションが起きたと判定された場合、該当パスに対して、スケジューリングS3からの処理が再度実行される。これは、一般的な高位合成時において、制御回路作成後に行われるポストスケジュールと同等の処理である。
【0150】
ステップS7_16では、高位合成部50は、
図32~
図35を実現するRTL記述を生成する。ステップS7_16により、最終的に機能安全機構付きRTL記述140が生成される。
【0151】
<その他の構成>
図1では、プロセッサ10及び不揮発性メモリ20が高位合成装置1に含まれているが、これらが別の装置にそれぞれ設けられてもよい。具体的に述べると、プロセッサを含む装置及び不揮発性メモリを含む装置は、有線、無線、あるいはネットワークを介して接続された高位合成システムを構成する。このような高位合成システムにおいて、前述した高位合成が実行されてもよい。
【0152】
<本実施の形態による主な効果>
本実施の形態によれば、高位合成部50は、動作記述110と、高位合成スクリプト120と、機能安全機構実装仕様130とを用いた高位合成を行い、機能安全機構を挿入したRTL記述を生成する。また、高位合成部50は、機能安全機構実装仕様130で指定された動作記述110の任意の位置に対し、機能安全機構を挿入する。また、高位合成部50は、動作記述110を用いてCDFGを生成(S1)した後、機能安全機構実装仕様130に従い、CDFGに機能安全機構を挿入する第1機能安全機構挿入処理S2を行う。この構成によれば、冗長論理である機能安全機構が削除されないので、機能安全機構実装仕様130に基づき、任意の動作記述の論理を実行する回路、及び高位合成が生成する制御回路に対して、任意の機能安全機構を実装したRTL記述を生成することが可能となる。
【0153】
また、本実施の形態では、第1機能安全機構挿入処理S2において、機能安全機構を挿入したCDFGを生成した後、高位合成スクリプト120で規定された高位合成制約に基づくスケジューリング処理S3が行われる。この構成によれば、各サイクルにおける遅延時間の見積に基づき、各演算の実行タイミングが適切に設定されるので、必要となる回路素子の増大が抑えられる。
【0154】
(実施の形態2)
次に、実施の形態2について説明する。なお、以下では、前述の実施の形態と重複する箇所については、原則として説明を省略する。
【0155】
<高位合成方法の詳細>
図36は、本発明の実施の形態2に係る高位合成の概要を説明する図である。
図36の動作記述110、高位合成スクリプト120、及び機能安全機構実装仕様130は、実施の形態1と同様、ユーザにより事前に準備される。本実施の形態の高位合成では、まず、機能安全機構未実装のRTL記述が生成される。このRTL記述とあわせて、機能安全機構実装仕様に従い、機能安全機構未実装のRTL記述を対象とした機能安全機構実装指示が生成される。そして、機能安全機構実装指示に基づき、RTL記述に機能安全機構が追加される。この機能安全機構の追加は、例えば非特許文献2等に示されるプログラム自動変換、あるいは人手作業により行われる。
【0156】
図37は、本発明の実施の形態2に係る高位合成方法の一例を示す説明図である。
図37に示すように、本実施の形態の高位合成では、CDFG作成S11、機能安全機構挿入位置記録(1)S12、スケジューリングS13、バインディングS14、制御回路作成S15、機能安全機構挿入位置記録(2)S16、RTL記述生成S17、機能安全機構実装指示生成S18、機能安全機構挿入S19の各処理が実行される。実施の形態1と同様、ユーザは、例えば
図20に示す動作記述110、高位合成スクリプト120、及び機能安全機構実装仕様130の各ファイルを作成し、高位合成装置1に転送しておく。
【0157】
図37のCDFG作成S11は、
図19のCDFG作成S1と同様であるので、説明は省略する。
【0158】
<<機能安全機構挿入位置記録(1)>>
機能安全機構挿入位置記録(1)S12では、機能安全機構実装仕様に従い、機能安全機構の挿入位置が記録される。機能安全機構挿入位置記録(1)S12は、
図19の機能安全機構挿入(1)S2と同様、必ず、CDFG作成S1の後、スケジューリングS3の前に実施される。
【0159】
図38は、機能安全機構挿入位置記録(1)の一例を示すフロー図である。
図38に示す機能安全機構挿入位置記録(1)S12は、ステップS12_1~S12_5を含む。ステップS12_1~S12_4では、
図22のステップS2_1~S2_4と同様の処理がそれぞれ実行される。
【0160】
図39は、Sub-CDFGの一例を示す図である。
図39のSub-CDFGは、
図23のSub-CDFGと同様である。
図37においても、頂点MUL0、ADD0、辺a、b、c、t1、t2がSub-CDFGとして作成されている。このように、機能安全機構の挿入位置が、Sub-CDFGに記録される。
【0161】
ステップS12_5では、高位合成部50は、ステップS12_4で作成したSub-CDFGをSAFE-CDFGとしてデータ格納部40に格納する。SAFE-CDFGは、後述するスケジューリングS3で使用される。
【0162】
そして、ステップS12_3に戻る。ただし、前回のステップS12_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS12_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、機能安全機構挿入位置記録(1)S12の処理を終了させる。
【0163】
<<スケジューリング>>>
次に、スケジューリングS13について説明する。
図40は、スケジューリングの一例を示すフロー図である。
図40のスケジューリングS3には、ステップS13_1~S13_5が含まれる。ここでも、クロック周期10nsに対して、クロックサイクル境界(境界線)が挿入される。
【0164】
ステップS13_1では、高位合成部50は、遅延時間の見積り結果を用いてデータ格納部40に格納された、機能安全機構挿入位置記録(1)S12で作成したSAFE-CDFGに対するスケジュールリングを行う。そして、高位合成部50は、SAFE-CDFGに対応するスケジューリング済みCDFGを、SAFE-Schedとしてデータ格納部40に格納する。また、高位合成部50は、これ以外のCDFGに対するスケジューリングも行い、スケジューリング済みCDFGをSchedとしてデータ格納部40に格納する。
【0165】
ステップS13_2~S13_3では、ステップS3_2~S3_3と同様の処理がそれぞれ実行される。ステップS13_4では、高位合成部50は、仕様T1で指定されている動作記述位置から、2-3行目に対応するスケジューリング済みCDFGをSAFE-Schedから、同じサイクルにスケジューリングされたそれ以外のスケジューリング済みCDFGをSchedから、それぞれ取り出し、取り出したCDFGをsafe-Schedとする。
【0166】
ステップS13_5では、高位合成部50は、仕様T1で指定されているためエラーチェック実行周期に応じて、safe-Schedに対する再スケジューリングを行う。高位合成部50は、この再スケジューリング結果を用いて、データ格納部40に格納されたSAFE-SchedとSchedを更新する。
図41は、safe-CDFGに対するスケジューリング方法を説明する図である。
図41に示すスケジューリング結果は、
図25の右側のSchedと同じ結果となっている。
【0167】
そして、ステップS13_3に戻る。ただし、前回のステップS13_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS13_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、スケジューリングS13の処理が終了する。
【0168】
<<バインディング>>
次に、バインディングS14について説明する。
図42は、バインディングの一例を示すフロー図である。
図43は、バインディング方法を説明する図である。ステップS14_1では、高位合成部50は、スケジューリングS13で更新したSAFE-schedに含まれるCDFG(機能安全機構論理)にマッピングを行う。
【0169】
具体的に述べると、高位合成部50は、
図43に示すように、乗算にmul0、加算にadd0をそれぞれマッピングする。そして、高位合成部50は、マッピング結果付CDFGをSAFE-Bindとしてデータ格納部40に格納する。また、高位合成部50は、クロック境界を跨ぐデータパスにレジスタr0をマッピングし、レジスタr0のマッピング結果を含むCDFGをSAFE-Bindとしてデータ格納部40に格納する。また、高位合成部50は、これ以外のCDFGに対するバインディングも行い、その結果をBindとしてデータ格納部40に格納する。
【0170】
<<制御回路作成>>
次に、制御回路作成S15では、
図19の制御回路作成S5と同様に、スケジューリング結果により決定された各サイクルにおける動作を制御する制御回路が生成される(
図28を参照)。
【0171】
<<機能安全機構挿入位置記録(2)>>
次に、機能安全機構挿入位置記録(2)S16について説明する。機能安全機構挿入位置記録(2)S16では、機能安全機構実装仕様に従い、制御回路に対する機能安全機構の挿入位置が記録される。ここでは、高位合成により生成された制御回路を対象として機能安全機構の挿入位置が記録される。機能安全機構挿入位置記録(2)S16は、
図19の機能安全機構挿入(2)S6と同様、必ず、制御回路作成S15の後に実施される。
【0172】
図44は、機能安全機構挿入位置記録(2)の一例を示すフロー図である。
図44の機能安全機構挿入位置記録(2)S16は、ステップS16_1~S16_5を含む。ステップS16_1~S16_4では、
図29のステップS6_1~S6_4と同様の処理がそれぞれ実行される。ステップS16_4において作成されるSub-Controllerに、制御回路(FSM0)の機能安全機構の挿入位置が記録される。
【0173】
ステップS16_5では、高位合成部50は、ステップS16_4で作成したSub-ControllerをSAFE-Controllersとしてデータ格納部40に格納する。SAFE-Controllersとして格納された情報は、後述するRTL記述作成S17において使用される。
【0174】
そして、ステップS16_3に戻る。ただし、前回のステップS16_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS16_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、機能安全機構挿入位置記録(2)S16の処理を終了させる。
【0175】
<<RTL記述生成>>
次に、RTL記述生成S17について説明する。前述したように、本実施の形態のRTL記述生成S17では、機能安全機構を含まないRTL記述が生成される。
図45は、本発明の実施の形態2に係るRTL記述生成の一例を示すフロー図である。
図45のRTL記述生成S17には、ステップS17_1~S17_13が含まれる。
【0176】
ステップS17_1では、
図31のステップS7_12と同様の処理が実行される。高位合成部50は、高位合成対象の機能モジュール名に対応する新たなモジュールmodAを作成する。ステップS17_2~S17_3では、
図31のステップS7_1~S7_2と同様の処理が実行される。
【0177】
ステップS17_4では、高位合成部50は、仕様T1に指定されている制御回路FSM0の機能安全機構を実現する回路を、機能安全機構挿入位置記録(2)S16で作成したSAFE-Controllersから取り出す。取り出した回路は、safe-Controllerとする。具体的に述べると、高位合成部50は、仕様T1において機能安全機構実装対象として指定されている制御回路FSM0を、SAFE-Controllersから取り出し、safe-Controllerとする。
【0178】
ステップS17_5では、高位合成部50は、ステップS17_4で取り出したsafe-ControllerのRTL回路を作成する。
【0179】
ステップS17_6では、高位合成部50は、ステップS17_5で作成したRTL回路を、SAFE-ControllerRTLとしてデータ格納部40に格納する。SAFE-ControllerRTLとして格納された情報は、後述の機能安全機構実装指示生成S18で利用される。
【0180】
そして、ステップS17_3に戻る。ただし、前回のステップS17_3において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS17_3では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、ステップS17_7の処理を実行する。
【0181】
ステップS17_7~S17_8では、
図31のステップS7_6~S7_7と同様の処理が実行される。ステップS17_9では、高位合成部50は、仕様T1に指定されている、動作記述の2-3行目の機能安全機構を実現する回路を、バインディングS14で作成したSAFE-Bindから取り出す。取り出した回路は、バインディング結果付CDFGのsafe-Bindとする。本例では、後述する
図46に示すmul0、add0、r0が、safe-Bindである。
【0182】
ステップS17_10では、高位合成部50は、ステップS17_9で取り出したsafe-BindのRTL回路を作成する。
【0183】
ステップS17_11では、高位合成部50は、ステップS17_10で作成したRTL回路を、SAFE-DatapathRTLとしてデータ格納部40に格納する。SAFE-DatapathRTLに含まれる情報は、後述の機能安全機構実装指示生成S18で使用される。
【0184】
そして、ステップS17_8に戻る。ただし、前回のステップS17_8において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS17_8では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、ステップS17_12の処理を実行する。
【0185】
ステップS17_12では、高位合成部50は、バインディングS14で作成したBindと、機能安全機構挿入位置記録(2)S16で作成したControllersとを用いてRTL記述140Aを作成する(
図37を参照)。
図46は、ステップS17_13において生成されるRTL回路の一例を示す図である。
図46は
図34に対応する図であり、実施の形態1との差異が明確に示されている。双方の図面を比較すると、
図46のRTL回路には、機能安全機構のモジュールCHKが含まれていない。このように、本実施の形態のRTL記述生成S17では、機能安全機構はまだ実装されない。
【0186】
ステップS17_13では、高位合成部50は、
図46のRTL回路を実現するRTL記述を生成する。
【0187】
<<機能安全機構実装指示生成>>
次に、機能安全機構実装指示生成S18について説明する。機能安全機構実装指示生成S18では、機能安全機構実装仕様、及びRTL記述生成S17において生成されたRTL記述に従い、
図37に示す機能安全機構実装指示150が生成される。ここで生成される機能安全機構実装指示には、モジュール実装指示、及びリソース実装指示が含まれる。
【0188】
モジュール実装指示には、例えばモジュール名を指定する「Name」、入力信号を指定する「Input」、出力信号を指定する「Output」等の情報が出力される。すなわち、モジュール実装指示とは、機能安全機構のモジュールに関する情報が含まれる。
【0189】
一方、リソース実装指示には、例えば入力信号の接続元を指定する「Input」、出力信号の接続先を指定する「Output」、出力の更新条件を指定する「Enable」、リソース作成用のモジュール名を指定する「Module」等の情報が出力される。すなわち、リソース実装指示とは、機能安全機構のモジュールのリソースに関する情報が含まれる。
【0190】
図47は、機能安全機構実装指示生成S18の一例を示すフロー図である。
図47には、ステップS18_1~S18_12が含まれる。ステップS18_1~S18_2では、例えば
図45のステップS17_2~S17_3と同様の処理が実行される。
【0191】
ステップS18_3では、高位合成部50は、仕様T1で指定された機能安全機構モジュール名に従い、モジュールCHKに関するモジュール実装指示を作成する。
【0192】
ステップS18_4では、高位合成部50は、SAFE-ControllerRTLから、仕様T1で指定された機能安全機構(FSM0)を実現するRTL回路を抽出する。抽出されたRTL回路は、safe-Controllerとする。
【0193】
ステップS18_5では、ステップS18_4で作成したsafe-Controllerと、仕様T1で指定された機能安全機構とから、機能安全機構に関するRTL回路のリソース実装指示が生成される。具体的に述べると、仕様T1で指定された機能安全機構が三重化回路(TMR)であるため、高位合成部50は、ステップS18_4で作成したsafe-Controllerに対する冗長回路と、多数決回路とを実現するためのリソース実装指示を作成する。
【0194】
本例では、高位合成部50は、FSM1、FSM2、vote0のリソース実装指示を作成する。また、仕様T1には、エラーチェック入力信号として「Output」、エラーチェック実行周期として、毎クロックサイクルがそれぞれ指定されている。このため、高位合成部50は、毎クロックサイクル、三重化回路の多数決をとるvote0を生成し、FSM0、FSM1、FSM2をvote0に接続する。また、仕様T1には、エラーチェック出力信号として「-」が指定されているため、高位合成部50は、外部へのエラー通知信号の作成指示は出力しない。そして、高位合成部50は、FSM0を選択信号とするMUXに対し、多数決結果である信号vote0を接続するための指示を生成する。ここで生成される指示は、vote0に対するリソース実装指示の「Output」に関する情報となる。
【0195】
ステップS18_6では、機能論理のモジュール、及び機能安全機構モジュールの信号結線情報が、モジュール実装指示に追加される。具体的に述べると、高位合成部50は、機能モジュールmodAと、機能安全機構モジュールCHKとの信号結線情報を、機能安全機構モジュールCHKのモジュール実装指示に追加する。本例では、高位合成部50は、vote0の入力としてFSM0、出力としてvote0を作成させる指示を機能安全機構モジュールCHKのモジュール実装指示に追加する。
【0196】
そして、ステップS18_2に戻る。ただし、前回のステップS18_2において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS18_2では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、ステップS18_7の処理を実行する。ステップS18_7~S18_8では、
図45のステップS17_7~S17_8と同様の処理がそれぞれ実行される。
【0197】
ステップS18_9では、仕様T1に指定された機能安全機構モジュール名に従い、機能安全モジュールCHKに関するモジュール実装指示が作成される。しかし、高位合成部50は、ステップS18_3において、すでに機能安全モジュールCHKのモジュール実装指示を作成しているので、機能安全モジュールCHKの新たなモジュール実装指示は作成しない。
【0198】
ステップS18_10では、SAFE-DatapathRTLから、仕様T1の機能安全機構を実現する回路が抽出される。具体的に述べると、高位合成部50は、仕様T1に指定されている、動作記述の2-3行目の内容を実現したRTL回路を、SAFE-DatapathRTLから取り出す。取り出されたRTL回路は、safe-Datapathとする。本例では、mul0、add0、r0及びこれらの入出力を制御するMUXがsafe-Datapathに含まれる。
【0199】
ステップS18_11では、safe-Datapathと仕様T1の指定とから、機能安全機構のRTL回路のリソース実装指示が生成される。具体的に述べると、仕様T1に指定された機能安全機構が二重化回路(DMR)であるため、高位合成部50は、ステップS18_10で作成したsafe-Datapathに対する冗長回路と比較回路を実現するためのリソース実装指示を作成する。
【0200】
本例では、高位合成部50は、mul0、add0、r0の冗長回路として、mul1、add1、r3のリソース実装指示を作成する。add1の入力信号は、add0の入力信号r0、cに対応するr3、cとし、add1の出力信号はadd0の出力信号のt2に対応するt5とする。r3はmul1の出力結果を格納し、更新条件はr0と同様に、状態St0とする。なお、更新情報は、r3のリソース実装指示の「Enable」の情報である。
【0201】
そして、比較回路として、仕様T1で指定されたエラーチェック入力信号が「Output+F/F」であるため、高位合成部50は、動作記述の2-3行目の出力であるadd0の結果t2とadd0の冗長回路であるadd1の結果t5とを比較するcmp0、高位合成により追加したレジスタr0とr0の冗長回路であるr3の値とを比較するcmp1、及びcmp0とcmp1の比較結果の論理和or0のリソース実装指示をそれぞれ作成する。
【0202】
また、仕様T1で指定されたエラーチェック結果出力信号が「Port(ERR、F/F)」であるため、or0の結果を格納するr4、及び外部出力ERRのリソース実装指示をそれぞれ作成する。さらに、仕様T1には、エラーチェック実行周期として「ExeCond」が指定されているため、高位合成部50は、状態St1においてのみcmp0、cmp1、or0の結果を伝搬する回路のリソース実装指示を作成する。具体的に述べると、高位合成部50は、cmp0、cmp1の結果を、状態St1以外において保持するためのr5、r6を生成し、r4、r5、r6の更新条件をSt1とする。なお、更新情報は、r4、r5、r6のリソース実装指示の「Enable」の情報である。
【0203】
ステップS18_12では、機能モジュールmodAと機能安全機構モジュールCHKとの信号結線情報を、機能安全機構モジュールCHKのモジュール実装指示に追加される。本例では、高位合成部50は、mul1の入力としてa、b、また、add1の入力としてc、cmp0の入力としてt2、cmp1の入力としてr0、エラーチェック出力信号としてERRをそれぞれ作成する指示を機能安全機構モジュールCHKのモジュール実装指示に追加する。
図48は、機能安全機構実装指示の一例を示す図である。機能安全機構実装指示150の上側にはリソース実装指示が作成され、機能安全機構実装指示150の下側にはモジュール実装指示が作成されている。
【0204】
そして、ステップS18_8に戻る。ただし、前回のステップS18_8において、抽出記述T0から仕様T1が取り出されたため、抽出記述T0は、空(T0=φ)となっている。このため、今回のステップS18_8では、高位合成部50は、抽出記述T0が空(φ)であると判断し(No)、機能安全機構実装指示生成S18の処理が終了する。
【0205】
<<機能安全機構挿入>>
次に、機能安全機構挿入S19について説明する。
図48の機能安全機構実装指示150に基づき、RTL記述に機能安全機構が挿入される。機能安全機構の挿入は、すでに述べたように、プログラム自動変換や人手作業により行われる。これにより、実施の形態1で述べた
図32~
図35と同様のRTL回路が生成される。
【0206】
<本実施の形態による主な効果>
本実施の形態によれば、高位合成部50は、動作記述110と、高位合成スクリプト120と、機能安全機構実装仕様130と、を用いた高位合成を行い、機能安全機構を含まないRTL記述140Aと、RTL記述140Aに対する機能安全機構実装指示150とを生成する。この構成によれば、RTL記述140Aと、機能安全機構実装指示150とを用い、機能安全機構を実装可能な市販のツールや人手により、任意の機能安全機構を実装させたRTL記述を生成することが可能となる。このように、RTL記述に対する機能安全機構の実装方法を増やすことができ、汎用性が向上する。
【0207】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0208】
1…高位合成装置、10…プロセッサ、20…不揮発性メモリ、30…揮発性メモリ、40…データ格納部、50…高位合成部、110…動作記述、120…高位合成スクリプト、130…機能安全機構実装仕様、140、140A…RTL記述、150…機能安全機構実装指示