UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 21658

LogiCORE PCI-X - DCM_STANDBY マクロの使用法について。 PCI-X コアは Virtex-4 デバイスのシリコン ステッピングと新しい DCM タイミング パラメータに影響されるか。

説明

キーワード : PCIX, PCI, XPCI_DLL, level, XIL_MAP_ALLOW_ANY_DLL_INPUT, 133, 100, 64

重要度 : 標準

概要 :
PCI-X コアは、Virtex-4 デバイスのシリコン ステッピングと新しい DCM タイミング パラメータに影響されますか。 PCI-X コアで、DCM_STANDBY マクロを使用する必要がありますか。

ソリューション

Virtex-4 デバイスに PCI-X コアを使用する場合、(Xilinx Answer 21605) で Virtex-4 のシリコン ステッピング レベルを確認してください。

PCI-X コアは DCM を使用しているため、(Xilinx Answer 21127) も参照する必要があります。 ここでは、Virtex-4 データシートに追加された新しい DCM パラメータがどのようにデバイスの動作に影響するかを説明します。

これらのソリューションを参照した後、ターゲット デバイスのステッピング レベルによっては、通常の DCM の代わりに、PCI-X コアに DCM_STANDBY モジュールを手動で挿入する必要があります。 PCI-X コアの DCM は、ラッパ ライルでインスタンシエートされるため、このモジュールを追加できます。 Virtex-4 の PCI-X デザインで使用されるラッパ ファイルは、pcix_lc_64x.v または pcix_lc_64x.vhd です。

VHDL
<install path>/vhdl/src/wrap ディレクトリ内にある pcix_lc_64x.vhd ファイルで、次のコンポーネント宣言を変更します。

component CLKDLL
port (
CLKIN : in std_logic;
CLKFB : in std_logic;
RST : in std_logic;
CLK0 : out std_logic;
CLK90 : out std_logic;
CLK180 : out std_logic;
CLK270 : out std_logic;
CLK2X : out std_logic;
CLKDV : out std_logic;
LOCKED : out std_logic
);
end component;

上記を DCM_STANDBY マクロのコンポーネント宣言に置き換えます。

component dcm_standby
PORT (
CLK0 : OUT std_logic;
CLK180 : OUT std_logic;
CLK270 : OUT std_logic;
CLK2X : OUT std_logic;
CLK2X180 : OUT std_logic;
CLK90 : OUT std_logic;
CLKDV : OUT std_logic;
CLKFX : OUT std_logic;
CLKFX180 : OUT std_logic;
DO : OUT std_logic_vector(15 DOWNTO 0);
LOCKED : OUT std_logic;
PSDONE : OUT std_logic;
CLKFB : IN std_logic;
CLKIN : IN std_logic;
PSCLK : IN std_logic;
PSEN : IN std_logic;
PSINCDEC : IN std_logic;
RST : IN std_logic);
end component;


次に、CLKDLL および BUFG インスタンスを変更します。

XPCI_DLL : CLKDLL port map
( CLKIN => CLK_NUB, CLKFB => DFC, RST => BUS_RST, CLK0 => CLK_OUT,
CLK90 => NC90, CLK180 => NC180, CLK270 => NC270,
CLK2X => NC2X, CLKDV => NCDV,
LOCKED => NCLCK);

XPCI_CLK2 : BUFG port map
( O => CLK, I => CLK_OUT );


上記を DCM_STANDBY インスタンスに置き換え、BUFG インスタンスをコメントとして記述します。

XPCI_DLL : dcm_standby port map
( CLKIN => CLK_NUB, CLKFB => CLK, RST => BUS_RST, CLK0 => CLK,
CLK90 => NC90, CLK180 => NC180, CLK270 => NC270,
CLK2X => NC2X, CLKDV => NCDV,
LOCKED => NCLCK,
CLK2X180 => NCCLK2X180, CLKFX => NCCLKFX, CLKFX180 => NCCLKFX180,
DO => NCDO, PSDONE => PSDONE, PSCLK => LO, PSEN => LO, PSINCDEC => LO);

