インテルのみ表示可能 — GUID: mtr1430270886847
Ixiasoft
インテルのみ表示可能 — GUID: mtr1430270886847
Ixiasoft
6.1. ラウンド・ロビン・スケジュラー
ラウンド・ロビン・スケジュラーは基本機能ブロックです。次の例では、モジュラス演算子を使用して、サービスの次のクライアントを決定します。モジュラス演算子は、除算を実行するため、比較的遅く、領域が非効率的です。
ラウンド・ロビン・スケジュラーのソースコード
module round_robin_modulo # (
parameter LOG2_CLIENTS = 7,
parameter CLIENTS = 3)
{
// previous client to be serviced
input wire [LOG2_CLIENTS -1:0] last,
// Client requests:-
input wire [CLIENTS -1:0] requests,
// Next client to be serviced: -
output reg [LOG2_CLIENTS -1:0] next,
};
//Schedule the next client in a round robin fashion, based on the previous
always @*
begin
integer J, K;
begin : find_next
next = last; // Default to staying with the previous
for (J = 1; J < CLIENTS; J=J+1)
begin
K = (last + J) % CLIENTS;
if (requests[K] == 1'b1)
begin
next = K[0 +: LOG2_CLIENTS];
disable find_next;
end
end // of 'find_next'
end
endmodule
Fast Forward Summaryレポートは、クリティカル・チェーン上のHyper-Retimingを制限するレジスターが不十分であることを示しています。チェーンは、LPM_DIVIDE IPコアで実装されたモジュラス演算子を介して、最後の入力に接続するレジスターから、次の出力に接続されているレジスターまでです。
上のクリティカル・チェーンの44個のエレメントは、下の回路図に対応し、10レベルのロジックを備えています。モジュラス演算子は、低パフォーマンスに大きく貢献します。 10レベルのロジックのうち9つは、モジュラス演算子の実装の一部です。
Fast Forwardコンパイルは、モジュール入力で2つのパイプライン・ステージを追加し、ロジッククラウドでリタイミングすることにより、140%のパフォーマンス向上を見積もります。この時点で、クリティカル・チェーンはショートパス/ロングパスであり、モジュラス演算子を含みます。
モジュラス演算の除算器は、RTL修正が必要なボトルネックです。 Fast Forwardコンパイルのすべてのステップでクリティカル・チェーンにディバイダのパスが存在します。サービスする次のクライアントを計算し、モジュラス演算子を回避するための代替実装を検討してください。クライアントの数を2の累乗として指定する実装に切り替えると、モジュラス演算子は、次に処理するクライアントを決定する必要はありません。 2 nより小さいクライアントでモジュールをインスタンス化するときは、未使用の要求入力をロジック0に関連付けます。
2 nクライアント入力によるパフォーマンスの向上したラウンド・ロビン・スケジュラーのソースコード
module round_robin # (
parameter LOG2_CLIENTS = 3,
parameter CLIENTS = 2**LOG2_CLIENTS)
{
// Previous client to be serviced:-
input wire [LOG2_CLIENTS -1:0] last,
// Client requests:-
input wire [CLIENTS -1:0] requests,
// Next client to be serviced:-
output reg [LOG2_CLIENTS -1:0] next
};
//Schedule the next client in a round robin fashion, based on the previous
always @(next or last or requests)
begin
integer J,K;
begin : find_next
next = last; // Default to staying with the previous
for (J=1; J<CLIENTS; J = J+1)
begin
K = last + J;
if (requests[k]0 +: LOG2_CLIENTS]] == 1'b1)
begin
next = K[0 +: LOG2_CLIENTS];
disable find_next;
end
end
end// of 'find_next'
end
endmodule
Fast Forwardの最適化(基本パフォーマンスステップ)がなければ、このバージョンのクリティカル・チェーンでは、レジスターが不十分であるというパフォーマンス制限の理由もあります。両方のバージョンのクリティカル・チェーンには2つのレジスターのみが含まれていますが、2nバージョンのクリティカル・チェーンにはモジュラスバージョンの44個の要素と比較して26個の要素しか含まれていません。
上のクリティカル・チェーンの26個の要素は、次の回路図に対応し、論理レベルは4つのみです。
入力に2つのレジスター段を追加して、ロジッククラウドを介してリタイミングすることにより、Fast Forward Compileは回路性能を1 GHzにします。これは図 130デバイスのアーキテクチャーの限界です。モジュラス・バージョンと同様に、ファスト・フォワード最適化後の最終的なクリティカル・チェーンは、ショートパス/ロングパスという限定理由がありますが、パフォーマンスはモジュラス・バージョンの2倍です。
モジュラス演算子を削除し、2のべき乗累乗の実装に切り替えることは非常に小さなデザイン変更であり、劇的なパフォーマンスの向上を提供します。
- 可能な限り、数学演算には2の自然乗を使用します。
- 一見基本的な機能の代替実装を探索します。
この例では、ラウンドロビンロジックの実装を変更すると、パイプライン・ステージを追加するよりもパフォーマンスが向上します。