(57)【特許請求の範囲】
【請求項１】
プロセッサ内に備えられ、該プロセッサ内の複数の演算器に係わる各演算データと該各演算の為の各制御信号とが入力されるデバッグ機構であって、
前記演算動作に同期してカウント動作するカウンタと、各々が前記各制御信号の何れかと該カウンタのカウンタ値が特定のカウンタ値のときに出力される信号とを入力する複数のＯＲ回路とを有するデバッグ制御手段と、
各々が前記各演算データの何れかと前記各ＯＲ回路の出力の何れかと前記カウンタ値とを入力し、入力するＯＲ回路の出力が有効のときに前記演算データとカウンタ値とを記憶する複数の記憶部を有するデバッグ記憶手段と、
を有することを特徴とするデバッグ機構。
【請求項２】
前記カウンタのカウンタ値が特定のカウンタ値のときに出力される信号は、前記カウンタから出力されるオーバーフロー信号であることを特徴とする請求項１記載のデバッグ機構。
【請求項３】
前記カウンタのカウンタ値が特定のカウンタ値のときに出力される信号は、前記カウンタから出力されるカウンタ値と前記特定のカウンタ値とを入力する比較器の出力であることを特徴とする請求項１記載のデバッグ機構。
【請求項４】
前記カウンタは、常に前記演算動作に同期してカウント動作するのではなく、前記各制御信号の何れか１以上が有効なときにカウント動作することを特徴とする請求項１記載のデバッグ機構。
【請求項５】
前記カウンタは、外部から入力されるモード信号に応じて、前記演算動作に同期して動作するか又は前記各制御信号の何れか１以上が有効なときに動作することを特徴とする請求項１記載のデバッグ機構。
【請求項６】
プロセッサ内に備えられる演算ユニットであって、該演算ユニット内の複数の演算器に係わる各演算データと該各演算の為の各制御信号とが入力されるデバッグ機構を有する演算ユニットにおいて、
前記デバッグ機構が、前記演算動作に同期してカウント動作するカウンタと、各々が前記各制御信号の何れかと該カウンタのカウンタ値が特定のカウンタ値のときに出力される信号とを入力する複数のＯＲ回路とを有するデバッグ制御手段と、各々が前記各演算データの何れかと前記各ＯＲ回路の出力の何れかと前記カウンタ値とを入力し、入力するＯＲ回路の出力が有効のときに入力する前記演算データとカウンタ値とを記憶する複数の記憶部を有するデバッグ記憶手段とを有することを特徴とするデバッグ機構内蔵演算ユニット。
【請求項７】
請求項６に記載のデバッグ機構内蔵演算ユニットを備えるプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサのデバッグ機構に関する。
【背景技術】
【０００２】
近年、プロセッサの集積度の増加、論理の複雑化は著しく、デバッグ作業期間は増加する一方である。Out-Of-Orderで実行されるプロセッサの演算器デバッグ作業において、各演算器においてどの様な演算がどのような順序で実行されたかを示す情報（演算履歴）を知ることは重要であり、この情報を記録しておき読み出す構成が必要であった。現在、デバッグ作業の一手段として、プロセッサ内のラッチにスキャン回路を付加し、このラッチ情報を読み出す手法が広く用いられている。具体例として、例えばＪＴＡＧ(Join Test Action Group)対応のプロセッサ内のラッチにスキャン回路を付加し、このラッチの情報を読み出す手法が知られている。【０００３】
先行技術として、このスキャン回路付きラッチを複数用い、上記演算情報をシフトしつつ記録することにより、複数タイミングでのプロセッサ内の演算実行情報を保持するデバッグ機構がある。この先行技術のデバッグ機構では、各演算器毎の各演算実行内容と演算実行タイミングを記録している。すなわち、先行技術では、カウンタを用意し、そのカウンタ値と記録対象の信号（演算データ）を記録していた。これにより、この記録データをスキャンすることで、デバッグ作業者等は、それぞれの演算器がどのような演算をどの様な順序で実行したかを知ることができる。しかしながら、各演算器毎の各演算間の実行間隔（サイクル間隔）や、複数の演算器の相対的な実行順序までは知ることができなかった（明確に判断できない場合が生じる）。【０００４】
図１２に、上記先行技術のデバッグ機構の構成例を示す。
図１２に示すデバッグ機構１００は、カウンタ１０１と、各演算器に対応する各記憶部１１０、１２０、１３０とから成る。ここでは、演算器は３つあるものとし（図示しないが、仮に演算器Ｘ，Ｙ，Ｚとする）、演算器Ｘは、起動制御信号（VALID）である制御信号V_Aが有効（‘１’）となったとき、記録対象信号Ａ（演算用入力データ）に基づいて所定の演算を実行する。同様に、演算器Ｙには記録対象信号Ｂと制御信号Ｖ＿Ｂが、演算器Ｚには記録対象信号Ｃと制御信号V_Cとが入力している。【０００５】
また、ここでは、カウンタ１０１は３BITカウンタであるものとするので、カウンタ１０１のCOUNT端子からは３bitのカウント値が出力される。演算器Ｘに対応する記憶部１１０を例にすると、記憶部１１０は、記録対象信号Ａを入力し、制御信号V_Aが‘１’のときに記録対象信号Ａを記憶し順次シフトしていくシフトレジスタ１１１と、上記カウント値を入力し、制御信号V_Aが‘１’のときにカウント値を記憶し順次シフトしていくシフトレジスタ１１２とから成る。他の記憶部１２０，１３０も同様の構成であり、入力・記憶するデータと制御信号が、それぞれ、記録対象信号Ｂと制御信号V_B、記録対象信号Ｃと制御信号V_Cである点のみが異なる。【０００６】
上記各記憶部の各シフトレジスタは、全て同じ構成であり、入力するデータが異なるだけであるので、ここでは、シフトレジスタ１１１を例にして説明する。シフトレジスタ１１１は、図示の通り、レジスタＡ１、Ａ２、・・・Ａ６の６つのレジスタから成り、デバッグ機構１００に外部から入力される任意の記録対象信号Ａは、まず、レジスタＡ１に記憶され、次の記録対象信号ＡがレジスタＡ１に記憶されるときにはレジスタＡ２にシフトし、同様にしてレジスタＡ３、Ａ４、Ａ５、Ａ６の順にシフトし、最後にシフトアウトする。制御信号V_Aは、シフトレジスタ１１２にも入力しており、制御信号V_Aが‘１’になる毎に、そのときのカウンタ１０１のカウント値が新たにシフトレジスタ１１２に記憶されると共に既にシフトレジスタ１１２の各レジスタに記憶されている各カウント値は、その隣のレジスタへとシフトすることになる。【０００７】
そして、任意のときに、各シフトレジスタ１１１〜１３２に記憶されたデータが外部から読み出される（ＳＣＡＮされる）。例えば、各記録対象信号Ａ〜Ｃ、制御信号V_A〜V_Cの値及びタイミングが、図１３Ａ〜図１３Ｃに示す通りであったとすると、各シフトレジスタ１１１〜１３２からＳＣＡＮされるデータは、図１４Ａ〜図１４Ｃに示す通りとなる。すなわち、各記憶部１１０〜１３０の各々には、制御信号が‘１’のときの記録対象信号及ぶカウンタ値が記録されている。【０００８】
ここで、上記の通り、ここではカウンタ１０１は３BITカウンタであるので、000,001,010・・・というように順次カウントし、カウント値が111になったらリセットし、再び000,001,010・・・とカウントする（サイクリックにカウントする）。各記憶部１１０、１２０、１３０は、自己に入力している制御信号が‘１’のときのみ、入力する記録対象信号とカウント値とを記憶・シフトする。従って、例えば、記憶部１１０は、図１３Ａにおいてカウント値が010,101,000,010,011,111のときのみ、記録対象信号Ａとカウント値を記憶・シフトするので、その後にＳＣＡＮして読み出される記憶部１１０の記憶内容は、図１４Ａに示す通りとなる。【０００９】
尚、カウンタ１０１に入力しているクロックＣＬＫは、プロセッサの内部クロックであり、各演算器Ｘ〜ＺもこのクロックＣＬＫに従って制御されるので、カウンタ１０１はこれら演算動作に同期して動作することになる。また、尚、図１４Ａ〜図１４Ｃにおいて図上最も左側に示す各データが、図１２における各シフトレジスタの図上最も右側に示すレジスタ（シフトレジスタ１１１の場合はレジスタＡ６）に記憶されているデータを意味する。つまり、記録されているデータの中では最も古いデータを意味する。図１４Ａ〜図１４Ｃにおいて図上最も右側に示すデータが最新の記憶情報である（シフトレジスタ１１１の場合はレジスタＡ１に記憶されているデータ）。図１２に示す各シフトレジスタの記憶素子は６個であるので、例えば図１４Ａに示す記録対象信号Ａ＝‘１’、カウント値＝‘010’のデータは、更に新たなデータが記録された場合にはシフトアウトすることになる。【００１０】
ここで、実際のデバッグ作業時のように、記憶部１１０、１２０、１３０から読み出した（ＳＣＡＮした）データを元に、デバッグ作業者等が各演算器の動作順を考えるとする。図１５Ａ〜図１５Ｃに、図１４Ａ〜図１４Ｃに示す記憶内容から判断され得る、各演算器の動作順を示す。尚、図１５Ａ〜図１５Ｃには、各シフトレジスタに新たなデータが記録されたタイミングにおける、新たに記録された記録対象信号の値を示してある。【００１１】
実際の動作順は図１３Ａ〜図１３Ｃに示す通りであるのだから、図１５Ａが正しい判断結果である。しかしながら、図１４Ａ〜図１４Ｃに示す記憶内容からは、図１５Ｂ又は図１５Ｃに示す判断を行うこともでき、デバッグ作業者等にとっては何れの判断結果が正しいのか分からないことになる。【００１２】
この様な事態になる原因は、上記の通り、カウンタ１０１をサイクリックに動作させる為であり、例えばカウンタ値＝‘101’と記録されていても、それが何周目のカウンタ値＝‘101’であるのかが判断できないケースが生じるからである。勿論、明確に判断可能なケースもあり、この例では記録対象信号Ａは明確に判断可能であり、図１５Ａ〜図１５Ｃの全てにおいて同じ判断結果となっている。これは、記録対象信号Ａの場合は、偶然、２周目の最初のカウント値＝‘000’が記録されている為、これ以前の記録データは１周目、これ以降の記録データは２周目であると判断可能であるからである。但し、これは、カウンタ１０１を２周目までしか動作させないことを前提としているからであり、もし３周目以降も動作可能とした場合には、判断できないことになる（例えば、２周目には全くデータは記録されず、カウント値‘000’以降の記録データは全て３周目のデータである場合もあり得るからである）。【００１３】
記録対象信号ＢやＣのケースに関しては、カウンタ１０１を２周目までしか動作させないことを前提としている場合でも、例えば図１５Ａ〜図１５Ｃに示す複数のパターンが考え得るので、この中のどれが正しいのか分からない。例えば、記録対象信号Ｂを例にすると、正しくは図１５Ａに示す通り、最後に記憶されたカウンタ値＝‘111’のデータのみが２周目のデータであり、それ以外のデータは全て１周目に記録されたデータであるが、図１５Ｂに示すように全データが２周目であったり、図１５Ｃに示すように全データが１周目である可能性も考えられる（更に他のパターンも考えられる）。【００１４】
本発明の課題は、プロセッサ内の演算実行情報を保持するデバッグ機構に係わり、各演算器毎の実行順及びサイクル間隔あるいは複数の演算器の相対的な実行順序が明確に判断できるように各演算器の動作履歴を記録するデバッグ機構、このデバッグ機構を備える演算ユニット、プロセッサ等を提供することである。
【発明の開示】
【００１５】
本発明のデバッグ機構は、プロセッサ内に備えられ、該プロセッサ内の複数の演算器に係わる各演算データと該各演算の為の各制御信号とが入力されるデバッグ機構であって、  前記演算動作に同期してカウント動作するカウンタと、各々が前記各制御信号の何れかと該カウンタのカウンタ値が特定のカウンタ値のときに出力される信号とを入力する複数のＯＲ回路とを有するデバッグ制御手段と、各々が前記各演算データの何れかと前記各ＯＲ回路の出力の何れかと前記カウンタ値とを入力し、入力するＯＲ回路の出力が有効のときに前記演算データとカウンタ値とを記憶する複数の記憶部を有するデバッグ記憶手段とを有する。
【００１６】
上記デバッグ機構の上記各記憶部には、基本的には、その記憶部に対応する制御信号が有効なときに、上記演算データとカウンタ値とを記憶するが、上記カウンタのカウンタ値が特定のカウンタ値のときには、制御信号が有効でなくても、上記演算データとカウンタ値とをチェックポイントとして記憶する。後にデバッグ記憶手段に記憶されたデータをスキャンしてデバッグ作業を行う際には、このチェックポイントに基づいて、記憶されている各演算データが何周目のデータであるのかを判別できる。すなわち、各演算器毎の実行順及びサイクル間隔あるいは複数の演算器の相対的な実行順序が明確に判断できるように各演算器の動作履歴を記録することができる。
【００１７】
上記カウンタのカウンタ値が特定のカウンタ値のときに出力される信号は、一例としては例えば、前記カウンタから出力されるオーバーフロー信号であり、他の一例としては、前記カウンタから出力されるカウンタ値と前記特定のカウンタ値とを入力する比較器の出力である。
【００１８】
また、例えば、前記カウンタは、常に前記演算動作に同期してカウント動作するのではなく、前記各制御信号の何れか１以上が有効なときにカウント動作するように構成してもよい。これによって、テスト用演算動作を終了後に速やかに上記カウンタを動作させるクロックを停止させられない場合でも、上記チェックポイントとしてのデータが無駄に記憶されてしまう事態を回避できる。
【００１９】
あるいは、例えば、前記カウンタが、外部から入力されるモード信号に応じて、前記演算動作に同期して動作するか又は前記各制御信号の何れか１以上が有効なときに動作するように構成してもよい。これによって、状況に応じた動作方式でデバッグの為のデータ記録を行うことができる。
【図面の簡単な説明】
【００２０】
【図１】本例のデバッグ機構を備える演算ユニット、及び当該演算ユニットを備えるプロセッサの概略構成図である。
【図２】実施例１におけるデバッグ機構の構成例である。
【図３Ａ】図２に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図３Ｂ】図２に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図３Ｃ】図２に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図４】図３Ａ〜図３Ｃのデータに基づいて判断される、各演算器の動作内容及びタイミングを示す図である。
【図５Ａ】図３Ａに示す記録データがほぼ消失する状態を示す図である。
【図５Ｂ】図３Ｂに示す記録データがほぼ消失する状態を示す図である。
【図５Ｃ】図３Ｃに示す記録データがほぼ消失する状態を示す図である。
【図６】実施例２におけるデバッグ機構の構成例である。
【図７】実施例２におけるカウンタの動作タイミングを示す図である。
【図８Ａ】図６に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図８Ｂ】図６に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図８Ｃ】図６に示すデバッグ機構において各記憶部に記憶されるデータの一例である。
【図９】図８Ａ〜図８Ｃに示す記録データから判断される、各演算器の動作順を示す図である。
【図１０】実施例３におけるデバッグ機構の構成例である。
【図１１】実施例１の変形例のデバッグ機構の構成例である。
【図１２】従来技術のデバッグ機構の構成例である。
【図１３Ａ】記録対象信号Ａ、制御信号V_Aの値及びタイミングの一例である。
【図１３Ｂ】記録対象信号Ｂ、制御信号V_Bの値及びタイミングの一例である。
【図１３Ｃ】記録対象信号Ｃ、制御信号V_Cの値及びタイミングの一例である。
【図１４Ａ】図１３Ａに示す例においてシフトレジスタに記憶されるデータである。
【図１４Ｂ】図１３Ｂに示す例においてシフトレジスタに記憶されるデータである。
【図１４Ｃ】図１３Ｃに示す例においてシフトレジスタに記憶されるデータである。
【図１５Ａ】図１４Ａに示す記憶内容から推定され得る、各演算器の動作順を示す図である。
【図１５Ｂ】図１４Ｂに示す記憶内容から推定され得る、各演算器の動作順を示す図である。
【図１５Ｃ】図１４Ｃに示す記憶内容から推定され得る、各演算器の動作順を示す図である。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して本発明の実施の形態について説明する。
図１に、本例のデバッグ機構を備える演算ユニット、及び当該演算ユニットを備えるプロセッサの概略構成図を示す。【００２２】
図１において、プロセッサ１０は命令制御ユニット１１、データ制御ユニット１２、及び演算ユニット２０を有する。演算ユニット２０は、演算制御部２１、各演算器２２，２３，２４、及びデバッグ機構３０を有する。デバッグ機構３０は、デバッグ制御部３１とデバッグ記憶部３２とから構成される。【００２３】
演算ユニット２０において、演算制御部２１は、命令制御ユニット１１からの制御信号に基づいて各演算器２２〜２４を制御する。各演算器２２〜２４は、演算制御部２１から出力される制御信号V_A、V_B、V_Cにしたがって、データ制御ユニット１２から演算制御部２１を介して各演算器に入力されるデータ（演算用の入力データ）を用いた所定の演算を実行する。図示の例では、各演算器２２、２３、２４には、それぞれ、演算用の入力データとして、信号Ａ、信号Ｂ、信号Ｃが入力している。これら信号Ａ、信号Ｂ、信号Ｃは、デバッグ機構３０のデバッグ記憶部３２にも入力している。同様に、各演算器２２，２３，２４に入力している制御信号V_A、V_B、V_Cは、デバッグ機構３０のデバッグ制御部３１にも入力している。【００２４】
尚、図示の構成は一例に過ぎない。デバッグ記憶部３２は先行技術と同様に演算履歴（演算データと実行タイミング）を記録するものであるが、記録する演算データとして、上記の例では演算用の入力データを用いたが、これに限らず、例えば各演算器２２、２３、２４による演算実行結果としてもよい。あるいは、演算用の入力データと演算実行結果の両方を演算データとして記録してもよい。勿論、この場合には（図示はしないが）各演算器２２、２３、２４の出力をデバッグ記憶部３２に入力させる信号線も設ける必要がある。【００２５】
デバッグ制御部３１は、先行技術と同様に、その内部に有するカウンタから出力されるカウンタ値を、デバッグ記憶部３２に対して出力する。また、上記入力される制御信号V_A、V_B、V_Cに基づいて制御信号ａ、ｂ、ｃを生成して、これをデバッグ記憶部３２に対して出力する。尚、演算制御部２１からは各種制御信号が出力されるが、制御信号V_A、V_B、V_Cは、これら各種制御信号の１つである各演算器の起動制御信号（VALID）である。尚、図示のＭＯＤＥ信号は、後述する実施例３では必要であるが、他の実施例では必要ない。また、特に図示していないが、デバッグ制御部３１には、従来と同様、プロセッサ１０の内部クロックであるクロックＣＬＫも入力している。【００２６】
デバッグ機構３０は、各演算器の動作履歴（演算データと実行タイミング）を記録するものであり、特にほぼ有用な情報だけを記録することによりデバッグ作業を効率的に行うことを可能とすると共に、更に当該デバッグ作業において各演算器毎の実行順及びサイクル間隔あるいは複数の演算器の相対的な実行順序が明確に／正確に判断できるように情報を記録するものである。【００２７】
この様なデバッグ機構３０の構成として、まず、実施例１による構成を図２に示す。
図２に示す、実施例１におけるデバッグ機構３０の構成例では、まず、そのデバッグ制御部３１は、カウンタ４１と各ＯＲ回路４２，４３，４４とから成る。カウンタ４１は、上記クロックＣＬＫによって動作し、カウンタ値を出力し、このカウンタ値はデバッグ記憶部３２に入力される。この点は先行技術と同じである。本例では、更に、カウンタ４１から出力されるオーバーフロー信号OVFを利用している。すなわち、オーバーフロー信号OVFは、各ＯＲ回路４２，４３，４４の一方の入力端子に入力している。各ＯＲ回路４２，４３，４４の他方の入力端子には、上記制御信号V_A、V_B、V_Cが入力している。これによって、各ＯＲ回路４２，４３，４４の出力である制御信号ａ、ｂ、ｃは、制御信号V_A、V_B、V_Cが‘１’のときだけでなく、カウンタ４１がオーバーフローしたとき（オーバーフロー信号OVFが‘１’となる）にも、‘１’となる。【００２８】
尚、本例の説明では、各制御信号V_A等が‘１’のときは「制御信号が有効なとき」、各ＯＲ回路４２等の出力が‘１’のときは「ＯＲ回路の出力が有効なとき」を意味することになるが、これらが‘１’のときに有効となる構成に限るものではない。【００２９】
先行技術では制御信号V_A、V_B、V_Cによって記憶部を制御していたが、本例ではその代わりに制御信号ａ、ｂ、ｃを用いている。そして、上記の通り、制御信号ａ、ｂ、ｃはカウンタ４１がオーバーフローしたときには、制御信号V_A、V_B、V_Cの値に関係なく強制的に‘１’となり、このタイミングでもデバッグ記憶部３２における記録・シフト動作が行われることになる。つまり、後のデバッグ作業の際に、各記録データが何周目のデータであるのかを判断可能にするチェックポイントとなるデータが記憶されることになる。勿論、制御信号V_A、V_B、V_Cが‘１’のときには、従来通り、デバッグ記憶部３２における記録・シフト動作が行われることになる。【００３０】
デバッグ記憶部３２は、記憶部５０、記憶部６０、記憶部７０を有する。記憶部５０は、演算器２４の動作履歴を記録する記録部であり、ここでは演算器２４への入力データである信号Ａをカウンタ値と共に記録する。但し、本例では、制御信号ａも記録する。同様に、記憶部６０は演算器２３の動作履歴を記録し、記憶部７０は演算器２２の動作履歴を記録する。【００３１】
記憶部５０〜７０は、入力・記憶するデータは違うが、その構成自体は同じであるので、ここでは代表して記憶部５０を用いて説明する。記憶部５０は、シフトレジスタ５１，５２，５３を有する。シフトレジスタ５１，５２，５３は、全て、制御信号ａによって制御され、制御信号ａが‘１’のときに、その入力データを記憶・シフトする。シフトレジスタ５１の入力データは上記信号Ａであり、シフトレジスタ５２の入力データは上記カウント値であり、シフトレジスタ５３の入力データは上記制御信号V_Aである。各シフトレジスタの構成自体は、全て同じであり、入力するデータが異なるだけなので、ここでは、シフトレジスタ５１を例にして説明する。シフトレジスタ５１は、図示のレジスタA11〜A16の６つのレジスタから成り、信号Ａは、まずレジスタＡ１１に記憶され、その後、レジスタA12→A13→A14→A15→A16の順に順次シフトされ、最後にはシフトアウトする。この様な信号Ａの記憶／シフト動作は、制御信号ａが‘１’となる毎に行われる。【００３２】
ここで、先行技術とは異なり、制御信号V_Aも記録している理由は、先行技術では制御信号V_Aが‘１’のときのみデータが記録されることで有効なデータのみが記録されるが、本例ではオーバーフロー信号OVFが‘１’のときにもデータが記憶されるので、この記憶データが有効か無効かをデバッグ作業の際に判断可能とする為に、制御信号V_Aも記録している。逆に言えば、従来のデバッグ機構では記録されるデータは全て有効なデータであったが、本手法では、上記チェックポイントとなるデータも記録される為、必ずしも全てが有効なデータであるとは限らない。【００３３】
上記図２に示すデバッグ機構３０において各記憶部５０〜７０に記憶されるデータを、図３Ａ〜図３Ｃに示す。尚、デバッグ機構３０に入力するデータ及びカウンタ値は、図１３Ａ〜図１３Ｃと同じであるものとする。また、図３Ａ〜図３Ｃの解釈の仕方は、図１４で説明した通りである（但し、本手法では、制御信号V_A、V_B、V_Cの値も記録される）。【００３４】
図３Ａ〜図３Ｃに示す例では、カウンタ４１の１周目のカウンタ値＝‘000’のときに記憶されたデータはシフトアウトしており、その次に記録されたデータが最も古いデータとなっている。換言すれば、本手法では、カウンタ値＝‘000’のときには必ずデータ記憶が行われるので、最も古いデータとして１周目のカウンタ値＝‘000’のデータが記録されていないならば、このデータはシフトアウトしていることが分かる。【００３５】
そして、ここでは、カウンタ４１は２周まで動作させるものとすると、図３Ａ〜図３Ｃにおいてカウンタ値＝‘000’のデータが、２周目の最初のデータであることになるので、このチェックポイントとして記憶されたデータを境にして、それよりも前に記録されたデータは１周目のデータ、その後に記録されたデータは２周目のデータであると判断できる。これより、図３Ａ〜図３Ｃに示す各信号Ａ，Ｂ，Ｃに関する記録データのうち、図上、チェックポイントよりも左側に示すデータは全て１周目のデータであることが分かる。【００３６】
例えば、図３Ｂに示す信号Ｂを例にすると、カウンタ値＝‘010’、‘011’、‘100’、‘110’のデータは全て１周目のデータであることが分かる。更に、カウンタ値＝‘000’のときの制御信号V_Bの値が‘０’であることから、このデータは無効であることが分かり（単なるチェックポイントとして記録されたもの）、２周目の記憶データはカウンタ値＝‘111’のデータのみであることが分かる。【００３７】
以上述べたように、カウンタ４１のオーバーフローのタイミングでは必ずデータを記録することにより、図３Ａ〜図３Ｃに示す記録データをＳＣＡＮすれば、各演算器２２〜２４の動作内容（ここでは入力値）及びタイミングが、図４に示す通りであることが明確に判断できる。【００３８】
尚、特に図示していないが、デバッグ機構３０は、例えば特願2004-222398号等と同様に、スキャン部を有しており、このスキャン部によって上記各シフトレジスタに記憶されているデータが読み出されることになる。【００３９】
次に、以下、実施例２について説明する。
上記実施例１の構成では、各演算器２２〜２４に対するテスト用演算動作制御が終了したら、カウンタ４１に入力するクロックＣＬＫすなわち演算ユニット２０の内部クロックを、直ちに止める場合は良いが、他の制御の関係でクロックＣＬＫが進み、カウンタ４１が何周も回った後にスキャンを行って、記録された情報を読み出すことがある。【００４０】
この場合、上記の通り、本手法では、カウンタ値＝‘000’のときには、常にデータを（それが無効なデータであっても）記録する為に、図３に示す記録データに対して更にカウンタ４１が１周する毎にカウンタ値＝‘000’のデータが記録されることになる。この為、古い記録データから順にシフトアウトしていくことになり、例えば各演算器２２〜２４に対するテスト用演算動作が終了してから、更にカウンタ４１が４周した後にＳＣＡＮが行われた場合、各記憶部５０〜７０に記憶されるデータは、図５Ａ〜図５Ｃに示す通りとなる。図５Ａ〜図５Ｃに示すように、チェックポイント用のデータに過ぎないカウンタ値＝‘000’のデータが余計に４つ記憶された為、本来記録しておくべき有効なデータ（実際の演算器実行時の記録）の殆どがシフトアウトして消滅してしまい、残っているのは２つのみ（例えば図５Ａの例では、カウンタ値＝‘011’と‘111’のデータのみ）となってしまう。【００４１】
実施例２は、上記の問題が起こる場合に対応した実施例である。尚、デバッグ機構３０の外部から（例えば演算制御部２１が）テスト用演算動作が終了したときにカウンタ動作を停止させる為の制御信号をデバッグ機構３０へ入力する構成とすることも考えられるが、その為に余計な構成及び制御が必要となる。デバッグ機構３０は、あくまでもデバックの為に付加する構成であり、プロセッサ１０の本来の動作には関係ないので、余計な構成及び制御が加わることは好ましくない。よって、デバッグ機構３０側で上記問題を解決することが望まれる。【００４２】
図６は、実施例２におけるデバッグ機構３０の構成例である。
図６において、図２の構成と略同様の構成には同一符号を付してある。すなわち、まず、デバッグ記憶部３２の構成自体は、図２と同じである（記憶部５０、６０、７０）。また、デバッグ制御部３１において、各々が制御信号V_A、V_B、V_Cの何れかを一方の入力とし、他方の入力は共に上記オーバーフロー信号OVFとしている、各ＯＲ回路４２，４３，４４も、図２と同様である。【００４３】
図６の構成と図２の構成との違いは、まず、カウンタ８１がＩＮＨ入力端子付カウンタであり、更に３入力ＯＲ回路８２とＮＯＴ回路８３とを設けている点である。よく知られているように、ＩＮＨは禁止入力を意味し、ＩＮＨ入力端子に‘Ｌ’信号（‘０’）が入力している状態ではカウンタ８１は通常通りクロックＣＬＫに応じてカウンタアップ動作するが、ＩＮＨ入力端子に‘Ｈ’信号（‘１’）が入力している状態ではカウンタ８１は一切カウンタアップ動作は行わない。そして、図示の構成では、ＩＮＨ入力端子には、３入力ＯＲ回路８２の出力がＮＯＴ回路８３で反転された信号が入力している。【００４４】
３入力ＯＲ回路８２の入力は、上記３つの制御信号V_A、V_B、V_Cである。従って、実施例２のカウンタ８１は、３つの制御信号V_A、V_B、V_Cのうちの１以上の制御信号が‘１’のときには、ＩＮＨ入力端子に‘Ｌ’信号が入力するのでカウンタ・イネーブルの状態となり、カウントアップ動作を行うことになる。一方、３つの制御信号V_A、V_B、V_Cが全て‘０’のときには、ＩＮＨ入力端子に‘Ｈ’信号が入力するので、この状態ではカウンタ８１はカウントアップ動作を行わない。そして、制御信号V_A、V_B、V_Cは全て、上記テスト用演算動作が終了したら‘０’の状態となるので、カウンタ８１は、クロックＣＬＫが進んでも一切カウントアップ動作を行わないことになる。【００４５】
図７に、実施例２におけるカウンタ８１の動作タイミングを示す（入力データは図１３と同じ）。
図７に示す通り、３つの制御信号V_A、V_B、V_Cが全て‘０’であるときには、カウンタ８１はカウントアップ動作を行わない（図上、カウンタ値が空白となっているのは、カウンタ値が変化しないことを意味するものとする）。勿論、３つの制御信号V_A、V_B、V_Cが全て‘０’のときには、３つの記憶部５０，６０、７０の全てにおいて、新たなデータの記憶・シフト動作は行われない。カウンタ８１が図７の様に動作した場合、各記憶部５０，６０、７０に記憶されるデータの内容は、図８Ａ〜図８Ｃに示す通りとなる。図８Ａ〜図８Ｃを図３Ａ〜図３Ｃと比較すると、カウンタ値が異なる点以外は、ほぼ同じである。【００４６】
そして、図７において最後のデータ（２周目のカウンタ値＝‘011’のときのデータ）が記録された後に、上記の通りクロックＣＬＫが直ちに止まらない状況になったとしても、テスト終了後は３つの制御信号V_A、V_B、V_Cは全て‘０’であるので、カウンタ８１はカウントアップ動作を行わない。従って、カウンタ８１のカウンタ値はその後ずっとカウンタ値＝‘011’のままであり、３つの記憶部５０，６０、７０の全てにおいて新たなチェックポイントのデータが記録されることはない。従って、後にＳＣＡＮして読み出されるデータは、図８Ａ〜図８Ｃに示す内容のままであり、上記問題は解決される。【００４７】
図９に、図８Ａ〜図８Ｃに示す記録データから考えられる各演算器の動作順を示す。
図９に示す通り、カウンタ値が図３のものとは違っていても、各演算器の相対的な動作順は、問題なく判断できる。但し、各演算器毎にその演算器の各演算動作の実行間隔（サイクル間隔）を知ることはできない。尚、図９においても、一見、各演算器毎の各演算動作の実行間隔が分かるように見える。例えば、図９において、信号Ａに関して（演算器２４に関して）、２周目のカウント値＝‘000’のタイミングでの演算とカウンタ値＝‘011’のタイミングの演算との実行間隔は、クロックＣＬＫの３周期分であることが分かるように見える。しかしながら、正しくは図４に示す通り、上記２つの演算の実行間隔はクロックＣＬＫの４周期分であり、図９を参照した場合に間違った判断を行うことになってしまう。【００４８】
以下、実施例３について説明する。
上記のように、実施例１の構成では、テスト用演算動作が終了後にクロックＣＬＫを速やかに停止させられない場合には、せっかく記憶した情報がシフトアウトしてしまう。【００４９】
一方、実施例２では、上記実施例１の問題は解決できるが、その代わりに、記録されるカウンタ値を参照しても、各演算器毎の各演算動作の実行間隔（サイクル間隔）を知ることはできない。【００５０】
これは実施例１と実施例２のどちらが優れている（又は劣っている）というような問題ではない。状況に応じて、実施例１と実施例２のどちらか一方（その状況に適した方）を選択して使用すればよい。【００５１】
そこで、実施例３では、これら実施例１と実施例２の２つの制御方式を、外部から入力するモード信号によって切り替え可能とすることにより、状況に応じたデバッグが行えるようにしている。【００５２】
図１０に、実施例３におけるデバッグ機構３０の構成例を示す。
図示の通り、図１０の構成は、図６（実施例２）の構成とほぼ同じであり、図６と同一の構成には同一符号を付してあり、以下、異なる点のみ説明する。尚、デバッグ記憶部３２の構成は、図２、図６と同じであるので、図１０では省略しており、デバッグ制御部３１の構成のみを示すものとする。【００５３】
図１０の構成と図６の構成との違いは、図６におけるＮＯＴ回路８３の代わりに、ＮＯＲ回路９１を設けている点である。ＮＯＲ回路９１の一方の入力端子には３入力ＯＲ回路８２の出力が入力しており、他方の入力端子には外部からデバッグ機構３０に入力されるＭＯＤＥ信号が入力されている。尚、ＭＯＤＥ信号は、例えばプロセッサ１０外部からの指示に応じて、例えば命令制御ユニット１１が生成出力すればよいが、この例に限らず、プロセッサ１０内の何等かの制御ユニットが生成してもよいし、あるいは演算ユニット２０内部で生成してもよい。【００５４】
ＮＯＲ回路９１は、その２つの入力の両方が‘０’のときのみ‘１’を出力する。従って、実施例１の制御方式を用いたい場合には、ＭＯＤＥ信号を‘１’にすればよい。ＭＯＤＥ信号が‘１’であれば、ＯＲ回路８２の出力に関係なく（つまり各制御信号V_A、V_B、V_Cの値に関係なく）、常に、ＮＯＲ回路９１の出力は‘０’となる（常に、カウンタ８１のＩＮＨ入力端子に‘Ｌ’信号（‘０’）が入力している）。【００５５】
一方、実施例２の制御方式を用いたい場合には、ＭＯＤＥ信号を‘０’にすればよい。この場合、ＯＲ回路８２の出力が‘０’であるとき、すなわち全ての制御信号V_A、V_B、V_Cが‘０’であるときには、ＮＯＲ回路９１の出力は‘１’となり、カウンタ８１のＩＮＨ入力端子に‘Ｈ’信号（‘１’）が入力する状態となる。上記の通り、この状態では、クロックＣＬＫが進んでもカウンタ８１はカウントアップ動作を行わない。勿論、制御信号V_A、V_B、V_Cの何れか１つ以上が‘１’のときには、ＮＯＲ回路９１の出力は‘０’となる。【００５６】
最後に、本発明の変形例について説明する。
上記実施例１〜３では、カウンタがオーバーフローしたタイミング（カウント値＝‘000）’でチェックポイントを記録していたが、この例に限らない。例えば、予め任意に設定される特定のタイミングをチェックポイントとしてよい。図１１には、この様な変形例の構成の一例を示す。【００５７】
本変形例において、デバッグ記憶部３２の構成は、図２等と同じであるので、図１１では省略しており、デバッグ制御部３１の構成のみを示すものとする。
図１１は、実施例１（図２）に対応する変形例であり、図２の構成と略同様の構成には同一符号を付してあり（但し、カウンタ４１のオーバーフロー信号OVFを各ＯＲ回路４２，４３，４４の入力としていない点は異なる）、以下、図２の構成と異なる点のみ説明する。【００５８】
図１１の構成が図２の構成と異なる点は、図示の比較器１００を設けている点である。図示の通り、比較器１００の一方の入力端子にはカウンタ４１から出力されるカウンタ値が入力し、他方の入力端子にはCHK_NUMBER信号が入力している。CHK_NUMBER信号は、上記ＭＯＤＥ信号と同様、外部からデバッグ機構３０に入力しており、外部から自由に設定を変えられるものである。比較器１００は、この２つの入力値が一致した場合のみ‘１’出力する。比較器１００の出力は、各ＯＲ回路４２，４３，４４の一方の入力となっている。すなわち、本例では、図２のオーバーフロー信号OVFの代わりに、比較器１００の出力を用いている。そして、例えばCHK_NUMBER＝‘101’に設定された場合には、カウンタ４１のカウンタ値が‘101’のとき、各ＯＲ回路４２，４３，４４の出力は必ず‘１’となり、このときのデータがチェックポイントとしてデバッグ記憶部３２に記憶されることになる。【００５９】
尚、当然、図１１のようにオーバーフロー信号OVFの代わりに比較器１００の出力を用いる構成は、実施例２や実施例３に適用してもよい。
また、尚、図１の構成を含め上記各実施例では、各演算器の各演算動作を示すデータとしてデバッグ記憶部３２に記憶させるデータを、各演算器２２〜２４への入力データ（信号Ａ，Ｂ，Ｃ）としていたが、この例に限らず、例えば各演算器２２〜２４からの出力データ（演算結果）を記録させるようにしてもよい。勿論、この場合、図１において各演算器２２〜２４からの出力信号線をデバッグ記憶部３２に接続することになる。あるいは入力・出力の両方のデータを記録させてもよい。【００６０】
尚、以上説明した実施例においては、記憶部３２の具体例としてシフトレジスタを例示したが、この例に限るものではなく、例えば記憶部３２はＲＡＭ等であってもよい。但し、何れの場合であっても、その記憶部３２の記憶容量は少ないものとなる。なぜなら、デバッグ機構はあくまでもテスト用に付加されているものであり、実際の動作の際には必要ないので、現実問題として、デバッグ機構に容量が大きな記憶部を備えさせるわけにはいかないからである（他の回路を圧迫する為）。カウンタに関しても同様であり、カウンタ値出力が上記３ビットのカウンタを用いるのではなく、ビット数が多いカウンタを用いれば、上記問題（サイクリックに使用することで何週目のカウンタ値であるのか区別できなくなる問題）は生じない。しかし、現実には、上記記憶部と同様、デバッグ機構にこの様な大規模カウンタを設けさせる余裕は無い。【００６１】
また、尚、上記実施例ではカウンタはカウントアップ動作するものであったが、勿論、カウンタダウン動作するものであってもよい。
以上述べたように、本発明のデバッグ機構によれば、各演算器毎の実行順及びサイクル間隔あるいは複数の演算器の相対的な実行順序が明確に判断できるように各演算器の動作履歴を記録することができる。
【図１】
0004410296.tif 000002
【図２】
0004410296.tif 000003
【図３Ａ】
0004410296.tif 000004
【図３Ｂ】
0004410296.tif 000005
【図３Ｃ】
0004410296.tif 000006
【図４】
0004410296.tif 000007
【図５Ａ】
0004410296.tif 000008
【図５Ｂ】
0004410296.tif 000009
【図５Ｃ】
0004410296.tif 000010
【図６】
0004410296.tif 000011
【図７】
0004410296.tif 000012
【図８Ａ】
0004410296.tif 000013
【図８Ｂ】
0004410296.tif 000014
【図８Ｃ】
0004410296.tif 000015
【図９】
0004410296.tif 000016
【図１０】
0004410296.tif 000017
【図１１】
0004410296.tif 000018
【図１２】
0004410296.tif 000019
【図１３Ａ】
0004410296.tif 000020
【図１３Ｂ】
0004410296.tif 000021
【図１３Ｃ】
0004410296.tif 000022
【図１４Ａ】
0004410296.tif 000023
【図１４Ｂ】
0004410296.tif 000024
【図１４Ｃ】
0004410296.tif 000025
【図１５Ａ】
0004410296.tif 000026
【図１５Ｂ】
0004410296.tif 000027
【図１５Ｃ】
0004410296.tif 000028