説明

クロックの時間同期方法

【課題】高速かつ効率的に実行可能なエラー許容性のクロックの時間同期を提供する
【解決手段】通信システム(1)においてクロックの時間同期を特に高速かつ効率的な方法で行うために、本発明による方法は次のステップを有する:タイムベース(10)に依存する状態値を取得するステップ;取得した各状態値が、(k+1)個の位置から成る第1リストLの(k+1)番目に小さい要素以下であり、ここにkは事前に定義可能なエラー許容度である場合に、この状態値を第1リストL中の位置に入れるステップ;この状態値が、(k+1)個の位置から成る第2リストHの(k+1)番目に大きい要素以上である場合に、この状態値を第2リストH中の位置に入れるステップ;取得した状態値の数が(2k+2)以上である場合に、リストLの(k+1)番目に小さい要素及びリストHの(k+1)番目に大きい要素から平均値を求めるステップ;修正値をこの平均値の関数として決定するステップ;同期させるべきクロックの現在の状態値を修正するステップ。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信媒体経由で通信するノードに割り当てられたクロックの時間同期の方法に関するものである。
【0002】
本発明はさらに、通信媒体によって他のノードと通信するノード、及び通信媒体経由で通信する複数のノードを有する通信システムに関するものである。
【0003】
本発明は、コンピュータ、特にマイクロコンピュータ上で実行可能なコンピュータプログラムにも関するものである。
【背景技術】
【0004】
通信媒体経由で通信するノードは例えば、バスシステムまたはネットワークによって互いにメッセージを交換する制御装置、センサ及びアクチュエータである。こうしたノード及び関連する通信媒体から成る通信システムは、例えば航空機または自動車を制御するために用いることができる。この場合の「ノード」とは、特にいわゆるインタフェースも含み、インタフェースは、通信媒体への物理的接続、及び送受信されたメッセージを処理する責任を共に負う。
【0005】
現代の通信システムは通常、エラー(誤り)を許容すべく設計されており、このため少なくとも特定の基本機能は、通信システム内にエラーが発生してもなお、適正に実行される。このことは、例えば通信システムが安全に厳格な環境で、たとえば航空機を制御するため、あるいは自動車を制御するために使用される場合に特に重要である。従ってこうした基本機能は例えば、通信システム内にエラーが発生しても航空機がまだ制御可能であることを保証する。
【0006】
例として、エラー許容性の通信システムは、ノード内またはメッセージの送信中に発生したエラーを取り扱う際には、このエラーが結果的なエラー、例えば、誤って送信、転送、または受信されたメッセージによって他のノードが誤ったメッセージを生成すること、あるいは他のノードがその機能を適正に実行し続けることが阻害されることが生じないことが保証されるように設計されている。こうしたメカニズムなしでは、例えば、ノード(いわゆる「バブリング・イディオット(bubbling idiot、不法大量発信者)」)が非常に大量のメッセージを通信媒体経由で送信して、他のノードからの送信データの破壊活動が生じ得るか、及び/または通信媒体が過負荷になり、このため他のノードがもはや利用不能、あるいは少なくとも十分に利用できなくなる、ということが生じ得る。
【0007】
現在使用されている通信システムでは、特に安全に厳格な環境における通信媒体において、例えば結果的なエラーの発生を低減するために、いわゆる時間制御送信法がますます使用されている。この場合には一般に、ノードが特定時刻にメッセージを送信することのみ可能である。この方法は、通信媒体が常に、特に重要なメッセージ、例えば安全関係の用途向けのメッセージを送信可能であるのに十分な容量を有することも保証する。
【0008】
多くの通信システムが、その適正な動作のために、いわゆるグローバルタイム(大域的時間)を必要とする。このことは例えば、複数の特定イベントの同時性、例えば種々のセンサの取得値の同時変化を規定するために重要である。グローバルタイムは特に、時間制御のメッセージ送信にとっても、例えばノードが送信可能である時点を確定するために必要である。さらに、多くの時間制御の通信媒体の場合に、このメッセージを受信した時刻にもとづいてメッセージの送信者を推察することができる。
【0009】
グローバルタイムを決定する種々の方法が知られている。例として、通信システムには中心クロックが存在し、その現在値は通信媒体によって対応するノードに送信される。しかし、この方法は、例えばグローバルクロックの不具合が、中心クロックが絶えず同じ値を現在値として出力するということを生じさせて、このことは通常、通信システムの不具合となる、という欠点を有する。さらに、元々正しく送信されたグローバル時間の転送または受信時のエラーが、2つのノードに異なる現在時刻を捉えさせ、従って不具合のきっかけ、あるいは正しい通信の妨げとなり得る。
【0010】
従って、通常、複数のクロックが使用される。例として、各ノードが自前のクロックを有することができる。しかし、これらのクロックの不正確さ、及び欠陥のあるクロックによって生じ得るエラーにより、これらのクロックによって決まる現在時刻は通常、時間と共に互いに一層異なってくる。従って、一様なグローバルタイムを決定するためにクロックの同期を行う。この場合には、特に、クロックを同期させるためのエラー許容性の方法を利用し、この方法では、特定数のクロックによって誤って設定、転送、または受信された現在時刻がクロックの同期に対して悪影響を与えることがあり得ない。特に、こうした方法は、誤った値を供給しているクロック、あるいは新たに始動させたクロックが他のクロックと同期することを可能にする。
【0011】
通信システム上でメッセージを送信する時間ベースの方法では、個々のメッセージをフレームとして知られている時間ウィンドウ(窓)内で送信する。フレームは通信媒体経由で、グローバルタイムの関数として送信され、グローバルタイムを一意的に各フレームに割り当てることができる。このことは、各ノードがグローバルタイムにもとづいて各フレームを明確に識別することを可能にする。従って特に、各ノードは、どのフレームがメッセージの送信用に自ノードに割り当てられているかを認識することができる。グローバルタイムが自ノードのクロックの関数として決まるならば、種々のノードによって決まる2つの同期サイクル間のグローバルタイムが異なり得る。しかし、フレームをグローバルタイムに一意的に割り当てることを保証できるためには、2つの同期サイクル間に2つのクロック間に最大あり得る偏差に応じた時間間隔が、個々のフレーム間に存在しなければならない。しかし、フレーム間ギャップとして知られているこの時間間隔中にはメッセージを送信することができないので、フレーム間ギャップの長さは通信媒体の帯域幅(単位時間当りに伝送可能なデータ量)に悪影響する。このことは、帯域幅がクロックの精度に依存することを意味する。
【0012】
クロックの平均精度は、連続する2つの同期間の時間間隔の大きさに依存し、言わば、新たな同期が行われるまでに複数クロックの現在時刻が互いに異なる「長さ」従って「幅」に依存する。クロックの平均精度は同期を行う速さにも依存する、というのは、送信時刻と、同期方法の期間中に決まる修正値による実際のクロックの修正との間でも、クロックが既に互いにずれていることがあるからである。
【0013】
クロックを同期させるために、平均の算出にもとづく方法(いわゆる平均ベースの方法)が存在する。例えばバスシステムTTA及びFlexRayにおいて用いられる平均ベースの方法では、同期させるべき各ノードが、他の種々のクロックによって当該ノードに送信され、現在取得した時刻または状態値の平均を決定する。この方法において、あるノードに送信される特定数の誤ったクロック時刻からの独立を達成するために、いわゆるエラー許容度kを保証する。この場合には、例えば、他のクロックの状態値とは非常に異なる1つ以上の状態値(例えばk番目に大きい状態値及びk番目に小さい状態値)は、前記平均の決定中に考慮に入れない。
【0014】
特に、平均ベースの方法は、エラー許容性のクロックの同期のために、特定した現在の状態値の特定の最小数n、例えばn≧(2k+2)なるnを必要とする。このことが達成されていなければ、同期を行うことができないか、あるいは同期を保証するために時間を要する方法が必要であるかのいずれかである。
【発明の開示】
【発明が解決しようとする課題】
【0015】
本発明の目的は、特に高速かつ効率的な方法で実行され、できる限りエラー許容性のクロックの時間同期を可能にする能力を提供することにある。
【課題を解決するための手段】
【0016】
この目的は、上述した方法が次のステップを有することによって達成される:
−少なくとも同期させるべきノードについて、当該ノードのタイムベースに依存する状態値を取得するステップと;
−取得した状態値のすべてについて、取得した状態値が(k+1)個の位置から成る第1リストLの(k+1)番目に小さい要素未満であるか、あるいは(k+1)番目に小さい要素以下であり、ここにkは事前に定義可能なエラー許容度である場合に、取得した状態値を第1リストL中の対応する位置に入れるステップと;
−取得した状態値のすべてについて、取得した状態値が(k+1)個の位置から成る第2リストHの(k+1)番目に大きい要素より大きいか、あるいは(k+1)番目に大きい要素以上である場合に、取得した状態値Zを第2リストH中の対応する位置に入れるステップと;
−n≧(2k+2)であり、ここにnは取得した状態値の数である場合に、第1リストLの(k+1)番目に小さい要素及び第2リストHの(k+1)番目に大きい要素から平均値を求めるステップと;
−修正値をこの平均値の関数として決定するステップと;
−同期させるべきクロックの現在の状態値がこの修正値を計算に入れるように、このクロックを修正する。
【0017】
(本発明の利点)
本発明による方法では、他のノードのクロックの状態値、及び当該ノード自体のクロックの状態値も、これらの状態値が第1リストL中に格納されている最大の状態値未満であるかあるいは以下である場合に、第1リストL中に入れられる。さらに、これらの状態値が第2リストH中に既に格納されている最小の状態値より大きいかあるいは最小の状態値以上である場合に、第2リストH中に入れられる。この場合に、リストL及びリストHは共に(k+1)個の位置から成り、従って各場合に(k+1)個の状態値をリストL及びリストH中に格納することができる。
【0018】
この方法は、この方法を実行した後に、最小から(k+1)個の状態値をこれらの状態値の関数としてリストL中に入れて、最大から(k+1)個の取得した状態値をリストH中に入れることを可能にする。この場合には、リストL及びHの個々の位置は、例えば、最小から(k+1)番目の状態値がリストL中の位置L0に位置し、取得した最小の状態値が位置Lkに格納されるように番号付けすることができる。これに対応して、(k+1)番目に大きい状態値はリストH中の位置H0に格納することができ、取得した最大の状態値は位置Hkに格納することができる。
【0019】
(k+1)番目に小さい状態値及び(k+1)番目に大きい状態値から平均値を決定するために、例えば、リストL及びリストHのそれぞれ位置L0及びH0に格納されている状態値から算術平均を求める。この平均値の関数として、次に、ノードに割り当てられたクロックが同期するような修正値を決定する。この目的のために、この修正値は例えば、クロックに割り当てられる絶対値とすることができる。前記修正値を、他のクロックと同期した現在値を得るためにノードに割り当てられたクロックの現在値に加算しなければならない相対値とすることも考えられる。
【0020】
本発明による方法の1つの特定の利点は、すべての状態値に対してリスト中の位置を用意しない、ということである。むしろ、各リスト中に(k+1)個の位置のみが存在すれば十分であり、従って、言わば(2k+2)個の状態値を入れて記憶しなければならない。(k+1)番目に小さい状態値より大きい状態値、及び(k+1)番目に大きい状態値より小さい状態値のすべてを、結果的に除外することができる。これにより、メモリー空間を節約すること、及び前記平均値を計算するのに必要な状態値の管理を達成することができる。
【0021】
本発明による方法によれば、メモリーアクセス動作の回数も結果的に低減することができる。従って、取得した状態値の数が(2k+2)よりはるかに大きければ、特に、クロックを同期させる特に効率的かつ高速な方法を達成することができる。
【0022】
近年のバスシステム、例えばFlexRayでは、エラー許容度は例えばk=2である。この場合には、本発明による方法によれば、リストL及びリストHの各々が、3つの位置、即ちそれぞれL={L0, L1, L2}及びH={H0, H1, H2}のみを具えていればよい。従って、同期させるべきノードによって取得され、前記修正値の決定において考慮に入れるべきすべての状態値の数が6よりはるかに大きい場合でも、6つの状態値がソート(特定順序に並べ替え)された状態で格納され、状態値の数が6よりはるかに大きいことは、例えば自動車を制御するためのFlexRayバスシステム実現においてしばしば存在する。
【0023】
本発明の方法の1つの有利な展開では、測定した状態値を第1リストL及び/または第2リストH中に入れることを逐次的に行う。状態値は通常、ノードによって逐次的に取得されるので、この展開はさらに、取得した状態値を直接処理して、この取得した状態値をリストL及び/またはHの一方に入れるべきか、あるいはこの状態値を除外すべきかに関するチェックを行うことを可能にする。結果的に、多数の状態値の中間記憶が必要なくなり、その結果、ここでもメモリー空間の節約がなされる。これに伴うメモリーアクセス動作の低減により、本発明の方法をより一層高速にすることができる。
【0024】
この展開のさらなる利点は、その後の状態値を取得していても、最初の状態値の取得と同期の終了との間の時間間隔を低減することができる、ということにある。その結果、最終の状態値の取得に続いて、本発明の方法は、この最終の状態値をリストL及び/またはリストH中に入れて、位置L0及びH0に格納されている状態値から前記平均値を求めて、前記修正値を決定してクロックを修正する、ということに簡略化される。特に、この展開では、最終の状態値を検出した際に、通常は、取得した状態値の多数が既に除外されている。
【0025】
好適例では、リストLを対応するレジスタL0, L1,...,Lkによって形成し、かつ/あるいはリストHを対応するレジスタH0, H1,...,Hkによって形成する。こうして、特に高速なクロックの同期を達成することができる、というのは、レジスタは一般にハードウェアで形成され、従って特に高速な書込み及び読出しアクセスを可能にするからである。
【0026】
第1リストLを、想定される最大の状態値より大きい値で初期化して、第2リストHを、想定される最小の状態値より小さい値で初期化することが有利である。リストL及びHのこうした初期化は、すべての状態値について、リストL及び/またはリストH中に値を入れることが同じ条件に依存する、ということを意味する。これらの条件は既に上述した次の条件によってサポート(支援)される:
−状態値が第1リストL中の最大値未満あるいは以下である場合には、リストL中に状態値を入れる。
−状態値が第2リストH中の最大値より大きいかあるいは最大値以上である場合に、リストH中に状態値を入れる。
この好適例では、状態値が既にリストL及びH中に入れられているか否かとは無関係に、これらの条件を公式化することができる。
【0027】
取得した状態値をリストL中に入れる期間中に、格納されている状態値の大きさの順の並べ替え(ソート)を継続して、値(L0)≧値(L1)≧...≧値(Lk)が常に真であるようにすることが好ましく、ここにL0, L1,...,LkはリストLの(k+1)個の位置を表わし、値(Li)は位置Liにおける値を表わす。さらに、取得した状態値をリストH中に入れる期間中に、格納されている状態値の大きさの順の並べ替えを継続して、値(H0)≦値(H1)≦...≦値(Hk)が常に真であるようにすることが好ましく、ここにH0, H1,...,HkはリストHの(k+1)個の位置を表わし、値(Hi)は位置Hiにおける値を表わす。
【0028】
このことは、例えば、一旦、考慮に入れるべき最終の状態値をノードが取得すると、リストL及びH中への格納が常に保証され、時間を要する格納を実行する必要がない、という状況を特に簡単な方法で達成する。特に、上述した取得した状態値の逐次的な処理に関連して、このことは、取得した状態値のうち(k+1)番目に小さいものが常に位置L0に格納され、取得した状態値のうち(k+1)番目に大きいものが常に位置H0に格納される、ということも保証する。
【0029】
さらなる利点は、請求項6及び7に記載の好適例に見ることができる。これらの請求項には、第1リストL及び/または第2リストH中に状態値Zを入れる方法が特に明瞭かつ簡単に記載されている。この目的で、最初に、状態値Zの大きさに対応するリストL及びH内の位置を、例えばそれまでで最大または最小の入れられた要素から始めたリスト中の要素どうしの比較によって決定する。そして状態値Zを、これより大きいすべてのリストLの要素を位置1つ分ずつ下方に移動してリスト中に入れ、位置L0にあった値が位置L1にあった値に置き換えられたことの結果として、位置L0に存在していたリストLの最大値はリストLから脱落する。状態値ZをリストH中に入れることについても同じことが当てはまる。
【0030】
好適例では、次のステップを実行する:
−エラー許容度kの関数として、事前に定義可能な終端値Biの集合B={B0, B1,...,Bk}を次のように定義する。
i∈{0, 1,...,(k−1)}なるすべてのiについて、B0=0;Bi≦B(i+1);
j∈{0, 1,...,k}なるすべてのjについて、2j<B(j);
−Bk>nである場合には、i∈{0, 1,...,(k−1)}なる値iを、取得した状態値の数nの関数として、条件Bi≦n<B(i+1)が真となるように選択する;
−Bk≦nである場合には、i=kを選択する;
−位置L(k-1)及びH(k-1)に格納されている値から前記平均値を求める。
【0031】
この好適例は、ノードにおいて取得した状態値の数nが(2k+2)未満であり所定値に達していない場合でも、クロックの同期を保証するのに適している。特に、この場合には、事前に定義されていないが、取得した状態値の数nの関数として、事前に定義可能なエラー許容度kの関数として、そして事前に定義可能な終端値B0, B1,...,Bkの関数として決まる実際のエラー許容度lが達成され、ここではl≦kが常に真である。従ってこの好適例は、ノードにおいて取得された状態値の数が元々想定された数より少ない際にも、このノードにおけるクロックの同期が保証されるという利点を有する。特に、この好適例では、n<(2k+2)である場合に、エラー許容度l≦kでのエラー許容性の同期が可能である。
【0032】
次の値を事前に定義することが有利である:
−エラー許容度k=2;
−終端値B1=3;
−終端値B2=8
【0033】
これらの値を用いて、取得した状態値のあらゆる数について、通信システム、例えばFlexRayにおけるクロックのエラー許容性の同期を、特に効率的かつ高速に保証することができる。
【0034】
この目的は、次の構成要素を有するノードによっても達成される:
−クロック;
−当該ノードのタイムベース及び/または他のノードのタイムベースに依存する状態値を取得する手段;
−(k+1)個の位置から成る第1リスト(L)及び(k+1)個の位置から成る第2リスト(H);
−取得した状態値を第1リスト(L)中の対応する位置に入れる手段;
−取得した状態値を第2リスト(H)中の対応する位置に入れる手段;
−第1リスト(L)の一要素及び第2リスト(H)の一要素から平均値を求める手段;
−修正値を求める手段;
−クロックを修正する手段。
【0035】
請求項1〜9のいずれかに記載の方法は、ノードにおいて実行することが好ましい。
【0036】
上記目的はさらに、上述した種類の通信システムによって達成され、この通信システムの少なくとも1つのノードは次の構成要素を有する:
−クロック(15);
−状態値を取得する手段;
−(k+1)個の位置から成る第1リスト(L)及び(k+1)個の位置から成る第2リスト(H);
−取得した状態値を第1リスト(L)中の対応する位置に入れる手段(120);
−取得した状態値を第2リスト(H)中の対応する位置に入れる手段(130);
−第1リスト(L)の一要素及び第2リスト(H)の一要素から平均値(M)を求める手段(160);
−修正値(K)を求める手段;
−クロックを修正する手段(15)。
【0037】
請求項1〜9に記載の方法は、前記通信システム内の少なくとも1つのノードにおいて実行することが好ましい。
【0038】
コンピュータプログラムの形の本発明の実現は特に重要である。この場合には、このコンピュータプログラムはコンピュータ、特にマイクロコンピュータ上で実行することができ、そして本発明の方法を実行するのに適している。従ってこの場合には、本発明をコンピュータプロスラムによって実現して、このコンピュータプログラムは、コンピュータプログラムが実行する方法と同様に本発明を表現する。このコンピュータプログラムは、メモリー素子に記憶することが好ましい。使用するメモリー素子は特に、ランダムアクセスメモリー(RAM)、リードオンリーメモリー(ROM)、またはフラッシュメモリーである。
【0039】
本発明をハードウェアで実現することも重要であり、このハードウェアは本発明による方法を実行するのに適している。ハードウェアでの実現は、本発明による方法がより一層高速に実行されるという利点を有する。
【0040】
以下、本発明の実施例を図面を参照しながらより詳細に説明するが、本発明はこれらの実施例に限定されない。
【発明を実施するための最良の形態】
【0041】
図1に、通信媒体5経由で互いに接続された複数のノード10から成る通信システム1を示す。通信媒体5は、例えばFlexRay仕様あるいはTTP(Time Triggered Protocol)に準拠した時間制御のバスシステム(TTA−Time Triggered Architecture)として設計されている。通信媒体5を他のネットワーク・トポロジーに準拠して、例えばリングとして形成することも考えられる。
【0042】
図1に示す各ノード10はいわゆるホスト11及びインタフェース12を有する。ホスト11は、例えば単一のマイクロチップ上に形成されたマイクロコンピュータとして構成することができる。ホスト11を、ネットワーク経由で互いに通信する複数のコンピュータから成るコンピュータシステム全体とすることも同様に考えられる。
【0043】
インタフェース12は、ホスト11と通信媒体5との間に位置する。インタフェース12は、例えば、情報をメッセージ形式に変換することによってホスト11から、あるいはホスト11への情報の伝送を制御し、このメッセージ形式は通信媒体5によって事前に規定されたデータフレームに対応する。フレームは一般に、メッセージフォーマットによって事前に規定された規則に従って解釈される一組のビットである。FlexRayのメッセージフォーマットは、例えば、関係するメッセージを同期に用いるべきか否かを示す特別なSYNCビット、及び実際のメッセージ(有効なデータ)を含むデータバイト数を示すLENビットを表示する。
【0044】
もちろん、ホスト11及びインタフェース12を単に同一チップ上の異なる機能ユニットとして設計することも可能である。
【0045】
時間制御の通信システム5では、通信の帯域幅を1つ(以上)の大域的(グローバル)時系列(グローバル・スケジュールとして知られている)の形で固定的に事前規定することができる。こうしたスケジュールは、ノード10が通信媒体5によってメッセージを送信可能な時間及びノード10がメッセージを期待している時間についての情報を具えている。メッセージが例えばフレームで送信される場合には、スケジュールは特に、ノード10がどのフレームをメッセージの送信に利用可能であるかについての情報を提供する。
【0046】
通信媒体5上の通信全体がグローバル・スケジュールによって制御されているので、メッセージは受信者または送信者の情報を何ら含む必要はない。各ノード10は、メッセージの送信者または受信者を、このメッセージが送信された時点に基づいて識別する。従って、フレーム内にアドレスフィールドは必要なく、これにより帯域幅が増加する。
【0047】
図2aにインタフェース12を示し、インタフェース12はクロック15、マイクロプロセッサ20、及びメモリー素子30を有する。メモリー素子30は、例えばランダムアクセスメモリー(RAM)として設計することができ、アドレス指定可能なメモリー領域L0, L1,...,Lk及びH0, H1,...,Hkを有する。インタフェース12は、例えばリードオンリーメモリー(ROM)として構成された他のメモリー素子31も有する。メモリー素子31には、例えば本発明による方法を実行すべくプログラムされたコンピュータプログラムを記憶することができる。もちろん、メモリー素子30及び31を単一のメモリー素子として形成することも考えられる。
【0048】
図2bに示すインタフェース12も同様に、クロック15、マイクロプロセッサ20、及びメモリー素子31を有する。しかし、この場合には、マイクロプロセッサ20はレジスタL0, L1,...,Lk及びH0, H1,...,Hkを有する。図2bに示すインタフェース12の具体例は、図2aに示す具体例と比較して、レジスタL0, L1,...,Lk及びH0, H1,...,Hkにアクセスするのに要する時間が他のメモリー素子の場合よりも短いという利点を有する。その結果、レジスタL0, L1,...,Lk及びH0, H1,...,Hkを、これらに対応する図2aに示すメモリー領域の代わりに用いると、データをより高速に位置L0, L1,...,Lk, H0, H1,...,Hkに書き込み、そしてこれらの位置から読み出すことができる。
【0049】
図3に通信サイクル51を示し、その始点を破線52で示し、その終点を破線53で示す。通信サイクルの始点では、例えば、いわゆるSYNCシンボル55を送信し、SYNCシンボル55は通信に関係するすべてのノード10が通信サイクル51の始点を認識することを可能にする。しかし、SYNCシンボル55なしで通信サイクルを開始することも可能である。通信サイクル51内では、一般に複数のフレーム71、72、73、74...を送信し、図には例としてこのうちの4フレームを示す。時間制御の伝送法では、フレーム71、72、73、74を規定可能ないわゆる時間スロット(タイムスロット)内で送信し、図ではこれらの時間スロットの始点をそれぞれ61、62、63、64で表わす。フレーム71、72、73、74どうしの間には、メッセージを伝送しない時間間隔、いわゆるフレーム間ギャップ81、82、83、84が存在する。フレーム間ギャップ81、82、83、84は、通信システム1内の複数のノード10のクロック15どうしが少し異なる場合にも、フレーム71、72、73、74をこれらのフレーム送信中のノードのうちの1つに対応させて一意的に識別することを可能にするために必要である。
【0050】
通信媒体5経由で通信中のすべてのノード10が、フレーム71、72、73、74のノード10への割り当てに関してフレーム71、72、73、74を同等に評価するために、これらのノード10のクロックが同期していることが特に重要である。この場合には、クロック15をホスト11内またはインタフェース12内に配置することができる。クロック15の同期の処理も原則的には、ホスト11内またはインタフェース12内で同様に行われる。
【0051】
しかし、通信の帯域は通信システム1内でのクロック15の同期の精度に依存する、というのは、すべてのノード10によるフレーム71、72、73、74の一意的な識別を保証するためには、フレーム71、72、73、74が互いに直接連続せず、フレーム71、72、73、74どうしの間にフレーム間ギャップ81、82、83、84が存在するからである。フレーム間ギャップ81、82、83、84は、1番目のフレーム71、72、73、74の終点と、これに続く2番目のフレーム71、72、73、74の始点との間に経過する時間間隔を表わす。従って十分正確に同期したクロックが与えられれば、これにより、2つのノード10が同じフレーム71、72、73、74を、スケジュールに対するこれらのノードの現在時刻(が異なること)に起因して異なるように解釈して、例えばグローバル(大域的)クロックに比べて遅いクロック15を有するノード10が2番目のフレーム71、72、73、74を1番目のフレームとして誤って解釈する、という状況を防止することができる。
【0052】
ノード10のクロック15どうしが互いに正確に同期するほど、個々のフレーム71、72、73、74間のフレーム間ギャップ81、82、83、84を小さくすることができる。個々のフレーム71、72、73、74間のフレーム間ギャップ81、82、83、84が小さいほど通信の帯域幅が大きくなる。
【0053】
一般に、同期は特化したハードウェアによって行うことができ、このハードウェアはインタフェース12内に集積され、同様にインタフェース12内に集積されたクロック15の高速かつ正確な同期を達成することを可能にする。
【0054】
図4に、本発明による方法の非常に簡略化したフローチャートを示す。この方法はステップ100において、例えばノード10において、このノード10に割り当てられたクロック15の同期を行うべき時点から始まる。この方法の開始時に、特定変数の初期化を行う。例として、取得した状態値の数nを0に設定する(n=0)。
【0055】
ステップ110では、例えば、通信媒体5によって送信されたフレーム71、72、73、74をノード10が同期メッセージとして解釈して、状態値Zをフレーム71、72、73、74の対応するビットから読み出すことによって状態値Zを取得し、前記対応するビットはメッセージフォーマットにおいて規定されている。状態値Zの取得に続いて、取得した状態値の数nを1だけ増加させる(n++)。
【0056】
ステップ120では、取得した状態値Zが例えばレジスタL0及びLkによって形成される第1リストL中に格納されている最大値より小さい場合に、状態値Zを第1リストL中に入れる。いずれの場合にも、何個の状態値が既にリストL中に格納されているかについてのチェックを行うことなしに、最初のk個の取得した状態値がリストL中に格納されることを保証するために、初期化ステップ100では、レジスタL0〜Lkを、想定されるあらゆる状態値Zより大きい+∞の値に初期化して、すべてのZについてZ<+∞が常に真であるようにする。
【0057】
状態値ZをリストL中に入れることに関する、擬似コードの表記法を用いた好適な方法を以下に示す。この場合には、レジスタL0,...,Lkに格納されている値をL[0],...,L[k]で表わす:
(l1) for (i=k; i≧0; i--) {
(l2) if (Z<L[i]) {
(l3) for (j=0; j<i; j++) {
(l4) L[j]=L[j+1];
(l5) }
(l6) L[i]=Z;
(l7) break i;
(l8) }
(l9) }
【0058】
行(l1)では、カウンタiを初期化して最初のループを規定する。ループを通過する毎に、i=kから始まる値iを値1だけ低減する(i--)。そしてiの値に応じて、行(l2)〜(l7)の命令を実行する。行(l2)の質問を伴う最初のループによって、リストLの全体の位置またはレジスタLiのうち、状態値Zが当該位置またはレジスタLiに格納されている値より小さいような位置またはレジスタLiを探索する。こうした位置が見つからなければ、状態値ZをリストL中に入れずに除外する。しかし、行(l2)においてこうした位置が認識された場合には、行(l3)〜(l5)によって規定される2番目のループを行(l3)において初期化して開始する。この2番目のループでは、j<iであれば、リスト中の位置Ljにおける各値を、次に上位の位置に格納されている値L(j+1)で置き換える。従って、行(l2)で見つけた、位置Liより下位の位置にあるすべての値を位置1つ分ずつ下方に移動して、位置L0にある値は脱落させる。次に行(l6)では、状態値Zを上記位置またはレジスタLiに格納して、状態値Zを入れる動作を終了する(break i)。
【0059】
図4に示す本発明による方法のステップ130では、ステップ120と同様に、取得した状態値Zが、例えばレジスタH0〜Hkによって形成されるリストHに格納されている最小値より大きい場合に、状態値ZをリストH中に入れる。いずれの場合にも、何個の状態値が既にリストH中に格納されているかについてのチェックを行うことなしに、最初のk個の取得した状態値がリストH中に格納されることを保証するために、初期化ステップ100では、レジスタH0〜Hkを、想定されるあらゆる状態値Zより小さい−∞の値に初期化して、すべてのZについてZ>−∞が常に真であるようにする。
【0060】
状態値ZをリストH中に入れることも同様に、例として擬似コードで示す。この場合には、レジスタH0,...,Hkに格納されている値をH[0],...,H[k]で表わす:
(h1) for (i=k; i≧0; i--) {
(h2) if (Z<H[i]) {
(h3) for (j=0; j<i; j++) {
(h4) H[j]=H[j+1];
(h5) }
(h6) H[i]=Z;
(h7) break i;
(h8) }
(h9) }
【0061】
行(h1)でも、カウンタiを初期化して最初のループを規定する。そしてiの値に応じて、行(h2)〜(h7)の命令を実行する。行(h2)の質問を伴う最初のループによって、リストHの全体の位置またはレジスタHiのうち、状態値Zが当該位置またはレジスタHiに格納されている値より大きいような位置またはレジスタHiを探索する。こうした位置Hiが見つからなければ、状態値ZをリストH中に入れずに除外する。しかし、行(h2)においてこうした位置が認識された場合には、行(h3)〜(h5)によって規定される2番目のループを行(h3)において初期化して開始する。この2番目のループでは、j<iであれば、リスト中の位置Hjにおける各値を、次に上位の位置に格納されている値H(j+1)で置き換える。従って、行(h2)で見つけた、位置Hiより下位の位置にあるすべての値を位置1つ分ずつ下方に移動して、位置H0にある値は脱落させる。次に行(h6)では、状態値Zを上記位置またはレジスタHiに格納して、状態値Zを入れる動作を終了する(break i)。
【0062】
ステップ140では、例えばさらなるSYNCフレームが認識されているので、新たな状態値Zを取得すべきか否かについてのチェックを行う。新たな状態値を取得すべき場合には、本発明の方法をステップ110から継続する。そうでない場合には、ステップ150では、値jを、取得した状態値Zの数nの関数及び終端値Biの関数として定める。値jは、取得した状態値の数nが(2k+2)より小さい場合でも、本発明による方法のさらなるステップによるエラー許容性の同期を可能にするために定める。
【0063】
値jは次式が常に真であるように定める:
j∈{0, 1,...,(k−1)}なるすべてのjについて、Bj≦n<B(j+1)
【0064】
終端値Bi(またはBj)は、ステップ100の初期化段階で初期化することが好都合である。この場合には、終端値Biは次の条件を満足するように初期化する:
B0=0;
i∈{0, 1,...,(k−1)}なるすべてのiについて、Bi≦B(i+1);
j∈{0, 1,...,k}なるすべてのjについて、2j<Bj;
【0065】
事前に規定されたエラー許容度k=2に対して、i∈{0, 1, 2}なるiについての終端値Biを次のように定める:
B0=0;
B1=3;
B2=8;
【0066】
終端値Bjは上記のように選択し、例えば状態値を5つだけ取得している場合には、結果的にn=5であり、従って値jについてはj=1である。ステップ160では、各場合において、値jの関数として、リストLからの1つの値及びリストHからの1つの値より、同期のために使用可能な平均値Mを、例えば次式(いわゆる算術平均)に従って決定する:
【数1】

