JP2019204388A - 半導体装置、およびデバッグ方法 - Google Patents

半導体装置、およびデバッグ方法 Download PDF

Info

Publication number
JP2019204388A
JP2019204388A JP2018100239A JP2018100239A JP2019204388A JP 2019204388 A JP2019204388 A JP 2019204388A JP 2018100239 A JP2018100239 A JP 2018100239A JP 2018100239 A JP2018100239 A JP 2018100239A JP 2019204388 A JP2019204388 A JP 2019204388A
Authority
JP
Japan
Prior art keywords
processor core
core
program
processing result
circuit
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.)
Granted
Application number
JP2018100239A
Other languages
English (en)
Other versions
JP6981920B2 (ja
Inventor
悠太 新井
Yuta Arai
悠太 新井
恭子 長谷川
Kyoko Hasegawa
恭子 長谷川
佐々木 宏幸
Hiroyuki Sasaki
宏幸 佐々木
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2018100239A priority Critical patent/JP6981920B2/ja
Priority to US16/406,845 priority patent/US10970191B2/en
Priority to CN201910398237.2A priority patent/CN110532164B/zh
Priority to EP19175046.2A priority patent/EP3572943B1/en
Publication of JP2019204388A publication Critical patent/JP2019204388A/ja
Application granted granted Critical
Publication of JP6981920B2 publication Critical patent/JP6981920B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1641Error detection by comparing the output of redundant processing systems where the comparison is not performed by the redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3652Software debugging using additional hardware in-circuit-emulation [ICE] arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Tests Of Electronic Circuits (AREA)
  • Hardware Redundancy (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】プログラムのデバッグ作業をより効率的に進めることができるロックステップ方式を用いた半導体装置を提供する。【解決手段】デバッグシステム1000において、半導体装置(マイクロコンピュータ)100は、メインコア11とロックステップコア12と、デバッグ制御回路21、22と、メインコアとロックステップコアによるプログラムの実行を停止させるエラー信号を出力可能なエラー制御回路50とを含む。デバッグ制御回路(ロックステップ)は、ロックステップコアに対してメインコアとは異なるデバッグに関する設定を行なう。メインコアの処理結果とロックステップコアの処理結果とが不一致である場合であっても、デバッグに関する設定に基づいて、メインコアおよびロックステップコアのいずれかがプログラムの実行を停止している場合には、エラー制御回路は、エラー信号の出力を無効にする。【選択図】図1

Description

本開示は、半導体装置、およびデバッグ方法に関し、例えば、ロックステップ方式を用いた装置に好適に利用できるものである。
従来、車載用の制御装置等においては、その構成要素であるマイクロコンピュータに故障が発生したとしても、機能的な工夫を施すことによって最低限の許容可能な安全を確保する機能が求められている。例えば、故障が発生したとしても、故障が発生してから予め定められた期間内で故障を検出することが求められる。
機能的な工夫の一例として、複数のプロセッサコアを用いたロックステップ方式が知られている。この技術に関連し、特許文献1(特開2014−132384号公報)には、ロックステップ方式を用いたマイクロコンピュータに関する技術が開示されている。
特許文献1に係るマイクロコンピュータは、第1及び第2CPUコアと、複数のフリップフロップと複数の機能ブロックとの情報が格納されたテーブルを記憶する記憶部と、制御部とを含む。制御部は、通常動作モードにおいて、第1および第2CPUコアの出力の不一致が検出された場合に通常動作モードから不一致箇所特定モードにモードを切り替える。制御部は、不一致箇所特定モードにおいて、第1および第2CPUコアのそれぞれのスキャンチェーンの出力の比較結果に基づき特定されたフリップフロップに対応する機能ブロックをテーブルの中から抽出し、当該機能ブロックの機能を停止させる。
特開2014−132384号公報
車載用の制御装置等に用いられるプログラムの開発段階において、プロセッサコアの内部情報を取得するデバッグを実行する際には、事前準備が必要であったり、電子部品(例えば、モータ)の破損等に留意する必要があるため、デバッグ作業を効率よく進めるのが難しい場合がある。そのため、プログラム開発段階において、デバッグ作業をより効率的に進めることが求められている。特許文献1によると、ロックステップ動作するマイクロコンピュータを開示しているものの、効率的なデバッグ作業を実現するためのデバッグ方式については何ら教示ないし示唆されていない。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態に従う半導体装置は、第1および第2プロセッサコアと、第1および第2デバッグ回路と、第1および第2プロセッサコアによるプログラムの実行を停止させるエラー信号を出力可能なエラー制御回路とを含む。第2デバッグ回路は、第2プロセッサコアに対して第1プロセッサコアとは異なるデバッグに関する設定を行なう。第1プロセッサコアの第1処理結果と第2プロセッサコアの第2処理結果とが不一致である場合であっても、デバッグに関する設定に基づいて、第1プロセッサコアがプログラムを実行しており第2プロセッサコアがプログラムの実行を停止している場合には、エラー制御回路は、エラー信号の出力を無効にする。
一実施の形態に従うデバッグ方法は、第1および第2プロセッサコアを含むコンピュータにより実行される。デバッグ方法は、第2プロセッサコアに対して第1プロセッサコアとは異なるデバッグに関する設定を実行するステップと、第1および第2プロセッサコアによるプログラムの実行を停止させるエラー信号を出力するステップとを含む。出力するステップは、第1プロセッサコアの第1処理結果と第2プロセッサコアの第2処理結果とが不一致である場合であっても、デバッグに関する設定に基づいて、第1プロセッサコアがプログラムを実行しており第2プロセッサコアがプログラムの実行を停止している場合には、エラー信号の出力を無効にするステップを含む。
一実施の形態によれば、ロックステップ方式を用いた装置において、プログラムのデバッグ作業をより効率的に進めることができる。
実施の形態1に従うデバッグシステムの構成例を示す模式図である。 実施の形態1に従うエラー制御回路の構成例を示す図である。 実施の形態1に従うエラー信号の出力機能を説明するための情報テーブルである。 実施の形態1に従うプロセッサコアの構成例を示す図である。 実施の形態1に従うブレーク要求信号の出力機能を説明するための情報テーブルである。 実施の形態1に従うデバッグシステムが実行する処理手順を説明するための図である。 実施の形態2に従うプロセッサコアの構成例を示す図である。 実施の形態2に従うデバッグシステムが実行する処理手順を説明するための図である。 実施の形態3に従うプロセッサコアの構成例を示す図である。 実施の形態3に従うデバッグシステムが実行する処理手順を説明するための図である。
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
[実施の形態1]
<全体構成>
図1は、実施の形態1に従うデバッグシステム1000の構成例を示す模式図である。図1を参照して、デバッグシステム1000は、マイクロコンピュータ100と、エミュレータ200と、ホストマシン300とを含む。
ホストマシン300は、PC(Personal Computer)などのコンピュータ装置であり、マイクロコンピュータ100のデバッグを支援するためのプログラム(例えば、デバッガ)を実行する。デバッガは、ユーザが対話的にマイクロコンピュータ100内のプログラムの実行を制御したり、レジスタの値、メモリの内容等を画面に表示したり変更したりする機能を提供する。ホストマシン300は、USB(Universal Serial Bus)インターフェース(I/F)などの通信インターフェイスを通じてエミュレータ200と通信を行ない、エミュレータ200と連携して動作する。
エミュレータ200は、マイクロコンピュータ100上のCPU(Central Processing Unit)で実行されるプログラムのデバッグ作業において用いられる装置である。エミュレータ200は、例えば、JTAG(Joint Test Action Group)の規格に従った通信インターフェイスを通じて、セレクタ30を介してデバッグ制御回路20と通信を行ない、デバッグ機能を制御する。デバッグ機能とは、例えば、プロセッサコア10の実行制御、プロセッサコア10内部のレジスタ値の取得ならびに変更、およびマイクロコンピュータ100上の内部メモリの内容の取得ならびに変更等である。
マイクロコンピュータ100は、メインのプロセッサコア(以下、「メインコア」とも称する。)11と、サブのプロセッサコア(以下、「ロックステップコア」とも称する。)12と、デバッグ制御回路20と、セレクタ30と、一致判定回路40と、エラー制御回路50とを含む。以下では、メインコア11およびロックステップコア12の各々に共通の構成や機能を説明する際には、それらをプロセッサコア10と総称する。
なお、マイクロコンピュータ100は、RAM(Random Access Memory)およびフラッシュメモリ等の内部メモリ(図示しない)をさらに含む。内部メモリは、例えば、メインコア11およびロックステップコア12によって実行されるデバッグ対象のプログラムを格納している。
マイクロコンピュータ100は、メインコア11とロックステップコア12とからなるロックステップデュアルコア構成を採用している。ロックステップデュアルコア構成とは、2つのプロセッサコアに同じ処理を実行させてそれぞれの処理結果の差を比較することで不具合の有無を検出する構成である。
典型的には、メインコア11は、命令メモリに格納された複数の命令(すなわち、プログラム)を読み出して(すなわち、フェッチして)、当該読み出された複数の命令を順次処理する。例えば、メインコア11は、命令に従った処理を実行することにより生成されたデータを内部メモリに書き込んだり、命令に従った処理を実行することで必要になったデータを内部メモリから読み出したりする。また、メインコア11は、命令に従った処理の処理結果をペリフェラルバスを介して周辺回路に出力する。
ロックステップコア12は、メインコア11と冗長な構成を有している。すなわち、ロックステップコア12は、メインコア11と同等の性能及び機能を有している。ロックステップコア12は、ロックステップ動作を行なうことにより、メインコア11とほぼ同時に同じ処理を実行する。
ただし、ロックステップコア12は、メインコア11と全く同一の構成を有している必要はなく、メインコア11と同等の性能及び機能を実現可能であればクロックタイミングあるいは遅延量等を変更してもよい。以下では、説明の容易化のため、メインコア11およびロックステップコア12が同一の構成を有しているものとする。
メインコア11およびロックステップコア12の各々は、処理結果を一致判定回路40に出力する。また、メインコア11およびロックステップコア12の各々は、プログラムを実行している状態であるのか、当該プログラムの実行を停止している状態であるのかを示す状態信号をエラー制御回路50に出力する。以下の説明では、メインコア11の状態信号を「メイン状態信号」とも称し、ロックステップコア12の状態信号を「ロックステップ状態信号」とも称する。
デバッグ制御回路20は、セレクタ30を介したエミュレータ200からの指示に従って動作する。具体的には、デバッグ制御回路20は、メインコア11のためのデバッグ制御回路21と、ロックステップコア12にアクセスするためのデバッグ制御回路22とを含む。
デバッグ制御回路21は、エミュレータ200の指示に従って、メインコア11に対してデバッグに関する設定を行なう。具体的には、デバッグ制御回路21は、メインコア11の実行制御、メインコア11内部のレジスタ値の取得ならびに変更、内部メモリの内容の取得ならびに変更等のデバッグ機能を実現する。
デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12に対してデバッグに関する設定を行なう。具体的には、デバッグ制御回路22は、ロックステップコア12の実行制御、ロックステップコア12内部のレジスタ値の取得ならびに変更、内部メモリ内容の取得ならびに変更、指定されたアドレスでプログラムの実行を停止させるブレークポイント等のデバッグ機能を実現する。
セレクタ30は、デバッグ制御回路21およびデバッグ制御回路22の少なくとも一方を選択して、選択されたデバッグ制御回路にエミュレータ200からの指示を与える回路である。例えば、セレクタ30は、エミュレータ200から、デバッグ制御回路の選択指示およびデバッグに関する設定指示を受け付ける。セレクタ30は、当該選択指示に従うデバッグ制御回路に対して当該設定指示を出力する。
エミュレータ200は、セレクタ30を介して、デバッグ制御回路21およびデバッグ制御回路22にそれぞれ異なる設定指示を与えることができる。すなわち、エミュレータ200は、ロックステップコア12に対しメインコア11とは異なるデバッグ設定を行なうことができる。
一致判定回路40は、メインコア11の処理結果(以下、「メイン処理結果」とも称する。)と、ロックステップコア12の処理結果(以下、「ロックステップ処理結果」とも称する。)とが一致しているか否かを判定する。一致判定回路40は、判定結果を一致判定信号としてエラー制御回路50に出力する。
エラー制御回路50は、予め定められた条件を満たした場合に、マイクロコンピュータ100の動作を停止(すなわち、メインコア11およびロックステップコア12によるプログラムの実行を停止)させるエラー信号を出力する。具体的には、エラー制御回路50は、図2に示すように構成される。
図2は、実施の形態1に従うエラー制御回路50の構成例を示す図である。図2を参照して、エラー制御回路50は、エラー出力設定レジスタ51と、エラー出力回路52とを含む。
エラー出力設定レジスタ51は、エラー制御回路50によるエラー信号の出力機能を有効、または無効に設定するための設定値を格納する。具体的には、エラー信号の出力機能を無効にする場合、設定値“1”がエラー出力設定レジスタ51に格納(設定)される。エラー信号の出力機能を有効にする場合、設定値“0”がエラー出力設定レジスタ51に設定される。典型的には、デバッグ制御回路20(例えば、デバッグ制御回路21)は、エミュレータ200の指示に従って、設定値“1”または設定値“0”をエラー出力設定レジスタ51に設定する。
エラー出力回路52は、例えば、NORゲートにより構成される。エラー出力回路52は、エラー出力設定レジスタ51に格納された設定値と、一致判定回路40から受けた一致判定信号と、メインコア11から受けたメイン状態信号と、ロックステップコア12から受けたロックステップ状態信号とに基づいて、エラー信号を出力する。具体的には、エラー出力回路52は、図3に示す情報テーブル402に従って、エラー信号を出力する。
図3は、実施の形態1に従うエラー信号の出力機能を説明するための情報テーブル402である。図3を参照して、情報テーブル402において、エラー出力設定レジスタ51に格納された設定値“1”は、エラー信号の出力機能が無効化されていることを示している。エラー出力設定レジスタ51に格納された設定値“0”は、エラー信号の出力機能が有効化されていることを示している。一致判定信号の値“1”は、一致判定回路40による判定結果が一致であることを示している。一致判定信号の値“0”は、当該判定結果が不一致であることを示している。
メイン状態信号の値“0”は、メインコア11がプログラムを実行している状態(以下、「実行状態」とも称する。)であることを示し、メイン状態信号の値“1”は、メインコア11がプログラムを停止している状態(以下、「ブレーク状態」とも称する。)であることを示している。同様に、ロックステップ状態信号の値“0”は、ロックステップコア12が実行状態であることを示し、ロックステップ状態信号の値“1”は、ロックステップコア12がブレーク状態であることを示している。また、エラー信号の値“1”は、エラー信号が出力されることを示し、エラー信号の値“0”は、エラー信号が出力されないことを示している。
まず、エラー出力設定レジスタ51に格納された設定値が“0”である場合(すなわち、エラー信号の出力機能が有効である場合)のエラー信号の出力方式について説明する。
エラー出力回路52は、メイン処理結果およびロックステップ処理結果が不一致であって、メインコア11およびロックステップコア12が実行状態である場合には、エラー信号の出力を有効にする(すなわち、エラー信号を出力する)。この場合、メインコア11およびロックステップコア12は、当該エラー信号によりブレーク状態に遷移する。
また、エラー出力回路52は、メイン処理結果およびロックステップ処理結果が不一致である場合であっても、メインコア11およびロックステップコア12のいずれかがブレーク状態である場合には、エラー信号の出力を無効にする(すなわち、エラー信号を出力しない)。これにより、例えば、メインコア11が実行状態であり、ロックステップコア12がブレーク状態であることに起因してメイン処理結果およびロックステップ処理結果が不一致となる場合であっても、エラー信号が出力されない。そのため、メインコア11は実行状態を継続できる。
なお、エラー出力回路52は、メイン処理結果およびロックステップ処理結果が不一致である場合であって、メインコア11およびロックステップコア12の両方がブレーク状態である場合には、エラー信号を出力しない。
次に、エラー出力設定レジスタ51に格納された設定値が“1”である場合(すなわち、エラー信号の出力機能が無効である場合)について説明する。この場合、エラー出力回路52は、エラー信号を出力しない。具体的には、エラー出力回路52は、メイン処理結果およびロックステップ処理結果の一致判定結果、メインコア11およびロックステップコア12の状態に関わらず、常にエラー信号を出力しない。
<プロセッサコアの構成>
実施の形態1では、図3に示すエラー信号出力機能と、後述のプロセッサコア10の機能とを利用して、メインコア11のプログラム実行状態を継続しつつ、ブレークポイントの設定によりロックステップコア12をブレークさせて、ロックステップコア12の内部情報(例えば、汎用レジスタの値等)が取得される。また、メイン処理結果とロックステップ処理結果との一致判定機能を利用することで、ロックステップコア12の内部情報がメインコア11の内部情報と同一であることも保証される。以下、実施の形態1に従うプロセッサコア10の構成等について具体的に説明する。
図4は、実施の形態1に従うプロセッサコア10の構成例を示す図である。
図4を参照して、プロセッサコア10は、命令実行部102と、ブレークポイント設定レジスタ104と、ブレークポイント検出部106と、不一致検出設定レジスタ108と、要求出力回路110とを含む。プロセッサコア10は、汎用レジスタ、専用レジスタ等の各種レジスタを含む。以下では、代表的に、図4に示すプロセッサコア10がロックステップコア12であるとして説明する。
命令実行部102は、デバッグ制御回路22からの制御指示(例えば、プログラムの実行指示)に従って処理を実行する。典型的には、命令実行部102は、内部メモリから読み出したプログラムに含まれる命令を命令バッファに格納し、命令バッファに格納された命令の内容を解析し、解析された命令の内容に応じた処理を実行する。命令実行部102は、プログラムの実行アドレスおよびアクセスアドレスをブレークポイント検出部106に出力する。また、命令実行部102は、処理結果を一致判定回路40に出力し、状態信号をエラー制御回路50に出力する。
デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12のブレークポイント設定レジスタ104に、ロックステップコア12(命令実行部102)をブレークするためのブレークポイント(アドレス)を設定する。典型的には、ユーザは、ホストマシン300を用いて、プログラムを解析したい箇所にブレークポイントを設定する。なお、メインコア11のブレークポイント設定レジスタ104には、ブレークポイントは設定されない。このことから、デバッグ制御回路22は、メインコア11とは異なるデバッグに関する設定として、ロックステップコア12に対してブレークポイントを設定する。
ブレークポイント検出部106は、命令実行部102の実行アドレス(あるいは、アクセスアドレス)と、デバッグ制御回路22により設定されたブレークポイントとに基づいて、ブレークポイントへの到達の有無を検出する。具体的には、ブレークポイント検出部106は、ブレークポイント設定レジスタ104に設定されたブレークポイントが、命令実行部102の実行アドレス等と一致した場合に、ブレークポイントへの到達を検出し、ブレークポイント検出信号を要求出力回路110に出力する。
不一致検出設定レジスタ108は、メイン処理結果とロックステップ処理結果とが不一致である場合にブレーク要求信号を命令実行部102に与えるか否かを示す設定値を格納する。デバッグ制御回路22は、エミュレータ200の指示に従って、当該設定値を不一致検出設定レジスタ108に格納する。
要求出力回路110は、予め定められた条件を満たした場合に、命令実行部102をブレークさせるためのブレーク要求信号を出力する。要求出力回路110は、例えば、ANDゲート111,112と、ORゲート114とにより構成される。要求出力回路110は、不一致検出設定レジスタ108に格納された設定値と、一致判定回路40から受けた一致判定信号と、ブレークポイント検出部106から受けたブレーク検出信号とに基づいて、ブレーク要求信号を出力する。具体的には、要求出力回路110は、図5に示す情報テーブル406に従って、ブレーク要求信号を出力する。
図5は、実施の形態1に従うブレーク要求信号の出力機能を説明するための情報テーブル406である。図5を参照して、情報テーブル406において、不一致検出設定レジスタ108に格納された設定値“0”は、メイン処理結果とロックステップ処理結果とが不一致である場合におけるブレーク要求信号の出力機能が無効化されていることを示す。不一致検出設定レジスタ108に設定された値“1”は、これらの処理結果が不一致である場合におけるブレーク要求信号の出力機能が有効化されていることを示す。
ブレークポイント検出信号の値“0”は、ブレークポイントが検出されていないことを示している。ブレークポイント検出信号の値“1”は、ブレークポイントが検出されたことを示している。一致判定信号の値“1”は、一致判定回路40による判定結果が一致であることを示している。一致判定信号の値“0”は、当該判定結果が不一致であることを示している。ブレーク要求信号の値“1”は、ブレーク要求信号が出力されることを示している。ブレーク要求信号の値“0”は、ブレーク要求信号が出力されないことを示している。
実施の形態1では、メインコア11の実行状態を継続しつつロックステップコア12をブレークする際に、ロックステップコア12の内部情報がメインコア11の内部情報と同一であることを保証する。そのため、メイン処理結果とロックステップ処理結果とが不一致である場合には、ロックステップコア12はブレークしないように構成される。すなわち、不一致検出設定レジスタ108に格納された設定値は“0”に設定される。
不一致検出設定レジスタ108に格納された設定値が“0”である場合のブレーク要求信号の出力方式について説明する。
要求出力回路110は、ブレークポイントが検出されていない(すなわち、ブレークポイント検出信号の値が“0”)場合であって、メイン処理結果およびロックステップ処理結果が不一致(すなわち、一致判定信号の値が“0”)である場合には、ブレーク要求信号を出力しない。
また、要求出力回路110は、ブレークポイントが検出された(すなわち、ブレークポイント検出信号の値が“1”)場合であっても、メイン処理結果およびロックステップ処理結果が不一致である場合には、ブレーク要求信号を出力しない。これは、上述したように、ロックステップコア12の内部情報が、メインコア11の内部情報と同一であることを保証するためである。
なお、要求出力回路110は、ブレークポイントが検出されていない場合であって、メイン処理結果およびロックステップ処理結果が一致(すなわち、一致判定信号の値が“1”)である場合には、ブレーク要求信号を出力しない。これは、メインコア11およびロックステップコア12が、ロックステップ動作を正常に実行しているためである。
一方、要求出力回路110は、ブレークポイントが検出された(すなわち、ブレークポイント検出信号の値が“1”)場合であって、かつメイン処理結果およびロックステップ処理結果が一致(すなわち、一致判定信号の値が“1”)である場合には、ブレーク要求信号を命令実行部102に出力する。これにより、メインコア11の内部情報がロックステップコア12の内部情報と同一であることを保証した状態で、ロックステップコア12(具体的には、命令実行部102)をブレークすることができる。
次に、不一致検出設定レジスタ108に設定された値が“1”である場合のブレーク要求信号の出力方式について説明する。
要求出力回路110は、ブレークポイントの検出の有無に関わらず(すなわち、ブレークポイント検出信号の値が“0”か“1”に関わらず)、メイン処理結果およびロックステップ処理結果が不一致(すなわち、一致判定信号の値が“0”)である場合には、ブレーク要求信号を出力する。これは、不一致検出設定レジスタ108に格納された設定値が“0”の場合の出力動作と異なる。
要求出力回路110は、ブレークポイントが検出されていない(すなわち、ブレークポイント検出信号の値が“0”)場合であって、メイン処理結果およびロックステップ処理結果が一致(すなわち、一致判定信号の値が“1”)である場合には、ブレーク要求信号を出力しない。これは、不一致検出設定レジスタ108に格納された設定値が“0”の場合の出力動作と同じである。
要求出力回路110は、ブレークポイントが検出された(すなわち、ブレークポイント検出信号の値が“1”)場合であって、かつメイン処理結果およびロックステップ処理結果が一致(すなわち、一致判定信号の値が“1”)である場合には、ブレーク要求信号を命令実行部102に出力する。これは、不一致検出設定レジスタ108に格納された設定値が“0”の場合の出力動作と同じである。
上記によると、不一致検出設定レジスタ108に設定値“0”を格納しておくことで、ロックステップコア12のブレークポイントが検出され、かつメイン処理結果およびロックステップ処理結果が一致である場合にのみ、ブレーク要求信号が出力される。この場合、ロックステップコア12(命令実行部102)は、メインコア11の内部情報と同一の内部情報を有することが保証された状態でブレークされる。命令実行部102は、ブレーク状態であることを示す状態信号をエラー制御回路50に出力する。
また、メインコア11にはブレークポイントが設定されていない。そのため、メインコア11は、ロックステップコア12がブレーク状態に遷移しても実行状態を維持している。メインコア11は、実行状態であることを示す状態信号をエラー制御回路50に出力する。
このとき、一致判定回路40は、メインコア11が実行状態であり、ロックステップコア12がブレーク状態であるため、メイン処理結果とロックステップ処理結果とが一致していないと判定する。一致判定回路40は、これらの処理結果が不一致であることを示す一致判定信号をエラー制御回路50に出力する。
エラー制御回路50は、メイン処理結果とロックステップ処理結果とが不一致である場合であっても、メインコア11が実行状態であり、ブレークポイントの設定によりロックステップコア12がブレーク状態となっている場合には、エラー信号の出力を無効にする(図3参照)。したがって、メインコア11は、エラー信号によりブレークされることなく実行状態を継続できる。
そして、デバッグ制御回路22は、メインコア11の内部情報と同一であることが保証されたロックステップコア12の内部情報を取得し(読み出し)、エミュレータ200に出力する。ホストマシン300は、当該内部情報をメインコア11の内部情報としてディスプレイ等に表示する。
<処理手順>
図6は、実施の形態1に従うデバッグシステム1000が実行する処理手順を説明するための図である。
ここでは、エミュレータ200は、ホストマシン300に接続されており、セレクタ30を介して、デバッグ制御回路21,22に指示可能な状態であるとする。また、一致判定回路40は、予め定められた周期でメイン処理結果とロックステップ処理結果との一致判定を行ない、一致判定信号をエラー制御回路50に出力する。さらに、ロックステップコア12の不一致検出設定レジスタ108に格納された値は“0”に設定されており、メイン処理結果とロックステップ処理結果とが不一致である場合におけるブレーク要求信号の出力機能は無効化されているとする。
図6を参照して、デバッグ制御回路21は、エミュレータ200の指示に従って、起動指示をメインコア11に与える(ステップS10)。デバッグ制御回路22は、エミュレータ200の指示に従って、起動指示をロックステップコア12に与える(ステップS12)。具体的には、メインコア11およびロックステップコア12は、初期アドレスであるリセットベクタにて、プログラムが停止しているブレーク状態となる。これにより、メインコア11およびロックステップコア12は、デバッグ可能な状態となる。
デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12のブレークポイント設定レジスタにブレークポイントを設定する(ステップS14)。
デバッグ制御回路21は、エミュレータ200の指示に従って、エラー制御回路50のエラー信号出力機能を“有効”に設定する(ステップS16)。具体的には、デバッグ制御回路21は、エラー信号の出力機能を有効にするために、エラー出力設定レジスタ51に値“0”を設定する。なお、ステップS16の処理は、デバッグ制御回路22により実行されてもよい。
エミュレータ200の指示に従って、デバッグ制御回路21はメインコア11にプログラムの実行開始を指示し(ステップS18)、デバッグ制御回路22はロックステップコア12にプログラムの実行開始を指示する(ステップS20)。メインコア11およびロックステップコア12は、当該指示に従って、同時にプログラムの実行を開始する(ステップS22)。このとき、メインコア11およびロックステップコア12はプログラムの実行状態に遷移する。例えば、デバッグ制御回路21がメインコア11にプログラムの実行開始を指示した時点で、ロックステップコア12も同時にプログラムの実行を開始するように構成されていてもよい。
ここで、メインコア11およびロックステップコア12が実行状態であって、一致判定結果が不一致である場合には、エラー制御回路50からエラー信号が出力され、メインコア11およびロックステップコア12がブレーク状態となる。そのため、メインコア11およびロックステップコア12が実行状態を継続している期間においては、両者が同一の処理を実行していることが保証されている。
続いて、ロックステップコア12によるプログラムの実行がブレークポイントに到達した時点における、メイン処理結果およびロックステップ処理結果が一致している場合、ロックステップコア12はブレーク状態に遷移する(ステップS24)。具体的には、要求出力回路110は、ブレークポイントが検出され、かつメイン処理結果およびロックステップ処理結果が一致している場合、ブレーク要求信号を出力する(図5参照)。そのため、ロックステップコア12(命令実行部102)は、ブレーク状態に遷移する。
なお、ブレークポイントが検出されても、メイン処理結果およびロックステップ処理結果が不一致である場合にはブレーク要求信号は出力されない。しかし、この場合、メインコア11およびロックステップコア12が実行状態であって、かつ一致判定結果が不一致であるとの条件が成立するため、エラー制御回路50からエラー信号が出力され、メインコア11およびロックステップコア12がブレーク状態となる。
ステップS24において、ロックステップコア12がブレーク状態に遷移すると、メインコア11は実行状態であるため、一致判定結果は不一致となる。しかし、一致判定結果が不一致である場合であっても、メインコア11が実行状態であって、かつロックステップコア12がブレーク状態である場合には、エラー制御回路50はエラー信号の出力を無効化する(ステップS26)。すなわち、エラー信号は出力されず、メインコア11の実行状態は継続される。
デバッグ制御回路22は、エミュレータ200の指示に従って、ブレーク状態に遷移したロックステップコア12から内部情報を取得する(ステップS26)。デバッグ制御回路22は、読み出した内部情報をエミュレータ200に出力する(ステップS28)。
<利点>
実施の形態1によると、メインコアの実行状態を維持しつつロックステップコアをブレーク状態にすることで、ロックステップコアの内部情報を取得できる。また、ロックステップコアの内部情報は、メインコアの内部情報と同一であることも保証される。すなわち、メインコアの実行状態を維持したまま内部情報を取得するノンブレークデバッグを実現できる。これにより、メインコアの動作を停止する必要がないため、デバッグ作業を効率的に進めることができるとともに、動作停止に起因する電子部品(例えば、モータ)の破損等を防止することもできる。
<実施の形態2>
実施の形態2では、ロックステップコア12を利用したデバッグ機能の他の例について説明する。
プログラミングミスとして、未初期化レジスタへのアクセス違反がしばしば発生する。未初期化レジスタとは、初期化すべきレジスタ(以下、「初期化対象レジスタ」とも称する。)であって、初期化漏れにより未だ初期化されていないレジスタである。コンパイラ等で静的な解析をすることで未初期化レジスタの検出は可能だが、絶対アドレスアクセスでの確認に限定される。
例えば、プログラムコード「ld.w 0x0[r10], r11」のように、r10番地のアドレスに格納されている値をr11番地に読み出す場合、r10番地の値は、アクセス前のプログラムの流れにより変動する可能性がある。そのため、アクセス先が未初期化かどうか静的解析では検出することができない。
そこで、実施の形態2では、ロックステップコア12を利用して、初期化対象レジスタの初期化漏れを適切に検出して、デバッグ作業を効率化する方式について説明する。なお、実施の形態2の<全体構成>は、実施の形態1のそれと同様である。
<プロセッサコアの構成>
実施の形態2において、ロックステップコア12Aにはメインコア11Aとは異なるデバッグ設定が行なわれる。具体的には、メインコア11の初期化対象レジスタおよびロックステップコア12の初期化対象レジスタにそれぞれ異なる値が設定された状態で、デバッグ対象のプログラムが実行される。ここで、初期化対象レジスタの初期化漏れが発生していた場合(すなわち、未初期化レジスタが存在していた場合)を想定する。
この場合、メインコア11およびロックステップコア12が未初期化レジスタにアクセスすると、それぞれ異なる値を読み出すことになる。そのため、メイン処理結果とロックステップ処理結果が不一致となり、エラー信号によりメインコア11およびロックステップコア12がブレークされる。このように、メインコア11およびロックステップコア12がブレークされることで、未初期化レジスタへのアクセス違反を検出することができる。以下、実施の形態2に従うプロセッサコア10の構成等について具体的に説明する。
図7は、実施の形態2に従うプロセッサコア10Aの構成例を示す図である。プロセッサコア10A(メインコア11A,ロックステップコア12A)は、図1に示すプロセッサコア10(メインコア11,ロックステップコア12)と対応するが、実施の形態1との区別のため、便宜上「A」といった追加の符号を付している。
図7を参照して、プロセッサコア10Aは、命令実行部102Aと、モニタコード格納部122と、レジスタ群124とを含む。レジスタ群124は、汎用レジスタ、専用レジスタ等の各種レジスタを含む。
デバッグ制御回路20は、エミュレータ200の指示に従って、モニタコード格納部122に初期化プログラムを転送する。モニタコード格納部122には、転送された初期化プログラムが格納される。
命令実行部102Aは、デバッグ制御回路20からの制御指示に従って処理を実行する。命令実行部102Aは、モニタコード格納部122に格納されている初期化プログラムを実行して、レジスタ群124に含まれる各初期化対象レジスタに、初期化プログラムに従う値を格納する。
デバッグ制御回路21からメインコア11Aに転送される初期化プログラムに従う値は、デバッグ制御回路22からロックステップコア12Aに転送される初期化プログラムに従う値と異なる。そのため、メインコア11Aにおける初期化対象レジスタに設定される値は、ロックステップコア12Aにおける初期化対象レジスタに設定される値と異なる。
メインコア11Aおよびロックステップコア12Aの各々の命令実行部102Aは、初期化プログラムに従う値が初期化対象レジスタに設定された後、デバッグ対象のプログラムの実行を開始する。各々の命令実行部102Aは、デバッグ対象のプログラムの実行開始時に、当該プログラムにより指定される初期化対象レジスタに当該プログラムに従う初期値を書き込む。各々の命令実行部102Aは、レジスタ群124にアクセスしながら処理結果を一致判定回路40に出力する。
ここで、デバッグ対象のプログラムの実行により、すべての初期対象レジスタへ適切な初期値が書込まれた(すなわち、初期化漏れがない)場合には、未初期化レジスタは存在しない。そのため、メインコア11Aの初期化対象レジスタおよびロックステップコア12Aの初期化対象レジスタには同一の値が設定された状態となる。
一方、初期化対象レジスタへの初期値の書き込み漏れ(すなわち、初期化漏れ)が発生している場合には、未初期化レジスタが存在することになる。そのため、メインコア11Aの未初期化レジスタおよびロックステップコア12Aの未初期化レジスタには異なる値が設定された状態となる。この場合、メインコア11Aの命令実行部102Aが当該未初期化レジスタにアクセスして実行した処理結果は、ロックステップコア12Aの命令実行部102Aが当該未初期化レジスタにアクセスして実行した処理結果と異なる。
そのため、一致判定回路40は、メイン処理結果とロックステップ処理結果とが不一致であることを示す一致判定信号をエラー制御回路50に出力する。メインコア11Aおよびロックステップコア12Aは、プログラム実行状態であるため、当該実行状態であることを示す状態信号をエラー制御回路50に出力する。
エラー制御回路50は、メインコア11Aおよびロックステップコア12Aが実行状態であって、かつメイン処理結果とロックステップ処理結果とが不一致であるため、エラー信号を出力する(図3参照)。したがって、メインコア11Aおよびロックステップコア12Aは、エラー信号によりブレークされる。このように、メインコア11Aおよびロックステップコア12Aが未初期化レジスタにアクセスした場合、メインコア11Aおよびロックステップコア12Aはブレーク状態に遷移する。
デバッグ制御回路21は、ブレーク状態に遷移したメインコア11Aの内部情報を取得し、エミュレータ200に出力する。デバッグ制御回路22は、ブレーク状態に遷移したロックステップコア12Aの内部情報を取得し、エミュレータ200に出力する。ホストマシン300は、これらの内部情報をディスプレイ等に表示する。
<処理手順>
図8は、実施の形態2に従うデバッグシステム1000が実行する処理手順を説明するための図である。
ここでは、エミュレータ200は、ホストマシン300に接続されており、セレクタ30を介して、デバッグ制御回路21,22に指示可能な状態であるとする。また、一致判定回路40は、予め定められた周期でメイン処理結果とロックステップ処理結果との一致判定を行ない、一致判定信号をエラー制御回路50に出力する。
図8を参照して、デバッグ制御回路21は、エミュレータ200の指示に従って、起動指示をメインコア11Aに与える(ステップS30)。デバッグ制御回路22は、エミュレータ200の指示に従って、起動指示をロックステップコア12Aに与える(ステップS32)。
デバッグ制御回路21は、エミュレータ200の指示に従って、メインコア11Aのすべての初期化対象レジスタを、例えば、値“0h”で初期化する(ステップS34)。具体的には、デバッグ制御回路21は、値“0h”で初期化するための初期化プログラムをメインコア11Aに転送する。メインコア11Aにより当該初期化プログラムが実行されることで初期化対象レジスタに値“0h”が設定される。
デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12Aのすべての初期化対象レジスタを、例えば、値“Fh”で初期化する(ステップS36)。具体的には、デバッグ制御回路22は、値“Fh”で初期化するための初期化プログラムを転送する。ロックステップコア12Aにより当該初期化プログラムが実行されることで初期化対象レジスタに値“Fh”が設定される。なお、ロックステップコア12Aの初期化対象レジスタに設定される値は、メインコア11Aの初期化対象レジスタに設定される値と異なっていればよい。
デバッグ制御回路21は、エミュレータ200の指示に従って、エラー制御回路50のエラー信号出力機能を“有効”に設定する(ステップS38)。エミュレータ200の指示に従って、デバッグ制御回路21はメインコア11Aにプログラムの実行開始を指示し(ステップS40)、デバッグ制御回路22はロックステップコア12Aにプログラムの実行開始を指示する(ステップS42)。
続いて、メインコア11Aおよびロックステップコア12Aは、当該指示に従って、同時にデバッグ対象のプログラムの実行を開始する(ステップS44)。このとき、メインコア11Aおよびロックステップコア12Aはプログラムの実行状態に遷移する。また、メインコア11Aおよびロックステップコア12Aの各々は、デバッグ対象のプログラムに従う初期値を、当該プログラムにより指定された初期化対象レジスタに書き込む。
ここで、本来であれば、各初期化対象レジスタに、対応する初期値が書込まれているはずである。しかし、特定の初期化対象レジスタに対して初期化漏れがある(すなわち、当該特定の初期化対象レジスタが未初期化レジスタである)場合には、メインコア11Aおよびロックステップコア12Aによる未初期化レジスタへのアクセスが発生する(ステップS46)。このとき、メインコア11Aが当該未初期化レジスタにアクセスした際に読み出す値は“0h”であり、ロックステップコア12Aが当該当該未初期化レジスタにアクセスした際に読み出す値は“Fh”であるため、メイン処理結果とロックステップ処理結果とは不一致となる。
ステップS44において、メインコア11Aおよびロックステップコア12Aは実行状態に遷移しており、ステップS46におけるアクセス違反によりメイン処理結果とロックステップ処理結果とは不一致となる。そのため、エラー制御回路50は、メインコア11Aおよびロックステップコア12Aにエラー信号を出力する(ステップS48,S50)。メインコア11Aおよびロックステップコア12Aは、エラー信号によりブレーク状態に遷移する(ステップS52)。
デバッグ制御回路21は、エミュレータ200の指示に従って、ブレーク状態に遷移したメインコア11Aから内部情報を取得する(ステップS54)。デバッグ制御回路22は、エミュレータ200の指示に従って、ブレーク状態に遷移したロックステップコア12Aから内部情報を取得する(ステップS56)。デバッグ制御回路21および22は、読み出した内部情報をエミュレータ200に出力する(ステップS58)。
<利点>
実施の形態2によると、プログラミングミスとして頻発する未初期化レジスタへのアクセス違反を動的に検出できる。これにより、コンパイラおよびコード解析による静的検出、あるいは大規模検出回路を搭載する必要がなく、デバッグ作業をより効率的に行なうことができる。
[実施の形態3]
実施の形態3では、ロックステップコア12を利用したデバッグ機能のさらに他の例について説明する。
デバッグにおいてブレーク時点より過去の状態の内部情報を取得するためには、ブレークポイントを設定し直した後に、プログラムを再実行する必要があった。しかし、プログラムがブレークポイントに到達するまで多大な時間を要する場合も多く、また、特定条件下でのみブレークポイントに到達する場合には、再実行して特定条件を再現させるのも労力が必要であった。
そこで、実施の形態3では、メインコア11がブレークした際に、ブレーク時点の内部情報とブレーク時点よりも過去のある時点の内部情報とを同時に取得することで、デバッグ作業を効率化する方式について説明する。なお、実施の形態3の<全体構成>は、実施の形態1のそれと同様である。
<プロセッサコアの構成>
実施の形態3において、ロックステップコア12Bにはメインコア11Bとは異なるデバッグ設定が行なわれる。具体的には、ロックステップコア12の命令バッファのみに任意サイクル分の命令が注入(追加)され、ロックステップコア12のプログラムの実行をメインコア11のプログラムの実行よりも任意サイクル分遅らせる。
そして、メインコア11がブレーク状態に遷移した場合に、同時にロックステップコア12をブレーク状態に遷移させる。ブレーク状態に遷移したメインコア11とロックステップコア12の各内部情報を取得することで、ブレーク時点での内部情報と、ブレーク時点よりも任意サイクル分前の時点での内部情報とを取得する。以下、実施の形態3に従うプロセッサコア10の構成等について具体的に説明する。
図9は、実施の形態3に従うプロセッサコア10Bの構成例を示す図である。プロセッサコア10A(メインコア11B,ロックステップコア12B)は、図1に示すプロセッサコア10(メインコア11,ロックステップコア12)と対応するが、実施の形態1および2との区別のため、便宜上「B」といった追加の符号を付している。
図9を参照して、プロセッサコア10Bは、命令実行部102Bと、命令バッファ132とを含む。図9では、実施の形態3に関するプロセッサコア10Bの構成のみを示しているが、実施の形態1および実施の形態2のプロセッサコアの構成を含んでいてもよい。
命令バッファ132は、内部メモリから読み出された命令を格納する。デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12Bの命令バッファ132にユーザにより指定された所定サイクル分の命令を注入する。ロックステップコア12Bの命令実行部102Bは、命令バッファ132に注入された所定サイクル分の命令を実行した後に、デバッグ対象のプログラムにおける各命令を実行する。
一方、メインコア11Bの命令バッファ132には、所定サイクル分の命令が注入されない。そのため、ロックステップコア12Bの命令実行部102Bは、メインコア11Bの命令実行部102Bよりも所定サイクル分遅れて、デバッグ対象のプログラムを実行する。
ここで、プログラムの実行中において、メイン処理結果およびロックステップ処理結果は不一致となるため、エラー出力機能が有効化されている場合にはエラー信号が出力されて、メインコア11Bおよびロックステップコア12Bがブレーク状態に遷移してしまう。そのため、デバッグ制御回路21(あるいは、デバッグ制御回路22)は、エミュレータ200の指示に従って、エラー制御回路50のエラー出力機能を無効化する。具体的には、エラー出力設定レジスタ51に値“1”が設定される(図3参照)。
そして、何らかの要因によりメインコア11Bがブレーク状態に遷移した場合、同時にロックステップコア12Bもブレーク状態に遷移する。例えば、メインコア11Bがブレーク状態に遷移すると、メインコア11Bは当該ブレーク状態に遷移したことを示す状態信号をロックステップコア12Bに出力する。ロックステップコア12Bは、当該状態信号を受けるとブレーク状態に遷移する。なお、上記構成に限られず、2つのプロセッサコア10のうちの一方がブレーク状態に遷移した場合に、他方もブレーク状態に遷移させるように構成されていればよい。
デバッグ制御回路21は、ブレーク状態に遷移したメインコア11Bの内部情報(すなわち、ブレーク時点の内部情報)を取得し、エミュレータ200に出力する。デバッグ制御回路22は、ブレーク状態に遷移したロックステップコア12Bの内部情報(すなわち、ブレーク時点よりも所定サイクル分前の内部情報)を取得し、エミュレータ200に出力する。ホストマシン300は、これらの内部情報をディスプレイ等に表示する。
<処理手順>
図10は、実施の形態3に従うデバッグシステム1000が実行する処理手順を説明するための図である。ここでは、エミュレータ200は、ホストマシン300に接続されており、セレクタ30を介して、デバッグ制御回路21,22に指示可能な状態であるとする。
図10を参照して、デバッグ制御回路21は、エミュレータ200の指示に従って、起動指示をメインコア11Bに与える(ステップS70)。デバッグ制御回路22は、エミュレータ200の指示に従って、起動指示をロックステップコア12Bに与える(ステップS72)。
デバッグ制御回路22は、エミュレータ200の指示に従って、ロックステップコア12Bの命令バッファ132に所定サイクル分の命令を注入する(ステップS74)。デバッグ制御回路21は、エミュレータ200の指示に従って、エラー制御回路50のエラー信号出力機能を“無効”に設定する(ステップS76)。
エミュレータ200の指示に従って、デバッグ制御回路21はメインコア11Bにプログラムの実行開始を指示し(ステップS78)、デバッグ制御回路22はロックステップコア12Bにプログラムの実行開始を指示する(ステップS80)。
メインコア11Bはデバッグ対象のプログラムの実行を開始し、ロックステップコア12Bは、注入された所定サイクル分の命令を実行した後、デバッグ対象のプログラムの実行を開始する。すなわち、ロックステップコア12Bは、メインコア11Bよりも所定サイクル分遅れて、デバッグ対象のプログラムを実行する。なお、メイン処理結果およびロックステップ処理結果は不一致であるが、エラー制御回路50の出力機能は無効化されているため、メインコア11Bおよびロックステップコア12Bの実行状態が継続される。
続いて、メインコア11Bがブレーク状態に遷移すると(ステップS84)、ロックステップコア12Bもブレーク状態に遷移する(ステップS86)。例えば、ユーザは、ホストマシン300を用いて、メインコア11Bを強制的にブレーク状態に遷移させる。
デバッグ制御回路21は、エミュレータ200の指示に従って、ブレーク状態に遷移したメインコア11Bから内部情報を取得する(ステップS88)。デバッグ制御回路22は、エミュレータ200の指示に従って、ブレーク状態に遷移したロックステップコア12Bから内部情報を取得する(ステップS90)。
デバッグ制御回路21および22は、取得した内部情報をエミュレータ200に出力する(ステップS92)。デバッグ制御回路21により取得された内部情報はブレーク時点の内部情報として利用され、デバッグ制御回路22により取得された内部情報は、ブレーク時点よりも所定サイクル分前の内部情報として利用される。
<利点>
実施の形態3によると、ブレーク時点の内部情報と、ブレーク時点よりも所定サイクル分前の時点での内部情報を同時に取得できる。また、ブレーク時点よりも所定サイクル分前の時点から、ステップ実行等を用いたデバッグを行ない、ブレーク時点までの動作を確認できる。これにより、ブレークした原因の究明が容易となりデバッグ作業をより効率化することができる。
[その他]
上述した実施の形態において、その他の実施の形態で説明した処理や構成を適宜採用して実施する場合であってもよい。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
10,10A,10B プロセッサコア、11,11A,11B メインコア、12,12A,12B ロックステップコア、20,21,22 デバッグ制御回路、30 セレクタ、40 一致判定回路、50 エラー制御回路、51 エラー出力設定レジスタ、52 エラー出力回路、100 マイクロコンピュータ、102,102A,102B 命令実行部、104 ブレークポイント設定レジスタ、106 ブレークポイント検出部、108 不一致検出設定レジスタ、110 要求出力回路、111,112 ANDゲート、114 ORゲート、122 モニタコード格納部、124 レジスタ群、132 命令バッファ、200 エミュレータ、300 ホストマシン、402,406 情報テーブル、1000 デバッグシステム。

Claims (12)

  1. 第1プロセッサコアと、
    前記第1プロセッサコアと冗長な構成を有する第2プロセッサコアと、
    前記第1プロセッサコアのための第1デバッグ回路と、
    前記第2プロセッサコアのための第2デバッグ回路とを備え、
    前記第2デバッグ回路は、前記第2プロセッサコアに対して前記第1プロセッサコアとは異なるデバッグに関する設定を行ない、
    前記第1プロセッサコアの第1処理結果と前記第2プロセッサコアの第2処理結果とが一致しているか否かを判定する判定回路と、
    前記第1および第2プロセッサコアによるプログラムの実行を停止させるエラー信号を出力可能なエラー制御回路とをさらに備え、
    前記第1処理結果と前記第2処理結果とが不一致である場合であっても、前記デバッグに関する設定に基づいて、前記第1プロセッサコアが前記プログラムを実行しており前記第2プロセッサコアが前記プログラムの実行を停止している場合には、前記エラー制御回路は、前記エラー信号の出力を無効にする、半導体装置。
  2. 前記第1および第2デバッグ回路の少なくとも一方を選択して、選択されたデバッグ回路にエミュレータからの指示を与える選択回路をさらに備え、
    前記第1および第2デバッグ回路の各々は、前記エミュレータからの指示に従って、対応するプロセッサコアに対してデバッグに関する設定を行なう、請求項1に記載の半導体装置。
  3. 前記エラー制御回路は、前記第1および第2プロセッサコアが前記プログラムを実行している状態であって、かつ前記第1処理結果と前記第2処理結果とが不一致である場合には、前記エラー信号の出力を有効にする、請求項1に記載の半導体装置。
  4. 前記第2デバッグ回路は、前記第2プロセッサコアによる前記プログラムの実行を停止させるブレークポイントを設定し、
    前記第2プロセッサコアによる前記プログラムの実行が前記ブレークポイントに到達した時点における前記第1処理結果および前記第2処理結果が一致している場合、前記第2プロセッサコアは、前記プログラムの実行を停止する、請求項1に記載の半導体装置。
  5. 前記第2デバッグ回路は、前記プログラムの実行を停止している前記第2プロセッサコアの内部情報を取得する、請求項1に記載の半導体装置。
  6. 前記第2プロセッサコアは、
    前記プログラムに含まれる命令を実行する命令実行部と、
    前記命令実行部の実行アドレスと、前記第2デバッグ回路により設定されたブレークポイントとに基づいて、前記ブレークポイントへの到達の有無を検出するブレークポイント検出回路と、
    前記ブレークポイント検出回路の検出結果と、前記判定回路の判定結果とに基づいて、前記プログラムの実行を停止させるブレーク要求信号を前記命令実行部へ出力する要求出力回路とを含み、
    前記要求出力回路は、前記ブレークポイントへの到達が検出され、かつ前記第1処理結果および前記第2処理結果が一致している場合に、前記ブレーク要求信号を前記命令実行部へ出力する、請求項4に記載の半導体装置。
  7. 第1プロセッサコアと、
    前記第1プロセッサコアと冗長な構成を有する第2プロセッサコアと、
    前記第1プロセッサコアのための第1デバッグ回路と、
    前記第2プロセッサコアのための第2デバッグ回路とを備え、
    前記第2デバッグ回路は、前記第2プロセッサコアに対して前記第1プロセッサコアとは異なるデバッグに関する設定を行ない、
    前記第1プロセッサコアの第1処理結果と前記第2プロセッサコアの第2処理結果とが一致しているか否かを判定する判定回路と、
    前記判定回路の判定結果に基づいて、前記第1および第2プロセッサコアによるプログラムの実行を停止させるエラー信号を出力可能なエラー制御回路とをさらに備え、
    前記第1プロセッサコアの初期化対象レジスタには第1の値が設定され、
    前記第2プロセッサコアの初期化対象レジスタには前記第1の値とは異なる第2の値が設定され、
    前記第1および第2プロセッサコアの各々は、前記第1の値および前記第2の値が設定された後に前記プログラムの実行を開始して、前記プログラムにより指定される初期化対象レジスタに前記プログラムに従う初期値を書き込む、半導体装置。
  8. 前記第1および第2プロセッサコアが前記プログラムを実行している状態であって、かつ前記第1処理結果と前記第2処理結果とが不一致である場合に前記エラー制御回路から出力される前記エラー信号に基づいて、前記第1プロセッサコアおよび前記第2プロセッサコアの各々は、前記プログラムの実行を停止する、請求項7に記載の半導体装置。
  9. 前記第1デバッグ回路は、停止した前記第1プロセッサコアの内部情報を取得し、前記第2デバッグ回路は、停止した前記第2プロセッサコアの内部情報を取得する、請求項8に記載の半導体装置。
  10. 前記エラー制御回路による前記エラー信号の出力機能は無効化されており、
    前記第2デバッグ回路は、所定サイクル分の命令を前記第2プロセッサコアの命令バッファに注入し、
    前記第2プロセッサコアは、前記第1プロセッサコアに対して前記所定サイクル分だけ遅れて前記プログラムを実行し、
    前記第1プロセッサコアによる前記プログラムの実行が停止した場合、前記第2プロセッサコアは前記プログラムの実行を停止する、請求項1に記載の半導体装置。
  11. 前記第1デバッグ回路は、停止した前記第1プロセッサコアの内部情報を取得し、前記第2デバッグ回路は、停止した前記第2プロセッサコアの内部情報を取得する、請求項10に記載の半導体装置。
  12. 第1プロセッサコアと、前記第1プロセッサコアと冗長な構成を有する第2プロセッサコアとを備えるコンピュータにより実行されるデバッグ方法であって、
    前記第2プロセッサコアに対して前記第1プロセッサコアとは異なるデバッグに関する設定を実行するステップと、
    前記第1プロセッサコアの第1処理結果と前記第2プロセッサコアの第2処理結果とが一致しているか否かを判定するステップと、
    前記第1および第2プロセッサコアによるプログラムの実行を停止させるエラー信号を出力するステップとを含み、
    前記出力するステップは、前記第1処理結果と前記第2処理結果とが不一致である場合であっても、前記デバッグに関する設定に基づいて、前記第1プロセッサコアが前記プログラムを実行しており前記第2プロセッサコアが前記プログラムの実行を停止している場合には、前記エラー信号の出力を無効にするステップを含む、デバッグ方法。
JP2018100239A 2018-05-25 2018-05-25 半導体装置、およびデバッグ方法 Active JP6981920B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2018100239A JP6981920B2 (ja) 2018-05-25 2018-05-25 半導体装置、およびデバッグ方法
US16/406,845 US10970191B2 (en) 2018-05-25 2019-05-08 Semiconductor device and debug method
CN201910398237.2A CN110532164B (zh) 2018-05-25 2019-05-14 半导体设备和调试方法
EP19175046.2A EP3572943B1 (en) 2018-05-25 2019-05-17 Semiconductor device and debug method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018100239A JP6981920B2 (ja) 2018-05-25 2018-05-25 半導体装置、およびデバッグ方法

Publications (2)

Publication Number Publication Date
JP2019204388A true JP2019204388A (ja) 2019-11-28
JP6981920B2 JP6981920B2 (ja) 2021-12-17

Family

ID=66589407

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018100239A Active JP6981920B2 (ja) 2018-05-25 2018-05-25 半導体装置、およびデバッグ方法

Country Status (4)

Country Link
US (1) US10970191B2 (ja)
EP (1) EP3572943B1 (ja)
JP (1) JP6981920B2 (ja)
CN (1) CN110532164B (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10922203B1 (en) * 2018-09-21 2021-02-16 Nvidia Corporation Fault injection architecture for resilient GPU computing
CN115016997B (zh) * 2022-08-08 2022-11-18 南京芯驰半导体科技有限公司 慢时钟域lockstep模块中寄存器的快速诊断系统及方法
US11892505B1 (en) * 2022-09-15 2024-02-06 Stmicroelectronics International N.V. Debug and trace circuit in lockstep architectures, associated method, processing system, and apparatus

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781753A (en) * 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
CN1279449C (zh) * 1994-12-28 2006-10-11 株式会社东芝 微处理器
US7526422B1 (en) * 2001-11-13 2009-04-28 Cypress Semiconductor Corporation System and a method for checking lock-step consistency between an in circuit emulation and a microcontroller
US7296259B2 (en) * 2002-09-11 2007-11-13 Agere Systems Inc. Processor system with cache-based software breakpoints
US20050154573A1 (en) * 2004-01-08 2005-07-14 Maly John W. Systems and methods for initializing a lockstep mode test case simulation of a multi-core processor design
JP2008009721A (ja) * 2006-06-29 2008-01-17 Nec Electronics Corp 評価システム及びその評価方法
JP2009271894A (ja) * 2008-05-12 2009-11-19 Toshiba Corp 半導体集積回路
JP2010117813A (ja) 2008-11-12 2010-05-27 Nec Electronics Corp デバッグシステム、デバッグ方法、デバッグ制御方法及びデバッグ制御プログラム
US8275977B2 (en) * 2009-04-08 2012-09-25 Freescale Semiconductor, Inc. Debug signaling in a multiple processor data processing system
US8108730B2 (en) * 2010-01-21 2012-01-31 Arm Limited Debugging a multiprocessor system that switches between a locked mode and a split mode
US8058916B2 (en) * 2010-04-15 2011-11-15 Xilinx, Inc. Lockstep synchronization and maintenance
US9146835B2 (en) * 2012-01-05 2015-09-29 International Business Machines Corporation Methods and systems with delayed execution of multiple processors
JP2014132384A (ja) 2013-01-04 2014-07-17 Renesas Electronics Corp マイクコンピュータ及びその制御方法
US9891917B2 (en) * 2013-03-06 2018-02-13 Infineon Technologies Ag System and method to increase lockstep core availability
US9384109B2 (en) * 2014-04-17 2016-07-05 Texas Instruments Deutschland Gmbh Processor with debug pipeline
JP6360387B2 (ja) * 2014-08-19 2018-07-18 ルネサスエレクトロニクス株式会社 プロセッサシステム、エンジン制御システム及び制御方法
US10102050B2 (en) * 2015-02-05 2018-10-16 Microchip Technology Incorporated System and method for generating cross-core breakpoints in a multi-core microcontroller
US10776115B2 (en) * 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
CN105354136B (zh) * 2015-09-25 2018-06-15 华为技术有限公司 一种调试方法、多核处理器和调试设备
CN105224454B (zh) * 2015-09-25 2018-06-05 华为技术有限公司 一种调试方法、多核处理器和调试设备
US9852045B2 (en) * 2015-10-13 2017-12-26 International Business Machines Corporation Debugging program code
JP2019061392A (ja) * 2017-09-26 2019-04-18 ルネサスエレクトロニクス株式会社 マイクロコントローラ及びマイクロコントローラの制御方法
US10802932B2 (en) * 2017-12-04 2020-10-13 Nxp Usa, Inc. Data processing system having lockstep operation
US10621067B1 (en) * 2018-02-05 2020-04-14 Xilinx, Inc. Data unit breakpointing circuits and methods
US11036578B2 (en) * 2018-04-12 2021-06-15 Samsung Electronics Co., Ltd. Semiconductor memory devices and memory systems including the same
US10949203B2 (en) * 2019-06-29 2021-03-16 Intel Corporation Technologies for ensuring functional safety of an electronic device

Also Published As

Publication number Publication date
EP3572943A1 (en) 2019-11-27
US20190361786A1 (en) 2019-11-28
CN110532164B (zh) 2024-01-09
US10970191B2 (en) 2021-04-06
EP3572943B1 (en) 2023-05-10
CN110532164A (zh) 2019-12-03
JP6981920B2 (ja) 2021-12-17

Similar Documents

Publication Publication Date Title
US6915416B2 (en) Apparatus and method for microcontroller debugging
US8261130B2 (en) Program code trace signature
US7533302B2 (en) Trace and debug method and system for a processor
US8136096B1 (en) Backward post-execution software debugger
TWI544410B (zh) 利用執行單步驟以進行編碼診斷
JPH011039A (ja) インサーキット・エミュレータ
EP3572943B1 (en) Semiconductor device and debug method
US20080312900A1 (en) Simulation apparatus and simulation method
TWI361978B (en) Method for debugging a computer system
US20110179399A1 (en) Establishing a useful debugging state for multithreaded computer program
US9405315B2 (en) Delayed execution of program code on multiple processors
US20070226418A1 (en) Processor and method for controlling processor
US7428661B2 (en) Test and debug processor and method
US20130238948A1 (en) Semiconductor integrated circuit
US20240231347A1 (en) Fault injection test method and apparatus, and fault injection method
JPS59183443A (ja) デバツグ装置
CN118093248A (zh) Str调试的故障确定方法、装置、电子设备及存储介质
JPH01306933A (ja) デバッグ装置
JP2004185356A (ja) デバッグ装置
JPH07152603A (ja) デバッグ装置
US20080072212A1 (en) Semiconductor integrated circuit including a monitor unit
JPH01214942A (ja) インサーキット・エミュレータ
JPH05108402A (ja) デバツグ装置
JPH0695913A (ja) デバッグ装置
KR19990079357A (ko) 마이크로프로세서를 위한 에뮬레이터의 트레이스 버퍼 인에이블신호 발생 회로

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201008

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210930

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: 20211102

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211118

R150 Certificate of patent or registration of utility model

Ref document number: 6981920

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150