Vivado はザイリンクス シリーズの FPGA 開発環境です。この記事は、vivado の一般的な開発スキルを記録および収集し、ランダムに記録され、随時更新されます。。。
ザイリンクス関連の質問がある場合は、「ザイリンクス サポートへようこそ!」にアクセスしてください。
1. STA
1.1. シンクロナイザー
XDC では次の制約が設けられており、名前が で終わる_cdc_to
レジスタに対して STA が実行されないことを示しています。
set_false_path -through [get_pins -hier *cdc_to*]
同時に、クロックドメインをまたぐ同期レジスタについては、次のステートメントを作成する必要があります。このようにして、これらの同期レジスタは非同期信号を受信でき、同じ SLICE/CLB に配置されて平均故障間隔 (MTBF) が向上します。
(*ASYNC_REG = "TRUE"*)reg res_cdc_to;
(*ASYNC_REG = "TRUE"*)reg res_d1;
1.2. レポートのタイミングの概要
詳細なレポートを表示するには、[Open Implemented Design] の下の [Report Timing Summary] をクリックし、右側の [TIming] 列で特定のパスを選択して遅延を表示します。
上図では、From フリップフロップを UFF0、To フリップフロップを UFF1 とみなしているため、タイミング パスは次のように簡略化できます。
名詞は次のように説明されます
● スラック: セットアップ時間マージン
● レベル: ロジック レベル、UFF0/Q から UFF1/D までの組み合わせロジック デバイスの数
● ファンアウト: 複数の宛先エンドポイントがこのポイントから接続されていることを示し、ファンアウト = 1 は接続 1 の宛先エンドポイントを意味します
● からTo: トリガーの開始とトリガーのキャプチャ
● Total Delay: UFF0/CK から UFF1/D までのパスの合計遅延、つまりTCK 2 QUFF 0 + TUFF 0 / Q _ to _ UFF 1 / D T_ {CK2Q}^{ UFF0}+T_{UFF0/Q\_to\_UFF1/D}TCK2Q _ _ _うふふ0_ _+TU FF 0/ Q _ to _ U FF 1 / D
● ロジック遅延: トリガー遅延を含む UFF0/CK から UFF1/D までのパスのロジック エレメント遅延TCK 2 QUFF 0 T_{CK2Q}^{UFF0}TCK2Q _ _ _うふふ0_ _
● Net Delay: UFF0/CK から UFF1/D までの配線遅延
合計遅延 = ロジック遅延 + 正味遅延であることがわかります。
次に、パス 5 の行をダブルクリックして、次のようにタイミング パスのタイミング レポートを取得します。
概要列:
● スラック: セットアップ時間のスラック。正は、このパスがセットアップ時間要件を満たしていることを意味します。
● ソース: シーケンス分析の開始点であるソース トリガー、起動エッジ (Launch Edge)
● 宛先: 宛先トリガー、つまり、シーケンス解析の終点、ラッチ エッジ
● パス グループ: タイミング解析のクロック ソース
● パス タイプ: パス タイプ、このパスはセットアップ時間の解析です
● 要件: タイミング要件、25MHz に設定されているため、40ns
● データ パス遅延: UFF0/CK から UFF1/D までのパスの合計遅延、つまりTCK 2 QUFF 0 + TUFF 0 / Q _ から _ UFF 1 / D T_{CK2Q}^{UFF0}+T_{UFF0/Q \_\_UFF1/Dへ}TCK2Q _ _ _うふふ0_ _+TU FF 0/ Q _ to _ U FF 1 / D
● 論理レベル: 論理レベルの数、UFF0/Q から UFF1/D までの組み合わせ論理デバイスの数
● クロック・パス・スキュー: 宛先レジスターとソース・レジスターに到着するクロック間の時間差
● クロック不確かさ: 不確実性スキューとジッターを含むクロックの度数
Source Clock Path 列:
● Delay Type: CLK から UFF0/CK までの時間遅延を生成する項目。表から、IO-route-IBUF-route-BUFG-route であることがわかります。
● Incr(ns): 各項目の遅延。たとえば、IBUF 遅延は 1.749ns、BUFG ラボラトリは 0.120ns です。
● パス (ns): 現在のプロジェクトまでの遅延の累積合計。たとえば、IO-route-IBUF-route-BUFG の累積遅延は 3.709ns です。
データパス列:
● Delay Type: UFF0/CK から UFF1/D までの遅延を発生させる項目です。表から、それが FDRE ルートであることがわかります。
● 到着時間: パス CK から UFF1/D までの遅延の合計
そして下の図
宛先クロック パス列:
● 遅延タイプ: クロックサイクル、クロックの不確かさ、セットアップ時間を考慮して、パス CLK から UFF1/CK までの遅延を発生させる項目 ● 所要時間: T clk + TCLK 2 UFF 1 / CK + T clk _permission
− T clk _uncertain − T セットアップ UFF 1 T_{clk}+T_{CLK2UFF1/CK}+T_{clk\_permissimon}-T_{clk\_uncertain}-T_{setup}^{UFF1}Tクリック_ _+TC L K 2 U FF 1/ C K+Tcl k _ per mi ss imon _ _ _ _−Tcl k_uncertain _ _ _ _ _ _ _−Tセットアップする_ _UFF1 _ _
そして、Slack = 所要時間 - 到着時間を満たす
2.コンパイル
2.1. インクリメンタルコンパイル
2.2. 常にroute_designの問題に陥る
合成は記述を通じてネットリストを生成できますが、レイアウトと配線が失敗し、それを配置する場所がない可能性があります。
情報が表示されます工程名.runs/synth_1/runme.log
。テキストの表示がnumber of nodes with overlaps
更新され、等号の右側の値が 0 になっていません。0 の場合のみ、レイアウトと配線の実行可能な解決策が見つかったことを意味します。そして、WNS を繰り返すたびにiteration
ネガティブな結果が得られ、結果としてルート設計に行き詰まりました。
考えられる理由は次のとおりです。
- IPコアの設定に無理があり、例えば乗算器にLUTを使うと配線時間が長くなるのでMultにするべきです。
- 同名のIPコアが複数設定されている場合は、新規プロジェクトを作成してIPを再設定することをお勧めします
- BUFR などのクロック バッファーの使用を BUFG に変更するのは正しいですか?
問題の場所は、コンテンツのバックトラッキングを変更することでロックできます。
ルーターが「オーバーラップのあるノードの数…」でスタック
する 実装における「オーバーラップのあるノードの数」パラメーターとは何ですか?
3. 合成
『Vivado Design Suite ユーザー ガイド 合成 - UG901』
Vivado ヒント (24): HDL/XDC での合成プロパティの設定
3.1. 報告
[Open Implemented Design] をクリックした後、TCL に次のコマンドを直接入力してレポートを取得できます。
利用レポートreport_utilization
消費電力レポートreport_power
混雑report_design_analysis -congestion
タイミング違反パスreport_design_analysis -max_paths 50 -setup
プロジェクトがコンパイルされたら、[Open Implemented Design] をクリックし、tcl に次の内容を入力してワースト 50 のパスを表示します。
report_design_analysis -max_paths 50 -setup
3.2. IOB
FPGA の入力および出力インターフェイスのタイミングを確保するには、通常、入力ピンを使用する前に最初にタップする必要があり、FPGA に出力する前に出力インターフェイスもタップする必要があります。この目的は、各コンパイル入力または出力のタイミングが変わらないように、ビート レジスタを IO バッファ (IOB) に制限することです。
これは、IOB が FPGA 上の IO に最も近いレジスタであり、その位置が固定されているためです。入力または出力に IOB 制約を使用すると、 IBUF からレジスタへ、またはレジスタから OBUF への配線遅延が最短になるようにすることができます。つまり、入力配線は でIO-IBUF-ILOGIC-...
、出力配線は...-OLOGIC-OBUF-IO
タイミングが要件を最大限に満たしていることを確認します。IO の位置は固定されているため、コンパイルのたびに入力または出力のタイミングが変化することはありません。
どの信号を IOB に配置する必要がありますか? 主要な入出力信号については、タイミングが必要な信号はIOB上に配置する必要があり、それ以外のレベルの信号は配置する必要がなく、クロック信号は配置する必要がなく、LVDSの非クロック信号のみをIOB上に配置する必要があります。 p端子です。
構成
インターフェイス信号は XDC で制約可能
set_property IOB true [get_ports {
port_name}]
または、以下に示すように、Verilog で制約を作成します。
(*IOB = "TRUE"*)output res_o,
...
(*IOB = "TRUE"*) reg a;
同時に、verilog ではそれを保証する必要があります。入力信号と出力信号、および直接接続されたレジスタの間には、順序ロジック、組み合わせロジック、およびルーティング分岐が存在してはなりません。そして、直接接続されたレジスタが IOB に配置されます。
診る
プロジェクトがコンパイルされたら、「Open Implemented Design」を開き、以下の Tcl コンソールに入り、tclapp::install ultrafast
Enter キーを押します。
次に、Tcl コンソールに入力してxilinx::ultrafast::report_io_reg
Enter キーを押すと、IO ポートの概要フォームが表示されます。
で
● Info は Unconnected の信号で、レイアウトは必要ありません
● Info は No Input FF の信号で、ILOGIC は 0 で、入力信号が IOB に接続されていないことを示します ● Info は
No Output FF の信号ですIOB に接続
●情報信号なし、ILOGIC が 1 または OLOGIC が 1 の場合、信号は IOB に接続されていることを示します。双方向信号の場合、ILOGIC と OLOGIC は両方とも 1 である必要があります
3.3. 安全なステートマシン
ステート マシンのデフォルト ステートメントは、ステート マシンが異常な状態でも通常の状態にジャンプできることを意味しますが、EDA ツールはステート マシンの最適化の結果であるデフォルト ステートメントを自動的に無視します。
セーフ ステート マシン モードは、ステート マシンのコーディング方法を変更し、異常状態でも通常状態にジャンプすることができるため、設定する必要があります。
構成
推奨される記述方法は、すべてのステート マシンの状態レジスタを Verilog のセキュリティ ステートメントに追加することです。ビット幅は実際の用途と一致します。つまり、定義は次のようになります。
(*fsm_safe_state = "reset_state"*) reg [2:0] cur_state;
診る
コンパイル後、開く工程目录下/*.runs/synth_1/runme.log
以下の内容が表示されれば、セキュリティ ステート マシンの構成は成功しています。
Implemented safe state 'reset_state' for state register 'cur_state_reg' in module '...'
encoded FSM with state register 'cur_state_reg' using encoding 'Hamming 2' in module '...'
以下の内容のみが表示され、何も表示されない場合はImplemented safe state...
、設定に失敗しています。
encoded FSM with state register 'cur_state_reg' using encoding 'one-hot' in module '...'
3.4. 触れないでください
DONT_TOUCH 属性は、合成および配置配線中に信号またはモジュールが最適化されないように保護するために使用できます。KEEP および KEEP_HIERARCHY 属性と比較して、DONT_TOUCH はレイアウトおよび配線中にも機能することができ、優先度が高くなります。これは、同等のレジスタおよび同等の組み合わせロジック用に予約できます。
サンプルコードは次のとおりです。
(*DONT_TOUCH = "TRUE"*) wire sig1;
assign sig1 = in1 & in2;
assign out1 = sig1 & in2;
VIVADO 学習ノート - DONT_TOUCH
Vivado は 3 つの方法で信号が合成されないようにします。
Vivado 合成属性シリーズ 7 DONT TOUCH
3.5. MAX_FANOUT
オープン実装デザインに合格した後、tcl に次のステートメントを記述して、最大のファンアウトを持つ複数のパスを表示します。
report_high_fanout_nets
report_high_fanout_nets -help
レジスタおよび組み合わせロジック信号の最大ファンアウト制限 (つまり、駆動される要素の最大数) を設定します。この設定値を超えると、同一のレジスタまたは組み合わせロジックが二重化されます。
(* MAX_FANOUT=50 *) reg sig1; //Verilog示例
4. デバイスプリミティブのインスタンス化
つまり、Vivado ソース言語はパラメーター化された IP とみなすことができ、パラメーターのインスタンス化 IP は、IP カタログで設定した後に再インスタンス化せずに直接設定できます。
一般的に使用されるいくつかのソース言語を以下に紹介します。
4.1. IOコンポーネント
入出力差動バッファ (IBUFDS/OBUFDS)
FPGA設計者は、外部から入力された差動信号をシングルエンド信号に変換したり、シングルエンド信号を差動信号に変換して出力する必要があり、IBUFDSとOBUFDSという2つのソース言語が必要になります。続く
IBUFDS #(
.DIFF_TERM ("TRUE" ), // Differential Termination
.IBUF_LOW_PWR ("TRUE" ), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD ("LVDS" ) // Specify the input I/O standard
) IBUFDS_inst (
.O (data_clk_tmp ), // Buffer output
.I (data_clk_p ), // Diff_p buffer input (connect directly to top-level port)
.IB (data_clk_n ) // Diff_n buffer input (connect directly to top-level port)
);
OBUFDS #(
.IOSTANDARD ("LVDS" ), // Specify the output I/O standard
.SLEW ("SLOW" ) // Specify the output slew rate
) OBUFDS_inst (
.O (tx_frame_p ), // Diff_p output (connect directly to top-level port)
.OB (tx_frame_n ), // Diff_n output (connect directly to top-level port)
.I (tx_frame ) // Buffer input
);
出力ダブルデータレート(ODDR)
4.2. クロックバッファ
4.3. ザイリンクス パラメーター化マクロ (XPM)
XILINX-VIVADO IP パラメーター化メソッド (XPM)
『Vivado Design Suite 7 SeriesFPGA および Zynq-7000 SoCLibraries ガイド』 - ug953
FIFO、デュアル ポート RAM などの IP をパラメータ化してインスタンス化できます。これらは、vivado の言語テンプレートから見つけることができます。
XPM IP 自体の RTL デザイン ファイルのパスは次のとおりです。xxx\Xilinx\Vivado\2019.1\data\ip\xpm
4.4. ユニマクロス
《Vivado Design Suite 7 シリーズ FPGA および Zynq-7000 SoCLibraries ガイド》 - ug9
これは IP をパラメータ化してインスタンス化する方法でもあります。詳細についてはドキュメントを参照してください。
5. プロジェクトディレクトリの構成
RTL プロジェクト ディレクトリを直接参照すると、プロジェクト フォルダー ディレクトリがどのように構成されているかを理解できます。