【0067】
取得した状態値の数nがn≧(2k+2)である場合に、値jはj=kである。従って、この場合には、平均値Mは位置L0及びH0に格納されている値から求める。上述したように、ステップ120及び130では、取得した状態値のうち最小のものが位置Lkに位置し、取得した状態値のうち最大のものが位置Hkに位置するように、状態値ZをリストL及びHに入れる。さらに、n≧(2k+2)については、(k+1)番目に小さい値を位置L0に格納し、(k+1)番目に大きい値を位置H0に格納する。従って、n≧(2k+2)であれば、平均値Mは、取得した状態値の(k+1)番目に小さい値及び(k+1)番目に大きい値から求める。このことは特に、取得した状態値のk番目に大きい値及びk番目に小さい値は、平均値を決定する際に考慮に入れず、そしてこのことはエラー許容度kによることを意味する。
【0068】
k=2に対する終端値Biをここでも上記のように定め、取得した状態値の数がここでもn=5である場合には、値jはここでもj=1であり、従ってこの場合には、前記平均値は位置L(k-1)=L(1)及びH(k-1)=H(1)に格納されている値から求める。この例より、n<(2k+2)であっても、本発明の方法によりエラー許容性のクロックの同期が可能であることがわかる。この例では、この可変のエラー許容度lは例えばl=1である。
【0069】
ステップ170では、修正値Kを平均値Mの関数として決定し、ステップ180では、ノード10に割り当てられたクロック15を修正値Kの関数として同期させ、そしてステップ190で本発明の方法を終了する。修正値Kは、例えば、ノード10に割り当てられたクロック15の現在の状態値を考慮に入れた相対値とすることができ、これにより、クロック15を同期させるためには、修正値Kを現在の状態値に加算するだけでよい。
【0070】
もちろん、図4に示す方法にさらなるステップを加えるか、あるいはいくつかのステップを省略することも考えられる。特に、個々のステップを組み合わせること、及び/または複数のステップの実行あるいは個々のステップの動作を異なる順序にすることも考えられる。もちろん、本発明による方法の実現を実施例から離れて、特に擬似コードで示す具体例から離れて行うことも可能である。
【0071】
図4に示す本発明の方法の実施例は、例えばコンピュータプログラムの形で実現することができる。しかし、特に、本発明による方法のより高速な実現を達成するために、この方法をハードウェア、例えばいわゆるASIC(Application-Specific Integrated Circuit:特定用途向け集積回路)によって実現することもできる。既存のハードウェア、例えばインタフェース12内の特定の機能ユニットを、本発明の方法を実行可能なように拡張することも考えられる。
【0072】
さらに、すべての参照符号及び指標、例えばリストL及びHの位置の番号付けは固定のものではなく、論理的な称号と考えるべきものである。従って、リストL及びH、及びこれらのリスト中の位置は異なる表わし方をすることも考えられる。番号付けの変更、特に格納順序の反転も考えられる。格納順序を反転する場合には、例えば、(k+1)番目に小さい値を位置L(k)に格納して(k+1)番目に大きい値を位置H(k+1)に格納する。本発明による方法のステップ、特にステップ120、130及び160は、これに応じて改変しなければならない。
【0073】
図5に、取得した状態値ZをリストL及びH中に入れる手順の例を示す。この場合には、リスト中に入れる動作は図4に示す本発明による方法のステップ120及び130の説明と同様に行う。図にはリストH及びLを示し、これらのリストは位置H0, H1, H2及びL0, L1, L2を有する。Zは、リストL及びH中に入れるべき取得した状態値を表わす。最初(n=1)に取得した状態値Z=5を入れる前に、位置L0, L1, L2を+∞に初期化し、位置H0, H1, H2を−∞に初期化する。この場合には、値+∞及び−∞は、−∞が取得すべきあらゆる状態値Zより小さく、+∞が取得すべきあらゆる状態値Zより大きいように選択し、言わばすべてのZについて−∞<Z<+∞が常に真であるようにする。
【0074】
最初は、擬似コードを用いて上述し図4に示す実施例と同様に、取得した状態値Zを格納すべき位置Li及びHiを探索する。こうした位置Li及びHiは、これらのリストを最上位から最下位まで探索すれば、それぞれL[i]>ZまたはH[i]<Zであれば認識され、この探索は本実施例では言わばL2→L1→L0及びH2→H1→H0の順である。最初の状態値Z=5に対して、位置L2及びH2が決まる。従って位置L0及びH0にある値はそれぞれ位置L1及びH1にある値に置き換えられ、そして位置L1及びH1にある値はそれぞれ位置L2及びH2にある値に置き換えられる。従って、各場合に、リストL及びH中の値は位置1つ分ずつ下方に移動され、位置L0及びH0にある最下位の値は脱落する。従って状態値Z=5は位置L2及びH2に格納される。
【0075】
次に、上述した方法に従い、2番目の(n=2)状態値Z=7を取得して位置H2及びL2に格納する。ここでも、これらの位置にある値は、位置L0及びH0にある値が脱落するまで位置1つ分ずつ下方に移動する。
【0076】
次に、上述した方法に従い、3番目の(n=3)状態値Z=−3を取得して位置H2及びL2に格納する。ここでも、これらの位置にある値を位置1つ分ずつ下方に移動する。位置L0及びH0にある値は脱落する。
【0077】
図5に示す実施例では、さらなる状態値Zは検出されないものと仮定する。次に値jを図4のステップ150及び160、及び例としてこの図に示す終端値Biに対する値と同様に決定する。結果的に、位置L(2−1)及びH(2−1)にある値を用いて平均値Mを求め、従ってM=5となる。
【0078】
図6に、取得した状態値ZをリストL及びH中に入れる手順のさらなる例を示す。この場合にも、リスト中に入れる動作は、図4に示す本発明による方法のステップ120及び130の説明と同様に行う。
【0079】
しかしこの例では、(2k+2)より多数の状態値Zを取得してリストL及びH中に入れる。最初に、図5において既に説明したように、最初2つの状態値Z=5及びZ=7をリストL及びH中に入れる。次に、m>2に対するさらなる(2k+m−1)個の状態値Zを入れるが、このことは図6に示しておらず、(n=2)から(n=2k+m)への遷移を(縦に連続した)点々のみによって示す。
【0080】
そして、(2k+m)番目に取得した状態値Z=7を図4のステップ120及び130と同様に扱い、リストH及びL中に適宜入れる。この場合には、リストL中に格納されているすべての値がZ=7より小さい。従って状態値7はリストL中には格納されない。しかし、リストH中に格納されている値をチェックすれば、位置H0にある値が位置H1にある値に置き換えられた後に、値Z=7が位置H1に格納されることがわかる。従って位置H0にある値はリストから脱落する。
【0081】
同様に、最終のさらなる状態値Z=−3を取得して位置L0に格納する。ここでは(2k+2)より多数の状態値を取得しているので、位置L0及びH0にある値を用いて平均値Mを求める。結果的に、クロック15のエラー許容性の同期が、エラー許容度k=2で可能になる。
【0082】
図4及び図5に示す例、及び図4に示す実施例でも、入れる動作を、取得した状態値Zに対して、まずこの状態値が位置L0及びH0に格納されている値より小さいか大きいかについてのチェックを行って、このことが成り立つ場合のみに、この状態値を格納する適切な位置を見つけるプロセスを開始する。このようにして、特に、取得した状態値の数nが(2k+2)よりはるかに多いことがしばしばある場合に、本発明による方法を実行するために要する時間を低減することができる。
【図面の簡単な説明】
【0083】
【図1】通信媒体経由で通信する複数のノードから成る通信システムを示す図である。
【図2a】ノードの選択した構成要素を図式的に示す図である。
【図2b】図2aに示すノードの構成要素の他の構成を図式的に示す図である。
【図3】複数のフレームを有する通信サイクルを図式的に示す図である。
【図4】本発明による方法を示すフローチャートである。
【図5】本発明による方法の実行中にリストL及びHに格納されている状態値Zを図式的に示す図であり、ここにn<(2k+2)である。
【図6】図5と同様の図であり、ここにn≧(2k+2)である。

