(57)【特許請求の範囲】
【請求項１】
プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する方法であって、
前記ＰＬＢシステムの前記バス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンを設けるステップと、
前記バスに結合されたデバイスから非同期に受け取る転送要求に応答して、前記ＰＬＢシステムの前記バスのクロック・サイクルを最適化するために、前記マスタ・エンジンによって実行される要求のタイプを要求タイプ・ジェネレータモジュールが要求タイプ決定関数を使用して決定するステップと、
前記決定された要求のタイプに応じて、前記デバイスと前記ＰＬＢシステムの前記バスとの間でＦＩＦＯを使用してデータを非同期に転送するステップと
を含み、
前記要求のタイプは、ライン転送、固定長バースト転送、シーケンシャル・バースト転送、ワード転送の順に前記タイプを決定し、
前記決定ステップが、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用し、ここで、ｆ（）は、特定のＰＬＢシステムについて、ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、thr_fifo  ＝  ＦＩＦＯの閾値に基づいて定められる定数であり、
ｇ（）が、特定のＰＬＢマスタが特定のスレーブをアドレッシングする場合、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_DAckに基づく第２の定数とされ、
ｈ（）が、上位6ビットがプログラム可能な１０ビットの待ち時間カウント・レジスタにより保持される待ち時間カウント値であるｔを時刻として、
latmr  ＝  前記時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、前記時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  前記時刻tでのＦＩＦＯの占有、
pend_req  ＝  前記時刻tでの保留中の要求、および
pend_pri  ＝  前記時刻tでの保留中要求の優先順位
に応答して、現在のセッションで転送しなければならなかったすべてのデータがすでに転送を要求されたか否か、ＦＩＦＯにデータを保存するスペースがあるか否か、進行中またはこれから開始されるセッションがあるか否か、デバイスが現在のセッションの停止を求められているか否かを検査し、さらに
残っている転送の数を示す転送カウントを検査するステップと、
有効なデータによって占有されている前記ＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査するステップと、
前記転送カウント検査および前記ｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送を含むグループから次の要求タイプを決定して転送要求を生成するステップと、
生成した前記転送要求を送るステップと
を含む、方法。
【請求項２】
前記転送要求が、読取データ転送または書込データ転送に関する、請求項１に記載の方法。
【請求項３】
前記転送要求を送った後に、前記ＰＬＢシステムの前記バスに次の要求を出すステップと、
前の要求タイプおよび前記転送カウントに基づいて、要求タイプを決定するステップと
をさらに含む、請求項１に記載の方法。
【請求項４】
プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する装置であって、
前記ＰＬＢシステムの前記バス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンと、
前記バスに結合されたデバイスから非同期に受け取る転送要求に応答して、前記ＰＬＢシステムの前記バスのクロック・サイクルを最適化するために、前記マスタ・エンジンによって実行される要求のタイプを要求タイプ・ジェネレータモジュールが要求タイプ決定関数を使用して決定する手段と、
前記決定された要求のタイプに応じて、前記デバイスと前記ＰＬＢシステムの前記バスとの間でデータを非同期に転送するために前記マスタ・エンジンに結合されたＦＩＦＯと
を含み、
前記要求のタイプは、ライン転送、固定長バースト転送、シーケンシャル・バースト転送、ワード転送の順に前記タイプを決定し、
前記決定手段が、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用し、ここで、ｆ（）は、特定のＰＬＢシステムについて、ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、thr_fifo  ＝  ＦＩＦＯの閾値に基づいて定められる定数であり、
ｇ（）が、特定のＰＬＢマスタが特定のスレーブをアドレッシングする場合、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_DAckに基づく第２の定数とされ、
ｈ（）が、上位6ビットがプログラム可能な１０ビットの待ち時間カウント・レジスタにより保持される待ち時間カウント値であるｔを時刻として、
latmr  ＝  前記時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、前記時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  前記時刻tでのＦＩＦＯの占有、
pend_req  ＝  前記時刻tでの保留中の要求、および
pend_pri  ＝  前記時刻tでの保留中要求の優先順位
に応答して、現在のセッションで転送しなければならなかったすべてのデータがすでに転送を要求されたか否か、ＦＩＦＯにデータを保存するスペースがあるか否か、進行中またはこれから開始されるセッションがあるか否か、デバイスが現在のセッションの停止を求められているか否かを検査し、さらに
残っている転送の数を示す転送カウントを検査するステップと、
有効なデータによって占有されている前記ＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査する手段と、
前記転送カウント検査および前記ｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送を含むグループから次の要求タイプを決定して転送要求を生成する手段と、
生成した前記転送要求を送る手段と
を含む、装置。
【請求項５】
前記転送要求が、読取データ転送または書込データ転送に関する、請求項４に記載の装置。
【請求項６】
前記転送要求を送った後に、前記ＰＬＢシステムの前記バスに次の要求を出す手段と、
前の要求タイプおよび前記転送カウントに基づいて、要求タイプを決定する手段と
をさらに含む、請求項４に記載の装置。
【請求項７】
プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する請求項１〜３のいずれか1項に記載の方法をコンピュータが実行するためのコンピュータ・プログラムを記録したコンピュータ可読媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、全般的にはシステムオンチップ（ＳＯＣ）応用分野に関し、具体的には、そのようなＳＯＣ応用分野で使用されるオンチップ・バスに関する。
【０００２】
【従来の技術】
シリコン密度の最近の上昇によって、多数の機能を単一のシリコン・チップに集積することが可能になった。この上昇した密度を用いて、以前にはカード・レベルでプロセッサに接続されていた周辺装置が、プロセッサと同一のダイに集積される。その結果、チップ設計者は、従来はシステム設計者によって処理されてきた問題に対処しなければならない。この種の単一のダイへの複雑な回路の実装を、システムオンチップ（ＳＯＣ）と称する。
【０００３】
通常、ＳＯＣには、多数の論理ゲートを表す多数の機能ブロックが含まれる。そのようなシステムの設計は、マクロベースの手法を介して実現される。マクロベースの設計によって、ロジックの入力および検証、ならびに特定の機能性を有するマクロの再利用が容易になる。マクロとは、ライブラリ内でネットリストの形で使用可能な、再利用可能なテスト済みの設計である。汎用シリアル・ポートから複雑なメモリ・コントローラ・コアおよびプロセッサ・コアにわたる応用分野で、各ＳＯＣに、多数の共通マクロが使用される。コアとは、ＶＨＤＬまたはVerilogなどのハードウェア記述言語での、再利用可能なテスト済みの設計である。
【０００４】
そのような応用分野で使用される多数の単一チップ解決策が、それぞれがそれ自体の内部アーキテクチャを有するカスタム・チップとして設計される。そのようなチップ内の論理ユニットは、抽出し、異なる応用例で再利用することが困難であることがしばしばである。その結果、同一の機能が、ある応用例から別の応用例で何度も再設計されている。
【０００５】
【発明が解決しようとする課題】
したがって、データ読取転送およびデータ書込転送に関してバス使用量を最適化することができる、そのようなＳＯＣ実施形態で使用されるオンチップ・バスにインターフェースするデバイスの改良されたアーキテクチャの必要が、明らかに存在する。
【０００６】
【課題を解決するための手段】
本発明の第１の態様によれば、プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する方法が提供される。この方法は、
ＰＬＢシステムのバス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンを設けるステップと、
バスに結合されたデバイスから非同期に受け取る転送要求に応答して、ＰＬＢシステムのバスの動作を最適化するために、マスタ・エンジンによって実行される転送のタイプを決定するステップと、
決定された転送のタイプに応じて、デバイスとＰＬＢシステムのバスとの間でＦＩＦＯを使用してデータを非同期に転送するステップと
を含む。
【０００７】
転送要求が、読取データ転送または書込データ転送に関することが好ましい。
【０００８】
決定ステップが、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用することが好ましく、ここで、ｆ（）が、
c1c2  ＝  ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、
S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、
arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、
thr_fifo  ＝  ＦＩＦＯの閾値
の関数であり、
ｇ（）が、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_Dackの関数であり、
ｈ（）が、
t  ＝  時刻、
latmr  ＝  時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  時刻tでのＦＩＦＯの占有、
pend_req  ＝  時刻tでの保留中の要求、および
pend_pri  ＝  時刻tでの保留中要求の優先順位
の関数である。
【０００９】
この方法が、さらに、転送要求を生成するステップを含むことが好ましい。生成するステップが、残っている転送の数を示す転送カウントを検査するステップと、有効なデータによって占有されているＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査するステップと、転送カウント検査およびｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送を含むグループから次の要求タイプを決定するステップと、転送要求を送るステップとを含むことができる。代替案では、この方法が、さらに、転送要求を送った後に、ＰＬＢシステムのバスに次の要求を出すステップと、前の要求タイプおよび転送カウントに基づいて、要求タイプを決定するステップとを含む。
【００１０】
本発明の第２の態様によれば、プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する装置が提供される。この装置は、ＰＬＢシステムのバス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンと、バスに結合されたデバイスから非同期に受け取る転送要求に応答して、ＰＬＢシステムのバスの動作を最適化するために、マスタ・エンジンによって実行される転送のタイプを決定する手段と、決定された転送のタイプに応じて、デバイスとＰＬＢシステムのバスとの間でデータを非同期に転送するためにマスタ・エンジンに結合されたＦＩＦＯとを含む。
【００１１】
本発明の第３の態様によれば、プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化するコンピュータ・プログラムをその中に記録されたコンピュータ可読媒体を有するコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、ＰＬＢシステムのバス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンを設けるコンピュータ・プログラム・コード手段と、バスに結合されたデバイスから非同期に受け取る転送要求に応答して、ＰＬＢシステムのバスの動作を最適化するために、マスタ・エンジンによって実行される転送のタイプを決定するコンピュータ・プログラム・コード手段と、決定された転送のタイプに応じて、デバイスとＰＬＢシステムのバスとの間でＦＩＦＯを使用してデータを非同期に転送するコンピュータ・プログラム・コード手段とを含む。
【００１２】
【発明の実施の形態】
プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する方法、装置、およびコンピュータ・プログラム製品を説明する。
【００１３】
１．ＰＬＢシステムの概要
通常のプロセッサ・ローカル・バス（ＰＬＢ）システムは、プロセッサ・コア、システム・メモリ、および、システム・メモリと相互作用するバスに接続されたデバイスからなる。バス上のデバイスは、必要なトランザクションに基づいて、そのＰＬＢマスタを介してバスを要求する。ＰＬＢアービタが、バスを要求するすべてのマスタからの要求を調停する。したがって、所与のどの時刻でも、どのマスタであってもＰＬＢを要求することができる。ＰＬＢマスタの観点からは、システム上のよいバス使用率を有するために、要求の数およびバスへのアクセス権を有する持続時間を最小限にしなければならない。
【００１４】
本発明の実施形態は、全般的にＳＯＣ設計で使用されるオンチップ・バスを対象とする。マクロ相互接続性を確保することによってそのようなＳＯＣ応用例での論理ユニットの再利用を促進するために、共通バスが、マクロ間通信に使用される。この目的のために、３つのバスが、コア、ライブラリ・マクロ、およびカスタム・ロジックの相互接続に使用される。３つのバスには、プロセッサ・ローカル・バス（ＰＬＢ）、オンチップ周辺バス（ＯＰＢ）、およびデバイス制御レジスタ（ＤＣＲ）バスが含まれる。
【００１５】
プロセッサ・ローカル・バス（ＰＬＢ）は、多数のシステムオンチップ（ＳＯＣ）応用例で使用される、高性能のオンチップ・バスである。ＰＬＢは、ＰＬＢコア（アービタ・ロジック、制御ロジック、およびゲーティング・ロジック）からなり、このＰＬＢコアにマスタおよびスレーブが接続される。ＰＬＢアーキテクチャは、１６個までのマスタをサポートする。特定のシステムの複雑さに応じて、ＰＬＢコアは、設計されるか、標準ライブラリから選択される。一般に、標準ライブラリで供給されるＰＬＢコアは、４個または８個のマスタもしくは１６個までのマスタをサポートする。ＰＬＢアーキテクチャは、別々の読取バスおよび書込バスを有するので、マスタは、アドレス・パイプライン化を行った後に、読取動作と書込動作を同時に実行することができる。しかし、ＰＬＢアーキテクチャでは、読取と書込の両方に関する要求を同時に開始することができない。所与のシステムオンチップ（ＳＯＣ）応用例で、ＰＬＢアーキテクチャのオーバーラップした読取転送および書込転送の特徴を使用することによって、ＰＬＢバス使用率を改善することができる。
【００１６】
図１は、これを用いて本発明の実施形態を実施することができるＰＬＢシステム１００の実施形態を示すブロック図である。ＰＬＢシステム１００には、プロセッサ・ローカル・バス（ＰＬＢ）１３０、プロセッサ・コア１１０、ＰＬＢアービタ１２０、外部周辺コントローラ１４０、およびメモリ・コントローラ１５０が含まれる。また、ＰＬＢシステム１００は、ＰＬＢ１３０に両方向で結合される１３９４ａリンク層コントローラ１６０を有する。
【００１７】
ＰＬＢアービタ１２０は、ＰＬＢ１３０に直接に結合される。プロセッサ・コア１１０には、データ・キャッシュ・ユニット１１４および命令キャッシュ・ユニット１１６も含まれる。データ・キャッシュ・ユニット１１４は、ＰＬＢ１３０での読取動作および書込動作を実行し、したがって、ＰＬＢ１３０との間の両方向の矢印によって示されるように、両方向でＰＬＢ１３０に結合される。命令キャッシュ・ユニット１１６は、メモリからの読取だけを実行し、したがって、命令キャッシュ・ユニット１１６は、読取転送だけを必要とする。したがって、命令キャッシュ・ユニット１１６は、ＰＬＢ１３０から命令キャッシュ・ユニット１１６へ延びる単一方向の矢印によって示されるように、ＰＬＢ１３０に単一方向で結合される。
【００１８】
外部周辺コントローラ１４０は、ＰＬＢ１３０との間に延びる両方向の矢印によって示されるように、両方向でＰＬＢ１３０に結合される。この外部周辺コントローラ１４０には、ＳＲＡＭ／ＲＯＭ１４４、外部周辺機器１４６、および外部バス・マスタ１４８が含まれる。
【００１９】
メモリ・コントローラ１５０も、ＰＬＢ１３０との間に延びる両方向の矢印によって示されるように、両方向でＰＬＢ１３０に結合される。メモリ・コントローラ１５０には、ＳＤＲＡＭコントローラ１５４が含まれる。
【００２０】
また、メモリ・コントローラ１５０、外部周辺コントローラ１４０、ＰＬＢアービタ１２０、プロセッサ・コア１１０、および１３９４ａリンク層コントローラ１６０は、リング状のデバイス制御レジスタ（ＤＣＲ：Device Control Register）バス１７０によって相互接続される。たとえば、ＤＣＲバス１７０Ｃは、ＰＬＢアービタ１２０からプロセッサ・コア１１０に延びる単一方向の矢印によって示されるように、ＰＬＢアービタ１２０とプロセッサ・コア１１０の間に延びる。同様の形で、ＤＣＲバス１７０Ａは、メモリ・コントローラ１５０から外部周辺コントローラ１４０まで延び、ＤＣＲバス１７０Ｂは、外部周辺コントローラ１４０からＰＬＢアービタ１２０まで延びる。このループになったＤＣＲバス１７０は、１３９４ａリンク層コントローラ１６０およびメモリ・コントローラ１５０のためのバス・セグメント１７０Ｄおよび１７０Ｅで完成する。
【００２１】
２．ＰＬＢマスタ
ＰＬＢマスタは、ＰＬＢスレーブからの転送を要求する時に、要求する転送のタイプを指定する。要求される転送のタイプは、ＰＬＢスレーブによってサポートされるものでなければならない。図２は、デバイス２２０と非同期にインターフェースする通常のＰＬＢマスタ２１０のブロック図である。システム２００には、ＰＬＢ１３０、ＰＬＢマスタ２１０、デバイス２２０、およびＦＩＦＯ２３０が含まれる。ＰＬＢマスタ２１０は、両方向でＰＬＢ１３０に結合される。ＰＬＢマスタ２１０には、エンジン２１２および要求タイプ・ジェネレータ（Req_Type_Gen）モジュール２１６が含まれ、これらの両方が、両方向で相互結合される。ＰＬＢマスタ２１０には、ロジック・モジュール２１４も含まれ、これは、エンジン２１２およびReq_Type_Genモジュール２１６のそれぞれと両方向で結合される。デバイス２２０は、両方向でＰＬＢマスタ２１０に結合され、ＦＩＦＯ２３０にも両方向で結合される。ＦＩＦＯ２３０は、両方向でＰＬＢマスタ２１０に結合される。
【００２２】
ＦＩＦＯ２３０は、非同期インターフェースとＰＬＢ１３０の間でデータを転送する。ＰＬＢマスタ２１０の主要なモジュールは次の通りである。
ａ）ＰＬＢプロトコルに従ってＰＬＢ１３０のすべてのトランザクションを行うエンジン２１２
ｂ）エンジン２１２がバスを最適化するためにＰＬＢ１３０上で行わなければならない転送のタイプを決定するReq_Type_Genモジュール２１６
ｃ）ＰＬＢマスタ２１０の他のすべての論理を有するロジック・モジュール２１４
【００２３】
ＰＬＢ１３０でのトランザクションは、非同期インターフェース上のデバイス２２０からのトランザクション要求によって開始される。この要求は、読取転送または書込転送のいずれかとすることができる。ＰＬＢマスタ２１０は、ＰＬＢ１３０上で要求する必要があるトランザクション・タイプを判定することによってデバイス要求を処理する。ＰＬＢ１３０上で要求されるトランザクション・タイプは、Req_Type_Genモジュール２１６によって決定される。
【００２４】
ＰＬＢ１３０の最適使用率のために、ＰＬＢマスタ２１０は、そのデータの転送のために最小のサイクル数だけＰＬＢ１３０を保持する。ＰＬＢマスタ２１０は、そのデータ転送のためにＰＬＢ上でスレーブをアドレッシングしているので、ＰＬＢ１３０上のデータ転送に必要なクロック・サイクル数は、マスタによってアドレッシングされるスレーブの特性に依存する。したがって、ＰＬＢマスタ２１０は、ＰＬＢ使用量が最適になり、他のマスタもＰＬＢ１３０へのアクセス権を得る形でＰＬＢ１３０に要求を出そうとする。
【００２５】
非同期ドメインにまたがるデータ転送は、ＦＩＦＯ２３０の使用を介する。デバイス２２０からの読取転送要求の場合には、データが、ＰＬＢ１３０からＦＩＦＯ２３０に書き込まれ、デバイス２２０によって読み取られる。書込転送の場合には、転送されるデータが、デバイス２２０によってＦＩＦＯ２３０に書き込まれ、ＰＬＢマスタ２１０によって読み取られる。したがって、ＰＬＢ１３０上のＰＬＢ転送中のどの時刻でも、ＦＩＦＯ２３０からのデータの消費の速度が、異なるクロック・ドメインのゆえにＦＩＦＯ２３０へのデータの作成の速度と異なるので、ＦＩＦＯ２３０内の項目の数が、動的に変化している。
【００２６】
Ｎバイトのデータをデバイス２２０からＰＬＢ上のメモリ位置（ＰＬＢスレーブ）に転送するものとして、本発明の実施形態では、最小のクロック・サイクル数がＰＬＢ１３０上で使用されるように、ＰＬＢ１３０での転送のシーケンス、タイプ、およびタイミングが決定される。デバイス２２０から要求されたデータ転送は、読取データ転送または書込データ転送である可能性がある。
【００２７】
３．要求タイプ決定関数
ＰＬＢ１３０での最適バス使用率のために、要求タイプを生成するためのさまざまなパラメータが検討される。本発明の第１の実施形態による、時刻ｔでの要求タイプ決定関数は次の通りである。
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri),  (1)
ここで、
ｆは、c1c2、S_FIFO、arb、およびthr_fifoの関数であり、
c1c2  ＝  ＰＬＢクロックc1とデバイス・クロックc2の間のクロック周波数比、
S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、
arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、
thr_fifo  ＝  ＦＩＦＯの閾値であり、
ｇは、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_Dackの関数であり、
ｈは、
t  ＝  時刻、
latmr  ＝  時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  時刻tでのＦＩＦＯの占有、
pend_req  ＝  時刻tでの保留中の要求、および
pend_pri  ＝  時刻tでの保留中要求の優先順位
の関数である。
【００２８】
ＦＩＦＯの閾値に関して、図２のReq_Type_Genモジュール２１６は、ＦＩＦＯ２３０内の項目数を、新しい要求を出すためのパラメータとして使用する。ＦＩＦＯ２３０の閾値は、ＦＩＦＯ２３０の項目の最小個数であり、これを超えると、Req_Type_Genモジュール２１６がエンジンに要求を出す。ＦＩＦＯ２３０の項目数が閾値に達していない場合には、Req_Type_Genモジュール２１６は、項目数が閾値に達するのを待って、要求をエンジン２１２に出す。
【００２９】
ＰＬＢアーキテクチャは、アドレス・パイプライン化をサポートし、マスタは、マスタがアドレッシングしているスレーブがアドレス・パイプライン化をサポートする場合に、この機能を使用することができる。
【００３０】
特定のＰＬＢシステムでは、関数ｆが定数になる。ＰＬＢシステム内の特定のスレーブをアドレッシングするＰＬＢマスタについて、関数ｇが定数になる。ｈ（ｔ）は、時刻ｔに関して動的に変化する関数である。したがって、これらの関数を考慮に入れて、要求生成は、ＰＬＢでの使用率が最適になるものでなければならない。
【００３１】
関数ｆ、ｇ、およびｈを別々に検討する。
f(c1c2, S_FIFO, arb, thr_fifo)
c1c2、S_FIFO、およびarbは定数なので、この関数で最適化のために変更することができる唯一のパラメータは、バースト実行のためのＦＩＦＯの閾値、thr_fifoである。
g(wait_AAck, wait_DAck)
この関数は、ＰＬＢマスタによってアドレッシングされているＰＬＢスレーブに依存する。ＰＬＢマスタは、アドレッシングされているＰＬＢスレーブのインテリジェンスを得るために、この関数を時間的に平均することができる。この情報は、ＰＬＢマスタによって、最適性能に関して要求を行うのに使用することができる。
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
これは、時刻ｔの関数であり、したがって、その値は動的である。任意の所与の時刻ｔに、ＰＬＢマスタは、この関数のすべてのパラメータの値を考慮して、新しい要求タイプを判定しなければならない。これらのパラメータのそれぞれを、下で詳細に説明する。
latmr  これは、時刻ｔでの待ち時間タイマ値である。ＰＬＢ１３０でのバースト転送をサポートするすべてのマスタが、ＰＬＢ１３０の占有を制限するために待ち時間カウント・レジスタ値を維持することを期待される。待ち時間カウント・レジスタは、上位６ビットがソフトウェアによってプログラム可能である１０ビット・レジスタであることが好ましい。したがって、時刻ｔでの値は、ＰＬＢマスタが、それ自体がバスを所有する場合にバスの許可を得ることができるクロック・サイクル数である。
xfer_cnt  時刻ｔでのこの値によって、デバイス２２０によって要求されたセッションを完了するための、残りの転送の数が与えられる。この値が０の場合には、その値は、デバイスによって要求されたセッションが完了していることを暗示する。
cnt_fifo  ＦＩＦＯ２３０は、システム内の２つのクロック・ドメインすなわち、ＰＬＢクロック・ドメインとデバイス・クロック・ドメインの間でデータを転送するのに使用される。デバイス２２０からの書込転送要求の場合には、データが、デバイス２２０によってＦＩＦＯ２３０に置かれ、ＰＬＢ１３０でのデータの転送のためにＰＬＢマスタ２１０によって読み取られる。デバイス２２０による読取転送要求の場合には、データが、ＰＬＢスレーブから読み取られた後に、ＰＬＢマスタ２１０によってＦＩＦＯ２３０に置かれ、データが、デバイス２２０によってＦＩＦＯ２３０から読み取られる。cnt_fifoは、任意の時刻ｔに有効なデータによって占有されているＦＩＦＯ２３０の項目数を与える。この値は、読取転送または書込転送に応じて、ＰＬＢマスタ２１０によって適宜使用される必要がある。
pend_req  時刻ｔでのＰＬＢ１３０上の保留中の要求が、この変数によって指定される。
pend_pri  これは、時刻ｔに保留中である要求を有するマスタの優先順位である。
【００３２】
読取要求生成および書込要求生成の処理の概要を、表１に示す。
【００３３】
【表１】
0004215417.tif 000002
【００３４】
４．読取転送処理
図３ないし図１２は、上で述べたパラメータに基づく、デバイス２２０が読取転送を要求した時にＰＬＢ１３０に読取要求を出す処理３００を示す流れ図である。この処理は、図２４のＰＬＢマスタ６１０で実施されている。表２に、図３ないし図１２で使用される表記の定義を含める。
【００３５】
【表２】
0004215417.tif 000003
【００３６】
図３ないし図１２の方法によって、要求を行うための複数のアルゴリズムから選択を行うことが可能になる。パラメータＡ＝＞「アルゴリズム選択」は、バス上の要求を複数の形で行うことができるようにするために使用される。バスに要求を出すための複数のアルゴリズムが実装される場合には、このパラメータＡによって、ユーザがアルゴリズムの１つを選択するためのプログラム可能性が提供される。
【００３７】
図３ないし図１２の読取状態機械は、以下の状態を有する（流れ図では、台形を使用してマークされる）。
１．アイドル状態
２．要求状態
３．ＦＬバーストａｃｋ状態
４．ＳＱバーストａｃｋ状態
５．ＦＬバースト待ち状態
６．ＳＱバースト待ち状態
７．アイドル待ち状態
８．バーストｄａｃｋ検査状態
ここで、ＦＬは固定長（Fixed Length）を表し、ＳＱはシーケンシャル（Sequential）を表す。
また、図３ないし図１５の判断ブロック内の","はＡＮＤを意味し、"／"はＯＲを意味する。
【００３８】
主な考慮事項
読取動作が実行されている間は、データ転送の要求が、多数の異なる条件に基づいて行われる。大きいデータが転送される場合には、そのデータを転送する異なる方法がある。データの一部または全体を転送するために、要求を生成しなければならない。これは、要求状態で行われる。多くの異なる種類の要求を生成することができる。データが、ＦＩＦＯに一時的に保管される際に、ＦＩＦＯ２３０が満杯または空であるかどうか、またはＦＩＦＯ内の位置のいくつが空であるかを判定しなければならない。図３ないし図１２の処理では、パイプライン化が使用される。したがって、要求を発行する時までに、ＦＩＦＯ２３０との間で移動されつつあるものがあるかどうかを知る必要もある（前の要求がまだ保留中または実行中である可能性があるので）。また、データが転送される先または元のデバイス２２０が、低速または高速である可能性がある。
【００３９】
アイドル状態
アイドル状態では、検査を行って、進行中または要求されたセッションがある（Ｒ＝１）かどうかと、別のデバイスがデータ転送の現在のセッションを停止するように要求された（Ｓ＝１）か、現在のセッションで転送しなければならなかったすべてのデータがすでに転送を要求された（Ｘ＝０）かどうかを判定する。これが真である場合には、現在のセッションが終了し、ＰＬＢマスタ２１０は、別のセッションが始まるまでアイドル状態で待つ。
【００４０】
上の条件が偽である場合には、検査を行って、進行中またはこれから開始されるセッションがある（Ｒ＝１）かどうかを判定する。現在のセッションで要求された少なくとも１つのデータ転送が残っており（Ｘ＞０）、デバイス２２０が現在のセッションの停止を求められていない（Ｓ＝０）場合には、ＦＩＦＯ２３０にデータを保存するスペースがある（Ｆ＞０）。これらの条件のすべてが満たされる場合に、処理は、次のサイクルで要求状態に継続され、ここで、データの正しい転送要求が行われる。これらの条件が満たされない場合には、マスタは、アイドル状態で待つ。
【００４１】
要求状態
進行中のセッションがあり（Ｒ＝１）、デバイス２２０が現在のセッションの停止を要求された（Ｓ＝１）場合には、転送を終了する信号をできる限り早く送った後に、ＰＬＢマスタ２１０が、次のクロックでアイドル待ち状態に入る。
【００４２】
これが偽である場合には、転送されるデータの転送により高い優先順位を与えるか、他者にバスを使用する十分な機会を与え、その結果、バス上のトラフィックがより多くなるようにするか（Ａ＝１）を決定する。他者に、バスにアクセスするより多くの機会を与えて、バス・トラフィックの最大化を得ようとする（読取要求と書込要求が同時にデータ・バスを使用することができるので）場合には、ＰＬＢマスタ２１０は、次の要求を生成する前に、保留中の残りの転送（既に要求されているが、まだ実行されていない）が４つ未満になる（ＸＯＲ＜４）まで待つ。
【００４３】
上の条件が偽である場合には、検査を行って、進行中またはこれから開始されるセッションがある（Ｒ＝１）かどうか、ＦＩＦＯにデータを保持するスペースがある（Ｆ＞０）かどうか、現在のセッションで要求された残っているデータ転送が少なくとも１つある（Ｘ＞０）かどうか、およびデバイスが現在のセッションの停止を求められた（Ｓ＝０）かどうかを判定する。これらの条件のすべてが満足される場合には、データ転送に関する次の要求を生成するか、別のクロックによりよい要求を与えることができる場合に、ＰＬＢマスタ２１０がそのクロックを待つ。
【００４４】
そうではなく、進行中またはこれから開始されるセッションがある（Ｒ＝１）場合で、現在のセッションで要求された残りのデータ転送が少なくとも１つあり（Ｘ＞０）、デバイスが現在のセッションの停止を求められていない（Ｓ＝０）場合には、ＰＬＢマスタ２１０は、次のサイクルに要求状態にとどまる。そうではなく、進行中またはこれから開始されるセッションがある（Ｒ＝１）場合で、現在のセッションで要求された残りのデータ転送がなく（Ｘ＝０）、デバイスが現在のセッションの停止を求められていない（Ｓ＝０）場合には、次のクロックにアイドル状態に入る。前述の検査のどれもが満足されない場合には、セッションが打ち切られ、ＰＬＢマスタ２１０はアイドル待ち状態に入る。
【００４５】
この状態で、異なる種類の要求を生成することができる。ライン転送要求が生成される場合には、次の状態は要求状態になる。そうではなく、固定長バーストによってこのセッションで要求されるデータ転送全体（Ｆ＞Ｘ）を終了することができる場合には、その要求が行われ、ＦＬバーストａｃｋ状態に入る。これが可能でない場合には、デバイスの速度に応じて、シーケンシャル・バーストによってこのセッションの残りのデータの全体を完全に転送できるかどうかを予測する。転送を完了できる場合には、要求を行い、ＳＱバーストａｃｋ状態に入る。ライン転送が可能でなく、固定長バーストが可能である場合には、その要求を行い、ＦＬバーストａｃｋ状態に入る。また、固定長バーストによって現在のセッション内のすべての転送を終了することができる（Ｆ≧Ｘ）場合には、要求される残りの転送が閾値未満である（Ｘ＞閾値）場合であっても、同一のことが行われる。バーストの場合、少なくとも３つの転送を行う（Ｘ＞２）必要がある。そうではなく、将来にワード転送の代わりによりよい要求を生成することができない場合に、ワード転送が行われる。どの場合でも、次のクロックに、やはり要求状態に入る。
【００４６】
ＦＬバーストａｃｋ状態／ＳＱバーストａｃｋ状態
固定長またはシーケンシャルのいずれかのバースト要求を生成した後に、マスタは、この要求が実行される場合に、エンジンからの確認を待たなければならない。確認（Ｂ＝１）は、次のクロック・サイクルに来て、マスタは、このクロック・サイクルを、固定長バースト要求の場合にはＦＬバースト状態、シーケンシャル・バースト要求の場合にはＳＱバースト状態で待つ。その後、処理は、それぞれＦＬバースト待ち状態またはＳＱバースト待ち状態に入る。確認が来ない場合には、ＰＬＢマスタ２１０は、次のクロック・サイクルに要求状態に戻って、次の要求を生成する。
【００４７】
ＦＬバースト待ち状態／ＳＱバースト待ち状態
ＦＬバースト待ち状態およびＳＱバースト待ち状態の両方で、もう２つの転送だけが残っていることを示す信号（Ｌ＝１）が得られる。
【００４８】
ＦＬバースト待ち状態でこの信号を受け取る際に、検査を行って、進行中またはこれから開始されるセッションがある（Ｒ＝１）かどうか、ＦＩＦＯにデータを保持するスペースがある（Ｆ＞０）かどうか、現在のセッションで要求された残りのデータ転送が少なくとも１つある（Ｘ＞０）かどうか、およびデバイスが現在のセッションの停止を求められていない（Ｓ＝０）かどうかを判定する。これらの条件のすべてが満足される場合に、次のクロック・サイクルで要求状態に入り、データの正しい転送要求を行う。そうでない場合には、バーストｄａｃｋ検査状態に入る。この信号が受け取られず、デバイスが、現在のセッションの停止を求められた（Ｓ＝１）場合には、転送を終了する信号をできる限り早く送った後に、次のクロック・サイクルでアイドル待ち状態に入る。そうでない場合には、マスタが、ＦＬバースト待ち状態で待ち続ける。
【００４９】
ＳＱバースト待ち状態でこの信号を受け取る際に、バーストｄａｃｋ検査状態に入る。この信号が受け取られず、デバイスが、現在のセッションの停止を求められた（Ｓ＝１）か、ＦＩＦＯが満杯になる（Ｖ＞１３）場合、または、セッションのすべての転送が完了しようとしている（Ｘ＜３）場合に、転送を終了するためにバーストを終了させる信号をできる限り早く送った後に、次のクロック・サイクルでアイドル待ち状態に入る。そうでない場合には、マスタは、ＳＱバースト待ち状態で待ち続ける。
【００５０】
バーストｄａｃｋ検査状態では、バースト転送の最後のデータ転送が終わったことの確認を待つ。
【００５１】
バーストｄａｃｋ検査状態
デバイスが、進行中のセッションの停止を求められた（Ｓ＝１）か、現在のセッションのすべてのデータ転送が完了した（Ｘ＝０）場合に、アイドル待ち状態に入る。バーストｄａｃｋ検査状態では、バースト転送の最後のデータ転送が終わったことの確認（Ｄ＝１）を待つ。これがそうであり、現在のセッションで転送しなければならないデータがまだある場合には、要求状態に入る。そうではなく、バースト転送が終わった（Ｄ＝１）だけの場合には、アイドル状態に入る。そうでない場合には、マスタはこの状態にとどまる。
【００５２】
アイドル待ち状態
この状態では、ＰＬＢマスタ２１０が、進行中のすべての転送およびアクティビティが終わるのを待つ。すべてが終わった（Ｉ＝０）時に、現在の進行中のセッションを終了し、アイドル状態に入る。
【００５３】
以下の図面では、複数の図面にわたって読取転送処理を示す。連続性を示すために、ある図のステップを、別の図でもう一度示す（たとえば、ステップ３２０が、図３および図４の両方に現れる）。
【００５４】
処理は、ステップ３１０で開始される。エンジン２１２は、ステップ３１２でアイドル状態に入る。判断ブロック３１４では、検査を行って、Ｒ＝１であり、Ｓ＝１／Ｘ＝０であるかどうかを判定する。このステップでは、デバイスによっててセッション停止が要求されたか、またはデバイスによって要求された転送の数が０であるかどうかを検査する。判断ブロック３１４で真が返される（Yes）場合には、処理はステップ３１６で継続される。ステップ３１６では、セッションを終了し、処理はステップ３１２で継続される。そうではなく、判断ブロック３１４で偽が返される（No）場合には、処理は判断ブロック３１８で継続される。判断ブロック３１８では、検査を行って、Ｘ＞０、Ｆ＞０、Ｒ＝１、およびＳ＝０であるかどうかを判定する。判断ブロック３１８で偽が返される（No）場合には、処理は、アイドル状態のステップ３１２で継続される。そうではなく、判断ブロック３１８で真が返される（Yes）場合には、処理はステップ３２０で継続される。ステップ３２０では、要求状態に入る（図４を参照されたい）。
【００５５】
処理は図４で継続され、その第１ステップは、やはり、図３の要求状態３２０として識別される。判断ブロック３２２では、検査を行って、Ｓ＝１およびＲ＝１であるかどうかを判定する。判断ブロック３２２で真が返される（Yes）場合には、処理はステップ３３６で継続されて、アイドル待ち状態に入る（後で説明する図１２を参照されたい）。そうではなく、判断ブロック３２２で偽が返される（No）場合には、処理は判断ブロック３２４で継続される。
【００５６】
判断ブロック３２４では、検査を行って、Ａ＝１およびＸＯＲ＞３であるかどうかを判定する。この実施形態では、デフォルトでＡに１に等しい値がセットされる。判断ブロック３２４で真が返される（Yes）場合には、処理はステップ３２０で継続される。そうではなく、判断ブロック３２４で偽が返される（No）場合には、処理は判断ブロック３２６で継続される。判断ブロック３２６では、検査を行って、Ｘ＞０、Ｆ＞０、Ｒ＝１、およびＳ＝０であるかどうかを判定する。判断ブロック３２６で真が返される（Yes）場合には、処理は図５（下で説明する）の判断ブロック３４０で継続される。そうではなく、判断ブロック３２６で偽が返される（No）場合には、処理は判断ブロック３２８で継続される。判断ブロック３２８では、検査を行って、Ｓ＝０、Ｒ＝１、およびＸ＞０であるかどうかを判定する。判断ブロック３２８で真が返される（Yes）場合には、処理はステップ３２０で継続される。そうではなく、判断ブロック３２８で偽が返される（No）場合には、処理は判断ブロック３３０で継続される。判断ブロック３３０では、検査を行って、Ｓ＝０、Ｒ＝１、およびＸ＝０であるかどうかを判定する。判断ブロック３３０で真が返される（Yes）場合には、処理は、図３のアイドル状態のステップ３１２で継続される。そうではなく、判断ブロック３３０で偽が返される（No）場合には、処理はステップ３３４で継続される。ステップ３３４では、現在の転送を打ち切る。その後、処理はステップ３３６で継続され、ここで、アイドル待ち状態に入る（図１２を参照されたい）。
【００５７】
もう一度図４の判断ブロック３２６を参照すると、判断ブロック３２６で真が返される（Yes）場合には、処理は、図５の判断ブロック３４０で継続される。判断ブロック３４０では、検査を行って、ライン転送要求を行うことができるかどうかを判定する。判断ブロック３４０で真が返される（Yes）場合には、処理は、図３および図４のステップ３２０で継続される。ステップ３２０では、要求状態に入る。そうではなく、判断ブロック３４０で偽が返される（No）場合には、処理は判断ブロック３４６で継続される。判断ブロック３４６では、検査を行って、固定長バースト転送要求を完了することができるかどうかを判定する。判断ブロック３４６で真が返される（Yes）場合には、処理はステップ３５６で継続される。ステップ３５６では、ＦＬバーストａｃｋ状態に入る（図７を参照されたい）。そうではなく、判断ブロック３４６で偽が返される（No）場合には、処理は判断ブロック３４８で継続される。
【００５８】
判断ブロック３４８では、検査を行って、シーケンシャル・バーストを完了することができる（すなわち、クロック１＝クロック２）であるかどうかを判定する。判断ブロック３４８で真が返される（Yes）場合には、処理は、ステップ３５０で継続される。ステップ３５０では、ＳＱバーストａｃｋ状態に入る（図８を参照されたい）。そうではなく、判断ブロック３４８で偽が返される（No）場合には、処理は判断ブロック３５２で継続される。判断ブロック３５２では、検査を行って、シーケンシャル・バースト要求を完了することができるかどうかを判定する。判断ブロック３５２で真が返される（Yes）場合には、処理はステップ３５０で継続される。そうではなく、判断ブロック３５２で偽が返される（No）場合には、処理は判断ブロック３５４で継続される。判断ブロック３５４では、検査を行って、ライン転送が不可能である場合にシーケンシャル・バースト要求を完了することができるかどうかを判定する。判断ブロック３５４で真が返される（Yes）場合には、処理はステップ３５６で継続される（図７を参照されたい）。そうではなく、判断ブロック３５４で偽が返される（No）場合には、処理は、図６の判断ブロック３６０で継続される。
【００５９】
図６を参照すると、判断ブロック３６０で、検査を行って、Ｘ＜閾値、Ｘ＞２、バースト転送が使用可能にされている、およびＦ≧Ｘであるかどうかを判定する。判断ブロック３６０で真が返される（Yes）場合には、処理はステップ３５６で継続される（図７を参照されたい）。そうではなく、判断ブロック３６０で偽が返される（No）場合には、処理は判断ブロック３６４で継続される。判断ブロック３６４では、検査を行って、バースト転送またはライン４／８転送を将来に行うことができるかどうかを判定する。判断ブロック３６４で真が返される（Yes）場合には、処理はステップ３２０で継続され、ここで、図３の要求状態に入る。そうではなく、判断ブロック３６４で偽が返される（No）場合には、処理はステップ３６６で継続される。ステップ３６６では、１ワード転送を実行する。その後、処理はステップ３２０で継続される。
【００６０】
図７のステップ３５６では、ＦＬバーストａｃｋ状態に入る。ステップ３６８では、検査を行って、Ｂ＝１であるかどうかを判定する。判断ステップ３６８で偽が返される（No）場合には、処理はステップ３２０で継続される。そうではなく、判断ブロック３６８で真が返される（Yes）場合には、処理はステップ３７２で継続される。ステップ３７２では、ＦＬバースト待ち状態に入る。
【００６１】
もう一度図５を参照すると、判断ブロック３４８または３５２で真が返される（Yes）場合に、図８に示されている、ＳＱバーストａｃｋ状態３５０に入る。その後、処理は判断ブロック３８０で継続される。判断ブロック３８０では、検査を行って、Ｂ＝１であるかどうかを判定する。判断ブロック３８０で偽が返される（No）場合には、処理はステップ３２０で継続される。ステップ３２０では、要求状態に入る。そうではなく、判断ブロック３８０で真が返される（Yes）場合には、処理はステップ３７４で継続される。ステップ３７４では、ＳＱバースト待ち状態に入る（図１０を参照されたい）。
【００６２】
図７を参照すると、判断ブロック３６８で真が返される（Yes）場合に、処理はＦＬバースト待ち状態のステップ３７２で継続される。図９では、ステップ３７２から、処理が判断ブロック３８１で継続される。判断ブロック３８１では、検査を行って、Ｌ＝１であるかどうかを判定する。判断ブロック３８１で偽が返される（No）場合には、処理は判断ブロック３８２で継続される。判断ブロック３８２では、検査を行って、Ｓ＝１であるかどうかを判定する。判断ブロック３８２で偽が返される（No）場合には、処理はステップ３７２で継続される。そうではなく、判断ブロック８３２で真が返される（Yes）場合には、処理はステップ３８４で継続される。ステップ３８４では、実行を打ち切り、ステップ３３６で、アイドル待ち状態に入る。
【００６３】
そうではなく、判断ブロック３８１で真が返される（Yes）場合には、処理は判断ブロック３８８で継続される。判断ブロック３８８では、検査を行って、Ｒ＝１、Ｓ＝０、Ｘ＞０、およびＦ＞０であるかどうかを判定する。判断ブロック３８８で真が返される（Yes）場合には、処理はステップ３２０で継続される。ステップ３２０では、要求状態に入る。そうではなく、判断ブロック３８８で偽が返される（No）場合には、処理はステップ３９０で継続される。ステップ３９０では、バーストｄａｓｋ状態を検査する（図１１を参照されたい）。
【００６４】
ステップ３９０から、処理は、判断ブロック３９２で継続される。判断ブロック３９２では、検査を行って、Ｓ＝１またはＸ＝０であるかどうかを判定する。判断ブロック３９２で真が返される（Yes）場合には、処理はステップ３３６で継続され、アイドル待ち状態に入る。そうではなく、判断ブロック３９２で偽が返される（No）場合には、処理は判断ブロック３９４で継続される。判断ブロック３９４では、検査を行って、Ｄ＝１およびＸ＞０であるかどうかを判定する。判断ブロック３９４で真が返される（Yes）場合には、処理はステップ３２０で継続される。ステップ３２０では、要求状態に入る。そうではなく、判断ブロック３９４で偽が返される（No）場合には、処理は判断ブロック３９６で継続される。判断ブロック３９６では、検査を行って、Ｄ＝１であるかどうかを判定する。判断ブロック３９６で真が返される（Yes）場合には、処理は図３のステップ３１２で継続される。ステップ３１２では、アイドル状態に入る。そうではなく、判断ブロック３９６で偽が返される（No）場合には、処理はステップ３９０で継続される。
【００６５】
図８のステップ３７４からの処理は、図１０の判断ブロック３９２で継続される。判断ブロック３９２で、検査を行って、Ｌ＝１であるかどうかを判定する。判断ブロック３９２で真が返される（Yes）場合には、処理はステップ３９０で継続される。ステップ３９０では、バーストｄａｃｋ状態を検査する（継続される処理については図１１を参照されたい）。
【００６６】
そうではなく、判断ブロック３９２で偽が返される（No）場合には、処理は判断ブロック３９４で継続される。判断ブロック３９４では、Ｓ＝１、Ｖ＞１３、またはＸ＜３であるかどうかを判定する。判断ブロック３９４で偽が返される（No）場合には、処理はステップ３７４で継続される。そうではなく、判断ブロック３９４で真が返される（Yes）場合には、処理はステップ３９６で継続される。ステップ３９６では、バースト転送を終了し、処理を打ち切る。処理は、ステップ３３６で継続され、ここで、アイドル待ち状態に入る。
【００６７】
図１０のステップ３９０から、処理は、図１１の判断ブロック３９２で継続される。判断ブロック３９２では、検査を行って、Ｓ＝１およびＸ＝０であるかどうかを判定する。判断ブロック３９２で真が返される（Yes）場合には、処理は、ステップ３３６で継続され、アイドル待ち状態に入る。そうではなく、判断ブロック３９２で偽が返される（No）場合には、処理は判断ブロック３９４で継続される。
【００６８】
判断ブロック３９４では、検査を行って、Ｄ＝１およびＸ＞０であるかどうかを判定する。判断ブロック３９４で真が返される（Yes）場合には、処理は、ステップ３２０で継続され、要求状態に入る。そうではなく、判断ブロック３９４で偽が返される（No）場合には、処理は判断ブロック３９６で継続される。
【００６９】
判断ブロック３９６では、検査を行って、Ｄ＝１であるかどうかを判定する。判断ブロック３９６で真が返される（Yes）場合には、処理は、ステップ３１２で継続され、アイドル状態に入る。そうではなく、判断ブロック３９６で偽が返される（No）場合には、処理はステップ３９０で継続される。
【００７０】
図１２を参照すると、アイドル待ち状態のステップ３３６から、処理は、判断ブロック３９８で継続される。判断ブロック３９８では、検査を行って、Ｉ＝１であるかどうかを判定する。判断ブロック３９８で偽が返される（No）場合には、処理はステップ３３６で継続される。そうではなく、判断ブロック３９８で真が返される（Yes）場合には、処理はステップ４００で継続される。ステップ４００では、現在のセッションを終了する。その後、処理は、ステップ３１２で継続され、アイドル状態に入る。
【００７１】
５．書込転送処理
図１３ないし図２２の書込状態機械は、以下の状態を有する（流れ図では、台形を使用してマークされる）。
１．アイドル状態
２．要求状態
３．ＦＬバーストａｃｋ状態
４．ＳＱバーストａｃｋ状態
５．ＦＬバースト待ち状態
６．ＳＱバースト待ち状態
７．第１要求状態
８．バーストｄａｃｋ検査状態
ここで、ＦＬは固定長（Fixed Length）を表し、ＳＱはシーケンシャル（Sequential）を表す。
【００７２】
アイドル状態
アイドル状態では、まず検査を行って、進行中または要求されたセッションがある（Ｒ＝１）かどうか、または現在のセッションで転送しなければならなかったデータのすべてが既に転送を要求されている（ＸＣ＝０）かどうかを判定する。これが真である場合には、現在のセッションを終了し、マスタが、別のセッションが開始されるまでアイドル状態で待つ。
【００７３】
上の条件が偽である場合には、検査を行って、進行中またはこれから開始されるセッションがある（Ｒ＝１）かどうか、すべての書込転送およびアクティビティが終わった（Ｉ＝１）かどうか、および現在のセッションで要求された残りのデータ転送が少なくとも１つある（ＸＣ＞０）かどうかを判定する。これらの条件のすべてが満足される場合には、検査を行って、ワード全体を転送しなければならない（ＦＡＡ＝１）かどうかを判定し、次のクロックに要求状態に入り、そこで、データの転送の正しい要求を行う。そうでない場合には、第１要求状態に入る。
【００７４】
しかし、これらの条件が満たされない場合には、マスタは、アイドル状態で待つ。
【００７５】
第１要求状態
第１要求状態では、ワードが、ワードのどのバイトを転送しなければならないかを示す適当な信号と共に、送られ、要求状態に入る。
【００７６】
要求状態
進行中のセッションがあり（Ｒ＝１）、現在のセッションで要求された残りのデータ転送がない（ＸＣ＝０）場合に、セッションを終了する信号を送った後に、次のクロックでアイドル状態に入る。
【００７７】
上の条件が偽である場合には、検査を行って、進行中またはこれから開始されるセッションがある（Ｒ＝１）かどうかと、現在のセッションで要求された残りのデータ転送が少なくとも１つある（ＸＣ＞０）かどうかを判定する。これらが満足される場合には、検査を行って、現在のセッションでもう１つのデータだけを送らなければならない（ＸＣ＝１）かどうか、データがＦＩＦＯ内で使用可能である（ＣＮＲ＝１）かどうか、またはテール・ビット信号によるセッションの終りがある（Ｔ＝１）かどうかを判定する。これらが真である場合には、ワードを、そのワードのどのバイトを転送しなければならないかを示す適当な信号と共に送り、要求状態に入る。そうでない場合には、他の種類の要求を生成する試みを行う。
【００７８】
バーストを要求できるのは、ＦＩＦＯ内のデータ項目の数が、少なくとも閾値、ＦＩＦＯ閾値と同一である（ＣＮＲ≧ＦＴＨ）場合だけである。唯一の例外は、セッション全体を完了することができる時である。この状態では、異なる種類の要求を生成することができる。ライン転送要求を生成する場合には、次の状態は要求状態になる。そうではなく、このセッションで必要なすべてのデータ転送を、固定長バーストによってちょうど完了することができる（ＣＮＲ＝ＸＣ）場合には、その要求を行い、ＦＬバーストａｃｋ状態に入る。これが可能でない場合には、デバイスの速度に応じて（両側のクロック速度が同一の場合に限って）、シーケンシャル・バーストによって、このセッションの残りのデータの全体を完全に転送することができるかどうかを予測する試みを行う。シーケンシャル・バーストが可能である場合には、その要求を行い、ＳＱバーストａｃｋ状態に入る。そうではなく、固定長バーストが可能である場合には、このタイプの要求を行い、ＦＬバーストａｃｋ状態に入る。その後、マスタは、シーケンシャル・バーストを行うことを試み、ＳＱバーストａｃｋ状態に入る。それが可能でない場合には、マスタは、他のよりよい種類の要求が将来に不可能である場合に限って、単一ワード転送の要求を送ることを試みる。その後、次のクロックで要求状態に入る。
【００７９】
ＦＬバーストａｃｋ状態／ＳＱバーストａｃｋ状態
固定長またはシーケンシャルのいずれかのバースト要求を生成した後に、ＰＬＢマスタ２１０は、この要求が実行される場合に、エンジンからの確認を待たなければならない。確認（Ｂ＝１）は、次のクロック・サイクルに来、マスタは、このクロック・サイクルを、固定長バースト要求の場合にはＦＬバースト状態、シーケンシャル・バースト要求の場合にはＳＱバースト状態で待つ。その後、それぞれＦＬバースト待ち状態またはＳＱバースト待ち状態に入る。確認が来ない場合には、マスタは、次のクロック・サイクルに要求状態に戻って、次の要求を生成する。
【００８０】
ＦＬバースト待ち状態／ＳＱバースト待ち状態
ＦＬバースト待ち状態およびＳＱバースト待ち状態の両方で、もう２つの転送だけが残っていることを示す信号（Ｌ＝１）が得られる。
【００８１】
ＦＬバースト待ち状態でこの信号を受け取る際に、マスタは、バーストｄａｃｋ検査状態に入る。そうでない場合には、マスタは、ＦＬバースト待ち状態で待ち続ける。
【００８２】
ＳＱバースト待ち状態では、検査を行って、ＦＩＦＯが空になる（ＣＮＲ＝２）かどうかを判定する。転送を終了するためにバーストを終了させる信号をできる限り早く送った後に、バーストｄａｃｋ検査状態に入る。信号（Ｌ＝１）が得られる場合には、バーストｄａｃｋ検査状態に入る。そうでない場合には、マスタは、ＳＱバースト待ち状態で待ち続ける。
【００８３】
バーストｄａｃｋ検査状態では、マスタは、バースト転送の最後のデータ転送が終わったことの確認を待つ。
【００８４】
バーストｄａｃｋ検査状態
バーストｄａｃｋ検査状態では、ＰＬＢマスタ２１０が、バースト転送の最後のデータ転送が終わった（ＷＤ＝１）ことの確認を待つ。これがそうである場合には、要求状態に入る。そうでない場合には、マスタはこの状態にとどまる。
【００８５】
図１３ないし図２２は、デバイスが書き込み転送を要求した時に、上で述べたパラメータに基づいて、バスに書き込み要求を出す処理４００を示す流れ図である。この処理は、図２４のＰＬＢマスタ６１０で実施される。表３に、図１３ないし図２２で使用される表記の定義をリストする。
【００８６】
【表３】
0004215417.tif 000004
【００８７】
図１３では、処理がステップ４０２で開始される。ステップ４０４で、アイドル状態に入る。判断ブロック４０６では、Ｒ＝１およびＸＣ＝０であるかどうかの検査を行う。判断ブロック４０６で真が返される（Yes）場合には、処理はステップ４０８で継続される。ステップ４０８では、現在のセッションを終了し、処理はステップ４０４で継続される。デバイスが、要求された転送の数を早期に中止する必要がある場合、またはマスタが、要求された数のデータの転送を完了した場合には、マスタは、end_sessionをデバイスに送る。そうではなく、判断ブロック４０６で偽が返される（No）場合には、処理は判断ブロック４１０で継続される。判断ブロック４１０では、検査を行って、Ｒ＝１、Ｉ＝１、およびＸＣ＞０であるかどうかを判定する。判断ブロック４１０で偽が返される（No）場合には、処理はステップ４０４で継続される。そうではなく、判断ブロック４１０で真が返される（Yes）場合には、処理は判断ブロック４１２で継続される。判断ブロック４１２では、検査を行って、ＦＡＡ＝１であるかどうかを判定する。判断ブロック４１２で偽が返される（No）場合には、処理はステップ４１６で継続される。ステップ４１６では、第１要求状態に入る（図１４を参照されたい）。そうではなく、判断ブロック４１２で真が返される（Yes）場合には、処理はステップ４１４で継続される。ステップ４１４では、要求状態に入る（図１５を参照されたい）。
【００８８】
図１４に関して、処理は、ステップ４１６からステップ４１８に継続される。ステップ４１８では、適当な第１バイトを使用可能にして、ワード転送を実行する。使用可能にされる第１バイトは、ＰＬＢ上での最初のワード・トランザクションの要求されるバイト数の転送に使用される。処理は、ステップ４１４で継続される（図１５を参照されたい）。
【００８９】
図１５に関して、ステップ４１４から、処理は判断ブロック４２０で継続される。判断ブロック４２０では、検査を行って、Ｒ＝１およびＸＣ＝０であるかどうかを判定する。判断ブロック４２０で真が返される（Yes）場合には、処理はステップ４２２で継続される。ステップ４２２では、現在のセッションを終了する。処理はステップ４０４で継続され、アイドル状態に入る。
【００９０】
そうではなく、判断ブロック４２０で偽が返される（No）場合には、処理は判断ブロック４２４で継続される。判断ブロック４２４では、検査を行って、Ｒ＝１およびＸＣ＞０であるかどうかを判定する。判断ブロック４２４で偽が返される（No）場合には、処理はステップ４１４で継続される。そうではなく、判断ブロック４２４で真が返される（Yes）場合には、処理は判断ブロック４２６で継続される。
【００９１】
判断ブロック４２６では、検査を行って、ＸＣ＝０、ＣＭＲ＝１、およびＴ＝０であるかどうかを判定する。判断ブロック４２６で真が返される（Yes）場合には、処理はステップ４２８で継続される。ステップ４２８では、適当な最終バイトを使用可能にして、ワード転送を実行する。使用可能にされた最終バイトは、ＰＬＢでの最後のワード・トランザクションの要求されたバイト数を転送するのに使用される。その後、処理はステップ４１４で継続される。そうではなく、判断ブロック４２６で偽が返される（No）場合には、処理は判断ブロック４３０で継続される。判断ブロック４３０では、検査を行って、Ｒ＝１およびＸＣ＞０であるかどうかを判定する。判断ブロック４３０で真が返される（Yes）場合には、処理はステップ４３２で継続される。ステップ４３２では、適当なテール・バイトを使用可能にして、ワード転送を実行する。デバイスによる書込トランザクションの異常終了の場合に、最後のワード転送で、使用可能な１バイトが必要である。これは、デバイスからのテール・バイトとして与えられる。その後、処理はステップ４１４で継続される。そうではなく、判断ブロック４３０で偽が返される（No）場合には、処理は、図１６の判断ブロック４３０で継続される。
【００９２】
図１６に関して、判断ブロック４３４で、検査を行って、８／１６／４ライン要求を行うことができるかどうかを判定する。ＰＬＢは、４ワード、８ワード、および１６ワードのライン転送をサポートする。このブロックの判断では、これらのライン転送の１つを選択する。判断ブロック４３４で真が返される（Yes）場合には、処理はステップ４１４で継続される。そうではなく、判断ブロック４３４で偽が返される（No）場合には、処理はステップ４３６で継続される。判断ブロック４３６では、検査を行って、固定長バースト要求を完了することができるかどうかを判定する。判断ブロック４３６で真が返される（Yes）場合には、処理はステップ４３８で継続される。ステップ４３８では、ＦＬバーストａｃｋ状態に入る（図１８を参照されたい）。
【００９３】
そうではなく、判断ブロック４３６で偽が返される（No）場合には、処理はステップ４４０で継続される。ステップ４４０では、検査を行って、クロック１＝クロック２（Clk1=Clk2）であるかどうかを判定する。判断ブロック４４０で真が返される（Yes）場合には、処理はステップ４４２で継続される。ステップ４４２では、ＳＱバーストａｃｋ状態に入る（図１９を参照されたい）。
【００９４】
判断ブロック４４０で偽が返される（No）場合には、処理は判断ブロック４４４で継続される。判断ブロック４４４では、検査を行って、ＣＮＲ＞ＦＴＨの場合に固定長バースト要求を行うことができるかどうかを判定する。４４４で検査される条件は、ＦＩＦＯ内の有効な項目が、ＦＩＦＯ閾値より多く、固定長バースト要求が可能であるかどうかである。判断ブロック４４４で真が返される（Yes）場合には、処理はステップ４３８で継続される。そうではなく、判断ブロック４４４で偽が返される（No）場合には、処理は判断ブロック４４６で継続される。判断ブロック４４６では、検査を行って、ＣＮＲ＞ＦＴＨの場合にシーケンシャル・バースト要求を行うことができるかどうかを判定する。判断ブロック４４６で真が返される（Yes）場合には、処理はステップ４４２で継続される（図１９を参照されたい）。そうではなく、判断ブロック４４６で偽が返される（No）場合には、処理は、図１７の判断ブロック４４８で継続される。
【００９５】
図１７に関して、判断ブロック４４８で、検査を行って、ワード転送を行うことができるかどうかを判定する。判断ブロック４４８で真が返される（Yes）場合には、処理はステップ４１４で継続される。ステップ４１４では、要求状態に入る。そうではなく、判断ブロック４４８で偽が返される（No）場合には、処理はステップ４５０で継続される。ステップ４５０では、ＦＴＨを待つ状態に入る。総合性能を改善するために、要求は、ＦＩＦＯ内の項目の数がＦＩＦＯ閾値以上になるまでＰＬＢに出されない。その後、処理は、要求状態のステップ４１４で継続される。
【００９６】
図１６に関して、ステップ４３８から、処理は、図１８の判断ブロック４５２で継続される。判断ブロック４５２では、検査を行って、Ｂ＝１であるかどうかを判定する。判断ブロック４５２で偽が返される（No）場合には、処理は、ステップ４１４で継続され、要求状態に入る。そうではなく、判断ブロック４５２で真が返される（Yes）場合には、処理はステップ４５４で継続される。ステップ４５４では、ＦＬバースト待ち状態に入る（図２０を参照されたい）。
【００９７】
図１６に関して、ステップ４４２から、処理は、図１９の判断ブロック４５６で継続される。判断ブロック４５６で、検査を行って、Ｂ＝１であるかどうかを判定する。判断ブロック４５６で偽が返される（No）場合には、処理は、ステップ４１４で継続され、要求状態に入る。そうではなく、判断ブロック４５６で真が返される（Yes）場合には、処理はステップ４５８で継続される。ステップ４５８では、ＳＱバースト待ち状態に入る（図２１を参照されたい）。
【００９８】
図１８に関して、処理は、ステップ４５４から、図２０の判断ブロック４６０に継続される。判断ブロック４６０では、検査を行って、Ｌ＝１であるかどうかを判定する。判断ブロック４６０で偽が返される（No）場合には、処理はステップ４５４で継続される。そうではなく、判断ブロック４６０で真が返される（Yes）場合には、処理はステップ４６２で継続される。ステップ４６２では、バーストｄａｃｋ状態を検査する（図２２を参照されたい）。ＤＡＣＫは、Data Acknowledgement（データ肯定応答）を表す。バーストｄａｃｋ検査状態では、マスタが、バースト転送の最後のデータ転送が終わったことの確認（ＷＤ＝１）を待つ。これがそうである場合には、要求状態に入る。そうでない場合には、マスタはこの状態にとどまる。
【００９９】
図１９に関して、処理は、ステップ４５８から、図２１の判断ブロック４６４に継続される。判断ブロック４６４では、検査を行って、ＣＮＲ＝２であるかどうかを判定する。判断ブロック４６４で真が返される（Yes）場合には、処理はステップ４６６で継続される。ステップ４６６では、バースト転送を終了する。その後、処理は、ステップ４６２に継続され、ここで、バーストｄａｃｋ状態を検査する。
【０１００】
そうではなく、判断ブロック４６４で偽が返される（No）場合には、処理は判断ブロック４６８で継続される。判断ブロック４６８では、検査を行って、Ｌ＝１であるかどうかを判定する。判断ブロック４６８で偽が返される（No）場合には、処理はステップ４５８で継続される。そうではなく、判断ブロック４６８で真が返される（Yes）場合には、処理はステップ４６２で継続される。
【０１０１】
図２２に関して、ステップ４７０で、バーストｄａｃｋ状態を検査する。処理は、判断ブロック４７２で継続される。判断ブロック４７２では、検査を行って、ＷＤ＝１であるかどうかを判定する。判断ブロック４７２で偽が返される（No）場合には、処理はステップ４７０で継続される。そうではなく、判断ブロック４７２で真が返される（Yes）場合には、処理はステップ４１４で継続され、要求状態に入る。
【０１０２】
６．結果
図３ないし図１２の読取転送の処理および図１３ないし図２２の書込転送の処理は、デバイスＴ１３９４に非同期にインターフェースする図２４のＰＬＢマスタ６１０で実施される。ＰＬＢマスタ６１０は、３２ビットＰＬＢマスタである。図２３のＳＷＫＯＭ−Ｍａｓｔ５１０は、本発明の実施形態を実装せず、ＰＬＢマスタ６１０との比較の目的のみのために図示される。図２３および図２４では、システム５００および６００のそれぞれに、ＰＬＢ１３０に結合されたＰＬＢスレーブ５０２が含まれる。そのようなシステムには、Ｔ１３９４デバイス５２０も含まれる。Ｔ１３９４は、１３９４ａリンク層コントローラである。システム５００では、ＳＷＫＯＭ−Ｍａｓｔ５１０が、Ｔ１３９４デバイス５２０とＰＬＢ１３０の間に結合される。同様に、図２４では、ＰＬＢマスタ６１０が、Ｔ１３９４デバイス５２０とＰＬＢ１３０の間に結合される。図２４のＰＬＢマスタ６１０は、図２４ではＦＩＦＯが図示されていないが、図２による本発明の実施形態を実施する。
【０１０３】
３２ビット幅、深さ１６のＦＩＦＯが、非同期インターフェースでの読取および書込のデータ転送のためにＰＬＢマスタ６１０内で使用される。Ｔ１３９４デバイス５２０が、ＰＬＢ１３０上での書込転送セッションまたは読取転送セッションを要求した。もう１つのＰＬＢマスタである図２３のＳＷＫＯＭ−Ｍａｓｔ５１０は、同一のＴ１３９４デバイス５２０と非同期にインターフェースする。ＳＷＫＯＭ−Ｍａｓｔ５１０も、３２ビットＰＬＢマスタである。ＳＷＫＯＭ−Ｍａｓｔ５１０が、Ｔ１３９４デバイス５２０によって要求されたすべてのトランザクションを完了する。非同期インターフェースに関して使用されるＴ１３９４デバイス５２０は同一なので、同一のテスト・ケースを両方の環境で実行することができ、シミュレーション実行時間を表４に示す。表４から、ＰＬＢマスタ６１０とＳＷＫＯＭ−Ｍａｓｔ５１０の両方の、テスト・ケースのサンプルに関するシミュレーション実行時間の結果が与えられる。ＰＬＢクロック・サイクル・タイムは１０ｎｓである。
【０１０４】
【表４】
0004215417.tif 000005
【０１０５】
表４から、ＰＬＢマスタ６１０で実施された図３ないし図１２および図１３ないし図２２の処理が、ＳＷＫＯＭ−Ｍａｓｔ５１０よりよい性能をもたらし、ＰＬＢ１３０上のバス使用率がよい。
【０１０６】
７．コンピュータベースのシステム
ＰＬＢシステムのバスを最適化する方法の構成要素を、モジュールとして実施することができる。モジュールは、特にその機能性において、ハードウェアまたはソフトウェアのいずれかで実施することができる。ソフトウェアの意味では、モジュールは、通常は特定の機能または関連する諸機能を実行する、プロセス、プログラム、またはその一部である。ハードウェアの意味では、モジュールは、他の構成要素またはモジュールと共に使用するために設計された機能ハードウェア・ユニットである。たとえば、モジュールは、別個の電子構成要素を使用して実施することができ、また、特定用途向け集積回路（ＡＳＩＣ）などの電子回路全体の一部を形成することができる。多数の他の可能性が存在する。当業者は、このシステムを、ハードウェア・モジュールとソフトウェア・モジュールの組み合わせとして実施することもできることを諒解するであろう。
【０１０７】
ＰＬＢシステムのバスを最適化する方法ステップを、ソフトウェアの命令によってもたらすことができる。やはり、ソフトウェアは、方法ステップを実施するための１つまたは複数のモジュールとして実施することができる。
【０１０８】
具体的に言うと、ソフトウェアは、記憶装置を含むコンピュータ可読媒体に保管することができる。コンピュータ可読媒体には、記録されたソフトウェアまたはプログラム・コードを保管することができ、その結果、ソフトウェアまたはプログラム・コードの命令を実行できるようになる。この実施形態のプロセスは、コンピュータ可読媒体に記録されたソフトウェアまたはコンピュータ可読プログラム・コードとして常駐することができる。
【０１０９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【０１１０】
（１）プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する方法であって、
前記ＰＬＢシステムの前記バス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンを設けるステップと、
前記バスに結合されたデバイスから非同期に受け取る転送要求に応答して、前記ＰＬＢシステムの前記バスの動作を最適化するために、前記マスタ・エンジンによって実行される転送のタイプを決定するステップと、
前記決定された転送のタイプに応じて、前記デバイスと前記ＰＬＢシステムの前記バスとの間でＦＩＦＯを使用してデータを非同期に転送するステップと
を含む方法。
（２）前記転送要求が、読取データ転送または書込データ転送に関する、上記（１）に記載の方法。
（３）前記決定ステップが、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用し、ここで、ｆ（）が、
c1c2  ＝  ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、
S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、
arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、
thr_fifo  ＝  ＦＩＦＯの閾値
の関数であり、
ｇ（）が、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_Dackの関数であり、
ｈ（）が、
t  ＝  時刻、
latmr  ＝  時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  時刻tでのＦＩＦＯの占有、
pend_req  ＝  時刻tでの保留中の要求、および
pend_pri  ＝  時刻tでの保留中要求の優先順位
の関数である
上記（１）に記載の方法。
（４）さらに、転送要求を生成するステップを含む、上記（１）に記載の方法。
（５）前記生成するステップが、
残っている転送の数を示す転送カウントを検査するステップと、
有効なデータによって占有されている前記ＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査するステップと、
前記転送カウント検査および前記ｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送を含むグループから次の要求タイプを決定するステップと、
前記転送要求を送るステップと
を含む、上記（４）に記載の方法。
（６）前記転送要求を送った後に、前記ＰＬＢシステムの前記バスに次の要求を出すステップと、
前の要求タイプおよび前記転送カウントに基づいて、要求タイプを決定するステップと
をさらに含む、上記（５）に記載の方法。
（７）プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化する装置であって、
前記ＰＬＢシステムの前記バス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンと、
前記バスに結合されたデバイスから非同期に受け取る転送要求に応答して、前記ＰＬＢシステムの前記バスの動作を最適化するために、前記マスタ・エンジンによって実行される転送のタイプを決定する手段と、
前記決定された転送のタイプに応じて、前記デバイスと前記ＰＬＢシステムの前記バスとの間でデータを非同期に転送するために前記マスタ・エンジンに結合されたＦＩＦＯと
を含む装置。
（８）前記転送要求が、読取データ転送または書込データ転送に関する、上記（７）に記載の装置。
（９）前記決定手段が、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用し、ここで、ｆ（）が、
c1c2  ＝  ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、
S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、
arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、
thr_fifo  ＝  ＦＩＦＯの閾値
の関数であり、
ｇ（）が、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_Dackの関数であり、
ｈ（）が、
t  ＝  時刻、
latmr  ＝  時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  時刻tでのＦＩＦＯの占有、
pend_req  ＝  時刻tでの保留中の要求、および
pend_pri  ＝  時刻tでの保留中要求の優先順位
の関数である
上記（７）に記載の装置。
（１０）さらに、転送要求を生成する手段を含む、上記（７）に記載の装置。
（１１）前記生成する手段が、
残っている転送の数を示す転送カウントを検査する手段と、
有効なデータによって占有されている前記ＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査する手段と、
前記転送カウント検査および前記ｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送を含むグループから次の要求タイプを決定する手段と、
前記転送要求を送る手段と
を含む、上記（１０）に記載の装置。
（１２）前記転送要求を送った後に、前記ＰＬＢシステムの前記バスに次の要求を出す手段と、
前の要求タイプおよび前記転送カウントに基づいて、要求タイプを決定する手段と
をさらに含む、上記（１１）に記載の装置。
（１３）プロセッサ・ローカル・バス（ＰＬＢ）システムのバスを最適化するコンピュータ・プログラムをその中に記録されたコンピュータ可読媒体を有するコンピュータ・プログラム製品であって、
前記ＰＬＢシステムの前記バス上でのＮバイトのデータの転送トランザクションを実行するマスタ・エンジンを設けるコンピュータ・プログラム・コード手段と、
前記バスに結合されたデバイスから非同期に受け取る転送要求に応答して、前記ＰＬＢシステムの前記バスの動作を最適化するために、前記マスタ・エンジンによって実行される転送のタイプを決定するコンピュータ・プログラム・コード手段と、
前記決定された転送のタイプに応じて、前記デバイスと前記ＰＬＢシステムの前記バスとの間でＦＩＦＯを使用してデータを非同期に転送するコンピュータ・プログラム・コード手段と
を含むコンピュータ・プログラム製品。
（１４）前記転送要求が、読取データ転送または書込データ転送に関する、上記（１３）に記載のコンピュータ・プログラム製品。
（１５）前記決定するコンピュータ・プログラム・コード手段が、要求タイプ決定関数
Opt_req(t) = f(c1c2, S_FIFO, arb, thr_fifo) +
g(wait_AAck, wait_DAck) +
h(t, latmr, xfer_cnt, cnt_fifo, pend_req, pend_pri)
を使用し、ここで、ｆ（）が、
c1c2  ＝  ＰＬＢクロックｃ１とデバイス・クロックｃ２との間のクロック周波数比、
S_FIFO  ＝  非同期インターフェースに使用されるＦＩＦＯのサイズ、
arb  ＝  ＰＬＢ調停タイプ（単一サイクルまたは２サイクル）、
thr_fifo  ＝  ＦＩＦＯの閾値
の関数であり、
ｇ（）が、スレーブ・アドレス肯定応答待ち状態wait_AAckおよびスレーブ・データ肯定応答待ち状態wait_Dackの関数であり、
ｈ（）が、
t  ＝  時刻、
latmr  ＝  時刻tでのＰＬＢマスタの待ち時間タイマ・カウント値、
xfer_cnt  ＝  デバイスが要求した数の転送を完了するための、時刻tでの残っているデータ転送の数、
cnt_fifo  ＝  時刻tでのＦＩＦＯの占有、
pend_req  ＝  時刻tでの保留中の要求、および
pend_pri  ＝  時刻tでの保留中要求の優先順位
の関数である
上記（１３）に記載のコンピュータ・プログラム製品。
（１６）さらに、転送要求を生成するコンピュータ・プログラム・コード手段を含む、上記（１３）に記載のコンピュータ・プログラム製品。
（１７）前記生成するコンピュータ・プログラム・コード手段が、
残っている転送の数を示す転送カウントを検査するコンピュータ・プログラム・コード手段と、
有効なデータによって占有されている前記ＦＩＦＯ内の項目の数を示すｆｉｆｏカウントを検査するコンピュータ・プログラム・コード手段と、
前記転送カウント検査および前記ｆｉｆｏカウント検査に基づいて、ワード転送、シーケンシャル・バースト転送、固定長バースト転送、およびライン転送からなるグループから次の要求タイプを決定するコンピュータ・プログラム・コード手段と、
前記転送要求を送るコンピュータ・プログラム・コード手段と
を含む、上記（１６）に記載のコンピュータ・プログラム製品。
（１８）前記転送要求を送った後に、前記ＰＬＢシステムの前記バスに前記次の要求を出すコンピュータ・プログラム・コード手段と、
前の要求タイプおよび前記転送カウントに基づいて、要求タイプを決定するコンピュータ・プログラム・コード手段と
をさらに含む、上記（１３）に記載のコンピュータ・プログラム製品。
【図面の簡単な説明】
【図１】これを用いて本発明の実施形態を実施することができる、プロセッサ・ローカル・バス（ＰＬＢ）アーキテクチャを有するシステムオンチップ（ＳＯＣ）の一部のブロック図である。
【図２】本発明の実施形態による、デバイスと非同期にインターフェースするＰＬＢマスタのブロック図である。
【図３】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図４】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図５】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図６】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図７】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図８】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図９】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図１０】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図１１】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図１２】本発明の第１の実施形態による、デバイスが読取転送を要求した時の、ＰＬＢシステムのバスに読取要求を出す処理を示す流れ図の一部である。
【図１３】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１４】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１５】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１６】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１７】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１８】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図１９】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図２０】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図２１】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図２２】本発明の第１の実施形態による、デバイスが書込転送を要求した時の、ＰＬＢシステムのバスに書込要求を出す処理を示す流れ図の一部である。
【図２３】既存の実施形態のブロック図である。
【図２４】本発明の実施形態を使用するシミュレーション環境のブロック図である。
【符号の説明】
１００  ＰＬＢシステム
１１０  プロセッサ・コア
１１４  データ・キャッシュ・ユニット
１１６  命令キャッシュ・ユニット
１２０  ＰＬＢアービタ
１３０  プロセッサ・ローカル・バス（ＰＬＢ）
１４０  外部周辺コントローラ
１４４  ＳＲＡＭ／ＲＯＭ
１４６  外部周辺機器
１４８  外部バス・マスタ
１５０  メモリ・コントローラ
１５４  ＳＤＲＡＭコントローラ
１６０  １３９４ａリンク層コントローラ
１７０  デバイス制御レジスタ（ＤＣＲ）バス
【図１】
0004215417.tif 000006
【図２】
0004215417.tif 000007
【図３】
0004215417.tif 000008
【図４】
0004215417.tif 000009
【図５】
0004215417.tif 000010
【図６】
0004215417.tif 000011
【図７】
0004215417.tif 000012
【図８】
0004215417.tif 000013
【図９】
0004215417.tif 000014
【図１０】
0004215417.tif 000015
【図１１】
0004215417.tif 000016
【図１２】
0004215417.tif 000017
【図１３】
0004215417.tif 000018
【図１４】
0004215417.tif 000019
【図１５】
0004215417.tif 000020
【図１６】
0004215417.tif 000021
【図１７】
0004215417.tif 000022
【図１８】
0004215417.tif 000023
【図１９】
0004215417.tif 000024
【図２０】
0004215417.tif 000025
【図２１】
0004215417.tif 000026
【図２２】
0004215417.tif 000027
【図２３】
0004215417.tif 000028
【図２４】
0004215417.tif 000029