JP4342392B2 - ソフトウェア検証モデル生成方法 - Google Patents

ソフトウェア検証モデル生成方法 Download PDF

Info

Publication number
JP4342392B2
JP4342392B2 JP2004199716A JP2004199716A JP4342392B2 JP 4342392 B2 JP4342392 B2 JP 4342392B2 JP 2004199716 A JP2004199716 A JP 2004199716A JP 2004199716 A JP2004199716 A JP 2004199716A JP 4342392 B2 JP4342392 B2 JP 4342392B2
Authority
JP
Japan
Prior art keywords
instruction
data
cache memory
address conversion
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2004199716A
Other languages
English (en)
Other versions
JP2006023852A (ja
Inventor
徳義 伊藤
隆夫 新舎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lapis Semiconductor Co Ltd
Original Assignee
Oki Semiconductor Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oki Semiconductor Co Ltd filed Critical Oki Semiconductor Co Ltd
Priority to JP2004199716A priority Critical patent/JP4342392B2/ja
Publication of JP2006023852A publication Critical patent/JP2006023852A/ja
Application granted granted Critical
Publication of JP4342392B2 publication Critical patent/JP4342392B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Description

本発明は、キャッシュメモリを有するホストCPU(中央処理装置:Central Processing Unit )を使用して、キャッシュメモリの動作を考慮しながら、半導体装置に搭載されるハードウェア及びソフトウェアの協調検証(Co-verification )を実行する際に必要となるソフトウェアの検証モデルを生成するためのソフトウェア検証モデル生成方法に関する。
ここで、キャッシュメモリとは、ホストCPUと主記憶装置(メインメモリ)との間で、ホストCPUが頻繁に読み書きするデータの転送を高速にて行う目的で当該データをため込むためのメモリを指している。
近年、SoCを搭載した機器が広く普及してきている。SoCとは、System on a Chipの略で、コンピュータの主要機能を一つのチップ(半導体装置)に詰め込む技術、あるいは、当該技術によりコンピュータの主要機能を搭載したチップを指している。
図1は、かかるSoCの上流設計フローを示す図である。同図に示されるように、システム・レベルの設計が完了した後、アーキテクチャ・レベルの設計に移行する。アーキテクチャ・レベルの設計では、CPU、RTOS(Real-Time Operating System)に代表されるOS(Operating System)、バス(Bus )等の基本部品の選択、アプリケーションのハードウェア及びソフトウェアへの機能分割、並びにハードウェア設計及びソフトウェア設計が行われる。そして、アーキテクチャ・レベルの設計により得られた基本部品、ハードウェア部品及びソフトウェア部品に対し、それらの検証モデルに基づくハードウェア/ソフトウェア協調検証が実行される。
ここで、RTOSとは、各種の処理をリアルタイムにて実行することを重視し、このための機能を実装したOSを指している。携帯電話、ディジタル・テレビ等のディジタル機器を制御するコンピュータ等では、応答時間が一定の範囲内にあることが要求されるため、上記のRTOSに対してもリアルタイム性を実現するための様々な機能が必要とされる。
図2は、従来のハードウェア/ソフトウェア協調検証方法を説明するためのデータ流れ図であり、図3は、従来のハードウェア/ソフトウェア協調検証方法によるタイミングバジェット処理追加の様子を説明するための模式図である。
一般に、半導体装置に搭載されるハードウェア及びソフトウェアで高性能の協調シミュレーションを実現するためには、基本部品、ハードウェア部品及びソフトウェア部品をモデル化することによって検証モデルを作成することが必要である。
図2に示すように、ソフトウェア部品のRTOSは通常、ANSI−C及びアセンブリ言語で記述されている。このANSI−C及びアセンブリ言語で記述されたRTOSのソースコードに基づいて、タスク制御及びデータアクセス制御を実行するためのモデル化やタスク切替えを実行するためのモデル化が、人手により行われ、実行時間追加前のCベース言語で記述された検証モデル(すなわち、Cベース・モデル)が作成される。その後、この実行時間追加前の検証モデルにタイミングバジェット(Timing Budget)が追加され、実行時間追加後のCベース言語で記述された検証モデル(すなわち、Cベース・モデル)が生成される。なお、本明細書において、「Cベース言語」とは、ANSI−C/C++の各種拡張言語、SpecC、SystemCのいずれかの言語を意味する。
又一方で、ソフトウェア部品のアプリケーション・ソフトウェアは通常、ANSI−Cで記述されている。ただし、アプリケーション・ソフトウェアの中の割込みハンドラ及びデバイス・ドライバ等においては、それらの設計論理にANSI−Cによる記述に加えてアセンブリ言語による記述が含まれることもある。このANSI−Cのみ、又は、ANSI−C及びアセンブリ言語で記述されたアプリケーション・ソフトウェアのソースコードに基づいて、タスク制御及びデータアクセス制御を実行するためのモデル化やタスク切替えを実行するためのモデル化が、人手により行われ、実行時間追加前のCベース言語で記述された検証モデル(すなわち、Cベース・モデル)が作成される。その後、この実行時間追加前の検証モデルにタイミングバジェット(Timing Budget)が追加され、実行時間追加後のCベース言語で記述された検証モデル(すなわち、Cベース・モデル)が生成される。
又一方で、ハードウェア部品に関しては、Cベース言語で記述された検証モデル(すなわち、Cベース・モデル)が作成される。このCベース・モデルは、ビヘイビア(Behavior)記述又はRTL(Register Transfer Level )記述による検証モデルである。なお、ビヘイビア記述とは、回路のふるまいを記述したものであり、一方、RTL記述とは、レジスタの値が遷移していく様子を記述したものである。
さらに、ハードウェア部品の検証モデルの作成方法について説明する。基本部品に関しては、CPU及びCPU専用の検証モデルは作成されず、ISS(Instruction Set Simulator)における割込み処理部を独立させたIRS(Interrupt Routine Scheduler)が、RTOSの検証モデルの一部として新たに導入される。このIRSはCベース言語で記述される。又、バスの検証モデルは、Cベース言語で新規に作成される。
又、Cベース言語を用いて論理設計されたビヘイビア(Behavior)記述のハードウェア部品は、動作合成ツールの拡張機能を利用して、Cベース言語記述から Fixed I/O Behavior モデルへと自動的に変換されることにより、その検証モデル(Cベース・モデル)が生成される。このFixed I/O Behavior モデル は、Basic Block を利用したハードウェア・モデルと同等のものである。
又、Verilog/VHDL を用いて論理設計されたRTL((Register Transfer Level)記述のハードウェア部品は、HDL Import(CoWare社製ツール)等を利用して、RTL記述からRTL−Cベース言語モデルへと自動的に変換されることにより、その検証モデル(Cベース・モデル)が生成される。このRTL−Cベース言語モデルは、FSM(有限状態機械:Finite State Machine)の1ステートが1クロックの動作を表現するものである。
以上のようなCベース・モデルからなる検証モデル(基本部品、ハードウェア部品及びソフトウェア部品)にシミュレーション全体の動作を制御するCベース・シミュレータを加えることで、図2に示すような従来のハードウェア/ソフトウェア協調検証方法を実行するための協調検証システム(ソフトウェア構成)が構成される。
図2のバジェット追加部(バジェット追加ツールとも呼ばれる)では、ソフトウェア部品の検証モデルを生成する場合、実行時間追加前のCベース・モデルの中からANSI−C記述のみによるソースコードの部分(Cコードの部分と呼ばれる)を取り出し、図3に示すようなタイミングバジェット(Timing Budget)追加処理を行っている。このタイミングバジェット(Timing Budget)追加処理は、以下のような順序で行われる(例えば、先行技術文献(後述の特許文献1)の特願平2003−024706号(平成15年1月31日出願)参照)。
まず第1に、実行時間追加前のCベース・モデルの中から取り出したCコードの部分に対して、Basic Block (基本ブロック)を認識し、制御点を挿入することにより、制御点が挿入されたCコードを出力する。このBasic Blockは、RTOS及びアプリケーション・ソフトウェアのプログラムが分岐することなしに逐次的に走行する部分を指すものである。そして、その認識された Basic Block の前後に制御点が挿入される。
より詳しく説明すると、図3の(A)に示されるCコードの部分に対しては、ノードa及びノードbが一つの Basic Block と認識され、ノードc、ノードd及びノードeが一つの Basic Block と認識され、ノードc及びノードfが一つの Basic Block と認識され、ノードgが一つの Basic Block と認識される。このため、図3の(B)に示されるように、ノードbとノードcとの間、ノードeとノードgとの間、ノードfとノードgとの間、及びノードgの後に、それぞれ制御点が挿入される。
第2に、上記の制御点が挿入されたCコードの部分をコンパイルすることにより、ターゲットCPU用バイナリ・コードを生成する。なお、本明細書において、「ターゲットCPU」とは、検証対象のSoC等の半導体装置に搭載されているCPU(例えば、ARMプロセッサ又はSHプロセッサ)を意味する。
第3に、前述のようなコンパイルを行った結果、生成されたターゲットCPU用バイナリ・コード(命令コード)に基づいて、各々の制御点間の実行時間を算出する。その算出は、
kΣ[各命令のサイクル数]
なる演算式に基づいて行われる。ここで、係数kは、キャッシュメモリのミスヒット(キャッシュミスとも呼ばれる:キャッシュメモリ内に所望のデータが存在しないこと)に起因するオーバヘッド係数である。ここでは、キャッシュメモリに関するモデルを設けていないので、統計的処理による実行時間の補正を可能とするために、上記のようなオーバヘッド係数が導入されている。
第4に、制御点が挿入されたCコードの部分の各々の制御点へ、算出された実行時間であるタイミングバジェットをパラメータとする実行時間挿入文(SpecCの場合は、waitfor 文である)を追加し、Cベース言語記述の検証モデル(実行時間追加後のCベース・モデル)として出力する。なお、前述の先行技術文献では、実行時間追加前のCベース・モデルを「Untimedソフトウェア部品」と称し、上記のバジェット処理追加による実行時間追加後のCベース・モデルを「Timedソフトウェア部品」と称している。
例えば、図3の(B)に示されるノードa及びノードbの実行時間がt1と算出され、ノードc、ノードd及びノードeの実行時間がt2と算出され、ノードc及びノードfの実行時間がt3と算出され、ノードgの実行時間がt4と算出されたとする。この場合には、図3の(C)に示されるように、ノードbとノードcとの間の制御点には、実行時間挿入文として waitfor(t1) が追加される。同様に、ノードeとノードgとの間の制御点には実行時間挿入文として waitfor(t2) が追加され、ノードfとノードgとの間の制御点には実行時間挿入文として waitfor(t3) が追加され、ノードgの後の制御点には実行時間挿入文として waitfor(t4) が追加されることとなる。
図4は、このようにして作成されたCベース言語記述の検証モデルに基づくCベース・シミュレーションについて説明するための模式図である。Cベース言語記述の検証モデルをコンパイルしてホストCPU用バイナリ・コードを生成することにより、ホストCPUにおいてCベース・シミュレータを使用したCベース・シミュレーションが可能となる。ここで、「ホストCPU」とは、協調検証を実行するパーソナル・コンピュータ(PC)又はワーク・ステーション(WS)に搭載されているCPU(例えば、Pentium(登録商標)プロセッサ)を意味する。
換言すれば、図3及び図4に示したようなバジェット処理追加によりソフトウェア部品の検証モデルを生成する場合、Cコードの部分のBasic Block を認識して制御点を挿入し、各々の制御点間の実行時間をパラメータとする実行時間挿入文を追加して得られるCベース言語記述の検証モデルをコンパイルして生成されたホストCPU用バイナリ・コードをホストCPUで実行させるようにしている。このようなソフトウェア検証モデル生成方法では、命令コードの一命令ごとにその命令内容を解釈してシミュレーションを実行する従来のISS(Instruction Set Simulator)を利用したシミュレーションの場合に比較して、シミュレーション性能(命令数/秒)が100〜1000倍程度向上し、ハードウェア/ソフトウェア協調検証におけるシミュレーションの高速化を図ることができる。
又一方で、シミュレーションの過程において、waitfor 文が出現したところで、シミュレータがその内容を解釈することにより、命令実行時間の管理が可能となるため、タイミングについてのシミュレーション精度もある程度維持することができる。すなわち、ノードbに相当する命令コードの実行後には、waitfor(t1) の命令コードを解釈することで累積処理時間T1=t1が求められる。同様に、ノードeに相当する命令コードの実行後には累積処理時間T2=t1+t2が求められる一方、ノードfに相当する命令コードの実行後には累積処理時間T2=t1+t3が求められる。
そして、ノードgに相当する命令コードの実行後には、プログラムがノードc、ノードd及びノードe のルートを走行した場合には累積処理時間T3=t1+t2+t4が求められる一方、プログラムがノードc及びノードfのルートを走行した場合には累積処理時間T3=t1+t3+t4が求められることとなる。
さらに、他の先行技術文献(特許文献2)の特願平2004−107207号(平成16年3月31日出願)では、Cコードの部分のBasic Block に挿入された各々の制御点間の実行時間を算出すると共に、当該実行時間を積算して得られる積算値が指定値以上であると判定された場合にのみ、当該積算値をパラメータとするwaitfor 文をソフトウェア部品に追加するようにしている。このような方法によって、前述の特許文献1の場合に比べてwaitfor 文の追加頻度が節減され、特許文献1の場合よりもシミュレーションの実行速度が速くなってシミュレーション性能が向上する。この場合、当該積算値が指定値以上であると判定された場合に当該積算値をパラメータとするwaitfor 文を追加し、Cベース・シミュレータが当該waitfor 文を解釈して命令実行時間の管理を行うことができるので、特許文献1の場合に比べてシミュレーション精度がそれほど低下することはない。
ここで、参考のため、図2〜図4に関連した特許文献1や、特許文献1のソフトウェア検証モデル生成方法を一部変更した方法が記載された特許文献2以外に、従来のハードウェア/ソフトウェア協調検証方法に関連した幾つかの先行技術文献を挙げておく。
ISSを使用した協調検証に関する先行技術文献としては、下記特許文献3〜5の他に、下記の非特許文献1及び2が存在する。なお、下記の非特許文献3は、前述の“Basic Block”に関するものであり、非特許文献4〜6は、前述の“Fixed I/O Behaviorモデル”に関するものであり、非特許文献7〜9は、Cベース言語の設計及び検証の技術動向に関するものである。
特願2003−024706号(平成15年1月31日出願) 特願2004-107207号(平成16年3月31日出願) 特開2000−259445号公報 特開2001−256072号公報 特開2002−175344号公報 若林一敏:C言語によるLSI設計−動作合成とHW/SW協調検証の実際、NE Embedded Symposium 2002. 黒川、池上、大坪、浅尾、桐ヶ谷、三栖、高橋、川津、新田、笠、若林、友部、高橋、向山、竹中:C言語ベースの動作合成を利用したシステムLSI設計手法の効果分析と考察、電子情報通信学会第15回軽井沢ワークショップ、pp. 131-142、Apr. 2002. Alfred Aho, Ravi Sethi and Jeffrey Ullman, "Compilers: Principals, Techniques and Tools", Addison-Wesley, 1986. D. W. Knapp, T. Ly, D. MacMillen and R. Miller, "Behavioral Synthesis Methodology for HDL-Based Specification and Validation", Proc. Design Automation Conf., June 1995. T. Ly, D. W. Knapp, R. Miller and D. MacMillen, "Scheduling using Behavioral Templates", Proc. Design Automation Conf., June 1995. D. W. Knapp, "Behavioral Synthesis: Digital System Design using the Synopsys Behavioral Compiler", Prentice Hall PTR. L. Gauthier, S. Yoo and A. A. Jerraya, "Automatic Generation and Targeting of Application Specific Operating Systems and Embedded Systems Software", Proc. Design Automation and Test in Europe, Mar. 2001. D. Lyonnard, S. Yoo, A. Baghdadi and A. A. Jerraya, "Automatic Generation of Application-Specific Architectures for Heterogeneous Multiprocessor System-on-Chip", Proc. Design Automation Conf., June 2001. S. Yoo, G. Nicolescu, L. Gauthier and A. A. Jerraya, "Automatic Generation of Fast Timed Simulation Models for Operating Systems in SoC", Proc. Design Automation and Test in Europe, Mar. 2002.
一般に、ARMプロセッサ又はSHプロセッサ等のターゲットCPUを用いた組み込みシステムにおいては、主記憶装置(メインメモリ)との命令コードやデータのアクセスを高速化するために、キャッシュメモリをホストCPU側に設けることが多い。このキャッシュメモリは、通常、ターゲットCPUに内蔵されて使用される。
しかしながら、前述の特許文献1又は特許文献2等に記載されているような従来のハードウェア/ソフトウェア協調検証方法においては、ターゲットCPUにより生成された検証モデルに基づき、ホストCPUを使用してCベース・シミュレーションを実行した場合の実行時間を算出する際に、キャッシュメモリの動作の統計的処理を行うのみでキャッシュメモリのキャッシュミス等に起因する詳細な動作は考慮していなかった。このため、キャッシュメモリを内蔵したターゲットCPUの実行時間の見積りを行った場合、特にキャッシュメモリのキャッシュミス等が頻繁に発生したときは、実行時間の見積りの精度が低くなってシミュレーション精度が低下するという問題が生じてきた。
本発明は、上記問題点に鑑みてなされたものであり、ターゲットCPUにより生成された検証モデルに基づいてCベース・シミュレーションを実行した場合の実行時間を算出する際に、キャッシュメモリのキャッシュミス等を考慮することによって従来方法よりもシミュレーション精度を向上させることを可能にするようなソフトウェア検証モデル生成方法を提供することを目的とするものである。
上記目的を達成するために、本発明の第1の態様によれば、命令キャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成する場合に、Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、当該制御点が挿入された上記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、上記Basic Block の各々について、当該Basic Block の制御点間の実行時間を算出するステップと、上記実行時間をパラメータとする実行時間挿入文を当該Basic Block の後の制御点に追加するステップと、当該Basic Block の単位で命令キャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを当該Basic Block の後の制御点に挿入するステップと、命令キャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップと、上記命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行い、当該命令キャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算する命令キャッシュヒット判定機能を有する手続きを提供するステップと、上記命令キャッシュ無効化手続きが実行されたときに、上記命令タグメモリ部のエントリを無効化するステップと、上記の一連のステップで得られたCベース言語記述のソフトウェア部品を上記検証モデルとして出力するステップとを有するソフトウェア検証モデル生成方法が提供される。ここで、キャッシュラインとは、キャッシュメモリの内容を置換する単位を示しており、通常は、32バイトや64バイト程度の固定長に設定される。キャッシュラインフィルとは、命令キャッシュライン(又はデータキャッシュライン)へのデータのロード操作を指している。
好ましくは、本発明の第1の態様に係るソフトウェア検証モデル生成方法は、命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファが上記ターゲットCPU内に設けられている場合に、上記Basic Block の単位で上記命令アドレスが上記命令アドレス変換用バッファ内に存在するか否かの判定を行い、上記命令アドレスが上記命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを上記命令アドレス変換用バッファにロードする時間を加算するステップをさらに有する。
さらに、好ましくは、本発明の第1の態様に係るソフトウェア検証モデル生成方法は、上記命令アドレスの保護機能の有無をチェックし、上記命令アドレス変換用バッファにおけるアクセス保護に対する違反が検出された場合に、上記命令キャッシュメモリのアクセス保護の例外が発生したことを知らせるステップをさらに有する。
又一方で、本発明の第2の態様によれば、データキャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成する場合に、Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、当該制御点が挿入された上記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、上記Basic Block の各々について、当該Basic Block の制御点間の実行時間を算出するステップと、上記実行時間をパラメータとする実行時間挿入文を当該Basic Block の後の制御点に追加するステップと、上記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、データキャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを挿入するステップと、データキャッシュメモリの無効化を行うアセンブラコードを、データキャッシュ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップと、上記データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行い、当該データキャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算するデータキャッシュヒット判定機能を有する手続きを提供するステップと、上記データキャッシュ無効化手続きが実行されたときに、上記データタグメモリ部のエントリを無効化するステップと、上記の一連のステップで得られたCベース言語記述のソフトウェア部品を上記検証モデルとして出力するステップとを有するソフトウェア検証モデル生成方法が提供される。
好ましくは、本発明の第2の態様に係るソフトウェア検証モデル生成方法は、データアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファが上記ターゲットCPU内に設けられている場合に、上記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、上記データアドレスが上記データアドレス変換用バッファ内に存在するか否かの判定を行い、上記データアドレスが上記データアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリを上記データアドレス変換用バッファにロードする時間を加算するステップをさらに有する。
さらに、好ましくは、本発明の第2の態様に係るソフトウェア検証モデル生成方法は、上記データアドレスの保護機能の有無をチェックし、上記データアドレス変換用バッファにおけるアクセス保護に対する違反が検出された場合に、上記データキャッシュメモリのアクセス保護の例外が発生したことを知らせるステップをさらに有する。
又一方で、本発明の第3の態様によれば、命令キャッシュメモリ及びデータキャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成する場合に、Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、当該制御点が挿入された上記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、上記Basic Block の各々について、当該Basic Block の制御点間の実行時間を算出するステップと、上記実行時間をパラメータとする実行時間挿入文を当該Basic Block の後の制御点に追加するステップと、当該Basic Block の単位で命令キャッシュメモリがヒットしているか否かの判定を行うための手続き呼び出しを当該Basic Block の後の制御点に挿入するステップと、上記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、データキャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを挿入するステップと、命令キャッシュメモリ及びデータキャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュ無効化手続き及びデータキャッシュメモリ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップとを有するソフトウェア検証モデル生成方法が提供される。
さらに、上記のソフトウェア検証モデル生成方法は、上記命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行い、当該命令キャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算する命令キャッシュヒット判定機能を有する手続きを提供するステップと、上記データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行い、当該データキャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を追加するデータキャッシュヒット判定機能を有する手続きを提供するステップと、上記命令キャッシュ無効化手続き及び上記データキャッシュメモリ無効化手続きが実行されたときに、上記命令タグメモリ部及び上記データタグメモリ部のエントリを無効化するステップと、上記の一連のステップで得られたCベース言語記述のソフトウェア部品を上記検証モデルとして出力するステップとを有する。
好ましくは、本発明の第3の態様に係るソフトウェア検証モデル生成方法は、命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファが上記ターゲットCPU内に設けられている場合に、上記Basic Block の単位で上記命令アドレスが上記命令アドレス変換用バッファ内に存在するか否かの判定を行い、上記命令アドレスが上記命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを上記命令アドレス変換用バッファにロードする時間を加算するステップと、データアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファが上記ターゲットCPU内に設けられている場合に、上記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、上記データアドレスが上記データアドレス変換用バッファ内に存在するか否かの判定を行い、上記データアドレスが上記データアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリを上記データアドレス変換用バッファにロードする時間を加算するステップとをさらに有する。
さらに、好ましくは、本発明の第3の態様に係るソフトウェア検証モデル生成方法は、上記命令アドレスの保護機能の有無をチェックし、上記命令アドレス変換用バッファのアクセス保護に対する違反が検出された場合に、上記命令アドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップと、上記データアドレスの保護機能の有無をチェックし、上記データアドレス変換用バッファのアクセス保護に対する違反が検出された場合に、上記データアドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップとをさらに有する。
要約すれば、本発明では、第1に、Cベース言語記述のソフトウェア部品のBasic Block に挿入された各々の制御点間の実行時間を算出すると共に、Basic Block の単位で、ターゲットCPUに内蔵の命令キャッシュメモリがヒットしているか否かを判定し、キャッシュミス(命令キャッシュメモリがヒットしていないこと)が検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、上記のような命令キャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、ハードウェア及びソフトウェアの協調検証におけるシミュレーションを実行するようにしている。このように、命令キャッシュメモリがターゲットCPUに内蔵されている場合に、命令キャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間を加算することによって、従来方法よりも実行時間の見積りの精度が高くなり、シミュレーションの精度が向上する。
この場合、命令キャッシュメモリがヒットしているか否かの判定を命令単位ではなく、Basic Block の単位で行うので、シミュレーション全体の動作を制御するCベース・シミュレータ等における処理負荷を軽減することが可能になる。
さらに、本発明では、第2に、命令アドレス変換用バッファ(例えば、TLB(トランスレーション・ルックアサイド・バッファ:Translation Look-aside Buffer ))がターゲットCPU内に設けられている場合に、命令アドレス変換用バッファのミス(命令アドレスが当該命令アドレス変換用バッファ内に存在しないこと)が検出されたときに、命令アドレス変換のエントリを命令アドレス変換用バッファにロードする時間を加算するようにしている。それゆえに、命令アドレス変換用バッファのミスの際に命令アドレス変換のエントリをロードする時間を含めた高精度のシミュレーションを実行することが可能になる。
さらに、本発明では、第3に、命令アドレス変換用バッファのアクセス保護に対する違反が検出された場合に、命令アドレス変換用バッファのアクセス保護の例外が発生したことをCベース・シミュレータ等に知らせることによって、シミュレーションの実行時に命令アドレス変換用バッファのアクセス保護に対する違反を確実に検出することが可能になる。
さらに、本発明では、第4に、Cベース言語記述のソフトウェア部品のBasic Block に挿入された任意の制御点間の実行時間を算出すると共に、データのアクセスが必要な部分で、ターゲットCPUに内蔵のデータキャッシュメモリがヒットしているか否かを判定し、キャッシュミス(データキャッシュメモリがヒットしていないこと)が検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、上記のようなデータキャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、ハードウェア及びソフトウェアの協調検証におけるシミュレーションを実行するようにしている。このように、データキャッシュメモリがターゲットCPUに内蔵されている場合にも、データキャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間を加算することによって、従来方法よりも実行時間の見積りの精度が高くなり、シミュレーションの精度が向上する。
さらに、本発明では、第5に、データアドレス変換用バッファ(例えば、TLB)がターゲットCPU内に設けられている場合に、データアドレス変換用バッファのミス(データアドレスが当該データアドレス変換用バッファ内に存在しないこと)が検出されたときに、データアドレス変換のエントリをデータアドレス変換用バッファにロードする時間を加算するようにしている。それゆえに、データアドレス変換用バッファのミスの際にデータアドレス変換のエントリをロードする時間を含めた高精度のシミュレーションを実行することが可能になる。
さらに、本発明では、第6に、データアドレス変換用バッファのアクセス保護に対する違反が検出された場合に、データアドレス変換用バッファのアクセス保護の例外が発生したことをCベース・シミュレータ等に知らせることによって、シミュレーションの実行時にデータアドレス変換用バッファのアクセス保護に対する違反を確実に検出することが可能になる。
さらに、本発明では、第7に、Cベース言語記述のソフトウェア部品のBasic Block に挿入された各々の制御点間の実行時間を算出すると共に、Basic Block の単位で、ターゲットCPUに内蔵の命令キャッシュメモリがヒットしているか否かを判定し、キャッシュミスが検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、上記のような命令キャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、又一方で、データのアクセスが必要な部分で、ターゲットCPUに内蔵のデータキャッシュメモリがヒットしているか否かを判定し、キャッシュミスが検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、上記のようなデータキャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、シミュレーションを実行するようにしている。
上記のように、命令キャッシュメモリ及びデータキャッシュメモリの両方がターゲットCPUに内蔵されている場合にも、命令キャッシュメモリのキャッシュミス、及び、データキャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間を加算することによって、従来方法よりも実行時間の見積りの精度がさらに高くなり、シミュレーションの精度が顕著に向上する。
さらに、本発明では、第8に、命令アドレス変換用バッファ及びデータアドレス変換用バッファがターゲットCPU内に設けられている場合に、命令アドレス変換用バッファのミスが検出されたときに、命令アドレス変換のエントリを命令アドレス変換用バッファにロードする時間を加算すると共に、データアドレス変換用バッファのミスが検出されたときに、データアドレス変換のエントリをデータアドレス変換用バッファにロードする時間を加算するようにしている。それゆえに、命令アドレス変換用バッファ及びデータアドレス変換用バッファのミスの際に命令アドレス変換のエントリ及びデータアドレス変換のエントリをロードする時間を含めたより高精度のシミュレーションを実行することが可能になる。
さらに、本発明では、第9に、命令アドレス変換用バッファ及びデータアドレス変換用バッファのアクセス保護に対する違反が検出された場合に、命令アドレス変換用バッファ及びデータアドレス変換用バッファのアクセス保護の例外が発生したことをCベース・シミュレータ等に知らせることによって、シミュレーションの実行時に命令アドレス変換用バッファ及びデータアドレス変換用バッファのアクセス保護に対する違反をより確実に検出することが可能になる。
以下、添付図面を参照して本発明の実施形態について説明する。
図5は、本発明に係るソフトウェア検証モデル生成方法を実施するためのハードウェア環境を例示するブロック図である。なお、これ以降、前述した構成要素と同様のものについては、同一の参照番号を付して表すこととする。
図5に例示されるように、本発明に係るソフトウェア検証モデル生成方法(又はハードウェア/ソフトウェア協調検証方法)は、中央処理装置(図5ではホストCPUと記載)912、キャッシュメモリ916及び主記憶装置(MS)914(図5では、主記憶と略記する)を有するコンピュータ本体910、ディスプレイ920、キーボード922、マウス924、ハードディスク装置等からなる外部記憶装置(HD)930を備える通常のパーソナル・コンピュータ(PC)又はワーク・ステーション(WS)上で実行可能である。
ここでは、本発明に係るソフトウェア検証モデル生成方法を高速にて実行させるために、高性能のホストCPU912が要求される。この要求に応えるために、ホストCPU912と主記憶装置914との間にキャッシュメモリ916が設けられている。このキャッシュメモリ916は、ホストCPU912が主記憶装置914に対して頻繁に読み書きするデータを高速にて転送させるために、当該データをホストCPU912からストアして(書き込んで)一時的にため込むか、又は当該データを主記憶装置914からロードして(ダウンロードとも呼ばれる)一時的にため込む機能を有している。キャッシュメモリ916と主記憶装置914とは、バス918を介して相互に接続されている。キャッシュメモリ916は、図6にて後述するように、命令キャッシュメモリ及びデータキャッシュメモリの少なくとも一方、又は両方を含んでおり、コンピュータ本体910に内蔵されている。
ホストCPU912は、ソフトウェア検証モデル生成(又はハードウェア/ソフトウェア協調検証)を実行するホストCPUとして動作するものであり、例えば、Pentiumプロセッサである。以下に説明されるソフトウェア検証モデル生成(又はハードウェア/ソフトウェア協調検証)のためのプログラムは、ホストCPU912によって実行される。又、各種のデータ、ファイル等は、外部記憶装置930から主記憶装置(MS)914にロードされて処理される。
図6は、ターゲットCPUを用いた組み込みシステムにおける命令キャッシュメモリ及びデータキャッシュメモリの接続例を示すブロック図である。ここでは、命令キャッシュメモリとデータキャッシュメモリを備えた組み込みシステムの展開的な接続例が図示されている。
図6において、キャッシュメモリ16は、命令(広い意味で「データ」とも呼ばれる)の内容を一時的に格納する命令キャッシュメモリ16−1、もしくはデータの内容を一時的に格納するデータキャッシュメモリ16−2、又はその両方を含んでいる。この命令キャッシュメモリ16−1及びデータキャッシュメモリ16−2は、好ましくは、ターゲットCPU12に内蔵されて使用される。なお、図6に示すような構成では、キャッシュメモリを単に「キャッシュ」と略記したり、命令キャッシュメモリを単に「命令キャッシュ」と略記したり、データキャッシュメモリを単に「データキャッシュ」と略記したりすることもある。
図6のターゲットCPU12を用いたハードウェア/ソフトウェア協調検証システムにおいては、バジェット追加ツールによりソフトウェア部品のBasic Block に挿入された各々の制御点間の実行時間を算出する機能が備わっており、かつ、キャッシュメモリ16(命令キャッシュメモリ16−1及びデータキャッシュメモリ16−2)によるエミュレーション機能が追加される。ここで、ターゲットCPU12は、キャッシュメモリに対する命令実行において、命令キャッシュメモリ16−1から命令の内容をフェッチする操作(命令フェッチ操作)を実行したり、データキャッシュメモリ16−2に対してデータをロードしたりストアしたりするための命令(ロード命令/ストア命令)を実行したりする。
より詳しく説明すると、ターゲットCPU12は、命令キャッシュメモリ16−1がヒットしているか否か(命令キャッシュメモリ内に所望のデータ(命令の内容)が存在するか否か)を判定し、キャッシュミス(命令キャッシュメモリ内に所望のデータが存在しないこと)を検出したときに、主記憶装置14からデータを読み出し、命令キャッシュメモリ16−1の命令キャッシュラインへロードする。ここで、命令キャッシュラインは、命令キャッシュメモリ16−1へのデータのロード単位を表している。既述したように、この命令キャッシュラインへデータをロードする操作をキャッシュラインフィルと称している。この場合、一つの命令キャッシュライン分のデータのキャッシュラインフィルが終了するまで、ターゲットCPU12は待ち状態になる。このターゲットCPU12の待ち状態に起因する待ち時間は、「キャッシュミスペナルティ」と呼ばれる。
又一方で、ターゲットCPU12は、データキャッシュメモリ16−2がヒットしているか否か(データキャッシュメモリ内に所望のデータが存在するか否か)を判定し、キャッシュミス(データキャッシュメモリ内に所望のデータが存在しないこと)を検出したときに、主記憶装置14からデータを読み出し、データキャッシュメモリ16−2のデータキャッシュラインへロードする。ここで、データキャッシュラインは、データキャッシュメモリ16−2へのデータのロード単位を表している。既述したように、このデータキャッシュラインへデータをロードする操作をキャッシュラインフィルと称している。この場合、一つのデータキャッシュライン分のデータのキャッシュラインフィルが終了するまで、ターゲットCPU12は待ち状態になる。このターゲットCPU12の待ち状態に起因する待ち時間は、前述の命令キャッシュメモリの場合と同様に、「キャッシュミスペナルティ」と呼ばれる。
図7は、図6の命令キャッシュメモリ16−1、又は、データキャッシュメモリ16−2の具体的な構成例を示すブロック図であり、図8は、図7の命令キャッシュメモリ16−1、又は、データキャッシュメモリ16−2のキャッシュミスによりキャッシュミスペナルティが発生する様子を説明するためのタイムチャートである。
図7において、命令キャッシュメモリ16−1、又は、データキャッシュメモリ16−2は、複数の行の命令キャッシュライン、又は、データキャッシュライン(以下、単にキャッシュラインと呼ぶ)からなるウェイの集合体により構成される。一つの行のキャッシュラインは、当該キャッシュラインの内容が有効であるか否かを示す有効ビット(Valid Bit )と、最初に主記憶装置から当該キャッシュラインにロードされたデータがCPUにより書き替えられているか否か(ダーティの状態になっているか否か)を示すダーティビット(Dirty Bit )と、当該キャッシュライン内のデータがどのアドレスに属するデータであるかを示すタグ部(図7では、タグ(Tag )と略記する)とを有する。通常、上記の有効ビット、ダーティビット、及びタグ部は図示するように複数のウェイからなるタグメモリ16−3に格納される。ただし、命令キャッシュメモリ16−1では、一度ロードされたデータがCPUにより書き替えられることはないので、実際にはダーティビットは不要である。又一方で、各々のキャッシュラインに対応させてアドレス(命令キャッシュメモリ16−1、又は、データキャッシュメモリ16−2に対応して、それぞれ、命令アドレス、又は、データアドレス)31が設けられている。このアドレス31には、対応するキャッシュラインがどのアドレスに属するかを示すタグ(Tag )と、当該キャッシュラインのインデックス値を示すインデックス(Index )と、キャッシュラインの先頭アドレスの位置からのオフセット値を示すライン内オフセット(Line内Offset)とが含まれる。
図7に示すキャッシュラインメモリ16−4は、主記憶からロードしたキャッシュラインの内容を格納するメモリであり、各キャッシュラインはタグメモリ16−3の有効ビットやタグ部と1対1に対応している。この協調検証環境では、シミュレーション中にキャッシュミスが検出された場合に、キャッシュラインフィルに要する実行時間を求めるだけでよいので、実際には、このキャッシュラインメモリ16−4のシミュレーションモデルは不要である。
図7のタグメモリ16−3においては、タグメモリ16−3の各々のウェイに対してコンパレータ32が設けられている。このコンパレータ32は、アドレス内に含まれるタグ31とタグメモリ16−3から読み出したタグとを比較し、この特定のアドレスに一致するアドレスがあるか否かを判定する機能を有している。
さらに、図7では、キャッシュライン毎にキャッシュメモリがヒットしているか否かを判定するキャッシュヒット検出部34が設けられている。このキャッシュヒット検出部34は、コンパレータ32による判定結果に基づき、キャッシュラインのアドレスをパラメータとしてキャッシュライン毎にキャッシュメモリ内に所望のデータが存在するか否かを判定する機能を有している。
キャッシュヒット検出部34において、命令キャッシュメモリ16−1、又は、データキャッシュメモリ16−2のキャッシュミス(キャッシュメモリ内に所望のデータが存在しないこと)が検出された場合、キャッシュラインのキャッシュラインフィルを実行するための実行時間(キャッシュミスペナルティの発生によるCPUの待ち時間)を追加するようにしている。なお、図7に示されるように、キャッシュラインのキャッシュラインフィルを実行するための実行時間を「ラインフィル時間」と称する場合もある。
このようなキャッシュミスペナルティが発生したときにキャッシュラインフィルが実行される様子(時間(t)に対するキャッシュラインへのデータの転送の様子)を図8に示す。ARMプロセッサ等のターゲットCPUにより生成されたソフトウェア検証モデルでは、命令キャッシュメモリ16−1、または、データキャッシュメモリ16−3のキャッシュミスが検出された場合に、システム動作の基本となるクロックCLKに同期して実行されるキャッシュラインフィルは、キャッシュラインの先頭アドレスから開始される。命令キャッシュメモリ16−1のインプリメントによっては、途中でキャッシュミスが検出されたアドレスに対応する命令の内容がロードされる際に、キャッシュラインへのロードとCPUによる命令実行とが平行して行われるものもある。この場合は、見かけ上のキャッシュラインフィルの実行時間は、小さくなる。
したがって、命令キャッシュメモリのキャッシュミスペナルティは、次式のように表される。
Tinit + Tword *Line Size − Texe
ここで、Tinitは、キャッシュミスが検出されてから最初の先頭ワードのロードを開始するまでの時間、Twordはワード毎のロード時間、Line Size(ラインサイズ)は一つのキャッシュラインのワード数、Texeは、キャッシュミスが検出された命令キャッシュラインのうち、キャッシュラインフィルの動作中にCPUにより実行された命令時間を示す。例えば、ラインサイズが8ワード(=32バイト)であり、1回あたりにロードするワード幅が4バイトである場合、ワード単位の命令(先頭ワード、次ワード……)が次々にキャッシュラインメモリ16−4にロードされ、合わせて8回ロードされることになる。
換言すれば、本発明の実施形態では、図7に示したように、命令キャッシュメモリの命令タグメモリのエミュレーション機能を用意し、命令アドレスをパラメータとして命令キャッシュメモリがヒットしているか否かの判定を行い、命令キャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間をキャッシュミスペナルティとして追加するようになっている。
また一方で、本発明の実施形態では、データキャッシュメモリのエミュレーション機能を用意し、データアドレスをパラメータとしてデータキャッシュメモリがヒットしているか否かの判定を行い、データキャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間をキャッシュミスペナルティとして追加するようになっている。
ここで、データキャッシュメモリのキャッシュミスが発生した場合のキャッシュラインフィルの動作は、ストア・スルー(Store Through )モード又はストア・バック(Store Back)のいずれかのモードで実行される点に注意すべきである。
ここで、「ストア・スルーモード」とは、データキャッシュメモリ16−2に対するストア(書き込み)動作を行った際に、データキャッシュメモリ16−2の内容を更新すると同時に主記憶装置の内容も更新するモードを指している。このストア・スルーモードでは、データキャッシュメモリ16−2及び主記憶装置14の内容を更新する度にバス18を使用するので、主記憶装置14に対するストア動作が終了するまでターゲットCPU12は待ち状態になる。したがって、ストア・スルーモードでは、ストア動作を行う度に主記憶装置14への書き込みのための実行時間だけターゲットCPUの実行を待たせる必要がある。なお、データキャッシュメモリ16−2のインプリメントによっては、このようなストア動作の要求を一時的に格納しておくストアバッファを用意しているものもある。このような場合には、ストア動作を行う場合に、まだ、ストアバッファにストア要求が残っているときのみターゲットCPU12の実行を待たせる必要がある。この場合、キャッシュラインフィルが実行された場合、主記憶装置14の更新は既に行われているので、アドレス31のインデックスで示されるウェイから適当なキャッシュラインを選択し、このキャッシュラインに主記憶装置14からロードしたラインの内容をロードするだけでよいので、データキャッシュメモリのキャッシュミスペナルティは前述の式のように表される。
これに対し、「ストア・バックモード」とは、データキャッシュメモリ16−2に対するストア動作を行った際に、データキャッシュメモリ16−2の内容のみを更新し、主記憶装置の内容は元のままにしておくモードを指している。このストア・バックモードでは、データキャッシュラインに対するストア動作が行われた際にダーティビットを“1”にセットしておく。次いで、データキャッシュミスの発生によって、ダーティビットが“1”になっているデータキャッシュラインが置換される場合、まず、更新されたデータキャッシュラインの内容を主記憶装置に追い出す必要がある。この後、キャッシュミスしたデータキャッシュラインの更新後の内容をロードすることによって、データキャッシュラインの置換を行う(ストア・バックの動作)。このように、データキャッシュラインの置換が必要なストア・バックモードにおいては、ストア・スルーモードでキャッシュラインフィルを実行する場合の実行時間以外に、上記のようなストア・バックの動作を実行するための実行時間が追加される。なお、データキャッシュラインのストア・バック要求を保持するストアバッファをインプリメントしている場合には、追い出すデータキャッシュラインの内容をストアバッファに格納した後、直ちに、キャッシュミスしたデータキャッシュラインの内容を主記憶装置14からロードすることができる。このような場合は、キャッシュラインフィルを実行する場合の実行時間の追加だけでよい。この場合も、既に、ストアバッファに以前のストア・バック要求が残っている場合は、ストアバッファが空になるまで待たされる。
図9は、本発明に係る命令キャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャートのその1、図10は、本発明に係る命令キャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャートのその2、そして、図11は、本発明に係る命令キャッシュヒット判定機能を有する手続きの追加によるソフトウェア検証モデル生成方法を説明するための模式図である。
以下、図9〜図11を参照しながら、命令キャッシュメモリ16−1がターゲットCPU12に内蔵されている場合に、Cベース言語記述のソフトウェア部品50に基づいて本発明に係る命令キャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明する。
まず、図9のステップ105では、実行時間追加前のCベース言語で記述されたソフトウェア部品50を入力して、このソフトウェア部品の中からANSI−C記述のみによるソースコードの部分(Cコードの部分と呼ばれる)を取り出す。次いで、ステップ110では、このCコードの部分に対して、Basic Block (基本ブロック)を認識し、制御点を挿入することにより、制御点が挿入されたCコードの部分(ANSI−C記述)52を出力する。このBasic Block は、プログラムが分岐することなしに逐次的に走行する部分を指すものである。そして、その認識された Basic Block の前後に制御点が挿入される。
より詳しく説明すると、図11の(A)に示されるCコードの部分に対しては、ノードa及びノードbが一つの Basic Block と認識され、ノードc、ノードd及びノードeが一つの Basic Block と認識され、ノードc及びノードfが一つの Basic Block と認識され、ノードgが一つの Basic Block と認識される。このため、図11の(B)に示されるように、ノードbとノードcとの間、ノードeとノードgとの間、ノードfとノードgとの間、及びノードgの後に、それぞれ制御点(図11の(B)の●印の部分)が挿入される。
さらに、ステップ120では、かかる制御点が挿入されたCコードの部分をコンパイルすることにより、ターゲットCPU用バイナリ・コード54を生成する。
さらに、ステップ130では、Cコードの部分52からBasic Block を順次取り出す。さらに、ステップ135では、取り出すBasic Block があるか否かを判定する。取り出すBasic Block があると判定された場合は、ステップ140において、前述のコンパイルの結果として生成されたターゲットCPU用バイナリ・コード(命令コード)54に基づいて、ステップ130で取り出したBasic Block の制御点間の実行時間を算出する。又一方で、取り出すBasic Block がないと判定された場合は、前述のステップ105〜135で得られたCベース言語記述のソフトウェア部品を検証モデル56として出力し、本プログラムの処理を終了する。
前述のステップ140におけるBasic Block の制御点間の実行時間の算出は、
Σ[各命令のサイクル数]
なる演算式に基づいて行われる。
さらに、ステップ145では、制御点が挿入されたCコードの部分の各々の制御点(すなわち、各々のBasic Block の後の制御点)へ、算出された実行時間をパラメータとする実行時間挿入文(SpecCの場合は、waitfor 文である)を追加し、Cベース言語記述の検証モデル(実行時間挿入文追加後のCベース・モデル)56として出力する。
例えば、図11の(B)のBasic Block の認識と制御点の挿入との関係に基づいて、図11の(B)に示されるノードa及びノードbの実行時間がt1と算出され、ノードc、ノードd及びノードe の実行時間がt2と算出され、ノードc及びノードf の実行時間がt3と算出され、ノードgの実行時間がt4と算出されたとする。この場合には、図11の(C)のCベース言語記述の検証モデルに示されるように、ノードbとノードcとの間の制御点には、実行時間挿入文として waitfor(t1) が追加される。同様に、ノードeとノードgとの間の制御点には実行時間挿入文として waitfor(t2) が追加され、ノードfとノードgとの間の制御点には実行時間挿入文として waitfor(t3) が追加され、ノードgの後の制御点には実行時間挿入文として waitfor(t4) が追加されることとなる。
さらに、図10のステップ150では、図9のステップ130で取り出したBasic Block の単位で命令キャッシュメモリがヒットしているか否かの判定(命令キャッシュヒット判定:命令キャッシュメモリのミス判定)を行うための手続きの呼び出しを挿入する。さらに、図10のステップ155では、命令キャッシュメモリのキャッシュミスが検出されたときに命令キャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュメモリの無効化を行うための命令キャッシュ無効化手続きの呼び出しを行うANSI−C記述のみによるソースコード(すなわち、Cコード)に変換する。
さらに、図10のステップ160では、前述のステップ150で挿入された手続きに従って命令キャッシュメモリがヒットしているか否かの判定を行い、命令キャッシュヒット判定機能を有する手続きを付与する。この命令キャッシュヒット判定機能においては、命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行った場合、当該命令キャッシュメモリのキャッシュミスが検出されたときに、キャッシュラインフィルを実行するための実行時間をキャッシュミスペナルティとして追加するようになっている。
さらに、図10のステップ165では、前述のステップ155で呼び出された命令キャッシュ無効化手続きが実行されたときに、命令キャッシュメモリ内に保持されている命令タグメモリ部のエントリを無効化するのに要する実行時間だけCPUを待ち状態にして、当該命令キャッシュメモリの有効ビットの内容をクリアする。
前述の一連のステップ105〜165によって、Cベース言語記述のソフトウェア部品に対して各々のBasic Block の後の制御点に実行時間挿入文が追加されると共に、Basic Block の単位で命令キャッシュヒット判定を行ってキャッシュミスが検出されたときにキャッシュミスペナルティが追加されることになる。最終的に、上記の一連のステップで得られたCベース言語記述のソフトウェア部品が、前述のCベース言語記述の検証モデル56として出力される。
例えば、図11の(C)のCベース言語記述の検証モデルに示されるように、Cコードの部分をターゲットCPUの命令にコンパイルし、Basic Block の先頭アドレスAi(iは任意の正の整数:ここでは、i=1〜4)と基本ブロック長Liとを算出し、各々のBasic Block の後の制御点に既に挿入されている実行時間挿入文(waitfor(t1)〜waitfor(t4))の直後に、命令フェッチに対する命令キャッシュヒット判定を行うための命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) :ここでは、i=1〜4)を挿入する。ここでは、命令キャッシュヒット判定を行った結果としてキャッシュミス(命令アドレスに対応する命令の内容が命令キャッシュメモリ内に存在しないこと)を検出した場合には、キャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
図12は、図11にて生成されたCベース言語記述の検証モデルに基づくCベース・シミュレーションについて説明するための模式図である。
Cベース言語記述の検証モデルをコンパイルしてホストCPU用バイナリ・コードを生成することにより、ホストCPUにおいてCベース・シミュレータを使用したCベース・シミュレーションが可能となる。ここで、「ホストCPU」とは、既述したように、協調検証を実行するパーソナル・コンピュータ(PC)又はワーク・ステーション(WS)に搭載されているCPUを意味する。
図12の左側の部分においては、Cベース言語記述のソフトウェア部品のBasic Block の制御点に実行時間挿入文(waitfor(t1)〜waitfor(t4))を挿入すると共に命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) :ここでは、i=1〜4)を挿入することによってCベース言語記述の検証モデルを作成するようにしている。
又一方で、図12の右側の部分においては、Basic Block の制御点に挿入された実行時間挿入文に基づいて、各々の制御点間の実行時間を算出すると共に、Basic Block の単位で挿入された命令キャッシュヒット判定呼び出し文に基づいて、命令キャッシュメモリのキャッシュミスを検出したときにキャッシュラインフィルを実行するための実行時間(ラインフィル時間)を加算するようにしている。
換言すれば、命令キャッシュメモリがターゲットCPUに内蔵されている場合、図11及び図12に示したような実行時間挿入文(waitfor(t1)〜waitfor(t4))及び命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) )に基づいてソフトウェア部品の検証モデルを生成する際に、Cコードの部分におけるBasic Block の各々の制御点間の実行時間をパラメータとする実行時間挿入文を追加すると共に、Basic Block の単位で命令キャッシュヒット判定呼び出し文を追加して得られるCベース言語記述の検証モデルをコンパイルする。このコンパイルにより生成されたホストCPU用バイナリ・コードをホストCPUで実行させることによって、Cベース・シミュレータを使用したCベース・シミュレーションを実行することが可能になる。
図12のCベース・シミュレータを使用し、Basic Block の制御点に挿入された実行時間挿入文及び命令キャッシュヒット判定呼び出し文に基づいてシミュレーションを実行した場合、シミュレーションによる命令実行時間の見積りの精度が従来方法よりも高くなり、命令実行時間の時間管理をより正確に行うことができる。
より詳しく説明すると、図12の命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) :ここでは、i=1〜4)においては、アドレスAi〜Ai+Li−1までの範囲の命令アドレスに対応する命令の内容が命令キャッシュメモリ内に存在するか否かの判定を行い、キャッシュミス(当該命令アドレスに対応する命令の内容が命令キャッシュメモリ内に存在しないこと)を検出した場合には、キャッシュミスが発生した回数だけキャッシュラインフィルの実行時間(ラインフィル時間)のサイクル数を挿入するようになっている。ここでは、ラインフィル時間をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
又一方で、シミュレーションの過程において、ノードa及びノードbに相当する命令コードの実行後に、waitfor(t1) の命令コードを解釈することで実行時間t1が求められ、シミュレーションの時刻を時間t1だけ進めることができる。さらに、fetch_icache (A1, L1) を解釈することで、アドレスA1〜A1+L1−1までの範囲で命令キャッシュメモリのキャッシュミスを検出した場合に、キャッシュミスが発生した回数だけキャッシュラインフィルの実行時間(ラインフィル時間)を挿入することができる。
同様に、ノードcからノードeに相当する命令コードの実行後に、waitfor(t2) の命令コードを解釈することで実行時間t2が求められ、シミュレーションの時刻を時間t2だけ進めることができる。さらに、fetch_icache (A2, L2) を解釈することで、アドレスA2〜A2+L2−1までの範囲で命令キャッシュメモリのキャッシュミスを検出した場合に、キャッシュミスが発生した回数だけラインフィル時間を挿入することができる。
同様に、ノードcとノードfに相当する命令コードの実行後に、waitfor(t3) の命令コードを解釈することで実行時間t3が求められ、シミュレーションの時刻を時間t3だけ進めることができる。さらに、fetch_icache (A3, L3) を解釈することで、アドレスA3〜A3+L3−1までの範囲で命令キャッシュメモリのキャッシュミスを検出した場合に、キャッシュミスが発生した回数だけラインフィル時間を挿入することができる。
同様に、ノードgに相当する命令コードの実行後に、waitfor(t4) の命令コードを解釈することで実行時間t4が求められ、シミュレーションの時刻を時間t4だけ進めることができる。さらに、fetch_icache (A4, L4) を解釈することで、アドレスA4〜A4+L4−1までの範囲で命令キャッシュメモリのキャッシュミスを検出した場合に、キャッシュミスが発生した回数だけラインフィル時間を挿入することができる。
一般的にいって、命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) )により命令キャッシュヒット判定を行った際に命令キャッシュメモリのキャッシュミスが検出される確率は、数%にすぎない。この命令キャッシュメモリのキャッシュミスが検出された場合のみ、キャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。それゆえに、Basic Block の単位で命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li) )を追加挿入した場合でも、従来方法とほぼ同等のシミュレーションの実行速度を維持することが可能になる。
好ましくは、命令キャッシュメモリの命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファ(例えば、TLB(トランスレーション・ルックアサイド・バッファ))がターゲットCPU内に設けられている場合に、命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li))において、メモリ管理ユニット機能が追加される。
このメモリ管理ユニット機能においては、Basic Block の単位で命令アドレスが命令アドレス変換用バッファ内に存在するか否かの判定を行い、当該命令アドレスが命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを命令アドレス変換用バッファにロードする時間を加算するようにしている。このようなメモリ管理ユニット機能によって、命令アドレス変換用バッファのミスの際に命令アドレス変換のエントリをロードする時間を含めた高精度のシミュレーションを実行することが可能になる。
さらに詳しく説明すると、上記のメモリ管理ユニット機能の追加を可能にするために、命令アドレス変換用バッファの内容を保持したTLBを予め用意すると共に、仮想メモリのマッピング情報の内容を保持したページテーブルを主記憶装置内に予め用意しておく。
上記の命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li))に基づいて、アドレスAi〜Ai+Li−1までの範囲の命令アドレスに対応する命令の内容が命令アドレス変換用バッファ内に存在するか否かの判定を行う。この判定結果として、命令アドレス変換用バッファのキャッシュミス(当該命令アドレスに対応する命令の内容が命令アドレス変換用バッファ内に存在しないこと)を検出した場合には、命令アドレス変換用バッファのエントリの内容を主記憶装置内のページテーブルからロードした値に更新し、命令アドレス変換用バッファのロードのためのサイクル数を挿入するようになっている。ここでは、命令アドレス変換用バッファにロードする時間をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
さらに、好ましくは、上記のメモリ管理ユニット機能を実行する際に、命令アドレスの保護機能の有無のチェックが行われる。ここで、命令アドレス変換用バッファにおいてアクセス保護に対する違反が検出された場合には、アクセス保護の例外が発生したことを知らせるようにしている。これによって、シミュレーションの実行時に命令アドレス変換用バッファにおけるアクセス保護に対する違反を確実に検出することが可能になる。
図13は、本発明に係る命令キャッシュヒット判定に関する手続き呼び出しをCソースコードに挿入した例を示す図である。ただし、図13の例は、図11及び図12にて説明したようなCコードの部分の例とは異なっている。
図13の左上の部分においては、ANSI−C記述によるCソースコードの部分が例示されている。このCソースコードの部分を解析して、特許文献1又は特許文献2に示すように、バジェット追加ツールによって、各々のBasic Block の後の制御点に実行時間挿入文(例えば、図13の左下の部分に示されるようなwaitfor(2)、 waitfor(4)、及びwaitfor(5) 等のwaitfor 文)を挿入する。つまり、図13の左上のCソースコード部分を、同図の右側に示されるようなターゲットCPUのアセンブリ言語記述によるアセンブラ出力に展開するように、クロスコンパイルしている。このアセンブラ出力における分岐先や分岐命令の出現個所を解析することによって、Basic Block(例えば、図13の右側で複数のブロック(各々のブロックが8バイト〜20バイトの容量を有する)により囲まれている部分)を認識することができる。このアセンブラ出力の基本ブロックとCのソースコードの照合を行い、Cのソースコードの各Basic Blockの終わりである制御点に実行時間挿入文(waitfor文)を挿入して、Cのソースコードを生成する。
本特許では、この制御点に、実行時間挿入文(waitfor文)と共に、命令キャッシュヒット判定手続きの呼び出し文(fetch_icache呼び出し文)を追加挿入するものである。
つまり、図13の右側のアセンブラ出力を解析してCソースコードとの間の照合を行い、Cソースコードの各々のBasic Block の後の制御点に、実行時間挿入文(waitfor文)と命令キャッシュヒット判定手続きの呼び出し文(fetch_icache呼び出し文)を追加挿入した後に、図13の左下の部分に示されるような更新後のC言語記述によるCソースコードの部分(すなわち、Cコードの部分)に変換する。この更新後のCコードの部分は、バジェット追加ツールによって、各々のBasic Block の後の制御点にて命令キャッシュヒット判定呼び出し文(fetch_icache呼び出し文)が追加挿入された形式になっている。より正確にいえば、図13の左下の部分では、更新後のCコードの部分をコンパイルすることによって最終的に出力されるCベース言語記述の検証モデルが図示されている。
より詳しく説明すると、図13のCベース言語記述の検証モデルにおいては、各々のBasic Block の後の制御点に挿入されている実行時間挿入文(waitfor(2)、 waitfor(4)、及びwaitfor(5))の直後に、命令フェッチに対する命令キャッシュヒット判定を行うための命令キャッシュヒット判定呼び出し文(fetch_icache (stringcpy, 8) 、fetch_icache (stringcpy+8, 20)、 fetch_icache (stringcpy+28, 16) 、fetch_icache (stringcpy+44, 8)、 及びfetch_icache (stringcpy+52, 8))を挿入する。ここで、fetch_icache呼び出しの2つのパラメタは、Basic Bclockの先頭アドレスとその長さ(バイト数)である。各々のBasic Block に対し命令キャッシュヒット判定手続き呼び出しを行った結果としてキャッシュミスを検出した場合には、当該Basic Block においてキャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文の呼び出しが行われる。
図14は、本発明に係るデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャートその1、図15は、本発明に係るデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャートのその2、図16は、本発明に係るデータキャッシュヒット判定機能を有する手続きの追加によるソフトウェア検証モデル生成方法を説明するための模式図である。
以下、図14〜図16を参照しながら、データキャッシュメモリがターゲットCPUに内蔵されている場合に、Cベース言語記述のソフトウェア部品60に基づいて本発明に係るデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明する。ここで、図14のステップ205〜245の処理手順は、前述の図9のステップ105〜145の処理手順と実質的に同じである点に注意すべきである。
まず、図14のステップ205では、実行時間追加前のCベース言語で記述されたソフトウェア部品60を入力して、このソフトウェア部品の中からANSI−C記述のみによるソースコードの部分(Cコードの部分と呼ばれる)を取り出す。次いで、ステップ210では、このCコードの部分に対して、Basic Block (基本ブロック)を認識し、制御点を挿入することにより、制御点が挿入されたCコードの部分(ANSI−C記述)62を出力する。このBasic Blockは、プログラムが分岐することなしに逐次的に走行する部分を指すものである。そして、その認識された Basic Block の前後に制御点が挿入される。
より詳しく説明すると、図16の(A)に示されるCコードの部分に対しては、ノードa及びノードbが一つの Basic Block と認識され、ノードc、ノードd及びノードeが一つの Basic Block と認識され、ノードc及びノードfが一つの Basic Block と認識され、ノードgが一つの Basic Block と認識される。このため、図14の(B)に示されるように、ノードbとノードcとの間、ノードeとノードgとの間、ノードfとノードgとの間、及びノードgの後に、それぞれ制御点(図16の(B)の●印の部分)が挿入される。
さらに、ステップ220では、かかる制御点が挿入されたCコードの部分をコンパイルすることにより、ターゲットCPU用バイナリ・コード64を生成する。
さらに、ステップ230では、Cコードの部分62からBasic Block を順次取り出す。さらに、ステップ235では、取り出すBasic Block があるか否かを判定する。取り出すBasic Block があると判定された場合は、ステップ240において、前述のコンパイルの結果として生成されたターゲットCPU用バイナリ・コード(データコード)64に基づいて、ステップ230で取り出したBasic Block の制御点間の実行時間を算出する。又一方で、取り出すBasic Block がないと判定された場合は、前述のステップ205〜235で得られたCベース言語記述のソフトウェア部品を検証モデル66として出力し、本プログラムの処理を終了する。
前述のステップ240におけるBasic Block の制御点間の実行時間の算出は、
Σ[各命令のサイクル数]
なる演算式に基づいて行われる。
さらに、ステップ245では、制御点が挿入されたCコードの部分の任意の制御点(すなわち、Basic Block の後の任意の制御点)へ、算出された実行時間をパラメータとする実行時間挿入文(SpecCの場合は、waitfor 文である)を追加し、Cベース言語記述の検証モデル(実行時間挿入文追加後のCベース・モデル)66として出力する。
この際、図15のステップ250では、前述のコンパイルの結果として生成されたターゲットCPU用アセンブリコードを解析してデータアクセス命令(ロード命令及びストア命令)を検出し、このロード命令及びストア命令を生成する部分に対応するCソースコードを認識し、生成されたロード命令及びストア命令に対応するCコードの部位(すなわち、Cコードのデータアクセスが必要な部分)で、データキャッシュメモリがヒットしているか否かの判定(データキャッシュヒット判定:データキャッシュメモリのミス判定)を行うための手続きの呼び出しを挿入する。この際、図16の(B)に示すように、ロード命令が生成されるCソースコード部分には、同図(B)に示すように、load_dcacheのデータキャッシュヒット判定手続きが挿入され、ストア命令が生成されるCソースコード部分には、store_dcacheのデータキャッシュヒット判定手続きが挿入される。さらに、図15のステップ255では、データキャッシュメモリのキャッシュミスが検出されたときにデータキャッシュメモリの無効化を行うアセンブラコードを、データキャッシュメモリの無効化を行うためのデータキャッシュ無効化手続きの呼び出しを行うANSI−C記述のみによるソースコード(すなわち、Cコード)に変換する。
さらに、図15のステップ260では、前述のステップ250で挿入された手続きに従ってデータキャッシュメモリがヒットしているか否かの判定を行い、ロード命令及びストア命令に対するデータキャッシュヒット判定機能を有する手続きを付与する。このデータキャッシュヒット判定機能においては、データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行った場合、当該データキャッシュメモリのキャッシュミスが検出されたときに、キャッシュラインフィルを実行するための実行時間をキャッシュミスペナルティとして追加するようになっている。
さらに、図14のステップ265では、前述のステップ250で呼び出されたデータキャッシュ無効化手続きが実行されたときに、データキャッシュメモリ内に保持されているデータタグメモリ部のエントリを無効化するのに要する実行時間だけCPUを待ち状態にして、当該データキャッシュメモリの有効ビットの内容をクリアする。
前述の一連のステップ205〜265によって、Cベース言語記述のソフトウェア部品に対して、クロスコンパイルによって生成されたロード命令及びストア命令に対応するCコードの部位でデータキャッシュヒット判定を行ってキャッシュミスが検出されたときにキャッシュミスペナルティが追加されることになる。最終的に、上記の一連のステップで得られたCベース言語記述のソフトウェア部品が、前述のCベース言語記述の検証モデル66として出力される。
例えば、図16の(C)のCベース言語記述の検証モデルに示されるように、Cコードの部分をクロスコンパイルし、ロード命令又はストア命令のデータアドレスオペランドAi(iは任意の正の整数)とデータ長(バイト数)Liとを求める。データアドレスオペランドAiは、ロード命令やストア命令でロード、又はストアされるCソースコード内のデータの変数名やスタックのアドレスである。データ長Liは、ロード命令又はストア命令を行う際のオペランド長である。例えば、ARM CPUアセンブリコードの場合、オペランド長は、ロード命令のニモニックがLDRBであれば1バイト長であり、LDRHであれば2バイト長であり、LDRWであれば4バイト長であり、ストア命令のニモニックがSTRBであれば1バイト長であり、STRHであれば2バイト長であり、STRWであれば4バイト長である。図16(A)で示す例の場合、ロード命令でロードされる変数名は“p”であり、ストア命令命令でストアされるデータの変数名は“q”である。また、この場合、これらの変数の指すデータ長は4バイトであると仮定している(つまり、図示していないが、ARM CPUのアセンブラ命令の場合はLDRWやSTRW命令が生成されるものとする)。これによって、ロード命令に対するデータキャッシュヒット判定を行うためのデータキャッシュヒット判定呼び出し文(load_dcache (p, 4))と、ストア命令に対するデータキャッシュヒット判定を行うためのデータキャッシュヒット判定呼び出し文(store_dcache (q, 4))とが挿入される。ここで、ロード命令及びストア命令に対するデータキャッシュヒット判定を行った結果としてキャッシュミス(データアドレスに対応するデータの内容がデータキャッシュメモリ内に存在しないこと)を検出した場合には、キャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
より詳しく説明すると、図16のロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))においては、アドレスAi〜Ai+Li−1までの範囲のデータアドレスに対応するデータの内容がデータキャッシュメモリ内に存在するか否かの判定を行い、キャッシュミス(当該データアドレスに対応するデータの内容がデータキャッシュメモリ内に存在しないこと)を検出した場合には、キャッシュミスが発生した回数だけキャッシュラインフィルの実行時間(ラインフィル時間)のサイクル数を挿入するようになっている。ここで、データキャッシュラインの置換が必要なストア・バックモードにおいては、ストア・バックの動作を実行するための実行時間のサイクル数も挿入するようになっている。
又一方で、図16のストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li))においても、前述のロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))の場合と同様に、アドレスAi〜Ai+Li−1までの範囲のデータアドレスに対応するデータの内容がデータキャッシュメモリ内に存在するか否かの判定を行い、キャッシュミスを検出した場合には、キャッシュミスが発生した回数だけキャッシュラインフィルの実行時間のサイクル数を挿入するようになっている。
ただし、上記のストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li))は、ストア・スルーモードにも対応可能なように、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))と区別している。
ストア・スルーモードの場合は、データキャッシュラインの置換は行わないが、ストア命令を実行する度にストアバッファフル(ストアバッファ内のメモリがフル(full)になっている状態)になっているか否かのチェックを行うようになっている。このストアバッファフルになっているか否かのチェックは、ストアバッファに所望のデータの値をセットした時刻と現在の時刻との比較を行うことによって実行される。又一方で、ストア・バックモードの場合は、必要に応じてキャッシュラインフィルの動作を実行し、データキャッシュラインのダーティビットをセットする(例えば、ダーティビットを“1”にする)。ARMプロセッサ等のターゲットCPUにより生成されたCベース言語記述の検証モデルでは、キャッシュミスが検出された場合に、キャッシュラインフィルが完了するまでは、CPUは待ち状態になる。
換言すれば、データキャッシュメモリがターゲットCPUに内蔵されている場合、図14〜図16にて説明したようなロード命令及びストア命令に対するデータキャッシュヒット判定呼び出し文に基づいてソフトウェア部品の検証モデルを生成する際に、ロード命令に対応するCコードの部位にデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li) )を挿入し、かつ、ストア命令に対応するCコードの部位にデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を挿入して得られるCベース言語記述の検証モデルをコンパイルする。このコンパイルにより生成されたホストCPU用バイナリ・コードをホストCPUで実行させることによって、Cベース・シミュレータを使用したCベース・シミュレーションを実行することが可能になる。
このCベース・シミュレータを使用し、ロード命令及びストア命令に対応するCコードの部位にそれぞれ挿入されたデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))及びデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )に基づいてシミュレーションを実行した場合、データキャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間を加算しているので、シミュレーションによる実行時間の見積りの精度が従来方法よりも高くなり、実行時間の時間管理をより正確に行うことができる。
好ましくは、データキャッシュメモリのデータアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファ(例えば、TLB(トランスレーション・ルックアサイド・バッファ))がターゲットCPU内に設けられている場合に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li) )、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )において、メモリ管理ユニット機能が追加される。
このメモリ管理ユニット機能においては、生成されたロード命令及びストア命令に対応するCコードの部位で、データアドレスがデータアドレス変換用バッファ内に存在するか否かの判定を行い、データアドレスがデータアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリをデータアドレス変換用バッファにロードする時間を加算するようにしている。それゆえに、データアドレス変換用バッファのミスの際にデータアドレス変換のエントリをロードする時間を含めた高精度のシミュレーションを実行することが可能になる。
さらに詳しく説明すると、上記のメモリ管理ユニット機能の追加を可能にするために、データアドレス変換用バッファの内容を保持したキャッシュメモリを予め用意すると共に、仮想メモリのマッピング情報の内容を保持したページテーブルを主記憶装置内に予め用意しておく。
上記のロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))に基づいて、アドレスAi〜Ai+Li−1までの範囲のデータアドレスがデータアドレス変換用バッファ内に存在するか否かの判定を行う。この判定結果として、データアドレス変換用バッファのキャッシュミス(当該データアドレスに対応するデータの内容がデータアドレス変換用バッファ内に存在しないこと)を検出した場合には、データアドレス変換用バッファのエントリの内容を主記憶装置内のページテーブルからロードした値に更新し、データアドレス変換用バッファのロードのためのサイクル数を挿入するようになっている。ここでは、データアドレス変換用バッファにロードする時間をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
同様にして、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )に基づいて、アドレスAi〜Ai+Li−1までの範囲のデータアドレスがデータアドレス変換用バッファ内に存在するか否かの判定を行う。この判定結果として、データアドレス変換用バッファのキャッシュミスを検出した場合には、データアドレス変換用バッファのエントリの内容を主記憶装置内のページテーブルからロードした値に更新し、データアドレス変換用バッファのロードのためのサイクル数を挿入するようになっている。この場合も、データアドレス変換用バッファにロードする時間をパラメータとする実行時間挿入文(waitfor 文)の呼び出しが行われる。
さらに、好ましくは、上記のメモリ管理ユニット機能を実行する際に、データアドレスの保護機能の有無のチェックが行われる。ここで、データアドレス変換のアクセス保護に対する違反が検出された場合には、アクセス保護の例外が発生したことを知らせるようにしている。これによって、シミュレーションの実行時にデータアドレス変換のアクセス保護に対する違反を確実に検出することが可能になる。
図17は、本発明に係るデータキャッシュヒット判定に関するプログラムをCソースコードに挿入した例を示す図である。ただし、図17の例は、図16にて説明したようなCコードの部分の例とは異なっている。
図17の左上の部分においては、ANSI−C記述によるCソースコードの部分が例示されている。ロード命令やストア命令の生成は、一般に、クロスコンパイラの最適化オプションに依存する。例えば、最適化オプションなしでクロスコンパイルすると、Cソースコードに現れる局所変数も、スタック領域に割り当てられ、局所変数にアクセスする度にロード命令やストア命令が生成される。従って、このCソースコードの部分を見た限りでは、ロード命令及びストア命令を生成する部分に対応するCソースコードの部分(例えば、図13の左上で複数のブロックにより囲まれている部分)を認識することは困難であり、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を挿入すべき箇所を特定することは困難である。
それゆえに、図17の左上のCソースコードの部分をクロスコンパイルして、同図の右側に示されるようなアセンブリ言語記述によるアセンブラ出力に展開するようにしている。このアセンブラ出力を解析することによって、生成されたロード命令及びストア命令に対応する箇所(例えば、図17の右側で複数のブロックにより囲まれている部分)を認識することができる。このようにして、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を挿入すべき箇所を特定することが容易に可能になる。
さらに、図17の右側のアセンブラ出力において、生成されたロード命令に対応する箇所に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))を挿入し、かつ、生成されたストア命令に対応する箇所に、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を挿入する。その後、図17の左下の部分に示されるような更新後のC言語記述によるCソースコードの部分(すなわち、Cコードの部分)に変換する。この更新後のCコードの部分は、バジェット追加ツールによって、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )が挿入された形式になっている。より正確にいえば、図17の左下の部分では、更新後のCコードの部分をコンパイルすることによって最終的に出力されるCベース言語記述の検証モデルが図示されている。
より詳しく説明すると、図17のCベース言語記述の検証モデルにおいては、生成されたロード命令(*q++)に対応するCコードの部位に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (q, 1))を挿入すると共に、生成されたストア命令(*p++、*p)に対応するCコードの部位に、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (q, 1) )を挿入する。ここでは、各々のロード命令及びストア命令に対するキャッシュヒット判定を行った結果としてキャッシュミスを検出した場合には、このキャッシュミスが検出された部分に対応するCコードの部位に、キャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文の呼び出しが行われる。
次いで、命令キャッシュメモリ及びデータキャッシュメモリの両方がターゲットCPUに内蔵されている場合に、本発明に係る命令キャッシュヒット判定機能及びデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明する。
この場合には、前述の図9及び図10のフローチャートと図14及び図15のフローチャートとを組み合わせたフローチャートに従って、本発明に係る命令キャッシュヒット判定機能及びデータキャッシュヒット判定機能を有するCベース言語記述の検証モデルが生成される。
より詳しく説明すると、本発明に係る命令キャッシュヒット判定機能及びデータキャッシュヒット判定機能を有するCベース言語記述の検証モデルは、下記のようなステップ(1)〜ステップ(11)により生成される。
(1)Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップ
(2)当該制御点が挿入されたANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップ
(3)Basic Block の各々について、当該Basic Block の制御点間の実行時間を算出するステップ
(4)上記実行時間をパラメータとする実行時間挿入文を当該Basic Block の後の制御点に追加するステップ
(5)当該Basic Block の単位で命令キャッシュメモリがヒットしているか否かの判定を行うための手続き呼び出しを挿入するステップ
(6)ANSI−C記述によるソースコードにてロード命令及びストア命令に対応する部分(データのアクセスが必要な部分)で、データキャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを挿入するステップ
(7)命令キャッシュメモリ及びデータキャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュ無効化手続き及びデータキャッシュメモリ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップ
(8)上記命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行い、当該命令キャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算する命令キャッシュヒット判定機能を有する手続きを提供するステップ
(9)上記データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行い、当該データキャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を追加するデータキャッシュヒット判定機能を有する手続きを提供するステップ
(10)上記命令キャッシュ無効化手続き及び上記データキャッシュメモリ無効化手続きが実行されたときに、上記命令タグメモリ部及び上記データタグメモリ部のエントリを無効化するステップ
(11)上記の一連のステップで得られたCベース言語記述のソフトウェア部品を上記検証モデルとして出力するステップ
上記のような命令キャッシュヒット判定機能及びデータキャッシュヒット判定機能を有するCベース言語記述の検証モデルでは、Basic Block に挿入された各々の制御点間の実行時間を算出すると共に、Basic Block の単位で、ターゲットCPUに内蔵の命令キャッシュメモリがヒットしているか否かを判定し、キャッシュミスが検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、命令キャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、又一方で、データのアクセスが必要な部分で、ターゲットCPUに内蔵のデータキャッシュメモリがヒットしているか否かを判定し、キャッシュミスが検出された場合にキャッシュラインフィルを実行するための実行時間を加算する手続き呼び出しをソースコードに挿入し、データキャッシュヒット判定を行う手続きを用意して当該ソースコードと一緒にコンパイルし、シミュレーションを実行するようにしている。
上記のように、命令キャッシュメモリ及びデータキャッシュメモリの両方がターゲットCPUに内蔵されている場合にも、命令キャッシュメモリのキャッシュミス、及び、データキャッシュメモリのキャッシュミスの際にキャッシュラインフィルを実行するための実行時間を加算することによって、従来方法よりも実行時間の見積りの精度がさらに高くなり、シミュレーションの精度が顕著に向上する。
なお、当然のことではあるが、命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファ(例えば、TLB)がターゲットCPU内に設けられ、かつ、データアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファ(例えば、TLB)がターゲットCPU内に設けられている場合にも、命令キャッシュヒット判定呼び出し文(fetch_icache (Ai, Li))、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li) )、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li))において、前述のようなメモリ管理ユニット機能が追加される。
このメモリ管理ユニット機能においては、Basic Block の単位で命令アドレスが命令アドレス変換用バッファ内に存在するか否かの判定を行い、当該命令アドレスが命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを命令アドレス変換用バッファにロードする時間を加算し、又一方で、生成されたロード命令及びストア命令に対応するCコードの部位で、データアドレスがデータアドレス変換用バッファ内に存在するか否かの判定を行い、データアドレスがデータアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリをデータアドレス変換用バッファにロードする時間を加算するようにしている。それゆえに、命令アドレス変換用バッファ及びデータアドレス変換用バッファのミスの際に命令アドレス変換のエントリ及びデータアドレス変換のエントリをロードする時間を含めたより高精度のシミュレーションを実行することが可能になる。
好ましくは、上記のメモリ管理ユニット機能を実行する際に、命令アドレス及びデータアドレスの保護機能の有無のチェックが行われる。ここで、命令キャッシュメモリ及びデータキャッシュメモリの少なくとも一方のアクセス保護に対する違反が検出された場合には、命令キャッシュメモリ及びデータキャッシュメモリの少なくとも一方のアクセス保護の例外が発生したことを知らせるようにしている。これによって、シミュレーションの実行時に命令キャッシュメモリ及びデータキャッシュメモリのアクセス保護に対する違反をより確実に検出することが可能になる。
図18は、命令キャッシュメモリ及びデータキャッシュメモリの両方がターゲットCPUに内蔵されている場合に、本発明に係る命令キャッシュヒット判定及びデータキャッシュヒット判定に関するプログラムをCソースコードに挿入した例を示す図である。
図18の左上の部分においては、ANSI−C記述によるCソースコードの部分が例示されている。このCソースコードの部分では、前述の図13の場合と同様に、バジェット追加ツールによって、各々のBasic Block の後の制御点を認識するために、同図の右側に示されるようなアセンブリ言語記述によるアセンブラ出力に展開するようにしている。
このアセンブラ出力を解析することによって、CソースコードをBasic Block に分割し、Basic Blockの最後の制御点を認識して、実行時間挿入文(例えば、図18の左下の部分に示されるようなwaitfor(2)、 waitfor(4)、及びwaitfor(5) 等のwaitfor 文)と命令キャッシュヒット判定呼び出し文(fetch_icache文)を追加挿入する。
この更新後のCコードの部分は、バジェット追加ツールによって、各々のBasic Block の後の制御点にて命令キャッシュヒット判定呼び出し文(fetch_icache文)が追加挿入された形式になっている。
又一方で、図18の右側に示されるようなアセンブリ言語記述によるアセンブラ出力を解析することによって、生成されたロード命令及びストア命令に対応する箇所を認識することができる。このようにして、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を挿入すべき箇所を特定することが可能になる。
さらに、図18の右側のアセンブラ出力において、前述の図17の場合と同様に、生成されたロード命令に対応する箇所に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))を追加挿入し、かつ、生成されたストア命令に対応する箇所に、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )を追加挿入する。その後、図18の左下の部分に示されるような更新後のC言語記述によるCソースコードの部分(すなわち、Cコードの部分)に変換する。この更新後のCコードの部分は、バジェット追加ツールによって、Basic Block の単位で命令キャッシュヒット判定呼び出し文(fetch_icache文)が挿入されると共に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (Ai, Li))、及び、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (Ai, Li) )が挿入された形式になっている。より正確にいえば、図18の左下の部分では、更新後のCコードの部分をコンパイルすることによって最終的に出力されるCベース言語記述の検証モデルが図示されている。
より詳しく説明すると、図18のCベース言語記述の検証モデルにおいては、前述の図13の場合と同様に、各々のBasic Block の後の制御点に挿入されている実行時間挿入文(waitfor(2)、 waitfor(4)、及びwaitfor(5))の直後に、命令キャッシュヒット判定呼び出し文(fetch_icache (stringcpy, 8) 、fetch_icache (stringcpy+8, 20)、 fetch_icache (stringcpy+28, 16) 、fetch_icache (stringcpy+44, 8)、 及びfetch_icache (stringcpy+52, 8))を挿入する。なお、この例では、for文の終了条件の判定式( i<len の部分)は、ひとつのBasic Blcokと認識されるので、この部分に実行時間制御文(waitfor(2)文)と命令キャッシュヒット判定呼び出し文(fetch_icache (stringcpy+44, 8)文)が、この終了条件判定式の直前に挿入されて、waitfor(2), fetch_icache (stringcpy+44, 8), i<len の終了条件判定式に変換される。ここで、各々のBasic Block に対し命令キャッシュヒット判定を行った結果としてキャッシュミスを検出した場合には、当該Basic Block においてキャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文の呼び出しが行われる。
さらに、図18のCベース言語記述の検証モデルにおいては、前述の図17の場合と同様に、生成されたロード命令(*q++)に対応するCコードの部位に、ロード命令に対するデータキャッシュヒット判定呼び出し文(load_dcache (q, 1))を挿入すると共に、生成されたストア命令(*p++、*p)に対応するCコードの部位に、ストア命令に対するデータキャッシュヒット判定呼び出し文(store_dcache (p, 1) )を挿入する。ここでも、各々のロード命令及びストア命令に対するキャッシュヒット判定を行った結果としてキャッシュミスを検出した場合には、このキャッシュミスが検出された部分に対応するCコードの部位に、キャッシュラインフィルの実行時間(ラインフィル時間)をパラメータとする実行時間挿入文の呼び出しが行われる。
本発明は、携帯電話、ディジタル・テレビ等のディジタル機器を制御するコンピュータの主要機能を搭載した半導体装置(チップ)の設計が完了した後に、検証モデルに基づいて高精度のハードウェア/ソフトウェア協調検証を実行するためのハードウェア/ソフトウェア協調検証システムに適用することが可能である。
SoCの上流設計フローを示すフローチャートである。 従来のハードウェア/ソフトウェア協調検証方法を説明するためのデータ流れ図である。 従来のハードウェア/ソフトウェア協調検証方法によるタイミングバジェット処理追加の様子を説明するための模式図である。 図3にて生成されたCベース言語記述の検証モデルに基づくCベース・シミュレーションについて説明するための模式図である。 本発明に係るソフトウェア検証モデル生成方法を実施するためのハードウェア環境を例示するブロック図である。 ターゲットCPUを用いた組み込みシステムにおける命令キャッシュメモリ及びデータキャッシュメモリの接続例を示すブロック図である。 図6の命令キャッシュメモリ、又は、データキャッシュメモリの具体的な構成例を示すブロック図である。 図7の命令キャッシュメモリ、又は、データキャッシュメモリのキャッシュミスによりキャッシュミスペナルティが発生する様子を説明するためのタイムチャートである。 本発明に係る命令キャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャート(その1)である。 本発明に係る命令キャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャート(その2)である。 本発明に係る命令キャッシュヒット判定機能を有する手続きの追加によるソフトウェア検証モデル生成方法を説明するための模式図である。 図11にて生成されたCベース言語記述の検証モデルに基づくCベース・シミュレーションについて説明するための模式図である。 本発明に係る命令キャッシュヒット判定に関する手続呼び出しをCソースコードに挿入した例を示す図である。 本発明に係るデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャート(その1)である。 本発明に係るデータキャッシュヒット判定機能を有する手続きを実行するプログラムの処理手順を説明するためのフローチャート(その2)である。 本発明に係るデータキャッシュヒット判定機能を有する手続きの追加によるソフトウェア検証モデル生成方法を説明するための模式図である。 本発明に係るデータキャッシュヒット判定に関するプログラムをCソースコードに挿入した例を示す図である。 本発明に係る命令キャッシュヒット判定及びデータキャッシュヒット判定に関するプログラムをCソースコードに挿入した例を示す図である。
符号の説明
12 ターゲットCPU
14 主記憶装置
16 キャッシュメモリ
16−1 命令キャッシュメモリ
16−2 データキャッシュメモリ
18 バス
31 アドレス
32 コンパレータ
34 キャッシュヒット検出部
910 コンピュータ(PC又はWS)本体
912 ホストCPU(中央処理装置)
914 主記憶装置(MS)
916 キャッシュメモリ
918 バス
920 ディスプレイ
922 キーボード
924 マウス
930 外部記憶装置(ハードディスク装置)

