(57)【要約】【課題】複数のカウンタの、１つのタイミングでのカウンタ値を、順次読み出す。【解決手段】カウンタ読み出し回路は、クロック信号毎にカウントを行うカウンタを各々が含む、複数のカウンタレジスタと、複数のカウンタレジスタの内の選択されたカウンタレジスタのカウンタ値に、複数のカウンタレジスタの全部に共通な第１のタイミングから、選択されたカウンタレジスタが選択された第２のタイミングまでの総クロック数を加算して出力する演算器を含む、出力データ演算器と、を備える。【選択図】図５
2020086934.tif 000002
【特許請求の範囲】
【請求項１】
クロック毎にカウントを行うカウンタを各々が含む、複数のカウンタレジスタと、
前記複数のカウンタレジスタの内の選択されたカウンタレジスタのカウンタ値に、前記複数のカウンタレジスタの全部に共通な第１のタイミングから、前記選択されたカウンタレジスタが選択された第２のタイミングまでの総クロック数を加算して出力する演算器を含む、出力データ演算器と、
を備える、
カウンタ読み出し回路。
【請求項２】
請求項１に記載のカウンタ読み出し回路であって、
前記総クロック数を算出するカウンタデータ演算器
を更に備え、
前記複数のカウンタレジスタの各々は、
カウンタ値がゼロになったら、その旨を表すフラグをセットする、カウントゼロイネーブル回路を更に含み、
前記カウンタは、
前記フラグがセットされたら、カウントを停止するとともに、前記カウンタデータ演算器によって算出された前記総クロック数をカウンタ値に設定し、
前記出力データ演算器は、
前記選択されたカウンタの前記フラグがセットされていなければ、前記演算器によって算出された値を出力し、前記選択されたカウンタの前記フラグがセットされていれば、前記カウンタに設定されているカウンタ値を出力する、セレクタを更に含む、
カウンタ読み出し回路。
【請求項３】
請求項２に記載のカウンタ読み出し回路であって、
Ｌ進カウンタ（Ｌは、予め定められた数）
を更に備え、
前記演算器及び前記カウンタデータ演算器の各々は、
前記Ｌ進カウンタの上位桁の値と前記予め定められた数との積と、前記Ｌ進カウンタの下位桁の値と、の和により、前記総クロック数を算出する、
カウンタ読み出し回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カウンタ読み出し回路に関する。
【背景技術】
【０００２】
下記の特許文献１には、複数のカウンタのカウンタ値を読み出すカウンタ読み出し回路が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−９８６１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のカウンタのカウンタ値を順次読み出そうとする場合、各カウンタから読み出されるカウンタ値は、当該カウンタの読み出し順序が回ってきたタイミングでのカウンタ値となる。しかしながら、全部のカウンタの、１つの共通なタイミングでのカウンタ値を、順次読み出したいという要請がある。
【０００５】
本発明は、上記に鑑みてなされたものであって、複数のカウンタの、１つのタイミングでのカウンタ値を、順次読み出すことを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面のカウンタ読み出し回路は、クロック信号毎にカウントを行うカウンタを各々が含む、複数のカウンタレジスタと、複数のカウンタレジスタの内の選択されたカウンタレジスタのカウンタ値に、複数のカウンタレジスタの全部に共通な第１のタイミングから、選択されたカウンタレジスタが選択された第２のタイミングまでの総クロック数を加算して出力する演算器を備える。
【発明の効果】
【０００７】
本発明によれば、複数のカウンタの、１つのタイミングでのカウンタ値を、順次読み出すことが可能となる。
【図面の簡単な説明】
【０００８】
【図１】第１の比較例のシステム構成を示す図である。
【図２】第１の比較例の動作を示すタイミングチャートである。
【図３】第２の比較例のスレーブ回路の構成を示す図である。
【図４】第２の比較例の動作を示すタイミングチャートである。
【図５】実施の形態のスレーブ回路の構成を示す図である。
【図６】実施の形態のスレーブ回路の一部の内部構成を示す図である。
【図７】実施の形態の動作を示すタイミングチャートである。
【図８】実施の形態の動作を示すタイミングチャートである。
【発明を実施するための形態】
【０００９】
以下に、本発明のカウンタ読み出し回路の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。各実施の形態は例示であり、異なる実施の形態で示した構成の部分的な置換又は組み合わせが可能であることは言うまでもない。第２の実施の形態以降では第１の実施形態と共通の事柄についての記述を省略し、異なる点についてのみ説明する。特に、同様の構成による同様の作用効果については実施形態毎には逐次言及しない。
【００１０】
＜実施の形態＞
以下、実施の形態について説明するが、実施の形態の理解を容易にするため、先に比較例について説明する。
【００１１】
（第１の比較例）
図１は、第１の比較例のシステム構成を示す図である。システム１００は、マスタ回路１０１と、複数（本開示では、Ｎ個（Ｎは、自然数）とする）のスレーブ回路１０２−１から１０２−Ｎを含む。
【００１２】
スレーブ回路１０２−１は、制御回路１１１と、複数（本開示では、Ｍ個（Ｍは自然数）とする）のカウンタ１１２−１から１１２−Ｍと、読み出し回路１１３と、を含む。
【００１３】
本開示において、カウンタは、カウンタ値をデクリメントするダウンカウンタとするが、これに限定されない。カウンタは、カウンタ値をインクリメントするアップカウンタであっても良い。また、カウンタは、８ビットカウンタとするが、これに限定されない。
【００１４】
スレーブ回路１０２−２から１０２−Ｎの構成は、スレーブ回路１０２−１と同様であるので、説明を省略する。
【００１５】
マスタ回路１０１は、クロック信号clk、及び、シリアルデータである入力データ信号data_inを、スレーブ回路１０２−１から１０２−Ｎに出力する。入力データ信号data_inは、コマンドを含む。
【００１６】
スレーブ回路１０２−１から１０２−Ｎの各々は、シリアルデータである出力データ信号data_outを、マスタ回路１０１に出力する。出力データ信号data_outは、カウンタ１１２−１から１１２−Ｍの各々のカウンタ値を含む。
【００１７】
システム１００の動作について、説明する。
【００１８】
マスタ回路１０１は、初期値をカウンタ１１２−１から１１２−Ｍの各々に設定するためのコマンド（入力データ信号data_in）を、制御回路１１１に出力する。制御回路１１１は、コマンドに基づいて、初期値をカウンタ１１２−１から１１２−Ｍの各々に設定する。
【００１９】
制御回路１１１は、マスタ回路１０１から送信されたクロック信号clkを、カウンタ１１２−１から１１２−Ｍの各々に出力する。カウンタ１１２−１から１１２−Ｍの各々は、１クロック毎に、カウンタ値をデクリメントする。
【００２０】
マスタ回路１０１は、カウンタ１１２−１から１１２−Ｍの各々のカウンタ値の読み出しを要求するためのコマンド（入力データ信号data_in）を、制御回路１１１に出力する。制御回路１１１は、コマンドに基づいて、カウンタ値の読み出しを読み出し回路１１３に要求する。読み出し回路１１３は、カウンタ１１２−１から１１２−Ｍの各々のカウンタ値を順次読み出して、制御回路１１１に出力する。制御回路１１１は、パラレルデータであるカウンタ値をシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【００２１】
図２は、第１の比較例の動作を示すタイミングチャートである。詳しくは、図２は、マスタ回路１０１が、カウンタ１１２−１から１１２−Ｍの各々のカウンタ値の読み出しを要求する場合の動作を示すタイミングチャートである。図２では、カウンタ１１２−１及び１１２−２のカウンタ値を示している。
【００２２】
図２の全範囲に亘って、クロック信号clkがスレーブ回路１０２−１に入力されている。従って、図２の全範囲に亘って、カウンタ１１２−１から１１２−Ｍの各々は、１クロック毎に、カウンタ値をデクリメントする。カウンタ値の変化タイミングは、クロック信号clkの立ち下がりエッジである。
【００２３】
カウンタ１１２−１は、カウンタ値「４０」からダウンカウントを行う。カウンタ１１２−２は、カウンタ値「５０」からダウンカウントを行う。
【００２４】
マスタ回路１０１は、タイミングｔ０からタイミングｔ１までの間に、データ読み出し要求コマンド（入力データ信号data_in）を、制御回路１１１に出力する。
【００２５】
タイミングｔ１からタイミングｔ２までの１クロック期間は、第１番目のデータ読み出しタイミングＲＤである。
【００２６】
読み出し回路１１３は、第１番目のデータ読み出しタイミングＲＤにおいて、カウンタ１１２−１のカウンタ値「１９」を読み出して、制御回路１１１に出力する。
【００２７】
制御回路１１１は、タイミングｔ２からタイミングｔ３までの８クロック期間に、パラレルデータであるカウンタ値「１９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【００２８】
タイミングｔ３からタイミングｔ４までの１クロック期間は、第２番目のデータ読み出しタイミングＲＤである。
【００２９】
読み出し回路１１３は、第２番目のデータ読み出しタイミングＲＤにおいて、カウンタ１１２−２のカウンタ値「２０」を読み出して、制御回路１１１に出力する。
【００３０】
制御回路１１１は、タイミングｔ４からタイミングｔ５までの８クロック期間に、パラレルデータであるカウンタ値「２０」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【００３１】
制御回路１１１及び読み出し回路１１３は、タイミングｔ１からｔ３まで（タイミングｔ３からｔ５まで）と同様の動作を、カウンタの数だけ繰り返す。
【００３２】
第１の比較例では、カウンタ１１２−１のカウンタ値を読み出すタイミングがタイミングｔ１であるのに対して、カウンタ１１２−２のカウンタ値を読み出すタイミングはタイミングｔ３で、逐次読み出しがされるため、読み出しタイミングが異なる。しかしながら、全部のカウンタ１１２−１から１１２−Ｍの、１つの共通なタイミング（タイミングｔ１）でのカウンタ値を読み出したいという要請がある。つまり、カウンタ１１２−２のタイミングｔ１でのカウンタ値「２９」を読み出したいという要請がある。第１の比較例では、このような要請に応えることができない。
【００３３】
（第２の比較例）
図３は、第２の比較例のスレーブ回路の構成を示す図である。なお、スレーブ回路２０２−１を用いたシステム構成は、図１で示した第１の比較例と同様であるので、図示及び説明を省略する。
【００３４】
スレーブ回路２０２−１は、制御回路２１１と、複数のカウンタレジスタ２１２−１、２１２−２、２１２−３、・・・と、読み出し回路２１３と、を含む。カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の各々は、カウンタ２１４と、バッファ２１５と、を含む。
【００３５】
図４は、第２の比較例の動作を示すタイミングチャートである。詳しくは、図４は、マスタ回路１０１が、カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の各々内のカウンタ２１４のカウンタ値の読み出しを要求する場合の動作を示すタイミングチャートである。図４では、カウンタレジスタ２１２−１及び２１２−２の各々内のカウンタ２１４のカウンタ値を示している。
【００３６】
図４の全範囲に亘って、クロック信号clkがスレーブ回路２０２−１に入力されている。従って、図４の全範囲に亘って、カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の各々内のカウンタ２１４は、１クロック毎に、カウンタ値をデクリメントする。カウンタ値の変化タイミングは、クロック信号clkの立ち下がりエッジである。
【００３７】
カウンタレジスタ２１２−１内のカウンタ２１４は、カウンタ値「４０」からダウンカウントを行う。カウンタレジスタ２１２−２内のカウンタ２１４は、カウンタ値「５０」からダウンカウントを行う。
【００３８】
マスタ回路１０１は、タイミングｔ１０からタイミングｔ１１までの間に、データ読み出し要求コマンド（入力データ信号data_in）を、制御回路２１１に出力する。
【００３９】
制御回路２１１は、タイミングｔ１１において、ストア信号２２１（図３参照）を、全部のカウンタレジスタ２１２−１、２１２−２、２１２−３、・・・に出力する。カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の各々は、タイミングｔ１１において、カウンタ２１４のカウンタ値を、バッファ２１５にバッファリング（転送、コピー）する。
【００４０】
図４を参照すると、タイミングｔ１１において、カウンタレジスタ２１２−１内のカウンタ２１４のカウンタ値「１９」が、カウンタレジスタ２１２−１内のバッファ２１５にバッファリングされる。また、タイミングｔ１１において、カウンタレジスタ２１２−２内のカウンタ２１４のカウンタ値「２９」が、カウンタレジスタ２１２−２内のバッファ２１５にバッファリングされる。
【００４１】
タイミングｔ１１からタイミングｔ１２までの１クロック期間は、第１番目のデータ読み出しタイミングＲＤである。
【００４２】
制御回路２１１は、第１番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ２１２−１を指定するアドレス信号２２２（図３参照）を、出力する。カウンタレジスタ２１２−１内のバッファ２１５は、バッファ値「１９」を、読み出し回路２１３に出力する。読み出し回路２１３は、バッファ値「１９」を、制御回路１１１に出力する。
【００４３】
制御回路２１１は、タイミングｔ１２からタイミングｔ１３までの８クロック期間に、パラレルデータであるバッファ値「１９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【００４４】
タイミングｔ１３からタイミングｔ１４までの１クロック期間は、第２番目のデータ読み出しタイミングＲＤである。
【００４５】
制御回路２１１は、第２番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ２１２−２を指定するアドレス信号２２２（図３参照）を、出力する。カウンタレジスタ２１２−２内のバッファ２１５は、バッファ値「２９」を、読み出し回路２１３に出力する。読み出し回路２１３は、バッファ値「２９」を、制御回路１１１に出力する。
【００４６】
制御回路２１１は、タイミングｔ１４からタイミングｔ１５までの８クロック期間に、パラレルデータであるバッファ値「２９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【００４７】
制御回路２１１及び読み出し回路２１３は、タイミングｔ１１からｔ１３まで（タイミングｔ１３からｔ１５まで）と同様の動作を、カウンタレジスタの数だけ繰り返す。
【００４８】
第２の比較例では、全部のカウンタレジスタ２１２−１、２１２−２、２１２−３、・・・内のカウンタ２１４の同一タイミング（タイミングｔ１１）でのカウンタ値を読み出したいという要請に応えることができる。しかしながら、第２の比較例では、カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の各々が、バッファ２１５を備える必要がある。
【００４９】
バッファ２１５が８ビット幅である場合、バッファ２１５は、８個のＤ型フリップフロップで構成することが例示される。１個のＤ型フリップフロップは、８個のＮＡＮＤゲート回路と、２個のＮＯＴゲート回路と、で構成することが例示される。つまり、１個のバッファ２１５は、多数のトランジスタで構成される。
【００５０】
カウンタレジスタ２１２−１、２１２−２、２１２−３、・・・の数が多くなる（例えば、１６個、３２個、６４個、・・・）と、バッファ２１５の数が多くなり、トランジスタの数が多くなる。つまり、回路規模が大きくなり、実装面積が大きくなる。したがって、回路規模が大きくなることで、製造コスト、レイアウト時間の増大によるコストが上昇する。
【００５１】
（実施の形態）
図５は、実施の形態のスレーブ回路の構成を示す図である。なお、スレーブ回路２−１を用いたシステム構成は、図１で示した第１の比較例と同様であるので、図示及び説明を省略する。
【００５２】
スレーブ回路２−１が、本開示の「カウンタ読み出し回路」に対応する。
【００５３】
スレーブ回路２−１は、制御回路１１と、カウンタレジスタ１２−１から１２−４と、バイトカウンタ１３と、ビットカウンタ１４と、セレクタ１５と、出力データ演算器１６と、カウンタデータ演算器１７と、スイッチ１８と、スイッチ１９と、読み出し回路２０と、を含む。
【００５４】
実施の形態では、カウンタレジスタの数を４個としたが、本開示はこれに限定されない。例えば、カウンタレジスタの数は、８個、１６個、３２個等であっても良い。
【００５５】
図５では、図面が煩雑になることを抑制し、図面の視認を容易にするため、制御回路１１から各部に出力される、クロック信号clk及びアドレス信号の図示を省略している。
【００５６】
制御回路１１には、クロック信号clk及び入力データ信号data_inが、マスタ回路１０１（図１参照）から入力される。
【００５７】
制御回路１１は、初期値をカウンタレジスタ１２−１から１２−４の各々に設定するためのコマンド（入力データ信号data_in）に基づいて、初期値であるライトデータwrite_data[7:0]を、カウンタレジスタ１２−１から１２−４の各々に出力する。カウンタレジスタ１２−１から１２−４の各々は、ライトデータwrite_data[7:0]を、セットデータset_data_in[7:0]として受け取り、カウンタ値reg_data_out[7:0]の初期値に設定する。
【００５８】
なお、ライトデータwrite_data[7:0]と、セットデータset_data_in[7:0]とは、送り側と受け側とで信号名を変えているだけで、信号自体は同じである。
【００５９】
制御回路１１は、クロック信号clkを、カウンタレジスタ１２−１から１２−４、バイトカウンタ１３、及び、ビットカウンタ１４に、出力する。カウンタレジスタ１２−１から１２−４の各々は、１クロック毎に、カウンタ値をデクリメントする。
【００６０】
また、制御回路１１は、データ読み出し要求コマンド（入力データ信号data_in）をマスタ回路１０１から受信完了したタイミング（以降、「カウンタ値取得要求タイミング」という）で、リードイネーブル信号read_enを、バイトカウンタ１３に出力する。
【００６１】
カウンタ値取得要求タイミングが、本開示の「第１のタイミング」に対応する。
【００６２】
バイトカウンタ１３は、リードイネーブル信号read_enが入力されたら、９クロック毎（８（カウンタ値のビット幅）＋１（データ読み出しタイミングＲＤ）＝９）に、バイトカウンタ値byte_count[3:0]をインクリメントする。バイトカウンタ１３は、バイトカウンタ値byte_count[3:0]がインクリメントしたら、即ち、９クロック毎に、ビットカウンタリセット信号５１を、ビットカウンタ１４に出力する。
【００６３】
「９」が、本開示の「予め定められた数」に対応する。
【００６４】
ビットカウンタ１４は、リードイネーブル信号read_enが入力されたら、１クロック毎に、ビットカウンタ値bit_count[3:0]をインクリメントする。また、ビットカウンタ１４は、ビットカウンタリセット信号５１がバイトカウンタ１３から入力されたら、ビットカウンタ値bit_count[3:0]を「１」にリセットする。つまり、ビットカウンタ１４は、「０」（初期値）→「１」→「２」→・・・→「８」→「９」→「１」→「２」→・・・のように、カウントを行う。
【００６５】
つまり、バイトカウンタ１３及びビットカウンタ１４は、バイトカウンタ１３を上位桁とし、ビットカウンタ１４を下位桁とする、９進カウンタを構成する。
【００６６】
バイトカウンタ１３及びビットカウンタ１４が、本開示の「Ｌ進カウンタ」に対応する。
【００６７】
カウンタレジスタ１２−１から１２−４の各々は、カウンタ値reg_data_out[7:0]を、セレクタ１５に出力する。また、カウンタレジスタ１２−１から１２−４の各々は、カウンタ値reg_data_out[7:0]がゼロの場合に「１」にセットされ、その他の場合に「０」である、カウントゼロフラグcount_zero_flgを、セレクタ１５に出力する。同時に、カウンタレジスタ１２−１から１２−４の各々は、カウントを停止する。
【００６８】
セレクタ１５は、制御回路１１から入力されるアドレス信号に基づいて、カウンタレジスタ１２−１から１２−４の内の１つを選択する。そして、セレクタ１５は、選択したカウンタレジスタから入力されるカウンタ値reg_data_out[7:0]を、出力データ演算器１６に出力する。また、セレクタ１５は、選択したカウンタレジスタから入力されるカウントゼロフラグcount_zero_flgを、出力データ演算器１６及びカウンタデータ演算器１７に、出力する。
【００６９】
出力データ演算器１６は、セレクタ１５から入力されるカウントゼロフラグcount_zero_flgが「０」である場合には、次の式（１）で算出される出力データdata_out[7:0]を、スイッチ１９に出力する。
data_out[7:0]
=reg_data_out[7:0]+byte_count[3:0]*9+bit_count[3:0]  ・・・（１）
【００７０】
式（１）において、「byte_count[3:0]*9+bit_count[3:0]」の部分は、カウンタ値取得要求タイミングから現在までの総クロック数に相当する。
【００７１】
出力データ演算器１６は、セレクタ１５から入力されるカウントゼロフラグcount_zero_flgが「１」である場合には、カウンタ値reg_data_out[7:0]をそのまま出力データdata_out「7：0」として、スイッチ１９に出力する。
【００７２】
カウンタデータ演算器１７は、セレクタ１５から入力されるカウントゼロフラグcount_zero_flgが「１」である場合には、次の式（２）で算出されるカウンタライトデータcounter_write_data[7:0]を、スイッチ１８に出力する。
counter_write_data[7:0]
=byte_count[3:0]*9+bit_count[3:0]  ・・・（２）
【００７３】
つまり、カウンタライトデータcounter_write_data[7:0]は、カウンタ値取得要求タイミングからカウントゼロフラグcount_zero_flgが「１」になったタイミングまでの総クロック数に相当する。
【００７４】
スイッチ１８は、制御回路１１から入力されるアドレス信号に基づいて、カウンタレジスタ１２−１から１２−４の内の１つを選択する。そして、スイッチ１８は、カウンタライトデータcounter_write_data[7:0]を、カウンタレジスタ１２−１から１２−４の内の選択したカウンタレジスタに出力する。カウンタレジスタ１２−１から１２−４の内の選択されたカウンタレジスタは、カウンタライトデータcounter_write_data[7:0]を、ライトデータwrite_data_in[7:0]として受け取り、カウンタ値reg_data_out[7:0]に設定する。なお、カウントゼロフラグcount_zero_flgが「１」となっている場合は、カウンタレジスタ１２−１から１２−４の内の選択されたカウンタレジスタは、カウントダウン動作を停止し、カウンタライトデータcounter_write_data[7:0]をライトデータwrite_data_in[7:0]として受け取り、保持し続ける。
【００７５】
なお、カウンタライトデータcounter_write_data[7:0]と、ライトデータwrite_data_in[7:0]とは、送り側と受け側とで信号名を変えているだけで、信号自体は同じである。
【００７６】
スイッチ１９は、制御回路１１から入力されるアドレス信号に基づいて、出力データdata_out[7:0]を、カウンタレジスタ１２−１の第１出力データreg_data_in(1)[7:0]、カウンタレジスタ１２−２の第２出力データreg_data_in(2)[7:0]、カウンタレジスタ１２−３の第３出力データreg_data_in(3)[7:0]、又は、カウンタレジスタ１２−４の第４出力データreg_data_in(4)[7:0]として、読み出し回路２０に出力する。
【００７７】
読み出し回路２０は、第１出力データreg_data_in(1)[7:0]、第２出力データreg_data_in(2)[7:0]、第３出力データreg_data_in(3)[7:0]、又は、第４出力データreg_data_in(4)[7:0]を、出力データout_data[7:0]として、制御回路１１に出力する。
【００７８】
制御回路１１は、出力データout_data[7:0]を、リードデータread_data[7:0]として受け取る。
【００７９】
なお、出力データout_data[7:0]と、リードデータread_data[7:0]とは、送り側と受け側とで信号名を変えているだけで、信号自体は同じである。
【００８０】
制御回路１１は、リードデータread_data[7:0]を８ビットのシリアルデータに変換した出力データdata_outを、マスタ回路１０１に出力する。
【００８１】
図６は、実施の形態のスレーブ回路の一部の内部構成を示す図である。詳しくは、図６は、カウンタレジスタ１２−１、出力データ演算器１６、及び、カウンタデータ演算器１７の内部構成を示す図である。
【００８２】
なお、図６では、アドレス信号によってカウンタレジスタ１２−１が選択されているものとして、セレクタ１５及びスイッチ１８の図示を省略している。
【００８３】
カウンタレジスタ１２−１は、カウンタ３１と、カウントゼロイネーブル回路３２と、を含む。
【００８４】
出力データ演算器１６は、演算器４１と、セレクタ４２と、を含む。
【００８５】
カウンタ３１は、制御回路１１から出力されるライトデータwrite_data[7:0]を、セットデータset_data_in[7:0]として受け取り、カウンタ値counter_out[7:0]の初期値とする。
【００８６】
カウンタ３１は、１クロック毎に、カウンタ値counter_out[7:0]をデクリメントし、カウンタ値reg_data_out[7:0]として、カウントゼロイネーブル回路３２、カウンタデータ演算器１７、演算器４１、及び、セレクタ４２に出力する。
【００８７】
なお、カウンタ値counter_out[7:0]と、カウンタ値reg_data_out[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【００８８】
カウントゼロイネーブル回路３２は、カウンタ３１から出力されるカウンタ値counter_out[7:0]を、カウンタ値counter_in[7:0]として受け取る。
【００８９】
なお、カウンタ値counter_out[7:0]と、カウンタ値counter_in[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【００９０】
カウントゼロイネーブル回路３２は、カウンタ値counter_in[7:0]が「０」である場合には、「１」のカウントゼロフラグcount_zero_flgを、カウンタ３１、カウンタデータ演算器１７、及び、セレクタ４２に出力する。カウントゼロイネーブル回路３２は、カウンタ値counter_in[7:0]が「０」ではない場合には、「０」のカウントゼロフラグcount_zero_flgを、カウンタ３１、カウンタデータ演算器１７、及び、セレクタ４２に出力する。
【００９１】
カウントゼロイネーブル回路３２は、カウンタ値counter_in[7:0]の８ビットのＮＯＲ演算を行うＮＯＲゲート回路で構成することが例示されるが、本開示はこれに限定されない。
【００９２】
カウンタ３１は、カウントゼロイネーブル回路３２から出力されるカウントゼロフラグcount_zero_flgを、カウンタディセーブル信号counter_disableとして受け取る。
【００９３】
なお、カウントゼロフラグcount_zero_flgと、カウンタディセーブル信号counter_disableとは、信号名を変えているだけで、信号自体は同じである。
【００９４】
カウンタデータ演算器１７は、カウントゼロフラグcount_zero_flgが「１」である場合には、上記した式（２）で算出されるカウンタライトデータcounter_write_data[7:0]を、カウンタ３１に出力する。
【００９５】
カウンタデータ演算器１７は、積和演算回路で構成することが例示されるが、本開示はこれに限定されない。
【００９６】
カウンタ３１は、カウンタディセーブル信号counter_disableが「１」になった場合には、ダウンカウントを停止する。
【００９７】
更に、カウンタ３１は、カウンタディセーブル信号counter_disableが「１」になった場合には、カウンタライトデータcounter_write_data[7:0]（カウンタ値取得要求タイミングから現在までの総クロック数に相当する）を、ライトデータwrite_data_in[7:0]として受け取る。
【００９８】
なお、カウンタライトデータcounter_write_data[7:0]と、ライトデータwrite_data_in[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【００９９】
そして、カウンタ３１は、ライトデータwrite_data_in[7:0]を、カウンタ値counter_out[7:0]に設定する。つまり、カウンタ値counter_out[7:0]は、カウンタ値取得要求タイミングから、カウンタディセーブル信号counter_disableが「１」になるまでの、総クロック数になる。
【０１００】
演算器４１は、カウンタ値reg_data_out[7:0]を、入力データdata_in[7:0]として受け取る。
【０１０１】
なお、カウンタ値reg_data_out[7:0]と、入力データdata_in[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【０１０２】
演算器４１は、上記した式（１）で算出される算出データcalc_data_out[7:0]を、セレクタ４２に出力する。
【０１０３】
演算器４１は、積和演算回路で構成することが例示されるが、本開示はこれに限定されない。
【０１０４】
セレクタ４２は、カウントゼロフラグcount_zero_flgが「０」である場合には、演算器４１で算出された算出データcalc_data_out[7:0]を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１０５】
なお、算出データcalc_data_out[7:0]と、出力データdata_out[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【０１０６】
セレクタ４２は、カウントゼロフラグcount_zero_flgが「１」である場合には、カウンタ３１から出力された入力データdata_in[7:0]を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１０７】
なお、入力データdata_in[7:0]と、出力データdata_out[7:0]とは、信号名を変えているだけで、信号自体は同じである。
【０１０８】
つまり、出力データdata_out[7:0]は、カウントゼロフラグcount_zero_flgが「０」の場合には、カウンタ値reg_data_out[7:0]に、カウンタ値取得要求タイミングから現在までの総クロック数を加算した値になる。
【０１０９】
また、出力データdata_out[7:0]は、カウントゼロフラグcount_zero_flgが「１」の場合には、カウンタ値reg_data_out[7:0]になる。このとき、カウンタ値reg_data_out[7:0]は、カウンタ値取得要求タイミングから、カウントゼロフラグcount_zero_flgが「１」になったタイミングまでの、総クロック数になっている。
【０１１０】
スレーブ回路２−１の動作について、説明する。まず、カウンタ値が「０」にならない場合について説明し、その後、カウンタ値が「０」になる場合について説明する。
【０１１１】
図７は、実施の形態の動作を示すタイミングチャートである。詳しくは、図７は、マスタ回路１０１が、カウンタレジスタ１２−１から１２−４の各々のカウンタ値の読み出しを要求する場合の動作を示すタイミングチャートである。図７では、カウンタレジスタ１２−１及び１２−２のカウンタ値を示している。
【０１１２】
図７の全範囲に亘って、クロック信号clkがスレーブ回路２−１に入力されている。従って、図７の全範囲に亘って、カウンタレジスタ１２−１から１２−４の各々は、１クロック毎に、カウンタ値をデクリメントする。カウンタ値の変化タイミングは、クロック信号clkの立ち下がりエッジである。
【０１１３】
カウンタレジスタ１２−１内のカウンタ３１は、カウンタ値「４０」からダウンカウントを行う。カウンタレジスタ１２−２内のカウンタ３１は、カウンタ値「５０」からダウンカウントを行う。
【０１１４】
マスタ回路１０１は、タイミングｔ２０からタイミングｔ２１までの間に、データ読み出し要求コマンド（入力データ信号data_in）を、制御回路１１に出力する。
【０１１５】
制御回路１１は、タイミングｔ２０からタイミングｔ２１までの間のいずれかのタイミングで、カウンタレジスタ１２−１を選択するアドレス信号を、セレクタ１５、スイッチ１８、及び、スイッチ１９に出力する。
【０１１６】
タイミングｔ２１からタイミングｔ２２までの１クロック期間は、第１番目のデータ読み出しタイミングＲＤである。
【０１１７】
タイミングｔ２１において、カウンタレジスタ１２−１内のカウンタ３１のカウンタ値reg_data_out[7:0]は、「１９」である。従って、カウンタレジスタ１２−１内のカウントゼロフラグcount_zero_flgは、「０」である。
【０１１８】
出力データ演算器１６内の演算器４１は、上記した式（１）の演算を行う。タイミングｔ２１において、バイトカウンタ値byte_count[3:0]は「０」であり、ビットカウンタ値bit_count[3:0]は「０」である。従って、演算器４１で算出される算出データcalc_data_out[7:0]は、上記した式（１）により、次の通りになる。
calc_data_out[7:0]
=reg_data_out[7:0]+byte_count[3:0]*9+bit_count[3:0]
=19+0+0
=19
【０１１９】
出力データ演算器１６内のセレクタ４２は、カウンタレジスタ１２−１内のカウントゼロフラグcount_zero_flgが「０」であるので、上記算出結果の「１９」（calc_data_out[7:0]）を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１２０】
読み出し回路２０は、第１番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ１２−１が出力する「１９」を、制御回路１１に出力する。
【０１２１】
タイミングｔ２１が、本開示の「第１のタイミング」及び「第２のタイミング」に対応する。
【０１２２】
制御回路１１は、タイミングｔ２２からタイミングｔ２３までの８クロック期間に、パラレルデータであるカウンタ値「１９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【０１２３】
制御回路１１は、タイミングｔ２２で、カウンタレジスタ１２−２を選択するアドレス信号を、セレクタ１５、スイッチ１８、及び、スイッチ１９に出力する。
【０１２４】
タイミングｔ２３からタイミングｔ２４までの１クロック期間は、第２番目のデータ読み出しタイミングＲＤである。
【０１２５】
タイミングｔ２３において、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]は、「２０」である。従って、カウンタレジスタ１２−２内のカウントゼロフラグcount_zero_flgは、「０」である。
【０１２６】
出力データ演算器１６内の演算器４１は、上記した式（１）の演算を行う。タイミングｔ２３において、バイトカウンタ値byte_count[3:0]は「０」であり、ビットカウンタ値bit_count[3:0]は「９」である。従って、演算器４１で算出される算出データcalc_data_out[7:0]は、上記した式（１）により、次の通りになる。
calc_data_out[7:0]
=reg_data_out[7:0]+byte_count[3:0]*9+bit_count[3:0]
=20+0+9
=29
【０１２７】
この算出データcalc_data_out[7:0]の値「２９」は、カウンタ値取得要求タイミング（タイミングｔ２１）での、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]に等しい。
【０１２８】
出力データ演算器１６内のセレクタ４２は、カウンタレジスタ１２−２内のカウントゼロフラグcount_zero_flgが「０」であるので、上記算出結果の「２９」（calc_data_out[7:0]）を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１２９】
この出力データdata_out[7:0]の値「２９」は、カウンタ値取得要求タイミング（タイミングｔ２１）での、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]に等しい。
【０１３０】
読み出し回路２０は、第２番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ１２−２が出力する「２９」を、制御回路１１に出力する。
【０１３１】
タイミングｔ２１が、本開示の「第１のタイミング」に対応し、タイミングｔ２３が、本開示の「第２のタイミング」に対応する。
【０１３２】
制御回路１１は、タイミングｔ２４からタイミングｔ２５までの８クロック期間に、パラレルデータであるカウンタ値「２９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【０１３３】
制御回路１１及び読み出し回路２０は、タイミングｔ２１からｔ２３まで（タイミングｔ２３からｔ２５まで）と同様の動作を、カウンタの数だけ繰り返す。
【０１３４】
次に、カウンタ値が「０」になる場合の、スレーブ回路２−１の動作について説明する。
【０１３５】
図８は、実施の形態の動作を示すタイミングチャートである。詳しくは、図８は、マスタ回路１０１が、カウンタレジスタ１２−１から１２−４の各々のカウンタ値の読み出しを要求する場合の動作を示すタイミングチャートである。図８では、カウンタレジスタ１２−１及び１２−２のカウンタ値を示している。
【０１３６】
図８の全範囲に亘って、クロック信号clkがスレーブ回路２−１に入力されている。従って、図８の全範囲に亘って、カウンタレジスタ１２−１から１２−４の各々は、１クロック毎に、カウンタ値をデクリメントする。カウンタ値の変化タイミングは、クロック信号clkの立ち下がりエッジである。
【０１３７】
カウンタレジスタ１２−１内のカウンタ３１は、カウンタ値「４０」からダウンカウントを行う。カウンタレジスタ１２−２内のカウンタ３１は、カウンタ値「２５」からダウンカウントを行う。
【０１３８】
マスタ回路１０１は、タイミングｔ３０からタイミングｔ３１までの間に、データ読み出し要求コマンド（入力データ信号data_in）を、制御回路１１に出力する。
【０１３９】
制御回路１１は、タイミングｔ３０からタイミングｔ３１までの間のいずれかのタイミングで、カウンタレジスタ１２−１を選択するアドレス信号を、セレクタ１５、スイッチ１８、及び、スイッチ１９に出力する。
【０１４０】
タイミングｔ３１からタイミングｔ３２までの１クロック期間は、第１番目のデータ読み出しタイミングＲＤである。
【０１４１】
タイミングｔ３１において、カウンタレジスタ１２−１内のカウンタ３１のカウンタ値reg_data_out[7:0]は、「１９」である。従って、カウンタレジスタ１２−１内のカウントゼロフラグcount_zero_flgは、「０」である。
【０１４２】
出力データ演算器１６内の演算器４１は、上記した式（１）の演算を行う。タイミングｔ３１において、バイトカウンタ値byte_count[3:0]は「０」であり、ビットカウンタ値bit_count[3:0]は「０」である。従って、演算器４１で算出される算出データcalc_data_out[7:0]は、上記した式（１）により、次の通りになる。
calc_data_out[7:0]
=reg_data_out[7:0]+byte_count[3:0]*9+bit_count[3:0]
=19+0+0
=19
【０１４３】
出力データ演算器１６内のセレクタ４２は、カウンタレジスタ１２−１内のカウントゼロフラグcount_zero_flgが「０」であるので、上記算出結果の「１９」（calc_data_out[7:0]）を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１４４】
読み出し回路２０は、第１番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ１２−１が出力する「１９」を、制御回路１１に出力する。
【０１４５】
タイミングｔ３１が、本開示の「第１のタイミング」及び「第２のタイミング」に対応する。
【０１４６】
制御回路１１は、タイミングｔ３２からタイミングｔ３４までの８クロック期間に、パラレルデータであるカウンタ値「１９」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【０１４７】
制御回路１１は、タイミングｔ３２で、カウンタレジスタ１２−２を選択するアドレス信号を、セレクタ１５、スイッチ１８、及び、スイッチ１９に出力する。
【０１４８】
タイミングｔ３３において、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]が、「０」になる。従って、カウンタレジスタ１２−２内のカウントゼロフラグcount_zero_flgが、「１」になる。
【０１４９】
このとき、カウントゼロイネーブル回路３２は、セレクタ１５、カウンタデータ演算器１７、及び、スイッチ１８に割り込み（interrupt）を発生させても良い。
【０１５０】
タイミングｔ３３において、カウンタデータ演算器で算出されるカウンタライトデータcounter_write_data[7:0]は、上記した式（２）により、次の通りになる。
counter_write_data[7:0]
=byte_count[3:0]*9+bit_count[3:0]
=0+4
=4
【０１５１】
カウンタレジスタ１２−２内のカウンタ３１は、カウントゼロフラグcount_zero_flg（カウンタディセーブル信号counter_disable）が「１」であるので、ダウンカウントを停止するとともに、ライトデータwrite_data_in[7:0]（カウンタライトデータcounter_write_data[7:0]）の「４」を、カウンタ値counter_out[7:0]に設定する。
【０１５２】
カウンタレジスタ１２−２内のカウンタ３１は、タイミングｔ３３でダウンカウントを停止する。従って、タイミングｔ３３以降は、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値counter_out[7:0]は、「４」に維持される。
【０１５３】
このカウンタレジスタ１２−２内のカウンタ３１のカウンタ値counter_out[7:0]の値「４」は、カウンタ値取得要求タイミング（タイミングｔ３１）での、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]に等しい。
【０１５４】
タイミングｔ３４からタイミングｔ３５までの１クロック期間は、第２番目のデータ読み出しタイミングＲＤである。
【０１５５】
タイミングｔ３４において、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]（カウンタ値counter_out[7:0]）は、「４」である。
【０１５６】
出力データ演算器１６内のセレクタ４２は、カウンタレジスタ１２−２内のカウントゼロフラグcount_zero_flgが「１」であるので、カウンタ値reg_data_out[7:0]の「４」を、出力データdata_out[7:0]として、読み出し回路２０に出力する。
【０１５７】
この出力データdata_out[7:0]の値「４」は、カウンタ値取得要求タイミング（タイミングｔ３１）での、カウンタレジスタ１２−２内のカウンタ３１のカウンタ値reg_data_out[7:0]に等しい。
【０１５８】
読み出し回路２０は、第２番目のデータ読み出しタイミングＲＤにおいて、カウンタレジスタ１２−２が出力する「４」を、制御回路１１に出力する。
【０１５９】
タイミングｔ３１が、本開示の「第１のタイミング」に対応し、タイミングｔ３４が、本開示の「第２のタイミング」に対応する。
【０１６０】
制御回路１１は、タイミングｔ３５からタイミングｔ３６までの８クロック期間に、パラレルデータであるカウンタ値「４」を８ビットのシリアルデータに変換した出力データ信号data_outを、マスタ回路１０１に出力する。
【０１６１】
制御回路１１及び読み出し回路２０は、タイミングｔ３１からｔ３４まで（タイミングｔ３４からｔ３６まで）と同様の動作を、カウンタの数だけ繰り返す。
【０１６２】
以上説明したように、実施の形態のスレーブ回路２−１は、全部のカウンタレジスタ１２−１から１２−４内のカウンタ３１のカウンタ値取得要求タイミング（図７のタイミングｔ２１、図８のタイミングｔ３１）でのカウンタ値を読み出したいという要請に応えることができる。
【０１６３】
また、実施の形態のスレーブ回路２−１を第２の比較例のスレーブ回路２０２−１と比較すると、カウンタレジスタ１２−１から１２−４の各々は、バッファを備える必要がない。バッファは、上記したように、多数のトランジスタで構成される。従って、実施の形態のスレーブ回路２−１は、第２の比較例のスレーブ回路２０２−１と比較して、トランジスタの数を少なくすることができる。つまり、スレーブ回路２−１は、回路規模を抑制することができ、実装面積を抑制することができる。また、スレーブ回路２−１は、コストを抑制することができる。
【０１６４】
なお、実施の形態では、カウンタレジスタの数を４個とした場合について説明した。このようにカウンタレジスタの数が比較的少ない場合には、バッファの削減によるメリットは、バイトカウンタ１３、ビットカウンタ１４、出力データ演算器１６、及び、カウンタデータ演算器１７の追加によるデメリットにより、抑制される。しかしながら、カウンタレジスタの数が多くなればなるほど（例えば、８個、１６個、３２個等）、バッファの削減によるメリットは、バイトカウンタ１３、ビットカウンタ１４、出力データ演算器１６、及び、カウンタデータ演算器１７の追加によるデメリットよりも、大きく上回る。
【０１６５】
なお、実施の形態では、バイトカウンタ１３及びビットカウンタ１４を備え、カウンタ値取得要求タイミングから現在までの総クロック数を、積和演算「byte_count[3:0]*9+bit_count[3:0]」で算出したが、本開示はこれに限定されない。例えば、カウンタ値取得要求タイミングから現在までの総クロック数を、１個のカウンタで単純にカウントしても良い。
【０１６６】
なお、上記した実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更／改良され得るとともに、本発明にはその等価物も含まれる。
【符号の説明】
【０１６７】
２−１  スレーブ回路
１１、２１１  制御回路
１２−１、１２−２、１２−３、１２−４  カウンタレジスタ
１３  バイトカウンタ
１４  ビットカウンタ
１５、４２  セレクタ
１６  出力データ演算器
１７  カウンタデータ演算器
１８、１９  スイッチ
２０  読み出し回路
３１  カウンタ
３２  カウントゼロイネーブル回路
４１  演算器
【図１】
2020086934.tif 000003
【図２】
2020086934.tif 000004
【図３】
2020086934.tif 000005
【図４】
2020086934.tif 000006
【図５】
2020086934.tif 000007
【図６】
2020086934.tif 000008
【図７】
2020086934.tif 000009
【図８】
2020086934.tif 000010