RTL モジュールの制御信号の推論 - 2023.2 日本語

Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計 (UG994)

Document ID
UG994
Release Date
2023-10-18
Version
2023.2 日本語

クロック、リセット、割り込み、およびクロック イネーブルが正しく推論されるようにするため、HDL コードに属性を挿入する必要あります。AMD Vivado™ Design Suite では、これらの属性の言語テンプレートを提供しています。これらのテンプレートには、[Project Manager] の下の Language Templates をクリックするとアクセスできます。

図 1. 言語テンプレートの選択

次の図のように [Language Templates] ダイアログ ボックスが開きます。

図 2. [Language Templates] ダイアログ ボックス

適切な HDL 言語 (Verilog/VHDL > IP Integrator HDL) を展開表示し、[Signal Interfaces] の下から適切なインターフェイスを選択すると、[Preview] ペインに属性が表示されます。たとえば、クロック インターフェイスの VHDL 言語テンプレートには、モジュール定義に挿入する必要のある次の属性が表示されます。



ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_INFO of <clock_port_name>: SIGNAL is
"xilinx.com:signal:clock:1.0 <clock_port_name> CLK";
-- Supported parameters: ASSOCIATED_CLKEN, ASSOCIATED_RESET,
ASSOCIATED_ASYNC_RESET, ASSOCIATED_BUSIF, CLK_DOMAIN, PHASE, FREQ_HZ
-- Most of these parameters are optional. However, when using AXI, at least
one clock must be associated to the AXI interface.
-- Use the axi interface name for ASSOCIATED_BUSIF, if there are multiple
interfaces, separate each name by ':'
-- Use the port name for ASSOCIATED_RESET.
-- Output clocks will require FREQ_HZ to be set (note the value is in HZ
and an integer is expected).
--  Setting FREQ_TOLERANCE_HZ to 0 would allow FREQ_HZ value i:e 100000000 frequency only on the port, setting to FREQ_HZ value would allow FREQ_HZ within range from  FREQ_HZ-10MHz to FREQ_HZ+10MHz, setting to ‘-1’ would allow any FREQ_HZ value on the clock port from the top BD.
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER of <clock_port_name>: SIGNAL is
"ASSOCIATED_BUSIF <AXI_interface_name>, ASSOCIATED_RESET <reset_port_name>,
FREQ_HZ 100000000,FRED_TOLERENCE_HZ 0";

次の図に示すように、モジュールの HDL コードにこれらの属性を挿入します。クロック信号とリセット信号に対する属性の宣言と属性値の宣言が含まれます。

図 3. 制御信号を推論する属性の挿入

上記のコード例では、RTL コードに clk_in というクロック ポートがあります。clk_in ポートをクロック ピンとして推論するには、次の属性を挿入する必要があります。


-- Declare attributes for clocks and resets
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_INFO of clk_in: SIGNAL is
"xilinx.com:signal:clock:1.0 clk_in
CLK";
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER of clk_in : SIGNAL is "ASSOCIATED_RESET
reset_in,
FREQ_HZ 100000000,
FREQ_TOLERENCE_HZ 0";

上記のコードでは、clk_in クロック信号が reset_in リセット信号に関連付けられています。モジュール シンボルのピンをクリックすると、次の図に示すように、そのピンのさまざまな関連プロパティが表示されます。

図 4. クロック ピンの推論されたプロパティ

リセット信号を推論する属性も、HDL コードに挿入されます。resetnaresetn のように信号名の最後に n が付いているリセット信号は、ACTIVE_LOW と推論され、インターフェイスの POLARITY パラメーターは ACTIVE_LOW に設定されます。このパラメーターは、ブロック図が生成されるときにリセットが正しく接続されているかを Vivado IP インテグレーターでチェックするときに使用されます。その他のすべてのリセット インターフェイスでは、POLARITY パラメーターは設定されず、IP インテグレーターのパラメーター伝搬機能により判断されます。詳細は、IP インテグレーターでのパラメーターの伝搬 を参照してください。

ヒント: X_INTERFACE_PARAMETER 属性を使用して信号の極性を別の値に強制できます。

インスタンスを右クリックして Refresh Module をクリックするか、update_module_reference Tcl コマンドを使用すると、参照されたモジュールに対して IP インテグレーターで何が推論されたかを表示できます。


update_module_reference design_1_my_dff8_inst_1_0

これにより RTL モジュールが読み込み直され、[Tcl Console] ウィンドウに何が推論されたかを示すメッセージが表示されます。


INFO: [IP_Flow 19-5107] Inferred bus interface 'clk_in' of definition 
'xilinx.com:signal:clock:1.0' (from 'X_INTERFACE_INFO' attribute).
INFO: [IP_Flow 19-4728] Bus Interface 'clk_in': Added interface parameter 
'ASSOCIATED_RESET' with value 'reset_in'.
INFO: [IP_Flow 19-4728] Bus Interface 'clk_in': Added interface parameter 'FREQ_HZ' 
with value '100000000'.
INFO: [IP_Flow 19-5107] Inferred bus interface 'reset_in' of definition 
'xilinx.com:signal:reset:1.0' (from 'X_INTERFACE_INFO' attribute).
INFO: [IP_Flow 19-4728] Bus Interface 'reset_in': Added interface parameter 
'POLARITY' with value 'ACTIVE_HIGH'.

このコマンドを使用すると、RTL モジュールをソース ファイルから強制的にアップデートすることもできます。ブロック デザインにモジュールをインスタンシエートする前にソース コードに既に 3 つの属性が含まれている場合は、何が推論されるかが [Tcl Console] ウィンドウに表示されます。

自動ポート推論をディスエーブルにする場合は、X_INTERFACE_IGNORE 属性を使用できます。VHDL の構文は、次のとおりです。


ATTRIBUTE X_INTERFACE_IGNORE:STRING;
ATTRIBUTE X_INTERFACE_IGNORE OF <port_name>: SIGNAL IS "TRUE";

Verilog の構文は、次のとおりです。


(* X_INTERFACE_IGNORE = "true" *)
input <port_name>,