Claims (9)

  1. 命令キャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成するソフトウェア検証モデル生成方法であって、
    Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、
    該制御点が挿入された前記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、
    前記Basic Block の各々について、該Basic Block の制御点間の実行時間を算出するステップと、
    前記実行時間をパラメータとする実行時間挿入文を該Basic Block の後の制御点に追加するステップと、
    該Basic Block の単位で命令キャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを該Basic Block の後の制御点に挿入するステップと、
    命令キャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップと、
    前記命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行い、当該命令キャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算する命令キャッシュヒット判定機能を有する手続きを提供するステップと、
    前記命令キャッシュ無効化手続きが実行されたときに、前記命令タグメモリ部のエントリを無効化するステップと、
    前記の一連のステップで得られたCベース言語記述のソフトウェア部品を前記検証モデルとして出力するステップとを有することを特徴とするソフトウェア検証モデル生成方法。
  2. 命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファが前記ターゲットCPU内に設けられている場合に、前記Basic Block の単位で前記命令アドレスが前記命令アドレス変換用バッファ内に存在するか否かの判定を行い、前記命令アドレスが前記命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを前記命令アドレス変換用バッファにロードする時間を加算するステップをさらに有することを特徴とする請求項1記載のソフトウェア検証モデル生成方法。
  3. 前記命令アドレスの保護機能の有無をチェックし、前記命令アドレス変換用バッファのアクセス保護に対する違反が検出された場合に、前記命令アドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップをさらに有することを特徴とする請求項2記載のソフトウェア検証モデル生成方法。
  4. データキャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成するソフトウェア検証モデル生成方法であって、
    Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、
    該制御点が挿入された前記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、
    前記Basic Block の制御点間の実行時間を算出するステップと、
    前記実行時間をパラメータとする実行時間挿入文を該Basic Block の後の制御点に追加するステップと、
    前記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、データキャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを挿入するステップと、
    データキャッシュメモリの無効化を行うアセンブラコードを、データキャッシュ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップと、
    前記データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行い、当該データキャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算するデータキャッシュヒット判定機能を有する手続きを提供するステップと、
    前記データキャッシュ無効化手続きが実行されたときに、前記データタグメモリ部のエントリを無効化するステップと、
    前記の一連のステップで得られたCベース言語記述のソフトウェア部品を前記検証モデルとして出力するステップとを有することを特徴とするソフトウェア検証モデル生成方法。
  5. データアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファが前記ターゲットCPU内に設けられている場合に、前記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、前記データアドレスが前記データアドレス変換用バッファ内に存在するか否かの判定を行い、前記データアドレスが前記データアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリを前記データアドレス変換用バッファにロードする時間を加算するステップをさらに有することを特徴とする請求項4記載のソフトウェア検証モデル生成方法。
  6. 前記データアドレスの保護機能の有無をチェックし、前記データアドレス変換用バッファのアクセス保護に対する違反が検出された場合に、前記データアドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップをさらに有することを特徴とする請求項5記載のソフトウェア検証モデル生成方法。
  7. 命令キャッシュメモリ及びデータキャッシュメモリを有するホストCPUを使用して、一つのターゲットCPU及び一つのOSが少なくとも搭載される半導体装置のハードウェア及びソフトウェアの協調検証を実行するために、ソフトウェアの検証モデルを生成するソフトウェア検証モデル生成方法であって、
    Cベース言語記述のソフトウェア部品を入力してANSI−C記述によるソースコードの部分を取り出し、Basic Block を認識し、制御点を挿入するステップと、
    該制御点が挿入された前記ANSI−C記述によるソースコードの部分をコンパイルしてターゲットCPU用バイナリ・コードを生成するステップと、
    前記Basic Block の各々について、該Basic Block の制御点間の実行時間を算出するステップと、
    前記実行時間をパラメータとする実行時間挿入文を該Basic Block の後の制御点に追加するステップと、
    該Basic Block の単位で命令キャッシュメモリがヒットしているか否かの判定を行うための手続き呼び出しを該Basic Block の後の制御点に挿入するステップと、
    前記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、データキャッシュメモリがヒットしているか否かの判定を行うための手続きの呼び出しを挿入するステップと、
    命令キャッシュメモリ及びデータキャッシュメモリの無効化を行うアセンブラコードを、命令キャッシュ無効化手続き及びデータキャッシュメモリ無効化手続きの呼び出しを行うANSI−C記述によるソースコードに変換するステップと、
    前記命令キャッシュメモリ内に保持されている命令タグメモリ部を用いて当該命令キャッシュメモリがヒットしているか否かの判定を行い、当該命令キャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を加算する命令キャッシュヒット判定機能を有する手続きを提供するステップと、
    前記データキャッシュメモリ内に保持されているデータタグメモリ部を用いて当該データキャッシュメモリがヒットしているか否かの判定を行い、当該データキャッシュメモリがヒットしていないことが検出されたときに、キャッシュラインフィルを実行するための実行時間を追加するデータキャッシュヒット判定機能を有する手続きを提供するステップと、
    前記命令キャッシュ無効化手続きおよび前記データキャッシュメモリ無効化手続きが実行されたときに、前記命令タグメモリ部および前記データタグメモリ部のエントリを無効化するステップと、
    前記の一連のステップで得られたCベース言語記述のソフトウェア部品を前記検証モデルとして出力するステップとを有することを特徴とするソフトウェア検証モデル生成方法。
  8. 命令アドレスを仮想アドレスから物理アドレスに変換するための命令アドレス変換用バッファが前記ターゲットCPU内に設けられている場合に、前記Basic Block の単位で前記命令アドレスが前記命令アドレス変換用バッファ内に存在するか否かの判定を行い、前記命令アドレスが前記命令アドレス変換用バッファ内に存在しないことが検出されたときに、命令アドレス変換のエントリを前記命令アドレス変換用バッファにロードする時間を加算するステップと、
    データアドレスを仮想アドレスから物理アドレスに変換するためのデータアドレス変換用バッファが前記ターゲットCPU内に設けられている場合に、前記ANSI−C記述によるソースコードにてデータのアクセスが必要な部分で、前記データアドレスが前記データアドレス変換用バッファ内に存在するか否かの判定を行い、前記データアドレスが前記データアドレス変換用バッファ内に存在しないことが検出されたときに、データアドレス変換のエントリを前記データアドレス変換用バッファにロードする時間を加算するステップとをさらに有することを特徴とする請求項7記載のソフトウェア検証モデル生成方法。
  9. 前記命令アドレスの保護機能の有無をチェックし、前記命令アドレス変換用バッファのアクセス保護に対する違反が検出された場合に、前記命令アドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップと、
    前記データアドレスの保護機能の有無をチェックし、前記データアドレス変換用バッファのアクセス保護に対する違反が検出された場合に、前記データアドレス変換用バッファのアクセス保護の例外が発生したことを知らせるステップとをさらに有することを特徴とする請求項8記載のソフトウェア検証モデル生成方法。
