[XilinxVivadoタイミング分析/制約シリーズ7]FPGA開発タイミング分析/制約-FPGAシングルエッジサンプリングデータ入力遅延タイミング制約の実践

コンテンツ

問題の紹介

問題を分析する

実用的なエンジニアリングソリューション

新築

トップレベルコード

タイミング制約を編集する

タイミングレポートを生成する

入力遅延を設定する

具体分析

データパス:データの実際の到着時間を示します

デスティネーションクロックパス:デスティネーションクロックパス

過去の一連のブログ


 

第6節の内容によると、この記事は実際の操作で説明されています。

 

今回は実際のプロジェクト(Vivado)で実施します

問題の紹介

データの到着時間はFPGAピンでのクロックの立ち上がりエッジから3ns後、クロックサイクルは10nsです。入力遅延を制限してタイミングレポートを表示するにはどうすればよいですか。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

問題を分析する

上記のタイミング図とタイトルを組み合わせると、FPGAピンにクロックの立ち上がりエッジが到着してから3nsがデータ到着時間であるため、LrminとLrmaxがない、つまり、 PCB配線の長さのうち、の立ち上がりエッジから3ns後のFPGAクロックでは、データ内のFPGAデータがハイにプルされます。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

実用的なエンジニアリングソリューション

新築

基本的な内容は、最上位のファイルコードにさらにいくつかのクロック、イネーブル信号、データなどがあり、最後に2つのビートが再生されることを除いて、以前の確立時間の分析と同様です。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_13、color_FFFFFF、t_70、g_se、x_16

トップレベルコード

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

前の操作と同様に、ビットストリームファイルを生成してから、ルーティングデザインを開きます。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_16、color_FFFFFF、t_70、g_se、x_16

タイミング制約を編集する

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_12、color_FFFFFF、t_70、g_se、x_16

ここでの操作のほとんどは、前のセットアップ時間とホールド時間の制約の操作と似ているため、ここでは詳しく説明しません。

入力sdrclk制約は、下図のように設定されます。対象条件に応じて、周期は10nsです。制約クロック名は、対応するクロックと一致するように設定してください。自分で設定して、sdrclkに対応させることもできます。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

タイミングレポートを生成する

レポートのタイミングをクリックして、4つの出力データを追加し、信号を有効にします

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

入力遅延を設定する

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

質問の要件に従って、最大入力遅延と最小入力遅延をそれぞれ設定します。質問の意味に従って、最大と最小は同じで、両方とも3nsです。

遅延値はクロックエッジを基準にしています:立ち上がりエッジ(タイミング図と一致)

遅延値には、特定のクロック遅延がすでに含まれています:なし

立ち上がりエッジ遅延に設定

この設定は最大遅延量です(もう一方は最小遅延量に設定されます)

注:既存の遅延に遅延情報を追加する(上書きしない)既存の遅延に遅延情報を追加する(上書きしない)

つまり、最初に立ち上がりエッジ遅延を設定し、2回目に立ち下がりエッジ遅延を設定した場合、2番目の遅延で最初の設定を上書きしないようにするには、この時点でチェックする必要があります。遅延量、これはお互いに影響を与えません、そしてあなたはこの状況をチェックする必要はありません。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

入力遅延が変更されたため、タイミングを再報告する必要があります

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_17、color_FFFFFF、t_70、g_se、x_16

入力遅延を追加しない場合、各パスのたるみ(セットアップ時間マージン)は無限大であることがわかります。これは、制約を設定すると、シャンプー軟膏がデフォルトで大きな値を設定してエラーを回避するのに役立つためです。 。

制約を追加すると、スラックは無限ではなくなりますが、特定の制限値があることがわかります。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

 

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

 

具体分析

自由にダブルクリックして、分析用のパスを開きます(例としてパス6を取り上げます)

要約:いくつかの情報を要約します

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

 

データパス:データが実際に到着した時刻を示します

入力遅延:これは追加されたばかりの制約であり、入力遅延は3nsです。

IBUF(Prop ibuf IO)

IBUFの入力から出力までの遅延は0.521nsです。

ネット:PCB配線の遅延時間は0.455nsです。

集計されたデータの合計の実際の到着時間は3.976nsです。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_19、color_FFFFFF、t_70、g_se、x_16

 

デスティネーションクロックパス:デスティネーションクロックパス

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です。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_20、color_FFFFFF、t_70、g_se、x_16

 

セットアップスラックの定義によると

セットアップ時間マージン=データが到着するのに必要な時間-データが実際に到着するのにかかる時間

入力遅延制約が期待どおりに追加されていることを確認できます。

この時点で、入力遅延を追加することによる確立時間マージンの一部の分析が完了します。

ホールドタイムマージンの動作はセトリングタイムマージンの動作と同様であり、分析方法も概算です。

 

過去の一連のブログ

 [XilinxVivadoタイミング分析/制約シリーズ1]FPGA開発タイミング分析/制約-レジスタ間タイミング分析

 [XilinxVivadoタイミング分析/制約シリーズ2]FPGA開発タイミング分析/制約-セットアップ時間

[XilinxVivadoタイミング分析/制約シリーズ3]FPGA開発タイミング分析/制約保持時間

 [XilinxVivadoタイミング分析/制約シリーズ4]FPGA開発タイミング分析/制約-実験エンジニアリングハンズオンオペレーション

 [XilinxVivadoタイミング分析/制約シリーズ5]F​​PGA開発タイミング分析/制約IOタイミング分析

 [XilinxVivadoタイミング分析/制約シリーズ6]FPGA開発タイミング分析/制約IOタイミング入力遅延

 

おすすめ

転載: blog.csdn.net/m0_61298445/article/details/123561968