-- XPCI_CLK2 : BUFG port map
-- ( O => CLK, I => CLK_OUT );

DCM_STANDBY モジュールにより CLK0 に BUFG が挿入されていることに注目してください。 このため、ラッパ ファイルの BUFG は削除するか、上記のようにコメントとして記述する必要があります。 さらに、ラッパ ファイルの BUFG インスタンスが削除されたため、CLK0 出力が CLK_OUT ではなく、CLK に接続されていることに注目してください。

(Xilinx Answer 21127) に記載されている dcm_standby.vhd ファイルの DCM_STANDBY モジュールをラッパ ファイルの最後にコピーします。 ringregosc.vhd および counter.vhd ファイルのエンティティもラッパ ファイルの最後にコピーします。 または、これらのファイルを合成プロジェクトに追加してもかまいません。


Verilog
<install path>/verilog/src/wrap ディレクトリの pcix_lc_64x.v ファイルで、次のインスタンス文を変更します。

CLKDLL XPCI_DLL (.CLKIN(CLK_NUB), .CLKFB(CLK), .RST(BUS_RST), .CLK0(CLK_OUT),
.CLK90(NC90), .CLK180(NC180), .CLK270(NC270),
.CLK2X(NC2X), .CLKDV(NCDV),
.LOCKED(NCLCK));

CLKDLL は、次のように dcm_standby に差し替えます。

dcm_standby XPCI_DLL (.CLKIN(CLK_NUB), .CLKFB(CLK), .RST(BUS_RST), .CLK0(CLK),
.CLK90(NC90), .CLK180(NC180), .CLK270(NC270),
.CLK2X(NC2X), .CLKDV(NCDV),
.LOCKED(NCLCK));
// BUFG XPCI_CLK2 (.O(CLK),.I(CLK_OUT));

DCM_STANDBY モジュールにより CLK0 出力に BUFG が挿入されていることに注目してください。 このため、ラッパ ファイルの BUFG は削除するか、上記のようにコメントとして記述する必要があります。 さらに、ラッパ ファイルの BUFG インスタンスが削除されたため、CLK0 出力が CLK_OUT ではなく、CLK に接続されていることに注目してください。

(Xilinx Answer 21127) に記載されている dcm_standby.v ファイルの DCM_STANDBY モジュールをラッパ ファイルの最後にコピーします。Verilog では、1 つのファイルに複数のモジュールを含めることができます。 または、(Xilinx Answer 21127) に従って、プロジェクトでモジュールを使用できるようにしてもかまいません。

UCF ファイルの変更

UCF ファイルは、DCM_STANDBY モジュール内でインスタンシエートされた DCM に制約が適用されるよう変更する必要があります。 UCF ファイル制約は次のように記述されています。

INST "XPCI_WRAP/XPCI_DLL" CLKOUT_PHASE_SHIFT = FIXED ;
INST "XPCI_WRAP/XPCI_DLL" DESKEW_ADJUST = 22 ;
INST "XPCI_WRAP/XPCI_DLL" PHASE_SHIFT = +0 ;
INST "XPCI_WRAP/XPCI_DLL" LOC = "DCM_ADV_X0Y2" ;

これを次のように変更します。

INST "XPCI_WRAP/XPCI_DLL/dcminst1" CLKOUT_PHASE_SHIFT = FIXED ;
INST "XPCI_WRAP/XPCI_DLL/dcminst1" DESKEW_ADJUST = 22 ;
INST "XPCI_WRAP/XPCI_DLL/dcminst1" PHASE_SHIFT = +0 ;
INST "XPCI_WRAP/XPCI_DLL/dcminst1" LOC = "DCM_ADV_X0Y2";

インプリメンテーション

(Xilinx Answer 21127) に示すように、環境変数 XIL_MAP_ALLOW_ANY_DLL_INPUT を YES に設定する必要があります。このように設定しないと、MAP でエラーが発生します。



AR# 21658
日付 12/15/2012
ステータス アクティブ
種類 一般
このページをブックマークに追加