(第一の実施形態)
第一の実施形態の表示装置(情報処理装置)を、図1から図16を使って説明する。
図2は本実施形態におけるシミュレーション対象のシステムLSI及び周辺モジュールを含むテストベンチの構成図である。図2において、200はシステムLSIである。CPU201はシステムLSI200の各種制御を実行するためのものである。画像処理部202はシステムLSI200内で取り扱う静止画像及び動画像データの画像処理を行う。音声処理部203はシステムLSI200内で取り扱う音声データの音声処理を行う。ネットワーク処理部204はシステムLSI200と外部ネットワークを介しデータ送受信を行う。ROM210はCPU201の起動時に実行されるブートプログラムや各種データを格納するためのものであり、ROMC206を介してアクセスする。DRAM209は主にCPU201が処理するための制御プログラムを格納するとともに、CPU201が各種制御を実行する際の作業領域を提供する。その他、画像処理部202が扱う静止画像及び動画像データ、音声処理部203が扱う音声データ、及びネットワーク処理部204が扱う外部通信用データが格納される。DRAM209はそれを構成する8つのバンク220乃至227を内部に備えている。バンクの番号はバンク0からバンク7がそれぞれバンク220乃至227に当たる。画像処理部202、音声処理部203、ネットワーク処理部204はそれぞれのデータへDMA(Dynamic Memory Access)によってアクセスする。DRAM209へのアクセスは、メモリコントローラ205がアクセス要求を受け制御コマンドに変換し、それをPHY207がアナログ信号に変換して外部に発行してアクセスを行う。具体的なアクセス方法は、背景技術に記載した通りであり割愛する。その他、画像処理部202、音声処理部203、ネットワーク処理部204からDRAMへアクセスする場合も同様となる。バス208は、アクセス要求を発行するCPU201、画像処理部202、音声処理部203、ネットワーク処理部204と、当該アクセス要求を受けるメモリコントローラ205、ROMC206を相互接続する。本実施形態においては、DRAM209はDDR3-SDRAM規格に準拠するSDRAMであるものとする。システムLSI200とDRAM209の間の制御信号にはモニタ211が接続されており、シミュレーション実行中に制御信号上に発生したコマンドを監視する機能を持つ。システムLSI200、DRAM209、ROM210、モニタ211はテストベンチ212の中に配置され、それぞれ信号によって接続される。
図3はテストベンチ212のシミュレーション処理を含む性能解析処理及び解析結果表示処理を行うコンピュータ装置の構成図である。図3において、CPU301は、コンピュータ装置における各種制御を実行するためのものである。ROM302は、コンピュータ装置の起動時に実行されるブートプログラムや各種データを格納するためのものである。RAM303は、CPU301が処理するための制御プログラムを格納するとともに、CPU301が各種制御を実行する際の作業領域を提供する。キーボード304及びマウス305は、ユーザによる各種入力操作環境を提供するためのものである。306はHDD(ハードディスク)であり各種データを格納する。
307はディスプレイであり処理結果等をユーザに対して表示する。本実施形態では特にシミュレーション結果、波形、及び性能解析処理結果を表示する。ネットワークインタフェース308は、外部ネットワークとLANケーブルを介した通信を可能とする。バス309は、上記の各構成を接続するためのものである。なお、CPU、ROM、バスは前記システムLSI200内にも存在しているが、これらは別物であることを注記しておく。
ここから、本実施形態の性能解析及び解析結果表示処理について説明する。性能解析処理及び解析結果表示処理は前記コンピュータ装置上で実行される。図1は性能解析処理及び解析結果表示処理の全体を示す処理概念図である。図1において、101は検出手段であり、性能解析対象であるDRAM209を構成するバンク220乃至227の状態遷移を発生させるイベントを検出する。イベントはより具体的にはシステムLSI200内のメモリコントローラ205が発行するDRAM209を制御するためのコマンドである。検出手段によって検出したイベント情報102は一時的にHDD306へ格納され、次のバンク状態分類手段103に入力される。バンク状態分類手段103は、発生したイベントに基づいてバンク220乃至227の状態を遷移させる。これにより、時系列にバンク220乃至227の状態が決定する。バンク状態分類手段103によって分類したバンク220乃至227のバンク状態情報104はイベント情報102と同様にHDD306へ格納され、次のDRAM状態分類手段105に入力される。DRAM状態分類手段105は、同一時刻のバンク220乃至227の状態に基づいてDRAM209の状態を分類する。これにより、時系列にDRAM209の状態が決定する。DRAM状態分類手段105によって分類したDRAM209のDRAM状態情報106も同様にHDD306へ格納される。DRAM209のDRAM状態情報106及びバンク220乃至227のバンク状態情報104は統計処理107を介して表示手段108に入力される。統計処理107ではバンク状態情報104、及びDRAM状態情報106に対して、各状態の発生回数及び発生クロックサイクル数を所定時間単位で統計解析する。表示手段108は、DRAM209及びバンク220乃至227それぞれに対し各状態の発生回数、発生クロックサイクル数をカウントし性能解析結果としてディスプレイ307へ表示する。以上が本実施形態の性能解析処理及び解析結果表示処理の全体フローである。以下、図1の性能解析処理及び解析結果表示処理における各要素について詳細に説明する。
検出手段101は前記コンピュータ装置によるテストベンチ212のシミュレーション処理におけるモニタ211によって実現する。コンピュータ装置によるシミュレーション処理は、CPU301がRAM303をワーク領域として使用し、HDD306に格納されているシミュレーションソフトウェアを実行することで実現する。従来技術にも記載した通り、シミュレーションソフトウェアには代表的なものとしてIncisive(Cadence社の登録商標)、VCS(Synopsys社の登録商標)、Questasim(Mentor社の登録商標)などがある。これらのシミュレーションソフトウェアにより、システムLSI200が実際に動作するのと同じ動作をシミュレーションし、その結果がHDD306に格納される。具体的にはシミュレーションソフトウェアが出力するシミュレーションログファイル、波形ファイル、及びモニタ211が出力するイベント情報などである。
モニタ211によるシステムLSI200とDRAM209間の信号線の監視、すなわち本実施形態の検出手段101について説明する。モニタ211は、シミュレーション処理においてシステムLSI200とDRAM209間の信号線を監視する。具体的には、図4に示すDDR3-SDRAMインタフェースを構成する信号線である。401はクロックであり、全ての信号の基準となる。すなわちクロック401の立上り(0→1への変化)のタイミングで、クロック401以外の信号の状態を評価しいずれのコマンドが発行されているかを検出する。具体的には、図5に示すテーブルに基づいてコマンドを検出する。図5において、503乃至513は図4に示す信号線の値を示している。504乃至513は各信号の所定のクロック401の立上りタイミングにおける状態を示しているが、503だけは該タイミングの一つ前のクロック401の立上りタイミングにおける状態を示しており注意が必要である。図5においてLはLow=0を意味し、HはHigh=1を意味する。XはDon’t Careであり0/1いずれの値であっても良い。RFUはReserved for Future Useの略でXと同様にいずれの値であっても良い。VはValidであり対象のコマンドで該当の信号が所望の意味を持つことを意味する。具体的な意味は本発明の説明に関係しないため割愛する。BA、RA、CAはそれぞれバンクアドレス、行アドレス、列アドレスを意味しており、これら以外の信号によってコマンドが検出されたときにアドレスとして判定するという意味となる。501及び502はそれぞれ、503乃至513の各信号がその状態に一致した場合に対応するコマンドの意味及びコマンド表記を示している。ACTコマンドを例にして検出手段について説明する。503に基づいてCKE信号が一つ前のクロック401の立上りタイミングでHであるかを判定する。次に504に基づいてCKE信号が現在のクロック401の立上りタイミングでHであるかを判定する。同様にして、CS=L、RAS=L、CAS=H、WE=Hを判定し、これらの条件が全て合致した場合にACTコマンドを検出する。このときのBA信号はバンクアドレス、A信号はRAすなわち列アドレスを意味している。ACTコマンド以外も同じように信号線の値に応じて図5のテーブルに基づいて判定し、発行されているコマンドを検出する。特殊なコマンドであるNOPコマンド540を更に説明する。NOPコマンド540は、CKE=H→H(一つ前のクロックの立上りがHで現在のクロックの立上りがHを意味する)、CS=L、RAS/CAS/WEがいずれもHの場合に検出する。当該NOPコマンド540はNo Operationの略で、コマンドが発生していないことを意味する。本実施形態においてはNOPコマンドは検出対象外とし、これ以外のコマンドを検出対象とする。以上が検出手段101の説明となる。本実施形態においては、DDR3-SDRAMの規格に基づいたコマンドを検出することを例に検出手段を説明したが、規格の種類に限定することはない。すなわち、他のDDR2、DDR4、DDR5、LPDDR2、LPDDR3、LPDDR4であってもコマンドは同様に信号線の値に基づいて定義されているためこれをイベントとして検出手段を実現することができる。更に検出手段が検出するイベントはコマンドに限定されない。検出手段はシステムLSI200とDRAM209間の信号線を監視することでイベントを検出するものであり、監視対象の信号の値が規格上で定義されているかいないかに関わらず、信号線のいずれの変化であってもイベントとして定義することは可能である。
検出手段101を実現するモニタ211によって、シミュレーション期間中に検出されたコマンドをログ情報として出力したものが、前記イベント情報102となる。図6はモニタ211によって出力されたイベント情報102の内容を示す例である。図6において、601は発生時刻でありシミュレーション上の経過時刻である。本実施形態においては単位はps(ピコ秒=0.000000000001秒)とする。602はコマンドであり、前記検出手段によって検出されたコマンドを示す。603、604、605はそれぞれバンクアドレス、行アドレス、列アドレスであり、各コマンドを検出した際のBA及びA信号によって示される内容となる。コマンドによって、バンクアドレス、行アドレス、列アドレスそれぞれ示されない場合と示される場合があるため、イベント情報102内でもそれに基づいて表示される。
次のバンク状態分類手段103自体の処理内容を説明する前に、バンク状態分類手段103によって分類するバンク220乃至227のバンク状態の種類を先に説明する。本実施形態では以下の3つのバンク状態を定義する。
状態1 動作状態
状態2 休止状態
状態3 動作不可状態
動作状態は、対象のバンクへリードもしくはライトのデータアクセスを実行している状態である。具体的には、RDコマンド発行後の4クロックサイクル及びWRコマンド発行後の4クロックサイクル期間を動作状態とする。DDR3-SDRAMの規格上はデータを4回連続アクセスする4ビートアクセスと8回連続アクセスする8ビートアクセスがある。連続アクセスは、クロックの立上りと立下りで1回ずつアクセスを行うため、4ビートアクセスでは2クロックサイクル、8ビートアクセスでは4クロックサイクル消費する。本実施形態では、8ビートアクセスのみが発行されることを前提とし、RD及びWRコマンド発行後に4クロックサイクル分を動作状態としている。リードを連続して行う場合、規格上8ビートアクセスでは4クロックサイクル後に次のRDコマンドを発行することができる。すなわち、4クロックサイクルの動作状態が連続して発生することとなる。これはライトを連続して行う場合も同様である。
動作不可状態とは、所定の制約によりバンクへのリードもしくはライトのデータアクセスを行うことができずに待っている状態である。例えば、DDR3-SDRAM規格上ではREF(リフレッシュ)コマンド発行後tREFパラメータで定義される時間分はいずれのコマンドも発行することができない。これは従来技術でも説明した通り、リフレッシュ動作に伴って必ず発生する制約であり、DRAMの種類を問わず適用される。本実施形態においては、REFコマンド発行後のtREFパラメータ期間分を動作不可状態の一つと定義する。このときのtREFパラメータは500クロックサイクルであるものとする。ただし、REFコマンドはRDもしくはWRコマンドの発行を待たせた場合のみ動作不可状態と定義するという方法もあり得る。すなわち、REFコマンド発行後tREFパラメータ期間後すぐにACTコマンドが発行された場合にのみ動作不可状態と定義するという方法である。本実施形態ではACTコマンドの有無に関わらず動作不可状態と定義するが、ACTコマンドが発生した場合のみ動作不可状態と定義する場合でも本発明を適用できることは言うまでもない。また、DDR3-SDRAM規格上ではACTコマンド発行後、RDもしくはWRコマンドを発行するまでにtRCDパラメータで定義される時間分空けなければならない。これと同じように通常のデータアクセスで一般的に発生するACT、PRE、RD、WRコマンド間には図8のテーブルで定義される制約があるものとする。DDR3-SDRAM規格上は図5に示した通り、他にも多くのコマンドがありそのコマンド間にも制約がある。しかしながら本実施形態では図8のテーブルに示した制約のみがあることを前提とし、各コマンド間が制約されたクロックサイクル分空いている場合、この期間を動作不可期間の一つと定義する。ただし、本前提は本発明の適用範囲を限定するものではなく、図8に示したコマンド間以外にも制約がある場合でも、その制約が所定のコマンド発行後の一定期間、及び所定のコマンド間の一定期間として定義される場合は本発明できることは言うまでもない。更に、同様に図8には示していないが、所定の3つ以上のコマンド列によって定義される制約があった場合でもそれを条件分岐で判定できる限り本発明を適用できる。例えば、PREコマンド、ACTコマンド、RDコマンドが順番に発生した場合に、PREコマンドからRDコマンドまでをページミスによる制約期間と判定することもできる。同様にREFコマンド、ACTコマンド、WRコマンドが順番に発生した場合に、REFコマンドからWRコマンドまでをリフレッシュ及びページオープンによる制約期間と判定することもできる。ところで、所定の2つのコマンドが連続して発生した場合に、後続のコマンドが図8に示した制約期間を超えて発行される場合がある。例えば、ACTコマンド後にRDコマンドが発行される場合、図8に示される制約期間分のクロックサイクルあける必要があるが、制約期間以上のクロックサイクル空いて発行されたというケースである。この場合は、RDコマンドは制約によって待たされた訳ではなく、次のアクセス要求がないために発行されなかったと判断し、本実施形態においては動作不可状態とはみなさないものとする。ただし、上述のREF(リフレッシュ)コマンドと同様にACTコマンド発行後、RDもしくはWRコマンドの有無に関わらず制約期間分を動作不可状態と定義することも可能である。いずれの場合でも、条件分岐を明確に定義できるならば本発明を適用できる。以上が動作不可状態の定義であるが、いずれかのコマンド後の一定期間、いずれか2つのコマンド間、いずれかの3つ上のコマンド列をどのように動作不可状態と定義するかは、本発明の前提とはなり得ない。前記検出手段によって検出されたイベント発生に基づいて、動作不可状態をサイクル数(もしくはそれに換算できる数値制約)によって定義できる場合は、その定義内容に関わらず本発明を適用できることは言うまでもない。また、本実施形態ではREFコマンド後の一定期間コマンドを発行できない期間をtREFパラメータで定義したが、メモリコントローラ205はREFコマンド後に発行しない期間をtREFパラメータに関係なく制御することが可能である。例えば、tREFパラメータ以下に設定することは規格違反となるためできないが、tREFパラメータ以上のクロックサイクルを空けるように制御することは可能である。この場合は、メモリコントローラ205に設定されたサイクル数を基に動作不可状態を定義することも可能である。
最後に休止状態について説明する。休止状態は前述した動作状態、及び動作不可状態のいずれでもない状態を休止状態と定義する。本実施形態においては、動作状態、動作不可状態を定義した後に、休止状態を定義したがこの相関を入れ替えて定義しても良い。すなわち、動作状態、休止状態を先に定義し、それ以外を動作不可状態とするなどである。
ここから図7を用いてバンク状態分類手段103について説明する。バンク状態分類手段103はイベント情報102を入力とし、前記シミュレーション処理後、別の処理として前記コンピュータ装置上で実行する。バンク状態分類手段103では2つのイベント間のクロックサイクル数を確認して動作不可状態を判断する場合がある。そのため、イベント発生時にそれ以降の状態を決定するのではなく、イベント発生時に一つ前のイベントから当該イベントまでの状態が決定する仕組みとなっている。図7はバンク220乃至227の状態を分類するフローチャート図である。ただし、本フローチャートは各バンクに対して独立に実行されるものとする。すなわち、前記コンピュータ装置上では図7のフローチャートに示す処理がバンク数である8個分実行されるという意味である。いずれのバンクにも対応できるフローチャートであるため、ステップ701の引数入力においてバンク番号を受け取っており、これにより対象のバンクを識別する。図7において、ステップ701でバンク番号を引数として受け取る。ステップ702、ステップ703で本処理で使用する変数を初期化する。ステップ702では状態確定時刻(FIX_TIME)をリセットする。具体的にはFIX_TIMEに0を設定する。状態確定時刻FIX_TIMEの使い方については後述するが、本値はその時刻まではバンクの状態が決定していることを意味する。ステップ703では一つ前のコマンド発生時刻と種別をリセットする。具体的には引数のバンク番号が示すバンクに対する一つ前のコマンドの発生時刻を示すSAME_PRE_TIMEに0を設定し、同種別を示すSAME_PRE_CMDに未定義を意味するUNDEFを設定する。更に、引数のバンク番号以外のバンクに対する一つ前のコマンドの発生時刻を示すDIFF_PRE_TIMEに0を設定し、同種別を示すDIFF_PRE_CMDに未定義を意味するUNDEFを設定する。次にステップ704で入力となるイベント情報102から1つのイベント情報エントリを読み込む。これは、図6のイベント情報102の例における1行分に相当する。ここからステップ707乃至ステップ722によって、バンク状態を分類する。分類するバンク状態は前述した通り、動作状態、動作不可状態、休止状態の3つの状態である。
まずステップ707で、現在のイベント情報エントリのバンクアドレス603が引数のバンク番号と一致するかを判定する。一致しない場合は現在のイベント情報エントリでは対象のバンクの状態遷移は発生しない。よってステップ727でDIFF_PRE_CMDとDIFF_PRE_TIMEを現在のイベント情報エントリのコマンド602と発生時刻601に基づいて更新する。すなわち、DIFF_PRE_CMDに現在のイベント情報エントリのコマンド602を設定し、DIFF_PRE_TIMEに現在のイベント情報エントリの発生時刻601を設定する。一方、現在のイベント情報エントリのバンクアドレス603が引数のバンク番号と一致した場合はステップ708へ進む。ステップ708では対象のバンクに対する一つ前のコマンド、すなわちSAME_PRE_CMDがRDコマンドもしくはWRコマンドであるかを判定する。初めてステップ708の分岐で判定を行う場合はSAME_PRE_CMDにはUNDEFが設定されているため、必ずNoと判定される。SAME_PRE_CMDがRDコマンドもしくはWRコマンドであった場合、ステップ709でFIX_TIMEから4クロックサイクル分を動作状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルである4サイクルと合わせてバンク状態情報104として出力する。その後ステップ710でFIX_TIMEに4クロックサイクル加算し状態が確定した時刻を更新する。一方、ステップ708でNoと判定された場合、ステップ711で対象のバンクに対する一つ前のコマンド、すなわちSAME_PRE_CMDがREFコマンドであるかを判定する。初めてステップ711の分岐で判定を行う場合は、SAME_PRE_CMDにはUNDEFが設定されているため、必ずNoと判定される。SAME_PRE_CMDがREFコマンドであった場合、ステップ712でFIX_TIMEから500クロックサイクル分を動作不可状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルである500サイクルと合わせてバンク状態情報104として出力する。その後ステップ713でFIX_TIMEに500クロックサイクル加算し状態が確定した時刻を更新する。ステップ710、ステップ713を処理した場合、及びステップ711でNoと判定された場合は、ステップ714に進む。ステップ714では対象バンクに対する一つ前のコマンド、すなわちSAME_PRE_CMDと、現在のイベント情報エントリのコマンド602を用いて、図8のテーブルに合致する条件に設定されているサイクルと一致するかを判定する。例えば、現在のイベント情報エントリのコマンド602がACTコマンドで、SAME_PRE_CMDがPREコマンドである場合、図8のテーブルに基づくと40サイクルが設定されている。この場合、一つ前のPREコマンドの発生時刻であるSAME_PRE_TIMEから、対象のACTコマンドの発生時刻、すなわち現在のイベント情報エントリの発生時刻601までの期間が30サイクルに一致するかを判定することとなる。他のコマンドでも同様に図8のテーブルに基づいて判定する。図8のテーブルでクロックサイクル数が設定されていない場合は制約がないことを意味するためNoと判定される。判定の結果がYesの場合は、ステップ715でFIX_TIMEから現在のイベント情報エントリの発生時刻601までの期間を動作不可状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルと合わせてバンク状態情報104として出力する。このとき、対象バンクに対する一つ前のコマンドの発生時刻であるSAME_PRE_TIMEから現在のイベント情報エントリの発生時刻601までの期間ではないことに注意が必要である。この理由を、現在のイベント情報エントリのコマンド602がPREコマンドで、SAME_PRE_CMDがRDコマンドの場合を例に説明する。本例では、図8のテーブルに基づくと50サイクルが設定されている。そのため、RDコマンドの発生時刻であるSAME_PRE_TIMEから、現在のPREコマンドの発生時刻601までの期間が50サイクルであるかを判定する。このとき、FIX_TIMEとSAME_PRE_TIMEは時刻が一致しない。なぜならば、FIX_TIMEはSAME_PRE_CMDがRDコマンドであるため、ステップ710にて既に4クロックサイクル加算されているためである。そのため、SAME_PRE_TIMEから現在のイベント情報エントリの発生時刻601までの50サイクルを動作不可状態と分類してしまうと、SAME_PRE_TIMEからの4クロックサイクルを2重に分類することとなる。これを避けるため、FIX_TIMEからの差引き46クロックサイクルを動作不可状態と分類する。さて、ステップ715で動作不可状態と分類した後、続くステップ716でFIX_TIMEに現在のイベント情報エントリの発生時刻601までの差分を加算し、状態が確定した時刻を更新する。結果として、FIX_TIME=現在のイベント情報エントリの発生時刻601となる。一方、ステップ714で図8のテーブルに制約が設定されていない、もしくは設定されている制約とSAME_PRE_TIMEから現在のイベント情報エントリの発生時刻601までの期間が一致しなかった場合、ステップ717へ進む。ステップ717からはステップ714からステップ716で対象バンクに対する一つ前のコマンドからの制約を確認したのと同様に、対象のバンク以外に対する一つ前のコマンドからの制約を確認する。制約の確認を行う前に、対象のバンク以外に対する一つ前のコマンドの発生時刻、すなわちDIFF_PRE_TIMEがFIX_TIMEより後になっていないが確認する。本フローチャートでは、ステップ707で分岐したように現在のイベント情報エントリのコマンド602が対象のバンクの場合のみバンクの状態遷移を確認しバンクの状態を分類する。結果として、対象のバンクに対するコマンドの発生時刻であるSAME_PRE_TIMEは、必ずステップ707の時点でFIX_TIMEと一致する。またその後の処理でもFIX_TIMEが加算される可能性しかないため、常にFIX_TIME>=SAME_PRE_TIMEが成り立っていた。ところが、現在のイベント情報エントリのコマンド602が対象のバンク以外に対する一つ前のコマンドである場合はステップ707で分岐し状態遷移が行われない。結果として、FIX_TIME<DIFF_PRE_TIMEが起こり得る。当該条件(FIX_TIME<DIFF_PRE_TIME)が成り立つ場合は、対象のバンク以外に対する一つ前のコマンドからの制約を分析する前に、当該コマンドまでの期間を休止状態に設定する必要がある。ステップ718では、FIX_TIMEから対象のバンク以外に対する一つ前のコマンドの発生時刻、すなわちDIFF_PRE_TIMEまでの期間を休止状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルと合わせてバンク状態情報104として出力する。続いてステップ719で、FIX_TIMEにDIFF_PRE_TIMEまでの差分を加算し、状態が確定した時間を進める。結果として、FIX_TIME=DIFF_PRE_TIMEとなる。さて、ステップ717でFIX_TIME<DIFF_PRE_TIMEが成り立たなかった場合、及びステップ719を処理した後はステップ720へ進む。ステップ720では対象バンク以外に対する一つ前のコマンド、すなわちDIFF_PRE_CMDと、現在のイベント情報エントリのコマンド602を用いて、図8のテーブルに合致する条件に設定されているサイクルと一致するかを判定する。例えば、現在のイベント情報エントリのコマンド602がWRコマンドで、DIFF_PRE_CMDがRDコマンドである場合、図8のテーブルに基づくと15サイクルが設定されている。この場合、RDコマンドの発生時刻であるDIFF_PRE_TIMEから、対象のWRコマンドの発生時刻、すなわち現在のイベント情報エントリの発生時刻601までの期間が15サイクルに一致するかを判定することとなる。他のコマンドでも同様に図8のテーブルに基づいて判定する。図8のテーブルでクロックサイクル数が設定されていない場合は制約がないことを意味するためNoと判定される。判定の結果がYesの場合は、ステップ721でFIX_TIMEから現在のイベント情報エントリの発生時刻601までの期間を動作不可状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルと合わせてバンク状態情報104として出力する。このとき、対象のバンク以外に対する一つ前のコマンドの発生時刻であるDIFF_PRE_TIMEから現在のイベント情報エントリの発生時刻601までの期間ではないことに注意が必要である。この理由はステップ715の説明で前述したのと同じである。さて、ステップ721で動作不可状態と分類した後、続くステップ722でFIX_TIMEに現在のイベント情報エントリの発生時刻601までの差分を加算し、状態が確定した時刻を更新する。結果として、FIX_TIME=現在のイベント情報エントリの発生時刻601となる。一方、ステップ720で図8のテーブルに制約が設定されていない、もしくは設定されている制約とDIFF_PRE_TIMEから現在のイベント情報エントリの発生時刻601までの期間が一致しなかった場合、ステップ723へ進む。ステップ723では、FIX_TIMEから現在のイベント情報エントリの発生時刻601までの期間を休止状態と分類する。分類した結果は、発生時刻(このときのFIX_TIME)と発生サイクルと合わせてバンク状態情報104として出力する。続くステップ724ではFIX_TIMEに現在のイベント情報エントリの発生時刻601までの差分を加算し、状態が確定した時刻を更新する。結果として、FIX_TIME=現在のイベント情報エントリの発生時刻601となる。さて、ステップ716、ステップ722、もしくはステップ724を処理した場合は、ステップ725へ進む。ステップ725では、SAME_PRE_CMDとSAME_PRE_TIMEを現在のイベント情報エントリのコマンド602と発生時刻601に基づいて更新する。すなわち、SAME_PRE_CMDに現在のイベント情報エントリのコマンド602を設定し、SAME_PRE_TIMEに現在のイベント情報エントリの発生時刻601を設定する。最後にステップ726で入力であるイベント情報102に次のイベント情報エントリがあるか否かを判定し、ある場合にはステップ704に戻って処理を繰り返す。一方、イベント情報エントリがない場合は処理を終了する。以上が本実施形態におけるバンク状態分類手段103の内容である。本実施形態では、各コマンド間の制約において、同時に複数の制約が発生しない前提で説明をした。しかしながら、実際には処理対象のイベント情報エントリが示すコマンドに対し、それより以前に発行された複数のコマンドから同時に制約がかかるケースが起こり得る。例えば、ACTコマンド、RDコマンド、PREコマンドが順番に発行されたとする。この場合、最後のPREコマンドを処理する際、ACTコマンドの間にはtRASパラメータで定義される制約がある。同様にRDコマンドとの間にも別の制約が存在する。多くの場合はいずれか一方の制約によりPREコマンドのタイミングが決定するが、場合によっては同時に制約がかかる場合もあり得る。いずれにしても、本実施形態のバンク状態分類手段103では直前に発行された1つのコマンドのみを履歴(SAME_PRE_TIME及びSAME_PRE_CMD)として情報を残しているのみである。よって、上記例ではACTコマンドからの制約は判定することができない。しかしながら、本前提は何ら本発明を制限するものではない。すなわち、履歴を少なくとも2つ以上持ち、各々の制約をステップ714にてそれぞれ判定
すれば上記の例に対応できる。それ以外にも解析対象のSDRAMの規格やメモリコントローラ205の制約によって発生し得る制約をリストアップし、それらすべてに対応可能な分の履歴を残すように変更すれば対応できない制約は存在しえない。
以下、バンク220すなわちバンク番号0に対して、図6のイベント情報エントリ610乃至638を実際の入力としたときを例としてバンク状態分類手段103の処理を具体的に説明する。本例では1クロックサイクル=1000psを前提とする。図10の1001乃至1016はイベント情報エントリ610乃至638を入力した場合の処理結果を示している。以下処理結果を参照しながらイベント情報エントリ610乃至638の処理を説明する。まずイベント情報エントリの入力前に、ステップ701でバンク番号0が入力される。ステップ702、703ではFIX_TIME=0、SAME_PRE_TIME=0、SAME_PRE_CMD=UNDEF、DIFF_PRE_TIME=0、DIFF_PRE_CMD=UNDEFがそれぞれリセットされる。次にステップ704でイベント情報エントリ610を読み込む。イベント情報エントリのバンクアドレス603は0となっており、引数のバンク番号と一致する。よって、ステップ707ではYesと判定される。この時点のSAME_PRE_CMDはUNDEFのため、ステップ708、ステップ711、ステップ714ではいずれもNoと判定される。更にこの時点ではFIX_TIME=0、DIFF_PRE_TIME=0、DIFF_PRE_CMD=UNDEFのためステップ717、ステップ720ではいずれもNoと判定される。その結果、ステップ723でFIX_TIME=0から現在のイベント情報エントリ610の発生時刻1000までの1クロックサイクル分を休止状態に分類する。続いてステップ724でFIX_TIMEを1000に設定する。図10においては、1001の休止状態、1サイクルが確定したこととなり、その後、ステップ725でSAME_PRE_CMD=ACT、SAME_PRE_TIME=1000に設定し、ステップ726を経由してステップ704に戻る。
次にイベント情報エントリ611を読み出し、その処理に移る。イベント情報エントリ611のバンクアドレス603は1となっており引数のバンク番号と一致しない。よって、ステップ707でNoと判定される。この場合はステップ727でDIFF_PRE_CMD=ACT、DIFF_PRE_TIME=5000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ612の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMDはACTコマンドであるため、ステップ708、ステップ711はいずれもNoと判定される。ステップ714では図8のテーブルにおいて、SAME_PRE_CMD=ACTコマンド、現在のイベント情報エントリ612のコマンド602がRDコマンドであるため30サイクルが該当する。一方、現在のイベント情報エントリ612の発生時刻601は31000のためSAME_PRE_TIMEからの期間は31000-1000=30000となり、30クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=1000から現在のイベント情報エントリ612の発生時刻601の31000までの30クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを31000に設定する。図10においては、1002の動作不可状態、30サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=RD、SAME_PRE_TIME=31000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ613の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=RDコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの31000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを35000に設定する。その後のステップ714ではNoと判定される。更にこの時点ではFIX_TIME=35000、DIFF_PRE_TIME=5000、DIFF_PRE_CMD=ACTのためステップ717、ステップ720ではいずれもNoと判定される。その結果、ステップ723でFIX_TIME=35000から現在のイベント情報エントリ613の発生時刻601の35000までを休止状態に分類しようとするが、差分は0のため結局分類は行われない。そのため、ステップ724でもFIX_TIME=35000は現在のイベント情報エントリ613の発生時刻601の35000と一致するため実質更新はされない。図10においては、1003の動作状態、4サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=RD、SAME_PRE_TIME=35000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ614の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=RDコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの35000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを39000に設定する。その後のステップ714ではNoと判定される。更にこの時点ではFIX_TIME=39000、DIFF_PRE_TIME=5000、DIFF_PRE_CMD=ACTのためステップ717、ステップ720ではいずれもNoと判定される。その結果、ステップ723ではイベント情報エントリ613の場合と異なり、FIX_TIME=39000から現在のイベント情報エントリ614の発生時刻601の40000までの1クロックサイクル分を休止状態に分類する。続いてステップ724でFIX_TIMEを40000に設定する。図10においては、1004の動作状態、4サイクル、及び1005の休止状態、1サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=RD、SAME_PRE_TIME=40000に設定し、ステップ726を経由してステップ704に戻る。
ここからイベント情報エントリ615乃至620の処理では、バンクアドレス603は1となっており引数のバンク番号と一致しない。よって、ステップ707でNoと判定される。この場合はステップ727でDIFF_PRE_CMD、DIFF_PRE_TIMEを更新するだけで処理を終える。イベント情報エントリ620の処理終了時点では、DIFF_PRE_CMD=RD、DIFF_PRE_TIME=89000となる。
イベント情報エントリ621の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=RDコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの40000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを44000に設定する。その後のステップ714では図8のテーブルにおいて、SAME_PRE_CMD=RDコマンド、現在のイベント情報エントリ621のコマンド602がPREコマンドであり50サイクルが該当する。一方、現在のイベント情報エントリ621の発生時刻601は90000のためSAME_PRE_TIMEからの期間は90000-40000=50000となり、50クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=44000から現在のイベント情報エントリ621の発生時刻601の90000までの46クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを90000に設定する。図10においては、1006の動作状態、4サイクル、及び1007の動作不可状態、46サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=PRE、SAME_PRE_TIME=90000に設定し、ステップ726を経由してステップ704に戻る。
ここからイベント情報エントリ622乃至631の処理では、バンクアドレス603は1となっており引数のバンク番号と一致しない。よって、ステップ707でNoと判定される。この場合はステップ727でDIFF_PRE_CMD、DIFF_PRE_TIMEを更新するだけで処理を終える。イベント情報エントリ631の処理終了時点では、DIFF_PRE_CMD=RD、DIFF_PRE_TIME=129000となる。
イベント情報エントリ632の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=PREコマンドのため、ステップ708、ステップ711はいずれもNoと判定される。ステップ714では図8のテーブルにおいて、SAME_PRE_CMD=PREコマンド、現在のイベント情報エントリ632のコマンド602がACTコマンドであり40サイクルが該当する。一方、現在のイベント情報エントリ632の発生時刻601は130000のためSAME_PRE_TIMEからの期間は130000-90000=40000となり、40クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=90000から現在のイベント情報エントリ632の発生時刻601の130000までの40クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを130000に設定する。図10においては、1008の動作不可状態、40サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=ACT、SAME_PRE_TIME=130000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ633の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=ACTコマンドのため、ステップ708、ステップ711はいずれもNoと判定される。ステップ714では図8のテーブルにおいて、SAME_PRE_CMD=ACTコマンド、現在のイベント情報エントリ633のコマンド602がWRコマンドであり30サイクルが該当する。一方、現在のイベント情報エントリ633の発生時刻601は200000のためSAME_PRE_TIMEからの期間は200000-130000=70000となり、70クロックサイクルであると分かる。結果一致しないため、ステップ714の判定はNoとなる。更にこの時点ではFIX_TIME=130000、DIFF_PRE_TIME=129000、DIFF_PRE_CMD=RDのためステップ717、ステップ720ではいずれもNoと判定される。その結果、ステップ723でFIX_TIME=130000から現在のイベント情報エントリ633の発生時刻601の200000までの70クロックサイクル分を休止状態に分類する。続いてステップ724でFIX_TIMEを200000に設定する。図10においては、1009の休止状態、70サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=WR、SAME_PRE_TIME=200000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ634の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=WRコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの200000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを204000に設定する。その後のステップ714ではNoと判定される。更にこの時点ではFIX_TIME=204000、DIFF_PRE_TIME=129000、DIFF_PRE_CMD=RDのためステップ717、ステップ720ではいずれもNoと判定される。その結果、ステップ723でFIX_TIME=204000から現在のイベント情報エントリ634の発生時刻601の204000までを休止状態に分類しようとするが、差分は0のため結局分類は行われない。そのため、ステップ724でもFIX_TIME=204000は現在のイベント情報エントリ634の発生時刻601の204000と一致するため実質更新はされない。図10においては、1010の動作状態、4サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=WR、SAME_PRE_TIME=204000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ635の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=WRコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの204000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを208000に設定する。その後のステップ714では図8のテーブルにおいて、SAME_PRE_CMD=WRコマンド、現在のイベント情報エントリ635のコマンド602がRDコマンドであり10サイクルが該当する。一方、現在のイベント情報エントリ635の発生時刻601は214000のためSAME_PRE_TIMEからの期間は214000-204000=10000となり、10クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=2080000から現在のイベント情報エントリ635の発生時刻601の214000までの6クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを214000に設定する。図10においては、1011の動作状態、4サイクル、及び1012の動作不可状態、6サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=RD、SAME_PRE_TIME=214000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ636の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=RDコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ708でFIX_TIMEの214000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを218000に設定する。その後のステップ714では図8のテーブルにおいて、SAME_PRE_CMD=RDコマンド、現在のイベント情報エントリ636のコマンド602がWRコマンドであり15サイクルが該当する。一方、現在のイベント情報エントリ636の発生時刻601は229000のためSAME_PRE_TIMEからの期間は229000-214000=15000となり、15クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=2180000から現在のイベント情報エントリ636の発生時刻601の229000までの11クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを229000に設定する。図10においては、1013の動作状態、4サイクル、及び1014の動作不可状態、11サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=WR、SAME_PRE_TIME=229000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ637の処理では、バンクアドレス603は0となっており引数のバンク番号と一致する。よって、ステップ707でYesと判定される。この時点のSAME_PRE_CMD=WRコマンドのため、ステップ708でYesと判定される。これに伴い、ステップ709でFIX_TIMEの229000から4クロックサイクル分を動作状態に分類する。続いてステップ710でFIX_TIMEを233000に設定する。その後のステップ714では図8のテーブルにおいて、SAME_PRE_CMD=WRコマンド、現在のイベント情報エントリ637のコマンド602がWRコマンドであり60サイクルが該当する。一方、現在のイベント情報エントリ637の発生時刻601は289000のためSAME_PRE_TIMEからの期間は289000-229000=60000となり、60クロックサイクルであると分かる。結果一致するため、ステップ714の判定はYesとなり、ステップ715でFIX_TIME=2330000から現在のイベント情報エントリ637の発生時刻601の289000までの56クロックサイクル分を動作不可状態に分類する。続いてステップ716でFIX_TIMEを289000に設定する。図10においては、1015の動作状態、4サイクル、及び1016の動作不可状態、56サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=WR、SAME_PRE_TIME=229000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ638の処理では、バンクアドレス603は1となっており引数のバンク番号と一致しない。よって、ステップ707でNoと判定される。この場合はステップ727でDIFF_PRE_CMD=ACT、DIFF_PRE_TIME=5000に設定する。更にステップ726でこれ以上イベント情報エントリはないため処理を終了する。
以上がバンク状態分類手段103によるバンク番号0のバンク220の状態分類処理である。次にバンク番号1のバンク221に図6のイベント情報エントリ610乃至638を入力したときのバンク状態分類手段103の処理を同様に説明する。
まずイベント情報エントリの入力前に、ステップ701でバンク番号1と単位時間10,000,000psが入力される。続くステップ702、703、705、706の処理はバンク220と同様であるため詳細は割愛する。
イベント情報エントリ610の処理では、バンクアドレス603は0となっており引数のバンク番号と一致しない。よって、ステップ707でNoと判定される。この場合はステップ727でDIFF_PRE_CMD=ACT、DIFF_PRE_TIME=1000に設定し、ステップ726を経由してステップ704へ戻る。
イベント情報エントリ611の処理では、バンクアドレス603は1のためステップ707でYesと判定される。この時点ではFIX_TIME=0、SAME_PRE_CMD=UNDEF、DIFF_PRE_CMD=UNDEF、DIFF_PRE_TIME=1000のため、ステップ708、711、714はいずれもNoと判定される。次のステップ717ではFIX_TIME<DIFF_PRE_TIMEが成立するためYesと判定され、ステップ718ではFIX_TIME=0から1クロックサイクル分を休止状態に分類する。その後ステップ719でFIX_TIMEを1000に設定する。続いてステップ720では図8のテーブルにおいて、DIFF_PRE_CMD=ACTコマンド、現在のイベント情報エントリ611のコマンド602がACTコマンドであり4サイクルが該当する。これに対し、DIFF_PRE_TIME=1000とイベント情報エントリ611の発生時刻601の5000から条件に一致するためYesと判定される。その結果、ステップ721でFIX_TIME=1000から4クロックサイクル分を動作不可状態に分類する。その後ステップ724でFIX_TIMEを5000に設定する。図10においては、1017の休止状態、1サイクル、及び1018の動作不可状態、4サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=ACT、SAME_PRE_TIME=5000に設定し、ステップ726を経由してステップ704に戻る。
イベント情報エントリ612、613、614では、バンクアドレス603が引数のバンク番号と一致しないため、ステップ726でDIFF_PRE_CMDとDIFF_PRE_TIMEを更新する。結果、DIFF_PRE_CMD=RD、DIFF_PRE_TIME=40000となる。
イベント情報エントリ615の処理では、バンクアドレス603は1のためステップ707でYesと判定される。この時点ではFIX_TIME=5000、SAME_PRE_CMD=ACT、DIFF_PRE_CMD=RD、DIFF_PRE_TIME=40000のため、ステップ708、711、714はいずれもNoと判定される。次のステップ717ではFIX_TIME<DIFF_PRE_TIMEが成立するためYesと判定され、ステップ718でFIX_TIME=0から35クロックサイクル分を休止状態に分類する。その後ステップ719でFIX_TIMEを40000に設定する。続いてステップ720では図8のテーブルにおいて、DIFF_PRE_CMD=RDコマンド、現在のイベント情報エントリ615のコマンド602がWRコマンドであり15サイクルが該当する。これに対し、DIFF_PRE_TIME=40000とイベント情報エントリ611の発生時刻601の55000から条件に一致するためYesと判定される。その結果、ステップ721でFIX_TIME=40000から15クロックサイクル分を動作不可状態に分類する。その後ステップ724でFIX_TIMEを55000に設定する。図10においては、1019の休止状態、35サイクル、及び1019の動作不可状態、15サイクルが確定したこととなる。その後、ステップ725でSAME_PRE_CMD=WR、SAME_PRE_TIME=55000に設定し、ステップ726を経由してステップ704に戻る。
以降の処理は既に説明したものと同様に処理される。結果として、図10における1020乃至1038が確定する。バンク222乃至バンク227に対しては、図6のイベント情報102ではいずれの制御コマンドも発生していないため全て休止状態であるものとする。
さて各ステップで分類されたバンク状態は発生時刻(このときのFIX_TIME)と発生サイクル数と一緒にバンク状態情報104へ出力される。バンク状態情報104にはバンク220乃至227の8つ分の情報が分けて格納されている。ここから、バンク220乃至227の状態に基づいてDRAM209の状態を分類するDRAM状態分類手段105について説明する。最初にDRAM状態分類手段105によって分類するDRAM209の状態の種類を先に説明する。本実施形態ではバンク状態と同様に動作状態、休止状態、動作不可状態の3つをDRAM状態とする。DRAM状態は以下の通り分類する。
動作状態: 少なくとも1つのバンクの状態が動作状態の場合
動作不可状態: 全てのバンクの状態が動作状態ではなく、かつ少なくとも1つのバンクの状態が動作不可状態の場合
休止状態: 全てのバンクの状態が休止状態の場合
これにより各バンクが異なる状態であった場合でもDRAMとしての状態を分類することができる。
図9はDRAM状態分類手段105の手順を示すフローチャート図である。これを用いてDRAM状態分類手段105を詳細に説明する。まずステップ901で状態確定時刻(FIX_TIME)をリセットする。具体的にはFIX_TIMEに0を設定する。状態確定時刻FIX_TIMEの使い方については後述するが、本値はその時刻まではDRAM209の状態が決定していることを意味する。次にステップ902でバンク状態情報104からバンク220乃至227の分類結果を一つずつ読み出し、各バンクの状態を設定する。前述した通り、分類結果はバンクの状態と発生時刻、発生サイクルがセットとなっている。ここから、ステップ903、904、905、906、907を使ってDRAM状態を分類する。すなわち、ステップ903ではバンク220から227の中に一つでも動作状態があるかを判定する。Yesと判定された場合はステップ904でDRAM状態を動作状態に設定する。一方Noと判定された場合はステップ905でバンク220から227の中に一つでも動作不可状態があるかを判定する。Yesと判定された場合はステップ906でDRAM状態を動作不可状態に設定する。一方Noと判定された場合は、全てのバンクが休止状態となるため、ステップ907でDRAM状態を休止状態に設定する。ステップ904、ステップ906、ステップ907でDRAM状態を設定した結果は、DRAM状態情報106へ出力する。設定した結果は、発生時刻を示すこのときのFIX_TIMEとバンク220乃至227の発生サイクルの内もっとも小さい値分を発生サイクルとして関連付けられる。その後動作状態、動作不可状態、休止状態のいずれの状態に設定された場合でもステップ908に進む。ステップ908ではバンク220乃至227の分類結果がバンク状態情報104内に残っているかを判定する。もう残っていない場合は処理を終了する。まだ残っている場合は続くステップ909でFIX_TIMEをバンク220乃至227の発生サイクルの内もっとも小さい値分進める。次にステップ910でバンク220乃至227の発生サイクルの内もっとも小さい値となっているバンクの次の分類結果を読み出し、同バンクの状態を更新する。その後903に戻って処理を繰り返す。以上が本実施形態におけるDRAM状態分類手段105の内容である。本実施形態においては、DRAM状態分類手段105によるDRAM状態の分類は動作状態、動作不可状態、休止状態という順番で優先度が高いという前提に基づいた前述の分類方法を用いて説明したが、分類方法の内容は本発明を限定するものではない。例えば、動作不可状態、動作状態、休止状態という順番で優先度が高いという前提で分類方法を適用することもできる。この場合は、少なくとも一つのバンクが動作不可状態である場合は動作不可状態と判定し、これに合致せず、かつ少なくとも一つのバンクが動作状態である場合は動作状態と判定する。いずれにも合致しない場合は休止状態となる。これに限らず優先順位や判断条件は論理的に説明できる限り、いずれの内容でも適用することができる。また本実施形態においては、バンク状態分類手段103、DRAM状態分類手段105は順次処理を前提として説明したが、処理順番は本発明を限定しない。例えば、バンク状態分類手段103によって分類された結果を、順次DRAM状態分類手段105に入力することで、並行してかかる2つの処理を実行することも可能である。
以下、図10に示すバンク220乃至227の分類結果を例としてDRAM状態分類手段105の処理を具体的に説明する。図10の1041乃至1076はDRAM状態分類手段105の処理結果を示している。
まずステップ901でFIX_TIME=0にリセットする。続くステップ902でバンク220乃至227の分類結果をそれぞれ読み出しバンク状態を設定する。バンク220は休止状態に1クロックサイクル分設定する。バンク221は休止状態に1クロックサイクル分設定する。バンク222乃至227は休止状態に全処理サイクルである289クロックサイクル分設定する。この時点では全バンクが休止状態のためステップ903、905でそれぞれNoと判定され、ステップ907でDRAM状態を休止状態に設定する。図10においては1041の休止状態、1サイクルが決定したこととなる。その後、ステップ908を経由し、ステップ909でFIX_TIME=1000に設定する。続くステップ910ではバンク220、バンク221のバンク状態をそれぞれ動作不可状態に設定して、ステップ903に戻る。
続くFIX_TIME=1000のタイミングの処理では、バンク220、221が動作不可状態で、バンク222乃至227は休止状態のため、ステップ903、905でそれぞれNo、Yesと判定される。そして、ステップ906でDRAM状態を動作不可状態に設定する。図10においては1042の動作不可状態、4サイクルが確定したこととなる。その後、ステップ908を経由し、ステップ909でFIX_TIME=5000に設定する。続くステップ910ではバンク221のバンク状態を休止状態に設定して、ステップ903に戻る。
続くFIX_TIME=5000のタイミングの処理では、バンク220が動作不可状態で、バンク221乃至227は休止状態のため、ステップ903、905でそれぞれNo、Yesと判定され、ステップ906でDRAM状態を動作不可状態に設定する。図10においては1043の動作不可状態、26サイクルが確定したこととなる。その後、ステップ908を経由し、ステップ909でFIX_TIME=31000に設定する。続くステップ910ではバンク220のバンク状態を動作状態に設定して、ステップ903に戻る。
続くFIX_TIME=31000のタイミングの処理では、バンク220が動作状態で、バンク221乃至227は休止状態のため、ステップ903でYesと判定され、ステップ905でDRAM状態を動作状態に設定する。図10においては1044の動作状態、4サイクルが確定したこととなる。その後、ステップ908を経由し、ステップ909でFIX_TIME=35000に設定する。続くステップ910ではバンク220のバンク状態を動作状態に設定(結果変更なし)して、ステップ903に戻る。
ここからは詳細を割愛し、判定内容のみを説明する。
続くFIX_TIME=35000のタイミングの処理は、FIX_TIME=31000のタイミングの処理と同様にステップ906でDRAM状態を動作状態に設定する。図10においては1045の動作状態、4サイクルが確定したこととなる。
続くFIX_TIME=39000のタイミングの処理では、全てのバンクが休止状態のため、DRAM状態を休止状態に設定する。図10においては1046の休止状態、1サイクルが確定したこととなる。
続くFIX_TIME=40000のタイミングの処理では、バンク220が動作状態、バンク221が動作不可状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1047の動作状態、4サイクルが確定したこととなる。
続くFIX_TIME=44000のタイミングの処理では、バンク220、221が動作不可状態、バンク222乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1048の動作不可状態、11サイクルが確定したこととなる。
続くFIX_TIME=55000、59000、63000のタイミングの処理では、バンク220が動作不可状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1049、1050、1051の動作状態、それぞれ4サイクルが確定したこととなる。
続くFIX_TIME=67000のタイミングの処理では、バンク220、221が動作不可状態、バンク222乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1052の動作不可状態、6サイクルが確定したこととなる。
続くFIX_TIME=73000、77000のタイミングの処理では、バンク220が動作不可状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1053、1054の動作状態、それぞれ4サイクルが確定したこととなる。
続くFIX_TIME=81000のタイミングの処理では、バンク220が動作不可状態、バンク221乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1055の動作不可状態、8サイクルが確定したこととなる。
続くFIX_TIME=89000、90000のタイミングの処理では、バンク220が動作不可状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1056、1057の動作状態、それぞれ1サイクル、3サイクルが確定したこととなる。
続くFIX_TIME=93000から129000までの4000毎の処理では、バンク220が動作不可状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1058乃至1066の動作状態、それぞれ4サイクルが確定したこととなる。
続くFIX_TIME=133000のタイミングの処理では、バンク220が動作不可状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1067の動作状態、1サイクルが確定したこととなる。
続くFIX_TIME=131000のタイミングの処理では、バンク220が休止状態、バンク221が動作状態、バンク222乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1068の動作状態、3サイクルが確定したこととなる。
続くFIX_TIME=134000のタイミングの処理では、全てのバンクが休止状態のため、DRAM状態を休止状態に設定する。図10においては1069の休止状態、67サイクルが確定したこととなる。
続くFIX_TIME=200000、204000のタイミングの処理では、バンク220が動作状態、バンク221乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1070、1071の動作状態、各4サイクルが確定したこととなる。
続くFIX_TIME=208000のタイミングの処理では、バンク220が動作不可状態、バンク221乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1072の動作不可状態、6サイクルが確定したこととなる。
続くFIX_TIME=214000のタイミングの処理では、バンク220が動作状態、バンク221乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1073の動作状態、4サイクルが確定したこととなる。
続くFIX_TIME=218000のタイミングの処理では、バンク220が動作不可状態、バンク221乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1074の動作不可状態、11サイクルが確定したこととなる。
続くFIX_TIME=229000のタイミングの処理では、バンク220が動作状態、バンク221乃至227は休止状態のため、DRAM状態を動作状態に設定する。図10においては1075の動作状態、4サイクルが確定したこととなる。
続くFIX_TIME=233000のタイミングの処理では、バンク220が動作不可状態、バンク221乃至227は休止状態のため、DRAM状態を動作不可状態に設定する。図10においては1076の動作不可状態、56サイクルが確定したこととなる。
以上が図10に示すバンク220乃至227の分類結果を例としてDRAM状態分類手段105の処理の説明となる。
続いて、本実施形態における統計処理107について説明する。統計処理107は入力としてバンク状態情報104、及びDRAM状態情報106を受ける。ただしその処理はそれぞれ別々に実行される。図17は統計処理107の手順を示すフローチャート図であるが、これはバンク状態情報104及びDRAM状態情報106いずれにも適用できる。ただし、バンク状態情報においてはバンク毎に別々に実行するため、いずれか一つのバンクに関するバンク状態情報が入力されることを前提とする。図17を用いて統計処理107を詳細に説明する。
まずステップ1701で単位時間を引数として入力する。次にステップ1702で入力となるバンク状態情報104、もしくはDRAM状態情報106からデータを一つ読み込む。続くステップ1703で入力データの発生時刻を確認し、発生時刻がステップ1701で受け取った引数の単位時間を更新したか判定する。例えば、ステップ1701で受け取った単位時間を10,000,000ps(=10us)とする。これに対し、ステップ1702で発生時刻9,999,000psのデータを読み込んだ後、次のラウンドで発生時刻10,000,000psのデータを読み込んだとする。この場合、単位時間10,000,000psの区切りを跨いだためステップ1703の判定ではYesと判定される。同様に、20,000,000ps、30,000,000psの時刻を跨いだ場合など単位時間10,000,000psの整数倍を跨いだ場合にYesと判定する。また、最初のデータを処理する場合も単位時間を跨いだとみなしYesと判定する。ステップ1703の判定に用いる発生時刻はバンク状態分類手段103、もしくはDRAM状態分類手段105で状態が分類された際に関連付けられている。ステップ1703でYesと判定された場合、ステップ1704で新しい出力となる統計情報のデータエントリを作成する。データエントリとは、バンク状態及びDRAM状態毎の発生回数と発生サイクルの累積を単位時間毎に保持するためのデータエントリである。
ステップ1703でいずれの判定をされた場合でも、ステップ1705へ進む。ステップ1705ではステップ1702で読み込んだデータのDRAM状態及びバンク状態に対し、発生回数を1回、発生サイクルを関連付けられた発生サイクル数分加算する。発生サイクルは発生時刻と同様に、バンク状態分類手段103、もしくはDRAM状態分類手段105で状態が分類された際に関連付けられている。続いてステップ1706でデータが残っているか確認し、あればステップ1702に戻り処理を繰り返す。一方、もうデータがなければステップ1707で処理を終了する。以上が統計処理107の内容である。
続いて、本実施形態における表示手段108について説明する。表示手段108は統計処理107の処理結果、すなわち単位時間毎のデータエントリを入力として、前記コンピュータ装置で処理を行い、様々な形態の出力結果をディスプレイ307に出力する。以下図11乃至16で説明する表示例は全てバンク状態、DRAM状態いずれも同様の出力が可能である。同時に出力する場合は、最大でバンク220乃至227のバンク状態、DRAM209のDRAM状態の計9つ分を出力する。
図11のテーブルは表示手段108による表示例の1つを示している。図11のテーブルでは、動作状態、動作不可状態、休止状態の3つの状態それぞれにおける発生回数、発生サイクル数を示している。
図12のパイチャートは表示手段108の表示例の1つを示している。図12において、1201は総発生サイクル数における動作状態の発生サイクル数が占める割合を示している。同様に、1202は動作不可状態の発生サイクル数が占める割合、1203は休止状態の発生サイクル数が占める割合である。
図13の積み上げ棒グラフは表示手段108の表示例の1つを示している。図13において、1301は動作状態の発生サイクル数を示している。同様に、1302は動作不可状態の発生サイクル数、1303は休止状態の発生サイクル数であり、全体は総発生サイクル数となっている。
図14の積み上げ棒グラフは表示手段108の表示例の1つを示している。図14において、1401は総発生サイクル数における動作状態の発生サイクル数が占める割合を示している。同様に、1402は動作不可状態の発生サイクル数が占める割合、1403は休止状態の発生サイクル数が占める割合である。図13との違いは、全体が総発生サイクル数か、100%かの違いである。
図15の折れ線グラフは表示手段108の表示例の1つを示している。図15において、1501は単位時間の総発生サイクル数における動作状態の発生サイクル数が占める割合を示しており、単位時間毎の変化を折れ線でつないで示している。同様に、1502は動作不可状態の発生サイクル数が占める割合、1503は休止状態の発生サイクル数が占める割合である。単位時間毎に並べて示すことで、その変化を容易に解析することができる。
図16の積み上げ棒グラフは表示手段108の表示例の1つを示している。図16において、1601、1602、1603は、図14の1401、1402、1403と同じである。違いは、図16では単位時間毎に積み上げ棒グラフを並べており、結果図15と同様に単位時間毎の変化を解析することが可能となる。
(第二の実施形態)
第二の実施形態を図1、図2、図3、図7、図8、図9、及び図18、図19を使って説明する。本実施形態は第一の実施形態とバンク状態、DRAM状態の種類の詳細度が異なる。より具体的には、本実施形態でも第一の実施形態で用いた動作状態、動作不可状態、休止状態の3つの状態を用いる点は変わらない。一方、本実施形態では、これらの3つの状態を解析目的に応じた更に細かい状態に分類する点が異なる。
ところで、本実施形態の表示装置の構成は、図1に示す第一の実施形態と同一であるため、構成についての詳細な説明は割愛する。更に、本実施形態のシミュレーション対象のテストベンチの構成、シミュレーション処理を含む性能解析処理及び解析結果表示処理を行うコンピュータ装置も、それぞれ図2、図3と同一であるため、詳細な説明は割愛する。
さて、ここから図18を用いて本実施形態のバンク状態分類手段103が分類するバンク状態の詳細分類について説明する。図18において、1801はリード動作状態であり、動作状態の中でもRDコマンドを受信した後のデータ信号が占有される期間、すなわち8ビートアクセス前提ならば4クロックサイクルを意味する。一方1802はライト動作状態であり、動作状態の中でもWRコマンドを受信した後のデータ信号が占有される期間、すなわち8ビートアクセス前提ならば4クロックサイクルを意味する。これら2つが動作状態の詳細分類である。
これらの詳細分類をバンク状態に適用する場合、動作状態と同様にバンク状態分類手段103によって分類する。具体的には、図7のステップ709において動作状態と分類すると同時に、対象のバンクに対する一つ前のコマンド、すなわちSAME_PRE_CMDを確認する。一つ前のコマンドがRDコマンドであった場合はリード動作状態を詳細分類状態とし、WRコマンドであった場合はライト動作状態を詳細分類とする。更に、ステップ710このように図7のステップ709の処理を追加することで、動作状態に対する詳細分類を行うことができる。
次に動作不可状態に対する詳細分類について説明する。図18において、1803はアクティベート動作不可状態であり、動作不可状態の中でもACTコマンドからRDもしくはWRコマンドまでの制約による期間を意味する。1804はプリチャージ動作不可状態であり、動作不可状態の中でもPREコマンドからACTコマンドまでの制約による期間を意味する。1805はWrite-to-Precharge動作不可状態であり、動作不可状態の中でもWRコマンドからPREコマンドまでの制約による期間を意味する。1806はRead-to-Precharge動作不可状態であり、動作不可状態の中でもRDコマンドからPREコマンドまでの制約による期間を意味する。1807はリフレッシュ動作不可状態であり、動作不可状態の中でもREFコマンドから他のコマンドを発行できない期間を意味する。1808はRead-to-Writeスイッチング動作不可状態であり、動作不可状態の中でもRDコマンドからWRコマンドまでの制約による期間を意味する。1809はWrite-to-Readスイッチング動作不可状態であり、動作不可状態の中でもWRコマンドからRDコマンドまでの制約による期間を意味する。1803から1806までは同一バンクに対するコマンドのみを対象としている。一方、Read-to-Writeスイッチング動作不可状態1808、及びWrite-to-Readスイッチング動作不可状態1809は、先行するコマンドと後続のコマンドは同一バンク、異バンク問わず対象とする。
以上7つの動作不可状態に対する詳細分類は、動作不可状態と同様にバンク状態分類手段103によって分類する。まずリフレッシュ動作不可状態1807は、図7のステップ712において動作不可状態と分類すると同時に、リフレッシュ動作不可状態を詳細分類とする。1803から1806までの4つに対しては、図7のステップ715において詳細分類を行う。ステップ715動作不可状態と分類すると同時に、詳細分類としていずれに合致するかを判定する。例えば、対象バンクに対する一つ前のコマンドがACTコマンドで、現在のイベント情報エントリのコマンド602がRDコマンドの場合、アクティベート動作不可状態1803を詳細分類と判定する。また別の例として、対象バンクに対する一つ前のコマンドがRDコマンドで、現在のイベント情報エントリのコマンド602がPREコマンドの場合、Read-to-Precharge動作不可状態1806を詳細分類と判定する。Read-to-Writeスイッチング動作不可状態1808、及びWrite-to-Readスイッチング動作不可状態1809は、二つの箇所で判定するケースがある。一つ目は1803から1806までと同様にステップ715で分類するケースである。この場合は、既に説明したのと同じ方法で詳細分類を判定する。2つ目はステップ721で詳細分類を判定するケースである。この場合でも先行するコマンドが対象バンク以外に対する一つ前のコマンドになるだけでステップ715での判定方法と違いはない。以上の方法で、動作不可状態の詳細分類を行うことができる。ところで、バンク状態分類手段103は図8のテーブルに基づき先行するコマンドがACTコマンドで、後続のコマンドが別バンクに対するACTコマンドで、コマンド間が4サイクルの場合は動作不可状態に分類する。しかしながら、この動作不可状態は対応する詳細分類がない。本実施形態では、この場合詳細分類は該当なしとする。このように詳細分類はより詳細に分析したい項目に絞り込んで分類するということも可能である。
次に本実施形態におけるDRAM状態分類手段105について説明する。DRAM状態分類手段105によって分類されるDRAM状態の詳細分類は2種類ある。1つ目は既に説明したバンク状態と同じ詳細分類、すなわち図18に示す分類を用いる。2つ目はバンク状態とは異なる詳細分類、すなわちDRAM状態独自の詳細分類を用いる。まず1つ目のバンク状態と同じ詳細分類を用いる場合を説明する。この場合は、動作状態、動作不可状態、休止状態の優先順位、判断条件と同様に詳細分類同士の優先順位を決定する必要がある。本実施形態においては、第一の実施形態と同じ決定条件を用いて動作状態、動作不可状態、休止状態を決定し、その後詳細分類は各状態内での詳細分類同士の優先順位に基づいて決定する。具体的には、動作状態ではリードとライトは同時に発生し得ないため優先順位は設定しない。動作不可状態は、以下の順番で優先順位が高いものとする。
リフレッシュ動作不可状態1807
Read-to-Writeスイッチング動作不可状態1808及びWrite-to-Readスイッチング動作不可状態1809(同時に発生しないため)
アクティベート動作不可状態1803
プリチャージ動作不可状態1804
Write-to-Precharge動作不可状態1805
Read-to-Precharge動作不可状態1806
(該当なし)
この優先順位に基づいたDRAM状態分類手段105の詳細分類の実行について説明する。まず、動作状態の詳細分類について説明する。図9におけるステップ904で、DRAM状態を動作状態に設定すると同時に動作状態にあるバンクの詳細分類をそのままDRAM状態の詳細分類とする。例えば、バンク220の詳細分類がリード動作状態であった場合、DRAM209の詳細分類もリード動作状態と判定する。データ転送の信号線を共有している関係上、2つ以上のバンクが同時に動作状態になることはないため、リード動作状態とライト動作状態は同時に起こりえない。次に動作不可状態の詳細分類について説明する。図9におけるステップ905で、DRAM状態を動作不可状態に設定すると同時に動作不可状態にあるバンクの詳細分類を前述の優先順位に基づいて判定し、詳細分類を判定する。例えば、バンク220の詳細分類がRead-to-Writeスイッチング動作不可状態で、バンク221の詳細分類がアクティベート動作不可状態であった場合を想定する。この場合には優先順位に基づいてDRAM209の詳細分類はRead-to-Writeスイッチング動作不可状態と判定する。このとき休止状態は比較対象としない。以上の方法でDRAM状態分類手段105により詳細分類を行うことができる。
次に、DRAM状態分類手段105によって分類する2つ目の詳細分類について説明する。2つ目の詳細分類はバンク状態とは異なる詳細分類である。本実施形態では動作状態に対してのみ2つ目の詳細分類を用いる。具体的には、(1)他のバンクに動作不可状態がある動作状態と、(2)他のバンクが全て休止状態の動作状態の2つである。(1)は他のバンクに動作不可状態があるが動作状態が優先されて動作状態と判定された場合の動作状態である。一方(2)は他のバンクに動作不可状態はなく全て休止状態で動作状態と判定された場合の動作状態である。DRAMのデータアクセスにおいては、動作不可状態は、他のバンクのデータアクセス、すなわち動作状態に隠ぺいされることで見かけ上アクセス効率が高まる。すなわち、性能解析においては(1)の詳細分類と(2)の詳細分類の意味は大きく違う。例えば、(1)の詳細分類がほとんどなく、1803、1804の詳細分類が多く存在する場合は、アクセス効率が低い状態であることが解析できる。一方、(1)が多くあるものの、1803、1804の詳細分類がほとんどない場合は動作不可状態を隠ぺいできており、アクセス効率を落とさずにアクセスできている状態であることが解析できる。
(1)、(2)の詳細分類の判定方法について説明する。一つ目の詳細分類と同様に図9におけるステップ904で、DRAM状態を動作状態に設定すると同時に他のバンクの状態を確認し、一つでも動作不可状態がある場合は(1)と判定し、全てが休止状態の場合は(2)と判定する。これにより2つ目の詳細分類も判定できる。
ここから、説明した詳細分類を適用した場合の表示手段108の表示例を図19を使って説明する。
図19のパイチャートは表示手段108の表示例の1つを示している。図12のパイチャートに対し、更に各状態の詳細分類で分類している。詳細分類と3状態の分類は総数が必ず一致するため、並べて比較するとより効率的に性能解析が実施できる。
以上説明した方法で、第一の実施形態に対してより細かい詳細分類を用いてバンク状態の分類、DRAM状態の分類を行い、表示手段108により表示することができる。
(第三の実施形態)
第三の実施形態を、図1乃至図3、図6、図7、図9、図20乃至図28、図30乃至図32を使って説明する。本実施形態でも第一の実施形態で用いた動作状態、動作不可状態、休止状態の3つの状態を用いる点は変わらない。本実施形態は第一の実施形態で用いている動作状態及び一部の動作不可状態にマスタ情報を関連付ける点が異なる。
本実施形態におけるマスタ情報について説明する前に、本実施形態で性能解析の対象とするシステムLSI内部のデータアクセスの仕組みについて説明する。一般的にシステムLSI内部に実装されるバスにおいて、当該バスを介してデータアクセスを要求するブロックをマスタ(及びイニシエータ)と呼び、データアクセスの要求を受けるブロックをスレーブ(及びターミネータ)と呼ぶ。図20は本実施形態におけるシミュレーション対象のシステムLSI及び周辺モジュールを含むテストベンチの構成図である。本実施形態においては、図20のCPU201、画像処理部202、音声処理部203、ネットワーク処理部204がマスタである。一方、ROMC206、メモリコントローラ205がスレーブとなる。各マスタはバス208を介して各スレーブへデータアクセス要求を発行する。図20は第一の実施形態の図2のテストベンチ構成図に対して、マスタモニタ2001が追加されている点が異なる。マスタモニタ2001については後述する。
マスタに相当するCPU201、画像処理部202、音声処理部203、ネットワーク処理部204がデータアクセス要求を発行する場合、いずれのスレーブに対する要求であるかを意識する必要はない。データアクセス要求の割り当てはバス208によってバスアドレスと呼ばれるアクセスする領域の番地(アドレス)を特定する情報を基に実現される。バスアドレスは一般的に32ビットもしくはそれ以上のビット数のデータで構成される。本実施形態においては、バスアドレスは32ビットのデータで構成するものとする。以下バスアドレスは頭に’0x’を付加し、16進数で表記する。
各マスタはデータアクセス要求時にバスアドレスを付加して発行する。バス208はデータアクセス要求に付加されたバスアドレスを解析し、それに基づいてアクセス先であるスレーブを決定する。本実施形態においてはROMC206もしくはメモリコントローラ205のいずれかである。一般的にはバスアドレスのデータの一部の値に基づいてアクセス先のスレーブを決定する。本実施形態においては、バスアドレスのビット30を使って決定することとする。バスアドレスのビット30が0の場合はメモリコントローラ205へのデータアクセス要求であるものとし、1の場合はROMC206へのデータアクセス要求であるものとする。バス208はバスアドレスのビット30の値を基にデータアクセス要求を振り分ける。
さて、バス208からデータアクセス要求を受けた各スレーブでは、同様にバスアドレスを解析し、アクセス先のアドレスを特定する。ROMC206においてはROM210内のアドレスであり、メモリコントローラ205においては、DRAM209内のアドレスである。メモリコントローラ205におけるDRAM209内のアドレスの特定の仕組みについてより詳細に説明する。従来技術で説明したように、DRAMは複数のバンクで構成され、各バンク内は列アドレスと行アドレスを指定することでアクセスするアドレスを指定する。すなわち、バスアドレスからバンク番号、行アドレス、列アドレスへ変換することでDRAM内のアドレスを特定することができる。本実施形態においては、DRAM209内のデータ単位サイズは1バイト(=8ビット)を前提とし、バスアドレス32ビットを以下の通り割り当てることとする。
バスアドレス ビット27~ビット29 = バンク番号
バスアドレス ビット11~ビット26 = 行アドレス
バスアドレス ビット0~ビット10 = 列アドレス
例えば、メモリコントローラ205が、バスアドレス=0x3FED_CBA8が付加されたデータアクセス要求を受けたものとする。この場合、ビット27~29は全て1のため、バンク番号は7となる。ビット11~26は、上位ビットから順に2進数では1111110110111001となり、16進数では0xFDB9となる。ビット0~ビット10は、上位ビットから順に2進数では01110101000となり、16進数では0x3A8となる。よって、バンク番号=7、行アドレス=0xFDB9、列アドレス=0x3A9を用いてDRAM209へアクセスすることとなる。以上説明した方法で、バスアドレスを付加したデータアクセス要求により、各マスタからバス208を介した各スレーブへのデータアクセスの割り当てを実現する。
さらに、バスはマスタからのデータアクセス要求を蓄積するバッファを持つことが可能であり、優先順位の高いデータアクセス要求が優先度の低い同一スレーブへのデータアクセス要求を追い越す機能を有することがある。また、メモリコントローラも、内部にデータアクセス要求を蓄積するバッファを持ち、効率の良いDRAMアクセスをするために、アクセス要求を並び替える機能を有することがある。効率の良いDRAMアクセスとは、例えば、ページミスの発生を抑えるコマンド群を指す。同一ページに連続でRDもしくはWRコマンドが続く場合、ページミスは発生しないが、途中で異なるページへのRDもしくはWRコマンドが発行されると前後で2回のページミスが発生し、アクセス効率を落とす。ページミスの発生を抑えるコマンド群とは同一ページへの連続するRDもしくはWRコマンドを指し、連続する回数が長いほど効率の良いDRAMアクセスとなる。また、第二の実施形態で述べたRead-to-WriteもしくはWrite-to-Readスイッチングの発生を抑えることも効率の良いDRAMアクセスを実現する一つの方法である。例えばRDコマンド5回とWRコマンド5回が存在する場合、RDコマンドとWRコマンドを交互に発行するとスイッチングは10回発生する。一方RDコマンド5回とWRコマンド5回をそれぞれ連続して発行するとスイッチングは1回となる。上記で一般的なバス及びメモリコントローラがデータの並び替えをすることを述べたが、本実施形態では説明の簡略化のため、バス208及びメモリコントローラ205でのデータアクセス要求の並び替えは発生しないものとする。
ここから、図20のマスタモニタ2001が監視する各マスタとバス208の間の制御信号の動作について説明する。本実施形態においては、バス208はAMBA4(ARM社の登録商標)のプロトコルに準拠しているものとする。AMBA4では以下の4つのチャネルで構成され、各チャネルが独立に動作するように定義されている。
アドレスチャネル
ライトデータチャネル
ライトレスポンスチャネル
リードデータチャネル
図22はAMBA4に準拠したアドレスチャネルの制御信号の一部を示している。アドレスチャネルにはこれ以外にもいくつかの制御信号が存在するが、本発明には不要であるため割愛する。図において2201はクロックであり、全ての信号の基準となる。すなわちクロック2201の立ち上がり(0→1への変化)のタイミングでクロック2201以外の信号の状態を評価しデータアクセス要求が発行されているか検出する。具体的には、arready2203とarvalid2204がクロック2201の立ち上がりでいずれも1になっている場合、リードのデータアクセス要求が発行されたことを意味する。一方、awready2209とawvalid2210がクロック2201の立ち上がりでいずれも1になっている場合、ライトのデータアクセス要求が発行されたことを意味する。これらの信号以外、すなわち2202、2205、2206、2207及び2208、2211、2212、2213はそれぞれリード及びライトのデータアクセス要求に付加されている属性情報を意味する。araddr2202は32ビットの信号でリードのデータアクセス要求におけるバスアドレスを示す。arburst2205はリードのデータアクセス要求のアクセスタイプを示す。arlen2206はリードのデータアクセス要求の連続アクセス数(=ビートサイズ)を示すが、実際のアクセス数より1小さい値である。すなわち、0ならば1回、1ならば2回アクセスすることを意味する。arsize2207はリードのデータアクセス要求の単位アクセスサイズを示すが、2の乗数が値となっており実際の単位アクセスサイズは値をnとすると2のn乗がアクセスサイズとなる。すなわち、0ならば1バイト単位、1ならば2バイト単位、2ならば4バイト単位、3ならば8バイト単位となる。アクセスタイプには、INCR、WRAP、FIXEDの3種類が存在する。INCRはaraddr2202が示すバスアドレスから、arsize2207が示すアクセスサイズをarlen2206が示すアクセス数分、バスアドレスを順次加算しながら連続アクセスする場合に使用するアクセスタイプである。WRAPはアクセス空間をarsize2207とarlen2206によって定まるアクセスサイズ単位で分割し、araddr2202が含まれる分割された領域にアクセスする。ただし、INCRがアクセスする領域の先頭からアクセスするのに対し、WRAPはアクセスする領域の途中、すなわちaraddr2202からアクセスする。その後アクセスする領域の終端に達すると、先頭に戻ってアクセスする。一方、FIXEDはaraddr2202が示すバスアドレスに対してarsize2207とarlen2206によって定まるアクセスサイズと回数分アクセスする。すなわち、INCR、WRAPがarlen2206が示す回数分バスアドレスを加算(WRAPでは戻る場合のみ減算)しながらアクセスするのに対し、FIXEDではバスアドレスを変更せず同一アドレスに対しアクセスする。例えば、araddr2202=0x0801_0000、arburst2205=INCR、arlen2206=7、arsize2207=3であったとする。この場合は、単位アクセスサイズを8バイトとして、連続8回、0x0801_0000からリードアクセスする。すなわち、0x0801_0000~0x0801_003Fの64バイト分の領域にアクセスすることとなる。以上がリードのデータアクセス要求時のアクセス内容の説明である。ライトのデータアクセス要求時は、バスアドレスとしてawaddr2208、アクセスタイプとしてawburst2211、連続アクセス回数としてawlen2212、単位アクセスサイズとしてawsize2213を用いる。それ以外はリードのデータアクセス要求と同様に処理する。以上説明したように、AMBA4のプロトコルにおいては、2202、2205、2206、2207及び2208、2211、2212、2213を参照することで、アクセスする領域を特定することができる。結果的に、データアクセス要求に付加された属性情報を解析することで、アクセス先のスレーブ内でのアクセス領域を特定することが可能となる。例えば、上記の例と同様にaraddr2202=0x0801_0000、arburst2205=INCR、arlen2206=7、arsize2207=3であったとする。この場合は、説明したように0x0801_0000~0x0801_003Fの64バイト分の領域にアクセスすることとなる。バスアドレスのビット30は0であるため、これらはメモリコントローラ205を介してDRAM209へアクセスすることとなる。DRAM209に対するアドレスは、前述したようにバンク番号=1、行アドレス=0x0040、列アドレス=0x000~0x03Fとなり、これらの領域へアクセスすることとなる。上述したようにデータアクセス要求は、その属性情報を解析することでアクセス領域を特定することができるが、本実施形態では説明を簡略化するため、アクセスタイプ=INCR、アクセスサイズ=8バイト固定であるものとする。ただし、本限定は説明の簡略化のためであり本発明の適用範囲を限定するものではない。すなわち、各マスタとバス208の間のアクセス要求が如何に複雑であっても、属性情報からアクセス先のスレーブのアクセス領域を特定することができるならば本発明を適用できる。例えば、1回のアクセス要求ではなく複数のアクセス要求に分けてアクセス要求を発行するような実施形態も容易に想像できる。この場合でもアクセス要求を履歴に残しておき、最終的にアクセス要求が確定するタイミングでアクセス領域を特定すれば良い。複数のアクセス要求の実施形態には、レジスタアクセスのようなメモリコントローラ205のアドレス割り当て方法の設定のためのアクセスを含んでいることは言うまでも無い。補足するが、属性情報からアクセス先のスレーブのアクセス領域を特定することができないならば、それはバス208、もしくはメモリコントローラ205においても同様であるため当該アクセス要求自体が成り立たないことを意味する。さて、マスタモニタ2001は上記のAMBA4のプロトコルに則って各マスタとバス208の間の制御信号を監視し、データアクセス要求とそれに付加された属性情報をマスタイベントとして検出する。更にマスタモニタ2001は検出したデータアクセス要求に対して本実施形態の冒頭で紹介したマスタ情報を関連付ける。マスタ情報とは、マスタ毎に一意に設定されている情報であり、関連付けたデータアクセス要求がいずれのマスタから発行されたものであるかを示すために用いる。本実施形態におけるマスタ情報は、0から3までの番号とし、順にCPU201、画像処理部202、音声処理部203、ネットワーク処理部204へそれぞれ割り当てられているものとする。例えば、マスタモニタ2001がCPU201からデータアクセス要求が発行されたことを検出すると、属性情報と共にマスタ情報=0を関連付けて出力する。
ここから、本実施形態の性能解析及び解析結果表示処理について説明する。性能解析及び解析結果表示処理は図3のコンピュータ装置上で実行される。図21は性能解析及び解析結果表示処理の全体を示す処理概念図である。図21において、検出手段101、イベント情報102は第一の実施形態と同様であるため説明を割愛する。2101はマスタイベント検出手段であり、マスタのマスタイベントをマスタモニタ2001によって検出しマスタイベント情報2102を出力する。マスタイベントはシステムLSI200内のマスタのデータアクセス要求発行を指す。マスタイベント検出手段2101からマスタイベント情報2102を出力する具体的な方法については後述する。検出手段101によって検出されたイベント情報102と、マスタイベント検出手段2101によって検出されたマスタイベント情報2102は、次の関連付け手段2103に入力される。イベントとは第一の実施形態で説明したようにDRAM209を制御するためのコマンドである。関連付け手段2103はイベントであるDRAM制御コマンドがいずれのマスタからのデータアクセス要求によって発生したかを関連付け、イベント情報102に対し、マスタ情報を付加したマスタ情報付きイベント情報2104を出力する。関連付け手段2103についても詳細は後述する。マスタ情報付きイベント情報2104はバンク状態分類手段2105に入力される。バンク状態分類手段2105乃至表示手段2110は第一の実施形態のバンク状態分類手段103乃至表示手段108とフローは同じである。異なる箇所は動作状態と一部の動作不可状態に対し、それらの状態がいずれのマスタからのデータアクセス要求が要因となったかを示すため、マスタ情報を関連付けることである。バンク状態分類手段2105乃至表示手段2110の第一の実施形態との差分の詳細については後述する。
以上が本実施形態の性能解析及び解析結果表示処理の全体フローである。以下、マスタイベント検出手段2101乃至表示手段2110の詳細を説明する。
マスタイベント検出手段2101は前記コンピュータ装置によるテストベンチ2002のシミュレーション処理におけるマスタモニタ2001によって実現する。マスタモニタ2001が出力するマスタイベント情報は第一の実施形態のモニタ211が出力するイベント情報と同様にHDD306に格納される。システムLSI200内のマスタとバス208間の信号線の監視するマスタモニタ2001、すなわち本実施形態のマスタイベント検出手段2101について説明する。マスタモニタ2001はシステムLSI200内の全てのマスタとバス208の信号線を監視する。本実施形態では、CPU201、画像処理部202、音声処理部203及びネットワーク処理部204とバス208の間の信号線が対象となる。具体的には、それぞれのマスタ毎に前述した図22のAMBA4の信号線を監視し、マスタイベントとなるデータアクセス要求の発行を検出する。AMBA4のデータアクセス要求の発行の仕組みは既に述べているため省略する。マスタモニタ2001はマスタイベント検出時にデータアクセス要求に付加されている属性情報を出力する。具体的にはリードのデータアクセス要求の場合はaraddr2202、arburst2205、arlen2206、arsize2207である。また、ライトのデータアクセス要求の場合はawaddr2208、awburst2211、awlen2212、awsize2213である。マスタイベント情報とは上記属性情報に対しデータアクセス要求発行のシミュレーション上の時刻及びマスタ情報を加えたものである。図24にマスタイベント情報の例を示す。本実施形態においても第一の実施形態と同様に時刻の単位はps(ピコ秒=0.000000000001秒)とする。マスタ情報は前述したようにマスタ毎に一意に設定されている情報であり、データアクセス要求がいずれのマスタから発行されたものであるかを示す。ここからマスタイベント情報エントリ2410について具体的に説明する。2410は時刻3000psにおいてCPU201(マスタ情報=0)からデータアクセス要求が発生されていることを示している。また、このデータアクセス要求のアドレスは0x00080010(araddr)でバーストタイプはINCR(arburst)、連続アクセス回数は2(arlen=1)、単位アクセスサイズは8バイト(arsize=3)であることを示している。araddr, arburst, arlen, arsizeが出力される場合はリード、awaddr, awburst, awlen, awsizeが出力される場合はライトのデータアクセス要求であると識別できる。そのため、2410のマスタイベント情報エントリはリードであることが分かる。本実施形態においてはAMBA4の規格に基づいたマスタイベントを検出することを例に説明したが、マスタイベント検出手段が検出するマスタイベントは規格の種類に限定することはない。他の規格であってもデータアクセス要求発行は信号線の値に基づいて定義されているため、マスタイベント検出手段を実現することができる。
ここから図6、図20、図23及び図26を用いて関連付け手段2103について説明する。関連付け手段2103はイベント情報102とマスタイベント情報2102を入力とし、前記シミュレーション処理後、別の処理として前記コンピュータ装置上で実行する。関連付け手段2103ではイベントであるDRAM制御コマンドが、いずれのマスタのデータアクセス要求によって発生したかを関連付ける。既に述べたように、データアクセス要求に付加された属性情報を解析すると、アクセス先のスレーブ内のアクセス領域を特定することが可能である。DRAM209を例にすると、スレーブ内のアクセス領域はバンク番号、列アドレス及び行アドレスで表される。コマンドで言うとACTコマンドではバンク番号と行アドレスを指定し、該当する行アドレスをオープンする。RDもしくはWRコマンドではバンク番号と列アドレスを指定し、オープンしている行アドレスとこれら二つのアドレスの組み合わせでデータを読み書きする領域が決定される。RD及びWRコマンドは行アドレスを指定しないが、コマンド発行時には既にACTコマンドで行アドレスは指定済みであり、RD及びWRコマンド発行時はバンク番号、行アドレス、列アドレスが指定された状態となる。そのためデータアクセス要求がいずれのマスタから発行されたかを識別することができれば、RD及びWRコマンドがいずれのマスタのデータアクセス要求によって発生したかを特定することができる。また、関連付け手段2103はRD及びWRコマンド以外のコマンドについてもマスタ情報を関連付ける。本実施形態ではPREコマンド及びACTコマンドをマスタ情報と関連付け、それ以外のコマンドはマスタ情報との関連付けは行わない。PREコマンド及びACTコマンドは背景技術で述べたようにDRAMのバンクの行アドレスに対するページオープンやクローズの切り替えを行う。つまりPRE及びACTコマンドはRDもしくはWRコマンドの前準備もしくは後処理を行うために発行される。そのため、PRE及びACTコマンドは、同一バンクの直前もしくは直後に発生したRDもしくはWRコマンドに起因して発行されると考えることができる。本実施形態では、PRE及びACTコマンドと同一バンクで発生した直前にRDもしくはWRコマンドに関連付いたマスタ情報を、PRE及びACTコマンドと関連付ける。
図23は関連付け手段2103のフローチャート図である。このフローチャートはステップ2302からステップ2304までの前段処理とスタップ2305からステップ2318までの後段処理に分かれる。前段処理では、マスタイベントであるデータアクセス要求を解析してアクセス先のDRAM209のバンク番号、行アドレス及、列アドレス、リード/ライト属性、マスタ情報を特定する。特定された上記情報は、後段処理で実施するイベント情報とマスタ情報の関連付けに使用する。また、前述したようにRDもしくはWRコマンド発行時はバンク番号、行アドレス及び列アドレスが指定された状態となっているため、上記情報はデータアクセス要求によって発生するRDもしくはWRコマンドを特定する処理と同義となる。但し、データアクセス要求のデータサイズはRDもしくはWRコマンド1回のアクセスサイズ(8バイト)より大きくなることがあるため、1回のデータアクセス要求は1つ以上のRDもしくはWRコマンドに特定される。図24のマスタイベント情報エントリ2410を例に説明する。マスタイベント情報エントリ2410はバスアドレスが0x00080010(araddr)、アクセス回数が2(arlen=1)でアクセスタイプはINCR(arburst)、単位アクセスサイズは8バイト(arsize=3)を示している。また、要求元はCPU201(マスタ情報=0)であることを示している。アクセスサイズは16バイトであり、具体的にはバスアドレス0x00080010から0x0008001Fまでの16バイト分の転送となる。RDアクセスは8ビート固定のため、1回のRDコマンドのアクセスサイズは、DRAM幅8ビット(1バイト)を8ビート(回)繰り返す8バイト(64ビット)となる。マスタイベント情報エントリ2410のデータアクセス要求のサイズが16バイトであるのに対し、1回のRDコマンドのアクセスサイズは8バイトのため、このマスタイベント情報エントリ2410を解析すると2回のRDコマンドに特定される。具体的な解析の手順は前述した通りとなり、バスアドレスの0x00080010を解析すると「バンク番号=0x0、行アドレス=0x0100、列アドレス=0x0010」となる。これが一つ目のRDコマンドで指定されるDRAM内のアドレスとなる。一つ目のRDコマンドで8バイト分の転送となるため、残りの8バイトを転送するRDコマンドも特定する。一つ目のRDコマンドではバスアドレス0x00080010から0x00080017までの8バイト分のデータアクセスであり、残りの8バイト分は0x00080018から0x0008001Fまでのデータアクセスとなる。バスアドレス0x00080018を解析すると、「バンク番号=0x0、行アドレス0x0100、列アドレス0x0018」となり、これが二つ目のRDコマンドで指定されるDRAM内のアドレスとなる。これらRDコマンドがCPU201からのデータアクセス要求で発生することを特定することができる。本実施形態では、全てのデータアクセス要求を解析して発生するRDもしくはWRコマンドを蓄積する。この処理がステップ2302からステップ2304で示される前段処理となる。RDもしくはWRコマンドの蓄積には、データを先入れ先出しのリスト構造で保持するキューを用いる。本実施形態では、このキューをコマンドキューと呼び、プッシュ操作はキューの最後段にコマンドを登録し、ポップ操作は最前段からコマンドを取り出すこととする。具体的なコマンドキューの一要素はコマンド(RDもしくはWR)、バンク番号、行アドレス、列アドレス及びマスタ情報となる。後段処理のステップ2305からステップ2318はイベントであるDRAM制御コマンドに対し、マスタ情報を関連付けるステップである。具体的には入力するイベント情報内のコマンドに応じて、RD及びWRコマンド、PRE及びACTコマンド、それ以外のコマンドで処理が分かれる。ステップ2308乃至ステップ2310はRD及びWRコマンドに対する処理である。ステップ2312、2313及び2316はPRE及びACTコマンドに対する処理である。ステップ2315及び2316はRD,WR,PRE,ACT以外のコマンドに対する処理である。それぞれのコマンドに対するマスタ情報の関連付け方針は前述した通りである。
ここから各ステップについて説明する。ステップ2301は処理開始を示している。ステップ2302はマスタイベント情報エントリを発生時刻順に読み込むステップである。図24のマスタイベント情報を例にすると、1行読み込むステップとなる。ステップ2303はマスタイベントであるデータアクセス要求を解析して、DRAMのバンク番号、列アドレス及び行アドレスを持つRDもしくはWRコマンドを特定し、そのコマンドをコマンドキューにプッシュする。特定されたRD及びWRコマンドは解析対象のデータアクセス要求から、マスタ情報を識別することが可能であるため、コマンドキューにコマンドをプッシュする際はマスタ情報も付加する。本実施形態ではデータアクセス要求を解析してRD及びWRコマンドを特定する手順は既に述べた。次のステップ2304ではマスタイベント情報エントリがこれ以上存在しないかを判定する。存在する場合はステップ2302に戻り次のマスタイベント情報エントリを読み込み、存在しない場合はステップ2305に進みイベントであるDRAM制御コマンドにマスタ情報を関連付ける手順を開始する。ステップ2304がYesと判定された時点で全てのデータアクセス要求の解析と、マスタ情報付きのRD及びWRコマンドが蓄積されたコマンドキューの作成が完了した状態となる。コマンドキューはステップ2307以降のマスタ情報を関連付ける手順の中で使用する。次のステップ2305はPRE_ID[BANK]を全てUNDEFへ設定する。PRE_IDはバンク数分の配列データであり、BANKはバンク番号を指す。本実施形態においては、DRAMは図20のバンク220からバンク227で構成されるため、BANKは0から7の数値となる。つまりPRE_ID[0]からPRE_ID[7]までをUNDEFに設定する。このPRE_ID[BANK]はそれぞれのバンクで発生した最後のRDもしくはWRコマンドに関連付けられたマスタ情報を保持し、PRE及びACTコマンドとマスタ情報を関連付けるために使用する。次にステップ2306に進む。ステップ2306ではイベント情報エントリを発生時刻順に読み込む。図6の1行を読み込むステップに相当する。次のステップ2307ではコマンドがRDもしくはWRコマンドかどうかを判定する。Yesと判定されるとステップ2308へ進む。ステップ2308ではコマンドキューの最前段をポップする。既に述べたように本実施形態ではバス208及びメモリコントローラ205でデータアクセス要求の並び替えは発生しない。そのため、ステップ2302からステップ2304でマスタイベントであるデータアクセス要求を発生した順に解析を行うと、コマンドキューのRD及びWRコマンドも先頭から発生する順番通りに並ぶ。つまり、ステップ2306で読み込んだイベント情報エントリがRDもしくはWRコマンドならば、必ずコマンドキューの先頭のコマンドと一致する。ステップ2309ではステップ2308でポップしたコマンドのマスタ情報をイベント情報エントリに関連付けて出力する。図26にマスタ情報付イベント情報の例を示す。ステップ2309ではRD及びWRコマンドのイベント情報に対しマスタ情報を付加しており、例えば図26の2612ではマスタ情報=0のCPU201が関連付いていることを意味する。次のステップ2310では、ポップしたコマンドの対象バンクのPRE_ID[BANK]を、ポップしたコマンドのマスタ情報に更新しステップ2317へ進む。先ほどの図26の2612を出力した後を例にすると、ポップしたRDコマンドはバンク番号=0、マスタ情報=0であるため、PRE_ID[0(バンク番号)]=0(マスタ情報)となる。ステップ2307でRDもしくはWRコマンドと判定されなかった場合はステップ2311へ進む。
ステップ2311ではコマンドがPREもしくはACTコマンドかどうかを判定し、PREもしくはACTコマンドだった場合はステップ2312へ進む。ステップ2312ではPRE_ID[BANK]がUNDEFでないかを判定し、UNDEFでない場合はステップ2313へ進む。PRE_ID[BANK]がUNDEFになるのはステップ2305の初期化時及び後述するステップ2315のRD,WR,PRE,ACT以外のコマンド検出時である。ステップ2313ではそれぞれのバンクで発生した最後のRDもしくはWRコマンドに関連付けられたマスタ情報を解析対象のPREやACTコマンドと関連付けることを意図している。ステップ2313の後はステップ2317へ進む。ステップ2312でPRE_ID[BANK]がUNDEFでNoと判定されると、ステップ2316に進む。ステップ2316では、PRE及びACTには関連付けられるマスタ情報が存在しないため、マスタ情報を関連付けずに出力する。本実施形態においては関連付けられないことを意味するNOをマスタ情報として出力する。図26を例にすると2610はACTコマンドに関連付くマスタ情報がないことを意味するマスタ情報=NOが設定されている。ステップ2311でACTもしくはPREコマンドと判定されなかった場合、ステップ2315へ進む。ステップ2315では前述したようにPRE_ID[BANK]をUNDEFに設定し、ステップ2316へ進む。例えば、REFコマンドはDRAMの記憶保持動作であるリフレッシュを実施するためのコマンドで、DDR3-SDRAMの規格上、DRAM209の全てのバンクがクローズされていなければ実行できない。つまり、リフレッシュ実行が原因で発生するページクローズはデータアクセス要求とは無関係となる。また、REFコマンド自体もデータアクセス要求とは無関係となる。リフレッシュ以外にもパワーダウンやセルフリフレッシュなど、全てのバンクがクローズされていなければ実行できないコマンドは、REFコマンドと同様に扱う。ステップ2315はRD,WR,ACT,PRE以外のコマンドが発生した場合はバンクの状態がリセットされ以前のコマンド履歴が初期状態に戻ることを意味する。ステップ2315でPRE_ID[BANK]をUNDEFに設定した後は2316へ進む。ステップ2316では読み込んだコマンドにマスタ情報を関連付けずに出力する。前述したが、本実施形態においては関連付けられないことを意味するNOをマスタ情報として出力する。ステップ2317ではイベント情報102を最後まで読み込んだかを判定する。ステップ2317でデータが存在する場合はステップ2306へ戻り次のデータを読み込む。ステップ2317でデータが存在しない場合はステップ2318へ進み終了する。以上が関連付け手段2103の詳細である。
以下、図6のイベント情報と図24のマスタイベント情報を実際に入力したときを例として関連付け手段2103の処理を図23、図25、図26を用いて具体的に説明する。図26の2610乃至2638、2651、2652は図6のイベント情報と図24のマスタイベント情報を図23のフローチャートで処理した結果であり、マスタ情報を関連付けた後のマスタ情報付きイベント情報2104を示している。
まずステップ2302からステップ2304を図24の2410から2452まで繰り返して、RD及びWRコマンドをコマンドキューに蓄積するフローを説明する。初めにステップ2302でマスタイベント情報エントリ2410を読み込み、ステップ2303へ進む。ステップ2303でマスタイベント情報エントリ2410を解析しRDコマンドを特定する。マスタイベント情報エントリ2410からRDコマンドを特定する説明は前述したため省略する。図25は図24のマスタコマンド情報エントリ2414乃至2420、2451及び2452を解析した後のコマンドキューの状態を示している。2501はキュー番号を示しており、キュー番号が小さいほどキューの先頭に近いことを意味する。また、2502はマスタ情報で、RD及びWRコマンドが、いずれのマスタのデータアクセス要求によって発生したのかを示している。マスタイベント情報エントリ2410の処理が完了した際のコマンドキューは、図25の2510及び2511が存在する状態となる。ステップ2303でコマンドキューにコマンドをプッシュしたら、ステップ2304に進む。ステップ2304ではまだ読み込むマスタイベント情報エントリが存在するためNoと判定されステップ2302に戻る。
次のステップ2302でマスタイベント情報エントリ2411を読み込み、ステップ2303へ進む。ステップ2303ではでマスタイベント情報エントリ2411を解析しRDコマンドを特定する。上記で説明したマスタイベント情報エントリ2410を解析してRDコマンドに特定した方法と同様の考えで解析し、「バンク番号=0x0、行アドレス=0x0100、列アドレス=0x0080」の1つのRDコマンドに特定される。このコマンドに解析対象のマスタイベント情報エントリ2411のマスタ情報=0を付加する。結果としてマスタイベント情報エントリ2411の処理が完了した際のコマンドキューは、図25の2510乃至2512が存在する状態となる。ステップ2303でコマンドキューにコマンドをプッシュしたら、ステップ2304に進み、読み込むマスタイベント情報エントリが存在するため2302へ戻る。
次のステップ2302でマスタイベント情報エントリ2412を読み込み、ステップ2303へ進む。ステップ2303はでマスタイベント情報エントリ2412を解析しWRコマンドを特定する。上記で説明したマスタイベント情報エントリ2410を解析してRDコマンドに特定した方法と同様の考えで解析する。解析の結果「バンク番号=0x1、行アドレス=0x0010、列アドレス=0x0020」と「バンク番号=0x1、行アドレス=0x0010、列アドレス=0x0028」の二つのWRコマンドに特定される。これらのコマンドに解析対象のマスタイベント情報エントリ2412のマスタ情報=3を付加する。結果としてマスタイベント情報エントリ2412の処理が完了した際のコマンドキューは、図25の2510乃至2514が存在する状態となる。ステップ2303でコマンドキューにコマンドをプッシュしたら、ステップ2304に進み、読み込むマスタイベント情報エントリが存在するため2302へ戻る。
次のステップ2302でマスタイベント情報エントリ2413を読み込み、ステップ2303へ進む。ステップ2303でマスタイベント情報エントリ2313を解析しWRコマンドを特定する。上記で説明したマスタイベント情報エントリ2410を解析してRDコマンドに特定した方法と同様の考えで解析し、「バンク番号=0x1、行アドレス=0x0010、列アドレス=0x0030」の1つのWRコマンドに特定される。このコマンドに解析対象のマスタイベント情報エントリ2413のマスタ情報=3を付加する。結果としてマスタイベント情報エントリ2413の処理が完了した際のコマンドキューは、図25の2510乃至2515が存在する状態となる。
上記の説明と同様に図24のマスタコマンド情報エントリ2414乃至2420、2451及び2452に対し、ステップ2302及びステップ2303を繰り返すとコマンドキューは図25に示す通りとなる。
最後のマスタイベント情報エントリ2452を解析しRDコマンドを特定してコマンドキューにプッシュした後、ステップ2304でYesと判定されステップ2305へ進む。
次にステップ2305からステップ2317を図6の610から652まで繰り返して、イベントであるDRAM制御コマンドにマスタ情報を関連付けるフローを説明する。まず、ステップ2305でPRE_ID[0]からPRE_ID[7]までをUNDEFに設定する。PRE_ID[BANK]は前述したように該当するバンクで直前に発生したRDもしくはWRコマンドのマスタ情報を保持するために使用する。
次にステップ2306でイベント情報エントリ610を読み込みステップ2307へ進む。イベント情報エントリ610はACTコマンドであるため、ステップ2307からステップ2311と進む。ステップ2311ではYesと判定され、ステップ2312へ進む。イベント情報エントリ610のACTコマンドの対象バンクは0であるため、ステップ2312ではPRE_ID[0]がUNDEFでないかを判定する。判定の結果、UNDEFであるため、ステップ2312でNoと判定され、ステップ2316へ進む。ステップ2316では前述のように関連付けるマスタ情報が無いことを意味するNOをマスタ情報として付加し、図26の2610を出力する。図26は図6のイベント情報に対しマスタ情報を付加したフォーマットになっている。マスタ情報付きイベントを出力後はステップ2317に進み、まだ読み込むデータが存在するためステップ2306へ戻る。
次のステップ2306でイベント情報エントリ611を読み込みステップ2307へ進む。イベント情報エントリ611はACTコマンドであるため、ステップ2307からステップ2311と進む。ステップ2311ではYesと判定され、ステップ2312へ進む。イベント情報エントリ611のACTコマンドの対象バンクは1であるため、ステップ2312ではPRE_ID[1]がUNDEFでないかを判定する。判定の結果、UNDEFであるため、ステップ2312でNoと判定され、ステップ2316へ進む。ステップ2316では関連付けるマスタ情報が無いことを意味するNOをマスタ情報として付加し、図26の2611を出力する。マスタ情報付イベントを出力後はステップ2317に進み、まだ読み込むデータが存在するためステップ2306へ戻る。
次のステップ2306でイベント情報エントリ612を読み込み、ステップ2307へ進む。イベント情報エントリ612はRDコマンドであるため、ステップ2307でYesと判定され、ステップ2308へ進む。ステップ2308では、コマンドキューの先頭である2510のマスタ情報付きコマンドをポップし、ステップ2309へ進む。ステップ2309ではポップしたコマンドのマスタ情報=0をイベント情報エントリ612に関連付けて図26の2612を出力する。その後、ステップ2310ではポップしたコマンドのバンク番号=0とマスタ情報=0を参照し、PRE_ID[0]を0(マスタ情報)に更新し、ステップ2317へ進む。ステップ2317ではまだ読み込むデータが存在するためステップ2306へ戻る。
上記で説明したイベント情報エントリ612に対する手順をRD及びWRコマンドのイベント情報エントリ613乃至620まで繰り返し、図26の2613乃至2620のマスタ情報付きイベント情報として出力する。
次のステップ2306でイベント情報エントリ621を読み込み、ステップ2307へ進む。イベント情報エントリ621はPREコマンドであるため、ステップ2307からステップ2311と進む。ステップ2311ではYesと判定され、ステップ2312へ進む。イベント情報エントリ621のPREコマンドの対象バンクは0であるため、ステップ2312ではPRE_ID[0]がUNDEFでないかを判定する。PRE_ID[0]はイベント情報エントリ614に対する処理のステップ2310でマスタ情報=0として更新される。イベント情報エントリ615乃至620はバンク番号=1を対象としているためPRE_ID[0]は更新されない。そのため、ステップ2312では判定の結果、Yesと判定されステップ2313へ進む。ステップ2313ではPRE_ID[0]=0をマスタ情報として付加し、図26の2621を出力する。マスタ情報付きイベントを出力後はステップ2317に進み、まだ読み込むデータが存在するためステップ2306へ戻る。
イベント情報エントリ622乃至631のRDコマンドに対しても、上記で説明したイベント情報エントリ612に対する手順を繰り返し、図26の2622乃至2631のマスタ情報付きイベント情報として出力する。
次のステップ2306でイベント情報エントリ632を読み込み、ステップ2307へ進む。イベント情報エントリ621はACTコマンドであるため、ステップ2307からステップ2311と進む。ステップ2311ではYesと判定され、ステップ2312へ進む。イベント情報エントリ632のACTコマンドの対象バンクは0であるため、ステップ2312ではPRE_ID[0]がUNDEFでないかを判定する。前述のようにイベント情報エントリ621に対する処理完了時点でPRE_ID[0]=0である。イベント情報エントリ622乃至631はバンク番号=1を対象としているためPRE_ID[0]は更新されない。そのため、ステップ2312では判定の結果、Yesと判定されステップ2313へ進む。ステップ2313ではPRE_ID[0]=0をマスタ情報として付加し、図26の2632を出力する。マスタ情報付きイベントを出力後はステップ2317に進み、まだ読み込むデータが存在するためステップ2306へ戻る。
上記で説明した手順をイベント情報エントリ633乃至638、651及び652まで繰り返し、図26の2633乃至2638、2651及び2652のマスタ情報付きイベント情報として出力する。本実施形態での最終的なマスタ情報付きイベント情報2104は図26となる。
本実施形態では、ACT及びPREコマンドへのマスタ情報の関連付けは、該当するバンクの直前のRDもしくはWRコマンドのマスタ情報とした。ACT及びPREコマンドはDRAMのページミスに伴うページオープン及びクローズをするためのコマンドである。ページオープン及びクローズは直前のRDもしくはWRコマンドだけが関係しているのではなく、直後のRDもしくはWRコマンドも関係して発生する。そのため、ACT及びPREコマンドに対しては、直前のRDもしくはWRコマンドのマスタ情報ではなく、直後のRDもしくはWRコマンドのマスタ情報と関連付けてもよい。その場合はACT、PREコマンドを読み込んだ際に一旦バッファに格納して、同バンクのRDもしくはWRコマンドが検出されたタイミングでマスタ情報を関連付けて出力する。また、直前のRDもしくはWRコマンドのマスタ情報と直後のRDもしくはWRコマンドのマスタ情報の両方を関連付けてもよい。この方法だと、イベント情報エントリの読み込みでRDもしくはWRコマンドを読み込んだ際に、バンク毎にまとめて(PREコマンドやACTコマンドと一緒に)マスタ情報付きイベントを出力する。そのため、出力されるイベントが時系列に並ばなくなるが、全てのイベント情報に対する処理が終わった後に、発生時間順にイベントを並び替えれば図26と同等の時系列のマスタ情報付きイベント情報が生成される。
また、本実施形態では関連付け手段2103のフローでは事前に全てのマスタイベント情報を解析してRD及びWRコマンドを特定してからイベント情報にマスタ情報を関連付けている。しかし、マスタイベント情報とイベント情報を発生時刻順に読み込んで、順次処理をしてもマスタ情報付きイベント情報を作成できる。このフローだと、コマンドキューに蓄積されたコマンドがイベント情報を読み込んだタイミングで一つポップされるため、コマンドキューで使用する資源(ハードディスクやメモリ)を最小限に抑えることができる。
また、本実施形態では、バス208及びメモリコントローラ205はデータアクセス要求を内部で並び替えない前提を設けた。しかし、並び替えが起こってもマスタ情報付イベント情報を作成することは可能である。例えば、同一アドレスに対しての並び替えが無いならば、ステップ2309で、読み込んだイベント情報エントリのマスタ情報以外の各項目と一致するコマンドを、コマンドキューの先頭から順に探し、ポップすればよい。上記では同一アドレスに対しての並び替えが無い前提を設けた。しかし、同一アドレスに対しての並べ替えがあっても、並び替えのルールが決まっている限り、そのルールに基づいてデータアクセス要求からコマンドの特定をすることができるため、マスタ情報付きイベント情報を作成することは可能である。
また、本実施形態においては関連付け手段2103を、シミュレーション後別の処理として前記コンピュータ装置上で実行するとしたが、シミュレーション処理内でマスタ情報をイベントと関連付けることも可能である。例えばマスタモニタ2001とモニタ211で検出される情報を受けて、マスタ情報付きイベント情報を作成する機能を持つ関連付けモジュールをテストベンチ内で実装する。モジュールとは機能的にまとまった部分を意味する。関連付け手段2103をテストベンチ内でモジュールとして実装することでシミュレーション内にてマスタ情報付きイベント情報を作成することができる。
マスタ情報付きイベント情報2104はバンク状態分類手段2105に入力され、バンク毎に状態を分類する。本実施形態ではバンク状態分類手段2105は第一の実施形態と同様の状態に分類するが、動作状態と一部の動作不可状態はマスタ情報を関連付ける。そのため、第一の実施形態で使用した図7のフローに対しマスタ情報を関連付けるためのステップを追加した図27のフローを用いる。本実施形態では図7のフローと重複する箇所の説明は割愛し、追加されたステップのみを説明する。第一の実施形態で説明したように、動作状態はRDもしくはWRコマンドによって分類されるため、RDもしくはWRコマンドのマスタ情報と関連付ける。一方、動作不可状態は同一バンクで直前に発生したRDもしくはWRコマンドのマスタ情報と関連付ける。動作不可状態は二つのコマンド間の時間制約に基づいて分類されるため、第一のコマンドと第二のコマンドのどちらも動作不可状態を引き起こす原因となるが、本実施形態では第一のコマンドのマスタ情報を動作不可状態と関連付けるものとする。ただし、前記関連付け手段2103の説明で述べたようにREFコマンドはマスタ情報とは無関係でマスタ情報が関連付けられていない。そのため、REFコマンドにより分類される動作不可状態にはマスタ情報は関連付けない。
ここから図27のフローのうち、図7のとの差分を説明する。まず、ステップ2701はSAME_PRE_IDとDIFF_PRE_IDをUNDEFに設定し初期化する。SAME_PRE_IDはステップ701で指定されたバンク番号の直前のコマンドのマスタ情報を意味する。DIFF_PRE_IDはステップ701で指定されたバンク以外の直前のコマンドに関連づいたマスタ情報を意味する。ステップ2701はステップ703の直後に挿入される。SAME_PRE_IDはステップ2706で更新される。ステップ2706はステップ725の直後に挿入され、SAME_PRE_CMDとSAME_PRE_TIMEの更新と共に、SAME_PRE_CMDと関連付いたマスタ情報をSAME_PRE_IDに設定する。DIFF_PRE_IDはステップ2707で更新される。ステップ2707はステップ727の直後に挿入され、DIFF_PRE_CMDとDIFF_PRE_TIMEの更新と共に、DIFF_PRE_CMDと関連付いたマスタ情報をDIFF_PRE_IDに設定する。
動作状態に対するマスタ情報の関連付けはステップ2702で行われる。ステップ2702はステップ709の直後に挿入され、ステップ709で設定した4cycle分の動作状態に対してSAME_PRE_IDをマスタ情報として関連付ける。また動作不可状態に対するマスタ情報の関連付けはステップ2704及びステップ2705で行われる。ステップ2704はステップ715の直後に挿入される。ステップ2704では、同バンクのコマンド間のサイクル数と一致する制約が存在し、該当するサイクル数分を動作不可状態に設定(ステップ715)した後、該当するサイクル数分の動作不可状態とSAME_PRE_IDをマスタ情報として関連付ける。ステップ2705はステップ721の直後に挿入される。ステップ2705では、異なるバンクのコマンド間のサイクル数と一致する制約が存在し、該当するサイクル数分を動作不可状態に設定(ステップ721)した後、該当するサイクル数分の動作不可状態とDIFF_PRE_IDをマスタ情報として関連付ける。前述したようにREFコマンドによって分類される動作不可状態に対してはマスタ情報を関連付けないが、関連付けをしないことを明確にするため、ステップ2703をステップ712の直後に挿入している。ただし、本実施形態では関連付けできるマスタが存在しないことを意味するNOをマスタ情報とするものとする。
以下、図26のマスタ情報付きイベント情報エントリ2610乃至2638、2651及び2652を実際の入力としたときを例としてバンク状態分類手段2105の処理を具体的に説明する。図28はマスタ情報付きイベント情報エントリ2610乃至2538を入力とし、各バンクの状態とマスタ情報と関連付けた分類結果を示している。以下、分類結果を参照しながらマスタ情報付きイベント情報エントリ2610乃至2638の処理を説明する。尚、本実施形態で使用している図26のマスタ情報付きイベント情報は、第一の実施形態で使用した図6のイベント情報を入力として関連付け手段2103によって作成されているため、第一の実施形態とバンク状態の分類は同じである。本実施形態では、バンク状態の分類に関する説明は割愛し、それぞれのバンク状態に対しマスタ情報を関連付ける手順を具体的に説明する。
まずはバンク番号0を対象に説明する。ステップ704で2610のマスタ情報付きイベント情報エントリを読み込む。2610のマスタ情報付きイベント情報エントリは最終的にステップ723で1サイクル分休止状態に分類される。ステップ2706では2610のマスタ情報がNOであるため、SAME_PRE_ID=NOに設定する。
次のステップ704では2611のマスタ情報付きイベント情報エントリを読み込む。2611はバンク番号1を対象にしたコマンドでマスタ情報=NOあるため、ステップ2707でDIFF_PRE_ID=NOに設定する。
次のステップ704では2612のマスタ情報付きイベント情報エントリを読み込む。2612のイベントはバンク番号0へのRDコマンドであり、ステップ714でテーブルに該当ありと判定されステップ715で30サイクル分動作不可状態1002に分類される。ステップ2704では動作不可状態1002と関連付けるマスタ情報を決定する。SAME_PRE_ID=NOであるため、動作不可状態1002と関連付けるマスタ情報はNO(2801)となる。その後、ステップ2706では2612のマスタ情報=0であるため、SAME_PRE_ID=0を設定する。
次のステップ704では2613のマスタ情報付きイベント情報エントリを読み込む。2613はバンク番号0へのRDコマンドであり、SAME_PRE_CMDがRDコマンドであることからステップ709で4サイクル分動作状態1003に分類しステップ2702へ進む。ステップ2702では動作状態1003に関連づけるマスタ情報をSAME_PRE_IDの0(2802)に設定する。その後、ステップ2706では2613のマスタ情報=0であるため、SAME_PRE_ID=0に設定する。
次のステップ704では2614のマスタ情報付きイベント情報エントリを読み込む。2614はバンク番号0へのRDコマンドであり、SAME_PRE_CMDがRDコマンドであることからステップ709で4サイクル分動作状態1004に分類しステップ2702へ進む。ステップ2702では動作状態1004に関連づけるマスタ情報をSAME_PRE_IDの0(2803)に設定する。2614のマスタ情報付きイベント情報エントリ読み込みではさらにステップ724で1サイクル分休止状態1005を分類する。その後、ステップ2706では2614のマスタ情報=0であるためSAME_PRE_ID=0に設定する。
その後のマスタ情報付きイベント情報エントリ2615乃至2620まではバンク番号1を対象としたコマンドであるため、ステップ707はNoと判定される。2620のマスタ情報付きイベント情報エントリの処理終了時点では2620のマスタ情報=4であるため、DIFF_PRE_ID=4に設定する。
次のステップ704では2621のマスタ情報付きイベント情報エントリを読み込む。この時点でSAME_PRE_CMDはRDであるため、ステップ709で4サイクル分動作状態1006に分類し、ステップ2702へ進む。ステップ2702では動作状態1006に関連付けるマスタ情報をSAME_PRE_IDの0(2804)に設定する。さらにステップ714でテーブルに該当ありと判定され、ステップ715で46サイクル分動作不可状態1007に分類し、ステップ2704へ進む。ステップ2704では動作不可状態1007と関連付けるマスタ情報はSAME_PRE_IDの0(2805)に設定する。その後、ステップ2706では2621のマスタ情報=0であるため、SAME_PRE_ID=0に設定する。
その後のマスタ情報付きイベント情報エントリ2622乃至2631まではバンク番号1を対象としたコマンドであるため、ステップ707はNoと判定される。2631のマスタ情報付きイベント情報エントリの処理終了時点では、2631のマスタ情報=4であるため、DIFF_PRE_ID=4と設定する。
次のステップ704では2632のマスタ情報付きイベント情報エントリを読み込む。2632のマスタ情報付きイベント情報エントリはバンク番号0へのACTコマンドであり、ステップ714でテーブルに該当ありと判定されステップ715で40サイクル分動作不可状態1008に分類し、ステップ2704へ進む。ステップ2704では動作不可状態1008と関連付けるマスタ情報はSAME_PRE_IDの0(2806)に設定する。その後、ステップ2706では2632のマスタ情報=0であるため、SAME_PRE_ID=0に設定する。
その後のマスタ情報付きイベント情報エントリ2633乃至2738までを読み込み、上記で説明した手順で動作状態及び動作不可状態に対してマスタ情報を関連付けた結果が2807乃至2813となる。
バンク番号1についても、バンク番号0と同様の手順で動作状態及び動作不可状態に対してマスタ情報を関連付けることができる。但しバンク番号1では異なるバンク間の制約により動作不可状態となる1018と1020が存在するため、これらの動作不可状態に対してのマスタ情報の関連付けについてのみ具体的に説明する。
まずステップ704で2610のマスタ情報付きイベント情報エントリを読み込む。2610はバンク番号0を対象にしたコマンドでマスタ情報=NOであるため、ステップ2707でDIFF_PRE_ID=NOに設定する。
次のステップ704では2611のマスタ情報付きイベント情報エントリを読み込む。2611のイベントはバンク番号1のACTコマンドであり、ステップ718で1サイクル分休止状態1017に分類した後、ステップ720でテーブルに該当ありと判定され、ステップ721に進む。ステップ721では4サイクル分を動作不可状態1018に分類し、ステップ2705へ進む。ステップ2705では、動作不可状態1018と関連付けるマスタ情報をDIFF_PRE_IDのNO(2814)に設定する。その後、ステップ2706では、2611のマスタ情報=NOであるため、SAME_PRE_ID=NOに設定する。
その後のマスタ情報付きイベント情報エントリ2612乃至2614まではバンク番号0を対象としたコマンドであるため、ステップ707はNoと判定される。2614のマスタ情報付イベント情報エントリの処理終了時点では2614のマスタ情報=0であるため、DIFF_PRE_ID=0に設定する。
次のステップ704では2615のマスタ情報付きイベント情報エントリを読み込む。2615のイベントはバンク番号1のWRコマンドであり、ステップ718で35サイクル分休止状態1019に分類した後、ステップ720でテーブルに該当ありと判定され、ステップ721に進む。ステップ721では15サイクル分を動作不可状態1020に分類し、ステップ2705へ進む。ステップ2705では、動作不可状態1020と関連付けるマスタ情報をDIFF_PRE_IDの0(2815)に設定する。
その後のマスタ情報付きイベント情報エントリ2616乃至2738までを読み込み、上記で説明した手順で動作状態及び動作不可状態に対してマスタ情報を関連付けた結果が2816乃至2832となる。
本実施形態の動作不可状態は第一の実施形態で説明したように、REFコマンドにより分類される動作不可状態以外は第一のコマンドと第二のコマンドの時間がコマンド間の時間制約と一致する場合に分類される。既に説明した通り、本実施形態では動作不可状態へのマスタ情報の関連付けは、第一のコマンド側に動作不可状態となった原因があるという考えに基づき、第一のコマンドのマスタ情報とした。しかし、ページミスによる動作不可状態やRead-to-Write及びWrite-to-Readによる動作不可状態は第二のコマンドが原因で分類されたと考えることもできる。そのため、第二のコマンドのマスタ情報を動作不可状態に関連付けることも可能である。また、第二の実施形態で説明した詳細分類された動作不可状態に対して、それぞれどのコマンドのマスタ情報を関連付けるかを決めてもよい。例えば、ページミスによる動作不可状態は以下の3つのカテゴリに分けることができる。一つ目はWrite-to-Precharge動作不可状態とRead-to-Precharge動作不可状態。二つ目はプリチャージ動作不可状態。三つ目はアクティベート動作不可状態である。ページミスは同一バンクかつ別の行アドレスへのRDもしくはWRコマンドが連続して発生したときに発生する。つまり第一及び第二のどちらのRDもしくはWRコマンドもページミスを引き起こす原因となっている。ここでは動作不可状態に対しては、第一のコマンドのマスタ情報と第二のコマンドのマスタ情報のどちらにも関連付けるものとする。その場合、一つ目のカテゴリのWrite-to-Precharge動作不可状態とRead-to-Precharge動作不可状態に対しては第一のRDもしくはWRコマンドのマスタ情報を関連付けることとする。また、二つ目と三つ目のカテゴリのプリチャージ動作不可状態とアクティベート動作不可状態に対しては第二のRDもしくはWRコマンドのマスタ情報を関連付けることとする。またRead-to-Writeスイッチング動作不可状態とWrite-to-Readスイッチング動作不可状態も第一のRDもしくはWRコマンドと第二のRDもしくはWRコマンドが原因となって引き起こされている。動作不可状態に対し一つのマスタ情報しか関連付けられないとするならば、スイッチング動作不可状態は第一もしくは第二のコマンドのどちらか一方のマスタ情報を関連付ける。ここでは、第二のコマンドのマスタ情報を関連付けるものとする。例えばRead-to-Writeスイッチング動作不可状態には第二のWRコマンドのマスタ情報を関連付け、Write-to-Readスイッチング動作不可状態には第二のRDコマンドのマスタ情報を関連付けることとする。上記では動作不可状態を引き起こす原因となる第一と第二のコマンドのマスタ情報と動作不可状態の関連付けの方法の一例を説明した。しかし、コマンドのマスタ情報と動作不可状態の関連付けが論理的に説明できれば、どんな条件でも動作不可状態とマスタ情報を関連付けることが可能である。
ここまでの説明では第一の実施形態を基に、バンク状態分類手段2105でマスタ情報を関連付けたバンク状態情報2106を出力する例を示した。バンク状態情報2106にはバンク220乃至227の8つ分の情報を分けて格納されている。ここからはバンク220乃至227のマスタ情報を関連付けた状態に基づいて、DRAM209の状態をマスタ情報と関連付けて分類するDRAM状態分類手段2107について説明する。DRAM状態分類手段2107は第一の実施形態の説明で用いた図9と同様のフローとなる。ただし、バンクの動作不可状態にマスタ情報が関連付けられているため、二つ以上のバンクで動作不可状態となっている場合は、どれか一つのマスタ情報を選択する。本実施形態ではより大きいバンク番号の動作不可状態が優先されるものとする。一方でDRAMの動作状態と関連付くマスタ情報は同時刻で唯一存在するバンクの動作状態に関連付いたマスタ情報とする。
以下、図9及び図28を用いて、具体的にDRAM状態に関連づくマスタ情報を決定する手順を説明する。DRAMの動作状態に対しては、前述のようにバンクの動作状態に関連付いたマスタ情報を関連付けるため説明は割愛する。また、図28の1043、1055、1072、1074、1076のDRAMの動作不可状態は、一つのバンクが動作不可状態でそれ以外のバンクが休止状態の場合を示している。これらのDRAMの動作不可状態に対しては、バンクの動作不可状態に関連付いたマスタ情報を関連付ける。例えば1076のDRAMの動作不可状態はバンク番号0の1016の動作不可状態に起因しており、バンク番号0の動作不可状態に関連付くマスタ情報=1を1076の動作不可状態に関連付ける。本実施形態では図28に示すように、二つ以上のバンクで動作不可状態になる箇所は3つ存在する。1042、1048及び1052のDRAM状態である。本実施形態では前述したように、二つ以上のバンクで動作不可状態が存在する場合のDRAMに関連付くマスタ情報は、バンク番号が大きい方が優先される。DRAM状態1042ではバンク番号1の動作不可状態に関連付いたマスタ情報=NOが、1048ではバンク番号1の動作不可状態に関連付いたマスタ情報=0がそれぞれ関連付けられる。DRAM状態1052ではバンク番号1の動作不可状態に関連付いたマスタ情報=3が関連付けられる。図9のステップで説明すると、DRAMの動作状態に対するマスタ情報の関連付けはステップ904と同時に実施され、DRAMの動作不可状態に対するマスタ情報の関連付けはステップ906と同時に実施される。本実施形態で、上記条件でDRAM状態に対しマスタ情報を付加した結果が図28の2833乃至2865となる。
本実施形態では2つ以上のバンクで動作不可状態が存在する場合の、DRAM状態に関連付くマスタ情報はより大きいバンク番号に関連付いたマスタ情報とした。しかし、第二の実施形態のようにバンクの詳細な動作不可状態の優先順位に基づいてDRAMの動作不可状態を分類する手順と同様に、優先順位の高い動作不可状態に関連付くマスタ情報をDRAMの動作不可状態に関連付けることもできる。また、予め決められたルールに基づいてDRAMの動作不可状態にマスタ情報を関連付けることは容易に実施できるため、DRAMの動作不可状態にマスタ情報を関連付けるルールは前述したルールのみに限定されない。
続いて、本実施形態における統計処理2109について説明する。第一の実施形態との差分は本実施形態ではマスタ毎の統計処理が追加されることである。第一の実施形態の統計処理107では図17のフローを使用しているが、本実施形態のマスタ毎の統計処理も同様に図17を用いることができる。以下、図17を使用したマスタ毎の統計処理2109を2パタン説明する。
一つ目は図17のフロー処理をマスタ数と同じ回数分実行する方法である。この場合はステップ1701での入力で単位時間だけでなくマスタ情報も指定する。次のステップ1702での状態情報読み込みで指定されたマスタ情報に関連付いた状態のみを読み込む。この処理を全てのマスタに対して実施することでマスタ毎の統計処理を実施することができる。
二つ目は、図17のフロー処理を1回のみ実行する方法である。ステップ1705では該当する状態の発生回数及びクロックサイクル数をカウントアップしているが、この方法では、ステップ1705でマスタ別に発生回数とクロックサイクル数をカウントアップする。マスタ数分の発生回数及びクロックサイクル数を保持する必要があるため、一つ目の方法よりもデータを保持する領域が増えるが1回のフロー処理でマスタ毎の統計処理を実施することができる。
続いて、本実施形態における表示手段2110の表示例を図30乃至図32を使って説明する。図30乃至図32は、図28のマスタ情報と関連付けたDRAM状態の具体的な表示例である。
図30のテーブルは表示手段2110の表示例の一つを示している。図30のテーブルでは、各マスタが関連付けられたDRAMの動作状態及び動作不可状態の発生回数と発生サイクル数を示している。
図31のパイチャートは表示手段2110の表示例の一つを示している。図31のパイチャートはDRAMの動作状態と動作不可状態がどのマスタと関連付けられているかの割合を示している。
図32の棒グラフは表示手段2110の表示例の一つを示している。図32の棒グラフはマスタ毎に関連付けられたDRAMの動作状態及び動作不可状態のサイクル数を並べて表示している。マスタ毎に並べることでマスタ毎の転送効率を視覚的に確認することができ、効率的に性能のボトルネックとなるマスタを判別することができる。
以上、説明した方法で、第一の実施形態に対してバンク状態及びDRAM状態とマスタ情報を関連付け、表示手段2110により表示することができる。
(第四の実施形態)
第四の実施形態を図2、図4、図21、図33を使って説明する。本実施形態は第三の実施形態に対し、マスタ情報との関連付け手段2103を検出手段101に含める点が異なる。より具体的にはモニタ211が監視する信号でイベントに関連づくマスタ情報が識別できるように、システムLSI200を構成する。
ここから、本実施形態の性能解析及び解析結果表示処理について説明する。図33は性能解析及び解析結果表示処理の全体を示す処理概念図である。ここでは第三の実施形態との差分のみを説明する。第三の実施形態と異なるのはマスタイベント検出手段2101及び関連付け手段2103を使わずに、検出手段101のみでマスタ情報付きイベント情報2104を出力することである。本実施形態におけるテストベンチ構成図は第一の実施形態で用いた図2と同じとなる。ただし、モニタ211ではマスタ情報と関連付いたイベントを検出する。マスタ情報とイベントを関連付けるために、モニタ211はイベントを検出に必要なハードウェア信号を監視するだけでなく、そのイベントに関連付けられたマスタ情報を示す信号も監視する。
具体的に監視する信号を説明する前に、図2のバス208がマスタに応答を返す仕組みについて説明する。第三の実施形態の説明では、マスタからスレーブへのデータアクセス要求する際に、どのスレーブへアクセスするかは、バス208でバスアドレスを解析してアクセス先のスレーブを決定することを述べた。また、AMBA4を例にするとマスタとバス208の間の制御信号は、アドレスチャネル、ライトデータチャネル、ライトレスポンスチャネル、リードデータチャネルの4つのチャネルで構成されることを述べた。前記チャネルのライトレスポンスチャネル及びリードデータチャネルはデータアクセス要求元へアクセスが完了したことを通知するために使用される。バス208はスレーブからのアクセス完了通知を、データアクセス要求元のマスタへ通知する役割を持つ。例えば、CPU201からバス208へのデータアクセス要求をAとし、バス208がデータアクセス要求Aを解析してアクセス先がメモリコントローラ205だったとする。この場合、バス208はメモリコントローラ205へデータアクセス要求を発行するが、そのデータアクセス要求をA‘とする。メモリコントローラ205はDRAM209へのデータアクセスが完了するとデータアクセス完了通知をバス208へ返す。このデータアクセス完了通知をB’とする。バス208はB’のデータアクセス完了通知を受けるとB’を解析してCPU201へデータアクセス完了を通知する。このデータアクセス完了通知をBとする。つまりバス208はCPU201からAを受けて解析しメモリコントローラ205へA’を発行し、次にメモリコントローラ205からB‘を受けて解析しCPU201へBを通知する。これがバス208を介してマスタからのデータアクセス要求が完了するまでのフローである。バス208はAのデータアクセス要求を解析してA’を発行するが、どのマスタのアドレスチャネルからのデータアクセス要求であるかを判別することができるため、A’にマスタ情報を付加することが可能である。AMBA4を例にすると、アドレスチャネルの属性情報となるaridやawidもしくはaruserやawuserの一部のビットにマスタ情報を割り当てることで、バス208からスレーブへのデータアクセス要求にマスタ情報を付加することができる。つまり、スレーブは受けたデータアクセス要求がどのマスタからの要求なのかを判別することができる。
スレーブはデータアクセス要求を受けると、付加された属性情報を解析してスレーブ内でのアクセス領域の特定が可能となることは第三の実施形態で既に述べた。メモリコントローラ205ではDRAM209のバンク番号、行アドレス及び列アドレスがDRAM209内のアクセス領域となる。メモリコントローラ205はアクセス領域を特定すると、アクセスするためのDRAM制御コマンドを発行する。例えば、バンク番号0はクローズ状態であるときに、メモリコントローラ205がバンク番号=0、行アドレス=0x0100、列アドレス=0x0010へのリードアクセスを特定すると、以下の2つのコマンドを発行する。1つ目はバンク番号=0、行アドレス0x0100を指定するACTコマンド、2つ目はバンク番号=0、列アドレス0x0010を指定するRDコマンドである。メモリコントローラ205は、データアクセス要求の要求元のマスタ情報を判別することができるため、前述のACT及びRDコマンドに対しマスタ情報を関連付けることができる。もし、バンク番号0がオープン状態で行アドレス=0x0000が指定されていたタイミングで、上記アクセス領域へのリードアクセスが特定されると、ページミスが発生するためPREコマンド、ACTコマンド、RDコマンドの順でコマンドが発行される。この場合、PREコマンドにもマスタ情報を関連付けることができる。上記で説明したように、メモリコントローラ205は、データアクセス要求を解析した結果とDRAMの状態(各バンクのオープン/クローズ)の関係を受けて、PRE及びACTコマンドを発行する。つまり、メモリコントローラ205はPRE及びACTコマンドがいずれのデータアクセス要求によって発行されたかを特定できるため、いずれのマスタによって発行されたかを関連付けることができる。ただし、PREコマンドは必ずしもマスタ情報と関連付けないことがある。例えば、REFコマンドのように全てのバンクがクローズ状態でなければ実行できないコマンドに対しては、メモリコントローラ205はREFコマンドの前にバンクをクローズするPREコマンドを発行する。REFコマンドはデータアクセス要求とは無関係に発行されるため、REFコマンド前のPREコマンドに対してはマスタ情報を関連付ける必要がない。上記ではPRE及びACTに対する説明をしたが、メモリコントローラ205はRD及びWRコマンドに対しても前述の例のように同様にマスタ情報を関連付けることができる。本実施形態では第三の実施形態と同様にRD,WR,PRE,ACT以外のコマンドはデータアクセス要求とは無関係に発行されるものとし、マスタ情報を関連付けない。
第一乃至第三の実施形態では、モニタ211によって監視される信号は図4に示すDDR3-SDRAMインタフェース信号としており、モニタ211でマスタ情報は検出することができない。しかし、メモリコントローラ205がバス208から受け取ったマスタ情報をPHY207及びDRAM209に伝搬するようにシステムLSIを構成すれば、モニタ211でイベントと関連付くマスタ情報を検出することが可能である。具体的には上記で説明したようにメモリコントローラ205は、受け取ったマスタ情報付きのデータアクセス要求をPHY207へ伝達する際にマスタ情報を付加するように実装する。さらにPHY207も同様にメモリコントローラ205から受け取ったマスタ情報付きデータアクセス要求を受けDRAMへコマンド発行する際にマスタ情報を付加するように実装する。上記を実施し、モニタ211でマスタ情報を示す信号も監視対象に含めることで、モニタ211からマスタ情報付きイベントを出力することができる。
また、図2ではモニタ211はPHY207とDRAM209の間のインタフェースを監視しているが、イベント検出はメモリコントローラ205とPHY207の間のインタフェースを監視しても可能である。そのため、必ずしもPHY207とDRAM209間にマスタ情報が必要ではなく、メモリコントローラ205とPHY207間のインタフェースにマスタ情報があればよい。
マスタ情報付きイベント情報2104が出力された後のバンク状態分類手段2105、DRAM状態分類手段2107、統計処理2109、表示手段2110については第三の実施形態と同様になるため説明は割愛する。
以上、説明した方法で、第三の実施形態と同様にバンク状態及びDRAM状態とマスタ情報を関連付け、表示手段2110により表示することができる。
(第五の実施形態)
第五の実施形態を図9、図27、図28、図34を使って説明する。本実施形態は第三の実施形態に対し、マスタ情報、バンク状態及びDRAM状態を波形で表示する。
既に述べたように、波形とはシステムLSI及びその周辺回路の信号線の変化を時系列に表示するもので、システムLSIの開発においては一般的に使用されている。波形はEDAツールベンダ各社が提供している波形表示ツール(波形ビューアー)で表示することが可能である。各社、波形ビューアーで高速に処理するために独自の波形ファイルフォーマットが存在する。例えば、VCD(Value Change Dump、IEEE 1364 standard)ファイルフォーマットは、ASCII形式で記述され、どの波形ビューアーでも表示可能である。VCDファイルフォーマットはヘッダーセクション、変数定義セクション、初期値設定セクション及び値変化セクションの4つのセクションで構成される。ヘッダーセクションはファイル作成時刻や時間単位定義等を記載する。変数定義セクションでは波形変化を記録する対象の信号やポートを記載する。初期値設定セクションでは、定義した変数の初期値を記載する。値変化セクションでは、どの時刻でどの変数が何の値に変化するかを記載する。これらの情報をVCDファイルフォーマットに従って記載することで波形ビューアーでの表示が可能となる。
ここから、第三の実施形態で説明したマスタ情報、バンク状態及びDRAM状態を波形で表示する手順を説明する。図28は第三の実施形態で説明した各バンクの状態と関連付けたマスタ情報及びDRAMの状態と関連付けたマスタ情報を示している。図28に示す各バンクの状態と関連付けたマスタ情報は図27に示すフローで決定される。このフローではどのサイクル(時刻)でバンクの状態及び関連付くマスタ情報が変化するかを以下のステップで決定している。
・ステップ709及びステップ2702(動作状態)
・ステップ712及びステップ2703(動作不可状態)
・ステップ715及びステップ2704(動作不可状態)
・ステップ718、ステップ723(休止状態)
・ステップ721及びステップ2705(動作不可状態)
前述したようにVCDファイルフォーマットでは記録する変数とその値変化の情報が必要である。図27のフローを用いることで、波形表示対象のバンク状態及び関連付くマスタ情報がどの時刻で何の値に変化するかを記録することが可能である。同様の考えでDRAMの状態及び関連付くマスタ情報も図9のフローのステップ904(動作状態)、ステップ906(動作不可状態)、ステップ907(休止状態)で、どの時刻に何の値に変化するかを記録することが可能である。図34は図28の各バンク状態と関連付くマスタ情報及びDRAM状態と関連付くマスタ情報を波形ビューアーで波形表示した例である。DRAM_StateはDRAM状態、DRAM_Master_Infoは同時刻のDRAM状態と関連付くマスタ情報を示している。BankX_State(X=0~7の整数)は各バンクの状態、BankX_Master_Info(X=0~7の整数)は同時刻の各バンクの状態に関連付くマスタ情報を示す。一般的な波形ビューアーでは変数の値を文字列に置き換えて表示することが可能である。本実施形態ではDRAM_State及びBankX_State(X=0~7の整数)は2ビットの変数で0から3までの値を取ることができ、0は動作状態、1は動作不可状態、2は休止状態とし、3は使用しない。波形ビューアーで0に「TR」、1に「OH」、2に「IDLE」という文字列を割り当て表示させる。同様にDRAM_Master_Info及びBankX_Master_Info(X=0~7の整数)は16ビットの変数で、0から0xFFFFまでの値を取ることができる。0xFFFFは割り当てるマスタ情報がないこと、0xFFFEは休止状態でのマスタ情報を示すものとし、0~0xFFFDまではマスタ情報を示すものとする。本実施形態では0xFFFFは「NO」、0xFFFEは「NA」という文字列を割り当て表示させる。図34の波形は数値を上記文字列で置き換えた結果を示している。また、波形ビューアーは文字列や値に対して表示する色を割り当てることができる。本実施形態では「TR」に緑、「OH」に橙、「IDLE」に灰色を割り当てることで、各バンクやDRAMの状態を視覚的により分かりやすく表示する。
本実施形態ではVCDファイルフォーマットを例に波形ファイルを作成する例を示した。しかし、VCD以外の波形ファイルフォーマットでも、変数がどの時刻で何の値に変化するかをフォーマットに準拠して記録することは可能であり、VCDファイルフォーマットに限定されることはない。
また、本実施形態では、各バンクの状態及びDRAM状態は動作状態、動作不可状態、休止状態の3状態としたが、第二の実施形態で示したように動作不可状態をより詳細な動作不可状態に分類して波形で表示することも可能である。
以上、説明した方法で、マスタ情報、バンク状態及びDRAM状態を波形で表示することができる。