Vivado デバッグ コア (ILA、VIO など) は、RM 内も含め、Dynamic Function eXchange デザインのどこにでも配置できます。デザイン全体の通信のために中央デバッグ ハブにこれらのコアを接続するには、特定の設計手法が必要です。
スタティック領域の中央デバッグ ハブ間の接続は自動的に設定でき、RP のポート名に特定の命名規則を使用することによりトリガーできます。これらの 12 本のピンは必須で、命名規則に従っていればハブが推論されます。次に、Verilog、VHDL、およびブロック デザインの例を示します。
スタティック デザインの Verilog インスタンシエーション:
my_count counter_inst (
.clk(my_clk),
.dout(dout),
.S_BSCAN_drck(),
.S_BSCAN_shift(),
.S_BSCAN_tdi(),
.S_BSCAN_update(),
.S_BSCAN_sel(),
.S_BSCAN_tdo(),
.S_BSCAN_tms(),
.S_BSCAN_tck(),
.S_BSCAN_runtest(),
.S_BSCAN_reset(),
.S_BSCAN_capture(),
.S_BSCAN_bscanid_en()
);
スタティック デザインの VHDL コンポーネント宣言およびインスタンシエーション:
component my_count is
Port ( clk : in STD_LOGIC;
dout : out STD_LOGIC;
S_BSCAN_drck: IN std_logic := '0';
S_BSCAN_shift: IN std_logic := '0';
S_BSCAN_tdi: IN std_logic := '0';
S_BSCAN_update: IN std_logic := '0';
S_BSCAN_sel: IN std_logic := '0';
S_BSCAN_tdo: OUT std_logic;
S_BSCAN_tms: IN std_logic := '0';
S_BSCAN_tck: IN std_logic := '0';
S_BSCAN_runtest: IN std_logic := '0';
S_BSCAN_reset: IN std_logic := '0';
S_BSCAN_capture: IN std_logic := '0';
S_BSCAN_bscanid_en: IN std_logic := '0'
);
end component;
…
counter_inst: my_count
port map (clk => my_clk,
dout => dout,
S_BSCAN_drck => open,
S_BSCAN_shift => open,
S_BSCAN_tdi => open,
S_BSCAN_update => open,
S_BSCAN_sel => open,
S_BSCAN_tdo => open,
S_BSCAN_tms => open,
S_BSCAN_tck => open,
S_BSCAN_runtest => open,
S_BSCAN_reset => open,
S_BSCAN_capture => open,
S_BSCAN_bscanid_en => open
);
open
キーワードを使用するには、これらの入力ポートで初期値を受信する必要があり、初期値は 0
である必要があります。1
に接続されているポートは、ローカル デバッグ ハブには接続されません。RM の最上位 RTL 内では、これらの 12 本のポートは未接続のままにします。デバッグ ハブは、合成時に、スタティック領域に 1 つ、各 RM に 1 つずつ、ブラック ボックスとして挿入されます。これらの挿入された IP は、opt_design
中に展開されます。これは、RM (グレー ボックス RM を含む) 内にデバッグ コアがない場合でも、各 RM に対して実行されます。
複数の BSCAN インスタンスに接続する必要がある場合など、これらのポートに命名規則に従った名前を使用しない場合、属性を使用してデバッグ ハブを挿入できます。この方法は、最初に処理されたコンフィギュレーションにデバッグ コアが存在しない場合にも使用する必要があります。デバッグ ハブの推論は、Vivado インプリメンテーション ツールが RM 内にデバッグ コアを見つけられない場合は実行されません。
デバッグ ポートを割り当てるには、次の構文でポート名以外のものを変更しないでください。これらの属性は、すべての RM 最上位ソース ファイルで使用されます。
RM 最上位の Verilog 属性:
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN drck" *) (* DEBUG="true" *)
input my_drck;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN shift" *) (* DEBUG="true" *)
input my_shift;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN tdi" *) (* DEBUG="true" *)
input my_tdi;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN update" *) (* DEBUG="true" *)
input my_update;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN sel" *) (* DEBUG="true" *)
input my_sel;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN tdo" *) (* DEBUG="true" *)
output my_tdo;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN tms" *) (* DEBUG="true" *)
input my_tms;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN tck" *) (* DEBUG="true" *)
input my_tck;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN runtest" *) (* DEBUG="true" *)
input my_runtest;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN reset" *) (* DEBUG="true" *)
input my_reset;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN capture" *) (* DEBUG="true" *)
input my_capture;
(* X_INTERFACE_INFO = "xilinx.com:interface:bscan:1.0 S_BSCAN bscanid_en" *)
(* DEBUG="true" *) input my_bscanid_en;
RM 最上位の VHDL 属性:
attribute X_INTERFACE_INFO : string;
attribute DEBUG : string;
attribute X_INTERFACE_INFO of my_drck: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
drck";
attribute DEBUG of my_drck: signal is "true";
attribute X_INTERFACE_INFO of my_shift: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
shift";
attribute DEBUG of my_shift: signal is "true";
attribute X_INTERFACE_INFO of my_tdi: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
tdi";
attribute DEBUG of my_tdi: signal is "true";
attribute X_INTERFACE_INFO of my_update: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
update";
attribute DEBUG of my_update: signal is "true";
attribute X_INTERFACE_INFO of my_sel: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
sel";
attribute DEBUG of my_sel: signal is "true";
attribute X_INTERFACE_INFO of my_tdo: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
tdo";
attribute DEBUG of my_tdo: signal is "true";
attribute X_INTERFACE_INFO of my_tms: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
tms";
attribute DEBUG of my_tms: signal is "true";
attribute X_INTERFACE_INFO of my_tck: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
tck";
attribute DEBUG of my_tck: signal is "true";
attribute X_INTERFACE_INFO of my_runtest: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
runtest";
attribute DEBUG of my_runtest: signal is "true";
attribute X_INTERFACE_INFO of my_reset: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
reset";
attribute DEBUG of my_reset: signal is "true";
attribute X_INTERFACE_INFO of my_capture: signal is "xilinx.com:interface:bscan:1.0 S_BSCAN
capture";
attribute DEBUG of my_capture: signal is "true";
attribute X_INTERFACE_INFO of my_bscanid_en: signal is "xilinx.com:interface:bscan:1.0
S_BSCAN bscanid_en";
attribute DEBUG of my_bscanid_en: signal is "true";
この方法は IP インテグレーターにも使用できます。IP インテグレーター フローのブロック デザインに必要なポートを追加するには、次の Tcl コマンドを使用します。
create_bd_port -dir I S_BSCAN_drck
create_bd_port -dir O S_BSCAN_tdo
create_bd_port -dir I S_BSCAN_shift
create_bd_port -dir I S_BSCAN_tdi
create_bd_port -dir I S_BSCAN_update
create_bd_port -dir I S_BSCAN_sel
create_bd_port -dir I S_BSCAN_tms
create_bd_port -dir I S_BSCAN_tck
create_bd_port -dir I S_BSCAN_runtest
create_bd_port -dir I S_BSCAN_reset
create_bd_port -dir I S_BSCAN_capture
create_bd_port -dir I S_BSCAN_bscanid_en
次の図は、IP インテグレーター キャンバスと適切な接続を示しています。
このコアの挿入例および Vivado ハードウェア マネージャー内の機能については、 『Vivado Design Suite チュートリアル: Dynamic Function eXchange』 (UG947) のこのセクションを参照してください。