コンテンツ
エッジアラインサンプリング
エッジアラインサンプリング方式は、入力遅延制約を実装します。シリーズ第8回の講義で紹介したように、エッジアラインサンプリングの場合、ホールドタイムマージンが不足しやすくなります。これは、送信クロックの次のクロックが原因です。をサンプリングクロックとして使用します。データをサンプリングする場合、1クロックサイクルの間隔があるため、サンプリングクロックの時刻がデータの終了時刻より遅くなりやすく、サンプリングクロックはサンプリングできません。データ。PLLアライメントを使用してタイミングを制限し、PLLを使用してクロックを処理できます。左にシフトするとクロックが進み、ホールドタイムマージンが増加します。
タイミング図
PLLを使用して時間を右にシフトするとどうなりますか?特定の実験でそれを確認してください。
PLLパラメータを変更する
これはまだ以前の実験プロジェクトであり、PLLIPコアのパラメーターを変更するだけで済みます。
位相オフセットを60に変更し、残りのパラメーターは同じままにします。
統合配線
一般的なルーティングが完了したら、ルーティングデザインを開きます
レポートのタイミング
以下のように設定してください
このとき、確立時間の違反があることがわかります。
パス分析
分析するパスの1つをクリックします
このパスのタイミングレポートから、要件の列は送信クロックがオンであり、サンプリングクロックが3.086nsであることを意味していることがわかります。これは明らかに間違った分析です。クロックサイクルは約18nsで、部分的にオフセットされています。サンプリングクロックは約20nsである必要があります。タイミング解析ツールは、サンプリングクロックがオフセット直後の送信クロックであると誤って判断している必要があります。どうすればよいですか。
2つの制約モデル
最初のモデル
このタイミングモデルは、入力にPLLがあり、コアにPLLがない場合に使用できます。サンプリングクロックの位相シフトがPLLで正の場合、「マルチサイクル制約」を実行する必要があります。そうでない場合、分析レポートは次のようになります。正しくない。つまり、クロックを右に位相シフトする場合、タイミング分析ツールに必要なサンプリングクロックを指示する必要があります。
実際の操作
クリックしてタイミング制約を編集
クリックしてマルチサイクルパスを設定
制約を追加する
指定パス乗数を2、2に設定すると、サンプリングクロックとして2番目の立ち上がりエッジが必要になります。
パス分析
[OK]をクリックしてリロードし、新しいタイミングレポートを表示します。この時点でセットアップ時間が通常に戻っていることがわかりますが、ホールドタイムに違反しています。分析するパスの1つをクリックできます。
要件列のデータを引き続き見ると、サンプリングクロックは元々18.518nsでしたが、現在は21.604nsになっています。これは、クロックを右にシフトして得られた結果と一致しています。ホールドタイムに違反していますが、正しいタイミングが報告されます。したがって、サンプリングクロックの位相シフトが正の場合、マルチサイクル制約が必要になります。
2番目のモデル
このタイプのモデルは、前のクロックを送信クロックとして使用し、次のクロックをサンプリングクロックとして使用します。前のモデルと比較すると、クロックはほぼ1クロック先に相当します。このタイミングモデルは、入力にPLL。以前のモデルではクロックルーティングを短くすることでしたが、ルーティングツールは、セトリング時間が要件を満たすように、クロックルーティング遅延を可能な限り増やすことをお勧めします。
実際のエンジニアリングで両方のモデルをシミュレートします(PLLなし)
実験プロジェクトは以前のプロジェクトから変更されたままであり、PLLのインスタンス化コードのみを最上位層でコメント化する必要があります。
トップレベルコード
module top_ioddr(
input wire rx_clk,
input wire rx_ctrl,
input wire [3:0] rx_dat,
//tx
output wire tx_clk,
output wire [3:0] tx_d,
output wire tx_dv,
input wire sdrclk,
input wire [3:0] sdrdata,
input wire sdrden,
output reg tout
);
wire rst;
wire rx_clk_90;
wire rx_en;
wire [7:0] rx_data;
reg tx_en1,tx_en2;
reg [7:0] tx_data1,tx_data2;
assign rst =0;
assign rx_clk_90 = rx_clk;
always @(posedge rx_clk_90 or posedge rst) begin
if (rst == 1'b1) begin
tx_data1 <= 'd0;
end
else if (rx_en == 1'b1) begin
tx_data1 <= rx_data+ rx_data -1;
end
end
always @(posedge rx_clk_90 or posedge rst) begin
if (rst == 1'b1) begin
tx_data2 <= 'd0;
end
else if (tx_en1 == 1'b1) begin
tx_data2 <= tx_data1+ tx_data1 -5;
end
end
always @(posedge rx_clk_90 ) begin
tx_en1 <= rx_en;
end
always @(posedge rx_clk_90 ) begin
tx_en2 <= tx_en1;
end
iddr_ctrl inst_iddr_ctrl
(
.rx_clk_90 (rx_clk_90),
.rst (rst),
.rx_dat (rx_dat),
.rx_ctrl (rx_ctrl),
.rx_en (rx_en),
.rx_data (rx_data)
);
oddr_ctrl inst_oddr_ctrl
(
.sclk (rx_clk_90),
.tx_dat (tx_data2),
.tx_en (tx_en2),
.tx_c (rx_clk_90),
.tx_data (tx_d),
.tx_dv (tx_dv),
.tx_clk (tx_clk)
);
reg [3:0] sdrdata_r1,sdrdata_r2;
reg sdrden_r1,sdrden_r2;
always @(posedge sdrclk) begin
{sdrdata_r2,sdrdata_r1} <= {sdrdata_r1,sdrdata};
end
always @(posedge sdrclk) begin
{sdrden_r2,sdrden_r1} <= {sdrden_r1,sdrden};
end
always @(posedge sdrclk) begin
if(sdrden_r2 == 1'b1) begin
tout <= (&sdrdata_r1)|(&sdrdata_r2);
end
else begin
tout <= (^sdrdata_r2);
end
end
endmodule
プロジェクトを再配線します
ルーティング設定を開く
クロック制約を追加する
入力遅延を設定する
最大値は20.518ns、最小値は16.518nsです。設定方法は基本的に前のチュートリアルと同じです。
現時点でタイミング違反があります
セットアップ時間の違反は、次のクロックがデータの開始に対して早すぎることを示し、セットアップ時間の違反になります。このモデルでは、タイミング制約ツールがクロックをより長くルーティングできることが期待されます。セットアップ時間が長くなる可能性があります。少し長くなりますが、それはできません。そのため、別の制約を追加して、タイミングを通常に戻すことができます。
解決
下の図に示すモデルにタイミングを制限します
入力遅延制約
最大は2ns、最小は-2nsです。これは、現在のクロックを送信クロックとして使用し、次のクロックをサンプリングクロックとして使用することに相当します。
統合配線
結果
タイミングを報告すると、タイミングが正常に戻っていることがわかります
要約する
PLL制約がある場合は、両方のモデルを使用できますが、クロックを右にシフトすると、追加の「マルチサイクル」制約を追加する必要があることに注意してください。操作のこの部分を保存するには、左シフトが一般的に使用されます。クロックの制約方法。
PLL制約がない場合、データパスルーティングを長くする(またはクロックパスルーティングを短くする)必要がある場合は、制約に最初のモデルを使用できることを考慮する必要があります。クロックパスルーティングを作成する必要がある場合は長くなります(またはデータパスルーティングは短くなります)。これは、2番目のモデルを使用して制約できます。
過去の一連のブログ
[XilinxVivadoタイミング分析/制約シリーズ1]FPGA開発タイミング分析/制約-レジスタ間タイミング分析
[XilinxVivadoタイミング分析/制約シリーズ2]FPGA開発タイミング分析/制約-セットアップ時間
[XilinxVivadoタイミング分析/制約シリーズ3]FPGA開発タイミング分析/制約保持時間
[XilinxVivadoタイミング分析/制約シリーズ4]FPGA開発タイミング分析/制約-実験エンジニアリングハンズオンオペレーション
[XilinxVivadoタイミング分析/制約シリーズ5]FPGA開発タイミング分析/制約IOタイミング分析
[XilinxVivadoタイミング分析/制約シリーズ6]FPGA開発タイミング分析/制約IOタイミング入力遅延
[XilinxVivadoタイミング分析/制約シリーズ7]FPGA開発タイミング分析/制約-FPGAシングルエッジサンプリングデータ入力遅延タイミング制約の実践
[XilinxVivadoタイミング分析/制約シリーズ8]FPGA開発タイミング分析/制約-FPGAデータ中間サンプリング、エッジサンプリングPLLタイミング最適化プラクティス