(57)【要約】    【課題】  プログラムの可読性が向上し、それにより、プログラムのアルゴリズム検証を容易とし、プロセッサ検証のための時間を短縮できるソフトウェア開発環境開発自動化システムを提供する。    【解決手段】  このソフトウェア開発環境開発自動化システムは、プロセッサ環境に応じて、Ｃ言語による命令セット構文とアセンブラ構文とを対応付けて一元的に記述したアーキテクチャ定義記述１０を備え、このアーキテクチャ定義記述１０に基づいて、ネイティブ環境でシミュレーション/デバッグ可能なアセンブル処理系のソース２５、ネイティブ環境でシミュレーション/デバッグするためのシミュレーションヘッダファイル６０、及びプロセッサの動作を検証するためのテストプログラム７０を自動的に生成する構成としている。【選択図】    図１
2005063175.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ設計開発においてアセンブラ処理系のソフトウェアを開発するソフトウェア開発システムであって、
プロセッサ環境に応じて、Ｃ言語による命令セット構文とアセンブラ構文とを対応付けて一元的に記述したアーキテクチャ定義記述を備え、
前記アーキテクチャ定義記述に基づいて、ネイティブ環境でシミュレーション/デバッグ可能なアセンブル処理系のソースを生成することを特徴とするプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項２】
前記アセンブル処理系のソースが、
Ｃ言語で記述されたアセンブラプログラムの字句、構文の解析を行なう字句構文解析部と、
解析された構文毎に、前記アーキテクチャ定義記述に従って命令を特定する構文照合部と、
特定した命令のフォーマットに従って命令を生成する命令生成部とをソースとして含むことを特徴とする請求項１に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項３】
前記アーキテクチャ定義記述に基づいて、ネイティブ環境でシミュレーション/デバッグするためのシミュレーションヘッダファイルを生成することを特徴とする請求項１又は請求項２に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項４】
前記シミュレーションヘッダファイルの生成において、前記アーキテクチャ定義記述から拡張して定義した関数命令だけを抽出し、当該抽出した関数命令について前記アーキテクチャ定義記述の命令定義部を参照することによりＣシミュレーション用のコードを出力することを特徴とする請求項３に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項５】
前記アーキテクチャ定義記述に基づいて、プロセッサの動作を検証するためのテストプログラムを自動的に生成することを特徴とする請求項１から請求項４の何れか１項に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項６】
前記テストプログラムの生成において、
前記アーキテクチャ定義記述に定義された命令構文を解釈し、当該命令のレジスタ部にレジスタを割当て、即値部にビット幅に合った値を割当てると共に、
前記レジスタを割当てた命令の出力レジスタの期待値を計算し、
前記レジスタを割当てた命令、前記出力レジスタの値が期待値となっているかを判定する判定分岐文を出力することを特徴とする請求項５に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【請求項７】
アーキテクチャ定義記述は、Ｃ言語構文にレジスタ定義とメモリ定義に関する一定の制約を加えて記述されることを特徴とする請求項１から請求項３の何れか１項に記載のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ設計開発におけるソフトウェア開発環境開発自動化システムに関し、特に、アセンブラ等のソフトウェア開発における工数を削減するプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムに関する。
【背景技術】
【０００２】
従来、プロセッサの開発においては、アセンブラなどのソフトウェア開発環境の作成及びテストに多大な工数がかかることが問題となる。
【０００３】
このような状況に対応するため、例えば、特許文献１や特許文献２等においては、プロセッサ記述言語からプロセッサＨＤＬ(Hardware Description Language)、命令セットシミュレータやアセンブラ処理系のソースを生成するシステムが提案されている。
【０００４】
特許文献１や特許文献２に開示されているようなシステムによれば、生成するプロセッサＨＤＬやアセンブラ処理系、命令セットシミュレータなどの動作が確認しやすいというメリットが得られる。
【０００５】
【特許文献１】米国特許第６，４７７，６８３号明細書
【特許文献２】米国特許第６，４７７，６９７号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述したように、特許文献１、特許文献２を含む従来のシステムにおいては、生成するＨＤＬのチューニングなどを考慮した場合、アーキテクチャ定義記述に相当する記述が複雑になりやすいという欠点がある。
【０００７】
また、アセンブラは、プロセッサ毎に独自の文法を定めていることが多く、Ｃ言語等の標準化された言語と比較した場合可読性が落ちる。このため、プログラムのアルゴリズム検証に多大な時間を要することとなる。
【０００８】
組み込み系のクロス系開発環境では、プログラムのデバッグ/シミュレーションをシミュレータに頼るため、ネイティブ環境の開発に比べ操作が複雑となりかつ処理動作が遅くなる。
【０００９】
プロセッサ検証のためのテストデータの生成については、これまで検証向けにプロパティを記述する汎用的な仕組みがあったが、テストデータ生成のためだけにプロセッサのプロパティを記述する必要があり、この作業に工数が必要となり、検証時間の短縮化を阻害している。
【００１０】
さらに、アセンブラプログラムの文法に、統一された記法がないため、従来のアセンブラプログラムではネイティブ環境でのシミュレーション/デバッグが行なえないという問題もある。
【００１１】
本発明の目的は、アセンブリ言語をＣ言語でコンパイル/シミュレーション可能として、プログラムの可読性の向上を実現し、これにより、プログラムのアルゴリズム検証を容易とするプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムを提案することにある。
【００１２】
本発明の他の目的は、アセンブラ処理系を生成するために記述したアーキテクチャ定義記述からテストプログラムを自動的に生成するこにより、プロセッサ検証のための時間を短縮できるプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムを提案することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成する本発明のプロセッサ設計開発においてアセンブラ処理系のソフトウェアを開発するソフトウェア開発環境開発自動化システムは、プロセッサ環境に応じて、Ｃ言語による命令セット構文とアセンブラ構文とを対応付けて一元的に記述したアーキテクチャ定義記述を備え、このアーキテクチャ定義記述に基づいて、ネイティブ環境でシミュレーション/デバッグ可能なアセンブル処理系のソース、ネイティブ環境でシミュレーション/デバッグするためのシミュレーションヘッダファイル、及びプロセッサの動作を検証するためのテストプログラムを自動的に生成する構成としている。
【００１４】
これにより、アセンブリ言語をＣ言語でコンパイル/シミュレーションすることができるので、プログラムの可読性が向上し、それにより、プログラムのアルゴリズム検証が容易となり、またアセンブラ処理系を生成するために記述したアーキテクチャ定義記述からテストプログラムを自動的に生成するこにより、プロセッサ検証のための時間を短縮できるようになる。
【００１５】
加えて、プロセッサ環境に合わせて定義したアーキテクチャ定義記述を備えることにより、様々なプロセッサ環境に適合する検証システムを開発することが可能となる。
【００１６】
上記目的を達成するため本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、プロセッサ環境に応じて、Ｃ言語による命令セット構文とアセンブラ構文とを対応付けて一元的に記述したアーキテクチャ定義記述を備え、前記アーキテクチャ定義記述に基づいて、ネイティブ環境でシミュレーション/デバッグ可能なアセンブル処理系のソースを生成することを特徴とする。
【００１７】
請求項２の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、前記アセンブル処理系のソースが、Ｃ言語で記述されたアセンブラプログラムの字句、構文の解析を行なう字句構文解析部と、解析された構文毎に、前記アーキテクチャ定義記述に従って命令を特定する構文照合部と、特定した命令のフォーマットに従って命令を生成する命令生成部とをソースとして含むことを特徴とする。
【００１８】
請求項３の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、前記アーキテクチャ定義記述に基づいて、ネイティブ環境でシミュレーション/デバッグするためのシミュレーションヘッダファイルを生成することを特徴とする。
【００１９】
請求項４の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、前記シミュレーションヘッダファイルの生成において、前記アーキテクチャ定義記述から拡張して定義した関数命令だけを抽出し、当該抽出した関数命令について前記アーキテクチャ定義記述の命令定義部を参照することによりＣシミュレーション用のコードを出力することを特徴とする。
【００２０】
請求項５の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、前記アーキテクチャ定義記述に基づいて、プロセッサの動作を検証するためのテストプログラムを自動的に生成することを特徴とする。
【００２１】
請求項６の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、前記テストプログラムの生成において、前記アーキテクチャ定義記述に定義された命令構文を解釈し、当該命令のレジスタ部にレジスタを割当て、即値部にビット幅に合った値を割当てると共に、前記レジスタを割当てた命令の出力レジスタの期待値を計算し、前記レジスタを割当てた命令、前記出力レジスタの値が期待値となっているかを判定する判定分岐文を出力することを特徴とする。
【００２２】
請求項７の本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムは、アーキテクチャ定義記述は、Ｃ言語構文にレジスタ定義とメモリ定義に関する一定の制約を加えて記述されることを特徴とする。
【発明の効果】
【００２３】
本発明のプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムによれば、以下に述べるような優れた効果を実現する。
【００２４】
アセンブリ言語をＣ言語でコンパイル/シミュレーションすることができるので、プログラムの可読性が向上し、それにより、プログラムのアルゴリズム検証が容易となる。
【００２５】
プロセッサ環境に合わせて定義したアーキテクチャ定義記述を備えることにより、様々なプロセッサ環境に適合するアセンブラ処理系を開発することが可能となる。
【００２６】
アセンブラ処理系を生成するために記述したアーキテクチャ定義記述からテストプログラムを自動的に生成するこにより、プロセッサ検証のための時間を短縮できる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２８】
図１は本発明の第１の実施の形態によるシステムの構成を示すブロック図であり、本実施の形態によるシステムは、アーキテクチャ定義記述ファイル１０と、アーキテクチャ定義処理部２０とで構成される。
【００２９】
このアーキテクチャ定義記述ファイル１０は、アセンブラ処理系のソース、アセンブラプログラムをＣコンパイラでデバッグ/シミュレーションするためのヘッダファイル、アセンブラやプロセッサの動作を検証するためのプロセッサテストプログラムを自動生成するための命令セットの定義を一元的に記述する仕様記述であるアーキテクチャ定義記述を格納している。このアーキテクチャ定義記述は、設計するプロセッサ環境に応じて適合する定義が記述されている。
【００３０】
アーキテクチャ定義処理部２０は、アーキテクチャ定義記述ファイル１０のアーキテクチャ定義記述を入力として、アセンブラ処理系のソースプログラムと、アセンブラプログラムをＣこんぱいらでデバッグ・シミュレーションするためのヘッダファイルと、プロセッサの動作一致を検証するテストプログラムをそれぞれ生成する。
【００３１】
アセンブラ処理系のソースプログラムをビルドしたアセンブラ処理系３０は、Ｃ言語文法で記述されたアセンブラプログラムを入力として、アセンブルし、シミュレーション可能なターゲットプログラム５０を生成する。
【００３２】
ここで、アーキテクチャ定義記述ファイル１０に格納されるアーキテクチャ定義記述について説明する。
【００３３】
命令セット記述構文は、そのままアセンブラプログラムの記述構文となるため、複雑な動作をする命令を、その動作と同じ記述をアセンブラプログラムに記述させることは実用上問題となる。そこで、アーキテクチャ定義記述には、関数形式で記述する構文を用意し、その動作を補足する命令セット記述構文を定めている。
【００３４】
また、Ｃ言語構文でアセンブラプログラム相当を表現するため、アセンブラ記述構文をＣ言語構文に制約を加えた言語内容としている。ここでの制約は、主に変数と配列に対して加えている。これらの制約をアーキテクチャ定義記述に、レジスタ定義、メモリ定義という形で記述している。
【００３５】
次いで、アーキテクチャ定義記述の命令定義部に定義される命令セット記述構文について説明する。
【００３６】
（１）レジスタ定義部、メモリ定義部
Ｃ言語文法で記述されたアセンブラプログラムでは、変数と配列に対してＣ言語に対して以下のような制約を加える。
【００３７】
レジスタを特定の変数名にマッピングし、それぞれのレジスタに対する変数を、レジスタ定義という形で定義する。そして、ここで定義した変数名以外は使用できないようにしている。この他、レジスタのカテゴリ分類や、符号化規則、レジスタのビット幅、エイリアス名の指定などがレジスタ定義部で定義している。
【００３８】
メモリについては配列にマッピングし、配列名が物理的なメモリに対応し、インデックス指定部にメモリのアドレスを指定する。ここで定義した配列名以外は使用できないようにしている。この他、メモリのビット幅や、エンディアン、メモリ長などの情報をメモリ定義部で定義している。
【００３９】
（２）通常のデータ系命令の命令セット記述構文
アーキテクチャ定義記述には、Ｃ言語文法の構文に対応した命令セット記述構文を定義している。
【００４０】
各命令セット記述構文は、対応するＣ言語構文の意味を持っており、プロセッサの各命令の動作を、この命令セット記述構文の組み合わせによって記述する。この命令セット記述構文から、命令に対するアセンブラプログラムの記述構文が決定される。
【００４１】
以下はＡＤＤ命令に関する命令セット記述構文の例である。
命令セット記述構文：assign(REG[1](1),op2(+,REG[2](1),REG[3](1));
対応アセンブラプログラム記述構文：r0 = r5 + r4;
なお、上記例は、REG(1)をr1〜r7、REG[1]をr0、REG[2]をr5、REG[3]をr4とした場合である。
【００４２】
命令:assignは代入構文、op2は２項演算に対応し、対応するＣ言語文法の構文に従った動作をする。上記の構文では、REG[2]に指定されたレジスタとREG[3]に指定されたレジスタの値を加算し、それをREG[1]に指定したレジスタに代入する命令動作を意味している。
【００４３】
（３）制御系命令の命令セット記述構文
ジャンプ、条件判断、関数呼出、関数復帰などの制御系の命令は、専用の命令セット記述構文を定義しており、対応するアセンブラプログラムの記述構文も定められている。その他、Ｃ言語には存在しないが命令の動作を表現するのに便利な構文を定義しており、これにも対応するアセンブラプログラムの記述構文が定められている。
【００４４】
以下はｊｕｍｐ命令に関する命令セット記述構文の例である。
命令セット記述構文：jump(IMM,ABS);
対応アセンブラプログラム記述構文：goto LABEL;
命令:jumpは２つの引数を取り、プログラムカウンタをIMMで指定される値に代入することを意味している。第２引数はその代入方法を指定しており、ABSはIMM値をプログラムカウンタで上書きすることを指定している。
【００４５】
（４）関数形式の命令セット記述構文
動作が複雑な命令に対しては、命令セット記述構文に対応するアセンブラプログラムの記述構文が複雑となる。このため、アセンブラプログラムの記述構文を別途関数形式で定める記述方式を定義し、これらは関数名によって指定されている。
【００４６】
以下はＬＯＡＤ前インクリメント命令に関する命令セット記述構文の例である。
命令セット記述構文：assign(REG[1](1),extendop2(loadinc,REG[2](1),IMM){mem(1,asop(+=,ARG(1),ARG(2)),32)});
対応アセンブラプログラム記述構文：r1 = loadinc(r4,10);
なお、上記例は、REG[1]をr1、REG[2]をr4、IMMの値を10とした場合である。
【００４７】
命令：extendop2は関数形式のため、その動作は{}内に記述した動作に読み替える。動作中において、ARG(n)は、関数形式のn番目の引数を示している。
【００４８】
このアーキテクチャ定義記述は、各命令を、Ｃ言語の構文と制御系定義のための枠組みで規定し、その意味はＣ言語で規定されるため、各命令の動作が定義されている。
【００４９】
図１０に示すリストは、アーキテクチャ定義記述のサンプルを示している。図１０のリストにおいて、＃ｄｅｆｉｎｅに続くキーワードで、各セクションを区切っている。以下では、そのそれぞれのセクションの定義書式と、その内容を説明する。
【００５０】
（１）レジスタ定義
（書式）変数名：レジスタカテゴリ、レジスタ符号値、レジスタビット幅；
変数名から、命令オペレーション定義、命令フォーマット定義のトークンに変換する。ターゲットプログラムから変数名を見つけ、これをレジスタトークンに置き換えるという変数部のｌｅｘ定義に相当する。
【００５１】
（２）メモリ定義
（書式）配列名：メモリカテゴリ、エンディアン、アドレス幅；
配列名からメモリカテゴリに置き換えると同時に、エンディアンやアドレス幅を規定する。ここで置き換えたメモリカテゴリを使って、メモリ（配列）構文を規定するという配列名のｌｅｘ定義に相当する。
【００５２】
（３）命令フォーマット定義
（書式）フォーマット名：符号化トークン列、符号化トークン；
フォーマットの左がＭＳＢ、右がＬＳＢと見て、フォーマットをトークン記号で定義する。トークンの種類には、命令固有符号トークン、レジスタトークン、即値トークン、演算値トークンがある。符号化の規則自体は、それぞれの定義箇所で定義される。
【００５３】
（４）命令定義
（書式）命令名：命令フォーマット｛命令符号代入式｝：命令オペレーション；
命令名は、アセンブラのニーモニックに相当する。システム的にはコメント程度の意味。命令フィーマットは、命令フォーマット定義で定義したフォーマット名を指定する。この命令で一意に決まるトークンの符合には、｛｝内に、符号化トークン＝数値で符号値を指定する。カンマで区切って複数記述することができる。
【００５４】
命令オペレーションは、命令の意味を、下記トークン、構文等を使って定義する。
【００５５】
（ａ）レジスタ定義：ＲＥＧ（カテゴリ範囲）
（ｂ）メモリ定義：ＭＥＭ［ｉｄｘ］（カテゴリ、アドレス幅）  なお、ｉｄｘにはＲＥＧ、ＩＭＭ、ＮＵＭのいづれか
（ｃ）即値定義：ＩＭＭ（ビット幅、符号あり／なし）
（ｄ）数値定義：ＮＵＭ（数値）
（ｅ）演算系定義：上記ＲＥＧ、ＭＥＭ、ＩＭＭ、ＮＵＭを使ってＣ言語構文と等価な記法で定義する。ここでは、ｐｒｅｆｉｘ  ｏｐｅｒａｔｉｏｎの括弧式で表現する。
【００５６】
（ｆ）拡張演算系定義：ｅｘｔｅｎｄｏｐ（関数名、引数．．．）｛意味構文｝
（ｇ）特殊表現
ビット指定：ｂｉｔ（レジスタ、開始ビット、ビット幅）
凍結指定：ｃｏｎｃａｔ（レジスタ、．．．）
後置代入演算：＋＋、‐‐にだけ許される構文評価後の変数インクリメント操作。これを２以上の整数でも表現可能にする。
【００５７】
代入演算：ビット幅が違うレジスタの演算で、符号拡張、ゼロ拡張、切り捨てなどを任意に指定できる拡張をする。書式は：ａｓｓｉｇｎ(ｄｅｓｔ、ｓｒｃ、ｏｐｔｉｏｎ)；
（ｈ）制御系
ジャンプ：ｊｍｐ（ジャンプ先アドレス、相対／絶対、ジャンプ先変換式）
条件実行：ｃｏｎｄ（条件式、成立時実行動作）
関数コール：ｃａｌｌ（ジャンプ先アドレス、相対／絶対、ジャンプ先変換式）
関数リターン：ｒｅｔ（）
ノンオペレーション：ｎｏｐ（）
以下、本発明の実施の形態によるシステムの動作について、（１）Ｃ言語文法で記述されたアセンブラプログラムを入力とするアセンブラ処理系のソースの生成とユーザ記述のアセンブラプログラムをＣコンパイラでデバッグ/シミュレーションするためのヘッダファイルの生成、（２）アセンブラ処理系のアセンブル結果とプロセッサの動作一致を検証するためのテストプログラムの生成に分けて説明する。
【００５８】
（１）アセンブラ処理系のソースの生成とヘッダファイルの生成
アセンブラ処理系のソースの生成とヘッダファイルの生成動作について、図２、図３〜図６のフローチャートを参照して説明する。
【００５９】
まず、アーキテクチャ定義記述の読込み処理について図３を参照して説明する。
【００６０】
アーキテクチャ定義処理部２０は、アーキテクチャ定義記述ファイル１０よりアーキテクチャ定義記述を読み込み（ステップ３０１）、レジスタとメモリの定義部を解釈し、レジスタに対応する変数名、メモリに対応する配列名、関数名を登録する（ステップ３０２）。
【００６１】
次いで、命令フォーマットの定義を解釈し、命令フォーマットテーブルを作成する（ステップ３０３）。
【００６２】
また、命令セット定義部に定義される各命令情報から、命令フォーマットテーブルを参照し命令セットテーブルを作成する（ステップ３０４）。
【００６３】
その後、後述する各ファイルの生成と出力処理に移行する（ステップ３０５）。
【００６４】
次に、アセンブラ処理系のソース２５の生成の処理について図４を参照して説明する。
【００６５】
上記アーキテクチャ定義記述から読み込んで登録した変数名、配列名、関数名からＣ言語文法の制約付きのアセンブラ字句構文解析部２１をソースとして生成する（ステップ４０１）。
【００６６】
ここで生成されるアセンブラ字句構文解析部２１は、以下の例外を除いて入力されるアーキテクチャ定義記述に関係なく、Ｃ言語文法の構造を前提とした一般的な字句解釈の機能を実行する。
【００６７】
（１）変数名として、レジスタ定義で定義された変数名しか受け付けない。
【００６８】
（２）配列名として、メモリ定義で定義された配列名しか受け付けない。
【００６９】
（３）関数名は、拡張命令定義で定義される特殊な関数形式を識別する。
【００７０】
命令照合のために、全命令の命令セット記述構文を統合したアセンブラ構文照合部２２をソースとして生成する（ステップ４０２）。
【００７１】
ここで生成するアセンブラ構文照合部２２は、Ｃ言語文法で記述されたアセンブラプログラムを、ステップ４０１で生成したアセンブラ字句構文解析部２１で構文単位としたものを入力とし、アーキテクチャ定義記述に記述された命令セットの中で、どの命令にマッチするかを判定する機能を実行する。
【００７２】
最後に、アセンブラ構文照合部２２で決定した命令に従って、命令を生成する命令生成部２３をソースとして生成する（ステップ４０３）。
【００７３】
ここで生成する命令生成部２３は、アセンブラ構文照合部２２により、アーキテクチャ定義記述、命令セット記述中の命令が決定されると、その命令セットの命令フォーマットに従って命令を生成する機能を実行する。符号化規則についてはレジスタ定義、即値については一般ルールに従って、命令セット定義中の例外を参照して符号化する。
【００７４】
次に、ユーザによってＣ言語で記述されたＣ記述アセンブラプログラム４０を、上記のように生成したアセンブラ処理系のソースであるアセンブラ字句構文解析部２１、アセンブラ構文照合部２２、命令生成部２３からなるアセンブラ処理系３０にてビルドすることで、実行形式のターゲットプログラム５０が生成される。
【００７５】
図５は、その一連の処理を示すフローチャートであり、Ｃ記述アセンブラプログラム４０を読み込み（ステップ５０１）、アセンブラ字句構文解析部２１によって読み込んだＣ記述アセンブラプログラム４０の字句及び構文解析を行なう（ステップ５０２）。
【００７６】
次いで、アセンブラ構文照合部２２によって、構文単位で入力し、アーキテクチャ定義記述に記述された命令セットの中で、どの命令にマッチするかを判定する命令照合を行い、命令を決定する（ステップ５０３）。
【００７７】
最後に、命令生成部２３において、上記決定した命令に従って命令を生成する（ステップ５０４）。これにより、実行形式のターゲットプログラム５０が生成される。
【００７８】
Ｃ記述アセンブラプログラム４０は、上述した制約を加えたＣ言語文法によって記述されている。この制約によって、図２に示すように、アセンブラ処理系でプログラマに意図どおりの命令にアセンブルしながら、通常のＣコンパイラ９０でコンパイルすることで、ネイティブ環境でシミュレーションが可能なターゲットプログラム５０ａが得られる。
【００７９】
アーキテクチャ定義処理部２０では、アセンブラ処理系のソースであるアセンブラ字句構文解析部２１、アセンブラ構文照合部２２、命令生成部２３の生成と同時に、ユーザ記述のアセンブラプログラムをＣコンパイラでデバッグ/シミュレーションするためのヘッダファイルを生成する。図６は、ヘッダファイルの生成における処理を示すフローチャートであり、アーキテクチャ定義記述の読み込み処理において作成した命令セットテーブルを参照して（ステップ６０１）、拡張して定義した関数命令だけを抽出し（ステップ６０２）、その抽出した関数命令についてアーキテクチャ定義記述の命令定義部を参照することにより、Ｃシミュレーション用のコードを出力する（ステップ６０３）。こにより、Ｃシミュレーション用ヘッダ６０が生成される。
【００８０】
ネイティブ環境でのシミュレーションのために、Ｃ記述アセンブラプログラム４０のＣコンパイラによるコンパイル時に、上記のようにアセンブル処理系生成時に同時に生成されたＣシミュレーション用ヘッダ６０をインクルードする。
【００８１】
シミュレーション可能な範囲は、プロセッサに閉じたプログラムの範囲である。また、関数コール/リターン時には、アセンブラが暗黙的に全レジスタをプッシュ/ポップを挿入するという条件下でのシミュレーションとなる。
【００８２】
図７、図８を参照して、アーキテクチャ定義処理部２０による、アセンブラ処理系のアセンブル結果とプロセッサの動作一致を検証するためのテストプログラムの生成について説明する。
【００８３】
アーキテクチャ定義記述の命令セット中の命令セット記述構文を解釈して、命令のレジスタ部にレジスタを割当て、即値部にはビット幅に合った値を割当てる（ステップ８０１）。この割当てる値はランダムに選択される。
【００８４】
次いで、レジスタを割当てた命令の出力レジスタの期待値を計算する（ステップ８０２）。
【００８５】
また、レジスタを割当てた命令と、出力レジスタの値が期待値になっているかどうかを判定する判定分岐文を出力する（ステップ８０３）。
【００８６】
上記処理を最後の命令まで繰り返すことで（ステップ８０４）、プロセッサテストプログラム７０が生成される。
【００８７】
生成されたプロセッサテストプログラム７０については、図８に示すように、アセンブラ処理系３０にてビルドされて実行可能なプロセッサテストプログラム８０が得られる。
【００８８】
アセンブラ処理系でアセンブルして出力されたターゲットプログラム５０は、命令セットシミュレータに入力することにより、シミュレーションできる。
【００８９】
プロセッサテストプログラム８０は、プログラムの実行によって変化するレジスタの期待値と比較して、期待値と違っている場合にはそこで実行が停止するようになっており、図７に示すように、命令セットシミュレータ１００で実行させ、正常に終了することで、命令セットシミュレータ１００の動作とアセンブル処理系の処理結果が期待通りであることが検証できる。
【００９０】
図９に示すように、命令セットシミュレータ１００について、機能合成システム１２０の入力となるプロセッサ記述言語（ＨＤＬ）１３０からプロセッサ検証のためのテストプログラムを生成するシステムを使っているユーザに対しては、新たにアーキテクチャ定義記述を記述する工数が必要とならないように、プロパティ記述言語１１０からアーキテクチャ定義記述に変換するシステムを準備するシステムを提供することができる。
【００９１】
以上好ましい実施の形態及び実施例をあげて本発明を説明したが、本発明は必ずしも上記実施の形態及び実施例に限定されるものではなく、その技術的思想の範囲内において様々に変形して実施することができる。
【図面の簡単な説明】
【００９２】
【図１】本発明の実施の形態によるプロセッサ設計開発におけるソフトウェア開発環境開発自動化システムの全体構成を示す図である。
【図２】本発明によるアセンブラ処理系のソース生成の流れを示す図である。
【図３】本発明によるアーキテクチャ定義記述の読込み処理を説明するためのフローチャートである。
【図４】本発明によるアセンブラ処理系のソース生成の処理を説明するフローチャートである。
【図５】本発明によるＣ言語で記述されたＣ記述アセンブラプログラムをアセンブラ処理系にてビルドすることで実行形式のターゲットプログラムを生成する処理を説明するフローチャートである。
【図６】本発明によるシミュレーションヘッダファイルの生成における処理を示すフローチャートである。
【図７】本発明によるアセンブラ処理系のアセンブル結果とプロセッサの動作一致を検証するためのテストプログラムの生成の流れを示す図である。
【図８】本発明によるアセンブラ処理系のアセンブル結果とプロセッサの動作一致を検証するためのテストプログラムの生成処理を説明するフローチャートである。
【図９】プロパティ記述言語からアーキテクチャ定義記述に変換するシステムの例を示す図である。
【図１０】本発明によるアーキテクチャ定義記述のサンプルを示すリストである。
【符号の説明】
【００９３】
１０：アーキテクチャ定義記述ファイル
２０：アーキテクチャ定義処理部
２１：アセンブラ字句構文解析部
２２：アセンブラ構文照合部
２３：アセンブラ命令生成部
２５：アセンブラ処理系のソース
３０：アセンブラ処理系
４０：Ｃ記述アセンブラプログラム
５０：ターゲットプログラム
６０：Ｃシミュレーション用ヘッダ
７０：プロセッサテストプログラム
８０：実行形式のプロセッサテストプログラム
９０：コンパイラ
１００：命令セットシミュレータ
【図１】
2005063175.tif 000003
【図２】
2005063175.tif 000004
【図３】
2005063175.tif 000005
【図４】
2005063175.tif 000006
【図５】
2005063175.tif 000007
【図６】
2005063175.tif 000008
【図７】
2005063175.tif 000009
【図８】
2005063175.tif 000010
【図９】
2005063175.tif 000011
【図１０】
2005063175.tif 000012