以下、本発明の実施形態を図面に基づいて説明する。
図1は、本発明に係るシリアルデータ通信システムの全体構成例を示す図である。図1において、送信側チップにはデータ送信部501が搭載され、受信側チップにはデータ受信部502が搭載されている。データ送信部501は、RefCLKTx、データ、RefN、Rx同期クロック、位相判定信号が入力され、送信データを出力するようになっている。また、データ受信部502は、RefCLKRxと送信データが入力され、受信データ、位相判定信号、Rx同期クロックを出力するようになっている。送信側チップと受信側チップは、同一ボード上もしくは異なるボード上に実装される。異なるボード上に実装された場合、ボード間の接続はコネクタにおいて直接接続かもしくはハーネスやツイストペアケーブルなどで接続されることを想定している。また、送信データは、GND基準のシングルエンド出力でもよいし、差動出力にしてもよい。
図2は本発明のデータ送信部(図1のシリアルデータ通信システムにおけるデータ送信部501)の第1の構成例を示す図である。図2のデータ送信部111において、高周波クロック生成部1は、基準クロックRefCLKTxを基に、逓倍した高周波クロックVCLKを生成するものであり、一般的なPLL(Phase Locked Loop)回路により構成される。入力する基準クロックRefCLKTxに例えば精度のよい水晶発振器出力を用いることにより、精度のよい高周波クロックVCLKが得られる。この高周波クロックVCLKを基準に送信クロックTxCLKが生成される。これは、例えばM進カウンタにより構成され、カウント値countMを出力する。ここで、Rx同期クロックの立ち上がりでカウントを開始するようにすれば、Rx同期クロックに位相同期した送信クロックTxCLKが生成できる。また、分周比Mは周波数演算部7からの送信クロック周波数指示信号Mnowに従って変更される。このように、送信クロックTxCLKは、安定かつ高精度に発振させた高周波クロックVCLKを分周することにより生成されるので、この分周比を変更することにより、瞬時にかつ安定に送信クロック周波数を変更することが可能となる。
また、Rx同期検出部2は、Rx同期クロックの立ち上がりエッジを高周波クロックVCLKを基準として検出するものであり、Rx同期クロックの立ち上がりを検出すると送信クロックTxCLKに同期した検出パルスRDplsとカウント値RDmを出力する。
また、比較部5は、RDplsの時間間隔Trxを検出し、通信データレートとRx同期クロックの設定周期に応じて予め定められた基準時間と計測した時間Trxとの差を誤差Lerrとして算出する。つまり、適正な基準時間と計測時間Trxとの差が、送信側と受信側の周波数の差として現れる。この誤差Lerrは、高周波クロックVCLKを基準としてカウントし演算を行っても良いが、高周波クロックVCLKは非常に高周波であり、またカウントするビット数も非常に大きくなるので、回路規模,消費電力の点で不利である。そこで、本発明では、時間Trxを送信クロックTxCLKを基準としてカウントし、基準値RefNとの比較をし、最後に高周波クロック基準の誤差Lerrとして変換している。
また、フィルタ6は、誤差Lerrをフィルタリングして誤差データErrを出力するディジタルフィルタであり、例えば簡単には、直近の数周期分の誤差Lerrを平均して誤差データErrを得る。
また、周波数演算部7は、誤差データErrに従って適正な送信クロック周波数を算出し、これを送信クロック周波数指示信号Mnowに変換して出力する。高周波クロック周期をTv、送信クロック周期をTtxとし、今、Ttx=KTvとして送信クロック周波数を設定して送信した時、目標値Ttx’(Ttx’=K’Tv)との誤差Errが入力される。従って、RefN・Ttx’=RefN・Ttx+Err・Tvであるので、
K’=K+Err/RefN(式1)
としてK’を設定するようにすれば、送信クロック周波数を目標値に制御することが出来る。
つまり、分周器4と比較部5とフィルタ6と周波数演算部7とでディジタルPLL制御を行っている。そして、フィルタ6の特性がこのPLL制御特性を決定し、制御系が安定になるようにフィルタ特性が決定される。また、K’=K+α・Err/RefNとしてループゲインを変えるようにしても良い。
また、分周器4の分周数Mは自然数であるので、送信クロックの設定値Kを次のようにして送信クロック周波数指示信号Mnowに変換すると、まるめ誤差を低減することが出来、より精度のよい送信クロックが得られる。例えば、通常は設定値Kを四捨五入して整数にまるめた値をMとし、Mnow=Mとし、送信クロックのCサイクルに1回、Mnow=M+1またはM−1とすることにより、K=(M±1/C)となり、丸め誤差を低減できる。また、丸め誤差の振り分けも均等に行えるので、送信クロックの局所的な偏差も抑えられる。この場合は前記M値とC値を制御するようにすればよい。
図3は、図2の一部の信号の一例を示すタイミング図である。また、図4は比較部5の詳細構成例を示す図である。図3,図4を参照して、比較部5の動作の詳細説明を行う。
図3において、(a)Rx同期クロックはデータ受信部の取り込みタイミングを表す同期信号であり、Rx同期検出部2に入力される。(c)VCLKは高周波クロック生成部1で生成される高周波クロックの立ち上がりエッジを示している。(d)countMは分周器4で高周波クロックVCLKを基準としてカウントされるカウント値であり、(e)TxCLKは(d)countMが0の時立ち上がる送信クロックである。(f)RDplsは(a)Rx同期クロックの立ち上がりを示すTxCLKに同期したパルスであり、(g)RDmは、(a)Rx同期クロックの立ち上がり時の(d)countMの値である。(h−1)countN’は比較部5にある送信クロックTxCLK基準でカウントするカウンタの値であり、(f)DRplsで0にリセットされる。また(h−2)countNは(h−1)countN’が0にリセットされる直前の値を保持する。
図4の比較部5において、カウンタ11は、送信クロックTxCLKを基準にカウントするカウンタであり、RDplsで0にリセットされ、その直前の値をcountNに保持する。減算器12は、countNから基準カウント値RefNの減算を行い、減算結果diffNを出力する。誤差演算部13は、下記の演算を行い高周波クロックVCLK周期Tvを単位とする誤差Lerrを出力する。
Lerr=diffN・K+RDm
ここで、diffN=n−RefN,RDm=m2,Ttx=K・Tv
Ttx:TxCLKの周期である。
図5は周波数演算部7の詳細構成例を示す図である。
図5において、演算部16は、現在の設定値M,C,Rと誤差データErrとから次の設定値NextM,NextC,NextRを演算する。このM,C,Rの関係は、Ttx=(M±1/C)Tvであり、C=RefN/Rである。これらの式と(式1)より、
M’=NextM,C’=NextC,R’=NextR,Nr=RefNと略記して、M’+R’/Nr=M+R/Nr+Err/Nr,C’=Nr/R’
であるので、演算は次の手順で行う。
(1)R+Err(=TmpRとする)を計算する。
(2)TmpR>Nr/2であれば、M’=M+1としてR’=TmpR−Nrとする。TmpR<−Nr/2であれば、M’=M−1としてR’=TmpR+Nrとする。それ以外は、M’=M,R’=TmpRとする。
(3)Nr÷R’の商をC’とする。なお、R’=0であれば、C’=0とする。
また、レジスタ17は上記の演算により求めたM値を保持しておくデータ保持部である。また、更新信号Renewに従い、レジスタ値をNextMに更新する。同様に、レジスタ18は現在設定しているC値を保持しておくデータ保持部であり、レジスタ19は現在設定しているR値を保持しておくデータ保持部である。それぞれ更新信号Renewに従いレジスタ値をNextC,NextRに更新する。なお、CsignはC値の符号を示す。
また、カウンタ23は、TxCLKを基準としてC値をカウント(0からC−1まで)するもので、カウント値がC−1となったとき、Csignが正を示していれば+1を、負を示していれば−1を出力し、それ以外の時は0を出力する。なお、C=0の時は常に0を出力する。
また、加算部22は、レジスタ17の出力するMとカウンタ23の出力する値を加算し、結果を送信クロック周波数指示信号Mnowとして出力する。よって、TxCLKのCサイクルに1回、M値が+1または−1されるように変換され、送信クロックの平均周期は(M±1/C)Tvとなる。
演算制御部15は、上述した演算を制御するものであり、RDplsを検出してから誤差データErr及びNextM,NextC,NextRの演算が確定するまで待って、更新信号Renewをアクティブにし、各レジスタの値をNext値に更新する。なおこの際、TxCLKに同期して更新すれば、countMの値が更新された後のMを越えていることはないため、誤動作の可能性を防ぐことができる。
図6は周波数演算部7の別の構成例を示す図である。図6の構成例においても、演算制御部15は図5のそれと同様にして、この演算を制御するものである。演算部25は、現在の設定値M,Fと誤差データErrとから次の設定値NextM,NextFを演算するものである。図6の構成例では、送信クロック周波数の設定値Kは、次のようにして送信クロック周波数指示信号Mnowに変換する。すなわち、設定値Kの整数部をMとし、小数部をa桁(2進数表記)の値Fに丸める。そして2^a(=Naとする)サイクルにF回、Mnow=M+1とすることにより、K=(M+F/Na)と設定される。ここで、設定値による丸め誤差は最大Nref/Naとなるので、所望の誤差許容値に収まるように小数部の桁数aを決定すればよい。また、局所的な周波数偏差を抑えるため+1するF回のサイクルは均等に振り分けられるようにする。この機能は変換部31が担う。よって、(式1)とこのKの関係式により、F’=NextFと記して
K’+F’/Na=M+F/Na+Err/Nr
であるので、演算は次の手順で行う。
(1)F+Err/Nr*Na(=TmpFとする)を計算する。Naは2^aであるので、*Naは被乗数(Err/Nr)の上位aビットを取ればよく、またNrはこの周波数制御を行っている間は固定であるので、予めNrの逆数を計算しておいてこれをErrに乗算すれば演算は簡便に行える。
(2)TmpF>Naであれば、M’=M+1、F’=TmpF−Naとする。
TmpF<0であれば、M’=M−1、F’=TmpF+Naとする。
図5の場合と同様に、レジスタ26は上記の演算により求められたM値を保持しておくデータ保持部であり、レジスタ27は、同様にF値を保持しておくデータ保持部である。そして、それぞれ更新信号Renewに従い、レジスタ値をNextC、NextRに更新する。
カウンタ30は、TxCLKを基準にカウントするaビットカウンタであり、そのカウント値countAを出力する。変換部31は、カウント値countAに従い、Na(=2^a)サイクル中、Fサイクルは「1」を、残りのNa−Fサイクルは「0」として信号UPを出力する。このUP信号の生成は、カウント値countA[a−1:0]のビット並びを逆転させたcountA[0:a−1]をArevとした時、ArevがFより小さい場合1とするようにすれば(UP=(Arev<F))、Naサイクル中均等にF回「1」が生成される。
加算部32は、レジスタ26の出力するMと変換部31の出力するUPを加算し、結果を送信クロック周波数指示信号Mnowとして出力する。よって、TxCLKのNaサイクルにF回、M値が+1されるように変換され、送信クロックの平均周期は(M+F/Na)Tvとなる。
前述したように、送信クロック周波数の制御はRx同期クロック1周期毎に誤差Lerrを検出し、これが0になるようにディジタルPLL制御を行っている。フィルタ6は制御ループ内に置かれたディジタルフィルタであり、このフィルタ特性を変更することにより、制御帯域を設定できる。以下にフィルタの設定例を示す。
図7はフィルタ特性の設定例を説明するための図である。まず、ループフィルタを除くDPLL制御系のループゲインは図7の(a)のようになる。ここで、fsはサンプリング周波数で、つまりここではRx同期クロック周波数である。この制御系に(b)のような特性を持つラグリードフィルタを挿入し、(c)のループゲインとすることにより、制御系を安定化させることができる。
τ1=1/2πf1、τ2=1/2πf2とすると、ループフィルタの伝達関数H(s)は次式のようになる。
H(s)=(1+τ2s)/(1+τ1s)
上式を、双一次変換(s=2/T・(1−z^−1)/(1+z^−1))してz変換形式にし、さらにT=1として正規化すれば、ループフィルタの伝達関数H(z)は次式となる。
H(z)=(b0+b1z^−1)/(1+a1z^−1)
ここで、a1=(1−2τ1)/(1+2τ1)、b0=(1+2τ2)/(1+2τ1)、b1=(1−2τ2)/(1+2τ1)
図8は上式の伝達関数H(z)を実現するフィルタ6の詳細構成例を示す図である。フィルタ6は、一次のIIR型フィルタであり、加算器40及び45はそれぞれの入力を加算し、乗算器42,43,44はそれぞれ入力に対し、係数−a1,b1,b0を掛けた値を出力し、遅延素子41は中間変数wを1サンプル毎遅延させる。このフィルタ6に誤差Lerrを入力すれば、誤差データErrを得る。
また、乗算器42,43,44の各係数を変更する手段を設ければ、動的にフィルタ特性を変更可能となる。
なお、本例のフィルタ特性及び構成は一例であり、本発明はその他の構成のフィルタでも適用できる。ディジタルフィルタについては公知技術であるので、その他の構成の例示は省略する。
次に、図2のデータ送信部111において、送信クロックTxCLKを基準にデータに従い変調する送信データ生成部113の好適な変調方法を説明する。
図9は、送信データ生成部113の動作を説明するタイミング図である。ここでは、データDataは1bitデータとし、送信データMdataを生成した。図9において、(a)VCLKは高周波クロック(周期Tv)の立ち上がりを示し、(b)countMは分周器4でカウントしたカウント値であり、今、Mnow=16と設定されているものとする。(c)TxCLKは送信クロックであり、ここでは周期は16Tvとなっている。(d)DataはTxCLKに同期して入力されるデータであり、この値Dmに従って出力する送信データ(e)Mdataのパルス幅TwはTxCLK周期と同一となっている。送信データMdataの生成は高周波クロックVCLKを基準にして行われ、Dm=1であれば、countM=0の時「H」とする。またDm=0であれば、countM=0の時「L」とする。
また、図10は、図9においてDataを2bitとした場合を示す図である。送信データMdataの生成は高周波クロックVCLKを基準にして行われ、Dmの0bitが1であればcountM=0の時に「H」とする。またDmの0bitが0であればcountM=0の時に「L」とする。またDmの1bitが1であればcountM=8の時に「H」とし、Dmの1bitが0であればcountM=8の時に「L」とする。このようにすれば送信クロックを擬似的に2倍にすることができ、通信データレートをあげることが出来る。(ただし、受信側のクロックを合わせることは必要である。)
図11は、図9においてDataを4bitにした場合を示す図であり、送信クロックが擬似的に4倍となっている。動作としては図10と同様なので説明は省略する。以上説明したように、データ送信部の第1の構成例によれば、高精度に生成された高周波クロックVCLKを基準として送信クロックを生成し、Rx同期クロックの変動に合わせて送信クロック周波数を制御しているので、Rx動作周波数の変動があってもこの誤差を高精度に補正できる送信クロックが生成できる。
また、図12は本発明のデータ送信部(図1のシリアルデータ通信システムにおけるデータ送信部501)の第2の構成例を示す図である。図12のデータ送信部118において、高周波クロック生成部51は、基準クロックRefCLKTxを基に逓倍し、位相差が等間隔の多相クロックを生成するものであり(この構成例では、16位相の多相クロックVCLK0〜15を生成するものとする)、また、多相クロックのうちの1つをQ分周(ここではQ=4とする)した内部動作用クロックGCLKを生成し、図示しないがデータ送信部118の各部へ供給する。
図13は、高周波クロック生成部51で生成する各クロックのタイミングを示す図である。図13中の信号(a−0)〜(a−15)は、多相クロックVCLK0〜15のそれぞれのクロックであり、互いに等間隔の位相差を有しており、この時間間隔をTvとする。また、信号(b)GCLKは(a−0)VCLK0を4分周したクロックである。図12のデータ送信部118は、基本的にこのクロックGCLKを動作クロックとして動作し、GCLKを4分割した期間を順にQT0,QT1,QT2,QT3と称し、また多相クロックVCLK0〜15の立ち上がりにそれぞれ対応した時刻をPH0〜PH15と称し、この期間QTと位相PHとによりGCLK中の時間情報QPを表す。
ここで、時間情報QPは0〜63の64値であり、この第2の構成例では、この多相クロックの等間隔の位相差Tvを基準として送信クロックTxCLKを生成する。つまり送信クロック周波数の制御演算を動作クロックGCLKを基準に時間情報QP(QT,PH)の演算を行うことにより行う。
図12に戻り、Rx同期検出部52は、Rx同期クロックの立ち上がりエッジを多相クロックVCLK0〜15を基準として検出し、Rx同期クロックの立ち上がりを検出するとクロックGCLKに同期した検出パルスRDplsと立ち上がり時の期間QTと位相PHを示す時間情報RDqpを出力する。
計数部54は、周波数演算部57からの送信クロック周波数指示信号Mnowに従って時間を計数し、Mnowに達する度にSet信号(GCLKに同期したSETpls信号と時間情報SETqpからなる)を生成し、またSet信号からMnow/2にあたる時間を計数し、Rst信号(GCLKに同期したRSTpls信号と時間情報RSTqpからなる)を生成する。この計数する時間単位は多相クロックVCLK0〜15の位相差Tvである。
送信クロック出力部58は、計数部54より供給されるSet信号及びRst信号に従って「H」と「L」を切り替えて送信クロックTxCLKを生成し出力する。これらの詳細構成及び動作説明は後述する。
比較部55は、Rx同期クロックの周期Trxを検出し、通信データレートとRx同期クロックの設定周期に応じて予め定められた基準時間と計測した時間Trxとの差を誤差Lerrとして算出する。つまり適正な基準時間とRx同期クロックの周期Trxとの差が送信側と受信側の周波数の差として現れる。ここでは、RDplsが立ち上がってから次に立ち上がるまでの期間中に入力されるSETplsの数をカウントし、この値と基準値RefNとの比較をし、さらに各パルスの時間情報とから誤差Lerrとして変換している。この誤差の単位は位相差Tvである。
フィルタ56は、誤差Lerrをフィルタリングして誤差データErrを出力するディジタルフィルタである。周波数演算部57は誤差データErrに従って適正な送信クロック周波数を算出し、これを送信クロック周波数指示信号Mnowに変換して出力する。
送信クロック周期をTtxとし、今、Ttx=KTvとして送信クロック周波数を設定して送信した時、目標値Ttx’(Ttx’=K’Tv)との誤差Errが入力される。よって、前述と同様に(式1)により求めたK’を設定するようにすれば、送信クロック周波数を目標値に制御することができる。
なお、これらフィルタ56及び周波数演算部57は、図2のフィルタ6及び周波数演算部7と同様の機能を果たし、構成も同様に適用できるので詳細な説明は省略する。
次に、データ送信部の第2の構成例の各部を説明する。図14は高周波クロック生成部51の構成例を示す図である。この高周波クロック生成部51は、基準クロックRefCLKTxから、多相クロックVCLK0〜15と内部動作用クロックGCLKとを生成する。
電圧制御発振器VCO63は、8段の差動バッファ64a〜hを接続したリングオシレータで構成され、16位相のクロックVCLK0〜15を生成する。分周器60はこの多相クロックのうちの1つ(ここではVCLK8)をNv分周する。
位相周波比較器PFD61は、基準クロックRefCLKTxと分周器60出力との位相比較を行い、この位相差情報に基づき内在するチャージポンプを駆動する。ローパスフィルタLPF62はチャージポンプ出力を平滑化し制御電圧VcをVCO63に供給する。
VCO63内の差動バッファ64a〜hはこの制御電圧Vcに従って遅延量が変化し、位相同期制御が行われる。例えば基準クロックRefCLKTxとして100MHzのクロックを供給し、分周比Nvを20とすると、多相クロックVCLK0〜15は2GHzで互いに等間隔の位相差を有するクロックが生成できる。また、分周器65は多相クロックVCLK0〜15のうちの1つ(ここではVCLK0)をQ分周(ここではQ=4とする)してクロックGCLKを生成する。なお、適用しうる多相クロックの相数は、この例の16に限らないが、演算の簡便性より2のべき乗がもっとも望ましい。同様にGCLKを生成するための分周比Qも2のべき乗がもっとも望ましい。
図15は、計数部54の構成例を示す図である。また図16は送信クロック出力部58の構成例を示す図である。さらに、図17は計数部54及び送信クロック出力部58の各信号のタイミングの一例を示す図である。これらの図を参照して、送信クロック周波数指示信号Mnowに従って送信クロックTxCLKを生成する詳細な構成および動作を説明する。
図15において、各部はクロックGCLKに同期して動作する。SET時間演算部70は、現在のTxCLK立ち上がり時間情報に送信クロック周波数指示信号Mnowを加算し、次のTxCLKの立ち上がり時間を表すセット時間情報nextSを演算するものであり、この演算の更新はpSet信号により行う。なお、セット時間情報nextSを64で割った商をnextSc、余りをnextSqpとする。つまりnextSc=nextS[MSB:6]、nextSqp=nextS[5:0]とする。
また、Rx同期クロックの立ち上がりに位相同期してTxCLKの生成を始めるので(正確には所定の信号処理時間後でここでは2GCLK後)、最初のTxCLK立ち上がり時間情報はRDqpとする。
同様にして、RST時間演算部71は、現在のTxCLK立ち上がり時間情報に送信クロック周波数指示信号Mnowの1/2を加算し、次のTxCLKの立ち下がり時間を表すリセット時間情報nextRを演算するものであり、この演算の更新はpSet信号により行う。また、nextRc=nextR[MSB:6]、nextRqp=nextR[5:0]とする。なお、Mnow/2を加算するのはTxCLKのデューティをほぼ50%にするためであり、デューティ50%を要求しない場合はこの演算を簡略化できるような値を加算するようにしても良い。
カウンタ72は、クロックGCLKを基準としてnextScサイクルのカウントを行い、pSet信号を生成する。このpSet信号が「H」の時カウンタは「1」にクリアされ、カウント値がnextScと一致する時、pSet信号を「H」とする。
F/F73はpSet信号及びRDpls信号を1GCLK遅延させてSETpls信号を生成するフリップフロップである。F/F74は、pSet信号をイネーブルとしてnextSqpを、また、SPplsをイネーブルとしてSPqpをラッチし、SETqp信号を生成するフリップフロップである。このSETpls信号はTxCLKの立ち上がりをGCLK単位で指定し、これに同期したSETqp信号によりそのGCLKサイクル内での立ち上がり時間情報を指定する。これらをSet信号と称し、送信クロック出力部58に供給する。
カウンタ75は、クロックGCLKを基準としてnextRcサイクルのカウントを行い、RSTpls信号を生成する。SETplsが「H」の時カウンタを「1」にクリアし、カウント値がnextRcに一致する時、RSTpls信号を「H」とする。F/F76は、SETplsをイネーブルとしてnextRqpをラッチし、RSTqp信号を生成するフリップフロップである。このRSTpls信号はTxCLKの立ち下がりをGCLK単位で指定し、RSTqp信号によりそのGCLKサイクル内での立ち下がり時間情報を指定する。これらをRst信号と称し、送信クロック出力部58に供給する。
なお、SETqp信号及びRSTqp信号は、それぞれSETpls及びRSTpls信号が「H」の時有効となってればよいので、各部の制御タイミングはこの構成例のみに限定されるものではない。
図16において、遅延部77は、多相クロックVCLK0〜15を基準として、計数部54から供給されるSETplsを時間情報SETqpに従って遅延させたパルスSを出力するものであり、また、GCLKサイクル中の期間QTを特定するためクロックGCLKも入力する。あるいは期間を示す期間信号QTを入力しても良く、この場合は高周波クロック生成部51でこのQT信号を生成する。つまり、パルスSはSETplsをSETqp・Tvだけ遅延させたパルスとなる。
遅延部78は、同様に、多相クロックVCLK0〜15を基準として、計数部54から供給されるRSTplsを時間情報RSTqpに従って遅延させたパルスRを出力するものであり、パルスRはRSTplsをRSTqp・Tvだけ遅延させたパルスとなる。
SR−F/F79は、パルスSの立ち上がりでセット「H」し、パルスRの立ち上がりでリセット「L」した送信クロックTxCLKを出力するSet−Resetフリップフロップである。
図17において、(a)はGCLKである。Rx同期検出部52では、(b)Rx同期クロックの立ち上がりを検出すると、その次のGCLK1サイクルが「H」となる(c−1)RDpls信号を出力し、またGCLKサイクル内のどの時刻で立ち上がったかを示す(c−2)RDqp信号(本例では10とする)も出力する。
(d)Mnowは、周波数演算部57から供給される送信クロック周波数指示信号であり、図示したように入力されるものとする。(e−1)nextSは、SET時間演算部70で演算される次のTxCLKの立ち上がり時間を表す。最初は、Rx同期クロックの立ち上がりに同期してTxCLKが立ち上がるようになっているので、次のTxCLKの立ち上がりはSPqp+Mnow=250Tv後となる。ここで右辺のカンマの前の数値はnextScを、カンマの後の数値はnextSqpを表す。またその次のnextSは、nextSqp+Mnow=298となる。
(e−2)nextRは、RST時間演算部71で演算される次のTxCLKの立ち下がり時間を表す。まずはRx同期クロックの立ち上がりにMnow/2を加算した値(=130)がTxCLKの立下り時間となり、(e−1)nextSと同様に右辺のカンマの前の数値はnextRcを、カンマの後の数値はnextRqpを表す。
(f)pSetは、SETqp信号を更新するためにSETplsの1GCLK前に出力するパルスであり、カウンタ72のカウント値がnextScと一致した時「H」となる。なお、図中示した丸数字はnextScのカウント値を表す。
(g−1)SETplsは、RDplsとpSet信号を1GCLK遅延させたパルスであり、TxCLKの立ち上がりをGCLK単位で指定する。(g−2)SETqpはこのSETplsの遅延値を示すTxCLK立ち上がり時間情報であり、(f)pSetが「H」の時の(e−1)nextSqpの値に更新していく。(h−1)RSTplsはTxCLKの立ち下がりをGCLK単位で指定したパルスであり、カウンタ75のカウント値がnextRcと一致した時「H」となる。(h−2)RSTqpはRSTplsの遅延値を示すTxCLK立ち下がり時間情報である。
(i−1)Sは、(g−1)SETplsを対応する(g−2)SETqpの値だけ遅延させたパルスであり、遅延値の単位は多相クロックVCLK0〜15の位相差Tvである。同様に、(i−2)Rは、(h−1)RSTplsを対応する(h−2)RSTqpの値だけ遅延させたパルスである。(j)TxCLKは、(i−1)Sの立ち上がりで「H」に、(i−2)Rの立ち上がりで「L」として生成される送信クロックである。
図18は、比較部55の詳細構成例を示す図である。また、図19は各信号のタイミングの一例を示す図である。図18,図19を参照して、比較部55の詳細な動作を説明する。
図19において、(a)はGCLKである。(b)はRx同期クロックである。Rx同期クロックの立ち上がりの時間間隔がTrxである。(c)はRDplsである。また、(d−2)RDqpはRx同期クロックの時間情報である。さらに、(e−1)SETpls、(e−2)SETqpはTxCLKの立ち上がりを表す時間情報である。これらは前述したので説明は省略する。
(e−3)SETcntは、カウンタ72のカウント値である。本例では、Mnow=192で一定とする。このとき(f)TxCLKが生成される。TxCLKは、Rx同期クロックの丁度2GCLK後に同期して生成される。よって、(c)RDplsを1GCLK遅延させた(d−1)RDdetが「H」の時の各信号値から誤差Lerrを検出する。
(g)はpSetであり、(h)countNは、(c)RDplsで‘0’クリアされ、(g)pSetによりインクリメントされるカウンタ81のカウント値である。これらより、Rx同期クロックの立ち上がりから次の立ち上がりまでのTxCLKのサイクル数nと位相誤差m2を検出する。
図18において、カウンタ81は、RDplsで‘0’クリアし、pSetによりインクリメントするカウンタであり、そのカウント値countNを出力する。減算部82は、RDdetが「H」の時のカウンタ81の値countN(図19ではn)から基準カウント値RefNの減算を行い、減算結果diffN(=n−RefN)を出力する。
誤差検出部84は、RDdetが「H」の時のSETqp及びSETcntをそれぞれEndqp、Endcntとすると、次式の演算を行い位相差diffMを算出する。
diffM=Endcnt・Mp+(RDqp−Endqp)
ここで、MpはGCLKの時間情報分割数であり、この例では64である。また図19の例ではdiffM=144となる。
誤差演算部83は、下記の演算を行い多相クロックVCLK0〜15の位相差Tvを単位とする誤差Lerrを出力する。
Lerr=diffN・K+diffM
ここで、Ttx=K・Tv,Ttx:TxCLKの周期である。
次に、図12のデータ送信部118で生成した送信クロックTxCLKを基準にデータに従い変調する送信データ生成部119の好適な構成及びその動作を説明する。
図20は送信データ生成部119の詳細構成例を示す図である。また、図21は、送信データ生成部119の各信号のタイミングの一例を示す図である。図20,図21を参照して、詳細な動作を説明する。なお、本例では、データDataは8bitであり、従って、送信クロック1周期を8分割して送信データMDataを生成する場合とする。
図20において、送信データ生成部119は、GCLKが各部へ供給され、基準クロックとして動作する。クロックパターン生成部90は、SETpls及びSETqp信号から構成されるSet信号と送信クロック周波数指示信号Mnowとから、送信クロックTxCLKの所定の位相差を持ったクロックに相当するクロックパターン信号CKP(ここではCKP0〜3で、TxCLKとそれぞれ、0、π/8、π/4、3π/8位相の遅れたクロックのパターン)を生成する。このクロックパターン信号CKPは、GCLKを基準に変化する信号で、GCLKサイクルを時間情報QPで区切った64の期間Tqpにそれぞれ対応する64ビットのデータであり、期間Tqpが「H」の場合は対応するビットが「1」であり、「L」の場合は「0」となる。
そしてクロックパターンの生成手順は次のようにして行う。まず各クロックパターンの立ち上がりを示すオフセットデータsofs0〜3及び立下りオフセットデータrofs0〜3を求める。それぞれ、sofs0=SETqp、sofs1=SETofs+Mnow/8、sofs2=SETofs+Mnow/4、sofs3=SETofs+3Mnow/8であり、rofs0〜3はそれぞれsofs0〜3にMnow/2を加算する。次にGCLKのサイクル毎クロックパターンCKPのMSBから順にsofsまでは「0」に、sofsからrofsまでは「1」に、rofsからは「0」へと変換する。
なお各オフセットデータが64以上であれば、64毎に1GCLK遅らせて、この変換を行う。例えば、Mnow=192、SETqp=16の場合、CKP1は、sofs=40、rofs=136(=2GCLK+8)であるので、第1のGCLKサイクルのパターンはMSB(=63)〜24ビット目までは「0」、23〜0ビットは「1」に、第2のGCLKサイクルのパターンは全て「1」に、第3のGCLKサイクルのパターンは63〜56ビットは「1」、55〜0ビットは「0」になる。
変調パターン生成部92は、データDataとクロックパターン信号CKP0〜3とから、変調パターン信号MDPを生成する。この変調パターン信号MDPは、クロックパターン信号CKPと同様に、GCLKを基準に変化する信号で、GCLKサイクルを時間情報QPで区切った64の期間Tqpにそれぞれ対応する64ビットのデータである。
シリアライザ93は、変調パターン信号MDPを多相クロックVCLK0〜15を基準として、MSBから順に(つまり時間順に)Tv時間ずつシリアル出力した送信データMDataを生成する。
図21において、具体的数値例を挙げて説明する。(a)は基準クロックとなるGCLKである。今、Set信号を構成する(b−1)SETpls及び(b−2)SETqpが図のように供給される時、送信クロックは(c−1)TxCLKのように生成されている。また、送信クロック周波数指示信号Mnow=192であるとする。また実際には生成しないが、TxCLKをそれぞれπ/8、π/4、3π/8だけ位相を遅らせたクロックを(c−2)TxCLK1、(c−3)TxCLK2、(c−4)TxCLK3に説明のため示す。
(d−1)〜(d−4)はそれぞれTxCLK、TxCLK1〜3を表すクロックパターンCKP0〜3である。それぞれ64ビットのデータでMSBからLSBに時間順であり、HEX表記している。よってこれらのクロックパターンCKP0〜3から、送信クロックTxCLKを8つに時分割した期間(tp0〜tp7)を示すパターン(それぞれ時間順にPT0〜7と称する)が生成できる。すなわち、PT0=CKP0&〜CKP1、PT1=CKP1&〜CKP2、・・・、PT7=〜CKP3&〜CKP0である。ここで、&は論理積を、〜は否定論理を示す。
(e)Dataはパルス幅変調データであり、図のような値とする。(f)MDPは変調パターン信号であり、まずiを0〜7まで変化させた時の({64{DecData[7−i]}}&PTi)を演算し、次にこれらの論理和を演算することにより得られる。ここで、{64{DecData[i]}}はDecData[i]を64ビット分連接させたデータである。
こうして生成された変調パターン信号をシリアライズすることにより(g)MDataの送信データが生成できる。この例ではPCLK周期Tpのうち最初の3/8の期間が「H」で、残りが「L」となるようにパルス幅変調されたパルスが生成される。
また、送信クロックをπ/8ずつ位相をずらしたクロックパターンCKP0〜3を生成する代わりに、送信クロックTxCLKの1サイクルを8つに時分割したそれぞれの期間を示すパターンPT0〜PT7を生成し、これらとパルス幅変調データDecDataとから変調パターン信号MDPを生成するようにしても良い。
さらに、上記の例では、送信クロックの8倍のパルス幅変調を行う場合について説明したが、他の変調方式であっても適用できる。例えば16倍のパルス幅変調を行う場合は、データDataを16ビットのパルス幅変調データとし、クロックパターン生成部90は、送信クロックTxCLKとπ/16ずつ位相をずらした8つのクロックパターンCKP0〜7を生成し、変調パターン生成部92で同様にして変調パターン信号MDPを生成するようにすればよい。
また、この構成例は図12の送信クロック出力部58に適用してもよい。つまり、送信クロックTxCLKのクロックパターンTxCKPを生成し(前述のクロックパターン信号CKP0を用いればよい)、これを多相クロックVCLK0〜15を基準として、MSBから順に(つまり時間順に)Tv時間ずつシリアル出力すれば送信クロックTxCLKを生成できる。
以上説明したように、このデータ送信部の第2の構成例(図12のデータ送信部118)によれば、高精度に生成された多相クロックVCLK0〜15を基準として送信クロックを生成し、Rx同期クロックの変動に合わせて送信クロック周波数を制御しているので、Rx同期クロックの変動があってもこの誤差を高精度に補正できる送信クロックが生成できる。また、送信クロックの生成は多相クロックVCLK0〜15の位相差Tvの単位で正確に制御できるので、多相クロックの発振周波数を高くしないでもよいので、回路の設計が容易となり消費電流も低減できる。例えば、前述の第1の構成例と同等の分解能で送信クロックを生成する場合は、多相クロックの発振周波数は1/16でよい。逆にいえば、同等の発振周波数とした場合、送信クロック生成分解能を16倍に向上できる。つまり高精度な送信クロックが生成できる。さらには、送信クロック生成部の大部分は多相クロックの1つをさらに分周したクロックGCLKで動作するようにしているので、動作周波数がさらに低下され、消費電流の低減ができる。
図22は、送信データ生成部119の別の構成例を示す図である。図22において、データ変換部301は、DataをPWM変調パルス幅データDoutに変換するものである。上述してきたように送信クロックTxCLKの1周期は高周波クロックVCLK0〜15の位相差Tvを単位とするM値で表され、目標の送信クロック周波数がMtargetで定められているとする。このときデータDataの最大値をdmaxとすると(例えばデータが4bitで表されるとすると最大値dmax=15)、Dout=Mtarget*Data/dmaxなる演算をして変換データDoutを得る。この変換はその都度演算をして求めてもよいが、予めデータに対応する変換データを定めた変換データ表LUT(Look Up Table)を変換データ生成部307により生成しておき、これをデータ変換部301に供給して、この変換データに従って変換するようにしておけばよい。あるいは、変換データ生成部307は、別途求めた変換データを格納するものであっても良い。また、データ変換部301は、データが0であるときにDzeroをHに、データがフル濃度(dmax)であるときにDfullをHとする信号を生成する。
実際は送信クロックTxCLK周波数はその都度制御されており、そのときの送信クロック周波数はMtargetと一致しないこともある。その場合はその差分を補正データとして供給し、データ補正部302により、その差分を補正し、補正したPWM変調データDpwmを生成する。
位相補正情報保持部303は、位相補正情報を保持するレジスタであり、この位相補正情報とは、送信側と受信側の動作クロックの位相差を補正するための情報である。生成方法の詳細は後述する。
エッジ時刻演算部304は、PWM変調データDpwm、フル濃度信号Dfull、ゼロ濃度信号Dzeroに従い、また送信クロック生成部より供給される送信クロックTxCLKの立ち上がり時刻情報などを表すTxCLKデータを基準として、送信データの立ち上がり時刻情報WPS及び立下り時刻情報WPRを後述する演算により生成するものである。
Set/Rstパルス生成部305は、送信データの立ち上がり及び立下り時刻情報WPS、WPRからセットパルスWPSpls、リセットパルスWPRpls及びその位相情報WPSqp、WPRqpを生成するものである。
変調データ出力部306は、セットパルスWPSpls、リセットパルスWPRpls及びその位相情報WPSqp、WPRqpから送信データを生成し出力するものである。
次に、図22の各部の詳細構成及び動作を説明する。図23は、データ補正部302の一例を示す図である。図23のデータ補正部302は、目標送信クロック周波数Mtargetと現在の送信クロック周波数Mとの差分をΔMとした時、Dpwm=Dout(1+ΔM/Mtarget)なる演算を行ってデータの補正を行う。データ補正部302において、まず割算器310はΔM÷Mtargetの演算を行う。なお、通常、高速な割算器を構成するのは困難なので、Mtargetの逆数を与え、ΔM×1/Mtargetの演算を行う掛算器としてもよい。また、掛算器311は、入力したPWM変調データDoutに割算器310の出力を掛け、Dout・ΔM/Mtargetを求める掛算器である。また、遅延部312は、掛算器311の演算時間分PWM変調データDoutを遅延させる。また、加算器313は、遅延部312出力と掛算器311出力とを加算し、補正したPWM変調データDpwm(==Dout(1+ΔM/Mtarget))を出力する。
図24は、エッジ時刻演算部304で行なう演算を表す表を示す図であり、図25は、演算の一例を示す信号波形図である。いまの例では、送信クロックTxCLKの立ち上がり時刻情報などを表すTxCLKデータとして、内部動作クロックGCLKを基準に生成されたデータであり、送信クロックの立ち上がりを表すセットパルスPCKsetとその位相情報setph、セットパルスPCKset立ち上がりエッジを起点としその送信クロックの中心位置を表すデータcentpos、及びセットパルスPCKset立ち上がりエッジを起点とし次の送信クロックの立ち上がり位置を表すデータnextposと、からなる情報が供給されている。
ある送信クロック1周期が全てハイの期間であるかを示すフル濃度信号Dfull(Hがフル濃度時)、その期間が全てローであるかを示すゼロ濃度信号Dzero(Hがゼロ濃度時)、位相データDph(ここでは左/右/中の3つのドット位相状態があるものとする)と、前ドットが点灯状態で終わっているか否かを示す信号prev’の各状態(S1〜S10)に応じて、変調データの立ち上がり時刻情報WPS及び立下り時刻情報WPRと前ドット立下り時刻情報prevRSTと、当該ドットが点灯状態で終わるか否かを示す信号prev(次ドットでのprev’になる)が図24に示すように生成される。ここで、Xは、その信号の状態が何であっても良いという意味であり、WPS等の欄に示す‘−’はそのドットでは有効データではないことを表す。一例を説明すると、フル濃度信号Dfull=Hの時は、他の信号がどの状態であってもprev=Hとし、prev’=LであればWPS=setphを代入し出力する。このとき他の情報は有効データではない。
図25に基づき、さらに演算例を説明する。ここではDpwm=fullの時、Dfull=Hを示し、Dpwm=zeroの時、Dzero=Hであり、その他は変調データの値を記す。まず、(1)のドットサイクルでは、Dpwm=d0であり(つまりDfull=L、Dzero=L)、Dph=左、またprev’=Lであるので、図24のS5の状態であるので、WPS=setph、WPR=setph+d0、prevRST=無効、prev=Lとなる。図中各時刻情報を矢印で記す、記入の無いサイクルで無効を表す。
以降、ドットサイクル(2)では、S7の状態であるので、WPS=n1−d1、WPR,prevRST=無効、prev=H
ドットサイクル(3)では、状態S4で、prevRST=setph、他無効、prev=L
と演算される(以降サイクルの記述は省略)。
また、(k)TxCLK及び(l)送信データは、説明のため、送信クロックと変調データを実時間で表したものである。
次に、Set/Rstパルス生成部305は、変調データの立ち上がり時刻情報WPSが、GCLKのカウント数WPScntと位相情報WPSqpに分けられ(具体的には、例えば、下位6ビットが位相情報、それ以上がカウント数を示す)、PCKsetパルスをGCLKのカウント数WPScnt分遅延させたパルスをセットパルスWPSplsとして出力し、その出力に合わせて位相情報WPSqpも出力する。また同様に、prevRST時刻情報が無効であれば、変調データの立ち下がり時刻情報WPRをGCLKのカウント数WPRcntと位相情報WPRqpに分け、CKsetパルスをWPRcnt分遅延させたパルスをリセットパルスWPRplsとして出力し、合わせて位相情報WPRqpを出力する。prevRST時刻情報が有効であれば、その前にPCKsetパルスと同一サイクルでリセットパルスWPRplsと位相情報setphを出力し、続いて変調データの立ち下がり時刻情報WPRに基づいた生成を行う。
図26は変調データ出力部306の構成例を示す図である。図26において、遅延部320は、多相クロックVCLK0〜15を基準として、Set/Rstパルス生成部305から供給されるWPSplsを位相情報WPSqpに従って遅延させたパルスSを出力するものであり、また、GCLKサイクル中の期間QTを特定するためクロックGCLKも入力する。あるいは期間を示す期間信号QTを入力しても良い(この場合は高周波クロック生成部51でこのQT信号を生成する)。つまり、パルスSはWPSplsをWPSqp・Tvだけ遅延させたパルスとなる。また、遅延部321は、同様に、多相クロックVCLK0〜15を基準として、Set/Rstパルス生成部305から供給されるWPRplsを位相情報WPRqpに従って遅延させたパルスRを出力するものであり、パルスRはWPRplsをWPRqp・Tvだけ遅延させたパルスとなる。SR−F/F322は、パルスSの立ち上がりでセット「H」し、パルスRの立ち上がりでリセット「L」した送信データを出力するSet−Resetフリップフロップである。
図27は本発明によるデータ受信部(図1のデータ受信部502)の構成例を示す図である。
図27のデータ受信部404において、受信データ生成部401は、送信データを受信し、受信データを生成する。また、基準クロックRefCLKRxに基づいて受信クロックを生成し、その受信クロックに基づいて送信データを受信する。受信クロックの周波数は、その通信システムの通信レートに合わせて設定し、RefCLKRxをそのまま用いてもよいし、逓倍もしくは分周して生成してもよい。
同期クロック生成部402は、受信データ生成部401から受信クロックを受け取り、その受信クロックをその通信システムで定められた分周比Mrxに従って分周し、Rx同期クロックを生成する。この分周比Mrxは、受信クロックと同期クロックとの周波数比から設定される目標値(請求項2における目標値)に相当し、図2におけるRefNとなる。ただし、データ送信部において、送信クロック1周期あたりNビットのデータを送信する場合には、Mrx/Nが目標値RefNとなる。位相判定信号生成部403は、送信データと受信クロックの位相調整を行う位相補正期間内に、受信データ生成部401から受信データを受け取り、その通信システムにおいて予め定められたパターンと一致するかどうかを判定することによって位相判定信号を生成する。詳しい説明は後述する。
図28に受信データ生成部401の構成例を示す。この受信データ生成部401は、基準となるRefCLKRxを逓倍して受信クロックを生成し、その受信クロックで送信データを取り込み受信データを生成している。位相周波数比較器PFD455はRefCLKRxと分周器457の出力の位相周波数比較を行い、この位相差情報に基づき内在するチャージポンプを駆動する。ローパスフィルタLPF456はチャージポンプ出力を平滑化し制御電圧をVCO458に供給する。電圧制御発振器VCO458はこの制御電圧によって発振周波数が変化する。分周器457はVCO458で出力された受信クロックをN分周する。PFD455、LPF456、VCO458、分周器457によってPLL(位相同期ループ)が構成されている。なお、図28では、PLLによってRefCLKRxを逓倍して受信クロックを生成しているが、通信データレートやRefCLKRxの周波数によって、RefCLKRxをそのまま受信クロックとする場合や、RefCLKRxを分周して受信クロックとする場合なども考えられる。F/F459は受信クロックによって送信データを取り込むためのフリップフロップである。取り込まれたデータはシリパラS/P460によってパラレルデータに変換される。
図29は同期クロック生成部402の構成例を示す図である。分周器461は受信データ生成部401で生成された受信クロックをMrx分周してRx同期クロックを生成するカウンタである。Mrxの値はその通信システムによって予め定められた値である。
また、図27において、位相判定信号生成部403は、位相補正期間内に受信データ生成部で生成された受信データにある特定のデータパターンが含まれるかを判定し位相判定信号を生成する。データパターンの実施例については後述する。
次に、送信データと受信クロックの間の位相調整を行うシーケンスについて図30を用いて説明する。この位相調整は、通信初期化時において行い、場合によってはデータ通信を行っていない期間にも実施してもよい。位相調整をどのようなタイミングで行うかについては後述する。図30のフローチャートにおいて、Step1は送信データを受信クロックの周波数に合わせるための周波数引き込み工程であり、この工程は既に説明してきたデータ送信部によって行われる。Step2は送信クロック周波数制御がロックしているか否かを示すロックフラグLockに従い分岐する。ここでロックフラグLockは、例えば、所定期間(例えばRx同期クロック6周期分)図2や図12における誤差Lerr(あるいは誤差データErr)が所定の範囲内(データ通信のエラー許容範囲などから決めればよく、例えば±16Tv以内とする)に収まっていれば、ロックしているとみなす信号で、この信号の生成部は例えばフィルタ6内に備えればよい。あるいは制御応答性より予め制御開始からの所定時間(Rx同期クロック周期数などで指定)を決めておき、この時間が経過したらLock信号をアクティブにするようにしても良い。
図31は、この制御方法による引き込み過程の様子の一例を示す図であり、横軸は時間、縦軸は誤差Lerrであり、黒丸が一定期間許容範囲内に収まった時点でLockが立つ。
図30に戻りStep2においてはLock判定がNoの場合には引き続き周波数引き込み工程を行う。Lock判定がYesとなった場合には、次の工程へ進む。Step3は位相補正情報設定工程であり、位相補正情報は0もしくは自然数であり、初期値は0であるとする。Step4は位相補正用データ送信工程であり、位相補正用データとはその通信システムによって予め定められたデータパターンであり、送信データ生成部により出力される。詳細は後述する。Step5は送信データと受信クロックが位相同期しているか否かを示す位相判定信号により分岐する。位相判定信号は、データ受信部において位相補正用データを受信することにより生成される。位相判定がNoの場合にはStep3に戻り位相補正情報を1インクリメントする。そして再び位相補正用データを送信し、位相判定信号により判断する。以上のルーチンを位相判定がYesになるまで繰り返す。位相判定がYesになったら、その時点での位相補正情報から算出される位相補正情報を設定する。具体的な算出方法は後述する。
図32,図33には位相補正用データの第1の例が示されている。
図32において、位相補正情報は0であり、位相補正用データは受信クロックの周期Trxの5倍のパルス幅をもつパルスである。この位相補正用データをデータ受信部に送信した時、位相補正用データと受信クロックがどのような位相関係であったとしても、受信データとしてはデータ1を5回連続で検出する。この時、位相判定情報は0のままである。
次に図33において、位相補正情報は24であり、その時の位相補正用データは図32の位相補正用データよりも立ち上がり時刻が24*Tv遅れたパルスとなる。パルス幅としては5*Trx−24*Tvとなる。ここで、Tvは演算単位時間(高周波クロックの周期もしくは多相クロックの位相差)である。この時、受信データは、データ1の数が1つ減り4つとなる。その場合に位相判定信号はフラグが立つ。このとき、位相補正用データの立ち上がりと受信クロックの立ち上がりはほぼ同時刻であり、位相補正情報を1ずつインクリメントしていった場合には、演算単位時間の精度で合わせることが出来る。この後、実際に送信側に設定する位相補正情報は、現在の位相補正情報の値に、受信クロック周期の半周期を演算単位時間で表した数だけ足すか、もしくは、引くことにより算出する。例えば、位相判定終了時の位相補正情報をNpc’とし、実際に設定する位相補正情報をNpcとし、Trx=160*Tvとすると、
Npc=Npc’+Trx/Tv/2
から求まるNpcを設定する。図33の場合にはNpc=104となる。
ただし、Npc’>Trx/Tv/2の場合には、
Npc=Npc’−Trx/Tv/2
とした方がよい。
実際のデータ通信時にこの設定された位相補正情報に従って、送信クロックをNpc*Tvだけ遅延させてやることにより、送信データのエッジ位置は受信クロックの立ち上がり位置のほぼ中央となり、データ受信部においてデータ取り込みミスが起こりにくくなる。この送信クロックを遅延させる機能は、図2の分周器4や図12の計数部54においてカウンタのリセットを位相補正情報に従って遅らせることで実現できる。詳細は後述する。
また、一般の通信システムにおいて、伝送路はある周波数特性を持ち、周波数が高くなると信号の振幅が減衰し、パルス幅を正確に伝送できなくなるといったことが起こる。実際の位相補正用データのパルス幅を設定するときには、この伝送路特性を考慮し、設定する必要がある。図32では、位相補正用データのパルス幅は、受信クロックの周期の5倍としたが、実際はその通信システムにおける伝送路特性を考慮し、その伝送路によって影響を受けない(パルス幅が縮まらない)パルス幅に設定する。
図34,図35には、位相補正用データの第2の例が示されている。
図34において、位相補正情報は0であり、位相補正用データは、受信クロックの周期Trxの5倍からある定められた時間ΔTを引いた5*Trx−ΔTのパルス幅をもつパルスである。この位相補正用データをデータ受信部に送信した時、位相補正用データと受信クロックの位相関係により、受信データのデータ1が5回連続の場合と4回連続の場合が発生する。図34は5回連続の場合である。この時、位相判定情報は0のままである。
次に図35において、位相補正情報は24であり、その時の位相補正用データは図34の位相補正用データよりも立ち上がり時刻、立ち下がり時刻共に24*Tv遅れたパルスとなる。ここで、Tvは演算単位時間(高周波クロックの周期もしくは多相クロックの位相差)である。この時、受信データは、データ1の数が1つ減り4つとなる。その場合に、位相判定信号はフラグが立つ。このとき、位相補正用データの立ち上がりと受信クロックの立ち上がりはほぼ同時刻であり、位相補正情報を1ずつインクリメントしていった場合には、演算単位時間の精度で合わせることが出来る。この後、実際に設定する位相補正情報は、現在の位相補正情報の値に、受信クロック周期の半周期を演算単位時間で表した数だけ足すか、もしくは、引くことにより算出する。例えば、位相判定終了時の位相補正情報をNpc’とし、実際に設定する位相補正情報をNpcとし、Trx=160*Tvとすると、
Npc=Npc’+Trx/Tv/2
から求まるNpcを設定する。図35の場合にはNpc=104となる。
ただし、Npc’>Trx/Tv/2の場合には、
Npc=Npc’−Trx/Tv/2
とした方がよい。
またΔTの時間としては、位相判定が正確に行えるくらい十分大きく設定する必要があるが、あまり大きくし過ぎると位相同期精度が悪くなるので、その点を考慮して設定する必要がある。
以上のような、位相補正機能により位相補正を行った後に実際にデータ通信を行っている時のタイミング関係を表す図を図36,図37に示す。ただし、図中では伝送路による遅延やフリップフロップの出力遅延などは無視している。
図36において、Rx同期クロックは、受信クロックを10分周したクロックである。また、送信クロックは、受信クロックと周波数が合うように周波数制御がされている(つまりTtx=Trx)。そして、送信クロックおよび送信データの位相は、位相補正情報により調整されており、初期値の位相よりNpc*Tvだけ遅延している。これにより送信データのほぼ中央で受信クロックが立ち上がるようになっている。また、図37では、送信クロック1周期あたり2bitのデータを送信する場合であり、この場合はTtx=2*Trxとなるように周波数制御されている。また、送信クロックおよび送信データの位相は、位相補正情報により調整されており、初期値の位相よりNpc*Tvだけ遅延している。これにより、送信データのほぼ中央で受信クロックが立ち上がるようになっており、データ取り込みミスが起こりにくくなり良好な通信システムを実現することができる。
図38は図2のデータ送信部の構成において位相補正情報を保持しておくための位相補正情報保持部451を追加した場合の構成を示す図である。高周波クロック生成部1、Rx同期検出部2、分周器4、比較部5、フィルタ6、周波数演算部7、送信データ生成部113については、図2のそれと同様の構成で実現できるので説明は省略する。位相補正情報保持部451はRx同期クロックが入力され、前述したように設定された位相補正情報に従ってVCLKを単位時間としてRx同期クロックを遅延する。その遅延されたRx同期クロックでカウンタ4をリセットすることにより、Rx同期クロックと送信クロックTxCLKの位相関係をコントロールすることが出来る。
図39に位相補正情報保持部の構成例を示す。遅延部452にはRx同期クロックが入力され、設定された位相補正情報に従ってVCLKを単位として遅延されたRDCLKを出力する。位相補正情報生成部は、前述したように位相補正期間内にデータ受信部から入力される位相判定信号に従って位相補正情報を決定する。Reg454はその位相補正情報を保持するためのレジスタである。このようにRx同期クロックと送信クロックの位相関係をコントロールすることにより、データ送信部から送信されるデータとデータ受信部の受信クロックとの間の位相差を調整でき良好な通信システムを実現することが可能となる。
図40に、本発明によるシリアルデータ通信システムの第2の実施形態の全体構成を示す。図40は受信側において送信データと受信クロックの位相調整を行う場合の構成例である。データ送信部503はRefCLKTx、データ、RefN、Rx同期クロックが入力され送信データを出力する。またデータ受信部504はRefCLKRxと送信データが入力され受信データ、Rx同期クロックを出力する。データ送信部503は図2の構成で実現できる。この場合、データ送信部にはTxCLKの位相調整機能はもたない。データ受信部504の構成例を図41に示す。図41においてPLL505はRefCLKRxを逓倍し受信クロック周波数のクロックを生成する。分周器506はPLL505で生成されたクロックをMrx分周しRx同期クロックを生成するカウンタである。Mrxの値はその通信システムによって予め定められた値である。遅延同期ループDLL507はPLL505で生成されたクロックから同じ周波数で互いに等間隔の位相差を有する多相クロックを生成する。受信クロック選択部508はその多相クロックの中から選択信号selにより受信クロックを選択する。F/F509,510は受信クロック選択部から出力された受信クロックRxCLK1、RxCLK0によりそれぞれ送信データを取り込むフリップフロップである。比較部511はF/F509,510で取り込まれたデータを比較し選択信号を生成するブロックである。S/P512はF/F510で取り込まれたデータをシリパラ変換し受信データを生成する。
図42にDLL507の構成例を示す。図42では多相クロックとして8相クロックを生成する場合の構成を示している。またPLLから入力されるクロックは差動クロックPLLCLK、PLLCLKBとしている。差動クロックPLLCLK、PLLCLKBはディレイ部515に入力されVCLK0〜7を生成する。また位相比較器PD513はPLLCLKとVCLK7との位相比較を行い、この位相差情報に基づき内在するチャージポンプを駆動する。ローパスフィルタLPF514はチャージポンプ出力を平滑化し制御電圧Vcをディレイ部515に供給する。
図43に受信クロック選択部508の構成例を示す。多相クロックVCLK0〜7はマルチプレクサMUXに入力される。それぞれのMUXはクロック選択信号sel(本例では3bit)のいずれかによって出力選択される。RxCLK0、RxCLK1の組み合わせとしてはRxCLK0=VCLK4、RxCLK1=VCLK5などRxCLK1はRxCLK0から1位相遅れたクロックが出力される。
図44と図45のタイミング図を用いて比較部511及び送信データと受信クロックの位相調整方法について説明する。位相調整は通信初期化時またはデータ通信を行っていない期間に行い、送信データの周波数が一定になっている状態で行う。位相調整をどのようなタイミングで行うかについては後述する。位相調整時の送信データとしては例えば1010…のような信号のエッジが多いデータが望ましい。図44において(a)送信データとして1010…というデータが送られてきている。クロック位相選択信号(b)sel[2:0]は000が設定されている。その時(c−1)RxCLK0としてはVCLK0が、(c−2)RxCLK1としてはVCLK1が出力される。そのRxCLK0で取り込んだデータ(F/F510の出力)が(d−1)データ0であり、RxCLK1で取り込んだデータ(F/F509の出力)が(d−2)データ1である。図44においてデータ0とデータ1は判定時刻において同一データが出力されているため比較結果としては0が出力される。判定時刻としてはRxCLK0の立ち上がりからTrx/2遅れた時刻などにすればよい。そして比較結果が0の場合にはクロック位相選択信号を1インクリメントし、同様なデータ比較を繰り返す。図45においては(b)sel[2:0]が100に設定されている。その時、(c−1)RxCLK0としてはVCLK4が、(c−2)RxCLK1としてはVCLK5が出力される。そのRxCLK0で取り込んだデータ(F/F510の出力)が(d−1)データ0であり、RxCLK1で取り込んだデータ(F/F509の出力)が(d−2)データ1である。図45においてデータ0とデータ1は判定時刻において異なるデータが出力されているため比較結果としては1が出力される。比較結果として1が出力された時点において、その時点でのsel[2:0]から受信クロックが反転するようなselをクロック位相選択信号として設定する。つまり図45の場合、sel[2:0]=000が設定される。このようにすることにより送信データのエッジ位置から十分余裕のある位置の受信クロックを選択できる。このようにデータ受信部の受信クロックの位相を調整することにより取り込みミスを抑制し良好な通信システムを実現することが可能となる。
図46にデータ受信部504の別の構成例について示す。図46においてPLL528、分周器529、受信クロック選択部530、DLL531、F/F532,533、比較部534、S/P535は図42〜図45の説明と同様の構成で実現できる。図46ではRxCLK0、RxCLK1はDLL531で生成された多相クロックのうち固定の2クロックであり、例えばRxCLK0=VCLK0、RxCLK1=VCLK1のように1位相ずらしたもので固定とする。受信クロック選択部530はRx同期クロックを生成するためのクロックを選択し、受信クロック選択部530に入力される信号selを変えることによりRx同期クロックの位相が変化する。このように図46では受信クロックは固定としRx同期クロックの位相を調整することにより送信データの位相を変化させることによって図41の構成と同じように位相調整を行うことが出来る。
図47を用いて位相調整を行う期間について説明する。位相調整は初期化時には必ず行うが、初期化時に送信データと受信クロックの位相を合わせたとしても送信側受信側それぞれの電源電圧変化や温度変化によってデータ送信中に徐々に位相がずれてしまうことが考えられる。そのような場合にはある一定期間中に一度位相調整を行う必要がある。図42では(a)位相補正期間をある一定間隔ごとに(b)データ送信期間の間に設けている。この間隔は予め決めておいてもよいし、ある決められたデータパターンをデータ送信期間の始点としてそのデータパターンを検出することでデータ送信期間を判別してもよい。データ受信部としてはデータ送信期間以外に受信するデータは位相調整用に用いるだけでデータとしては破棄するようにしておく。このようにして一定期間ごとに位相調整を行うことにより良好な通信システムを維持することができる。
図48に通信チャンネルを2チャンネルにした場合の構成例を示す。送信側チップとしてはデータ送信部516を備える。データ送信部516はRefCLKTx、Rx同期クロック、RefN、データ1、データ2が入力され、送信データ1、送信データ2を出力する。受信側チップとしてはデータ受信部1517、データ受信部2518、受信クロック生成部519を備える。データ受信部1517は送信データ1と受信クロックが入力され、受信データ1を出力する。データ受信部2518は送信データ2と受信クロックが入力され、受信データ2を出力する。受信クロック生成部519はRefCLKRxが入力され、受信クロックとRx同期クロックを出力する。本構成例は2チャンネルの場合を想定しているが、それ以上の多チャンネルの場合でも同様に実現できる。その場合でも、受信側としてはRefCLKRxが共通であれば受信クロック生成部を共通にでき、データ受信部のみをチャンネル分備えればよいので、消費電力や面積の点で有利である。
図49にデータ送信部516の構成例を示す。図49は図2のデータ送信部において送信データ生成部を2つ備えた構成である。高周波クロック生成部517、分周器518、Rx同期検出部519、比較部520、周波数演算部521、フィルタ522については図2のそれと同様であるので説明は省略する。送信データ生成部1523はデータ1、Mnow、VCLK、countM、TxCLKが入力され送信データ1を出力する。送信データ生成部2524はデータ2、Mnow、VCLK、countM、TxCLKが入力され送信データ2を出力する。それぞれの送信データ生成部は図2の送信データ生成部113と同様に図11で説明したデータ変調動作を行う。以上のように本構成であれば、通信チャンネル数が多くなった場合でも送信データ生成部だけをチャンネル数分用意しその他のブロックは共通に出来るため、消費電力や面積の点で有利である。
図50に受信クロック生成部519の構成例を示す。PLL521はRefCLKRxを逓倍し受信クロックを生成する。また分周器520は受信クロックをMrx分周しRx同期クロックを生成する。Mrxの値はその通信システムによって予め定められた値である。Rx同期クロックはデータ送信部へ送られ、受信クロックはデータ受信部1517、データ受信部2518にそれぞれ供給される。
図51にデータ受信部1517の構成例を示す。遅延同期ループDLL522は受信クロック生成部519で生成されたクロックから同じ周波数で互いに等間隔の位相差を有する多相クロックを生成する。受信クロック選択部523はその多相クロックの中から選択信号selにより受信クロックを選択する。F/F524,525は受信クロック選択部から出力された受信クロックRxCLK1、RxCLK0によりそれぞれ送信データ1を取り込むフリップフロップである。比較部526はF/F524,525で取り込まれたデータを比較し選択信号を生成するブロックである。S/P527はF/F525で取り込まれたデータをシリパラ変換し受信データ1を生成する。DLL522、受信クロック選択部523、F/F524,525、比較部526、S/P527については図54〜57の説明と同様に実現できるので説明は省略する。またデータ受信部2518についても同様の構成で実現できる。そして前述した受信クロック選択を行うことにより各チャンネルにとって最適な受信クロックを選択することができる。つまり本実施例では、送信データの周波数制御を送信側で行い、受信側において各チャンネルの受信クロックの位相調整を行うため、多チャンネルの場合でも共通化できる部分が多く消費電流や面積の点で有利である。
図52に受信側チップが2つである場合の構成例を示す。送信側チップとしてはデータ送信部536を備える。データ送信部536はRefCLKTx、Rx同期クロック1、Rx同期クロック2、RefN、データ1、データ2が入力され、送信データ1、送信データ2を出力する。受信側チップ1としてはデータ受信部1537を備え、データ受信部1537は送信データ1とRefCLKRx1が入力され、受信データ1、Rx同期クロック1を出力する。受信側チップ2としてはデータ受信部2538を備え、データ受信部2538は送信データ2とRefCLKRx2が入力され、受信データ2、Rx同期クロック2を出力する。本構成例は2チャンネルの場合を想定しているが、それ以上の多チャンネルの場合でも同様に実現できる。
図53にデータ送信部536の構成例を示す。図53において高周波クロック生成部537はRefCLKTxが入力され高周波クロックVCLKを生成する。データ送信制御部1538はデータ1、RefN、VCLK、Rx同期クロック1が入力され送信データ1を出力する。データ送信制御部2539はデータ2、RefN、VCLK、Rx同期クロック2が入力され送信データ2を出力する。データ送信制御部の構成例について図54を用いて説明する。図54はデータ送信制御部1の構成例を示す図である。分周器540、Rx同期検出部541、比較部542、フィルタ543、周波数演算部544、送信データ生成部545は図2のそれと同様の構成で実現できる。またデータ送信制御部2も同様の構成で実現できる。また図52のデータ受信部1537、データ受信部2538は図41の構成で実現することができる。つまり、図52のような多チャンネルの構成の場合にでも、データ送信部としては高周波クロック生成部を共通にすることができる。一般に高周波クロック生成部はアナログPLLで構成され、面積消費電流ともに大きい。本構成であればその高周波クロック生成部を共通化できるため多チャンネルの場合でも消費電流や面積の点で有利である。
以上説明してきた実施例を図55のように画像形成装置内での画像データ通信に適用することにより、以下のような利点がある。一般的なシリアル通信方式において、伝送されるデータにはクロックが重畳され(エンベデッドクロック)、データ受信部で受信したデータからそのクロックを抽出する。受信側でクロック抽出を行うためには伝送されるデータにデータ遷移エッジが多く存在することが必要であり、そのために8B/10B変換といった符号化を行う。8B/10B変換とは任意の8bitデータをデータ遷移エッジの多い伝送に適した10bitデータに変換してから伝送し、伝送後に受信側でもとの8bitデータに復元するという方法である。その場合、もし仮に伝送時にエラーが発生し1bitだけデータが反転してしまったとすると、そのビットを含むシンボル(10bitデータ)は変換後正確な8bitデータにはならずエラーとなる。つまり10bit中1bitでもエラーをおこすとそのシンボルは誤ったデータとなるため、通信品質を保証するためには非常に低いエラーレートが要求される。本実施例のようにエンベデッドクロックを用いない方式であれば8B/10B変換のようなデータ変換を行う必要がなく、1bitエラーを起こしてもその前後のデータにまで影響を与えることはない。また画像データはそれ自身1bitだけエラーを起こしたとしても一般に画像としての影響は大きくないので、通信システムとして要求されるエラーレートは一般的なシリアル通信方式よりも高く(緩く)することが出来る。
上述したように、本発明では、送信側チップ内に送信データの周波数をディジタル的に変調する機能を持ち、受信側のデータ取り込みクロックの周波数に合わせて送信データを変調する。また送信データと取り込みクロックの位相関係も通信初期化時などにおいて調整する機能をもつ。また、送信側の送信データ生成の基準となる高周波クロックを多相クロックにすることにより、さらに高精度な周波数制御が可能となる。
より詳細に、本発明では、データ送信部において、高精度に生成された多相クロックVCLK0〜15を基準として送信クロックを生成し、Rx同期クロックに合わせて送信クロック周波数を制御しているので、受信クロックの周波数に変動があってもこの誤差を高精度に補正できる送信クロックが生成でき、さらに位相補正期間内に送信データと受信クロックの位相関係を調整するシーケンスをもつことにより、受信クロックに位相同期した送信データを生成でき、データ受信エラーのほとんどない通信システムを実現できる。
さらに、送信クロックの生成及び送信データの生成は多相クロックVCLK0〜15の位相差Tvの単位で正確に制御できるので、多相クロックの発振周波数を高くしないでもよく、回路の設計が容易となり消費電流も低減できる。さらには、多相クロックの1つをさらに分周したクロックGCLKで動作するようにしているので、動作周波数がさらに低下され、消費電流の低減ができる。
また、本発明では、送信データを受信側の取り込みクロックに合わせて変調することにより、受信側ではCDRなどの大規模回路を用意する必要はなく、簡易な構成で実現することが可能となる。また送信側ではディジタル的に周波数変調を行うため、受信チップの数に合わせてアナログPLLを用意する必要がなく、基準となるクロックは全ての通信チャンネルにおいて同一にすることが出来る。また、送信データを受信側の取り込みクロックに合わせて変調しているため、受信側でクロックを再生する必要がなくエンベデッドクロックにする必要はない。そのため一般のシリアル通信で用いられるような8B/10B変換といった符号化をする必要がなく、そのためのエンコーダ,デコーダを省略することが出来る。さらに画像形成装置内での画像データ通信に適用することにより一般的なシリアル通信方式に比べて通信システムとして要求されるエラーレートを高く(緩く)することができる。
すなわち、本発明では、画像形成装置内の半導体チップ間もしくはボード間の画像データ通信に、上述した本発明のシリアルデータ通信システムを用いることができる。
この場合、本発明では、例えば図36のような画像形成装置内部において、メインコントローラから画像データをエンジン側に送信する場合、エンジン側においてはCDR回路のような大規模な回路を載せられない場合や、発光素子を光らせるため高電圧が必要で大きなプロセスルールを使用することでスピード的に不足である場合、また画像エンジンチップの数が多くそのチップサイズを小さくしたい場合などに有用である。