【特許請求の範囲】
【請求項1】
通信媒体経由で通信するノードに割り当てられたクロックを時間的に同期させる方法において、
少なくとも同期させるべき前記ノードについて、前記ノードのタイムベースに依存する状態値を取得するステップと;
取得したすべての前記状態値について、当該状態値が、(k+1)個の位置から成る第1リストの(k+1)番目に小さい要素未満であるか、あるいは(k+1)番目に小さい要素以下であり、ここにkは事前に定義可能な許容度である場合に、当該状態値を前記第1リスト中の対応する位置に入れるステップと;
取得したすべての前記状態値について、当該状態値が、(k+1)個の位置から成る第2リストの(k+1)番目に大きい要素より大きいか、あるいは(k+1)番目に大きい要素以上である場合に、当該状態値を前記第2リスト中の対応する位置に入れるステップと;
n≧(2k+2)であり、ここにnは取得した状態値の数である場合に、前記第1リストの(k+1)番目に小さい要素及び前記第2リストの(k+1)番目に大きい要素から平均値を求めるステップと;
修正値を前記平均値の関数として決定するステップと;
同期させるべき前記クロックの現在の状態値が前記修正値を計算に入れるように、このクロックを修正するステップと
を具えていることを特徴とするクロックの時間同期方法。
【請求項2】
取得した前記状態値を前記第1リスト中及び/または前記第2リスト中に入れるステップを逐次的に実行することを特徴とする請求項1に記載の方法。
【請求項3】
前記第1リストが、対応する複数のレジスタによって形成され、前記第2リストが、対応する複数のレジスタによって形成されることを特徴とする請求項1または2に記載の方法。
【請求項4】
前記第1リストを、想定される最大の前記状態値より大きい値で初期化するステップと;
前記第2リストを、想定される最小の前記状態値より小さい値で初期化するステップとを具えていることを特徴とする請求項1〜3のいずれかに記載の方法。
【請求項5】
取得した前記状態値を前記第1リストに入れる期間中に、値(L0)≧値(L1)≧...≧値(Lk)が常に真であるように、格納されている値の大きさの順の並べ替えを継続し、ここにL0, L1,...,Lkは前記第1リストの(k+1)個の各位置を表わし、値(Li)は位置(Li)にある値を表わすステップと;
取得した前記状態値を前記第2リストに入れる期間中に、値(H0)≦値(H1)≦...≦値(Hk)が常に真であるように、格納されている値の大きさの順の並べ替えを継続し、ここにH0, H1,...,Hkは前記第2リストの(k+1)個の各位置を表わし、値(Hi)は位置(Hi)にある値を表わすステップと
を具えていることを特徴とする請求項1〜4のいずれかに記載の方法。
【請求項6】
前記状態値(Z)を前記第1リスト中の位置(Li)に格納するに当たり:
前記第1リスト中の位置(L0, L1,...,Lk)から、次式:
値(L0)≧値(L1)≧...≧値(Li)≧Z≧値(L(i+1))≧...≧値(Lk)
を満足する位置(Li)を探索するステップと;
上式を満足する位置(Li)が発見されない場合に、前記状態値(Z)を除外するステップと;
上式を満足する位置(Li)を発見した場合に、すべての位置(Lj)、ここに0≦j<iについて、位置(Lj)に格納されている値(Lj)を位置(L(j+1))に格納されている値(L(j+1))に置き換えて、状態値(Z)を前記第1リストの位置(Li)に格納するステップと
を有する関数として格納することを特徴とする請求項1〜5のいずれかに記載の方法。
【請求項7】
前記状態値(Z)を前記第2リスト中の位置(Hi)に格納するに当たり:
前記第2リスト中の位置(H0, H1,...,Hk)から、次式:
値(H0)≦値(H1)≦...≦値(Hi)≦Z≦値(H(i+1))≦...≦値(Hk)
を満足する位置(Hi)を探索するステップと;
上式を満足する位置(Hi)が発見されない場合に、前記状態値(Z)を除外するステップと;
上式を満足する位置(Hi)を発見した場合に、すべての位置(Hj)、ここに0≦j<iについて、位置(Hj)に格納されている値(Hj)を位置(H(j+1))に格納されている値(H(j+1))に置き換えて、状態値(Z)を前記第2リストの位置(Hi)に格納するステップと
を有する関数として格納することを特徴とする請求項1〜6のいずれかに記載の方法。
【請求項8】
エラー許容度(k)の関数として、事前に定義可能な終端値の集合{B0, B1,...,B(k-1)}を、次の条件:
i∈{0, 1,...,(k−1)}なるすべてのiについて、B0=0;Bi≦B(i+1);
j∈{0, 1,...,k}なるすべてのjについて、2j<B(j);
を満足するように事前に定義するステップと;
Bk>nである場合には、i∈{0, 1,...,(k−1)}なる値iを、取得した前記状態値の数nの関数として、条件Bi≦n<B(i+1)を満足するように選択するステップと;
Bk≦nである場合には、i=kを選択するステップと;
それぞれ位置L(k-i)及び位置H(k-i)に格納されている値(L(k-j))及び値(H(k-j))から前記平均値を求めるステップと
を実行することを特徴とする請求項1〜7のいずれかに記載の方法。
【請求項9】
次の値:
エラー許容度k=2;
終端値B1=3;
終端値B2=8;
を事前に定義することを特徴とする請求項1〜8のいずれかに記載の方法。
【請求項10】
通信媒体によって他のノードと通信するノードにおいて、
クロックと;
前記ノードのタイムベース及び/または他のノードのタイムベースに依存する状態値を取得する手段と;
(k+1)個の位置から成る第1リスト及び(k+1)個の位置から成る第2リストと;
取得した前記状態値を前記第1リスト中の対応する位置に入れる手段と;
取得した前記状態値を前記第2リスト中の対応する位置に入れる手段と;
前記第1リストの一要素及び前記第2リストの一要素から平均値を求める手段と;
修正値を求める手段と;
前記クロックを修正する手段と
を具えていることを特徴とするノード。
【請求項11】
請求項1〜9のいずれかに記載の方法を実行することを特徴とする請求項10に記載のノード。
【請求項12】
通信媒体経由で通信する複数のノードを有する通信システムにおいて、
少なくとも1つの前記ノードが、
クロックと;
状態値を取得する手段と;
(k+1)個の位置から成る第1リスト及び(k+1)個の位置から成る第2リストと;
取得した前記状態値を前記第1リスト中の対応する位置に入れる手段と;
取得した前記状態値を前記第2リスト中の対応する位置に入れる手段と;
前記第1リストの一要素及び前記第2リストの一要素から平均値を求める手段と;
修正値を求める手段と;
前記クロックを修正する手段と
を具えていることを特徴とする通信システム。
【請求項13】
少なくとも1つの前記ノードにおいて、請求項1〜9のいずれかに記載の方法を実行することを特徴とする請求項12に記載の通信システム。
【請求項14】
コンピュータ、特にマイクロコンピュータ上で実行可能なコンピュータプログラムにおいて、該コンピュータプログラムが、コンピュータ上で実行される際に請求項1〜9のいずれかに記載の方法を実行すべくプログラムされていることを特徴とするコンピュータプログラム。
【請求項15】
前記コンピュータプログラムがメモリー素子、特にランダムアクセスメモリー(RAM)、リードオンリーメモリー(ROM)、またはフラッシュメモリーに記憶されることを特徴とする請求項14に記載のコンピュータプログラム。

【図1】
image rotate

image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公表番号】特表2006−525724(P2006−525724A)
【公表日】平成18年11月9日(2006.11.9)
【国際特許分類】
【出願番号】特願2006−506896(P2006−506896)
【出願日】平成16年4月26日(2004.4.26)
【国際出願番号】PCT/IB2004/050511
【国際公開番号】WO2004/100411
【国際公開日】平成16年11月18日(2004.11.18)
【出願人】(590000248)コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ (12,071)
【氏名又は名称原語表記】Koninklijke Philips Electronics N.V.
【住所又は居所原語表記】Groenewoudseweg 1,5621 BA Eindhoven, The Netherlands
【Fターム(参考)】