(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-24
(45)【発行日】2023-12-04
(54)【発明の名称】半導体装置および復号化方法
(51)【国際特許分類】
H04L 25/49 20060101AFI20231127BHJP
H03M 5/04 20060101ALI20231127BHJP
H04L 7/04 20060101ALI20231127BHJP
H04L 25/38 20060101ALI20231127BHJP
【FI】
H04L25/49 F
H03M5/04
H04L7/04 400
H04L25/38 T
(21)【出願番号】P 2020096553
(22)【出願日】2020-06-03
【審査請求日】2022-10-31
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110000350
【氏名又は名称】ポレール弁理士法人
(72)【発明者】
【氏名】石見 幸一
(72)【発明者】
【氏名】藤井 謙雄
【審査官】北村 智彦
(56)【参考文献】
【文献】米国特許第06873642(US,B1)
【文献】特開2006-157221(JP,A)
【文献】特開2014-103552(JP,A)
【文献】特開2011-061525(JP,A)
【文献】特開平08-139711(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 25/49
H03M 5/04
H04L 7/04
H04L 25/38
(57)【特許請求の範囲】
【請求項1】
データを受信
し、受信したデータに含まれるエッジを検出するデータ受信回路と、
前記
データ受信回路で受信したデータに含まれるエッジを検出する
データ検出範囲をサイクル毎に設定するエッジ認識回路と、
を備え、
前記エッジ認識回路は、
前のサイクルのデータ
を示すエッジを受信
する第1の時刻から
現在のサイクルのデータ
を示すエッジを受信する
第2の時刻までの第1期間を計測する計測回路を備え、前記第1期間に基づいて、前記データ受信回路が受信する
次のサイクルのデータ
を示すエッジを検出する前記
データ検出範囲を決定するよう構成される半導体装置。
【請求項2】
請求項1の半導体装置において、
前記エッジ認識回路は、前記第1期間および所定の間隔に基づいて、前記
次のサイクルのデータ
を示すエッジを検出する
前記データ検出範囲を決定するよう構成される半導体装置。
【請求項3】
請求項2の半導体装置において、
前記エッジ認識回路は、前記第1期間が前記所定の間隔より短い場合、前記データ検出範囲を、前記第2の時刻から前記第1期間よりも遅い時間後に設定するよう構成される半導体装置。
【請求項4】
請求項3の半導体装置において、
前記エッジ認識回路は、前記データ検出範囲の先頭の時刻を前記第2の時刻から数えて前記第1期間よりも
遅い時刻に設定するよう構成される半導体装置。
【請求項5】
請求項2の半導体装置において、
前記エッジ認識回路は、前記第1期間が前記所定の間隔より長い場合、前記データ検出範囲を前記第2の時刻を受信した時から前記第1期間よりも早い時間に検出範囲を設定するよう構成される半導体装置。
【請求項6】
請求項5の半導体装置において、
前記エッジ認識回路は、前記
データ検出範囲の先頭の
時刻を、前記第2の時刻から数えて前記第1期間よりも
早い時刻に設定するよう構成される半導体装置。
【請求項7】
請求項2の半導体装置において、
前記エッジ認識回路は、前記第1期間が前記所定の間隔と等しい場合、前記データ検出範囲を変更しないよう構成される半導体装置。
【請求項8】
請求項2の半導体装置において、
前記エッジ認識回路は、前記データ受信回路が受信するデータの周期の値とジッタの値に基づいて前記所定の間隔を決定するよう構成される半導体装置。
【請求項9】
請求項1の半導体装置において、
前記データ受信回路で受信するデータは調歩同期型のマンチェスタ符号である半導体装置。
【請求項10】
請求項1の半導体装置において、
前記計測回路はカウンタであり、
前記カウンタは前記データ受信回路が受信するデータに含まれるエッジのうちデータ値を表すエッジとしての中間エッジをトリガーに前記
前のサイクルのデータを受信してから前記
現在のサイクルのデータを受信するまでの時間を計測するよう構成される半導体装置。
【請求項11】
請求項2の半導体装置において、
前記エッジ認識回路は、初回のエッジ検出または前回のエッジを検出する範囲を補
正しなかった場合は、エッジを検出する範囲において複数のエッジを検出したときにエラーを出力するよう構成される半導体装置。
【請求項12】
請求項11の半導体装置において、
さらに、受信バッファを有する受信回路を備え、
前記エッジ認識回路は、受信したデータをデコードして出力し、
前記受信回路は、前記エラーを受け
とった場合、前記エッジ認識回路から出力されたデータによって前記受信バッファを更新しないよう構成される半導体装置。
【請求項13】
マンチェスタ符号を調歩同期型で受信
し、受信した前記マンチェスタ符号に含まれるエッジを検出するデータ受信回路と、
前記データ受信回路で受信したデータに含まれるエッジを検出するエッジ検出範囲を
サイクル毎に設定するエッジ認識回路と、
を備え、
前記エッジ認識回路は、前のサイクルにおけるエッジの検出位置に基づいて、次のサイクルにお
いてエッジ
を検出するエッジ検出範囲を設定するよう構成される半導体装置。
【請求項14】
請求項13の半導体装置において、
前記エッジ認識回路は、
前記データ受信回路の連続する複数のエッジの検出において、同じ方向への
エッジの検出範囲の補正
を連続し
て行った場合は、1ビット当たりのサンプリング数を一時的に変えて、次のサイクルにおけるエッジの検出範囲を変更するよう構成される半導体装置。
【請求項15】
請求項14の半導体装置において、
前記エッジ認識回路は、
前記データ受信回路の連続する複数のエッジ検出
において、違う方向への
エッジの検出範囲の補正が一定期間無い場合は、1ビット当たりのサンプリング数を一時的に変えて、次のサイクルにおけるエッジの検出範囲を変更するよう構成される半導体装置。
【請求項16】
請求項13の半導体装置において、
前記データ受信回路は、
サンプリング周期で入力データをサンプリングするシフトレジスタと、
前記エッジをサンプリングするクロックに同期したカウンタを有するクロック生成回路と、
前記クロック生成回路により生成されたクロックにより前記シフトレジスタのデータを並列に格納するデータレジスタと、
前記データレジスタの出力に基づいてエッジを検出するエッジ検出回路と、
を備え、
前記エッジ認識回路は、
前記エッジ検出回路の出力をシフトするシフタと、
前記シフタの出力からエッジ検出範囲内のデータを切り出す窓切出し回路と、
を備え、
前のサイクルにおけるエッジの検出位置に基づいて、前記シフタのシフト量および前記窓切出し回路の切り出し範囲を設定するよう構成される半導体装置。
【請求項17】
請求項16の半導体装置において、
前記エッジ認識回路は、前のサイクルにおけるエッジの検出位置に基づいて、前記クロック生成回路が生成するクロックの周期を設定し、1ビット当たりのサンプリング数を一時的に変えるよう構成される半導体装置。
【請求項18】
(a)前のサイクルのデータ
を示すエッジを受信してから
現在のサイクルのデータ
を示すエッジを受信するまでの時間を測定し、
(b)前記測定した時間に基づいて、その後受信する
次のサイクルのデータ
を示すエッジを検出するデータ検出範囲を決定
し、
前記(a)および前記(b)を繰り返す復号化方法。
【請求項19】
請求項18の復号化方法において、
前記データ検出範囲を変えない設定、前記データ検出範囲の終わりを前に設定する進む補正をする設定、または、前記データ検出範囲の先頭を後ろに設定する遅れ補正をする設定を行い、
前のサイクルにおいて前記進む補正をした場合は、次回のサイクルにおいて進む方のデータ検出範囲を短くする復号化方法。
【請求項20】
請求項19の復号化方法において、
前のサイクルにおいて前記遅れ補正をした場合は、次回のサイクルにおいて遅れる方のデータ検出範囲を短くする復号化方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は半導体装置に関し、例えば、マンチェスタ符号等の復号化回路を備える半導体装置に適用可能である。
【背景技術】
【0002】
通信システムにおいて、送信側と受信側の基準クロックに一定以上の誤差が発生した場合、正常データが受信できなくなるなどの問題が生じる。
【0003】
これを防ぐ1つの方法として、高速データサンプリングが挙げられる。これは1のタイムスロット中に複数のサンプリングタイミングを設け、それらの結果からデータを確定させる手法である。ここで、タイムスロットは1ビットのデータを送信するための時間である。
【0004】
また、送受信間の基準クロックに周波数や位相のずれが生じることにより一定以上の誤差が発生した場合、正常データが受信できなくなることを防止する手段としては、マンチェスタ符号が採用される。マンチェスタ符号では、例えば、1タイムスロット中で高電位から低電位に遷移すれば論理値が「1」、低電位から高電位に遷移すれば論理値が「0」となるように、必ず1タイムスロット中に電位の変化が起きるようになっている(中間エッジの生成)。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
データを送信するとき、時間軸方向における信号波形の揺らぎであるジッタなどのノイズによって遅延が生じる。遅延は一定量でなくばらつきがある。データ送信の周波数と比較してサンプリング周波数が大きくない場合、そのばらつきによって間違ったエッジを検出してしまう可能性がある。送信受信間でクロック同期を取ったり、十分に大きいサンプリング周波数を設定したりできれば上記のような問題は起きないが、回路設計の制約などで同期を取ることが難しい場合がある。
【課題を解決するための手段】
【0007】
本開示の一態様によれば、半導体装置は、第1の時刻において第1のデータを受信し、第2の時刻において第2のデータを受信するデータ受信回路と、範囲を設定し、範囲に含まれるエッジを検出するエッジ認識回路と、を備える。エッジ認識回路は、第1のデータを受信してから第2のデータを受信するまでの第1期間を計測する計測回路を備え、第1期間に基づいて、データ受信回路が受信するデータに含まれるエッジを検出する範囲を決定するよう構成される。
【発明の効果】
【0008】
上記半導体装置によれば、データ送信の周波数と比較してサンプリング周波数が大きくない場合、そのばらつきによって間違ったエッジを検出してしまうことを低減することが可能である。
【図面の簡単な説明】
【0009】
【
図1】
図1は本開示の対象となる信号の伝播遅延モデルを示す図である。
【
図2】
図2は
図1に示される信号伝播遅延モデルにおける伝播遅延を示す図である。
【
図3】
図3はデータ周期の1/8以上のジッタが発生した場合のタイミング例を示す図である。
【
図4】
図4(a)はデータ検出範囲を変更しない場合のタイミング図である。
図4(b)はデータ検出範囲の補正において遅れ補正をする場合のタイミング図である。
図4(c)はデータ検出範囲の補正において進む補正をする場合のタイミング図である。
【
図5】
図5は遅れ補正および進む補正を説明するためのタイミング図である。
【
図6】
図6は第一実施例における通信システムの構成を示すブロック図である。
【
図7】
図7は
図6に示されるデコーダの構成を示すブロック図である。
【
図8】
図8は
図7に示されるデコーダの動作波形を示すタイミング図である。
【
図9】
図9は
図7に示されるデコーダが立下りのエッジを検出した場合のハードウェア処理を示すフローチャートである。
【
図10】
図10は第二実施例におけるデコーダの動作波形を示すタイミング図である。
【
図11】
図11は第二実施例におけるデコーダが立下りのエッジを検出した場合のハードウェア処理を示すフローチャートである。
【
図12】
図12は第三実施例におけるデコーダの構成を示すブロック図である。
【
図14】
図14は
図12に示されるシフト用のフリップフロップ、データサンプリング用のフリップフロップ、ノイズフィルタおよびエッジ検出回路の構成を示すブロック図である。
【
図18】
図18は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図19】
図19は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図20】
図20は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図21】
図21は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図22】
図22は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図23】
図23は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図24】
図24は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【
図25】
図25は第四実施例におけるエッジ認識回路の構成の一部を示すブロック図である。
【
図26】
図26は第四実施例におけるエッジ認識回路の構成の一部を示すブロック図である。
【
図28】
図28は第四実施例におけるデコーダの動作を示すタイミングチャートである。
【発明を実施するための形態】
【0010】
以下、実施形態および実施例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
【0011】
まず、ジッタについて
図1および
図2を用いて説明する。
図1は本開示の対象となる信号の伝播遅延モデルを示す図である。
図2は
図1に示される信号伝播遅延モデルにおける伝播遅延を示す図である。
【0012】
図1に示されるように、プリント回路基板(PCB)10の上に送信側の半導体装置(T_LSI)100と受信側の半導体装置(R_LSI)200が搭載されている。半導体装置100と半導体装置200とはプリント基板10に設けられた配線20によって接続されている。ここで、半導体装置100から半導体装置200に配線20を介して信号が送信される。
【0013】
送信側のクロック(CLK)を起点に考えると、受信側の入力論理回路としてのフリップフロップ(F/F)201にそれが到達するまでに、下記の遅延がある。
クロック(CLK)のジッタ:tTCD
半導体装置100の内部伝播遅延:tTID
半導体装置100出力バッファ102の遅延:tTBD
PCB10の配線20の遅延:tBWD
半導体装置200の入力バッファ202の遅延:tRBD
半導体装置200の内部伝播遅延:tRID
【0014】
ここで、tBWDには、半導体装置100,200のそれぞれのパッケージによる遅延を含む。上記の遅延はそれぞれ、温度、電圧、製造ばらつき、周囲のノイズ、などの条件によりが変わる。
図2に示されるように、これらの遅延の総和(tD)が最も小さくなった場合の遅延(tDE)と最も大きくなった場合の遅延(tDL)の差分が入力信号のジッタである。
【0015】
次に、本開示者らが検討したマンチェスタ符号におけるジッタの影響について
図1および
図3を用いて説明する。
図3はデータ周期の1/8以上のジッタが発生した場合のタイミング例を示す図である。以下、100Mbps(bit per second)の通信速度でマンチェスタ符号を受信する場合について説明する。
【0016】
半導体装置200内部で生成されている最も速い周波数のクロックを400MHzである場合、クロックの立ち上がりと立下りの両エッジを使用したとしても、データの1周期で8サンプリングしかできない。このため、その精度は1.25ns(nanosecond)と100Mbpsのスペックから考えると非常に粗い。
【0017】
一方で、マンチェスタ符号化された信号が入力される端子に、LVDS(Low Voltage Differential Signaling)インターフェースを使用する場合、信号は半導体装置200の外部から入力バッファ202に差動入力として入ってくる。このため、低消費電力化のために電流量を絞った場合に、入力バッファ202のジッタが大きくなる。また、低消費電力と低コスト化のため、リーク電力が少ないCMOS(Complementary Metal Oxide Semiconductor)プロセスを使用する場合、電源の電流量も抑えられている。このため、ノイズによる影響を受けやすく、半導体装置200の内部伝播でのジッタも大きい。また、クロックを供給するPLL(Phase Locked Loop)回路等のクロック源のジッタもある。そこに、更に、半導体装置200の外部の配線20、送信側の半導体装置100の回路のジッタがあり、合計するとそのジッタ値は±1.25nsを超えてしまう場合がある。
【0018】
例えば、10ns周期のマンチェスタ符号化された信号に対して、サンプリング精度が1.25nsであり、±1.25nsを超えるジッタが発生する場合、中間エッジと境界エッジが同じ位置でサンプリングされる可能性がある。ここで、境界エッジとは、符号化の際に、データ/クロック周期の境界(データ境界)において生成されるエッジであり、中間エッジとは、データ/クロック周期の中間(データ中間)において生成されるエッジである。このため、中間エッジと境界エッジとを判別できなくなり、正確な復号化ができない。例えば、
図3に示すような±1.5nsのジッタが発生して、A点でエッジをサンプリングした場合、そのエッジは中間エッジMEがジッタにより遅れたエッジ(一点破線)なのか、境界エッジBEが進んだエッジ(破線)なのかが判別できない。
【0019】
上述したように、データを送信するとき、ジッタなどのノイズによって遅延が生じる。この遅延は一定量でなくばらつきがある。データ送信の周波数と比較してサンプリング周波数が大きくない場合、そのばらつきによって間違ったエッジを検出してしまう可能性がある。
【0020】
送信受信間でクロック同期をとったり、送受信専用のPLLを使用して十分に大きいサンプリング周波数を設定したりすれば、上述したような問題は起きない。しかし、回路設計の制約などで同期をとることが難しいケースがある。また、送受信専用のPLLを使用する場合、コストデメリットは非常に大きく、また、PLLをロックさせるために発振だけをさせる期間(プリアンブル期間)も必要になる。
【0021】
次に、本開示の実施形態について以下説明する。隣接するサイクル間でのジッタによる変動値は、前のサイクルおける遅延が大きかったのか小さかったのかで異なる。例えば、ジッタが2nsとした場合、前のサイクルにおける遅延の総和(tD)が平均の場合は、次のサイクルは遅れる方向と進む方向の両方が1ns変動し得る(±1ns)。ここで、総和(tD)が平均とは最早(tDE)と最遅(tDL)の中間をいう。
【0022】
一方、前のサイクルにおける遅延の総和(tD)が平均より0.5ns小さい場合(信号伝達が早い場合)は、次のサイクルにおける進む可能性は-0.5nsで、遅れる可能性は+1.5nsとなる。なお、前のサイクルにおける遅延の総和(tD)が最も小さい場合(最早(tDE)の場合)は、次のサイクルはこれ以上早くなることは無いが、遅れは+2nsまであり得ることになる。
【0023】
他方、前のサイクルにおける遅延の総和(tD)が平均よりも大きい場合(信号伝達が遅い場合)は、上述した平均よりも小さい場合の逆のことが言える。つまり、前のサイクルの遅延が小さい場合は、次のサイクルの変動は遅れる側が大きく、進む側は小さくなる。逆に前のサイクルの遅延が大きい場合は、次のサイクルの変動は進む側が大きく、遅れる側は小さくなる。
【0024】
実施形態では、このジッタを含むマンチェスタ符号を受信するために、マンチェスタ符号に必ず発生する中間のエッジに基づいてデータ検出範囲の補正を行う。ここで、データ検出範囲の終わりを通常よりも前に早く設定する補正を「進む補正」という。データ検出範囲の先頭を通常と比較して後ろに設定する補正を「遅れ補正」という。
【0025】
前のサイクルの遅延が大きいか小さいかの判断は、次のサイクルのデータ検出範囲の補正で見当がつく。次のサイクルのデータ検出範囲の補正において進む補正をした場合は、少なくとも前のサイクルの遅延が最遅ではなく、次のサイクルは前サイクルより遅かったと判断できる。次のサイクルのデータ検出範囲の補正において遅れ補正をした場合は、少なくとも前のサイクルの遅延が最早ではなく、次のサイクルは前のサイクルよりは早かったと判断できる。
【0026】
実施形態はこの特性を利用し、前のサイクルにおけるデータ検出範囲の補正結果を記憶しておき、その補正結果に基づいて、次のサイクルのデータ検出範囲(W)を補正する。
【0027】
データ検出範囲の補正について
図4(a)~4(c)を用いて説明する。
図4(a)はデータ検出範囲を変更しない場合のタイミング図である。
図4(b)はデータ検出範囲の補正において遅れ補正をする場合のタイミング図である。
図4(c)はデータ検出範囲の補正において進む補正をする場合のタイミング図である。
【0028】
図4(a)に示すように、データ検出範囲(W)の補正がない場合、太い矢印のサンプリングポイントSPでは、中間エッジMEか境界エッジBEか区別がつかない。
【0029】
そこで、
図4(b)に示すように、前のサイクルのエッジ検出において、進む補正(AC)をした場合は、次のサイクルにおいては遅れ補正をする。すなわち、次のサイクルのエッジ検出において、データ検出範囲(W)の中心を遅らせる、または、データ検出範囲(W)の進め側の範囲を短くする。これにより、太い矢印のサンプリングポイントSPでは、境界エッジBEと判定できる。
【0030】
また、
図4(c)に示すように、前のサイクルのエッジ検出において、遅れ補正(DC)をした場合は、次のサイクルにおいては進む補正をする。すなわち、次のサイクルのエッジ検出において、データ検出範囲(W)の中心を進ませる、または、データ検出範囲(W)の遅れ側の範囲を短くする。これにより、太い矢印のサンプリングポイントSPでは、中間エッジMEと判定できる。
【0031】
次に、上述とは別の見方による実施形態について説明する。実施形態における受信側の半導体装置は、データ検出範囲を設定するため、例えば、連続した2つのデータを受信するのにかかった時間を測定し、その測定した時間に基づいてデータ検出範囲を設定する。データ間の時間間隔が短ければ、さらにその次に来るデータは、データ間隔が通常だった場合よりも長い間隔経過後に来る可能性が高い。そのため、データ検出範囲の先頭を通常と比較して後ろに設定する遅れ補正を行う。データ間の時間間隔が長ければ、さらにその次に来るデータは、データ間隔が通常だった場合よりも短い間隔経過後に来る可能性が高い。そのため、データ検出範囲の終わりを通常よりも前に早く設定する進む補正を行う。
【0032】
遅れ補正および進む補正について
図5を用いて具体例を説明する。
図5は遅れ補正および進む補正を説明するためのタイミング図である。
図5においては、前提として、8ns周期でデータを受信し、ジッタにより、±2nsほど受信がずれる場合があるとしている。
【0033】
まず、遅れ補正および進む補正をしない場合(Aの場合)について説明する。第二中間エッジME2はジッタにより±2nsずれる。ジッタを考慮して、ずれた第二中間エッジME2を基準にして4~12nsの間で第三中間エッジME3のデータ検出範囲を設定しなければならない。
【0034】
次に、データ間隔が短くなった場合(Bの場合)における遅れ補正の処理を説明する。周期8nsの通信において、第一中間エッジME1と第二中間エッジME2とのデータ間隔が6nsになる場合、主に以下の原因が考えられる。
B1:DATA2が2ns早まる。
B2:DATA1が2ns遅れる。
【0035】
B1の場合、DATA3の第三中間エッジME3は、DATA2の第二中間エッジME2を基準にして8~12nsに来る可能性がある。B2の場合、DATA3の第三中間エッジME3は、DATA2の第二中間エッジME2を基準にして6~10nsに来る可能性がある。そのため、両方の可能性に備え、6~12nsをエッジ検出範囲とすればよい。Aの場合の4~12nsと比較すると、データ検出範囲の先頭を2ns後ろに遅くする遅れ補正により、データ検出範囲を狭めることができるため、誤検出を防ぐことができる。
【0036】
次に、データ間隔が長くなった場合(Cの場合)における進む補正の処理を説明する。第一中間エッジME1と第二中間エッジME2とのデータ間隔が10nsになる場合、主に以下の原因が考えられる。
C1:DATA1が2ns早まる。
C2:DATA2が2ns遅れる。
【0037】
C1の場合、DATA3は、DATA2の第二中間エッジME2を基準にして6~10nsに来る可能性がある。C2の場合、DATA3は、DATA2の第二中間エッジME2を基準にして4~8nsに来る可能性がある。そのため、両方の可能性に備え4~10nsをエッジ検出範囲とすればよい。Aの場合の4~12nsと比較すると、データ検出範囲の終わりを2ns前に早くする進む補正により、データ検出範囲を狭めることができるため、誤検出を防ぐことができる。
【0038】
実施形態は、受信側において、連続した2つのデータを受信するのにかかった時間を測定する。データ間の時間間隔に基づいてデータ検出範囲を設定する。データ間の時間間隔が短ければ、さらにその次にくるデータは、データ間隔が通常だった場合よりも長い間隔経過後に来る可能性が高い。そのため、データ検出範囲の先頭を通常と比較して後ろに設定する。データ間の時間間隔が長ければ、さらにその次にくるデータは、データ間隔が通常だった場合よりも短い間隔経過後に来る可能性が高いので、データ検出範囲の終わりを通常よりも前に早く設定する。
【0039】
実施形態によれば、サンプリング精度(タイマー精度)を含めたジッタが±1/8周期以上になる場合でも、正確にクロックおよびデータを復元することができる。これにより、ジッタが±1/8周期以上になる場合でも、送受信専用のPLLを使わず、低電力および低コストの回路により、正確に受信が可能となる。本実施形態はマンチェスタ符号の受信を例に挙げているが、例えば、8b/10b符号、RLL(Run Length Limited)符号、WFMなどのクロックとデータ信号を重畳する通信、例えば調歩同期信号のような非同期通信にも適用可能である。
【0040】
以下、実施形態の代表的な実施例について、幾つか例示する。以下の実施例の説明において、上述の実施形態にて説明されているものと同様の構成および機能を有する部分に対しては、上述の実施形態と同様の符号が用いられ得るものとする。そして、かかる部分の説明については、技術的に矛盾しない範囲内において、上述の実施形態における説明が適宜援用され得るものとする。また、上述の実施形態の一部、および、複数の実施例の全部または一部が、技術的に矛盾しない範囲内において、適宜、複合的に適用され得る。
【0041】
(第一実施例)
図6は第一実施例における通信システムの構成を示すブロック図である。
【0042】
第一実施例における通信システム1は、半導体装置100と半導体装置200との間を、マンチェスタ符号で通信している。半導体装置100はマスタデバイスともいい、例えば、MCU(Micro Controller Unit)で構成される。半導体装置200はスレーブデバイスともいい、例えば、センサまたは制御機器に接続される。通信は、半導体装置100,200のそれぞれの通信モジュール110,210で制御される。通信モジュール110,210は、それぞれ送信回路120,220および受信回路140,240を備える。送信回路120,220はマンチェスタ符号のエンコーダ130,230を備え、受信回路140,240はマンチェスタ符号のデコーダ150,250を備える。マンチェスタ符号のエンコーダ130,230はマンチェスタ符号のデコーダ150,250とそれぞれ通信線21,22に接続されている。マンチェスタ符号のデコーダ150,250は、マンチェスタ符号からクロックとデータを再生成するため、CDR(Clock Data Recovery)と呼ばれている。
【0043】
送信回路120と受信回路240との間、および送信回路220と受信回路140との間は、調歩同期式のシリアル通信を行う。調歩同期式のシリアル通信では、一文字分の文字情報を、開始を意味する「スタートビット」と終わりを意味する「ストップビット」という信号で挟んで送る。また、データが正常に送られたかを検査するための「パリティビット」をストップビットの前に付加している。なお、上記では、データを流す信号線を方向毎に専用の信号線を確保する全二重通信の例を説明したが、1本の信号線で通信の方向を切り替えて使う半二重通信であってもよい。
【0044】
なお、半導体装置100からは、センサまたは制御機器への設定信号、または制御信号が半導体装置200に対して送信される。半導体装置200からは、センサまたは制御機器からのデータ、ステータス情報またはエラー情報が送信される。
【0045】
また、半導体装置100は、通信モジュール110の他に、CPU160、タイマー170およびその他の制御回路(CNTR)180を備える。通信モジュール110はこれらの回路からのデータおよび制御を受けて、通信を行う。半導体装置200は、図示しないセンサまたは制御機器を制御する制御回路(CNTR)260を備え、通信モジュール210は制御回路260からのデータおよび制御を受けて通信を行う。半導体装置200はMCUで構成されてもよい。
【0046】
次に、マンチェスタ符号のデコーダ150,250について
図7を用いて説明する。
図7は
図6に示されるデコーダの構成を示すブロック図である。以下、デコーダ150について説明するが、デコーダ250はデコーダ150と同様な構成であり、同様に動作する。
【0047】
デコーダ150は、同期化回路(SYNC)151、ノイズフィルタ(FLTR)152およびエッジ検出回路(EDC)153を有するデータ受信回路と、クロック生成回路(CG)157と、を備える。デコーダ150は、さらに、エッジ判定回路(EJC)154、エッジ履歴回路(EHC)155およびカウンタ(CNTR)156を有するエッジ認識回路を備える。
【0048】
マンチェスタ符号化されたシリアル入力信号(SI)は、同期化回路151、ノイズフィルタ152を通過し、エッジ検出回路153に入力される。ここで、同期化回路151は、例えば、メタステーブルを発生させないための多段のフリップフロップ(F/F)回路で構成されている。ノイズフィルタ152は、例えば、三値多数決回路で構成されている。
【0049】
クロック信号(CLK)は半導体装置100の内部で生成されたクロックで、PLL等で生成されたクロックを分周したものである。但し、分周は必要なものではなく、分周しなくてもよい。また、クロック信号(CLK)は立ち上がりエッジまたは立下りエッジのみを使用する場合もあるし、立ち上がりエッジと立下りエッジを両方使用する場合もある。また位相が180度反転した2相のクロック信号(CLK)を用いる場合もある。その場合には、クロック信号(CLK)は2本となる。
【0050】
エッジ判定回路154はエッジ検出回路153により検出したエッジに基づいて受信データ(R_DATA)を生成する。エッジ履歴回路155はエッジ判定回路154の出力である受信エッジ情報(REI)に基づいて、前のサイクルにおける位相ずれ(遅延)情報(LDI)を記憶する記憶回路である。カウンタ156は、受信エッジ情報(REI)に基づいて初期化され、クロック信号(CLK)を計数する。
【0051】
クロック生成回路157は受信エッジ情報(REI)に基づいて受信クロック(R_CLK)を生成する。
【0052】
中間エッジを検出する方法について
図8を用いて説明する。
図8は
図7に示されるデコーダの動作波形を示すタイミング図である。マンチェスタ符号の入力周期が10ns(100Mbps)の場合、ジッタは±1.875ns(サンプリング周期×3/2)未満で動作可能である。以下、サンプリング周期が1.25ns、ジッタが±1.5nsのシステムとして説明する。
【0053】
送信側基準信号(T_REF)は、
図1における起点としての送信側クロック(CLK)に相当する。受信側入力信号(R_IN)は、
図3におけるマンチェスタ符号入力および
図1における入力側初段論理としてのフリップフロップ201の入力信号に相当する。受信側入力信号(R_IN)は、
図7における同期化回路151のシリアル入力信号(SI)か、またはエッジ検出回路153の入力信号である。
【0054】
入力信号(S_IN)は、受信側入力信号(R_IN)をサンプリングした後の信号であり、
図3におけるマンチェスタ符号入力に相当する。入力信号(S_IN)は、
図7における同期化回路151の出力信号、あるいはノイズフィルタ152の出力信号、あるいはエッジ検出回路153の内部のF/F回路である。入力信号(S_IN)はマンチェスタ符号なので、中間エッジは必ずあるが、境界エッジは無いこともある。
【0055】
ここで、
図8における入力信号(S_IN)の(a)~(c)は下記の場合の信号波形である。
(a)遅延が小さい(平均値より-1.875ns~-0.625ns)
(b)遅延が中ぐらい(平均値より±0.625ns以内)
(c)遅延が大きい(平均値より+0.625ns~+1.875ns)
【0056】
また、(a)~(c)の場合はジッタによるものなのでエッジごとに変わる可能性がある。例えば、第一中間エッジME1が(a)の場合だったとして、第二境界エッジBE2が(a)の場合とは限らず、(a)~(c)の場合のいずれにもなり得る。また、第一中間エッジME1が(b)または(c)の場合だったとして、同様に、第二境界エッジBE2は(a)~(c)の場合の何れにもなり得る。
【0057】
図8における実線の矢印は中間エッジのサンプリングを示し、破線の矢印は境界エッジのサンプリングを示す。マンチェスタ符号からクロックとデータを抽出する場合は、この中間エッジと境界エッジを区別できなければならない。
【0058】
カウンタ(CNTR)156は、エッジ判定回路154がエッジを検出したら「0」にクリアされ、サンプリング周期ごとに1ずつ加算される。ただし、
図8においては、カウンタ値は、説明が分かりやすいよう、ずっとインクリメントされた場合(第二中間エッジME2が検出されなかった場合)の値を記載している。
【0059】
検出対象の中間エッジの例としての第二中間エッジME2の検出方法について説明する。
【0060】
まず、エッジ履歴回路155に格納される遅延情報(LDI)について説明する。エッジ履歴回路155に格納される遅延情報(LDI)は「0」、「1」、「2」の3値を取る。
【0061】
遅延情報(LDI)が「0」の場合は、遅延が不明である場合であり、入力信号(R_IN)は
図8の(a)または(b)または(c)の場合になる。第二中間エッジME2のデータ検出範囲はカウンタ156のカウンタ値が6~10の場合である。遅延情報(LDI)が「0」の場合をエッジ履歴0といい、「EH=0」と表す。
【0062】
遅延情報(LDI)が「1」の場合は、遅延が小または中の場合であり、入力信号(R_IN)は
図8の(a)または(b)の場合になる。第二中間エッジME2のデータ検出範囲はカウンタ値が7~10の場合である。遅延情報(LDI)が「1」の場合をエッジ履歴1といい、「EH=1」と表す。
【0063】
遅延情報(LDI)が「2」の場合は、遅延が中または大の場合であり、入力信号(R_IN)は
図8の(b)または(c)の場合になる。第二中間エッジME2のデータ検出範囲はカウンタ値が6~9の場合である。遅延情報(LDI)が「2」の場合をエッジ履歴2といい、「EH=2」と表す。
【0064】
前のサイクルにおける中間エッジである第一中間エッジME1のエッジ履歴ごとの次のサイクルの中間エッジである第二中間エッジME2の検出動作およびエッジ履歴の更新について説明する。
【0065】
●エッジ履歴1(EH=1)の動作:
第一中間エッジME1が、(a)または(b)の場合(EH=1)、第二中間エッジME2はカウンタ156のカウンタ値が7~10のいずれかで発生する。カウンタ値が3~6また11~14でエッジが発生するかもしれないが、それらは境界エッジ(第二境界エッジBE2または第三境界エッジBE3)であるため無視する。エッジ判定回路154は、カウンタ値が7~10の間でエッジを検出する。
【0066】
エッジ判定回路154は、このエッジの変化がハイレベル(H)からローレベル(L)の場合は「1」、ローレベル(L)からハイレベル(H)の場合は「0」、として受信データ(R_DATA)を出力し、受信クロック(R_CLK)を出力する。以下、ハイレベル(H)からローレベル(L)の変化を「H→L」、ローレベル(L)からハイレベル(H)の変化を「L→H」と記載する。
【0067】
エッジ検出時のカウンタ値が7または8の場合には、第二中間エッジME2は(a)または(b)の場合(EH=1)であり、エッジ判定回路154は、「1」をエッジ履歴回路155に格納してエッジ履歴を更新する。エッジ検出時のカウンタ値が9または10の場合には、第二中間エッジME2は(b)または(c)の場合(EH=2)であり、エッジ判定回路154は、「2」をエッジ履歴回路155に格納してエッジ履歴を更新する。
【0068】
●エッジ履歴2(EH=2)の動作:
第一中間エッジME1が、(b)または(c)の場合(EH=2)、第二中間エッジME2はカウンタ156のカウンタ値が6~9のいずれかで発生する。カウンタ値が2~5または10~13でエッジが発生するかもしれないが、それらは境界エッジ(第二境界エッジBE2または第三境界エッジBE3)であるため無視する。カウンタ値が6~9の間でエッジを検出する。
【0069】
エッジ判定回路154は、このエッジの変化が「H→L」の場合は「1」、「L→H」の場合は「0」、として受信データ(R_DATA)を出力し、受信クロック(R_CLK)を出力する。
【0070】
エッジ検出時のカウンタ値が6または7の場合には、第二中間エッジME2は(a)または(b)の場合であり(EH=1)、エッジ判定回路154は、「1」をエッジ履歴回路155に格納して更新する。エッジ検出時のカウンタ値が8または9の場合には、第二中間エッジME2は(b)または(c)の場合(EH=2)であり、エッジ判定回路154は、「2」をエッジ履歴回路155に格納して更新する。
【0071】
●エッジ履歴0(EH=0)の動作:
最初のサイクルにおけるエッジの場合、スタートビットを「1」とすると、必ず中間エッジは「H→L」の変化となる。そのため、最初のサイクルは「H→L」への遷移時にカウンタ値を「0」にクリアし、「1」として受信データ(R_DATA)を出力し、受信クロック(R_CLK)を出力する。最初のサイクルは、中間エッジが(a)~(c)の場合のどの状態かは判別することはできないため、「EH=0」とする。
【0072】
最初のサイクルを含む「EH=0」の場合、第二中間エッジME2のエッジが取り得るカウンタ値は6~10になる。カウンタ値が6~10の間でエッジが1回しか検出されなかった場合は、エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様にエッジ履歴を計算する。
【0073】
カウンタ値が6または7の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する。
【0074】
カウンタ値が8の場合、エッジ判定回路154は、第二中間エッジME2は第一中間エッジME1の遅延と同じあると判断し、エッジ履歴回路155に「0」を記憶してエッジ履歴を更新する。
【0075】
カウンタ値が9または10の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)の場合であると判断し、エッジ履歴回路155に「2」を記憶してエッジ履歴を更新する。
【0076】
「EH=0」の場合は、カウンタ値が6と10で2回エッジを検出する場合が稀だがあり得る。「EH=0」の場合はどちらのエッジが中間エッジか境界エッジかが判断できないため、エッジ判定回路154は復号化エラーを生成する。復号化エラーが生成された場合は、受信回路140は、それ以降の受信を次のフレーム受信まで停止し、そのフレームを全て破棄するか、または、エラー発生までのビット以降を破棄する。フレーム全体または一部のビットの受信が破棄された場合には、受信回路140に設けられる受信バッファ(BFFR)141は前値を保持する。また、「EH=0」以外の場合でも、ノイズ等の誤動作により2回以上エッジを検出する可能性がある。その場合も、上記と同様にエッジ判定回路154は復号化エラーを生成する。
【0077】
デコーダ150のエッジ検出動作について
図9を用いて説明する。
図9は
図7に示されるデコーダが立下りのエッジを検出した場合のハードウェア処理を示すフローチャートである。
【0078】
(ステップS0)
エッジ検出回路153が「H→L」のエッジを検出する。
【0079】
(ステップS1)
エッジ判定回路154は、入力信号(R_DATA)として「1」を出力し、受信エッジ情報(REI)をエッジ履歴回路155、カウンタ156およびクロック生成回路157に出力する。クロック生成回路156は受信エッジ情報(REI)に基づいて受信クロック(R_CLK)を生成して出力する。カウンタ156は受信エッジ情報(REI)に基づいてカウンタ値を「0」にクリアする。また、エッジ履歴回路155は、受信エッジ情報(REI)に基づいてエッジ履歴0を記憶する。
【0080】
(ステップS2)
エッジ判定回路154はエッジ履歴に基づいて検出範囲を設定する。ここで、検出範囲の下限はWL、検出範囲の上限はWHである。
【0081】
(ステップS3)
カウンタ156はクロック信号(CLK)によりインクメントする。
【0082】
(ステップS4)
エッジ判定回路154はカウンタ156のカウント値が検出範囲の下限(WL)以上かどうかを判定する。
【0083】
(ステップS5)
エッジ判定回路154はカウンタ156のカウント値が検出範囲の上限(WH)以上かどうかを判定する。
【0084】
(ステップS6)
エッジ判定回路154はエッジ検出回路153の出力に基づいてエッジを検出したかどうかを判定する。
【0085】
(ステップS7)
エッジ判定回路154は検出したエッジが初回かどうかを判定する。
【0086】
(ステップS8)
エッジ判定回路154はエッジを検出したときのカウンタ156のカウント値を初回のエッジ位置とする。
【0087】
(ステップS9)
エッジ判定回路154は、入力信号(R_DATA)を出力し、受信エッジ情報(REI)をエッジ履歴回路155、カウンタ156およびクロック生成回路157に出力する。クロック生成回路156は受信エッジ情報(REI)に基づいて受信クロック(R_CLK)を生成して出力する。また、エッジ履歴回路155は、受信エッジ情報(REI)に基づいてエッジ履歴を更新する。
【0088】
(ステップS10)
ステップS5において、カウント値が検出範囲の上限を超えた場合、カウンタ156はカウント値を「0」にクリアする。
【0089】
(ステップS11)
ステップS7において、検出したエッジが2回目である場合、エッジ判定回路154は複号化エラーを出力する。
【0090】
第一実施例によれば、前回のエッジ履歴により、中間エッジと認識するカウンタ値を変更することで、サンプリング周期がマンチェスタ符号データの周期の1/8で、且つジッタがマンチェスタ符号データの周期の±(1/8×3/2)未満まで、復号化が可能となる。
【0091】
(第二実施例)
第二実施例における第二中間エッジ(ME2)を検出する方法について
図10を用いて説明する。
図10は第二実施例におけるデコーダの動作波形を示すタイミング図である。
【0092】
第二実施例におけるデコーダは第一実施例におけるデコーダ150,250と同様な構成ある。ただし、エッジ判定回路154およびエッジ履歴回路155の動作が異なる。マンチェスタ符号の入力周期が10ns(100Mbps)の場合、ジッタは±2.5ns(サンプリング周期×2)未満で動作可能である。説明ではジッタが±1.5nsのシステムとして説明する。
【0093】
第二実施例では、入力信号(S_IN)の(a)~(d)は下記の場合の信号波形である。
(a)遅延が小さい(平均値より-2.5ns~-1.25ns)場合
(b)遅延がやや小さい(平均値より-1.25ns~0ns)場合
(c)遅延がやや大きい(平均値より0ns~+1.25ns)場合
(d)遅延が大きい(平均値より+1.25ns~+2.5ns)場合
【0094】
また、(a)~(d)の場合はジッタによるものなのでエッジごとに変わる可能性がある。例えば第一中間エッジME1が(a)の場合だったとして、第二中間エッジME2が(a)の場合とは限らず、(a)(b)(c)(d)の場合のいずれにもなり得る。第二中間エッジME2が(b)(c)(d)の場合も同じである。
【0095】
図10における実線の矢印は中間エッジのサンプリングを示し、破線の矢印は境界エッジのサンプリングを示す。マンチェスタ符号からクロックとデータを抽出する場合は、この中間エッジと境界エッジを区別できなければならない。
【0096】
カウンタ156は、エッジ判定回路154がエッジを検出したら「0」にクリアされ、サンプリング周期ごとに1ずつ加算される。ただし、
図10においては、説明が分かりやすいよう、ずっとインクリメントされた場合(第二中間エッジME2)が検出されなかった場合)の値を記載している。
【0097】
検出対象の第二中間エッジME2の検出方法について説明する。エッジ履歴回路155に格納される遅延情報(LDI)は「0」~「9」の10値を取る。
【0098】
遅延情報(LDI)が「0」の場合は、遅延が不明である場合であり、入力信号(R_IN)は
図10の(a)または(b)または(c)または(d)になる。第二中間エッジME2のデータ検出範囲はカウンタ値5~11である。遅延情報(LDI)が「0」の場合をエッジ履歴0といい、「EH=0」と表す。
【0099】
遅延情報(LDI)が「1」の場合は、遅延が小の場合であり、入力信号(R_IN)は
図10の(a)になる。第二中間エッジME2のデータ検出範囲はカウンタ値8~11である。遅延情報(LDI)が「1」の場合をエッジ履歴1といい、「EH=1」と表す。
【0100】
遅延情報(LDI)が「2」の場合は、遅延がやや小の場合であり、入力信号(R_IN)は
図10の(b)になる。第二中間エッジME2のデータ検出範囲はカウンタ値7~10である。遅延情報(LDI)が「2」の場合をエッジ履歴2といい、「EH=2」と表す。
【0101】
遅延情報(LDI)が「3」の場合は、遅延がやや大の場合であり、入力信号(R_IN)は
図10の(c)になる。第二中間エッジME2のデータ検出範囲はカウンタ値6~9である。遅延情報(LDI)が「3」の場合をエッジ履歴3といい、「EH=3」と表す。
【0102】
遅延情報(LDI)が「4」の場合は、遅延が大の場合であり、入力信号(R_IN)は
図10の(d)になる。第二中間エッジME2のデータ検出範囲はカウンタ値5~8である。遅延情報(LDI)が「4」の場合をエッジ履歴4といい、「EH=4」と表す。
【0103】
遅延情報(LDI)が「5」の場合は、遅延が大ではない場合であり、入力信号(R_IN)は
図10の(a)または(b)または(c)になる。第二中間エッジME2のデータ検出範囲はカウンタ値6~11である。遅延情報(LDI)が「5」の場合をエッジ履歴5といい、「EH=5」と表す。
【0104】
遅延情報(LDI)が「6」の場合は、遅延が小ではない場合であり、入力信号(R_IN)は
図10の(b)または(c)または(d)になる。第二中間エッジME2のデータ検出範囲はカウンタ値5~10である。遅延情報(LDI)が「6」の場合をエッジ履歴6といい、「EH=6」と表す。
【0105】
遅延情報(LDI)が「7」の場合は、遅延が小さめの場合であり、入力信号(R_IN)は
図10の(a)または(b)になる。第二中間エッジME2のデータ検出範囲はカウンタ値7~11である。遅延情報(LDI)が「7」の場合をエッジ履歴7といい、「EH=7」と表す。
【0106】
遅延情報(LDI)が「8」の場合は、遅延が大きめの場合であり、入力信号(R_IN)は
図10の(c)または(d)になる。第二中間エッジME2のデータ検出範囲はカウンタ値5~9である。遅延情報(LDI)が「8」の場合をエッジ履歴8といい、「EH=6」と表す。
【0107】
遅延情報(LDI)が「9」の場合は、遅延が小ではない場合であり、入力信号(R_IN)は
図10の(b)または(c)になる。第二中間エッジME2のデータ検出範囲はカウンタ値6~10である。遅延情報(LDI)が「9」の場合をエッジ履歴6といい、「EH=9」と表す。
【0108】
前のサイクルにおける中間エッジである第一中間エッジME1のエッジ履歴ごとの次のサイクルの中間エッジである第二中間エッジME2の検出動作およびエッジ履歴の更新について説明する。
【0109】
●エッジ履歴1(EH=1)の動作:
第一中間エッジME1が、(a)の場合(EH=1)、第二中間エッジME2はカウンタ156のカウンタ値が8~11のいずれかで発生する。カウンタ値が4~7または12~15でエッジが発生するかもしれないが、それらは境界エッジ(第二境界エッジBE2または第三境界エッジBE3)であるため無視する。エッジ判定回路154は、カウンタ値が8~11の間でエッジを検出する。
【0110】
エッジ判定回路154は、このエッジの変化が「H→L」の場合は「1」、「L→H」の場合は「0」、として受信データ(R_DATA)を出力し、受信クロック(R_CLK)を出力する。
【0111】
エッジ判定回路154は、このエッジ検出時、カウンタ値から第二中間エッジME2の遅延状態を判断し、その遅延情報をエッジ履歴回路155に記憶し、更に次のサイクルの第三中間エッジME3の判定に使用する。
【0112】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0113】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(b)の場合であると判断し、エッジ履歴回路155に「2」を記憶してエッジ履歴を更新する(EH=2)。
【0114】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(c)の場合であると判断し、エッジ履歴回路155に「3」を記憶してエッジ履歴を更新する(EH=3)。
【0115】
カウンタ値=11の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0116】
●エッジ履歴2(EH=2)の動作:
第一中間エッジME1が(b)の場合(EH=2)、第二中間エッジME2はカウンタ156のカウンタ値が7~10のいずれかで発生する。エッジ判定回路154は、カウンタ値が7~10の間で検出したエッジを第二中間エッジME2と判断し、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0117】
エッジ判定回路154は、エッジ検出時、カウンタ値から第二中間エッジME2の遅延状態を判断し、その遅延情報をエッジ履歴回路155に記憶し、更に次のサイクルの第三中間エッジME3の判定に使用する。
【0118】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0119】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(b)の場合であると判断し、エッジ履歴回路155に「2」を記憶してエッジ履歴を更新する(EH=2)。
【0120】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(c)の場合であると判断し、エッジ履歴回路155に「3」を記憶してエッジ履歴を更新する(EH=3)。
【0121】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0122】
●エッジ履歴3(EH=3)の動作:
第一中間エッジME1が(c)の場合(エッジ履歴3(EH=3))には、第二中間エッジME2はカウンタ156のカウンタ値が6~9のいずれかで発生する。エッジ判定回路154は、カウンタ値が6~9の間で検出したエッジを第二中間エッジME2と判断し、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0123】
エッジ判定回路154は、エッジ検出時、カウンタ値から第二中間エッジME2の遅延状態を判断し、その遅延情報をエッジ履歴回路155に記憶し、更に次のサイクルの第三中間エッジME3の判定に使用する。
【0124】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0125】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(b)の場合であると判断し、エッジ履歴回路155に「2」を記憶してエッジ履歴を更新する(EH=2)。
【0126】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(c)の場合であると判断し、エッジ履歴回路155に「3」を記憶してエッジ履歴を更新する(EH=3)。
【0127】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0128】
●エッジ履歴4(EH=4)の動作:
第一中間エッジME1が(d)の場合(EH=4)には、第二中間エッジME2はカウンタ156のカウンタ値が5~8のいずれかで発生する。エッジ判定回路154は、カウンタ値が5~8でのエッジを第二中間エッジME2と判断し、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0129】
エッジ判定回路154は、エッジ検出時、カウンタ値から第二中間エッジME2の遅延状態を判断し、その遅延情報をエッジ履歴回路155に記憶し、更に次のサイクルの第三中間エッジME3の判定に使用する。
【0130】
カウンタ値=5の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0131】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(b)の場合であると判断し、エッジ履歴回路155に「2」を記憶してエッジ履歴を更新する(EH=2)。
【0132】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(c)の場合であると判断し、エッジ履歴回路155に「3」を記憶してエッジ履歴を更新する(EH=3)。
【0133】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0134】
●エッジ履歴0(EH=0)の動作:
最初のサイクルにおけるエッジの場合、第一実施例と同様に、「EH=0」になる。また、前のサイクルの中間エッジ(第一中間エッジME1)が(a)~(d)のどの状態か不明の場合も「EH=0」になる。
【0135】
「EH=0」の場合、第二中間エッジME2のエッジが取り得るカウンタ値は5~11になる。カウンタ値が5~11の間でエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。そして、エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0136】
カウンタ値=5の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0137】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0138】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)または(c)の場合であると判断し、エッジ履歴回路155に「5」を記憶してエッジ履歴を更新する(EH=5)。
【0139】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(a)~(d)のいずれか判断不能であり、エッジ履歴回路155に「0」を記憶してエッジ履歴を更新する(EH=0)。
【0140】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)または(d)の場合であると判断し、エッジ履歴回路155に「6」を記憶してエッジ履歴を更新する(EH=6)。
【0141】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0142】
カウンタ値=11の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0143】
●エッジ履歴5(EH=5)の動作:
第一中間エッジME1が(a)または(b)または(c)と判断された場合(EH=5)、第二中間エッジME2が取り得るカウンタ156のカウンタ値は6~11となる。そこでエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0144】
エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0145】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0146】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0147】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)または(c)の場合であると判断し、エッジ履歴回路155に「5」を記憶してエッジ履歴を更新する(EH=5)。
【0148】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)または(d)の場合であると判断し、エッジ履歴回路155に「6」を記憶してエッジ履歴を更新する(EH=6)。
【0149】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0150】
カウンタ値=11の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0151】
●エッジ履歴6(EH=6)の動作:
第一中間エッジME1が(b)または(c)または(d)と判断された場合、第二中間エッジME2が取り得るカウンタ156のカウンタ値は5~10となる。そこでエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0152】
エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0153】
カウンタ値=5の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0154】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0155】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)または(c)の場合であると判断し、エッジ履歴回路155に「5」を記憶してエッジ履歴を更新する(EH=5)。
【0156】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)または(d)の場合であると判断し、エッジ履歴回路155に「6」を記憶してエッジ履歴を更新する(EH=6)。
【0157】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0158】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0159】
●エッジ履歴7(EH=7)の動作:
第一中間エッジME1が(a)または(b)と判断された場合(EH=7)、第二中間エッジME2が取り得るカウンタ156のカウンタ値は7~11となる。そこでエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0160】
エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0161】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0162】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0163】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)の場合であると判断し、エッジ履歴回路155に「9」を記憶してエッジ履歴を更新する(EH=9)。
【0164】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0165】
カウンタ値=11の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0166】
●エッジ履歴8(EH=8)の動作:
第一中間エッジME1が(c)または(d)と判断された場合(EH=8)、第二中間エッジME2が取り得るカウンタ156のカウンタ値は5~9となる。そこでエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0167】
エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0168】
カウンタ値=5の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0169】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0170】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)の場合であると判断し、エッジ履歴回路155に「9」を記憶してエッジ履歴を更新する(EH=9)。
【0171】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0172】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0173】
●エッジ履歴9(EH=9)の動作:
第一中間エッジME1が(b)または(c)と判断された場合(EH=9)、第二中間エッジME2が取り得るカウンタ156のカウンタ値は6~10となる。そこでエッジが1回しか検出されなかった場合は、エッジ判定回路154は、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力する。
【0174】
エッジ判定回路154は、エッジ検出時のカウンタ値により、それぞれ以下の様に次のエッジ履歴を計算する。
【0175】
カウンタ値=6の場合、エッジ判定回路154は、第二中間エッジME2は(a)の場合であると判断し、エッジ履歴回路155に「1」を記憶してエッジ履歴を更新する(EH=1)。
【0176】
カウンタ値=7の場合、エッジ判定回路154は、第二中間エッジME2は(a)または(b)の場合であると判断し、エッジ履歴回路155に「7」を記憶してエッジ履歴を更新する(EH=7)。
【0177】
カウンタ値=8の場合、エッジ判定回路154は、第二中間エッジME2は(b)または(c)の場合であると判断し、エッジ履歴回路155に「9」を記憶してエッジ履歴を更新する(EH=9)。
【0178】
カウンタ値=9の場合、エッジ判定回路154は、第二中間エッジME2は(c)または(d)の場合であると判断し、エッジ履歴回路155に「8」を記憶してエッジ履歴を更新する(EH=8)。
【0179】
カウンタ値=10の場合、エッジ判定回路154は、第二中間エッジME2は(d)の場合であると判断し、エッジ履歴回路155に「4」を記憶してエッジ履歴を更新する(EH=4)。
【0180】
EH=0またはEH=5~9の場合は、2回エッジを検出する場合があり得る。その場合、前のサイクルにおける中間エッジのエッジ履歴と次のサイクルのエッジを検出した二つカウンタ値との組合せで、以下の場合はどちらが中間エッジか判別できる。その場合は判定された中間エッジにて、その時のデータの変化によって受信データ(R_DATA)と受信クロック(R_CLK)を出力し、また、次のエッジ履歴を計算する。
【0181】
EH=0、二つのカウンタ値の一方が8の場合、中カウンタ値が8のエッジを中間エッジと判断する。
【0182】
EH=5、二つのカウンタ値の一方が8または9の場合、エッジ判定回路154は、カウンタ値が8または9のエッジを中間エッジと判断する。
【0183】
EH=6、二つのカウンタ値の一方が7または8の場合、エッジ判定回路154は、カウンタ値が7または8のエッジを中間エッジと判断する。
【0184】
EH=7、二つのカウンタ値の一方が8または9または10の場合、エッジ判定回路154は、カウンタ値が8または9または10のエッジを中間エッジと判断する。
【0185】
EH=8、二つのカウンタ値の一方が6または7または8の場合、エッジ判定回路154は、カウンタ値が6または7または8のエッジを中間エッジと判断する。
【0186】
EH=9、二つのカウンタ値の一方が7または8または9の場合、エッジ判定回路154は、カウンタ値が7または8または9のエッジを中間エッジと判断する。
【0187】
上記判定でも、EH=0またはEH=5~9の場合に、どちらが中間エッジか判別できない場合がある。その場合は、エッジ判定回路154は、復号化エラーを生成する。復号化エラーが生成された場合は、受信回路140はそれ以降の受信は次のフレーム受信まで停止し、そのフレームを全て破棄するか、または、エラー発生までのビット以降を破棄する。フレーム全体または一部のビットの受信が破棄された場合には受信回路140の受信バッファ141は前値を保持し、更新されない。
【0188】
また、エッジ履歴に関わらずノイズ等の影響で2回以上エッジを検出する場合も考えられる。その場合もそのエッジが中間エッジか境界エッジか或いはノイズによる偽エッジかが判断できないため、エッジ判定回路154は、復号化エラーを生成する。復号化エラーが生成された場合は、受信回路140はそれ以降の受信は次のフレーム受信まで停止し、そのフレームを全て破棄するか、または、エラー発生までのビット以降を破棄する。フレーム全体または一部のビットの受信が破棄された場合には受信回路140の受信バッファ141は前値を保持し、更新されない。
【0189】
第二実施例におけるデコーダ150のエッジ検出動作について
図11を用いて説明する。
図11は第二実施例におけるデコーダが立下りのエッジを検出した場合のハードウェア処理を示すフローチャートである。
【0190】
第二実施例におけるステップS0~S6は第一実施例と同様の動作を行う。
【0191】
(ステップS12)
エッジ判定回路154は検出したエッジが何回目かを判定する。
【0192】
(ステップS13)
エッジ判定回路154は、検出したエッジが初回の場合、カウンタ156のカウント値を初回のエッジ位置(T1)とする。
【0193】
(ステップS14)
エッジ判定回路154は、検出したエッジが2回目の場合、カウンタ156のカウント値を2回目のエッジ位置(T2)とする。
【0194】
(ステップS15)
ステップS5において、カウント値が検出範囲の上限を超えた場合、エッジ判定回路154は、エッジ履歴、T1およびT2に基づいて、以下を実行する。エッジ判定回路154は、復号化エラーのチェックを行う。また、エッジ判定回路154は、入力信号(R_DATA)を出力し、受信エッジ情報(REI)をエッジ履歴回路155、カウンタ156およびクロック生成回路157に出力する。クロック生成回路156は受信エッジ情報(REI)に基づいて受信クロック(R_CLK)を生成して出力する。また、エッジ履歴回路155は、受信エッジ情報(REI)に基づいてエッジ履歴を更新する。
【0195】
(ステップS16、ステップS17)
ステップS16では、エッジ判定回路154は、復号化エラーがあるかどうかを判定する。ステップS17では、ステップS16において、復号化エラーを検出しなかった場合、カウンタ156はカウント値を「0」にクリアする。
【0196】
(ステップS18)
ステップS12において、検出したエッジが3回目である場合、およびステップS16においてエラーと判定した場合、エッジ判定回路154は複号化エラーを出力する。
【0197】
第二実施例によれば、前回のエッジ履歴により、中間エッジと認識するカウンタ値を変更することで、サンプリング周期がマンチェスタ符号データの周期の1/8で、且つジッタがマンチェスタ符号データの周期の±(1/8×2)まで、復号化が可能となる。第二実施例は第一実施例と比較して、ジッタ範囲が4/3倍に広がる。
【0198】
(第三実施例)
図12は第三実施例におけるデコーダの構成を示すブロック図である。
図13は三入力多数決回路を示す回路図である。
図14は
図12に示されるシフト用のフリップフロップ、データサンプリング用のフリップフロップ、ノイズフィルタおよびエッジ検出回路の構成を示すブロック図である。
図15は
図12に示されるエッジ認識回路の構成の一部を示すブロック図である。
図16は
図12に示されるエッジ認識回路の構成の一部を示すブロック図である。
図17は
図12に示されるクロック生成回路のブロック図である。
【0199】
第三実施例におけるデコーダ150は、第一実施例と同様に、同期化回路(SYNC)151、ノイズフィルタ(FLTR)152、エッジ検出回路(EDC)153およびクロック生成回路(CG)157を備える。第三実施例におけるデコーダ150は、第一実施例における、エッジ判定回路(EJC)154、エッジ履歴回路(EHC)155およびカウンタ(CNTR)156に代えてエッジ認識回路158を備える。
【0200】
図12に示されるように、同期化回路(SYNC)151はシフト用のフリップフロップ(S_F/F)151aおよびデータサンプリング用のフリップフロップ(D_F/F)151bで構成される。ここで、同期化回路(SYNC)151には、2相の400MHzのクロック(clkup_p、clkup_n)、マンチェスタ符号信号(mc_si)、および100MHzのクロック(clk1)が入力される。クロック(clk1)はマンチェスタ符号信号(mc_si)から抽出されるクロックである。2相の400MHzのクロック(clkup_p、clkup_n)によりサンプリングすることは、800MHzのクロックによるサンプリングになる。
【0201】
図14に示されるように、シフト用のフリップフロップ151aはシリアル接続されたフリップフロップで構成され、マンチェスタ符号信号(mc_si)を2相クロック(clkup_p、clkup_n)により順次取り込む。ここで、フリップフロップ151aは、例えば18個のフリップフロップで構成される。フリップフロップ151aに取り込んだデータをsin[*]という。データサンプリング用のフリップフロップ(D_F/F)151bは、シフト用のフリップフロップ151aと同数のフリップフロップで構成される。データサンプリング用のフリップフロップ151bは、シフト用のフリップフロップ151aに取り込まれたデータを並列にクロック(clk1)の立ち上がりのタイミングでサンプリングする。データサンプリング用のフリップフロップ151bに取り込んだデータをdata1[*]という。
【0202】
ノイズフィルタ152は、
図13に示されるような三入力多数決回路で構成されている。この回路は2つ以上が1だったら1を出力する回路である。ノイズフィルタ152は、例えば、16個の三入力多数決回路で構成される。
【0203】
エッジ検出回路153は、ノイズフィルタ152を通したdata1[*]信号に対して隣接ビット値が違うものを抽出する。データの「0」から「1」への変化を検出したことを示す信号がedge_r[*]、データの「1」から「0」への変化を検出したことを示す信号がedge_f[*]となる。edge_r[*]はedge_r[n:0]、edge_f[*]はedge_f[n:0]とも表記する。ここで、nは自然数である。例えば、n=14である。
【0204】
エッジ認識回路158は、シフト回路(SHFTR)1581,1582と、窓切出し回路(WNDW)1583,1584と、エッジ履歴回路(EDGHS)1585と、を備える。
【0205】
シフト回路1581,1582は、それぞれのedge_r[n:0]、edge_f[n:0]をシフト量(sft[i:0])だけシフトした信号であるedges_r[n:0]、edges_f[n:0]を出力する。シフト量(sft[i:0])は後述するシフト量生成回路1587で生成される。シフト回路1581,1582は、sft[i:0]の値が正の場合は、edge_r[n:0]、edge_f[n:0]を右(最下位ビット側)にシフトする。シフト回路1581,1582は、sft[i:0]の値が負の場合は、edge_r[n:0]、edge_f[n:0]を左(最上位ビット側)にシフトする。
【0206】
以下、窓切出し回路1583について説明するが、窓切出し回路1584は窓切出し回路1583と同様に動作する。窓切出し回路1583は、edges_r[n:0]から5ビットを抽出して、中間エッジが検出される範囲(中間エッジ検出範囲)であるedgec_r[4:0]を設定する。中間エッジ検出範囲はsft[i:0]により制御される。中間エッジが検出されると、例えば、edgec_r[4:0]のいずれかのビットが1になる。エッジ履歴回路1585は前のサイクルにおいて中間エッジを検出した位置(中間エッジ位置)を示すedgec_rを記録する。窓切出し回路1583は、中間エッジ検出範囲(edgec_r[4:0])をエッジ履歴回路1585において記録している前のサイクルにおける中間エッジ位置(edgec_r)に基づいて補正する。
【0207】
もう少し詳しく説明すると、窓切出し回路1583は、前のサイクルの中間エッジ位置(edgec_r)が中間エッジ検出範囲(edgec_r[4:0])の上位側のビットの場合は、最上位ビット(ビット[4])をマスクする。ここで、上位側のビットとはビット[3]またはビット[4]である。すなわち、中間エッジ検出範囲(edgec_r[4:0])のビット[3:0]をエッジ検出範囲とする。また、前のサイクルの中間エッジ位置(edgec_r)が下位側のビット(ビット[0]またはビット[1])の場合は、中間エッジ検出範囲(edgec_r[4:0])の最下位ビット(ビット[0])をマスクする。すなわち、中間エッジ検出範囲(edgec_r[4:0])のビット[4:1]をエッジ検出範囲とする。また、前のサイクルの中間エッジ位置(edgec_r)がそれ以外のビット(ビット[2])の場合は、マスクするビットを変更しない、すなわち、前のサイクルのマスクビットと同じとする。
【0208】
図15に示すように、エッジ認識回路158は、さらに、データ検出回路1586を備える。データ検出回路1586は、edgec_r[4:0]のいずれかのビットに「1」があれば、中間エッジ検出範囲に「0」から「1」に変化するエッジがあったということなので、data_1信号を「1」にする。また、データ検出回路1586は、edgec_f[4:0]のいずれかのビットに「1」があれば、中間エッジ検出範囲に「1」から「0」に変化するエッジがあったということなので、data_0信号を「1」にする。但し、edgec_r[4:0]とedgec_f[4:0]の両方に「1」が含まれていた場合は判定できないため、データ検出回路1586はCDR_error信号を「1」にする。また、edgec_r[4:0]とedgec_f[4:0]の全てのビットが「0」の場合は、データ検出回路1586は中間エッジが無い、すなわち、フレームでは無い(フレーム終了)と判断し、passive信号を「1」にする。
【0209】
図16に示すように、エッジ認識回路158は、さらに、シフト量生成回路1587およびクロック制御回路1588を備える。
【0210】
シフト量生成回路1587は、中間エッジ範囲を示すsft[*]を格納するフリップフロップ1587aを備える。フレーム最初の立下りエッジを検出すると、edges_f[n:0]に「1」がある。これを初期値としてedges_f[n:0]に「1」があるビット値がフリップフロップ1587aに入力される。つまり、sft[*]の初期値はフレーム開始時点のマンチェスタ符号信号(mc_si)に重畳されたクロックとデコーダ150の内部で生成している同じ周波数のクロック(clk1)とのフレーム開始時の位相差に相当する。
【0211】
その後、ジッタにより、800MHzのクロック(clkup_p/clkup_n)の1サイクル分のずれがあった場合には、増減回路(Inc/Dec)1587bによりsft[*]の値が「+1」または「-1」補正される。ここで、1サイクル分のずれは、edgec_r[3]、edgec_f[3]、edgec_r[1]、または、edgec_f[1]が「1」の場合に対応する。edgec_r[3]、またはedgec_f[3]が「1」の場合は、sft[*]の値が「1」増加(+1)される。edgec_r[1]、または、edgec_fが「1」の場合は、sft[*]の値が「1」減少(-1)される。
【0212】
また、800MHzのクロック(clkup_p/clkup_n)の2サイクル分のずれがあった場合には、1サイクルのみsft[*]の値が加算器1587cにより「+2」または「-2」される。また、800MHzのクロック(clkup_p/clkup_n)の2サイクル分のずれがあった場合には、後述のクロック(clk1)のクロック周期の制御が行われる。ここで、2サイクル分のずれは、edgec_r[4]、edgec_f[4]、edgec_r[0]、または、edgec_f[0]が「1」の場合に対応する。edgec_r[4]、またはedgec_f[4]が「1」の場合は、sft[*]の値が「2」増加(+2)される。edgec_r[0]、または、edgec_f[0]が「1」の場合は、sft[*]の値が「2」減少(-2)される。
【0213】
クロック制御回路1588は、クロック生成回路157の分周比を制御する信号(cdiv)を生成する。通常はクロック(clkup_p)の周波数(400MHz)とボーレート(100MHz)の分周比である4分周となる。ここで、4分周の場合は、cdivの値は「3」になる。中間エッジ検出時に800MHのクロック(clkup_p/clkup_n)の2サイクルのずれがあった場合は、クロック制御回路1588は、クロック(clk1)の1サイクルのみcdivの値を「-1」または「+1」する。edgec_r[0]が「1」、またはedgec_f[0]が「1」の場合、クロック制御回路1588は、cdivの値を「4」にする。edgec_r[4]が「1」、またはedgec_f[4]が「1」の場合、クロック制御回路1588は、cdivの値を「2」にする。
【0214】
なお、クロック制御回路1588は2ビットのレジスタUBRS[1:0]を備える。分周比として4分周(8サイクル)、5分周(10サイクル)、6分周(12サイクル)がレジスタUBRS[1:0]に設定可能である。5分周の場合、通常cdivの値は「4」になる。また、edgec_r[0]が「1」またはedgec_f[0]が「1」の場合、cdivの値は「5」になる。また、edgec_r[4]が「1」またはedgec_f[4]が「1」の場合、cdivの値は「3」になる。6分周の場合、通常cdivの値は「5」になる。edgec_r[0]が「1」またはedgec_f[0]が「1」の場合、cdivの値は「6」になる。edgec_r[4]が「1」またはedgec_f[4]が「1」の場合、cdivの値は「4」になる。
【0215】
クロック生成回路157は、クロック(clkup_p)をcdivの値で分周してクロック(clk1)を生成する。以下、具体的に説明する。クロック生成回路157は、カウンタ1571と、カウンタ1571の出力とcdivの値と比較する比較器1572と、比較結果を記憶するフリップフロップ1573と、を備える。カウンタ1571はクロック(clkup_p)ごとにインクリメント回路1571bにより「0」からcdivの値までカウントアップする。比較器1572は、カウンタ1571のフリップフロップ1571aの出力(カウンタ値)とcdivの値と比較し、カウンタ値がcdivの値よりも小さい場合、「0」を出力する。カウンタ値がcdivの値と等しくなった場合、比較器1572は「1」を出力する。フリップフロップ1573の出力であるイネーブル信号(EN)が「0」の場合、カウンタ1571はカウントアップし、イネーブル信号(EN)が「1」の場合、カウンタ1571は「0」にクリアされる。イネーブル信号(EN)は、cdivの値+1ごとに「1」になる。クロックゲーティング回路(ICG)1574はイネーブル信号(EN)が「1」の場合にクロック(clkup_p)を出力する。これにより、クロック(clkup_p)のパルスから、cdivの値に相当するパルス数に1パルスをクロック(clk1)として出力する。cdivの値を変えることにより、クロック(clk1)1周期当たりのサンプリング数を変えられる。
【0216】
カウンタ1571は「0」からcdivの値までカウントし、cdivの値を変えることにより、クロック生成回路157は、クロック(clk1)の周期を変えることができる。なお、カウンタ1571を「0」以外に設定して、その設定値からcdivの値までカウントして、クロック(clk1)の周期を変えるようにしてもよい。
【0217】
第三実施例におけるデコーダの動作について
図18~
図24を用いて説明する。
図18から
図24は第三実施例におけるデコーダの動作を示すタイミングチャートである。
【0218】
まず、
図18~
図24の表記について説明する。edgebitはedgec_rまたはedgec_fのどのビットに「1」があったかを示す。すなわち、edgec_r[0]またはedgec_f[0]に「1」があればedgebitは「-2」となる。edgec_r[1]またはedgec_f[1]に「1」があればedgebitは「-1」となる。edgec_r[2]またはedgec_f[2]に「1」があればedgebitは「0」となる。edgec_r[3]またはedgec_f[3]に「1」があればedgebitは「+1」となる。 edgec_r[4]またはedgec_f[4]に「1」があればedgebitは「+2」となる。passiveが「1」の場合、edgebitは「0」となる。
【0219】
また、data2_preは
図15に示されるデータ検出回路1586のdata_0、data_1、passive、CDR_errorのどれがセットされたかを示す。data_0の場合は「0」、data_1の場合は「1」と表記されている。data2は最終的なデータ値を示す。また、各図における縦方向の実線はマンチェスタ符号信号(mc_si)のビット境界、縦方向の破線はマンチェスタ符号信号(mc_si)のビット中点を示す。
【0220】
また、縦方向の矢印はsin[*]からdata_1への取り込みタイミングであるクロック(clk1)の立ち上がりエッジを示す。なお、クロック(clk1)はデューティが50%に近い波形を記載している。しかし、
図17に示されるクロック生成回路157で生成されるクロック(clk1)の波形においては、立ち上がりエッジは図の位置で、クロック(clkup_p)のパルス幅のクロックであり、立下りエッジは図の位置とは異なる。
【0221】
図18はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ノイズが入るが、ジッタはビット周期の1/8以内の場合(定常状態)の波形である。
【0222】
T2サイクルのサンプリングにより、マンチェスタ符号信号(mc_si)の最初のエッジが検出され、下記のようなデータとなる。ここで、一番右側がビット[0]である。data1は18ビット長のデータであり、FLTRは16ビット長のデータである。edge_f、edge_r、edges_fおよびedges_rは15ビット長のデータである。
data1=11_11111111_11111000
FLTR= 11111111_11111100
edge_f= -0000000_00000010
edge_r= -0000000_00000000
edges_f= -0000000_00000010
edges_r= -0000000_00000000
【0223】
最初のサンプリング時は、フリップフロップ1587aの図示しないクリア端子に入力される信号によって、フリップフロップ1587aが「0」クリアされている。よって、sftの値は「0」であるので、edge_f=edges_fとなる。その時にエッジが検出されるビットがedges_f[1]であるので、edgebitは、edge_fの検出ビットである「2」になる。よって、フリップフロップ1587aにsftの初期値として「2」が設定される。次のT3サイクルのsftの値は「2」となる。T2サイクルにおけるdata2_preはT1サイクルにおけるpassiveの後のedge検出であるので、passiveとなる。
【0224】
なお、T3サイクル以降は、シフト回路1581,1582はedge_fおよびedge_rをそれぞれsftの値だけシフトしてedges_fおよびedges_rを生成する。シフト回路1581,1582は、sftの値が正の場合は右(下位ビット側)にシフトし、sftの値が負の場合は左(上位ビット側)にシフトする。シフト量生成回路1587は、前のサイクルのsftの値に前のサイクルのedgebitの値を加算して次のサイクルのsftを生成する。ここで、中間エッジ検出範囲(edgec_r[4:0]、edgec_f[4:0])はedges_r[9:5]およびedges_f[9:5]に対応する。
【0225】
例えば、T3サイクルにおいては、下記のようなデータとなる。ここで、「×」は意味のないデータである。
data1=11_11111000_01111000
FLTR= 11111100_00111100
edge_f= -0000010_00000010
edge_r= -0000000_00100000
edges_f= -××00000_10000000
edges_r= -××00000_00001000
edgec_f[4:0]=00100
edgec_r[4:0]=00000
【0226】
T3サイクルにおいては、edge_fが2ビット右にシフトされたedges_f[9:5]の真ん中のedges_f[7]が「1」である。すなわち、edgec_f[2]が「1」であるので、edgebitの値は「0」になり、次のT4サイクルにおける中間エッジ検出範囲の補正無しとなる。また、次のT4サイクルにおけるsftの値は「2」のままである。また、edges_fにおいて「1」が検出されたので、data_1が「1」、data2_preが「1」となり、次のT4サイクルでdata2が「1」となる。
【0227】
T3サイクル以降は、sftの値は「2」と同じであり、同様に、T4サイクル以降は進む。ジッタが1/8周期以内の場合は必ずedges_rおよびedges_fのどちらかの真ん中のビットであるedgec_r[2]またはedgec_f[2]が「1」になる。
【0228】
T7サイクルにおいては、マンチェスタ符号信号(mc_si)に1/8サイクル以下の幅の「H」のノイズが、T8サイクルにおいて1/8サイクル以下の幅の「L」のノイズが入った場合の動作になる。data1にはノイズが取り込まれるが、ノイズフィルタ(FLTR)では1ビットのノイズが除去され、以降のデータが正常に処理される。
【0229】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図18と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図18と同様の動作になる。T7サイクル、T8サイクルでノイズが入った場合も
図18と同様にノイズフィルタ(FLTR以降はノイズの無い場合と同じ動作となる。
【0230】
図19はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/8進んだジッタが載った場合の波形である。マンチェスタ符号信号(mc_si)の左向きの矢印がジッタにより1/8周期進んだエッジであり、右向き矢印は元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルで最初にジッタの影響を受ける。
【0231】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00001111_10000111
FLTR= 00000111_11000011
edge_f= -0000000_00100000
edge_r= -0000100_00000010
edges_f= -××00000_00001000
edges_r= -××00001_00000000
edgec_f[4:0]=00000
edgec_r[4:0]=01000
【0232】
T5サイクルにおいては、edges_r[9:5]の真中より1ビット左のedges_r[8]に「1」が検出される。すなわち、edgec_r[3]が「1」であるので、edgebitは「+1」になり、次のT6サイクルのsftの値は「2」から「3」に変わる。edgec_r[3]が「1」であるので、次のT6サイクルにおいては、窓切出し回路1583は、最上位ビット(ビット[4])をマスクする。すなわち、中間エッジ検出範囲(edgec_r[4:0]、edgec_f[4:0])のビット[3:0]をエッジ検出範囲とする。
【0233】
よって、T6サイクルにおいては、下記のようなデータとなる。ここで、edgec_fおよびedgec_rにおける「M」はマスクされたビットを示す。
data1=11_10000111_11110000
FLTR= 10000011_11111000
edge_f= -1000000_00000100
edge_r= -0000010_00000000
edges_f= -×××1000_00000000
edges_r= -×××0000_01000000
edgec_f[4:0]=M0000
edgec_r[4:0]=M0010
【0234】
T6サイクルにおいては、edges_r[9:5]の真ん中より1ビット右のedges_r[6]に「1」が検出される。すなわち、edgec_r[1]が「1」であるので、edgebitは「-1」になり、次のT7サイクルのsftの値は「3」から「2」に戻る。edgec_r[1]が「1」であるので、次のT7サイクルにおいては、窓切出し回路1583は、最下位ビット(ビット[0])をマスクする。すなわち、中間エッジ検出範囲(edgec_r[4:0]、edgec_f[4:0])のビット[4:1]をエッジ検出範囲とする。
【0235】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11110000_00001111
FLTR= 11111000_00000111
edge_f= -0000100_00000000
edge_r= -0000000_00000100
edges_f= -××00001_00000000
edges_r= -××00000_00000001
edgec_f[4:0]=0100M
edgec_r[4:0]=0000M
【0236】
T7サイクルにおいては、edges_f[9:5]の真中より1ビット左のedges_f[8]に「1」が検出される。すなわち、edgec_f[3]が「1」であるので、edgebitは「+1」になり、次のT8サイクルのsftの値は再び「2」から「3」に変わる。
【0237】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=00_00001111_11111000
FLTR= 00000111_11111100
edge_f= -0000000_00000010
edge_r= -0000100_00000000
edges_f= -×××0000_00000000
edges_r= -×××0000_10000000
edgec_f[4:0]=M0000
edgec_r[4:0]=M0010
【0238】
T8サイクルはT7サイクルと同じ位相において中間エッジがサンプリングされる。しかし、dges_r[9:5]の真中のビットのedges_r[7]に「1」が検出される。すなわち、edgec_r[2]が「1」であるので、edgebitは「0」になり、次のT9サイクルのsftの値は「3」のまま変化しない。
【0239】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=11_01111000_00000111
FLTR= 11111100_00000011
edge_f= -0000010_00000000
edge_r= -0000000_00000010
edges_f= -×××0000_10000000
edges_r= -×××0000_00000000
edgec_f[4:0]=0010M
edgec_r[4:0]=0000M
【0240】
T9サイクルにおいては、edges_f[9:5]の真ん中より1ビット右のedges_f[6]に「1」が検出される。すなわち、edgec_f[1]が「1」であるので、edgebitは「-1」になり、次のサイクルのsftの値は「3」から「2」に戻る。
【0241】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図19と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図19と同様の動作になる。
【0242】
図20はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/8遅れたジッタが載った場合の波形である。マンチェスタ符号信号(mc_si)の右向きの矢印がジッタにより1/8周期遅れたエッジであり、左向き矢印は元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルにおいて最初にジッタの影響を受ける。
【0243】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00000011_10000111
FLTR= 00000001_11000011
edge_f= -0000000_00100000
edge_r= -0000001_00000001
edges_f= -××00000_00001000
edges_r= -××00000_01000000
edgec_f[4:0]=00000
edgec_r[4:0]=00010
【0244】
T5サイクルにおいては、edges_r[9:5]の真中より1ビット右のedges_r[6]に「1」が検出される。すなわち、edgec_r[1]が「1」であるので、edgebitは「-1」になり、次のT6サイクルのsftの値は「2」から「1」に変わる。
【0245】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_10000111_11111100
FLTR= 10000011_11111110
edge_f= -1000000_00000001
edge_r= -0000010_00000000
edges_f= -×××1000_00000000
edges_r= -×××0001_00000000
edgec_f[4:0]=0000M
edgec_r[4:0]=1000M
【0246】
T6サイクルにおいては、edges_r[9:5]の真中より1ビット左のedges_r[8]に「1」が検出される。すなわち、edgec_r[3]が「1」であるので、edgebitは「+1」になり、次のT7サイクルのsft値は「1」から「2」に戻る。
【0247】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11111100_00000011
FLTR= 11111110_00000001
edge_f= -1000001_00000000
edge_r= -0000000_00000001
edges_f= -×××0000_01000000
edges_r= -×××0000_00000000
edgec_f[4:0]=M0001
edgec_r[4:0]=M0000
【0248】
T7サイクルにおいては、edges_f[9:5]の真中より1ビット右のedges_f[6]に「1」が検出される。すなわち、edgec_f[1]が「1」であるので、edgebitは「-1」になり、次のT8サイクルのsftの値は再び「2」から「1」に変わる。
【0249】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=00_00000011_11111000
FLTR= 00000001_11111100
edge_f= -0000000_00000010
edge_r= -0000001_00000000
edges_f= -×000000_00000000
edges_r= -×000000_10000000
edgec_f[4:0]=0000M
edgec_r[4:0]=0010M
【0250】
T8サイクルはT7サイクルと同じ位相において中間エッジがサンプリングされる。しかし、dges_r[9:5]の真中のビットのedges_r[7]に「1」が検出される。すなわち、edgec_r[2]が「1」であるので、edgebitは「0」になり、次のT9サイクルのsftの値は「1」のまま変化しない。
【0251】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=11_01111000_00000111
FLTR= 11111100_00000011
edge_f= -0000010_00000000
edge_r= -0000000_00000010
edges_f= -×000001_00000000
edges_r= -×000000_00000000
edgec_f[4:0]=1000M
edgec_r[4:0]=0000M
【0252】
T9サイクルにおいては、edges_f[9:5]の真中より1ビット左のedges_f[8]に「1」が検出される。すなわち、edgec_f[3]が「1」であるので、edgebitは「+1」になり、次のサイクルのsftの値は「1」から「2」に戻る。
【0253】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図20と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図20と同様の動作になる。
【0254】
図21はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/4進んだジッタが載った場合の波形である。マンチェスタ符号信号(mc_si)の左向きの矢印がジッタにより1/4進んだエッジであり、右向きの矢印は元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルにおいて最初にジッタの影響を受ける。
【0255】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00011111_10000111
FLTR= 00001111_11000011
edge_f= -0000000_00100000
edge_r= -0001000_00000010
edges_f= -××00000_00001000
edges_r= -××00010_00000000
edgec_f[4:0]=00000
edgec_r[4:0]=10000
【0256】
T5サイクルにおいては、edges_r[9:5]の真中より2ビット左のedges_r[9]に「1」が検出される。すなわち、edgec_r[4]が「1」であるので、edgebitは「+2」になり、次のT6サイクルのsftの値は一時的に「2」から「4」に変わる。また、一時的にcdivの値の「3」が「-1」されて「2」になり、次のT6サイクルはクロック(clkup_p)の3周期分に減少する。
【0257】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_10000111_11100000
FLTR= 10000011_11110000
edge_f= -1000000_00001000
edge_r= -0000010_00000000
edges_f= -××××100_00000000
edges_r= -××××000_00100000
edgec_f[4:0]=M0000
edgec_r[4:0]=M0001
【0258】
T6サイクルにおいては、edges_r[9:5]の真中より2ビット右のedges_r[5]に「1」が検出される。すなわち、edgec_r[0]が「1」であるので、edgebitは「-2」になり、次のT7サイクルのsftの値は一時的に元の「2」から「0」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、次のT7サイクルはクロック(clkup_p)の5周期分に増加する。
【0259】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11111000_00000111
FLTR= 11111100_00000011
edge_f= -0000010_00000000
edge_r= -0000010_00000010
edges_f= -0000010_00000000
edges_r= -0000000_00000000
edgec_f[4:0]=1000M
edgec_r[4:0]=0000M
【0260】
T7サイクルにおいては、edges_f[9:5]の真中より2ビット左のedges_f[9]に「1」が検出される。すなわち、edgec_f[4]が「1」であるので、edgebitは「+2」になり、次のT8サイクルのsftの値は再び一時的に「2」から「4」に変わる。また、一時的にcdivの値の「3」が「-1」されて「2」になり、次のT8サイクルはクロック(clkup_p)の3周期分に減少する。
【0261】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=00_00011111_11111000
FLTR= 00001111_11111100
edge_f= -0000000_00100010
edge_r= -0001000_00000000
edges_f= -××××000_00000000
edges_r= -××××000_10000000
edgec_f[4:0]=M0000
edgec_r[4:0]=M0100
【0262】
T8サイクルはT7サイクルと同じ位相において中間エッジがサンプリングされる。edges_r[9:5]の真中のedges_r[7]に「1」が検出される。すなわち、edgec_r[2]が「1」であるので、edgebitは「0」になり、次のT9サイクルのsftの値は元の「2」に戻る。また、cdivの値が「3」にされて次のT9サイクルはクロック(clkup_p)の4周期に戻る。
【0263】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=11_11111110_00011110
FLTR= 11111111_00001111
edge_f= -0000000_10000000
edge_r= -0000000_00001000
edges_f= -××00000_00100000
edges_r= -××00000_00000010
edgec_f[4:0]=M0001
edgec_r[4:0]=M0000
【0264】
T9サイクルにおいては、edges_f[9:5]の真中より2ビット右のedges_f[5]に「1」が検出される。すなわち、edgec_f[0]が「1」であるので、edgebitは「-2」になり、次のT10サイクルのsft値は一時的に元の「2」から「0」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、次のT10サイクルはクロック(clkup_p)の5周期分に増加する。
【0265】
よって、T10サイクルにおいては、下記のようなデータとなる。
data1=10_00011110_00000001
FLTR= 10001111_00000000
edge_f= -1000000_10000000
edge_r= -0001000_00000000
edges_f= -0000000_10000000
edges_r= -0001000_00000000
edgec_f[4:0]=0010M
edgec_r[4:0]=0000M
【0266】
T10サイクルにおいては、edges_f[9:5]の真中のedges_f[7]に「1」が検出される。すなわち、edgec_f[2]が「1」であるので、edgebitは「0」になり、次のT11サイクルのsft値は元の「2」に戻る。また、cdivの値が「3」にされて次のT11サイクルはクロック(clkup_p)の4周期に戻る。
【0267】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図21と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図21と同様の動作になる。
【0268】
図22はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/4遅れたジッタが載った場合の波形である。マンチェスタ符号信号(mc_si)の右向きの矢印がジッタにより1/4遅れたエッジであり、左向きの矢印は元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルにおいて最初にジッタの影響を受ける。
【0269】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00000001_10000111
FLTR= 00000000_11000011
edge_f= -0000000_00100000
edge_r= -0001000_10000000
edges_f= -××00000_00001000
edges_r= -××00000_00100000
edgec_f[4:0]=00000
edgec_r[4:0]=00001
【0270】
T5サイクルにおいては、edges_r[9:5]の真中より2ビット右のedges_r[5]に「1」が検出される。すなわち、edgec_r[0]が「1」であるので、edgebitは「-2」になり、次のT6サイクルのsftの値は一時的に「2」から「0」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、次のT6サイクルはクロック(clkup_p)の5周期分に増加する。
【0271】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_10000111_11111110
FLTR= 10000011_11111111
edge_f= -1000000_00000000
edge_r= -0000010_00000000
edges_f= -1000000_00000000
edges_r= -0000010_00000000
edgec_f[4:0]=0000M
edgec_r[4:0]=1000M
【0272】
T6サイクルにおいては、edges_r[9:5]の真中より2ビット左のedges_r[9]に「1」が検出される。すなわち、edgec_r[4]が「1」であるので、edgebitは「+2」になり、次のT7サイクルのsftの値は一時的に「2」から「4」に変わる。また、一時的にcdivの値の「3」が「-1」されて「2」になり、次のT7サイクルはクロック(clkup_p)の3周期分に減少する。
【0273】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11111000_00000111
FLTR= 11111100_00000011
edge_f= -0000010_00000000
edge_r= -0000000_00000010
edges_f= -××××000_00100000
edges_r= -××××000_00000000
edgec_f[4:0]=M0001
edgec_r[4:0]=M0000
【0274】
T7サイクルにおいては、edges_f[9:5]の真中より2ビット右のedges_f[5]に「1」が検出される。すなわち、edgec_f[0]が「1」であるので、edgebitは「-2」になり、次のT8サイクルのsftの値は一時的に元の「2」から「0」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、次のT8サイクルはクロック(clkup_p)の5周期分に増加する。
【0275】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=10_00000001_11111000
FLTR= 00000000_11111100
edge_f= -0000000_00000010
edge_r= -0000000_10000000
edges_f= -0000000_00000010
edges_r= -0000000_10000000
edgec_f[4:0]=0000M
edgec_r[4:0]=0010M
【0276】
T8サイクルはT7サイクルと同じ位相において中間エッジがサンプリングされる。edges_r[9:5]の真中のedges_r[7]に「1」が検出される。すなわち、edgec_r[2]が「1」であるので、edgebitは「0」になり、次のT9サイクルのsft値は元の「2」に戻る。また、cdivの値が「3」にされて次のT9サイクルはクロック(clkup_p)の4周期に戻る。
【0277】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=11_11100001_11100000
FLTR= 11110000_11110000
edge_f= -0001000_00000000
edge_r= -0000000_10000000
edges_f= -××00010_00000000
edges_r= -××00000_00100000
edgec_f[4:0]=10000
edgec_r[4:0]=00001
【0278】
T9サイクルにおいては、edges_f[9:5]の真中より2ビット左のedges_f[9]に「1」が検出される。すなわち、edgec_f[4]が「1」であるので、edgebitは「+2」になり、次のT10サイクルのsft値は一時的に「2」から「4」に変わる。また、一時的にcdivの値の「3」が「-1」されて「2」になり、T10サイクルはクロック(clkup_p)の3周期分に減少する。
【0279】
よって、T10サイクルにおいては、下記のようなデータとなる。
data1=11_11100000_00011110
FLTR= 11110000_00001111
edge_f= -0001000_00000000
edge_r= -0000000_00001000
edges_f= -××××000_10000000
edges_r= -××××000_00000000
edgec_f[4:0]=M0100
edgec_r[4:0]=M0000
【0280】
T10サイクルにおいては、edges_f[9:5]の真中のedges_f[7]に「1」が検出される。すなわち、edgec_f[2]が「1」であるので、edgebitは「0」になり、次のT11サイクルのsft値は元の「2」に戻る。また、cdivの値が「4」にされて次のT11サイクルはクロック(clkup_p)の4周期に戻る。
【0281】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図22と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図22と同様の動作になる。
【0282】
図23はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/4進んだジッタが載り、それが1/8周期ずつ2周期にわたって変化する場合の波形である。マンチェスタ符号信号(mc_si)の左向きの矢印がジッタにより1/8または1/4進んだエッジであり、右向きの矢印は1/8または1/4元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルにおいて最初にジッタの影響を受ける。
【0283】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00001111_10011111
FLTR= 00000111_11001111
edge_f= -0000000_00100000
edge_r= -0000100_00001000
edges_f= -××00000_00001000
edges_r= -××00001_00000010
edgec_f[4:0]=00000
edgec_r[4:0]=01000
【0284】
T5サイクルにおいては、edges_r[9:5]の真中より1ビット左のedges_r[8]に「1」が検出される。すなわち、edgec_r[3]が「1」であるので、edgebitは「+1」になり、次のT6サイクルのsft値は「2」から「3」に変わる。
【0285】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_10011111_11111000
FLTR= 11001111_11111100
edge_f= -0100000_00000010
edge_r= -0001000_00000000
edges_f= -×××0100_00000000
edges_r= -×××0001_00000000
edgec_f[4:0]=M0000
edgec_r[4:0]=M1000
【0286】
T6サイクルは2回目の1/4周期の進みジッタの判定になる。edges_r[9:5]の真中より1ビット左のedges_r[8]に「1」が検出される。すなわち、edgec_r[3]が「1」であるので、edgebitは「+1」になり、次のT7サイクルのsftの値は「3」から「4」に変わる。
【0287】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11111000_00011111
FLTR= 11111100_00001111
edge_f= -0000010_00000000
edge_r= -0000000_00001000
edges_f= -××××000_00100000
edges_r= -××××000_00000000
edgec_f[4:0]=M0001
edgec_r[4:0]=M0000
【0288】
T7サイクルは最初の1/8周期分が一回で戻った場合の判定になる。edges_f[9:5]の真中より2ビット右のedges_f[5]に「1」が検出される。すなわち、edgec_f[0]が「1」であるので、edgebitは「-2」になり、次のT8サイクルのsftの値は一時的に「4」から「2」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、T8サイクルはクロック(clkup_p)の5周期分に増加する。
【0289】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=00_00001111_11110000
FLTR= 00000111_11111000
edge_f= -0000000_00000100
edge_r= -0000100_00000000
edges_f= -××00000_00000001
edges_r= -××00001_00000000
edgec_f[4:0]=0000M
edgec_r[4:0]=0100M
【0290】
T8サイクルは次の1/8周期が戻った場合の判定である。edges_r[9:5]の真中より1ビット左のedges_r[8]に「1」が検出される。すなわち、edgec_r[3]が「1」であるので、edgebitは「+1」になり、次のT9サイクルのsftの値は元の「4」から「5」に変わる。また、cdivの値が「3」にされてT9サイクルはクロック(clkup_p)の4周期に戻る。
【0291】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=11_11000001_11100000
FLTR= 11100000_11110000
edge_f= -0010000_00001000
edge_r= -0000000_10000000
edges_f= -×××××00_10000000
edges_r= -×××××00_00000100
edgec_f[4:0]=M0100
edgec_r[4:0]=M0000
【0292】
T9サイクルにおいては、edges_f[9:5]の真中のedges_f[7]に「1」が検出される。すなわち、edgec_f[2]が「1」であるので、edgebitは「0」になり、次のT10サイクルのsftの値は変わらず「5」元のままである。cdivの値は変わらず「3」のままであり、T10サイクルはクロック(clkup_p)の4周期のままである。
【0293】
よって、T10サイクルにおいては、下記のようなデータとなる。
data1=11_11100000_00011110
FLTR= 11110000_00001111
edge_f= -0001000_00000000
edge_r= -0000000_00001000
edges_f= -×××××00_01000000
edges_r= -×××××00_00000000
edgec_f[4:0]=M0010
edgec_r[4:0]=M0000
【0294】
T10サイクルにおいては、edges_f[9:5]の真中より1ビット右のedges_f[6]に「1」が検出される。すなわち、edgec_f[1]=1であるので、edgebitは「-1」になり、次のT11サイクルのsftの値は「5」から「4」に変わる。
【0295】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図23と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図23と同様の動作になる。
【0296】
図24はクロック(clkup_n)の「H」期間にスタートビットの中間エッジがあり、ビット周期の1/4遅れたジッタが載り、それが1/8周期ずつ2周期にわたって変化する場合の波形である。マンチェスタ符号信号(mc_si)の右向きの矢印がジッタによる1/8または1/4遅れたエッジであり、左向きの矢印は1/8または1/4元に戻ったエッジである。T4サイクルまでは
図18と同様に動作する。T5サイクルにおいて最初にジッタの影響を受ける。
【0297】
T5サイクルにおいては、下記のようなデータとなる。
data1=00_00000011_10000001
FLTR= 00000001_11000000
edge_f= -0000000_00100000
edge_r= -0000001_00000000
edges_f= -××00000_00001000
edges_r= -××00000_01000000
edgec_f[4:0]=00000
edgec_r[4:0]=00010
【0298】
T5サイクルは最初の1/4周期分が一回で戻った場合の判定になる。edges_r[9:5]の真中より1ビット右のedges_r[6]に「1」が検出される。すなわち、edgec_r[1]が「1」であるので、edgebitは「-1」になり、次のT6サイクルのsftの値は「2」から「1」に変わる。
【0299】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_10000001_11111000
FLTR= 11000000_11111100
edge_f= -0100000_00000010
edge_r= -0000000_10000000
edges_f= -×010000_00000001
edges_r= -×000000_01000000
edgec_f[4:0]=0000M
edgec_r[4:0]=0001M
【0300】
T6サイクルは2回目の1/4周期の遅れたエッジの判定になる。edges_r[9:5]の真中より1ビット右のedges_r[6]に「1」が検出される。すなわち、edgec_f[1]が「1」であるので、edgebitは「-1」になり、次のT7サイクルのsft値は「1」から「0」に変わる。
【0301】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=11_11111000_00000001
FLTR= 11111100_00000000
edge_f= -0000010_00000000
edge_r= -0000000_00000000
edges_f= -0000010_00000000
edges_r= -0000000_00000000
edgec_f[4:0]=1000M
edgec_r[4:0]=0000M
【0302】
T7サイクルは1/8周期分が戻った場合の判定になる。edges_f[9:5]の真中より2ビット左のedges_f[9]に「1」が検出される。すなわち、edgec_f[4]が「1」であるので、edgebitは「+2」になり、次のT8サイクルのsftの値は一時的に「0」から「2」に変わる。また、一時的にcdivの値の「3」が「-1」されて「2」になり、T10サイクルはクロック(clkup_p)の3周期分に減少する。
【0303】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=00_00000001_11111100
FLTR= 00000000_11111110
edge_f= -0000000_00000001
edge_r= -0000000_10000000
edges_f= -××00000_00000000
edges_r= -××00000_00100000
edgec_f[4:0]=M0000
edgec_r[4:0]=M0001
【0304】
T8サイクルは次に1/4周期分が戻った場合の判定になる。edges_r[9:5]の真中より2ビット右のedges_r[5]に「1」が検出される。すなわち、edgec_r[0]が「1」であるので、edgebitは「-2」になり、次のT9サイクルのsft値は一時的に元の「0」から「-2」に変わる。また、一時的にcdivの値の「3」が「+1」されて「4」になり、T9サイクルはクロック(clkup_p)の5周期分に増加する。
【0305】
よって、T9サイクルにおいては、下記のようなデータとなる。
data1=00_01111111_00011110
FLTR= 00111111_10001111
edge_f= -0000000_01000000
edge_r= -0100000_00001000
edges_f= -0000001_00000000
edges_r= -0000000_00100010
edgec_f[4:0]=0100M
edgec_r[4:0]=0000M
【0306】
T9サイクルにおいては、edges_f[9:5]の真中より1ビット左のedges_f[8]に「1」が検出される。すなわち、edgec_f[3]が「1」であるので、edgebitは「+1」になり、次のT10サイクルのsft値は元の「0」から「1」に変わる。cdivの値が「3」にされてT10サイクルはクロック(clkup_p)の4周期に戻る。
【0307】
よって、T10サイクルにおいては、下記のようなデータとなる。
data1=00_01111000_00000111
FLTR= 00111100_00000011
edge_f= -0000010_00000000
edge_r= -0000000_00000010
edges_f= -×000001_00000000
edges_r= -×000000_00000001
edgec_f[4:0]=M1000
edgec_r[4:0]=M0000
【0308】
T10サイクルにおいては、edges_f[9:5]の真中より1ビット左のedges_f[8]に「1」が検出される。すなわち、edgec_f[3]が「1」であるので、edgebitは「+1」になり、次のT11サイクルのsftの値は「1」から「2」に変わる。
【0309】
クロック(clkup_p)の「H」期間にスタートビットの中間エッジがある場合の波形は
図24と同様になる。sin[*]の偶数ビットと奇数ビットで波形が入れ違うが、クロック(clkup_p)と同じタイミングのクロック(clk1)によってサンプリングしたdata1は正しい並びとなる。data1以降は
図24と同様の動作になる。
【0310】
第三実施例によれば、第一実施例および第二実施例と比較して、高速サンプリングクロックで動作する回路がシフト用のフリップフロップ151aだけであり、高速サンプリングクロックで動作する、加算、シフト、比較等の演算器が無い。これにより、第一実施例および第二実施例よりも、より高速な周波数、ボーレートでの動作が可能になる。言い換えれば、同じ周波数、ボーレートの場合、より低電力で、安価な微細化が進んでいない製造技術で実現可能となる。
【0311】
(第四実施例)
図25は第四実施例におけるエッジ認識回路の構成の一部を示すブロック図である。
図26は第四実施例におけるエッジ認識回路の構成の一部を示すブロック図である。
図27は
図26に示される補正回路の真理値表である。
【0312】
第四実施例におけるデコーダ150は、エッジ認識回路158を除いて、第三実施例と同様の構成である。よって、同期化回路(SYNC)151、ノイズフィルタ(FLTR)152、エッジ検出回路(EDC)153およびクロック生成回路(CG)157については説明を省略する。
【0313】
第四実施例におけるエッジ認識回路158は、シフト回路(SHFTR)1581,1582と、窓切出し回路(WNDW)1583,1584と、を備える。シフト回路1581,1582は第三実施例におけるシフト回路1581,1582と同様の構成であり、同様の動作を行う。
【0314】
以下、窓切出し回路1583について説明するが、窓切出し回路1584は窓切出し回路1583と同様に動作する。窓切出し回路1583は、edges_r[n:0]から7ビットを抽出して、中間エッジ検出範囲であるedgec_r[7:0]を設定する。第四実施例における中間エッジ検出範囲は第三実施例よりも広くなっている。窓切出し回路1583は、中間エッジ検出範囲(edgec_r[6:0])を前のサイクルにおける中間エッジ位置(edgec_r)に基づいて補正する。
【0315】
もう少し詳しく説明すると、窓切出し回路1583は、前のサイクルの中間エッジ位置(edgec_r)が中間エッジ検出範囲(edgec_r[6:0])の上位側のビットの場合は、上位側のビット(ビット[5]およびビット[6])をマスクする。ここで、上位側のビットの場合とは、ビット[4]または[5]またはビット[6]の場合である。すなわち、中間エッジ検出範囲(edgec_r[60])のビット[4:0]をエッジ検出範囲とする。また、前のサイクルの中間エッジ位置(edgec_r)が下位側のビットの場合は、中間エッジ検出範囲(edgec_r[6:0])の下位側のビット(ビット[0]およびビット[1])をマスクする。ここで、下位側のビットの場合とは、ビット[0]またはビット[1]またはビット[2]の場合である。すなわち、中間エッジ検出範囲(edgec_r[6:0])のビット[6:2]をエッジ検出範囲とする。また、前のサイクルの中間エッジ位置(edgec_r)がそれ以外のビット(ビット[3])の場合は、マスクするビットを変更しない、すなわち、前のサイクルのマスクビットと同じとする。
【0316】
図25に示すように、エッジ認識回路158は、さらに、データ検出回路1586を備える。データ検出回路1586は、第三実施例におけるデータ検出回路1586と同様の構成であり、同様に動作する。
【0317】
図26に示すように、エッジ認識回路158は、さらに、シフト量生成回路1587およびクロック制御回路1588を備える。
【0318】
シフト量生成回路1587は、フレーム開始時の初期シフト値(i_sft[*])を格納するフリップフロップ1587aと、補正シフト値(c_sft[*])を格納するフリップフロップ1587aと、を備える。フレーム最初の立下りエッジを検出すると、edges_f[n:0]に「1」がある。これを初期値としてedges_f[n:0]に「1」があるビット値がフリップフロップ1587aに入力される。つまり、i_sft[*]の初期値はフレーム開始時点のマンチェスタ符号信号(mc_si)に重畳されたクロックとデコーダ150の内部で生成している同じ周波数のクロック(clk1)とのフレーム開始時の位相差に相当する。
【0319】
補正シフト値(c_sft[*])はフレーム受信中の補正値である。シフト量を示すsft[*]は、加算器1587cによりフレーム開始時の初期シフト値(i_sft[*])に補正シフト値(c_sft[*])が加算されて算出される。
【0320】
シフト量生成回路1587は、さらに、補正回路1587eを備える。補正回路1587eは、前のサイクルのビットずれ(補正シフト値)が入力される端子Dと、edgec_r[6:0]またはedgec_f[6:0]が入力される端子IN(-3、-2、-1、0、+1、+2、+3)と、を備える。ここで、edgec_r[6:0]またはedgec_f[6:0]はエッジ補正入力といい、七つの端子INの何れか一つの端子に「1」が入力される。補正回路1587eは、さらに、次のビットずれ値(補正シフト値)が出力される端子Q1とカウンタ補正値が出力される端子Q2とを備える。補正回路1587eは、端子INおよび端子Dに入力されるデータから
図20に示される真理値表に従って端子Q1および端子Q2からデータを出力する。
【0321】
すなわち、ジッタにより、800MHzのクロック(clkup_p/clkup_n)の1サイクル分のずれがあった場合において、前回補正なし(c_sft[*]=0)の場合は、端子INの「-1」または「+1」に入力され、端子Dに「0」が入力される。この場合、端子Q1から「-1」または「+1」が出力される。よって、次の補正シフト値(c_sft[*])は「-1」または「+1」となる。また、既に補正済み(c_sft[*]=-1または+1)の場合は、端子INの「-1」または「+1」に入力され、端子Dに「-1」または「+1」が入力される。この場合、端子Q1から「0」が出力される。よって、次の補正シフト値(c_sft[*])は「0」(補正無し)となる。
【0322】
クロック制御回路1588は、第三実施例におけるクロック制御回路1588と同様に、クロック生成回路157の分周比を制御する信号(cdivc)を生成する。通常はクロック(clkup_p)の周波数(400MHz)とボーレート(100MHz)の分周比となる。つまり、4分周の場合は、cdivの値は「3」になる。ただし、クロック制御回路1588は、補正回路1587eの端子Q1から入力されるカウンタ補正値により、一時的に値を増減する。
【0323】
ここで、エッジ補正入力と前回補正シフト値の符号が同じ場合は、400MHzの1サイクルずれたことになるので、クロック(clk1)を一時的に400MHzのクロック(clkup_p)の1周期分増減させる。この制御は、クロック制御回路1588の端子corに入力されるカウンタ補正値によって行われ、cdiv値は分周比から決められた値(4分周比の場合は「3」)にカウンタ補正値を加算して生成される。
【0324】
また、800MHのクロック(clkup_p/clkup_n)の2サイクルのずれがあった場合には、c_sft[*]は変化せずcdiv値のみの調整となる。800MHのクロック(clkup_p/clkup_n)の3サイクルのずれがあった場合には、c_sft[*]およびcdiv値の両方で調整する。
【0325】
なお、クロック制御回路1588は、第三実施例と同様に、2ビットのレジスタUBRS[1:0]を備える。分周比として4分周(8サイクル)、5分周(10サイクル)、6分周(12サイクル)がレジスタUBRS[1:0]に設定可能である。5分周の場合、通常cdivの値は「4」になり、カウンタ補正値が加算されてcdivの値が調整される。6分周の場合、通常cdivの値は「5」になり、カウンタ補正値が加算されてcdivの値が調整される。
【0326】
クロック生成回路157は、第三実施例と同様に、クロック(clkup_p)をcdiv値で分周してクロック(clk1)を生成する。
【0327】
第四実施例におけるデコーダの動作について
図28を用いて説明する。
図28は第四実施例におけるデコーダの動作を示すタイミングチャートである。
図18から
図24は、第三実施例の動作を示すタイミングチャートであるが、第四実施例でもほぼ同様の動作となる。
【0328】
図28は受信側の周波数に対して、送信側の周波数が少し遅い場合の波形である。マンチェスタ符号信号(mc_si)の右向きの矢印が、送信側の周波数が遅いことによる遅れの波形である。
【0329】
T2サイクルのサンプリングで最初のエッジが検出され、T2サイクルは下記のようなデータとなる。
data1=11_11111111_11111000
FLTR= 11111111_11111100
edge_f= -0000000_00000010
edge_r= -0000000_00000000
【0330】
最初のサンプリング時は、フリップフロップ1587aの図示しないクリア端子に入力される信号によって、フリップフロップ1587aが「0」クリアされて、i_sftの値が「0」になっている。また、フリップフロップ1587dの図示しないクリア端子に入力される信号によって、フリップフロップ1587dが「0」クリアされて、c_sftの値が「0」になっている。よって、sftの値は「0」であるので、edge_f=edges_fとなる。その時のエッジが検出されるビットがedges_f[1]であるので、edge_fの検出ビットである「2」になる。よって、フリッピフロップ1587aにi_sftの初期値として「2」が設定される。また、c_sftの値が「0」のままである。よって、次のT3サイクルのsftの値は「2」となる。T2サイクルにおけるdata2_preはT1サイクルにおけるpassiveの後のedge検出であるので、passiveとなる。
【0331】
なお、T3サイクル以降は、シフト回路1581,1582はedges_fおよびedges_rをそれぞれsftの値だけシフトしてedge_fおよびedge_rを生成する。シフト回路1581,1582は、sftの値が正の場合は右にシフトし、sftの値が負の場合は左にシフトする。シフト量生成回路1587は、前のサイクルのi_sftに前のサイクルのc_sftを加算して次のサイクルのsftを生成する。また、中間エッジ範囲(edgec_r[6:0]、edgec_f[6:0)はedges_r[10:4]およびedges_f[10:4]に対応する。
【0332】
例えば、T3サイクルにおいては、下記のようなデータとなる。
data1=11_11111000_01111000
FLTR= 11111100_00111100
edge_f= -0000010_00000010
edge_r= -0000000_00100000
edges_f= -××00000_10000000
edges_r= -××00000_00001000
edgec_f[6:0]=0001000
edgec_r[6:0]=0000000
【0333】
T3サイクルではedges_f[10:4]の真ん中のedges_f[7]が「1」である。すなわち、edgec_f[3]が1であり、また、前のT2サイクルにおいてc_sftの値が「0」であるので、
図27に示される真理値表からc_sft=0となる。また、edges_fで「1」が検出されたためdata_1が「1」、data2_preが「1」となり、次のT4サイクルでdata2が「1」となる。
【0334】
T5サイクルで最初に遅れの影響を受ける。T5サイクルにおいては、下記のようなデータとなる。
data1=00_00000011_11000011
FLTR= 00000011_11000001
edge_f= -0000000_00100000
edge_r= -0000001_00000001
edges_f= -××00000_00001000
edges_r= -××00000_01000000
edgec_f[6:0]=0000000
edgec_r[6:0]=0000100
【0335】
T5サイクルにおいては、edges_r[10:4]の真ん中より1ビット右のedges_r[6]が「1」である。すなわち、edgec_r[2]が1であり、また、前のT4サイクルにおいてc_sftの値が「0」であるので、
図27に示される真理値表からc_sftの値が「-1」となる。i_sftの値が「2」であるので、次のT6サイクルのsftの値は「2」から「1」に変わる。edgec_r[3]=1であるので、次のT6サイクルにおいては、窓切出し回路1583は、最下位側のビット(ビット[0]およびビット[1])をマスクする。すなわち、中間エッジ検出範囲(edgec_r[6:0]、edgec_f[6:0])のビット[6:2]をエッジ検出範囲とする。
【0336】
よって、T6サイクルにおいては、下記のようなデータとなる。
data1=11_11000101_11111110
FLTR= 11100001_11111111
edge_f= -0100000_00000100
edge_r= -0000001_00000000
edges_f= -×010000_00000000
edges_r= -×000000_10000000
edgec_f[6:0]=00000MM
edgec_r[6:0]=00010MM
【0337】
T6サイクルにおいては、edges_r[10:4]の真ん中のedges_r[7]が「1」である。すなわち、edgec_r[3]が「1」であり、また、前のT5サイクルにおいてc_sftの値が「-1」であるので、
図27に示される真理値表からc_sftの値が「-1」となる。i_sft=2であるので、次のT7サイクルのsftの値は「1」のままである。
【0338】
よって、T7サイクルにおいては、下記のようなデータとなる。
data1=01_11111110_00000001
FLTR= 11111111_00000000
edge_f= -0000001_00000000
edge_r= -0000000_00000000
edges_f= -×010000_10000000
edges_r= -×000000_00000000
edgec_f[6:0]=00010MM
edgec_r[6:0]=00000MM
【0339】
T7サイクルにおいては、edges_f[10:4]の真ん中のedges_f[7]が「1」である。すなわち、edgec_f[3]が「1」であり、また、前のT6サイクルにおいてc_sftが「-1」であるので、
図27に示される真理値表からc_sftは「-1」となる。i_sft=2であるので、次のT8サイクルのsftの値は「1」のままである。
【0340】
よって、T8サイクルにおいては、下記のようなデータとなる。
data1=10_00000001_11111111
FLTR= 00000000_11111111
edge_f= -0000000_00000000
edge_r= -0000000_10000000
edges_f= -×010000_00000000
edges_r= -×000000_01000000
edgec_f[6:0]=00000MM
edgec_r[6:0]=00001MM
【0341】
T8サイクルにおいては、edges_r[10:4]の真ん中より1ビット右のedges_r[6]が「1」である。すなわち、edgec_r[2]が「1」であり、また、前のT7サイクルにおいてc_sftの値が「-1」であるので、
図27に示される真理値表からc_sftの値が「0」となる。i_sft=2であるので、次のT9サイクルのsftの値は「1」から「2」に変わる。さらに、前のT7サイクルにおいてc_sftの値が「-1」であるので、
図27に示される真理値表からカウンタ補正値は「+1」となる。すなわち、cdivの値は「3」に「+1」が加算されて「4」になり、T8サイクルはクロック(clkup_p)の5周期分に増加し、クロック(clk1)の周期が一時的に広がる。
【0342】
第三実施例では、受信側と送信側に周波数のずれであるボーレート公差があった場合は、sft[*]値が加算または減算され続けるため、それに対応できるだけのリソースが必要である。ここで、マンチェスタ符号信号(mc_si)に重畳されたクロックとデコーダ内部で生成している同周波数のクロック(clk1)の周波数が完全に一致していない場合に、ボーレート公差があることになる。第四実施例では、シフト値の補正値が±1しか取らないので、受信側と送信側にボーレート公差があった場合でも、フレーム長に関係なく、周期当たりのサンプリング数に応じたsft[*]およびc_sft[*]を用意すればよい。よって、第四実施例では、フレーム長に応じたリソースが必要ではなく、第三実施例と比較して、最低限のリソースで対応できる。
【0343】
以上、本開示者らによってなされた開示を実施形態および実施例に基づき具体的に説明したが、本開示は、上記実施形態および実施例に限定されるものではなく、種々変更可能であることはいうまでもない。
【0344】
例えば、実施形態および実施例では、マンチェスタ符号として、1タイムスロット中で高電位から低電位に遷移すれば論理値が「1」、低電位から高電位に遷移すれば論理値が「0」となる例について説明した。しかし、1タイムスロット中で高電位から低電位に遷移すれば論理値が「0」、低電位から高電位に遷移すれば論理値が「1」となるマンチェスタ符号にも適用できる。
【符号の説明】
【0345】
100:半導体装置
150:デコーダ
151:同期化回路
152:ノイズフィルタ
153:エッジ検出回路
154:エッジ判定回路
155:エッジ履歴回路
156:カウンタ
157:クロック生成回路