X_MODULE_SPEC 属性 - 2022.1 日本語

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

Document ID
UG994
Release Date
2022-04-20
Version
2022.1 日本語

既存の X_INTERFACE_INFO および X_INTERFACE_PARAMETER HDL 属性は、単一の X_MODULE_SPEC 属性に置き換えることができます。X_MODULE SPEC には、ポートからインターフェイスへのマッピングなどのバウンダリ情報と、IP STR/STC パス内の CPU、パラメーター、ELF ファイルなどの内容情報が含まれている点で、ユーザーにとってはより使いやすくなっています。

X_MODULE_SPEC 属性の挿入方法

IP やブロック デザインモジュールを RTL モジュール参照として別のブロック デザインを参照するには、まずシム RTL ファイルを作成する必要があります。

  1. IP やブロック デザインのインスタンシエーション テンプレート、または生成されたブロック デザイン ラッパーから、新しいシム RTL ファイル (例: シム モジュールを含む Shim.v) を作成します。
    重要: ブロック デザイン ラッパーを使用する場合、次世代のブロック デザインでファイルが上書きされないようにするため、必ず「ユーザーによって管理される」ように設定してください。::ipx::package_module_spec tcl コマンドを使用する前に、ブロック デザインのファイルが生成されていることを確認します。
    図 1. ブロック デザインを含む RTL モジュール


  2. 次に説明するように、ラップされたモジュールのデフォルト X_MODULE_SPEC 属性を作成するために、ipx::package_module_spec コマンドを使用します。ipx::package_module_spec を実行する前に、IP またはブロック デザインが生成されている必要があります。そうでないと、ツールでエラーが発生します。
    ipx::package_module_spec -create -module_name <BD_name> -output_file module_spec.json
    前の図の例にあるように、コマンドは次のようになります。
    ipx::package_module_spec -create -module_name lower_bd -output_file module_spec.json
  3. オプションで、JSON ファイルでモジュール仕様を変更できます。-validate オプションは、ターゲットのシム モジュールに関するモジュール仕様を検証します。
    ipx::package_module_spec -validate -module_name Shim -input_file module_spec.json
  4. モジュール仕様の形式を JSON から RTL へ変換します。
    JSON-to-Verilog: ipx::package_module_spec -convert -module_name <BD_name> -language verilog -input_file module_spec.json -output_file module_spec.v
    
    JSON-to-VHDL: ipx::package_module_spec -convert -module_name <BD_name> -language vhdl    -input_file module_spec.json -output_file module_spec.vhd
    前の図の例にあるように、コマンドは次のようになります。
    ipx::package_module_spec -convert -module_name Shim -language vhdl -input_file module_spec.json
    
    ipx::package_module_spec -convert -module_name Shim -language verilog -input_file module_spec.json
  5. 変更した X_MODULE_SPEC 属性 (つまり module_spec.v の内容) を Shim.v ファイルへコピーします。Verilog の場合は、シム モジュールの上、VHDL の場合は、Shim ENTITY の中に貼り付けます。Verilog の場合の X_MODULE SPEC です。
    `timescale 1 ps / 1 ps
    
    (* X_MODULE_SPEC = "{\
      'schema': 'xilinx.com:schema:json_module:1.0',\
      'boundary': {\
        'interfaces': {\
          'ddr4_dimm1_sma_clk': {\
            'vlnv': 'xilinx.com:interface:diff_clock:1.0',\
            'abstraction_type': 'xilinx.com:interface:diff_clock_rtl:1.0',\
            'mode': 'slave',\
            'parameters': {\
              'CAN_DEBUG': [ { 'value': 'false' } ],\
              'FREQ_HZ': [ { 'value': '200000000' } ],\
              'BUSIF.BOARD_INTERFACE': [ { 'value': 'ddr4_dimm1_sma_clk' } ]\
            },\
            'port_maps': {\
              'CLK_N': [ { 'physical_name': 'ddr4_dimm1_sma_clk_clk_n' } ],\
              'CLK_P': [ { 'physical_name': 'ddr4_dimm1_sma_clk_clk_p' } ]\
            }\
          },\
          'CLK.CLK_100MHZ': {\
            'vlnv': 'xilinx.com:signal:clock:1.0',\
            'abstraction_type': 'xilinx.com:signal:clock_rtl:1.0',\
            'mode': 'slave',\
            'parameters': {\
              'FREQ_HZ': [ { 'value': '100000000' } ],\
              'FREQ_TOLERANCE_HZ': [ { 'value': '0' } ],\
              'PHASE': [ { 'value': '0.0' } ]\
            },\
            'port_maps': {\
              'CLK': [ { 'physical_name': 'clk_100MHz' } ]\
            }\
          }\
        }\
      }\
    }" *)
    
    
    module Shim
       (clk_100MHz,
        ddr4_dimm1_sma_clk_clk_n,
        ddr4_dimm1_sma_clk_clk_p);
      input clk_100MHz;
      input ddr4_dimm1_sma_clk_clk_n;
      input ddr4_dimm1_sma_clk_clk_p;
    
      wire clk_100MHz;
      wire ddr4_dimm1_sma_clk_clk_n;
      wire ddr4_dimm1_sma_clk_clk_p;
    
      lower_bd lower_bd_i
           (.clk_100MHz(clk_100MHz),
            .ddr4_dimm1_sma_clk_clk_n(ddr4_dimm1_sma_clk_clk_n),
            .ddr4_dimm1_sma_clk_clk_p(ddr4_dimm1_sma_clk_clk_p));
    Endmodule
    
    こちらは VHDL の場合の X_MODULE SPEC です。
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    library UNISIM;
    use UNISIM.VCOMPONENTS.ALL;
    entity Shim is
      port (
        clk_100MHz : in STD_LOGIC;
        ddr4_dimm1_sma_clk_clk_n : in STD_LOGIC;
        ddr4_dimm1_sma_clk_clk_p : in STD_LOGIC
      );
      
      ATTRIBUTE X_MODULE_SPEC : STRING;
    ATTRIBUTE X_MODULE_SPEC OF Shim : ENTITY IS "{" & 
    "  'schema': 'xilinx.com:schema:json_module:1.0'," & 
    "  'boundary': {" & 
    "    'interfaces': {" & 
    "      'ddr4_dimm1_sma_clk': {" & 
    "        'vlnv': 'xilinx.com:interface:diff_clock:1.0'," & 
    "        'abstraction_type': 'xilinx.com:interface:diff_clock_rtl:1.0'," & 
    "        'mode': 'slave'," & 
    "        'parameters': {" & 
    "          'CAN_DEBUG': [ { 'value': 'false' } ]," & 
    "          'FREQ_HZ': [ { 'value': '200000000' } ]," & 
    "          'BUSIF.BOARD_INTERFACE': [ { 'value': 'ddr4_dimm1_sma_clk' } ]" & 
    "        }," & 
    "        'port_maps': {" & 
    "          'CLK_N': [ { 'physical_name': 'ddr4_dimm1_sma_clk_clk_n' } ]," & 
    "          'CLK_P': [ { 'physical_name': 'ddr4_dimm1_sma_clk_clk_p' } ]" & 
    "        }" & 
    "      }," & 
    "      'CLK.CLK_100MHZ': {" & 
    "        'vlnv': 'xilinx.com:signal:clock:1.0'," & 
    "        'abstraction_type': 'xilinx.com:signal:clock_rtl:1.0'," & 
    "        'mode': 'slave'," & 
    "        'parameters': {" & 
    "          'FREQ_HZ': [ { 'value': '100000000' } ]," & 
    "          'FREQ_TOLERANCE_HZ': [ { 'value': '0' } ]," & 
    "          'PHASE': [ { 'value': '0.0' } ]" & 
    "        }," & 
    "        'port_maps': {" & 
    "          'CLK': [ { 'physical_name': 'clk_100MHz' } ]" & 
    "        }" & 
    "      }" & 
    "    }" & 
    "  }" & 
    "}";
    end Shim;
    
    architecture STRUCTURE of Shim is
      component lower_bd is
      port (
        ddr4_dimm1_sma_clk_clk_n : in STD_LOGIC;
        ddr4_dimm1_sma_clk_clk_p : in STD_LOGIC;
        clk_100MHz : in STD_LOGIC
      );
      end component lower_bd;
    begin
    lower_bd_i: component lower_bd
         port map (
          clk_100MHz => clk_100MHz,
          ddr4_dimm1_sma_clk_clk_n => ddr4_dimm1_sma_clk_clk_n,
          ddr4_dimm1_sma_clk_clk_p => ddr4_dimm1_sma_clk_clk_p
        );
    end STRUCTURE;
    
  6. RTL モジュール Shim.v をブロック デザインにモジュール参照として追加します。次の図で create_bd_cell -type module -reference Shim Shim_0 が確認できます。
    図 2. ブロック デザインを含む RTL モジュールを別のブロック デザインに追加
  7. 必要に応じてブロック デザインを変更、検証、生成します。

X_MODULE_SPEC の制限事項

  • X_MODULE_SPEC は一度に 1 つのモジュールのみを処理します。モジュール内に複数の BD/XCI がある場合、X_module spec を個別に生成し、モジュール参照の RTL に手動でまとめる必要があります。
  • 参照の RTL のポートが、内部の BD/XCI と一致している必要があります。