(57)【特許請求の範囲】
【請求項１】
ブロック符号を構成する入力データについて誤り訂正を行い、誤り訂正したデータを出力する誤り訂正装置であって、
入力手段から受け取った前記入力データを記憶する記憶手段と、
前記入力手段から受け取った前記入力データに基づいて、ブロック符号の行方向の誤り検出、及び誤り訂正を行い、前記記憶手段から受け取ったデータに基づいて、ブロック符号の列方向の誤り検出、及び誤り訂正を行う誤り訂正手段と、
前記誤り訂正手段により誤り符号が存在すると検出された場合に、前記記憶手段中の符号を訂正後の値に書き換える誤り符号更新手段とを備えており、
前記入力データは、前記記憶手段、及び前記誤り訂正手段に並行して転送されることを特徴とする誤り訂正装置。
【請求項２】
前記行方向の誤り検出、及び誤り訂正に用いられる入力データが、第２のブ
ロック符号を構成する入力データであり、
前記列方向の誤り検出、及び誤り訂正に用いられる、前記記憶手段に記憶された入力データが、１ブロック分の全ての符号列が記憶された、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データであることを特徴とする請求項１に記載の誤り訂正装置。
【請求項３】
前記入力データを、前記入力手段から前記記憶手段、及び前記誤り訂正手段に転送する第１転送手段と、
前記記憶手段の記憶しているデータを、前記誤り訂正手段に転送する第２転送手段とをさらに備えることを特徴とする請求項１に記載の誤り訂正装置。
【請求項４】
前記誤り訂正手段は、第２のブロック符号を構成する入力データに対する前記行方向の誤り検出、及び誤り訂正と、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データに対する前記列方向の誤り検出、及び誤り訂正とを、時分割で切り換えながら並行して行うことを特徴とする請求項１に記載の誤り訂正装置。
【請求項５】
前記誤り訂正手段は、前記行方向の誤り検出、及び誤り訂正を行った後、前記列方向の誤り検出、及び誤り訂正を行うことを特徴とする請求項１に記載の誤り訂正装置。
【請求項６】
前記誤り訂正手段は、前記列方向の誤り検出、及び誤り訂正を行った後、前記記憶手段に記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正を行うことを特徴とする請求項５に記載の誤り訂正装置。
【請求項７】
前記誤り訂正手段は、前記列方向の誤り検出、及び誤り訂正を行なった後、前記記憶手段に記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正、列方向の誤り検出、及び誤り訂正を繰り返し行うことを特徴とする請求項５に記載の誤り訂正装置。
【請求項８】
ブロック符号を構成する入力データについて誤り訂正を行ない、誤り訂正したデータを出力する誤り訂正装置の誤り訂正方法であって、
外部から入力された前記入力データをバッファメモリに記憶させ、
外部から入力された前記入力データに基づいて、ブロック符号の行方向の誤り検出、及び誤り訂正を行い、
前記バッファメモリからのデータに基づいて、ブロック符号の列方向の誤り検出、及び誤り訂正を行い、
誤り符号が存在すると検出された場合に、前記バッファメモリ中の符号を訂正後の値に書き換え、
外部から入力された前記入力データを、前記バッファメモリに転送するのと並行して、前記バッファメモリへの転送データと同一のデータに基づいて行方向の誤り検出、及び誤り訂正を行うことを特徴とする誤り訂正方法。
【請求項９】
前記行方向の誤り検出、及び誤り訂正に用いられる入力データが、第２のブロック符号を構成する入力データであり、
前記列方向の誤り検出、及び誤り訂正に用いられる、前記バッファメモリに記憶されたデータが、１ブロック分の全ての符号列が記憶された、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データであることを特徴とする請求項８に記載の誤り訂正方法。
【請求項１０】
前記誤り訂正において、第２のブロック符号を構成する入力データに対する前記行方向の誤り検出、及び誤り訂正と、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データに対する前記列方向の誤り検出、及び誤り訂正とを、時分割で切り換えながら並行して行うことを特徴とする請求項８に記載の誤り訂正方法。
【請求項１１】
前記誤り訂正において、前記行方向の誤り検出、及び誤り訂正を行った後、前記列方向の誤り検出、及び誤り訂正を行うことを特徴とする請求項８に記載の誤り訂正方法。
【請求項１２】
前記誤り訂正において、前記列方向の誤り検出、及び誤り訂正を行った後、前記バッファメモリに記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正を行うことを特徴とする請求項１１に記載の誤り訂正方法。
【請求項１３】
前記誤り訂正において、前記列方向の誤り検出、及び誤り訂正を行なった後、前記バッファメモリに記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正、列方向の誤り検出、及び誤り訂正を繰り返し行うことを特徴とする請求項１１に記載の誤り訂正方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、符号化されたデータ中に発生する誤りの訂正に伴う処理を行う装置に関し、特に、２次元に構成されたブロック符号に対して高速に誤りを訂正する装置に関する。
【０００２】
【従来の技術】
磁気ディスクや光ディスクなどを記録媒体とするデータ記憶装置では、記録媒体上の傷や汚れによってデータの誤りが発生する。そのような誤りデータの回復を可能とするために、記録媒体上にデータを記録するときにはデータに誤り訂正のための符号（以下、「誤り訂正符号」又は「パリティデータ」という。）を付加し、再生時には誤り訂正符号を使って誤ったデータを検出し、それを正しいデータに訂正する処理が行われる。このような誤り訂正符号の付加や誤り訂正の処理（これら２つの処理を併せて、以下、「誤り訂正に伴う処理」という。）においては、その訂正能力を高めるために、誤り訂正符号の種類としてReed-Solomon符号が、また、データの構成方法として積符号が多くのシステムで採用されている。
【０００３】
図３７は、積符号の例を示す。ｋ１×ｋ２バイトからなる情報データに対して、行方向（以下、「Ｃ１系列」ともいう。）にｍ１バイトのパリティデータが付加され、列方向（以下、「Ｃ２系列」ともいう。）にｍ２バイトのパリティデータが付加されている。これら情報データ、Ｃ１パリティデータ及びＣ２パリティデータ全体で誤り訂正の最大単位となる１ブロックを構成しており、そのバイト数はｎ１×ｎ２バイトである。通常、情報データとパリティデータをＤＲＡＭ等のメモリに格納する方法として、Ｃ１系列にメモリのアドレスが１ずつ増加するように格納していく。そのため、Ｃ１系列の符号列を形成するデータは連続したアドレスの記憶領域に格納されるが、Ｃ２系列の符号列を形成するデータは不連続なアドレスの記憶領域に格納される。なお、積符号を構成する個々の符号を単に「データ」とも呼ぶ。
【０００４】
図３８は、Ｃ１符号列に対する誤り訂正の流れを示す図である。最初に第１行の符号列に対して誤り訂正する。次に第２行の符号列に対して誤り訂正する。これをｎ２行全てについて繰り返す。つまり、各行に属する全てのデータをスキャンして誤り訂正を行うことを列方向に１行ずつ進めていく。なお、「スキャン」とは誤り検出や訂正の対象となるデータを記憶領域から読み出すときの読み出し順序をいう。また、「誤り検出」には誤り訂正という処理は含まれないが、「誤り訂正」には、その前置処理としての誤り検出が含まれる。
【０００５】
図３９は、Ｃ２符号列に対する誤り訂正の流れを示す図である。最初に第１列の符号列に対して誤り訂正する。次に第２列の符号列に対して誤り訂正する。これをｎ１列全てについて繰り返す。つまり、各列に属する全てのデータをスキャンして誤り訂正を行うことを行方向に１列ずつ進めていく。
図４０は、上記流れに沿って誤り訂正を行う従来の誤り訂正装置の構成を示すブロック図である。ここで、ｄ１からｄ１００は１００バイトの情報データであり、ｐ１からｐ１０は１０バイトのパリティデータであり、これらが１つの符号列を構成するものとする。
【０００６】
これら情報データとパリティデータはメモリから読み出されて順次、シンドローム生成部９００に入力される。シンドローム生成部９００は、１つのデータが入力される度に一定の演算を行い、１つの符号列を構成する全ての情報データｄ１〜ｄ１００とパリティデータｐ１〜ｐ１０の入力が完了した時点で、１０個のシンドロームを生成する。もし、それら１０個のシンドローム中に非零が存在する場合には、その符号列に誤りが発生していることになるので、誤り位置・誤り数値演算部９０１は、それらシンドロームを用いて誤り位置と誤り数値を算出する。ここで、誤り位置とは符号列中の何番目のデータが誤っているかを表わす情報であり、誤り数値とはその誤りの大きさを表わす。最後に、誤りデータ更新部９０２は、それら誤り位置と誤り数値を用いることで、その符号列中の誤りデータをメモリから読み出し、その誤りを訂正した後に元の位置に書き戻す。このような処理を符号列ごとに繰り返す。
【０００７】
このように、従来の誤り訂正装置は、Ｃ１系列に対しては１行ずつスキャンして誤り訂正を進めていき、Ｃ２系列に対しては１列ずつスキャンして誤り訂正を進めていくことによって、１ブロック分の符号列全てに対する誤り訂正を行っている。
【０００８】
【発明が解決しようとする課題】
しかしながら、最近の光ディスクドライブ装置に代表されるデータ記憶装置の処理速度の高速化への要求はますます厳しくなってきており、従来の誤り訂正装置では、そのような要求に応えることが困難になってきている。
そのような厳しい要求を満たすために、１台のデータ記憶装置内に複数の誤り訂正装置を設けて並列化させることが考えられるが、それでは回路規模が大きくなり過ぎ、コストパフォーマンスが著しく低下してしまう。
【０００９】
そこで、本発明はかかる問題点に鑑み、比較的小さな回路規模で高速に誤り訂正に伴う処理を実行する誤り訂正装置を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、本発明は、ブロック符号を構成する入力データについて誤り訂正を行い、誤り訂正したデータを出力する誤り訂正装置であって、入力手段から受け取った前記入力データを記憶する記憶手段と、前記入力手段から受け取った前記入力データに基づいて、ブロック符号の行方向の誤り検出、及び誤り訂正を行い、前記記憶手段から受け取ったデータに基づいて、ブロック符号の列方向の誤り検出、及び誤り訂正を行う誤り訂正手段と、前記誤り訂正手段により誤り符号が存在すると検出された場合に、前記記憶手段中の符号を訂正後の値に書き換える誤り符号更新手段とを備えており、前記入力データは、前記記憶手段、及び前記誤り訂正手段に並行して転送されることとしている。
【００１１】
また、本発明に係る誤り訂正装置は、Ｒ行Ｌ列のブロック符号を構成する行方向及び列方向の符号列に対する誤り訂正に伴う演算を繰り返し実行する誤り訂正装置であって、前記ブロック符号を記憶する記憶手段と、前記ブロック符号の１行又は１列の符号列を単位として誤り符号の訂正に必要な演算を行う演算手段と、Ｌ2を２以上Ｌ未満の整数としたときに、前記記憶手段に記憶されたブロック符号のＬ2列分の符号列を読み出して前記演算手段に転送することをＬ列について順に繰り返す列方向転送部を有する転送手段とを備え、前記列方向転送部は、各行につき連続して並ぶＬ2個の符号を読み出して前記演算手段に転送することを前記Ｒ行それぞれについて順に行うＲ行Ｌ2列転送を、行方向にＬ2個の符号だけずらしながら繰り返し、前記演算手段は、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれが、対応する前記Ｌ2列の符号列それぞれに属するものとして前記Ｌ2列の符号列に対する前記演算を並列に行うものであってもよい。
【００１２】
また、本発明に係る誤り訂正装置は、外部の第１装置から受けとった符号について必要な誤り訂正をした後に外部の第２装置に出力する誤り訂正装置であって、前記符号を格納するための記憶領域を有する記憶手段と、一定個数の符号を単位として誤り符号が存在するか否かを検出する誤り検出手段と、一定個数の符号を単位として前記記憶手段中の誤り符号を訂正する誤り訂正手段と、前記第１装置から出力された符号を前記記憶手段と前記誤り検出手段に並行して転送し、その符号を前記記憶手段に格納させると共に前記誤り検出手段に前記検出を行わせる第１転送手段と、前記誤り検出手段によって誤り符号が存在すると検出された前記一定個数の符号を前記記憶手段から前記誤り訂正手段に転送し、その符号について前記誤り訂正手段に前記訂正を行わせる第２転送手段と、前記誤り検出手段又は前記誤り訂正手段によって誤り符号が存在しないことが検出又は誤り符号が訂正された一定個数の符号を前記記憶手段から前記第２装置に転送する第３転送手段と、前記第１〜第３転送手段それぞれが排他的に前記符号転送を実行するように制御する転送制御手段とを備えるものであってもよい。
【００１３】
また、本発明に係る誤り訂正装置は、外部の第１装置から受けとった符号について必要な誤り訂正をした後に外部の第２装置に出力する誤り訂正装置であって、前記符号を格納するための記憶領域を有する記憶手段と、一定個数の符号を単位として誤り符号を検出し、対応する前記記憶手段中の誤り符号を訂正する誤り訂正手段と、前記第１装置から送られてくる符号と前記記憶手段から送られてくる符号のいずれかを選択して前記誤り訂正手段に送り、前記誤り訂正手段に前記検出と訂正を行わせる符号選択手段と、前記第１装置から出力された符号を前記記憶手段と前記符号選択手段に並行して転送し、その符号を前記記憶手段に格納させると共に前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号について前記誤り訂正手段に前記検出と訂正を行わせる第１転送手段と、一定個数の符号を前記記憶手段から前記符号選択手段に転送し、その符号を前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号について前記誤り訂正手段に前記検出と訂正を行わせる第２転送手段と、前記誤り訂正手段によって誤り符号が存在しないことが検出又は誤り符号が訂正された一定個数の符号を前記記憶手段から前記第２装置に転送する第３転送手段と、前記第１〜第３転送手段それぞれが排他的に前記符号転送を実行するように制御する転送制御手段とを備えるものであってもよい。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
（第１の実施の形態）
第１の実施の形態は、行方向及び列方向のいずれかの４つの符号列に対して並列に誤り訂正を行う高速な誤り訂正装置に関する。
【００１５】
図１は、本発明の第１の実施の形態における誤り訂正装置１００の構成を示すブロック図である。本装置１００は、光ディスクドライブ装置等に備えられ、光ディスクから読み出されたデータの誤りを訂正する装置であり、バッファメモリ１と、そのバッファメモリ１にアクセスする３つの処理ブロック（ディスクインターフェース部１２、誤り訂正部５及びホストインターフェース部１３）と、それらアクセスの排他制御を行うバスコントロール部２とから構成される。なお、図中の矢印は誤り訂正の対象となるデータの流れを示す。また、本装置１００は、誤り訂正符号の種類としてはReed-Solomon符号を、符号の構成としては積符号を採用している。
【００１６】
バッファメモリ１は、２次元アドレス（行アドレスと列アドレス）によって特定される記憶領域を有するＤＲＡＭ等の半導体メモリであり、誤り訂正の対象となる複数個のブロックを一時的に記憶する記憶容量を有する。
ディスクインターフェース部１２は、光ディスク等の記録媒体から読み出されたデータを中継してバッファメモリ１に書き込むインターフェース回路である。
【００１７】
誤り訂正部５は、ディスクインターフェース部１２からバッファメモリ１に書き込まれたデータを順次に読み出して誤りが発生していないか検出し、もし誤りが発見された場合にバッファメモリ１上の誤りを訂正する回路である。具体的には、誤り訂正部５は、４つの符号列に対して同時並列に誤り訂正を行う回路であり、データ分配部５１、４つのシンドローム生成部５２〜５５、誤り位置・誤り数値演算部５６及び誤りデータ更新部５７から構成される。
【００１８】
データ分配部５１は、バッファメモリ１から転送されてきたデータを４つのシンドローム生成部５２〜５５のいずれかに振り分ける。このとき、同一の符号列に属するデータが同一のシンドローム生成部に入力されるように振り分ける。４つのシンドローム生成部５２〜５５は、いずれも同一の回路であり、それぞれ、データが振り分けられて入力される度に積和演算を行い、１０個のパリティデータが含まれた１つの符号列が完全に入力されたときに、１０個のシンドロームを生成する。
【００１９】
誤り位置・誤り数値演算部５６は、４つのシンドローム生成部５２〜５５それぞれについて順に、生成された１０個のシンドローム中に非零が存在するか否かを判断し、存在する場合に、それらシンドロームを用いて誤り位置と誤り数値を算出する。具体的には、１０個のシンドロームを基にしてユークリッド法等により誤り位置多項式と誤り数値多項式を特定するための各項の係数を算出した後に、その誤り位置多項式の根（誤り位置）をチェーン検索と呼ばれる方法等によって算出し、さらに、誤り数値多項式を用いて誤り数値を算出する。
【００２０】
誤りデータ更新部５７は、誤り位置・誤り数値演算部５６によって算出された誤り位置に基づいてバッファメモリ１中の誤りデータを読み出し、読み出した誤りデータと誤り位置・誤り数値演算部５６によって算出された誤り数値との排他的論理和を計算し、得られた値をバッファメモリ２１１０内の元の位置に書き戻す。なお、この誤り訂正部５においては、シンドロームの計算回路（シンドローム生成部５２〜５５）だけが並列化され、それに続く回路（誤り位置・誤り数値演算部５６及び誤りデータ更新部５７）については並列化されていないのは、シンドローム計算については、誤りの発生の有無に拘わらず１個のデータにつき１０回の積和演算が必要とされるが、それ以降の計算処理については、１つの符号列で生成された１０個のシンドロームに基づいて計算を行えば良いので、演算回数が少ないからである。
【００２１】
ホストインターフェース部１３は、誤り訂正部５による処理が終わったデータをバッファメモリ１から読み出してコンピュータ等のホストに出力するインターフェース回路である。
バスコントロール部２は、バッファメモリ１と３つの処理ブロック１２、５、１３のいずれかとの間で８ビット幅のデータバスを介するデータ転送を行わせる制御回路であり、バッファメモリ１へのアクセスを排他制御するバス調停制御部２２と、バッファメモリ１へのアクセスのためのアドレスを生成して出力するアドレス生成部２１と、ディスクインターフェース部１２、誤り訂正部５及びホストインターフェース部１３のいずれかとバッファメモリ１とをバス接続しＤＭＡ（Direct Memory Access）によるデータ転送を行わせるＤＭＡチャネル部２３とを有する。
【００２２】
図２は、バスコントロール部２の詳細な構成を示すブロック図である。本図において、３つのＤＭＡチャネル２３ａ〜２３ｃは図１に示されたＤＭＡチャネル部を構成するＤＭＡコントローラである。このバスコントロール部２はバッファメモリ１に対する３つのＤＭＡを排他的に許可する機能を有する。つまり、バス調停制御部２２は、ディスクインターフェース部１２、誤り訂正部５及びホストインターフェース部１３からバッファメモリ１にアクセスしたい旨の要求を受けると、予め定められた優先順位とスケジューリング手順に基づいて、それらのひとつだけを許可する。
【００２３】
具体的には、バス調停制御部２２は、第１ＤＭＡチャネル２３ａをイネーブルにし、ディスクインターフェース部１２に対してデータ転送を許可する制御信号を出力し、アドレス生成部２１からバッファメモリ１に書き込みアドレスを生成させることによって、ディスクインターフェース部１２からバッファメモリ１への「データ入力」、即ち、光ディスク等の記録媒体から読み出されたデータをディスクインターフェース部１２を介してバッファメモリ１に格納するデータ転送を行わせる。同様に、バス調停制御部２２は、第２ＤＭＡチャネル２３ｂをイネーブルにし、誤り訂正部５に対してデータ転送を許可する制御信号を出力し、アドレス生成部２１からバッファメモリ１に読み出し又は書き込みアドレスを生成させることによって、「誤り訂正のためのデータ転送」、即ち、バッファメモリ１に格納されたデータを誤り訂正部５に読み出したり、訂正後のデータを誤り訂正部５からバッファメモリ１に書き戻すデータ転送を行わせる。さらに、バス調停制御部２２は、第３ＤＭＡチャネル２３ｃをイネーブルにし、ホストインターフェース部１３に対してデータ転送を許可する制御信号を出力し、アドレス生成部２１からバッファメモリ１に読み出しアドレスを生成させることによって、バッファメモリ１からホストインターフェース部１３への「データ出力」、即ち、誤り訂正のバッファメモリ１に格納されたデータをホストインターフェース部１３を介してホスト等に出力するデータ転送を行わせる。
【００２４】
なお、アドレス生成部２１は、これら３つのＤＭＡ転送においては、バッファメモリ１に対してページモードによる高速アクセスを行う。具体的には、ページヒットする限りは、バッファメモリ１への行アドレス（ＲＡＳ）を固定して出力したまま、列アドレス（ＣＡＳ）だけを必要なデータ個数だけインクリメントする。
【００２５】
図３は、データ分配部５１の詳細な構成を示すブロック図である。データ分配部５１は、バスコントロール部２から送られてくるデータを４つのシンドローム生成部５２〜５５のいずれかに通過させるセレクタ５１ａと、バスコントロール部２からの指示に基づいてセレクタ５１ａでの振り分けを制御する切替え制御部５１ｂとから構成される。切替え制御部５１ｂは、内部に有するカウンタロジック等により、セレクタ５１ａに入力されるデータに同期してセレクタ５１ａに制御信号を出力するが、行方向の誤り訂正の場合と列方向の誤り訂正の場合とでは、後述するように、異なる手順でセレクタ５１ａを制御する。
【００２６】
図４は、１個のシンドローム生成部５２（５３、５４、５５）の詳細な構成を示す回路図である。シンドローム生成部５２は、入力されたデータを最大８個まで一時的に記憶するＦＩＦＯ（First-In First-Out）形式のキューバッファ６２と、そのキューバッファ６２の出力に並列接続された１０種類のシンドローム演算部６３〜６５から構成される。各シンドローム演算部６３〜６５は、積和演算を繰り返す回路であり、１つの積和値を記憶するレジスタ６８と、レジスタ６８に格納された積和値を読み出して固有の係数を乗算するガロア体乗算器６６と、その乗算結果と次に入力された１つの符号とを加算するガロア体加算器６７とからなる。
【００２７】
キューバッファ６２から最も古い１個のデータｄが読み出されると、そのデータｄは１０個のシンドローム演算部６３に並列に入力され、それぞれにおいて、１回の積和演算ｄ＋Ｓn×αnが実行され、その結果が新たなＳnとしてレジスタ６８に格納される。例えば、１００バイトの情報データｄ１〜ｄ１００と１０個のパリティデータｐ１〜ｐ１０とからなる符号列がシンドローム生成部５２に順次に入力され入力キューバッファ６２を経て１０個のシンドローム演算部６３〜６５に並列に供給されていくとする。すると、第１シンドローム演算部６３においては、最初に第１情報データｄ１が入力されるとそのｄ１はそのままレジスタ６８に保持され、次に情報データｄ２が入力されると積和演算ｄ２＋ｄ１×α０が行われ、その結果がレジスタ６８に保持される。
【００２８】
このように１個の符号が入力されるごとに１回の積和演算が行われ、最後のパリティデータｐ１０が入力し終わったときにレジスタ６８に保持されたデータがＳ０シンドロームになる。これと並行して他のシンドローム演算部６４〜６５においても同様の演算が行われるので、最後のパリティデータｐ１０がこれら１０個のシンドローム演算部６３〜６５に入力された直後において、最終的にＳ０からＳ９までの１０種類のシンドロームが同時に生成される。
【００２９】
次に、以上のように構成された誤り訂正装置１００の動作について説明する。図５は、本装置１００における３つの主要な処理（データ入力、誤り訂正、データ出力）における処理対象となるデータを示すタイミングチャートである。つまり、図３７に示された積符号を用いた符号列を複数ブロック連続して処理する場合における処理の流れが示されている。なお、図中の第ｎブロックは図３７に示された１つの積符号のデータ全体に対応する。また、図中の「データ入力」、「誤り訂正」及び「データ出力」は、上述のバスコントロール部２による「データ入力」、「誤り訂正のためのデータ転送」及び「データ出力」に対応する。
【００３０】
まず第１サイクルにおいて第１ブロックについてのデータ入力が行われ、第２サイクルにおいて第２ブロックについてのデータ入力と第１ブロックについての誤り訂正とが並行に行われ、第３サイクルにおいて第３ブロックについてのデータ入力と第２ブロックについての誤り訂正と第１ブロックについてのデータ出力とが並列に行われる。第４サイクル以降においては、第３サイクルと同様に、新たなブロックのデータ入力と、直前に入力されたブロックについての誤り訂正と、誤り訂正が終了したブロックについてのデータ出力とが並行に行われる。
【００３１】
このように、バスコントロール部２は、各ブロックのデータに対して３つの処理がパイプライン的に施されるように、３種類のデータ転送（ディスクインターフェース部１２からバッファメモリ１へのデータ転送、バッファメモリ１と誤り訂正部５間のデータ転送、バッファメモリ１からホストインターフェース部１３へのデータ転送）を制御する。つまり、３種類のデータ転送はいずれもバッファメモリ１を転送先又は転送元とするが、バッファメモリ１は１つの入出力ポートしか持っていないので、バスコントロール部２は、これら３種類のデータ転送において優先順位を設けることで、瞬時においてはいずれかのデータ転送だけを許可し、それら３種類のデータ転送を時分割で切り替えていくことによって、見かけ上、３種類のデータ転送が並行に行われるよう制御している。
【００３２】
図６は、Ｃ１系列の誤り訂正を行う場合におけるバッファメモリ１内の積符号の読み出し順序を示す図である。バス調停制御部２２は、第２ＤＭＡチャネル２３ｂをイネーブルにし、Ｃ１系列の誤り訂正のためのデータを送る旨を誤り訂正部５に通知した後に、アドレス生成部２１からバッファメモリ１に一定順序で読み出しアドレスを出力させることによって、以下のように、バッファメモリ１に格納されたデータを誤り訂正部５に転送させる。
【００３３】
つまり、バスコントロール部２は、まず、第１行の４バイト分のデータｄ１〜ｄ４を連続してバッファメモリ１から読み出して誤り訂正部５に転送する。次に第２行の４バイト分のデータｄ５〜ｄ８を連続して読み出して転送する。次に第３行の４バイト分のデータｄ９〜ｄ１２を連続して読み出して転送する。次に第４行の４バイト分のデータｄ１３〜ｄ１６を連続して読み出して転送する。ここまで来てから再び第１行に戻り、同様にして４バイト分のデータｄ１７〜ｄ２０を連続して読み取り転送する。以下同様の読み出しと転送を繰り返すことによって第１行から第４行までの全てのデータについての読み出しと転送を終了すると、今度は第５行から第８行までの４行分のデータに対して同様の処理を繰り返す。このようにして、４行分のデータを並列に読み出して転送する処理を１ブロックの全ての行について繰り返す。
【００３４】
なお、バスコントロール部２は、行方向に連続する４バイト分のデータの読み出しと転送については、時間的に不可分な処理として連続的に行われるようＤＭＡモードで行う。つまり、この間は、他の処理（データ入力、データ出力）のためのバッファメモリ１へのアクセスを禁止している。これは、行方向に連続するデータは通常、バッファメモリ１の連続するアドレスに格納されているので、ＤＲＡＭのページヒットによる高速アクセスを利用することができるからである。
【００３５】
図７は、図６に示された順序でバッファメモリ１からデータが転送されてきた場合における誤り訂正部５のデータ分配部５１の動作を示す図である。切替え制御部５１ｂは、バスコントロール部２からＣ１系列の誤り訂正を開始する旨の指示を受けると、セレクタ５１ａを制御することによって、バスコントロール部２から送られてくるデータを以下のように振り分けさせる。
【００３６】
つまり、データ分配部５１は、最初に転送されてきた第１行に属する４バイト分のデータｄ１〜ｄ４についてはシンドローム生成部５２に入力されるように振り分け、次に転送されてきた第２行に属するデータｄ５〜ｄ８についてはシンドローム生成部５３に入力されるように振り分け、次に転送されてきた第３行に属するデータｄ９〜ｄ１２についてはシンドローム生成部５４に入力されるように振り分け、次に転送されてきた第４行に属するデータｄ１３〜ｄ１６についてはシンドローム生成部５５に入力されるように振り分ける。同様にして、次に転送されてきた第１行に属するデータｄ１７〜ｄ２０については再びシンドローム生成部５２に入力させる。このように、データ分配部５１は、Ｃ１系列の誤り訂正においては、バッファメモリ１からバスコントロール部２を経て４バイトをひとまとまりとして繰り返し送られてくるデータを、４バイトを単位として４つのシンドローム生成部５２〜５５それぞれに順に切り替えながら入力させる。
【００３７】
図８は、Ｃ１系列の誤り訂正におけるバッファメモリ１から誤り訂正部５へのデータ転送と４つのシンドローム生成部５２〜５５での積和演算のタイミングを示す図である。
連続したアドレスの４バイト分のデータｄ１〜ｄ４、ｄ５〜ｄ８等がバッファメモリ１から読み出され誤り訂正部５に転送されるのにそれぞれ時間ｔ１だけ必要とし、４バイトを単位とするデータ転送は時間ｔ２の間隔で繰り返されるとする。なお、４バイトを単位とするデータ転送を終えてから次の４バイトを単位とするデータ転送を開始するまでに時間を要しているのは、これら４バイトはそれぞれ異なる行に属するので、新たな４バイトの読み出しに際しては毎回ＤＲＡＭのページミスが生じている可能性があることを考慮したからである。つまり、４バイト中の第１バイトへのアクセス時にバスコントロール部２が新たな行アドレスをバッファメモリ１に出力しなければならないと仮定している。
【００３８】
４つのシンドローム生成部５２〜５５は、それぞれ第１行〜第４行のシンドローム計算を行うが、入力された４バイト分のデータに対して必要とされる４つの積和演算を４×ｔ２の時間で行う。例えば、第１行のシンドローム計算を実行するシンドローム生成部５２は、入力された４バイト分のデータｄ１〜ｄ４についての積和演算を４×ｔ２の時間内に行う。これは、シンドローム生成部５２に着目すると、最初に入力される４バイトデータがｄ１〜ｄ４で、次に入力される４バイトデータがｄ１７〜ｄ２０であり、これらの時間間隔は４×ｔ２であるので、この時間内に４バイト分の積和演算を終えればよいからである。そして、そのような演算速度が維持される限りは、各シンドローム生成部５２〜５５の前段に設けられたキューバッファ６２に蓄積されるデータ量は、最大で４バイトであり、瞬時であっても４バイトを超えることはない。
【００３９】
このように、各シンドローム生成部５２〜５５は、１バイトあたりｔ２の時間で積和演算を終えればよいことになり、データ転送速度（４バイト／ｔ２）に比べて１／４の速度でシンドローム計算を実行すればよいことがわかる。また、異なる複数の符号列に対して小刻みに（４バイト単位で）符号列を切り替えながら並列に処理を進めているので、１符号列ずつ処理する方法に比べて、１符号列あたりに要求されるシンドローム計算の速度は低くて済むと共にキューバッファのサイズも小さくて済む。このことは、逆に言えば、バッファメモリ１から誤り訂正部５への実質的なデータ転送速度（全体としての誤り訂正速度）を従来よりも高速化させることができること、及び、単に誤り訂正回路を複数個設けた場合に比べ、より小さな回路規模で４並列の誤り訂正を行うことができることを意味する。
【００４０】
なお、同一の符号列において連続して読み出すデータ数を増やすことによって、ＤＲＡＭのページヒットによるデータ転送の高速化を図ることが可能となる。このときには、誤り訂正の並列度を増やすことが望ましい。誤り訂正の並列処理の並列度を増やすにしたがってメモリアドレスの連続転送バイト数を増やしていくことにより、１符号列あたりの処理負荷に対する回路規模は軽減され、効率的な誤り訂正の並列化が実現されるからである。
【００４１】
次にＣ２系列の誤り訂正を行う場合の本装置１００の動作について図９〜図１１を用いて説明する。
図９は、Ｃ２系列の誤り訂正を行う場合におけるバッファメモリ１内の積符号の読み出し順序を示す図である。バス調停制御部２２は、第２ＤＭＡチャネル２３ｂをイネーブルにし、Ｃ２系列の誤り訂正のためのデータを送る旨を誤り訂正部５に通知した後に、アドレス生成部２１からバッファメモリ１に一定順序で読み出しアドレスを出力させることによって、以下のように、バッファメモリ１に格納されたデータを誤り訂正部５に転送させる。
【００４２】
つまり、バスコントロール部２は、まず、第１行の４バイト分のデータｄ１〜ｄ４を連続してバッファメモリ１から読み出して誤り訂正部５に転送する。次に第２行の４バイト分のデータｄ５〜ｄ８を連続して読み出して転送する。以下、同様にして、各行について４バイト分のデータの読み出しと転送を第１列〜第４列の全てのデータについて繰り返す。これによって、Ｃ２系列の４符号列のデータ転送を終える。同様にして、今度は第５列〜第８列の全てのデータについて４バイト分のデータの読み出しと転送を繰り返す。このようにして、４列分のデータを並列に読み出して転送する処理を１ブロックの全ての列について繰り返す。
【００４３】
なお、バスコントロール部２は、Ｃ１系列のデータ転送の場合と同様に、行方向に連続する４バイト分のデータの読み出しと転送については、時間的に不可分な処理として連続的に行われるようＤＭＡモードで行う。つまり、この間は、他の処理（データ入力、データ出力）のためのバッファメモリ１へのアクセスを禁止することにより、ＤＲＡＭのページヒットによる高速アクセスを利用している。
【００４４】
図１０は、図９に示された順序でバッファメモリ１からデータが転送されてきた場合における誤り訂正部５のデータ分配部５１の動作を示す図である。切替え制御部５１ｂは、バスコントロール部２からＣ２系列の誤り訂正を開始する旨の指示を受けると、セレクタ５１ａを制御することによって、バスコントロール部２から送られてくるデータを以下のように振り分けさせる。
【００４５】
つまり、データ分配部５１は、最初に転送されてきた第１行に属する４バイト分のデータｄ１〜ｄ４については各データが順に４つのシンドローム生成部５２〜５５に入力されるように振り分ける。具体的には、データｄ１をシンドローム生成部５２に送り、データｄ２をシンドローム生成部５３に送り、データｄ３をシンドローム生成部５４に送り、データｄ４をシンドローム生成部５５に送る。次に転送されてきた第２行に属するデータｄ５〜ｄ８についても同様に、各データが順に４つのシンドローム生成部５２〜５５に入力されるように振り分ける。このようにして、データ分配部５１は、Ｃ２系列の誤り訂正においては、４バイトをひとまとまりとして繰り返し送られてくるデータを各バイトごとに４つのシンドローム生成部５２〜５５に振り分ける処理を繰り返す。
【００４６】
これによって、第１列に属するデータｄ１、ｄ５、・・はシンドローム生成部５２に入力され、第２列に属するデータｄ２、ｄ６、・・はシンドローム生成部５３に入力され、第３列に属するデータｄ３、ｄ７、・・はシンドローム生成部５４に入力され、第４列に属するデータｄ４、ｄ８、・・はシンドローム生成部５５に入力される。同様に、第５列に属するデータはシンドローム生成部５２に入力され、第６列に属するデータはシンドローム生成部５３に入力され、第７列に属するデータはシンドローム生成部５４に入力され、第８列に属するデータはシンドローム生成部５５に入力される。
【００４７】
図１１は、Ｃ２系列の誤り訂正におけるバッファメモリ１から誤り訂正部５へのデータ転送と４つのシンドローム生成部５２〜５５での積和演算のタイミングを示す図である。
連続したアドレスの４バイト分のデータｄ１〜ｄ４、ｄ５〜ｄ８等がバッファメモリ１から読み出され誤り訂正部５に転送されるのにそれぞれ時間ｔ１だけ必要とし、４バイトを単位とするデータ転送は時間ｔ２の間隔で繰り返されることは、図８に示されるＣ１の場合と同じである。
【００４８】
４つのシンドローム生成部５２〜５５は、それぞれ第１列〜第４列のシンドローム計算を行うが、１バイトのデータにつき１つの積和演算をｔ２の時間で行う。例えば、第１行のシンドローム計算を実行するシンドローム生成部５２は、最初に入力された１バイトのデータｄ１についての積和演算をｔ２の時間内に行い、次に入力された１バイトのデータｄ５についての積和演算をｔ２の時間内に行う。これは、シンドローム生成部５２に着目すると、時間ｔ２に１バイトのデータが入力されることになるからである。そして、そのような演算速度が維持される限りは、各シンドローム生成部５２〜５５の前段に設けられたキューバッファ６２に蓄積されるデータ量は、最大で１バイトであり、瞬時であっても１バイトを超えることはない。
【００４９】
このように、各シンドローム生成部５２〜５５は、１バイトあたりｔ２の時間で積和演算を終えればよいことになり、Ｃ１系列の誤り訂正の場合と同様の処理速度で済むことがわかる。また、このＣ２系列の誤り訂正においては、個々のシンドローム生成部５２〜５５へのデータ入力は、バースト的に行われるＣ１系列の場合と異なり、均一的に行われる（常に１バイト／ｔ２の速度で入力される）ので、個々のシンドローム生成部５２〜５５の前段にキューバッファを設ける必要はなくなる。
【００５０】
以上説明したように、第１の実施の形態によれば、誤り訂正部５における並列処理の並列度と、バッファメモリ１から連続するアドレスのデータ（積符号における同一行の連続するデータ）を読み出して誤り訂正部５に転送する際のデータ数とを同じ数にしているので、Ｃ１系列とＣ２系列の両方向の誤り訂正について、バッファメモリ１からの読み出し速度と個々のシンドローム生成部での積和演算速度との関係が同一になり、そして、個々のシンドローム生成部の前段に必要とされるキューバッファのサイズは小さくて済む。これによって、Ｃ１系列とＣ２系列の両方向の誤り訂正に関して、シンドローム生成部の能力をフルに発揮させるためのバスコントロール部２による制御手順も共通化され、小さい回路規模で高速に誤り訂正を行うことができる誤り訂正装置が実現される。
【００５１】
つまり、Ｃ１系列の誤り訂正とＣ２系列の誤り訂正とをバランス良く実施することができ、誤り訂正装置に必要とされる回路の冗長度は削減される。
なお、図６及び図９に示された読み出し順序は行方向の符号列のバイト数が４の倍数であることを前提としたが、そうでない場合であっても、本装置１００は正しく誤り訂正を行うことができる。例えば、行方向の符号列がそのバイト数を４で割ったときの余りが２となるような長さである場合には、バッファメモリ１内の積符号の読み出し順序を以下のように変更すればよい。
【００５２】
図１２は、行方向の符号列がそのバイト数を４で割ったときの余りが２となるような長さである場合において、Ｃ１系列の誤り訂正を行うときのバッファメモリ１内の積符号の読み出し順序を示す図である。バスコントロール部２は、４行分の符号列に対して、各符号列の最後部の２バイトを除く部分については先頭から順に連続する４バイトの読み出しと転送を繰り返し、最後部の２バイトについては各符号列につき２バイトの読み出しと転送を行う。これに伴って、データ分配部５１も同様の動作、即ち、バッファメモリ１から４バイトをひとまとまりとして繰り返し送られてきたデータについては４バイトを単位として４つのシンドローム生成部５２〜５５それぞれに振り分け、２バイトをひとまとまりとして送られてきたデータについては２バイトを単位として４つのシンドローム生成部５２〜５５それぞれに振り分ければよい。
【００５３】
同様に、図１３は、行方向の符号列がそのバイト数を４で割ったときの余りが２となるような長さである場合において、Ｃ２系列の誤り訂正を行うときのバッファメモリ１内の積符号の読み出し順序を示す図である。バスコントロール部２は、最後部の２列を除く符号列に対しては最初から４列ごとに４バイトのデータの読み出しと転送を繰り返し、最後部の２列の符号列に対しては２バイトの読み出しと転送を繰り返す。これに伴って、データ分配部５１も同様の動作、即ち、バッファメモリ１から４バイトをひとまとまりとして繰り返し送られてきたデータについては４バイトを単位として４つのシンドローム生成部５２〜５５それぞれに振り分け、２バイトをひとまとまりとして繰り返し送られてきたデータについては２バイトを単位として４つのシンドローム生成部５２〜５５それぞれに振り分ければよい。
【００５４】
このようなバスコントロール部２による読み出し順序の変更やデータ分配部５１による振り分け順序の変更は、具体的には、バスコントロール部２でのバス調停制御部２２による制御手順やデータ分配部５１での切替え制御部５１ｂによる制御手順を変更することによって容易に実現することが可能である。
また、第１の実施の形態は４つの符号列に対するシンドローム計算を並列に実行する誤り訂正装置であったが、本発明は、このような並列度に限定されるものではなく、例えば、２並列や８並列の誤り訂正装置であってもよい。つまり、第１の実施の形態では、誤り訂正部５は４個のシンドローム生成部５２を有したが、必要に応じて２個としたり８個とすればよい。
【００５５】
図１４、図１５及び図１６は、２並列で誤り訂正を行う誤り訂正装置におけるＣ１系列の誤り訂正の動作を説明する図であり、それぞれ、バッファメモリからのデータの読み出し順序、その順序でデータが入力されたときの誤り訂正部におけるのデータ分配部の動作、その場合におけるデータ転送とシンドローム計算のタイミングを示す。
【００５６】
同様に、図１７、図１８及び図１９は、２並列で誤り訂正を行う誤り訂正装置におけるＣ２系列の誤り訂正の動作を説明する図であり、それぞれ、バッファメモリからのデータの読み出し順序、その順序でデータが入力されたときの誤り訂正部におけるのデータ分配部の動作、その場合におけるデータ転送とシンドローム計算のタイミングを示す。
【００５７】
また、第１の実施の形態では、光ディスクなどの記録媒体に記録されたデータを読み取り、読み取ったデータ列から誤りを見つけ、訂正し、訂正後のデータをホストコンピュータに転送するというデータの流れについて説明を行ったが、本発明は、これとは逆に、ホストコンピュータからデータを出力し、そのデータに誤り訂正のためのパリティ符号を付加し、光ディスクなどの記録媒体に書き込む流れに適用することもできる。本発明は、記録媒体とホストコンピュータ間のデータパスの途中に設けられたバッファメモリに一時的に格納された積符号について、その積符号を構成する全ての符号列を効率的に読み出して第３の装置（記録媒体やホストコンピュータを除く処理装置）に転送することにより、第３の装置においてＣ１系列とＣ２系列の両方に対する符号処理を高速かつ小規模な回路で行うことを可能とする技術だからである。
【００５８】
具体的には、誤り訂正部５における４つのシンドローム生成部５２〜５５と誤り位置・誤り数値演算部５６とをパリティデータ生成回路に置き換え、誤りデータ更新部５７をパリティデータ書き込み回路に置き換える等の変更をすればよい。これによって、記録媒体へのデータの書き込み時における誤り訂正符号の付加と記録媒体からのデータの読み出し時における誤りデータの訂正という「誤り訂正に伴う処理」を高速に実行する誤り訂正装置が実現される。
【００５９】
また、第１の実施の形態では、バスコントロール部２は、バッファメモリ１から誤り訂正部５への４バイトのデータ転送をひとつのＤＭＡ転送で行い、このＤＭＡ転送と次のＤＭＡ転送の間についてはバッファメモリ１にアクセスする他のデータ転送を許可していたが、これを１６バイト分のデータ転送をひとつのＤＭＡ転送で行うこととしてもよい。これによって、Ｃ１系列の誤り訂正においては、図６に示された１６バイトのデータｄ１〜ｄ１６がひとつのＤＭＡ転送によってバッファメモリ１から誤り訂正部５に転送されることになり、この間においてはバッファメモリ１にアクセスする他のデータ転送による割り込みが禁止されるので、１６バイトのデータ転送時間、即ち、４つのシンドローム生成部５２〜５５それぞれに４バイトずつデータが供給されるのに要する時間が概ね一定化され、誤り訂正部５へのデータ転送がボトルネックとなってシンドローム計算の処理速度が著しく低下している場合には、そのような事態が回避される。
【００６０】
また、第１の実施の形態では、誤り訂正装置１００内部のデータバスは８ビット幅であったが、例えば、３２ビット幅とすることもできる。このときには、４バイト分のデータは１回のメモリアクセスによってバッファメモリ１から読み出されて誤り訂正部５に転送される。そして、データ分配部５１は、Ｃ１系列の誤り訂正時には、３２ビット幅のデータを８ビットごとに桁分割し、それぞれを４つのシンドローム生成部５２〜５５に分配すればよい。
【００６１】
また、第１の実施の形態では、誤り訂正部５においては、シンドローム計算だけが並列化されていたが、それに続く誤り位置・誤り数値演算部５６や誤りデータ更新部５７についても並列化してもよい。これによって、もしシンドローム計算において大量のエラーが発生した場合等においても一定の訂正処理を確保することができる。
（第２の実施の形態）
第２の実施の形態は、誤り検出と誤り訂正とを分離し、誤り検出については、データがバッファメモリに格納されるときに並行して実行しておき、その結果を誤り訂正に反映させることで、誤りが発生していないデータについてはバッファメモリから誤り訂正部に転送されることを回避した高速な光ディスク読み取り装置に関する。
【００６２】
図２０は、本発明の第２の実施の形態における光ディスク読み取り装置２０００の構成を示すブロック図である。光ディスク読み取り装置２０００は、光ディスク２０１０に記録されているデータを読み取り、読み取ったデータの誤りを訂正した後にホストコンピュータ２０７０に転送する装置であって、ピックアップ２０２０と、増幅器２０３０と、フロントエンドプロセッサ２０４０と、光ディスク制御部２１００と、回転モータ２０５０と、サーボコントローラ２０６０と、システム制御部２０８０とから構成される。
【００６３】
システム制御部２０８０は、ホストコンピュータ２０７０からのデータ要求のコマンドを光ディスク制御部２１００を介して受け付け、コマンドを解釈し、サーボコントローラ２０６０および光ディスク制御部２１００を制御してデータ要求に応える機能を実現するマイクロプロセッサである。
回転モータ２０５０は、光ディスク２０１０を回転させるものであり、サーボコントローラ２０６０は、フロントエンドプロセッサ２０４０からの情報をもとにシステム制御部２０８０の指示を受けて回転モータ２０５０の回転およびピックアップ２０２０のレンズ位置を制御するものである。
【００６４】
光ディスク２０１０は、ＤＶＤ−ＲＯＭであり、ピックアップ２０２０は、光ディスク２０１０に記録されたデータをレーザ光線を当てて反射光により読み取って電気信号に変換するものであり、増幅器２０３０は、ピックアップ２０２０の出力した信号を増幅してフロントエンドプロセッサ２０４０に出力する。
フロントエンドプロセッサ２０４０は、入力された信号に応じてサーボコントローラ２０６０と回転モータ２０５０およびピックアップ２０２０とでフィードバック制御をおこない、安定した信号を光ディスク制御部２１００に出力するものであり、イコライザー、ＡＧＣ（自動利得制御回路）、ＰＬＬ（Phase Locked Loop）などを有する。なお、フロントエンドプロセッサ２０４０が光ディスク制御部２１００に出力する信号は、変調されたデータである。
【００６５】
光ディスク制御部２１００は、ホストコンピュータ２０７０からのデータ要求のコマンドをシステム制御部２０８０に通知し、システム制御部２０８０の制御の元で、フロントエンドプロセッサ２０４０から入力された信号を復調して必要なデータを取り出し、誤り訂正を施し、ホストコンピュータ２０７０へデータを出力する。
【００６６】
なお、図２０では、太い矢印線は、光ディスク２０１０に記録されているデータがホストコンピュータ２０７０に到達するまでの流れを示している。すなわち、光ディスク２０１０に記録されているデータはピックアップ２０２０、増幅器２０３０、フロントエンドプロセッサ２０４０、光ディスク制御部２１００を介してホストコンピュータ２０７０に到達する。また、光ディスク２０１０に記録されるデータの構成は、第１の実施の形態と同様に、図３７に示される積符号が採用され、誤り訂正符号の種類としてはReed-Solomon符号が採用されている。
【００６７】
図２１は、光ディスク制御部２１００の詳細な構成を示すブロック図である。光ディスク制御部２１００は、フロントエンドプロセッサ２０４０から送られてきた信号を復調し誤り訂正を行った後にホストコンピュータ２０７０に送り出す回路であり、バッファメモリ２１１０と、ディスクインターフェース部２１２０と、誤り訂正部２１３０と、ホストインターフェース部２１４０と、第１転送部２１５０と、第２転送部２１６０と、第３転送部２１７０と、バス制御部２１８０と、誤り検出部２１９０と、誤り符号列記憶部２２００とを有する。なお、図２１中の太い矢印線は、バッファメモリ２１１０へのＤＭＡ転送によるデータの書き込み、及び、バッファメモリ２１１０からのＤＭＡ転送によるデータの読み出しにおけるデータパスを示している。
【００６８】
バッファメモリ２１１０は、２次元アドレス（行アドレスと列アドレス）によって特定される記憶領域を有するＤＲＡＭ等の半導体メモリであり、図３７に示される積符号を複数個だけ一時的に記憶する記憶容量を有する。
ディスクインターフェース部２１２０は、フロントエンドプロセッサ２０４０から入力された信号を復調した後に、得られたデータをバッファメモリ２１１０に格納するために第１転送部２１５０に出力する。なお、ディスクインターフェース部２１２０から出力されたデータは第１転送部２１５０によってバッファメモリ２１１０に転送されると共に、そのデータは同時並行して誤り検出部２１９０にも入力される。
【００６９】
誤り検出部２１９０は、第１転送部２１５０によりディスクインターフェース部２１２０から送られてきたデータについてＣ１系列の符号列ごとに誤りがあるかないかを判定し、誤りを検出した場合には、その符号列の番号をＲＡＭからなる誤り符号列記憶部２２００に格納しておく。なお、この誤り検出部２１９０は、１列の符号列ごとに一定個数のシンドロームを算出し、それらシンドローム中に非零が存在するか判断し、存在する場合に誤りが発生していると判断する。具体的には、誤り検出部２１９０は、第１の実施の形態における誤り訂正部５が有する４つのシンドローム生成部５２〜５５のひとつ（図４に示される回路）と、生成されたシンドローム全てについて零であるか否かを判断する論理積ゲート等からなる。
【００７０】
誤り訂正部２１３０は、ディスクインターフェース部２１２０から転送されバッファメモリ２１１０に格納された積符号のうち、誤りが発生しているデータだけを対象としてＣ１系列及びＣ２系列の誤り訂正を行う。具体的には、誤り訂正部２１３０は、誤り符号列記憶部２２００に格納された番号を参照することで、誤りの発生しているＣ１系列の符号列又は誤りの発生しているブロックのＣ２系列の符号列だけを対象としてバッファメモリ２１１０中の誤りデータを訂正する。
【００７１】
ホストインターフェース部２１４０は、誤り訂正部２１３０による処理が終わったデータを第３転送部２１７０によりバッファメモリ２１１０から読み出してホストコンピュータ２０７０に出力するインターフェース回路である。
第１転送部２１５０は、ディスクインターフェース部２１２０からの転送要求に対するバス制御部２１８０による許可通知を受けて、ディスクインターフェース部２１２０からバッファメモリ２１１０へのＤＭＡによるデータ転送と同一データについての誤り検出部２１９０へのデータ転送とを同時並列に行うＤＭＡコントローラである。
【００７２】
第２転送部２１６０は、誤り訂正部２１３０からの転送要求に対するバス制御部２１８０による許可通知を受けて、バッファメモリ２１１０から誤り訂正部２１３０へのＤＭＡによるデータ転送を行うＤＭＡコントローラである。
第３転送部２１７０は、ホストインターフェース部２１４０からの転送要求に対するバス制御部２１８０による許可通知を受けて、バッファメモリ２１１０からホストインターフェース部２１４０へのＤＭＡによるデータ転送を行うＤＭＡコントローラである。
【００７３】
バス制御部２１８０は、第１転送部２１５０と第２転送部２１６０と第３転送部２１７０それぞれによるＤＭＡ転送が排他的に実行されるよう予め定められた優先順位に基づいてそれら３つの転送部２１５０、２１６０、２１７０を制御したり、バッファメモリ２１１０中の誤りデータを書き換えるときの誤り訂正部２１３０によるバッファメモリ２１１０への通常の（非ＤＭＡによる）アクセスを制御する。
【００７４】
図２２は、バス制御部２１８０の詳細な構成を示すブロック部である。バス制御部２１８０は、バッファメモリ１へのアクセスのためのアドレスを生成して出力するアドレス生成部２１８１と、第１転送部２１５０、第２転送部２１６０、第３転送部２１７０及び誤り訂正部２１３０のいずれかとバッファメモリ２１１０とをバス接続するバス切替部２１８３と、それら３つの転送部２１５０、２１６０、２１７０によるＤＭＡ転送及び誤り訂正部２１３０によるバッファメモリ２１１０へのアクセスが排他的に実行されるよう予め定められた優先順位に基づいてそれら３つの転送部２１５０、２１６０、２１７０及びバス切替部２１８３を制御するバス調停制御部２１８２とからなる。
【００７５】
なお、アドレス生成部２１は、これら３つのＤＭＡ転送においては、バッファメモリ１に対してページモードによる高速アクセスを行う。具体的には、ページヒットする限りは、バッファメモリ１への行アドレス（ＲＡＳ）を固定して出力したまま、列アドレス（ＣＡＳ）だけを必要なデータ個数だけインクリメントしながら出力する。
【００７６】
図２３は、バス調停制御部２１８２による３つの排他的なＤＭＡ転送、即ち、第１転送部２１５０によるディスクインターフェース部２１２０からバッファメモリ２１１０へのＤＭＡ転送（ＤＭＡ＃１）、第２転送部２１６０によるバッファメモリ２１１０から誤り訂正部２１３０へのＭＡ転送（ＤＭＡ＃２）及び第３転送部２１７０によるバッファメモリ２１１０からホストインターフェース部２１４０へのＤＭＡ転送（ＤＭＡ＃３）のスケジューリング例を示すタイミングチャートである。本図において、横軸は時間の経過を示し、三角印は各ＤＭＡ転送に対する要求の発生を示し、ハッチングされた四角形はＤＭＡ転送の実行中を示す。
【００７７】
バス調停制御部２１８２は、ＤＭＡ＃１を最も高い優先度で許可し、ＤＭＡ＃２を最も低い優先度で許可する。即ち、バス調停制御部２１８２は、いずれのＤＭＡ転送も実行中でない場合には、各ＤＭＡに対する要求の発生順序に拘わらず、ＤＭＡ＃１に対する要求が発生していればＤＭＡ＃１を最優先して実行させ、ＤＭＡ＃１に対する要求が発生していなければ、ＤＭＡ＃３を実行させ、ＤＭＡ＃１に対する要求及びＤＭＡ＃３に対する要求のいずれも発生していないときに限り、ＤＭＡ＃２を実行させる。但し、ＤＭＡ＃１に対する要求が連続して発生しても、他のＤＭＡ＃２又はＤＭＡ＃３に対する要求が発生しているときは、ＤＭＡ＃１を連続して実行させることなく、他のＤＭＡ＃２又はＤＭＡ＃３を実行させる。
【００７８】
なお、バッファメモリ２１１０中の誤りデータを書き換えるときの誤り訂正部２１３０によるバッファメモリ２１１０への通常のアクセスについては、バス調停制御部２１８２は、ＤＭＡ＃３と同等に扱う。つまり、ＤＭＡ＃１に対する要求及びＤＭＡ＃３に対する要求のいずれも発生していないときに限り、誤り訂正部２１３０によるバッファメモリ２１１０への通常のアクセスを許可する。
【００７９】
図２４は、誤り訂正部２１３０の詳細な構成を関連する他の構成要素と共に示す回路図である。誤り訂正部２１３０は、図３７に示された積符号を構成するＣ１系列及びＣ２系列の符号列のうち予め誤りが検出されている符号列に対して１行又は１列の符号列ごとに誤り訂正を実行する回路であり、Ｃ１符号列転送要求部２１３５と、シンドローム計算部２１３１と、ユークリッド計算部２１３２と、チェーン計算部２１３３と、エラーデータ更新部２１３４とから構成される。
【００８０】
Ｃ１符号列転送要求部２１３５は、誤り符号列記憶部２２００を参照することにより、誤り符号列記憶部２２００に記憶された誤りを含むＣ１系列の符号列をバッファメモリ２１１０から読み出すよう第２転送部２１６０に要求する。
シンドローム計算部２１３１は、Ｃ１符号列転送要求部２１３５から要求のあった誤りを含むＣ１符号列をバッファメモリ２１１０からバス制御部２１８０、第２転送部２１６０を介して取得した後に、その符号列のシンドロームを計算する回路であり、その計算結果をユークリッド計算部２１３２に引き渡す。
【００８１】
なお、このシンドローム計算部２１３１は、１行又は１列の符号列ごとにシンドロームを算出する回路であり、第１の実施の形態における誤り訂正部５が有する４つのシンドローム生成部５２〜５５のひとつ（図４に示される回路）と同一である。つまり、いま、積符号の大きさをｋ１＝ｋ２＝１００バイト、ｍ１＝ｍ２＝１０バイトとした場合には、シンドローム計算部２１３１は、入力データを一時的にバッファリングするキューバッファと、１０個のシンドロームそれぞれを算出する１０個の積和演算回路とからなり、それら積和演算回路それぞれは１つの積和値を記憶するレジスタと、そのレジスタに格納された積和値を読み出して固有の係数を乗算するガロア体乗算器と、その乗算結果と次に入力された１つのデータとを加算するガロア体加算器とからなる。
【００８２】
ユークリッド計算部２１３２は、シンドローム計算部２１３１から送られるシンドロームを基にしてユークリッド法等により誤り位置多項式と誤り数値多項式を特定するための各項の係数を算出する回路であり、算出した係数をチェーン計算部２１３３に引き渡す。
チェーン計算部２１３３は、ユークリッド計算部２１３２から通知された係数によって特定される誤り位置多項式の根をチェーン検索と呼ばれる方法等によって算出する回路であり、その算出結果をユークリッド計算部２１３２から通知された誤り数値多項式を特定する係数と共にエラーデータ更新部２１３４に引き渡す。
【００８３】
エラーデータ更新部２１３４は、チェーン計算部２１３３から通知された誤り位置と誤り数値多項式を用いて、その誤りの位置での誤り数値を求めた後に、バッファメモリ２１１０内のその誤り位置にあたる情報データまたはパリティデータをバス制御部２１８０を介して読み取り、それらの排他的論理和を計算し、得られた値をバッファメモリ２１１０内の元の位置に書き戻す。
【００８４】
なお、第２転送部２１６０によるバッファメモリ２１１０からシンドローム計算部２１３１へのデータ転送はＤＭＡ転送によるが、バッファメモリ２１１０とエラーデータ更新部２１３４間のデータ転送はバス制御部２１８０による通常の（非ＤＭＡによる）メモリアクセスによって行われる。これは、誤り訂正によって書き換える対象となるデータはバッファメモリ２１１０内の連続するアドレスに格納されたデータとは限らないからである。また、誤り訂正部２１３０を構成する４つの回路２１３１〜２１３４は、それぞれ同期して並列処理、すなわちパイプライン方式による逐次処理をおこなう。
【００８５】
図２５は、複数ブロックのデータを連続して処理する場合における光ディスク制御部２１００内での処理工程を示すタイミングチャートである。本図において第１ブロックから第５ブロックは、それぞれバッファメモリ２１１０に格納される１ブロックのデータである。また、「バッファリング」は第１転送部２１５０によるディスクインターフェース部２１２０からバッファメモリ２１１０へのデータ転送を示し、「誤り検出」は第１転送部２１５０によるディスクインターフェース部２１２０から誤り検出部２１９０へのデータ転送と誤り検出部２１９０での誤り検出を示し、「誤り訂正」は第２転送部２１６０によるバッファメモリ２１１０から誤り訂正部２１３０へのデータ転送と誤り訂正部２１３０での誤り訂正を示し、「ホスト転送」は第３転送部２１７０によるバッファメモリ２１１０からホストインターフェース部２１４０へのデータ転送を示す。
【００８６】
本図に示されるように、同一のブロックに対する並列したバッファリング及び誤り検出と、バッファリング及び誤り検出が終了したブロックに対する誤り訂正と、誤り訂正が終了したブロックに対するホスト転送とがパイプラインとして逐次かつ並列に実行される。例えば、サイクルＴ５に注目すると、第５ブロックがディスクインターフェース部からバッファメモリ２１１０に転送されて格納されると同時に誤り検出部２１９０において誤り検出が行われ、第４ブロックがバッファメモリ２１１０から誤り訂正部２１３０に転送されて誤り訂正が行われ、第３ブロックがバッファメモリ２１１０からホストインターフェース部２１４０に転送される。
【００８７】
なお、本図ではバッファメモリ２１１０にアクセスする３つのデータ転送が並列に行われているが、これはブロックという大きいサイズでのデータ転送の観点から表現されているからであり、ブロックを構成する個々のデータに着目した場合には（瞬時的には）、いずれかのデータ転送だけが実行されている。このような排他的なデータ転送及び上記パイプライン制御は、図２３に示されるタイミングチャートのにように、バス制御部２１８０のバス調停制御部２１８２が一定の優先順位に基づいて３つの転送部２１５０、２１６０、２１７０によるデータ転送を小さい時間単位で切り替えながら許可することによって実現されている。
【００８８】
また、本図において、第３ブロックに対する誤り訂正が行われていないのは、これらブロックについては誤り検出の工程において全く誤りが発見されなかったからである。つまり、第３ブロックについては誤り検出部２１９０において全く誤りが検出されなかったので、その旨の通知を受けた誤り訂正部２１３０は、このブロックに対する誤り訂正についての一切の処理を行わない。つまり、誤り訂正部２１３０がその旨をバス制御部２１８０に通知することにより、第３ブロックに属する全ての符号列について第２転送部２１６０によるバッファメモリ２１１０から誤り訂正部２１３０へのデータ転送は行われない。
【００８９】
このように、同一ブロックに対するバッファリングと誤り検出が並列に行われ、その誤り検出において誤りが検出されなかった場合には、その旨が誤り訂正部２１３０に通知されるので、誤り訂正部２１３０は、誤り訂正の必要のないデータについてバッファメモリ２１１０から読み出すという無駄なデータ転送を回避することができる。つまり、従来であれば、光ディスクから読み出された全てのデータについてバッファメモリへの格納と、誤り検出・訂正のためのバッファメモリからの読み出しと、ホストコンピュータにデータを送出するためのバッファメモリからの読み出しという３つのデータ転送が行われていたが、この第２の実施の形態では、誤りが発生していないデータについては、バッファメモリへの格納とホストコンピュータへのデータ送出のためのバッファメモリからの読み出しという２つのデータ転送だけで済む。
【００９０】
図２６は、図２５に示されたタイミングチャートを詳細にした図であり、誤り検出と誤り訂正の２つの工程に関してＣ１系列及びＣ２系列の処理が区別して示されている。ここでは、誤り検出においては、Ｃ１系列についてだけ行われ、誤り訂正においては、先ずＣ１系列の誤り訂正が、続いてＣ２系列の誤り訂正がそれぞれ１回ずつ行われている。
【００９１】
具体的には、サイクルＴ１において、誤り検出部２１９０は、第１転送部２１５０によってディスクインターフェース部２１２０から送られてきた第１ブロックに対してＣ１系列の符号列に対する誤りの発生の有無を調べる。そして、もし誤りの発生を検出した場合には、誤り検出部２１９０は、誤りの発生している符号列の番号を誤り符号列記憶部２２００に記録しておく。
【００９２】
ここで、誤り検出部２１９０がＣ１系列について誤り検出をしているのは、ディスクインターフェース部２１２０からバッファメモリ２１１０へのデータ転送は積符号を行方向にスキャンすることを第１行から第ｎ２行まで繰り返す順序で行われるので、Ｃ１系列の誤り検出が容易となるからである。また、Ｃ２系列に誤り検出を行っていないのは、直前のＣ１系列に対する誤り訂正の結果、１つでも誤り訂正が不可能な符号列が存在すればＣ２系列の誤り訂正を実行するすることが必要になるため、あえてＣ２系列の誤り検出をする必要がないからである。
【００９３】
次にサイクルＴ２において、誤り訂正部２１３０は、まずＣ１系列の符号列をバッファメモリ２１１０から読み出して誤り訂正を行う。ただし、誤り訂正部２１３０は、誤り符号列記憶部２２００に格納されている番号を参照することにより、誤りが検出されたＣ１系列の符号列だけをバッファメモリ２１１０から読み出して誤り訂正する。そして、誤りが検出された全てのＣ１系列の符号列についての誤り訂正を終えると、そのＣ１系列に１つでも誤り訂正が不可能な符号列が存在した場合には、次にそのブロックを構成する全てのＣ２系列の符号列を順次にバッファメモリ２１１０から読み出して誤り訂正を実行する。なお、Ｃ２系列に関してはブロックを構成する全ての符号列に対して誤り訂正を行っているが、これは、誤り検出部２１９０がＣ１系列についてだけ誤り検出をしているので、Ｃ２系列の符号列ごとの誤りの有無が不明だからである。
【００９４】
図２７は、Ｃ１系列の誤り訂正を行う場合における誤り訂正部２１３０内での行単位の処理工程を示すタイミングチャートである。ここでは、誤り検出部２１９０によって第１行、第４行、第６行及び第１１行の符号列に誤りが検出された場合におけるシンドローム計算部２１３１、ユークリッド計算部２１３２、チェーン計算部２１３３及びエラーデータ更新部２１３４による並列処理の様子が示されている。
【００９５】
第２行、第３行、第５行、第８〜１０行の符号列については、誤り検出部２１９０において誤りが検出されなかったので、バッファメモリ２１１０からシンドローム計算部２１３１への読み出しが行われず、従って、シンドローム計算、ユークリッド計算、チェーン計算及びエラーデータ更新の対象とはなっていない。図２８は、図２７に示された符号列を訂正する場合におけるバッファメモリ２１１０に格納された積符号の各データへのアクセス順序を示す図である。ここには、先ず第１行の符号列に対する誤り訂正を実行し、次に第２行、第３行をとばして第４行の符号列に対する誤り訂正を実行し、次に第５行をとばして第６行の符号列に対する誤り訂正を実行し、次に第７行の符号列に対すると誤り訂正を実行する流れが示されている。図３８に示された行ごとのスキャンと異なる点は、誤りが検出されている行だけに対してスキャンされていることである。
【００９６】
以上のように、この第２の実施の形態では、誤り訂正部２１３０は、Ｃ１系列の誤り訂正については、誤り符号列記憶部２２００を参照することによって、誤りが検出されている符号列、即ち、誤り訂正が必要とされる符号列だけをバッファメモリ２１１０から読み出して誤り訂正し、そうでない符号列については無駄にバッファメモリ２１１０から読み出すことを回避している。
【００９７】
これによって、誤りが検出されなかったＣ１系列の符号列については、光ディスクから読み出された全てのデータについてバッファメモリへの格納と、誤り検出・訂正のためのバッファメモリからの読み出しと、ホストコンピュータにデータを送出するためのバッファメモリからの読み出しという３つのデータ転送を行なうことなく、バッファメモリへの格納とホストコンピュータへのデータ送出のためのバッファメモリからの読み出しという２つのデータ転送だけで済む。つまり、バッファメモリ２１１０へのアクセス回数が削減され、これによって光ディスク制御部２１００全体としての処理速度が向上される共に消費電力の低減化が図られ、より高速で低消費電力の光ディスク読み取り装置２０００が実現される。
【００９８】
なお、この第２の実施の形態では、図２８に示されるように誤り訂正部２１３０は１行又は１列の符号列ごとに誤り訂正を繰り返したが、第１の実施の形態のごとく、４行や４列等の複数の符号列ごとに並列に誤り訂正を進めてもよい。
図２９は、図２７に示されたＣ１系列の誤り訂正を４符号列並行して処理する場合のディスクインターフェース部２１２０からのデータの読み出し順序を示す。この読み出し順序は、第１の実施の形態における図６に示された順序と基本的な流れが同じであるが、この図２９では、誤りが検出された行（第１行、第４行、第６行、第７行、・・）だけを対象として４行の符号列ごとに並列に読み出される点で図６に示されたものと異なる。また、符号列の長さが４で割り切れない場合には、図３０に示されるように、最初は誤りが検出された４列の符号列（第１行、第４行、第６行、第７行）それぞれについて４バイト転送を繰り返し、最後にその４列の符号列それぞれについて２バイト転送をすればよい。
【００９９】
このように、この第２の実施の形態における誤り訂正部２１３０を４つの符号列に対して並列に誤り訂正を実行するよう変形するには、第１の実施の形態における誤り訂正部５のように、誤り訂正部２１３０に４つのシンドローム計算部と、バッファメモリ２１１０から送られてくるデータを４つのシンドローム計算部に分配するデータ分配部を設ければよい。これによって、第１の実施の形態における並列化による誤り訂正の高速化と、第２の実施の形態における誤り検出の先行による誤り訂正の高速化の両方の効果を得ることができる。
【０１００】
また、第２の実施の形態では、Ｃ１符号列転送要求部２１３５は誤り訂正部２１３０内に設けられたが、誤り検出部２１９０内に設けたり、誤り検出部２１９０や誤り訂正部２１３０とは独立の回路として構成してもよい。
また、誤り検出部２１９０は誤りが検出された符号列の番号だけを通知したが、その検出によって得られたシンドロームも併せて通知することとしてもよい。そして、誤り訂正部２１３０は誤りが検出された符号列に対して、誤り検出部２１９０からシンドロームを受け取り、ユークリッド計算とチェーン計算を行ってもよい。これによって、誤り検出部２１９０と誤り訂正部２１３０それぞれにおける重複したシンドローム計算を回避することができる。
【０１０１】
同様に、誤り検出部２１９０において、誤り検出だけでなく、続くユークリッド計算やチェーン計算を行ってもよい。この場合には、誤り訂正部２１３０は誤りが検出された符号列に対して、誤り検出部２１９０から誤り位置と誤り数値を受け取り、バッファメモリ２１１０内の誤りデータを訂正すればよい。このように、Ｃ１系列の誤り訂正のためのシンドローム計算、ユークリッド計算及びチェーン計算については、処理時間が確保できる範囲において誤り検出部２１９０に実行させることで、それら計算がディスクインターフェース部２１２０からバッファメモリ２１１０へのデータ転送と同時に進行することとなり、誤り訂正部２１３０での誤り訂正に要する時間が短縮される。
（第３の実施の形態）
第３の実施の形態は、Ｃ１系列の誤り訂正については、データがバッファメモリに格納されるときに並行して実行しておくと共に、そのＣ１系列の誤り訂正において誤りが発生しているブロックだけに対してバッファメモリから読み出してＣ２系列の誤り訂正を実行することで、バッファメモリへのアクセス回数を削減した高速な光ディスク読み取り装置に関する。
【０１０２】
図３１は、本発明の第３の実施の形態における光ディスク読み取り装置３０００の構成を示すブロック図である。この光ディスク読み取り装置３０００は、光ディスク２０１０に記録されているデータを読み取り、読み取ったデータの誤りを訂正した後にホストコンピュータ２０７０に転送する装置であって、ピックアップ２０２０と、増幅器２０３０と、フロントエンドプロセッサ２０４０と、光ディスク制御部３１００と、回転モータ２０５０と、サーボコントローラ２０６０と、システム制御部２０８０とから構成される。
【０１０３】
なお、この光ディスク読み取り装置３０００は、図２０に示された第２の実施の形態における光ディスク読み取り装置２０００と光ディスク制御部３１００が異なるだけであるため、この他の構成要素については図２０に示された符号と同一の符号を付け、その説明を省略する。
図３２は、光ディスク制御部３１００の詳細な構成を示すブロック図である。光ディスク制御部３１００は、フロントエンドプロセッサ２０４０から送られてきた信号を復調し誤り訂正を行った後にホストコンピュータ２０７０に送り出す回路であり、バッファメモリ３１１０と、ディスクインターフェース部３１２０と、誤り訂正部３１３０と、ホストインターフェース部３１４０と、第１転送部３１５０と、第２転送部３１６０と、第３転送部３１７０と、バス制御部３１８０と、データ選択部３１９０とを有する。なお、図３２中の太い矢印線は、バッファメモリ２１１０へのＤＭＡ転送によるデータの書き込み、及び、バッファメモリ２１１０からのＤＭＡ転送によるデータの読み出しにおけるデータパスを示している。
【０１０４】
バッファメモリ３１１０は、２次元アドレス（行アドレスと列アドレス）によって特定される記憶領域を有するＤＲＡＭ等の半導体メモリであり、図３７に示される積符号を複数個だけ一時的に記憶する記憶容量を有する。
ディスクインターフェース部３１２０は、フロントエンドプロセッサ２０４０から入力された信号を復調した後に、得られたデータをバッファメモリ３１１０に格納するために第１転送部３１５０に出力する。ディスクインターフェース部３１２０から出力されたデータは第１転送部３１５０によってバッファメモリ３１１０に転送されるが、そのデータは同時並行してデータ選択部３１９０にも入力される。
【０１０５】
データ選択部３１９０は、誤り訂正部３１３０による誤り訂正の対象となる符号列の転送元を選択するセレクタである。第１転送部３１５０によりディスクインターフェース部３１２０からバッファメモリ３１１０へのデータ転送が行われている場合には、そのデータは同時並行してデータ選択部３１９０にも送られてくるので、そのデータを選択して誤り訂正部３１３０に通過させる。一方、バッファメモリ３１１０から第２転送部３１６０によってＣ２系列の符号列が送られてきた場合には、そのデータを選択して誤り訂正部３１３０に通過させる。なお、データ選択部３１９０は、第１転送部３１５０及び第２転送部３１６０からの指示に基づいてこれらデータ転送元の一つを選択する。
【０１０６】
誤り訂正部３１３０は、データ選択部３１９０から送られてくる２種類（Ｃ１系列及びＣ２系列）の符号列を区別しながら誤り訂正を行う。具体的には、誤り訂正部３１３０は、データ選択部３１９０が第１転送部３１５０からのデータ（Ｃ１系列の符号列）を選択して通過させている場合にはＣ１系列の誤り訂正を行い、一方、データ選択部３１９０が第２転送部３１６０からのデータ（Ｃ２系列の符号列）を選択して通過させている場合にはＣ２系列の誤り訂正を行う。
【０１０７】
ホストインターフェース部３１４０は、誤り訂正部３１３０による処理が終わったデータを第３転送部３１７０によりバッファメモリ３１１０から読み出してホストコンピュータ２０７０に出力するインターフェース回路である。
第１転送部３１５０はディスクインターフェース部３１２０からバッファメモリ３１１０へのＤＭＡによるデータ転送と同一データについてのデータ選択部３１９０へのデータ転送とを同時並列に行い、第２転送部３１６０はバッファメモリ３１１０から誤り訂正部３１３０へのＤＭＡによるデータ転送を行い、さらに第３転送部３１７０はバッファメモリ３１１０からホストインターフェース部３１４０へのＤＭＡによるデータ転送を行う。
【０１０８】
バス制御部３１８０は、第１転送部３１５０と第２転送部３１６０と第３転送部３１７０それぞれによるＤＭＡ転送が排他的に実行されるよう予め定められた優先順位に基づいてそれら３つの転送部３１５０、３１６０、３１７０を制御したり、バッファメモリ３１１０中の誤りデータを書き換えるときの誤り訂正部３１３０によるバッファメモリ３１１０への通常の（非ＤＭＡによる）アクセスを制御する。なお、バス制御部３１８０の詳細な構成及びバス制御部３１８０によるバッファメモリ３１１０へのアクセスに対する排他制御は、それぞれ、第２の実施の形態における図２２及び図２３に示されたものと同じである。
【０１０９】
図３３は、誤り訂正部３１３０の詳細な構成を関連する他の構成要素と共に示すブロック図である。誤り訂正部３１３０は、１行分の符号列と１列分の符号列の２つを時分割で切り替えながら並行して誤り訂正を進めていく回路であり、シンドローム計算部３１３１と、ユークリッド計算部３１３２と、チェーン計算部３１３３と、エラーデータ更新部３１３４とで構成される。
【０１１０】
シンドローム計算部３１３１は、データ選択部３１９０から送られてくる２種類の符号列を区別しながらそれぞれのシンドロームを計算する回路であり、２つの一時記憶メモリ（入力データシンドローム記憶部３１３５、バッファデータシンドローム記憶部３１３６）を有する。入力データシンドローム記憶部３１３５は１ブロックを構成する全てのＣ１系列の符号列に対するシンドロームを一時的に記憶する記憶容量を有するメモリであり、バッファデータシンドローム記憶部３１３６は１ブロックを構成する全てのＣ２系列の符号列に対するシンドロームを一時的に記憶する記憶容量を有するメモリである。
【０１１１】
シンドローム計算部３１３１は、データ選択部３１９０が第１転送部３１５０からのデータ（Ｃ１符号列）を選択して通過させてきたときには、そのＣ１符号列に対してシンドローム計算を行い、得られたシンドロームを各符号列ごとに蓄積して入力データシンドローム記憶部３１３５に格納し、一方、データ選択部３１９０が第２転送部３１６０からのデータ（Ｃ２符号列）を選択して通過させてきたときには、そのＣ２符号列に対してシンドローム計算を行い、得られたシンドロームを各符号列ごとに蓄積してバッファデータシンドローム記憶部３１３６に格納する。
【０１１２】
なお、このシンドローム計算部３１３１は、瞬時的には、１行又は１列の符号列ごとにシンドロームを算出する回路であり、第１の実施の形態における誤り訂正部５が有する４つのシンドローム生成部５２〜５５のひとつと同じ回路（図４に示される回路）を有する。つまり、いま、積符号の大きさをｋ１＝ｋ２＝１００バイト、ｍ１＝ｍ２＝１０バイトとした場合には、シンドローム計算部３１３１は、入力データを一時的にバッファリングするキューバッファと、１０個のシンドロームそれぞれを算出する１０個の積和演算回路とからなり、それら積和演算回路それぞれは１つの積和値を記憶するレジスタと、そのレジスタに格納された積和値を読み出して固有の係数を乗算するガロア体乗算器と、その乗算結果と次に入力された１つのデータとを加算するガロア体加算器とからなる。
【０１１３】
ユークリッド計算部３１３２は、シンドローム計算部３１３１の入力データシンドローム記憶部３１３５及びバッファデータシンドローム記憶部３１３６それぞれに格納されたシンドロームを順次読み出して誤り位置多項式と誤り数値多項式を特定するための各項の係数を算出する回路であり、算出した係数をチェーン計算部３１３３に引き渡す。
【０１１４】
チェーン計算部３１３３は、ユークリッド計算部３１３２から通知された係数によって特定される誤り位置多項式の根をチェーン検索と呼ばれる方法等によって算出する回路であり、その算出結果をユークリッド計算部３１３２から通知された誤り数値多項式を特定する係数と共にエラーデータ更新部３１３４に引き渡す。
【０１１５】
エラーデータ更新部３１３４は、チェーン計算部３１３３から通知された誤り位置と誤り数値多項式を用いて、その誤りの位置での誤り数値を求めた後に、バッファメモリ３１１０内のその誤り位置にあたる情報データまたはパリティデータをバス制御部３１８０を介して読み取り、それらの排他的論理和を計算し、得られた値をバッファメモリ３１１０内の元の位置に書き戻す。
【０１１６】
なお、第２転送部３１６０によるバッファメモリ３１１０からシンドローム計算部３１３１へのデータ転送はＤＭＡ転送によるが、バッファメモリ３１１０とエラーデータ更新部３１３４間のデータ転送はバス制御部３１８０による通常の（非ＤＭＡによる）メモリアクセスによって行われる。また、誤り訂正部３１３０を構成する４つの回路３１３１〜３１３４は、それぞれ同期して並列処理、すなわちパイプライン方式による逐次処理をおこなう。
【０１１７】
図３４は、複数ブロックのデータを連続して処理する場合における光ディスク制御部３１００内での処理工程を示すタイミングチャートである。本図において第１ブロックから第５ブロックは、それぞれバッファメモリ３１１０に格納される１ブロックのデータである。また、「バッファリング」は第１転送部３１５０によるディスクインターフェース部３１２０からバッファメモリ３１１０へのデータ転送を示し、「誤り訂正１」は第１転送部３１５０によるディスクインターフェース部３１２０からデータ選択部３１９０を経て誤り訂正部３１３０に入力されたＣ１系列の符号列に対する誤り訂正部３１３０での誤り訂正を示し、「誤り訂正２」は第２転送部３１６０によるバッファメモリ３１１０からデータ選択部３１９０を経て誤り訂正部３１３０に入力されたＣ２系列の符号列に対する誤り訂正部３１３０での誤り訂正を示し、「ホスト転送」は第３転送部３１７０によるバッファメモリ３１１０からホストインターフェース部３１４０へのデータ転送を示す。
【０１１８】
本図に示されるように、同一のブロックに対する並列した「バッファリング」及び「誤り訂正１」と、「バッファリング」及び「誤り訂正１」が終了したブロックに対する「誤り訂正２」と、「誤り訂正２」が終了したブロックに対する「ホスト転送」とがパイプラインとして逐次かつ並列に実行される。例えば、サイクルＴ５に注目すると、第５ブロックがディスクインターフェース部からバッファメモリ３１１０に転送されて格納されると同時に誤り訂正部３１３０において「誤り訂正１」（Ｃ１系列の誤り訂正）が行われ、第４ブロックがバッファメモリ３１１０から誤り訂正部３１３０に転送されて「誤り訂正２」（Ｃ２系列の誤り訂正）が行われ、第３ブロックがバッファメモリ３１１０からホストインターフェース部３１４０に転送される。
【０１１９】
なお、本図ではバッファメモリ３１１０にアクセスする３つのデータ転送が並列に行われているが、これはブロックという大きいサイズでのデータ転送の観点から表現されているからであり、ブロックを構成する個々のデータに着目した場合には（瞬時的には）、いずれかのデータ転送だけが実行されている。このような排他的なデータ転送及び上記パイプライン制御は、バス制御部３１８０が一定の優先順位に基づいて３つの転送部３１５０、３１６０、３１７０によるデータ転送を小さい時間単位で切り替えながら許可することによって実現されている。
【０１２０】
また、本図において、第３ブロックに対する「誤り訂正２」（Ｃ２系列の誤り訂正）が行われていないのは、このブロックについては「誤り訂正１」（Ｃ１系列の誤り訂正）において全く誤りが発見されなかったからである。つまり、第３ブロックのＣ１系列の符号列については誤り訂正部３１３０のシンドローム計算部３１３１において全て零となるシンドロームが算出され入力データシンドローム記憶部３１３５に格納されたり、あるいはサイクルＴ３の誤り訂正１でＣ１系列のすべての符号列に対する誤り訂正が実行され誤りが存在しなくなった場合には、誤り訂正部３１３０は、シンドローム記憶部３１３５の内容を参照すること等により、第３ブロックについてはＣ２系列の誤り訂正を行う必要がないことを知り、このブロックのＣ２系列に対する誤り訂正についての一切の処理を行わない。つまり、誤り訂正部３１３０がその旨をバス制御部３１８０に通知することにより、第３ブロックのＣ２系列の全ての符号列について第２転送部３１６０によるバッファメモリ３１１０から誤り訂正部３１３０へのデータ転送は行われない。
【０１２１】
このように、同一ブロックに対する「バッファリング」とＣ１系列の誤り訂正（「誤り訂正１」）を並列に行ない、誤り検出に関する情報を入力データシンドローム記憶部３１３５に格納しているので、もし、Ｃ１系列の符号列に全く誤りが発生していない場合には、誤り訂正部３１３０は入力データシンドローム記憶部３１３５を参照することによりそのことを知るので、Ｃ２系列の誤り訂正が必要とされないデータをバッファメモリ３１１０から読み出すという無駄なデータ転送を回避することができる。つまり、従来であれば、光ディスクから読み出された全てのデータについてバッファメモリへの格納と、誤り検出・訂正のためのバッファメモリからの読み出しと、ホストコンピュータにデータを送出するためのバッファメモリからの読み出しという３つのデータ転送が行われていたが、この第３の実施の形態では、誤りが発生していないデータについては、バッファメモリへの格納とホストコンピュータへのデータ送出のためのバッファメモリからの読み出しという２つのデータ転送だけで済む。
【０１２２】
図３５は、図３４に示されたタイミングチャートを詳細にした図であり、「誤り訂正１」と「誤り訂正２」の２つの工程に関してＣ１系列及びＣ２系列の処理が区別して示されている。ここでは、「誤り訂正１」においては、Ｃ１系列についての誤り訂正だけが行われ、「誤り訂正２」においては、Ｃ２系列の誤り訂正だけが行われている。
【０１２３】
具体的には、サイクルＴ１において、誤り訂正部３１３０は、第１転送部３１５０によってディスクインターフェース部３１２０から送られてきた第１ブロックに対してＣ１系列の符号列に対する誤り訂正を行う。このとき、シンドローム計算部３１３１は、Ｃ１系列の全ての符号列について得られたシンドロームを入力データシンドローム記憶部３１３５に格納している。
【０１２４】
ここで、誤り訂正部３１３０がバッファンリングと並行してＣ１系列の誤り訂正（「誤り訂正１」）を行っているのは、ディスクインターフェース部３１２０からバッファメモリ３１１０へのデータ転送は積符号を行方向にスキャンすることを第１行から第ｎ２行まで繰り返す順序で行われるので、Ｃ１系列の誤り訂正が容易となるからである。
【０１２５】
次にサイクルＴ２において、誤り訂正部３１３０は、第２ブロックに対するＣ１系列の誤り訂正と第１ブロックに対するＣ２系列の誤り訂正とを並行して行う。具体的には、これら第２ブロックと第１ブロックのデータは時分割でデータ選択部３１９０から送られてくるので、誤り訂正部３１３０は、ディスクインターフェース部３１２０からデータ選択部３１９０を経て第２ブロックの符号列が入力されてきたときにはその符号列についてＣ１系列の誤り訂正を行い、一方、バッファメモリ３１１０からデータ選択部３１９０を経て第１ブロックの符号列が入力されてきたときにはその符号列についてＣ２系列の誤り訂正を行う。
【０１２６】
なお、もし第１ブロックに対するＣ１系列の誤り訂正において全く誤りが検出されなかったり、すべての誤りが正しく訂正されてしまった場合には、第３ブロックや第４ブロックと同様に、第１ブロックに対するＣ２系列の誤り訂正は行わない。つまり、第１ブロックのＣ２系列の符号列が第２転送部３１６０によってバッファメモリ３１１０から誤り訂正部３１３０に転送されることはない。
【０１２７】
図３６は、誤り訂正部３１３０内での行方向及び列方向の符号列単位での処理工程を示すタイミングチャートである。本図は、図３５に示されたタイミングチャートにおけるサイクルＴ２の先頭部分における「誤り訂正１」と「誤り訂正２」に相当し、誤り訂正部３１３０において第２ブロックのＣ１系列の誤り訂正（「誤り訂正１」）と第１ブロックのＣ２系列の誤り訂正（「誤り訂正２」）とが並行に進んでいる様子が示されている。
【０１２８】
時間ｔ１では、シンドローム計算部３１３１は、第２ブロック第１行の符号列に対するシンドローム計算と第１ブロック第１列の符号列に対するシンドローム計算を並列に行い、それぞれの結果を入力データシンドローム記憶部３１３５及びバッファデータシンドローム記憶部３１３６に格納する。なお、実際には、第２ブロック第１行の符号列と第１ブロック第２行の符号列とが時分割で切り替えながらデータ選択部３１９０から送られてくるので、シンドローム計算部３１３１は、瞬時的にはいずれかの符号列に対してだけシンドローム計算を行っている。
【０１２９】
時間ｔ２では、シンドローム計算部３１３１は、第２ブロック第２行の符号列に対するシンドローム計算と第１ブロック第２列の符号列に対するシンドローム計算を並列に行い、それぞれの結果を入力データシンドローム記憶部３１３５及びバッファデータシンドローム記憶部３１３６に格納する。
これと並行して、ユークリッド計算部３１３２は、まず入力データシンドローム記憶部３１３５に格納された第２ブロック第１行の符号列のシンドロームを読み出し、それを用いてユークリッド計算を行い、その結果をチェーン計算部３１３３に通知した後に、続いて第１ブロック第１列の符号列に対するユークリッド計算を行い、その結果をチェーン計算部３１３３に通知する。
【０１３０】
さらに、この時間ｔ２の後半においては、チェーン計算部３１３３は、ユークリッド計算部３１３２からの通知に基づいて第２ブロック第１行の符号列に対するチェーン計算を行い、その結果をエラーデータ更新部３１３４に通知する。
時間ｔ３では、同様にして、シンドローム計算部３１３１は第２ブロック第３行の符号列に対するシンドローム計算と第１ブロック第３列の符号列に対するシンドローム計算とを並列に行ない、これと並行して、ユークリッド計算部３１３２は第２ブロック第２行の符号列に対するユークリッド計算を行った後に続いて第１ブロック第２列の符号列に対するユークリッド計算が行い、これと並行して、チェーン計算部３１３３は第１ブロック第１行の符号列に対するチェーン計算を行った後に続いて第２ブロック第２列の符号列に対するチェーン計算が行い、これと並行して、エラーデータ更新部３１３４は、第２ブロック第１行の符号列に対するエラーデータの更新（バッファメモリ３１１０内のエラーデータの書き換え）を行った後に続いて第１ブロック第１列の符号列に対するエラーデータの更新を行う。
【０１３１】
以下、同様にして、各時間ｔｎにおいて、１行の符号列と１列の符号列に対するシンドローム計算、ユークリッド計算、チェーン計算及びエラーデータ訂正が並列に実行される。なお、本図では、全ての行及び列の符号列についてユークリッド計算、チェーン計算及びエラーデータ訂正が行われているが、これは、これら符号列に対するシンドローム計算において誤りが検出されたからであり、もし、そうでなければ、その符号列に対するユークリッド計算、チェーン計算及びエラーデータ訂正は行われない。
【０１３２】
以上説明したように、第３の実施の形態によれば、「バッファリング」（ディスクインターフェース部３１２０からバッファメモリ３１１０へのデータ転送）と同時に、同一データに対するＣ１系列の誤り訂正（「誤り訂正１」）を並列に行なっている。これによって、バッファメモリ３１１０に格納された後においては、Ｃ１系列の誤り訂正のためにバッファメモリ３１１０に格納されたデータを読み出すという工程が不要となる。
【０１３３】
また、バッファリングと同時に行われる誤り訂正においては、１ブロック分のＣ１系列の誤り検出の結果（シンドローム）が入力データシンドローム記憶部３１３５に記録されるので、１つのブロックを構成する全てのＣ１系列の符号列について誤りが発生しなかった場合には、その記録を参照することにより、必要のないＣ２系列の誤り訂正のためにバッファメモリ３１１０からデータを読み出すという無駄なデータ転送を回避することができる。
【０１３４】
このように、第３の実施の形態によって、Ｃ１系列の誤り訂正のためのバッファメモリ３１１０からの読み出しと、誤りの発生していないブロックのＣ２系列の誤り訂正のためのバッファメモリ３１１０からの読み出しとが不要となり、従来よりもバッファメモリ３１１０へのアクセス回数が削減され、これによってより高速で低消費電力の光ディスク読み取り装置２０００が実現される。
【０１３５】
なお、この第３の実施の形態では、誤り訂正部３１３０は１行又は１列の符号列ごとに誤り訂正を繰り返したが、第１の実施の形態のごとく、４行や４列等の複数の符号列ごとに並列に誤り訂正を進めてもよい。
例えば、この第３の実施の形態における誤り訂正部３１３０を４つの符号列に対して並列に誤り訂正を実行するよう変形するには、第１の実施の形態における誤り訂正部５のように、誤り訂正部３１３０に４つのシンドローム計算部と、バッファメモリ３１１０から送られてくるデータを４つのシンドローム計算部に分配するデータ分配部を設ければよい。これによって、第１の実施の形態における並列化による誤り訂正の高速化と、第３の実施の形態におけるＣ１系列の誤り訂正の先行による誤り訂正の高速化の両方の効果を得ることができる。
【０１３６】
また、第３の実施の形態では、データ選択部３１９０とシンドローム計算部３１３１とによって、第１転送部３１５０及び第２転送部３１６０それぞれから送られてくる符号列に対する誤り検出を時分割で行ったが、これらの構成に代えて、第１転送部３１５０からの符号列に対する誤り検出だけを行うシンドローム計算回路と、第２転送部３１６０からの符号列に対する誤り検出だけを行うシンドローム計算回路の２つの独立したシンドローム計算回路を設けることにより、それら２つの符号列に対する誤り検出を同時並行に行ってもよい。
【０１３７】
以上、本発明について第１〜第３の実施の形態に基づいて説明したが、本発明はこれら実施の形態に限定されるものではないことは言うまでもない。
例えば、第１〜第３の実施の形態では、１つのブロックに対する誤り訂正は、Ｃ１系列の誤り訂正とそれに続くＣ２系列の誤り訂正の１回ずつだけであったが、これらの誤り訂正に続けて、さらにＣ１系列の誤り訂正とそれに続くＣ２系列の誤り訂正を追加してもよい。これらの回数を増やすことによって訂正能力が向上されるので、発見された誤りデータの数や、他の処理との関連で許容される時間等を考慮し、各方向に対する誤り訂正の繰り返し回数と決定すればよい。
【０１３８】
また、３つの実施の形態それぞれにおける異なる構成要素どうしを組み合わせることで、様々なバリエーションが実現される。例えば、図２３に示された第２及び第３の実施の形態における３つのＤＭＡ転送に対するスケジューリングを第１の実施の形態に適用してもよい。
また、第１〜第３の実施の形態は、ＤＶＤ−ＲＯＭ等の光ディスクを記録媒体とするディスクドライブ装置であったが、本発明に係る誤り訂正装置はこのようなデータ記憶装置への適用に限定されるものではなく、例えば、ネットワーク通信における中継器等のように、中継すべきデータに対する誤り訂正を高速に行うことが要求される機器に適用できることは言うまでもない。
【０１３９】
【発明の効果】
以上説明したように、本発明は、ブロック符号を構成する入力データについて誤り訂正を行い、誤り訂正したデータを出力する誤り訂正装置であって、入力手段から受け取った前記入力データを記憶する記憶手段と、前記入力手段から受け取った前記入力データに基づいて、ブロック符号の行方向の誤り検出、及び誤り訂正を行い、前記記憶手段から受け取ったデータに基づいて、ブロック符号の列方向の誤り検出、及び誤り訂正を行う誤り訂正手段と、前記誤り訂正手段により誤り符号が存在すると検出された場合に、前記記憶手段中の符号を訂正後の値に書き換える誤り符号更新手段とを備えており、前記入力データは、前記記憶手段、及び前記誤り訂正手段に並行して転送されることとしている。
このような構成によって、入力データが記憶手段に一旦格納されてから読み出されて誤り訂正手段に入力される従来の処理順序に比べ、誤り訂正に要する全体の処理時間が短縮化されると共に記憶手段へのアクセス回数が減少され、高速で低消費電力の誤り訂正装置が実現される。
また、前記行方向の誤り検出、及び誤り訂正に用いられる入力データが、第２のブロック符号を構成する入力データであり、前記列方向の誤り検出、及び誤り訂正に用いられる、前記記憶手段に記憶された入力データが、１ブロック分の全ての符号列が記憶された、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データであることとしている。
また、前記入力データを、前記入力手段から前記記憶手段、及び前記誤り訂正手段に転送する第１転送手段と、前記記憶手段の記憶しているデータを、前記誤り訂正手段に転送する第２転送手段とをさらに備えることとしている。
また、前記誤り訂正手段は、第２のブロック符号を構成する入力データに対する前記行方向の誤り検出、及び誤り訂正と、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データに対する前記列方向の誤り検出、及び誤り訂正とを、時分割で切り換えながら並行して行うこととしている。
また、前記誤り訂正手段は、前記行方向の誤り検出、及び誤り訂正を行った後、前記列方向の誤り検出、及び誤り訂正を行うこととしている。
また、前記誤り訂正手段は、前記列方向の誤り検出、及び誤り訂正を行った後、前記記憶手段に記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正を行なうこととしている。
また、前記誤り訂正手段は、前記列方向の誤り検出、及び誤り訂正を行なった後、前記記憶手段に記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正、列方向の誤り検出、及び誤り訂正を繰り返し行うこととしている。
また、本発明は、ブロック符号を構成する入力データについて誤り訂正を行ない、誤り訂正したデータを出力する誤り訂正装置の誤り訂正方法であって、外部から入力された前記入力データをバッファメモリに記憶させ、外部から入力された前記入力データに基づいて、ブロック符号の行方向の誤り検出、及び誤り訂正を行い、前記バッファメモリからのデータに基づいて、ブロック符号の列方向の誤り検出、及び誤り訂正を行い、誤り符号が存在すると検出された場合に、前記バッファメモリ中の符号を訂正後の値に書き換え、外部から入力された前記入力データを、前記バッファメモリに転送するのと並行して、前記バッファメモリへの転送データと同一のデータに基づいて行方向の誤り検出、及び誤り訂正を行うこととしている。
また、前記行方向の誤り検出、及び誤り訂正に用いられる入力データが、第２のブロック符号を構成する入力データであり、前記列方向の誤り検出、及び誤り訂正に用いられる、前記バッファメモリに記憶されたデータが、１ブロック分の全ての符号列が記憶された、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データであることとしている。
また、前記誤り訂正において、第２のブロック符号を構成する入力データに対する前記行方向の誤り検出、及び誤り訂正と、第２のブロック符号より先に入力された第１のブロック符号を構成する入力データに対する前記列方向の誤り検出、及び誤り訂正とを、時分割で切り換えながら並行して行うこととしている。
また、前記誤り訂正において、前記行方向の誤り検出、及び誤り訂正を行った後、前記列方向の誤り検出、及び誤り訂正を行うこととしている。
また、前記誤り訂正において、前記列方向の誤り検出、及び誤り訂正を行なった後、前記バッファメモリに記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正を行うこととしている。
また、前記誤り訂正において、前記列方向の誤り検出、及び誤り訂正を行なった後、前記バッファメモリに記憶されたデータに基づいて、さらに行方向の誤り検出、及び誤り訂正、列方向の誤り検出、及び誤り訂正を繰り返し行うこととしている。
【０１４０】
これによって、行方向の誤り訂正は、複数の符号列に対して並列に行われ、かつ、複数行の符号列を行方向に分割して得られる複数の小さなブロックそれぞれをジグザグスキャンする順序で進められる。つまり、各行の一部の符号だけに対するスキャンを行を換えながら繰り返していく順序で並列に誤り訂正が進められるので、各行の全ての符号に対するスキャンを行を換えながら繰り返す単純な並列処理に比べ、同一速度でスキャンして誤り訂正を行うにも拘らず、各行の誤り訂正回路に入力される符号の平均入力速度は低下され、各行ごとの誤り訂正回路に必要とされるキューバッファ等の回路規模は小さくて済む。また、各行でのスキャンは、同一行に連続して並ぶ符号が対象とされるので、ブロック符号がＤＲＡＭ等の２次元アドレスを持つ記憶領域に格納されている場合には、同一行アドレスにおける連続する列アドレスへのアクセスとなり、高速スキャンが可能となる。
【０１４１】
ここで、前記ブロック符号は積符号であり、前記ブロック符号を構成する行方向及び列方向の符号列それぞれには情報符号と誤り訂正符号とが含まれ、前記演算手段は、１行又は１列の符号列を単位として誤り符号が存在するか否かを検出する誤り検出手段と、前記誤り検出手段により誤り符号が存在すると検出された場合に、その誤り符号に相当する前記記憶手段中の符号を訂正後の値に書き換える誤り符号更新手段とを有し、前記行方向転送部は、前記誤り検出手段に対して前記符号列を繰り返し転送し、前記誤り検出手段は、前記行方向転送部から符号が送られてくる場合には、送られてくるＬ1個の符号ごとに前記Ｒ1行の異なる行の符号列を構成するものとして前記Ｒ1行の符号列に対する誤り検出を並列に行ってもよい。
【０１４２】
これによって、本発明に係る誤り訂正装置は、積符号に対する誤り訂正における行方向の誤り検出に適用することができるので、光ディスク等の読み出し装置やデータ通信における受信装置など、受信した積符号に対する誤り訂正を実行する装置における誤りの検出の速度が向上される。
また、前記記憶手段においては、前記ブロック符号の同一行に属する符号は連続するアドレスの記録領域に記憶され、前記行方向転送部は、前記記憶手段の連続するアドレスの記憶領域から前記Ｌ1個の符号を連続して読み出してもよい。
【０１４３】
これによって、同一行に属するひとまとまりの符号を記憶手段から読み出すためには、記憶手段に出力するアドレスをインクリメントしていくだけで済むので、記憶手段からの読み出し時間が短縮化される。
また、前記記憶手段は、ダイナミックランダムアクセスメモリであり、前記行方向転送部は、前記記憶手段から前記Ｌ1個の符号をページモードで読み出してもよい。
【０１４４】
これによって、同一行に属するひとまとまりの符号を記憶手段から読み出すためには、記憶手段に１つのＲＡＳアドレスを出力した後に連続してＣＡＳアドレスを出力するだけで済むので、ＤＲＡＭのページヒットによる読み出し速度の高速化が図られる。
また、前記行方向転送部による転送は、前記記憶手段へのダイレクトメモリアクセスによる転送であってもよい。
【０１４５】
これによって、誤り検出手段において並列に処理することができる対象となる全ての符号は連続して記憶手段から読み出されて入力されるので、誤り検出手段による１個の小さなブロックに対する誤り検出においては符号列の入力が中断されることが回避され、効率的なパイプライン処理に基づく誤り訂正が実現される。
【０１４６】
また、前記誤り検出手段は、１つの符号列に対する誤り検出を行うＲ1個の単位誤り検出部と、前記行方向転送部から符号が送られてくる場合には、送られてくるＬ1個の符号ごとに前記Ｒ1個の単位誤り検出部それぞれに順に配送することを繰り返す分配部とを有し、前記Ｒ1個の単位誤り検出部それぞれは、相互に独立、かつ、前記行方向転送部による転送と並行して前記誤り検出を行ってもよい。
【０１４７】
これによって、行方向の誤り訂正においては、個々の単位誤り検出部は、Ｒ1回に１回の頻度で分配部からＬ1個の符号が入力され、かつ、分配部から他の単位誤り検出部に符号が入力されている間に誤り検出を実行するので、個々の単位誤り検出部に要求される処理能力は軽減され、回路規模が削減される。
また、前記Ｒ1個の単位誤り検出部それぞれは、前記分配部からＬ1個の符号が繰り返し配送されてくる場合には、その繰り返し周期よりも短い周期で、Ｌ1個の符号に対する誤り検出を終えてもよい。
【０１４８】
これによって、列方向の誤り訂正において、個々の単位誤り検出部にとっては、符号の入力レート（単位時間当たりに入力される符号の個数）が処理能力（単位時間当たりに誤り検出の処理を受ける符号の個数）の範囲内となるので、個々の単位誤り検出部の入力段に必要とされるキューバッファのサイズは小さくて済む。
【０１４９】
また、前記Ｒ1個の単位誤り検出部それぞれは、１つの符号列に対して複数のシンドロームを算出する積和演算回路を有してもよい。
これによって、本発明に係る誤り訂正装置は、Reed-Solomon符号に適した装置となる。
また、前記行方向転送部は、前記Ｌを前記Ｌ1で割ったときの商をＤ、余りをＥとするときに、前記Ｒ1行Ｌ1列転送を行方向にＬ1個の符号だけずらしながらＤ回繰り返した後に、各行につき連続して並ぶＥ個の符号を読み出して前記誤り検出手段に転送することを前記Ｒ1行それぞれについて順に行い、前記誤り検出手段は、所定回数だけ前記Ｌ1個の符号ごとに前記誤り検出を行った後に、Ｅ個の符号ごとに前記誤り検出を行ってもよい。
【０１５０】
これによって、積符号を構成する行方向の符号長が、一度に連続して読み出される符号数Ｌ1の倍数でなくても、各符号列の終端まで問題なく並列に誤り訂正が行われるので、積符号の大きさに依存しない柔軟な誤り訂正装置が実現される。
また、前記転送手段はさらに、Ｌ2を２以上Ｌ未満の整数としたときに、前記記憶手段に記憶されたブロック符号のＬ2列分の符号列を読み出して前記誤り検出手段に転送することをＬ列について順に繰り返す列方向転送部を有し、前記列方向転送部は、各行につき連続して並ぶＬ2個の符号を読み出して前記誤り検出手段に転送することを前記Ｒ行それぞれについて順に行うＲ行Ｌ2列転送を、行方向にＬ2個の符号だけずらしながら繰り返し、前記誤り検出手段は、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれが、対応する前記Ｌ2列の符号列それぞれに属するものとして前記Ｌ2列の符号列に対する誤り検出を並列に行ってもよい。
【０１５１】
これによって、行方向の誤り訂正だけでなく、列方向の誤り訂正についても、複数の符号列に対して並列に行われ、かつ、列方向に対する誤り訂正は、各行の一部の符号だけに対するスキャンを行を換えながら繰り返していく順序で進められる。従って、各行の全ての符号に対するスキャンを行を換えながら繰り返す単純な並列処理に比べ、同一速度でスキャンして誤り訂正を行うにも拘らず、各行の誤り訂正回路に入力される符号の平均入力速度は低下され、各行ごとの誤り訂正回路に必要とされるキューバッファ等の回路規模は小さくて済む。
【０１５２】
また、前記Ｒ1と前記Ｌ2は、Ｒ1＝Ｌ2＝ｊであり、前記誤り検出手段は、１つの符号列に対する誤り検出を行うｊ個の単位誤り検出部と、前記行方向転送部から符号が送られてくる場合には、送られてくるＬ1個の符号ごとに前記ｊ個の単位誤り検出部それぞれに順に配送することを繰り返し、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれを対応する前記ｊ個の単位誤り検出部それぞれに配送することを繰り返す分配部とを有し、前記ｊ個の単位誤り検出部それぞれは、相互に独立、かつ、前記行方向転送部及び前記列方向転送部による転送と並行して前記誤り検出を行ってもよい。
【０１５３】
これによって、行方向の誤り訂正において並列処理の対象となる行数と、列方向の誤り訂正において並列処理の対象となる列数とが同一であるので、それぞれの誤り訂正において必要とされる単位誤り検出部の数が等しくなり、いずれの方向の誤り訂正であっても、誤り検出手段の能力がフルに活用される。
また、前記ｊ個の単位誤り検出部それぞれは、前記分配部からＬ1個の符号が繰り返し配送されてくる場合には、その繰り返し周期よりも短い周期で、Ｌ1個の符号に対する誤り検出を終え、前記分配部からＬ2個の符号のひとつが繰り返し配送されてくる場合には、その繰り返し周期よりも短い周期で、配送されたひとつの符号に対する誤り検出を終えてもよい。
【０１５４】
これによって、列方向の誤り訂正において、個々の単位誤り検出部にとっては、符号の入力レート（単位時間当たりに入力される符号の個数）が処理能力（単位時間当たりに誤り検出の処理を受ける符号の個数）の範囲内となるので、個々の単位誤り検出部の入力段に必要とされるキューバッファのサイズは小さくて済む。
【０１５５】
また、前記Ｒ1と前記Ｌ1と前記Ｌ2は、Ｒ1＝Ｌ1＝Ｌ2＝ｊであってもよい。
これによって、行方向及び列方向のいずれの誤り訂正に対しても積符号の読み出し順序が同一となるので、記憶手段へのアクセスにかかる転送手段の制御回路が簡単化される。
また、上記目的を達成するために、本発明に係る誤り訂正装置は、Ｒ行Ｌ列のブロック符号を構成する行方向及び列方向の符号列に対する誤り訂正に伴う演算を繰り返し実行する誤り訂正装置であって、前記ブロック符号を記憶する記憶手段と、前記ブロック符号の１行又は１列の符号列を単位として誤り符号の訂正に必要な演算を行う演算手段と、Ｌ2を２以上Ｌ未満の整数としたときに、前記記憶手段に記憶されたブロック符号のＬ2列分の符号列を読み出して前記演算手段に転送することをＬ列について順に繰り返す列方向転送部を有する転送手段とを備え、前記列方向転送部は、各行につき連続して並ぶＬ2個の符号を読み出して前記演算手段に転送することを前記Ｒ行それぞれについて順に行うＲ行Ｌ2列転送を、行方向にＬ2個の符号だけずらしながら繰り返し、前記演算手段は、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれが、対応する前記Ｌ2列の符号列それぞれに属するものとして前記Ｌ2列の符号列に対する前記演算を並列に行うことを特徴とする。
【０１５６】
これによって、列方向の誤り訂正は、複数の符号列に対して並列に行われ、かつ、複数行の符号列を行方向に分割して得られる複数の小さなブロックそれぞれをジグザグスキャンする順序で進められる。つまり、各行の一部の符号だけに対するスキャンを行を換えながら繰り返していく順序で並列に誤り訂正が進められるので、各列の全ての符号に対するスキャンを列を換えながら繰り返す単純な並列処理に比べ、同一速度でスキャンして誤り訂正を行うにも拘らず、各列の誤り訂正回路に入力される符号の平均入力速度は低下され、各行ごとの誤り訂正回路に必要とされるキューバッファ等の回路規模は小さくて済む。また、各行でのスキャンは、同一行に連続して並ぶ符号が対象とされるので、ブロック符号がＤＲＡＭ等の２次元アドレスを持つ記憶領域に格納されている場合には、同一行アドレスにおける連続する列アドレスへのアクセスとなり、高速スキャンが可能となる。
【０１５７】
また、行方向の誤り訂正を行う誤り訂正装置が備える特徴的な上記構成要素を列方向の誤り訂正にも適用することで、行方向の誤り訂正に係る誤り訂正装置と同様の効果を得ることができる。
また、上記目的を達成するために、本発明に係る誤り訂正装置は、外部の第１装置から受けとった符号について必要な誤り訂正をした後に外部の第２装置に出力する誤り訂正装置であって、前記符号を格納するための記憶領域を有する記憶手段と、一定個数の符号を単位として誤り符号が存在するか否かを検出する誤り検出手段と、一定個数の符号を単位として前記記憶手段中の誤り符号を訂正する誤り訂正手段と、前記第１装置から出力された符号を前記記憶手段と前記誤り検出手段に並行して転送し、その符号を前記記憶手段に格納させると共に前記誤り検出手段に前記検出を行わせる第１転送手段と、前記誤り検出手段によって誤り符号が存在すると検出された前記一定個数の符号を前記記憶手段から前記誤り訂正手段に転送し、その符号について前記誤り訂正手段に前記訂正を行わせる第２転送手段と、前記誤り検出手段又は前記誤り訂正手段によって誤り符号が存在しないことが検出又は誤り符号が訂正された一定個数の符号を前記記憶手段から前記第２装置に転送する第３転送手段と、前記第１〜第３転送手段それぞれが排他的に前記符号転送を実行するように制御する転送制御手段とを備えることを特徴とする。
【０１５８】
これによって、第１装置から出力された符号は、記憶手段に格納されることと並列して誤り検出の処理を受けるので、記憶手段に一旦格納されてから読み出されて誤り検出の処理を受ける従来の処理順序に比べ、誤り訂正に要する全体の処理時間が短縮化されると共に記憶手段へのアクセス回数が減少され、高速で低消費電力の誤り訂正装置が実現される。
【０１５９】
ここで、前記誤り検出手段は、誤り符号が存在するか否かの検出結果を記録しておく検出結果記録部を有し、前記誤り訂正手段は、前記検出結果記録部に記録された検出結果を参照することにより、誤り符号が存在すると検出された前記一定個数の符号だけが前記記憶手段から前記誤り訂正手段に転送されるように前記第２転送手段を制御してもよい。
【０１６０】
これによって、記憶手段への格納と同時に行われた誤り検出において誤りが検出されなかった符号に対しては、記憶手段から誤り訂正手段への転送及び誤り訂正手段での誤り訂正という２つの処理がバイパスされるので、誤り訂正は高速化されると共に、記憶手段への無駄なアクセスの発生が回避される。
また、前記第１装置は、Ｒ行Ｌ列のブロック符号を構成する行方向の符号列を順に繰り返し出力し、前記ブロック符号は積符号であり、前記ブロック符号を構成する行方向及び列方向の符号列それぞれには情報符号と誤り訂正符号とが含まれ、前記誤り訂正手段は、行方向及び列方向の符号列に対して誤り訂正を行い、行方向の符号列に対する誤り訂正を行う場合には、前記検出結果記録部に記録された検出結果を参照することにより、誤り符号が存在すると検出された行方向の符号列だけが前記記憶手段から前記誤り訂正手段に転送されるように前記第２転送手段を制御してもよい。
【０１６１】
これによって、本発明に係る誤り訂正装置は、積符号に対する誤り訂正を高速に行うことが要求される光ディスク等の読み出し装置やデータ通信における受信装置などに適用することができる。
また、前記誤り検出手段は、１つのブロック符号を構成する全ての行方向の符号列についての検出結果を前記検出結果記録部に蓄積して記録し、前記誤り訂正手段は、列方向の符号列に対する誤り訂正を行う場合には、前記検出結果記録部に記録された検出結果を参照することにより、誤り符号が存在すると検出されたブロック符号を構成する列方向の符号列だけが前記記憶手段から前記誤り訂正手段に転送されるように前記第２転送手段を制御してもよい。
【０１６２】
これによって、１つのブロック符号を構成する全ての行方向の符号列について誤りが検出されなかった場合には、そのブロック符号の列方向の符号列に対する誤り検出及び誤り訂正の処理はバイパスされるので、光ディスク等の記録媒体から連続して読み出されるブロック符号における誤りの発生頻度が少ない場合には、その分だけ平均的な読み出し速度が大きくなる。
【０１６３】
また、前記第２転送手段は、Ｒ1を２以上Ｒ未満の整数としたときに、誤り符号が存在すると検出されたＲ1行分の符号列を記記憶手段から読み出して前記誤り訂正手段に転送することをＲ行について順に繰り返す行方向転送部を有し、前記行方向転送部は、Ｌ1を２以上Ｌ未満の整数としたときに、各行につき連続して並ぶＬ1個の符号を読み出して前記誤り訂正手段に転送することを前記Ｒ1行それぞれについて順に行うＲ1行Ｌ1列転送を、行方向にＬ1個の符号だけずらしながら繰り返し、前記誤り訂正手段は、前記行方向転送部から符号が送られてくる場合には、送られてくるＬ1個の符号ごとに前記Ｒ1行の異なる行の符号列を構成するものとして前記Ｒ1行の符号列に対する誤り訂正を並列に行ってもよい。
【０１６４】
これによって、複数の行方向に対する誤り訂正は、並列に実行されるだけでなく、小さなブロックに対する誤り訂正を繰り返すことによって行われるので、単純な並列化による場合に比べ、同一速度でスキャンして誤り訂正を行うにも拘らず、誤り訂正手段に要求される処理能力や回路規模は小さくて済む。
また、前記第２転送手段はさらに、Ｌ2を２以上Ｌ未満の整数としたときに、誤り符号が存在すると検出されたブロック符号のＬ2列分の符号列を前記記憶手段から読み出して前記誤り訂正手段に転送することをＬ列について順に繰り返す列方向転送部を有し、前記列方向転送部は、各行につき連続して並ぶＬ2個の符号を読み出して前記誤り訂正手段に転送することを前記Ｒ行それぞれについて順に行うＲ行Ｌ2列転送を、行方向にＬ2個の符号だけずらしながら繰り返し、前記誤り訂正手段は、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれが、対応する前記Ｌ2列の符号列それぞれに属するものとして前記Ｌ2列の符号列に対する誤り訂正を並列に行ってもよい。
【０１６５】
これによって、行方向に対する誤り訂正だけでなく、列方向の誤り訂正も並列化されるので、比較的小さな回路規模で高速な誤り訂正装置が実現される。
また、前記第１転送手段による前記第１装置から前記記憶手段への符号転送、前記第２転送手段による前記記憶手段から前記誤り訂正手段への符号転送及び前記第３転送手段による前記記憶手段から前記第２装置への符号転送は、前記記憶手段へのダイレクトメモリアクセスによる転送であり、前記転送制御手段は、前記第１〜第３転送手段によるＤＭＡ転送の中で第１転送手段によるＤＭＡ転送を最も高い優先度で実行させ、前記第１転送手段によるＤＭＡ転送の必要が生じた場合において、前記第１〜第３転送手段のいずれかがＤＭＡ転送を実行しているときには、その実行中のＤＭＡ転送の終了後に前記第１転送手段によるＤＭＡ転送を実行させ、前記第１〜第３転送手段のいずれもＤＭＡ転送を実行していないときには、即時に前記第１転送手段によるＤＭＡ転送を実行させてもよい。
【０１６６】
これによって、記憶手段へのバッファリングを最優先で行うので、本発明に係る誤り訂正装置を光ディスクドライブ装置等の読み出し装置に適用した場合には、光ピックアップは光ディスク上の符号を連続して読み出すことが可能となる。また、前記転送制御手段は、前記第１〜第３転送手段によるＤＭＡ転送の中で第２転送手段によるＤＭＡ転送を最も低い優先度で実行させ、前記第２転送手段によるＤＭＡ転送の必要が生じた場合において、前記第１〜第３転送手段のいずれもＤＭＡ転送を実行していないときに限り、前記第２転送手段によるＤＭＡ転送を実行させてもよい。
【０１６７】
これによって、記憶手段へのバッファリングと並列して誤り検出することによる誤り訂正の高速化や、複数の符号列に対する処理を並列化したことによる誤り訂正の高速化を考慮した効率的なスケジューリングによる記憶手段への排他的なアクセス制御が可能となる。
また、前記誤り訂正手段は、前記第２転送手段により転送されてきた符号列に基づいて誤り符号と訂正後の値を特定した後に、前記転送制御手段による制御の下で前記記憶手段中の対応する誤り符号を訂正後の値に書き換え、前記転送制御手段は、前記第１〜第３転送手段のいずれもＤＭＡ転送を実行していないときに限り、前記誤り訂正手段による誤り符号の書き換えを実行させてもよい。
【０１６８】
これによって、記憶手段という１つのリソースに対する４種類のアクセスをバランスよく排他制御することができ、コストパフォーマンスの高い誤り訂正装置が実現される。
また、上記目的を達成するために、本発明に係る誤り訂正装置は、外部の第１装置から受けとった符号について必要な誤り訂正をした後に外部の第２装置に出力する誤り訂正装置であって、前記符号を格納するための記憶領域を有する記憶手段と、一定個数の符号を単位として誤り符号を検出し、対応する前記記憶手段中の誤り符号を訂正する誤り訂正手段と、前記第１装置から送られてくる符号と前記記憶手段から送られてくる符号のいずれかを選択して前記誤り訂正手段に送り、前記誤り訂正手段に前記検出と訂正を行わせる符号選択手段と、前記第１装置から出力された符号を前記記憶手段と前記符号選択手段に並行して転送し、その符号を前記記憶手段に格納させると共に前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号について前記誤り訂正手段に前記検出と訂正を行わせる第１転送手段と、一定個数の符号を前記記憶手段から前記符号選択手段に転送し、その符号を前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号について前記誤り訂正手段に前記検出と訂正を行わせる第２転送手段と、前記誤り訂正手段によって誤り符号が存在しないことが検出又は誤り符号が訂正された一定個数の符号を前記記憶手段から前記第２装置に転送する第３転送手段と、前記第１〜第３転送手段それぞれが排他的に前記符号転送を実行するように制御する転送制御手段とを備えることを特徴とする。
【０１６９】
これによって、第１装置から出力された符号は、記憶手段に格納されることと並列して入力選択手段を通過し誤り訂正手段に入力されるので、記憶手段に一旦格納されてから読み出されて誤り訂正手段に入力される従来の処理順序に比べ、誤り訂正に要する全体の処理時間が短縮化されると共に記憶手段へのアクセス回数が減少され、高速で低消費電力の誤り訂正装置が実現される。
【０１７０】
ここで、前記第１装置は、Ｒ行Ｌ列のブロック符号を構成する行方向の符号列を順に繰り返し出力し、前記ブロック符号は積符号であり、前記ブロック符号を構成する行方向及び列方向の符号列それぞれには情報符号と誤り訂正符号とが含まれ、前記第１転送手段は、第１装置から繰り返し送られてくる行方向の符号列を前記記憶手段と前記符号選択手段に並行して転送し、その符号列を前記記憶手段に格納させると共に前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号列について前記誤り訂正手段に前記検出と訂正を行わせ、第２転送手段は、前記ブロック符号の列方向の符号列を前記記憶手段から前記符号選択手段に転送し、その符号列を前記符号選択手段に選択させて前記誤り訂正手段に送らせ、その符号列について前記誤り訂正手段に前記検出と訂正を行わせてもよい。
【０１７１】
これによって、積符号に対する誤り訂正を高速に行うことが要求される光ディスク等の読み出し装置やデータ通信における受信装置などに好適な誤り訂正装置が実現される。
また、前記誤り訂正手段は、行方向又は列方向の符号列を単位として誤り符号が存在するか否かを検出する誤り検出部と、前記誤り検出部により誤り符号が存在すると検出された場合に、その誤り符号に相当する前記記憶手段中の符号を訂正後の値に書き換える符号更新部とを有し、前記誤り検出部は、前記第１装置から前記第１転送手段により転送されてきた行方向の符号列に対する誤り検出の結果を記録しておく行方向検出結果記録部と、前記記憶手段から前記第２転送手段により転送されてきた列方向の符号列に対する誤り検出の結果を記録しておく列方向検出結果記録部とを有し、前記誤り符号更新部は、前記行方向検出結果記録部及び前記列方向検出結果記録部に記録された検出結果を用いて前記記憶手段中の符号を書き換えてもよい。
【０１７２】
これによって、行方向に対する誤り検出の結果と列方向に対する誤り検出の結果とは独立して保存されるので、これらの結果を用いて後続処理を行う符号更新部等は、より遅い速度で処理すれば済む。
また、前記誤り検出部は、行方向の誤り検出を行う場合には、１つのブロック符号を構成する全ての行方向の符号列についての検出結果を前記行方向検出結果記録部に蓄積して記録し、列方向の誤り検出を行う場合には、前記行方向検出結果記録部に記録された検出結果を参照することにより、誤り符号が存在すると検出されたブロック符号を構成する列方向の符号列だけが前記記憶手段から前記誤り訂正手段に転送されるように前記第２転送手段を制御してもよい。
【０１７３】
これによって、１つのブロック符号を構成する全ての行方向の符号列について誤りが検出されなかった場合には、そのブロック符号の列方向の符号列に対する誤り検出及び誤り訂正の処理はバイパスされ、その分だけ平均的な読み出し速度が大きくなる。
また、前記転送制御手段は、前記第１転送手段による前記第１装置から前記符号選択手段への１行分の符号列の転送と、前記第２転送手段による前記記憶手段から前記符号選択手段への１列分の符号列の転送とを、それら符号列を構成する部分符号の単位で切り替えながら交互に実行させ、前記誤り検出部は、前記第１装置から前記第１転送手段により転送されてきた行方向の符号列に対する誤り検出と、前記記憶手段から前記第２転送手段により転送されてきた列方向の符号列に対する誤り検出とを、前記部分符号の単位で交互に切り替えることにより、それぞれの符号列に対する誤り検出を並列に行い、それぞれの結果を行方向検出結果記録部及び列方向検出結果記録部に記録し、前記誤り符号更新部は、前記行方向検出結果記録部及び前記列方向検出結果記録部に記録された検出結果を順次に参照することにより、行方向についての前記記憶手段中の符号の書き換えと列方向についての前記記憶手段中の符号の書き換えとを順次に行ってもよい。
【０１７４】
これによって、符号更新部は、行方向に対する誤り訂正と列方向に対する誤り訂正とを並列に進めることなく順次に進めればよいので、回路規模は削減される。
また、前記第２転送手段は、Ｌ2を２以上Ｌ未満の整数としたときに、前記ブロック符号のＬ2列分の符号列を前記記憶手段から読み出して前記符号選択手段を経て前記誤り訂正手段に転送することをＬ列について順に繰り返す列方向転送部を有し、前記列方向転送部は、各行につき連続して並ぶＬ2個の符号を読み出して前記誤り訂正手段に転送することを前記Ｒ行それぞれについて順に行うＲ行Ｌ2列転送を、行方向にＬ2個の符号だけずらしながら繰り返し、前記誤り訂正手段は、前記列方向転送部から符号が送られてくる場合には、送られてくるＬ2個の符号それぞれが、対応する前記Ｌ2列の符号列それぞれに属するものとして前記Ｌ2列の符号列に対する誤り訂正を並列に行ってもよい。
【０１７５】
これによって、複数の行方向に対する誤り訂正は、並列に実行されるだけでなく、小さなブロックに対する誤り訂正を繰り返すことによって行われるので、単純な並列化による場合に比べ、同一速度でスキャンして誤り訂正を行うにも拘らず、誤り訂正手段に要求される処理能力や回路規模は小さくて済む。
また、記憶手段へのアクセスをＤＭＡとし、これに一定の優先順位を設けてスケジューリングすることで、記憶手段という１つのリソースに対する４種類のアクセスをバランスよく排他制御することができ、コストパフォーマンスの高い誤り訂正装置が実現される。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態における誤り訂正装置１００の構成を示すブロック図である。
【図２】同装置１００のバスコントロール部２の詳細な構成を示すブロック図である。
【図３】同装置１００のデータ分配部５１の詳細な構成を示すブロック図である。
【図４】同装置１００の１個のシンドローム生成部５２（５３、５４、５５）の詳細な構成を示す回路図である。
【図５】同装置１００における主要な処理（データ入力、誤り訂正、データ出力）のタイミングチャートである。
【図６】Ｃ１系列の誤り訂正を行う場合におけるバッファメモリ１内の積符号の読み出し順序を示す。
【図７】図６に示された順序でバッファメモリ１からデータが転送されてきた場合におけるデータ分配部５１の動作を示す図である。
【図８】Ｃ１系列の誤り訂正におけるバッファメモリ１から誤り訂正部５へのデータ転送と４つのシンドローム生成部５２〜５５での積和演算のタイミングを示す。
【図９】Ｃ２系列の誤り訂正を行う場合におけるバッファメモリ１内の積符号の読み出し順序を示す図である。
【図１０】図９に示された順序でバッファメモリ１からデータが転送されてきた場合におけるデータ分配部５１の動作を示す。
【図１１】Ｃ２系列の誤り訂正におけるバッファメモリ１から誤り訂正部５へのデータ転送と４つのシンドローム生成部５２〜５５での積和演算のタイミングを示す図である。
【図１２】Ｃ１系列の端数部分に対する処理順序を示す。
【図１３】Ｃ２系列の端数部分に対する処理順序を示す。
【図１４】２並列でＣ１方向に誤り訂正を行う場合におけるバッファメモリからのデータの読み出し順序を示す。
【図１５】２並列でＣ１方向に誤り訂正を行う場合におけるデータ分配部の動作を示す。
【図１６】２並列でＣ１方向に誤り訂正を行う場合におけるデータ転送とシンドローム計算のタイミングを示す。
【図１７】２並列でＣ２方向に誤り訂正を行う場合におけるバッファメモリからのデータの読み出し順序を示す。
【図１８】２並列でＣ２方向に誤り訂正を行う場合におけるデータ分配部の動作を示す。
【図１９】２並列でＣ２方向に誤り訂正を行う場合におけるデータ転送とシンドローム計算のタイミングを示す。
【図２０】本発明の第２の実施の形態における光ディスク読み取り装置２０００の構成を示すブロック図である。
【図２１】同装置２０００の光ディスク制御部２１００の詳細な構成を示すブロック図である。
【図２２】同装置２０００のバス制御部２１８０の詳細な構成を示すブロック部である。
【図２３】同装置２０００のバス調停制御部２１８２による３つの排他的なＤＭＡ転送の制御例を示す。
【図２４】同装置２０００の誤り訂正部２１３０の詳細な構成を示す回路図である。
【図２５】光ディスク制御部２１００内での処理工程を示すタイミングチャートである。
【図２６】図２５に示されたタイミングチャートを詳細にした図である。
【図２７】Ｃ１系列の誤り訂正を行う場合における誤り訂正部２１３０内での行単位の処理工程を示すタイミングチャートである。
【図２８】図２７に示された符号列を訂正する場合におけるバッファメモリ２１１０に格納された積符号へのアクセス順序を示す図である。
【図２９】図２７に示されたＣ１系列の誤り訂正を４符号列並行して処理する場合のディスクインターフェース部２１２０からのデータの読み出し順序を示す。
【図３０】図２７に示されたＣ１系列の端数部分に対する読み出し順序を示す。
【図３１】本発明の第３の実施の形態における光ディスク読み取り装置３０００の構成を示すブロック図である。
【図３２】同装置３０００の光ディスク制御部３１００の詳細な構成を示すブロック図である。
【図３３】同装置３０００の誤り訂正部３１３０の詳細な構成を示すブロック図である。
【図３４】複数ブロックのデータを連続して処理する場合における光ディスク制御部３１００内での処理工程を示すタイミングチャートである。
【図３５】図３４に示されたタイミングチャートを詳細にした図である。
【図３６】誤り訂正部３１３０内での行方向及び列方向の符号列単位での処理工程を示すタイミングチャートである。
【図３７】積符号のデータ構造を示す。
【図３８】Ｃ１系列の誤り訂正を行ごとに順次行う場合の処理順序を示す。
【図３９】Ｃ２系列の誤り訂正を列ごとに順次行う場合の処理順序を示す。
【図４０】従来の誤り訂正装置による誤り訂正の処理順序を示す。
【符号の説明】
１    バッファメモリ
２    バスコントロール部
５    誤り訂正部
１２    ディスクインターフェース部
１３    ホストインターフェース部
２１    アドレス生成部
２２    バス調停制御部
２３    ＤＭＡチャネル部
２３ａ〜２３ｃ  ＤＭＡチャネル
５１    データ分配部
５１ａ  セレクタ
５１ｂ  切替え制御部
５２〜５５  シンドローム生成部
５６    誤り位置・誤り数値演算部
５７    データ更新部
６２    キューバッファ
６３    シンドローム演算部
６３〜６５  シンドローム演算部
６６    ガロア体乗算器
６７    ガロア体加算器
６８    レジスタ
１００    誤り訂正装置
２０００    光ディスク読み取り装置
２０１０    光ディスク
２０２０    ピックアップ
２０３０    増幅器
２０４０    フロントエンドプロセッサ
２０５０    回転モータ
２０６０    サーボコントローラ
２０７０    ホストコンピュータ
２０８０    システム制御部
２１００    光ディスク制御部
２１１０    バッファメモリ
２１２０    ディスクインターフェース部
２１３０    誤り訂正部
２１３１    シンドローム計算部
２１３２    ユークリッド計算部
２１３３    チェーン計算部
２１３４    エラーデータ更新部
２１３５    Ｃ１符号列転送要求部
２１４０    ホストインターフェース部
２１５０    第１転送部
２１６０    第２転送部
２１７０    第３転送部
２１８０    バス制御部
２１８１    アドレス生成部
２１８２    バス調停制御部
２１８３    バス切替部
２１９０    検出部
２２００    誤り符号列記憶部
３０００    光ディスク読み取り装置
３１００    光ディスク制御部
３１１０    バッファメモリ
３１２０    ディスクインターフェース部
３１３０    誤り訂正部
３１３１    シンドローム計算部
３１３２    ユークリッド計算部
３１３３    チェーン計算部
３１３４    エラーデータ更新部
３１３５    シンドローム記憶部
３１３５    入力データシンドローム記憶部
３１３６    バッファデータシンドローム記憶部
３１４０    ホストインターフェース部
３１５０    第１転送部
３１６０    第２転送部
３１７０    第３転送部
３１８０    バス制御部
３１９０    データ選択部
【図１】
0003676939.tif 000002
【図２】
0003676939.tif 000003
【図３】
0003676939.tif 000004
【図４】
0003676939.tif 000005
【図５】
0003676939.tif 000006
【図６】
0003676939.tif 000007
【図７】
0003676939.tif 000008
【図８】
0003676939.tif 000009
【図９】
0003676939.tif 000010
【図１０】
0003676939.tif 000011
【図１１】
0003676939.tif 000012
【図１２】
0003676939.tif 000013
【図１３】
0003676939.tif 000014
【図１４】
0003676939.tif 000015
【図１５】
0003676939.tif 000016
【図１６】
0003676939.tif 000017
【図１７】
0003676939.tif 000018
【図１８】
0003676939.tif 000019
【図１９】
0003676939.tif 000020
【図２０】
0003676939.tif 000021
【図２１】
0003676939.tif 000022
【図２２】
0003676939.tif 000023
【図２３】
0003676939.tif 000024
【図２４】
0003676939.tif 000025
【図２５】
0003676939.tif 000026
【図２６】
0003676939.tif 000027
【図２７】
0003676939.tif 000028
【図２８】
0003676939.tif 000029
【図２９】
0003676939.tif 000030
【図３０】
0003676939.tif 000031
【図３１】
0003676939.tif 000032
【図３２】
0003676939.tif 000033
【図３３】
0003676939.tif 000034
【図３４】
0003676939.tif 000035
【図３５】
0003676939.tif 000036
【図３６】
0003676939.tif 000037
【図３７】
0003676939.tif 000038
【図３８】
0003676939.tif 000039
【図３９】
0003676939.tif 000040
【図４０】
0003676939.tif 000041