(57)【特許請求の範囲】
【請求項１】
入力されるカウントクロック（以下、ｃｌｏｃｋという）を２分周した分周クロック（以下、ｃｌｏｃｋ２という）を作り出す分周回路と、
前記ｃｌｏｃｋ２を入力してカウントイネーブル信号（以下、ｓｉｇｎａｌ３という）を生成するｓｉｇｎａｌ３生成回路と、
前記ｃｌｏｃｋと前記ｓｉｇｎａｌ３が入力されることによりそのカウント値をインクリメントするとともに、そのインクリメント時刻が互いにずらされた第１及び第２のカウンタと、
前記ｃｌｏｃｋと前記ｓｉｇｎａｌ３が入力され、前記第１のカウンタがそのカウント値をインクリメントする前後１／２クロックの間その出力レベルを第１レベルから第２レベルに変化する信号（以下、ｓｉｇｎａｌ１という）を生成するｓｉｇｎａｌ１生成回路と、
前記ｃｌｏｃｋとは非同期の中央演算処理装置（以下、ＣＰＵという）からのタイマーリード命令（以下、ｒｅａｄという）と前記ｓｉｇｎａｌ１を入力し、前記ｓｉｇｎａｌ１が第１レベルのとき前記ｒｅａｄが入力されると第１レベルとなり、前記ｓｉｇｎａｌ１が第２レベルのとき前記ｒｅａｄが入力されると第２レベルとなるセレクタ信号（以下、ｓｉｇｎａｌ２という）を生成するｓｉｇｎａｌ２生成回路と、
前記ｓｉｇｎａｌ２のレベルに応じて前記第１及び第２のカウンタのいずれか一方を選択するセレクタと、
該セレクタで選択された第１のカウンタまたは第２のカウンタのカウント値を保持し、前記ＣＰＵからの前記ｒｅａｄが入力されたときに保持しているカウント値をデータとして出力するタイマーカウントレジスタと、
を備えていることを特徴とするタイマー。
【請求項２】
入力されるカウントクロック（以下、ｃｌｏｃｋという）を２分周した分周クロック（以下、ｃｌｏｃｋ２という）を作り出す分周回路と、
前記ｃｌｏｃｋ２を入力してカウントイネーブル信号（以下、ｓｉｇｎａｌ３という）を生成するｓｉｇｎａｌ３生成回路と、
前記ｃｌｏｃｋと前記ｓｉｇｎａｌ３を入力し、前記ｓｉｇｎａｌ３がＨｉｇｈレベルのとき前記ｃｌｏｃｋの立ち下がりでＨｉｇｈレベルとなり、前記ｓｉｇｎａｌ３がＬｏｗレベルのとき前記ｃｌｏｃｋの立ち下がりでＬｏｗレベルとなる信号（以下、ｓｉｇｎａｌ１という）を生成するｓｉｇｎａｌ１生成回路と、
前記ｃｌｏｃｋとは非同期の中央演算処理装置（以下、ＣＰＵという）からのタイマーリード命令（以下、ｒｅａｄという）と前記ｓｉｇｎａｌ１を入力し、前記ｓｉｇｎａｌ１がＨｉｇｈレベルのとき前記ｒｅａｄが入力されるとＨｉｇｈレベルとなり、前記ｓｉｇｎａｌ１がＬｏｗレベルのとき前記ｒｅａｄが入力されるとＬｏｗレベルとなるセレクタ信号（以下、ｓｉｇｎａｌ２という）を生成するｓｉｇｎａｌ２生成回路と、
前記ｃｌｏｃｋと前記ｓｉｇｎａｌ３が入力されることによりそのカウント値をインクリメントするとともに、そのインクリメント時刻が互いにずらされた第１及び第２のカウンタと、
前記ｓｉｇｎａｌ２のレベルに応じて前記第１及び第２のカウンタのいずれか一方を選択するセレクタと、
該セレクタで選択された第１のカウンタまたは第２のカウンタのカウント値を保持し、前記ＣＰＵからの前記ｒｅａｄが入力されたときに保持しているカウント値をデータとして出力するタイマーカウントレジスタと、
を備えていることを特徴とするタイマー。
【請求項３】
前記第１のカウンタは、前記ｓｉｇｎａｌ３がＨｉｇｈレベルのとき前記ｃｌｏｃｋの立ち上がりでカウント値をインクリメントし、前記第２のカウンタは、前記ｓｉｇｎａｌ３がＬｏｗレベルのとき前記ｃｌｏｃｋの立ち上がりで前記第１のカウンタのカウント値をラッチし、前記セレクタは、前記ｓｉｇｎａｌ２がＬｏｗレベルのとき前記第１のカウンタの出力を選択し、前記ｓｉｇｎａｌ２がＨｉｇｈレベルのとき前記第２のカウンタの出力を選択して前記タイマーカウントレジスタに保持させることを特徴とする請求項２に記載のタイマー。
【請求項４】
前記第１のカウンタは、前記ｓｉｇｎａｌ３がＨｉｇｈレベルのとき前記ｃｌｏｃｋの立ち上がりでカウント値をインクリメントし、前記第２のカウンタは、前記ｓｉｇｎａｌ３の立ち上がりで前記第１のカウンタのカウント値に１を加えた値をカウント値として設定し、前記セレクタは、前記ｓｉｇｎａｌ２がＬｏｗレベルのとき前記第１のカウンタの出力を選択し、前記ｓｉｇｎａｌ２がＨｉｇｈレベルのとき前記第２のカウンタの出力を選択して前記タイマーカウントレジスタに保持させることを特徴とする請求項２に記載のタイマー。
【請求項５】
前記第１のカウンタは、前記ｓｉｇｎａｌ３がＨｉｇｈレベルのとき前記ｃｌｏｃｋの立ち上がりでカウント値をインクリメントし、前記第２のカウンタは、前記ｓｉｇｎａｌ３の立ち上がりでカウント値をインクリメントし、前記セレクタは、前記ｓｉｇｎａｌ２がＬｏｗレベルのとき前記第１のカウンタの出力を選択し、前記ｓｉｇｎａｌ２がＨｉｇｈレベルのとき前記第２のカウンタの出力を選択して前記タイマーカウントレジスタに保持させることを特徴とする請求項２に記載のタイマー。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、中央処理装置（ＣＰＵ）によりそのカウント値が読み出されるタイマーカウンタに関し、特に、ＣＰＵの動作クロックとタイマーカウンタの動作クロックが非同期の場合におけるタイマーカウント値読み出し方法およびタイマー回路に関する。
【０００２】
【従来の技術】
本発明が関するタイマー回路は、汎用ＬＳＩ、カスタムＬＳＩに限らず、多くの集積回路に用いられている。一般的に、タイマーカウンタ用のクロックと、ＣＰＵクロックは非同期であるため、タイマーがカウントアップするインクリメントの瞬間とＣＰＵからのリード命令が一致することがあり、タイマーカウンタのインクリメントの瞬間にカウント値をリードすると期待値のカウント値が読み出されず不定値が読み出されてしまうことがある。
【０００３】
通常、タイマーカウンタは複数ｂｉｔから構成されており、上位ｂｉｔがカウントアップされる時は、下位のｂｉｔがそれぞればらばらにHighからLow、又はLowからHighに変化するため、カウントアップする瞬間と、リード命令の瞬間が重なると、読み出した値は意味の無い値となってしまう。
【０００４】
この問題を解消するために、タイマーカウント値を読み出す際に、タイマーカウンタの値を３回リードして、その値を比較し、２回同じ値ならば、その値を期待値として求める方法等が採用されているが、タイマーカウンタの値を複数回リードし、２回同じ値が読み出せたことでその値を期待値として取り出すためには、ＣＰＵは、タイマーカウント値を読み出すためにタイマーカウンタに複数回のアクセスを必要とし、ＣＰＵのスループットが低下するという欠点がある。
【０００５】
また、タイマーカウント値を読み出すために、複数回のリードの後にカウント値の期待値を読み出す方法では、その誤差は、ＣＰＵが読み出した時間次第で変わってしまうことがある。例えば複数回タイマーカウント値をリードし、２回同じ値が読めた場合、それをタイマー値とするような構成の場合、ＣＰＵが２回タイマーカウンタを読み出す間に、割込み処理や、ＤＭＡ転送、各種ウエイトなどが入った場合に、タイマーカウント値が進み、正確なカウント値が読み出せないということもある。
【０００６】
近年、ＬＳＩの高速化、ソフトの複雑化に伴い、このようなタイマーカウント値の読み出しに複数回のＣＰＵ命令を実行するのは極めて不利であり、ＣＰＵのスループットの低下を引き起こさないために、タイマーカウント値の読み出しを、少ない命令回数で処理することが要求されている。
【０００７】
そのため、中央処理装置の動作クロックとカウンタのクロックとが非同期でも時間的なロスなく高速にカウント値を読み出すための手段が従来から提案されている（例えば、特許文献１乃至３参照）。
【０００８】
【特許文献１】
特開平４−３６０２１７号公報
【特許文献２】
特開平１１−２２０３８３号公報
【特許文献３】
特開２０００−１８１５６９号公報
【０００９】
【発明が解決しようとする課題】
本発明の目的は、ＣＰＵの動作クロックとタイマーカウンタの動作クロックが非同期の装置において、ＣＰＵが一回のリード命令でタイマーカウンタの値を正確に読み出すことにより、ＣＰＵのスループットを低下させないようにする方法を、上記特許文献等に記載された方法とは異なる新規な方法によって実現可能な手段を提供することにある。
【００１０】
【課題を解決するための手段】
本発明のタイマーカウンタ値の非同期読み出し方法は、ＣＰＵの動作クロックとタイマーカウンタの動作クロックが非同期の装置において、タイマーカウントをインクリメントする時刻をずらした二つのカウンタを用意し、該二つのカウンタのインクリメントの時刻を識別することにより、前記ＣＰＵによるタイマーリード命令時点と前記インクリメントの瞬間とが重なっていない方のカウンタのカウント値を選択して読み出すことを特徴とする。
【００１１】
本発明のタイマーは、このタイマーに入力されるカウントクロック（clock）を２分周した分周クロック（clock２）を作り出す分周回路と、このclock２を入力してカウントイネーブル信号（signal３）を生成するsignal３生成回路と、前記clockとsignal３を入力し、signal３がHighレベルのときclockの立ち下がりでHighレベルとなり、signal３がLowレベルのときclockの立ち下がりでLowレベルとなる信号（signal１）を生成するsignal１生成回路と、このclockとは非同期の中央演算処理装置（ＣＰＵ）からのタイマーリード命令（read）とsignal１を入力し、signal１がHighレベルのときreadが入力されるとHighレベルとなり、signal１がLowレベルのときreadが入力されるとLowレベルとなるセレクタ信号（signal２）を生成するsignal２生成回路と、前記clockと前記signal３が入力されることによりそのカウント値をインクリメントするとともに、そのインクリメント時刻が互いにずらされた第１及び第２のカウンタと、前記signal２生成回路からsignal２信号のレベルに応じて前記第１及び第２のカウンタのいずれか一方を選択するセレクタと、該セレクタで選択された第１のカウンタまたは第２のカウンタのカウント値を保持し、前記ＣＰＵからのreadが入力されたとき保持しているカウント値をデータとして出力するタイマーカウントレジスタとを備えていることを特徴とする。
【００１２】
本発明によれば、携帯電話、又はその他の電気機器、製品に使用されているＬＳＩにおける内蔵タイマー回路の、タイマーカウンタの読み出し部分について、中央演算処理装置ＣＰＵから一回のリード命令で、ＣＰＵクロックに対して非同期のタイマーカウンタの値を正確に読み出すことが可能となる。
【００１３】
【発明の実施の形態】
図１は、本発明の第１の実施形態を示すタイマーのブロック図である。
【００１４】
図１において、１／２分周回路１１１は、このタイマーに入力されるカウントクロック（clock）を２分周したクロック（clock２）を作り出す。signal３生成回路１１０は、clock２を入力してカウントイネーブル信号（signal３）を生成する。このclockとsignal３はカウンタ１０３に入力され、カウンタ１０３は、signal３がHighレベルのときclockの立ち上がりでそのカウント値をインクリメントする。また、このclockとsignal３はカウンタ１０４に入力され、カウンタ１０４は、signal３がLowレベルのときclockの立ち上がりでカウンタ１０３のカウント値をラッチする。
【００１５】
さらに、このclockとsignal３はsignal１生成回路１０８に入力される。signal１生成回路１０８は、signal３がHighレベルのときclockの立ち下がりでHighレベルとなり、signal３がLowレベルのときclockの立ち下がりでLowレベルとなることにより第１のカウンタ１０３がカウント値をインクリメントする前後１／２クロック区間Highレベルとなる信号（signal１）を生成してsignal２生成回路１０９へ出力する。
【００１６】
signal２生成回路１０９は、このsignal１および、上記カウントクロック（clock）とは非同期の中央演算処理装置（ＣＰＵ）１０１からのタイマーリード命令（read）とを入力し、signal１がHighレベルのときreadが入力されるとHighレベルとなり、signal１がLowレベルのときreadが入力されるとLowレベルとなるセレクタ信号（signal２）を生成する。
【００１７】
signal２はセレクタ１０５に入力される。セレクタ１０５は、signal２がLowレベルのとき第１のカウンタ１０３の出力を選択し、signal２がHighレベルのとき第２のカウンタ１０４の出力を選択してタイマーカウントレジスタ１０６へ出力する。タイマーカウントレジスタ１０６は、セレクタ１０５により選択されたカウンタのカウント値を保持し、ＣＰＵ１０１からのタイマーリード命令が入力されたとき保持しているカウント値をデータとして出力する。
【００１８】
本実施形態のタイマーブロック１０２は、まず、このタイマーに入力されるカウントClock（clock）を分周回路１１１で２分周してclock２を作り出し、このclock２を、signal３生成回路１１０に入力し、カウントイネーブル信号signal３を生成する。このsignal３とclockをsignal１生成回路１０８に入力して、signal１を生成し、そのsignal１とＣＰＵからのリード命令を反転したI_read信号とで生成されるsignal2を、第１カウンタ１０３と第２カウンタ１０４のどちらをリードデータとしてタイマーカウントレジスタ１０６に取り込むかのセレクタ信号として用いる。
【００１９】
本実施形態のタイマーブロック１０２におけるタイマーとしてのカウンタは第１カウンタ１０３であり、第２カウンタ１０４は、本発明の効果を得るために付加されたカウンタである。得られたタイマーカウント値のデータはタイマーカウントレジスタ１０６からdata_outとして出力され、リードデータとして外部バス１０７から出力される。
【００２０】
なお、ＬＳＩには、図１のＣＰＵ１０１、タイマーブロック１０２、外部バス１０７のほかに、多数の機能ブロックが存在する。また、図１のタイマーブロック１０２の中には、デコーダ、レジスタなどの機能部分が存在するが、本発明とは直接関係しないので、その詳細な構成は省略する。
【００２１】
本実施形態によれば、タイマーカウントレジスタ１０６が保持しているデータの変化時点と、タイマーカウンタとは非同期の中央演算処理装置ＣＰＵ１０１からのリード（read）命令が一致することはないので、カウントクロックと非同期のＣＰＵ１０１から一回のリード（read）命令でタイマーカウンタの値を正確に読み出すことが可能になる。
【００２２】
以下、本実施形態の動作につき説明する。まず、カウントイネーブル信号signal３と第１カウンタ１０３の動作について説明する。図２では、本タイマーにおいて、clockの４分周で第１カウンタ１０３をカウントアップするように設定したインターバルタイマーの例として示している。
【００２３】
図２のタイミング図に示されるように、signal３は、本タイマーブロック１０２のカウントイネーブル信号であり、clock２の２クロック毎に、１クロックパルスをマスクして生成した信号である。signal３がHighの時のclockの立ち下がりで、第１カウンタ１０３は、ｎからｎ＋１、ｎ＋１からｎ＋２というようにカウントアップされる。
【００２４】
また、カウントアップの時に、図示されていない比較器に設定されているcmp値（値Ｎ）と比較され、第１カウンタ１０３のカウント値がＮに等しくなったとき、タイマーブロック１０２からＣＰＵ１０１に対して、割込み信号ＩＮＴをclockの１パルス幅分だけ出力し、第１カウンタ１０３は０にクリアされる。
【００２５】
次に、signal１とセレクタ信号signal２の動作について図３のタイミング図を用いて説明する。なお、図３のタイミング図では、カウントイネーブル信号signal３は、clockの３周期毎にclock１周期分のパルス幅からなるHighパルス信号として出力されることにより、第１カウンタ１０３をカウントアップするように設定したインターバルタイマの例として示している。
【００２６】
ＣＰＵ１０１からのread命令は、タイマーブロック１０２内部で反転されて、I_read信号に変換される。I_read信号の立ち上がり時点において、signal１が、Highレベル（ディジタル信号処理で、‘１’、‘０’の二つの状態を取るうちの‘１’の状態）の時は、signal２をHighレベルとし、signal１がLowレベル（前記‘０’の状態）の時は、signal２をLowレベルとする。
【００２７】
signal１は、signal３がHighの時のclockの立下りでHighになり、signal３がLowの時のclockの立下りでLowとなる信号である。signal１は、第１カウンタ１０３のカウントインクリメントの瞬間には、必ずHighになっている信号であり、本発明の効果を得るための信号である。
【００２８】
本発明で設けた第２カウンタ１０４は、図３のタイミング図に示すように、signal３がLowの時に、clockの立ち上がりで、第１カウンタ１０３の値をラッチするカウンタであり、第１カウンタ１０３はsignal３がHighの時のclockの立ち上がりでカウントアップされ、第２カウンタ１０４はsignal３がLowになった直後のclockの立ち上がりでカウントアップされることによって、第１カウンタ１０３と第２カウンタ１０４のカウントアップの時刻が重なることが無いように設計されている。
【００２９】
図３では、clockの立ち上がり時点でsignal３がHighからLowに変化するが、signal３はclockの立ち上がり信号が入力された後に立ち下がるので、第１カウンタ１０３がclockの立ち上がり信号を受けた時点ではsignal３はHighとなっており、第１カウンタ１０３のカウントアップが可能である。なお、第１カウンタ１０３のカウントイネーブル信号として、signal３の代わりにsignal１を用いてもよい。あるいは、signal３の立ち下がりでカウントアップするという方法も可能である。
【００３０】
タイマーカウント値をタイマーブロック１０２の外部へ出力するdata_outには、signal２がLowの時は、第１カウンタ１０３の値が出力され、signal２がHighの時は、第２カウンタ１０４の値が出力される。signal１がHighの時は、第２カウンタ１０４にカウントアップの瞬間は無く、signal１がLowの時は、第１カウンタ１０３にカウントアップの瞬間がこないことから、ＣＰＵクロックと、タイマークロックは非同期にもかかわらず、一回のリード命令でタイマーカウント値が正確に読み出せる。
【００３１】
リードデータは、図３に示すリードデータ読み出しタイミング１１２のように、signal１がHighの時に、I_readの立ち上がりでsignal２がHighになった後、I_readがHighの間だけ、第２カウンタ１０４の値が外部バス１０７に出力されるか、リードデータ読み出しタイミング１１３のように、signal１がLowの時に、I_readの立ち上がりでsignal２がLowになった後、I_readがHighの間だけ第１カウンタ１０３の値が外部バス１０７に出力される。
【００３２】
また、I_readの立ち上がりと、signal１の変化点がぶつかったときは、signal２はメタステーブルとなり、一定期間不定レベルとなるが、実際の回路では、I_read信号幅はメタステーブル期間よりはるかに長く、さらにI_readの立ち下がりに近いタイミングでデータが取り込まれるので、I_readの立ち上がりと、signal１の変化点が一致した場合は、signal１の変化後の値がHighならば第２カウンタ１０４の値を取り込み、Lowならば第１カウンタ１０３の値を取り込むので、問題ない構成となっている。
【００３３】
図４は、ＣＰＵ１０１からのリード命令に対して、第１カウンタ１０３及び第２カウンタ１０４から読み出せる値を示しており、グレーの網掛け部分が、実際リード命令が来た時に読み出せる値である。本発明で新たに追加した第２カウンタと、実際のタイマーカウント値である第１カウンタの値との誤差は、第１カウンタがカウントアップされてから、signal１がLowになるまでの間の１／２クロックである。従って、本発明の場合、読み出し誤差は、カウントクロックの１／２で済むという特徴もある。
【００３４】
図５は、本発明の第２の実施形態における動作を示すタイミング図である。本実施形態は、その基本的構成は第１の実施形態と同様であるが、第２カウンタ１０４のカウントアップタイミングなどについてさらに工夫している。
【００３５】
図５において、signal２がHighの時は第２カウンタ１０４、Lowの時は第１カウンタ１０３を読み出すことは、第１の実施形態と同じであるが、第２カウンタ１０４の動作をsignal１がLowの時に、clockの立ち上がりで第１カウンタ１０３をラッチするのではなく、signal３の立ち上がりで、第１カウンタ１０３の値に１を加えた値を第２カウンタ１０４の値とする方法を採用している。この場合の誤差も、signal１がHighになってから、第１カウンタ１０３がインクリメントされるまでの１／２クロックとなり、第１の実施形態と同様の作用効果が得られる。
【００３６】
またさらに、動作タイミングは図５と同じであるが、第２カウンタ１０４の値を第１カウンタ１０３の値をラッチするのではなく、signal３の立ち上がりでカウントアップするという方法も可能である。この場合は、第１カウンタ１０３と同様に、第２カウンタ１０４にも、図２に示すｃｍｐと等しくなった場合に、第２カウンタ１０４をクリアする回路が別に必要となるが、カウンタの値が一回のリード命令で正確に読み出せること、誤差は１／２クロックであることから、本発明の作用効果が得られる。
【００３７】
なお、signal１生成回路〜signal３生成回路の出力レベル（Highレベル、Lowレベル）は、動作説明の便宜上図３〜図５の波形図に従って説明しているが、これらの回路の出力レベルは、必ずしも図３〜図５の波形図通りである必要はなく、第１のレベルと第２のレベルを出力可能な適宜の生成回路とすることができる。
【００３８】
【発明の効果】
本発明では、signal１〜signal３と、インクリメントのタイミングを第１カウンタとはずらした第２カウンタを用いることにより、カウンタのカウントアップの瞬間と、リード命令が重なることが無いようにしているので、ＣＰＵに対して非同期のタイマーカウント値をリードする際に、期待値以外のデータが読み出されることはない構成となっている。
【００３９】
さらに、本発明では、一回のリード命令でタイマーカウンタ値を正確に読み出すことができ、ＣＰＵのスループットの低下を防ぐことができる。
【００４０】
また、本発明の場合、新たに追加した第２カウンタと、実際のタイマーカウント値である第１カウンタの値との誤差は、第１カウンタがカウントアップされてから、signal１がLowになるまでの間の１／２クロックに抑えることができる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態を示すタイマーのブロック図である。
【図２】本実施形態における第１カウンタの動作を示すタイミング図である。
【図３】本実施形態における動作を示すタイミング図である。
【図４】本実施形態において、ＣＰＵからのリード命令に対して、第１カウンタ及び第２カウンタから読み出せる値を示す図である。
【図５】本発明の第２の実施形態における動作を示すタイミング図である。
【符号の説明】
１０１：中央演算処理装置（ＣＰＵ）
１０２：タイマー回路ブロック
１０３：タイマーカウンタ
１０４：本発明の効果を作り出すカウンタ
１０５：セレクタ
１０６：タイマーカウント値読み出しレジスタ
１０７：外部出力バス
１０８：signal１生成回路
１０９：signal２生成回路
１１０：signal３生成回路
１１１：分周回路
１１２：リードデータ読み出しタイミング１
１１３：リードデータ読み出しタイミング２
【図１】
0004189729.tif 000002
【図２】
0004189729.tif 000003
【図３】
0004189729.tif 000004
【図４】
0004189729.tif 000005
【図５】
0004189729.tif 000006