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