コンテンツ
デスティネーションクロックパス:デスティネーションクロックパス
第6節の内容によると、この記事は実際の操作で説明されています。
今回は実際のプロジェクト(Vivado)で実施します
問題の紹介
データの到着時間はFPGAピンでのクロックの立ち上がりエッジから3ns後、クロックサイクルは10nsです。入力遅延を制限してタイミングレポートを表示するにはどうすればよいですか。
問題を分析する
上記のタイミング図とタイトルを組み合わせると、FPGAピンにクロックの立ち上がりエッジが到着してから3nsがデータ到着時間であるため、LrminとLrmaxがない、つまり、 PCB配線の長さのうち、の立ち上がりエッジから3ns後のFPGAクロックでは、データ内のFPGAデータがハイにプルされます。
実用的なエンジニアリングソリューション
新築
基本的な内容は、最上位のファイルコードにさらにいくつかのクロック、イネーブル信号、データなどがあり、最後に2つのビートが再生されることを除いて、以前の確立時間の分析と同様です。
トップレベルコード
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;
/*
clk_wiz_0 clk_gen0
(
// Clock out ports
.clk_out1(rx_clk_90), // output clk_out1
// Clock in ports
.clk_in1(rx_clk)); // input clk_in1
*/
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)
);
//sdr clock domain
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
前の操作と同様に、ビットストリームファイルを生成してから、ルーティングデザインを開きます。
タイミング制約を編集する
ここでの操作のほとんどは、前のセットアップ時間とホールド時間の制約の操作と似ているため、ここでは詳しく説明しません。
入力sdrclk制約は、下図のように設定されます。対象条件に応じて、周期は10nsです。制約クロック名は、対応するクロックと一致するように設定してください。自分で設定して、sdrclkに対応させることもできます。
タイミングレポートを生成する
レポートのタイミングをクリックして、4つの出力データを追加し、信号を有効にします
入力遅延を設定する
質問の要件に従って、最大入力遅延と最小入力遅延をそれぞれ設定します。質問の意味に従って、最大と最小は同じで、両方とも3nsです。
遅延値はクロックエッジを基準にしています:立ち上がりエッジ(タイミング図と一致)
遅延値には、特定のクロック遅延がすでに含まれています:なし
立ち上がりエッジ遅延に設定
この設定は最大遅延量です(もう一方は最小遅延量に設定されます)
注:既存の遅延に遅延情報を追加する(上書きしない)既存の遅延に遅延情報を追加する(上書きしない)
つまり、最初に立ち上がりエッジ遅延を設定し、2回目に立ち下がりエッジ遅延を設定した場合、2番目の遅延で最初の設定を上書きしないようにするには、この時点でチェックする必要があります。遅延量、これはお互いに影響を与えません、そしてあなたはこの状況をチェックする必要はありません。
入力遅延が変更されたため、タイミングを再報告する必要があります
入力遅延を追加しない場合、各パスのたるみ(セットアップ時間マージン)は無限大であることがわかります。これは、制約を設定すると、シャンプー軟膏がデフォルトで大きな値を設定してエラーを回避するのに役立つためです。 。
制約を追加すると、スラックは無限ではなくなりますが、特定の制限値があることがわかります。
具体分析
自由にダブルクリックして、分析用のパスを開きます(例としてパス6を取り上げます)
要約:いくつかの情報を要約します
データパス:データが実際に到着した時刻を示します
入力遅延:これは追加されたばかりの制約であり、入力遅延は3nsです。
IBUF(Prop ibuf IO)
IBUFの入力から出力までの遅延は0.521nsです。
ネット:PCB配線の遅延時間は0.455nsです。
集計されたデータの合計の実際の到着時間は3.976nsです。
デスティネーションクロックパス:デスティネーションクロックパス
clock sdrclk立ち上がりエッジ:サンプリングクロックがソースクロックの1クロックサイクルになった後、サイクルは10nsです。
IBUF(Prop ibuf IO)
IBUFの入力から出力までの遅延は0.319nsです。
ネット:PCB配線遅延0.640ns;
BUFG(Prop bufg IO)
BUFGの入力から出力までの遅延は0.026nsです。
ネット:PCB配線遅延0.593ns;
クロックペシミズム:制約がないため、このパラメーターは0です。
クロックの不確実性:チップ自体によって決定されるクロックの不確実性。
集約データが到着するのに必要な合計時間は11.523nsです。
セットアップスラックの定義によると
セットアップ時間マージン=データが到着するのに必要な時間-データが実際に到着するのにかかる時間
入力遅延制約が期待どおりに追加されていることを確認できます。
この時点で、入力遅延を追加することによる確立時間マージンの一部の分析が完了します。
ホールドタイムマージンの動作はセトリングタイムマージンの動作と同様であり、分析方法も概算です。
過去の一連のブログ
[XilinxVivadoタイミング分析/制約シリーズ1]FPGA開発タイミング分析/制約-レジスタ間タイミング分析
[XilinxVivadoタイミング分析/制約シリーズ2]FPGA開発タイミング分析/制約-セットアップ時間
[XilinxVivadoタイミング分析/制約シリーズ3]FPGA開発タイミング分析/制約保持時間
[XilinxVivadoタイミング分析/制約シリーズ4]FPGA開発タイミング分析/制約-実験エンジニアリングハンズオンオペレーション
[XilinxVivadoタイミング分析/制約シリーズ5]FPGA開発タイミング分析/制約IOタイミング分析
[XilinxVivadoタイミング分析/制約シリーズ6]FPGA開発タイミング分析/制約IOタイミング入力遅延