JP2004199716A 2004-07-06 2004-07-06 ソフトウェア検証モデル生成方法 Expired - Lifetime JP4342392B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004199716A JP4342392B2 (ja) 2004-07-06 2004-07-06 ソフトウェア検証モデル生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004199716A JP4342392B2 (ja) 2004-07-06 2004-07-06 ソフトウェア検証モデル生成方法

Publications (2)

Publication Number Publication Date
JP2006023852A JP2006023852A (ja) 2006-01-26
JP4342392B2 true JP4342392B2 (ja) 2009-10-14

Family

ID=35797103

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004199716A Expired - Lifetime JP4342392B2 (ja) 2004-07-06 2004-07-06 ソフトウェア検証モデル生成方法

Country Status (1)

Country Link
JP (1) JP4342392B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009050768A1 (ja) 2007-10-15 2009-04-23 Fujitsu Limited シミュレート方法、電子装置の設計方法、シミュレートプログラムおよびシミュレーション装置
JP5151722B2 (ja) * 2008-06-20 2013-02-27 ソニー株式会社 データ処理装置およびその方法、並びにプログラム
KR101066519B1 (ko) 2009-06-11 2011-09-21 수원대학교산학협력단 캐시 메모리 장치 및 이를 이용한 에러 검출 방법
JP5450271B2 (ja) 2010-06-10 2014-03-26 株式会社東芝 シミュレーション装置、シミュレーションプログラム及び方法
JP5278624B2 (ja) * 2010-10-12 2013-09-04 富士通株式会社 シミュレーション装置,方法,およびプログラム
JP6163898B2 (ja) * 2013-06-11 2017-07-19 富士通株式会社 計算装置、計算方法、および計算プログラム
WO2015045472A1 (ja) * 2013-09-24 2015-04-02 富士通株式会社 シミュレーション装置、シミュレーション方法およびシミュレーションプログラム
JP6249827B2 (ja) * 2014-03-06 2017-12-20 三菱電機株式会社 シミュレーション装置及びシミュレーションプログラム
WO2018163387A1 (ja) * 2017-03-09 2018-09-13 三菱電機株式会社 解析装置、解析方法及び解析プログラム

