[XilinxVivadoタイミング分析/制約シリーズ9]FPGA開発タイミング分析/制約-FPGAシングルエッジデータ入力遅延エッジアライメント、さまざまなタイミングモデル実用的な実践

コンテンツ

エッジアラインサンプリング

タイミング図

PLLパラメータを変更する

統合配線

レポートのタイミング

パス分析

2つの制約モデル

最初のモデル

実際の操作

制約を追加する

パス分析

2番目のモデル

トップレベルコード

クロック制約を追加する

解決

入力遅延制約

統合配線

結果

要約する

過去の一連のブログ


 

エッジアラインサンプリング

エッジアラインサンプリング方式は、入力遅延制約を実装します。シリーズ第8回の講義で紹介したように、エッジアラインサンプリングの場合、ホールドタイムマージンが不足しやすくなります。これは、送信クロックの次のクロックが原因です。をサンプリングクロックとして使用します。データをサンプリングする場合、1クロックサイクルの間隔があるため、サンプリングクロックの時刻がデータの終了時刻より遅くなりやすく、サンプリングクロックはサンプリングできません。データ。PLLアライメントを使用してタイミングを制限し、PLLを使用してクロックを処理できます。左にシフトするとクロックが進み、ホールドタイムマージンが増加します。

タイミング図

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

PLLを使用して時間を右にシフトするとどうなりますか?特定の実験でそれを確認してください。

PLLパラメータを変更する

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

これはまだ以前の実験プロジェクトであり、PLLIPコアのパラメーターを変更するだけで済みます。

位相オフセットを60に変更し、残りのパラメーターは同じままにします。

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

統合配線

一般的なルーティングが完了したら、ルーティングデザインを開きます

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBATGluZXN0LTU =、size_15、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

パス分析

分析するパスの1つをクリックします

このパスのタイミングレポートから、要件の列は送信クロックがオンであり、サンプリングクロックが3.086nsであることを意味していることがわかります。これは明らかに間違った分析です。クロックサイクルは約18nsで、部分的にオフセットされています。サンプリングクロックは約20nsである必要があります。タイミング解析ツールは、サンプリングクロックがオフセット直後の送信クロックであると誤って判断している必要があります。どうすればよいですか。

2つの制約モデル

最初のモデル

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

このタイミングモデルは、入力にPLLがあり、コアにPLLがない場合に使用できます。サンプリングクロックの位相シフトがPLLで正の場合、「マルチサイクル制約」を実行する必要があります。そうでない場合、分析レポートは次のようになります。正しくない。つまり、クロックを右に位相シフトする場合、タイミング分析ツールに必要なサンプリングクロックを指示する必要があります。

実際の操作

クリックしてタイミング制約を編集

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

クリックしてマルチサイクルパスを設定

制約を追加する

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

指定パス乗数を2、2に設定すると、サンプリングクロックとして2番目の立ち上がりエッジが必要になります。

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

パス分析

[OK]をクリックしてリロードし、新しいタイミングレポートを表示します。この時点でセットアップ時間が通常に戻っていることがわかりますが、ホールドタイムに違反しています。分析するパスの1つをクリックできます。

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

要件列のデータを引き続き見ると、サンプリングクロックは元々18.518nsでしたが、現在は21.604nsになっています。これは、クロックを右にシフトして得られた結果と一致しています。ホールドタイムに違反していますが、正しいタイミングが報告されます。したがって、サンプリングクロックの位相シフトが正の場合、マルチサイクル制約が必要になります。

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

2番目のモデル

このタイプのモデルは、前のクロックを送信クロックとして使用し、次のクロックをサンプリングクロックとして使用します。前のモデルと比較すると、クロックはほぼ1クロック先に相当します。このタイミングモデルは、入力にPLL。以前のモデルではクロックルーティングを短くすることでしたが、ルーティングツールは、セトリング時間が要件を満たすように、クロックルーティング遅延を可能な限り増やすことをお勧めします。

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

実際のエンジニアリングで両方のモデルをシミュレートします(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

プロジェクトを再配線します

ルーティング設定を開く

クロック制約を追加する

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

入力遅延を設定する

最大値は20.518ns、最小値は16.518nsです。設定方法は基本的に前のチュートリアルと同じです。

透かし、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

セットアップ時間の違反は、次のクロックがデータの開始に対して早すぎることを示し、セットアップ時間の違反になります。このモデルでは、タイミング制約ツールがクロックをより長くルーティングできることが期待されます。セットアップ時間が長くなる可能性があります。少し長くなりますが、それはできません。そのため、別の制約を追加して、タイミングを通常に戻すことができます。

透かし、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

入力遅延制約

最大は2ns、最小は-2nsです。これは、現在のクロックを送信クロックとして使用し、次のクロックをサンプリングクロックとして使用することに相当します。

透かし、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

統合配線

結果

タイミングを報告すると、タイミングが正常に戻っていることがわかります

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

要約する

PLL制約がある場合は、両方のモデルを使用できますが、クロックを右にシフトすると、追加の「マルチサイクル」制約を追加する必要があることに注意してください。操作のこの部分を保存するには、左シフトが一般的に使用されます。クロックの制約方法。

PLL制約がない場合、データパスルーティングを長くする(またはクロックパスルーティングを短くする)必要がある場合は、制約に最初のモデルを使用できることを考慮する必要があります。クロックパスルーティングを作成する必要がある場合は長くなります(またはデータパスルーティングは短くなります)。これは、2番目のモデルを使用して制約できます。

過去の一連のブログ

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

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

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

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

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

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

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

 [XilinxVivadoタイミング分析/制約シリーズ8]FPGA開発タイミング分析/制約-FPGAデータ中間サンプリング、エッジサンプリングPLLタイミング最適化プラクティス

 

おすすめ

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