(57)【要約】【課題】クロック同期式通信バスにおいて、配線負荷や駆動回路の特性が変動したことに起因してクロックの波形が鈍っても、それに応じて通信速度を補正し、変動を抑える。【解決手段】通信インターフェース回路は、クロック配線（ＳＣＬ）を駆動しＳＣＬの信号レベルを入力クロック信号（ＳＣＬ＿Ｉ）として入力する入出力バッファ（１４＿ＳＣＬ）と、クロック信号生成回路（１）とを備える。クロック信号生成回路は、所定のハイ期間のハイレベルと所定のロウ期間のロウレベルとを繰り返す出力クロック信号（ＳＣＬ＿Ｏ）を生成してＳＣＬを駆動させ、ＳＣＬ＿Ｏを立ち上げた後それに応じたＳＣＬの立上りを検出するまでの時間を立上り時間（Ｔｒ）として測定し、ＳＣＬ＿Ｏを立ち下げた後それに応じたＳＣＬの立下りを検出するまでの時間を立下り時間（Ｔｆ）として測定する。ハイ期間とロウ期間は、測定されたＴｒとＴｆに基づいて、それぞれ補正される。【選択図】図２
2017126850.tif 000002
【特許請求の範囲】
【請求項１】
クロック同期式通信バスのクロック配線をプルダウンして駆動可能なトランジスタと、
前記トランジスタを駆動するクロック信号生成回路と、
前記クロック配線の信号レベルが入力され、当該信号レベルの立上りタイミングと立下りタイミングとをそれぞれ検出するエッジ検出回路と、
前記立上りタイミングからロウカウント値の期間をカウントしてロウ期間とし、前記クロック信号生成回路を制御して、当該ロウ期間、前記トランジスタにより前記クロック配線をプルダウン駆動させる、ロウ期間生成カウンタと、
前記立下りタイミングからハイカウント値の期間をカウントしてハイ期間とし、前記クロック信号生成回路を制御し、当該ハイ期間、前記トランジスタによる前記クロック配線のプルダウン駆動を停止させる、ハイ期間生成カウンタと、
前記クロック信号生成回路が前記トランジスタによる前記クロック配線のプルダウン駆動を開始してから、前記エッジ検出回路によって検出された前記立下りタイミングまでの期間を計測して立下り時間を求める、立下り測定回路と、
前記クロック信号生成回路が前記トランジスタによる前記クロック配線のプルダウン駆動を停止してから、前記エッジ検出回路によって検出された前記立上りタイミングまでの期間を計測して立上り時間を求める、立上り測定回路とを備え、
前記立上り時間に基づいて前記ハイ期間が調整され、前記立下り時間に基づいて前記ロウ期間が調整される、
通信インターフェース回路。
【請求項２】
請求項１において、立上り時間設定レジスタと、立下り時間設定レジスタと、ハイ期間設定レジスタと、ロウ期間設定レジスタと、第１減算器と、第２減算器と、第１加算器と、第２加算器とをさらに備え、
前記第１減算器は、前記立上り時間設定レジスタに設定される立上り時間設定値と前記立上り時間との差分を立上り時間補正値として前記第１加算器に供給し、前記第１加算器は、前記ハイ期間設定レジスタに設定されるハイ期間設定値に、前記立上り時間補正値を加算することによって、前記ハイ期間を調整して前記ハイ期間生成カウンタに供給し、
前記第２減算器は、前記立下り時間設定レジスタに設定される立下り時間設定値と前記立下り時間との差分を立下り時間補正値として前記第２加算器に供給し、前記第２加算器は、前記ロウ期間設定レジスタに設定されるロウ期間設定値に、前記立下り時間補正値を加算することによって、前記ロウ期間を調整して前記ロウ期間生成カウンタに供給する、
通信インターフェース回路。
【請求項３】
請求項２において、補正イネーブル信号がアサートされたときに、前記第１加算器の出力が前記ハイ期間に反映され、前記第２加算器の出力が前記ロウ期間に反映される、
通信インターフェース回路。
【請求項４】
請求項３において、立上り時間と立下り時間の変動に対する許容範囲が設定可能な立上り／立下り時間変動許容範囲レジスタと、異常検知回路とをさらに備え、
前記異常検知回路は、前記立上り時間補正値と前記立下り時間補正値のうちの少なくとも一方が、前記立上り／立下り時間変動許容範囲レジスタに設定された許容範囲を外れたときに、異常検知信号を出力する、
通信インターフェース回路。
【請求項５】
前記補正イネーブル信号を供給する補正イネーブルレジスタをさらに備える、請求項３記載の通信インターフェース回路と、ＣＰＵと、バスとを備え、
前記ＣＰＵは、前記バスを介して、前記立上り時間設定レジスタと、前記立下り時間設定レジスタと、前記ハイ期間設定レジスタと、前記ロウ期間設定レジスタと、前記補正イネーブルレジスタとにアクセス可能とされる、
半導体集積回路。
【請求項６】
前記補正イネーブル信号を供給する補正イネーブルレジスタをさらに備える、請求項４記載の通信インターフェース回路と、ＣＰＵと、バスとを備え、
前記ＣＰＵは、前記バスを介して、前記立上り時間設定レジスタと、前記立下り時間設定レジスタと、前記ハイ期間設定レジスタと、前記ロウ期間設定レジスタと、前記立上り／立下り時間変動許容範囲レジスタと、前記補正イネーブルレジスタとにアクセス可能とされ、前記異常検知信号が割り込み信号として入力される、
半導体集積回路。
【請求項７】
請求項３において、
前記通信インターフェース回路は、前記クロック同期式通信バスのデータ配線をプルダウンして駆動可能なデータ線駆動回路と、前記データ線駆動回路を制御するデータ制御回路と、前記バスを介して前記ＣＰＵによって制御される通信制御回路とをさらに備える、
半導体集積回路。
【請求項８】
請求項１記載の通信インターフェース回路と、ＣＰＵと、バスとを備える半導体集積回路であって、
前記通信インターフェース回路は、前記立上り時間を保持する立上り時間レジスタと、前記立下り時間を保持する立下り時間レジスタと、保持する値を前記ハイカウント値として前記ハイ期間生成カウンタに供給するハイカウントレジスタと、保持する値を前記ロウカウント値として前記ロウ期間生成カウンタに供給するロウカウントレジスタとをさらに備え、
前記ＣＰＵは、前記バスを介して、前記立上り時間レジスタと、前記立下り時間レジスタと、前記ハイ期間設定レジスタと、前記ロウ期間設定レジスタとにアクセス可能とされ、
前記ＣＰＵは、キャリブレーション期間に実行される通信速度の補正処理において、
前記立上り時間レジスタから読み出した前記立上り時間の値と、所定の立上り時間設定値との差分を求め、前記差分を所定のハイ期間設定値に加算して、前記ハイカウント値として前記ハイカウントレジスタに書き込み、
前記立下り時間レジスタから読み出した前記立下り時間の値と、所定の立下り時間設定値との差分を求め、前記差分を所定のロウ期間設定値に加算して、前記ロウカウント値として前記ロウカウントレジスタに書き込む、
半導体集積回路。
【請求項９】
クロック同期式通信バスのクロック配線を駆動し前記クロック配線の信号レベルを入力クロック信号として入力する入出力バッファと、前記入力クロック信号が供給されるクロック制御回路とを備え、
前記クロック制御回路は、
所定のハイ期間のハイレベルと所定のロウ期間のロウレベルとを繰り返す出力クロック信号を生成して、前記入出力バッファによって前記クロック配線を駆動させ、
前記出力クロック信号をロウレベルからハイレベルに立ち上げた後、それに応じた前記クロック配線の信号の立上りを前記入力クロック信号の立上りによって検出するまでの時間を、立上り時間として測定し、
前記出力クロック信号をハイレベルからロウレベルに立ち下げた後、それに応じた前記クロック配線の信号の立下りを前記入力クロック信号の立下りによって検出するまでの時間を、立下り時間として測定し、
測定された前記立上り時間と前記立下り時間に基づいて、前記ハイ期間と前記ロウ期間をそれぞれ補正する、
通信インターフェース回路。
【請求項１０】
請求項９において、
前記クロック制御回路は、接続されるプロセッサによってアクセス可能な通信速度設定レジスタと演算回路とを備え、
前記通信速度設定レジスタは、立上り時間想定値と、立下り時間想定値と、ハイ期間設定値と、ロウ期間設定値とを保持し、
前記出力クロック信号のハイレベルとロウレベルの期間は、それぞれ前記ハイ期間設定値と前記ロウ期間設定値によって規定され、
前記演算回路は、前記立上り時間想定値から測定された前記立上り時間を引いた差を前記ハイ期間設定値に加算して前記ハイ期間設定値を更新し、前記立下がり時間想定値から測定された前記下がり時間を引いた差を前記ロウ期間設定値に加算して前記ロウ期間設定値を更新する、
通信インターフェース回路。
【請求項１１】
請求項１０において、
前記通信速度設定レジスタは、補正イネーブル制御値をさらに保持し、
前記補正イネーブル制御値によって補正が許可されたときには、前記演算回路は、前記ハイ期間設定値と前記ロウ期間設定値の更新を実行し、
前記補正イネーブル制御値によって補正が禁止されたときには、前記ハイ期間設定値と前記ロウ期間設定値は更新されず、前記通信速度設定レジスタに維持される、
通信インターフェース回路。
【請求項１２】
請求項１０において、
前記クロック制御回路は、異常検知回路をさらに備え、
前記通信速度設定レジスタは、立上り時間と立下り時間の変動に対する許容範囲を示す立上り／立下り時間変動許容範囲値をさらに保持し、
前記異常検知回路は、前記立上り時間補正値と前記立下り時間補正値のうちの少なくとも一方が、前記立上り／立下り時間変動許容範囲レジスタに設定された許容範囲を外れたときに、異常検知信号を出力する、
通信インターフェース回路。
【請求項１３】
プロセッサと、入出力バッファと、前記入力クロック信号が供給されるクロック制御回路とを備え、接続されるクロック同期式通信バスを利用する通信が可能な半導体集積回路であって、
前記入出力バッファは、入力される出力クロック信号に基づいて、前記通信バスのクロック配線を駆動し、前記クロック配線の信号レベルを入力クロック信号として入力して前記クロック制御回路に供給し、
前記クロック制御回路は、前記プロセッサからアクセス可能であり、ハイ期間とロウ期間と立上り時間と立下り時間とを保持可能な、レジスタを備え、
前記プロセッサは、前記レジスタにハイ期間とロウ期間とを設定し、
前記クロック制御回路は、前記レジスタに設定された前記ハイ期間のハイレベルと前記ロウ期間のロウレベルとを繰り返すクロックを生成して、前記出力クロック信号として出力し、
前記入出力バッファは、前記出力クロック信号に基づいて前記クロック配線を駆動し、それに伴う前記クロック配線の信号レベルを前記入力クロック信号として入力して前記クロック制御回路に供給し、
前記クロック制御回路は、前記出力クロック信号がロウレベルからハイレベルに立ち上げた後、それに応じた前記クロック配線の信号の立上りを前記入力クロック信号の立上りによって検出するまでの時間を、立上り時間として測定して前記レジスタに格納し、
前記クロック制御回路は、前記出力クロック信号がハイレベルからロウレベルに立ち下げた後、それに応じた前記クロック配線の信号の立下りを前記入力クロック信号の立下りによって検出するまでの時間を、立下り時間として測定して前記レジスタに格納し、
前記プロセッサは、測定された前記立上り時間と前記立下り時間とを読出し、それぞれの期待値と比較することによって、立上り時間補正値と立下り時間補正とを算出し、前記立上り時間補正値と前記立下り時間補正とに基づいて、前記ハイ期間と前記ロウ期間を補正して、補正されたハイ期間とロウ期間を前記レジスタに書き込む、
半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信インターフェース回路および半導体集積回路に関し、特にクロック同期式のシリアル通信を行う通信インターフェース回路およびその通信インターフェース回路が搭載される半導体集積回路に好適に利用できるものである。
【背景技術】
【０００２】
ＬＳＩ（Large Scale Integrated-circuit）間の通信には、例えばＩ２Ｃ（Inter-Integrated Circuit）バスのようなクロック同期式のシリアル通信が広く使用されている。Ｉ２Ｃバスは、クロックＳＣＬとデータＳＤＡの２本の信号線で構成され、プルアップされた信号線がオープンドレイン方式あるいはオープンコレクタ方式で駆動される。
【０００３】
特許文献１には、通信ノードの増減に対応して同期クロック信号のデューティを補正することができる、クロック信号出力回路が開示されている。マスタ側にクロック信号線ＳＣＬをモニタしてそのロウ期間をカウントする入力ロウ幅カウンタを備え、デューティ設定レジスタに設定された期待値と比較して、ボーレートジェネレータのデューティを補正する。
【０００４】
特許文献２には、配線の負荷容量に起因するクロックレートの低下を防止することができる、クロック配線駆動回路が開示されている。クロックの立上り時間及び立下り時間をそれぞれカウントし、立上り時間をカウントしている間にはハイレベルのクロックを出力させ、立下り時間をカウントしている間にはロウレベルのクロックを出力させる、クロック発生カウンタを備える。シングルマスタ動作では、クロック立ち上がり同期機能を停止することでクロックレートの低下を防止する。また、マルチマスタ時は一定期間クロック立ち上がり同期機能を停止することでクロックレートの低下を防止する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１４３６８３号公報
【特許文献２】特開２００４−３１０６７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１及び２について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００７】
特許文献１に開示される回路によれば、配線負荷や駆動回路の特性が変動したことに起因して、クロックの波形が鈍っても、それに応じてクロック信号のデューティを補正することができるとされる。しかしこのとき、クロックの立上り時間または立下り時間の一方が長くなっても一定のデューティに補正される結果、そのクロックの周波数が低下し、データ転送レートが低下することとなる。
【０００８】
一方、特許文献２に開示される回路を用いれば、負荷容量の変動に伴うクロックレートの低下を防止することができるとされるが、同文献に開示される技術は、立ち下り時間が負荷容量の影響を受けないことを前提として、立ち下り同期を実施している（第００５０段落）。しかしながら、実際には立ち下り時間も様々な要因で変化し、クロックレートに影響を与えるためクロックレートの低下を防止できる状況は限定的であり根本的な解決にはなっていない。
【０００９】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
一実施の形態によれば、下記の通りである。
【００１１】
すなわち、クロック同期式通信バスのクロック配線を駆動しその信号レベルを入力クロック信号として入力する入出力バッファと、クロック制御回路とを備える、通信インターフェース回路であって、以下のように構成される。
【００１２】
クロック制御回路は、所定のハイ期間のハイレベルと所定のロウ期間のロウレベルとを繰り返す出力クロック信号を生成して、入出力バッファによってクロック配線を駆動させる。クロック制御回路は、出力クロック信号を立ち上げた後、それに応じたクロック配線の信号の立上りを入力クロック信号の立上りによって検出するまでの時間を、立上り時間として測定し、出力クロック信号を立ち下げた後、それに応じたクロック配線の信号の立下りを入力クロック信号の立下りによって検出するまでの時間を、立下り時間として測定する。
【００１３】
クロック制御回路に接続されるプロセッサが、測定された立上り時間と立下り時間に基づいて、前記ハイ期間とロウ期間をそれぞれ補正して、補正後のハイ期間とロウ期間をクロック制御回路に供給する。または、クロック制御回路自身に演算回路を実装して、測定された立上り時間と立下り時間に基づいて、前記ハイ期間とロウ期間それぞれの補正値を算出して、前記ハイ期間とロウ期間を補正する。
【発明の効果】
【００１４】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１５】
すなわち、配線負荷や駆動回路の特性が変動したことに起因してクロックの波形が鈍っても、それに応じて通信速度を補正し、変動を抑えることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、比較例の通信インターフェース回路の構成を示すブロック図である。
【図２】図２は、実施形態１の通信インターフェース回路の構成例を示すブロック図である。
【図３】図３は、Ｔｒ／Ｔｆ測定回路の構成例を示すブロック図である。
【図４】図４は、通信インターフェース回路における補正前の動作例を示すタイミングチャートである。
【図５】図５は、通信インターフェース回路における補正後の動作例を示すタイミングチャートである。
【図６】図６は、通信インターフェース（Ｉ２Ｃバスインターフェース）回路が搭載されるＬＳＩ（ＭＣＵ）と他の通信相手のデバイスとのクロック同期式バスによる接続例を示すブロック図である。
【図７】図７は、実施形態２の通信インターフェース回路の構成例を示すブロック図である。
【図８】図８は、実施形態３の通信インターフェース回路の構成例を示すブロック図である。
【図９】図９は、実施形態３の通信インターフェース回路の動作例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００１８】
〔実施形態１〕
図１は、本発明者が検討にあたって従来技術の課題を明確にするために、単純な構成を想定した比較例の通信インターフェース回路１０の構成を示すブロック図である。通信インターフェース回路１０は、例えば、Ｉ２Ｃバスインターフェースであって、ＬＳＩの一例であるＭＣＵ（Micro-Controller Unit）２０に集積回路として実装されており、１個または複数個の通信相手のデバイス４０と、クロック配線ＳＣＬとデータ配線ＳＤＡの２本で接続される。図中の配線は、明細書で特に説明しない限りは、それぞれ任意の本数の信号線で実装されるが、図では１本か複数本かの区別はせず、所謂ベクトル表記は省略されている。このことは、本願における他の図面についても同様である。
【００１９】
クロック配線ＳＣＬとデータ配線ＳＤＡは、それぞれ所定の電圧レベルＶＩＮにプルアップ抵抗（Ｒｐ）３１と３２で接続されており、オープンドレインまたはオープンコレクタのトランジスタで駆動される。図示される容量（Ｃｂ）３３と３４は、配線容量と通信相手のデバイス４０などの通信バスに接続されるデバイスによる負荷容量の合計を模式的に集中定数で表した容量である。クロック配線ＳＣＬとデータ配線ＳＤＡは、オープンドレインまたはオープンコレクタのトランジスタで駆動されることによってロウレベルに遷移し、駆動が停止されるとプルアップ抵抗（Ｒｐ）３１と３２を通して所定の電圧レベルＶＩＮに充電されることによってハイレベルに遷移する。ロウレベルは例えば接地電位（０Ｖ）であり、所定の電圧レベルＶＩＮは上記接地電位を基準として例えば５Ｖ、３．３Ｖ、３Ｖなど、通信バスの仕様を満足する電圧レベルに設定される。
【００２０】
通信インターフェース回路（Ｉ２Ｃバスインターフェース）１０は、ＭＣＵ２０の端子１８と１９を介して、上述のクロック配線ＳＣＬとデータ配線ＳＤＡにそれぞれ接続され、ＭＣＵ２０内で内部バス２２を介してＣＰＵ（Central Processing Unit）２１と接続されている。通信インターフェース回路１０は、端子１８と１９にそれぞれ接続されるＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）とＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）、内部バス２２に接続される通信制御回路１２とデータ制御回路１３、及び、内部バス２２に接続されＣＰＵ２１からアクセス可能な通信速度設定レジスタ８を有するクロック制御回路１１を備える。
【００２１】
ＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）とＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）は、それぞれオープンドレインのＭＯＳＦＥＴ１５とインバータ１６と入力バッファ１７とで構成されている。
【００２２】
ＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）は、データ制御回路１３から供給される出力データ信号ＳＤＡ＿Ｏに基づいて端子１９を介してデータ配線ＳＤＡを駆動し、データ配線ＳＤＡからの入力をＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）内のバッファ１７を介して入力データ信号ＳＤＡ＿Ｉとしてデータ制御回路１３に供給する。出力データ信号ＳＤＡ＿Ｏがロウレベルの期間は、通信バスのデータ配線ＳＤＡをロウで駆動し、出力データ信号ＳＤＡ＿Ｏがハイレベルの期間はデータ配線ＳＤＡを開放する。データ配線ＳＤＡは開放されることによって、プルアップ抵抗（Ｒｐ）３２を通してＶＩＮに向けて充電され、ハイレベルに遷移する。データ受信時には、データ制御回路１３は出力データ信号ＳＤＡ＿Ｏをハイレベルとしてデータ配線ＳＤＡを開放し、通信相手のデバイス４０によって駆動・制御されるデータ配線ＳＤＡの信号レベルを、入力バッファ１７で検出して入力データ信号ＳＤＡ＿Ｉとしてデータ制御回路１３に供給する。
【００２３】
ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）は、クロック制御回路１１から供給される出力クロック信号ＳＣＬ＿Ｏに基づいて端子１８を介してクロック配線ＳＣＬを駆動し、クロック配線ＳＣＬの電位状態をＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）内のバッファ１７を介して入力クロック信号ＳＣＬ＿Ｉとしてクロック制御回路１１に供給する。出力クロック信号ＳＣＬ＿Ｏがロウレベルの期間は通信バスのクロック配線ＳＣＬをロウで駆動し、出力クロック信号ＳＣＬ＿Ｏがハイレベルの期間はクロック配線ＳＣＬを開放する。クロック配線ＳＣＬは開放されることによって、プルアップ抵抗（Ｒｐ）３１を通してＶＩＮに向けて充電され、ハイレベルに遷移する。ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）は、バッファ１７によって、自身が駆動しているクロック配線ＳＣＬの電圧レベルを入力クロック信号ＳＣＬ＿Ｉとしてクロック制御回路１１に入力している。
【００２４】
クロック制御回路１１は、上述の通信速度設定レジスタ８に加えてさらに、クロック（ＳＣＬ）生成回路１、エッジ検出回路２、ハイ期間生成カウンタ３、及び、ロウ期間生成カウンタ４を有する。
【００２５】
通信インターフェース回路１０は、ＭＣＵ２０が通信のマスタとして機能するときには、クロック制御回路１１とＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）を動作させてクロック配線ＳＣＬにクロック信号を出力し、通信制御回路１２とデータ制御回路１３とＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）とを動作させて、クロック配線ＳＣＬに出力したクロック信号と同期するデータの送受信を行う。このときＣＰＵ２１は通信速度を指定するために、通信速度設定レジスタ８にクロック配線ＳＣＬのハイ期間設定値とロウ期間設定値とを書き込む。設定されたハイ期間設定値とロウ期間設定値は、ハイ期間設定値Ｈ＿ｃｎｔとロウ期間設定値Ｌ＿ｃｎｔとしてハイ期間生成カウンタ３とロウ期間生成カウンタ４とにそれぞれ供給されている。ＳＣＬ生成回路１は、設定されたハイ期間設定値とロウ期間設定値とに基づいて、出力クロック信号ＳＣＬ＿ＯをＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）に供給し、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）は通信バスのクロック配線ＳＣＬを駆動する。
【００２６】
エッジ検出回路２には、入力クロック信号ＳＣＬ＿Ｉが入力されており、クロック配線ＳＣＬの電圧レベルの立上りを検出して、立上り検出信号Ｔｒ＿ｄｅｔとしてハイ期間生成カウンタ３に供給し、クロック配線ＳＣＬの電圧レベルの立下りを検出して、立下り検出信号Ｔｆ＿ｄｅｔとしてロウ期間生成カウンタ４に供給する。ハイ期間生成カウンタ３は、立上り検出信号Ｔｒ＿ｄｅｔが入力された時点でカウント動作を開始し、通信速度設定レジスタ８から供給されるハイ期間設定値Ｈ＿ｃｎｔに至るまでをクロックＳＣＬをハイ期間とするために出力クロック信号ＳＣＬ＿Ｏにハイとしてクロック生成回路１に供給する。ロウ期間生成カウンタ４は、立下り検出信号Ｔｆ＿ｄｅｔが入力された時点でカウント動作を開始し、通信速度設定レジスタ８から供給されるロウ期間設定値Ｌ＿ｃｎｔに至るまでをクロックＳＣＬをロウ期間とするために出力クロック信号ＳＣＬ＿Ｏにロウとしてクロック生成回路１に供給する。
【００２７】
Ｉ２Ｃバスのクロック制御回路１１は、基本的にはハイ期間生成カウンタ３とロウ期間生成カウンタ４によって、クロックＳＣＬのハイ期間とロウ期間を生成する。
【００２８】
Ｉ２Ｃバスインターフェースのプロトコルでは、スレーブである通信相手のデバイス４０がクロック配線ＳＣＬを操作して、マスターデバイスに通信（クロックの送出）を一時的に停止させることが可能である。そのため、ＭＣＵ２０のＩ２Ｃバスインターフェース１０は、クロック配線ＳＣＬからのフィードバックである入力クロック信号ＳＣＬ＿Ｉをモニタし、ＳＣＬが実際に立上るまではハイ期間生成カウンタ３を動作させない。また、ＳＣＬが実際に立下がるまではロウ期間生成カウンタ４を動作させない。
【００２９】
また、Ｉ２Ｃバスインターフェースのプロトコルにはマルチマスタ時のＳＣＬ同期仕様があり、通信相手のデバイスの動作をモニタしながら動作することが必要であるため、クロック配線ＳＣＬの立上がりからハイ期間をカウントし、立下りからロウ期間をカウントする必要がある。このため、クロック配線ＳＣＬをモニタすると通信周期は、ハイカウント値とロウカウント値の合計値とは一致せず、さらに立上り時間Ｔｒと立下り時間Ｔｆが加算される。このＴｒとＴｆは、クロック配線ＳＣＬの負荷やＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）の特性によって変わるため、通信速度が期待するものにならない可能性がある。
【００３０】
立上り時間Ｔｒは、容量Ｃｂとプルアップ抵抗（Ｒｐ）３１の値に依存して決まり、立下り時間Ｔｆは容量ＣｂとＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５が持つ電流駆動能力に依存して決まる。そこで、ＭＣＵ２０のユーザは、通信相手のデバイス４０が全て接続され、プルアップ抵抗３１の値も決められた、実装状態における容量Ｃｂを、設計値からまたはシミュレーションによってあるいは実物の測定によって求め、立上り時間Ｔｒと立下り時間Ｔｆの期待値（予測値）を算出する。そして、ＭＣＵ２０のユーザは、所望の通信速度が得られるように、算出された立上り時間Ｔｒと立下り時間Ｔｆの期待値を使って、ハイ期間設定値とロウ期間設定値とを予め調整して設定する。
【００３１】
図６は、通信インターフェース回路１０が搭載されるＬＳＩ（ＭＣＵ）２０と他の通信相手のデバイス４０＿１〜４０＿ｎとのクロック同期式バスによる接続例を示すブロック図である。通信バスを構成するクロックＳＣＬとデータＳＤＡは、ＭＣＵ２０の端子１８と１９に接続され、ｎ個の他の通信相手のデバイス４０＿１〜４０＿ｎとも接続されている。クロックＳＣＬとデータＳＤＡは、プルアップ抵抗Ｒｐ３１と３２でそれぞれＶＩＮにプルアップされ、それぞれの負荷容量は、容量Ｃｂ３３と３４によって代表して図示されている。通信相手のデバイス４０＿１〜４０＿ｎの種類や数、クロックＳＣＬとデータＳＤＡの配線経路などの実装状態が確定していれば、負荷容量Ｃｂ３３と３４は、シミュレーションや実測などによって求めることができるので、ハイ期間設定値とロウ期間設定値とを予め調整して設定することも、ある程度の精度の範囲内で可能である。しかし、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５が持つ電流駆動能力の製造ばらつきによる変動や温度や電源電圧の変化に起因する変動まで、許容される精度の範囲内にあるとは限らない。さらに、例えば、通信バスに接続される電子基板がコネクタ等によって着脱可能とされるようなシステムでは、その着脱によって配線負荷が変化し、通信相手のデバイスの数や種類が変化する場合もある。
【００３２】
このような場合には、改めて立上り時間Ｔｒと立下り時間Ｔｆの期待値を実測等で求めなおし、ハイ期間設定値とロウ期間設定値とを再調整して設定しなおす必要がある。さらに、立下り時間Ｔｆは、上述のようにＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５が持つ電流駆動能力に依存して決まるので、ＭＯＳＦＥＴ１５の製造ばらつき、電源電圧や動作温度変動の影響を受ける。
【００３３】
このような立上り時間Ｔｒと立下り時間Ｔｆの変動やばらつきは、ユーザにとっては設定した通信速度と実際の通信速度との間の誤差として認識され、システムによってはこのような誤差の存在が許容されない場合があることがわかった。
【００３４】
このような課題を解決するために、クロック制御回路１１は、以下の構成を採用することができる。即ち、クロック制御回路１１は、バスインターフェース回路１０において、クロック同期式通信バスのクロック配線ＳＣＬを駆動し、クロック配線ＳＣＬの信号レベルを入力クロック信号ＳＣＬ＿Ｉとして入力する入出力バッファ１４＿ＳＣＬに接続され、以下のように動作する。クロック制御回路１１は、所定のハイ期間のハイレベルと所定のロウ期間のロウレベルとを繰り返す出力クロック信号ＳＣＬ＿Ｏを生成して、入出力バッファ１４＿ＳＣＬによってクロック配線ＳＣＬを駆動させる。
【００３５】
クロック制御回路１１は、出力クロック信号ＳＣＬ＿Ｏをロウレベルからハイレベルに立ち上げた後、それに応じたクロック配線ＳＣＬの信号の立上りを入力クロック信号ＳＣＬ＿Ｉの立上りによって検出するまでの時間を、立上り時間Ｔｒとして測定する。同様にクロック制御回路１１は、出力クロック信号ＳＣＬ＿Ｏをハイレベルからロウレベルに立ち下げた後、それに応じたクロック配線ＳＣＬの信号の立下りを入力クロック信号ＳＣＬ＿Ｉの立下りによって検出するまでの時間を、立下り時間Ｔｆとして測定する。測定された立上り時間Ｔｒと立下り時間Ｔｆに基づいて、ハイ期間とロウ期間をそれぞれ補正する。ハイ期間とロウ期間の補正は、クロック制御回路１１内に演算回路を設けて自動的に行っても良いし、クロック制御回路１１に外付けされる、例えば図１に示されるＣＰＵ２１と同様のプロセッサにおいて、ソフトウェアを実行することによって行っても良い。ソフトウェアによって補正を行う実施の形態については、実施形態３で詳述する。
【００３６】
これにより、配線負荷や駆動回路の特性が変動したことに起因してクロックの波形が鈍っても、それに応じて通信速度を補正し、変動を抑えることができる。
【００３７】
図２は、実施形態１の通信インターフェース回路１０の構成例を示すブロック図である。通信インターフェース回路１０は、例えば、Ｉ２Ｃバスインターフェースであって、ＬＳＩの一例であるＭＣＵ２０に集積回路として実装されており、１個または複数個の通信相手のデバイス４０と、クロック配線ＳＣＬとデータ配線ＳＤＡの２本で接続される。本実施形態１の通信インターフェース回路１０では、クロック制御回路１１内に演算回路を設けて自動的にハイ期間とロウ期間の補正を行う。
【００３８】
クロック配線ＳＣＬとデータ配線ＳＤＡは、それぞれ所定の電圧レベルＶＩＮにプルアップ抵抗（Ｒｐ）３１と３２で接続されており、オープンドレインまたはオープンコレクタのトランジスタで駆動される。図示される容量（Ｃｂ）３３と３４は、配線容量と通信相手のデバイス４０などの通信バスに接続されるデバイスによる負荷容量の合計を模式的に集中定数で表した容量である。通信相手のデバイス４０を含め、通信バスの構成は、図１と同様であるので、より詳しい説明は省略する。
【００３９】
通信インターフェース回路１０は、ＭＣＵ２０の端子１８と１９を介して、上述のクロック配線ＳＣＬとデータ配線ＳＤＡにそれぞれ接続され、ＭＣＵ２０内で内部バス２２を介してＣＰＵ２１と接続されている。通信インターフェース回路１０は、端子１８と１９にそれぞれ接続されるＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）とＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）、内部バス２２に接続される通信制御回路１２とデータ制御回路１３、及び、内部バス２２に接続されＣＰＵ２１からアクセス可能な通信速度設定レジスタ８を有するクロック制御回路１１を備える。ＳＤＡ用Ｉ／Ｏバッファ（１４＿ＳＡＤ）とＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）の構成と、内部信号である、入力データ信号ＳＤＡ＿Ｉ、出力データ信号ＳＤＡ＿Ｏ、入力クロック信号ＳＣＬ＿Ｉ、及び、出力クロック信号ＳＣＬ＿Ｏの接続及びその機能は、図１を引用して説明した比較例と同様であるので、詳しい説明は省略する。
【００４０】
クロック制御回路１１は、図１に示した比較例と同様に、クロック（ＳＣＬ）生成回路１、エッジ検出回路２、ハイ期間生成カウンタ３、ロウ期間生成カウンタ４、及び、通信速度設定レジスタ８に加えてさらに、立上り／立下り（Ｔｒ／Ｔｆ）測定回路５、及び、補正のための演算回路である加算器６＿１と６＿２と減算器７＿１と７＿２とを備える。また、通信速度設定レジスタ８には、比較例ではハイ期間設定値とロウ期間設定値のみが書き込まれるが、本実施形態１では、ハイ期間設定値とロウ期間設定値の他に、立上り時間（Ｔｒ）設定値、立下り時間（Ｔｆ）設定値、及び、ハイ期間とロウ期間の補正を許可する制御データである補正イネーブルとが格納される。
【００４１】
エッジ検出回路２には、入力クロック信号ＳＣＬ＿Ｉが入力されており、クロック配線ＳＣＬの電圧レベルの立上りを検出して、立上り検出信号Ｔｒ＿ｄｅｔとしてハイ期間生成カウンタ３に供給し、クロック配線ＳＣＬの電圧レベルの立下りを検出して、立下り検出信号Ｔｆ＿ｄｅｔとしてロウ期間生成カウンタ４に供給する。エッジ検出回路２の出力である、立上り検出信号Ｔｒ＿ｄｅｔと立下り検出信号Ｔｆ＿ｄｅｔは、Ｔｒ／Ｔｆ測定回路５にも供給される。
【００４２】
Ｔｒ／Ｔｆ測定回路５には、エッジ検出回路２から立上り検出信号Ｔｒ＿ｄｅｔと立下り検出信号Ｔｆ＿ｄｅｔとが入力されるとともに、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）から出力クロック信号ＳＣＬ＿Ｏが入力されている。Ｔｒ／Ｔｆ測定回路５は、これらの信号に基づいて、立上り時間Ｔｒと立下り時間Ｔｆとを求め、減算器７＿１と７＿２にそれぞれ供給する。減算器７＿１は入力された立上り時間Ｔｒと通信速度設定レジスタ８に設定されているＴｒ設定値の差分（Ｔｒ補正値）を求めて加算器６＿１に入力する。加算器６＿１は入力された差分（Ｔｒ補正値）と通信速度設定レジスタ８に設定されているハイ期間設定値とを加算してハイ期間Ｈ＿ｃｎｔを求め、ハイ期間生成カウンタ３に供給する。減算器７＿２は入力された立下り時間Ｔｆと通信速度設定レジスタ８に設定されているＴｆ設定値の差分（Ｔｆ補正値）を求めて加算器６＿２に入力する。加算器６＿２は入力された差分（Ｔｆ補正値）と通信速度設定レジスタ８に設定されているロウ期間設定値とを加算してロウ期間Ｌ＿ｃｎｔを求め、ロウ期間生成カウンタ４に供給する。
【００４３】
ハイ期間Ｈ＿ｃｎｔとロウ期間Ｌ＿ｃｎｔの補正は、通信速度設定レジスタ８に補正イネーブルが設定されている期間に限って実行される。補正イネーブルは制御信号（イネーブル信号）として、例えば、加算器６＿１と６＿２及びＴｒ／Ｔｆ測定回路５へ入力され、補正を実行しない期間のそれらの回路の動作を停止させる。補正イネーブルについては詳しくは後述する。
【００４４】
ハイ期間生成カウンタ３は、立上り検出信号Ｔｒ＿ｄｅｔが入力された時点でカウント動作を開始し、通信速度設定レジスタ８に格納されるハイ期間設定値が上記Ｔｒ補正値によって補正されたハイカウント値Ｈ＿ｃｎｔに至るまでを、クロックＳＣＬをハイ期間とするために出力クロック信号ＳＣＬ＿Ｏにハイとしてクロック生成回路１に供給する。ロウ期間生成カウンタ４は、立下り検出信号Ｔｆ＿ｄｅｔが入力された時点でカウント動作を開始し、通信速度設定レジスタ８に格納されるハイ期間設定値が上記Ｔｒ補正値によって補正されたロウカウント値Ｌ＿ｃｎｔに至るまでをクロックＳＣＬをロウ期間とするために出力クロック信号ＳＣＬ＿Ｏにロウとしてクロック生成回路１に供給する。
【００４５】
ＳＣＬ生成回路１は、補正されたハイカウント値とロウカウント値とに基づいて、出力クロック信号ＳＣＬ＿ＯをＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）に供給し、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）は通信バスのクロック配線ＳＣＬを駆動する。
【００４６】
ユーザは、ＣＰＵ２１から内部バス２２経由で通信速度設定レジスタ８に、Ｔｒ設定値、ハイ期間設定値、Ｔｆ設定値及びロウ期間設定値を書き込むことによって、通信インターフェース（Ｉ２Ｃバスインターフェース）回路１０に期待する動作のパラメータを設定する。
【００４７】
クロック制御回路１１は、Ｔｒ／Ｔｆ測定回路５によって、入力クロック信号ＳＣＬ＿Ｉと出力クロック信号ＳＣＬ＿Ｏの位相差を計測してＴｒ測定値／Ｔｆ測定値とする。測定されたＴｒ測定値／Ｔｆ測定値と、期待値であるＴｒ設定値／Ｔｆ設定値とをそれぞれ比較して、その差分をＴｒ補正値／Ｔｆ補正値とし、ハイ期間設定値／ロウ期間設定値にそれぞれ加算することで、ハイ期間カウント値（Ｈ＿ｃｎｔ）／ロウ期間カウント値（Ｌ＿ｃｎｔ）に補正の結果が反映され、Ｔｒ／Ｔｆの期待値からのずれが補正されて、所望の通信速度が実現される。測定されたＴｒ測定値が期待値であるＴｒ設定値よりも大きい場合は、ハイ期間カウント値（Ｈ＿ｃｎｔ）がより小さくなる方向に作用し、Ｔｒ設定値よりも小さい場合は、ハイ期間カウント値（Ｈ＿ｃｎｔ）がより大きくなる方向に作用する。Ｔｆも同様である。
【００４８】
図３には、Ｔｒ／Ｔｆ測定回路５の構成例を示すブロック図、及び、その後段に接続される、補正のための演算回路も合わせて示される。Ｔｒ／Ｔｆ測定回路５は、立上り時間（Ｔｒ）カウンタ５１＿１と立下り時間（Ｔｆ）カウンタ５１＿２と、エッジ検出回路５２＿１と５２＿２とインバータ５３＿１と５３＿２を備える。Ｔｒカウンタ５１＿１は、出力クロック信号ＳＣＬ＿Ｏの立上りでカウントをスタートし、入力クロック信号ＳＣＬ＿Ｉの立上りでカウントをストップすることにより、そのカウント値を立上り時間Ｔｒとして出力する。Ｔｆカウンタ５１＿２は、出力クロック信号ＳＣＬ＿Ｏの立下りでカウントをスタートし、入力クロック信号ＳＣＬ＿Ｉの立下りでカウントをストップすることにより、そのカウント値を立下り時間Ｔｆとして出力する。
【００４９】
入力された出力クロック信号ＳＣＬ＿Ｏの立上りを、エッジ検出回路５２＿１によって検出してＴｒカウンタ５１＿１のスタート端子に供給し、出力クロック信号ＳＣＬ＿Ｏの立下りを、インバータ５３＿１とエッジ検出回路５２＿２とによって検出してＴｆカウンタ５１＿２のスタート端子に供給する。
【００５０】
Ｔｒカウンタ５１＿１は、ストップ端子に立上り検出信号Ｔｒ＿ｄｅｔが入力され、保持端子には通信速度設定レジスタ８に保持される補正イネーブルのインバータ５３＿２による反転信号が入力されて、補正イネーブルが有効であるときには、カウント動作を停止し、その直前のカウント値を保持する。カウント値は測定された立上り時間（Ｔｒ）の値であり、減算回路７＿１に供給される。Ｔｆカウンタ５１＿２は、ストップ端子に立下り検出信号Ｔｆ＿ｄｅｔが入力され、Ｔｒカウンタ５１＿１と同様に保持端子には、通信速度設定レジスタ８に保持される補正イネーブルのインバータ５３＿２による反転信号が入力されて、補正イネーブルが有効であるときには、カウント動作を停止し、その直前のカウント値を保持する。カウント値は測定された立下り時間（Ｔｆ）の値であり、減算回路７＿２に供給される。
【００５１】
減算回路７＿１と７＿２は、通信速度設定レジスタ８に格納されるＴｒ設定値及びＴｆ設定と、測定された立上り時間（Ｔｒ）及び立下り時間（Ｔｆ）との差分を、それぞれＴｒ補正値及びＴｆ補正値として算出する。即ち、減算回路７＿１と７＿２は、
Ｔｒ補正値＝Ｔｒ設定値−立上り時間（Ｔｒ）
Ｔｆ補正値＝Ｔｆ設定値−立下り時間（Ｔｆ）
の演算を行う。測定値である立上り時間（Ｔｒ）が期待値であるＴｒ設定値よりも大きい場合には、Ｔｒ補正値は負の値となり、同様に、立下り時間（Ｔｆ）がＴｆ設定値よりも大きい場合には、Ｔｆ補正値は負の値となる。
【００５２】
Ｔｒ補正値とＴｆ補正値は加算器６＿１と６＿２に入力される。加算器６＿１は、通信速度設定レジスタ８に格納されるハイ期間設定値とＴｒ補正値との和をハイカウント値（Ｈ＿ｃｎｔ）としてハイ期間生成カウンタ３に出力し、加算器６＿２はロウ期間設定値とＴｆ補正値との和をロウカウント値（Ｌ＿ｃｎｔ）としてロウ期間生成カウンタ４に出力する。即ち、加算器６＿１と６＿２は、それぞれ、
ハイカウント値（Ｈ＿ｃｎｔ）＝ハイ期間設定値＋Ｔｒ補正値
ロウカウント値（Ｌ＿ｃｎｔ）＝ロウ期間設定値＋Ｔｆ補正値
の演算を行う。
【００５３】
加算器６＿１と６＿２は、補正ネーブルが有効の場合のみ上記の補正演算を実行し、無効の場合には、ハイ期間設定値とロウ期間設定値をそのまま出力する。即ち、加算器６＿１と６＿２は、それぞれ、
ハイカウント値（Ｈ＿ｃｎｔ）＝ハイ期間設定値
ロウカウント値（Ｌ＿ｃｎｔ）＝ロウ期間設定値
の出力を行う。
【００５４】
Ｔｒ補正値が正の場合はＴｒ設定値の方が実際のＴｒよりも大きいので、ハイカウント値（Ｈ＿ｃｎｔ）がハイ期間設定値よりも大きくなり、Ｔｒ補正値が負の場合はＴｒ設定値の方が実際のＴｒよりも小さいので、ハイカウント値（Ｈ＿ｃｎｔ）がハイ期間設定値よりも小さくなることで、それぞれＴｒ設定値と実際のＴｒの差分が相殺される。実際のＴｒとハイカウント値（Ｈ＿ｃｎｔ）の和がハイ期間設定値＋Ｔｒ設定値と等しくなる方向に補正される。Ｔｆについても同様に、Ｔｆ設定値と実際のＴｆの差分が相殺され、実際のＴｆとロウカウント値（Ｌ＿ｃｎｔ）の和がロウ期間設定値＋Ｔｆ設定値と等しくなる方向に補正される。これにより、通信速度に対応するクロックＳＣＬの実際の周期である、Ｔｒ測定値とハイカウント値（Ｈ＿ｃｎｔ）とＴｆ測定値とロウカウント値（Ｌ＿ｃｎｔ）との合計が、所望の通信速度であるＴｒ設定値とハイ期間設定値とＴｆ設定値とロウ期間設定値の合計と一致するように補正される。
【００５５】
通信速度を補正するためには、少なくとも１度はＴｒとＴｆを測定する必要があるため、補正イネーブルを無効とした状態でダミー通信等を実施して、ＴｒとＴｆを測定する。その後、補正イネーブルを有効にすることで、所望の通信速度が実現される。
【００５６】
本実施形態１の通信インターフェース回路１０の動作についてより詳しく説明する。
【００５７】
図４は、通信インターフェース回路１０の補正前（補正イネーブルが無効）の動作例を示すタイミングチャートである。横軸は時間（time）であり、縦軸方向には、上から順に、通信バスのクロックＳＣＬ、出力クロック信号ＳＣＬ＿Ｏ、入力クロック信号ＳＣＬ＿Ｉ、立上り検出信号Ｔｒ＿ｄｅｔ、及び、立下り検出信号Ｔｆ＿ｄｅｔの波形が模式的に示される。理解を助けるためにクロックＳＣＬの立ち上り時間と立下り時間が誇張して描かれており、時間軸に絶対的・相対的な精度はない。
【００５８】
時刻ｔ１以前は、出力クロック信号ＳＣＬ＿Ｏがロウレベルで、クロックＳＣＬはＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５によってロウレベルに駆動されている。
【００５９】
時刻ｔ１に出力クロック信号ＳＣＬ＿Ｏがハイレベルに遷移すると、ＭＯＳＦＥＴ１５がオフになり、クロックＳＣＬは開放されて、容量Ｃｂがプルアップ抵抗（Ｒｐ）３１によって充電されることによって、クロック配線ＳＣＬの電位は徐々に上昇する。時刻ｔ２に、クロック配線ＳＣＬの電位がＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のバッファ１７の論理閾値（Ｖｔｈ）を超えると、入力クロック信号ＳＣＬ＿Ｉがハイに遷移し、その立上りをエッジ検出回路２が検出して、立上り検出信号Ｔｒ＿ｄｅｔを出力する。ハイ期間生成カウンタ３は、立上り検出信号Ｔｒ＿ｄｅｔが入力された時刻ｔ２からカウント動作を開始し、カウント値が通信速度設定レジスタ８から供給されるハイ期間設定値Ｈ＿ｃｎｔに至る時刻ｔ３に、ＳＣＬ生成回路１によって出力クロック信号ＳＣＬ＿Ｏをロウに遷移させる。
【００６０】
これと並行して、Ｔｒカウンタ５１＿１（図３）は、出力クロック信号ＳＣＬ＿Ｏが立上る時刻ｔ１から立上り検出信号Ｔｒ＿ｄｅｔがストップ端子に入力される時刻ｔ２までの期間をカウントして、立上り時間Ｔｒとして出力する。ただし、補正イネーブルは無効とされているので、ハイカウント値Ｈ＿ｃｎｔは補正されず、ハイ期間設定値に維持される。
【００６１】
出力クロック信号ＳＣＬ＿Ｏがロウに遷移すると、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５がオンし、クロック配線ＳＣＬをロウレベルに駆動する。この時のＳＣＬの立下りは、容量Ｃｂの大きさとＭＯＳＦＥＴ１５が有する電流駆動能力によって決まる。クロックＳＣＬがバッファ１７の論理閾値を下回った時刻ｔ４に、入力クロック信号ＳＣＬ＿Ｉはロウレベルに遷移し、その立下りをエッジ検出回路２が検出して立下り検出信号Ｔｆ＿ｄｅｔを出力する。ロウ期間生成カウンタ４は、立下り検出信号Ｔｆ＿ｄｅｔが入力された時刻ｔ４からカウント動作を開始し、カウント値が通信速度設定レジスタ８から供給されるロウ期間設定値Ｌ＿ｃｎｔに至る時刻ｔ５に、ＳＣＬ生成回路１によって出力クロック信号ＳＣＬ＿Ｏをハイに遷移させる。
【００６２】
これと並行して、Ｔｆカウンタ５１＿２（図３）は、出力クロック信号ＳＣＬ＿Ｏが立下る時刻ｔ３から立下り検出信号Ｔｆ＿ｄｅｔがストップ端子に入力される時刻ｔ４までの期間をカウントして、立下り時間Ｔｆとして出力する。ただし、補正イネーブルは無効とされているので、ロウカウント値Ｌ＿ｃｎｔは補正されず、ロウ期間設定値に維持される。
【００６３】
出力クロック信号ＳＣＬ＿Ｏがハイに遷移すると、時刻ｔ１〜ｔ５の動作と同じ動作を繰り返す。
【００６４】
通信インターフェース回路１０の補正前（補正イネーブルが無効）の動作では、クロックＳＣＬの周期は、ハイ期間設定値とロウ期間設定値に、立上り時間Ｔｒと立下り時間Ｔｆをそれぞれ加えた値となる。ここで、立上り時間Ｔｒは出力クロック信号ＳＣＬ＿Ｏが立上る時刻ｔ１から、実際にバス上のクロック信号ＳＣＬがハイに遷移して論理閾値（Ｖｔｈ）を超え、入力クロック信号ＳＣＬ＿Ｉの立上りとして検出される時刻ｔ２までの期間である。また、立下り時間Ｔｆは出力クロック信号ＳＣＬ＿Ｏが立下る時刻ｔ３から、実際にバス上のクロック信号ＳＣＬがロウに遷移して論理閾値（Ｖｔｈ）を下回り、入力クロック信号ＳＣＬ＿Ｉの立下りとして検出される時刻ｔ４までの期間である。
【００６５】
実際の立上り時間ＴｒとＴｒ設定値との差と、実際の立下り時間ＴｆとＴｆ設定値との差が、実際の通信速度と所望の通信速度と差として現れている。この段階でのタイミングチャートは、図１に示した比較例による動作（タイミングチャートに図示はしていない）と同じである。
【００６６】
本実施形態１では、この段階で、Ｔｒ／Ｔｆ測定回路５によって、実際の立上り時間Ｔｒと立下り時間Ｔｆとが測定され、Ｔｒ測定値とＴｆ測定値として保持される。その後、補正イネーブルが有効とされた時に、Ｔｒ測定値とＴｆ測定値に基づいて補正されたハイカウント値（Ｈ＿ｃｎｔ）とロウカウント値（Ｌ＿ｃｎｔ）が、ハイ期間生成カウンタ３とロウ期間生成カウンタ４とにそれぞれ供給されて、通信速度が補正される。
【００６７】
図５は、補正後（補正イネーブルが有効）の動作例を示すタイミングチャートである。図４と同様に、横軸は時間（time）であり、縦軸方向には、上から順に、通信バスのクロックＳＣＬ、出力クロック信号ＳＣＬ＿Ｏ、入力クロック信号ＳＣＬ＿Ｉ、立上り検出信号Ｔｒ＿ｄｅｔ、及び、立下り検出信号Ｔｆ＿ｄｅｔの波形が模式的に示される。理解を助けるためにクロックＳＣＬの立ち上り時間と立下り時間が誇張して描かれており、時間軸に絶対的・相対的な精度はない点についても、図４と同様である。
【００６８】
時刻ｔ１以前は、出力クロック信号ＳＣＬ＿Ｏがロウレベルで、クロックＳＣＬはＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５によってロウレベルに駆動されている。
【００６９】
時刻ｔ１に出力クロック信号ＳＣＬ＿Ｏがハイレベルに遷移すると、ＭＯＳＦＥＴ１５がオフになり、クロックＳＣＬは開放されて、容量Ｃｂがプルアップ抵抗（Ｒｐ）３１によって充電されることによって、クロック配線ＳＣＬの電位は徐々に上昇する。時刻ｔ２に、クロック配線ＳＣＬの電位がＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のバッファ１７の論理閾値（Ｖｔｈ）を超えると、入力クロック信号ＳＣＬ＿Ｉがハイに遷移し、その立上りをエッジ検出回路２が検出して、立上り検出信号Ｔｒ＿ｄｅｔを出力する。補正イネーブルが有効とされているので、図４を引用して説明したように補正イネーブルを無効として測定された、立上り時間Ｔｒを使って、ハイカウント値Ｈ＿ｃｎｔ＝ハイ期間設定値＋Ｔｒ補正値と補正される。ハイ期間生成カウンタ３は、立上り検出信号Ｔｒ＿ｄｅｔが入力された時刻ｔ２からカウント動作を開始し、カウント値が補正されたハイカウント値Ｈ＿ｃｎｔに至る時刻ｔ３に、ＳＣＬ生成回路１によって出力クロック信号ＳＣＬ＿Ｏをロウに遷移させる。
【００７０】
出力クロック信号ＳＣＬ＿Ｏがロウに遷移すると、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５がオンし、クロック配線ＳＣＬをロウレベルに駆動する。この時のＳＣＬの立下りは、容量Ｃｂの大きさとＭＯＳＦＥＴ１５が有する電流駆動能力によって決まる。クロックＳＣＬがバッファ１７の論理閾値を下回った時刻ｔ４に、入力クロック信号ＳＣＬ＿Ｉはロウレベルに遷移し、その立下りをエッジ検出回路２が検出して立下り検出信号Ｔｆ＿ｄｅｔを出力する。補正イネーブルが有効とされているので、図４を引用して説明したように補正イネーブルを無効として測定された、立下り時間Ｔｆを使って、ロウカウント値Ｌ＿ｃｎｔ＝ロウ期間設定値＋Ｔｆ補正値と補正される。ロウ期間生成カウンタ４は、立下り検出信号Ｔｆ＿ｄｅｔが入力された時刻ｔ４からカウント動作を開始し、カウント値が補正されたロウカウント値Ｌ＿ｃｎｔに至る時刻ｔ５に、ＳＣＬ生成回路１によって出力クロック信号ＳＣＬ＿Ｏをハイに遷移させる。
【００７１】
出力クロック信号ＳＣＬ＿Ｏがハイに遷移すると、時刻ｔ１〜ｔ５の動作と同じ動作を繰り返す。
【００７２】
なお、図５には、測定された立上り時間Ｔｒが期待値であるＴｒ設定値と差がないためにハイ期間の補正は行われず、測定された立下り時間Ｔｆは期待値であるＴｆ設定値よりも大きかったために、負のＴｆ補正値が加算され、ロウカウント値Ｌ＿ｃｎｔがロウ期間設定値よりも小さい値に補正された例が示されている。
【００７３】
この動作によるクロックＳＣＬの周期は、立上り時間Ｔｒとハイ期間設定値とＴｒ補正値の和からなるハイ期間と、立下り時間Ｔｆとロウ期間設定値とＴｆ補正値の和からなるロウ期間の合計となる。上述のように、Ｔｒ補正値＝Ｔｒ設定値−Ｔｒであるので、クロックＳＣＬのハイ期間＝Ｔｒ＋ハイ期間設定値＋Ｔｒ補正値＝Ｔｒ＋ハイ期間設定値＋（Ｔｒ設定値−Ｔｒ）＝ハイ期間設定値＋Ｔｒ設定値となる。同様に、Ｔｆ補正値＝Ｔｆ設定値−Ｔｆであるので、クロックＳＣＬのロウ期間＝Ｔｆ＋ロウ期間設定値＋Ｔｆ補正値＝Ｔｆ＋ロウ期間設定値＋（Ｔｆ設定値−Ｔｆ）＝ロウ期間設定値＋Ｔｆ設定値となる。したがって、クロックＳＣＬの周期＝ハイ期間設定値＋Ｔｒ設定値＋ロウ期間設定値＋Ｔｆ設定値となり、プルアップ抵抗Ｒｐや容量Ｃｂなどの配線負荷やＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）などの駆動回路の特性の変動によって、立上り時間Ｔｒと立下り時間Ｔｆが想定した設定値から変動した場合であっても、その変動が補正されて、設定した通りの通信速度を得ることができる。
【００７４】
このような補正は、図６を引用して上述した、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５が持つ電流駆動能力の製造ばらつきによる変動や温度や電源電圧の変化に起因する変動がある場合にも、その変動による立上り時間Ｔｒと立下り時間Ｔｆの変動を上記Ｔｒ補正値とＴｆ補正値によって補正して、設定した通りの通信速度を得ることができる。さらに、通信バスに接続される電子基板がコネクタ等によって着脱可能とされるようなシステムにおいて、その着脱によって配線負荷が変化し、通信相手のデバイスの種類や数が変化する場合であっても、同様に、その変動による立上り時間Ｔｒと立下り時間Ｔｆの変動を上記Ｔｒ補正値とＴｆ補正値によって補正して、設定した通りの通信速度を得ることができる。
【００７５】
このような補正は、補正イネーブルを利用して、特定のキャリブレーション期間に限定して実行されるように構成するとよい。クロックストレッチやＳＣＬ同期などの機能によって、補正が正しく行われない恐れがある期間は、キャリブレーション期間には設定しないようにすることができる。また、例えば、電源投入直後、ホットプラグによって通信バスに接続される基板の着脱があったとき、或いは、通信相手のデバイスの接続が変更された場合に、クロックストレッチやＳＣＬ同期を行わないことが保証される、キャリブレーション専用の期間を設けて、補正を実行してもよい。
【００７６】
また、このような補正の機能を搭載することによって、プルアップ抵抗Ｒｐの値に大きなマージンを取る必要がなくなり、通信バスの消費電力を低減することができる。立上り／立下り時間が、通信バスの仕様によって規定されているが、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５の製造ばらつき、温度や電源電圧に起因する変動までも考慮して、通信バスの仕様を満足するように設計するためには、プルアップ抵抗Ｒｐの値に大きなマージンを取る必要があり、より小さな抵抗値が採用される傾向がある。通信エラーを防ぐために、通信バス上の信号を十分急峻に立上げまた立下げる必要があるためである。一方、急峻過ぎてもエラーやノイズの原因とはなり得るが、例えば抵抗素子を通信バスに直列に挿入するなどの別の方法によって、問題を回避することができる場合が多い。このように、プルアップ抵抗Ｒｐが比較的小さい値とされることによって、通信バスをオープンドレインやオープンンコレクタのバッファで駆動したときの貫通電流が大きくなり、消費電力が増加する。本実施形態１では、本補正技術によってＴｒ／Ｔｆの変動が抑えられるので、プルアップ抵抗Ｒｐの値に大きなマージンを持たせる必要がなくプルアップ抵抗Ｒｐの値を極端に小さくする必要がない。したがって、プルアップ抵抗Ｒｐの値によって決まる貫通電流の大きさが抑えられ、消費電力の増加を抑えることができる。他の実施形態についても同様である。
【００７７】
〔実施形態２〕
図７は、実施形態２の通信インターフェース回路１０の構成例を示すブロック図である。本実施形態２の通信インターフェース回路１０は、図２に示される実施形態１の通信インターフェース回路１０と比較して、通信速度設定レジスタ８に立上り時間／立下り時間仕様値（Ｔｒ／Ｔｆ  Ｓｐｅｃ．）をさらに格納可能とされ、異常検知回路９をさらに備える点で相違する。他の構成と動作は、実施形態１で説明した図２の構成、図４と図５の動作と同じであるので、説明を省略する。
【００７８】
異常検知回路９には、通信速度設定レジスタ８から立上り時間／立下り時間仕様値（Ｔｒ／Ｔｆ  Ｓｐｅｃ．）が入力され、減算器７＿１と７＿２からＴｒ補正値とＴｆ補正値とがそれぞれ入力されている。異常検知回路９は、Ｔｒ補正値とＴｆ補正値のうちの少なくとも一方が、立上り時間／立下り時間仕様値（Ｔｒ／Ｔｆ  Ｓｐｅｃ．）に規定される範囲を外れたときに異常として検知し、例えば異常検知割り込み信号によってＣＰＵ２１に対して割り込みを要求して異常に対処する処理を実行させる。補正値が想定される範囲を外れた場合には、実際に負荷容量が大きく変動し、或いは、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５の特性が大きく変動したと考えるよりも、何らかの異常事態が想定されるためである。想定される異常事態とは、例えば、クロック配線ＳＣＬの異物等による短絡や断線、プルアップ抵抗Ｒｐ３１やＭＣＵ２０、他の通信相手のデバイスの接続不良、ＳＣＬ用Ｉ／Ｏバッファ（１４＿ＳＣＬ）のＭＯＳＦＥＴ１５の故障などである。
【００７９】
このように構成することにより、特性の補正回路の一部の機能を、故障検出回路と兼用させることができ、少ない回路規模で故障検出機能を実装することができる。
【００８０】
異常検知回路９は、例えばキャリブレーション期間に限って動作するように構成してもよい。クロックストレッチ機能やＳＣＬ同期機能による正常な動作を、誤って異常として検出する問題を回避することができる。また、異常検知回路９の動作はそのまま維持して、ＣＰＵ２１側で割り込みをマスクし或いは無視するように構成しても良い。
【００８１】
なお、ＣＰＵ２１への異常の通知手段は、割り込み以外の方法に変更してもよい。例えば、通信速度設定レジスタ８に異常検知ステータスを格納することができるように構成し、ＣＰＵ２１からはポーリング等によって監視するように構成してもよい。例えば、ＣＰＵ２１はキャリブレーションを実行させるときにのみ異常検知の有無を検査するように構成してもよい。
【００８２】
実施形態１及び２では、演算回路を実際に搭載するハードウェアによって補正を行う実施形態を示したが、図２、図７に示した演算回路の構成は一例に過ぎず、種々変更可能である。例えば、減算器７＿１と７＿２、加算器６＿１と６＿２はそれぞれ同時に演算を実行することはないので、それぞれ１個ずつ実装して時分割で動作するように構成してもよい。ハイ期間生成カウンタ３とロウ期間生成カウンタ４についても同様である。また、通信速度設定レジスタには、ハイ期間設定値とＴｒ設定値、ロウ期間設定値とＴｆ設定値を格納可能とする例を示したが、他のパラメータを格納する形態に変更することもできる。例えば、ハイ期間とロウ期間のみを設定し、測定されたＴｒとＴｆをそれぞれ引いた値をハイカウント値Ｈ＿ｃｎｔとロウカウント値Ｌ＿ｃｎｔとしてハイ期間生成カウンタ３とロウ期間生成カウンタ４にそれぞれ供給するように変更することもできる。この場合には異常検知は測定されたＴｒ／Ｔｆを対象として行うように変更する。
【００８３】
〔実施形態３〕
実施形態１及び２では、ハードウェアによって補正を行う実施形態を示したが、本実施形態３ではこれに代わってソフトウェアによって補正を行う実施形態について説明する。
【００８４】
図８は、実施形態３の通信インターフェース回路１０の構成例を示すブロック図である。本実施形態２の通信インターフェース回路１０は、図２に示される実施形態１の通信インターフェース回路１０には搭載されていた、減算回路７＿１と７＿２と加算回路６＿１と６＿２が省略され、通信速度設定レジスタ８に格納されるパラメータが異なる。実施形態１の通信速度設定レジスタ８に格納されていた、ハイ期間設定値、ロウ期間設定値、立上り時間（Ｔｒ）設定値、立下り時間（Ｔｆ）設定値、及び、補正イネーブルに代えて、ハイ期間（Ｈ＿ｃｎｔ）とロウ期間（Ｌｃ＿ｃｎｔ）が書き込み可能とされ、立上り／立下り（Ｔｒ／Ｔｆ）測定回路５の出力であるＴｒ測定値とＴｆ測定値が読み出し可能とされる。
【００８５】
通信インターフェース回路１０が接続される内部バス２２には、ＣＰＵ２１の他にメモリ２３が接続され、メモリ２３に格納されたプログラムをＣＰＵ２１が実行することによって、補正処理が行われる。メモリは、例えば、フラッシュＲＯＭ（Read Only Memory）などの不揮発性メモリ、ＲＡＭ（Read Only Memory）などの揮発性メモリ、それらの組合せであってよく、図８に例示したのとは異なり外付けされてもよい。
【００８６】
図９は、実施形態３の通信インターフェース回路１０におけるソフトウェアによる補正の動作例を示すフローチャートである。
【００８７】
第１ステップ（Ｓ１）において、初期設定を行う。通信速度設定レジスタ８のハイ期間とロウ期間に、それぞれハイ期間初期値とロウ期間初期値を設定する。ユーザは、シミュレーション等によってＴｒとＴｆの期待値（予想値）を求め、所望の通信速度（クロックＳＣＬの周期）が下式を満足するように、初期設定を行う。
【００８８】
ＳＣＬの周期＝ハイ期間初期値＋Ｔｒ期待値＋ロウ期間初期値＋Ｔｆ期待値
第２ステップ（Ｓ２）において、ダミー通信を行う。ＣＰＵ２１から内部バス２２経由で通信制御部１２に対してデータの送信を指示し、Ｔｒ／Ｔｆ測定回路５によってＴｒ／Ｔｆを測定する。Ｔｒ／Ｔｆ測定結果は、通信速度設定レジスタ８に書き込まれる。
【００８９】
第３ステップ（Ｓ３）において、Ｔｒ／Ｔｆ測定結果を取得する。ＣＰＵ２１は、Ｔｒ／Ｔｆ測定回路５によって測定されたＴｒ測定値とＴｆ測定値とを、内部バス２２経由で通信速度設定レジスタ８から読み出す。
【００９０】
第４ステップ（Ｓ４）において、ハイ期間とロウ期間の補正値の計算を行う。ＣＰＵ２１は取得したＴｒ／Ｔｆ測定結果に基づいて、下式によって補正後のハイ期間とロウ期間の値を計算する。
【００９１】
補正後のハイ期間＝ハイ期間初期値＋Ｔｒ期待値−Ｔｒ測定値
補正後のロウ期間＝ロウ期間初期値＋Ｔｆ期待値−Ｔｆ測定値
第５ステップ（Ｓ５）において、ハイ期間とロウ期間を更新する。ＣＰＵ２１は、上記Ｓ４で算出した補正後のハイ期間とロウ期間を、それぞれ内部バス２２経由で通信速度設定レジスタ８に書き込む。
【００９２】
以上のソフトウェア処理によって、通信速度設定レジスタ８のハイ期間とロウ期間の値は、実際に測定された立上り時間（Ｔｒ）と立下り時間（Ｔｆ）に基づいて補正され、補正後のＳＣＬ周期は所望の通信速度に対応する値となる。
【００９３】
これにより、通信速度の補正処理を、ＣＰＵ２１によって実行されるソフトウェアで実装することができる。ＣＰＵ２１はこの通信速度の補正処理を、例えば、電源投入直後、ホットプラグによって当該通信バスに接続されたデバイスに増減があった時などのキャリブレーション期間に実行する。
【００９４】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００９５】
例えば、ＣＰＵとメモリ及びバスからなるＭＣＵの基本部分は、如何なるアーキテクチャのプロセッサであってもよい。ＣＰＵはマルチプロセッサを含むいかなるプロセッサでも良く、バスを階層化して、キャッシュメモリやメモリ管理ユニットを備えても良く、メモリは上述したようにオンチップまたは外付けのＲＯＭ、ＲＡＭまたはその組み合わせであっても良い。
【００９６】
また例えば、ブロック図に示したブロック分割は、単なる一例に過ぎず、１つのブロックの一部または全部の機能を他のブロックの機能と渾然一体に実現した別のブロックに変更して実現するなどの変更は、適宜任意に行うことができる。
【符号の説明】
【００９７】
１  クロック信号生成回路（ＳＣＬ生成回路）
２  エッジ検出回路
３  ハイ期間生成カウンタ
４  ロウ期間生成カウンタ
５  立上り／立下り（Ｔｒ／Ｔｆ）測定回路
６  加算器
７  減算器
８  通信速度設定レジスタ群
９  異常検知回路
１０  Ｉ２Ｃバスインターフェース
１１  クロック制御回路
１２  通信制御回路
１３  データ制御回路
１４  Ｉ／Ｏバッファ
１４＿ＳＣＬ  ＳＣＬ用Ｉ／Ｏバッファ
１４＿ＳＤＡ  ＳＤＡ用Ｉ／Ｏバッファ
１５  トランジスタ
１６  インバータ
１７  入力バッファ
１８  ＳＣＬ端子
１９  ＳＤＡ端子
２０  ＭＣＵ
２１  ＣＰＵ
２２  内部バス
２３  メモリ
３１、３２  プルアップ抵抗
３３、３４  バス容量
４０  通信相手のデバイス
５１  Ｔｒカウンタ、Ｔｆカウンタ
５２  エッジ検出回路
５３  インバータ
【図１】
2017126850.tif 000003
【図２】
2017126850.tif 000004
【図３】
2017126850.tif 000005
【図４】
2017126850.tif 000006
【図５】
2017126850.tif 000007
【図６】
2017126850.tif 000008
【図７】
2017126850.tif 000009
【図８】
2017126850.tif 000010
【図９】
2017126850.tif 000011