Also Published As

Publication number Publication date
JP2006023852A (ja) 2006-01-26

Similar Documents

Publication Publication Date Title
US6751583B1 (en) Hardware and software co-simulation including simulating a target processor using binary translation
Schnerr et al. High-performance timing simulation of embedded software
US7533246B2 (en) Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation
US6263302B1 (en) Hardware and software co-simulation including simulating the cache of a target processor
US6006033A (en) Method and system for reordering the instructions of a computer program to optimize its execution
US8898049B2 (en) System level power profiling of embedded applications executing on virtual multicore system-on-chip platforms
JP3951925B2 (ja) ハードウェア/ソフトウェア協調検証方法
CN102486813B (zh) 事务处理级的系统功率消耗估计方法与系统
US7779393B1 (en) System and method for efficient verification of memory consistency model compliance
US7908592B2 (en) Software/hardware partitioning program and method
US20100095286A1 (en) Register reduction and liveness analysis techniques for program code
KR102161192B1 (ko) 코어 트레이스로부터 데이터 마이닝을 하기 위한 방법 및 장치
Lie et al. A simple method for extracting models for protocol code
CN113901745A (zh) 芯片测试方法、装置、电子设备及计算机可读存储介质
JP4342392B2 (ja) ソフトウェア検証モデル生成方法
Wang et al. Accurate source-level simulation of embedded software with respect to compiler optimizations
US9465595B2 (en) Computing apparatus, computing method, and computing program
Posadas et al. Fast data-cache modeling for native co-simulation
Ottlik et al. Context-sensitive timing simulation of binary embedded software
Wang et al. Software performance simulation strategies for high-level embedded system design
Lee et al. Timed compiled-code simulation of embedded software for performance analysis of SOC design
Posadas et al. M3-SCoPE: performance modeling of multi-processor embedded systems for fast design space exploration
Schnerr et al. Cycle accurate binary translation for simulation acceleration in rapid prototyping of socs
Lu et al. Fast cache simulation for host-compiled simulation of embedded software
JP4271072B2 (ja) ソフトウェア検証モデル生成方法

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20061106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20061106

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070605

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20081126

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090422

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090507

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090707

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120717

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4342392

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term