既存の X_INTERFACE_INFO および X_INTERFACE_PARAMETER HDL 属性は、単一の X_MODULE_SPEC 属性に置き換えることができます。X_MODULE SPEC には、ポートからインターフェイスへのマッピングなどのバウンダリ情報と、IP STR/STC パス内の CPU、パラメーター、ELF ファイルなどの内容情報が含まれている点で、ユーザーにとってはより使いやすくなっています。
X_MODULE_SPEC 属性の挿入方法
IP やブロック デザインモジュールを RTL モジュール参照として別のブロック デザインを参照するには、まずシム RTL ファイルを作成する必要があります。
- IP やブロック デザインのインスタンシエーション テンプレート、または生成されたブロック デザイン ラッパーから、新しいシム RTL ファイル (例: シム モジュールを含む Shim.v) を作成します。重要: ブロック デザイン ラッパーを使用する場合、次世代のブロック デザインでファイルが上書きされないようにするため、必ず「ユーザーによって管理される」ように設定してください。
::ipx::package_module_spec tcl
コマンドを使用する前に、ブロック デザインのファイルが生成されていることを確認します。図 1. ブロック デザインを含む RTL モジュール
- 次に説明するように、ラップされたモジュールのデフォルト 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
- オプションで、JSON ファイルでモジュール仕様を変更できます。-validate オプションは、ターゲットのシム モジュールに関するモジュール仕様を検証します。
ipx::package_module_spec -validate -module_name Shim -input_file module_spec.json
- モジュール仕様の形式を 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
- 変更した X_MODULE_SPEC 属性 (つまり module_spec.v の内容) を Shim.v ファイルへコピーします。Verilog の場合は、シム モジュールの上、VHDL の場合は、Shim ENTITY の中に貼り付けます。Verilog の場合の X_MODULE SPEC です。
こちらは VHDL の場合の 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
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;
- RTL モジュール Shim.v をブロック デザインにモジュール参照として追加します。次の図で
create_bd_cell -type module -reference Shim Shim_0
が確認できます。図 2. ブロック デザインを含む RTL モジュールを別のブロック デザインに追加 - 必要に応じてブロック デザインを変更、検証、生成します。
X_MODULE_SPEC の制限事項
- X_MODULE_SPEC は一度に 1 つのモジュールのみを処理します。モジュール内に複数の BD/XCI がある場合、X_module spec を個別に生成し、モジュール参照の RTL に手動でまとめる必要があります。
- 参照の RTL のポートが、内部の BD/XCI と一致している必要があります。