(57)【特許請求の範囲】
【請求項１】
誤り訂正符号の誤り位置多項式及び誤り評価多項式の係数を符号の最終桁から先頭桁へと進む順に求める多項式生成器と、
前記誤り訂正符号を構成するデータの列を逆に並び替える第１の双方向転送型記憶装置と、
前記多項式生成器の出力及び前記並び替え部の出力から前記誤り訂正符号の訂正を行う訂正器と、
前記訂正器が出力するデータの列を逆に並び替える第２の双方向転送型記憶装置と
を備える誤り訂正装置であって、
前記第１及び第２の双方向転送型記憶装置の少なくともいずれか一方が、
いずれもが所定長のデータを格納する第０乃至第（Ｎ＋Ｋ−１）（Ｎ≧２，Ｋ≧０）の記憶単位を有し、
入力データはＮ個毎に組を成して交互に前記第０及び第（Ｎ＋Ｋ−１）の記憶単位に入力され、
前記入力データの異なる２つの前記組の先頭のデータがＫ個の前記記憶単位を挟んで対向しつつ、前記第０乃至第（Ｎ＋Ｋ−１）の記憶単位において格納されるデータに対して順次に（Ｎ＋Ｋ−１）回のシフト転送が行われ、
前記シフト転送の方向が交互に逆向きに転向することにより、前記入力データがスイッチバックして出力される、誤り訂正装置。
【請求項２】
前記入力データは、制御信号が第１の値を採る場合に前記第０の記憶単位へ、第２の値を採る場合に前記第Ｎの記憶単位へ、それぞれ格納し、
前記制御信号が前記第１の値を採る場合には前記第０乃至第（Ｎ＋Ｋ−２）の記憶単位の格納する内容が前記第１乃至第（Ｎ＋Ｋ−１）の記憶単位へ、前記第２の値を採る場合には前記第１乃至第（Ｎ＋Ｋ−１）の記憶単位の格納する内容が前記第０乃至第（Ｎ＋Ｋ−２）の記憶単位へ、それぞれ転送され、
前記制御信号が前記第１の値を採る場合には前記第（Ｎ＋Ｋ−１）の記憶単位の格納する内容を、前記第２の値を採る場合には前記第０の記憶単位の格納する内容を、それぞれ出力データとして採用され、
前記制御信号は、前記第０の記憶単位にＮ回連続して前記入力データが書き込まれたことに対応して前記第２の値に、前記第（Ｎ＋Ｋ−１）の記憶単位にＮ回連続して前記入力データが書き込まれたことに対応して前記第１の値に、それぞれ設定される、請求項１記載の誤り訂正装置。
【請求項３】
誤り訂正符号の誤り位置多項式及び誤り評価多項式の係数を符号の最終桁から先頭桁へと進む順に求める多項式生成器と、
前記誤り訂正符号を構成するデータの列を逆に並び替える第１の双方向転送型記憶装置と、
前記多項式生成器の出力及び前記並び替え部の出力から前記誤り訂正符号の訂正を行う訂正器と、
前記訂正器が出力するデータの列を逆に並び替える第２の双方向転送型記憶装置と
を備える誤り訂正装置であって、
前記第１及び第２の双方向転送型記憶装置の少なくともいずれか一方が、
いずれもが所定長のデータを格納し、第０乃至第（Ｎ＋Ｋ−１）のアドレスに対応する第０乃至第（Ｎ＋Ｋ−１）（Ｎ≧２，Ｋ≧０）の記憶単位を有し、クロックに基づいて動作するメモリと、
前記メモリの読み出しアドレス及び書き込みアドレスをそれぞれ生成するアドレス生成部と
を有し、
入力データはＮ個毎に組を成し、前記記憶単位の格納する内容を読み出しつつこれに追随して入力データが書き込まれ、前記入力データの組の更新に対応して前記読み出しアドレス及び前記書き込みアドレスの移動する方向が逆転する、誤り訂正装置。
【請求項４】
制御信号が第１の値を採る場合には前記メモリの前記読み出しアドレスが前記書き込みアドレスに対して前記Ｋだけ大きく設定されつつ、前記クロックに基づいて前記読み出しアドレス及び前記書き込みアドレスのいずれもが１増加し、
前記制御信号が第２の値を採る場合には前記読み出しアドレスが前記書き込みアドレスに対して前記Ｋだけ小さく設定されつつ、前記クロックに基づいて前記読み出しアドレス及び書き込みアドレスのいずれもが１減少し、
前記制御信号は、前記書き込みアドレスが前記第（Ｎ−１）の記憶単位を指定した場合に対応して前記第２の値に、前記第Ｋの記憶単位を指定した場合に対応して前記第１の値に、それぞれ設定され、
前記第（Ｎ−１）の記憶単位に対して前記書き込みが行われた後、前記書き込みアドレス及び前記読み出しアドレスはそれぞれ前記第（Ｎ＋Ｋ−１）のアドレス、及び前記第（Ｎ−１）のアドレス、にそれぞれ設定され、
前記第Ｋの記憶単位に対して前記書き込みが行われた後、前記書き込みアドレス及び前記読み出しアドレスはそれぞれ前記第０のアドレス、及び前記第Ｋのアドレス、にそれぞれ設定される、請求項３記載の誤り訂正装置。
【請求項５】
前記メモリの書き込み及び読み出しは前記クロックのそれぞれ立ち上がり及び立ち下がりを契機として行われ、前記書き込みアドレス及び読み出しアドレスは前記メモリの書き込みに引き続いて更新される請求項４記載の誤り訂正装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は誤り訂正装置に関し、特に誤り位置多項式及び誤り評価多項式の係数が、符号の最終桁から先頭桁へと進む順に求められる復号方法に基づく誤り訂正装置に関する。
【０００２】
【従来の技術】
図５７は、従来のリードソロモン誤り訂正装置２００の構成を示すブロック図である。リードソロモン誤り訂正装置２００へと入力したリードソロモン符号のデータＲＳＩＮを用い、シンドローム生成器１からシンドロームが求められる。このシンドロームに対して多項式生成器２において所定の処理が行われて、誤り位置多項式σ（ｘ）及び誤り評価多項式ω（ｘ）が求められる。
【０００３】
しかし、多項式生成器２において、例えばユークリッド（Euclid）法を用いて誤り位置多項式σ（ｘ）及び誤り評価多項式ω（ｘ）を求める場合には、これらの係数が符号の最終桁から先頭桁へと進む順に求められることとなる。従ってチェーンサーチ（Chien search）を行う訂正器３においては、符号の最終バイトから先頭バイトへと順にサーチを開始する必要がある。
【０００４】
これに対応して、データＲＳＩＮを訂正器３へと与える場合には、符号の一まとまり毎にその桁の順序を逆に並べ替える必要がある。ＦＩＬＯ（First In Last Out）型の記憶装置６１，６２並びにデマルチプレクサ７１及びマルチプレクサ７２はデータＲＳＩＮに対してこの並べ替えを行うために設けられている。
【０００５】
このようにして得られ、桁の順序が逆転したデータＲＳＩＮは、訂正器３において誤り位置多項式σ（ｘ）及び誤り評価多項式ω（ｘ）の係数、並びにガロア体の元に基づいてその誤りが訂正される。訂正された符号も桁の順序が逆転しているので、これを元の順序に戻すべく、ＦＩＬＯ型の記憶装置４１，４２並びにデマルチプレクサ７３及びマルチプレクサ７４が設けられており、マルチプレクサ７４によって訂正後の符号ＲＳＯＵＴが出力される。
【０００６】
【発明が解決しようとする課題】
従来のＦＩＬＯ型の記憶装置（以下、かかる記憶装置をも「ＦＩＬＯ」と称す）はプッシュ操作とポップ操作によって動作するので、これを一つだけ用いた場合には、第１の組のデータについてＦＩＬＯの処理を得た後、直ちに第２の組のデータについてＦＩＬＯの処理を得ることはできない。第１の組のデータの読み出しが終わるまでに他の組のデータをＦＩＬＯに入力すると、第１の組のデータが破壊されるためである。これでは連続して受信されるリードソロモン符号の複数を処理することはできない。
【０００７】
従って、ＦＩＬＯ４１，４２，６１，６２は、順次入力されたデータを入力された順とは逆にデータを出力するものの、図５７に示された様に対として設けられる必要がある。
【０００８】
ＦＩＬＯ６１，６２はデマルチプレクサ７１によってデータＲＳＩＮが一まとまりのリードソロモン符号毎に振り分けられて与えられ、マルチプレクサ７２によっていずれかの出力が訂正器３と与えられる。例えばデマルチプレクサ７１が第１のまとまりのリードソロモン符号に対応するデータＲＳＩＮをＦＩＬＯ６１へと与える場合には、マルチプレクサ７２はＦＩＬＯ６２に格納されていた内容を訂正器３へと与える。一方、デマルチプレクサ７１が第２のまとまりのリードソロモン符号に対応するデータＲＳＩＮをＦＩＬＯ６２へと与えると同時に、ＦＩＬＯ６１からは第１のまとまりのリードソロモン符号に対応するデータＲＳＩＮが、その桁順を逆にしてマルチプレクサ７２を介して訂正器３へと与えられる。ＦＩＬＯ４１，４２並びにデマルチプレクサ７３及びマルチプレクサ７４に関しても同様である。
【０００９】
つまり従来の技術では、交代に選択される一対のＦＩＬＯを用いなければ、複数の組のデータについて連続的にＦＩＬＯの処理を行うことができず、従ってデータを記憶する領域は一組のデータの２倍分が必要であった。結局シンドローム生成器１との遅延の整合を取るために設けられるＦＩＦＯ（First In First Out）型の記憶装置５をも含めると、従来のリードソロモン誤り訂正装置２００においては、符号長さの５倍の大きさの記憶単位（ここでは一つの記憶単位が１バイトを格納すると考える）が必要となる。
【００１０】
本発明は上記問題点を解決するためになされたもので、複数の記憶素子の間においてデータの転送の方向を上から下へ向かう方向と、下から上へ向かう方向との双方向について行い、データを記憶する領域を逓減しつつも、連続的にＦＩＬＯの機能を可能とする双方向ＦＩＬＯを用いることにより、回路規模を削減したリードソロモン誤り訂正装置を提供することを目的としている。
【００１１】
【課題を解決するための手段】
この発明のうち請求項１にかかるものは、誤り訂正符号の誤り位置多項式及び誤り評価多項式の係数を符号の最終桁から先頭桁へと進む順に求める多項式生成器と、前記誤り訂正符号を構成するデータの列を逆に並び替える第１の双方向転送型記憶装置と、前記多項式生成器の出力及び前記並び替え部の出力から前記誤り訂正符号の訂正を行う訂正器と、前記訂正器が出力するデータの列を逆に並び替える第２の双方向転送型記憶装置とを備える誤り訂正装置である。そして、前記第１及び第２の双方向転送型記憶装置の少なくともいずれか一方が、いずれもが所定長のデータを格納する第０乃至第（Ｎ＋Ｋ−１）（Ｎ≧２，Ｋ≧０）の記憶単位を有し、入力データはＮ個毎に組を成して交互に前記第０及び第（Ｎ＋Ｋ−１）の記憶単位に入力され、前記入力データの異なる２つの前記組の先頭のデータがＫ個の前記記憶単位を挟んで対向しつつ、前記第０乃至第（Ｎ＋Ｋ−１）の記憶単位において格納されるデータに対して順次に（Ｎ＋Ｋ−１）回のシフト転送が行われ、前記シフト転送の方向が交互に逆向きに転向することにより、前記入力データがスイッチバックして出力される。
【００１２】
この発明のうち請求項２にかかるものは、請求項１記載の誤り訂正装置であって、前記入力データは、制御信号が第１の値を採る場合に前記第０の記憶単位へ、第２の値を採る場合に前記第Ｎの記憶単位へ、それぞれ格納し、前記制御信号が前記第１の値を採る場合には前記第０乃至第（Ｎ＋Ｋ−２）の記憶単位の格納する内容が前記第１乃至第（Ｎ＋Ｋ−１）の記憶単位へ、前記第２の値を採る場合には前記第１乃至第（Ｎ＋Ｋ−１）の記憶単位の格納する内容が前記第０乃至第（Ｎ＋Ｋ−２）の記憶単位へ、それぞれ転送され、前記制御信号が前記第１の値を採る場合には前記第（Ｎ＋Ｋ−１）の記憶単位の格納する内容を、前記第２の値を採る場合には前記第０の記憶単位の格納する内容を、それぞれ出力データとして採用され、前記制御信号は、前記第０の記憶単位にＮ回連続して前記入力データが書き込まれたことに対応して前記第２の値に、前記第（Ｎ＋Ｋ−１）の記憶単位にＮ回連続して前記入力データが書き込まれたことに対応して前記第１の値に、それぞれ設定される。
【００１３】
この発明のうち請求項３にかかるものは、誤り訂正符号の誤り位置多項式及び誤り評価多項式の係数を符号の最終桁から先頭桁へと進む順に求める多項式生成器と、前記誤り訂正符号を構成するデータの列を逆に並び替える第１の双方向転送型記憶装置と、前記多項式生成器の出力及び前記並び替え部の出力から前記誤り訂正符号の訂正を行う訂正器と、前記訂正器が出力するデータの列を逆に並び替える第２の双方向転送型記憶装置とを備える誤り訂正装置である。そして、前記第１及び第２の双方向転送型記憶装置の少なくともいずれか一方が、いずれもが所定長のデータを格納し、第０乃至第（Ｎ＋Ｋ−１）のアドレスに対応する第０乃至第（Ｎ＋Ｋ−１）（Ｎ≧２，Ｋ≧０）の記憶単位を有し、クロックに基づいて動作するメモリと、前記メモリの読み出しアドレス及び書き込みアドレスをそれぞれ生成するアドレス生成部とを有し、入力データはＮ個毎に組を成し、前記記憶単位の格納する内容を読み出しつつこれに追随して入力データが書き込まれ、前記入力データの組の更新に対応して前記読み出しアドレス及び前記書き込みアドレスの移動する方向が逆転する。
【００１４】
この発明のうち請求項４にかかるものは、請求項３記載の誤り訂正装置であって、制御信号が第１の値を採る場合には前記メモリの前記読み出しアドレスが前記書き込みアドレスに対して前記Ｋだけ大きく設定されつつ、前記クロックに基づいて前記読み出しアドレス及び前記書き込みアドレスのいずれもが１増加し、前記制御信号が第２の値を採る場合には前記読み出しアドレスが前記書き込みアドレスに対して前記Ｋだけ小さく設定されつつ、前記クロックに基づいて前記読み出しアドレス及び書き込みアドレスのいずれもが１減少し、前記制御信号は、前記書き込みアドレスが前記第（Ｎ−１）の記憶単位を指定した場合に対応して前記第２の値に、前記第Ｋの記憶単位を指定した場合に対応して前記第１の値に、それぞれ設定され、前記第（Ｎ−１）の記憶単位に対して前記書き込みが行われた後、前記書き込みアドレス及び前記読み出しアドレスはそれぞれ前記第（Ｎ＋Ｋ−１）のアドレス、及び前記第（Ｎ−１）のアドレス、にそれぞれ設定され、前記第Ｋの記憶単位に対して前記書き込みが行われた後、前記書き込みアドレス及び前記読み出しアドレスはそれぞれ前記第０のアドレス、及び前記第Ｋのアドレス、にそれぞれ設定される。
【００１５】
この発明のうち請求項５にかかるものは請求項４記載の誤り訂正装置であって、前記メモリの書き込み及び読み出しは前記クロックのそれぞれ立ち上がり及び立ち下がりを契機として行われ、前記書き込みアドレス及び読み出しアドレスは前記メモリの書き込みに引き続いて更新される。
【００１６】
【発明の実施の形態】
Ａ．リードソロモン誤り訂正装置：
図１は、本発明に係るリードソロモン誤り訂正装置１００の構成を例示するブロック図である。リードソロモン誤り訂正装置１００にはリードソロモン符号のデータＲＳＩＮ及び、クロックＣＬＫが入力する。データＲＳＩＮはシンドローム生成器１及び、これと遅延時間の整合を取るためのＦＩＦＯ５とに与えられる。
【００１７】
シンドローム生成器１はデータＲＳＩＮからシンドロームを求める。このシンドロームに対して多項式生成器２において、例えばユークリッド（Euclid）法を用いて誤り位置多項式σ（ｘ）及び誤り評価多項式ω（ｘ）が求められる。多項式生成器２においてからは誤り位置多項式σ（ｘ）及び誤り評価多項式ω（ｘ）の係数が符号の最終桁から先頭桁へと進む順に求められ、チェーンサーチを行う訂正器３においては、符号の最終バイトから先頭バイトへと順にサーチを開始する。
【００１８】
例えば、リードソロモン符号としてＲＳ（２０４，１８８，１７）と表現される態様を採用した場合を考える。この場合は、一まとまりのリードソロモン符号のバイト数が２０４バイトであり、その内のデータ数は１８８バイト（従って残りの１６バイトはパリティ検査記号）である。符号間距離は（２ｔ＋１＝）１７バイトであり、よって（ｔ＝）８バイトの誤り訂正が可能となる態様である。
【００１９】
かかる態様のリードソロモン符号をガロアフィールドＧＦ（２8）に基づいて構成する例として、原始多項式にＰ（ｘ）＝ｘ8＋ｘ4＋ｘ3＋ｘ2＋１を、また生成多項式としてＧ（ｘ）＝（ｘ−α0）・（ｘ−α1）・…・（ｘ−α15）を、それぞれ採用することができる。この場合、α0，α-1，α-2，α-3，α-4，α-5，α-6，α-7，α-8は１６進数で表現してそれぞれ１，８ｅ，４７，ａｄ，ｄ８，６ｃ，３６，１ｂ，８３となる。
【００２０】
訂正器３ではｔ次式の誤り位置多項式σ（ｘ）及び（ｔ−１）次式の誤り評価多項式ω（ｘ）のそれぞれの係数sigm０〜sigm８，omeg０〜omeg７をフェッチする。これは一まとまりのリードソロモン符号の到着を示す信号syncを契機として行われる。そして次の一まとまりのリードソロモン符号の到着を示す信号syncが活性化しない間、クロックＣＬＫ毎に係数sigmｐ，omegｑにそれぞれα-p，α-qを用いてガロアの乗算を行って（ｐ＝０〜８，ｑ＝０〜７）、その結果をsigm〔８：０〕，omeg〔７：０〕に格納する。具体的には下記の演算が行われる。
【００２１】
【数１】
0003710586.tif 000002
【００２２】
ここで記号multはガロア乗算を行うことを示し、sync ?との表現は、信号syncが活性化している場合にはコロンの左側に示された変数sigm〔ｐ〕（あるいはomeg〔ｑ〕）に、非活性の場合にはコロンの右側に示された誤り位置多項式σ（ｘ）の係数sigmｐ（あるいは誤り評価多項式ω（ｘ）の係数omegｑ）に、それぞれカンマの右側に示された係数α-p（あるいはα-q）を乗ずることを示す。このようなガロアの乗算を行うことで、訂正器３におけるサーチの順は符号の最終バイトから先頭バイトへと向かう順になる。
【００２３】
一方、ＦＩＦＯ５を通過したデータＲＳＩＮは双方向ＦＩＬＯ６に入力し、その表すリードソロモン符号の一まとまり毎に桁順が逆転されて訂正器３へ与えられるので、訂正器３はリードソロモン符号の誤りを訂正して出力することができる。なお、訂正器３においては訂正が可能であったか不可能であったかという情報も得られ、これはリードソロモン誤り訂正装置１００の外部へと伝達可能である。
【００２４】
訂正された符号も桁の順序が逆転しているので、これを元の順序に戻すべく双方向ＦＩＬＯ４において桁順を元に戻して、リードソロモン誤り訂正装置１００から訂正後の符号ＲＳＯＵＴが出力される。
【００２５】
ここで、双方向ＦＩＬＯ４，６の構成については以下の２種類が例示でき、いずれかの構成を、あるいはそれぞれ異なる構成を採ることができる。
【００２６】
Ｂ．双方向ＦＩＬＯの概説：
実施の形態１．
図２は本発明の実施の形態１として採用し得る、シフトレジスタ型の双方向ＦＩＬＯの構成を示す概念図である。それぞれがＬビット幅のデータを格納し得る記憶単位＃０〜＃Ｎ＋Ｋ−１が、（Ｎ＋Ｋ）段のスタックを構成している。例えばリードソロモン誤り訂正装置１００においてはＬ＝８，Ｎ＝２０４に設定され、Ｌ，Ｎとは独立にＫ≧０の整数を設定できる。
【００２７】
黒矢印及び白矢印は、それぞれ互いに異なるまとまりのリードソロモン符号についての双方向ＦＩＬＯに対する入出力を示している。左側において黒矢印で示されるように記憶単位＃０へデータ（リードソロモン符号の一つの桁に相当）が順次に入力され、かつ記憶単位＃Ｎ＋Ｋ−１へと向かう方向へと記憶単位の間をシフトして転送される。このとき記憶単位＃Ｎ＋Ｋ−１へと転送されたデータは、左側において白矢印で示されるように読み出される。
【００２８】
逆に、右側において白矢印で示されるように記憶単位＃Ｎ＋Ｋ−１へとデータが順次に入力され、かつ記憶単位＃０へと向かう方向へと記憶単位の間をシフトして転送される。このとき記憶単位＃０へと転送されたデータは、右側において黒矢印で示されるように読み出される。
【００２９】
このようにして互いの先頭アドレスがＫ個の記憶単位を挟んで対向しつつ、スイッチバックの態様にて、異なるまとまりのリードソロモン符号の２組データが双方向ＦＩＬＯの異なる方向から入出力されるので、（Ｎ＋Ｋ）段のスタックでも連続してリードソロモン符号の桁順を入れ替えることができる。
【００３０】
従ってシフトレジスタ型の双方向ＦＩＬＯをＫ＝０としてＦＩＬＯ３，４に採用することにより、リードソロモン誤り訂正装置１００においては符号長さの３倍の大きさの記憶単位しか必要とならず、回路規模の削減を実現することができる。
【００３１】
実施の形態２．
図３は本発明の実施の形態２として採用し得る、アドレスポインタ型の双方向ＦＩＬＯの構成を示す概念図である。それぞれがＬビット幅のデータを格納し得る記憶単位＃０〜＃Ｎ＋Ｋ−１が、（Ｎ＋Ｋ）段のスタックを構成している。例えばリードソロモン誤り訂正装置１００においてはＬ＝８，Ｎ＝２０４に設定され、Ｌ，Ｎとは独立にＫ≧０の整数を設定できる。
【００３２】
黒矢印及び白矢印は、それぞれ互いに異なるまとまりのリードソロモン符号についての双方向ＦＩＬＯに対する入出力の方向を示している。左側において黒矢印で示される方向へとデータの書き込み及び読み出しが行われる。但し、読み出しアドレスは書き込みアドレスよりも黒矢印で示される方向へＫだけ進行している。
【００３３】
逆に、右側において白矢印で示されるように方向へとデータの書き込み及び読み出しが行われる。但し、読み出しアドレスは書き込みアドレスよりも白矢印で示される方向へＫだけ進行している。
【００３４】
このようにして、古いデータを読み出しつつその直後に新たなデータを書き込む処理を、シャトルの態様にて双方向に繰り返すので、（Ｎ＋Ｋ）段のスタックでも連続してリードソロモン符号の桁順を入れ替えることができる。
【００３５】
従ってシフトレジスタ型の双方向ＦＩＬＯをＫ＝０としてＦＩＬＯ３，４に採用することにより、リードソロモン誤り訂正装置１００においては符号長さの３倍の大きさの記憶単位しか必要とならず、回路規模の削減を実現することができる。
【００３６】
Ｃ．双方向ＦＩＬＯの追加機能：
実施の形態３．
図４はこの発明の実施の形態３にかかるリードソロモン誤り訂正装置１０１の構成を例示するブロック図である。リードソロモン誤り訂正装置１０１はリードソロモン誤り訂正装置１００と比較して、待機命令ＷＡＩＴによって処理を待機することができる機能が追加される点で異なっている。
【００３７】
待機命令ＷＡＩＴによって処理を待機することにより、リードソロモン誤り訂正装置１０１の処理速度がデータＲＳＩＮの伝送速度よりも早い場合にも整合性よく動作することができる。
【００３８】
但し、従来から周知のシンドローム生成器１、多項式生成器２、訂正器３における待機動作はともかく、本明細書で初めて明確となる双方向ＦＩＬＯにおける待機動作は公知ではない。よって以下においては双方向ＦＩＬＯの具体的動作、具体的構成を待機動作と共に詳細に説明する。
【００３９】
Ｄ．双方向ＦＩＬＯの具体的構成及び具体的動作：
（ｄ−１）シフトレジスタ型の双方向ＦＩＬＯ；
図５及び図６は両図相俟ってシフトレジスタ型の双方向ＦＩＬＯの動作を示すフローチャートである。両図は接続子Ｊ１〜Ｊ４によって互いに結合される。また、図７はシフトレジスタ型の双方向ＦＩＬＯの構成を例示するブロック図である。そして図８乃至図２０は図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【００４０】
図７に示された双方向ＦＩＬＯはシフトレジスタを構成するメモリＭ０〜Ｍ３及び、これらの間で順次データを転送する制御部ＣＮＴ１〜ＣＮＴ３を備えている。具体的には、メモリＭ０，Ｍ１の間のデータの転送は制御部ＣＮＴ１が、メモリＭ１，Ｍ２の間のデータの転送は制御部ＣＮＴ２が、メモリＭ２，Ｍ３の間のデータの転送は制御部ＣＮＴ３が、それぞれ行う。制御部ＣＮＴ１〜ＣＮＴ３はクロックＣＬＫに同期して動作する。データが転送される方向は、モード信号ＭＯＤＥの値が“０”，“１”を採ることに対応して、それぞれを上から下へ向かう方向（Ｍ０からＭ３へ向かう方向）、下から上へ向かう方向（Ｍ３からＭ０へ向かう方向）となる。
【００４１】
デマルチプレクサＤＭＵＸ及びマルチプレクサＭＵＸは、それぞれモード信号ＭＯＤＥの値に基づいて出力及び入力を行う。具体的には、デマルチプレクサＤＭＵＸは入力データＤＩＮを入力し、モード信号ＭＯＤＥの値が“０”，“１”を採ることに対応してそれぞれ“０”，“１”と付記された出力端（以下「“０”出力端」「“１”出力端」とする）へと入力データＤＩＮを出力する。また、マルチプレクサＭＵＸは、モード信号ＭＯＤＥの値が“０”，“１”を採ることに対応してそれぞれ“０”，“１”と付記された入力端（以下「“０”入力端」「“１”入力端」とする）に入力されるデータＤＯＵＴ１，ＤＯＵＴ２を出力データＤＯＵＴとして出力する。ここで、データＤＯＵＴ１，ＤＯＵＴ２はそれぞれメモリＭ３，Ｍ０に格納されたデータである。
【００４２】
モード信号ＭＯＤＥはカウンタＣＯＵＮＴ１，ＣＯＵＮＴ２、及び比較器ＣＭＰによって生成される。カウンタＣＯＵＮＴ１はクロックＣＬＫをカウントしてモード制御値ＭＯＤＥ＿ＣＮＴを生成し、比較器ＣＭＰはこれを所定の値、例えば２ビットの値“１１”（１０進数でいう“３”）と比較する。モード制御値ＭＯＤＥ＿ＣＮＴは、入力データＤＩＮを格納するメモリが、データの移動方向に沿って何番目にあるのかを指示する。モード制御値ＭＯＤＥ＿ＣＮＴが所定の値と一致した場合には（これはモード信号ＭＯＤＥが“０”を採るならばメモリＭ３が、“１”を採るならばメモリＭ０が、それぞれ入力データＤＩＮを格納することを意味する）、カウンタＣＯＵＮＴ１をリセットしてモード制御値ＭＯＤＥ＿ＣＮＴの値を“０”にし、かつカウンタＣＯＵＮＴ２にカウントさせる。カウンタＣＯＵＮＴ２はクロックＣＬＫをカウントするのではなく、比較器ＣＭＰの出力をカウントする１ビットのカウンタであり、その出力たるモード信号ＭＯＤＥの値が変化するタイミングがクロックＣＬＫに同期する。
【００４３】
カウンタＣＯＵＮＴ１は比較器ＣＭＰの出力によってリセットされるためのリセット端Ｒ２の他、双方向ＦＩＬＯのリセットに用いられるリセット信号ＲＳＴによってもリセットされる為にリセット端Ｒをも有している。同様に、カウンタＣＯＵＮＴ２にもリセット信号ＲＳＴによってリセットされる為のリセット端Ｒが設けられている。また、各メモリＭ０〜Ｍ３にもリセット信号ＲＳＴによってリセットされる為のリセット端Ｒが設けられている。
【００４４】
図５に示されたフローチャートにおいて、ステップＳ１０１はクロックＣＬＫにかかわらず実行される。このステップＳ１０１において、リセット命令が与えられたか否かが判断される。図７に即して言えばリセット信号ＲＳＴが立ち下がったか否かが判断される。リセット命令が与えられた場合（リセット信号ＲＳＴが立ち下がった場合）、接続子Ｊ２を介して図６に示されたステップＳ１１３〜Ｓ１１５が実行され、接続子Ｊ３を介して再びステップＳ１０１に戻る。
【００４５】
ステップＳ１１３〜Ｓ１１５において双方向ＦＩＬＯのリセットの為の処理が実行される。ステップＳ１１３では第０番目乃至第（Ｎ−１）番目のメモリ、即ち全てのメモリの内容が初期化される。図７に即して言えばＮ＝４であり、メモリＭ０〜Ｍ３の内容は、これらのリセット端Ｒに“Ｈ”から“Ｌ”への遷移が与えられることによってクリアされる。ステップＳ１１４では動作モードが第１モードに設定される。これは図７に即して言えばモード信号ＭＯＤＥの値が“０”に設定されることを示し、カウンタＣＯＵＮＴ２のリセット端Ｒに“Ｈ”から“Ｌ”への遷移が与えられることによって実現される。ステップＳ１１５では同様に、カウンタＣＯＵＮＴ１のリセット端Ｒに“Ｈ”から“Ｌ”への遷移が与えられることによってモード制御値ＭＯＤＥ＿ＣＮＴが“０”に設定される。
【００４６】
図５に示されたステップＳ１０２，Ｓ１００に関しては、図７に示された双方向ＦＩＬＯでは特に対応する機構が示されていないが、待機（wait）命令ＷＴ、可動（enable）命令ＥＮを用いてメモリを管理することは通常よく行われており、その機構も周知の技術を用いて実現することができる。
【００４７】
ステップＳ１０３において、動作モードが第１モードであるか、第２モードであるかが判断される。ここで第１及び第２モードはそれぞれモード信号ＭＯＤＥの値が“０”，“１”であることに対応し、制御部ＣＮＴ１〜ＣＮＴ３がデータを転送する方向はこれに対応して上から下へ向かう方向、下から上へ向かう方向となる。ステップＳ１１３〜Ｓ１１５が実行されて初めてステップＳ１０３が実行される場合には、ステップＳ１１４が実行された結果、モード信号ＭＯＤＥの値が“０”となっており、ステップＳ１０４へ進む。
【００４８】
ステップＳ１０４において、末尾のメモリである第（Ｎ−１）番目のメモリの内容が出力データとして採用される。これはマルチプレクサＭＵＸがモード信号ＭＯＤＥの値が“０”であることに対応して、出力データＤＯＵＴとしてデータＤＯＵＴ１を採用することで実現される。図８はこの状態を示す図であり、全てのメモリＭ０〜Ｍ３がクリアされて“０”を格納している状態において、出力データＤＯＵＴはメモリＭ３の格納する内容（データＤＯＵＴ１）を採っている。
【００４９】
ステップＳ１０６，Ｓ１０８，Ｓ１１１，Ｓ１１２はクロックＣＬＫに同期して、例えばその立ち上がりのタイミングを契機として実行される。まずステップＳ１０６において、先頭のメモリである第０番目のメモリ乃至末尾から２番目のメモリである第（Ｎ−２）番目のメモリの内容を、先頭から２番目のメモリである第１番目のメモリ乃至末尾のメモリである第（Ｎ−１）番目のメモリへと転送する。これは、制御部ＣＮＴ１〜ＣＮＴ３がメモリＭ０〜Ｍ３の間においてデータを上から下へ向かう方向へ転送することで実現される。従って、図８においてメモリＭ０〜Ｍ２に格納されていたデータ“０”，“０”，“０”が、それぞれメモリＭ１〜Ｍ３に格納されることになる。また、ステップＳ１０８において先頭のメモリである第０番目のメモリに入力データの値が格納される。例えば入力データＤＩＮの値としてＡ１が与えられていれば、メモリＭ０にはデータＡ１が格納される。図９はこのようにして得られた各メモリＭ０〜Ｍ３の格納内容を示している。
【００５０】
ステップＳ１１０ではモード制御値ＭＯＤＥ＿ＣＮＴの値が吟味される。図９に示された状態では入力データＤＩＮの値が格納される対象はメモリＭ０であり、モード制御値ＭＯＤＥ＿ＣＮＴが“０”であるのでステップＳ１１２へ進む。ステップＳ１１２において、モード制御値ＭＯＤＥ＿ＣＮＴは“１”増加する。これは入力データＤＩＮを格納するメモリが順次移動することを示す。そして当該メモリが先頭もしくは末尾のメモリに対応することとなった場合（即ち（Ｎ−１）に等しくなった場合）には、ステップＳ１１０からステップＳ１１１へと進み、モード信号ＭＯＤＥの値を切り替えて動作モードを変更し、モード制御値の値も“０”に設定する。当該メモリが先頭もしくは末尾のメモリに対応しない間は、接続子Ｊ１を介してステップＳ１０３へ戻る。
【００５１】
図１０はステップＳ１１４が実行されてから２回目にステップＳ１０４が実行されている状態を示している。そしてクロックＣＬＫの立ち上がりを契機として、図８乃至図１０においてメモリＭ０〜Ｍ２に格納されていたデータＡ１，“０”，“０”がそれぞれメモリＭ１〜Ｍ３に格納され（ステップＳ１０６）、入力データＤＩＮの新たな値Ａ２がメモリＭ０へ格納される（ステップＳ１０８、図１１）。その後のステップＳ１１２においてモード制御値ＭＯＤＥ＿ＣＮＴの値は増加するが、その値は１０進数で２であってＮ−１（＝３）に等しくはなく、ステップＳ１１１から、接続子Ｊ１、ステップＳ１０３を介してステップＳ１０４へと戻る。図１２はこの状態を示している。
【００５２】
このような処理が繰り返され、順次更新される入力データＤＩＮの値Ａ３，Ａ４がメモリＭ０へ格納される。そしてデータＡ４がメモリＭ０へ格納される際のクロックＣＬＫの立ち上がりに対応して実行されるステップＳ１１０においては、既にモード制御値ＭＯＤＥ＿ＣＮＴが“３”となっていたので、ステップＳ１１１の処理を受ける。即ちモード制御値ＭＯＤＥ＿ＣＮＴが“０”となり、モード信号ＭＯＤＥが“１”となる。これは図７において、比較器ＣＭＰがモード制御値ＭＯＤＥ＿ＣＮＴの値を２進数“１１”と比較して、その結果カウンタＣＯＵＮＴ１をそのリセット端Ｒ２を介してリセットし、カウンタＣＯＵＮＴ２をカウントさせることによって実現される。図１３はこの状態を示している。
【００５３】
ステップＳ１１１の処理を受けた直後では、ステップＳ１０３において動作モードは第２モードであると判断され、ステップＳ１０３からステップＳ１０５へと処理が進む。そして先頭のメモリである第０番目のメモリの内容が出力データＤＯＵＴとして採用される。これはマルチプレクサＭＵＸがモード信号ＭＯＤＥの値が“１”であることに対応して、出力データＤＯＵＴとしてデータＤＯＵＴ２を採用することで実現される。図１４はこの状態を示しており、出力データＤＯＵＴはメモリＭ０の格納するデータＡ４を採る。
【００５４】
ステップＳ１０７，Ｓ１０９はクロックＣＬＫに同期して、例えばその立ち上がりのタイミングを契機として実行される。まずステップＳ１０７において、先頭から２番目のメモリである第１番目のメモリ乃至末尾のメモリである第（Ｎ−１）番目のメモリの内容を、先頭のメモリである第０番目のメモリ乃至末尾から２番目のメモリである第（Ｎ−２）番目のメモリへと転送する。これは、制御部ＣＮＴ１〜ＣＮＴ３がメモリＭ０〜Ｍ３の間においてデータを下から上へ向かう方向へ転送することで実現される。従って、図１４においてメモリＭ１〜Ｍ３に格納されていたデータＡ３，Ａ２，Ａ１が、それぞれメモリＭ０〜Ｍ２に格納されることになる。またステップＳ１０９において、末尾のメモリである第（Ｎ−１）番目のメモリに入力データの値が格納される。例えば入力データＤＩＮの値としてＢ１が与えられていれば、メモリＭ３にはデータＢ１が格納される。図１５はこのようにして得られた各メモリＭ０〜Ｍ３の格納内容を示している。
【００５５】
ステップＳ１０９の実行後は、第１モードの場合と同様にステップＳ１１０〜Ｓ１１２が実行される。よって図１６乃至図１８に示されるようにして出力データとして順次Ａ３，Ａ２，Ａ１が得られ、その一方で末尾のメモリＭ３の内容は、次々と新たな入力データの値Ｂ２，Ｂ３，Ｂ４へと更新される。
【００５６】
そしてステップＳ１０９の実行によって図１８に示された状態が得られた後、クロックＣＬＫの立ち上がりに際してステップＳ１１１が実行される。第２モードにおいてモード制御値ＭＯＤＥ＿ＣＮＴの値が“３”を採用することは、メモリＭ０を指定していることになるためである。動作モードが第１モードへと移り、モード制御値ＭＯＤＥ＿ＣＮＴの値も“３”から“０”へとリセットされる。その後、図１９に示されるように入力データＤＩＮの新たな値がＣ１に更新され、出力データＤＯＵＴはメモリＭ３の内容であるデータＢ４を出力する（ステップＳ１０４）。そしてメモリＭ０〜Ｍ２に格納されていたデータＢ１，Ｂ２，Ｂ３がそれぞれメモリＭ１〜Ｍ３に格納され（ステップＳ１０６）、そしてデータＣ１がメモリＭ０へ格納される（ステップＳ１０８、図２０）。
【００５７】
このようにして、Ｎ個（図７乃至図２０に即して言えば４個）の値を組にしたデータ（Ａ１，Ａ２，Ａ３，Ａ４），（Ｂ１，Ｂ２，Ｂ３，Ｂ４），…を順次入力データＤＩＮとして採用すれば、出力データＤＯＵＴは（Ａ４，Ａ３，Ａ２，Ａ１），（Ｂ４，Ｂ３，Ｂ２，Ｂ１），…と得られる。つまりＮ個のメモリを備える双方向ＦＩＬＯでは、Ｎ個のデータからなる組の複数について、ＦＩＬＯの機能を連続的に発揮することができる。これはＮ個のメモリ間におけるデータの転送の方向を、上から下へ向かう方向と、下から上へ向かう方向との双方向を採用したためである。以下、データのこのＮ個の組をパケットという単位で取り扱うこともある。
【００５８】
なお、シフトレジスタ型の双方向ＦＩＬＯにおいては図１５乃至図１７に示されるように、異なる組のデータの先頭が隣接する態様を示したが、勿論Ｋ（≧０）個の記憶単位を挟んでこれらが対向する態様でもよいのは明白である。その場合には、必要となる記憶素子が（Ｎ＋Ｋ）個となり、ステップＳ１０４，Ｓ１０６，Ｓ１０７，Ｓ１０９，Ｓ１１３におけるＮの値をＮ＋Ｋに読み替えれば上記の効果を得ることができる。但しステップＳ１１０のＮの値はこの場合にも維持される。
【００５９】
さて、シフトレジスタの一部を構成するメモリＭ０〜Ｍ３の間でいずれの方向にデータの転送が行われるか、入力データを先頭のメモリ及び末尾のメモリのいずれに格納するか、出力データが先頭のメモリ及び末尾のメモリのいずれから読み出されるか、がそれぞれ適切に選択されれば上記双方向ＦＩＬＯは実現できる。従って、制御部ＣＮＴ１〜ＣＮＴ３とデマルチプレクサＤＭＵＸとを区分する必要はない。以下ではかかる区分がなされない場合の回路を示す。但し正論理（“１”，“０”がそれぞれ“Ｈ”，“Ｌ”に対応する）が採用される。
【００６０】
表１乃至表３はこの順に結合してシフトレジスタ型の双方向ＦＩＬＯを記述するハードウェア記述言語（ＨＤＬ）によるリストを示す。ここでは例としてCadence社のVerilog-HDLを用いている。
【００６１】
【表１】
0003710586.tif 000003
【００６２】
【表２】
0003710586.tif 000004
【００６３】
【表３】
0003710586.tif 000005
【００６４】
表１は当該リストの第１行乃至第９行を、表２は当該リストの第１０行乃至第４７行を、表３は当該リストの第４８行乃至第５１行（最終行）を示している。表１ではリストの第１行においてモジュールの開始が示され、第２行乃至第９行において各種の宣言が行われている。ここではパケット一つあたりのデータは４個であり、各データのビット幅は２ビットである。
【００６５】
図２１は当該リストに基づいて生成される双方向ＦＩＬＯの構成を示すブロック図である。当該リストにおいて小文字で示された変数は、以下の図において大文字で示される信号、データに相当する。
【００６６】
論理回路１１０にはクロックＣＬＫ、２ビットの入力データＤＩＮ＜１：０＞、リセット信号ＲＳＴ、ウエイト信号ＷＴ、エネーブル信号ＥＮが入力し、モード信号ＭＯＤＥ、メモリＭ０の格納するデータに対応する２ビットのデータＦＩＬＯ＜０＞＜０＞，ＦＩＬＯ＜０＞＜１＞（これらはデータＤＯＵＴ２を構成する）、メモリＭ３の格納するデータに対応する２ビットのデータＦＩＬＯ＜３＞＜０＞，ＦＩＬＯ＜３＞＜１＞（これらはデータＤＯＵＴ１を構成する）が出力される。
【００６７】
インバータＧ１，Ｇ２、複合ゲートＧ３，Ｇ４はマルチプレクサＭＵＸに対応し、モード信号ＭＯＤＥが“０”を採ることに対応してＦＩＬＯ＜３＞＜０＞，ＦＩＬＯ＜３＞＜１＞の対が、“１”を採ることに対応してＦＩＬＯ＜０＞＜０＞，ＦＩＬＯ＜０＞＜１＞の対が、それぞれ２ビットの出力データＤＯＵＴ＜１：０＞として出力される。
【００６８】
かかる構成は、表３に示された、リストの第４８行乃至第５０行におけるassign文によって規定され、図５のステップＳ１０３〜Ｓ１０５に該当する。
【００６９】
表２に示された内容は論理回路１１０を規定しており、図２２乃至図３１はこれらが相俟って論理回路１１０の構成の詳細を示す回路図である。
【００７０】
リスト第１０行のalways文は、クロックＣＬＫの立ち上がり、もしくはリセット信号の立ち下がりによって第１１行乃至第４７行の処理がなされることを示す。クロックＣＬＫによらず、リセット信号ＲＳＴが立ち下がったことを認識する第１１行の記載は図５におけるステップＳ１０１に相当し、リセット処理であるステップＳ１１３〜Ｓ１１５（図６）はそれぞれ第１２行乃至第１４行、第１５行、第１６行に相当する。
【００７１】
図５に示されたステップＳ１０２は表２に示されたリスト第１８行に相当し、ステップＳ１０２の判断が“Ｙ”の場合に処理されるステップＳ１０３〜Ｓ１１２は第１９行乃至第４２行に相当する。そして第１７行乃至第４６行においてウエイト信号ＷＴが“１”である場合についての処理が記載されていないので、ウエイト信号ＷＴが“１”であれば、ステップＳ１０３〜Ｓ１１２の全ての処理が待機されることとなる。これはステップＳ１０２の判断が“Ｎ”の場合にステップＳ１００を介してステップＳ１０１へと戻ることに対応している。また、第４３行乃至第４５行において、エネーブル信号ＥＮが“Ｌ”である場合にはモード制御値ＭＯＤＥ＿ＣＮＴに２ビットの値“００”が与えられることが規定されている。これはステップＳ１００に対応している。
【００７２】
リストの第１９行はステップＳ１０３に対応しており、ステップＳ１０６以降の処理は第２０行乃至第３０行に、ステップＳ１０７以降の処理は第３１行乃至第４１行に規定されている。
【００７３】
具体的には動作モードが第１モードである場合（モード信号ＭＯＤＥ＝０）には、ステップＳ１０６は第２１行乃至第２３行に、ステップＳ１０８は第２４行に、ステップＳ１１０は第２６行に、ステップＳ１１１は第２７行乃至第２８行に、ステップＳ１１２は第２５行に、それぞれ対応する。なお、モード制御値ＭＯＤＥ＿ＣＮＴに対する手続き的代入が行われる第２５行及び第２８行ではノンブロッキング代入文が用いられているので、リストにおける記載の順序にも拘らず、図６に示されるフローチャートが対応する。
【００７４】
同様にして、動作モードが第２モードである場合（モード信号ＭＯＤＥ＝１）には、ステップＳ１０７は第３２行乃至第３４行に、ステップＳ１０９は第３５行に、ステップＳ１１０は第３７行に、ステップＳ１１１は第３８行乃至第３９行に、ステップＳ１１２は第３６行に、それぞれ対応する。この動作モードにおいても、モード制御値ＭＯＤＥ＿ＣＮＴに対する手続き的代入が行われる第３６行及び第３９行ではノンブロッキング代入文が用いられているので、リストにおける記載の順序にも拘らず、図６に示されるフローチャートが対応する。
【００７５】
図２２はモード制御値ＭＯＤＥ＿ＣＮＴの第０番目のビットの値ＭＯＤＥ＿ＣＮＴ＜０＞、及び通常動作信号ＷＴＥＮを生成する部分を示す。通常動作信号ＷＴＥＮはウエイト信号ＷＴが“Ｌ”で、エネーブル信号ＥＮが“Ｈ”である場合にのみ“Ｈ”となり、フローチャートに即して言えばそのステップＳ１０２において“Ｙ”と判断されることに対応し、またリストに即して言えばその第１９行乃至第４２行に記載された処理が行われることに対応する。
【００７６】
ＤフリップフロップＭＤＣＴ０は第０番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜０＞を出力し、その論理反転として信号Ｘ１が生成される。通常動作信号ＷＴＥＮが“Ｈ”であれば、信号Ｘ１がＤフリップフロップＭＤＣＴ０のＤ入力端に与えられるので、クロックＣＬＫがＤフリップフロップＭＤＣＴ０のクロック端Ｔに与えられる度に第０番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜０＞の値は“０”，“１”を交互に出力することになる。ＤフリップフロップＭＤＣＴ０にはリセット信号ＲＳＴの立ち下がりによってリセットされるためのリセット端Ｒも設けられている。
【００７７】
図２３は第１番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜１＞を生成する部分を示す。ＤフリップフロップＭＤＣＴ１は第１番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜１＞を出力し、その値が“０”，“１”を採ることに対応してセレクタＳＥＬがそれぞれＡ入力端に与えられたデータ、Ｂ入力端に与えられたデータを論理反転させて出力し、ＤフリップフロップＭＤＣＴ１のＤ入力端に与えられる。通常動作信号ＷＴＥＮが“Ｈ”であれば、セレクタＳＥＬのＡ入力端及びＢ入力端にはそれぞれ第０番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜０＞の論理反転及び信号Ｘ１の論理反転（つまり第０番目のビットのモード制御値ＭＯＤＥ＿ＣＮＴ＜０＞）が与えられる。
【００７８】
以上のように、図２２及び図２３で示された構成は、図７で示されたカウンタＣＯＵＮＴ１にほぼ対応している。但しカウンタＣＯＵＮＴ１とは異なり、比較器ＣＭＰのフィードバックを必要としない４進カウンタである。
【００７９】
図２４はモード信号ＭＯＤＥを生成する部分を示す。通常動作信号ＷＴＥＮが“Ｈ”であれば、モード制御値ＭＯＤＥ＿ＣＮＴ＜０＞，ＭＯＤＥ＿ＣＮＴ＜１＞の論理積を採ることによってモード制御値ＭＯＤＥ＿ＣＮＴが１０進数でいう値“３”と一致するか否かの判定を行う（ステップＳ１１０の処理に相当）。更にステップＳ１１１の処理を行う必要上、モード制御値ＭＯＤＥ＿ＣＮＴ＜０＞，ＭＯＤＥ＿ＣＮＴ＜１＞の論理積と、モード信号ＭＯＤＥとの排他的論理和が、ＤフリップフロップＭＤのＤ入力端に与えられ、ＤフリップフロップＭＤがモード信号ＭＯＤＥを出力する。
【００８０】
図２５はメモリＭ０の第０番目のビット及び第１番目のビットにそれぞれ対応するＤフリップフロップＭ００，Ｍ０１を含む構成を示している。それぞれのＤ入力端には複合ゲートＧ５，Ｇ６の出力が与えられている。ＤフリップフロップＭ００，Ｍ０１のそれぞれの出力ＦＩＬＯ＜０＞＜０＞，ＦＩＬＯ＜０＞＜１＞はメモリＭ０の格納する２ビットの情報に相当する。
【００８１】
２ビットの入力データＤＩＮ＜０＞，ＤＩＮ＜１＞はいずれも論理反転されてそれぞれ複合ゲートＧ５，Ｇ６へと入力する。これらの入力データＤＩＮ＜０＞，ＤＩＮ＜１＞が論理反転されるのは、複合ゲートＧ５，Ｇ６の構成上、その最終出力段がＮＡＮＤゲートとなっていることに起因する。
【００８２】
図２６はメモリＭ１の第１番目のビットに対応するＤフリップフロップＭ１１を含む構成を、図２７はメモリＭ１の第０番目のビットに対応するＤフリップフロップＭ１０を含む構成を、それぞれ示している。それぞれのＤ入力端には複合ゲートＧ７，Ｇ８の出力が与えられている。ＤフリップフロップＭ１０，Ｍ１１のそれぞれの出力ＦＩＬＯ＜１＞＜０＞，ＦＩＬＯ＜１＞＜１＞はメモリＭ１の格納する２ビットの情報に相当する。
【００８３】
図２８はメモリＭ２の第１番目のビットに対応するＤフリップフロップＭ２１を含む構成を、図２９はメモリＭ２の第０番目のビットに対応するＤフリップフロップＭ２０を含む構成を、それぞれ示している。それぞれのＤ入力端には複合ゲートＧ９，Ｇ１０の出力が与えられている。ＤフリップフロップＭ２０，Ｍ２１のそれぞれの出力ＦＩＬＯ＜２＞＜０＞，ＦＩＬＯ＜２＞＜１＞はメモリＭ２の格納する２ビットの情報に相当する。
【００８４】
図３０はメモリＭ３の第１番目のビットに対応するＤフリップフロップＭ３１を含む構成を、図３１はメモリＭ３の第０番目のビットに対応するＤフリップフロップＭ３０を含む構成を、それぞれ示している。それぞれのＤ入力端には複合ゲートＧ１１，Ｇ１２の出力が与えられている。ＤフリップフロップＭ３０，Ｍ３１のそれぞれの出力ＦＩＬＯ＜３＞＜０＞，ＦＩＬＯ＜３＞＜１＞はメモリＭ３の格納する２ビットの情報に相当する。信号Ｘ１３，Ｘ１２はそれぞれ入力データＤＩＮ＜０＞，ＤＩＮ＜１＞の論理反転であり、複合ゲートＧ１２，Ｇ１１へと入力する。
【００８５】
複合ゲートＧ５〜Ｇ１２は、インバータ（通常動作信号ＷＴＥＮが“Ｈ”となってインバータとして機能するＮＡＮＤゲートを含む）と相俟って、図７に示された制御部ＣＮＴ１〜ＣＮＴ３とデマルチプレクサＤＭＵＸとを統合した機能を実現している。
【００８６】
なお、これらの図において通常動作信号ＷＴＥＮが“Ｈ”であれば信号Ｘ２，Ｘ４はそれぞれモード信号ＭＯＤＥと等しい論理を採る。また通常動作信号ＷＴＥＮの値に依らず、信号Ｘ５，Ｘ３，Ｘ９，Ｘ７，Ｘ１１，Ｘ１０，Ｘ８，Ｘ６はそれぞれＦＩＬＯ＜０＞＜０＞，ＦＩＬＯ＜０＞＜１＞，ＦＩＬＯ＜１＞＜０＞，ＦＩＬＯ＜１＞＜１＞，ＦＩＬＯ＜２＞＜０＞，ＦＩＬＯ＜２＞＜１＞，ＦＩＬＯ＜３＞＜０＞，ＦＩＬＯ＜３＞＜１＞の論理反転である。
【００８７】
ウエイト信号ＷＴが“Ｈ”となって待機命令がかかった場合には通常動作信号ＷＴＥＮが“Ｌ”となり、複合ゲートＧ５〜Ｇ１２の動作から全てのＤフリップフロップの内容は変更されない。また、エネーブル信号ＥＮが“Ｌ”となって可動状態でない場合にも通常動作信号ＷＴＥＮが“Ｌ”となり、ＤフリップフロップＭＤＣＴ０，ＭＤＣＴ１のＤ入力端に“０”が与えられてステップＳ１００が実行される。更に、リセット信号ＲＳＴが立ち下がってリセット命令を受けた場合にはステップＳ１１３〜Ｓ１１５の処理がなされる。
【００８８】
（ｄ−２）アドレスポインタ型の双方向ＦＩＬＯ；
図３２及び図３３は両図相俟ってアドレスポインタ型の双方向ＦＩＬＯの動作を示すフローチャートである。両図は接続子Ｊ５，Ｊ７によって相互に結合される。また、図３４はアドレスポインタ型の双方向ＦＩＬＯの構成を例示するブロック図である。そして図３５乃至図４７は図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【００８９】
図３４に示された双方向ＦＩＬＯは、ＲＡＭであるメモリＲ２５６、マルチプレクサＭＵＸ１，ＭＵＸ２、カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１，ＣＯＵＮＴ２、比較器ＣＭＰ１，ＣＭＰ２を備えている。
【００９０】
カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１は、カウンタＣＯＵＮＴ２によって生成されたモード信号ＭＯＤＥの値が“０”，“１”を採ることに対応してそのカウント方向が増大方向、減少方向となるように制御され、それぞれ８ビットのモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ，Ｒ＿ＭＯＤＥ＿ＣＮＴを生成する。モード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ，Ｒ＿ＭＯＤＥ＿ＣＮＴはメモリＲ２５６にとってはそれぞれ書き込みアドレス及び読みだしアドレスとなる。
【００９１】
カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１，ＣＯＵＮＴ２はいずれもクロックＣＬＫを受けるクロック端Ｔを有しており、カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１はクロックＣＬＫの立ち上がりをカウントする。一方、カウンタＣＯＵＮＴ２はシフトレジスタ型の双方向ＦＩＬＯに用いられたものと同様に、クロックＣＬＫをカウントするのではなく、比較器ＣＭＰ１，ＣＭＰ２の出力をカウントする１ビットのカウンタであり、その出力たるモード信号ＭＯＤＥの値の変化するタイミングがクロックＣＬＫに同期する。また、これらのエネーブル端Ｅのいずれにもリセット信号ＲＳＴ、あるいはエネーブル信号ＥＮが与えられ、これらの信号によって動作の可否が制御される。
【００９２】
カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１の初期値はそれぞれマルチプレクサＭＵＸ１，ＭＵＸ２の出力から得られる。マルチプレクサＭＵＸ１には１０進数で０，２０４を示す値の８ビット信号が入力され、マルチプレクサＭＵＸ２には１０進数で２０３，１を示す値の８ビット信号が入力される。マルチプレクサＭＵＸ１，ＭＵＸ２が自身に受けた２つの入力のいずれを出力するかは、比較器ＣＭＰ１，ＣＭＰ２の出力によって決定される。
【００９３】
比較器ＣＭＰ１には１０進数で１を示す値と、モード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴとが与えられ、両者が等しい場合にはマルチプレクサＭＵＸ１，ＭＵＸ２がそれぞれ“０”，“１”を出力するように制御する。また比較器ＣＭＰ２には１０進数で２０３を示す値と、モード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴとが与えられ、両者が等しい場合にはマルチプレクサＭＵＸ１，ＭＵＸ２がそれぞれ“２０４”，“２０３”を出力するように制御する。
【００９４】
メモリＲ２５６の書き込みクロック端ＷＴ及び読みだしクロック端ＲＴには共通してクロックＣＬＫが与えられ、クロックＣＬＫの立ち上がり及び立ち下がりに同期して、それぞれメモリＲ２５６に対する書き込み及び読み出しが行われる。
【００９５】
書き込み端ＤＩには入力データＤＩが与えられ、読み出し端ＤＯからメモリＲ２５６の読み出しデータが得られる。図３４においてはマルチプレクサＭＵＸ３が更に設けられ、リセット信号ＲＳＴが非活性時（“１”）の場合にはメモリＲ２５６からの読み出しデータが双方向ＦＩＬＯの出力データＤＯＵＴとして採用されるが、リセット信号ＲＳＴが活性時（“０”）の場合には１０進数でいう０が双方向ＦＩＬＯの出力データＤＯＵＴとして採用される。この理由については後述される。
【００９６】
図３５乃至図４７では、（Ｎ＋１）個のアドレス０〜Ｎに対応する記憶単位＃０〜＃Ｎを示している。メモリＲ２５６における記憶単位は２５６個あり、Ｎ＝２０４に設定されている。勿論、Ｎ≦２５５の関係が有れば他の値でも良いが、その場合にはマルチプレクサＭＵＸ１，ＭＵＸ２に与えられる値はそれぞれ２０４，２０３の代わりにＮ，Ｎ−１となる。
【００９７】
図３２に示されたフローチャートにおいて、ステップＳ２０１〜Ｓ２０４はクロックＣＬＫにかかわらず実行される。ステップＳ２０１においてはリセット命令を受けたか否か（リセット信号ＲＳＴが活性化しているか非活性か）が判断され、受けた場合にはステップＳ２１５〜Ｓ２１９のリセット処理がなされ、接続子Ｊ８を介してステップＳ２０１へと戻る。リセット命令を受けていなければステップＳ２０２において可動状態か否か（エネーブル信号ＥＮが活性化しているか非活性か）が判断され、可動状態にない場合にはステップＳ２１８〜Ｓ２１９の処理を受けてステップＳ２０１へと戻る。ステップＳ２０３では待機命令がかかっているか否か（ウエイト信号ＷＴが活性化しているか非活性か）が判断され、待機命令がかかっていない場合にはステップＳ２０４へと進む。
【００９８】
リセット処理について説明すると、ステップＳ２１５においてＲＡＭであるメモリＲ２５６の初期化命令を受けたか否かが判断され、初期化命令を受けていればＲＡＭの初期化が行われる。具体的には後述するが、メモリＲ２５６の初期化端Ｓに与えられる初期化信号ＳＲＡＭが活性化（“０”）することにより、クロックＣＬＫの立ち上がりに同期してメモリＲ２５６の全てのアドレスにおいて特定の値、例えば“０”が与えられる。但し、この時にメモリＲ２５６が出力する読み出しデータは、出力データＤＯＵＴとしての意味を有さないので、マルチプレクサＭＵＸ３によって別途に特定の値（図３４では“０”と設定されて初期化に用いられる値と偶々一致する）が出力データＤＯＵＴとして採用される（ステップＳ２１７）。
【００９９】
そしてステップＳ２１８において動作モードが第１モードに初期設定される。またステップＳ２１９において書き込みアドレス、読み出しアドレスがそれぞれ“０”，“１”に初期設定される。つまり、カウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１はリセット信号ＲＳＴの活性化あるいはエネーブル信号ＥＮの非活性化によってそれぞれ初期値が“０”，“１”に設定される。ステップＳ２１８，Ｓ２１９はリセット命令がかかった場合にも、可動状態にない場合にも実行され、その内容は書き込みアドレス及び読み出しアドレスに関する限り同一であるので、カウンタＣＯＵＮＴ２，ＣＯＵＮＴ１０，ＣＯＵＮＴ１１のエネーブル端Ｅに与えられるものとしては、リセット信号ＲＳＴもエネーブル信号ＥＮも共通して用いられる。
【０１００】
図３５はリセット直後の、記憶単位＃０〜＃Ｎの状態を示している。これらの全てに対して“０”が格納されている。
【０１０１】
ステップＳ２０４によって動作モードが第１モード、第２モードのいずれであるかが判断され、それぞれの場合に応じてステップＳ２０５、あるいは接続子Ｊ５を介してステップＳ２１０へと分岐する。
【０１０２】
第１モードとはモード信号ＭＯＤＥが“０”の場合に相当する。ステップＳ２０５において、入力データＤＩＮがＲＡＭへの書き込みデータとして採用される。書き込み動作はクロックＣＬＫの立ち上がりに同期して行われる。
【０１０３】
ステップＳ２０６において、書き込みアドレスがＮ−１か否かが判断される。これはモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴと２０４−１＝２０３とを入力する比較器ＣＭＰ２によって実行される。書き込みアドレスがＮ−１でない限り、ステップＳ２０８によって書き込みアドレス、読み出しアドレスのいずれもが１だけ増加される。これはカウンタＣＯＵＮＴ１０，１１によって実行される。ステップＳ２０８もクロックＣＬＫの立ち上がりを契機として行われるが、ステップＳ２０５より後に行われる。
【０１０４】
図３６は、リセット処理が行われた後で、最初にクロックＣＬＫが立ち上がった場合の記憶単位＃０〜＃Ｎに対する処理が示されている。ステップＳ２１９において書き込みアドレスが“０”に設定されていたので、まずステップＳ２０５に従って入力データＤＩＮの値Ａ１が記憶単位＃０において記憶される。そしてステップＳ２０８に従って読み出しアドレス及び書き込みアドレスがそれぞれ１増加して、それぞれ値１，２を採る。図３６における破線はステップＳ２０５の書き込み動作を、白抜き矢印はクロックＣＬＫの立ち上がりによるアドレスの変化を行うステップＳ２０８の動作を、それぞれ示している。
【０１０５】
ステップＳ２０９はＲＡＭの読み出しデータを出力データとして採用するステップであり、クロックＣＬＫの立ち下がりに同期して行われる。ステップＳ２０８によって読み出しアドレスは２となっているので、記憶単位＃２に格納されていたリセット後の値“０”が読み出される事になる。図３７はこの状態を示しており、書き込みアドレスは値１を採るものの、クロックＣＬＫの立ち下がりによっては書き込み動作は行われないので、記憶単位＃１の格納する値はこの時点では変化しない。
【０１０６】
ステップＳ２０１〜Ｓ２０５を介してステップＳ２０６，Ｓ２０８，Ｓ２０９が繰り返され、ステップＳ２０８によって書き込みアドレス、読み出しアドレスがそれぞれＮ−１，Ｎとなった場合を考える。既にステップＳ２０５によって（Ｎ−１）個の値Ａ１〜Ａ（Ｎ−１）が、順次記憶単位＃０〜＃Ｎ−１に格納されている。図３８はこの状態からステップＳ２０９が実行された時点の動作を示している。この時点ではクロックＣＬＫが立ち下がった直後であって、アドレス＃Ｎ−１にはまだ新たな入力データＤＩＮは格納されていない。その一方、出力データＤＯＵＴはリセット後の値“０”を出力する。
【０１０７】
この後、接続子Ｊ６、ステップＳ２０１〜Ｓ２０４を介してステップＳ２０５が実行され、記憶単位＃Ｎ−１に値ＡＮが書き込まれる。図３９の破線はこの状態を示している。書き込みアドレスが（Ｎ−１）であるのでステップＳ２０６からステップＳ２０７へ進み、動作モードが第２モードに変更され、しかも書き込みアドレス及び読み出しアドレスがそれぞれＮ，Ｎ−１に設定される。図３９の実線及び白抜き矢印はこのアドレスの変更を示している。
【０１０８】
このようなアドレスの設定は、図３４で示された比較器ＣＭＰ２が、マルチプレクサＭＵＸ１，ＭＵＸ２にそれぞれ２０４，２０３を出力させる事に対応する。これによりカウンタＣＯＵＮＴ１０，１１の初期値が設定され直す事になる。
【０１０９】
ステップＳ２０７もステップＳ２０８と同様に、クロックＣＬＫの立ち上がりを契機としてステップＳ２０５より後に行われる。図３９に示されるように、Ｎ個のデータＡ１〜ＡＮは順次記憶単位＃０〜＃Ｎ−１に格納されている。
【０１１０】
この後、ステップＳ２０９においては記憶単位＃Ｎ−１が格納していた値の読み出しが行われる。従って、出力データＤＯＵＴとしては連続して“０”が得られた後の最初には値ＡＮが得られる事になる（図４０）。
【０１１１】
更に接続子Ｊ６、ステップＳ２０１〜Ｓ２０３を介してステップＳ２０４に至ると、動作モードが第２動作モードに切り替えられたので、ステップＳ２１０が実行される。ステップＳ２１０に至るまでには書き込みアドレスに変動は無いので、入力データＤＩＮの値Ｂ１が記憶単位＃Ｎに書き込まれる。図４１の破線はこの状態を示している。
【０１１２】
更に、ステップＳ２１１に進み、書き込みアドレスが１か否かが判断される。これはモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴと“１”とを入力する比較器ＣＭＰ１によって実行される。書き込みアドレスが１でない限り、ステップＳ２１３によって書き込みアドレス、読み出しアドレスのいずれもが１だけ減じられる。これはカウンタＣＯＵＮＴ１０，ＣＯＵＮＴ１１によって実行される。ステップＳ２１１もクロックＣＬＫの立ち上がりを契機として行われるが、ステップＳ２１０より後に行われる。ステップＳ２１１の時点では書き込みアドレスはＮであったので、ステップＳ２１３によって書き込みアドレス及び読み出しアドレスはそれぞれ（Ｎ−１），（Ｎ−２）に設定される（図４１の白抜き矢印及び実線参照）。
【０１１３】
次にステップＳ２１４へ進み、ステップＳ２０９と同様にして出力データＤＯＵＴを得る。図４２はクロックＣＬＫの立ち下がりに同期して記憶単位＃Ｎ−２から値Ａ（Ｎ−１）を読み出す状態を示している。
【０１１４】
このようにして接続子Ｊ７、ステップＳ２０１〜Ｓ２０４を介してステップＳ２１０〜Ｓ２１３，Ｓ２１４が繰り返され、出力データＤＯＵＴは値ＡＮ，Ａ（Ｎ−１），…を順次出力する。
【０１１５】
ステップＳ２１３によって書き込みアドレス、読み出しアドレスがそれぞれ１，０となった場合を考える。この後にクロックＣＬＫが立ち下がってステップＳ２１４が実行されると、図４３に示されるように、出力データＤＯＵＴとして値Ａ１が得られる。但し、記憶単位＃１において格納されている値はＡ２のままであって更新されていない。
【０１１６】
この後、接続子Ｊ７、ステップＳ２０１〜Ｓ２０４を介してステップＳ２１０が実行され、記憶単位＃１に値ＢＮが書き込まれる（図４４の破線参照）。書き込みアドレスが１であるのでステップＳ２１１からステップＳ２１２へ進み、動作モードが第１モードに変更され、しかも書き込みアドレス及び読み出しアドレスがそれぞれ０，１に設定される（図４４の白抜き矢印及び実線参照）。このようなアドレスの設定は、図３４で示された比較器ＣＭＰ１が、マルチプレクサＭＵＸ１，ＭＵＸ２にそれぞれ０，１を出力させる事に対応する。これによりカウンタＣＯＵＮＴ１０，１１の初期値が設定され直す事になる。
【０１１７】
ステップＳ２１２もステップＳ２１３と同様に、クロックＣＬＫの立ち上がりを契機としてステップＳ２１０より後に行われる。図４４はこの時点での記憶単位＃０〜＃Ｎの状態を示しており、Ｎ個のデータＢ１〜ＢＮは順次記憶単位＃Ｎ〜＃１に格納されている。
【０１１８】
この後、ステップＳ２１４においては記憶単位＃１が格納していた値の読み出しが行われる。従って、出力データＤＯＵＴとしては値ＡＮ，Ａ（Ｎ−１），…Ａ１の後には値ＢＮが得られる事になる（図４５）。
【０１１９】
更に接続子Ｊ７、ステップＳ２０１〜Ｓ２０３を介してステップＳ２０４に至ると、動作モードが第１動作モードに切り替えられたので、ステップＳ２０５が実行される。ステップＳ２０５に至るまでには書き込みアドレスに変動は無いので、入力データＤＩＮの値Ｃ１が記憶単位＃０に書き込まれる。図４６の破線はこの状態を示している。
【０１２０】
そしてステップＳ２０６からステップＳ２０８に進み、書き込みアドレス及び読み出しアドレスがそれぞれ１，２に設定される。図４６の白抜き矢印はステップＳ２０８の動作を示している。
【０１２１】
以上のようにして（Ｎ＋１）個の記憶素子を用いることにより、Ｎ個（図３４に即して言えば２０４個）の値を組にしたデータ（Ａ１，Ａ２，…，ＡＮ），（Ｂ１，Ｂ２，…，ＢＮ），…を順次入力データＤＩＮとして入力すれば、出力データＤＯＵＴは（ＡＮ，…，Ａ２，Ａ１），（ＢＮ，…，Ｂ２，Ｂ１），…と得られる。つまり少なくとも（Ｎ＋１）個のアドレスを有するＲＡＭを用いて、Ｎ個のデータからなる組の複数について、ＦＩＬＯの機能を連続的に発揮させることができる。
【０１２２】
これは、記憶単位の格納する内容を読み出しつつこれに追随して入力データが書き込まれ、入力データの組の更新に対応して読み出しアドレス及び書き込みアドレスの移動する方向が上から下へ向かう方向と、下から上へ向かう方向とに逆転するためである。
【０１２３】
以上のように、アドレスポインタ型の双方向ＦＩＬＯでは、従来のＲＡＭを利用して双方向ＦＩＬＯを実現することができる。
【０１２４】
なお、アドレスポインタ型の双方向ＦＩＬＯにおいてはモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ，Ｒ＿ＭＯＤＥ＿ＣＮＴが一つずれる態様を示したが、勿論０以上の整数Ｋだけずれてもよいのは明白である。その場合には、必要となる記憶素子が（Ｎ＋Ｋ）異なり、ステップＳ２０７においては書き込みアドレスがＮ＋Ｋ−１に設定され、ステップＳ２１１においては書き込みアドレスがＫであるか否かが判断され、ステップＳ２１２，Ｓ２１９においては読み出しアドレスがＫに設定される。Ｋ＝０であったとしても、書き込み及び読み出しのタイミングがそれぞれクロックＣＬＫの立ち上がり及び立ち下がりで行われるので上記の効果を得ることができる。
【０１２５】
表４乃至表８はこの順に結合して、アドレスポインタ型の双方向ＦＩＬＯを記述するハードウェア記述言語（ＨＤＬ）によるリストを示す。ここでも表１乃至表３と同様にCadence社のVerilog-HDLを用いており、Ｎ＝２０４，Ｋ＝１に設定されている。
【０１２６】
【表４】
0003710586.tif 000006
【０１２７】
【表５】
0003710586.tif 000007
【０１２８】
【表６】
0003710586.tif 000008
【０１２９】
【表７】
0003710586.tif 000009
【０１３０】
【表８】
0003710586.tif 000010
【０１３１】
表４は当該リストの第１行乃至第１０行を、表５は当該リストの第１１行乃至第４４行を、表６は当該リストの第４５行乃至第５６行を、表７は当該リストの第５７行乃至第８１行を、表８は当該リストの第８２行乃至第９５行を、それぞれ示している。
【０１３２】
表４乃至表６ではmodule bifilo1が、表７ではmodule RAM256が、表８では module RAM256Cが、それぞれ記載されている。
【０１３３】
表４ではリストの第１行においてモジュールの開始が示され、第２行乃至第１０行において各種の宣言が行われている。表７ではリストの第５７行においてモジュールの開始が示され、第５８行乃至第６５行において各種の宣言が行われている。表８ではリストの第８２行においてモジュールの開始が示され、第８３行乃至第９０行において各種の宣言が行われている。
【０１３４】
表８で示されるmodule RAM256Cは、クロックＣＬＫの立ち上がりで書き込みが、立ち下がりで読み出しが、それぞれ行われるＲＡＭのコア部分（図３５乃至図４７に示された記憶単位に相当する部分を含む）を規定し、表７はリセット処理の一部及び初期化処理を規定している。
【０１３５】
ステップＳ２０１を介して行われるステップＳ２１５〜ステップＳ２１６はリスト第６９行乃至第７６行に示されたif-else文における処理と、変数RP，WPによってそれぞれ指定される読み出しアドレス及び書き込みアドレスを介して初期化を行うリスト第７８行乃至第８０行が相当する。
【０１３６】
リセット処理に関してはこの他に、ステップＳ２１７がリスト第４７行（表６）に相当し、ステップＳ２０１を経由して実行されるステップＳ２１８〜Ｓ２１９がリスト第１２行乃至第１５行（表５）に相当している。
【０１３７】
なお、ステップＳ２０２を経由して実行されるステップＳ２１８〜Ｓ２１９はリスト第３８行乃至第４１行（表５）に相当している。また、ステップＳ２０３において“Ｙ”と判断される場合はリスト第４９行乃至第５１行（表６）に相当して出力データが更新されず、“Ｎ”と判断される場合はリスト第１８行乃至第３７行のcase文（表５）に規定される処理が実行される。
【０１３８】
リスト第１８行乃至第３７行のcase文については、リスト第１８行がステップ２０４に相当し、リスト第１９行乃至第２７行がステップＳ２０６〜Ｓ２０８に相当し、リスト第２８行乃至第３６行がステップＳ２１１〜Ｓ２１３に相当する。ステップＳ２０５，Ｓ２０９，Ｓ２１０，Ｓ２１４におけるＲＡＭへの読み書きは、リスト第７８行乃至第７９行における代入文と、第８０行で参照される、表８に示されたmodule RAM256Cによって規定されている。
【０１３９】
リスト第１９行乃至第２７行については、ステップＳ２０６がリスト第２２行に、ステップＳ２０７がリスト第２３行乃至第２５行に、ステップＳ２０８がリスト第２０行乃至第２１行に、それぞれ相当する。
【０１４０】
リスト第２８行乃至第３６行については、ステップＳ２１１がリスト第３１行に、ステップＳ２１２がリスト第３２行乃至第３４行に、ステップＳ２１３がリスト第２９行乃至第３０行に、それぞれ相当する。
【０１４１】
図４８乃至図５６はこれらが相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【０１４２】
図４８に示される回路は、エネーブル信号ＥＮ、リセット信号ＲＳＴ、ウエイト信号ＷＴ、８ビットのモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ＜０：７＞、及び図４９に示される回路で生成される信号Ｙ３を入力し、信号Ｙ１，Ｙ２，Ｙ５，Ｙ６，Ｗ１〜Ｗ８を出力する。ここで信号Ｗ２はリセット信号ＲＳＴと相補的な値を採り、信号Ｗ４はＷ＿ＭＯＤＥ＿ＣＮＴ＜３＞と相補的な値を採り、信号Ｗ５はＷ＿ＭＯＤＥ＿ＣＮＴ＜１＞と相補的な値を採り、信号Ｗ６はＷ＿ＭＯＤＥ＿ＣＮＴ＜６＞と相補的な値を採り、信号Ｗ７はＷ＿ＭＯＤＥ＿ＣＮＴ＜７＞と相補的な値を採り、信号Ｗ８はＷ＿ＭＯＤＥ＿ＣＮＴ＜０＞と相補的な値を採り、信号Ｙ１はエネーブル信号ＥＮが“０”，“１”の値を採るのに応じてそれぞれ“１”、／ＲＳＴ＋／ＷＴ（／は論理反転を示す）を採り、信号Ｙ２はエネーブル信号ＥＮが“０”，“１”の値を採るのに応じてそれぞれ“０”、ＲＳＴ・／ＷＴを採るという特徴がある。
【０１４３】
図４９に示される回路は、図４８に示される回路で生成される信号Ｙ１，Ｙ２，Ｙ５，Ｗ３〜Ｗ７、並びに８ビットのモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ＜０：７＞及びクロックＣＬＫを入力し、信号Ｙ３，Ｙ４，Ｙ７，Ｙ８、及び８ビットのデータＤＴ１＜０：７＞並びにモード信号ＭＯＤＥを出力する。
【０１４４】
この図において、ＤフリップフロップＭＤはモード信号ＭＯＤＥを出力し、図３４におけるＣＯＵＮＴ２に相当する。加減算器２０１はモード信号ＭＯＤＥに依存して、モード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴに対して１加算するか、減算するかが制御される。なお、信号Ｙ７はモード信号ＭＯＤＥと相補的な値を採る。
【０１４５】
図５０に示される回路は、図４８に示される回路で生成される信号Ｙ６、図４９に示される回路で生成される信号Ｙ４，Ｙ７及びモード信号ＭＯＤＥ並びに８ビットのモード制御値Ｒ＿ＭＯＤＥ＿ＣＮＴ＜０：７＞を入力し、信号Ｙ１１及び８ビットのデータＤＴ２＜０：７＞を出力する。この図において、加減算器２０２はモード信号ＭＯＤＥに依存して、モード制御値Ｒ＿ＭＯＤＥ＿ＣＮＴに対して１加算するか、減算するかが制御される。
【０１４６】
図５１に示される回路は、信号Ｙ１，Ｙ２，Ｙ６〜Ｙ９，Ｗ４〜Ｗ８、並びにモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ＜３：５＞及びデータＤＴ１＜０：７＞を入力し、信号Ｙ９，Ｙ１０，Ｎ３９７〜Ｎ４０４を出力する。また図５２に示される回路は、信号Ｙ１，Ｙ２，Ｙ９〜Ｙ１１、並びにモード制御値Ｒ＿ＭＯＤＥ＿ＣＮＴ＜０：７＞及びデータＤＴ２＜０：７＞を入力し、信号Ｎ４０５〜Ｎ４１２を出力する。
【０１４７】
図５３に示される回路は、ＲＡＭであるメモリＲ２５６と、信号Ｎ３９７〜Ｎ４０４からモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴを生成する回路Ｗ＿ＣＮＴと、信号Ｎ４０５〜Ｎ４１２からモード制御値Ｒ＿ＭＯＤＥ＿ＣＮＴを生成する回路Ｒ＿ＣＮＴとから構成されている。モード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ，Ｒ＿ＭＯＤＥ＿ＣＮＴはそれぞれメモリＲ２５６の書き込みアドレス端ＷＡ及び読み出しアドレス端ＲＡに与えられる。また８ビットの入力データＤＩＮ＜７：０＞は書き込み端ＤＩに与えられ、読み出し端ＤＯから８ビットの信号ＭＥＭＯ＜７：０＞が読み出される。クロックＣＬＫは回路Ｒ＿ＣＮＴ，Ｗ＿ＣＮＴ及びメモリＲ２５６の書き込みクロック端ＷＴ及び読みだしクロック端ＲＴに与えられる。またリセット信号ＲＳＴ及び初期化信号ＳＲＡＭがＲ２５６のリセット端Ｒ及び初期化端Ｓにそれぞれ与えられる。
【０１４８】
図５４に示される回路は図３４に示されるマルチプレクサＭＵＸ３に相当し、出力データＤＯＵＴ＜７：０＞を出力するＤフリップフロップＦ０〜Ｆ７を備えている。これらはメモリＲ２５６から得られた信号ＭＥＭＯ＜７：０＞と、クロックＣＬＫと、ウエイト信号ＷＴと、信号Ｗ２によって制御される。
【０１４９】
図５５は回路Ｗ＿ＣＮＴの構成を示しており、ＤフリップフロップＷ０〜Ｗ７を備えている。ＤフリップフロップＷｐはいずれもクロックＣＬＫによって制御され、信号Ｎ（４０４−ｐ）を受けてモード制御値Ｗ＿ＭＯＤＥ＿ＣＮＴ＜ｐ＞を出力する（ｐ＝０〜７）。
【０１５０】
図５６は回路Ｒ＿ＣＮＴの構成を示しており、ＤフリップフロップＲ０〜Ｒ７を備えている。ＤフリップフロップＲｑはいずれもクロックＣＬＫによって制御され、信号Ｎ（４１２−ｑ）を受けてモード制御値Ｒ＿ＭＯＤＥ＿ＣＮＴ＜ｑ＞を出力する（ｑ＝０〜７）。
【０１５１】
【発明の効果】
この発明のうち請求項１にかかる誤り訂正装置によれば、その備える第１及び第２の双方向転送型記憶装置の少なくともいずれか一方において、一対の入力データがスイッチバックして出力される方向が互いに逆向きであるので、（Ｎ＋Ｋ）個の記憶単位を使用して、Ｎ個のデータからなる組の複数についてＦＩＬＯの機能を連続的に発揮することができる。よって、回路規模を削減した誤り訂正装置を得ることができる。
【０１５２】
この発明のうち請求項２にかかる誤り訂正装置によれば、その備える第１及び第２の双方向転送型記憶装置の少なくともいずれか一方において、制御信号が第１の値を採っている場合には第０の記憶単位には例えばある組のデータＡ１，Ａ２，…，Ａ（Ｎ−１），ＡＮが順次に入力され、かつこの順に第１乃至第（Ｎ−１）の記憶単位に転送される。そして制御信号は第２の値へと変更され、第０の記憶単位からデータＡＮ，Ａ（Ｎ−１），…，Ａ２，Ａ１が順次に読み出されつつ、第（Ｎ＋Ｋ−１）の記憶単位には次の組のデータＢ１，Ｂ２，…，Ｂ（Ｎ−１），ＢＮが順次に入力され、かつこの順に第（Ｎ＋Ｋ−２）乃至第Ｋの記憶単位に転送される。そして制御信号は第１の値へと変更され、第（Ｎ＋Ｋ−１）の記憶単位からデータＢＮ，Ｂ（Ｎ−１），…，Ｂ２，Ｂ１が順次に読み出される。
【０１５３】
このように記憶単位間におけるデータの転送の方向を、互いに逆の双方向に行うので、（Ｎ＋Ｋ）個の記憶単位を使用して、Ｎ個のデータからなる組の複数についてＦＩＬＯの機能が連続的に発揮され、請求項１の発明の効果を得ることができる。
【０１５４】
この発明のうち請求項３にかかる誤り訂正装置によれば、その備える第１及び第２の双方向転送型記憶装置の少なくともいずれか一方において、ある方向に沿って記憶単位にデータが書き込まれると、逆の方向から読み出され、かつこの読み出しに追随して新たなデータの書き込みが行われる。従って、Ｎ個のデータからなる組の複数についてＦＩＬＯの機能を連続的に発揮することができる。よって、回路規模を削減した誤り訂正装置を得ることができる。
【０１５５】
この発明のうち請求項４にかかる誤り訂正装置によれば、その備える第１及び第２の双方向転送型記憶装置の少なくともいずれか一方において、制御信号が第１の値を採っている場合には第０乃至第（Ｎ−１）の記憶単位へと、ある組のデータＡ１，Ａ２，…，Ａ（Ｎ−１），ＡＮが順次に記憶される。そして制御信号は第２の値へと変更され、第（Ｎ−１）乃至第０の記憶単位からデータＡＮ，Ａ（Ｎ−１），…，Ａ２，Ａ１が順次に読み出されつつ、第（Ｎ＋Ｋ−１）乃至第Ｋの記憶単位には次の組のデータＢ１，Ｂ２，…，Ｂ（Ｎ−１），ＢＮが順次に入力される。そして制御信号は第１の値へと変更され、第Ｋ乃至第（Ｎ＋Ｋ−１）の記憶単位からデータＢＮ，Ｂ（Ｎ−１），…，Ｂ２，Ｂ１が順次に読み出される。
【０１５６】
このように記憶単位間におけるデータの入出力を、アドレスの操作によって互いに逆の双方向に行うので、（Ｎ＋Ｋ）個の記憶単位を有する通常のメモリを利用して、Ｎ個のデータからなる組の複数についてＦＩＬＯの機能が連続的に発揮され、請求項３の発明の効果を得ることができる。
【０１５７】
この発明のうち請求項５にかかる誤り訂正装置によれば、その備える第１及び第２の双方向転送型記憶装置の少なくともいずれか一方において、書き込み、アドレス変更、読み出しの順に処理が進められるので、特にＫ＝０の場合においても請求項３の発明の効果を得ることができ、最も効率よくメモリの記憶単位を利用することができる。よって請求項３の発明の効果を最も高めることができる。
【図面の簡単な説明】
【図１】  本発明に係るリードソロモン誤り訂正装置１００の構成を例示するブロック図である。
【図２】  本発明の実施の形態１として採用し得る、シフトレジスタ型の双方向ＦＩＬＯの構成を示す概念図である。
【図３】  本発明の実施の形態２として採用し得る、アドレスポインタ型の双方向ＦＩＬＯの構成を示す概念図である。
【図４】  この発明の実施の形態３にかかるリードソロモン誤り訂正装置１０１の構成を例示するブロック図である。
【図５】  図６と相俟ってシフトレジスタ型の双方向ＦＩＬＯの動作を示すフローチャートである。
【図６】  図５と相俟ってシフトレジスタ型の双方向ＦＩＬＯの動作を示すフローチャートである。
【図７】  シフトレジスタ型の双方向ＦＩＬＯの構成を例示するブロック図である。
【図８】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図９】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１０】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１１】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１２】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１３】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１４】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１５】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１６】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１７】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１８】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図１９】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図２０】  図７に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図２１】  表１乃至表３のリストに基づいて生成される双方向ＦＩＬＯの構成を示すブロック図である。
【図２２】  図２３乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２３】  図２２及び図２４乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２４】  図２２乃至図２３及び図２５乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２５】  図２２乃至図２４及び図２６乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２６】  図２２乃至図２５及び図２７乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２７】  図２２乃至図２６及び図２８乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２８】  図２２乃至図２７及び図２９乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図２９】  図２２乃至図２８及び図３０乃至図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図３０】  図２２乃至図２９及び図３１と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図３１】  図２２乃至図３０と相俟って論理回路１１０の構成の詳細を示す回路図である。
【図３２】  図３３と相俟ってアドレスポインタ型の双方向ＦＩＬＯの動作を示すフローチャートである。
【図３３】  図３２と相俟ってアドレスポインタ型の双方向ＦＩＬＯの動作を示すフローチャートである。
【図３４】  アドレスポインタ型の双方向ＦＩＬＯの構成を例示するブロック図である。
【図３５】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図３６】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図３７】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図３８】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図３９】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４０】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４１】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４２】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４３】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４４】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４５】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４６】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４７】  図３４に示された双方向ＦＩＬＯの動作を順に示す模式図である。
【図４８】  図４９乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図４９】  図４８及び図５０乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５０】  図４８乃至図４９及び図５１乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５１】  図４８乃至図５０及び図５２乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５２】  図４８乃至図５１及び図５３乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５３】  図４８乃至図５２及び図５４乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５４】  図４８乃至図５３及び図５５乃至図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５５】  図４８乃至図５４及び図５６と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５６】  図４８乃至図５５と相俟って、表４乃至表８で示されたＨＤＬの内容に基づいて生成された双方向ＦＩＬＯの構成の詳細を示す回路図である。
【図５７】  従来のリードソロモン誤り訂正装置２００の構成を示すブロック図である。
【符号の説明】
２  多項式生成器、３  訂正器、４，６  双方向ＦＩＬＯ、Ｍ０〜Ｍ３，Ｒ２５６  メモリ、Ｍ００，Ｍ０１〜Ｍ３０，Ｍ３１  Ｄフリップフロップ、ＭＯＤＥ  モード制御信号、Ｒ＿ＭＯＤＥ＿ＣＮＴ，Ｗ＿ＭＯＤＥ＿ＣＮＴ，ＭＯＤＥ＿ＣＮＴ  モード制御値、＃０〜＃Ｎ  記憶単位。
【図１】
0003710586.tif 000011
【図２】
0003710586.tif 000012
【図３】
0003710586.tif 000013
【図４】
0003710586.tif 000014
【図５】
0003710586.tif 000015
【図６】
0003710586.tif 000016
【図７】
0003710586.tif 000017
【図８】
0003710586.tif 000018
【図９】
0003710586.tif 000019
【図１０】
0003710586.tif 000020
【図１１】
0003710586.tif 000021
【図１２】
0003710586.tif 000022
【図１３】
0003710586.tif 000023
【図１４】
0003710586.tif 000024
【図１５】
0003710586.tif 000025
【図１６】
0003710586.tif 000026
【図１７】
0003710586.tif 000027
【図１８】
0003710586.tif 000028
【図１９】
0003710586.tif 000029
【図２０】
0003710586.tif 000030
【図２１】
0003710586.tif 000031
【図２２】
0003710586.tif 000032
【図２３】
0003710586.tif 000033
【図２４】
0003710586.tif 000034
【図２５】
0003710586.tif 000035
【図２６】
0003710586.tif 000036
【図２７】
0003710586.tif 000037
【図２８】
0003710586.tif 000038
【図２９】
0003710586.tif 000039
【図３０】
0003710586.tif 000040
【図３１】
0003710586.tif 000041
【図３２】
0003710586.tif 000042
【図３３】
0003710586.tif 000043
【図３４】
0003710586.tif 000044
【図３５】
0003710586.tif 000045
【図３６】
0003710586.tif 000046
【図３７】
0003710586.tif 000047
【図３８】
0003710586.tif 000048
【図３９】
0003710586.tif 000049
【図４０】
0003710586.tif 000050
【図４１】
0003710586.tif 000051
【図４２】
0003710586.tif 000052
【図４３】
0003710586.tif 000053
【図４４】
0003710586.tif 000054
【図４５】
0003710586.tif 000055
【図４６】
0003710586.tif 000056
【図４７】
0003710586.tif 000057
【図４８】
0003710586.tif 000058
【図４９】
0003710586.tif 000059
【図５０】
0003710586.tif 000060
【図５１】
0003710586.tif 000061
【図５２】
0003710586.tif 000062
【図５３】
0003710586.tif 000063
【図５４】
0003710586.tif 000064
【図５５】
0003710586.tif 000065
【図５６】
0003710586.tif 000066
【図５７】
0003710586.tif 000067