(57)【特許請求の範囲】
【請求項１】
（ａ）  メモリを第１数の大ブロックに分割し、
（ｂ）  少なくとも１つの該大ブロックを第２数の小ブロックに分割し、
（ｃ）  残りの前記大ブロックの各々を少なくとも１つの前記小ブロックと関連させ、
（ｄ）  関連させられた大および小ブロックの各々を１つのポインタによりアドレス指定する、
ことを特徴とするバッファ区分化方法。
【請求項２】
第１数が第２数と等しいことを特徴とする請求の範囲１に記載の方法。
【請求項３】
残りの大バッファの各々が１つの小バッファと関連させられることを特徴とする請求の範囲２に記載の方法。
【請求項４】
さらに、小バッファと大バッファとの間の切換えを行うためにポインタの一部をシフトすることを特徴とする請求の範囲３に記載の方法。
【請求項５】
大バッファの各々が同じバイト数を有し、小バッファの各々が同じバイト数を有することを特徴とする請求の範囲３に記載の方法。
【請求項６】
第１数が64の倍数である整数であることを特徴とする請求の範囲２に記載の方法。
【請求項７】
（ａ）  メモリを複数の大ブロックに分割し、
（ｂ）  少なくとも１つの該大ブロックを複数の小ブロックに分割し、
（ｃ）  残りの前記大ブロックの各々を少なくとも１つの前記小ブロックと関連させ、
（ｄ）  関連させられた大および小ブロックの各々を１つのポインタによりアドレス指定する、
ことを特徴とするバッファ区分化方法。
【請求項８】
（ａ）  メモリモジュールを第１数の大バッファに分割し、
（ｂ）  少なくとも１つの該大バッファを第２数の小バッファに分割し、
（ｃ）  前記メモリモジュール内の残りの前記大バッファを前記メモリモジュール内の少なくとも１つの前記小バッファと関連させ、
（ｄ）  関連させられた大および小バッファの各々を１つのポインタによりアドレス指定する、
ことを特徴とするメモリ分割方法。
【請求項９】
前記大バッファの１つのみが第２数の前記小バッファに分割されることを特徴とする請求の範囲８に記載の方法。
【請求項１０】
第１数が第２数に等しいことを特徴とする請求の範囲９に記載の方法。
【請求項１１】
さらに、前記メモリに新しいメモリモジュールを追加し、該新しいメモリモジュールをそれまでのメモリモジュールと同じ方法で区分化することを特徴とする請求の範囲８に記載の方法。
【請求項１２】
（ａ）  第１数の大ブロックに分割されているメモリであって、少なくとも１つの該大ブロックは第２数の小ブロックに分割されており、残りの前記大ブロックの各々は少なくとも１つの前記小ブロックに関連させられているメモリと、
（ｂ）  関連させられた大および小ブロックの各々が１つのバッファポインタによりアドレス指定される複数のバッファポインタと、
を有することを特徴とするバッファ。
【請求項１３】
第１数が第２数に等しいことを特徴とする請求の範囲12に記載のバッファ。
【請求項１４】
前記小バッファのメモリアドレスは前記大バッファのメモリアドレスの一部をシフトしたものであることを特徴とする請求の範囲13に記載のバッファ。
【請求項１５】
大バッファの各々が同じバイト数を有し、小バッファの各々が同じバイト数を有することを特徴とする請求の範囲13に記載のバッファ。
【請求項１６】
（ａ）  第１および第２送信レジスタと、
（ｂ）  第１および第２受信レジスタと、
（ｃ）  バッファポインタのリストを記憶するための先入れ先出しメモリと、
（ｄ）  ソースレジスタからバッファポインタを戻し、バッファポインタを該ソースレジスタから前記先入れ先出しメモリへ転送するための制御論理と、
（ｅ）  バッファポインタが第１送信バッファレジスタまたは第１受信バッファレジスタへ戻される場合に信号を起こすが、バッファポインタが第２送信バッファレジスタまたは第２受信バッファレジスタへ戻される場合には信号を起こさない手段とを有することを特徴とするバッファ制御装置。
【請求項１７】
さらに、前記リストからバッファポインタを除く手段を有することを特徴とする請求の範囲13に記載の装置。
【請求項１８】
さらに、信号が起こされる度に増加するカウンタを有することを特徴とする請求の範囲13に記載の装置。
【請求項１９】
（ａ）  第１数の大バッファに分割されているメモリであって、少なくとも１つの該大バッファは第２数の小バッファに分割されており、残りの前記大バッファの各々は少なくとも１つの前記小バッファに関連させられているメモリと、
（ｂ）  関連させられた大および小バッファの各々が１つのバッファポインタによりアドレス指定される複数のバッファポインタと、
（ｃ）  第１および第２送信レジスタと、
（ｄ）  第１および第２受信レジスタと、
（ｅ）  バッファポインタのリストを記憶するための先入れ先出しメモリと、
（ｆ）  ソースレジスタからバッファポインタを戻し、バッファポインタを該ソースレジスタから前記先入れ先出しメモリへ転送するための制御論理と、
（ｇ）  バッファポインタが第１送信バッファレジスタまたは第１受信バッファレジスタへ戻される場合に信号を起こすが、バッファポインタが第２送信バッファレジスタまたは第２受信バッファレジスタへ戻される場合には信号を起こさない手段とを有することを特徴とする装置。
【発明の詳細な説明】
発明の背景
1.  産業上の利用分野
本発明はメモリの区分化に関するものであり、さらに詳細には、プロトコルの送受信に使用するためのメモリのバッファ対への区分化に関するものである。
2.  関連技術の説明
コンピュータシステムは多くの場合、システムの通信コンポ−ネント間に設置されたメモリを含んでいる。このメモリは、送信、受信、またはコンポ−ネントの処理速度における差を補正する。メモリがデータを記憶するため、速度の遅いコンポ−ネントを圧倒することなく、また速度の早いコンポ−ネントを他のタスクに使用することができる。さらに、メモリは適切な受信コンポ−ネントにデータを送るスイッチボードの役割を果たす。各送信コンポ−ネントはメモリ内にメッセージを設置することができるため、メモリの制御回路がメッセージ内のアドレスヘッダを読出し、どのコンポ−ネントがメッセージを受信するかを決定することができる。
多くの場合メモリは、コンポ−ネント間のデータ転送を容易にするためにブロックまたはバッファに区分化される。区分化の主な利点は、各バッファがメッセージを１つ（または１つの一部）だけ含み、これがメモリ制御プログラムの速度を加速させる。さらに、多くの通信プロトコルにおいて、各メッセージはフレームサイズと呼ばれる最大の長さを有している。バッファのサイズをこのフレームのサイズと等しくすることにより各メッセージがバッファを１つだけ使用し、さらに速度の増加が可能になる。
メモリをバッファに区分化する従来の方法は、ブロックを等しいサイズの複数のバッファに分割するものであった。バッファの数とサイズの数は一般に２の累乗である。例えば、32キロバイトのメモリブロックを16キロバイトのブロック要素の２つのバッファ、８キロバイトのブロック要素の４つのバッファ、４キロバイトのブロック要素の８つのバッファ等に区分化することができる。各バッファはコンピュータシステムのコンポ−ネント間の転送のためのデータユニットを一時的に保持するために使用される。
転送されたデータブロックの一般的なサイズがブロック要素よりも僅かに大きいだけで、データ転送におけるメモリの使用上の問題が起きてしまう。例えば、各バッファが2048バイトであり、一般の転送が2072バイトである場合、第２バッファにさらに24バイトを追加する必要がある。また、ブロック要素は２つの要素により4096バイトに増加することができる。どちらの場合においても、使用可能なメモリの重要部分が無駄にされている。
この非効率的なメモリ使用上の問題は、データへの制御情報の追加のためにデータ転送システムにおいては一般的である。第１図および第２図に示すように、通常データはパケット30でコンピュータシステム10のコンポ−ネント間で転送される。コンピュータシステム10は典型的には、コンピュータ、プリンタ、サーバといった、ローカルエリアネットワーク15によってリンクしているノード12を含んでいる。ローカルエリアネットワーク（LAN）15は、それ自体ワイドエリアネットワーク（WAN）17によってリンクされていても良い。さらに、各コンピュータ20は、通信リンク25を介してディスクドライブまたは他の周辺コンポ−ネントのような装置22に接続されている。通信リンク25は、SCSIまたは周辺コンポ−ネント相互結合（PCI）といった類似するインターフェースであることができる。各装置22は、バスインターフェースユニット（BIU）27によって、通信リンク25に接続される。
典型的なパケット30はデータ部分32、ヘッダ34、トレーラ36を含んでいる。ヘッダ34はデータ32の発信元と宛先を識別し、また他の制御情報を含むことができる。特定のデータ転送のエンドポイント（即ち、発信元と宛先）は、効率的なメモリ記憶を確実にするために効率的なブロック要素を使用する傾向がある。パケット30がコンピュータシステム10内に転送される度に、追加情報がヘッダ34に追加される。
データパケット30がデータ転送のエンドポイント間のバッファ内に記憶される際に、３つの問題がある。第１の問題は、ヘッダ34がデータ32に追加されるため、パケット全体が効率的で統括的なブロック要素を有することができないことである。そのため、上述したメモリ使用の問題が起こり易い。第２の問題は、バッファからパケットデータの複数のブロックを転送する際に、ヘッダ34にあっていくつかの干渉する制御情報が読飛ばされなければならないことである。このため、直接メモリアクセス（DMA）状態機械が新規のバッファ転送の各々において再び初期化設定される必要がある際等に、非効率を引き起こす。データパケット30が同じリンク25に接続した装置22間で転送されても、あるいはWAN17によって接続されたホスト間で転送されてもバッファの非効率的使用が発生する。
メモリブロックは、データ転送目的のため関連情報を保持するバッファの対に分割される。バッファ間のリンクを確実にし、処理を簡易化するために、１つのアドレスを使用してバッファの対を参照することが望ましい。バッファの対をアドレス指定する一般的な方法としてルックアップテーブルを使用するものであるが、これにはソフトウェアの介入が必要である。別の方法として、バッファＮが制御情報を保持し、バッファＮ＋１がデータを保持する、連続アクセスルールを使用するものがあるが、これには同一サイズの２つのバッファが必要である。また別の方法として、１つのバッファ内で制御情報とデータを連結して、制御情報から既知のオフセット位置からデータがスタートするという方法ものがあるが、これには非効率的なオーバーサイズのバッファが必要である。上述した方法のいくつかにおいては、１つのメモリコンポ−ネントの追加がアドレス指定スキームの機器再構成を要するという問題もある。
分割バッファに可変長アドレス指定を割当てる最も単純な方法は、最小構成における２つのバッファセット間にアドレスギャップを設けるものであるため、バッファ対をリンクするハードウェアベースの構造は物理的に別々のメモリを要する。
前述の説明を考慮し、本発明の目的は、データを保持する大バッファと、制御情報を保持する少なくとも１つの関連する小バッファとの分離バッファ対をサポートするメモリを区分化する単純な方法を提供することである。
本発明の別の目的は、そのような分割バッファ対を１つのアドレスでアドレス指定することである。
本発明のさらなる目的は、メモリは、各メモリブロックが第１ブロックと同一の区分を有して可変長であり、また１つのメモリコンポ−ネントの追加によってトータルメモリを容易に増加することができる分割バッファモデルを提供することである。
本発明のさらなる目的は、使用可能な分割バッファを管理する先入れ先出し装置を提供することである。
本発明はこれらの要求を満たすものである。
発明の概要
本発明はメモリを区分化するためのものである。詳細には、メモリは大バッファに分割される。分割された１つまたはそれ以上の大バッファは小バッファに分割される。残りの大バッファの各々は少なくとも１つの小バッファと関連し、関連するバッファは１つのアドレスによってアドレス指定される。
好ましい実施例においては、大バッファと小バッファの数は同じであり、各大バッファは厳密に１つの小バッファと対を成す。
本発明の好ましい実施例の詳細は、添付の図面と後述する説明によって述べられている。本発明の説明を理解すれば、追加の改良および変更が当業者に明らかになるであろう。
【図面の簡単な説明】
第１図は典型的な従来のコンピュータシステムを示すブロック図である。
第２図は、コンピュータシステムのコンポ−ネント間で転送される従来のパケットを示す略図である。
第３図は、フレームバッファ間のデータフロー、状態機械、バスインターフェースユニット、通信リンクを示すブロック図である。
第４図は、本発明によって区分化されたメモリの略図である。
第５図は好ましい区分を示す略図である。
第６図はフリーバッファプールの実現を示すブロック図である。
同じ要素を示す参照番号および名称については、全図面を通して同一のものを使用している。
発明の詳細な説明
本発明を通じ、ここで示す好ましい実施例および例は本発明を限定するものというよりは模範として考慮されるべきである。
第３図は本発明が有利に使用されるシステムの例を示すものである。データパケットが、バスインターフェースユニット（BIU）27といったコンピュータシステムのコンポ−ネントと通信リンクエンコーダ／デコーダ（ENDEC）28といった別のコンポ−ネントとの間で転送される。メモリ45がBIU27とENDEC28との間（即ちこの２つのデータパスにおいて）に設置されており、フレームバッファ40に分割されている。メモリ45はアクセス時間が早く、RAMであることが好ましい。典型的なデータ転送において、データは送信コンポ−ネントからフレームバッファ40へと転送され、次にフレームバッファ40から受信コンポ−ネントへと転送される。このように、メモリ45内のフレームバッファ40は、BIU27とENDEC28間を通過するデータを記憶するための一時的な記憶装置として使用される。
第１図の各リンク25（またはノード20）は、典型的には複数の状態機械を含むマイクロプロセッサを備えており、これは第３図に非常に詳細に示されている。一般に、ソフトウェアまたはハードウェアであるこれらの状態機械は、従来の方法により実現することができる。BIU27がデータを転送する際、状態機械TXBIUSM50がBIU27から転送フレームバッファ47へとデータを転送し、また状態機械TXFSM51が転送フレームバッファ47からENDEC28へとデータを転送する。BIU27がデータを受信すると、状態機械RXQSM53がENDEC28から受信フレームバッファ48へとデータを転送し、また状態機械RXBIUSM54が受信フレームバッファ48からBIU27へとデータを転送する。状態機械FC2エンジン47は転送プロトコル及びより低レベルの状態機械を管理する。
ARMSM56で示されたRISCマイクロプロセッサは、好ましくは語の境界にあるバッファ40の内容にアクセスする。RISCプロセッサARMSM56はホストと本発明システムとの間のインターフェースを管理する。ARMSM56は、制御および初期化の目的で全ての状態機械とバッファRAMにアクセスする一方で、バッファと状態機械との間のデータ転送には直接関係しない。
本発明によるバッファメモリ45の分割を第４図に示す。初期化の最中にメモリ45がブロックアレイ60に区分化される。１つまたはそれ以上のブロック60が、さらにサブブロック65に区分化される。サブブロック65の各々は独立したワード66で構成されている。
ブロック63で示されるように残りのブロック60は分割されない。好ましい実施例において、メモリ45が区分化され、合計ｎ個のサブブロック65とｎ個のブロック60ができる。このため、各サブブロック65はブロック60の1/nのサイズである（再区分化されたブロック60に等しい数の非関連サブブロック65の過剰数ｍがあることに注意のこと）。残りのブロック63各々は、サブブロック65の１つと１対１対応に関連させられて、フレームバッファ40を形成する。このように、区分化がｎ−ｍフレームバッファ40を生じ、各フレームバッファ40は大バッファ67（残りのブロック63）と小バッファ68（サブブロック65）を含む。
当然、他の区分化も可能である。例えば、ブロック60とサブブロック65の数が等しくなくても良い。例えば、サブブロックの数がブロック60の２倍であっても良く、この場合、各フレームバッファ50は単一の大バッファ67と２つの小バッファ68を含むことができる。しかしながら、好ましい区分化によれば、１つのアドレスによって各フレームバッファ40がアクセスされることができる。
メモリ45は複数のメモリモジュール70を備えていても良い。各メモリモジュール70には、例えば市販の128キロバイトチップを使用することができる。後述の説明にもあるように、メモリ45が区分化されるため、区分化スキームを変更することなくメモリモジュール70を追加することができる。詳細には、各モジュール70が設定された数のブロック60に分割され、各モジュール70内の１つのみのブロック62がさらにサブブロック65に分割される。このように、追加モジュールの各々がそれまでのモジュールと同様の区分を有する。
本発明を実行するための特に好ましい実施例を第５図に示す。各モジュール80は64ブロックに分割される。各ブロックは例えば512  32ビットワードの同サイズであるが、各ブロックのサイズはメモリ45のトータルサイズとモジュールの数に依存することができる。例えば、128キロバイトモジュール80の各々は、mod−512ワード（2048バイト）境界にアドレス指定された64のブロックに分割されることができる。ブロックのメモリロケーションの上段（アッパ−）８アドレスビットを使用してブロックにバッファポインタ（BPTR）を割当てることにより、ブロックがアドレス指定される。
ブロック80のいくつかは、ヘッダブロック82またはED_TOVタイマーエンジンバッファ84として使用するために割当てられる。残りのブロック84は、データ32を記憶するためのペイロードバッファ86としての使用が可能である。好ましくは、各メモリブロック内の第１バッファはフレームヘッダバッファエリア62として使用され、第１メモリブロック内の第２バッファはタイマーエンジンバッファエリア66として使用される。
各ペイロードバッファは512語長（2048バイト）であることが好ましい。各ヘッダブロック82は、小ヘッダバッファ88にさらに分割されてヘッダ34およびトレーラ36からの制御情報を記憶する。ヘッダバッファエリア82は、各々が８語（32バイト）の長さである、64のより小さなバッファ88に分割されることが好ましい。
好ましい実施例において、ブロックの数は、メモリ45のサイズにより合計で64、128、192、256であることができる。モジュール80が４つで合計256のブロックと256のヘッダバッファが存在する。しかしながら、各モジュール80を64よりも少なくまたは多く分割することができる。メモリ45は２の累乗の数のブロックに分割されることが好ましい。これによりペイロードバッファ86およびヘッダバッファ88に、簡単なシフト操作で変更される１つのアドレスによってアクセスできるようになり、複雑なアドレスALUの必要がなくなる。
各大ペイロードバッファ86は対応する小ヘッダバッファ88と関連している。メモリ45が物理的に「分割」されていても、大および小バッファは論理的に結合しており、１つのフレームバッファ40としてアドレス指定されることができる。単にバッファポインタをシフトするだけで、各小バッファ88と大バッファ86のアドレス指定の間の交換が行われる。好ましい実施例において、メモリ45は公称の32ビットアドレスによってアドレス指定可能であるが、各アドレスは好ましい実施例における下位の20ビットしか使用しない（上位の12ビットは固定している）。20ビットの内の上位の８ビットはバッファポインタとして働き、下位の12ビットは大バッファ86のオフセット値として働く（小バッファ88は、下位の12ビットの内３ビットをオフセット値として使用する）
大バッファ86内の第１語は、各ポインタを表現する上位８ビットをペイロードメモリアドレス語の上位８ビットに置き、残りのビットをゼロにすることでアクセス可能である。小バッファ88の第１語は、各大バッファポインタを表現する８ビットの上位２ビットをヘッダメモリアドレス語の最も上位のビット位置に置き、次の６ビットをゼロに設置し、次にポインタの残りの６ビットを、ゼロに設定した６ビットの後に置き、残りのビットをゼロにすることでアクセスが可能である。このように、２ビットをコピーし、次の６ビットを右にシフトするだけで、ヘッダバッファ88のアドレスをペイロードバッファ86から容易に引き出すことができる。このアドレス指定スキームの例を下に示す。
0003641675.tif 000002
状態機械50−57は、各パケットからヘッダ34およびトレーラ36内の制御状態をストリップし、これを小バッファ88に記憶し、一方で関連データ32を関連する大バッファ82に記憶する。特に、要求状態機械はバッファプールから１つのアドレスポインタを受信することができる。次に状態機械は、従来のプロトコルによって制御情報とペイロードを分け、アドレスによって表示されたペイロードバッファにデータを記憶する。そして状態機械はアドレスを上述した通りに計算し、制御情報をそのアドレスに記憶する。
データ転送プロトコルが固定サイズのペイロード32を送ると、メモリブロック要素がペイロードのサイズと等しく設定されるため、ペイロードがメモリ45に効率的にパックされる。例えばペイロードが2nバイトの場合、各ペイロードバッファのサイズを2nバイトにでき、これはディスクとネットワークトラフィックにとってさらに効率的である。
本発明による好ましいアドレス指定スキームの結果として、メモリのトータルサイズは増加に可変で、好ましくは128キロバイトである。メモリを追加すると、ペイロードバッファ86とヘッダバッファ82の両方がメモリブロック区分の一部として追加される。このように、可変長最小構造バッファシステムは、１つのメモリコンポ−ネントで構成できる。そして、そのシステムは追加メモリモジュールで拡張することができる。
好ましい区分フォーマットを以下に示す表に要約する。
0003641675.tif 000003
バッファの対は、第６図に示すフリーバッファ制御システム100の使用により管理される。制御システム100は先入れ先出し（FIFO）記憶ユニット110を含む。FIFOユニット110は、使用可能なバッファを表示するバッファポインタ114のリスト112を記憶する。状態機械の１つまたはRISCマイクロプロセッサが送信または受信するデータを有する場合、バッファは、リスト112の最高部からポインタ114aを除き、それを割当てることにより割当てられる。状態機械またはRISCマイクロプロセッサがタスクを完了すると、バッファは解放され、リスト112の最低部にポインタ114bを追加することでバッファプールへと戻される。制御システム100はバッファを浮動プールとして扱い、状態機械またはマイクロプロセッサにバッファがオンデマンドベースで供給され、任意の順位においてプールに戻される。
初期化設定において、フレームバッファ40と対応するポインタはFIFOユニット110内にロードされる。第５図に示す実施例において、ヘッダバッファ88と整合し得るペイロードバッファ86と対応するポインタBPTR2−63、65−127、129−191、及び193−255がFIFOユニット110にロードされる。このようにしてリスト112は合計251のフレームバッファを含む。
第６図において、FIFOユニット110はハードウェア装置であることが好ましい。FIFOユニット110はソフトウェアで実行できるが、ソフトウェアはハードウェアよりも速度が遅く、バッファの状態を決定するメモリサイクルを必要とするため好ましくない。ハードウェアでの実行において、FIFOは読出しと書込みの両方が同時にできる（即ちデュアルポート）。好ましい実施例において、FIFOユニット110は256  ８ビットポインタを記憶できるが、サイズはいかなるサイズでも良い。
実施例において、FIFOユニット110の処理はライン116、117の各々からのFIFO110へのREAD、WRITEコマンドによって実行される。READコマンドはバッファポインタ114aをバッファプールの最高部から除き、読出し操作を実行する装置へと割当てる。FIFO110へのWRITEコマンドはバッファポインタ114bをプールの最低部に戻す。状態機械とRISCマイクロプロセッサの両方はFIFO110の読出しと書込みができる。
実施例において、READ、WRITEコマンドが、制御論理120によってFIFOユニット110に出される。制御論理120はクロック信号122によって時間決めされ、リセット信号123によってリスタートされる。制御論理120は、FIFOユニット110へのコマンド発行を要求する状態機械またはRISCマイクロプロセッサを認識する信号125を受信し、信号127によって要求に応答する。
実施例において、RISCマイクロプロセッサは制御システム100を１つのセットのREAD/WRITEレジスタとして扱い、RISCマイクロプロセッサによる読出しまたは書込みのいかなるコマンドも２つのクロックサイクルで実行され、FIFOユニット110が空であってもRISCマイクロプロセッサによる要求は常に応答される。しかしながら、全てのRISCREAD要求は読出しデータペイロードに送られた「空き」状態によって処理される。
実施例において、状態機械からのREAD、WRITE要求に対しては応答前に仲介が入る。状態機械によるREAD、WRITEの要求は、FIFOユニット110に使用可能なバッファができるまで制御論理120によって認識されない。これにより各要求をした状態機械が、認識された際に、有効なバッファポインタを確実に受信する。状態機械は、その実行前の要求が認識されるまでは処理を継続することができないように構成されていることが好ましい。
リスト112内のバッファは、BIU27によって送信されるデータを記憶する送信バッファとして、また通信リンク28から受信されるデータを記憶する受信バッファとして使用されることが可能である。受信バッファのみを要求する、RX状態機械のような要求元もある。また、送信バッファのみを要求する、TX状態機械のような要求元もある。これらの場合において、制御論理100は、要求元の種類から要求されたバッファのタイプを推論する。また、どちらのバッファのタイプも要求できる、RISCマイクロプロセッサのような要求元もある。この場合、要求元は制御論理100に追加信号を送り、要求されたバッファのタイプを識別する。
実施例において、制御システム100は制御論理120によって使用される６つのレジスタまたはカウンタを含む。制御／状態レジスタ130は基本的な情報を保持する。送信バッファカウンタ135は複数の使用可能な送信バッファを含む。RISCデータレジスタ140は、送信または受信バッファのどちらへのものかにより、また、CREDIT＃信号を起こすかどうかにより要求のタイプを分類する４つのレジスタを含む。制御／状態レジスタ130およびカウンタ135の内容は読出しマルチプレクサ（RD  MUX）150に入力されるため、RISCマイクロプロセッサでアクセス可能である。
実施例において、制御／状態レジスタ130は１語（32ビット）まで保持可能であるが、好ましい実施例においてはこのビットの内の５ビットのみを使用する。残りのビットは後の発展のために保留される。ゼロビットはデフォールト値として"0"をとり、RISCマイクロプロセッサのFIFOユニット110への排他的アクセスを承認するために"1"に設定される。第１ビットはデフォールト値として"0"をとり、フリーバッファの送信バッファと受信バッファへの分割を不可能にするために"1"に設定される。これが起こるとRISCマイクロプロセッサが、アクセスレジスタのいずれかによってフリーバッファポインタにアクセスする。第２ビットはデフォールト値として"0"をとるが、FIFO全体が再初期化されるようにFIFOユニット110内のポインタをクリアにするために"1"に設定されることができる。第２ビットは、FIFOユニット110が再び機能できる前にクリアされなければならない。第３ビットは１度だけ読出され、送信FIFOが空の時には"1"に設定され、また送信FIFOが空でない時には"0"に設定される。第４ビットも１度だけ読出され、受信FIFOが空の時には"1"に設定され、受信FIFOが空でない時には"0"に設定される。
送信バッファカウンタ135は複数の使用可能な送信バッファを含んでいる。カウンタ135は、送信バッファのためのREADコマンドがFIFOユニット110へ送られる度に減少し、送信バッファのためのWRITEコマンドがFIFOユニット110へ送られる度に増加する。実施例において、送信バッファカウンタ135の長さは１語であるが、複数の使用可能な送信バッファを記憶するために使用するビットは８ビットである。初期化設定の最中、RISCマイクロプロセッサは送信バッファカウンタ135に最高数の送信バッファを書込む。フィールドはハードウェアのリセットによって、また、第２ビット設定によってRISCマイクロプロセッサによる制御レジスタ130へのWRITEによってクリアされる。所望であれば、送信バッファカウンタ135がスレッショルド数以下に減少する際にアラームが鳴るように制御論理120を設定することができる。
状態機械によるコマンドは比較的簡単である。READコマンドが実行されると、FIFOユニット110からラインDOUTにバッファポインタ114aが出力される。要求を出す状態機械はDOUTラインと接続しており、表示されたバッファを使用するために動作する。WRITEコマンドが実施されると、状態機械からバッファポインタが書込みマルチプレクサ（WR  MUX）155にロードされる。次にラインDINによりバッファポインタがFIFOユニット110に入力される。
実施例において、RISCデータレジスタ140は４つのレジスタ141−144を含んでいる。独立したレジスタの各々は１語を含むことが可能であるが、バッファポインタの記憶のために８ビットのみを使用する。レジスタXBPTR141とC1XBPTR142は、送信バッファの読出しまたは書込みに使用される。送信FIFOが空の時、レジスタXBPTR141とC1XBPTR142も空であり、制御レジスタ130内の第３ビットが、RISCマイクロプロセッサにより１に設定される。レジスタRBPTR143とC1RBPTR144は受信バッファの読出しと書込みに使用される。FIFOユニット110の全体が空であり、リスト122に送信、受信バッファポインタが残っていない場合、レジスタRBPTR143とC1RBPTR144も空であり、制御レジスタ130内の第３および第４ビットがRISCマイクロプロセッサによって１に設定される。
実施例において、バッファがXBPTRレジスタ141またはRBPTRレジスタ143のいずれかに戻される度に、制御論理110がCREDIT♯信号を起こす。バッファがC1XBPTRレジスタ142またはC1RBPTRレジスタ144に戻されると、制御論理110はCREDIT＃信号を起こさない。CREDIT＃信号はフレームロー制御気候を使用するプロトコルに使用されることができる。データレジスタ140にレジスタを追加することが可能である。複合的な異なるタイプの信号が制御論理110によって起こされる。
バッファ調整システム100はまた、状態機械とバッファポインタ読出しポート上のRISCマイクロプロセッサに使用可能な２つの状態信号を保持している。送信バッファカウンタ135がゼロであり、使用可能な送信バッファがない場合、ライン161上の状態信号TXSTATUSが真に設定される。FIFOユニット110が空であり、使用可能なバッファ、送信、受信がない場合、ライン162上の第２状態信号RXSTATUSが真に設定される。これらの状態信号は制御レジスタ130の第３、第４ビットにも供給される。
要約すれば、本発明は、分割バッファの対をサポートすることによりメモリを効率的に区分化する単純な方法を提供するものである。大バッファはデータを保持するために効率的にサイジングされ、少なくとも１つの関連する小バッファが情報を制御するために効率的にサイジングされる。本発明はさらに、このような分割バッファの対をアドレス指定する単純な方を提供する。本発明の好ましい実施例において、分割バッファモデルは、各メモリブロックが第１ブロックと同一の区分を有して可変長であり、１つのメモリコンポ−ネントを追加することによってトータルメモリを容易に増加することができる。
本発明の複数の実施例を説明した。しかし、本発明の精神および範囲を逸脱することなく様々な改良が可能であることが理解されるであろう。例えば、好ましい実施例においてメモリがBIUと通信リンクの間に配置されているが、本発明はいかなるコンピュータシステムにおける２つのコンポ−ネント間のデータ転送にも適応できる。従って、本発明は説明した特定の実施例によって限定されるのではなく、添付の請求の範囲によってのみ限定されるものである。
【図１】
0003641675.tif 000004
【図２】
0003641675.tif 000005
【図３】
0003641675.tif 000006
【図４】
0003641675.tif 000007
【図５】
0003641675.tif 000008
【図６】
0003641675.tif 000009