(57)【特許請求の範囲】
【請求項１】
デジタル信号処理に用いられる演算器の回路設計方法において、該方法は、
ハードウェア記述言語を用いて所望のデジタル信号処理を実施させるプログラムを記述し、記述したプログラムで回路を設計するコンピュータで該プログラムを作成するプログラム作成工程と、
前記プログラムを作成するコンピュータで、前記プログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブを付加するディレクティブ付加工程と、
前記プログラムを作成するコンピュータで、前記対象演算の出力ビット長を決定するビット長決定工程と、
前記プログラムおよび前記出力ビット長に基づき動作合成する動作合成機能ブロックで、前記所望のデジタル信号処理を実現する回路をレジスタ転送レベル（RTL：Register transfer level）で記述し、前記ディレクティブが付加された対象演算に対してその出力ビット長に関する情報を検出する検出回路を付加して動作を合成し、RTL記述回路を生成するRTL生成工程と、
該RTL記述回路の動作検証するシミュレーション機能ブロックで動作の検証を行い、その動作検証結果として前記検出回路の検出結果を得る動作検証工程とを含み、
さらに、該方法は、前記動作検証工程の後で、前記動作検証結果によって前記RTL記述回路を最適化すべきと判断した場合には、再度、ビット長決定工程および前記RTL生成工程を実行し、
とくに、前記ビット長決定工程は、前記RTL生成工程が前記プログラムに関して初めて前記RTL記述回路を生成する場合には、あらかじめ設定された初期値を前記出力ビット長として決定し、２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項２】
請求項１に記載の回路設計方法において、前記ディレクティブ付加工程は、前記対象演算に対してオーバーフロー検出回路を付加するために、前記ディレクティブとしてオーバーフロー検出ディレクティブを前記プログラムに付加し、
前記RTL生成工程は、前記対象演算に対して、その出力ビット長のオーバーフロー情報を検出するオーバーフロー検出回路を前記検出回路として付加し、
前記動作検証工程は、前記オーバーフロー検出回路が検出するオーバーフロー情報を前記検出結果とし、
前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記オーバーフロー情報に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項３】
請求項２に記載の回路設計方法において、前記ディレクティブ付加工程は、前記オーバーフロー範囲を設定して前記オーバーフロー検出ディレクティブを前記プログラムに付加し、
前記動作検証工程は、前記オーバーフロー検出回路によって、前記対象演算の演算結果のうち、前記オーバーフロー範囲に相当する上位ビットに基づいて前記演算結果がオーバーフローするか否かを判定して、その判定結果を前記オーバーフロー情報とし、
該方法は、前記動作検証工程の後で、前記オーバーフロー情報がオーバーフローすることを示す場合には、前記RTL記述回路を最適化すべきと判断し、再度、前記ビット長決定工程および前記RTL生成工程を実行し、それ以外の場合には、該方法を終了することを特徴とする回路設計方法。
【請求項４】
請求項１に記載の回路設計方法において、前記ディレクティブ付加工程は、前記対象演算に対してビット幅検出回路を付加するために、前記ディレクティブとしてビット幅検出ディレクティブを前記プログラムに付加し、
前記RTL生成工程は、前記対象演算に対して、その出力ビット幅を検出するビット幅検出回路を前記検出回路として付加し、
前記動作検証工程は、前記ビット幅検出回路が検出するビット幅を前記検出結果とし、
前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記ビット幅情報に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項５】
請求項４に記載の回路設計方法において、前記動作検証工程は、前記ビット幅検出回路によって、前記対象演算の演算結果の最上位ビットが０の場合、それ以外のビットのうちで１を示す最上位のビット番号を使用ビット幅とし、また前記対象演算の演算結果の最上位ビットが１の場合、それ以外のビットのうちで０を示す最上位のビット番号を使用ビット幅として前記ビット幅情報とし、
該方法は、前記ビット幅情報が前記対象演算に既に設定されている値よりも大きい場合には、前記RTL記述回路を最適化すべきと判断し、再度、前記ビット長決定工程および前記RTL生成工程を実行し、それ以外の場合には、該方法を終了することを特徴とする回路設計方法。
【請求項６】
請求項１に記載の回路設計方法において、前記RTL生成工程は、前記対象演算に対して付加する前記検出回路の前記検出結果を保持するステータスレジスタを前記検出回路に対して付加し、
前記動作検証工程は、前記検出結果を前記ステータスレジスタに格納し、
前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記検出結果を前記ステータスレジスタから得て、該検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項７】
請求項１に記載の回路設計方法において、前記動作検証工程は、デバッグ機能を有して前記検出結果を標準出力し、
前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記検出結果を前記標準出力から得て、該検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項８】
請求項１に記載の回路設計方法において、前記RTL生成工程は、前記ステータスレジスタから割り込み信号を出力するように前記RTL記述回路を生成し、
前記動作検証工程は、前記検出結果を前記ステータスレジスタに格納し、
前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路に関する前記検出結果を前記ステータスレジスタからの割り込み信号によって得て、該検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項９】
請求項１に記載の回路設計方法において、該方法は、前記RTL生成工程が前記プログラムおける前記ディレクティブとは無関係に第２の検出回路を組み込んでRTL記述回路を生成するときに、前記動作検証工程が第２の検出回路による第２の検出結果を得ると、前記ビット長決定工程は、前記RTL生成工程が２回目以降に前記RTL記述回路を生成する場合には、前記検出結果および第２の検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする回路設計方法。
【請求項１０】
請求項１に記載の回路設計方法において、前記動作検証工程は、回路シミュレータによって前記RTL記述回路の動作検証を行うことを特徴とする回路設計方法。
【請求項１１】
請求項１に記載の回路設計方法において、前記動作検証工程は、前記RTL記述回路をFPGA（Field Programmable Gate Array）などのプログラマブル論理回路に書き込んで該論理回路の動作検証を行うことを特徴とする回路設計方法。
【請求項１２】
請求項１に記載の回路設計方法において、該方法は、前記動作検証結果によって前記RTL記述回路の最適化の必要がないと判断した場合には、前記プログラムから前記ディレクティブを外して、前記ビット長決定工程および前記RTL生成工程を実行し、前記検出回路を外した前記RTL記述回路を生成することを特徴とする回路設計方法。
【請求項１３】
所望のデジタル信号処理を示すプログラムに基づいてRTL記述回路を生成する回路設計フローによって設計されて、前記RTL記述回路を用いて製造される集積回路において、該回路は、
前記回路設計フローにおいて、前記プログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブを付加した前記プログラムを使用し、少なくとも該プログラムに基づいて動作合成を行って前記所望のデジタル信号処理を実現する回路をRTLで記述する際に、前記ディレクティブが付加された対象演算に対してその出力ビット長に関する情報を検出する検出回路を付加して前記RTL記述回路を生成し、該RTL記述回路を動作検証してその動作検証結果として前記検出回路の検出結果を得て、前記動作検証結果によって前記RTL記述回路を最適化すべきと判断した場合に、前記検出結果に基づいて対象演算の出力ビット長を最適化して再度、前記RTL記述回路を生成して、各演算の出力ビット長が最適化されるまで前記RTL記述回路の生成を繰り返して最適化されたRTL記述回路を得て、
該最適化されたRTL記述回路を用いて製造されることを特徴とする集積回路。
【請求項１４】
コンピュータを、所望のデジタル信号処理を示すプログラムに基づいて動作合成を行ってRTL（Register transfer level）記述回路を生成する手段として機能させるための動作合成ツールにおいて、該ツールは、
前記プログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブが付加された前記プログラムを入力し、
各演算の出力ビット長を決定するビット長決定手段と、
前記プログラムおよび前記出力ビット長に基づいて、前記所望のデジタル信号処理を実現する回路をRTLで記述し、前記ディレクティブが付加された対象演算に対して、その出力ビット長に関する情報を検出する検出回路を付加して、前記RTL記述回路を生成するRTL生成手段とを含み、
さらに、該ツールは、前記RTL記述回路の動作検証結果を得ると、前記動作検証結果によって前記RTL記述回路を最適化すべきと判断した場合には、再度、前記ビット長決定手段および前記RTL生成手段を実行し、
とくに、前記ビット長決定手段は、前記RTL生成手段が前記プログラムに関して初めて前記RTL記述回路を生成する場合には、あらかじめ設定された初期値を前記出力ビット長として決定し、２回目以降に前記RTL記述回路を生成する場合には、前回生成したRTL記述回路における前記検出回路による検出結果を前記動作検証結果として得て、前記検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする動作合成ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル信号処理に用いられる演算器の回路設計方法、ならびにその方法により製造される集積回路に関するものである。
【背景技術】
【０００２】
従来から、回路設計方法では、ハードウエア記述言語（HDL：Hardware Description Language）により回路を記述する際に、所定の機能を実現するソフトウエアプログラムに基づいてレジスタ転送レベル（RTL：Register transfer level）で回路を記述する動作合成ツールが用いられている。たとえば動作合成ツールは、PC上で動作するMPEGなどの動画像の圧縮技術を示すプログラムに対して動作合成を実行し、短期間にRTL記述を生成することができる。
【０００３】
動画像圧縮などのデジタル信号処理をソフトウエアプログラムで行う場合、このような動作合成ツールは、８ビット、16ビット、32ビットまたは64ビットなどのバイト単位のデータを取り扱うこととなるが、実際に必要なビット数とは異なるビット数のデータを取り扱うことがある。したがって、このソフトウエアプログラムをそのまま動作合成すると、必要以上に大きなビット幅の演算器が多数生成されることになり、回路規模が大きくなってしまう。
【０００４】
このため、従来の回路設計方法では、個々の演算の入力データレンジをあらかじめ調べて、最小限必要なビットを指定して動作合成を実行していた。
【０００５】
たとえば、従来の回路設計フローでは、まず、所望の回路設計を示すソフトウエアプログラムに基づいて、各演算器のビット長を決定し、さらにそのソフトウエアプログラムおよび決定したビット長に基づいて動作合成を行い、RTL記述回路を生成する。つぎに、生成したRTL記述回路の動作検証を行い、この動作解析結果に基づいて各演算器のビット長を最適化し、再度、ソフトウエアプログラムおよび最適化したビット長に基づいて動作合成を行うことにより、最適化されたRTL記述回路を生成することができる。
【０００６】
また、特許文献１に記載の論理合成用記述変換方法は、HDLによる機能的かつ論理的なレベルでの記述設計に関して、熟練した技術者でなくても容易に高品質な大規模集積回路（LSI：Large Scale Integration）を設計することを課題とするもので、定数と変数との乗算にて記載された部分を加算とシフト演算とで表された記述に置き換え、また、代入文解析部にて、代入文の左辺と右辺とのビット幅を比較し、異なる場合には小さい方のビット幅を広げ、広げた部分に０を代入している。
【特許文献１】特開平6-301741号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の回路設計方法では、ソフトウエアプログラムをそのまま動作合成しても、冗長な回路が生成されて、回路規模および消費電力を増大させることとなる。このような設計方法により製造される回路の商品化を考慮する場合、回路最小化および低消費電力化を図る必要があり、たとえば演算器入力のデータレンジに応じて演算器出力のビット長を最適に指定して高速動作を図ることがある。
【０００８】
動画像圧縮などのデジタル信号処理では、非常に多くの演算を使用するので、従来の回路設計方法では、すべての演算に対して出力ビット長の調査および最適なビット長の指定をするときに非常に時間がかかる。また、デジタル信号処理のアルゴリズムを熟知していないと誤ったビット長を指定してしまうこともある。さらに、このように非常に多くの演算を使用する回路の検証を行うには膨大な暗間が必要とされる。また、特定の演算がオーバーフローしてしまった場合、その箇所を特定することは困難である。
【０００９】
ここで、オーバーフローとは、数値演算を行なった結果が、扱える数値の最大値を超えること、たとえば桁あふれを意味する。
【００１０】
したがって、従来の回路設計方法では、動作合成ツールを用いることにより短期間で設計を行えるという有利な効果が軽減されてしまう。
【００１１】
本発明は、このような従来技術の欠点を解消し、必要最小限の回路を、各演算器をオーバーフローさせないで設計し、またその回路の動作検証を効率的に行うことができる回路設計方法、ならびにその方法により製造される集積回路を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は上述の課題を解決するために、デジタル信号処理に用いられる演算器の回路設計方法は、所望のデジタル信号処理を示すプログラムを作成するプログラム作成工程と、このプログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブを付加するディレクティブ付加工程と、各演算の出力ビット長を決定するビット長決定工程と、このプログラムおよびこの出力ビット長に基づいて動作合成を行い、この所望のデジタル信号処理を実現する回路をRTLで記述し、このディレクティブが付加された演算に対してその出力ビット長に関する情報を検出する検出回路を付加して、RTL記述回路を生成するRTL生成工程と、このRTL記述回路の動作検証を行い、その動作検証結果としてこの検出回路の検出結果を得る動作検証工程とを含み、さらに、この方法は、この動作検証工程の後で、この動作検証結果によってこのRTL記述回路を最適化すべきと判断した場合には、再度、このビット長決定工程およびこのRTL生成工程を実行し、とくに、このビット長決定工程は、このRTL生成工程がこのプログラムに関して初めてこのRTL記述回路を生成する場合には、あらかじめ設定された初期値をこの出力ビット長として決定し、２回目以降にこのRTL記述回路を生成する場合には、前回生成したRTL記述回路に関するこの検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする。
【００１３】
また、所望のデジタル信号処理を示すプログラムに基づいてRTL記述回路を生成する回路設計フローによって設計されて、このRTL記述回路を用いて製造される集積回路は、この回路設計フローにおいて、このプログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブを付加したこのプログラムを使用し、少なくともこのプログラムに基づいて動作合成を行ってこの所望のデジタル信号処理を実現する回路をRTLで記述する際に、このディレクティブが付加された対象演算に対してその出力ビット長に関する情報を検出する検出回路を付加してこのRTL記述回路を生成し、このRTL記述回路を動作検証してその動作検証結果としてこの検出回路の検出結果を得て、この動作検証結果によってこのRTL記述回路を最適化すべきと判断した場合に、この検出結果に基づいて対象演算の出力ビット長を最適化して再度、このRTL記述回路を生成して、各演算の出力ビット長が最適化されるまでこのRTL記述回路の生成を繰り返して最適化されたRTL記述回路を得て、この最適化されたRTL記述回路を用いて製造されることを特徴とする。
【００１４】
さらに、所望のデジタル信号処理を示すプログラムに基づいて動作合成を行ってRTL記述回路を生成する動作合成ツールは、このプログラムにおける各演算のうち、演算結果のオーバーフロー判定を所望する対象演算に対してディレクティブが付加されたこのプログラムを入力し、各演算の出力ビット長を決定するビット長決定手段と、このプログラムおよびこの出力ビット長に基づいて、この所望のデジタル信号処理を実現する回路をRTLで記述し、このディレクティブが付加された対象演算に対して、その出力ビット長に関する情報を検出する検出回路を付加して、このRTL記述回路を生成するRTL生成手段とを含み、さらに、このツールは、このRTL記述回路の動作検証結果を得ると、この動作検証結果によってこのRTL記述回路を最適化すべきと判断した場合には、再度、このビット長決定手段およびこのRTL生成手段を実行し、とくに、このビット長決定手段は、このRTL生成手段がこのプログラムに関して初めてこのRTL記述回路を生成する場合には、あらかじめ設定された初期値をこの出力ビット長として決定し、２回目以降にこのRTL記述回路を生成する場合には、前回生成したRTL記述回路におけるこの検出回路による検出結果をこの動作検証結果として得て、この検出結果に基づいて各演算の出力ビット長を最適化して決定することを特徴とする。
【発明の効果】
【００１５】
本発明の回路設計方法によれば、所望のデジタル信号処理を示すプログラムを作成する際に、その信号処理の各演算のうちで、オーバーフロー判定が必要な対象演算に対してディレクティブを付加してプログラミングし、このプログラムに基づいてRTL記述回路を生成する際に、ディレクティブが付加された演算に対してオーバーフロー検出回路を付加し、またこのように生成されたRTL記述回路を動作検証してオーバーフロー検出回路の検出結果を得るので、容易にオーバーフローの発生箇所を特定することすることができ、また、オーバーフローの発生の有無を調べることによって、各演算の出力ビット幅が十分であるかを知ることができる。
【００１６】
また、本発明の回路設計方法では、動作検証結果に基づいて再度、RTL記述回路を生成する際に、オーバーフロー検出結果に基づいて対象演算の出力ビット長を最適化することにより、必要最小限の回路を、各演算器をオーバーフローさせないで設計し、またその回路の動作検証を効率的に行うことができる。
【００１７】
さらに、本発明の回路設計方法では、FPGAなどのプログラマブル論理回路にRTL記述回路を書き込んで高速に動作検証することができるので、各演算に必要なデータ幅を知るための検証を効率的に行うことができ、また大量のデータを検証に用いることができる。
【００１８】
また、本発明の回路設計方法では、各演算がオーバーフローしない動作検証結果が得られれば、オーパーフローの検出回路の付加を指示するディレクティブをプログラムから外してRTL記述回路を生成することにより、オーバーフロー検出回路を余分に付加することなく、このRTL記述回路に基づいて集積回路を製造することができる。
【発明を実施するための最良の形態】
【００１９】
次に添付図面を参照して、本発明による回路設計方法の実施例を詳細に説明する。たとえば、本方法によれば、図２に示すように、所望の機能を実現するソフトウエアプログラム12に基づいて、動作合成ツール14がその所望の機能を実現する回路をRTLで記述して、このRTL回路をシミュレーション部16が動作検証し、さらに動作合成ツール14が、その検証結果に基づいて各演算器におけるビット幅を最適化してRTL回路を再度生成する。本発明ではとくに、動作合成ツール14がオーバーフロー検出回路を付加してRTL回路を生成し、シミュレーション部16の動作検証結果としてオーバーフロー情報を得て、動作合成ツール14がこのオーバーフロー情報に基づいて各演算器におけるビット幅を最適化する。なお、本発明の理解に直接関係のない部分は、図示を省略し、冗長な説明を避ける。
【００２０】
このソフトウエアプログラム12は、所定のデジタル信号処理を示すプログラムで、たとえば、PC上で動作するMPEGなどの動画像の圧縮技術に関するプログラムがある。このプログラム12は、たとえば、設計者によりPC上で生成されて、ハードディスクやメモリなどの記憶媒体に記憶され、または取り外し可能な他の記録媒体に記録されてよい。
【００２１】
このプログラム12は、デジタル信号処理に関する多数の演算を含むもので、本発明ではとくに、オーバーフローを判定すべき演算についてディレクティブが付加されて形成される。たとえば、図３に示すように、プログラム12は、オーバーフローを判定すべき演算20について、ディレクティブ22として“// alu_plus_ovf_range n”が記述される。また、プログラム12は、図３では加算のみが記述されているが、これに限定されず、さまざまな種類の演算を含んでよい。
【００２２】
動作合成ツール14は、回路設計を所望するソフトウエアプログラム12に基づいて、RTLでその回路を記述するもので、プログラム12が示すデジタル信号処理に対して動作合成を実行し、RTL回路120を生成する。動作合成ツール14は、たとえばPC上で動作するアプリケーションなどのソフトウエアでよく、生成したRTL記述回路120をPC上の記憶媒体や取り外し可能な他の記録媒体に記録してよい。
【００２３】
この動作合成ツール14は、たとえば、図３に示すようなプログラム12に基づいて、図４に示すようなRTL回路120を生成する。本発明ではとくに、動作合成ツール14は、プログラム12においてディレクティブ22が付加された対象演算20に対して、オーバーフロー検出回路38を付加してRTL回路120を生成する。また、動作合成ツール14は、オーバーフロー検出回路38の検出結果であるオーバーフロー情報140を格納するステータスレジスタ40を付加してRTL回路120を生成してよい。
【００２４】
このようなディレクティブ22に応じたオーバーフロー検出回路38は、対象演算器34の出力データレジスタ36の値に基づいてオーバーフロー発生の有無を検出し、そのオーバーフローの有無を示すオーバーフロー情報140をステータスレジスタ40に格納する。オーバーフロー検出回路38は、たとえば、オーバーフロー範囲138として上位ｎビットが設定されていれば、出力データレジスタ36の上位ｎビットを判定してオーバーフローを検出する。
【００２５】
また、ディレクティブ22に応じたステータスレジスタ40は、オーバーフロー検出回路38によるオーバーフロー情報140を保持するもので、対象演算器34を識別する識別番号をも保持する。
【００２６】
また、動作合成ツール14は、シミュレーション部16による動作検証結果122のうち、とくにオーバーフロー情報140に基づいて、対象演算20のビット幅を最適化する。動作合成ツール14は、シミュレーション部16による動作検証がまだされていない場合、すなわち、初回の動作合成の場合には、対象演算20のビット幅として、あらかじめ決められた初期値を設定してよい。
【００２７】
シミュレーション部16は、動作合成ツール14が生成したRTL回路120の動作検証を行うもので、たとえば、RTL記述回路120を検証する回路シミュレータなどのPC上で動作するソフトウエアでよく、動作検証結果をPC上の記憶媒体や取り外し可能な他の記録媒体に記録してよい。
【００２８】
本実施例のシミュレーション部16は、ディレクティブ22に応じて生成されたステータスレジスタ40におけるオーバーフロー情報140を用いて動作検証結果122を決定してよい。
【００２９】
次に、本実施例の回路設計方法において、オーバーフロー検出により演算器の出力ビット長を最適化する動作例を図１のフローチャートを参照しながら説明する。
【００３０】
本実施例では、まず、設計者などのユーザは、回路設計を所望するデジタル信号処理についてソフトウエアプログラム12を作成し（S102）、とくにオーバーフロー検出機能を付加する演算についてあらかじめディレクティブ22を付加しておく（S104）。
【００３１】
たとえば図３に示すように、オーバーフローを判定すべき演算、すなわち対象演算20が“C=A+B”で、その演算結果のオーバーフロー範囲138として上位ｎビットを指定する場合には、ディレクティブ22として“// alu_plus_ovf_range n”を対象演算20に付加して記述する。図３では、対象演算20に対する入力値AおよびBのビット長の初期値がそれぞれaおよびbであることを示し、出力値Cのビット長の初期値がcであることを示す。
【００３２】
次に、ユーザは、動作合成ツール14でこのソフトウエアプログラム12の動作合成を開始する。
【００３３】
動作合成ツール14では、まず、プログラム12中の各演算について、演算器出力のビット長の最適化が行われるが（S106）、ここでは初回の動作合成で動作検証結果122がないので、各演算器出力にはあらかじめ決められた初期値のビット長が設定される。
【００３４】
また、動作合成ツール14では、ソフトウエアプログラム12に基づいて動作合成を実行し（S108）、プログラム12中の各演算を演算器として、ステップS106で決められたビット長を用いてRTL回路120が生成される（S110）。
【００３５】
たとえば、図３に示すプログラム12に基づくRTL回路120は、図４に示すように、入力値AおよびBが格納される入力データレジスタ30および32、対象演算20の機能を有する演算器34、ならびに出力値Cが格納される出力データレジスタ36を含むように構成される。
【００３６】
とくに、プログラム12中からディレクティブ22を読み取った場合、そのディレクティブ22が付加された対象演算20に対してオーバーフロー検出回路38およびステータスレジスタ40が付加され、たとえば図４に示すように、この対象演算器34の演算結果を保持するレジスタ36に対してオーバーフロー検出回路38およびステータスレジスタ40が接続されてRTL回路120が生成される。
【００３７】
さらに、ユーザは、シミュレーション部16によって、動作合成ツール14で生成されたRTL回路120の動作検証を実行する（S112）。
【００３８】
この動作検証では、RTL回路120においてディレクティブ22に応じて生成されたオーバーフロー検出回路38は、対象演算器34の出力データレジスタ36の値のオーバーフローの有無を検出し、そのオーバーフローの有無を示すオーバーフロー情報140をステータスレジスタ40に格納する。
【００３９】
たとえば、オーバーフロー検出回路38では、オーバーフロー範囲138としてｎが設定されていれば、出力データレジスタ36の上位ｎビットについてオーバーフローを判定する。ここでは、図５に示すように、レジスタ36の最上位ビットをMSBとし、その次のビットをMSB-1とし、また最下位ビットを０とする。
【００４０】
このとき、図６に示すように、レジスタ36の最上位ビットMSBの値が“０”であるとき、すなわちレジスタ36が正の値を示すとき、オーバーフロー検出回路38は、MSB-1ビットからMSB-n+1ビットの値に“１”が含まれている場合には、オーバーフローが発生したと判定し、それ以外の場合にはオーバーフローが発生しないと判定して、それらのオーバーフローの状態をオーバーフロー情報140としてステータスレジスタ40に格納する。
【００４１】
同様にして、レジスタ36の最上位ビットMSBの値が“１”であるとき、すなわち、レジスタ36が負の値を示すとき、オーバーフロー検出回路38は、MSB-1ビットからMSB-n+1ビットの値に“０”が含まれている場合には、オーバーフローが発生したと判定し、それ以外の場合にはオーバーフローが発生しないと判定して、それらのオーバーフローの状態をオーバーフロー情報140としてステータスレジスタ40に格納する。
【００４２】
このようにして、ユーザは、シミュレーション部16によるRTL回路120のオーバーフロー情報140などの動作検証結果122を作成して保有することができる（S114）。
【００４３】
次に、ユーザは、ステップS114で得た動作検証結果122のオーバーフロー情報140がオーバーフローしていることを示す場合、ステップS106に戻って、この検証結果122を用いて、再度、動作合成ツール14でソフトウエアプログラム12の動作合成を行うことができる。
【００４４】
ここで、動作合成ツール14では、各演算器出力のビット長の最適化が行われ（S106）、とくにオーバーフロー情報140に基づいて、オーバーフローしている演算器の出力ビット長を拡張することができる。
【００４５】
たとえば動作合成ツール14は、オーバーフロー情報140がオーバーフロー発生を示す場合、その対象演算器34の出力データレジスタ36のビット長を現在のビット長＋１ビットに更新する。
【００４６】
このようにして、ユーザは、オーバーフローのない動作検証結果122を得るまでステップS106〜S114を繰り返すと、この回路設計フローを終了して、その時点で得られたRTL回路120がオーバーフローしない演算器で構成されることとなり、ユーザは最適化されたRTL回路120を得ることができる。さらにユーザは、ソフトウエアプログラム12におけるディレクティブ22を外すことにより、余分なオーバーフロー検出回路を付加することなく最終的な回路を生成することができる。
【００４７】
また、本実施例では、シミュレーション部16は、FPGA（Field Programmable Gate Array）などのプログラマブル論理回路による動作検証を行うものでもよく、この場合、ユーザは、動作合成ツール14で生成したRTL記述回路120をプログラマブル論理回路に書き込む。さらに、ユーザは、この論理回路をシミュレーション装置、たとえばシミュレーション部16を有するPCに接続し、ディレクティブ22に応じたステータスレジスタ40を、この装置のCPUと共通するデータバス、または外部から観測可能な接続線に接続して、ステータスレジスタ40におけるオーバーフロー情報140を取得し、動作合成ツール14におけるRTL回路120の再生成に用いることができる。
【００４８】
また、動作合成ツール14は、ディレクティブ22に応じたステータスレジスタ40から割り込み信号を出力するようにRTL回路120を生成することができ、このとき、ユーザは、このRTL記述回路120をプログラマブル論理回路に書き込んで、ステータスレジスタ40の出力をシミュレーション部16のCPUに接続することにより、ステータスレジスタ40におけるオーバーフロー情報140を取得することができる。
【００４９】
本実施例では、動作合成ツール14は、ディレクティブ22に応じたオーバーフロー検出回路38によるオーバーフロー情報140を用いて対象演算器34のビット幅を最適化しているが、ソフトウエアプログラム12においてディレクティブ22とは無関係に組み込まれたオーバーフロー検出回路、すなわち演算器の一部として記述されたオーバーフロー検出回路のオーバーフロー情報を用いて、その検出回路に対応する演算器のビット幅を最適化してもよい。
【００５０】
また、動作合成ツール14は、ステータスレジスタ40を生成する代わりに、ソフトウエアのデバッグ機能を用いてオーバーフロー情報を得てもよく、この場合、シミュレーションによる動作検証結果としてオーバーフロー情報を標準出力し、その出力を演算器ビット幅最適化に用いることができる。
【００５１】
また、本発明の回路設計方法では、動作合成ツール14がビット幅検出回路を付加してRTL回路を生成し、シミュレーション部16の動作検証結果としてビット幅情報を得て、動作合成ツール14がこのビット幅情報に基づいて各演算器におけるビット幅を最適化することができる。
【００５２】
この方法において、ソフトウエアプログラム12は、ビット幅を判定すべき演算についてディレクティブが付加されて形成される。たとえば、図８に示すように、プログラム12は、ビット幅を判定すべき演算20について、ディレクティブ202として“// alu_plus_detect_range”が記述される。また、プログラム12は、図８では加算のみが記述されているが、これに限定されず、さまざまな種類の演算を含んでよい。
【００５３】
また、動作合成ツール14は、たとえば、図８に示すようなプログラム12に基づいて、図９に示すようなRTL回路210を生成する。この動作合成ツール14は、プログラム12においてディレクティブ202が付加された対象演算20に対して、ビット幅検出回路212を付加してRTL回路210を生成する。また、動作合成ツール14は、ビット幅検出回路212の検出結果であるビット幅情報222を格納するステータスレジスタ214を付加してRTL回路210を生成してよい。
【００５４】
このようなディレクティブ202に応じたビット幅検出回路212は、対象演算器34の出力データレジスタ36の値に基づいて最大ビット幅を検出し、その検出結果であるビット幅情報222に基づいて、対応するステータスレジスタ214を更新する。
【００５５】
ディレクティブ202に応じたステータスレジスタ214は、対象演算器34の出力データレジスタ36のビット長を保持するもので、対象演算器34を識別する識別番号をも保持する。このステータスレジスタ214は、ビット幅検出回路212によるビット幅情報222に応じて値を更新し、たとえば、このビット幅情報222が、レジスタ214に現在保持されている値よりも大きい場合に、ビット幅情報222へと更新する。また、ステータスレジスタ214は、対象演算器34の出力データレジスタ36のビット長の初期値をあらかじめ保持してよい。
【００５６】
また、動作合成ツール14は、シミュレーション部16による動作検証結果122のうちビット幅情報224に基づいて、対象演算20のビット幅を最適化する。動作合成ツール14は、初回の動作合成の場合には、対象演算20のビット幅として、あらかじめ決められた初期値を設定してよい。
【００５７】
また、シミュレーション部16は、ディレクティブに応じて生成されたステータスレジスタ214におけるビット幅情報224を用いて動作検証結果122を決定してよい。
【００５８】
次に、本実施例の回路設計方法において、ビット幅検出により演算器の出力ビット長を最適化する動作例を図７のフローチャートを参照しながら説明する。
【００５９】
本実施例では、まず、ユーザは、上記実施例と同様にして、ステップS252でソフトウエアプログラム12を作成し、とくにビット幅検出機能を付加する演算についてあらかじめディレクティブを付加しておく（S254）。
【００６０】
たとえば図８に示すように、ビット幅を判定すべき演算、すなわち対象演算20が“C=A+B”である場合には、ディレクティブ202として“// alu_plus_detect_range”を対象演算20に付加して記述する。
【００６１】
次に、ユーザは、上記と同様にして、動作合成ツール14によるソフトウエアプログラム12の動作合成を開始し、ステップS256でプログラム12中の各演算器出力のビット長の最適化を行い、ここでは初回の動作合成であるので、各演算器出力には初期値のビット長が設定される。
【００６２】
また、動作合成ツール14では、ステップS258でソフトウエアプログラム12に基づいて動作合成を実行し、ステップS260でプログラム12中の各演算を演算器として、ステップS256で決められたビット長を用いてRTL回路210が生成される。
【００６３】
とくに、プログラム12中からディレクティブ202を読み取った場合、そのディレクティブ202が付加された対象演算20に対してビット幅検出回路212およびステータスレジスタ214が付加され、たとえば図９に示すように、この対象演算器34の演算結果を保持するレジスタに対してビット幅検出回路212およびステータスレジスタ214が接続されてRTL回路210が生成される。
【００６４】
さらに、ユーザは、上記と同様にして、ステップS262において、シミュレーション部16によって、動作合成ツール14で生成されたRTL回路210の動作検証を実行する。
【００６５】
この動作検証では、RTL回路210においてディレクティブ202に応じて生成されたビット幅検出回路212は、対象演算器34の出力データレジスタ214の値が変動する最大ビット幅を検出し、そのビット幅情報222に基づいてステータスレジスタ214を更新する。
【００６６】
たとえば、図10に示すように、レジスタ36の最上位ビットをMSBとし、その次のビットをMSB-1とし、また最下位ビットを０とする。このとき、ビット幅検出回路212では、出力データレジスタ36の使用ビット幅を判定し、図11に示すように、レジスタ36の最上位ビットMSBの値が“０”であるとき、すなわちレジスタ36が正の値を示すとき、ビット幅検出回路212は、MSB-1ビットから0ビットのうち、“１”を示す最上位ビットのビット番号を使用ビット幅として判定して、ビット幅情報222としてステータスレジスタ214に供給する。
【００６７】
同様にして、レジスタ36の最上位ビットMSBの値が“１”であるとき、すなわち、レジスタ36が負の値を示すとき、ビット幅検出回路212は、MSB-1ビットから0ビットのうち、“０”を示す最上位ビットのビット番号を使用ビット幅として判定して、ビット幅情報222としてステータスレジスタ214に供給する。
【００６８】
ステータスレジスタ214では、現在保持している値よりも、ビット幅検出回路3212から供給されたビット幅222が大きい場合に、このビット幅を新たに保持して更新する。
【００６９】
このようにして、ユーザは、シミュレーション部16によるRTL回路210のビット幅情報222などの動作検証結果122を作成して保有することができる（S264）。
【００７０】
次に、ユーザは、ステップS264で得た動作検証結果122について、ステータスレジスタ214のビット幅情報224が更新されている場合、ステップS256に戻って、この検証結果122を用いて、再度、動作合成ツール14でソフトウエアプログラム12の動作合成を行うことができる。
【００７１】
ここで、動作合成ツール14では、各演算器出力のビット長の最適化が行われ（S256）、とくにビット幅情報224に基づいて、対象演算器34の出力ビット長を拡張することができる。
【００７２】
このようにして、ユーザが、ビット幅更新のない動作検証結果122を得るまでステップS256〜S264を繰り返すと、この回路設計フローを終了して、その時点で得られたRTL回路210がオーバーフローしない演算器で構成されることとなり、ユーザは最適化されたRTL回路210を得ることができる。さらにユーザは、ソフトウエアプログラム12におけるディレクティブを外すことにより、余分なビット幅検出回路を付加することなく最終的な回路を生成することができる。
【００７３】
また、動作合成ツール14は、ステータスレジスタ40を生成する代わりに、ソフトウエアのデバッグ機能を用いてビット幅情報を得てもよく、この場合、シミュレーションによる動作検証結果としてビット幅情報を標準出力し、その出力を演算器ビット幅最適化に用いることができる。
【００７４】
このように、本発明の回路設計方法が用いられて設計されたRTL記述回路は、各演算器の出力ビット長が最適化されているので、このRTL記述回路を用いて製造された集積回路は、従来の集積回路によりも大きく回路最小化および低消費電力化がなされている。
【図面の簡単な説明】
【００７５】
【図１】本発明に係る回路設計方法の一実施例による動作例を説明するフローチャートである。
【図２】図１に示す実施例の設計方法を実現する構成の概要図である。
【図３】図１に示す実施例の回路設計方法において、オーバーフロー検出ディレクティブを付加したプログラムの例である。
【図４】図１に示す実施例の回路設計方法において、オーバーフロー検出回路が付加されて生成されるRTL記述回路の例である。
【図５】図４に示す実施例の出力データレジスタおよびオーバーフロー検出回路の例である。
【図６】図５に示す実施例のレジスタ値およびオーバーフロー検出結果の関係を示す図である。
【図７】本発明に係る回路設計方法の他の実施例による動作例を説明するフローチャートである。
【図８】図７に示す実施例の回路設計方法において、ビット幅検出ディレクティブを付加したプログラムの例である。
【図９】図７に示す実施例の回路設計方法において、ビット幅検出回路が付加されて生成されるRTL記述回路の例である。
【図１０】図９に示す実施例の出力データレジスタおよびビット幅検出回路の例である。
【図１１】図１０に示す実施例のレジスタ値およびビット幅検出結果の関係を示す図である。
【符号の説明】
【００７６】
10  送信装置
12  ソフトウエアプログラム
14  動作合成ツール
16  シミュレーション部
30、32  入力データレジスタ
34  演算器
36  出力データレジスタ
38  オーバーフロー検出回路
40  ステータスレジスタ
【図１】
0005014920.tif 000002
【図２】
0005014920.tif 000003
【図３】
0005014920.tif 000004
【図４】
0005014920.tif 000005
【図５】
0005014920.tif 000006
【図６】
0005014920.tif 000007
【図７】
0005014920.tif 000008
【図８】
0005014920.tif 000009
【図９】
0005014920.tif 000010
【図１０】
0005014920.tif 000011
【図１１】
0005014920.tif 000012