IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ソニーセミコンダクタソリューションズ株式会社の特許一覧

特許7604377符号化装置、符号化方法、復号装置、復号方法、およびプログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-13
(45)【発行日】2024-12-23
(54)【発明の名称】符号化装置、符号化方法、復号装置、復号方法、およびプログラム
(51)【国際特許分類】
   H04L 25/49 20060101AFI20241216BHJP
   H03M 7/14 20060101ALI20241216BHJP
   H03M 13/21 20060101ALI20241216BHJP
   H04L 1/00 20060101ALI20241216BHJP
【FI】
H04L25/49 A
H03M7/14 B
H03M13/21
H04L1/00 B
【請求項の数】 20
(21)【出願番号】P 2021542581
(86)(22)【出願日】2020-06-30
(86)【国際出願番号】 JP2020025631
(87)【国際公開番号】W WO2021039099
(87)【国際公開日】2021-03-04
【審査請求日】2023-05-12
(31)【優先権主張番号】P 2019157637
(32)【優先日】2019-08-30
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】316005926
【氏名又は名称】ソニーセミコンダクタソリューションズ株式会社
(74)【代理人】
【識別番号】100121131
【弁理士】
【氏名又は名称】西川 孝
(74)【代理人】
【氏名又は名称】稲本 義雄
(74)【代理人】
【識別番号】100168686
【弁理士】
【氏名又は名称】三浦 勇介
(72)【発明者】
【氏名】杉岡 達也
(72)【発明者】
【氏名】百代 俊久
(72)【発明者】
【氏名】鵜沼 雅幸
(72)【発明者】
【氏名】岡澤 大介
(72)【発明者】
【氏名】木村 在利
(72)【発明者】
【氏名】城下 寛司
【審査官】阿部 弘
(56)【参考文献】
【文献】特表平11-500887(JP,A)
【文献】特開平11-177430(JP,A)
【文献】特開2011-244212(JP,A)
【文献】特開平03-245629(JP,A)
【文献】米国特許第07782805(US,B1)
【文献】欧州特許出願公開第00977411(EP,A1)
【文献】欧州特許出願公開第01351462(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 25/49
H03M 7/14
H03M 13/21
H04L 1/00
(57)【特許請求の範囲】
【請求項1】
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出する算出部と、
前記算出部で算出された前記第1のランニングディスパリティと前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定する判定部と、
前記判定部による判定結果に基づき、前記データ列を反転または非反転し、前記判定部による判定結果を表すフラグを付加して出力する付加部と
を備え、
前記判定部は、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、
前記付加部は、前記制御コードに割り当てられているフラグを付加する
符号化装置。
【請求項2】
前記Nと前記Mは、奇数である
請求項1に記載の符号化装置。
【請求項3】
入力される所定のビット数の制御コードを、前記Nビットまたは前記Mビットの制御コードに変換する
請求項1に記載の符号化装置。
【請求項4】
前記Nビットは、前記所定のビット数よりも小さいビット数であり、前記Mビットは、前記所定のビット数よりも大きいビット数である
請求項3に記載の符号化装置。
【請求項5】
前記所定のビット数は、32ビットであり、前記Nビットは、31ビットであり、前記Mビットは33ビットである
請求項3に記載の符号化装置。
【請求項6】
前記変換は、前記所定のビット数の制御コードと、変換後の制御コードが関連づけられた表が参照されて変換される
請求項3に記載の符号化装置。
【請求項7】
前記Nビットまたは前記Mビットの前記制御コードと、前記制御コードに割り当てられているフラグを含むランニングディスパリティは、0である
請求項1に記載の符号化装置。
【請求項8】
前記Nビットまたは前記Mビットの制御データは、前記所定のビット数の制御コードの前半部分のデータ列と、前記所定のビット数の制御コードの前半部分を反転したデータ列を含む
請求項3に記載の符号化装置。
【請求項9】
前記前半部分のデータ列と、前記前半部分を反転したデータ列との間の2ビットのデータは、0と1である
請求項8に記載の符号化装置。
【請求項10】
前記前半部分のデータ列の前のビットのデータは、0である
請求項8に記載の符号化装置。
【請求項11】
前記Mビットの制御コードの先頭ビットとして、前記Mビットの前に前記Nビットに変換されたデータ列の最後のビットが設定され、
前記Mビットの制御コードの最後のビットは、前記先頭ビットの値を反転した値が設定される
請求項8に記載の符号化装置。
【請求項12】
前記Nビットのデータ列と前記Mビットのデータ列をそれぞれ1ブロックとし、2ブロックを1処理単位としたとき、複数の処理単位の最後のブロックの前記フラグは、前記複数の処理単位の最後のブロック以外のブロックに付加された前記フラグの排他的論理和の計算結果に設定される
請求項1に記載の符号化装置。
【請求項13】
前記最後のブロックは、反転しないデータ列として処理される
請求項12に記載の符号化装置。
【請求項14】
前記Nビットのデータ列と前記Mビットのデータ列をそれぞれ1ブロックとし、2ブロックを1処理単位としたとき、複数の処理単位の最後のブロックの後に、複数の処理単位に含まれる前記フラグをハミング(Humming)符号処理した結果を付加する
請求項1に記載の符号化装置。
【請求項15】
前記制御コードは、Idle Code, Start Code, End Code, Pad Code, Sync Code, Deskew Code, Standby Codeのいずれかである
請求項1に記載の符号化装置。
【請求項16】
符号化装置が、
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、
算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定し、
判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、
前記判定は、前記データ列が予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、
前記制御コードに割り当てられているフラグを付加する
符号化方法。
【請求項17】
符号化装置を制御するコンピュータに、
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、
算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定し、
判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、
前記判定は、前記データ列が予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、
前記制御コードに割り当てられているフラグを付加する
ステップを含む処理を実行させるためのプログラム。
【請求項18】
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定する第1の判定部と、
前記第1の判定部により、前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定する第2の判定部と、
前記第1の判定部により、前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する出力部と
を備える復号装置。
【請求項19】
復号装置が、
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定し、
前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、
前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する
復号方法。
【請求項20】
復号装置を制御するコンピュータが、
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定し、
前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、
前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する
ステップを含む処理を実行するためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は符号化装置、符号化方法、復号装置、復号方法、およびプログラムに関し、例えば、DCフリーな符号化、復号を行えるようにした符号化装置、符号化方法、復号装置、復号方法、およびプログラムに関する。
【背景技術】
【0002】
イメージセンサの高画質化、高フレームレート化に伴い、イメージセンサと、イメージセンサにより撮像された画像を処理するDSP(Digital Signal Processor)との間のインタフェースに求められるデータの伝送容量が高まってきている。
【0003】
イメージセンサ-DSP間などのチップ間のデータ伝送のインタフェースの規格として、MIPI(Mobile Industry Processor Interface)規格、SLVS-EC(Scalable Low Voltage Signaling-Embedded Clock)規格がある。
【0004】
特許文献1には、画像データを格納するパケットを複数レーンに分配し、複数レーンを介して、イメージセンサからDSPにデータを伝送する伝送方式が記載されている。この伝送方式においては、1フレームの各ラインを構成する画像データがイメージセンサにおいて各パケットに格納され、DSPに伝送される。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2012-120159号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
チップ間のデータ伝送においては、8b/10b符号化方式、64b/66b符号化方式、64b/67b符号化方式などの符号化方式が用いられ、その符号化方式に対応する復号方式で復号が行われていた。8b/10b符号化方式によると、伝送効率が低下してしまう可能性があった。また、64b/66b符号化方式ではDCフリーとならない可能性があった。64b/67b符号化方式によると、ランレングスが悪化し、受信側で正確な復号ができなくなる可能性があった。
【0007】
本技術は、このような状況に鑑みてなされたものであり、伝送効率が悪化することなく、ランニングディスパリティとランレングスを制御した符号化や復号を行えるようにするものである。
【課題を解決するための手段】
【0008】
本技術の一側面の符号化装置は、入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出する算出部と、前記算出部で算出された前記第1のランニングディスパリティと前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定する判定部と、前記判定部による判定結果に基づき、前記データ列を反転または非反転し、前記判定部による判定結果を表すフラグを付加して出力する付加部とを備え、前記判定部は、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、前記付加部は、前記制御コードに割り当てられているフラグを付加する符号化装置である。
【0009】
本技術の一側面の符号化方法は、符号化装置が、入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定し、判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、前記判定は、前記データ列が予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、前記制御コードに割り当てられているフラグを付加する符号化方法である。
【0010】
本技術の一側面の第1のプログラムは、符号化装置を制御するコンピュータに、入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティを加算した値の第1の絶対値と、前記第1のランニングディスパリティの反転した値と前記第2のランニングディスパリティを加算した値の第2の絶対値とを比較し、前記第2の絶対値の方が、前記第1の絶対値よりも小さい場合、前記データ列を反転すると判定し、判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、前記判定は、前記データ列が予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定し、前記制御コードに割り当てられているフラグを付加するステップを含む処理を実行させるためのプログラムである。
【0011】
本技術の一側面の復号装置は、入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定する第1の判定部と、前記第1の判定部により、前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定する第2の判定部と、前記第1の判定部により、前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する出力部とを備える復号装置である。
【0012】
本技術の一側面の復号方法は、復号装置が、入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定し、前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する復号方法である。
【0013】
本技術の一側面の第2のプログラムは、復号装置を制御するコンピュータが、入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かを判定し、前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力するステップを含む処理を実行するためのプログラムである。
【0014】
本技術の一側面の符号化装置、符号化方法、および第1のプログラムにおいては、入力されたデータがNビットまたはMビットに分割され、NビットまたはMビットのデータ列の第1のランニングディスパリティが算出され、算出された第1のランニングディスパリティと、第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティが加算された値の第1の絶対値と、第1のランニングディスパリティの反転した値と第2のランニングディスパリティが加算された値の第2の絶対値とが比較され、第2の絶対値の方が、第1の絶対値よりも小さい場合、データ列を反転すると判定され、判定結果に基づき、データ列を反転または非反転し、判定結果を表すフラグが付加されて出力され、判定は、データ列が予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードである場合、反転しないと判定され、制御コードに割り当てられているフラグが付加される。
【0015】
本技術の一側面の復号装置、復号方法、および第2のプログラムにおいては、入力されるNビットまたはMビットのデータ列に付加されているフラグが参照され、データ列が、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表される制御コードであるか否かが判定され、データ列が制御コードではないと判定された場合、データ列は、反転されているか否かが判定され、データ列は、制御コードであると判定された場合、入力されたNビットまたはMビットのデータ列が反転されずに出力され、データ列は、制御コードではなく、反転されていないと判定された場合、入力されたNビットまたはMビットのデータ列が反転されずに出力され、データ列は、制御コードではなく、反転されていると判定された場合、入力されたNビットまたはMビットのデータ列が反転されて出力される。
【0016】
なお、符号化装置または復号装置は、独立した装置であっても良いし、1つの装置を構成している内部ブロックであっても良い。
【0017】
また、プログラムは、伝送媒体を介して伝送することにより、または、記録媒体に記録して、提供することができる。
【図面の簡単な説明】
【0018】
図1】本技術を適用したデータ処理システムの一実施の形態の構成を示す図である。
図2】分割されるビット数について説明するための図である。
図3】エンコーダの構成例を示す図である。
図4】デコーダの構成例を示す図である。
図5】ランニングディスパリティの制御について説明するための図である。
図6】フラグについて説明するための図である。
図7】ランニングディスパリティとフラグの関係について説明するための図である。
図8】ランレングスの制御について説明するための図である。
図9】エンコードの処理について説明するためのフローチャートである。
図10】デコードの処理について説明するためのフローチャートである。
図11】エラー検出を行うデコーダの構成について説明するための図である。
図12】エラー検出を行うときのフラグの設定について説明するための図である。
図13】エラー検出を行うときのフラグの設定について説明するための図である。
図14】本技術を適用したデータ処理システムの他の実施の形態の構成を示す図である。
図15】伝送システムの構成例を示す図である。
図16】フレームフォーマットの例を示す図である。
図17】送信部と受信部の構成例を示す図である。
図18】ヘッダ構造を示す図である。
図19】ヘッダ情報の内容と情報量を示す図である。
図20】ビット配列の例を示す図である。
図21】各画素の画素値が8ビットで表される場合のPixel to Byte変換の例を示す図である。
図22】各画素の画素値が10ビットで表される場合のPixel to Byte変換の例を示す図である。
図23】各画素の画素値が12ビットで表される場合のPixel to Byte変換の例を示す図である。
図24】各画素の画素値が14ビットで表される場合のPixel to Byte変換の例を示す図である。
図25】各画素の画素値が16ビットで表される場合のPixel to Byte変換の例を示す図である。
図26】ペイロードデータの例を示す図である。
図27】ペイロードデータの他の例を示す図である。
図28】パリティが挿入されたペイロードデータの例を示す図である。
図29】ペイロードデータにヘッダを付加した状態を示す図である。
図30】ペイロードデータにヘッダとフッタを付加した状態を示す図である。
図31】パリティが挿入されたペイロードデータにヘッダを付加した状態を示す図である。
図32】パケットデータの割り当ての例を示す図である。
図33】制御コードの例を示す図である。
図34】K Characterの値を示す図である。
図35】Pad Codeの挿入の例を示す図である。
図36】制御コード挿入後のパケットデータの例を示す図である。
図37】Data Skewの補正の例を示す図である。
図38】撮像装置の処理について説明するフローチャートである。
図39図38のステップS102において行われるデータ送信処理について説明するフローチャートである。
図40図38のステップS103において行われるデータ受信処理について説明するフローチャートである。
図41】レーン数を切り替える場合の制御シーケンスを示す図である。
図42】伝送システムの他の構成例を示す図である。
図43】プレエンコーダを備えたエンコーダの構成例を示す図である。
図44】ケース1における変換について説明するための図である。
図45】ケース2における変換について説明するための図である。
図46】変換表の一例を示す図である。
図47】ケース3における変換について説明するための図である。
図48】ケース4における変換について説明するための図である。
図49】データの変換方法について説明するための図である。
図50】データの変換方法について説明するための図である。
図51】エンコード処理について説明するためのフローチャートである。
図52】デコード処理について説明するためのフローチャートである。
図53】エラー発生時の制御コードについて説明するための図である。
図54】反転禁止のデータ列について説明するための図である。
図55】エンコーダに関わる構成例を示す図である。
図56】エンコーダに関わる他の構成例を示す図である。
図57】デコーダに関わる構成例を示す図である。
図58】エンコーダの他の構成例を示す図である。
図59】デコーダの他の構成例を示す図である。
図60】エンコーダの他の処理について説明するためのフローチャートである。
図61】デコーダの他の処理について説明するためのフローチャートである。
図62】コンピュータの構成例を示すブロック図である。
図63】内視鏡手術システムの概略的な構成の一例を示す図である。
図64】カメラヘッド及びCCUの機能構成の一例を示すブロック図である。
【発明を実施するための形態】
【0019】
以下に、本技術を実施するための形態(以下、実施の形態という)について説明する。
【0020】
<システム構成例>
図1は、本技術を適用したデータ処理システムの構成例を示す図である。データ処理システム1は、データをエンコード(符号化)するエンコーダ(符号化装置)11と、符号化されたデータをデコード(複合)するデコーダ(復号装置)12を含む構成とされている。
【0021】
本技術を適用した符号化方式や復号方式について説明する前に、従来の符号化方式の一例を説明する。従来の符号化方式として、8b/10b符号化方式がある。8b/10b符号化方式は、8ビットのデータを10ビットのデータに符号化する方式であり、シリアルデータ中にクロックを埋め込むことでデータとクロックの転送を同じ配線で行う。
【0022】
しかしながら、8ビットを10ビットに変換するため、帯域を20%ロスしてしまう。そこで、64b/66b符号化方式も提案されている64b/66b符号化方式は、8b/10b符号化方式と異なる手法で同様のことを実行する。64b/66b符号化方式は、8b/10b符号化方式で用いられているコードテーブルの代わりにスクランブリングという技術が用いられている。
【0023】
スクランブリングにより、符号化データの0と1のパターンは、頻繁なシフトによってランダム化され、0と1が高確率で連続しないように制御される。そのようにランダム化された符号化データであっても、受信側では、再び元に戻すことができるように構成されている。このようなスクランブリングにより、出力データのランダム化が行われ、DCバランスが均衡になる。
【0024】
64b/66bは、0または1の累積値であるランニングディスパリティが制御されないため、完全なDCフリーが保証されるわけではない。ランニングディスパリティが制御される符号化方式として、64b/67b符号化方式も提案されている。64b/67b符号化方式によると、ランニングディスパリティは制御されるが、0または1が連続することで発生するランレングスが制御されない場合がある。
【0025】
これらのことにより、64b/66b符号化方式、64b/67b符号化方式のいずれにおいても、伝送されるデータ系列によっては、ランニングディスパリティ、ランレングスが悪化する場合があり、受信側(デコード側)のクロック再生性能に悪影響及ぼす可能性がある。また、64b/67b符号化方式によると、伝送するデータの64ビットに対して、制御用のデータとして3ビットのデータが必要となるため、伝送効率が悪化してしまう。
【0026】
そこで、以下に説明する本技術を適用した、DCフリーであり、ランニングディスパリティを制御し、ランレングスも制御する符号化方式であり、伝送効率の劣化を抑制する符号化方式について説明する。また、そのような符号化方式で符号化されたデータを復号する復号方式についても適宜説明を加える。
【0027】
本技術を適用したエンコーダ11は、入力されたデータ列を図2に示すようなデータ列に変換する。図2のAに示したように、エンコーダ11は、入力されたデータ列をNビットのデータ列に分け、Nビット毎に、その先頭に1ビットのフラグを付加する。
【0028】
または図2のBに示したように、エンコーダ11は、入力されたデータをNビットとMビットのデータ列に分け、Nビットのデータ列の先頭に1ビットのフラグを付加し、Mビットのデータ列の先頭に1ビットのフラグを付加する。
【0029】
以下の説明において、NビットまたはMビットのデータ列を、1ブロックと記述する。また、Nビットのデータ列に1ビットのフラグを付加した(N+1)ビットのデータ列も、適宜、1ブロックと記述する。同様に、Mビットのデータ列に1ビットのフラグを付加した(M+1)ビットのデータ列も、適宜、1ブロックと記述する。
【0030】
エンコーダ11は、入力されたデータを、図2のAに示したように、同じビット数に分ける符号化を行うようにしてもよいし、図2のBに示したように異なるビット数に分ける符号化を行うようにしてもよい。
【0031】
N、Mは、奇数である。Nビットに1ビットのフラグが付加されるため、(N+1)ビットは、偶数となる。また、(M+1)ビットも、偶数となる。このように、フラグを含む1ブロックは偶数ビットとなるようにNまたはMは設定されている。
【0032】
以下の説明では、図2のBに示したように、入力されたデータ列をNビットとMビットに分割される例を主に例に挙げて説明するが、図2のAに示したように、入力されたデータ列をNビットに分割される場合にも以下に説明する本実施の形態は適用できる。換言すれば、N=Mの場合であっても、本実施の形態は適用できる。
【0033】
<エンコーダの構成>
図3は、エンコーダ11の構成を示す図である。エンコーダ11は、反転部31、選択部32、付加部33、ビットチェック部34、RDチェック部35、RLチェック部36、およびフラグ判定部37を含む構成とされている。
【0034】
エンコーダ11に入力されたデータは、反転部31、選択部32、ビットチェック部34のそれぞれに供給される。反転部31は、供給されたデータを反転する。反転部31は、入力されたデータが、“1”である場合、“0”に変換し、“0”である場合、“1”に変換する。反転部31で反転されたデータ(nビットのデータ列)は、選択部32に供給される。
【0035】
選択部32には、エンコーダ11に入力されたデータ列そのものも入力される。すなわち、選択部32には、反転されたデータ列と、反転されていないデータ列が入力される。選択部32は、フラグ判定部37からの判定結果に応じて、反転されたデータ列または判定されていないデータ列のどちらか一方を、付加部33に供給する。
【0036】
付加部33は、フラグ判定部37から供給されるフラグを、選択部32から出力されたデータ列に付加する。たとえば、選択部32から、Nビットのデータ列が出力される場合、1ビットのフラグを付加し、(N+1)ビットのデータ列を出力する。フラグは、データが反転されているか否かを表すフラグである。以下の説明では、データが反転された場合のフラグは“1”であるとし、データが反転されていない場合のフラグは“0”であるとして説明を行うが、その他のフラグが設定されるようにしても本技術の適用範囲内である。
【0037】
ビットチェック部34は、入力されているデータ列をチェックする。ビットチェック部34は、入力されているデータ列のランニングディスパリティ(以下、RDと記述する)と、ランレングス(以下、RLと記述する)を監視している。
【0038】
ビットチェック部34は、入力されたデータが“1”である場合、“1”を割り当て、入力されたデータが“0”である場合、“-1”を割り当て、その割り当てた数値の累積加算した値を、累積値RDとする。また、ビットチェック部34は、入力されたデータの“1”が連続している回数RLと“0”が連続している回数RLを管理する。
【0039】
ビットチェック部34は、入力されるデータのランニングディスパリティや、ランレングスを算出する算出部として機能する。
【0040】
RDチェック部35は、過去の累積値RDをチェックする。RLチェック部36は、過去の回数RLをチェックする。RDチェック部35と、RLチェック部36は、ビットチェック部34がチェックしているデータ列よりも前の時点のデータ列における累積値RDと回数RLを、それぞれチェックする。
【0041】
フラグ判定部37は、ビットチェック部34、RDチェック部35、RLチェック部36からのチェック結果を用いて、データ列を反転するか否かを判定し、対応するフラグを生成する。詳細は後述するが、フラグ判定部37は、現在処理しているデータ列の累積値RD、回数RL、過去のデータ列の累積値RD、回数RLを用いて、データ列を反転するか否かを判定する。
【0042】
フラグ判定部37は、データを反転すると判定した場合、フラグとして“1”というデータを生成し、データを反転しないと判定した場合、フラグとして“0”というデータを生成し、選択部32と付加部33に供給する。
【0043】
選択部32は、“1”というフラグの供給を受けた場合、反転部31から供給されたデータ列を付加部33に出力し、そのデータ列に、付加部33は、“1”というフラグを付加する。また選択部32は、“0”というフラグの供給を受けた場合、エンコーダ11に入力された非反転のデータ列を付加部33に出力し、そのデータ列に、付加部33は、“0”というフラグを付加する。
【0044】
<デコーダの構成>
図4は、デコーダ12の構成を示す図である。デコーダ12は、反転部41、選択部42、およびフラグ判定部43を含む構成とされている。
【0045】
デコーダ12に入力されたデータは、反転部41、選択部42、およびフラグ判定部43のそれぞれに供給される。反転部41は、供給されたデータを反転し、選択部42に供給する。選択部42には、デコーダ12に入力された非反転のデータ列も入力される。
【0046】
フラグ判定部43は、デコーダ12に入力されたデータ列に含まれる1ビットのフラグを参照し、フラグが反転を示している場合、この場合、“1”である場合、選択部42に反転部41からのデータ列を選択し、出力するように指示を出す。また、フラグ判定部43は、デコーダ12に入力されたデータ列に含まれる1ビットのフラグを参照し、フラグが非反転を示している場合、この場合、“0”である場合、選択部42に反転部41を介さずに入力されたデータ列を選択し、出力するように指示を出す。
【0047】
このように、エンコーダ11においては、データ列に1ビットのフラグを付加し、デコーダ12においては、フラグを参照してデータ列が反転されているか否かを判定する処理が行われる。エンコーダ11側においては、符号化するデータがNビットである場合、1ビットのフラグが付加され、(N+1)ビットのデータ列に変換されるが、1ビット付加されるだけであるため、伝送効率の劣化を抑制した符号化を行うことができる。
【0048】
また、エンコーダ11側では、ランニングディスパリティ(RD)とランレングス(RL)を監視し、監視しているランニングディスパリティとランレングスに基づいた符号化を行うため、ランニングディスパリティとランレングスを制御した符号化を行うことができる。
【0049】
また、エンコーダ11側で行われた符号化に応じた復号を、デコーダ12側で行うことができる。デコーダ12側でも、ランニングディスパリティとランレングスに基づいて符号化されたデータを復号し、伝送効率の劣化が抑制された復号を行うことができる。
【0050】
<ランニングディスパリティの制御について>
エンコーダ11では、ビットチェック部34とRDチェック部35においてランニングディスパリティ(RD)が監視され、ランニングディスパリティに応じたフラグが設定されるように構成されている。ここで、ランニングディスパリティの制御について説明を加える。
【0051】
図5に示したグラフは、ランニングディスパリティの制御について説明するための図である。時間Tcは、現在(処理中)の時間を表し、時間Tpは、時間Tcよりも前の時間を表し、時間Tnは、時間Tcよりも後の時間を表す。
【0052】
ビットチェック部34(図3)は、時間Tcにおいて処理中のデータ列の累積値RDを算出する。RDチェック部35(図3)は、時刻Tcの前の時間まで、この場合、時刻Tpにおいて処理されたデータ列の累積値RDを参照する。累積値RDは、エンコーダ11における処理が開始されてから、データが“1”である場合、“1”とし、データが“0”である場合、“-1”として計算してきた値である。
【0053】
時間Tcにおいて、Nビットのデータ列が処理される場合を例にあげて説明する。換言すれば、エンコーダ11においては、図2のAに示したように、入力されたデータを、Nビット毎に分け、1ビットのフラグを付加し、1ブロックが(N+1)ビットのデータ列を生成する場合を例に挙げて説明する。
【0054】
図5に示したグラフのうち、細線で示したグラフL1は、時間Tpのときの累積値RDの変化を表す。時刻Tpが終了した時点(時間Tcが開始される時点)での累積値RDが、RD=(-5)であったとする。
【0055】
時間Tcに処理するNビットのデータ列が、全て“1”であるとする。時間Tcに処理するNビットのデータ列が、全て“1”であった場合、図5に太線で示したグラフL2のように、累積値RDは、(-5)を始点として、一直線に上昇するグラフとなる。この場合、データを反転していないため、フラグは“0”となる。よって、時間Tcが終了した時点(時間Tnが開始する時点)での累積値RDnext(A)は、時刻Tpが終了した時点の累積値RDと、時間Tcに計算された累積値RDを加算した値となる。
【0056】
時間Tcに計算された累積値RDを加算した値は、Nビットが全て“1”のため、Nとなる。フラグの“0”は、“-1”として累積値RDnext(A)に含まれるため、累積値RDnext(A)は、以下の値となる。
累積値RDnext(A)=(-5)+(-1)+N
【0057】
処理対象とされているNビットのデータ列のランニングディスパリティは、Nとなる。上記した累積値RDnext(A)は、前の時点まで算出されたランニングディスパリティに、現時点で算出されたランニングディスパリティを加算した値となる。
【0058】
時間Tcに処理するNビットのデータ列が、全て“1”であり、そのデータを全て反転した場合、全て“0”となり、図5に点線で示したグラフL3のように、累積値RDは、(-5)を始点として、一直線に下降するグラフとなる。この場合、データは反転されているため、フラグは“1”となる。フラグの“1”は、累積値RDを計算するときには、“1”とされ、この値も、累積値RDnext (R)に含まれる。
【0059】
累積値RDnext(R)は、以下の値となる。
累積値RDnext=(-5)+1+(-N)
【0060】
処理対象とされているNビットのデータ列を反転したときのNビットのデータ列のランニングディスパリティは、-Nとなる。上記した累積値RDnext(R)は、前の時点まで算出されたランニングディスパリティから、現時点で算出されたランニングディスパリティを減算した値となる。
【0061】
ランニングディスパリティは、0(RD=0)となるのが理想とされている。ランニングディスパリティが0となるのは、データとして、“0”と“1”の出現回数が同一となり、DCバランスがとれている状態である。
【0062】
ランニングディスパリティが0に近い値となるように制御するために、エンコーダ11においては、データを反転した場合の累積値RDと反転しない場合の累積値RDを比較し、RD=0に近い方の累積値RDとなる方を採用するように構成されている。
【0063】
すなわちこの場合、累積値RDnext(A)の絶対値と、累積値RDnext(R)の絶対値が比較され、0に近い方が採用される。図5に示した例では、累積値RDnext(A)の方が、累積値RDnext(R)よりもRD=0に近いため、累積値RDnext(A)が採用される。累積値RDnext(A)は、データを反転しない場合であるため、この場合、フラグとして“0”が設定される。
【0064】
エンコーダ11のビットチェック部34(図3)は、時刻Tcにおける処理を実行する。すなわちビットチェック部34は、入力されるNビットデータ列の累積値RDを算出する。例えば、ビットチェック部34は、図5のグラフL2を作成する処理を実行する。
【0065】
エンコーダ11のRDチェック部35(図3)は、時刻Tpにおける処理を実行する。図3に示したようにRDチェック部35には、付加部33から出力されたフラグを含むデータ列が入力される。付加部33から出力されるデータ列は、反転されたデータ列または非反転のデータ列である。すなわち、デコーダ12側に伝送されるデータ列が、RDチェック部35には入力される。
【0066】
RDチェック部35は、入力されるデータ列の累積値RDを、ビットチェック部34と同じようにして算出する。例えば、RDチェック部35は、図5のグラフL1を作成する処理を実行する。
【0067】
フラグ判定部37(図3)は、図5を参照して説明したように、累積値RDnext(A)と累積値RDnext(R)を比較し、0に近い方の累積値を判定し、その累積値に応じたフラグを生成する。例えば、フラグ判定部37は、図6に示す判定表に基づき、判定を行い、フラグを生成する。
【0068】
図6の判定表を参照するに、判定表は、時間Tc(現時点)の累積値RD(以下、累積値RDcとする)、時間Tp(過去)の累積値(以下、累積値RDpとする)、およびフラグが関連付けられている表である。
【0069】
図6の判定表は、時間Tcは、(現時点)でのデータを反転するか否かを判定するための表である。よって、累積値RDpは、時間Tp(過去)の時点、換言すれば、時間Tpから時間Tcに切り替わる時点でのフラグを含めた累積値である。累積値RDcは、時間Tcが終了時の累積値であり、フラグを含めない値である。
【0070】
累積値RDcがプラス(累積値RDc>0)の場合、累積値RDcがゼロ(累積値RDc=0)の場合、および累積値RDcがマイナス(累積値RDc<0)の場合に分類される。すなわち、ビットチェック部34から供給される累積値RDcが、プラスであるか、0であるか、マイナスであるかが、フラグ設定の1要因に設定されている。
【0071】
また、図6の判定表を参照するに、累積値RDpも、累積値RDpがプラス(累積値RDp>0)の場合、累積値RDpがゼロ(累積値RDp=0)の場合、および累積値RDpがマイナス(累積値RDp<0)の場合に分類される。すなわち、RDチェック部35から供給される累積値RDpが、プラスであるか、0であるか、マイナスであるかが、フラグ設定の1要因に設定されている。
【0072】
累積値RDc>0であり、累積値RDp>0である場合、フラグは“1”に設定される。すなわちこの場合、データは反転される。累積値RDc>0であり、累積値RDp=0である場合、フラグは“1”に設定される。すなわちこの場合、データは反転される。累積値RDc>0であり、累積値RDp<0である場合、フラグは“0”に設定される。すなわちこの場合、データは非反転とされる。
【0073】
なお、累積値RDc>0であり、累積値RDp=0である場合、フラグは“0”に設定され、データは非反転とされるように設定されていてもよい。
【0074】
累積値RDc>0である場合について、図7のAを参照して説明を加える。図7においても、図6と同じく、累積値RDpは、時間Tpのフラグを含めた累積値であり、累積値RDcは、時間Tcのフラグを含めない値であるとして説明を続ける。
【0075】
図7のAにおいては、累積値RDc>0であり、累積値RDp>0である場合のグラフをグラフL11として表し、累積値RDc>0であり、累積値RDp=0である場合のグラフをグラフL12として表し、累積値RDc>0であり、累積値RDp<0である場合のグラフをグラフL13として表している。なお、累積値RDpと累積値RDcを2点とし、その2点を通る(2点を結ぶ)直線であり、その直線をグラフと記載している。
【0076】
累積値RDc>0の場合、累積値RDpを始点としたグラフL11乃至L13は、増加するグラフ(右上がりのグラフ)となる。すなわち、グラフL11を参照するに、累積値RDp>0を始点とした場合、累積値RDc>0であるため、累積値RDpよりも大きな値となり、0から離れる方向に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを反転すると判定し、フラグとして“1”を設定する。データを反転すると、L11のグラフは、右下がりのグラフとなり、0に近づくことがわかる。
【0077】
グラフL12を参照するに、累積値RDp=0を始点とした場合、累積値RDc>0であるため、累積値RDp(=0)よりも大きな値となり、0から離れる方向に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを反転すると判定し、フラグとして“1”を設定する。または累積値RDを0に近づけるために、フラグ判定部37は、データを非反転とすると判定し、フラグとして“0”を設定するようにしてもよい。累積値RDp=0の場合、反転しても、反転しなくても、0からの距離は同じとなるため、反転すると判定するように設定しておいてもよいし、非反転とすると判定するように設定しておいてもよい。
【0078】
累積値RDc>0である場合、すなわち、処理しているデータ列の累積値RDがプラスである場合、処理しているデータ列は、“1”を多く含むデータ列であることになる。フラグの値も、累積値RDに含まれるため、処理しているデータ列が、“1”を多く含むデータ列である場合、フラグとして“0”を設定することで、累積値RDを0に近づけることができる。このようなことを考慮し、累積値RDp=0であり、累積値RDc>0である場合、フラグとして“0”が設定されるようにしてもよい。
【0079】
グラフL13を参照するに、累積値RDp<0を始点とした場合、累積値RDc>0であるため、累積値RDpよりも大きな値となり、0に近づく方向(マイナス領域からプラス領域に向かう方向)に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを非反転とすると判定し、フラグとして“0”を設定する。
【0080】
図6を参照した説明に戻る。累積値RDc=0であり、累積値RDp>0である場合、フラグは“0”に設定される。すなわちこの場合、データは反転されない。累積値RDc=0であり、累積値RDp=0である場合、フラグは“0”に設定される。すなわちこの場合、データは反転されない。累積値RDc=0であり、累積値RDp<0である場合、フラグは“1”に設定される。すなわちこの場合、データは非反転とされる。
【0081】
なお、累積値RDc=0であり、累積値RDp=0である場合、フラグは“1”に設定され、データは反転されるように設定されていてもよい。
【0082】
累積値RDc=0である場合について、図7のBを参照して説明を加える。図7のBにおいては、累積値RDc=0であり、累積値RDp>0である場合のグラフをグラフL21として表し、累積値RDc=0であり、累積値RDp=0である場合のグラフをグラフL22として表し、累積値RDc=0であり、累積値RDp<0である場合のグラフをグラフL23として表している。
【0083】
累積値RDc=0の場合、累積値RDpを始点としたグラフL21乃至L23は、値が変化しないグラフとなる。すなわち、グラフL21を参照するに、累積値RDp>0を始点とした場合、累積値RDc=0であるため、累積値RDpの値のままであり、0からの距離が一定のグラフとなる。よって、このような場合、データを反転しても、反転しなくても、0からの距離は変わらないため、フラグ判定部37は、データを反転しない判定し、フラグとして“0”を設定するようにしてもよいし、データを反転すると判定し、フラグとして“1”を設定するようにしてもよい。
【0084】
フラグとして“0”が設定されることで、累積値RDを算出するときの値として、“-1”が用いられるため、累積値RDp>0の場合、-1だけ、0に近づくことになる。ここでは、フラグとして“0”が設定されるとして説明を続ける。
【0085】
グラフL22を参照するに、累積値RDp=0を始点とした場合、累積値RDc=0であるため、累積値RDp(=0)が維持されたグラフとなる。よって、このような場合、良好な状態なので、データを反転しても、しなくてもよいため、フラグ判定部37は、データを反転すると判定し、フラグとして“1”を設定するようにしてもよいし、またはデータを非反転とすると判定し、フラグとして“0”を設定するようにしてもよい。
【0086】
グラフL23を参照するに、累積値RDp<0を始点とした場合、累積値RDc=0であるため、累積値RDpの値のままであり、0からの距離が一定のグラフとなる。よって、このような場合、データを反転しても、反転しなくても、0からの距離は変わらないため、フラグ判定部37は、データを反転しない判定し、フラグとして“0”を設定するようにしてもよいし、データを反転すると判定し、フラグとして“1”を設定するようにしてもよい。
【0087】
フラグとして“1”が設定されることで、累積値RDを算出するときの値として、“1”が用いられるため、累積値RDp<0の場合、1だけ、0に近づくことになる。ここでは、フラグとして“1”が設定されるとして説明を続ける。
【0088】
図6を参照した説明に戻る。累積値RDc<0であり、累積値RDp>0である場合、フラグは“0”に設定される。すなわちこの場合、データは反転されない。累積値RDc<0であり、累積値RDp=0である場合、フラグは“0”に設定される。すなわちこの場合、データは反転されない。累積値RDc<0であり、累積値RDp<0である場合、フラグは“1”に設定される。すなわちこの場合、データは反転される。
【0089】
なお、累積値RDc<0であり、累積値RDp=0である場合、フラグは“1”に設定され、データは反転されるように設定されていてもよい。
【0090】
累積値RDc<0である場合について、図7のCを参照して説明を加える。図7のCにおいては、累積値RDc<0であり、累積値RDp>0である場合のグラフをグラフL31として表し、累積値RDc<0であり、累積値RDp=0である場合のグラフをグラフL32として表し、累積値RDc<0であり、累積値RDp<0である場合のグラフをグラフL33として表している。
【0091】
累積値RDc<0の場合、累積値RDpを始点としたグラフL31乃至L33は、減少するグラフ(右下がりのグラフ)となる。すなわち、グラフL31を参照するに、累積値RDp>0を始点とした場合、累積値RDc<0であるため、累積値RDpよりも小さな値となり、0に近づく方向に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを反転しないと判定し、フラグとして“0”を設定する。
【0092】
グラフL32を参照するに、累積値RDp=0を始点とした場合、累積値RDc<0であるため、累積値RDp(=0)よりも小さな値となり、0から離れる方向に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを反転しないと判定し、フラグとして“0”を設定するようにしてもよいし、またはデータを反転すると判定し、フラグとして“1”を設定するようにしてもよい。累積値RDp=0の場合、反転しても、反転しなくても、0からの距離は同じとなるため、反転すると判定するように設定しておいてもよいし、非反転とすると判定するように設定しておいてもよい。
【0093】
累積値RDc<0である場合、すなわち、処理しているデータ列の累積値RDがマイナスである場合、処理しているデータ列は、“0”を多く含むデータ列であることになる。フラグの値も、累積値RDに含まれるため、処理しているデータ列が、“0”を多く含むデータ列である場合、フラグとして“1”を設定することで、累積値RDを0に近づけることができる。このようなことを考慮し、累積値RDp=0であり、累積値RDc<0である場合、フラグとして“1”が設定されるようにしてもよい。
【0094】
グラフL33を参照するに、累積値RDp<0を始点とした場合、累積値RDc<0であるため、累積値RDpよりも小さな値となり、0から遠ざかる方向に進むグラフとなる。よって、このような場合、累積値RDを0に近づけるために、フラグ判定部37は、データを反転すると判定し、フラグとして“1”を設定する。データを反転すると、L33のグラフは、右上がりのグラフとなり、0に近づくことがわかる。
【0095】
このように、フラグ判定部37は、過去の累積値RDと、現在処理している累積値RDとからフラグを設定する。
【0096】
このように、ランニングディスパリティ(RD)が監視され、累積値RDが0に近づくように、必要に応じてデータが反転されることで、DCフリーとなるように制御することができる。さらにデータ列として、0が連続したり、1が連続したりする、いわゆるランレングスも制御することで、より好ましい符号化、復号が行えるようになる。
【0097】
<ランレングスの制御について>
エンコーダ11では、ビットチェック部34とRLチェック部36においてランレングス(RL)が監視され、ランレングスに応じたフラグが設定(変更)されるように構成されている。ここで、ランレングスの制御について説明を加える。
【0098】
図8に示したグラフは、ランレングスの制御について説明するための図である。図8に示したグラフにおいても、図5に示したグラフと同じく、時間Tcは、現在(処理中)の時間を表し、時間Tpは、時間Tcよりも前の時間を表し、時間Tnは、時間Tcよりも後の時間を表す。
【0099】
時間Tpから時間Tcに切り替わる時刻Tpcのときの累積値RDが、累積値RDpcであり、図8に示した例では、累積値RDpc>0の値である場合を想定する。また、時間Tpにおける累積値RDは、図8に示したグラフL51のように変化した場合を想定する。
【0100】
時間Tcにおいて処理されているデータ列の累積値RDは、図8のグラフL52に示したように、データとして1が連続しているため、累積値RDpcから上昇し、時間Tcの終了間近に一旦下がり、最終的に時間Tcから時間Tnに切り替わる時刻Tcnのとき、累積値RDcnとなる。
【0101】
時間Tcに処理されるデータ列を反転した場合のグラフを、グラフL53として示す。グラフL53は、グラフL52を反転したグラフとなるため、データとして0が連続し、累積値RDpcから下降し、時間Tcの終了間近に一旦上がり、最終的に時間Tcから時間Tnに切り替わる時刻Tcnのとき、累積値RDcn’となる。
【0102】
図8に示したように累積値RDが変化する場合、データを反転しないときの累積値RDcnよりも、データを反転したときの累積値RDcn’の方が、累積値RD=0に近い値となる。よって、ランニングディスパリティRDを考慮した場合、時間Tcにおけるデータは、反転すると判定され、フラグとして“1”が設定される。換言すれば、図6を再度参照するに、図8に示したグラフL51からグラフL52になるデータ列の場合、RDc>0であり、RDp>0に該当するため、フラグは、“1”に設定されることが、図6に示した表からも読み取れる。
【0103】
ここで、ランレングスについて考える。上記したように、ランニングディスパリティRDを考慮した結果、データを反転した場合、図8に示したグラフL51からグラフL53になる累積値RDとなる。データ列が反転されることで、グラフL51からグラフL53において、一直線に下降する区間がある。すなわち、0が連続している区間がある。
【0104】
図8を参照するに、時間Tpの所定の時刻(時刻Tp1とする)から、時刻Tpcまで、0が連続している。また、時間Tcのデータ列が反転されることにより、時刻Tpcから、時間Tcの所定の時刻(時刻Tc1とする)まで、0が連続している。すなわち、この場合、時刻Tp1から時刻Tc1までのデータは、0となっている。さらに換言するに、時刻Tp1から時刻Tc1までの数ビットのデータが0で連続している。
【0105】
このようにデータを反転することで、ランレングスが悪化する可能性がある。例えば、ランレングスの最大値(最大値RLmaxとする)を設定しておき、ランレングスが最大値RLmax以上(より大きく)になった場合、ランニングディスパリティRDを制御するためにデータを反転するとの判定を覆し、反転しないとの判定に変更する。
【0106】
図8に示した例では、時刻Tp1から時刻Tc1までの0が連続しているビット数(ランレングスRL)が、最大値RLmax以上である場合、反転しないとの判定に変更されるため、結果として、グラフL51からグラフL52に変化する累積値RD(データ列)となる。
【0107】
よって、グラフL51からグラフL52に変わるため、時刻Tpcにおいて、0の連続は途切れる、ランレングスの悪化は防がれる。このように、ランニングディスパリティRDにより、データを反転するか否かを一旦判定し、その判定結果でデータを処理した場合、ランレングスRLが悪化しないか否かが判定され、ランレングスRLが悪化する場合には、ランニングディスパリティRDによる判定が変更される。
【0108】
再度、図8を参照する。上記した説明においては、グラフL52は、現時点で処理されているデータ列の累積値RDのグラフであるとして説明した。次に、グラフL53が、現時点で処理されているデータ列の累積値RDのグラフである場合について説明を加える。
【0109】
グラフL53が、データを反転しないときの累積値RDのグラフである場合、データを反転しないときの時刻Tcnにおける累積値RDは、累積値RDcn’となる。また、データを反転したときの累積値RDのグラフは、グラフL52となるため、データを反転したときの時刻Tcnにおける累積値RDは、累積値RDcnとなる。
【0110】
累積値RDcn’と累積値RDcnを比較したとき、累積値RD=0に近い値は、累積値RDcn’である。よって、ランニングディスパリティRDを考慮した場合、時間Tcにおけるデータは、反転しないと判定され、フラグとして“0”が設定される。換言すれば、図6を再度参照するに、図8に示したグラフL51からグラフL53になるデータ列の場合、RDc<0であり、RDp>0に該当するため、フラグは、“0”に設定されることが、図6に示した表からも読み取れる。
【0111】
データ列が非反転の場合、グラフL51からグラフL53において、一直線に下降する区間がある。すなわち、0が連続している区間がある。上記した場合と同じく、時刻Tp1から時刻Tpcまで、0が連続している。また、時間Tcのデータ列が反転されないことにより、時刻Tpcから時刻Tc1まで、0が連続している。すなわち、この場合、時刻Tp1から時刻Tc1までのデータは、0となっている。さらに換言するに、時刻Tp1から時刻Tc1までの数ビットのデータが0で連続している。
【0112】
このようにデータを反転しない場合でも、ランレングスが悪化する可能性がある。このような場合も、ランレングスの最大値RLmaxを設定しておき、ランレングスが最大値RLmax以上(より大きく)になった場合、ランニングディスパリティRDを制御するためにデータを非反転とするとの判定を覆し、反転するとの判定に変更する。
【0113】
図8に示した例では、時刻Tp1から時刻Tc1までの0が連続しているビット数(ランレングスRL)が、最大値RLmax以上である場合、反転するとの判定に変更されるため、結果として、グラフL51からグラフL52に変化する累積値RD(データ列)となる。
【0114】
よって、グラフL51からグラフL52に変わるため、時刻Tpcにおいて、0の連続は途切れるため、ランレングスの悪化は防がれる。このように、ランニングディスパリティRDにより、データを反転するか否かを一旦判定し、その判定結果でデータを処理した場合、ランレングスRLが悪化しないか否かが判定され、ランレングスRLが悪化する場合には、ランニングディスパリティRDによる判定が変更される。
【0115】
このような制御は、ランレングスRLを優先させているため、ランニングディスパリティRDは悪化してしまう可能性がある。ランレングスRLをどの程度優先するか、換言すれば、最大値RLmaxの値は、システムに依存して設定されるようにすることができる。例えば、デコーダ12の復号能力が高い場合、例えば、ランレングスRLが大きくても復号できるような場合、最大値RLmaxの値を大きくし、ランレングスRLの優先度を低くすることができる。
【0116】
ここでは、0が連続する場合を例に挙げて説明したが、1が連続する場合も、同様に処理される。
【0117】
<エンコーダの処理について>
図9のフローチャートを参照し、エンコーダ11の処理について説明を加える。
【0118】
ステップS11において、エンコーダ11は、入力されたデータをNビットに分割し、Nビット毎にステップS12以降の処理を実行する。ここでは、Nビットの場合を例に挙げて説明するが、Mビットに分割する場合も、同様に処理が行われる。
【0119】
ステップS12において、ビットチェック部34は、処理中のNビットのデータ列の累積値RDを算出する。
【0120】
ステップS13において、フラグ判定部37は、ランニングディスパリティRDによる判定を行う。この判定は、図5乃至図7を参照して説明したように行われるため、詳細な説明は省略する。
【0121】
ステップS14において、ステップS13における判定結果が、データ列を反転するとの判定であったか否かが判定される。ステップS14において、データ列を反転するとの判定結果であったと判定された場合、ステップS15に処理が進められる。
【0122】
ステップS15において、フラグが1に設定される。ステップS16において、フラグが1に設定されたことによりデータ列が反転され、処理はステップS18に進められる。
【0123】
一方、ステップS14において、データ列は反転しないとの判定結果であったと判定された場合、ステップS17に処理が進められる。ステップS17において、フラグが1に設定され、処理はステップS18に進められる。
【0124】
ステップS18において、ランレングスRLによる判定が行われる。この判定は、図8を参照して説明したように行われるため、その詳細な説明は省略する。
【0125】
ステップS19において、ステップS18における判定結果が、フラグを変更する(ランニングディスパリティRDによる判定を覆す)との判定であったか否かが判定される。すなわち、ランニングディスパリティによる判定が行われた後、再度、ランレングスによる判定が行われ、ランニングディスパリティにより判定が維持されるか、または異なる判定結果が出される。
【0126】
ステップS18において、フラグを変更するとの判定結果であったと判定された場合、ステップS20に処理が進められる。ステップS20において、フラグが変更される。例えば、フラグが1に設定されていた場合、0に変更され、フラグが0に設定されていた場合、1に変更される。ステップS21において、フラグが変更されたことによりデータ列が反転され、処理はステップS22に進められる。
【0127】
一方、ステップS18において、フラグは変更しないとの判定結果であったと判定された場合、ステップS22に処理は進められる。
【0128】
ステップS22において、設定されたフラグを含めた1ブロックのデータ列におけるランニングディスパリティRDとランレングスRLが算出される。ステップS22において算出されるランニングディスパリティRDとランレングスRLは、上記した時間TpにおけるランニングディスパリティRDとランレングスRLとして用いられる。
【0129】
ステップS23において、フラグを含むデータ列(1ブロック)が、出力データ(符号化されたデータ)として、エンコーダ11から出力される。
【0130】
このように、エンコーダ11においては、エンコード処理が実行される。なお、図9に示したフローチャートにおいては、入力されたデータがNビットのデータ毎に処理される例を示したが、図2のBに示したように、NビットとMビットという異なるビット数でエンコードを行うようにした場合、図9におけるNビットで行われる処理を、適宜Mビットで行うことで実行できる。
【0131】
<デコーダの処理について>
図10のフローチャートを参照し、デコーダ12の処理について説明する。
【0132】
ステップS31において、デコーダ12は、入力された符号化されたデータのうち、(N+1)ビットを処理対象とする。なお、図2のBのように、1ブロックのデータ数が(N+1)ビットである場合と、(M+1)ビットである場合が混在しているような場合、(N+1)ビットまたは(M+1)ビットで処理されるようにすればよい。
【0133】
ステップS32において、フラグ判定部43は、(N+1)ビットの1ブロックに含まれる1ビットのフラグを参照し、そのフラグが1であるか否か、すなわちデータは反転されているか否かを判定する。
【0134】
ステップS32において、フラグは1であると判定された場合、ステップS33に処理は進められる。ステップS33において、選択部42は、反転部41を介して入力される反転されたデータを選択し、デコード結果として出力する。
【0135】
一方、ステップS32において、フラグは1ではない判定された場合、換言すれば、フラグは0であり、データは非反転であると判定された場合、ステップS34に処理は進められる。ステップS34において、選択部42は、反転部41を介さずに入力されたデータを選択し、デコード結果として出力する。
【0136】
このように、デコーダ12は、エンコーダ11で行われ符号化処理に対応する復号処理を実行する。
【0137】
<デコーダにおけるエラー検出について>
上記したように、エンコーダ11は、ランニングディスパリティRDが0に近づくように制御を行う。このことを利用し、デコーダ12側でエラーを検出することができる。
【0138】
エンコーダ11側でランニングディスパリティRDが小さくなるように制御していても、例えば、エンコーダ11とデコーダ12との間の伝送路上で誤りが発生すると、デコーダ12側で受信されたデータのランニングディスパリティRDは大きくなる可能性がある。デコーダ12側で受信されたデータを復号し、その復号されたデータのランニングディスパリティRDを計算し、その計算値が大きくなるような(増加傾向にある)場合、受信されたデータに誤りが含まれると判定することができる。
【0139】
図11に示すように、デコーダ12からの出力を入力し、ランニングディスパリティRDを計算し、エラーを検出するエラー検出部61をデコーダ12側に設ける構成とすることができる。図11に示したデコーダ12の内部構成は、図4に示したデコーダ12の構成と同様である。デコーダ12からは、復号されたデータが出力される。
【0140】
エラー検出部61は、デコーダ12から供給されるデコード後のデータのランニングディスパリティRDを算出する。算出されたランニングディスパリティRDが大きい場合、エラーが発生していると判定し、上位レイヤに、エラーがある可能性があるという情報を供給する。
【0141】
上位レイヤは、デコーダ12から出力されたデータの供給を受け、所定の処理を行うレイヤである。そのような上位レイヤは、エラー検出部61からエラーがある可能性があるとの情報を取得した場合、エラーがある可能性があることを前提として、供給されているデータを処理する。例えば、エラー訂正処理を強化した処理を行ったり、エラーがある可能性のあるデータは破棄したりするといった処理を行う。
【0142】
エラー検出部61は、ランニングディスパリティRDが大きくなったときにエラーが発生していると判定するが、例えば、所定の閾値を設定しておき、その閾値以上に、ランニングディスパリティRDが大きくなった場合に、エラーが発生していると判定するようにすることができる。また、処理しているデータのランニングディスパリティRDと、そのデータよりも前に処理されたデータのランニングディスパリティRDを比較し、その差分が所定の閾値以上大きくなったときに、エラーが発生していると判定するようにすることができる。
【0143】
このように、デコードを行う側でも、ランニングディスパリティRDを監視することで、受信されるデータに誤りが含まれる可能性があるか否かを判定することができる。また、デコード側でエラー検出ができるようにし、エラーが発生したときに対応できるように構成しておくことで、デコーダ12でデコードされた受信データの信頼性を向上させることができる。
【0144】
<フラグの信頼性の向上について>
上記したように、エンコーダ11側では、データを反転または非反転し、反転したか否かは、フラグを付加することでデコーダ12側が判断できるように構成されている。仮に、エンコーダ11からデコーダ12にデータが供給されるときに、エラーが発生し、フラグが変わってしまったような場合、デコーダ12側では正しく復号することができなくなってしまう。
【0145】
そこで、フラグにエラーが発生していないか否かを、デコーダ12側で判定できるようにする仕組みについて説明を加える。
【0146】
図12図13を参照した説明は、図2のBに示したように、符号化するデータを、NビットのブロックとMビットのブロックに分割して処理する場合を例に挙げて説明する。図12を参照するに、Nビットのブロック81-1のフラグがFLG1であり、Mビットのブロック81-2のフラグがFLG2であり、Nビットのブロック81-3のフラグがFLG3である。
【0147】
Mビットのブロック81-4のフラグは、FLG4となるが、このFLG4は、ブロック81-4のデータが反転されているか否かを表すフラグとしては用いられない。また、ブロック81-4のデータは、反転処理を行わないブロックとされる。換言すれば、ブロック81-4のデータは、ランニングディスパリティRDやランレングスRLの制御の対象とはされず、非反転とされるデータである。
【0148】
FLG4は、FLG1、FLG2、およびFLG3の排他的論理和(EXOR)の計算結果(パリティ)とされる。FLG4は、FLG1、FLG2、およびFLG3とは異なり、これらフラグのパリティとして、ブロック81-4に付加される。
FLG4=FLG1xorFLG2xorFLG3
【0149】
受信側では、FLG1乃至FLG4の排他的論理和を演算し、その値が0である場合、誤りなしと判定し、1である場合、誤りありと判定する。
FLG1xorFLG2xorFLG3xorFLG4=0 誤りなしと判定
FLG1xorFLG2xorFLG3xorFLG4=1 誤りありと判定
【0150】
このように、デコーダ12(受信側)では、FLG1、FLG2、FLG3、およびFLG4の全てが正しいか、いずれかが誤っているかを判定することができる。フラグに誤りが含まれると判定された場合には、デコーダ12よりも上位のレイヤに、エラーがある可能性があるという情報が供給されるようにする。上位レイヤは、デコーダ12から出力されたエラーがあるか否かの情報の供給を受けた場合、エラーがある可能性があることを前提として、供給されているデータを処理する。例えば、エラー訂正処理を強化した処理を行ったり、エラーがある可能性のあるデータは破棄したりするといった処理を行う。
【0151】
図12に示した例は、4つのブロック81毎に、1つのパリティとしてのフラグ(FLG4)が含まれる例である。何ブロック毎にパリティを含めるかは、システムに依存して設定されるようにしてもよいし、伝送路の状態を監視し、伝送路の状態により適宜変更されるようにしてもよい。
【0152】
パリティを多めに入れるようにした場合、ランニングディスパリティRDが制御されないブロック(図12に示した例におけるブロック81-4に該当するブロック)、換言すれば、ランニングディスパリティRDの悪化を防ぐために、データを反転すると判定されるブロックも、非反転として処理されるブロックが増える可能性がある。
【0153】
パリティを少なめに入れるようにした場合、エラーが発生したときに、不確定なフラグが多くなる。フラグが不確定な場合、そのようなフラグが付加されているブロック内のデータも不確定となり、エラーとして扱うデータ量が増える可能性がある。
【0154】
このようなことを考慮し、パリティを入れるブロック数が設定されるようにしてもよい。
【0155】
NビットのブロックとMビットのブロックに分けて符号化を行うような場合、Nビットの1ブロックとMビットの1ブロックの合計2ブロックを1処理単位として、数処理単位毎に、その数処理単位の最後のブロックのフラグがパリティとされる。図12に示した例は、2処理単位である場合である。また、図2のAに示したように、Nビットのブロックのみで符号化を行うような場合、少なくとも2ブロック以上を1処理単位とし、処理単位の最後のブロックのフラグがパリティとされる。
【0156】
パリティを入れるブロック数を設定するとき、処理単位も考慮して設定される。
【0157】
なお、図12に示した例では、図2のBに示したように、符号化するデータを、NビットのブロックとMビットのブロックに分割して処理する場合を例に挙げて説明したが、図2のAに示したように、符号化するデータを、Nビットのブロックに分割して処理する場合にも適用できる。
【0158】
図13は、フラグにエラーがあるか否かを判定するデータの他の構成を示す図である。図13も、図12に示した場合と同じく、ブロック81-1乃至81-4の4ブロック毎に、エラー検出するためのデータが挿入される例を示している。
【0159】
図13に示した例では、Nビットのブロック81-1のフラグがFLG1であり、Mビットのブロック81-2のフラグがFLG2であり、Nビットのブロック81-3のフラグがFLG3であり、Mビットのブロック81-4のフラグがFLG4である。
【0160】
ブロック81-1乃至81-4が順次符号化され、FLG4が付加された後に、FLG1乃至FLG4にハミング(humming)符号処理を行い、パリティビット(ハミング結果)が算出される。この算出されたパリティビット82は、ブロック81-4の後ろに付加され、送信される。
【0161】
図13に示したように4つのブロック81-1乃至81-4毎に、パリティビット82が付加される場合、FLG1、FLG2、FLG3、FLG4の4ビットに対して、3ビットのパリティビット82が生成され、付加される。この際、ハミング符号としては、(7,4,3)ハミング符号を用いることができる。
【0162】
ここで挙げたハミング符号は一例であり、他のハミング符号を適用することもできる。例えば、FLG1、FLG2、FLG3、FLG4の4ビットに対して、4ビットのパリティビット82が生成される(8,4,4)ハミング符号を適用することもできる。
【0163】
受信側(デコーダ12)は、ブロック81-1乃至81-4と、パリティビット82を受信したあと、ハミング復号を行うことで、FLG1、FLG2、FLG3、およびFLG4に誤りがないか否かを検出することができる。ハミング復号を行うことで、この場合、FLG1、FLG2、FLG3、およびFLG4のうちのいずれか1ビット(1つのフラグ)が誤ったことを検出し、訂正することができる。
【0164】
ここでは、ハミング符号、復号を用いた場合を例に挙げて説明したが、ハミング符号、復号以外の誤り訂正符号、復号を適用することもできる。また、ここでは、NビットのブロックとMビットのブロックに分けて符号化を行う場合を例に挙げて説明したが、Nビットのブロックだけに分けて符号化を行うような場合にも適用できる。
【0165】
NビットのブロックとMビットのブロックに分けて符号化を行うような場合、Nビットの1ブロックとMビットの1ブロックの合計2ブロックを1処理単位として、2処理単位以上(4ブロック以上)毎に、その処理単位の最後のブロックの後にパリティビット82が付加される。図12に示した例は、2処理単位である場合である。また、図2のAに示したように、Nビットのブロックのみで符号化を行うような場合、少なくとも2ブロック以上を1処理単位とし、処理単位の最後のブロックの後にパリティビット82が付加される。
【0166】
ハミング符号によるパリティビット82を多く入れるようにした場合、エラーに対する耐性を高めることができる。しかしながら、パリティビット82は、上記した例では3ビット必要となるため、入れるほど、伝送効率が悪化してしまう可能性がある。このようなことを考慮し、パリティビット82を入れるブロック数(処理単位数)は、システムに依存して設定されるようにすることもできる。
【0167】
なお、図13に示した例では、図2のBに示したように、符号化するデータを、NビットのブロックとMビットのブロックに分割して処理する場合を例に挙げて説明したが、図2のAに示したように、符号化するデータを、Nビットのブロックに分割して処理する場合にも適用できる。
【0168】
またNビットとしては、例えば32ビットとすることができる。N=32ビットであり、図13に示したように4ブロック毎に処理される場合、128ビットのデータ列が処理されることになる。その128ビットのデータ列に対して、4つのブロック毎に1ビットのフラグが付加され、さらにパリティビット82を4ビットとした場合、136ビットのデータ列となる。すなわち、この場合、128ビットのデータ列が136ビットのデータに変換されたことになる。
【0169】
このように、本技術には、128b/136b符号化方式を適用することもできる。
【0170】
このように、フラグに誤りがないか否かを、受信側で判定できるようにすることで、符号化や復号に対する信頼性を高めることができる。
【0171】
<他のシステム構成例>
図14は、データ処理システムの他の構成例を示す図である。図14に示したデータ処理システム1は、図1に示したデータ処理システム1と比較し、エンコーダ13とセレクタ14が追加された構成とされている点が異なり、他の部分は同様である。
【0172】
図14に示したデータ処理システム1は、上記したデータを反転する符号化(以下、適宜、反転符号化と記述する)を行うエンコーダ11と、反転符号化以外の符号化を行うエンコーダ13とを備える。また、エンコーダ11でエンコードされたデータ列を送信するか、エンコーダ13でエンコードされたデータ列を送信するかを選択するセレクタ14を備える構成とされている。
【0173】
エンコーダ13は、例えば、8b/10b符号化方式、64b/66b符号化方式、64b/67b符号化方式などの符号化方式を適用して符号化を行う。なお、図14では、エンコーダ13を1つだけ図示しているが、これらの符号化方式に対応して複数設けても良い。
【0174】
セレクタ14は、エンコーダ11からの出力、またはエンコーダ13からの出力を切り替えて出力する。セレクタ14は、外部の回路から供給される制御信号により出力を切り替える。また制御信号は、ユーザにより選択(設定)された符号化方式を表す信号であっても良い。
【0175】
なお、図14に示したデータ処理システム1は、エンコーダ11またはエンコーダ13からの符号化データを選択する位置に、セレクタ14が設けられている例を示したが、換言すれば、エンコーダ11とエンコーダ13の後段に、セレクタ14が設けられている例を示したが、エンコーダ11とエンコーダ13の前段に、セレクタ14が設けられている構成とすることもできる。すなわち、入力されたデータの供給先として、エンコーダ11またはエンコーダ13を選択する選択部として、セレクタ14が設けられていても良い。
【0176】
また、エンコーダ11とエンコーダ13の前段と後段に、それぞれセレクタ14を設ける構成としても良い。エンコーダ11とエンコーダ13の前段に設けられているセレクタ14は、外部からの制御信号に基づき、入力されたデータを、エンコーダ11またはエンコーダ13に供給する。
【0177】
エンコーダ11とエンコーダ13の後段に設けられたセレクタ14は、入力されたデータの供給先に設定されたエンコーダ11またはエンコーダ13からの出力を選択するセレクタ14として機能する。
【0178】
またエンコードを行わないエンコーダ11またはエンコーダ13には、電力が供給されないようにし、電力の消費が抑制される構成とすることもできる。
【0179】
また、エンコーダ11とデコーダ12は、入力されるデータの有効データ量に応じて、データの付加や削除を行う調整部が設けられていても良い。付加されるデータは、例えば、Pad Codeであっても良い。なお、Pad Codeとは、例えば、後述するSLVS-EC規格に図14に示したシステムを適用した場合に、画素データ帯域とPHY伝送帯域の差を埋めるためにペイロードデータ中に挿入されるシンボル群であり、このようなデータを付加するデータとして用いることができる。
【0180】
このような構成とすることで、符号化データの供給を受ける側が対応している復号方式に対応した符号化方式で符号化を行い、符号化データを生成し、供給することができる。
【0181】
図14に示したデータ処理システム1においては、デコーダ12側は、1つのデコーダしか図示していないが、エンコーダ側と同じく、エンコーダ11の符号化方式に対応したデコーダ12や、エンコーダ13の符号化方式に対応したデコーダ12など、複数のデコーダ12を備える構成とすることもできる。また、複数のデコーダ12のうちの1つにデコーダ12に対して符号化データを供給するセレクタ、または複数のデコーダ12のうちの1つのデコーダ12からの復号されたデータを選択するセレクタを備える構成とすることもできる。
【0182】
このように復号側も、複数のデコーダ12やセレクタを備える構成とした場合、セレクタに対する制御信号は外部の回路から入力されるものであっても良いし、ユーザによる設定に応じて入力されるものであっても良い。また、符号化する側で、符号化を行うとき、符号化方式を表す識別子を符号化データに付加するようにし、その識別子が、セレクタに供給されるようにしても良い。
【0183】
<SLVS-EC規格について>
上記した符号化や復号、換言すれば、図1に示したシステムは、以下に説明するSLVS-EC(Scalable Low Voltage Signaling-Embedded Clock)規格における符号化や復号を行う部分に適用できる。そこで、以下に、SLVS-EC規格について説明を加える。
【0184】
イメージセンサのインタフェースの規格としてSLVS-EC規格がある。SLVS-EC規格の伝送方式は、送信側においてクロックを重畳した形でデータを送信し、受信側においてクロックを再生してデータを復調・復号する方式である。
【0185】
<伝送システムの構成例>
図15は、伝送システムの構成例を示す図である。図15の伝送システム100は、イメージセンサ111とDSP112から構成される。イメージセンサ111とDSP112はそれぞれ異なるLSI(Large Scale Integrated Circuit)により構成され、デジタルカメラや携帯電話機などの、撮像機能を有する同じ撮像装置内に設けられる。イメージセンサ111には撮像部121と1つの送信部122が設けられ、DSP112には1つの受信部131と画像処理部132が設けられている。
【0186】
イメージセンサ111の撮像部121は、CMOS(Complementary Metal Oxide Semiconductor)などの撮像素子よりなり、レンズを介して受光した光の光電変換を行う。また、撮像部121は、光電変換によって得られた信号のA/D変換などを行い、1フレームの画像を構成する画素データを、1画素のデータずつ順に送信部122に出力する。
【0187】
送信部122は、撮像部121から供給された各画素のデータを、例えば撮像部121から供給された順に複数の伝送路に割り当て、複数の伝送路を介して並列にDSP112に送信する。図15の例においては、8本の伝送路を用いて画素データの伝送が行われている。イメージセンサ111とDSP112の間の伝送路は有線の伝送路であってもよいし、無線の伝送路であってもよい。以下、適宜、イメージセンサ111とDSP112の間の伝送路をレーン(Lane)という。
【0188】
DSP112の受信部131は、8本のレーンを介して送信部122から伝送されてきた画素データを受信し、各画素のデータを順に画像処理部132に出力する。
【0189】
画像処理部132は、受信部131から供給された画素データに基づいて1フレームの画像を生成し、生成した画像を用いて各種の画像処理を行う。イメージセンサ111からDSP112に伝送される画像データはRAWデータであり、画像処理部132においては、画像データの圧縮、画像の表示、記録媒体に対する画像データの記録などの各種の処理が行われる。
【0190】
<フレームフォーマット>
図16は、イメージセンサ111-DSP112間で1フレームの画像データを伝送するのに用いられるフォーマットの例を示す図である。
【0191】
有効画素領域A1は、撮像部121により撮像された1フレームの画像の有効画素の領域である。有効画素領域A1の左側には、垂直方向の画素数が有効画素領域A1の垂直方向の画素数と同じであるマージン領域A2が設定される。
【0192】
有効画素領域A1の上側には、水平方向の画素数が、有効画素領域A1とマージン領域A2全体の水平方向の画素数と同じである前ダミー領域A3が設定される。図16の例においては、前ダミー領域A3にはEmbedded Dataが挿入されている。Embedded Dataは、シャッタスピード、絞り値、ゲインなどの、撮像部121による撮像に関する設定値の情報が含まれる。後ダミー領域A4にEmbedded Dataが挿入されることもある。
【0193】
有効画素領域A1の下側には、水平方向の画素数が、有効画素領域A1とマージン領域A2全体の水平方向の画素数と同じである後ダミー領域A4が設定される。
【0194】
有効画素領域A1、マージン領域A2、前ダミー領域A3、および後ダミー領域A4から画像データ領域A11が構成される。
【0195】
画像データ領域A11を構成する各ラインの前にはヘッダが付加され、ヘッダの前にはStart Codeが付加される。また、画像データ領域A11を構成する各ラインの後ろにはフッタがオプションで付加され、フッタの後ろにはEnd Codeなどの後述する制御コードが付加される。フッタが付加されない場合、画像データ領域A11を構成する各ラインの後ろにEnd Codeなどの制御コードが付加される。
【0196】
撮像部121により撮像された1フレームの画像をイメージセンサ111からDSP112に伝送する毎に、図16に示すフォーマットのデータ全体が伝送データとして伝送される。
【0197】
図16の上側の帯は下側に示す伝送データの伝送に用いられるパケットの構造を示している。水平方向の画素の並びをラインとすると、パケットのペイロードには、画像データ領域A11の1ラインを構成する画素のデータが格納される。1フレームの画像データ全体の伝送は、画像データ領域A11の垂直方向の画素数以上の数のパケットを用いて行われることになる。
【0198】
1ライン分の画素データが格納されたペイロードに、ヘッダとフッタが付加されることによって1パケットが構成される。後に詳述するように、ヘッダには、Frame Start, Frame End, Line Valid, Line Number, ECCなどの、ペイロードに格納されている画素データの付加的な情報が含まれる。各パケットには、制御コードであるStart CodeとEnd Codeが少なくとも付加される。
【0199】
このように、1フレームの画像を構成する画素データをライン毎に伝送するフォーマットを採用することによって、ヘッダ等の付加的な情報やStart Code, End Codeなどの制御コードをライン毎のブランキング期間中に伝送することが可能になる。
【0200】
<送信部122と受信部131の構成>
図17は、送信部122と受信部131の構成例を示す図である。
【0201】
図17の左側に破線で囲んで示す構成が送信部122の構成であり、右側に破線で囲んで示す構成が受信部131の構成である。送信部122と受信部131は、それぞれ、リンクレイヤの構成と物理レイヤの構成からなる。実線L201より上側に示す構成がリンクレイヤの構成であり、実線L201より下側に示す構成が物理レイヤの構成である。
【0202】
なお、実線L101の上に示す構成はアプリケーションレイヤの構成である。システム制御部151、フレームデータ入力部152、およびレジスタ153は撮像部121において実現される。システム制御部151は、送信部122のLINK-TXプロトコル管理部161と通信を行い、フレームフォーマットに関する情報を提供するなどして画像データの伝送を制御する。フレームデータ入力部152は、ユーザによる指示などに応じて撮像を行い、撮像を行うことによって得られた画像を構成する各画素のデータを送信部122のPixel to Byte変換部162に供給する。レジスタ153は、Pixel to Byte変換のビット数やLane数等の情報を記憶する。レジスタ153に記憶されている情報に従って画像データの送信処理が行われる。
【0203】
また、アプリケーションレイヤの構成のうちのフレームデータ出力部241、レジスタ242、およびシステム制御部243は画像処理部132において実現される。フレームデータ出力部241は、受信部131から供給された各ラインの画素データに基づいて1フレームの画像を生成し、出力する。フレームデータ出力部241から出力された画像を用いて各種の処理が行われる。レジスタ242は、Byte to Pixel変換のビット数やLane数などの、画像データの受信に関する各種の設定値を記憶する。レジスタ242に記憶されている情報に従って画像データの受信処理が行われる。システム制御部243は、LINK-RXプロトコル管理部221と通信を行い、モードチェンジ等のシーケンスを制御する。
【0204】
<送信部122のリンクレイヤの構成>
はじめに、送信部122のリンクレイヤの構成について説明する。
【0205】
送信部122には、リンクレイヤの構成として、LINK-TXプロトコル管理部161、Pixel to Byte変換部162、ペイロードECC挿入部163、パケット生成部164、およびレーン分配部165が設けられる。LINK-TXプロトコル管理部161は、状態制御部171、ヘッダ生成部172、データ挿入部173、およびフッタ生成部174から構成される。
【0206】
LINK-TXプロトコル管理部161の状態制御部171は、送信部122のリンクレイヤの状態を管理する。
【0207】
ヘッダ生成部172は、1ライン分の画素データが格納されたペイロードに付加されるヘッダを生成し、パケット生成部164に出力する。
【0208】
図18は、ヘッダ生成部172により生成されるヘッダの構造を示す図である。
【0209】
上記したように、1パケット全体は、ヘッダと、1ライン分の画素データであるペイロードデータから構成される。パケットにはフッタが付加されることもある。ヘッダは、ヘッダ情報とHeader ECCから構成される。
【0210】
ヘッダ情報には、Frame Start, Frame End, Line Valid, Line Number, Reservedが含まれる。各情報の内容と情報量を図19に示す。
【0211】
Frame Startは、フレームの先頭を示す1ビットの情報である。図16の画像データ領域A11の1ライン目の画素データの伝送に用いられるパケットのヘッダのFrame Startには1の値が設定され、他のラインの画素データの伝送に用いられるパケットのヘッダのFrame Startには0の値が設定される。
【0212】
Frame Endは、フレームの終端を示す1ビットの情報である。有効画素領域A1の終端ラインの画素データをペイロードに含むパケットのヘッダのFrame Endには1の値が設定され、他のラインの画素データの伝送に用いられるパケットのヘッダのFrame Endには0の値が設定される。
【0213】
Frame StartとFrame Endが、フレームに関する情報であるフレーム情報となる。
【0214】
Line Validは、ペイロードに格納されている画素データのラインが有効画素のラインであるのか否かを表す1ビットの情報である。有効画素領域A1内のラインの画素データの伝送に用いられるパケットのヘッダのLine Validには1の値が設定され、他のラインの画素データの伝送に用いられるパケットのヘッダのLine Validには0の値が設定される。
【0215】
Line Numberは、ペイロードに格納されている画素データにより構成されるラインのライン番号を表す13ビットの情報である。
【0216】
Line ValidとLine Numberが、ラインに関する情報であるライン情報となる。
【0217】
Reservedは拡張用の32ビットの領域である。ヘッダ情報全体のデータ量は6バイトになる。
【0218】
図18に示すように、ヘッダ情報に続けて配置されるHeader ECCには、6バイトのヘッダ情報に基づいて計算された2バイトの誤り検出符号であるCRC(Cyclic Redundancy Check)符号が含まれる。また、Header ECCには、CRC符号に続けて、ヘッダ情報とCRC符号の組である8バイトの情報と同じ情報が2つ含まれる。
【0219】
すなわち、1つのパケットのヘッダには、同じヘッダ情報とCRC符号の組が3つ含まれる。ヘッダ全体のデータ量は、1組目のヘッダ情報とCRC符号の組の8バイトと、2組目のヘッダ情報とCRC符号の組の8バイトと、3組目のヘッダ情報とCRC符号の組の8バイトとの、あわせて24バイトになる。
【0220】
図20は、ヘッダ情報とCRC符号の1つの組を構成する8バイトのビット配列の例を示す図である。
【0221】
ヘッダを構成する8バイトのうちの1番目の1バイトであるバイトH7には、1ビット目から順に、Frame Start, Frame End, Line Validの各1ビットと、Line Numberの13ビットのうちの1~5ビット目が含まれる。また、2番目の1バイトであるバイトH6には、Line Numberの13ビットのうちの6~13ビット目が含まれる。
【0222】
3番目の1バイトであるバイトH5から6番目の1バイトであるバイトH2がReservedとなる。7番目の1バイトであるバイトH1と8番目の1バイトであるバイトH0にはCRC符号の各ビットが含まれる。
【0223】
図17の説明に戻り、ヘッダ生成部172は、システム制御部151による制御に従ってヘッダ情報を生成する。例えば、システム制御部151からは、フレームデータ入力部152が出力する画素データのライン番号を表す情報や、フレームの先頭、終端を表す情報が供給される。
【0224】
また、ヘッダ生成部172は、ヘッダ情報を生成多項式に適用してCRC符号を計算する。ヘッダ情報に付加されるCRC符号の生成多項式は例えば下式(1)により表される。
【数1】
【0225】
ヘッダ生成部172は、ヘッダ情報にCRC符号を付加することによってヘッダ情報とCRC符号の組を生成し、同じヘッダ情報とCRC符号の組を3組繰り返して配置することによってヘッダを生成する。ヘッダ生成部172は、生成したヘッダをパケット生成部164に出力する。
【0226】
データ挿入部173は、スタッフィング(stuffing)に用いられるデータを生成し、Pixel to Byte変換部162とレーン分配部165に出力する。Pixel to Byte変換部162に供給されたスタッフィングデータであるペイロードスタッフィングデータは、Pixel to Byte変換後の画素データに付加され、ペイロードに格納される画素データのデータ量の調整に用いられる。また、レーン分配部165に供給されたスタッフィングデータであるレーンスタッフィングデータは、レーン割り当て後のデータに付加され、レーン間のデータ量の調整に用いられる。
【0227】
フッタ生成部174は、システム制御部151による制御に応じて、適宜、ペイロードデータを生成多項式に適用して32ビットのCRC符号を計算し、計算により求めたCRC符号をフッタとしてパケット生成部164に出力する。フッタとして付加されるCRC符号の生成多項式は例えば下式(2)により表される。
【数2】
【0228】
Pixel to Byte変換部162は、フレームデータ入力部152から供給された画素データを取得し、各画素のデータを1バイト単位のデータに変換するPixel to Byte変換を行う。例えば、撮像部121により撮像された画像の各画素の画素値(RGB)は、8ビット、10ビット、12ビット、14ビット、16ビットのうちのいずれかのビット数で表される。
【0229】
図21は、各画素の画素値が8ビットで表される場合のPixel to Byte変換の例を示す図である。
【0230】
Data[0]がLSBを表し、数字の最も大きいData[7]がMSBを表す。白抜き矢印で示すように、この場合、画素Nの画素値を表すData[7]~[0]の8ビットは、Data[7]~[0]からなるByte Nに変換される。各画素の画素値が8ビットで表される場合、Pixel to Byte変換後のバイト単位のデータの数は、画素の数と同じ数になる。
【0231】
図22は、各画素の画素値が10ビットで表される場合のPixel to Byte変換の例を示す図である。
【0232】
この場合、画素Nの画素値を表すData[9]~[0]の10ビットは、Data[9]~[2]からなるByte 1.25*Nに変換される。
【0233】
画素N+1~N+3についても同様に、それぞれの画素値を表すData[9]~[0]の10ビットが、Data[9]~[2]からなるByte 1.25*N+1~Byte 1.25*N+3に変換される。また、画素N~N+3のそれぞれの下位のビットであるData[1]とData[0]が集められてByte 1.25*N+4に変換される。各画素の画素値が10ビットで表される場合、Pixel to Byte変換後のバイト単位のデータの数は、画素の数の1.25倍の数になる。
【0234】
図23は、各画素の画素値が12ビットで表される場合のPixel to Byte変換の例を示す図である。
【0235】
この場合、画素Nの画素値を表すData[11]~[0]の12ビットは、Data[11]~[4]からなるByte 1.5*Nに変換される。
【0236】
画素N+1についても同様に、画素N+1の画素値を表すData[11]~[0]の12ビットが、Data[11]~[4]からなるByte 1.5*N+1に変換される。また、画素Nと画素N+1のそれぞれの下位のビットであるData[3]~[0]が集められてByte 1.5*N+2に変換される。各画素の画素値が12ビットで表される場合、Pixel to Byte変換後のバイト単位のデータの数は、画素の数の1.5倍の数になる。
【0237】
図24は、各画素の画素値が14ビットで表される場合のPixel to Byte変換の例を示す図である。
【0238】
この場合、画素Nの画素値を表すData[13]~[0]の14ビットは、Data[13]~[6]からなるByte 1.75*Nに変換される。
【0239】
画素N+1~N+3についても同様に、それぞれの画素値を表すData[13]~[0]の14ビットが、Data[13]~[6]からなるByte 1.75*N+1~Byte 1.75*N+3に変換される。また、画素N~N+3のビットのうちの残ったビットが下位のビットから順に集められ、例えば、画素NのビットであるData[5]~[0]と、画素N+1のビットであるData[5],[4]がByte 1.75*N+4に変換される。
【0240】
同様に、画素N+1のビットであるData[3]~[0]と、画素N+2のビットであるData[5]~[2]がByte 1.75*N+5に変換され、画素N+2のビットであるData[1],[0]と、画素N+3のビットであるData[5]~[0]がByte 1.75*N+6に変換される。各画素の画素値が14ビットで表される場合、Pixel to Byte変換後のバイト単位のデータの数は、画素の数の1.75倍の数になる。
【0241】
図25は、各画素の画素値が16ビットで表される場合のPixel to Byte変換の例を示す図である。
【0242】
この場合、画素Nの画素値を表すData[15]~[0]の16ビットは、Data[15]~[8]からなるByte 2*NとData[7]~[0]からなるByte 2*N+1に変換される。各画素の画素値が16ビットで表される場合、Pixel to Byte変換後のバイト単位のデータの数は、画素の数の2倍の数になる。
【0243】
図17のPixel to Byte変換部162は、このようなPixel to Byte変換を例えばラインの左端の画素から順に各画素を対象として行う。また、Pixel to Byte変換部162は、Pixel to Byte変換によって得られたバイト単位の画素データに、データ挿入部173から供給されたペイロードスタッフィングデータを付加することによってペイロードデータを生成し、ペイロードECC挿入部163に出力する。
【0244】
図26は、ペイロードデータの例を示す図である。
【0245】
図26は、各画素の画素値が10ビットで表される場合のPixel to Byte変換によって得られた画素データを含むペイロードデータを示している。色を付していない1つのブロックが、Pixel to Byte変換後のバイト単位の画素データを表す。また、色を付している1つのブロックが、データ挿入部173により生成されたペイロードスタッフィングデータを表す。
【0246】
Pixel to Byte変換後の画素データは、変換によって得られた順に、所定の数のグループにグループ化される。図26の例においては、各画素データがグループ0~15の16グループにグループ化されており、画素P0のMSBを含む画素データがグループ0に割り当てられ、画素P1のMSBを含む画素データがグループ1に割り当てられている。また、画素P2のMSBを含む画素データがグループ2に割り当てられ、画素P3のMSBを含む画素データがグループ3に割り当てられ、画素P0~P3のLSBを含む画素データがグループ4に割り当てられている。
【0247】
画素P4のMSBを含む画素データ以降の画素データについても、グループ5以降の各グループに順に割り当てられる。ある画素データがグループ15に割り当てられたとき、それ以降の画素データは、グループ0以降の各グループに順に割り当てられる。なお、画素データを表すブロックのうち、3本の破線が内側に付されているブロックは、Pixel to Byte変換時に、画素N~N+3のLSBを含むようにして生成されたバイト単位の画素データを表す。
【0248】
送信部122のリンクレイヤにおいては、このようにしてグループ化が行われた後、クロック信号によって規定される期間毎に、各グループにおいて同じ位置にある画素データを対象として処理が並行して行われる。すなわち、図26に示すように16のグループに画素データが割り当てられた場合、各列に並ぶ16の画素データを同じ期間内に処理するようにして画素データの処理が進められる。
【0249】
上記したように、1つのパケットのペイロードには1ラインの画素データが含まれる。図26に示す画素データ全体が、1ラインを構成する画素データである。ここでは、図16の有効画素領域A1の画素データの処理について説明しているが、マージン領域A2等の他の領域の画素データについても有効画素領域A1の画素データとともに処理される。
【0250】
1ライン分の画素データがグループ化された後、各グループのデータ長が同じ長さになるように、ペイロードスタッフィングデータが付加される。ペイロードスタッフィングデータは1バイトのデータである。
【0251】
図26の例においては、グループ0の画素データにはペイロードスタッフィングデータが付加されず、破線で囲んで示すように、グループ1~15の各画素データには、終端にペイロードスタッフィングデータが1つずつ付加されている。画素データとスタッフィングデータからなるペイロードデータのデータ長(Byte)は下式(3)により表される。
【数3】
【0252】
式(3)のLineLengthはラインの画素数を表し、BitPixは1画素の画素値を表すビット数を表す。PayloadStuffingはペイロードスタッフィングデータの数を表す。
【0253】
図26に示すように画素データを16グループに割り当てるとした場合、ペイロードスタッフィングデータの数は下式(4)により表される。式(4)の%は剰余を表す。
【数4】
【0254】
図27は、ペイロードデータの他の例を示す図である。
【0255】
図27は、各画素の画素値が12ビットで表される場合のPixel to Byte変換によって得られた画素データを含むペイロードデータを示している。
【0256】
図27の例においては、画素P0のMSBを含む画素データがグループ0に割り当てられ、画素P1のMSBを含む画素データがグループ1に割り当てられ、画素P0と画素P1のLSBを含む画素データがグループ2に割り当てられている。画素P2のMSBを含む画素データ以降の画素データについても、グループ3以降の各グループに順に割り当てられる。画素データを表すブロックのうち、1本の破線が内側に付されているブロックは、Pixel to Byte変換時に、画素Nと画素N+1のLSBを含むようにして生成されたバイト単位の画素データを表す。
【0257】
図27の例においては、グループ0とグループ1の画素データにはペイロードスタッフィングデータが付加されず、グループ2~15の各画素データには、終端にペイロードスタッフィングデータが1つずつ付加されている。
【0258】
このような構成を有するペイロードデータがPixel to Byte変換部162からペイロードECC挿入部163に供給される。
【0259】
ペイロードECC挿入部163は、Pixel to Byte変換部162から供給されたペイロードデータに基づいて、ペイロードデータの誤り訂正に用いられる誤り訂正符号を計算し、計算により求めた誤り訂正符号であるパリティをペイロードデータに挿入する。誤り訂正符号として、例えばリードソロモン符号が用いられる。なお、誤り訂正符号の挿入はオプションであり、例えば、ペイロードECC挿入部163によるパリティの挿入と、フッタ生成部174によるフッタの付加はいずれか一方のみを行うことが可能とされる。
【0260】
図28は、パリティが挿入されたペイロードデータの例を示す図である。
【0261】
図28に示すペイロードデータは、図27を参照して説明した、各画素の画素値が12ビットで表される場合のPixel to Byte変換によって得られた画素データを含むペイロードデータである。斜線を付して示すブロックがパリティを表す。
【0262】
図28の例においては、グループ0~15の各グループの先頭の画素データから順に14個選択され、選択された224個(224バイト)の画素データに基づいて2バイトのパリティが求められている。2バイトのパリティが、その計算に用いられた224個の画素データに続けてグループ0,1の15番目のデータとして挿入され、224個の画素データと2バイトのパリティから1つ目のBasic Blockが形成される。
【0263】
このように、ペイロードECC挿入部163においては、基本的に、224個の画素データに基づいて2バイトのパリティが生成され、224個の画素データに続けて挿入される。
【0264】
また、図28の例においては、1つ目のBasic Blockに続く224個の画素データが各グループから順に選択され、選択された224個の画素データに基づいて2バイトのパリティが求められている。2バイトのパリティが、その計算に用いられた224個の画素データに続けてグループ2,3の29番目のデータとして挿入され、224個の画素データと2バイトのパリティから2つ目のBasic Blockが形成される。
【0265】
あるBasic Blockに続く画素データとペイロードスタッフィングデータの数である16×Mが224に満たない場合、残っている16×M個のブロック(画素データとペイロードスタッフィングデータ)に基づいて2バイトのパリティが求められる。また、求められた2バイトのパリティがペイロードスタッフィングデータに続けて挿入され、16×M個のブロックと2バイトのパリティからExtra Blockが形成される。
【0266】
ペイロードECC挿入部163は、パリティを挿入したペイロードデータをパケット生成部164に出力する。パリティの挿入が行われない場合、Pixel to Byte変換部162からペイロードECC挿入部163に供給されたペイロードデータは、そのままパケット生成部164に出力される。
【0267】
パケット生成部164は、ペイロードECC挿入部163から供給されたペイロードデータに、ヘッダ生成部172により生成されたヘッダを付加することによってパケットを生成する。フッタ生成部174によりフッタの生成が行われている場合、パケット生成部164は、ペイロードデータにフッタを付加することも行う。
【0268】
図29は、ペイロードデータにヘッダを付加した状態を示す図である。
【0269】
H7~H0の文字を付して示す24個のブロックは、ヘッダ情報、またはヘッダ情報のCRC符号である、バイト単位のヘッダデータを表す。図18を参照して説明したように1つのパケットのヘッダには、ヘッダ情報とCRC符号の組が3組含まれる。
【0270】
例えばヘッダデータH7~H2はヘッダ情報(6バイト)であり、ヘッダデータH1,H0はCRC符号(2バイト)である。
【0271】
図29の例においては、グループ0のペイロードデータには1つのヘッダデータH7が付加され、グループ1のペイロードデータには1つのヘッダデータH6が付加されている。グループ2のペイロードデータには1つのヘッダデータH5が付加され、グループ3のペイロードデータには1つのヘッダデータH4が付加されている。グループ4のペイロードデータには1つのヘッダデータH3が付加され、グループ5のペイロードデータには1つのヘッダデータH2が付加されている。グループ6のペイロードデータには1つのヘッダデータH1が付加され、グループ7のペイロードデータには1つのヘッダデータH0が付加されている。
【0272】
また、図29の例においては、グループ8のペイロードデータには2つのヘッダデータH7が付加され、グループ9のペイロードデータには2つのヘッダデータH6が付加されている。グループ10のペイロードデータには2つのヘッダデータH5が付加され、グループ11のペイロードデータには2つのヘッダデータH4が付加されている。グループ12のペイロードデータには2つのヘッダデータH3が付加され、グループ13のペイロードデータには2つのヘッダデータH2が付加されている。グループ14のペイロードデータには2つのヘッダデータH1が付加され、グループ15のペイロードデータには2つのヘッダデータH0が付加されている。
【0273】
図30は、ペイロードデータにヘッダとフッタを付加した状態を示す図である。
【0274】
F3~F0の文字を付して示す4個のブロックは、フッタとして生成された4バイトのCRC符号であるフッタデータを表す。図30の例においては、フッタデータF3~F0が、グループ0からグループ3のそれぞれのペイロードデータに付加されている。
【0275】
図31は、パリティが挿入されたペイロードデータにヘッダを付加した状態を示す図である。
【0276】
図31の例においては、パリティが挿入された図28のペイロードデータに対して、図29図30の場合と同様にヘッダデータH7~H0が付加されている。
【0277】
パケット生成部164は、このようにして生成した1パケットを構成するデータであるパケットデータをレーン分配部165に出力する。レーン分配部165に対しては、ヘッダデータとペイロードデータからなるパケットデータ、ヘッダデータとペイロードデータとフッタデータからなるパケットデータ、または、ヘッダデータと、パリティが挿入されたペイロードデータからなるパケットデータが供給されることになる。図18のパケット構造は論理的なものであり、リンクレイヤ、物理レイヤにおいては、図18の構造を有するパケットのデータがバイト単位で処理される。
【0278】
レーン分配部165は、パケット生成部164から供給されたパケットデータを、先頭のデータから順に、Lane0~7のうちのデータ伝送に用いる各レーンに割り当てる。
【0279】
図32は、パケットデータの割り当ての例を示す図である。
【0280】
ここでは、ヘッダデータとペイロードデータとフッタデータからなるパケットデータ(図30)の割り当てについて説明する。Lane0~7の8レーンを用いてデータ伝送を行う場合のパケットデータの割り当ての例を白抜き矢印#1の先に示す。
【0281】
この場合、ヘッダデータH7~H0の3回繰り返しを構成するそれぞれのヘッダデータは、先頭のヘッダデータから順にLane0~7に割り当てられる。あるヘッダデータがLane7に割り当てられたとき、それ以降のヘッダデータは、Lane0以降の各レーンに順に割り当てられる。Lane0~7の各レーンには同じヘッダデータが3個ずつ割り当てられることになる。
【0282】
また、ペイロードデータは、先頭のペイロードデータから順にLane0~7に割り当てられる。あるペイロードデータがLane7に割り当てられたとき、それ以降のペイロードデータは、Lane0以降の各レーンに順に割り当てられる。
【0283】
フッタデータF3~F0は、先頭のフッタデータから順に各レーンに割り当てられる。図32の例においては、ペイロードデータを構成する最後のペイロードスタッフィングデータがLane7に割り当てられており、フッタデータF3~F0がLane0~3に1つずつ割り当てられている。
【0284】
黒色を付して示すブロックはデータ挿入部173により生成されたレーンスタッフィングデータを表す。レーンスタッフィングデータは、1パケット分のパケットデータが各レーンに割り当てられた後、各レーンに割り当てられるデータ長が同じ長さになるように、データの数が少ないレーンに割り当てられる。レーンスタッフィングデータは1バイトのデータである。図32の例においては、データの割り当て数の少ないレーンであるLane4~7に対して、レーンスタッフィングデータが1つずつ割り当てられている。
【0285】
パケットデータがヘッダデータとペイロードデータとフッタデータからなる場合のレーンスタッフィングデータの数は下式(5)により表される。
【数5】
【0286】
式(5)のLaneNumはレーンの数を表し、PayloadLengthはペイロードデータ長(バイト)を表す。また、FooterLengthはフッタ長(バイト)を表す。
【0287】
また、パケットデータが、ヘッダデータと、パリティが挿入されたペイロードデータからなる場合のレーンスタッフィングデータの数は下式(6)により表される。式(6)のParityLengthは、ペイロードに含まれるパリティの総バイト数を表す。
【数6】
【0288】
Lane0~5の6レーンを用いてデータ伝送を行う場合のパケットデータの割り当ての例を白抜き矢印#2の先に示す。
【0289】
この場合、ヘッダデータH7~H0の3回繰り返しを構成するそれぞれのヘッダデータは、先頭のヘッダデータから順にLane0~5に割り当てられる。あるヘッダデータがLane5に割り当てられたとき、それ以降のヘッダデータは、Lane0以降の各レーンに順に割り当てられる。Lane0~5の各レーンには4個ずつヘッダデータが割り当てられることになる。
【0290】
また、ペイロードデータは、先頭のペイロードデータから順にLane0~5に割り当てられる。あるペイロードデータがLane5に割り当てられたとき、それ以降のペイロードデータは、Lane0以降の各レーンに順に割り当てられる。
【0291】
フッタデータF3~F0は、先頭のフッタデータから順に各レーンに割り当てられる。図32の例においては、ペイロードデータを構成する最後のペイロードスタッフィングデータがLane1に割り当てられており、フッタデータF3~F0がLane2~5に1つずつ割り当てられている。Lane0~5のパケットデータの数が同じ数であるから、この場合、レーンスタッフィングデータは用いられない。
【0292】
Lane0~3の4レーンを用いてデータ伝送を行う場合のパケットデータの割り当ての例を白抜き矢印#3の先に示す。
【0293】
この場合、ヘッダデータH7~H0の3回繰り返しを構成するそれぞれのヘッダデータは、先頭のヘッダデータから順にLane0~3に割り当てられる。あるヘッダデータがLane3に割り当てられたとき、それ以降のヘッダデータは、Lane0以降の各レーンに順に割り当てられる。Lane0~3の各レーンには6個ずつヘッダデータが割り当てられることになる。
【0294】
また、ペイロードデータは、先頭のペイロードデータから順にLane0~3に割り当てられる。あるペイロードデータがLane3に割り当てられたとき、それ以降のペイロードデータは、Lane0以降の各レーンに順に割り当てられる。
【0295】
フッタデータF3~F0は、先頭のフッタデータから順に各レーンに割り当てられる。図32の例においては、ペイロードデータを構成する最後のペイロードスタッフィングデータがLane3に割り当てられており、フッタデータF3~F0がLane0~3に1つずつ割り当てられている。Lane0~3のパケットデータの数が同じ数であるから、この場合、レーンスタッフィングデータは用いられない。
【0296】
レーン分配部165は、このようにして各レーンに割り当てたパケットデータを物理レイヤに出力する。以下、Lane0~7の8レーンを用いてデータを伝送する場合について主に説明するが、データ伝送に用いるレーンの数が他の数の場合であっても同様の処理が行われる。
【0297】
<送信部122の物理レイヤの構成>
次に、送信部122の物理レイヤの構成について説明する。
【0298】
送信部122には、物理レイヤの構成として、PHY-TX状態制御部181、クロック生成部182、信号処理部183-0乃至183-Nが設けられる。信号処理部183-0は、制御コード挿入部191、8B10Bシンボルエンコーダ192、同期部193、および送信部194から構成される。
【0299】
図1乃至図13を参照して説明した符号化を行うエンコーダ11は、8B10Bシンボルエンコーダ192の代わりに用いることができる。8B10Bシンボルエンコーダ192である場合を先に説明し、エンコーダ11を8B10Bシンボルエンコーダ192の代わりに用いた場合については、図42以降を参照して説明する。
【0300】
レーン分配部165から出力された、Lane0に割り当てられたパケットデータは信号処理部183-0に入力され、Lane1に割り当てられたパケットデータは信号処理部183-1に入力される。また、LaneNに割り当てられたパケットデータは信号処理部183-Nに入力される。
【0301】
このように、送信部122の物理レイヤには、信号処理部183-0乃至183-Nがレーンの数と同じ数だけ設けられ、各レーンを用いて伝送するパケットデータの処理が、信号処理部183-0乃至183-Nのそれぞれにおいて並行して行われる。信号処理部183-0の構成について説明するが、信号処理部183-1乃至183-Nも同様の構成を有する。
【0302】
PHY-TX状態制御部181は、信号処理部183-0乃至183-Nの各部を制御する。例えば、信号処理部183-0乃至183-Nにより行われる各処理のタイミングがPHY-TX状態制御部181により制御される。
【0303】
クロック生成部182は、クロック信号を生成し、信号処理部183-0乃至183-Nのそれぞれの同期部193に出力する。
【0304】
信号処理部183-0の制御コード挿入部191は、レーン分配部165から供給されたパケットデータに対して制御コードを付加する。制御コードは、予め用意された複数種類のシンボルの中から選択された1つのシンボルにより、または複数種類のシンボルの組み合わせにより表されるコードである。制御コード挿入部191により挿入される各シンボルは8ビットのデータである。後段の回路で8B10B変換が施されることによって、制御コード挿入部191により挿入された1シンボルは10ビットのデータになる。一方、受信部131においては後述するように受信データに対して10B8B変換が施されるが、受信データに含まれる10B8B変換前の各シンボルは10ビットのデータであり、10B8B変換後の各シンボルは8ビットのデータになる。
【0305】
図33は、制御コード挿入部191により付加される制御コードの例を示す図である。
【0306】
制御コードには、Idle Code, Start Code, End Code, Pad Code, Sync Code, Deskew Code, Standby Codeがある。
【0307】
Idle Codeは、パケットデータの伝送時以外の期間に繰り返し送信されるシンボル群である。Idle Codeは、8B10B CodeであるD CharacterのD00.0(00000000)で表される。
【0308】
Start Codeは、パケットの開始を示すシンボル群である。上記したように、Start Codeはパケットの前に付加される。Start Codeは、3種類のK Characterの組み合わせであるK28.5, K27.7, K28.2, K27.7の4シンボルで表される。それぞれのK Characterの値を図34に示す。
【0309】
End Codeは、パケットの終了を示すシンボル群である。上記したように、End Codeはパケットの後ろに付加される。End Codeは、3種類のK Characterの組み合わせであるK28.5, K29.7, K30.7, K29.7の4シンボルで表される。
【0310】
Pad Codeは、画素データ帯域とPHY伝送帯域の差を埋めるためにペイロードデータ中に挿入されるシンボル群である。画素データ帯域は、撮像部121から出力され、送信部122に入力される画素データの伝送レートであり、PHY伝送帯域は、送信部122から送信され、受信部131に入力される画素データの伝送レートである。Pad Codeは、4種類のK Characterの組み合わせであるK23.7, K28.4, K28.6, K28.3の4シンボルで表される。
【0311】
図35は、Pad Codeの挿入の例を示す図である。
【0312】
図35の上段は、Pad Code挿入前の、各レーンに割り当てられたペイロードデータを示し、下段は、Pad Code挿入後のペイロードデータを示す。図35の例においては、先頭から3番目の画素データと4番目の画素データの間、6番目の画素データと7番目の画素データの間、12番目の画素データと13番目の画素データの間にPad Codeが挿入されている。このように、Pad Codeは、Lane0~7の各レーンのペイロードデータの同じ位置に挿入される。
【0313】
Lane0に割り当てられたペイロードデータに対するPad Codeの挿入は信号処理部183-0の制御コード挿入部191により行われる。他のレーンに割り当てられたペイロードデータに対するPad Codeの挿入も同様に、信号処理部183-1乃至183-Nにおいてそれぞれ同じタイミングで行われる。Pad Codeの数は、画素データ帯域とPHY伝送帯域の差と、クロック生成部182が生成するクロック信号の周波数などに基づいて決定される。
【0314】
このように、Pad Codeは、画素データ帯域が狭く、PHY伝送帯域が広い場合に、双方の帯域の差を調整するために挿入される。例えば、Pad Codeが挿入されることによって、画素データ帯域とPHY伝送帯域の差が一定の範囲内に収まるように調整される。
【0315】
図33の説明に戻り、Sync Codeは、送信部122-受信部131間のビット同期、シンボル同期を確保するために用いられるシンボル群である。Sync Codeは、K28.5, Any**の2シンボルで表される。Any**は、どの種類のシンボルが用いられてもよいことを表す。Sync Codeは、例えば送信部122-受信部131間でパケットデータの伝送が開始される前のトレーニングモード時に繰り返し送信される。
【0316】
Deskew Codeは、レーン間のData Skew、すなわち、受信部131の各レーンで受信されるデータの受信タイミングのずれの補正に用いられるシンボル群である。Deskew Codeは、K28.5, Any**の2シンボルで表される。Deskew Codeを用いたレーン間のData Skewの補正については後述する。
【0317】
Standby Codeは、送信部122の出力がHigh-Z(ハイインピーダンス)などの状態になり、データ伝送が行われなくなることを受信部131に通知するために用いられるシンボル群である。すなわち、Standby Codeは、パケットデータの伝送を終了し、Standby状態になるときに受信部131に対して伝送される。Standby Codeは、K28.5, Any**の2シンボルで表される。
【0318】
制御コード挿入部191は、このような制御コードを付加したパケットデータを8B10Bシンボルエンコーダ192に出力する。
【0319】
図36は、制御コード挿入後のパケットデータの例を示す図である。
【0320】
図36に示すように、信号処理部183-0乃至183-Nにおいては、それぞれ、パケットデータの前にStart Codeが付加され、ペイロードデータにPad Codeが挿入される。パケットデータの後ろにはEnd Codeが付加され、End Codeの後ろにDeskew Codeが付加される。図36の例においては、Deskew Codeの後ろにIdle Codeが付加されている。
【0321】
8B10Bシンボルエンコーダ192は、制御コード挿入部191から供給されたパケットデータ(制御コードが付加されたパケットデータ)に対して8B10B変換を施し、10ビット単位のデータに変換したパケットデータを同期部193に出力する。
【0322】
同期部193は、8B10Bシンボルエンコーダ192から供給されたパケットデータの各ビットを、クロック生成部182により生成されたクロック信号に従って送信部194に出力する。なお、送信部122に同期部193が設けられないようにしてもよい。この場合、8B10Bシンボルエンコーダ192から出力されたパケットデータは、送信部194にそのまま供給される。
【0323】
送信部194は、Lane0を構成する伝送路を介して、同期部193から供給されたパケットデータを受信部131に送信する。8レーンを用いてデータ伝送が行われる場合、Lane1~7を構成する伝送路をも用いてパケットデータが受信部131に送信される。
【0324】
<受信部131の物理レイヤの構成>
次に、受信部131の物理レイヤの構成について説明する。
【0325】
受信部131には、物理レイヤの構成として、PHY-RX状態制御部201、信号処理部202-0乃至202-Nが設けられる。信号処理部202-0は、受信部211、クロック生成部212、同期部213、シンボル同期部214、10B8Bシンボルデコーダ215、スキュー補正部216、および制御コード除去部217から構成される。
【0326】
図1乃至図13を参照して説明した復号を行うデコーダ12は、10B8Bシンボルデコーダ215の代わりに用いることができる。10B8Bシンボルデコーダ215である場合を先に説明し、デコーダ12を10B8Bシンボルデコーダ215の代わりに用いた場合については、図42以降を参照して説明する。
【0327】
Lane0を構成する伝送路を介して送信されてきたパケットデータは信号処理部202-0に入力され、Lane1を構成する伝送路を介して送信されてきたパケットデータは信号処理部202-1に入力される。また、LaneNを構成する伝送路を介して送信されてきたパケットデータは信号処理部202-Nに入力される。
【0328】
このように、受信部131の物理レイヤには、信号処理部202-0乃至202-Nがレーンの数と同じ数だけ設けられ、各レーンを用いて伝送されてきたパケットデータの処理が、信号処理部202-0乃至202-Nのそれぞれにおいて並行して行われる。信号処理部202-0の構成について説明するが、信号処理部202-1乃至202-Nも同様の構成を有する。
【0329】
受信部211は、Lane0を構成する伝送路を介して送信部122から伝送されてきたパケットデータを表す信号を受信し、クロック生成部212に出力する。
【0330】
クロック生成部212は、受信部211から供給された信号のエッジを検出することによってビット同期をとり、エッジの検出周期に基づいてクロック信号を生成する。クロック生成部212は、受信部211から供給された信号を、クロック信号とともに同期部213に出力する。
【0331】
同期部213は、クロック生成部212により生成されたクロック信号に従って、受信部211において受信された信号のサンプリングを行い、サンプリングによって得られたパケットデータをシンボル同期部214に出力する。クロック生成部212と同期部213によりCDR(Clock Data Recovery)の機能が実現される。
【0332】
シンボル同期部214は、パケットデータに含まれる制御コードを検出することによって、または制御コードに含まれる一部のシンボルを検出することによってシンボル同期をとる。例えば、シンボル同期部214は、Start Code, End Code, Deskew Codeに含まれるK28.5のシンボルを検出し、シンボル同期をとる。シンボル同期部214は、各シンボルを表す10ビット単位のパケットデータを10B8Bシンボルデコーダ215に出力する。
【0333】
また、シンボル同期部214は、パケットデータの伝送が開始される前のトレーニングモード時に送信部122から繰り返し送信されてくるSync Codeに含まれるシンボルの境界を検出することによってシンボル同期をとる。
【0334】
10B8Bシンボルデコーダ215は、シンボル同期部214から供給された10ビット単位のパケットデータに対して10B8B変換を施し、8ビット単位のデータに変換したパケットデータをスキュー補正部216に出力する。
【0335】
スキュー補正部216は、10B8Bシンボルデコーダ215から供給されたパケットデータからDeskew Codeを検出する。スキュー補正部216によるDeskew Codeの検出タイミングの情報はPHY-RX状態制御部201に供給される。
【0336】
また、スキュー補正部216は、Deskew Codeのタイミングを、PHY-RX状態制御部201から供給された情報により表されるタイミングに合わせるようにしてレーン間のData Skewを補正する。PHY-RX状態制御部201からは、信号処理部202-0乃至202-Nのそれぞれにおいて検出されたDeskew Codeのタイミングのうち、最も遅いタイミングを表す情報が供給されてくる。
【0337】
図37は、Deskew Codeを用いたレーン間のData Skewの補正の例を示す図である。
【0338】
図37の例においては、Lane0~7の各レーンにおいて、Sync Code, Sync Code,…,Idle Code, Deskew Code, Idle Code, …, Idle Code, Deskew Codeの伝送が行われ、それぞれの制御コードが受信部131において受信されている。同じ制御コードの受信タイミングがレーン毎に異なり、レーン間のData Skewが生じている状態になっている。
【0339】
この場合、スキュー補正部216は、1つ目のDeskew CodeであるDeskew Code C1を検出し、Deskew Code C1の先頭のタイミングを、PHY-RX状態制御部201から供給された情報により表される時刻t1に合わせるように補正する。PHY-RX状態制御部201からは、Lane0~7の各レーンにおいてDeskew Code C1が検出されたタイミングのうち、最も遅いタイミングであるLane7においてDeskew Code C1が検出された時刻t1の情報が供給されてくる。
【0340】
また、スキュー補正部216は、2つ目のDeskew CodeであるDeskew Code C2を検出し、Deskew Code C2の先頭のタイミングを、PHY-RX状態制御部201から供給された情報により表される時刻t2に合わせるように補正する。PHY-RX状態制御部201からは、Lane0~7の各レーンにおいてDeskew Code C2が検出されたタイミングのうち、最も遅いタイミングであるLane7においてDeskew Code C2が検出された時刻t2の情報が供給されてくる。
【0341】
信号処理部202-1乃至202-Nのそれぞれにおいて同様の処理が行われることによって、図37の矢印#1の先に示すようにレーン間のData Skewが補正される。
【0342】
スキュー補正部216は、Data Skewを補正したパケットデータを制御コード除去部217に出力する。
【0343】
制御コード除去部217は、パケットデータに付加された制御コードを除去し、Start CodeからEnd Codeまでの間のデータをパケットデータとしてリンクレイヤに出力する。
【0344】
PHY-RX状態制御部201は、信号処理部202-0乃至202-Nの各部を制御し、レーン間のData Skewの補正などを行わせる。また、PHY-RX状態制御部201は、所定のレーンで伝送エラーが起きて制御コードが失われた場合、失われた制御コードに代えて、他のレーンで伝送されてきた制御コードを付加することによって制御コードの誤り訂正を行う。
【0345】
<受信部131のリンクレイヤの構成>
次に、受信部131のリンクレイヤの構成について説明する。
【0346】
受信部131には、リンクレイヤの構成として、LINK-RXプロトコル管理部221、レーン統合部222、パケット分離部223、ペイロードエラー訂正部224、およびByte to Pixel変換部225が設けられる。LINK-RXプロトコル管理部221は、状態制御部231、ヘッダエラー訂正部232、データ除去部233、およびフッタエラー検出部234から構成される。
【0347】
レーン統合部222は、物理レイヤの信号処理部202-0乃至202-Nから供給されたパケットデータを、送信部122のレーン分配部165による各レーンへの分配順と逆順で並び替えることによって統合する。
【0348】
例えば、レーン分配部165によるパケットデータの分配が図32の矢印#1の先に示すようにして行われている場合、各レーンのパケットデータの統合が行われることによって図32の左側のパケットデータが取得される。各レーンのパケットデータの統合時、データ除去部233による制御に従って、レーンスタッフィングデータがレーン統合部222により除去される。レーン統合部222は、統合したパケットデータをパケット分離部223に出力する。
【0349】
パケット分離部223は、レーン統合部222により統合された1パケット分のパケットデータを、ヘッダデータを構成するパケットデータとペイロードデータを構成するパケットデータに分離する。パケット分離部223は、ヘッダデータをヘッダエラー訂正部232に出力し、ペイロードデータをペイロードエラー訂正部224に出力する。
【0350】
また、パケット分離部223は、パケットにフッタが含まれている場合、1パケット分のデータを、ヘッダデータを構成するパケットデータとペイロードデータを構成するパケットデータとフッタデータを構成するパケットデータに分離する。パケット分離部223は、ヘッダデータをヘッダエラー訂正部232に出力し、ペイロードデータをペイロードエラー訂正部224に出力する。また、パケット分離部223は、フッタデータをフッタエラー検出部234に出力する。
【0351】
ペイロードエラー訂正部224は、パケット分離部223から供給されたペイロードデータにパリティが挿入されている場合、パリティに基づいて誤り訂正演算を行うことによってペイロードデータのエラーを検出し、検出したエラーの訂正を行う。例えば、図28に示すようにしてパリティが挿入されている場合、ペイロードエラー訂正部224は、1つ目のBasic Blockの最後に挿入されている2つのパリティを用いて、パリティの前にある224個の画素データの誤り訂正を行う。
【0352】
ペイロードエラー訂正部224は、各Basic Block, Extra Blockを対象として誤り訂正を行うことによって得られた誤り訂正後の画素データをByte to Pixel変換部225に出力する。パケット分離部223から供給されたペイロードデータにパリティが挿入されていない場合、パケット分離部223から供給されたペイロードデータはそのままByte to Pixel変換部225に出力される。
【0353】
Byte to Pixel変換部225は、ペイロードエラー訂正部224から供給されたペイロードデータに含まれるペイロードスタッフィングデータをデータ除去部233による制御に従って除去する。
【0354】
また、Byte to Pixel変換部225は、ペイロードスタッフィングデータを除去して得られたバイト単位の各画素のデータを、8ビット、10ビット、12ビット、14ビット、または16ビット単位の画素データに変換するByte to Pixel変換を行う。Byte to Pixel変換部225においては、図21乃至図25を参照して説明した、送信部122のPixel to Byte変換部162によるPixel to Byte変換と逆の変換が行われる。
【0355】
Byte to Pixel変換部225は、Byte to Pixel変換によって得られた8ビット、10ビット、12ビット、14ビット、または16ビット単位の画素データをフレームデータ出力部241に出力する。フレームデータ出力部241においては、例えば、ヘッダ情報のLine Validにより特定される有効画素の各ラインがByte to Pixel変換部225により得られた画素データに基づいて生成され、ヘッダ情報のLine Numberに従って各ラインが並べられることによって1フレームの画像が生成される。
【0356】
LINK-RXプロトコル管理部221の状態制御部231は、受信部131のリンクレイヤの状態を管理する。
【0357】
ヘッダエラー訂正部232は、パケット分離部223から供給されたヘッダデータに基づいてヘッダ情報とCRC符号の組を3組取得する。ヘッダエラー訂正部232は、ヘッダ情報とCRC符号の組の各組を対象として、ヘッダ情報のエラーを検出するための演算である誤り検出演算を、そのヘッダ情報と同じ組のCRC符号を用いて行う。
【0358】
また、ヘッダエラー訂正部232は、それぞれの組のヘッダ情報の誤り検出結果と、誤り検出演算により求められたデータの比較結果とのうちの少なくともいずれかに基づいて正しいヘッダ情報を推測し、正しいと推測したヘッダ情報と復号結果を出力する。誤り検出演算により求められたデータは、ヘッダ情報にCRCの生成多項式を適用することによって求められた値である。また、復号結果は、復号成功または復号失敗を表す情報である。
【0359】
ヘッダ情報とCRC符号の3つの組をそれぞれ組1、組2、組3とする。この場合、ヘッダエラー訂正部232は、組1を対象とした誤り検出演算によって、組1のヘッダ情報にエラーがあるか否か(誤り検出結果)と、誤り検出演算により求められたデータであるデータ1を取得する。また、ヘッダエラー訂正部232は、組2を対象とした誤り検出演算によって、組2のヘッダ情報にエラーがあるか否かと、誤り検出演算により求められたデータであるデータ2を取得する。ヘッダエラー訂正部232は、組3を対象とした誤り検出演算によって、組3のヘッダ情報にエラーがあるか否かと、誤り検出演算により求められたデータであるデータ3を取得する。
【0360】
また、ヘッダエラー訂正部232は、データ1とデータ2が一致するか否か、データ2とデータ3が一致するか否か、データ3とデータ1が一致するか否かをそれぞれ判定する。
【0361】
例えば、ヘッダエラー訂正部232は、組1、組2、組3を対象としたいずれの誤り検出演算によっても誤りが検出されず、誤り検出演算によって求められたデータのいずれの比較結果もが一致した場合、復号結果として、復号成功を表す情報を選択する。また、ヘッダエラー訂正部232は、いずれのヘッダ情報も正しいと推測し、組1のヘッダ情報、組2のヘッダ情報、組3のヘッダ情報のうちのいずれかを出力情報として選択する。
【0362】
一方、ヘッダエラー訂正部232は、組1を対象とした誤り検出演算でだけ誤りが検出されなかった場合、復号結果として、復号成功を表す情報を選択するとともに、組1のヘッダ情報が正しいと推測し、組1のヘッダ情報を出力情報として選択する。
【0363】
また、ヘッダエラー訂正部232は、組2を対象とした誤り検出演算でだけ誤りが検出されなかった場合、復号結果として、復号成功を表す情報を選択するとともに、組2のヘッダ情報が正しいと推測し、組2のヘッダ情報を出力情報として選択する。
【0364】
ヘッダエラー訂正部232は、組3を対象とした誤り検出演算でだけ誤りが検出されなかった場合、復号結果として、復号成功を表す情報を選択するとともに、組3のヘッダ情報が正しいと推測し、組3のヘッダ情報を出力情報として選択する。
【0365】
ヘッダエラー訂正部232は、以上のようにして選択した復号結果と出力情報をレジスタ242に出力し、記憶させる。このように、ヘッダエラー訂正部232によるヘッダ情報の誤り訂正は、複数のヘッダ情報の中から、エラーのないヘッダ情報が、CRC符号が用いられて検出され、検出されたヘッダ情報が出力されるようにして行われる。
【0366】
データ除去部233は、レーン統合部222を制御してレーンスタッフィングデータを除去し、Byte to Pixel変換部225を制御してペイロードスタッフィングデータを除去する。
【0367】
フッタエラー検出部234は、パケット分離部223から供給されたフッタデータに基づいて、フッタに格納されたCRC符号を取得する。フッタエラー検出部234は、取得したCRC符号を用いて誤り検出演算を行い、ペイロードデータのエラーを検出する。フッタエラー検出部234は、誤り検出結果を出力し、レジスタ242に記憶させる。
【0368】
<イメージセンサ111とDSP112の動作>
次に、以上のような構成を有する送信部122と受信部131の一連の処理について説明する。
【0369】
はじめに、図38のフローチャートを参照して、伝送システム100を有する撮像装置の動作について説明する。図38の処理は、例えば、撮像装置に設けられたシャッタボタンが押されるなどして撮像の開始が指示されたときに開始される。
【0370】
ステップS101において、イメージセンサ111の撮像部121は撮像を行う。撮像部121のフレームデータ入力部152(図17)は、撮像によって得られた1フレームの画像を構成する画素データを、1画素のデータずつ順に出力する。
【0371】
ステップS102において、送信部122によりデータ送信処理が行われる。データ送信処理により、1ライン分の画素データをペイロードに格納したパケットが生成され、パケットを構成するパケットデータが受信部131に対して送信される。データ送信処理については図39のフローチャートを参照して後述する。
【0372】
ステップS103において、受信部131によりデータ受信処理が行われる。データ受信処理により、送信部122から送信されてきたパケットデータが受信され、ペイロードに格納されている画素データが画像処理部132に出力される。データ受信処理については図40のフローチャートを参照して後述する。
【0373】
ステップS102において送信部122により行われるデータ送信処理と、ステップS103において受信部131により行われるデータ受信処理は、1ライン分の画素データを対象として交互に行われる。すなわち、ある1ラインの画素データがデータ送信処理によって送信されたとき、データ受信処理が行われ、データ受信処理によって1ラインの画素データが受信されたとき、次の1ラインの画素データを対象としてデータ送信処理が行われる。送信部122によるデータ送信処理と、受信部131によるデータ受信処理は、適宜、時間的に並行して行われることもある。ステップS104において、画像処理部132のフレームデータ出力部241は、1フレームの画像を構成する全てのラインの画素データの送受信が終了したか否かを判定し、終了していないと判定した場合、ステップS102以降の処理を繰り返し行わせる。
【0374】
1フレームの画像を構成する全てのラインの画素データの送受信が終了したとステップS104において判定した場合、ステップS105において、画像処理部132のフレームデータ出力部241は、受信部131から供給された画素データに基づいて1フレームの画像を生成する。
【0375】
ステップS106において、画像処理部132は、1フレームの画像を用いて画像処理を行い、処理を終了させる。
【0376】
次に、図39のフローチャートを参照して、図38のステップS102において行われるデータ送信処理について説明する。
【0377】
ステップS111において、ヘッダ生成部172は、Frame Start, Frame End, Line Valid, Line Number, Reservedからなるヘッダ情報を生成する。
【0378】
ステップS112において、ヘッダ生成部172は、ヘッダ情報を生成多項式に適用してCRC符号を計算する。
【0379】
ステップS113において、ヘッダ生成部172は、ヘッダ情報にCRC符号を付加することによってヘッダ情報とCRC符号の組を生成し、同じヘッダ情報とCRC符号の組を3組繰り返して配置することによってヘッダを生成する。
【0380】
ステップS114において、Pixel to Byte変換部162は、フレームデータ入力部152から供給された画素データを取得し、Pixel to Byte変換を行う。Pixel to Byte変換部162は、Pixel to Byte変換によって得られたバイト単位の画素データのグループ化、ペイロードスタッフィングデータの付加などを行うことによって生成したペイロードデータを出力する。ペイロードデータに対しては、適宜、ペイロードECC挿入部163によりパリティが挿入される。
【0381】
ステップS115において、パケット生成部164は、1ライン分の画素データを含むペイロードデータと、ヘッダ生成部172により生成されたヘッダに基づいてパケットを生成し、1パケットを構成するパケットデータを出力する。
【0382】
ステップS116において、レーン分配部165は、パケット生成部164から供給されたパケットデータを、データ伝送に用いられる複数のレーンに割り当てる。
【0383】
ステップS117において、制御コード挿入部191は、レーン分配部165から供給されたパケットデータに制御コードを付加する。
【0384】
ステップS118において、8B10Bシンボルエンコーダ192は、制御コードが付加されたパケットデータの8B10B変換を行い、10ビット単位のデータに変換したパケットデータを出力する。
【0385】
ステップS119において、同期部193は、8B10Bシンボルエンコーダ192から供給されたパケットデータを、クロック生成部182により生成されたクロック信号に従って出力し、送信部194から送信させる。ステップS117乃至S119の処理は信号処理部183-0乃至183-Nにより並行して行われる。1ライン分の画素データの送信が終了したとき、図38のステップS102に戻りそれ以降の処理が行われる。
【0386】
次に、図40のフローチャートを参照して、図38のステップS103において行われるデータ受信処理について説明する。
【0387】
ステップS131において、受信部211は、送信部122から伝送されてきたパケットデータを表す信号を受信する。ステップS131乃至S136の処理は信号処理部202-0乃至202-Nにより並行して行われる。
【0388】
ステップS132において、クロック生成部212は、受信部211から供給された信号のエッジを検出することによってビット同期をとる。同期部213は、受信部211において受信された信号のサンプリングを行い、パケットデータをシンボル同期部214に出力する。
【0389】
ステップS133において、シンボル同期部214は、パケットデータに含まれる制御コードを検出するなどしてシンボル同期をとる。
【0390】
ステップS134において、10B8Bシンボルデコーダ215は、シンボル同期後のパケットデータに対して10B8B変換を施し、8ビット単位のデータに変換したパケットデータを出力する。
【0391】
ステップS135において、スキュー補正部216は、Deskew Codeを検出し、上記したように、Deskew CodeのタイミングをPHY-RX状態制御部201から供給された情報により表されるタイミングに合わせるようにしてレーン間のData Skewを補正する。
【0392】
ステップS136において、制御コード除去部217は、パケットデータに付加された制御コードを除去する。
【0393】
ステップS137において、レーン統合部222は、信号処理部202-0乃至202-Nから供給されたパケットデータを統合する。
【0394】
ステップS138において、パケット分離部223は、レーン統合部222により統合されたパケットデータを、ヘッダデータを構成するパケットデータとペイロードデータを構成するパケットデータに分離する。
【0395】
ステップS139において、ヘッダエラー訂正部232は、パケット分離部223により分離されたヘッダデータに含まれるヘッダ情報とCRC符号の各組を対象としてCRC符号を用いた誤り検出演算を行う。また、ヘッダエラー訂正部232は、各組の誤り検出結果と、誤り検出演算により求められたデータの比較結果とに基づいてエラーのないヘッダ情報を選択し、出力する。
【0396】
ステップS140において、Byte to Pixel変換部225は、ペイロードデータのByte to Pixel変換を行い、8ビット、10ビット、12ビット、14ビット、または16ビット単位の画素データを出力する。Byte to Pixel変換の対象となるペイロードデータに対しては、適宜、パリティを用いた誤り訂正がペイロードエラー訂正部224により行われる。
【0397】
1ライン分の画素データの処理が終了したとき、図38のステップS103に戻りそれ以降の処理が行われる。
【0398】
イメージセンサ111とDSP112の間でのデータ伝送は、以上のように、1フレームの1ラインが1パケットに相当するパケットフォーマットを用いて行われる。
【0399】
イメージセンサ111とDSP112間のデータ伝送に用いられるパケットフォーマットは、ヘッダ情報や、Start Code, End Code等のパケット境界を示す制御コードの伝送を最小限に抑えるフォーマットといえ、伝送効率の低下を防ぐことが可能になる。仮に、1パケットのペイロードに格納される画素データが1ラインより少ないパケットフォーマットを採用した場合、1フレーム全体の画素データを伝送するためにはより多くのパケットを伝送する必要があり、伝送するヘッダ情報や制御コードの数が多くなる分、伝送効率が低下してしまう。
【0400】
また、伝送効率の低下を防ぐことによって伝送レイテンシを抑えることが可能となり、大量の画像データを高速に伝送する必要がある高画素・高フレームレートのインタフェースを実現することができる。
【0401】
伝送の信頼度/冗長度を上げて受信部131側で誤り訂正を行うことを前提にしたパケットフォーマットを採用することによって、ヘッダ情報の伝送エラー対策を確保することが可能になる。Frame/Line(V/H)の同期情報等の伝送がヘッダ情報を用いて行われるため、ヘッダ情報が伝送エラーで失われると、システム上、大きな不具合となる可能性があるが、そのようなことを防ぐことができる。
【0402】
また、ヘッダ情報の伝送エラー対策を確保するための実装コストや消費電力の増大を抑えることもできる。すなわち、イメージセンサ111とDSP112間のデータ伝送に用いられるパケットフォーマットは、CRC符号が付加されていることで、ヘッダ情報の伝送エラーの有無をDSP112において検出することができるようになっている。また、ヘッダ情報とCRC符号の組を3組伝送することで、ヘッダ情報の伝送エラーが生じた場合にDSP112において正しいヘッダ情報に訂正することができるようになっている。
【0403】
仮に、ヘッダ情報の伝送エラー対策として誤り訂正符号を用いるとした場合、誤り訂正符号の計算を行う回路を送信部122に用意するとともに、誤り訂正演算を行う回路を受信部131に用意する必要があることになる。ヘッダ情報に付加されるのは誤り検出符号であるCRC符号であるため、誤り訂正に関する演算を行う回路を用意する場合に較べて、回路規模、消費電力を小さくすることができる。また、ヘッダ情報の誤りを検出した場合にヘッダ情報の再送を受信部131が送信部122に対して要求することも行われないため、再送要求のための逆方向の伝送路を用意する必要がない。
【0404】
冗長度を上げ、8B10Bコードの複数のK Characterを組み合わせて制御コードを構成することによって、制御コードのエラー確率を低減させることができ、これにより、比較的簡単な回路で制御コードの伝送エラー対策を確保することが可能になる。
【0405】
具体的には、Start Codeには3種類のK Characterを4シンボル組み合わせて用いているが、少なくともK28.5以外のシンボルを検出できれば受信部131においてStart Codeを特定することができ、伝送エラーに対する耐性が高いといえる。End Codeについても同様である。
【0406】
また、Pad Codeに4種類のK Characterを組み合わせて用いているが、他の制御コードより多くの種類のK Characterを割り当てることによって、他の制御コードよりエラー耐性を上げることが可能になる。すなわち、4種類のうちの1種類のシンボルを検出できれば受信部131においてPad Codeを特定することができる。Pad Codeは、伝送頻度がStart CodeやEnd Codeなどよりも高いため、よりエラー耐性を上げることができる構造を持たせている。
【0407】
さらに、レーン毎に、同じ制御コードを同じタイミングで伝送することによって、1つのレーンで伝送エラーが起きて制御コードが失われた場合でも、他のレーンの制御コードを使って、エラーとなった制御コードを再現することができる。
【0408】
また、K Characterの数が限られているため、必要最小限のK Characterを組合せてそれぞれの制御コードを構成するようになされている。例えば、繰り返し送信することによって伝送エラーを比較的許容できるSync Code, Deskew Code, Standby Codeについては、K Characterを追加で割り当てる必要がないようなデータ構造を用いている。
【0409】
再同期させるために必要な制御コードが1パケット(1ライン)毎に割り当てられているため、静電気等の外乱やノイズなどによりビット同期が外れてしまった場合に再同期を迅速にとることができる。また、同期外れによる伝送エラーの影響を最小限に抑えることができる。
【0410】
具体的には、クロック生成部212と同期部213により実現されるCDRにおいて8B10B変換後のビットデータの遷移/エッジを検出することでビット同期をとることができる。送信部122がデータを送り続けていれば、CDRロック時間として想定された期間内でビット同期をとることができることになる。
【0411】
また、シンボル同期が外れてしまった場合でも、特定のK Character(K28.5)をシンボル同期部214において検出することによって再同期を迅速にとることができる。K28.5はStart Code, End Code, Deskew Codeにそれぞれ用いられているから、1パケット分のパケットデータの伝送期間中に、3箇所でシンボル同期をとることが可能になる。
【0412】
また、Deskew Codeを用いてレーン間のData Skewを補正することができるようにすることによって、レーン間の同期をとることもできる。
【0413】
リンクレイヤにおいて、16個ずつなどのグループ単位(図26の例の場合、16バイト単位)で各パケットデータが並列処理されるようにすることによって、1クロック周期に1つずつパケットデータを処理する場合に較べて、回路規模やメモリ量を抑えることができる。実装上、パケットデータを1つずつ処理する場合と所定の単位毎にまとめて処理する場合とで、後者の方が回路規模等を抑えることができる。回路規模を抑えることができることによって、消費電力を抑えることも可能になる。
【0414】
また、レーン割り当ての際、連続するパケットデータを異なるレーンに割り当てることによってエラー耐性を高めることができる。あるレーンにおいてパリティの誤り訂正能力を超えた数の連続するパケットデータに跨ってエラーが生じた場合であっても、受信部131においてレーン結合が行われることによって、エラーが生じたパケットデータの位置が分散することになり、パリティを用いたエラー訂正が可能になることがある。パリティによる誤り訂正能力はパリティ長により定まる。
【0415】
さらに、物理レイヤに近い方を下位として、レーン分配・レーン統合より上位でECC処理を行うようにすることによって、送信部122と受信部131の回路規模を削減することが可能になる。例えば、送信部122において、パケットデータの各レーンへの割り当てが行われた後にペイロードにECCのパリティが挿入されるとした場合、ペイロードECC挿入部163をレーン毎に用意する必要があり、回路規模が大きくなってしまうがそのようなことを防ぐことができる。
【0416】
物理レイヤにおいてはパケットデータの並列処理が複数の回路で行われるが、PHY-TX状態制御部181やクロック生成部182については共通化することによって、それらの回路をレーン毎に用意する場合に較べて回路の簡素化を図ることができる。また、レーン毎に異なる制御コードを伝送しないプロトコルを用いることによって、各レーンのパケットデータを処理する回路の簡素化を図ることができる。
【0417】
<レーン数の切り替え>
各レーンにおいて同じ制御コードを同じタイミングで伝送することは、通常のデータ伝送時だけでなく、例えばレーン数を切り替える場合にも行われる。レーン数を切り替える場合においても、アクティブなレーン(データ伝送に用いられるレーン)の状態は全て同じ状態になる。
【0418】
図41は、レーン数を切り替える場合の制御シーケンスを示す図である。
【0419】
図41の右側に垂直同期信号(XVS)、水平同期信号(XHS)のタイミングを示す。垂直同期信号が検出される時刻t1までの間に1フレームの画像を構成する各ラインの画素データが水平同期信号に従って伝送され、時刻t1のタイミングで、アクティブなレーンを4レーンから2レーンに変更する場合について説明する。時刻t1までは、4つのレーンを用いてデータ伝送が行われている。
【0420】
図41のほぼ中央には縦方向に各レーンの状態を示している。「PIX DATA」は、その文字が付されているレーンにおいて画素データの伝送が行われていることを表す。「PIX DATA」に続く「E」、「BLK」、「S」は、それぞれ、Frame End、ブランキング期間、Frame Startを表す。
【0421】
時刻t1までの1フレーム期間に伝送するフレームの画素データの伝送が終了した場合、ステップS181において、画像処理部132は、受信部131に対してレーン数を4から2に切り替えることを指示する。画像処理部132による指示はステップS171において受信部131により受信される。
【0422】
時刻t1になったとき、ステップS182において、画像処理部132は、イメージセンサ111の撮像部121に対して、モードチェンジを要求する。撮像部121に対して送信されるモードチェンジの要求には、レーン数を4から2に切り替えることを表す情報も含まれている。図1等には示していないが、撮像部121と画像処理部132の間には、シャッタスピード、ゲインなどの撮像に関する設定値の情報を画像処理部132が撮像部121に対して送信するための伝送路が設けられている。モードチェンジの要求もこの伝送路を介して撮像部121に送信される。
【0423】
ステップS151において、撮像部121は、画像処理部132からのモードチェンジの要求を受信し、ステップS152において、送信部122に対してレーン数を4から2に切り替えることを指示する。撮像部121による指示はステップS161において送信部122により受信される。
【0424】
送信部122と受信部131の間ではStandby Sequenceが行われ、Lane0~3を使ってStandby Codeが送信部122から受信部131に繰り返し伝送される。Standby Sequenceが終了したとき、ステップS172において、受信部131から状態の検出結果が出力され、ステップS183において画像処理部132により受信される。また、アクティブな状態を維持するLane0とLane1についてはLowの状態となり、データ伝送を終了するLane2とLane3についてはHigh-Zの状態となる。
【0425】
送信部122と受信部131の間ではTraining Sequenceが行われ、Lane0とLane1を使ってSync Codeが送信部122から受信部131に繰り返し伝送される。受信部131においてはビット同期が確保され、Sync Codeが検出されることによってシンボル同期が確保される。
【0426】
Training Sequenceが終了したとき、ステップS173において、受信部131は、画像処理部132に対して準備が完了したことを通知する。受信部131による通知はステップS184において画像処理部132により受信され、レーン数を切り替える場合の一連の制御シーケンスが終了する。
【0427】
このように、レーン数を切り替える制御シーケンスにおいては、続けてデータ伝送に用いられるLane0,1と同じ状態になるように、データ伝送を終了するLane2,3においてもStandby Sequence時にStandby Codeが伝送される。例えば、Lane2,3については、Standby Codeの伝送を行わないでそのままHigh-Zの状態にすることも考えられるが、続けてデータ伝送に用いられるレーンと異なる状態になってしまい、制御が複雑になる。
【0428】
<送信部122と受信部131の他の構成>
図42は、送信部122と受信部131の他の構成例を示す図である。図17に示した送信部122と区別するために、図42に示す送信部は、送信部122aと記述する。同様に図17に示した受信部131と区別するために、図42に示す送信部は、受信部131aと記述する。
【0429】
図17に示した送信部122と図42に示した送信部122aを比較するに、送信部122の8B10Bシンボルエンコーダ192が、エンコーダ11になっている点が異なり、他の部分は同様に構成されている。図17に示した受信部131と図42に示した受信部131aを比較するに、受信部131の10B8Bシンボルデコーダ215が、デコーダ12になっている点が異なり、他の部分は同様に構成されている。同様の部分には、同様の符号を付し、その説明は省略する。
【0430】
SLVS-EC規格により送受信を行う伝送システム100に対して、図1乃至図13を参照して説明したエンコーダ11やデコーダ12を適用することができる。具体的には、図42に示すように、送信部122a内の信号処理部183に含まれるデータをエンコード(符号化)する部分に、エンコーダ11を適用することができる。また図42に示すように、受信部131a内の信号処理部202に含まれるデータをデコード(復号)する部分に、デコーダ12を適用することができる。
【0431】
SLVS-EC規格により送受信を行う伝送システム100に、エンコーダ11やデコーダ12を適用した場合も、図1乃至図13を参照して説明したように、符号化や復号が行われるため、その説明は省略する。ここでは、より具体的に、SLVS-EC規格で送受信を行うときのエンコーダ11やデコーダ12の処理について説明を加える。
【0432】
SLVS-EC規格でデータを送受信する場合、図2のBに示したように、NビットのブロックとMビットのブロックとに分けられ、Nビットの1ブロックとMビットの1ブロックを1つの処理単位として処理がなされる。また、図33図34を参照して説明したように、エンコーダ11(図17では8B10Bシンボルエンコーダ192)には、伝送するデータの他に、制御コードも入力される。
【0433】
制御コードは、伝送するデータ(以下、制御コードと区別するために、適宜、情報伝送データと記述する)と異なり、通信を制御する特別な役割を持つコードであるため、エンコーダ11でエンコードするとき、情報伝送データと区別して処理される。
【0434】
図43に示すように、制御コードと情報伝送データと区別したり、NビットまたはMビットに分割する処理を行ったりするプレエンコードを行うプレエンコーダ301がエンコーダ11の前の部分に追加される。なお、図43では、プレエンコーダ301とエンコーダ11を別体として表したが、エンコーダ11の一部にプレエンコーダ301が含まれる構成とすることも可能である。
【0435】
プレエンコーダ301には、レーン分配部165(図42)から情報伝達データ(図中、Dataと記載)が供給され、制御コード挿入部191から制御コード(図中、Codeと記載)が供給される。プレエンコーダ301は、入力された情報伝達データまたは制御コードをNビットまたはMビットに分割(変換)し、エンコーダ11に供給する。また、プレエンコーダ301は、供給したデータが、情報伝達データであるか、制御コードであるかを表すフラグ(以下、DCフラグと記述する)を、エンコーダ11に供給する。
【0436】
ここで、再度、図33を参照する。例えば、制御コードとして、Start Codeを参照するに、Start Codeは、3種類のK Characterの組み合わせであるK28.5, K27.7, K28.2, K27.7の4シンボルで表される。1シンボルは、8ビットであるため、Start Codeは、32ビットのコードとされている。他の制御コードも同様に、32ビットで構成されている。
【0437】
エンコードするときのNビット、Mビットは、制御コードのビット数に応じて、設定することができる。制御コードが32ビットである場合、Nビットを、31ビットとし、Mビットを33ビットとする。このようにした場合、(N+M)ビットは、64ビットとなる。また、Nビットに1ビットのフラグが付加されるため、Nビットの1ブロックは、32ビットとなり、Mビットに1ビットのフラグが付加されるため、Mビットの1ブロックは、34ビットとなる。
【0438】
以下の説明では、N=31、M=33である場合を例に挙げて説明するが、他のビット数であっても本技術を適用できる。また、以下の説明では、(N+M)=64ビットを1処理単位として説明を続ける。1処理単位の64ビットのうち、プレエンコーダ301に入力される前半の32ビットを前半ブロックと記述し、後半の32ビットを後半ブロックと記述する。
【0439】
プレエンコーダ301によりNビット(31ビット)にされ、エンコーダ11に出力されるデータ列を、第1のブロックと記述し、Mビット(33ビット)にされ、エンコーダ11に出力されるデータ列を、第2のブロックと記述する。
【0440】
ここでは、プレエンコーダ301は、入力された1処理単位のデータを、Nビット(31ビット)の第1のブロックに分割し、次にMビット(33ビット)の第2のブロックに分割するとして説明を続けるが、先に、Mビットのブロックに分割し、次にNビットのブロックに分割するようにしてもよい。
【0441】
プレエンコーダ301には、前半ブロックと後半ブロックの64ビットのデータが供給される。前半ブロックと後半ブロックは、情報伝送データであるか制御コードであるため、その組み合わせは、以下の4通りある。
ケース1:前半ブロックが情報伝送データ+後半ブロックが情報伝送データ
ケース2:前半ブロックが情報伝送データ+後半ブロックが制御コード
ケース3:前半ブロックが制御コード+後半ブロックが情報伝達データ
ケース4:前半ブロックが制御コード+後半ブロックが制御コード
1乃至4のケース毎に、プレエンコーダ301とエンコーダ11の処理について説明を加える。
【0442】
<ケース1におけるエンコードについて>
図44を参照し、ケース1におけるプレエンコードとエンコードについて説明を加える。ケース1は、プレエンコーダ301に入力される64ビットのデータが全て情報伝達データであり、情報伝達データの第1のブロックと情報伝達データの第2のブロックに分割する場合である。
【0443】
すなわち、ケース1の場合、プレエンコーダ301には、32ビットの前半ブロックとしての第1の情報伝達データ[31:0]と、32ビットの後半ブロックとしての第2の情報伝達データ[31:0]が入力される。
【0444】
プレエンコーダ301は、入力された32ビットの前半ブロックの第1の情報伝達データ[31:0]のうちの31ビットの情報伝達データ[31:1]を、第1のブロックとし、エンコーダ11に出力する。
【0445】
プレエンコーダ301は、入力された32ビットの第1の情報伝達データ[31:0]のうちの最後のビットである第1の情報伝達データ[0]を、第2のブロックに振り分ける。また、その第1の情報伝達データ[0]の後に、後半ブロックの32ビットの第2の情報伝達データ[31:0]を付加した33ビットを、第2のブロックとしてエンコーダ11に出力する。
【0446】
換言すれば、プレエンコーダ301は、入力された64ビットのデータ列を、入力された64ビットのうちの前半の31ビットを構成する第1の情報伝達データ[31:1]と、その残りの1ビットの第1の情報伝達データ[0]と入力された64ビットのうちの後半の32ビットを構成する第2の情報伝達データ[31:0]とを合わせた33ビットとに、2分割する。
【0447】
プレエンコーダ301は、情報伝達データである第1のブロックをエンコーダ11に出力するとき、第1のブロックが情報伝達データであることを示すDCフラグも、エンコーダ11に供給する。
【0448】
エンコーダ11は、供給されたDCフラグが、情報伝達データであることを示している場合、供給される第1のブロックのデータに対して、図1乃至図13を参照して説明したように、ランニングディスパリティRDやランレングスRLを制御した符号化を行う。すなわち、ランニングディスパリティRDやランレングスRLにより、第1のブロックのデータを反転し、反転したことを示すフラグを付加したり、データは反転せずに、反転していないことを示すフラグを付加したりする処理を実行する。
【0449】
エンコーダ11により31ビットの第1のブロックが処理されることで、1ビットのフラグが付加されるため、エンコーダ11から出力されるデータは、32ビットのデータである。
【0450】
また同様に、プレエンコーダ301は、情報伝達データである第2のブロックをエンコーダ11に出力するとき、第2のブロックが情報伝達データであることを示すDCフラグも、エンコーダ11に供給する。
【0451】
エンコーダ11は、供給されたDCフラグが、情報伝達データであることを示している場合、供給される第2のブロックのデータに対して、図1乃至図13を参照して説明したように、ランニングディスパリティRDやランレングスRLを制御した符号化を行う。すなわち、ランニングディスパリティRDやランレングスRLにより、第2のブロックのデータを反転し、反転したことを示すフラグを付加したり、データは反転せずに、反転していないことを示すフラグを付加したりする処理を実行する。
【0452】
エンコーダ11により33ビットの第2のブロックが処理されることで、1ビットのフラグが付加されるため、エンコーダ11から出力されるデータは、34ビットのデータである。
【0453】
<ケース2におけるエンコードについて>
図45を参照し、ケース2におけるプレエンコードとエンコードについて説明を加える。ケース2は、プレエンコーダ301に入力される64ビットのデータのうち前半ブロックが情報伝達データであり、後半ブロックが制御コードであり、情報伝達データの第1のブロックと制御コードの第2のブロックに分割する場合である。
【0454】
すなわち、ケース2の場合、プレエンコーダ301には、32ビットの前半ブロックとしての第1の情報伝達データ[31:0]と、32ビットの後半ブロックとしての第2の制御コード[31:0]が入力される。
【0455】
プレエンコーダ301は、入力された32ビットの前半ブロックの第1の情報伝達データ[31:0]のうちの31ビットの情報伝達データ[31:1]を、第1のブロックとし、エンコーダ11に出力する。
【0456】
プレエンコーダ301は、入力された32ビットの第1の情報伝達データ[31:0]のうちの最後のビットである第1の情報伝達データ[0]を、第2のブロックに振り分ける。また、プレエンコーダ301は、その第1の情報伝達データ[0]の後に、後半ブロックの32ビットの第2の制御コード[31:0]が31ビットに変換された第2の変換制御コード「30:0」を付加して32ビットにデータ列にし、さらに、1ビットの“0”または“1”のデータを付加することで、33ビットの第2のブロックを生成し、エンコーダ11に出力する。
【0457】
換言すれば、プレエンコーダ301は、入力された64ビットのデータ列を、入力された64ビットのうちの前半の31ビットを構成する第1の情報伝達データ[31:1]と、33ビットの第2のブロックに2分割する。33ビットの第2のブロックは、第1の情報伝達データ[31:0]の残りの1ビットの第1の情報伝達データ[0]、入力された64ビットのうちの後半の32ビットを構成する第2の制御コード[31:0]を31ビットの制御コードに変換した第2の変換制御コード[30:0]、および、第1の情報伝達データ[0]を反転したビットから構成されるデータ列である。
【0458】
第2のブロックの前後に、第1の情報伝達データ[0]と第1の情報伝達データ[0]を反転したビットを付加することで、第2のブロックのランニングディスパリティRDが0になるように設定されている。
【0459】
また入力された32ビットの制御コードは、31ビットの制御コードに変換される。入力される32ビットの制御コードは、例えば、上記した8B10B符号化に対応した制御コードであり、例えば、図33を参照して説明したシンボル構成を有する。図46を参照し、入力される32ビットの制御コードと、変換後の31ビットの制御コードについて説明する。
【0460】
以下の説明においては、8B10B符号化と、図1乃至図13を参照して説明した符号化を区別するために、図1乃至図13を参照して説明した符号化を、反転符号化と記述する。
【0461】
8B10B符号化における制御コード(図46中、8bコードと記述する)は、図33を参照して説明したように、Idle Code, Start Code, End Code, Pad Code, Sync Code, Deskew Code, Standby Codeがある。
【0462】
Idle Codeは、8B10B CodeであるD CharacterのD00.0(00000000)で表される。Idle Codeは、8bコードでは、32ビット全て“0”のデータ列である。Idle CodeのランニングディスパリティRDは、“-32”となる。Idle Codeの反転符号化(図中 INVと記載)は、第1シンボル(1st symbol)と第2シンボル(2nd symbol)が、全て“0”であり、第3シンボル(3rd symbol)と第4シンボル(4th symbol)の最後の1ビット以外が、全て“1”である。
【0463】
反転符号化では、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。制御コードの場合、エンコーダ11では、フラグとして“1”を付与する。フラグが“1”は、データを反転したことを表すが、制御コードである場合もフラグは“1”にされ、データが制御コードであることが示される。エンコーダ11は、制御コードの場合、フラグを“1”に設定するが、データは反転しない。
【0464】
制御コードの場合、フラグは“1”に設定されるため、このフラグを含めた反転符号化におけるIdle CodeのランニングディスパリティRDは、0となる。以下に説明するように、反転符号化における制御コードは、フラグを含めた32ビットにおいて、ランニングディスパリティRDは、0となるように設定されている。
【0465】
図46のIdle Codeのinvの反転禁止のところに記載したデータ列は、反転符号化におけるIdle Codeを反転したデータ列である。すなわち、第1シンボル(1st symbol)と第2シンボル(2nd symbol)が、全て“1”であり、第3シンボル(3rd symbol)と第4シンボル(4th symbol)の最後の1ビット以外が、全て“0”である。このようなデータ列が、情報伝達データとしてプレエンコーダ301(またはエンコーダ11)に入力され、反転するデータとして設定され、反転されてしまうと、Idle Codeと同一のデータ列となってしまう。
【0466】
反転することで、制御コードと同一のデータ列になるようなデータ列は、反転禁止のデータ列として設定されている。よって、エンコーダ11は、そのような反転禁止のデータ列が入力された場合、フラグとして“0”を設定し、非反転のデータ列として設定する。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0467】
Start Codeは、8bコードでは、3種類のK Characterの組み合わせであるK28.5, K27.7, K28.2, K27.7の4シンボルで表される。8bコードにおけるStart CodeのランニングディスパリティRDは、“14”となる。反転符号化におけるStart Codeの第1シンボルは、“00111100”であり、第2シンボルは、“11111010”であり、第3シンボルは、“11000011”であり、第4シンボルは、“0000010”である。
【0468】
反転符号化におけるStart Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またStart Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるStart CodeのランニングディスパリティRDは、0となる。
【0469】
また、Start Codeの反転禁止のデータ列も設定されており、反転することでStart Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。Start Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0470】
End Codeは、8bコードでは、3種類のK Characterの組み合わせであるK28.5, K29.7, K30.7, K29.7の4シンボルで表される。8bコードにおけるEnd CodeのランニングディスパリティRDは、“20”となる。反転符号化におけるEnd Codeの第1シンボルは、“00111100”であり、第2シンボルは、“11111100”であり、第3シンボルは、“11000011”であり、第4シンボルは、“0000001”である。
【0471】
反転符号化におけるEnd Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またEnd Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるEnd CodeのランニングディスパリティRDは、0となる。
【0472】
また、End Codeの反転禁止のデータ列も設定されており、反転することでEnd Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。End Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0473】
Pad Codeは、8bコードでは、3種類のK Characterの組み合わせであるK23.7, K28.4, K28.6, K28.3の4シンボルで表される。8bコードにおけるPad CodeのランニングディスパリティRDは、“10”となる。反転符号化におけるPad Codeの第1シンボルは、“01110111”であり、第2シンボルは、“10011100”であり、第3シンボルは、“10001000”であり、第4シンボルは、“0110001”である。
【0474】
反転符号化におけるPad Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またPad Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるPad CodeのランニングディスパリティRDは、0となる。
【0475】
また、Pad Codeの反転禁止のデータ列も設定されており、反転することでPad Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。Pad Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0476】
Sync Codeは、8bコードでは、K CharacterのK28.5と、D CharacterのD10.5の組み合わせからなる4シンボルで表される。図33では、Any**とし、どの種類のシンボルが用いられてもよいことを表すとして説明したが、図46では、具体的に、D CharacterのD10.5が用いられる場合を例に挙げている。
【0477】
8bコードにおけるSync CodeのランニングディスパリティRDは、“2”となる。反転符号化におけるSync Codeの第1シンボルは、“00111100”であり、第2シンボルは、“10101010”であり、第3シンボルは、“11000011”であり、第4シンボルは、“0101010”である。
【0478】
反転符号化におけるSync Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またSync Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるSync CodeのランニングディスパリティRDは、0となる。
【0479】
また、Sync Codeの反転禁止のデータ列も設定されており、反転することでSync Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。Sync Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0480】
Deskew Codeは、8bコードでは、K CharacterのK28.5と、D CharacterのD00.3の組み合わせからなる4シンボルで表される。図33では、Any**とし、どの種類のシンボルが用いられてもよいことを表すとして説明したが、図46では、具体的に、D CharacterのD00.3が用いられる場合を例に挙げている。
【0481】
8bコードにおけるDeskew CodeのランニングディスパリティRDは、“-10”となる。反転符号化におけるDeskew Codeの第1シンボルは、“00111100”であり、第2シンボルは、“01100000”であり、第3シンボルは、“11000011”であり、第4シンボルは、“1001111”である。
【0482】
反転符号化におけるDeskew Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またDeskew Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるDeskew CodeのランニングディスパリティRDは、0となる。
【0483】
また、Deskew Codeの反転禁止のデータ列も設定されており、反転することでDeskew Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。Deskew Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0484】
Standby Codeは、8bコードでは、K CharacterのK28.5と、D CharacterのD03.0の組み合わせからなる4シンボルで表される。図33では、Any**とし、どの種類のシンボルが用いられてもよいことを表すとして説明したが、図46では、具体的に、D CharacterのD03.0が用いられる場合を例に挙げている。
【0485】
8bコードにおけるStandby CodeのランニングディスパリティRDは、“-10”となる。反転符号化におけるStandby Codeの第1シンボルは、“00111100”であり、第2シンボルは、“00000010”であり、第3シンボルは、“11000011”であり、第4シンボルは、“111110”である。
【0486】
反転符号化におけるStandby Codeも、8bコードにおける第4シンボルの最後の1ビットは用いられないため、31ビットの制御コードとなる。またStandby Codeも、制御コードであるため、エンコーダ11では、フラグとして“1”が付与される。よってフラグを含めた反転符号化におけるStandby CodeのランニングディスパリティRDは、0となる。
【0487】
また、Standby Codeの反転禁止のデータ列も設定されており、反転することでStandby Codeと同一となるデータ列は、反転しないデータ列であるとして設定されている。Standby Codeの反転禁止のデータ列も、エンコーダ11に情報伝達データとして入力された場合には、フラグとして“0”が設定され、非反転のデータ列として処理される。この反転禁止に設定されているデータ列も、フラグである“0”まで含めたランニングディスパリティRDは、“0”となるデータ列である。
【0488】
このような制御コードが設定されている場合、プレエンコーダ301は、入力される8bコードを、反転符号化のコードに変換する。この変換を行うとき、図46に示した8bコードにおける制御コードと反転符号化における制御コードとの対応表を保持し、適宜参照して変換されるようにしてもよい。またここでは、変換する処理が含まれるとして説明を続けるが、制御コード挿入部191は、反転符号化における制御コードを挿入するようにし、プレエンコーダ301は、変換を行わない構成とすることもできる。
【0489】
図45を参照した説明に戻り、プレエンコーダ301は、情報伝達データである第1のブロックをエンコーダ11に出力するとき、第1のブロックが情報伝達データであることを示すDCフラグも、エンコーダ11に供給する。
【0490】
エンコーダ11は、供給されたDCフラグが、情報伝達データであることを示している場合、供給される第1のブロックのデータに対して、図1乃至図13を参照して説明したように、ランニングディスパリティRDやランレングスRLを制御した符号化を行う。すなわち、ランニングディスパリティRDやランレングスRLにより、第1のブロックのデータを反転し、反転したことを示すフラグを付加したり、データは反転せずに、反転していないことを示すフラグを付加したりする処理を実行する。
【0491】
なお、情報伝達データが、反転禁止のデータ列である場合、プレエンコーダ301で、そのような反転禁止のデータ列であるか否かを判定し、その判定結果を、DCフラグとして出力するようにし、エンコーダ11では、そのDCフラグを参照して処理するようにしてもよい。または、エンコーダ11が、DCフラグが情報伝達データであることを示している場合、情報伝達データが、反転禁止のデータ列になっていないか否かを判定し、その判定結果による処理を実行するようにしてもよい。
【0492】
エンコーダ11により31ビットの第1のブロックが処理されることで、1ビットのフラグが付加されるため、エンコーダ11から出力されるデータは、32ビットのデータである。
【0493】
また同様に、プレエンコーダ301は、第2の変換制御コードを含む第2のブロックをエンコーダ11に出力するとき、第2のブロックが制御コードであることを示すDCフラグも、エンコーダ11に供給する。
【0494】
エンコーダ11は、供給されたDCフラグが、制御コードであることを示している場合、フラグを“1”に設定し、供給された33ビットの第2のブロックに付加し、34ビットのデータとして出力する。
【0495】
<ケース3におけるエンコードについて>
図47を参照し、ケース3におけるプレエンコードとエンコードについて説明を加える。ケース3は、プレエンコーダ301に入力される64ビットのデータのうち前半ブロックが制御コードであり、後半ブロックが情報伝達データであり、制御コードの第1のブロックと情報伝達コードの第2のブロックに分ける場合である。
【0496】
すなわち、ケース3の場合、プレエンコーダ301には、32ビットの前半ブロックとしての第1の制御コード[31:0]と、32ビットの後半ブロックとしての第2の情報伝達データ[31:0]が入力される。
【0497】
プレエンコーダ301は、入力された32ビットの前半ブロックの第1の制御コード[31:0]を、例えば図46に示した表を参照して31ビットの第1の変換制御コード[30:0]に変換し、その第1の変換制御コード[30:0]を、第1のブロックとし、エンコーダ11に出力する。
【0498】
プレエンコーダ301は、入力された32ビットの後半ブロックの第2の情報伝達データ[31:0]を、第2のブロックに振り分ける。第2のブロックは、33ビットであるため、第2のブロックの先頭に1ビットが加えられる。この加えられる1ビットは、8bコードにおける制御コードの第4シンボルのAの値が用いられるようにすることができる。すなわち、前半ブロックの第1の制御コードの最後のビットが、第2のブロックの第2のブロックの先頭のビットに割り当てられる。
【0499】
例えばIdle Codeの場合、8bコードにおける制御コードの第4シンボルのAの値は“0”であるため、第2のブロックの先頭ビットは“0”に設定される。
【0500】
第2のブロックの先頭に入れられたビット、この場合、第1の制御コード[0]は、デコーダ12側では、ダミーデータとして扱われる。
【0501】
プレエンコーダ301は、入力された64ビットのデータ列を、入力された64ビットのうちの前半の31ビットを構成する第1の制御コード [31:0]と、33ビットの第2のブロックに2分割する。33ビットの第2のブロックは、第1の制御コード[31:0]の残りの1ビットの第1の制御コード[0]に、入力された64ビットのうちの後半の32ビットを構成する第2の情報伝達データ[31:0]を加えた33ビットのデータ列である。
【0502】
プレエンコーダ301は、制御コードである第1のブロックをエンコーダ11に出力するとき、第1のブロックが制御コードであることを示すDCフラグも、エンコーダ11に供給する。
【0503】
エンコーダ11は、供給されたDCフラグが、制御コードであることを示している場合、フラグを“1”に設定し、供給された31ビットの第1のブロックに付加し、32ビットのデータとして出力する。
【0504】
プレエンコーダ301は、情報伝達データである第2のブロックをエンコーダ11に出力するとき、第2のブロックが情報伝達データであることを示すDCフラグも、エンコーダ11に供給する。
【0505】
エンコーダ11は、供給されたDCフラグが、情報伝達データであることを示している場合、供給される第2のブロックのデータに対して、図1乃至図13を参照して説明したように、ランニングディスパリティRDやランレングスRLを制御した符号化を行う。すなわち、ランニングディスパリティRDやランレングスRLにより、第2のブロックのデータを反転し、反転したことを示すフラグを付加したり、データは反転せずに、反転していないことを示すフラグを付加したりする処理を実行する。
【0506】
<ケース4におけるエンコードについて>
図48を参照し、ケース4におけるプレエンコードとエンコードについて説明を加える。ケース4は、プレエンコーダ301に入力される64ビットのデータの全てが制御コードであり、制御コードの第1のブロックと制御コードの第2のブロックに分割する場合である。
【0507】
すなわち、ケース4の場合、プレエンコーダ301には、32ビットの前半ブロックとしての第1の制御コード[31:0]と、32ビットの後半ブロックとしての第2の制御コード[31:0]が入力される。
【0508】
プレエンコーダ301は、入力された32ビットの前半ブロックの第1の制御コード[31:0]を、例えば図46に示した表を参照して31ビットの第1の変換制御コード[30:0]に変換し、その第1の変換制御コード[30:0]を、第1のブロックとし、エンコーダ11に出力する。
【0509】
プレエンコーダ301は、入力された32ビットの後半ブロックの第2の制御コード[31:0]を、例えば図46に示した表を参照して31ビットの第2の変換制御コード[30:0]に変換し、その第2の変換制御コード[30:0]を、第2のブロックに振り分ける。第2のブロックは、33ビットであるため、第2のブロックの先頭の1ビットと、最後の1ビットの計2ビットが加えられる。
【0510】
先頭に加えられる1ビットは、8bコードにおける制御コードの第4シンボルのAの値が用いられるようにすることができる。すなわち、前半ブロックの第1の制御コードの最後のビット(第1の制御コード[0])が、第2のブロックの先頭のビットに割り当てられる。例えばIdle Codeの場合、8bコードにおける制御コードの第4シンボルのAの値は“0”であるため、第2のブロックの先頭ビットは“0”に設定される。
【0511】
最後に加えられる1ビットは、先頭に加えられた1ビットの値を反転した値とされる。すなわち、先頭に加えられる1ビットは、第1の制御コード[0]であるため、この第1の制御コード[0]の反転値が最後に加えられるビットとされる。例えばIdle Codeの場合、8bコードにおける制御コードの第4シンボルのAの値は“0”であり、この値が先頭に加えられるため、第2のブロックの最終ビットは“1”に設定される。
【0512】
このように、第2のブロックには、2ビットのデータが付加されるが、一方の値の反転値が他方の値とされることで、ランニングディスパリティRDを0にすることができる。
【0513】
第2のブロックの先頭に入れられたビットと最後に入れられたビットは、デコーダ12側では、ダミーデータとして扱われる。
【0514】
プレエンコーダ301は、入力された64ビットのデータ列を、入力された64ビットのうちの前半の32ビットを構成する第1の制御コード [31:0]を第1の変換制御コード[30:0]に変換し、後半の32ビットを構成する第2の制御コード [31:0]を第2の変換制御コード[30:0]に変換することで、2つのブロックに分割する。また、プレエンコーダ301は、第2の変換制御コード[30:0]に、2ビット追加することで、33ビットのデータ列にして、第2のブロックを生成する。
【0515】
プレエンコーダ301は、制御コードである第1のブロックをエンコーダ11に出力するとき、第1のブロックが制御コードであることを示すDCフラグも、エンコーダ11に供給する。エンコーダ11は、供給されたDCフラグが、制御コードであることを示している場合、フラグを“1”に設定し、供給された31ビットの第1のブロックに付加し、32ビットのデータとして出力する。
【0516】
同じくプレエンコーダ301は、制御コードである第2のブロックをエンコーダ11に出力するとき、第2のブロックが制御コードであることを示すDCフラグも、エンコーダ11に供給する。エンコーダ11は、供給されたDCフラグが、制御コードであることを示している場合、フラグを“1”に設定し、供給された33ビットの第2のブロックに付加し、34ビットのデータとして出力する。
【0517】
このように、プレエンコーダ301により入力された64ビットのデータが、31ビットのデータと33ビットのデータに分割される。上記した説明では、制御コードは、図46に示した表を参照して変換されるとしたが、8B10B符号化において用いられている制御コード(上記した8bコード)が入力され、その8bコードを変換する場合、図49図50を参照して説明するような変換が行われるようにしてもよい。換言すれば、図49図50を参照して説明するように、変換制御コードは規則性があり、その規則に基づいて8bコードから生成することができる。
【0518】
図49は、プレエンコーダ301に入力される64ビットのデータの前半が、制御コードである場合の変換方法について説明するための図である。すなわち図47図48を参照して説明した入力された64ビットの前半ブロックが、第1の制御コード[31:0]であり、その第1の制御コード[31:0]を、第1の変換制御コード[30:0]に変換する場合である。
【0519】
図49において、上部には、8bコードの第1の制御コードを示した。第1の制御コード[31:0]は、32ビットのデータである。第1の制御コード[31:0]のうち、第1の制御コード[30:17]の14ビットは、第1の変換制御コードの16乃至29の14ビットとしてそのまま用いられる。すなわち、第1の制御コード[30:17]は、第1の変換制御コード[29:16]として用いられる。この第1の変化制御コード[30:17]は、制御コードを区別するためのデータとして用いられる。
【0520】
第1の変換制御コードの最初のビット、換言すれば第1の変換制御コード[29:16]の前のビットである第1の変換制御コード[30]は、“0”と固定されている。また、第1の変換制御コードの第1の変換制御コード[15]と第1の変換制御コード[14]、換言すれば、第1の変換制御コード[29:16]に続く2ビットは、“0”、“1”で固定されている。
【0521】
第1の変換制御コード[13:0]の14ビットは、第1の変換制御コード[29:16]の14ビットを反転した値に設定される。換言すれば、第1の変換制御コード[13:0]の14ビットは、入力された8bコードの第1の制御コード[30:17]の14ビットが反転されたデータとされる。
【0522】
このように、入力される8bコードから、変換制御コードが生成される。このように、第1の変換制御コード[30:0]は、入力された第1の制御コード[31:0]のうち、第1の制御コード[30:17]の14ビットが用いられて生成される。
【0523】
第1の変換制御コード[30]となるビットとして0を設定する。
第1の制御コード[30:0]のうちの第1の制御コード[30:17]の14ビットを、第1の変換制御コード[29:16]とする。
第1の変換制御コード[29:16]に続く2ビットとして、第1の変換制御コード[15:14]を、0,1を設定する。
第1の制御コード[30:17]の14ビットを反転した14ビットを、第1の変換制御コード[13:0]とする。
このような処理がなされることで、第1の変換制御コード[30:0]が生成される。
【0524】
第1の変換制御コード[29:16]と第1の変換制御コード[13:0]は、データが反転された関係にあるため、この部分に関するランニングディスパリティRDは、0である。また、固定値として第1の変換制御コードに含まれているのは、0,0,1であり、制御コードに付加されるフラグは1であるため、この部分に関するランニングディスパリティRDも0である。よって、生成される第1の変換制御コード[30:0]に、フラグまで含めたランニングディスパリティRDは、必ず0となる。
【0525】
次に、図50を参照してプレエンコーダ301に入力される64ビットのデータの後半が、制御コードである場合の変換方法について説明する。すなわち図45図48を参照して説明した入力された64ビットの後半ブロックが、第2の制御コード[31:0]であり、その第2の制御コード[31:0]を、第2の変換制御コード[30:0]に変換する場合である。
【0526】
基本的な変換は、図49に示した場合と同じであるが、図49に示した場合は、31ビットに変換する場合であり、図50に示す場合は33ビットに変換する場合である。このために、さらに2ビット追加する処理が加えられる。その2ビットとしては、第2の変換制御コード[32]に該当するビットと、第2の変換制御コード[0]に該当するビットである。
【0527】
すなわち、図50に示した場合も、第2の制御コード[31:0]のうち、第2の制御コード[30:17]の14ビットは、第2の変換制御コードの16乃至29の14ビットとしてそのまま用いられる。この場合、第2の制御コード[30:17]は、第2の変換制御コード[30:17]として用いられる。この第2の変化制御コード[30:17]は、制御コードを区別するためのデータとして用いられる。
【0528】
第2の変換制御コードの最初のビット、換言すれば第2の変換制御コード[30:17]の前のビットである第2の変換制御コード[31]は、“0”と固定されている。また、第2の変換制御コードの第2の変換制御コード[16]と第2の変換制御コード[15]、換言すれば、第2の変換制御コード[30:17]に続く2ビットは、“0”、“1”で固定されている。
【0529】
第2の変換制御コード[14:1]の14ビットは、第2の変換制御コード[29:16]の14ビットを反転した値に設定される。換言すれば、第2の変換制御コード[14:1]の14ビットは、入力された8bコードの第2の制御コード[30:17]の14ビットが反転されたデータとされる。
【0530】
さらに、第2の変換制御コード[32]に該当するビットが、第2の変換制御コード[31:1]の前に付加され、第2の変換制御コード[0]に該当するビットが、第2の変換制御コード[31:1]の前に付加される。
【0531】
第2の変換制御コード[32]は、入力された64ビットのうちの前半ブロックの最後のビット、例えば、図45に示した例では、第1の情報伝達データ[31:0]の第1の情報伝達データ[0]が、割り当てられる。また、第2の変換制御コード[32]を反転した値が、第2の変換制御コード[0]に割り当てられる。
【0532】
このように、入力される8bコードから、変換制御コードが生成される。このように、第2の変換制御コード[32:0]は、入力された第2の制御コード[31:0]のうち、第2の制御コード[30:17]の14ビットが用いられて生成される。
【0533】
第2の変換制御コード[32]となるビットとして、前のブロックの最後のビットが割り当てられる。
第2の変換制御コード[31]となるビットとして0を設定する。
第2の制御コード[30:17]の14ビットを、第2の変換制御コード[30:17]とする。
第2の変換制御コード[30:17]に続く2ビットとして、第2の変換制御コード[16:15]を、0,1に設定する。
第2の制御コード[30:17]の14ビットを反転した14ビットを、第2の変換制御コード[14:1]とする。
第2の変換制御コード[0]となるビットとし、第2の変換制御コード[32]を反転した値を設定する。
このような処理がなされることで、第2の変換制御コード[32:0]が生成される。
【0534】
第2の変換制御コード[30:17]と第2の変換制御コード[14:1]は、データが反転された関係にあるため、この部分に関するランニングディスパリティRDは、0である。また、第2の変換制御コード[32]と第2の変換制御コード[0]は、データが反転された関係にあるため、この部分に関するランニングディスパリティRDは、0である。さらに固定値として第2の変換制御コードに含まれているのは、0,0,1であり、制御コードに付加されるフラグは1であるため、この部分に関するランニングディスパリティRDも0である。よって、生成される第2の変換制御コード[32:0]に、フラグまで含めたランニングディスパリティRDは、必ず0となる。
【0535】
図49図50を参照して説明したようにして、入力された制御コードを変換することで、反転符号化で用いられる制御コードが生成されるようにしてもよい。
【0536】
このようにして、制御コードや情報伝送データが符号化される場合においても、図42に示した送信部122aと受信部131aの動作は、図38乃至図40に示したフローチャートに基づく動作となる。ここでは、説明が重複するため、異なる処理についてのみ説明を加える。
【0537】
送信部122aのデータ送信処理として、ステップS117(図39)において、制御コード挿入部191は、レーン分配部165から供給されたパケットデータに制御コードを付加する。この付加される制御コードは、8B10B符号化における制御コードが反転符号化における制御コードに変換されたコードとされる。
【0538】
または、制御コード挿入部191でこのような変換を行うのではなく、エンコーダ11(エンコーダ11に含まれるプレエンコーダ301)で行われるように構成することもできる。
【0539】
ステップS118において、エンコーダ11は、制御コードが付加されたパケットデータの反転符号化を行う。このエンコーダ11における処理については、図51を参照して後述する。
【0540】
受信部131aのデータ受信処理として、ステップS133(図40)において、シンボル同期部214は、パケットデータに含まれる制御コードを検出するなどしてシンボル同期をとる。このとき用いられる制御コードは、反転符号化における制御コードである。
【0541】
シンボル同期部244が、8B10B符号化における制御コードにより、シンボル同期をとる場合、デコーダ12によりデコードされた後のデータであり、8B10B符号化における制御コードに変換された制御コードが用いられるようにしてもよい。
【0542】
ステップS134において、デコーダ12は、反転符号化されているエンコードデータを復号する。このデコーダ12における処理については、図52を参照して後述する。
【0543】
<制御コードを含めたエンコーダの処理>
特殊な役割を有する制御コードと、情報伝達データをエンコードする場合のエンコーダ11の処理について、図51のフローチャートを参照して説明する。
【0544】
ステップS201において、エンコーダ11は、プレエンコーダ301から、データとDCフラグを入力する。ステップS202において、エンコーダ11は、入力されたデータが、制御コードであるか否かを、DCフラグを参照して判定する。ステップS202において、入力されたデータは、制御コードであると判定された場合、ステップS203に処理は進められる。
【0545】
ステップS203において、フラグが1に設定される。上記したように、制御コードは、フラグが1に設定され、反転処理はされないデータとして設定される。エンコーダ11には、プレエンコーダ301により、NまたはMビットの制御コードに変更されているため、その制御コードにフラグが付加されて、出力される。
【0546】
ステップS204において、出力される制御コードのランニングディスパリティRDとランレングスRLが算出される。ステップS205において、生成されたデータ列が、受信側に送信される。ステップS204,ステップS205は、ステップS22,ステップS23(図9)と同一の処理である。
【0547】
一方、ステップS202において、入力されたデータは、制御コードではないと判定された場合、ステップS206に処理が進められる。ステップS206において、入力された情報伝達データは、反転禁止のデータ列であるか否かが判定される。反転禁止のデータ列とは、図46を参照して説明したように、反転すると制御コードと同一のデータ列となるデータ列である。
【0548】
ステップS206において、入力されたデータは、反転禁止のデータ列であると判定された場合、ステップS207に処理は進められる。ステップS207において、フラグが0に設定される。エンコーダ11には、プレエンコーダ301により、NまたはMビットの情報伝達データに変更されているため、その情報伝達データにフラグが付加されて、出力される。その後、ステップS204,ステップS205の処理が実行されるが、ステップS204,ステップS205の処理については既に説明したため、その説明は省略する。
【0549】
一方、ステップS206において、入力された情報伝達データは、反転禁止のデータ列ではないと判定された場合、ステップS208に処理は進められる。ステップS208において、情報伝達データに対する反転符号化処理が実行される。また、反転符号化処理が実行された情報伝達データに対して、ステップS204,ステップS205の処理が実行される。
【0550】
ステップS208において実行される反転符号化処理と、ステップS204,S205において実行される処理は、図9に示したフローチャートにおけるステップS12乃至S23の処理に該当するため、その説明は既にしたので省略する。
【0551】
このようにして、反転符号化において、制御コードといった特殊なデータ列を有するコードも扱う場合には、制御コードは反転しないように、また制御コードであることがわかるフラグが付加される処理が含まれる。
【0552】
<制御コードを含めたデコーダの処理>
特殊な役割を有する制御コードと、情報伝達データをデコードする場合のデコーダ12の処理について、図52のフローチャートを参照して説明する。
【0553】
ステップS231において、デコーダ12は、フラグは1であるか否かを判定する。ステップS231において、フラグは1であると判定された場合、ステップS232に処理は進められる。
【0554】
ステップS232において、処理対象とされているデータ列は、制御コードであるか否かが判定される。ステップS232において、処理対象とされているデータ列は、制御コードであると判定された場合、ステップS233に処理は進められる。
【0555】
ステップS233において、データ情報が、制御コードであることを示す情報に設定される。データ情報とは、デコーダ12の後段の処理において、デコーダ12からの出力を処理するときに参照される情報であり、制御コードであるか、制御コードではないかを示す情報(フラグ)である。
【0556】
ステップS234において、デコーダ12から、データ情報と制御コードが出力される。
【0557】
一方、ステップS232において、制御コードではないと判定された場合、処理は、ステップS235に進められる。ステップS235に処理が来るのは、フラグが1であり、制御コードではない場合である。すなわち、ステップS235に処理が来た場合、処理対象とされているデータは、反転された情報伝達データである。
【0558】
ステップS235において、データ情報が、情報伝達データであることを示す情報に設定される。ステップS236において、処理対象とされているデータ列が、反転される。そして、ステップS237において、デコーダ12から、データ情報と情報伝達データが出力される。
【0559】
一方、ステップS231において、フラグは0であると判定された場合、処理は、ステップS238に進められる。ステップS238に処理が来るのは、処理対象とされているデータは、反転されていない情報伝達データである場合である。
【0560】
ステップS238において、データ情報が、情報伝達データであることを示す情報に設定される。ステップS239において、処理対象とされているデータ列は、反転されずにそのまま出力される。そして、ステップS237において、デコーダ12から、データ情報と情報伝達データが出力される。
【0561】
このようにして、反転符号化に対応する復号において、制御コードといった特殊なデータ列を有するコードも扱う場合には、制御コードは反転しないように、また制御コードであることがわかるフラグが付加されたデータ列が、フラグを参照して処理される。
【0562】
<他のエンコード、デコードの処理>
上記したように、制御コードは、反転しないようにし、フラグとして1が付加される。また、制御コード以外のデータ(情報伝達データ)のうち、反転すると制御コードと同一のデータ列となるデータは、反転禁止のデータ列とし、反転されないように制御され、フラグとして0が付加される。
【0563】
また情報伝達データは、反転される場合、フラグとして1が付加される。フラグとして1が付加されるのは、制御コードであることを表す場合と同じである。仮に、反転された情報伝達データにエラーが発生し、制御コードと同一のデータ列になっていたような場合、デコード側では、フラグが1であり、制御コードと同一のデータであるため、制御コードとして処理してしまう。
【0564】
また、制御コードにエラーが発生した場合、デコーダ側では、フラグが1であるため、反転された情報伝達データとして扱われてデコードされてしまう可能性がある。そこで、制御コードにエラーが発生しているような場合でも、制御コードとして扱えるようにするエンコードとデコードについて説明を加える。
【0565】
図53に示すように、制御コードに1ビットのエラーが発生したことを想定する。図53の上段に示したコードは、図46に示した反転符号化におけるPad Codeであり、そのPad Codeの先頭の1ビットにフラグの1が付加されているコードを示した。エラーが発生していない状態で、エンコードされ、デコード側に送信された場合、図53の上段に示したコードが授受される。
【0566】
Pad Codeにおいて、例えば1ビットのエラーが発生した場合を、図53の下段に示す。1bit違うデータ1として表したPad Codeは、最後のデータにエラーが発生し、正常なコードであるときには1というデータであるべきデータが、0というデータになっている。このような1bit違うデータ1がデコーダ12側で処理されると、フラグが1であるため、反転された情報伝達データとして処理されてしまう。
【0567】
同じく、1bit違うデータ2として表したPad Codeは、最後からの2番目のデータにエラーが発生し、正常なコードであるときには0というデータであるべきデータが、1というデータになっている。このような1bit違うデータ2がデコーダ12側で処理されると、フラグが1であるため、反転された情報伝達データとして処理されてしまう。
【0568】
さらに、1bit違うデータ32として表したPad Codeは、最後からの32番目のデータにエラーが発生し、正常なコードであるときには0というデータであるべきデータが、1というデータになっている。このような1bit違うデータ32がデコーダ12側で処理されると、フラグが1であるため、反転された情報伝達データとして処理されてしまう。
【0569】
このように、制御コードに1ビットのエラーが発生したような場合、情報伝達データとしてデコードされてしまう可能性がある。そこで、1ビットのエラーが発生した場合も考慮してデコードされるようにする。具体的には、デコーダ12は、1bit違うデータ1乃至32を、制御コードとして扱う。このように、1bit違うデータ1乃至32を、適宜、拡大された制御コードと記載する。
【0570】
1bit違うデータ1乃至32は、32パターンあるため、デコーダ12は、この32パターンも含めて制御コードとして処理することになる。よって、エラーが発生していない制御コードを含めると、33パターンを制御コードとして扱うことになる。また、ここでは制御コードとして、Pad Codeを例に挙げて説明したが、図46を参照して説明したように、制御コードには、Pad Code以外にも、Idle Code, Start Code, End Code, Sync Code, Deskew Code, Standby Codeがある。これらの制御コード毎に、制御コードとして扱うデータ列が33パターン存在する。
【0571】
デコーダ12側で、このように、1bit違うデータ1乃至32も、制御コードとして扱えるようにするために、エンコード側では、反転して1bit違うデータ1乃至32のいずれかに該当する情報伝達データは、反転しない制御が行われる。すなわち、反転禁止のデータ列の範囲を、制御コードが反転されたデータ列だけでなく、拡大された制御コードにまで広げた処理がエンコード側で行われる。
【0572】
情報伝達データのうち、反転されて1というフラグが付加され、かつ反転した後のデータ列が1bit違うデータ列1乃至32のいずれかと同一のパターンになってしまう場合、デコーダ12側では、制御コードとして扱われることになる。このようなことを防ぐために、情報伝達データのうち、反転した後のデータ列が1bit違うデータ列1乃至32のいずれかと同一のパターンになってしまう情報伝達データは、反転禁止とし、フラグとして0が付加されるようにする。
【0573】
図54のAを参照する。図54のAの上段に、反転前のデータ(情報伝達データ)を示す。図54のAの上段に示した情報伝達データは、1000100001100011011101111001111というデータである。この情報伝達データは、制御コードではない。
【0574】
図54のAの上段に示したような情報伝達データが、反転されると、図54のAの下段に示したデータとなる。反転された情報伝達データは、0111011110011100100010000110000となる。この反転された情報伝達データは、図53に示した1bit違うデータ1乃至32のうちの、1bit違うデータ1と同じデータ列となっている。
【0575】
また、図54のAの下段に示したデータは、反転されたデータであるため、フラグとして1が付加されている。よって、このような反転符号化が行われると、デコーダ12側では、フラグが1であり、1bit違うデータ1と同じデータ列であるため、制御コードとして扱われる。しかしながら、図54のAの下段に示したデータは、情報伝達データが反転されたデータであり、制御コードではないため、デコーダ12側で制御コードとして扱われると、誤ったデコードとなる。
【0576】
このようなことから、エンコーダ11は、図54のAの上段に示した情報伝達データは、反転しないデータ(反転禁止のデータ列)として処理する。すなわち、エンコーダ11は、図54のAの上段に示した情報伝達データが入力された場合、反転禁止のデータ列として扱い、0というフラグを付加する処理を実行する。
【0577】
このようにエンコードが行われることで、図54のAの上段に示した情報伝達データは、反転されず、また0というフラグが付加されるため、デコーダ12側では、反転されていない情報伝達データであるとしてデコードが行われる。
【0578】
すなわち、エンコーダ11は、反転すると制御コードと1ビットだけ異なるデータ列になる情報伝達データは、反転禁止のデータ列として扱い、フラグとして0を付加するエンコードを行う。図54を参照して説明したように、制御コードと1ビット異なるデータ列は、32パターンあるため、これら32パターンのデータ列が、エンコーダ11側では反転禁止のデータ列として扱われる。
【0579】
また、制御コードは、上記したように、複数あるため、複数の制御コード毎の32パターンの1bit違いのデータと、反転したときに同一のデータ列となる情報伝達データも、非反転のデータとして扱われる。
【0580】
また、図54のBに示すように、2ビットのエラーが発生したときに、制御コードと一致するような情報伝達データも、反転禁止のデータ列として扱われるようにしても良い。
【0581】
図54のBの上段に示した1000100001101011011101111001111という情報伝達データが、反転されると、中段に示した0111011110010100100010000110000というデータ列に変換される。さらに、この反転されたデータ列に1ビットのエラーが発生した場合、下段に示した0111011110011100100010000110000というデータ列になる。
【0582】
この反転されたデータ列に1ビットのエラーが発生している0111011110011100100010000110000というデータ列は、図54のAの下段に示した反転後のデータ列と同一のデータ列である。この図54のAの下段に示した反転後のデータ列は、図53に示した1bit違うデータ1と同じデータ列である。
【0583】
図54のBの上段に示した反転前の情報伝達データは、反転したデータ列に1ビットのエラーが発生することで、制御コードに1ビットのエラーが発生したとき1bit違うデータ1と同一のデータ列となる。このような情報伝達データも、反転禁止のデータとして扱われるようにしても良い。このような情報伝達データを、ここでは、2bit違うデータと記述する。
【0584】
このように、エンコーダ11は、反転すると制御コードとなる情報伝達データ、反転すると制御コードに1ビットのエラーが発生したときの1bit違うデータとなる情報伝達データ、さらに、反転すると制御コードに2ビットのエラーが発生したときの2bit違うデータとなる情報伝達データは、反転禁止のデータ列として扱う。
【0585】
このように、拡大された制御コードを含めて反転禁止のデータ列として扱うようにした場合も、エンコーダ11の処理は、図51に示したフローチャートに基づき行うことができる。すなわち、ステップS206において、処理対象とされているデータ列は、反転禁止のデータ列であるか否かが判定されるが、この反転禁止のデータ列として設定されているデータ列が、反転すると制御コードとなる情報伝達データだけではなく、上記した情報伝達データ(拡大された制御データ)まで広げられている点が異なり、他の処理は同様に行うことができる。
【0586】
また、デコーダ12の処理は、図52に示したフローチャートに基づき行うことができる。すなわち、ステップS232において、制御コードであるか否かが判定されるが、この制御コードであると判定するための制御コードが、制御コードだけでなく、1bit違うデータと2bit違うデータまで範囲が広げられている点が異なり、他の処理は同様に行うことができる。
【0587】
エンコーダ11とデコーダ12のそれぞれの構成も、基本的には、図3に示したエンコーダ11や図4に示したデコーダ12と同様の構成とすることができる。ただし、エンコーダ11側では、反転禁止のデータ列の範囲が広げられているため、その処理を実行する機能を加える必要がある。またデコーダ12側も、制御コードとして判定するデータ列の範囲が広げられているため、その処理を実行する機能を加える必要がある。
【0588】
図55は、反転禁止のデータ列として扱う範囲を拡大したときのエンコーダ11に関わる構成図を示す。エンコーダ11は、距離判定部402から反転禁止フラグが供給される構成とされている。また、距離判定部402は、データ反転部401からのデータの供給を受ける構成とされている。
【0589】
データ反転部401と距離判定部402は、プレエンコーダ301に含まれる構成とすることができる。プレエンコーダ301は、図43を参照して説明したように、制御コードと情報伝達データを区別し、制御コードであるか、情報伝送データであるかを表すDCフラグをエンコーダ11に供給する。
【0590】
このような処理を行うプレエンコーダ301に、データ反転部401と距離判定部402を追加する構成とする場合を例に挙げて説明を続けるが、プレエンコーダ301と同じく、エンコーダ11と別体として設けられていても良いし、エンコーダ11内に含まれる構成としても良い。プレエンコーダ301は、DCフラグを出力するが、このDCフラグは、制御コードであるか、情報伝達データであるかを表すフラグである。このようなDCフラグを出すのは、制御コードである場合、反転禁止とするためである。よって、DCフラグを、反転禁止フラグとして用い、反転禁止のデータであるか、反転しても良いデータであるかを表すフラグとして用いるようにしても良い。
【0591】
プレエンコーダ301に含まれるデータ反転部401は、入力されたデータを反転する。反転されるデータは、情報伝達データを処理対象とすれば良いため、制御データが入力されたときには、データ反転部401での処理は実行されないようにしても良い。反転されたデータは、距離判定部402に供給される。距離判定部402は、制御コードと、反転された情報伝達データを比較する。
【0592】
距離判定部402は、反転されたデータ列が、制御コード、1bit違うデータ列、または2bit違うデータ列のいずれかに該当するか否かを判定する。この判定は、反転されたデータ列と制御コードとが何ビット異なるかを判定することで行われる。換言すれば、反転されたデータ列と制御コードとの距離が判定される。例えば、ハミング距離を判定することで反転されたデータ列と制御コードとの異なるビット数が判定される。
【0593】
反転されたデータ列と制御コードとが一致している、換言すればハミング距離=0の場合、反転禁止のデータ列として判定される。また、反転されたデータ列と制御コードとが1ビット異なる、換言すればハミング距離=1の場合、反転禁止のデータ列として判定される。また、反転されたデータ列と制御コードとが2ビット異なる、換言すればハミング距離=2の場合、反転禁止のデータ列として判定される。
【0594】
距離判定部402は、反転されたデータ列と制御コードとが3ビット以上異なる、換言すればハミング距離が3以上の場合、情報伝達データであると判定する。
【0595】
距離判定部402において、反転禁止のデータ列と判定された場合、反転禁止のデータ列であることを表すDCフラグが、エンコーダ11に供給される。DCフラグとしては、制御コードであることを表すフラグ、情報伝達データであることを表すフラグ、および情報伝達データであるが、反転禁止のデータであることを表すフラグのいずれかである。
【0596】
このように、反転されたデータが、拡大された制御コードと一致するか否かを判定し、その判定結果を用いてエンコードが行われるようにしても良い。
【0597】
またここでは、拡大された制御コードの範囲が、制御コード、1bit違うデータ、および2bit違うデータまでとしたが、3bit違うデータや4bit違うデータまで含めることも可能である。エラーが発生するビット数として保障するかは、システムに要求されている性能などを考慮して適宜設定することができる。
【0598】
データを反転せずに、データと反転された制御コードが比較されるような構成とすることもできる。図56は、反転禁止のデータ列として扱う範囲を拡大したときのエンコーダ11に関わる他の構成図を示す。エンコーダ11には、プレエンコーダ301に含まれる距離判定部411からDCフラグが供給される構成とされている。
【0599】
距離判定部411は、入力されたデータと反転された制御コードとの距離を判定する。距離判定部411は、入力されたデータ列と反転された制御コードが一致している場合(ハミング距離=0である場合)、反転禁止のデータ列と判定し、反転禁止であることを示すDCフラグを出力する。
【0600】
また距離判定部411は、入力されたデータ列と反転された制御コードとが1ビット異なる場合(ハミング距離=1の場合)、反転禁止のデータ列として判定し、反転禁止であることを示すDCフラグを出力する。また距離判定部411は、入力されたデータ列と反転された制御コードとが2ビット異なる場合(ハミング距離=2の場合)、反転禁止のデータ列として判定し、反転禁止であることを示すDCフラグを出力する。
【0601】
距離判定部411は、入力されたデータ列と反転された制御コードとが3ビット以上異なる場合(ハミング距離が3以上の場合)、情報伝達データであると判定し、判定しても良いデータであることを示すDCフラグを出す。
【0602】
このように、入力されたデータが、拡大された制御コードを反転したデータ列と一致するか否かを判定し、その判定結果を用いてエンコードが行われるようにしても良い。
【0603】
このように、エンコーダ11では、拡大された制御コードと一致する情報伝達データは、反転禁止のデータ列として扱われ、非反転とされ、フラグとしては0が設定される。
【0604】
このような拡大された制御コードも扱うようにした場合のデコーダ12に関わる構成について説明する。図57は、拡大された制御コードを扱う場合のデコーダ12に関わる構成例を示す図である。
【0605】
デコーダ12は、距離判定部451からの判定結果を用いてデコードを行う構成とされる。距離判定部451は、デコーダ12に入力されるデータ列と同一のデータ列が入力され、その入力されたデータ列と、制御コードとの距離を判定する。距離判定部451は、基本的には、エンコーダ11側の距離判定部402(411)と同様に、入力されたデータ列と、制御コードとの距離を判定する。
【0606】
入力されるデータ列のフラグが1である場合、制御コードであるか、または反転された情報伝達データである。拡大された制御コードも、制御コードとして判定するためには、フラグが1であるデータ列が、制御コードであるのか、拡大された制御コードであるのか、または反転された情報伝達データであるのかを判定する必要がある。
【0607】
そこで、距離判定部451は、入力されたデータ列と制御コードとの距離を判定する。距離判定部451は、入力されたデータ列と制御コードが一致している場合(ハミング距離=0である場合)、制御コードであると判定する。
【0608】
また、距離判定部451は、入力されたデータ列と制御コードとが1ビット異なる場合(ハミング距離=1の場合)、制御コードであるとして判定する。また、距離判定部451は、入力されたデータ列と制御コードとが2ビット異なる場合(ハミング距離=2の場合)、制御コードであるとして判定する。
【0609】
距離判定部451は、入力されたデータ列と制御コードとが3ビット以上異なる場合(ハミング距離が3以上の場合)、情報伝達データであると判定する。
【0610】
このように、入力されたデータが、拡大された制御コードと一致するか否かを判定し、その判定結果、換言すれば、制御コードであるか、情報伝達データであるかの情報を用いてデコードが行われるようにしても良い。
【0611】
このように、拡大された制御コードも制御コードとして扱うようにすることで、制御コードにエラーが発生したような場合であっても、制御コードとして扱うことが可能となる。
【0612】
<スクランブルを併用するエンコード、デコードについて>
エンコードおよびデコードを、拡大された制御コードも制御コードとして扱うようにすることで、エラーが発生したときの耐性を高めることができる。一方で、拡大された制御コードも制御コードとして扱えるようにした場合、エンコーダ11側では、反転禁止とされる情報伝達データが増える可能性がある。
【0613】
反転禁止とされる情報伝達データが増えることで、ランニングディスパリティRDが増加してしまう可能性がある。例えば、反転禁止の情報伝達データが連続した場合、ランニングディスパリティRDが増加する可能性がある。また、画像として階調が上下するような縦縞画像(所謂キラーパターンなどと称される画像)を処理する場合、反転禁止のデータ列が連続する可能性があり、ランニングディスパリティRDが増加する可能性がある。
【0614】
上記したように、本技術を適用したエンコードやデコードによれば、ランニングディスパリティRDとランレングスRLを制御(抑圧)することができるが、拡大された制御コードまでも扱うエンコードやデコードを行うようにした場合にランニングディスパリティRDが増加する可能性がある。そこで、ランニングディスパリティRDとランレングスRLを制御(抑圧)し、かつ拡大された制御コードまでも扱うことでエラー耐性を向上させることができるエンコードとデコードについて説明を続ける。
【0615】
図58は、エンコーダ11の他の構成例を示す図である。図58に示したエンコーダ11bは、図3に示したエンコーダ11と比較して、スクランブル部501が追加された構成とされている点が異なり、他の点は同一である。図3に示したエンコーダ11と同一の部分に関しては説明を省略する。
【0616】
スクランブル部501は、エンコーダ11bに入力された情報伝達データに対してスクランブルをかける。エンコーダ11bは、図3に示したエンコーダ11と同じく、反転符号化に基づく符号化を行う。この反転符号化を行う前に、データをスクランブルする。ただし、制御コードはスクランブルの対象外とし、スクランブルをかけずに処理される。
【0617】
エンコーダ11bは、プレエンコーダ301(図43)からデータとDCフラグが供給される構成としても良いし、プレエンコーダ301がない構成であっても良い。エンコーダ11bは、拡大された制御コードも扱うエンコードを行い、かつランニングディスパリティRDやランレングスRLを制御できる反転符号化を行う場合に適用できる。また、エンコーダ11bは、拡大された制御コードを扱わないエンコードを行う場合であっても適用でき、そのような場合であってもランニングディスパリティRDやランレングスRLを制御できるエンコードを行う場合に適用できる。
【0618】
スクランブルは、0と1が高確率で連続しないように、0と1のパターンが頻繁なシフトによりランダム化されることにより行われる。また、このスクランブルは、受信側で再び元のデータ列に戻すことができる。スクランブル部501は、例えば、生成多項式によるスクランブルを行う。生成多項式によるスクランブルとしては、疑似ランダムビットシーケンス(PRBS:pseude-random bit sequence)を用いたスクランブルを適用することができる。
【0619】
生成多項式の一例を、次式(7)に示す。
PayloadScramble=X15+X14+1 ・・・(7)
【0620】
スクランブル部501により、反転禁止のデータも、スクランブルがかけられ、0または1が連続するようなことが抑制される。よって、反転禁止のデータが連続するような状況が発生したような場合でも、ランニングディスパリティRDが増加するようなことを抑制することができる。
【0621】
また、スクランブル部501によりスクランブルがかけられた情報伝達データに対して、反転符号化の処理が行われるため、さらに、ランニングディスパリティRDやランレングスRLを制御した符号化を行うことができる。
【0622】
図58に示したエンコーダ11bに対応するデコーダ12bの構成例を、図59に示す。図59に示したデコーダ12bは、図4に示したデコーダ12と比較して、デスクランブル部511が追加された構成とされている点が異なり、他の点は同一である。図4に示したデコーダ12と同一の部分に関しては説明を省略する。
【0623】
デスクランブル部511は、デコーダ12b内のデコードされたスクランブルされているデータ列の供給を受け、デスクランブルの処理を実行する。エンコード側でスクランブルは、反転符号化が行われる前の処理で行われている。デコード側では、反転符号化が行われているデータに対して、反転復号の処理を実行して、反転符号化が行われる前のデータ列を取得し、その後、スクランブルを解除する処理が実行される。
【0624】
<エンコーダとデコーダの処理>
図58に示したエンコーダ11bの処理について、図60のフローチャートを参照して説明する。
【0625】
図60に示したフローチャートの処理は、図51に示したフローチャートの処理に、スクランブル部501がスクランブルを行う処理を追加した点が異なり、他の処理は同様であるため、同様な処理については説明を省略する。
【0626】
ステップS301乃至S305は、ステップS201乃至S205(図51)と同様の処理であり、制御コードが入力されたときには、反転符号化処理を行わずに、フラグを1に設定したデータ列を出力する。また、制御コードに対しては、スクランブル部501におけるスクランブルの処理も実行されない。
【0627】
一方で、ステップS302において、処理対象とされているデータ列は、制御コードではないと判定された場合、すなわち、情報伝達データであると判定された場合、ステップS306に処理が進められる。ステップS306において、処理対象とされた情報伝達データに対して、スクランブル部501によりスクランブルがかけられる。
【0628】
スクランブルがかけられた情報伝達データに対して、ステップS307乃至S309の処理が実行される。このステップS307乃至S309の処理は、ステップS206乃至S208(図51)と同様の処理であり、反転符号化に係わる処理である。
【0629】
このように、情報伝達データに対して、スクランブルがかけられ、その後、反転符号化の処理が実行されることでエンコードが行われる。
【0630】
次に、図59に示したデコーダ12bの処理について、図61のフローチャートを参照して説明する。
【0631】
図61に示したフローチャートの処理は、図52に示したフローチャートの処理に、デスクランブル部511がデスクランブルを行う処理を追加した点が異なり、他の処理は同様であるため、同様な処理については説明を省略する。
【0632】
ステップS331乃至S339は、ステップS231乃至S239(図52)と同様の処理であり、情報伝達データに対する反転復号の処理が実行される。制御コードの場合には、反転符号化およびスクランブルが実行されていないため、制御コードであると判定された場合には、そのデータ列は、制御コードであるとして処理される。
【0633】
一方で、制御コードでないデータ、すなわち情報伝達データに対しては、反転復号の処理が実行されることで、スクランブルがかけられた状態の情報伝達データが取得される。
【0634】
ステップS340において、デスクランブル部511は、スクランブルがかけられている情報伝達データに対してデスクランブルの処理を実行することで、スクランブルが解除されたデータ列を生成する。
【0635】
このように、反転符号化された情報伝達データに対して、反転復号が行われ、スクランブルがかけられている情報伝達データに対してデスクランブルの処理が実行されることでデコードが行われる。
【0636】
このようにエンコードやデコードが行われることで、ランニングディスパリティRDやランレングスRLをより制御(抑圧)することができる。
【0637】
なお、スクランブルを行うようにした場合、スクランブルにリセットをかける制御コードを新たに定義し、エンコーダ11とデコーダ12との間で授受されるようにしても良い。また、スクランブルにリセットをかける制御コードは、リセットのタイミングを任意のライン(LINE)数で行えるようにするものであっても良い。
【0638】
本技術を適用した符号化、復号によれば、簡単な回路構成で、伝送効率を悪化させることなく、ランニングディスパリティRDとランレングスRLを制御(抑圧)することができる。また、フラグの誤りを検出できるようにすることで、受信側で、受信データの信頼性を向上させた処理を行うことができる。
【0639】
また、制御コードといった特殊なデータ列を有するデータ列のランニングディスパリティRDやランレングスRLを制限することができる。よって、制御コードが連続するような場合であっても、ランニングディスパリティRDやランレングスRLが悪化するようなことを抑制することができる。また、制御コードのランニングディスパリティRDやランレングスRLの悪化が抑制されることで、受信側でクロックなどの制御コードを用いた処理の制度を向上させることができる。
【0640】
<コンピュータの構成例>
上記した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
【0641】
図62は、上記した一連の処理をプログラムにより実行するコンピュータのハードウェアの構成例を示すブロック図である。
【0642】
CPU(Central Processing Unit)1001、ROM(Read Only Memory)1002、RAM(Random Access Memory)1003は、バス1004により相互に接続されている。
【0643】
バス1004には、さらに、入出力インタフェース1005が接続されている。入出力インタフェース1005には、キーボード、マウスなどよりなる入力部1006、ディスプレイ、スピーカなどよりなる出力部1007が接続される。また、入出力インタフェース1005には、ハードディスクや不揮発性のメモリなどよりなる記憶部1008、ネットワークインタフェースなどよりなる通信部1009、リムーバブルメディア1011を駆動するドライブ1010が接続される。
【0644】
以上のように構成されるコンピュータでは、CPU1001が、例えば、記憶部1008に記憶されているプログラムを入出力インタフェース1005及びバス1004を介してRAM1003にロードして実行することにより、上記した一連の処理が行われる。
【0645】
CPU1001が実行するプログラムは、例えばリムーバブルメディア1011に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供され、記憶部1008にインストールされる。
【0646】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0647】
本明細書に記載された効果はあくまで例示であって限定されるものでは無く、また他の効果があってもよい。
【0648】
本技術の実施の形態は、上記した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【0649】
例えば、本技術は、1つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【0650】
また、上記のフローチャートで説明した各ステップは、1つの装置で実行する他、複数の装置で分担して実行することができる。
【0651】
さらに、1つのステップに複数の処理が含まれる場合には、その1つのステップに含まれる複数の処理は、1つの装置で実行する他、複数の装置で分担して実行することができる。
【0652】
<内視鏡手術システムへの応用例>
本開示に係る技術(本技術)は、様々な製品へ応用することができる。例えば、本開示に係る技術は、内視鏡手術システムに適用されてもよい。
【0653】
図63は、本開示に係る技術(本技術)が適用され得る内視鏡手術システムの概略的な構成の一例を示す図である。
【0654】
図63では、術者(医師)11131が、内視鏡手術システム11000を用いて、患者ベッド11133上の患者11132に手術を行っている様子が図示されている。図示するように、内視鏡手術システム11000は、内視鏡11100と、気腹チューブ11111やエネルギー処置具11112等の、その他の術具11110と、内視鏡11100を支持する支持アーム装置11120と、内視鏡下手術のための各種の装置が搭載されたカート11200と、から構成される。
【0655】
内視鏡11100は、先端から所定の長さの領域が患者11132の体腔内に挿入される鏡筒11101と、鏡筒11101の基端に接続されるカメラヘッド11102と、から構成される。図示する例では、硬性の鏡筒11101を有するいわゆる硬性鏡として構成される内視鏡11100を図示しているが、内視鏡11100は、軟性の鏡筒を有するいわゆる軟性鏡として構成されてもよい。
【0656】
鏡筒11101の先端には、対物レンズが嵌め込まれた開口部が設けられている。内視鏡11100には光源装置11203が接続されており、当該光源装置11203によって生成された光が、鏡筒11101の内部に延設されるライトガイドによって当該鏡筒の先端まで導光され、対物レンズを介して患者11132の体腔内の観察対象に向かって照射される。なお、内視鏡11100は、直視鏡であってもよいし、斜視鏡又は側視鏡であってもよい。
【0657】
カメラヘッド11102の内部には光学系及び撮像素子が設けられており、観察対象からの反射光(観察光)は当該光学系によって当該撮像素子に集光される。当該撮像素子によって観察光が光電変換され、観察光に対応する電気信号、すなわち観察像に対応する画像信号が生成される。当該画像信号は、RAWデータとしてカメラコントロールユニット(CCU: Camera Control Unit)11201に送信される。
【0658】
CCU11201は、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)等によって構成され、内視鏡11100及び表示装置11202の動作を統括的に制御する。さらに、CCU11201は、カメラヘッド11102から画像信号を受け取り、その画像信号に対して、例えば現像処理(デモザイク処理)等の、当該画像信号に基づく画像を表示するための各種の画像処理を施す。
【0659】
表示装置11202は、CCU11201からの制御により、当該CCU11201によって画像処理が施された画像信号に基づく画像を表示する。
【0660】
光源装置11203は、例えばLED(light emitting diode)等の光源から構成され、術部等を撮影する際の照射光を内視鏡11100に供給する。
【0661】
入力装置11204は、内視鏡手術システム11000に対する入力インタフェースである。ユーザは、入力装置11204を介して、内視鏡手術システム11000に対して各種の情報の入力や指示入力を行うことができる。例えば、ユーザは、内視鏡11100による撮像条件(照射光の種類、倍率及び焦点距離等)を変更する旨の指示等を入力する。
【0662】
処置具制御装置11205は、組織の焼灼、切開又は血管の封止等のためのエネルギー処置具11112の駆動を制御する。気腹装置11206は、内視鏡11100による視野の確保及び術者の作業空間の確保の目的で、患者11132の体腔を膨らめるために、気腹チューブ11111を介して当該体腔内にガスを送り込む。レコーダ11207は、手術に関する各種の情報を記録可能な装置である。プリンタ11208は、手術に関する各種の情報を、テキスト、画像又はグラフ等各種の形式で印刷可能な装置である。
【0663】
なお、内視鏡11100に術部を撮影する際の照射光を供給する光源装置11203は、例えばLED、レーザ光源又はこれらの組み合わせによって構成される白色光源から構成することができる。RGBレーザ光源の組み合わせにより白色光源が構成される場合には、各色(各波長)の出力強度及び出力タイミングを高精度に制御することができるため、光源装置11203において撮像画像のホワイトバランスの調整を行うことができる。また、この場合には、RGBレーザ光源それぞれからのレーザ光を時分割で観察対象に照射し、その照射タイミングに同期してカメラヘッド11102の撮像素子の駆動を制御することにより、RGBそれぞれに対応した画像を時分割で撮像することも可能である。当該方法によれば、当該撮像素子にカラーフィルタを設けなくても、カラー画像を得ることができる。
【0664】
また、光源装置11203は、出力する光の強度を所定の時間ごとに変更するようにその駆動が制御されてもよい。その光の強度の変更のタイミングに同期してカメラヘッド11102の撮像素子の駆動を制御して時分割で画像を取得し、その画像を合成することにより、いわゆる黒つぶれ及び白とびのない高ダイナミックレンジの画像を生成することができる。
【0665】
また、光源装置11203は、特殊光観察に対応した所定の波長帯域の光を供給可能に構成されてもよい。特殊光観察では、例えば、体組織における光の吸収の波長依存性を利用して、通常の観察時における照射光(すなわち、白色光)に比べて狭帯域の光を照射することにより、粘膜表層の血管等の所定の組織を高コントラストで撮影する、いわゆる狭帯域光観察(Narrow Band Imaging)が行われる。あるいは、特殊光観察では、励起光を照射することにより発生する蛍光により画像を得る蛍光観察が行われてもよい。蛍光観察では、体組織に励起光を照射し当該体組織からの蛍光を観察すること(自家蛍光観察)、又はインドシアニングリーン(ICG)等の試薬を体組織に局注するとともに当該体組織にその試薬の蛍光波長に対応した励起光を照射し蛍光像を得ること等を行うことができる。光源装置11203は、このような特殊光観察に対応した狭帯域光及び/又は励起光を供給可能に構成され得る。
【0666】
図64は、図63に示すカメラヘッド11102及びCCU11201の機能構成の一例を示すブロック図である。
【0667】
カメラヘッド11102は、レンズユニット11401と、撮像部11402と、駆動部11403と、通信部11404と、カメラヘッド制御部11405と、を有する。CCU11201は、通信部11411と、画像処理部11412と、制御部11413と、を有する。カメラヘッド11102とCCU11201とは、伝送ケーブル11400によって互いに通信可能に接続されている。
【0668】
レンズユニット11401は、鏡筒11101との接続部に設けられる光学系である。鏡筒11101の先端から取り込まれた観察光は、カメラヘッド11102まで導光され、当該レンズユニット11401に入射する。レンズユニット11401は、ズームレンズ及びフォーカスレンズを含む複数のレンズが組み合わされて構成される。
【0669】
撮像部11402を構成する撮像素子は、1つ(いわゆる単板式)であってもよいし、複数(いわゆる多板式)であってもよい。撮像部11402が多板式で構成される場合には、例えば各撮像素子によってRGBそれぞれに対応する画像信号が生成され、それらが合成されることによりカラー画像が得られてもよい。あるいは、撮像部11402は、3D(dimensional)表示に対応する右目用及び左目用の画像信号をそれぞれ取得するための1対の撮像素子を有するように構成されてもよい。3D表示が行われることにより、術者11131は術部における生体組織の奥行きをより正確に把握することが可能になる。なお、撮像部11402が多板式で構成される場合には、各撮像素子に対応して、レンズユニット11401も複数系統設けられ得る。
【0670】
また、撮像部11402は、必ずしもカメラヘッド11102に設けられなくてもよい。例えば、撮像部11402は、鏡筒11101の内部に、対物レンズの直後に設けられてもよい。
【0671】
駆動部11403は、アクチュエータによって構成され、カメラヘッド制御部11405からの制御により、レンズユニット11401のズームレンズ及びフォーカスレンズを光軸に沿って所定の距離だけ移動させる。これにより、撮像部11402による撮像画像の倍率及び焦点が適宜調整され得る。
【0672】
通信部11404は、CCU11201との間で各種の情報を送受信するための通信装置によって構成される。通信部11404は、撮像部11402から得た画像信号をRAWデータとして伝送ケーブル11400を介してCCU11201に送信する。
【0673】
また、通信部11404は、CCU11201から、カメラヘッド11102の駆動を制御するための制御信号を受信し、カメラヘッド制御部11405に供給する。当該制御信号には、例えば、撮像画像のフレームレートを指定する旨の情報、撮像時の露出値を指定する旨の情報、並びに/又は撮像画像の倍率及び焦点を指定する旨の情報等、撮像条件に関する情報が含まれる。
【0674】
なお、上記のフレームレートや露出値、倍率、焦点等の撮像条件は、ユーザによって適宜指定されてもよいし、取得された画像信号に基づいてCCU11201の制御部11413によって自動的に設定されてもよい。後者の場合には、いわゆるAE(Auto Exposure)機能、AF(Auto Focus)機能及びAWB(Auto White Balance)機能が内視鏡11100に搭載されていることになる。
【0675】
カメラヘッド制御部11405は、通信部11404を介して受信したCCU11201からの制御信号に基づいて、カメラヘッド11102の駆動を制御する。
【0676】
通信部11411は、カメラヘッド11102との間で各種の情報を送受信するための通信装置によって構成される。通信部11411は、カメラヘッド11102から、伝送ケーブル11400を介して送信される画像信号を受信する。
【0677】
また、通信部11411は、カメラヘッド11102に対して、カメラヘッド11102の駆動を制御するための制御信号を送信する。画像信号や制御信号は、電気通信や光通信等によって送信することができる。
【0678】
画像処理部11412は、カメラヘッド11102から送信されたRAWデータである画像信号に対して各種の画像処理を施す。
【0679】
制御部11413は、内視鏡11100による術部等の撮像、及び、術部等の撮像により得られる撮像画像の表示に関する各種の制御を行う。例えば、制御部11413は、カメラヘッド11102の駆動を制御するための制御信号を生成する。
【0680】
また、制御部11413は、画像処理部11412によって画像処理が施された画像信号に基づいて、術部等が映った撮像画像を表示装置11202に表示させる。この際、制御部11413は、各種の画像認識技術を用いて撮像画像内における各種の物体を認識してもよい。例えば、制御部11413は、撮像画像に含まれる物体のエッジの形状や色等を検出することにより、鉗子等の術具、特定の生体部位、出血、エネルギー処置具11112の使用時のミスト等を認識することができる。制御部11413は、表示装置11202に撮像画像を表示させる際に、その認識結果を用いて、各種の手術支援情報を当該術部の画像に重畳表示させてもよい。手術支援情報が重畳表示され、術者11131に提示されることにより、術者11131の負担を軽減することや、術者11131が確実に手術を進めることが可能になる。
【0681】
カメラヘッド11102及びCCU11201を接続する伝送ケーブル11400は、電気信号の通信に対応した電気信号ケーブル、光通信に対応した光ファイバ、又はこれらの複合ケーブルである。
【0682】
ここで、図示する例では、伝送ケーブル11400を用いて有線で通信が行われていたが、カメラヘッド11102とCCU11201との間の通信は無線で行われてもよい。
【0683】
本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【0684】
なお、本明細書に記載された効果はあくまで例示であって限定されるものでは無く、また他の効果があってもよい。
【0685】
なお、本技術の実施の形態は、上記した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【0686】
なお、本技術は以下のような構成も取ることができる。
(1)
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出する算出部と、
前記算出部で算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティに基づき、前記データ列を反転するか否かを判定する判定部と、
前記判定部による判定結果に基づき、前記データ列を反転または非反転し、前記判定部による判定結果を表すフラグを付加して出力する付加部と
を備え、
前記判定部は、前記データ列が制御コードである場合、反転しないと判定し、
前記付加部は、前記制御コードに割り当てられている前記フラグを付加する
符号化装置。
(2)
前記Nと前記Mは、奇数である
前記(1)に記載の符号化装置。
(3)
入力される所定のビット数の制御コードを、前記Nビットまたは前記Mビットの制御コードに変換する
前記(1)または(2)に記載の符号化装置。
(4)
前記Nビットは、前記所定のビット数よりも小さいビット数であり、前記Mビットは、前記所定のビット数よりも大きいビット数である
前記(3)に記載の符号化装置。
(5)
前記所定のビット数は、32ビットであり、前記Nビットは、31ビットであり、前記Mビットは33ビットである
前記(3)に記載の符号化装置。
(6)
前記変換は、前記所定のビット数の制御コードと、変換後の制御コードが関連づけられた表が参照されて変換される
前記(3)に記載の符号化装置。
(7)
前記Nビットまたは前記Mビットの前記制御コードと、前記制御コードに割り当てられているフラグを含むランニングディスパリティは、0である
前記(1)乃至(6)のいずれかに記載の符号化装置。
(8)
前記Nビットまたは前記Mビットの制御データは、前記所定のビット数の制御コードの前半部分のデータ列と、前記所定のビット数の制御コードの前半部分を反転したデータ列を含む
前記(3)乃至(7)のいずれかに記載の符号化装置。
(9)
前記前半部分のデータ列と、前記前半部分を反転したデータ列との間の2ビットのデータは、0と1である
前記(8)に記載の符号化装置。
(10)
前記前半部分のデータ列の前のビットのデータは、0である
前記(8)または(9)に記載の符号化装置。
(11)
前記Mビットの制御コードの先頭ビットとして、前記Mビットの前に前記Nビットに変換されたデータ列の最後のビットが設定され、
前記Mビットの制御コードの最後のビットは、前記先頭ビットの値を反転した値が設定される
前記(8)乃至(10)のいずれかに記載の符号化装置。
(12)
前記Nビットのデータ列と前記Mビットのデータ列をそれぞれ1ブロックとし、2ブロックを1処理単位としたとき、複数の処理単位の最後のブロックの前記フラグは、前記複数の処理単位の最後のブロック以外のブロックに付加された前記フラグの排他的論理和の計算結果に設定される
前記(1)乃至(11)のいずれかに記載の符号化装置。
(13)
前記最後のブロックは、反転しないデータ列として処理される
前記(12)に記載の符号化装置。
(14)
前記Nビットのデータ列と前記Mビットのデータ列をそれぞれ1ブロックとし、2ブロックを1処理単位としたとき、複数の処理単位の最後のブロックの後に、複数の処理単位に含まれる前記フラグをハミング(Humming)符号処理した結果を付加する
前記(1)乃至(13)のいずれかに記載の符号化装置。
(15)
前記判定部により反転すると判定されたときに、前記付加部により付加される前記フラグと、前記制御コードに割り当てられている前記フラグは同一である
前記(1)乃至(14)のいずれかに記載の符号化装置。
(16)
符号化装置が、
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、
算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティに基づき、前記データ列を反転するか否かを判定し、
判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、
前記判定は、前記データ列が制御コードである場合、反転しないと判定し、
前記制御コードに割り当てられているフラグを付加する
符号化方法。
(17)
符号化装置を制御するコンピュータに、
入力されたデータをNビットまたはMビットに分割し、前記Nビットまたは前記Mビットのデータ列の第1のランニングディスパリティを算出し、
算出された前記第1のランニングディスパリティと、前記第1のランニングディスパリティより前の時点で算出された第2のランニングディスパリティに基づき、前記データ列を反転するか否かを判定し、
判定結果に基づき、前記データ列を反転または非反転し、前記判定結果を表すフラグを付加して出力し、
前記判定は、前記データ列が制御コードである場合、反転しないと判定し、
前記制御コードに割り当てられているフラグを付加する
ステップを含む処理を実行させるためのプログラム。
(18)
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、制御コードであるか否かを判定する第1の判定部と、
前記第1の判定部により、前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定する第2の判定部と、
前記第1の判定部により、前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、前記第2の判定部により、前記データ列は、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する出力部と
を備える復号装置。
(19)
復号装置が、
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、制御コードであるか否かを判定し、
前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、
前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する
復号方法。
(20)
復号装置を制御するコンピュータが、
入力されるNビットまたはMビットのデータ列に付加されているフラグを参照し、前記データ列が、制御コードであるか否かを判定し、
前記データ列は前記制御コードではないと判定された場合、前記データ列は、反転されているか否かを判定し、
前記データ列は、前記制御コードであると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていないと判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転せずに出力し、
前記データ列は、前記制御コードではなく、反転されていると判定された場合、入力された前記Nビットまたは前記Mビットの前記データ列を反転して出力する
ステップを含む処理を実行するためのプログラム。
【符号の説明】
【0687】
11 エンコーダ, 12 デコーダ, 31 反転部, 32 選択部, 33 付加部, 34 ビットチェック部, 35 RDチェック部, 36 RLチェック部, 37 フラグ判定部, 41 反転部, 42 選択部, 43 フラグ判定部, 61 エラー検出部, 71 状態制御部, 72 ヘッダ生成部, 73 データ挿入部, 74 フッタ生成部, 81 ブロック, 82 パリティビット, 100伝送システム, 111 イメージセンサ, 121 撮像部, 122 送信部, 131 受信部, 132 画像処理部, 151 システム制御部, 152 フレームデータ入力部, 153 レジスタ, 161 TXプロトコル管理部, 162 Byte変換部, 163 ペイロードECC挿入部, 164 パケット生成部, 165 レーン分配部, 171 状態制御部, 172 ヘッダ生成部, 173 データ挿入部, 174 フッタ生成部, 181 TX状態制御部, 182 クロック生成部, 183 信号処理部, 191 制御コード挿入部, 192 8B10Bシンボルエンコーダ, 193 同期部, 194 送信部, 201 RX状態制御部, 202 信号処理部, 211 受信部, 212 クロック生成部, 213 同期部, 214 シンボル同期部, 215 10B8Bシンボルデコーダ, 216 スキュー補正部, 217 制御コード除去部, 221 RXプロトコル管理部, 222 レーン統合部, 223 パケット分離部, 224 ペイロードエラー訂正部, 225 Pixel変換部, 231 状態制御部, 232 ヘッダエラー訂正部, 233 データ除去部, 234 フッタエラー検出部, 241 フレームデータ出力部, 242 レジスタ, 243 システム制御部, 244 シンボル同期部, 301 プレエンコーダ, 401 データ反転部, 402 距離判定部, 451 距離判定部, 501 スクランブル部, 511 デスクランブル部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
図38
図39
図40
図41
図42
図43
図44
図45
図46
図47
図48
図49
図50
図51
図52
図53
図54
図55
図56
図57
図58
図59
図60
図61
図62
図63
図64