以下に添付図面を参照して、この設計支援装置、設計支援方法及びプログラムの好適な実施の形態を詳細に説明する。以下の各実施例の説明においては、同様の構成要素には同一の符号を付して、重複する説明を省略する。
・設計支援装置のハードウェア構成の一例
図1は、実施の形態にかかる設計支援装置のハードウェア構成の一例を示す図である。図1に示すように、設計支援装置は、例えばコンピュータ本体1、入力装置2及び出力装置3を有していてもよい。設計支援装置は、例えば図示しないルータやモデムを介して構内通信網(Local Area Network:LAN)や広域通信網(Wide Area Network:WAN)やインターネットなどのネットワーク4に接続可能である。
コンピュータ本体1は、例えば中央処理装置(Central Processing Unit:CPU)、記憶部及びインターフェースを有していてもよい。CPUは、設計支援装置の全体の制御を司る。記憶部は、例えばリードオンリーメモリ(Read Only Memory:ROM)、ランダムアクセスメモリ(Random Access Memory:RAM)、ハードディスク(Hard Disk:HD)、光ディスク5及びフラッシュメモリのうちの一つ以上で構成される。
記憶部は、CPUのワークエリアとして使用される。記憶部には各種プログラムが格納されており、CPUからの命令に応じてロードされる。ハードディスクや光ディスク5は、ディスクドライブによりデータの読み出し及び書き込みが制御される。光ディスク5やフラッシュメモリは、コンピュータ本体1に対して着脱可能となっている。
インターフェースは、入力装置2からの入力、出力装置3への出力、及びネットワーク4に対する送信及び受信の制御を行う。入力装置2としては、例えばキーボード6、マウス7及びスキャナ8などがある。キーボード6は、文字や数字や各種指示などの入力に用いられるキーを有し、データの入力を行う。また、キーボード6は、タッチパネル式であってもよい。マウス7は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。
スキャナ8は、画像を光学的に読み取る。読み取られた画像は、画像データとして取り込まれ、コンピュータ本体1内の記憶部に格納される。スキャナ8に光学式文字読み取り(Optical Character Reader:OCR)機能を持たせてもよい。
出力装置3としては、例えばディスプレイ9、スピーカ10及びプリンタ11などが挙げられる。ディスプレイ9は、カーソル、アイコンまたはツールボックスをはじめ、文書、画像及び機能情報などのデータを表示する。スピーカ10は、効果音や読み上げ音などの音声を出力する。プリンタ11は、画像データや文書データを印刷する。
・設計支援装置の機能的構成の一例
図2は、実施の形態にかかる設計支援装置の機能的構成の一例を示す図である。図2に示すように、設計支援装置は、ライブラリ22、作成部23、分割部24及び削除部25を有していてもよい。
ソースコード21は、半導体集積回路の動作記述を、コンピュータのプログラミング言語のソースコードを用いて記述しているものである。ライブラリ22は、半導体集積回路に用いられる複数の演算器のそれぞれについて遅延値の情報を有していてもよい。遅延値は、演算器に信号が入力されてから出力されるまでに要する時間を示す値である。作成部23は、ソースコード21及びライブラリ22に基づいてデータフロー図を作成する。データフロー図は、演算器及びフリップフロップの配置を示す。
分割部24は、演算器の遅延値が周波数の制約条件を満たすとともに、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、データフロー図に示される演算器の論理を分割する。削除部25は、連続する複数の演算器の遅延値の和が周波数の制約条件を満たすとともに、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、データフロー図に示される演算器間のフリップフロップを削除する。
作成部23、分割部24及び削除部25は、例えば図1に示す設計支援装置の記憶部に記憶された当該各部23〜25の機能に関するプログラムをCPUに実行させることにより、または、入力や出力のインターフェースにより、実現されてもよい。なお、コンピュータ本体1は、作成部23、分割部24及び削除部25の各機能に関するプログラムをネットワーク4から取得してCPUにより実行してもよい。
また、ソースコード21及びライブラリ22は、例えば図1に示す設計支援装置の記憶部に保持されてもよい。また、作成部23、分割部24及び削除部25からの出力データは、例えば図1に示す設計支援装置の記憶部に保持されてもよい。
・設計支援方法の一例
図3は、実施の形態にかかる設計支援方法の一例を示す図である。図3に示す設計支援方法は、図2に示す設計支援装置により実施されてもよい。本実施例では、図2に示す設計支援装置が、図3に示す設計支援方法を実施する場合について説明する。
図3に示すように、設計支援方法を実現するプログラムの処理が開始されると、設計支援装置は、ソースコード21及びライブラリ22に基づいて、作成部23によりデータフロー図を作成する(ステップS1)。次いで、設計支援装置は、演算器の遅延値が周波数の制約条件を満たすとともに、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、データフロー図の演算器の論理を分割する(ステップS2)。
次いで、設計支援装置は、連続する複数の演算器の遅延値の和が周波数の制約条件を満たすとともに、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、データフロー図の演算器間のフリップフロップを削除する(ステップS3)。設計支援装置は、そして、一連の処理を終了する。
図2に示す設計支援装置及び図3に示す設計支援方法によれば、演算器の遅延値が周波数の制約条件を満たすとともに、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、演算器及びフリップフロップが配置される。それによって、フリップフロップ間の論理段数が多くなり過ぎるのを回避することができる。従って、ATPG処理によって容易にテストパターンを生成することができる。つまり、可検査性に優れる半導体集積回路を設計することができる。
・半導体集積回路の設計処理の一例
図4は、半導体集積回路の設計処理の一例を示す図である。図4に示すように、半導体集積回路の設計処理が開始されると、まず、高位合成処理が行われる(ステップS11)。高位合成処理は、例えば高位合成ツールと呼ばれる設計支援装置を用いて実施されてもよい。
高位合成処理では、例えばコンピュータのプログラミング言語のソースコードによって記述されている半導体集積回路の動作記述からRTL記述の半導体集積回路31が生成される。コンピュータのプログラミング言語の一例として、例えばC言語が挙げられる。本実施例では、コンピュータのプログラミング言語がC言語である場合について説明する。
次いで、RTL記述の半導体集積回路31に基づいて論理合成処理が行われる(ステップS12)。論理合成処理は、例えば論理合成ツールと呼ばれるプログラムを設計支援装置によって実行することによって実施されてもよい。論理合成処理では、RTL記述の半導体集積回路31から論理回路の実装設計が行われる。それによって、ネットリスト32が生成される。
次いで、ネットリスト32に基づいてATPG処理が行われる(ステップS13)。ATPG処理は、例えばテストパターンを自動的に生成するプログラムを設計支援装置によって実行することによって実施されてもよい。ATPG処理では、半導体集積回路に対する故障検出用のテストパターンが自動的に生成される。そして、一連の処理が終了する。
・設計支援装置の機能的構成の別の例
図5は、実施の形態にかかる設計支援装置の機能的構成の別の例を示す図である。図5に示す設計支援装置は、例えば高位合成ツールによって実現されてもよい。また、高位合成ツールは、例えばC言語記述の半導体集積回路の動作記述からRTL記述の半導体集積回路を生成するツールであってもよい。本実施例では、設計支援装置が、例えばC言語記述の半導体集積回路の動作記述からRTL記述の半導体集積回路を生成する高位合成ツールである場合について説明する。
図5に示すように、設計支援装置は、演算器ライブラリ生成部41、データフロー図作成部42、Cソースコード入力部43、合成制御部44、スケジューリング部45、リタイミング部46及びRTL出力部47を有していてもよい。データフロー図作成部42は、作成部の一例である。スケジューリング部45は、分割部の一例である。リタイミング部46は、削除部の一例である。
演算器ライブラリ生成部41は、演算器ライブラリ生成処理を行う。演算器ライブラリ生成処理において、演算器ライブラリ生成部41は、合成仕様書48に基づいて各演算器のライブラリを作成する。合成仕様書48には、合成する制約が記述されている。例えば合成仕様書48には、作成する半導体集積回路に適用されるテクノロジ及び周波数の制約条件などの仕様が指示されていてもよい。
適用されるテクノロジによって、例えば配線幅が決まる。配線幅によって、ゲート遅延値、面積または消費電力が決まることがある。作成されるライブラリには、各演算器の遅延値及び面積の情報が含まれていてもよい。例えば、高位合成ツールは、各演算器に該当するRTL記述のサンプルを有している。論理合成ツールを用いてRTL記述のサンプルを論理合成することによって、各演算器の遅延値及び面積の情報が得られる。
Cソースコード入力部43は、RTL記述の半導体集積回路を生成するためのCコードの仕様書49から作成されるCソースコードを入力する。半導体集積回路の設計者が、RTL記述の半導体集積回路を生成するためのCコードの仕様書49から、Cソースコード入力部43が入力するCソースコードを作成してもよい。
データフロー図作成部42は、データフロー図作成処理を行う。データフロー図作成処理において、データフロー図作成部42は、演算器ライブラリ生成部41により生成される演算器を用いて、Cソースコード入力部43により入力されるCソースコードに基づいてデータフロー図を作成する。データフロー図作成部42は、データフロー図に基づいてデータの計算処理を解析し、その解析結果に基づいてクロック境界を仮に設定する。例えば、クロック境界は、演算器の入力または出力ごとに設定されてもよい。
スケジューリング部45は、スケジューリング処理を行う。スケジューリング処理において、スケジューリング部45は、データフロー図作成部42により作成されるデータフロー図に示される演算器の論理を分割する。スケジューリング部45は、演算器の遅延値が周波数の制約条件を満たさないか、または演算器の一つの出力端子に対する入力端子の数が閾値以下とならない場合に、演算器の論理を分割する。周波数の制約条件からは周期が導かれる。
閾値は、ATPG処理の処理能力に基づいて決定される。例えば、閾値は、ATPG処理の処理能力を超えない範囲で、演算器の一つの出力端子に対する入力端子の数の最大値であってもよい。ATPG処理によって生成されるテストパターンの数は、論理の入力端子数に依存する。そのため、演算器の一つの出力端子に対する入力端子の数が多くなると、生成するテストパターンの数が増えてしまい、テストパターンを生成する際の負荷がATPG処理の処理能力を超えてしまう虞がある。
そこで、半導体集積回路の故障検出用のテストパターンを生成する際には、演算器の一つの出力端子に対する入力端子の数をATPG処理の処理能力内に収まるように設定するのが望ましい。従って、スケジューリング処理において、スケジューリング部45は、演算器の遅延値が周期を満たすとともに、演算器の一つの出力端子に対する入力端子の数がATPG処理の処理能力内に収まるように、演算器の論理を分割する。
リタイミング部46は、リタイミング処理を行う。リタイミング処理において、リタイミング部46は、データフロー図作成部42により作成されるデータフロー図において連続する複数の演算器の遅延値の和が周波数の制約条件を満たす場合に、演算器間のフリップフロップを削除する。ここで、連続する複数の演算器とは、前段の演算器の出力信号が後段の演算器の入力信号となるような接続関係を有する演算器群のことである。
連続する複数の演算器間のフリップフロップが削除されると、連続する複数の演算器はマージされる。つまり、リタイミング部46は、連続する複数の演算器の遅延値の和が周波数の制約条件を満たす場合に、連続する複数の演算器をマージする。
ただし、マージによって一まとめにされる演算器群の出力端子に対する入力端子の数が上述する閾値を超えることがある。演算器群の出力端子に対する入力端子の数が閾値を超えてしまうと、テストパターンを生成する際の負荷がATPG処理の処理能力を超えてしまう虞がある。
そこで、リタイミング部46は、連続する複数の演算器の遅延値の和が周期を満たす場合でも、マージによって一まとめにされる演算器群の出力端子に対する入力端子の数が閾値以下とならない場合には、マージしない。従って、リタイミング処理において、リタイミング部46は、連続する複数の演算器の遅延値の和が周期を満たす場合、マージによって一まとめにされる演算器群の出力端子に対する入力端子の数がATPG処理の処理能力内に収まるように、演算器のマージを行う。
合成制御部44は、合成仕様書48に基づいて、スケジューリング部45及びリタイミング部46における各処理を制御する。RTL出力部47は、スケジューリング部45による論理の分割処理及びリタイミング部46による演算器のマージ処理の実施によって生成されるRTL記述の半導体集積回路を出力する。
図5に示す各部41〜47は、例えば図1に示す設計支援装置の記憶部に記憶された当該各部41〜47の機能に関するプログラムをCPUに実行させることにより、または、入力や出力のインターフェースにより、実現されてもよい。なお、コンピュータ本体1は、各部41〜47の機能に関するプログラムをネットワーク4から取得してCPUにより実行してもよい。
また、合成仕様書48及びCコードの仕様書49は、例えば図1に示す設計支援装置の記憶部に保持されてもよい。また、図5に示す各部41〜47からの出力データは、例えば図1に示す設計支援装置の記憶部に保持されてもよい。
・設計支援方法の別の例
図6は、実施の形態にかかる設計支援方法の別の例を示す図である。図6に示す設計支援方法は、例えば図5に示す設計支援装置がC言語記述の半導体集積回路の動作記述からRTL記述の半導体集積回路を生成する高位合成ツールであり、この高位合成ツールにより実施されるとする。
図6に示すように、高位合成処理が開始されると、まず、演算器ライブラリ生成部41によって演算器ライブラリ生成処理が行われる(ステップS21)。演算器ライブラリ生成処理が行われると、各演算器のライブラリ33が作成される。
次いで、データフロー図作成部42によってデータフロー図作成処理が行われる(ステップS22)。データフロー図作成処理が行われると、各演算器のライブラリ33及びCソースコード34に基づいてデータフロー図が作成される。
次いで、スケジューリング部45によってスケジューリング処理が行われる(ステップS23)。スケジューリング処理が行われると、演算器の遅延値が周期を満たす場合に、演算器の一つの出力端子に対する入力端子の数が、ATPG処理の処理能力内に収まるように、演算器の論理が分割される。
次いで、リタイミング部46によってリタイミング処理が行われる(ステップS24)。リタイミング処理が行われると、連続する複数の演算器の遅延値の和が周期を満たす場合に、マージによって一まとめにされる演算器群の出力端子に対する入力端子の数がATPG処理の処理能力内に収まるように、演算器がマージされる。リタイミング処理が終わると、RTL記述の半導体集積回路31が出力され、一連の処理が終了する。
・データフロー図の一例
図7は、Cコードで記述されているデザインの一例を示す図である。図7に示すデザイン51には、例えば整数型変数aと整数型変数bとを乗算し、その結果に整数型変数cを足し、その結果を2倍した値を整数型変数zとして出力することが記述されている。
図8は、図7に示すデザインに対応するデータフロー図を示す図である。図8に示すデータフロー図52において、「*」は乗算器53,55を表し、「+」は加算器54を表す。各演算器53,54,55の入力端子及び出力端子には、フリップフロップ56〜62が接続される。
前段の乗算器53の2つの入力端子にそれぞれ接続されるフリップフロップ56,57を通る破線は、クロック境界63を表す。前段の乗算器53の出力端子すなわち加算器54の一方の入力端子、及び加算器54の他方の入力端子、にそれぞれ接続されるフリップフロップ58,59を通る破線は、クロック境界64を表す。
加算器54の出力端子すなわち後段の乗算器55の一方の入力端子、及び後段の乗算器55の他方の入力端子、にそれぞれ接続されるフリップフロップ60,61を通る破線は、クロック境界65を表す。後段の乗算器55の出力端子に接続されるフリップフロップ62を通る破線は、クロック境界66を表す。隣り合うクロック境界間での信号の遅延値は、周波数の制約条件から導かれる周期を満たすのが望ましい。
・スケジューリング処理の一例
図9は、図6に示すフローチャートにおけるスケジューリング処理の一例を示す図である。図9に示すように、スケジューリング部45によってスケジューリング処理が開始されると、まず、周波数の制約条件から周期が計算される。また、各演算器のライブラリ33の各演算器の遅延値の最大値が算出される(ステップS31)。
次いで、演算器が割り当てられる(ステップS32)。次いで、割り当てられる演算器の遅延値が周期以下でない場合(ステップS33:No)、遅延値が周期を超える演算器の論理が分割される(ステップS34)。そして、ステップS33へ戻り、演算器の遅延値が周期以下となるまで演算器の論理が分割される(ステップS33:No、ステップS34)。
演算器の遅延値が周期以下である場合(ステップS33:Yes)、フリップフロップ間の演算器、すなわちクロック境界間の演算器において、演算器の各出力端子に関与する入力端子の数が計算される(ステップS35)。固定値が入力される入力端子は、出力端子に関与する入力端子として数えられない。演算器の一つの出力端子に関与する入力端子の数が閾値以下である場合(ステップS36:Yes)、一連の処理が終了する。演算器の一つの出力端子に関与する入力端子の数が閾値以下であれば、ATPG処理の際に処理能力を超えることはない。
演算器の一つの出力端子に関与する入力端子の数が閾値以下でない場合(ステップS36:No)、出力端子に関与する入力端子の数が閾値以下となるように、出力端子に関与する入力端子の数が閾値を超える演算器の論理が分割される(ステップS37)。そして、一連の処理が終了する。図9に示すフローチャートの処理は、全ての演算器に対して行われる。
・論理の分割の一例
図10は、スケジューリング処理における論理の分割の一例を示す図である。例えば図8に示す前段の乗算器53の遅延値が周期を超えてしまう場合、図10に示すように、前段の乗算器53を「*_0」で示す乗算器67及び「*_1」で示す乗算器68に分割してもよい。「*_0」で示す乗算器67及び「*_1」で示す乗算器68の各遅延値は、いずれも周期以下である。
「*_0」で示す乗算器67の2つの出力端子と「*_1」で示す乗算器68の2つの入力端子との間には、フリップフロップ69,70が挿入される。フリップフロップ69,70を通る破線は、クロック境界71を表す。このように論理を分割してクロック境界71を設定することによって、周波数の制約条件を満たすことができる。あるいは、前段の乗算器53の代わりに、前段の乗算器53よりも小さくて、周波数の制約条件を満たす演算器を用いてもよい。
・論理の分割の別の例
図11は、論理の分割前の乗算器の一例を示す図である。図12は、図11に示す乗算器に対して論理の分割後の一例を示す図である。図11に示す乗算器81は、4ビット×4ビットの乗算器である。例えばATPG処理において、演算器の一つの出力端子に関与する入力端子の数が6本以内であれば、処理可能であるとする。つまり、閾値が6であるとする。
この場合、図11に示す4ビット×4ビットの乗算器81の論理が、図12に示すように、4ビット×2ビットの乗算器82、4ビット×2ビットの乗算器83、2ビットシフタ84及び8ビット+8ビットの加算器85に分割されてもよい。図12に示す例では、被乗数A[3:0]と乗数B[3:0]との掛け算について、乗算器82,83によって乗数B[3:0]の上位2ビットB[3:2]及び下位2ビットB[1:0]にそれぞれ被乗数A[3:0]が掛け合わされる。
そして、A[3:0]×B[3:2]の結果が2ビットシフタ84によって2ビットシフトされて、加算器85によってA[3:0]×B[1:0]の結果に足し合わされる。このように乗算器の論理を分割することによって、図11に示す4ビット×4ビットの乗算器81の入力端子数が8本であるのに対して、図12に示す4ビット×2ビットの2つの乗算器82,83のそれぞれの入力端子数を6本、すなわちATPG処理の処理能力内に収めることができる。
・論理の分割の別の例
図13は、スケジューリング処理における論理の分割の別の例を示す図である。図13に示すように、スケジューリング部45によってスケジューリング処理が開始されると、まず、任意の1本の出力端子が選択される(ステップS41)。そして、選択されている出力端子へ信号を出力するゲートまたはブロックが着目される(ステップS42)。
着目されているゲートまたはブロックの入力端子の数が計算される(ステップS43)。着目されているゲートまたはブロックの入力端子の数が閾値以下である場合(ステップS44:Yes)、着目されているゲートまたはブロックの全ての入力端子について、それぞれの入力端子へ信号を与える前段のゲートまたはブロックが新たに着目される。入力端子へ信号を与える前段のゲートがフリップフロップである場合、そのフリップフロップに接続される入力端子は、そこで終わりとされる(ステップS45)。
そして、ステップS43へ戻り、新たに着目されているゲートまたはブロックの入力端子の数を含むように、入力端子の数が再計算される(ステップS43)。再計算により得られる入力端子の数が閾値以下でなくなるまで、ゲートまたはブロックを遡り、新たに着目されているゲートまたはブロックの入力端子の数を含むように、入力端子の数が再計算される(ステップS44:Yes、ステップS45、ステップS43)。
入力端子の数が閾値以下でなくなると(ステップS44:No)、その時点で着目されているゲートまたはブロックの全ての出力端子にフリップフロップが追加される(ステップS46)。そして、全ての出力端子についてステップS41〜ステップS46の処理が終わるまで、ステップS41へ戻り、ステップS41〜ステップS47を繰り返す(ステップS47:No、ステップS41〜ステップS47)。全ての出力端子についてステップS41〜ステップS46の処理が終了すると(ステップS47:Yes)、一連の処理が終了する。
図14は、図13に示すフローチャートに従って論理を分割する例を示す図である。図13に示すフローチャートの処理について、図14に示す例を用いて説明する。閾値は6であるとする。
図14に示す例では、後段のゲートまたはブロック91の出力端子をOut1と表し、入力端子をIn1〜In5と表すことにする。一方の前段のゲートまたはブロック92の出力端子をOut11と表し、入力端子をIn11〜In15と表すことにする。他方の前段のゲートまたはブロック93の出力端子をOut21と表し、入力端子をIn21〜In25と表すことにする。また、論理の分割前には、フリップフロップ95,96は挿入されていない。
図13のステップS41において、後段のゲートまたはブロック91の出力端子Out1が選択されるとする。ステップS42では、この後段のゲートまたはブロック91の出力端子Out1へ信号を出力するゲートまたはブロックとして、後段のゲートまたはブロック91が着目される。
ステップS43では、後段のゲートまたはブロック91の入力端子の数が計算される。後段のゲートまたはブロック91の入力端子の数は5本である。従って、後段のゲートまたはブロック91の入力端子の数は、閾値以下である。ステップS45へ進み、後段のゲートまたはブロック91の全ての入力端子In1〜In5について、それぞれの入力端子へ信号を与える前段のゲートまたはブロックが新たに着目される。
後段のゲートまたはブロック91の入力端子In1は、フリップフロップ94に接続されている。従って、それ以上遡らずに、後段のゲートまたはブロック91の入力端子In1は、そこで終わりである。
後段のゲートまたはブロック91の入力端子In2は、一方の前段のゲートまたはブロック92の出力端子をOut11に接続されている。つまり、一方の前段のゲートまたはブロック92から出力される信号は、後段のゲートまたはブロック91の入力端子In2をドライブし、後段のゲートまたはブロック91の出力端子Out1から出力される信号に影響を及ぼす。
従って、ステップS43で、再度、入力端子の数を計算する際に、後段のゲートまたはブロック91の入力端子In2の代わりに、一方の前段のゲートまたはブロック92の5本の入力端子In11〜In15が数えられる。従って、後段のゲートまたはブロック91の出力端子Out1への出力信号に関与する入力端子の数は9本となり、閾値を超えてしまう。
そのため、ステップS46へ進み、一方の前段のゲートまたはブロック92の出力端子Out11にフリップフロップ95が追加される。後段のゲートまたはブロック91の入力端子In2と一方の前段のゲートまたはブロック92の出力端子Out11との間にフリップフロップ95が挿入されることによって、後段のゲートまたはブロック91の入力端子In2については、それ以上遡らずに、そこで終わりである。従って、後段のゲートまたはブロック91と一方の前段のゲートまたはブロック92とが分割される。
後段のゲートまたはブロック91の入力端子In3についても同様である、入力端子の数として、後段のゲートまたはブロック91の入力端子In3の代わりに、他方の前段のゲートまたはブロック93の5本の入力端子In21〜In25が数えられる。従って、後段のゲートまたはブロック91の出力端子Out1への出力信号に関与する入力端子の数は9本となる。
そのため、他方の前段のゲートまたはブロック93の出力端子Out21にフリップフロップ96が追加される。後段のゲートまたはブロック91の入力端子In3と他方の前段のゲートまたはブロック93の出力端子Out21との間にフリップフロップ96が挿入されることによって、後段のゲートまたはブロック91の入力端子In3については、それ以上遡らずに、そこで終わりである。従って、後段のゲートまたはブロック91と他方の前段のゲートまたはブロック93とが分割される。
このようにフリップフロップ95,96の追加によって論理を分割することによって、後段のゲートまたはブロック91の出力端子Out1から出力される信号に関与する入力端子の数が閾値以内に抑えられる。
図15は、論理の分割前の加算器の一例を示す図である。図16は、図15に示す加算器に対して論理の分割後の一例を示す図である。図15に示す加算器は、8ビット+8ビットの加算器である。閾値は6であるとする。
図15に示すように、8ビット+8ビットの加算器101は、同じビット位置の値同士を加算する8つの加算部102〜109を有する。下位ビット同士の加算を行う加算部のキャリー出力端子Coutは、上位ビット同士の加算を行う加算部のキャリー入力端子Cinに接続されている。
最上位ビット同士の加算部の符号を102とし、下位ビット同士の加算部の符号を最上位ビット側から順に103、104、・・・とし、最下位ビット同士の加算部の符号を109とする。論理が分割されていない状態では、ロジックコーン110は1つである。
この場合、図16に示すように、最上位ビット同士の加算を行う加算部102の出力端子s[7]が選択される。この出力端子s[7]から、キャリーを伝搬する信号線を辿って、最上位ビットから3番目のビット同士の加算を行う加算部104まで遡ると、出力端子s[7]から出力される信号に影響を及ぼす入力端子の数が閾値を超えてしまう。従って、最上位ビットから3番目のビット同士の加算を行う加算部104のキャリー出力端子Coutにフリップフロップ111が追加される。
最上位ビットから3番目のビット同士の加算を行う加算部104の出力端子s[5]から、キャリーを伝搬する信号線を辿って、最上位ビットから5番目のビット同士の加算を行う加算部106まで遡ると、出力端子s[5]から出力される信号に影響を及ぼす入力端子の数が閾値を超えてしまう。従って、最上位ビットから5番目のビット同士の加算を行う加算部106のキャリー出力端子Coutにフリップフロップ112が追加される。
最上位ビットから5番目のビット同士の加算を行う加算部106の出力端子s[3]から、キャリーを伝搬する信号線を辿って、最上位ビットから7番目のビット同士の加算を行う加算部108まで遡ると、出力端子s[3]から出力される信号に影響を及ぼす入力端子の数が閾値を超えてしまう。従って、最上位ビットから7番目のビット同士の加算を行う加算部108のキャリー出力端子Coutにフリップフロップ113が追加される。
最上位ビットから7番目のビット同士の加算を行う加算部108の出力端子s[1]から、キャリーを伝搬する信号線を辿って、最下位ビット同士の加算を行う加算部109まで遡ると、出力端子s[1]から出力される信号に影響を及ぼす入力端子の数は4であり、閾値である。従って、最下位ビット同士の加算を行う加算部109のキャリー出力端子Coutにはフリップフロップが追加されない。
このようにフリップフロップ111〜113の追加によって、8ビット+8ビットの加算器101が4つのブロックに分割される。それによって、図15に示すロジックコーン110は、4つのロジックコーン114〜117に分割される。
・リタイミング処理の一例
図17は、図6に示すフローチャートにおけるリタイミング処理の一例を示す図である。図17に示すように、リタイミング部46によってリタイミング処理が開始されると、まず、初期設定が行われる。kを整数とすると、初期設定ではkが1に設定される(ステップS51)。
次いで、入力側からk番目のフリップフロップ間の論理の遅延値と、入力側から[k+1]番目のフリップフロップ間の論理の遅延値との和が計算される(ステップS52)。2つの遅延値の和が周期よりも小さくない場合(ステップS53:No)、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理とがマージされずに、一連の処理が終了する。
2つの遅延値の和が周期よりも小さい場合(ステップS53:Yes)、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理との間のフリップフロップが仮に削除される。それによって、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理とが仮にマージされる(ステップS54)。
次いで、仮のマージによって一まとめにされる論理群の各出力端子に関与する入力端子の数が計算される(ステップS55)。仮のマージによって一まとめにされる論理群の出力端子に関与する入力端子の数が閾値以下である場合(ステップS56:Yes)、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理との間のフリップフロップが削除される。それによって、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理とがマージされる(ステップS57)。
一方、仮のマージによって一まとめにされる論理群の出力端子に関与する入力端子の数が閾値以下でない場合(ステップS56:No)、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理との間のフリップフロップは削除されない。それによって、入力側からk番目のフリップフロップ間の論理と、入力側から[k+1]番目のフリップフロップ間の論理とはマージされない(ステップS58)。
入力側から[k+1]番目のフリップフロップ間の論理が最後のフリップフロップ間の論理でない場合(ステップS59:No)、kの値をインクリメントし(ステップS60)、ステップS52へ戻る。そして、次のフリップフロップ間の論理に対する処理が開始される。
入力側から[k+1]番目のフリップフロップ間の論理が最後のフリップフロップ間の論理になるまで、マージする処理またはマージしない処理が行われる(ステップS59:No、ステップS52〜ステップS60)。入力側から[k+1]番目のフリップフロップ間の論理が最後のフリップフロップ間の論理である場合(ステップS59:Yes)、一連の処理が終了する。
・回路の一例
図18は、図5に示す設計支援装置によって生成される回路の一例を示す図である。図18に示す回路は、図7に示すCコード記述のデザインに対応している。ただし、図18のA、B、C及びZは、図7ではそれぞれa、b、c及びzとなっている。
図18に示す例において、4ビット×2ビットの乗算器121、4ビット×2ビットの乗算器122、2ビットシフタ123及び4つの加算器124〜127によって、4ビットの整数型変数Aと4ビットの整数型変数Bとが乗算される。加算器127の出力端子に接続される4つの加算器128〜131によって、変数Aと変数Bとの乗算結果に整数型変数Cが加算される。加算器131の出力端子に接続される1ビットシフタ132によって、変数Aと変数Bとの乗算結果と変数Cとの加算結果が2倍される。
図18において、破線はクロック境界を示す。図18では、クロック境界上で、各演算器の出力端子に接続されているフリップフロップが省略されている。
図5に示す設計支援装置及び図6に示す設計支援方法によれば、C言語記述の半導体集積回路の動作記述からRTL記述の半導体集積回路を生成する高位合成処理において、演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、演算器及びフリップフロップが配置される。それによって、フリップフロップ間の論理段数が多くなり過ぎるのを回避することができる。従って、ATPG処理によって容易にテストパターンを生成することができる。つまり、可検査性に優れる半導体集積回路を設計することができる。
また、閾値が、ATPG処理の処理能力を超えない範囲で、演算器の一つの出力端子に対する入力端子の数の最大値である場合、フリップフロップ間の論理段数がATPG処理の処理能力の範囲内に収まる。従って、ATPG処理によって容易にテストパターンを生成することが可能な可検査性に優れる半導体集積回路を設計することができる。
また、出力端子に対する入力端子の数が閾値を超える演算器を、入力端子の数よりも少ない数の入力端子を有する複数の演算器に分割することによって、分割後の各演算器の一つの出力端子に対する入力端子の数を閾値以下にすることができる。それによって、フリップフロップ間の論理段数が多くなり過ぎるのを回避することができる。従って、ATPG処理によって容易にテストパターンを生成することが可能な可検査性に優れる半導体集積回路を設計することができる。
また、出力端子に対する入力端子の数が前記閾値を超える演算器を複数段のブロックに分割し、ブロック間にフリップフロップを挿入することによって、各ブロックの出力端子に対する入力端子の数を閾値以下にすることができる。それによって、フリップフロップ間の論理段数が多くなり過ぎるのを回避することができる。従って、ATPG処理によって容易にテストパターンを生成することが可能な可検査性に優れる半導体集積回路を設計することができる。
なお、本実施の形態で説明する設計支援方法は、予め用意されるプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。
また、本実施の形態で説明する設計支援装置は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述する設計支援装置の各機能をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、設計支援装置を製造することができる。
上述した各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)複数の演算器のそれぞれについて信号の入力から出力までに要する時間を示す遅延値の情報を有するライブラリと、コンピュータのプログラミング言語のソースコード及び前記ライブラリに基づいて、前記演算器及びフリップフロップの配置を示すデータフロー図を作成する作成部と、前記遅延値が周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、前記データフロー図の前記演算器の論理を分割する分割部と、連続する複数の前記演算器の前記遅延値の和が前記周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が前記閾値以下となるように、前記データフロー図の前記演算器間のフリップフロップを削除する削除部と、を備えることを特徴とする設計支援装置。
(付記2)前記分割部は、前記入力端子の数が前記閾値を超える前記演算器を、前記入力端子の数よりも少ない数の入力端子を有する第1演算器と、前記入力端子の数よりも少ない数の入力端子を有する第2演算器とに分割することを特徴とする付記1に記載の設計支援装置。
(付記3)前記分割部は、前記入力端子の数が前記閾値を超える前記演算器を、前段のブロックの出力が後段のブロックの入力になるように複数段のブロックに分割し、前記前段のブロックの出力端子と前記後段のブロックの入力端子との間にフリップフロップを挿入することを特徴とする付記1に記載の設計支援装置。
(付記4)前記閾値は、生成される集積回路に対するテストパターンを生成する際の処理能力に基づいて決定されることを特徴とする付記1乃至3のいずれか一項に記載の設計支援装置。
(付記5)C言語で記述される集積回路の動作記述からレジスタトランスファレベルで記述される集積回路を生成することを特徴とする付記1乃至4のいずれか一項に記載の設計支援装置。
(付記6)コンピュータのプログラミング言語のソースコード、及び複数の演算器のそれぞれについて信号の入力から出力までに要する時間を示す遅延値の情報を有するライブラリ、に基づいて、前記演算器及びフリップフロップの配置を示すデータフロー図を作成し、前記遅延値が周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、前記データフロー図の前記演算器の論理を分割し、連続する複数の前記演算器の前記遅延値の和が前記周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が前記閾値以下となるように、前記データフロー図の前記演算器間のフリップフロップを削除することを特徴とする設計支援方法。
(付記7)前記データフロー図の前記演算器の論理を分割する場合、前記入力端子の数が前記閾値を超える前記演算器を、前記入力端子の数よりも少ない数の入力端子を有する第1演算器と、前記入力端子の数よりも少ない数の入力端子を有する第2演算器とに分割することを特徴とする付記6に記載の設計支援方法。
(付記8)前記データフロー図の前記演算器の論理を分割する場合、前記入力端子の数が前記閾値を超える前記演算器を、前段のブロックの出力が後段のブロックの入力になるように複数段のブロックに分割し、前記前段のブロックの出力端子と前記後段のブロックの入力端子との間にフリップフロップを挿入することを特徴とする付記6に記載の設計支援方法。
(付記9)前記閾値は、生成される集積回路に対するテストパターンを生成する際の処理能力に基づいて決定されることを特徴とする付記6乃至8のいずれか一項に記載の設計支援方法。
(付記10)C言語で記述される集積回路の動作記述からレジスタトランスファレベルで記述される集積回路を生成することを特徴とする付記6乃至9のいずれか一項に記載の設計支援方法。
(付記11)コンピュータのプログラミング言語のソースコード、及び複数の演算器のそれぞれについて信号の入力から出力までに要する時間を示す遅延値の情報を有するライブラリ、に基づいて、前記演算器及びフリップフロップの配置を示すデータフロー図を作成し、前記遅延値が周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が閾値以下となるように、前記データフロー図の前記演算器の論理を分割し、連続する複数の前記演算器の前記遅延値の和が前記周波数の制約条件を満たすとともに、前記演算器の一つの出力端子に対する入力端子の数が前記閾値以下となるように、前記データフロー図の前記演算器間のフリップフロップを削除する、処理をコンピュータに実行させるプログラム。