(57)【特許請求の範囲】
【請求項１】
自己同期型転送制御回路を１つ以上有する先入れ先出しメモリ装置であって、
第１の外部装置からの書き込み要求信号と、第２の外部装置からの読み出し要求信号とのタイミング調整を行う調停回路と、
前記外部からの書き込み要求／読み出し要求に従って、データ書き込み／データ読み出しを行うメモリセルアレイ部と、
前記外部からの書き込み要求／読み出し要求に従って、前記メモリセルアレイ部に入力する書き込みアドレス／読み出しアドレスを計算する機能と、ＦＩＦＯ内に格納している正確なデータ数をカウントする機能とを備えた状態管理回路とを備え、
前記自己同期型転送制御回路は、レジスタ回路あるいは前記メモリセルアレイ部とともにデータ伝送路を成し、
各データ伝送路は前記自己同期型転送制御回路を介したパイプラインを構成し、
前記メモリセルアレイ部を含むデータ伝送路の前段には、前記調停回路を介して前記レジスタ回路を含む少なくとも２段のデータ伝送路が備えられ、その一方には書き込み要求信号が入力され、他方には読み出し要求信号が入力され、
前記メモリセルアレイ部を含むデータ伝送路の後段には、さらに少なくとも１段のレジスタ回路を含むデータ伝送路がパイプライン接続され、前記ＦＩＦＯ内にデータが存在する限り前記後段のデータ伝送路側へデータを伝送するようパイプラインが構成される、自己同期型ＦＩＦＯメモリ装置。
【請求項２】
前記状態管理回路は、読み出し要求あるいは書き込み要求信号を監視することにより前記ＦＩＦＯ内に存在するデータ数を計数および保持し、前記データ数と予め設定されるフル状態データ数閾値およびエンプティ状態閾値からデータフルおよびデータエンプティ信号を出力し、
前記第１の外部装置は、前記データフル信号が非活性状態である限り前記自己同期型ＦＩＦＯメモリ装置へ連続して書き込み要求し、前記第２の外部装置は前記データエンプティ信号が非活性である限り前記自己同期型ＦＩＦＯメモリ装置へ連続して読み出し要求を行う、請求項１に記載の自己同期型ＦＩＦＯメモリ装置。
【請求項３】
演算処理回路を構成するパイプライン間のキューバッファとして、請求項１ないし２のいずれかに記載の自己同期型ＦＩＦＯメモリ装置を用いたことを特徴とする、非同期型情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は自己同期型ＦＩＦＯメモリ装置、これを用いたデータ転送用インターフェイスを有するシステムおよび非同期型情報処理装置に関し、特にＦＩＦＯメモリ装置に対するデータの入出力制御方式に関する。
【０００２】
【従来の技術】
クロックに同期してパイプラインデータ処理を行う論理回路は、通常論理回路ＬＳＩとして構成される。これら論理回路ＬＳＩは、年々高速化と大規模化、微細化が進み、配線長の長大化と配線間隔の縮小が行われていて、配線の直列抵抗と他配線との間の並列容量が大きくなってきている。このため、信号の遅延と波形なまりが大きくなってきているが、この影響は配線の長さによって大きくばらつく。このため、チップ全体にランダムに配置されたすべてのフリップフロップへの配線長を揃えることは難しく、同位相の単一クロックの分配が困難になってきている。
【０００３】
この問題を回避するために、チップ全体に、等遅延となるよう多段階の木構造にバッファを配置したクロックツリーを発生させる必要があるなど、そのコストが増大している。そのため、隣接するパイプラインレジスタの間で局所的に同期を取り合い、同位相の単一クロックが不要な自己同期型のパイプラインを持つ論理回路が検討されている。
【０００４】
自己同期型パイプラインでは、パイプラインからの出力データを後続の装置が受け取れない状態にあるなどの理由によって、パイプラインの出力端において一時的にデータ転送が停止させられると、パイプラインの入力端に向かって連鎖的にデータ転送が停止させられ、パイプラインの出力端において再びデータ転送が可能になるまで待機することになる。その過程において、通常はある程度の間隔をおいて流れるパイプライン内のデータがその間隔を詰めることで自律的な緩衝能力を示すが、その緩衝能力を超えた場合にはパイプラインの入力端において一時的にデータを受け取れない状態を招く。
【０００５】
この場合、パイプラインにＦＩＦＯメモリ装置を挿入して緩衝能力を強化することが望ましい。また、自己同期型パイプライン構成をもつ２つの異なるシステム間でデータを転送する場合、特に２つのシステムにおいてデータ転送レートが異なるような場合には、２つのシステムの間にＦＩＦＯメモリ装置を挿入して、一方のシステムがＦＩＦＯメモリ装置にデータを書き込み、他方のシステムがＦＩＦＯメモリ装置からデータを読み出すというように、互いに独立な書き込み／読み出し要求によってデータ転送が行われることが望ましい。
【０００６】
従来技術として、自己同期型パイプラインの自律的な緩衝能力を活用したＦＩＦＯメモリ装置の一例を図１３に示す。図１３において、ＦＩＦＯメモリ装置は、パイプラインを構成するレジスタ８１，８２，８３と、互いにハンドシェイクをしながらパイプラインレジスタにクロックを供給する自己同期型転送制御回路８４，８５，８６とから構成される。以降、自己同期型転送制御回路をＣ素子、１つのＣ素子とそのＣ素子が供給するクロックで動作する１つのパイプラインレジスタの組を自己同期型データ伝送路と記す。
【０００７】
次に、図１３におけるＣ素子８４，８５，８６の内容の一例を図１４に示す。図１４において、Ｃ素子は前段の転送要求信号（ＳＥＮＤ信号）を入力するＣＩ信号端子９１と、ＣＩ信号端子９１からの転送要求を受け取ったことを示すアクノリッジ信号（ＡＣＫ信号）を前段に返すＲＯ信号端子９２と、ＣＩ信号からの転送要求によりレジスタへクロックパルスを送出するＣＰ信号端子９３と、前段からの転送要求を次段に伝えるＣＯ信号端子９４と、ＣＯ出力端子からの転送要求が次段に受け取られたことを示すアクノリッジ信号が返されるＲＩ信号端子９５と、転送要求受付状態を保持するフリップフロップ９６と、フリップフロップ９６，９８の同期をとるＮＡＮＤゲート９７と、次段への転送要求状態を保持するフリップフロップ９８とからなる。
【０００８】
図１５は、このＣ素子の動作を示すタイミングチャートである。パルス入力端子ＣＩから「Ｌ」レベル信号が入力されると、すなわち前段からデータ転送が要求されると、フリップフロップ９６はセットされ、その出力ノードから「Ｈ」レベル信号を出力する。これにより、転送許可出力端子ＲＯからは「Ｌ」レベル信号が出力され、さらなるデータ転送が禁止される。
【０００９】
一定時間後、パルス入力端子ＣＩから「Ｈ」レベル信号が入力され、前段部から当該Ｃ素子へのデータのセットが終了する。この状態であり、かつ転送許可入力端子ＲＩから「Ｈ」レベル信号が入力されている、すなわち、後段部からデータ転送を許可されている状態で、かつパルス出力端子ＣＯが「Ｈ」レベル信号を出力しており、後段部へデータ転送している途中ではない状態であるならば、ＮＡＮＤゲート９７はアクティブとなり「Ｌ」レベル信号を出力する。
【００１０】
その結果、フリップフロップ９６とフリップフロップ９８はともにリセットされ、パイプラインレジスタへのパルス出力端子ＣＰから「Ｈ」レベル信号が出力され、後段部へのパルス出力端子ＣＯから「Ｌ」レベルのＳＥＮＤ信号が出力される。すなわち、後段部へデータ転送が要求される。「Ｌ」レベルのＳＥＮＤ信号を受けた後段のＣ素子は、該Ｃ素子に対してさらなるデータ転送が行われないように禁止を示す「Ｌ」レベルのＡＣＫ信号を送る。該Ｃ素子は転送許可入力端子ＲＩから、この「Ｌ」レベルのＡＣＫ信号を入力し、フリップフロップ９８がセットされる。その結果、パイプラインレジスタへのパルス出力端子ＣＰから「Ｌ」レベル信号が出力され、また後段部へのパルス出力端子ＣＯから「Ｈ」レベルのＳＥＮＤ信号が出力され、データ転送を終了する。
【００１１】
図１３におけるパイプラインの１段目のＣ素子８４へ転送要求パルスＣＩが入力され、同じく１段目のパイプラインレジスタ８１へ、処理データＤが入力される。これにより転送要求受付状態を保持するＣ素子８４内のフリップフロップ９６がセットされ、アクノリッジ信号ＲＯが返される。これによりＣ素子８４のＣＩが「Ｈ」レベルに戻り、Ｃ素子８４内のＮＡＮＤゲート９７が「Ｌ」レベルを出力し、次段への転送要求を保持するＣ素子８４内のフリップフロップ９８がセットされ、またフリップフロップ９６がクリアされる。
【００１２】
Ｃ素子８４のパイプラインレジスタ８１へのクロックＣＰが「Ｈ」レベルとなり、これによりパイプラインレジスタ８１に入力データＤがラッチされ、ノードＱに出力される。また、Ｃ素子８４のＣＯ端子に次段への転送要求パルスが出力される。このパルスは図１３の２段目のパイプラインを構成するＣ素子８５に入力され、Ｃ素子８４と同様の動作を行うことで、パイプラインレジスタ８１から出力されたデータＱが２段目のパイプラインレジスタ８２へラッチされ、ノードＱへ出力される。Ｃ素子８６もＣ素子８４，８５と同様の操作を行い、２段目のパイプラインレジスタ８２から出力されたデータを３段目のパイプラインレジスタ８３がラッチし、出力データ端子Ｑに出力する。
【００１３】
従来技術としての自己同期型ＦＩＦＯメモリ装置の別の例を図１６に示す。この例は図１３の自己同期型データ伝送路（Ｃ素子とその対となるパイプラインレジスタの組）をｎ個直列に接続した構成である。図１６に示す回路において、ｎ個のデータを入力し（書き込み）、ＦＩＦＯが満杯状態になった後、ｎ個のデータを出力する（読出し）手順の動作を図１７に示すタイミングチャートを参照しながら説明する。
【００１４】
まず、ＦＩＦＯ空状態からデータをｎ個連続して入力する手順の説明をする。端子ＣＩからの「Ｌ」パルス信号入力１２−１（書き込みクロック）とともに、１個目のデータＤＡＴＡ１を端子Ｄより入力すると、図１５で説明したようにＣ素子１１４は後段のＣ素子１１５とハンドシェイク動作を行い、１個目の入力データＤＡＴＡ１を２段目のパイプラインレジスタ１１２へ転送する。この際、ＤＡＴＡ１が後段のデータ伝送路に正常に転送されたことを示す「Ｌ」レベルのパルス信号１２−２が端子ＲＯから出力される。
【００１５】
具体的に説明すると、ＲＯ信号が「Ｈ」レベルから「Ｌ」レベルに立ち下がることは、前段からの入力データを受け付けたことを示し、「Ｌ」レベルから「Ｈ」レベルに立ち上ることは受け付けたデータを後段へ転送する作業を終了したことを示す。
【００１６】
２段目のデータ伝送路のＣ素子１１５も同様の動作を行い、３段目のパイプラインレジスタにＤＡＴＡ１が転送される。３段目以降のＣ素子も同様の動作を行い、ｎ段目のデータ伝送路までＤＡＴＡ１が転送される。ｎ段目のＣ素子も通常の転送動作を行い、ｎ段目のパイプラインレジスタ１１３にＤＡＴＡ１をラッチし、端子ＣＯから「Ｌ」レベル信号１２−３を出力するとともに、データ出力端子ＱからＤＡＴＡ１を出力する。
【００１７】
また、端子ＣＯが「Ｌ」信号を出力している状態が、読み出すデータが存在することを示している（読み出しデータ準備完了状態）。この状態において、端子ＲＩから「Ｌ」レベルパルス信号（読み出しクロック）を入力することで、端子ＣＯが「Ｈ」レベルに立上がりＤＡＴＡ１読み出し動作が完了するが、ここでは端子ＲＩの入力信号は「Ｈ」レベル固定にされている。すなわち、ＦＩＦＯ内にデータが１個（ＤＡＴＡ１）蓄えられた状態を維持させておく。
【００１８】
次に、端子ＣＩからの「Ｌ」レベルのパルス信号入力１２−６（書き込みクロック）とともに、２個目のデータＤＡＴＡ２を端子Ｄより入力すると、ＤＡＴＡ２はＤＡＴＡ１と同様に後段のパイプラインレジスタへと転送されていく。ただし、最終段のパイプラインレジスタ１１３にはＤＡＴＡ１が格納されており、最終段のＣ素子１１６の端子ｒｏからは「Ｌ」レベル信号が出力されており、さらなるデータ転送が禁止されているため、入力データＤＡＴＡ２は最終段の一段手前の（ｎ−１）段目のパイプラインレジスタに格納された状態で維持される。
【００１９】
同様にして、端子ＲＩからの入力は「Ｈ」レベルに保たれたまま、データが次々に入力される。そして、端子ＣＩからの書き込みクロック１２−８とともに、ｎ個目のデータＤＡＴＡ ｎを端子Ｄより入力すると、ＤＡＴＡｎは１段目のパイプラインレジスタ１１１に格納されるが、２段目のパイプラインレジスタ１１２にはＤＡＴＡ（ｎ−１）が格納された状態であるため、すなわち２段目のＣ素子１１５の端子ｒｏからはデータ転送禁止を示す「Ｌ」レベル信号を出力しているため、これ以上のデータ転送は行われない。これと同様に１段目のパイプラインレジスタ１１１もデータ格納状態であるため、これ以上の入力データは受け付けない。すなわち、１段目のＣ素子１１４の端子ｒｏ、そしてそのｒｏと接続されている端子ＲＯからはデータ転送禁止を意味する「Ｌ」レベル信号が出力される。この状態がＦＩＦＯ満杯状態である。
【００２０】
次に、ＦＩＦＯ満杯状態からデータをｎ個読み出す手順について説明する。端子ＲＩからの「Ｌ」レベルのパルス信号入力１２−１０（読み出しクロック）が入力されると、最終段のＣ素子１１６は端子ｃｏからＤＡＴＡ１のデータ転送動作終了を示す「Ｈ」レベル信号１２−１１を出力し、また端子ｒｏから前段のＣ素子にデータ転送を許可する「Ｈ」レベル信号が出力される。（ｎ−１）段目のＣ素子は、このデータ転送許可を示す「Ｈ」レベル信号を端子ｒｉから受け取り、ＤＡＴＡ２をｎ段目のパイプラインレジスタ１１３に転送し、読み出しデータ準備完了状態（１２−１３）になる。
【００２１】
同様にして、ＤＡＴＡ３からＤＡＴＡｎまでのデータも１段ずつ後段のパイプラインレジスタに転送される。その結果、１段目のパイプラインレジスタ１１１が空き状態になり、端子ＲＯからはＦＩＦＯに空きがあることを示す「Ｈ」レベル信号が出力される（１２−１２）。
【００２２】
さらに、端子ＲＩから読み出しクロックを（ｎ−１）個入力することで、ＤＡＴＡ２からＤＡＴＡｎまでのデータを読み出すことができる（１２−１４）。なお、ｎ個目のデータＤＡＴＡｎを読み出した際に端子ＣＯは「Ｈ」レベル信号を出力するが、この時点でＦＩＦＯが完全に空状態になるので端子ＣＯからは「Ｈ」が出力されつづける（１２−１５）。
【００２３】
したがって、図１６の回路は、ＦＩＦＯが空の状態であることを確認するエンプティフラグの役割を端子ＣＯが、またＦＩＦＯが満杯の状態であることを確認するフルフラグの役割を端子ＲＯが果たしているので、一方から書き込みクロック、他方から読み出しクロックが非同期で独立に入力されるような２つの外部装置間に容易に挿入できる。
【００２４】
【発明が解決しようとする課題】
自己同期型ＦＩＦＯ装置の役割は２つの異なるクロックで動作するシステム間でのデータ転送をスムーズに行うことであり、従来技術で紹介した自己同期型ＦＩＦＯ装置は、ＦＩＦＯへの書き込み、ＦＩＦＯからの読み出しが独立に行えるため、この役割を充分果たしている。
【００２５】
しかしながら、従来の自己同期型ＦＩＦＯ装置を非同期型データ駆動情報処理装置と汎用システムとのインターフェースとして利用する場合を考えると、たとえば図１８に示すような、非同期型データ駆動情報処理装置３０からのデータを自己同期型ＦＩＦＯ装置４１がバスを介してメモリ４２へＤＭＡコントローラ４３によってＤＭＡ転送する場合において、自己同期型ＦＩＦＯ装置４１には大容量のデータを格納できると効率がよくなる。従来技術で示した自己同期型ＦＩＦＯ装置が大容量のデータを格納可能にするには、格納する最大データ数分、データ伝送路を直列に接続する構成をとるため回路規模が大きくなってしまう。さらにＦＩＦＯ内データ空状態／満杯状態を管理するエンプティフラグ（図１９に示すＣＯ）／フルフラグ（図１９に示すＲＯ）の信号伝播遅延が大きくなるため、システム系全体の遊び時間が増大する。
【００２６】
たとえば、図１８に示すシステムにおける自己同期型ＦＩＦＯメモリ装置４１に、従来技術による自己同期型ＦＩＦＯメモリ装置を採用する場合を考える。図１８は、自己同期型ＦＩＦＯメモリ装置４１を利用して、非同期型データ駆動情報処理装置３０をＣＰＵバスとインターフェースさせた例であり、非同期型データ駆動情報処理装置３０で演算処理されたデータが自己同期型ＦＩＦＯメモリ装置４１に蓄積されていき、ＦＩＦＯ内がデータ満杯状態になると、ＤＭＡコントローラ４３により蓄積されたデータが自己同期型ＦＩＦＯメモリ装置４１からメモリ４２へまとめてＤＭＡ転送されるシステムである。バスから非同期型データ駆動情報処理装置３０に入力されたデータは、入力制御装置３１によりどのｎＰＥにデータを転送するのか決定される。Ｒｏｕｔｅｒ３２は決定された行先のｎＰＥにデータを転送する。
【００２７】
ｎＰＥ１，ｎＰＥ２，…，ｎＰＥｎは、データ演算処理部であり、転送されたデータはｎＰＥにて、演算処理が実行されＲｏｕｔｅｒ３２を介して出力制御装置３３に転送される。出力制御装置３３はこのデータを入力制御装置３１を介して再度ｎＰＥに転送するか、自己同期型ＦＩＦＯメモリ装置４１に出力するか決定する。自己同期型ＦＩＦＯメモリ装置４１は、非同期型データ駆動情報処理装置３０から入力されるデータを蓄積し、自己同期型ＦＩＦＯメモリ装置４１がデータ満杯状態になる（図１６に示すＲＯ信号が「Ｌ」レベルに固定される）と、ＤＭＡコントローラ４３から自己同期型ＦＩＦＯメモリ装置４１へ読み出しクロックをまとめて入力し（図１６に示すＲＩ端子から「Ｌ」パルス信号をまとめて入力）、ＤＭＡ転送を実行する。
【００２８】
しかし、ＦＩＦＯ内が満杯状態になった（図１６に示すＲＯ信号が「Ｌ」レベルに固定される）瞬間から１個目のデータが読み出され（図１６に示すＲＩ端子から「Ｌ」レベルパルス信号が入力され）、書き込み禁止状態が解除される（図１６に示すＲＯ信号が「Ｈ」レベルに立上がる）までは、データ書き込み（出力制御装置から自己同期型ＦＩＦＯメモリ装置４１へのデータ転送）がしたくても実施できない。読み出しクロック（ＲＩ端子から「Ｌ」レベルパルス信号）が入力されてからＲＯ信号が「Ｈ」レベルに立上がるまでの時間が長いため、すなわちＲＯ信号の伝播遅延が大きいため、書き込み禁止時間も大きくなり、システムとして無駄な時間が発生する。
【００２９】
このシステムが遊ぶ時間を減少させるためには、ＦＩＦＯ内が完全に物理的な満杯状態になる前にまとめてデータを読み出すバースト読み出しが行えるように論理的な満杯状態を示すフルフラグを別途ＦＩＦＯ装置が出力できるようにしたい（ここで、物理的な満杯状態とはＦＩＦＯが格納可能な最大データ数分、データを格納している状態で、論理的な満杯状態とはユーザがＦＩＦＯに対して外部から指定したデータ数分、ＦＩＦＯがデータを格納している状態である）。こうすることで、書き込み禁止状態でなく、かつフルフラグを出力するといったことが可能となり、ＦＩＦＯへのデータの書き込み、ＦＩＦＯからのデータの読み出しが平行に実行できるためシステムが遊ぶ時間を減少させることができる。
【００３０】
別の例として、図１９に示すシステムにおける自己同期型ＦＩＦＯメモリ装置に、従来技術による自己同期型ＦＩＦＯメモリ装置を採用する場合を考える。図１９は、効率的なデータ転送を目的とした自己同期型ＦＩＦＯメモリ装置５４を利用して、ＣＰＵ５１、メモリ５２、入出力インターフェース５３から構成されるメディアプロセッサ５０をＰＣＩバスと接続した例であり、ＣＰＵ５１で演算処理されメモリ５２に格納されたデータが自己同期型ＦＩＦＯメモリ装置５４にバースト書き込みされていき、ＦＩＦＯ内がデータ満杯状態になると、ＤＭＡコントローラ５７により蓄積されたデータが自己同期型ＦＩＦＯメモリ装置５４からメモリ５６へまとめてバースト読み出しされるシステムである。
【００３１】
ＰＣＩバスから入出力インターフェース５３を経由してメディアプロセッサ５０に入力されたデータはＣＰＵ５１で処理され、処理結果がメモリ５２へ格納される。自己同期型ＦＩＦＯメモリ装置５４にデータがまったく格納されていない空状態（図１６に示すＣＯ信号が「Ｈ」レベルに固定される）であると、ＣＰＵ５１によりメモリ５２に格納されているデータがＦＩＦＯへバースト転送され書き込まれる（図１６に示すＣＯ信号が「Ｌ」になる）。バースト書き込みが幾度か行われた結果、ＦＩＦＯがデータ満杯状態になる（図１６に示すＲＯ信号が「Ｌ」レベルに固定）。これをＤＭＡコントローラ５７が受け、ＦＩＦＯからメモリ５６へバースト読み出しが開始される（図１６に示すＲＯ信号が「Ｈ」レベルになる）。
【００３２】
バースト読み出しが幾度か行われた結果、ＦＩＦＯがデータ空状態になると、再びメモリ５２からＦＩＦＯへバースト書き込みが行われる。このようなＦＩＦＯに対してバースト書き込み、バースト読み出しの両方を行うシステムにおいては、バースト書き込み中は読み出しができず、またバースト読み出し中は書き込みができないため、システムの遊び時間が発生する。
【００３３】
このシステムが遊ぶ時間を減少させるためには、図１８の例でも示したようなＦＩＦＯ内が完全に満杯状態になる前に、ユーザがＦＩＦＯに対して指定した満杯状態（論理的な満杯状態）であると認識させるため、フルフラグ閾値とＦＩＦＯ内が完全に空状態（ＦＩＦＯ内に格納されているデータがない物理的な空状態）になる前に、ユーザがＦＩＦＯに対して指定した空状態（論理的な空状態）であると認識させるためのエンプティ閾値をＦＩＦＯに対して与えることができれば、データ転送効率が上がる。
【００３４】
図１９の例でフルフラグ閾値とエンプティフラグ閾値の２種類の閾値をＦＩＦＯに与え、ＦＩＦＯ内のデータ数がフルフラグ閾値よりも大きくなるまで、バースト書き込みを行い、ＦＩＦＯ内のデータ数がエンプティフラグ閾値よりも小さくなるまで、バースト読み出しを行うといった利用方法が考えられる。すなわち、ＦＩＦＯ内のデータ数がエンプティフラグ閾値よりも大きく、フルフラグ閾値よりも小さい状態で、バースト書き込みとバースト読み出しが平行に実行でき、効率のよいデータ転送が可能となりシステムが遊ぶ時間を減少させることができる。また、フルフラグ閾値とエンプティフラグ閾値をカスタマイズすることで、バースト書き込み単位個数とバースト読み出し単位個数がそれぞれ異なるシステム間にも対応可能である。
【００３５】
しかしながら、従来のＦＩＦＯメモリ装置ではＦＩＦＯ内に格納されている正確なデータ数を知る手段がないため、バースト書き込み／バースト読み出しを精密に制御するのは難しい。
【００３６】
図２０は従来における類似の技術として特開平１０−１０５３７５号公報に記載されている非同期式ＦＩＦＯ回路を示すブロック図である。この図２０に示した非同期式ＦＩＦＯ回路は、外部装置との間で非同期にデータの入出力を行うＦＩＦＯ回路である。ライト制御回路６３から所定数のデータを第１のＦＩＦＯ６１に書き込むと、書き込んだデータ数を第２のＦＩＦＯ６２内に格納し、次にリード制御回路６４によりカウンタ６５内の書き込みデータ数情報に基づき、そのデータ数の分、第１のＦＩＦＯ６１からデータをまとめて読み出すと、読み出したデータ数を第２のＦＩＦＯ６２内に格納し、次に書き込み側から読み出しデータ数情報に基づき、そのデータ数の分、第１のＦＩＦＯ６１にデータをまとめて書き込む回路である。
【００３７】
したがって、図２０に示した非同期式ＦＩＦＯ回路は、データをまとめて書き込んだ数、もしくはデータをまとめて読み出した数のいずれかのみの情報を第２のＦＩＦＯ６２内に格納する回路であるため、バースト書き込みを実現するならバースト書き込み実行用の回路、バースト読み出しを実現するならバースト読み出し実行用の回路といった具合に使い分けないといけない。また、これに付随するが、バースト書き込み、バースト読み出しを平行に実行できない。さらに、大容量のデータを格納できるようにＦＩＦＯメモリを拡張する際、回路規模が大きくなるという問題がある。
【００３８】
図２１は特開平１０−２１４１７４号公報に記載された非同期式ＦＩＦＯ回路である。この非同期ＦＩＦＯ回路は、フル状態／エンプティ状態を判定する際の書き込み信号と読出し信号の同期化を不要として、書き込み／読み出しの高速化を実現するとともに、デコード処理を除去して、フル状態／エンプティ状態の誤認識を排除することを目的としたものである。
【００３９】
この回路も外部装置との間で非同期にデータの入出力を行うＦＩＦＯ回路であり、フルフラグ／エンプティフラグを備えている。レジスタファイル７１は外部からの複数ビットのデータの入力を受けて、書き込み制御信号を介して格納するとともに、格納された複数ビットのデータを読み出し制御信号を介して選択し、外部からの読み出し信号を介して複数ビットの読み出しデータとして出力する。
【００４０】
書き込みポインタ７２は外部からの書き込み信号に同期した書き込みアドレス信号を生成し、書き込み回路７３がその書き込みアドレス信号と外部からの書き込み信号に応じてレジスタファイル７１にデータを書き込む。読み出しポインタ７４は外部からの読み出し信号に同期した読み出しアドレス信号を生成し、読み出し回路７５がその読み出しアドレス信号に応じてレジスタファイル７１からデータを読み出す。
【００４１】
フル／エンプティ識別回路７６は外部からの書き込み信号の反転信号と読み出し信号の反転信号を受けて、内部に含まれるシフトレジスタブロックのフルまたはエンプティを示すフラグを生成して出力する。
【００４２】
しかしながら、このフルフラグ／エンプティフラグは物理的な満杯状態／空状態を示すものであるため、図１８および図１９の例で示したようなシステムの遊ぶ時間が発生する。また大容量のデータを格納できるように拡張する際、図１６に示す回路と同様、回路規模が大きくなるうえ、さらにフル／エンプティの信号遅延も大きくなるため、正常な動作を保証しつつ、書き込みと読み出しの非同期な要求を並行に処理するのは難しい。これらの制約から、２つの装置間に緻密なデータ入出力制御可能で、かつ大容量のＦＩＦＯメモリ装置が必要とされるシステムにおいて、上記の非同期式ＦＩＦＯメモリ装置を挿入することは容易ではない。
【００４３】
それゆえに、この発明の主たる目的は、２つの外部装置間に容易に挿入することができる大容量のＦＩＦＯバッファ装置であり、自己同期型ＦＩＦＯメモリ装置内の正確なデータ数を把握して確実な連続アクセスを保証し、アクセス効率の高い自己同期型ＦＩＦＯメモリ装置を提供することである。
【００４４】
【課題を解決するための手段】
この発明に係るＦＩＦＯメモリ装置は、自己同期型転送制御回路を１つ以上有する先入れ先出しメモリ装置であって、第１の外部装置からの書き込み要求信号と、第２の外部装置からの読み出し要求信号とのタイミング調整を行う調停回路と、外部からの書き込み要求／読み出し要求に従って、データ書き込み／データ読み出しを行うメモリセルアレイ部と、外部からの書き込み要求／読み出し要求に従って、メモリセルアレイ部に入力する書き込みアドレス／読み出しアドレスを計算する機能と、ＦＩＦＯ内に格納している正確なデータ数をカウントする機能とを備えた状態管理回路を備えることを特徴とする。
【００４５】
また、自己同期型転送制御回路はレジスタ回路あるいはメモリセルアレイ部とともにデータ伝送路を成し、各データ伝送路は自己同期型転送制御回路を介したパイプラインを構成することを特徴とする。
【００４６】
また、メモリセルアレイを含むデータ伝送路の前段には、調停回路を介してレジスタ回路を含む少なくとも２段のデータ伝送路が備えられ、その一方には書き込み要求信号が入力され、他方には読み出し要求信号が入力されることを特徴とする。
【００４７】
メモリセルアレイを含むデータ伝送路の後段には、さらに少なくとも１段のレジスタ回路を含むデータ伝送路がパイプライン接続され、ＦＩＦＯ内にデータが存在する限り後段のデータ伝送路側へデータを伝送するようパイプラインが構成されることを特徴とする。
【００４８】
また、状態管理回路は読み出し要求あるいは書き込み要求信号を監視することによりＦＩＦＯ内に存在するデータ数を計数および保持し、データ数と予め設定されるフル状態データ数閾値およびエンプティ状態閾値からデータフルおよびデータエンプティ信号を出力することを特徴とする。
【００４９】
各々異なるタイミング信号で動作する第１および第２の外部装置間のデータ経路にこの発明の自己同期型ＦＩＦＯメモリ装置が挿入されるシステムにおいて、一方の外部装置はデータフル信号が非活性状態である限り自己同期型ＦＩＦＯメモリ装置へ連続して書き込み要求し、他方の外部装置はデータエンプティ信号が非活性である限り自己同期型ＦＩＦＯメモリ装置へ連続して読み出し要求を行うことを特徴とする。
【００５０】
演算処理回路を構成するパイプライン間のキューバッファとして、この発明の自己同期型ＦＩＦＯメモリ装置を用いたことを特徴とする。
【００５１】
【発明の実施の形態】
以下、添付した図面を参照して本発明の一実施例を詳細に説明する。
【００５２】
図２は、この発明の一実施形態による自己同期型ＦＩＦＯメモリ装置を含むシステムのブロック図であり、図１は、図２に含まれる自己同期型ＦＩＦＯメモリ装置の一例である。図３は図１に示したＣ素子の一例を示すブロック図である。
【００５３】
図２において、自己同期型ＦＩＦＯメモリ装置２１は第１の外部装置２２と、第２の外部装置２３との間に挿入され、外部装置２２から外部装置２３へデータを転送する役割を担う。外部装置２２は、Ｃ素子とパイプラインレジスタからなるデータ伝送路２４を最終段にもち、自己同期型ＦＩＦＯメモリ装置２１に対して自発的なデータ転送を行う。すなわち、最終段のデータ伝送路２４がデータを持っている状態で、かつ、書き込み可能フラグ２８が「Ｈ」レベルで自己同期型ＦＩＦＯメモリ装置２１にデータを格納するスペースがある状態ならば、外部装置２２は自動的に書き込みクロック２５を自己同期型ＦＩＦＯメモリ装置２１に入力し、データＤを自己同期型ＦＩＦＯメモリ装置２１へ転送する。
【００５４】
外部装置２３は、自己同期型ＦＩＦＯメモリ装置２１からの読み出しデータ存在フラグＲＤＹ２６が「Ｈ」レベルであれば、読み出しクロック２７を入力することで読み出しデータＱを受け取る。自己同期型ＦＩＦＯメモリ装置２１は、外部装置２２から受け取ったデータを外部装置２３へ転送するだけでなく、外部から設定されたフルフラグ閾値ＴＨ＿ＦＵＬ、エンプティフラグ閾値ＴＨ＿ＥＭＰと、ＦＩＦＯメモリ装置内格納データ数に基づいて、フルフラグＦＵＬ、エンプティフラグＥＭＰを外部装置２３へ出力する。すわなち、ＦＩＦＯメモリ装置内格納データ数がフルフラグ閾値ＴＨ＿ＦＵＬよりも大きくなると、フルフラグＦＵＬから「Ｈ」レベルを、またエンプティフラグ閾値ＴＨ＿ＥＭＰよりも小さくなると、エンプティフラグＥＭＰから「Ｈ」レベルを出力する。
【００５５】
外部装置２２は、前述した自発的なデータ転送を行う装置である必要はなく、能動的に書き込みクロックを入力する装置であってもよい。また、外部装置２３は、必ずしも能動的に読み出しクロックを入力する装置である必要はなく、自発的にデータ転送が行われる装置であってもよい。
【００５６】
次に、図１に示す自己同期型ＦＩＦＯメモリ装置２１について詳細に説明する。図１において、端子ＣＩは外部装置２２からの書き込み要求信号を受け、端子ＲＯは外部装置２２に対して書き込み可能フラグを出力する。端子ＣＩは１段目のＣ素子１５の端子ｃｉと接続され、また、端子ＲＯは書き込み可否データ保持レジスタ１１８の出力ノードＱと接続される。Ｃ素子１５は、「Ｌ」レベルに固定されている１ビットと３２ビットデータ格納用フリップフロップからなるパイプラインレジスタ１６とともに１段目のデータ伝送路を形成する。端子ＲＤＹは外部装置２３へ読み出しデータ存在フラグを出力し、端子ＲＣＫは外部装置２３からの読み出し要求信号を受ける。
【００５７】
端子ＲＣＫ、ＲＤＹは最終段である５段目のＣ素子１１５の端子ｒｉと、インバータ１１３経由でｃｏと接続される。Ｃ素子１１５は、パイプラインレジスタ１１７とともに最終段（５段目）のデータ伝送路を形成する。また、端子ＲＣＫは１段目の他方のＣ素子１２の端子ｃｉにも接続され、パイプラインレジスタ１３（「Ｈ」固定の１ビット）とともにもう１つの１段目のデータ伝送路を形成する。３２ビットデータを２０４６個格納するＲＡＭ１１０、次ステート関数１１９で決定されるＲＡＭへの書き込みアドレス（Write Pointer、以後Ｗ．Ｐ．と記す）／読み出しアドレス（Read Pointer、以後Ｒ．Ｐ．と記す）、ＦＩＦＯメモリ装置内データ数（Word Count、以後Ｗ．Ｃ．と記す）、満杯状態フラグ（ＦＵＬ）、空状態フラグ（ＥＭＰ）を管理する状態保持レジスタ１１１、書き込み可否データ保持レジスタ１１８、そしてパイプラインレジスタ１２１は、２段目のＣ素子１８とともに２段目のデータ伝送路を形成する。
【００５８】
Ｃ素子１８は他のＣ素子とは異なってデータ消去機能をもっており、ｅｘｂ端子に「Ｌ」が入力されているときは、後段のＣ素子１９とのデータ転送ハンドシェイクは行わない。Ｃ素子１８の一実施例の回路を図３に示す。一方、ｅｘｂ端子に「Ｈ」レベル信号が入力されているときは、通常のデータ転送ハンドシェイクを行う。
【００５９】
状態保持レジスタ１１１は、端子ＲＳＴから入力される非同期リセット信号（「Ｌ」信号）によって、次の初期値がセットされる。すなわち、書き込みアドレス（Ｗ．Ｐ．）、読み出しアドレス（Ｒ．Ｐ．）、ＦＩＦＯメモリ装置内データ数（Ｗ．Ｃ．）はすべて０、ＥＭＰフラグは１、ＦＵＬフラグは０をそれぞれ初期値とする。書き込み可否データ保持レジスタ１１８は、その入力ノードＲＳＴに、Ｃ素子１５のｒｏ端子からの「Ｌ」レベル信号が入力されると、すなわち非同期リセットがかかると端子ＲＯへ「Ｌ」レベル信号を出力し、Ｃ素子１８のｃｐ端子からの「Ｈ」レベルのパルス信号が入力されると、次ステート関数１１９から入力されるデータ書き込み許可信号ＩＥを受け取り、端子ＲＯへ出力するレジスタである。
【００６０】
調停回路１４は、１段目の２つのＣ素子１２および１５とともに合流回路１１を形成し、１段目のデータ伝送路から２段目のデータ伝送路へのデータ転送と、他方の１段目のデータ伝送路から２段目のデータ伝送路へのデータ転送が重ならないようにデータ転送のタイミングを調整している。すなわち、端子ＣＩからの書き込み要求クロック（「Ｌ」レベルパルス信号）と、端子ＲＣＫからの読み出し要求クロック（「Ｌ」レベルパルス信号）とがほぼ同時に入力されたとき、その「Ｌ」レベルパルス信号の立下りが他方の「Ｌ」パルス信号の立下りよりも早く入力されたＣ素子１２もしくはＣ素子１５が、Ｃ素子１８とハンドシェイクを行う。
【００６１】
このハンドシェイクによるデータ転送が終了した後に、他方のＣ素子１２もしくはＣ素子１５がＣ素子１８とハンドシェイクを行う。合流回路１１の一実施例による回路を図４に示す。また、図４で使用されているサブモジュールｃ１２０ｊの一例による回路を図５に示し、サブモジュールａｒｂの一例による回路を図６にそれぞれ示す。特開平２−１６６６号公報にはこの合流回路と類似の技術が開示されているので、合流回路１１の説明は割愛する。
【００６２】
Ｃ素子１９は、３２ビットデータ格納用パイプラインレジスタ１１２とともに３段目のデータ伝送路を形成し、同様にＣ素子１１４はパイプラインレジスタ１１６とともに４段目のデータ伝送路を形成する。セレクタ１７は、端子ＣＩから書き込みクロックが入力されると、パイプラインレジスタ１６の１ビットの「Ｌ」レベル固定信号を、また端子ＲＣＫから読み出しクロックが入力されると、パイプラインレジスタ１３の１ビットの「Ｈ」レベル固定信号を次ステート関数１１９へＲ／Ｗ信号（Ｒｅａｄ：１、Ｗｒｉｔｅ：０）として出力する。
【００６３】
次ステート関数１１９は、セレクタ１７から入力されるＲ／Ｗ信号と、状態保持レジスタ１１１から入力される自己同期型ＦＩＦＯメモリ装置内データ数（Ｗｏｒｄ  ｃｏｕｎｔ）に応じて、後述の図１０および図１１に示す操作を行う。この操作に関しては、後で説明する。セレクタ１２０は、次ステート関数１１９から出力されレジスタ１２１に格納されるＰＡＳＳフラグに従って、レジスタ１２１に格納された３２ビットデータを出力するか、もしくはＲＡＭ１１０から読み出された３２ビットデータを出力するかを選択するものである。
【００６４】
端子ＴＨ＿ＦＵＬ／ＴＨ＿ＥＭＰは、ＦＩＦＯメモリ装置内データ数の満杯状態／空状態を判定するための基準値を外部から受け、端子ＦＵＬ／ＥＭＰはＴＨ＿ＦＵＬ／ＴＨ＿ＥＭＰ、ＦＩＦＯメモリ装置内データ数によって、次ステート関数１１９内で満杯状態／空状態を判定した結果を出力する。
【００６５】
図７，図８および図９は、図１に示した自己同期型ＦＩＦＯメモリ装置の動作を説明するためのタイミングチャートである。
【００６６】
次に図７〜図９に示すタイミングチャートを参照しながら、図１の自己同期型ＦＩＦＯメモリ装置の動作を説明する。自己同期型ＦＩＦＯメモリ装置にデータがまったく書き込まれていない空の状態から、端子ＣＩから２０４８個の書き込みクロック（「Ｌ」パルス信号）を入力して３２ビットのデータを２０４８個書き込み、自己同期型ＦＩＦＯメモリ装置内のデータが満杯状態になった後、端子ＲＣＫから２０４８個の読み出しクロック（「Ｌ」パルス信号）を入力して３２ビットデータを２０４８個読み出す手順において、図７はＦＩＦＯメモリ装置内にデータがない空状態からデータを数個書き込む部分、図８はデータを書き込んでＦＩＦＯメモリ装置が満杯状態になった後、データを数個読み出す部分、そして図９はデータを数個読み出した結果、ＦＩＦＯメモリ装置内が空状態になる部分のタイミングチャートをそれぞれ示している。また、端子ＣＩから入力する書き込みクロック、端子ＲＣＫから入力する読み出しクロックが共に周期３０ｎｓ（動作周波数３３ＭＨｚ）で入力したときのものである。ＴＨ＿ＥＭＰ端子は３、ＴＨ＿ＦＵＬ端子は２０４６に設定している。
【００６７】
図７に示す通り、自己同期型ＦＩＦＯメモリ装置のデータが０個の初期状態（ＲＳＴリセット信号入力直後）時は読み出すデータが存在しないので、読み出しデータ存在フラグＲＤＹは「Ｌ」レベルとなっている。また、状態保持レジスタ内にあるＷ．Ｃ．フィールド（自己同期型ＦＩＦＯメモリ装置内のデータ数）の値は「０」を示している。この状態から１個目のデータ（データ値０）を書き込むと、すなわち端子ＣＩから１個目の書き込みクロック（「Ｌ」レベルパルス信号）を入力する（図７: ＴＩＭＥ１）と、Ｃ素子１５は図１５に示す通常の転送動作を行い、Ｃ素子１５のｃｐ端子から「Ｈ」レベルパルス信号が出力される。パイプラインレジスタ１６は、この「Ｈ」レベルパルス信号を受け、端子Ｄから入力された１個目の３２ビットデータ（データ値０）と、１ビット信号（値は０で後にＲ／Ｗ信号として運ばれる）をラッチし、後段のデータ伝送路に出力する。
【００６８】
Ｃ素子１５のｃｏ端子からはデータ転送要求パルス（「Ｌ」レベルパルス信号）が出力され、調停回路１４はこの「Ｌ」レベルパルス信号をＣ素子１８のｃｉ端子に伝送し、またＣ素子１８のｒｏ端子からのデータ転送許可信号を、Ｃ素子１５のｒｉ端子に伝える。同時に、調停回路１４のａｅｂ端子からはＣ素子１５からデータ入力があったことを示す０が出力され、セレクタ１７はこの信号０を受け取り、パイプラインレジスタ１６から入力された１ビット信号（信号値０）をＲ／Ｗ信号として次ステート関数１１９とＲＡＭ１１０へ出力する。
【００６９】
次ステート関数１１９は、このＲ／Ｗ信号（信号値０）と状態保持レジスタ１１１からのWrite Pointer（Ｗ．Ｐ．初期値０）、Read Pointer（Ｒ．Ｐ． 初期値０）、Word Count（Ｗ．Ｃ．初期値０）信号を受け取り、図１０および図１１に示す状態遷移表に基づいた演算を行う。すなわち、この場合は図１０のＣＡＳＥ（Ａ）に相当し、Ｗ．Ｐ．とＲ．Ｐ．は入力されたままの値である「０」を、Ｗ．Ｃ．は１を加算した結果である「１」を状態保持レジスタ１１１に向けて出力する。また端子ＴＨ＿ＥＭＰからは「３」、端子ＴＨ＿ＦＵＬからは２０４６が入力されているので、図１１のＣＡＳＥ（Ｊ）・（Ｍ）に相当し、ＦＵＬ信号として「０」、ＥＭＰ信号として「１」を状態保持レジスタ１１１へ出力する。これらと同時にＣ素子１８へデータ消去信号ＥＸＢとして「１」を、パイプラインレジスタ１２１へ通過データ信号ＰＡＳＳとして「１」を、そして書き込み可否データ保持レジスタ１１８へデータ書き込み許可信号ＩＥとして「１」をそれぞれ出力する。
【００７０】
Ｃ素子１８は、Ｃ素子１５のｃｏ端子からの「Ｌ」レベルパルス信号を受け取るが、ｅｘｂ端子には「Ｈ」レベル信号が入力されているので、データ消去は行わずに図１５に示すタイミングの通常のデータ転送を行う。その結果、Ｃ素子１８のｃｐ端子から「Ｈ」レベルパルス信号が出力される。この「Ｈ」レベルパルス信号を、次に挙げる４種類のレジスタおよびメモリが受け取り、動作する。すなわち、パイプラインレジスタ１２１は次ステート関数１１９からのＰＡＳＳ信号１と、パイプラインレジスタ１６が出力する３２ビットの書き込みデータ（データ値０）をラッチし、それぞれセレクタ１２０へと出力する。
【００７１】
ＲＡＭ１１０はセレクタ１７が出力するＲ／Ｗ信号０（書き込みを示す）と、次ステート関数１１９が出力するアドレス信号ＡＤＤＲ（値はＷ．Ｐ．値である０）、そしてパイプラインレジスタ１６が出力する３２ビットの書き込みデータ（データ値０）を受け取り、メモリアドレス０番地に３２ビットデータ（データ値０）を書き込む。しかしながら、このデータは次の書き込みクロックによって入力されるデータに上書きされるので意味をもたない。状態保持レジスタ１１１は、次ステート関数１１９が出力するＷ．Ｐ．／Ｒ．Ｐ．／Ｗ．Ｃ．／ＦＵＬ／ＥＭＰの５種類の値をラッチし、Ｗ．Ｐ．／Ｒ．Ｐ．／Ｗ．Ｃ．に関しては次ステート関数１１９へ出力し、ＦＵＬ／ＥＭＰに関しては端子ＦＵＬ／ＥＭＰへ出力する。書き込み可否データ保持レジスタ１１８は、次ステート関数１１９が出力するＩＥ（値１）をラッチし、端子ＲＯへ出力する。その結果、端子ＲＯからは「Ｈ」が出力され、次の書き込みクロックを受け取る準備ができたことになる（図７のＴＩＭＥ２）。
【００７２】
次に、Ｃ素子１８のｃｏ端子から「Ｌ」レベルパルス信号がＣ素子１９のｃｉ端子に入力され、Ｃ素子１９はＣ素子１８と同様、図１５に示される通常の転送動作を行う。セレクタ１２０には、ＰＡＳＳ信号１が入力されるため、パイプラインレジスタ１２１から入力される３２ビットデータ（データ値０）を選択し、パイプラインレジスタ１１２へ出力する。Ｃ素子１９は通常の転送動作により、そのｃｐ端子から「Ｈ」パルス信号を出力する。パイプラインレジスタ１１２はこの「Ｈ」レベルパルス信号を受け取り、セレクタ１２０から入力される３２ビットデータ（データ値０）をラッチし、パイプラインレジスタ１１６へ出力する。Ｃ素子１９のｃｏ端子からは「Ｌ」レベルパルス信号がＣ素子１１４のｃｉ端子に転送され、Ｃ素子１１４はＣ素子１９と同様の転送動作を行い、１個目の書き込みデータ（データ値０）をパイプラインレジスタ１１６がラッチし、パイプラインレジスタ１１７へ出力する。
【００７３】
Ｃ素子１１５のｃｉ端子は、Ｃ素子１１４のｃｏ端子からの「Ｌ」レベルパルス信号を受け、Ｃ素子１１４のｒｉ端子に「Ｌ」レベルパルス信号を出力するとともに、ｃｐ端子から「Ｈ」信号を出力する。パイプラインレジスタ１１７は、Ｃ素子１１５のｃｐ信号の立上がりにて、１個目の書き込みデータ（データ値０）をラッチして、出力端子Ｑへ出力する。また、Ｃ素子１１５のｃｏ端子からは「Ｌ」が出力される。ここまでは、Ｃ素子１９やＣ素子１１４など通常の転送動作と同様の振るまいである。しかしながら、端子ＲＣＫから読み出しクロックを入力しないので、Ｃ素子１１５のｒｉ端子は「Ｈ」レベル信号が入力され続け、ｃｐ端子からは「Ｈ」レベル信号、ｃｏ端子からは「Ｌ」レベル信号が出力されつづけた状態となる。読み出しデータ存在フラグ端子ＲＤＹからは、インバータ１１３を介してＣ素子１１５のｃｏ端子の「Ｌ」レベル信号の反転である「Ｈ」レベル信号が出力され、読み出すデータが存在することを示す（図７：ＴＩＭＥ３）。
【００７４】
したがって、書き込みクロックにより入力した１個目の書き込みデータ（データ値０）は、２段目のパイプラインにあるＲＡＭを迂回して、最終段（５段目）のパイプラインレジスタに保持された状態になる。
【００７５】
端子ＣＩからの書き込みクロックにより端子Ｄから入力された２個目の書き込みデータ（データ値１）は、図１０のＣＡＳＥ（Ｂ）に示すとおり1個目の書き込みデータと同様にＷ．Ｃ．をインクリメントし、ＲＡＭを迂回して後段のパイプラインレジスタへと転送されていく。パイプラインレジスタ１１７には１個目の書き込みデータ（データ値０）が保持されている状態なので、Ｃ素子１１４とＣ素子１１５の間でデータ転送ハンドシェイクは行われず、その結果２個目の書き込みデータ（データ値１）はパイプラインレジスタ１１６まで運ばれ、ここで保持された状態を維持することになる。
【００７６】
３個目の書き込みデータ（データ値２）からは、自己同期型ＦＩＦＯメモリ装置の動作が少し異なってくる。書き込みクロックにより、３個目のデータが端子Ｄから入力されると、次ステート関数１１９には、Ｗ．Ｃ．値「２」、Ｗ．Ｐ．値「０」、Ｒ．Ｐ．値「０」、Ｒ／Ｗ値「０」が入力されているので、図１０のＣＡＳＥ（Ｃ）に従ってＲＡＭへのアドレス値ＡＤＤＲとしてＷ．Ｐ．値「０」を、Ｃ素子１８へＥＸＢ値「０」を、書き込み可否データ保持レジスタ１１８へＩＥ値「１」を出力する。また、状態保持レジスタ１１１へＷ．Ｃ．とＷ．Ｐ．をそれぞれインクリメントした値（Ｗ．Ｃ．＝３，Ｗ．Ｐ．＝１）とＲ．Ｐ．は入力されたそのままの値「０」を出力する。
【００７７】
これらは次の書き込み要求、または読み出し要求があったときに使用されるものである。Ｃ素子１５のｃｏ端子からのデータ転送要求パルス（「Ｌ」レベルパルス信号）をＣ素子１８のｃｉ端子が受け取ると、Ｃ素子１８はｒｏ端子からデータ受け付け完了パルス（「Ｌ」レベルパルス信号）をＣ素子１５のｒｉ端子に出力するとともに、ｃｐ端子から「Ｈ」レベルパルス信号を出力する。このｃｐ端子からの「Ｈ」レベルパルス信号の立上がりにより、ＲＡＭ１１０はアドレス０番地に３２ビットデータ（データ値2）を書き込み、状態保持レジスタ１１１は次ステート関数１１９が出力しているＷ．Ｐ．／Ｒ．Ｐ．／Ｗ．Ｃ．／ＦＵＬ／ＥＭＰ信号をラッチし、書き込み可否データ保持レジスタ１１８は次ステート関数１１９から出力されるＩＥ値「１」をラッチし、端子ＲＯへ出力する。
【００７８】
Ｃ素子１８は、そのｅｘｂ端子から０（「Ｌ」信号）が入力されているので、ｃｏ端子から出力される「Ｌ」パルス信号をｒｉ端子に入力する（図５参照）。その結果、Ｃ素子１９のｃｉ端子へは「Ｌ」パルス信号を出力せず（「Ｈ」信号を出力し続け）、すなわちＣ素子１９へのデータ転送は行わず、２段目のパイプラインでデータが消去された形となる（データを消去しているが、ＲＡＭには書き込んでいる）。
【００７９】
これ以降の書き込みデータに関しても、前述の３個目のデータ書き込みと同様の動作を行う。すなわち、端子ＣＩから書き込みクロックとともに書き込みデータを入力すると、端子ＲＯから「Ｌ」レベル信号を出力して更なるデータ書き込みを禁止した上で、インクリメントされたＲＡＭの書き込みアドレスにデータを書き込み、転送データを消去し、端子ＲＯから「Ｈ」レベル信号を出力して次の書き込みデータ入力を許可する。書き込みデータ値は任意であるが、ここでは１ずつインクリメントした値を入力している。
【００８０】
なお、４個目以降のデータ書き込み時は、次ステート関数１１９の入力信号状態は図１１のＣＡＳＥ（Ｋ），（Ｍ）に相当するため、端子ＥＭＰ、端子ＦＵＬはともに「Ｌ」レベル信号を出力する（図７：ＴＩＭＥ４）。また、２０４６個目〜２０４８個目のデータ書き込み時は、次ステート関数１１９の入力信号状態は図１１のＣＡＳＥ（Ｋ），（Ｌ）に相当するため、端子ＥＭＰは「Ｌ」レベル信号、端子ＦＵＬは「Ｈ」レベル信号を出力する（図８：ＴＩＭＥ５）。
【００８１】
次に、２０４８個目の書き込みデータを入力したときのＦＩＦＯメモリ装置の動作を説明する。端子ＣＩから書き込みクロックとともに２０４８個目の書き込みデータ（データ値２０４７）を入力すると、端子ＲＯから「Ｌ」レベル信号が出力されてさらなるデータ書き込みが禁止される（図８：ＴＩＭＥ６）。図１０ＣＡＳＥ（Ｄ）に示される操作を次ステート関数１１９が行い、入力されたデータ（データ値２０４７）はＲＡＭの書き込みアドレス２０４５番地に書き込まれる。Ｃ素子１８はｅｘｂ端子に「０」を受け取るので、データ消去動作を行う。また、書き込み可否データ保持レジスタ１１８は次ステート関数１１９からＩＥ値０を受け取り、端子ＲＯへ「Ｌ」レベル信号を出力する。すなわち、更なるデータ書き込みを禁止した状態を保ち（図８：ＴＩＭＥ７）、データ数２０４８個を満杯状態に設定する。端子ＲＣＫから読み出しクロック（「Ｌ」レベルパルス信号）が入力されるまで端子ＲＯは「Ｌ」レベル信号を出力し続ける。
【００８２】
１個目のデータはパイプラインレジスタ１１７に、２個目のデータはパイプラインレジスタ１１６に、３個目のデータから２０４８個目のデータまではＲＡＭ１１０に格納された状態を満杯状態としているが、この状態から今度は２０４８個のデータすべてを読み出す動作について説明する。
【００８３】
端子ＲＣＫから１個目の読み出しクロック（「Ｌ」レベルパルス信号）を入力すると、Ｃ素子１１５のｒｉ端子に「Ｌ」レベルパルス信号が入力される。Ｃ素子１１５のｃｐ端子からは「Ｈ」レベル信号、ｃｏ端子からは「Ｌ」レベル信号が出力され続けている。すなわち、外部へのデータ転送の途中の状態でｒｉ端子に入力される「Ｌ」レベル信号により、Ｃ素子１１５のｃｐ端子は「Ｌ」レベルに立下り、ｃｏ端子は「Ｈ」レベルに立上がり、１個目のデータ読み出し（データ値０）を正常に終了する。また、端子ＲＤＹは「Ｌ」レベルに立下り（図８：ＴＩＭＥ８）、読み出しデータが最終段パイプラインレジスタ１１７に存在しないことを示す。
【００８４】
Ｃ素子１１５の端子ｒｉ（端子ＲＣＫ）からの入力が「Ｈ」レベルに立上がると、次のデータ出力が許可されたことになり、パイプラインレジスタ１１６に格納されていた２個目の書き込みデータ（データ値１）が、Ｃ素子１１５のｃｐ端子の「Ｈ」レベルへの立上がりによりパイプラインレジスタ１１７に転送され、出力端子Ｑから出力される。また、ｃｏ端子からはデータ転送中を示す「Ｌ」レベル信号を出力するため、インバータ１１３を介して端子ＲＤＹは再び「Ｈ」レベルに立上がり、最終段のパイプラインレジスタに読み出しデータが存在することを示す。
【００８５】
一方、端子ＲＣＫから入力した１個目の読み出しクロック（「Ｌ」レベルパルス信号）は、Ｃ素子１２のｃｉ端子にも入力される。これにより、Ｃ素子１２のｃｐ端子から「Ｈ」レベルパルス信号が出力され、１ビットレジスタ１３は、「１」をラッチし、セレクタ１７へ「１」を出力する。調停回路１４は端子ＲＣＫの「Ｌ」レベルパルス信号、Ｃ素子１２のｃｐ端子からの「Ｈ」レベルパルス信号を受け、Ｃ素子１２とＣ素子１８とのハンドシェイクを成立させるとともに、端子ａｅｂからは「１」を出力する。すなわち、Ｃ素子１２のｃｏ端子からのデータ転送要求信号（「Ｌ」レベルパルス信号）がＣ素子１８のｃｉ端子に入力される。セレクタ１７は１ビットレジスタ１３からの信号値「１」を選択し、Ｒ／Ｗ信号としてＲＡＭ１１０、次ステート関数１１９へ出力する。
【００８６】
次ステート関数１１９は、Ｗ．Ｐ．値「２０４５」、Ｒ．Ｐ．値０、Ｗ．Ｃ．値「２０４８」、Ｒ／Ｗ値「１」が入力されているので、図１０ＣＡＳＥ（Ｉ）に示される操作を行う。すなわち、ＲＡＭ１１０へのアドレスＡＤＤＲとしてＲ．Ｐ．値「０」を、Ｃ素子１８へＥＸＢ信号値「１」を、書き込み可否データ保持レジスタ１１８へＩＥ値「１」を、データレジスタ１２１へＰＡＳＳ信号「０」を、状態保持レジスタ１１１へＷ．Ｐ．値「２０４５」（入力値を維持）、Ｒ．Ｐ．値「１」（入力値に「１」加算）、Ｗ．Ｃ．値「２０４７」（入力値から「１」減算）を出力し、また図１１：ＣＡＳＥ（Ｏ），（Ｐ）の操作により、ＦＵＬ値「１」、ＥＭＰ値「０」を出力する。
【００８７】
Ｃ素子１８のｃｉ端子が、調停回路１４を介してＣ素子１２のｃｏ端子から「Ｌ」レベルパルス信号を受け取ると、次ステート関数１１９からｅｘｂ信号１が入力されているので、Ｃ素子１８は図１０に示されるタイミングの通常の転送動作を行う。その結果、Ｃ素子１８のｃｐ端子からは「Ｈ」レベルパルス信号が出力される。この「Ｈ」レベルパルス信号を次に示す４種類のレジスタおよびメモリが受け取り、それぞれ動作する。すなわち、ＲＡＭ１１０はセレクタ１７からのＲ／Ｗ信号値「１」（読み出し）、次ステート関数１１９からのＡＤＤＲ値「０」を受けて、０番地に格納されているデータ（３個目に書き込んだデータ）を読み出し、セレクタ１２０へ出力する。パイプラインレジスタ１２１は、次ステート関数１１９からのＰＡＳＳ値「０」をラッチし、セレクタ１２０へ出力する。状態保持レジスタ１１１は次ステート関数１１９からの５つの信号Ｗ．Ｐ．／Ｒ．Ｐ．／Ｗ．Ｃ．／ＦＵＬ／ＥＭＰをラッチし、Ｗ．Ｐ．／Ｒ．Ｐ．／Ｗ．Ｃ．を次ステート関数１１９へ、ＦＵＬ／ＥＭＰを端子ＦＵＬ、端子ＥＭＰへ出力する。書き込み可否データ保持レジスタ１１８は次ステート関数１１９からのＩＥ値「１」をラッチし、端子ＲＯへ出力する（図８：ＴＩＭＥ９）。これにより、書き込み禁止状態が解除される。
【００８８】
セレクタ１２０はパイプラインレジスタ１２１からＰＡＳＳ信号値「０」を受け取るので、０番地のメモリから読み出された３２ビットデータ（データ値「２」）を選択し、パイプラインレジスタ１１２へ出力する。パイプラインレジスタ１１７にはデータが格納されているので、メモリから読み出されたデータはＣ素子１９、１１４の転送動作によって、パイプラインレジスタ１１６まで運ばれ、パイプラインレジスタ１１６に保持された状態を維持する。
【００８９】
端子ＲＣＫから２個目の読み出しクロック（「Ｌ」レベルパルス信号）を入力したときも、自己同期型ＦＩＦＯメモリ装置は１個目の読み出しクロック入力時と同様の動作を行う。すなわち、パイプラインレジスタ１１７に保持されているデータを読み出し、パイプラインレジスタ１１６に保持されているデータをパイプラインレジスタ１１７に転送し、ＲＡＭ１１０から前に読み出したデータの次の番地に格納されているデータを読み出してパイプラインレジスタ１１６まで運び、保持する。この動作を２０４６個目の読み出しクロック入力まで繰り返す（図８および図９）。２０４６個目の読み出しクロックを入力し、データ読み出しを完了すると、ＲＡＭ１１０には読み出されるべきデータはなくなり、パイプラインレジスタ１１６，１１７に残りの読み出しデータ２個が保持された状態になっている。
【００９０】
２０４７個目の読み出しクロックを端子ＲＣＫから入力する際、端子ＲＣＫが「Ｌ」レベルに立下ることで、パイプラインレジスタ１１７に保持されているデータ（データ値２０４６）の読み出しが完了する（図９：ＴＩＭＥ１０）。また、端子ＲＣＫが「Ｈ」レベルに立上がると、パイプラインレジスタ１１６に保持されているデータ（データ値２０４７）がパイプラインレジスタ１１７に転送され、読み出しデータ存在フラグＲＤＹが立上がる（図９：ＴＩＭＥ１１）。
【００９１】
一方、Ｃ素子１２のｃｉ端子に入力される読み出しクロック（「Ｌ」レベルパルス信号）により、Ｃ素子１２はＣ素子１８とデータ転送ハンドシェイクを行うが、次ステート関数１１９が図１０のＣＡＳＥ（Ｈ）の操作を行うため、Ｃ素子１８のｅｘｂ端子には「０」が入力される。これによりＣ素子１８はデータ消去動作を行い、Ｃ素子１９以降にデータ転送を要求しなくなる。
【００９２】
２０４８個目の読み出しクロックを端子ＲＣＫから入力するときも、２０４７個目の読み出しクロックのときと同様、パイプラインレジスタ１１７に保持されているデータ（データ値２０４７）の読み出しが完了する（図９：ＴＩＭＥ１２）。これで、自己同期型ＦＩＦＯメモリ装置内に読み出すデータがなくなったので、読み出しデータ存在フラグは「Ｌ」レベルを出力し続ける。
【００９３】
一方、Ｃ素子１２のｃｉ端子に入力される読み出しクロック（「Ｌ」レベルパルス信号）により、Ｃ素子１２はＣ素子１８とデータ転送ハンドシェイクを行うが、次ステート関数１１９が図１０のＣＡＳＥ（Ｇ）の操作を行うため、Ｃ素子１８のｅｘｂ端子には０が入力される。これによりＣ素子１８はデータ消去動作を行い、Ｃ素子１９以降にデータ転送を要求しなくなる。
【００９４】
自己同期型ＦＩＦＯメモリ装置内に読み出すデータがなくなった状態において、端子ＲＣＫから読み出しクロックが入ってしまった場合でも、次ステート関数１１９が図１０のＣＡＳＥ（Ｆ）の操作を行い、Ｃ素子１８はデータ転送消去動作を行うため、間違った読み出しデータを生成してしまうといった誤動作を生じない。
【００９５】
図１に示した回路は、この発明の自己同期型ＦＩＦＯメモリ装置を実現するための一実施形態であり、図１における３段目から５段目の３つのパイプライン段を省略しても実現することは可能である。ただしその構成では、読み出しクロックを入力してから、読み出し要求は１段目パイプライン、２段目パイプラインと転送され、ようやくＲＡＭからデータが読み出されるため、読み出し時間が長くなる。したがって、入力する読み出しクロックに対するデータ出力の反応を早くするためにも、また効率的な連続データ読み出しを行うためにも、図１に示すようにＲＡＭを含むパイプライン２段目の後に、数段のデータ伝送路を配置することが望ましい。このようにすることで、次に読み出されるデータは常に最終段のパイプラインレジスタに格納された状態になるので、効率的なデータ読み出しが可能となる。
【００９６】
また、図１の例で示した書き込み／読み出しデータ幅３２ビット、ＲＡＭの大きさ２０４８ワード×３２ビットも一例に過ぎず、この値である必要はない。任意の書き込み／読み出しデータ幅、任意の大きさのメモリに対しても適用できる。
【００９７】
この発明による自己同期型ＦＩＦＯメモリ装置は、外部から入力するフルフラグ閾値（ＴＨ＿ＦＵＬ）／エンプティフラグ閾値（ＴＨ＿ＥＭＰ）を用いて、その値より自己同期型ＦＩＦＯメモリ装置内格納データ数が大きくなると、もしくは小さくなると、別途フルフラグ（ＦＵＬ）／エンプティフラグ（ＥＭＰ）を出力することができる。これを用いた応用例を次に説明する。
【００９８】
次に、従来例で説明した図１８を参照してこの発明の自己同期型ＦＩＦＯメモリ装置を利用して、非同期型データ駆動情報処理装置をＣＰＵバスとインターフェースさせた例について説明する。図１８の応用例として、例えばＤＭＡコントローラ４３が２５６個のデータ単位で、自己同期型ＦＩＦＯメモリ装置４１からメモリ４２へバースト転送させる場合を考える。
【００９９】
フルフラグ（図１ＦＵＬ）をＤＭＡコントローラ４３に接続し、フルフラグ閾値（図１ＴＨ＿ＦＵＬ）として２５６を与える。自己同期型ＦＩＦＯメモリ装置４１は、非同期型データ駆動情報処理装置３０から入力されるデータを蓄積し、蓄積しているデータ数がフルフラグ閾値である「２５６」を超えると、すなわち論理的に満杯状態であると識別されるとフルフラグ「Ｈ」レベルをＤＭＡコントローラ４３へ出力する。ＤＭＡコントローラ４３は、この「Ｈ」レベル信号を受けてバス使用権を獲得し、ＦＩＦＯに蓄積された２５６個のデータをまとめてメモリ４２へＤＭＡ転送する。この際、ＦＩＦＯ内は物理的に満杯状態ではないので、ＤＭＡ転送処理（ＦＩＦＯからのデータバースト読み出し）と平行して非同期型データ駆動情報処理装置３０からデータを受け取る（ＦＩＦＯへのデータ書き込み）ことが可能であり、システム系全体に無駄な遊び時間がなく効率的にデータ転送を行える。
【０１００】
２５６個のＤＭＡ転送（データバースト読み出し）が終了した後、ＤＭＡコントローラ４３はバス使用権を解放し、ＦＩＦＯからのフルフラグを参照する。フルフラグが「Ｌ」レベルであれば待機し、「Ｈ」レベルであれば再度、バス使用権を獲得しＤＭＡ転送処理を行う。ここでは２５６個のＤＭＡ転送処理について紹介したが、この発明による自己同期型ＦＩＦＯメモリ装置４１を用いた、より効率の良いＤＭＡ転送処理を実行させる例を次に説明する。
【０１０１】
図１８の別の応用例として、フルフラグ／エンプティフラグ（図１ＦＵＬ／ＥＭＰ）をＤＭＡコントローラに接続し、エンプティフラグ閾値（図１ＴＨ＿ＥＭＰ）を２５６、フルフラグ閾値（図１ＴＨ＿ＦＵＬ）を「１０２４」に設定した場合を考える。ＤＭＡコントローラ４３はフルフラグとして「Ｈ」レベル信号を受け取れば、バス使用権を獲得しＤＭＡ転送処理開始、エンプティフラグとして「Ｈ」レベル信号を受け取れば、バス使用権を解放しＤＭＡ転送処理終了するものとする。自己同期型ＦＩＦＯメモリ装置４１は、非同期型データ駆動情報処理装置３０から入力されるデータを蓄積し、蓄積しているデータ数がフルフラグ閾値である「１０２４」を超えると、すなわち論理的に満杯状態であると識別されると「Ｈ」レベルのフルフラグをＤＭＡコントローラ４３へ出力する。
【０１０２】
ＤＭＡコントローラ４３は、この「Ｈ」レベル信号を受けてバス使用権を獲得し、エンプティフラグとして「Ｈ」レベル信号を受け取るまで、ＦＩＦＯに蓄積されたデータ２５６個を1セットとして、少なくとも４セットをメモリへＤＭＡ転送する。少なくともというのは、データをＤＭＡ転送処理している間にも、平行して非同期型データ駆動情報処理装置３０から断続的にデータがＦＩＦＯに書き込まれているからである。たとえば、２５６個データを４セットＤＭＡ転送処理した後、エンプティフラグとして「Ｈ」レベル信号がＦＩＦＯからＤＭＡコントローラ４３へ入力されると、ＤＭＡコントローラ４３はバス使用権を解放しＤＭＡ転送処理を終了させる。
【０１０３】
このようにこの応用例では、２５６個のデータ単位（１セット）でＤＭＡ転送させるためにエンプティフラグ閾値として「２５６」を、少なくとも４セット以上をまとめてＤＭＡ転送させるためにフルフラグ閾値として「１０２４」を設定することで、２５６個のデータをＤＭＡ転送させるごとにバス使用権を獲得している前の例よりも、バス使用権獲得、解放する回数を減らすことができ、バス使用権獲得、解放にかかる時間（オーバーヘッドタイム）が少ないより効率的なＤＭＡ転送（バースト転送）が行える。
【０１０４】
図１２は非同期型データ駆動情報処理装置内の1つのプロセッサｎＰＥ内で、この発明の自己同期型ＦＩＦＯメモリ装置をデータの緩衝を目的としたキューバッファの役割として利用した例である。非同期型データ駆動情報処理装置内のプロセッサｎＰＥは、ＣＳＴ，ＦＣ，ＦＰ，ＰＳ といった各々異なる機能ブロックがリング状に接続された構成をしており、リングに入力されたデータはリングを一周する間に1つの演算処理が行われる。データが次々に入力された結果、リング内にデータが詰まった状態（満杯状態）になり、リング内のすべてのデータ転送が停止するといった事態が生じるおそれがある。ここで用いた自己同期型ＦＩＦＯメモリ装置により、リング内を転送されるデータの許容数を上げ、データ処理が停止される事態を回避できる。
【０１０５】
次の応用例として従来例で説明した図１９を参照して、効率的なデータ転送を目的としたこの発明の自己同期型ＦＩＦＯメモリ装置を利用して、ＣＰＵ、メモリ１、入出力インターフェース、ローカルバス（内部バス）から構成されるメディアプロセッサを外部のＰＣＩバスと接続した例について説明する。
【０１０６】
入出力インターフェース５３にこの発明の自己同期型ＦＩＦＯメモリ装置を使用し、書き込みデータ単位６４個のバースト書き込み、読み出しデータ単位２５６個のバースト読み出しを行うシステム例について説明する。
【０１０７】
自己同期型ＦＩＦＯメモリ装置（図１）のフルフラグ（図１のＦＵＬ信号）をＣＰＵ５１に、エンプティフラグ（図１のＥＭＰ信号）をＤＭＡコントローラ５７に接続し、ともに「Ｌ」アクティブとし、ＦＵＬ信号、ＥＭＰ信号が「Ｌ」レベルの場合に、バースト書き込み／バースト読み出しを実行するものとする。フルフラグ閾値（図１のＴＨ＿ＦＵＬ端子）から「１９８０」を、エンプティフラグ閾値（図１のＴＨ＿ＥＭＰ端子）から２６０をＦＩＦＯに与える。
【０１０８】
メディアプロセッサ５０で大量のデータが処理され、メモリ５２には大量のデータが格納されており、自己同期型ＦＩＦＯメモリ装置５４内には格納データがない空状態であるとする。このとき、ＦＩＦＯ内データ数は「０」であり、ＴＨ＿ＦＵＬ値「１９８０」、ＴＨ＿ＥＭＰ値「２６０」よりも小さいため、ＦＩＦＯから「Ｌ」レベルのＦＵＬ信号がＣＰＵへ、「Ｈ］レベルのＥＭＰ信号がＤＭＡコントローラ５７へ出力される。ＣＰＵ５１はこの「Ｌ」レベルのＦＵＬ信号を受け、メモリ５２からＦＩＦＯへの６４個単位のバースト書き込みを開始する。
【０１０９】
ＦＩＦＯ内データ数が２６０より大きくなると、ＦＩＦＯから出力されるＥＭＰ信号が「Ｌ」レベルになり、ＤＭＡコントローラ５７はこれを受け、ＦＩＦＯからメモリ５６への２５６個単位のバースト読み出しを開始する。この際、ＦＩＦＯから出力されるＦＵＬ信号は「Ｌ」レベルであるため、引き続き６４個単位のバースト読み出しを実行している。ＦＩＦＯ内格納データ数が「１９８０」より大きくなると、ＦＩＦＯから「Ｈ」レベルのＦＵＬ信号と、「Ｌ」レベルのＥＭＰ信号とが出力され、メモリ５２からＦＩＦＯへのバースト書き込みは停止される。ＦＩＦＯからメモリ５６へのバースト読み出しは引き続き実行される。
【０１１０】
このように、この発明によるＦＩＦＯ装置は、異なるデータ単位のバースト書き込みとバースト読み出しに対応でき、さらにＦＩＦＯ内格納データ数が、設定した２種類のフルフラグ閾値／エンプティフラグ閾値の間であれば、バースト書き込みとバースト読み出しを同時に実行できる。
【０１１１】
上述の実施形態では、自己同期型ＦＩＦＯメモリ装置が満杯状態（書き込み禁止状態）であるとき、１個目の読み出しクロック（「Ｌ」パルス信号）の入力直後、すなわちＲＣＫの立上がりから、書き込み禁止状態が解除されるまで、すなわちＲＯの立上がりまで、約２．３ｎｓである。これは従来技術で紹介した自己同期型ＦＩＦＯ回路（データ伝送路を２０４８個直列に接続した回路）の２００倍以上早い反応である。なお、書き込み／読み出しクロックの周期は３０ｎｓである。
【０１１２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１１３】
【発明の効果】
以上のように、この発明によれば、大容量のデータ格納を所定段数のパイプラインで構成しているため、読み出しデータ存在フラグＲＤＹと書き込みデータ許可フラグＲＯ信号の伝播遅延を小さくでき、その結果、非同期で独立に入力される書き込み／読み出し要求に対して、正確な書き込み／読み出し動作を実現できる。特に自己同期型ＦＩＦＯメモリ装置内が空状態でなくなる、自己同期型ＦＩＦＯメモリ装置内が満杯状態でなくなるといった、ＲＤＹもしくはＲＯの信号が変化するようなクリティカルな状態でも正常な動作を保証できる。
【０１１４】
また、回路規模としては従来の自己同期型ＦＩＦＯ回路の半分以下で構成できる。
【０１１５】
この発明の自己同期型ＦＩＦＯメモリ装置は、自己同期型ハンドシェイク方式のデータ転送回路の技術を使って構成しているので、自己同期型ハンドシェイク方式の特徴である処理されるデータが入力されないときは動作をしない、すなわち無駄な消費電力を消費しないという利点を継承しつつ、先に述べた課題を解決できるものである。
【０１１６】
また、この発明の自己同期型ＦＩＦＯメモリ装置は、Word Count（＝Ｗ．Ｃ．）レジスタによってＦＩＦＯ装置内の正確なデータ数をカウントしており、外部から入力するフルフラグ閾値（ＴＨ＿ＦＵＬ）／エンプティフラグ閾値（ＴＨ＿ＥＭＰ）を用いたフル／エンプティ判定が可能である。この判定により出力されたフルフラグ（ＦＵＬ）／エンプティフラグ（ＥＭＰ）を利用することで、データのバースト書き込み／バースト読み出しを平行に処理できる。
【０１１７】
この発明の自己同期型ＦＩＦＯメモリ装置は、図１２，図１８および図１９の応用例で示したように、様々なシステム間のインターフェースとして容易に挿入でき、比較的回路規模の小さい、大容量のデータを格納できる自己同期型ＦＩＦＯメモリ装置であり、自己同期型ＦＩＦＯメモリ装置内の正確なデータ数を把握して確実な連続アクセスを保証し、アクセス効率の高い自己同期型ＦＩＦＯメモリ装置を実現できる。
【図面の簡単な説明】
【図１】  この発明に係る自己同期型ＦＩＦＯメモリ装置の回路図である。
【図２】  図１の自己同期型ＦＩＦＯメモリ装置を含むシステムのブロック図である。
【図３】  図１のＣ素子の構成を示すブロック図である。
【図４】  図１の合流回路の構成を示すブロック図である。
【図５】  図１に適用される自己同期型転送制御回路の回路図の一例を示す図である。
【図６】  図１に適用される調停回路（ａｒｂ）の回路図の一例を示す図である。
【図７】  図１の自己同期型ＦＩＦＯメモリ装置のタイミングチャートで、データ書き込みを始める部分である。
【図８】  図１の自己同期型ＦＩＦＯメモリ装置のタイミングチャートで、データ書き込みで自己同期型ＦＩＦＯメモリ装置が格納データ満杯状態になる部分である。
【図９】  図１の自己同期型ＦＩＦＯメモリ装置のタイミングチャートで、データ読み出しで自己同期型ＦＩＦＯメモリ装置が格納データ空状態になる部分である。
【図１０】  図１の次ステート関数の動作を示す状態遷移表である。
【図１１】  図１の次ステート関数の動作を示す状態遷移表である。
【図１２】  この発明に係る自己同期型ＦＩＦＯメモリ装置の利用例を示すブロック図である。
【図１３】  自己同期型データ伝送路を縦列に接続した従来のＦＩＦＯメモリ装置の構成を示す図である。
【図１４】  従来およびこの発明の実施の形態に適用される自己同期型転送制御回路（Ｃ素子）の回路図の一例を示す図である。
【図１５】  図１４の自己同期型転送制御回路（Ｃ素子）のタイミングチャートの一例を示す図である。
【図１６】  自己同期型データ伝送路を縦列に接続した従来の自己同期型ＦＩＦＯ装置の構成を示す図である。
【図１７】  図１６の自己同期型ＦＩＦＯ装置のタイミングチャートの一例を示す図である。
【図１８】  自己同期型ＦＩＦＯメモリ装置の利用例を示す図である。
【図１９】  自己同期型ＦＩＦＯメモリ装置の他の利用例を示す図である。
【図２０】  従来の非同期式ＦＩＦＯバッファ装置のブロック図である。
【図２１】  従来の非同期ＦＩＦＯ回路を示す図である。
【符号の説明】
１１  合流回路、１２，１５，１８，１９，８４，８５，８６，１１４，１１５  Ｃ素子、１３，１６，８１，８２，８３，１１１，１１２，１１６，１１７，１２１  パイプラインレジスタ（Ｄタイプフリップフロップ）、１４  調停回路、１７，１２０  セレクタ、２１  自己同期型ＦＩＦＯメモリ装置、２２  第１の外部装置、２３  第２の外部装置、２４  データ伝送路、２５  書き込みクロック、２６  読み出しデータ存在フラグ、２７  読み出しクロック、２８  書き込み可能フラグ、９１  ＣＩ信号端子、９２  ＲＯ信号端子、９３  ＣＰ信号端子、９４  ＣＯ信号端子、９５  ＲＩ信号端子、９６，９８  ＲＳフリップフロップ、９７  ４入力ＮＡＮＤゲート、１１０  ＲＡＭ、１１１  状態保持レジスタ、１１３  インバータ、１１８  書き込み可否データ保持レジスタ、１１９次ステート関数、１１−１，１１−２，１１−３，１２−１，１２−６，１２−７，１２−８  ＣＩ入力信号、１２−２，１２−９，１２−１２  ＲＯ出力信号、１２−３，１２−１１，１２−１３，１２−１５  ＣＯ出力信号、１２−５，１２−１０，１２−１４  ＲＩ入力信号、１２−４  Ｑ出力信号。
【図１】
0004060097.tif 000002
【図２】
0004060097.tif 000003
【図３】
0004060097.tif 000004
【図４】
0004060097.tif 000005
【図５】
0004060097.tif 000006
【図６】
0004060097.tif 000007
【図７】
0004060097.tif 000008
【図８】
0004060097.tif 000009
【図９】
0004060097.tif 000010
【図１０】
0004060097.tif 000011
【図１１】
0004060097.tif 000012
【図１２】
0004060097.tif 000013
【図１３】
0004060097.tif 000014
【図１４】
0004060097.tif 000015
【図１５】
0004060097.tif 000016
【図１６】
0004060097.tif 000017
【図１７】
0004060097.tif 000018
【図１８】
0004060097.tif 000019
【図１９】
0004060097.tif 000020
【図２０】
0004060097.tif 000021
【図２１】
0004060097.tif 000022