(57)【要約】【課題】  ＲＴＬソースのｉｆ−ｅｌｓｅ分岐の記述を最適化することを目的とする。【解決手段】  ＲＴＬ最適化装置１のｉｆ−ｅｌｓｅ抽出部１１は、ＲＴＬソース２１からｉｆ−ｅｌｓｅ分岐を抽出し、データ生成部１３は、閾値決定部１２が定めた閾値以上の段数を持つｉｆ−ｅｌｓｅ分岐に関する情報を生成する。修正方法決定部１４は、ｉｆ−ｅｌｓｅ文の条件の信号のビット数、同名信号の有無、ＡＮＤ結合の有無をもとに修正方法を決定し、修正部１５は、決定された修正方法に従ってＲＴＬソース２１を修正して修正済みＲＴＬ２７を出力する。【選択図】  図１
2014067353.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア記述言語のＲＴＬを最適化する方法であって、
コンピュータが、
対象回路を記述するＲＴＬソースから、予め設定された閾値が示す段数以上のｉｆ−ｅｌｓｅ文の段数で構成されたｉｆ−ｅｌｓｅ分岐を抽出し、
予め、ｉｆ−ｅｌｓｅ分岐の複数の修正方法をｉｆ−ｅｌｓｅ文の条件に対応付けて設定しておき、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成する条件をもとに、該複数の修正方法の１つを決定し、
前記ＲＴＬソースの抽出した前記ｉｆ−ｅｌｓｅ分岐を、決定した修正方法に基づいて修正する、処理を実行する
ことを特徴とするＲＴＬ最適化方法。
【請求項２】
前記修正方法は、前記ｉｆ−ｅｌｓｅ分岐を構成するｉｆ−ｅｌｓｅ文の条件に含まれる、信号のビット数、同名信号の有無、および、ＡＮＤ条件の有無に対応付けて設定される
ことを特徴とする請求項１に記載のＲＴＬ最適化方法。
【請求項３】
前記ｉｆ−ｅｌｓｅ分岐を構成するｉｆ−ｅｌｓｅ文の条件の信号ビット数が１ビットであって、該条件各々に同名の信号が存在しない場合に、前記修正方法の１つとして第１の修正方法が決定され、
前記第１の修正方法は、抽出した前記ｉｆ−ｅｌｓｅ分岐を修正する際に、該ｉｆ−ｅｌｓｅ分岐を構成する各段のｉｆ−ｅｌｓｅ文を予め設定された段数以内のブロックに分割し、
前記ｉｆ−ｅｌｓｅ分岐内に、前記ブロックごとに分割したｉｆ−ｅｌｓｅ文で構成したｉｆ−ｅｌｓｅ分岐を設定する
ことを特徴とする請求項２に記載のＲＴＬ最適化方法。
【請求項４】
前記ｉｆ−ｅｌｓｅ分岐を構成するｉｆ−ｅｌｓｅ文の条件の信号ビット数が１ビットであって、該条件各々に同名信号が存在かつ該条件の全てがＡＮＤ条件で構成されている場合に前記修正方法の１つとして第２の修正方法が決定され、
前記第２の修正方法では、抽出した前記ｉｆ−ｅｌｓｅ分岐を修正する際に、該ｉｆ−ｅｌｓｅ分岐を構成する各段のｉｆ−ｅｌｓｅ文を、該ｉｆ−ｅｌｓｅ文の条件の同名信号および該同名信号の信号値をもとに分類し、前記分類した前記ｉｆ−ｅｌｓｅ文のグループごとに、前記第１の修正方法による修正を行う
ことを特徴とする請求項３に記載のＲＴＬ最適化方法。
【請求項５】
前記ｉｆ−ｅｌｓｅ分岐を構成するｉｆ−ｅｌｓｅ文の条件の信号ビット数が複数ビットであって、該条件各々に他の信号が存在しない場合に、前記修正方法の１つとして第３の修正方法が決定され、
前記第３の修正方法では、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成する各ｉｆ−ｅｌｓｅ文を条件の信号値および動作処理を示す要素とし、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成するｅｌｓｅ文を初期条件とするｃａｓｅ文による分岐に変更する
ことを特徴とする請求項２に記載のＲＴＬ最適化方法。
【請求項６】
前記閾値は、少なくとも、任意の固定値、または、前記対象回路の動作周波数に基づいて予め定められた値である
ことを特徴とする請求項１ないし請求項５のいずれか一項に記載のＲＴＬ最適化方法。
【請求項７】
ハードウェア記述言語のＲＴＬを最適化するために、コンピュータに、
対象回路を記述するＲＴＬソースから、予め設定された閾値が示す段数以上のｉｆ−ｅｌｓｅ文の段数で構成されたｉｆ−ｅｌｓｅ分岐を抽出し、
予め、ｉｆ−ｅｌｓｅ分岐の複数の修正方法をｉｆ−ｅｌｓｅ文の条件に対応付けて設定しておき、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成する条件をもとに、該複数の修正方法の１つを決定し、
前記ＲＴＬソースの抽出した前記ｉｆ−ｅｌｓｅ分岐を、決定した修正方法に基づいて修正する、処理を実行させる
ことを特徴とするＲＴＬ最適化プログラム。
【請求項８】
ハードウェア記述言語のＲＴＬを最適化するため、
対象回路を記述するＲＴＬソースから、予め設定された閾値が示す段数以上のｉｆ−ｅｌｓｅ文の段数で構成されたｉｆ−ｅｌｓｅ分岐を抽出する抽出部と、
予め、ｉｆ−ｅｌｓｅ分岐の複数の修正方法をｉｆ−ｅｌｓｅ文の条件に対応付けて設定しておき、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成する条件をもとに、該複数の修正方法の１つを決定する修正方法決定部と、
前記ＲＴＬソースの抽出した前記ｉｆ−ｅｌｓｅ分岐を、決定した修正方法に基づいて修正する修正部とを備える
ことを特徴とするＲＴＬ最適化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア記述言語（ＨＤＬ）の１つであるＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）記述を最適化する処理に関する。
【背景技術】
【０００２】
ハードウェア記述の１つであるＲＴＬは、ハードウェア内部の構造を定義し、クロック動作に基づいたレジスタからレジスタへの機能を記述する。ハードウェアの論理回路設計段階では、ＲＴＬソースの記述の文法規約をチェックするだけでなく、記述に基づく論理回路がより適正に動作をする構成になっているかをチェックする必要がある。
【０００３】
ＲＴＬソースで、分岐を記述するｉｆ−ｅｌｓｅについて、ｉｆ−ｅｌｓｅ文のネスト段階が深い場合に、回路化した際にタイミングが悪化することが認識されている。そのため、ＲＴＬチェックの従来手法では、一定数以上の段数を持つｉｆ−ｅｌｓｅ文を警告対象としている。警告がなされたｉｆ−ｅｌｓｅ分岐について、修正が必要であるか、どのように修正するかを、作業者は自らの経験則に基づいて手作業で修正している。
【０００４】
また、ＲＴＬ修正の従来手法として、ＲＴＬソース内のｉｆ−ｅｌｓｅ文をｃａｓｅ文に自動変更する手法が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−１８７７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の従来手法では、ＲＴＬソース内のｉｆ−ｅｌｓｅ文をｃａｓｅ文に修正するが、単に、ｉｆ−ｅｌｓｅ文をｃａｓｅ文に変形すると、論理回路が冗長な構成になってしまうという問題がある。
【０００７】
図３４および図３５は、従来手法による修正の問題を説明するための図である。図３４（Ａ）は、元の（修正前の）ＲＴＬソースの例を示す図、図３４（Ｂ）は、従来手法による修正後のＲＴＬソースの例を示す図である。図３５（Ａ）は、図３４（Ａ）の元のＲＴＬソースによる回路構成例を示す図、図３５（Ｂ）は、図３４（Ｂ）の修正後のＲＴＬソースによる回路構成例を示す図である。
【０００８】
図３４（Ａ）に示すＲＴＬソースの第７〜１１行に記述されているｉｆ−ｅｌｓｅ文が、図３４（Ｂ）に示すＲＴＬソースの第７〜１４行に記述されているｃａｓｅ文に変形される。回路構成で示すと、図３５（Ａ）に示すように、１ビット（ｂｉｔ）入力のセレクタ３段が直列に接続する構成が、図３５（Ｂ）に示すように、３ビット一致比較と１ビットＡＮＤの構成に変形される。すなわち、元のＲＴＬソースでは、信号の選択条件が１条件であるが、修正後のＲＴＬソースでは、信号の選択条件が２条件となるため２つの比較回路が必要となってしまう。修正後のＲＴＬソースによる回路構成は、一般的に、冗長な判断論理の追加と判断される。
【０００９】
従来手法によるｉｆ−ｅｌｓｅ文のｃａｓｅ文への自動変形は、回路構成を最適化するものではないため、作業者は、回路構成が最適となる段数を考慮してｉｆ−ｅｌｓｅ文を手作業で修正しなければならないという問題は解決できなかった。
【００１０】
本発明の目的は、ＲＴＬソースに含まれるｉｆ−ｅｌｓｅ文による分岐の記述を最適化する処理方法、装置およびプログラムを提供することである。
【課題を解決するための手段】
【００１１】
本発明の一態様として開示するＲＴＬ最適化方法は、コンピュータが、１）対象回路を記述するＲＴＬソースから、予め設定された閾値が示す段数以上のｉｆ−ｅｌｓｅ文の段数で構成されたｉｆ−ｅｌｓｅ分岐を抽出し、２）予め、ｉｆ−ｅｌｓｅ分岐の複数の修正方法をｉｆ−ｅｌｓｅ文の条件に対応付けて設定しておき、抽出した前記ｉｆ−ｅｌｓｅ分岐を構成する条件をもとに、該複数の修正方法の１つを決定し、３）前記ＲＴＬソースの抽出した前記ｉｆ−ｅｌｓｅ分岐を、決定した修正方法に基づいて修正する、処理を実行するものである。
【発明の効果】
【００１２】
開示したＲＴＬ最適化方法によれば、ネストの段数が多いｉｆ−ｅｌｓｅ分岐を最適な記述に自動変更することができ、論理回路設計においてＲＴＬ修正作業の負荷を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】開示するＲＴＬ最適化装置の一実施例におけるブロック構成例を示す図である。
【図２】一実施例におけるログ記憶部のデータ構成例を示す図である。
【図３】一実施例における修正対象記憶部のデータ構成例を示す図である。
【図４】一実施例における閾値決定に用いる設定テーブルの例を示す図である。
【図５】一実施例におけるＲＴＬ最適化装置の概要処理フロー例を示す図である。
【図６】ステップＳ３の処理のより詳細な処理フロー例を示す図である。
【図７】ステップＳ４の処理のより詳細な処理フロー例を示す図である。
【図８】ステップＳ３３の処理のより詳細な処理フロー例を示す図である。
【図９】第１の修正方法による修正の場合のブロック分割の説明図である。
【図１０】第１の修正方法による修正の場合のブロック分割の具体例を示す図である。
【図１１】第１の修正方法による修正の場合のブロック分割の具体例を示す図である。
【図１２】第１の修正方法による修正対象を含むＲＴＬソースの例を示す図である。
【図１３】第１の修正方法による修正の説明図である。
【図１４】第１の修正方法による修正の説明図である。
【図１５】第１の修正方法による修正の説明図である。
【図１６】第１の修正方法による修正の説明図である。
【図１７】第１の修正方法による修正前のＲＴＬソースの回路構成を示す図である。
【図１８】第１の修正方法による修正後の修正済みＲＴＬソースの回路構成を示す図である。
【図１９】第２の修正方法による修正の場合のブロック分割の説明図である。
【図２０】第２の修正方法による修正対象を含むＲＴＬソースの例を示す図である。
【図２１】第２の修正方法による修正の説明図である。
【図２２】第２の修正方法による修正の説明図である。
【図２３】第２の修正方法による修正の説明図である。
【図２４】第２の修正方法による修正の説明図である。
【図２５】第２の修正方法による修正前のＲＴＬソースの回路構成を示す図である。
【図２６】第２の修正方法による修正後の修正済みＲＴＬソースの回路構成を示す図である。
【図２７】第３の修正方法による修正対象を含むＲＴＬソースの例を示す図である。
【図２８】第３の修正方法による修正の説明図である。
【図２９】第３の修正方法による修正の説明図である。
【図３０】第３の修正方法による修正の説明図である。
【図３１】第３の修正方法による修正前のＲＴＬソースの回路構成を示す図である。
【図３２】第３の修正方法による修正後の修正済みＲＴＬソースの回路構成を示す図である。
【図３３】ＲＴＬ最適化装置のハードウェア構成例を示す図である。
【図３４】従来手法による修正の問題の説明図である。
【図３５】従来手法による修正の問題の説明図である。
【発明を実施するための形態】
【００１４】
以下、本発明の一態様として開示するＲＴＬ最適化装置について説明する。
【００１５】
図１は、開示するＲＴＬ最適化装置の一実施例におけるブロック構成例を示す図である。
【００１６】
ＲＴＬ最適化装置１は、ｉｆ−ｅｌｓｅ抽出部１１、閾値決定部１２、データ生成部１３、修正方法決定部１４、修正部１５、およびこれらの処理部が使用または生成する各種データを記憶する記憶部を備える。
【００１７】
ｉｆ−ｅｌｓｅ抽出部１１は、対象回路をＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）で記述するＲＴＬソース２１から、ｉｆ−ｅｌｓｅ文による分岐（以下、「ｉｆ−ｅｌｓｅ分岐」または単に「ｉｆ−ｅｌｓｅ」という）を全て抽出し、抽出したｉｆ−ｅｌｓｅ分岐に関する情報（ログ情報）をログ記憶部２２に記憶する。ｉｆ−ｅｌｓｅ分岐の抽出は、既知のＲＴＬスタイルチェッカーを用いた構文解析処理により実施する。ｉｆ−ｅｌｓｅに関するログ情報は、例えば、ｉｆ−ｅｌｓｅ文の位置（行）、段数、該ｉｆ−ｅｌｓｅ文が含まれるファイル名等である。
【００１８】
閾値決定部１２は、ｉｆ−ｅｌｓｅを修正対象とするかを判定する閾値ｔｈ（ｉｆ−ｅｌｓｅの段数）を決定し、閾値保持部２４に記憶する。
【００１９】
修正対象とするｉｆ−ｅｌｓｅの判定手段である閾値ｔｈとして、例えば、固定値、ユーザが与える任意の値、対象回路の情報に基づく値（例えば、動作周波数）等を用いることができる。閾値決定部１２は、判定手段の指定２３に基づいて閾値ｔｈを設定する。
【００２０】
判定手段の指定２３は、判定手段とする閾値ｔｈを指定する情報であり、ＲＴＬ最適化装置１が初期設定として保持し、または、データ生成部１３の処理開始前に閾値決定部１２に与えられる。
【００２１】
データ生成部１３は、ログ記憶部２２に記憶されているｉｆ−ｅｌｓｅ分岐が、閾値決定部１２で決定された閾値ｔｈを超える段数を持つかを判定し、閾値ｔｈを超える段数を持つｉｆ−ｅｌｓｅ分岐を修正対象とし、該当するｉｆ−ｅｌｓｅに関する情報（修正対象情報）を修正対象記憶部２５に記憶する。
【００２２】
修正方法決定部１４は、予め複数の修正方法を保持し、修正対象記憶部２５に記憶されたｉｆ−ｅｌｓｅ分岐に対して実行する修正方法を決定し、決定した修正方法２６を保持する。修正方法決定部１４は、ｉｆ−ｅｌｓｅ分岐について、構成するｉｆ−ｅｌｓｅ文の条件の内容（信号のビット数、各条件での同名信号の有無やＡＮＤ構成の有無等）をもとに分類した修正方法を決定する。以下は、修正方法の分類の条件の例である。
（１）ｉｆ−ｅｌｓｅ文の条件が１ビット信号のみで構成されているか。
（２）全ての条件に同名信号が存在しないか。
（３）全条件がＡＮＤで構成されているか。
（４）条件に他の信号がないか。
【００２３】
修正方法として、例えば、以下のような方法が用意される。
【００２４】
［第１の修正方法］
第１の修正方法は、ｉｆ−ｅｌｓｅ文の条件に設定された信号が１ビット信号であり、各条件に同名の信号が存在しない場合に選択される。
【００２５】
第１の修正方法では、分岐の段数が所定数（閾値）以内になるようにｉｆ−ｅｌｓｅ文をブロックに分割し、ｉｆ−ｅｌｓｅ文の構成内に分割した各ブロックのｉｆ−ｅｌｓｅ分岐を構成し、各ブロックのｉｆ−ｅｌｓｅ分岐が所定の段数以内となるように構成を修正する。
【００２６】
この修正により、元のＲＴＬソース２１のｉｆ−ｅｌｓｅ分岐に対応する論理回路では、セレクタ回路が適正な段数を超えて直列に接続する構成となる場合に、セレクタ回路が直列に接続する段数が一定数以内に抑えられ、さらに、部分的に並列に接続する構成が実現できる。
【００２７】
［第２の修正方法］
第２の修正方法は、前記の第１の修正方法または後述する第３の修正方法に該当しない場合に選択される。例えば、ｉｆ−ｅｌｓｅ文の条件に設定された信号が複数ビットであり、各条件に同名信号が存在、かつ条件がＡＮＤで構成されている場合に、第２の修正方法が選択される。
【００２８】
第２の修正方法では、条件に設定された信号名および信号値でｉｆ−ｅｌｓｅ文を分類し、分類に用いた信号および信号値でまとめたｉｆ−ｅｌｓｅ文のグループごとに第１の修正方法を実施してｉｆ−ｅｌｓｅ分岐を修正する。
【００２９】
この修正により、信号名および信号値でまとめた入力信号に対応するセレクタ回路を、適正な段数以内で直列に接続し、部分的に並列に接続する構成が実現できる。
【００３０】
［第３の修正方法］
第３の修正方法は、ｉｆ−ｅｌｓｅ文の条件に設定される信号が複数ビット信号であり、各条件に他の信号が存在しない場合に、選択される。
【００３１】
第３の修正方法では、ｉｆ−ｅｌｓｅ分岐の各段の条件を要素とするｃａｓｅ分岐に変形する。
【００３２】
この修正により、元のＲＴＬソース２１のｉｆ−ｅｌｓｅ分岐に基づく論理回路では、セレクタ回路が適正数を超えて直列に接続する構成を、代替の回路で実現することができる。
【００３３】
修正部１５は、ＲＴＬソース２１に含まれる修正対象のｉｆ−ｅｌｓｅ分岐を決定した修正方法２６に従って修正し、修正済みＲＴＬソース２７を出力する。
【００３４】
図２は、ログ記憶部２２のデータ構成例を示す図である。
【００３５】
ログ記憶部２２には、ＲＴＬソース２１から抽出されたｎ個のｉｆ−ｅｌｓｅ文各々について、識別番号（ｎ）、段数（ａｎ−１）、ファイル名（Ｆｎ−１）、行番号（Ｌｎ−１）を含むデータが記憶される。「識別番号」はデータの識別番号、「段数」はｉｆ−ｅｌｓｅ文のネストの段数、「ファイル名」はｉｆ−ｅｌｓｅ文を含むファイルの名称、「行番号」はファイル（ＲＴＬソース）内でｉｆ−ｅｌｓｅ文が記述されている行の番号である。
【００３６】
図３は、修正対象記憶部２５のデータ構成例を示す図である。
【００３７】
修正対象記憶部２５には、ログ記憶部２２から、段数が閾値ｔｈを超えて修正対象として抽出されたｍ個（ｍ≦ｎ）のｉｆ−ｅｌｓｅ文各々について、識別番号（ｍ）、段数（ａｍ−１）、ファイル名（Ｆｍ−１）、行番号（Ｌｍ−１）を含むデータが記憶される。「識別番号」はデータの識別番号、「段数」はｉｆ−ｅｌｓｅ文のネストの段数、「ファイル名」はｉｆ−ｅｌｓｅ文を含むファイルの名称、「行番号」はファイル（ＲＴＬソース）内でｉｆ−ｅｌｓｅ文が記述されている行の番号である。
【００３８】
図４は、閾値決定に用いる設定テーブルの例を示す図である。
【００３９】
設定テーブルは、対象回路の動作周波数（ＭＨｚ）と閾値との対応を示すデータテーブルである。
【００４０】
閾値決定部１２は、判定手段の指定２３が「対象回路の動作周波数に基づく設定」である場合に、対象回路の動作周波数（ｆ）を示す情報を取得し、図４に示す設定テーブルから、取得した動作周波数に対応する閾値ｔｈを決定する。
【００４１】
上記の構成を有するＲＴＬ最適化装置１によって、適正な段数を超えるような直列の接続を解消して、先頭と最後のセレクタ回路で出力タイミング差にばらつきが生じうるという問題を解決し、段数の均等化により出力タイミング差のばらつきをなくすことが可能な回路構成を実現することができる。
【００４２】
図５は、ＲＴＬ最適化装置１の概要処理フロー例を示す図である。
【００４３】
ＲＴＬ最適化装置１では、ｉｆ−ｅｌｓｅ抽出部１１が、対象回路のＲＴＬソース２１を取得し（ステップＳ１）、ＲＴＬソース２１からｉｆ−ｅｌｓｅ文を全て抽出し、抽出したｉｆ−ｅｌｓｅ文に関する情報（ログ情報）をログ記憶部２２に格納する（ステップＳ２）。ステップＳ２の処理により，図２に示す情報がログ記憶部２２に記憶される。
【００４４】
データ生成部１３は、閾値保持部２４に記憶されている閾値ｔｈを用いて、ログ記憶部２２に記憶されたログ情報から、段数が閾値ｔｈを超えるｉｆ−ｅｌｓｅ文を処理対象として抽出し、処置対象としたｉｆ−ｅｌｓｅ文に関する情報（修正対象情報）を修正対象記憶部２５に記憶する（ステップＳ３）。ステップＳ３の処理により，図３に示す情報が修正対象記憶部２５に記憶される。
【００４５】
なお、判定手段の指定２３が外部から与えられる場合には、ステップＳ３の処理前に、閾値決定部１２によって閾値ｔｈが決定され、閾値保持部２４に記憶されているものとする。
【００４６】
修正方法決定部１４は、修正対象記憶部２５に記憶されたｉｆ−ｅｌｓｅ文について修正方法を決定し、決定した修正方法２６をｉｆ−ｅｌｓｅ文に対応付けて記憶しておく（ステップＳ４）。修正部１５は、ＲＴＬソース２１の修正対象のｉｆ−ｅｌｓｅ文を、決定した修正方法２６に従って変形し、修正済みＲＴＬソース２７を出力する（ステップＳ５）。
【００４７】
図６は、ステップＳ３の処理のより詳細な処理フロー例を示す図である。
【００４８】
データ生成部１３は、ログ記憶部２２に記憶されたログ情報を取得し（ステップＳ２１）、閾値保持部２４に記録された閾値ｔｈを用いて閾値ｔｈを取得する（ステップＳ２２）。データ生成部１３は、カウンタｉを０に設定して（ステップＳ２３）、ｉ番目（０≦ｉ≦ｎ−１）のｉｆ−ｅｌｓｅの段数ａｎについて、段数ａｉが閾値ｔｈ以下であるかを判定する（ステップＳ２４）。段数ａｉ≦閾値ｔｈでなければ（ステップＳ２４のＮ）、データ生成部１３は、そのｉｆ−ｅｌｓｅの情報を修正対象記憶部２５に格納して（ステップＳ２５）、ステップＳ２６に進み、段数ａｉ≦閾値ｔｈであれば（ステップＳ２４のＹ）、そのままステップＳ２６に進む。
【００４９】
ステップＳ２６では、データ生成部１３は、ｉ＝ｎ−１であるかを判定し、ｉ＝ｎ−１でなければ（ステップＳ２６のＮ）、ｉ＝ｉ＋１として（ステップＳ２７）、ステップＳ２４に戻り、ｉ＝ｎ−１であれば（ステップＳ２６のＹ）、処理を終了する。
【００５０】
図６に示す処理により、ＲＴＬソース２１に含まれるｍ個のｉｆ−ｅｌｓｅの要素が、閾値ｔｈ以上と判断され、修正対象となる。
【００５１】
図７は、ステップＳ４の処理のより詳細な処理フロー例を示す図である。
【００５２】
修正方法決定部１４は、修正対象記憶部２５から修正対象情報を取得し（ステップＳ３１）、カウンタｉを０に設定して（ステップＳ３２）、ｉ番目（０≦ｉ≦ｍ−１）のｉｆ−ｅｌｓｅの修正方法を選択する（ステップＳ３３）。ステップＳ３３の処理の詳細は、図８を用いて後述する。
【００５３】
その後、修正方法決定部１４は、ｉ＝ｍ−１であるかを判定し（ステップＳ３４）、ｉ＝ｍ−１でなければ（ステップＳ３４のＮ）、修正方法決定部１４は、ｉ＝ｉ＋１として（ステップＳ３５）、ステップＳ３３に戻り、ｉ＝ｍ−１であれば（ステップＳ３４のＹ）、処理を終了する。
【００５４】
図８は、ステップＳ３３の処理のより詳細な処理フロー例を示す図である。
【００５５】
修正方法決定部１４は、修正対象情報のｉ番目の（０≦ｉ≦ｍ−１）のｉｆ−ｅｌｓｅ文を抽出し（ステップＳ３４１）、条件に設定された信号が１ビット（ｂｉｔ）信号であるかを判定する（ステップＳ３４２）。信号が１ビット信号であれば（ステップＳ３４２のＹ）、修正方法決定部１４は、さらに、条件に同名の信号があるかを判定する（ステップＳ３４３）。条件に同名信号がなければ（ステップＳ３４３のＮ）、修正方法決定部１４は、そのｉｆ−ｅｌｓｅの修正方法を「第１の修正方法」に決定し（ステップＳ３４４）、処理を終了する（ステップＳ３４の処理へ進む）。
【００５６】
ステップＳ３４３の判定で、条件に同名信号があれば（ステップＳ３４３のＹ）、修正方法決定部１４は、さらに、条件がＡＮＤで構成されているかを判定する（ステップＳ３４５）。条件がＡＮＤで構成されていれば（ステップＳ３４５のＹ）、修正方法決定部１４は、そのｉｆ−ｅｌｓｅの修正方法を「第２の修正方法」に決定して（ステップＳ３４６）、処理を終了し、条件がＡＮＤで構成されていなければ（ステップＳ３４５のＮ）、ステップＳ３４４へ戻り、そのｉｆ−ｅｌｓｅ文の修正方法を「第１の修正方法」に決定する。
【００５７】
ステップＳ３４２の判定で、条件に設定された信号が１ビット信号でなければ（ステップＳ３４２のＮ）、修正方法決定部１４は、さらに、条件に他の信号があるかを判定する（ステップＳ３４７）。条件に他の信号があれば（ステップＳ３４７のＹ）、そのｉｆ−ｅｌｓｅ文の修正方法を「第３の修正方法」に決定して（ステップＳ３４８）、処理を終了し、条件に他の信号がなければ（ステップＳ３４７のＮ）、ステップＳ３４３へ戻る。
【００５８】
修正部１５は、修正対象となったＲＴＬソース２１のｉｆ−ｅｌｓｅについて、決定された修正方法に応じた修正を行う。以下に、各修正方法によるｉｆ−ｅｌｓｅの修正処理を、より詳細に説明する。
【００５９】
［第１の修正方法による修正］
（１）前処理（ブロック分割処理）
修正部１５は、修正の前処理（ブロック分割処理）として、以下の処理Ｓ１５１〜Ｓ１５２を行う。
【００６０】
処理Ｓ１５１：  ｉｆ−ｅｌｓｅ文の分割するブロック数Ｌを算出する。
【００６１】
処理Ｓ１５２：  各ブロックに格納されるｉｆ−ｅｌｓｅ文の段数ＰＬを算出する。
【００６２】
ここで段数の分割として、修正部１５は、以下の２つの処理のいずれかで行う。
【００６３】
第１の分割方法：  段数ａｉを２で割る。このとき、段数ａｉ−１を２で割ることになるため、Ｌ＝２となる。さらに、Ｐ０は、（ａｉ−１）／２の小数点以下を切り上げた値となり、Ｐ１＝（ａｉ−１）−Ｐ０となる。すなわち、（ａｉ−１）が偶数のときにＰ０＝（ａｉ−１）／２となり、（ａｉ−１）が奇数のときにＰ０＝Ｐ１＋１となる（Ｐ０＝Ｐ１−１でもよい）。
【００６４】
第２の分割方法：  （ａｉ−１）を閾値ｔｈ−１で割る。このとき、ブロック数Ｌは、（ａｉ−１）／（ｔｈ−１）の小数点以下を切り上げた値となる。
【００６５】
図９に示すように、段数ａｉであるｉｆ−ｅｌｓｅ文を閾値ｔｈ未満になるようにＡＬ−１という名前のＬ個のブロックに分解し、その中に含まれるｉｆ−ｅｌｓｅ文の個数がＰＬ−１（＜ｔｈ）であるとすると、分割した各ブロックにｅｌｓｅ項を挿入するために、全てのｉｆ−ｅｌｓｅ文の段数が増加する。そこで、段数を閾値ｔｈで割った場合には各ブロックのｉｆ−ｅｌｓｅ文の段数が最終的に閾値ｔｈを超えてしまうことがあるため、段数（ａｉ−１）を閾値ｔｈ−１で割ることとする。各ブロックのｉｆ−ｅｌｓｅ文の段数を閾値ｔｈ−１に抑制することによって、閾値ｔｈを超えることを防止する。また、段数ａｉから引いている１は、ｅｌｓｅ項を除外して計算することによる。
【００６６】
以下に、前処理（各ＰＬの算出）の具体例を説明する。第１の分割方法については、ＰＬ≦ｔｈ−１であるときに、第２の分割方法の一例とみなすことができ、同様の手順で説明することができる。よって、第２の分割方法についての具体例を説明する。
【００６７】
図１０（Ａ）は、ａｉ＝７のｉｆ−ｅｌｓｅ文、ｔｈ＝４の場合の分割例を示す図である。この場合に、Ｌ＝（ａｉ−１）／（ｔｈ−１）＝（７−１）／（４−１）＝６／３＝２となり、さらに、Ｐ０＝（ａｉ−１）／Ｌ＝（７−１）／２＝６／２＝３となる。したがって、Ｐ０＝３、Ｐ１＝３となる。
【００６８】
図１０（Ｂ）は、ａｉ＝６のｉｆ−ｅｌｓｅ文、ｔｈ＝４の場合の分割例を示す図である。この場合に、Ｌ＝（ａｉ−１）／（ｔｈ−１）＝（６−１）／（４−１）＝５／３＜２となり、さらに、Ｐ０＝（ａｉ−１）／Ｌ＝（６−１）／２＝５／２＜３となる。したがって、Ｐ０＝２、Ｐ１＝３となる。各ブロックのＰｉが異なるとき、最終ブロックから順に並べていき、先頭ブロックが最小の段数となるように割り当てるようにしてもよい。
【００６９】
図１１（Ａ）は、ａｉ＝１３のｉｆ−ｅｌｓｅ文、ｔｈ＝５の場合の分割例を示す図である。この場合に、Ｌ＝（ａｉ−１）／（ｔｈ−１）＝（１３−１）／（５−１）＝１２／４＝３となり、さらに、Ｐ０＝（ａｉ−１）／Ｌ＝（１３−１）／３＝１２／３＝４となる。したがって、Ｐ０＝４、Ｐ１＝４、Ｐ２＝４となる。
【００７０】
図１１（Ｂ）は、ａｉ＝１２のｉｆ−ｅｌｓｅ文、ｔｈ＝５の場合の分割例を示す図である。この場合に、Ｌ＝（ａｉ−１）／（ｔｈ−１）＝（１２−１）／（５−１）＝１１／４＜３となり、さらに、Ｐ０＝（ａｉ−１）／Ｌ＝（１２−１）／３＝１１／３＜４となる。したがって、Ｐ０＝３、Ｐ１＝４、Ｐ２＝４となる。
【００７１】
（２）本処理（修正処理）
次に、本処理（修正処理）として、修正部１５は、ＲＴＬの文法規約に従ってＲＴＬソース２１の修正対象の記述を変形する処理として、以下の処理Ｓ１５３〜Ｓ１５６を行う。
【００７２】
処理Ｓ１５３：  前処理で算出した分割したブロック数Ｌ、各ブロック内のｉｆ−ｅｌｓｅ文の段数ＰＬ数に応じて複数ブロックを生成し、各ブロックの記述を行う。
【００７３】
ＲＴＬソース２１の文法規約に従って、先頭ブロックでは“ｉｆ  （  ）  ｂｅｇｉｎ  〜  ｅｎｄ”の構造を、最終ブロックでは“ｅｌｓｅ  ｂｅｇｉｎ  〜  ｅｎｄ”の構造をそれぞれ記述する。それ以外のブロックがある場合に各ブロックでは“ｅｌｓｅ  ｉｆ  （  ）  ｂｅｇｉｎ  〜  ｅｎｄ”の構造を記述する。なお、この時点で、各ｉｆ（）内の要素（条件式）は空とする。
【００７４】
図１２は、第１の修正方法による修正対象を含むＲＴＬソース２１の例を示す図である。
【００７５】
図１２に示すＲＴＬソース２１では、第７行〜２７行のｉｆ−ｅｌｓｅが修正対象となっている。そして、前処理により、ｉｆ−ｅｌｓｅ文の各段が、先頭ブロックに分類する要素（第７〜１５行）と、最終ブロックに分類する要素（第１６〜２７行）とに分割されているとする。
【００７６】
ここで、各ブロックへのｉｆ−ｅｌｓｅ文の段数がわかっていることから、図１３に示すように、先頭ブロックの先頭行（第７行）にｉｆ−ｅｌｓｅの開始記述である“ｉｆ  （  ）  ｂｅｇｉｎ”、最終行（第２０行）に終了記述である“ｅｎｄ”を記述する。同様に、最終ブロックの先頭行（第２１行）に“ｅｌｓｅ  ｂｅｇｉｎ”、最終行（第３４行）に“ｅｎｄ”をそれぞれ記述する。
【００７７】
処理Ｓ１５４：  各ブロックの先頭になるｉｆ（）に挿入する条件式の論理を抽出する。より詳しくは、ｉｆ−ｅｌｓｅ文の各段の要素をもとに、ｊ番目のブロックに対して、先頭からΣＰｉ（ｉ＝０  〜  ｊ−１）＋１番目のｉｆ−ｅｌｓｅ文からＰｊ個のｉｆ−ｅｌｓｅ文の条件式を抽出しＯＲ結合した条件式を“ｉｆ  （  ）  ｂｅｇｉｎ”の（）内に挿入する。この処理を、全てのブロックについて実行する。
【００７８】
図１４に示すように、図１２に示すＲＴＬソース２１の第７、第１０、第１３行のｉｆ−ｅｌｓｅ文から抽出した各条件式（Ａ＿ＩＮ＝＝１’ｂ１）、（Ｂ＿ＩＮ＝＝１’ｂ１）、（Ｃ＿ＩＮ＝＝１’ｂ１）をＯＲ結合した条件を、第７行の“ｉｆ  （  ）  ｂｅｇｉｎ”の（）内に記述する。
【００７９】
処理Ｓ１５５：  各ブロックに、ｉｆ−ｅｌｓｅ文を挿入する。より詳しくは、ｊ番目のブロックに、Ｓ１５４の処理で条件を抽出したｉｆ−ｅｌｓｅ文を全て挿入する。この処理を、全てのブロックについて実行する。
【００８０】
図１５に示すように、図１２に示すＲＴＬソース２１の第７〜第１５のｉｆ−ｅｌｓｅ文を、先頭ブロックの第８〜１６行に記述し、ＲＴＬソース２１の第１６〜２７行のｉｆ−ｅｌｓｅ文を、最終ブロックの第２２〜３０行に記述する。
【００８１】
処理Ｓ１５６：  各ブロックに、ＲＴＬソース２１から抽出したｅｌｓｅ項の記述を挿入する。
【００８２】
図１６に示すように、図１２に示すＲＴＬソース２１の第２５〜２６行のｅｌｓｅ項を、先頭ブロックの第１７〜１９行、最終ブロックの第３１〜３３行にそれぞれ記述する。
【００８３】
図１７は、第１の修正方法による修正前のＲＴＬソース２１の回路構成を示す図であり、図１８は、第１の修正方法による修正後の修正済みＲＴＬソース２７の回路構成を示す図である。図１７および図１８では、比較のため、回路の構成要素を簡略に表している。
【００８４】
修正前のＲＴＬソース２１によれば、図１７に示すように、６つのセレクタ回路が直列に接続し、セレクタＦに入力する信号３’ｂ１１０は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が６段であり、一方、セレクタＣに入力する信号３’ｂ０１１は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が３段となっている。
【００８５】
これに対し、修正済みＲＴＬソース２７によれば、図１８に示すように、セレクタ回路数が１つ増加するが、セレクタ回路を並列に接続し、セレクタＦに入力する信号３’ｂ１１０は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が４段となり、セレクタＣに入力する信号３’ｂ０１１も、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が４段となる。
【００８６】
したがって、元のＲＴＬソース２１では、出力のタイミング差のバラツキが大きい構成であるが、ＲＴＬ最適化装置１により出力される修正済みＲＴＬソース２７では、出力のタイミング差のバラツキが解消されていることがわかる。
【００８７】
［第２の修正方法による修正］
（１）前処理（ブロック分割処理）
修正部１５は、修正の前処理（ブロック分割処理）として、以下の処理Ｓ１６１〜Ｓ１６２を行う。第２の修正方法による修正の前処理は、第１の修正方法による修正の前処理とほぼ同様の処理である。対象のｉｆ−ｅｌｓｅ文の段数をａｉとする。
【００８８】
処理Ｓ１６１：  ｉｆ−ｅｌｓｅ文の分割するブロック数Ｌを算出する。
【００８９】
全ての条件文に表れる信号のビット（ｂｉｔ）数に基づいて、以下の規則によりブロック数Ｌを決定する。
「規則：ビット数をＮとするとき、分割するブロック数Ｌ＝２Ｎとする。」
処理Ｓ１６２：  各ブロックに格納されるｉｆ−ｅｌｓｅ文の段数ＰＬを算出する。
【００９０】
段数Ｐ１は、ブロック数Ｌの算出で使用した各条件式の信号値をもとに場合分けを行い、該当するｉｆ−ｅｌｓｅ文をカウントすることで算出する。
【００９１】
例えば、ｉｆ−ｅｌｓｅ文の全条件文に現れる信号を抽出し、ｉｆ−ｅｌｓｅ文を格納するブロック数Ｌを、以下のように定めておく。
・  条件文の信号が１ビットの場合は、ブロック数Ｌ＝最大２とする。
・  条件文の信号が２ビットの場合は、ブロック数Ｌ＝最大４とする。
・  条件文の信号が３ビットの場合は、ブロック数Ｌ＝最大８とする。
・  条件文の信号がＮビットの場合は、ブロック数Ｌ＝最大２Ｎとする。
【００９２】
さらに、抽出した信号の値ごとに分割を行う。これにより、元のＲＴＬソース２１のｉｆ−ｅｌｓｅ文がどのブロックに挿入されるかが決定する。
【００９３】
図１９は、第２の修正方法による修正の場合のブロック分割を説明するための図である。
【００９４】
図１９（Ａ）は、条件文の信号が１ビットである場合のブロック分割例を示す。この場合に、ｉｆ−ｅｌｓｅ文の格納ブロック数が最大＝２となり、ｉｆ−ｅｌｓｅ文格納ブロックＡ０、Ａ１は、それぞれ、段数がＰ０＝２、Ｐ１＝４となり、ｅｌｓｅ項の段数＝１となる。
【００９５】
図１９（Ｂ）は、条件文の信号が２ビットである場合のブロック分割例を示す。この場合に、ｉｆ−ｅｌｓｅ文の格納ブロック数が最大＝４となり、ｉｆ−ｅｌｓｅ文格納ブロックＡ０、Ａ１、Ａ２、Ａ３は、それぞれ、段数がＰ０＝１、Ｐ１＝２、Ｐ２＝３、Ｐ３＝４となり、ｅｌｓｅ項の段数＝１となる。
【００９６】
（２）本処理（修正処理）
次に、修正部１５は、本処理（修正処理）を行う。
【００９７】
図２０は、第２の修正方法による修正対象を含むＲＴＬソース２１の例を示す図である。図２０に示すＲＴＬソース２１で、第７〜２４行のｉｆ−ｅｌｓｅが修正対象となっている。前処理により、分割数Ｌ＝２、段数Ｐ０＝２、Ｐ１＝３であるとする。
【００９８】
処理Ｓ１６３：  ｉｆ−ｅｌｓｅ文の全ての条件に現れる同名信号の信号値を探索し、ｉｆ−ｅｌｓｅ文の条件を同名信号かつ信号値と反転値とに分類する。図２０のＲＴＬソース２１のｉｆ−ｅｌｓｅ文を、条件の同名信号および信号値、ここでは（Ａ＿ＩＮ＝＝１’ｂ０）と（Ａ＿ＩＮ＝＝１’ｂ１）とをもとに、２つの要素（第７〜１２行）と３つの要素（第１３〜２１行）とに分類する。
【００９９】
以降の処理として、ＲＴＬソース２１の文法規約に従って、各ブロックで分類した条件式の要素を挿入してｉｆ−ｅｌｓｅ文を修正する。この修正は、第１の修正方法による修正の処理Ｓ１５３〜Ｓ１５６とほぼ同様の処理である。
【０１００】
処理Ｓ１６４：  処理Ｓ１５３と同様に、先頭ブロックでは“ｉｆ  （  ）  ｂｅｇｉｎ  〜  ｅｎｄ”の構造を、最終ブロックでは“ｅｌｓｅ  ｂｅｇｉｎ  〜  ｅｎｄ”の構造をそれぞれ記述する。
【０１０１】
図２１に示すように、先頭ブロックの先頭行（第７行）に“ｉｆ  （  ）  ｂｅｇｉｎ”、最終行（第１７行）に“ｅｎｄ”を、最終ブロックの先頭行（第１８行）に“ｅｌｓｅ  ｂｅｇｉｎ”、最終行（第３１行）に“ｅｎｄ”をそれぞれ記述する。
【０１０２】
処理Ｓ１６５：  処理Ｓ１５４と同様に、各ブロックの先頭になるｉｆ（）に挿入する条件式の論理を抽出する。
【０１０３】
図２２に示すように、ブロック数Ｌの算出で用いた同名信号および信号値の組み合わせの１つとして図２０に示すＲＴＬソース２１から抽出した条件式（Ａ＿ＩＮ＝＝１’ｂ０）を第７行の“ｉｆ  （  ）  ｂｅｇｉｎ  ”の（）内に記述する。
【０１０４】
処理Ｓ１６６において、処理Ｓ１５５と同様に、記述した条件以外の条件について、ｉｆ−ｅｌｓｅ文の（）内に記述する。
【０１０５】
図２３に示すように、図２０に示すＲＴＬソース２１の第７〜８行のｉｆ−ｅｌｓｅ文の条件（（Ａ＿ＩＮ＝＝１’ｂ０）＆＆（Ｂ＿ＩＮ＝＝１’ｂ０）＆＆（Ｃ＿ＩＮ＝＝１’ｂ１））から既に抽出した信号と信号値（Ａ＿ＩＮ＝＝１’ｂ０）以外の信号と信号値とをＡＮＤした条件（（Ｂ＿ＩＮ＝＝１’ｂ０）＆＆（Ｃ＿ＩＮ＝＝１’ｂ１））を設定したｉｆ−ｅｌｓｅ文を、先頭ブロックの第８〜１３行に記述する。同様に、図２０に示すＲＴＬソース２１の第１０〜１２行のｉｆ−ｅｌｓｅ文の条件式をもとに、条件（（Ｂ＿ＩＮ＝＝１’ｂ１）＆＆（Ｃ＿ＩＮ＝＝１’ｂ０））を設定したｉｆ−ｅｌｓｅ文を、先頭ブロックの第１１〜１３行に記述する。さらに、同様に、図２０のＲＴＬソース２１の第１３〜１５行、第１６〜１８行、第１９〜２１行の条件をもとにｉｆ−ｅｌｓｅ文を最終ブロックの第１９〜２１行、第２２〜２４行、第２５〜２７行にそれぞれ記述する。
【０１０６】
処理Ｓ１６７：  処理Ｓ１５６と同様に、図２４に示すように、図２０に示すＲＴＬソース２１の第２２〜２３行のｅｌｓｅ項を、先頭ブロックの第１４〜１５行、最終ブロックの第２８〜２９行にそれぞれ記述する。
【０１０７】
図２５は、第２の修正方法による修正前のＲＴＬソース２１の回路構成を示す図であり、図２６は、第２の修正方法による修正済みＲＴＬソース２７の回路構成を示す図である。図２５および図２６では、比較のため、回路の構成要素を簡略に表している。
【０１０８】
修正前のＲＴＬソース２１によれば、図２５に示すように、３ビット信号の入力を持つセレクタが５つ直列に接続している。セレクタＥに入力する信号３’ｂ１１１は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が５段であり、一方、セレクタＢに入力する信号３’ｂ０１０は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が２段となっている。
【０１０９】
これに対し、修正済みＲＴＬソース２７によれば、図２６に示すように、２ビット信号の入力を持つ５段のセレクタと１ビット信号の入力を持つ１つのセレクタとに構成が変更されている。セレクタ数が１つ増加するが、セレクタが並列に接続される構成となり、セレクタＥに入力する信号３’ｂ１１１は、出力信号Ｙ＿ＯＵＴ［２：０］までに通過するセレクタ数が４段となり、速度が改善されていることがわかる。
【０１１０】
［第３の修正方法による修正］
次に、本処理（修正処理）として、修正部１５は、ＲＴＬの文法規約に従ってＲＴＬソース２１の修正対象のｉｆ−ｅｌｓｅ分岐をｃａｓｅ分岐に変形する処理として、以下の処理Ｓ１７１〜Ｓ１７４を行う。
【０１１１】
図２７は、第３の修正方法による修正対象を含むＲＴＬソース２１の記述例を示す図である。図２７に示すＲＴＬソース２１で、第７〜２４行のｉｆ−ｅｌｓｅが修正対象となっている。
【０１１２】
処理Ｓ１７１：  ｉｆ−ｅｌｓｅ文の条件から信号名“ＳＥＬ＿ＩＮ”を抽出する。
【０１１３】
処理Ｓ１７２：  抽出した条件文の信号名から、対象のｉｆ−ｅｌｓｅ文の段数ａｉを取得する。
【０１１４】
処理Ｓ１７３：  ＲＴＬの文法規約に従って、ｉｆ−ｅｌｓｅの記述の代わりに、ｃａｓｅ（）を構成する開始記述であるｃａｓｅ（）文と終了記述であるｅｎｄｃａｓｅとを記述する。
【０１１５】
図２８に示すように、先頭行（第７行）に“ｃａｓｅ  （  ）”を最終行（第１４行）に“ｅｎｄｃａｓｅ”を記述し、“ｃａｓｅ  （  ）”の（）内に抽出した信号名“ＳＥＬ＿ＩＮ”を記述する。
【０１１６】
処理Ｓ１７４：  元のＲＴＬソース２１の格段のｉｆ−ｅｌｓｅ文の条件を、ｃａｓｅ文の条件である“条件式の信号値：動作処理”に書き換える。
【０１１７】
図２９に示すように、図２７に示すＲＴＬソース２１の第７〜８行、第１０〜１１行、第１３〜１４行、第１６〜１７行、第１９〜２０行の条件を、第８〜１２行にそれぞれ記述する。例えば、第７〜８行のｉｆ文の“ＳＥＬ＿ＩＮ  ＝＝  ４’ｂ００００”と“Ｙ＿ＯＵＴ  ＝  ３’ｂ０００”を取り出し、ｃａｓｅ文の対応する条件として“４’ｂ００００：Ｙ＿ＯＵＴ  ＝  ３’ｂ０００”を第８行に記述する。他のｉｆ文についても同様に記述する。
【０１１８】
処理Ｓ１７５：  ｉｆ−ｅｌｓｅ文のｅｌｓｅ項を、ｃａｓｅ文のｄｅｆａｕｌｔ項に書き換える。
【０１１９】
図３０に示すように、図２７に示すＲＴＬソース２１の第２２〜２３行のｅｌｓｅ項の条件（Ｙ＿ＯＵＴ  ＝  ３’ｂ１０１）をもとに、ｄｅｆａｕｌｔ項の条件“ｄｅｆａｕｌｔ：Ｙ＿ＯＵＴ  ＝  ３’ｂ１０１”を第１３行に記述する。
【０１２０】
図３１は、第３の修正方法による修正前のＲＴＬソース２１の回路構成を示す図であり、図３２は、第３の修正方法による修正済みＲＴＬソース２７の回路構成を示す図である。図３１および図３２では、比較のため、回路の構成要素を簡略に表している。
【０１２１】
修正前のＲＴＬソース２１によれば、図３１に示すように、４ビット信号の入力を持つ３ビット出力セレクタが５つ直列に接続し、信号がセレクタを通過する時間が長くなるため、速度改善の余地がある。
【０１２２】
これに対し、修正済みＲＴＬソース２７によれば、図３２に示すように、４ビットセレクタ信号を、４ビット信号入力の一致比較回路と３ビットＡＮＤ回路とに構成が変更されている。ＡＮＤ回路が６段となるが並列に接続しているため、出力信号Ｙ＿ＯＵＴ［２：０］までの通過時間の速度が改善されていることがわかる。
【０１２３】
以上説明したＲＴＬ最適化装置１は、図１に示す処理部を備える専用ハードウェアとして実施することができる。
【０１２４】
また、ＲＴＬ最適化装置１を、図３３に示すような、ＣＰＵ１０１、メモリ１０２、記憶装置（ハードディスク）１０３、入力装置（キーボード、マウス等）１０４、出力装置（ディスプレイ、プリンタ等）１０５、通信制御部１０６等が内部のネットワーク等で接続されたコンピュータ１００として実施することができる。
【０１２５】
さらに、ＲＴＬ最適化装置１を、コンピュータ１００で実行可能なプログラムとして実施することができる。この場合に、図１に示すＲＴＬ最適化装置１の処理部の機能を実現するプログラムを実装し、コンピュータ１００上で実行することにより実施する。
【０１２６】
すなわち、図１に示したｉｆ−ｅｌｓｅ抽出部１１、閾値決定部１２、データ生成部１３、修正方法決定部１４、修正部１５の各機能をコンピュータに実行させる実行プログラムをコンピュータ１００に読み込ませ、実行させることによって，ＲＴＬ最適化装置１を実現することができる。
【０１２７】
この場合に、コンピュータ１００のＣＰＵ１０１が、例えば、
・  上記の実行プログラムおよび入力となる情報（ＲＴＬソース２１）をファイルとしてハードディスク１０３に格納する。
・  入力装置１０４から実行プログラムを起動し、起動された実行プログラムが、メモリ１０２にロードされ、必要に応じてＲＴＬソース２１，判定手段の指定２３をハードディスク１０３からメモリ１０２に読み出しながら処理を進め、処理中に、処理結果（ログ情報、修正対象情報、決定した修正方法等）をメモリ１０２、ハードディスク１０３に格納する。
・  修正済みＲＴＬソース２７をディスプレイ１０５に表示し、ファイル形式で出力する、
といった手順で処理を実行する。
【０１２８】
なお、実行プログラムは、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ等やフレキシブルディスク等の記録媒体だけでなく、通信回線の先に備えられた他の記憶装置やコンピュータのハードディスク等に記憶されるものであってもよい。
【０１２９】
なお、ＲＴＬ最適化装置１を構成する要素は、任意の組合せで実現されてもよい。複数の構成要素が１つの部材として実現されてもよく、１つの構成要素が複数の部材から構成されてもよい。また、ＲＴＬ最適化装置１は、上述した実施形態に限定されず、本発明の要旨を逸脱しない範囲において各種の改良および変更を行ってもよいことは当然である。
【０１３０】
以上説明したように、開示したＲＴＬ最適化装置１によれば、ＲＴＬソース２１のｉｆ−ｅｌｓｅ文による分岐の記述を、論理回路構成上より最適となるように自動的に修正し、修正済みＲＴＬソース２７を出力することができる。よって、論理回路の分岐に関連する構成を改善するための作業工数を大幅に削減することができ、また、人手作業で生じる修正のばらつきをなくすことができる。よって、論理回路設計の効率化を実現することができる。
【符号の説明】
【０１３１】
１  ＲＴＬ最適化装置
１１  ｉｆ−ｅｌｓｅ抽出部
１２  閾値決定部
１３  データ生成部
１４  修正方法決定部
１５  修正部
２１  ＲＴＬソース
２２  ログ記憶部
２３  判定手段の指定
２４  閾値保持部
２５  修正対象記憶部
２６  決定した修正方法
２７  修正済みＲＴＬソース
【図１】
2014067353.tif 000003
【図２】
2014067353.tif 000004
【図３】
2014067353.tif 000005
【図４】
2014067353.tif 000006
【図５】
2014067353.tif 000007
【図６】
2014067353.tif 000008
【図７】
2014067353.tif 000009
【図８】
2014067353.tif 000010
【図９】
2014067353.tif 000011
【図１０】
2014067353.tif 000012
【図１１】
2014067353.tif 000013
【図１２】
2014067353.tif 000014
【図１３】
2014067353.tif 000015
【図１４】
2014067353.tif 000016
【図１５】
2014067353.tif 000017
【図１６】
2014067353.tif 000018
【図１７】
2014067353.tif 000019
【図１８】
2014067353.tif 000020
【図１９】
2014067353.tif 000021
【図２０】
2014067353.tif 000022
【図２１】
2014067353.tif 000023
【図２２】
2014067353.tif 000024
【図２３】
2014067353.tif 000025
【図２４】
2014067353.tif 000026
【図２５】
2014067353.tif 000027
【図２６】
2014067353.tif 000028
【図２７】
2014067353.tif 000029
【図２８】
2014067353.tif 000030
【図２９】
2014067353.tif 000031
【図３０】
2014067353.tif 000032
【図３１】
2014067353.tif 000033
【図３２】
2014067353.tif 000034
【図３３】
2014067353.tif 000035
【図３４】
2014067353.tif 000036
【図３５】
2014067353.tif 000037