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# 15468

5.1i DCM ウィザード - DCM 出力を BUFG/BUFGMUX およびローカル配線/ロー スキュー ラインに接続した場合、不正な VHDL コードが書き込まれる

説明

キーワード : write, generate, HDL, BUFGMUX, BUFG, global, clock, buffer, 書き込み, 生成, グローバル, クロック, バッファ

重要度 : 標準

概要:
DCM 出力をクロック バッファおよびローカル配線/ロー スキュー ラインに接続した場合、DCM ウィザードによって不正な VHDL コードが書き込まれます。この問題は VHDL のみで発生します。

たとえば、CLKDV で BUFG およびローカル配線を駆動した場合 (図を参照)、ポート信号が使用されます。 この結果生成された VHDL ファイルで、合成中にエラーが発生します。

(WEBIMAGE 1:CLKDV drives I1 of the BUFGMUX and "LOWSKEWLINE":INLINE)

ソリューション

1

この問題は、最新版の 5.1i サービス パックで修正されています。サービス パックは次のサイトから入手できます。
http://support.xilinx.co.jp/support/techsup/sw_updates
この修正は、5.1i サービス パック 2 以降に含まれます。

2

次のような回避策を取ることもできます。

次に示す例では、変更すべき 4 行を太字で表示しています。

-- Module test_1
-- Generated by Xilinx Architecture Wizard
-- VHDL
-- Written for synthesis tool: XST
-- Xilinx Device: XC2V40-CS144-4

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
-- synopsys translate_off
Library UNISIM;
use UNISIM.Vcomponents.all;
-- synopsys translate_on

entity test_1 is
port (
RST_IN : in std_logic;
CLKIN_IN : in std_logic;
CLKFX_SELECT_IN : in std_logic;
CLKDV_OUT : out std_logic;
LOCKED_OUT : out std_logic;
CLKFX_OUT : out std_logic;
CLK0_OUT : out std_logic);
attribute USELOWSKEWLINES : string;
attribute USELOWSKEWLINES of CLKDV_OUT : SIGNAL is "";
end test_1;

architecture STRUCT of test_1 is
signal CLKIN_IBUFG : std_logic;
signal CLKFB_IN : std_logic;
signal CLK0_BUF : std_logic;
signal CLKFX_BUF : std_logic;
signal GND : std_logic;
-- declare a new signal signal CLKDV : std_logic;

attribute CLK_FEEDBACK : string;
attribute CLK_FEEDBACK of DCM_INST : label is "1X";
attribute CLKDV_DIVIDE : real;
attribute CLKDV_DIVIDE of DCM_INST : label is 2.0;
attribute CLKFX_DIVIDE : integer;
attribute CLKFX_DIVIDE of DCM_INST : label is 3;
attribute CLKFX_MULTIPLY : integer;
attribute CLKFX_MULTIPLY of DCM_INST : label is 4;
attribute CLKIN_DIVIDE_BY_2 : boolean;
attribute CLKIN_DIVIDE_BY_2 of DCM_INST : label is FALSE;
attribute CLKIN_PERIOD : real;
attribute CLKIN_PERIOD of DCM_INST : label is 10.0;
attribute CLKOUT_PHASE_SHIFT : string;
attribute CLKOUT_PHASE_SHIFT of DCM_INST : label is "NONE";
attribute DESKEW_ADJUST : string;
attribute DESKEW_ADJUST of DCM_INST : label is "SYSTEM_SYNCHRONOUS";
attribute DFS_FREQUENCY_MODE : string;
attribute DFS_FREQUENCY_MODE of DCM_INST : label is "LOW";
attribute DLL_FREQUENCY_MODE : string;
attribute DLL_FREQUENCY_MODE of DCM_INST : label is "LOW";
attribute DUTY_CYCLE_CORRECTION : boolean;
attribute DUTY_CYCLE_CORRECTION of DCM_INST : label is TRUE;
attribute PHASE_SHIFT : integer;
attribute PHASE_SHIFT of DCM_INST : label is 0;
attribute STARTUP_WAIT : boolean;
attribute STARTUP_WAIT of DCM_INST : label is FALSE;
-- Period Jitter (unit interval) = 0.09 UI
-- Period Jitter (Peak-to-Peak) = 0.68 ns

component DCM
-- synopsys translate_off
generic(
DFS_FREQUENCY_MODE : string := "LOW";
DLL_FREQUENCY_MODE : string := "LOW";
DUTY_CYCLE_CORRECTION : boolean := TRUE;
CLKIN_DIVIDE_BY_2 : boolean := FALSE;
CLK_FEEDBACK : string := "1X";
CLKOUT_PHASE_SHIFT : string := "NONE";
DSS_MODE : string := "NONE";
FACTORY_JF : bit_vector := X"C080";
STARTUP_WAIT : boolean := false;
PHASE_SHIFT : integer := 0;
CLKFX_MULTIPLY : integer := 4;
CLKFX_DIVIDE : integer := 1;
CLKDV_DIVIDE : real := 2.0;
CLKIN_PERIOD : real := 0.0;
DESKEW_ADJUST : string := "SYSTEM_SYNCHRONOUS"
);
-- synopsys translate_on
port (
CLKIN : in std_logic;
CLKFB : in std_logic;
RST : in std_logic;
PSEN : in std_logic;
PSINCDEC : in std_logic;
PSCLK : in std_logic;
DSSEN : in std_logic;
CLK0 : out std_logic;
CLK90 : out std_logic;
CLK180 : out std_logic;
CLK270 : out std_logic;
CLKDV : out std_logic;
CLK2X : out std_logic;
CLK2X180 : out std_logic;
CLKFX : out std_logic;
CLKFX180 : out std_logic;
STATUS : out std_logic_vector (7 downto 0);
LOCKED : out std_logic;
PSDONE : out std_logic
);
end component;
component IBUFG
port (
I : in std_logic;
O : out std_logic
);
end component;
component BUFG
port (
I : in std_logic;
O : out std_logic
);
end component;
component BUFGMUX
port (
I0 : in std_logic;
I1 : in std_logic;
S : in std_logic;
O : out std_logic
);
end component;

begin
DCM_INST : DCM
-- synopsys translate_off
Generic map (
CLK_FEEDBACK => "1X",
CLKDV_DIVIDE => 2.0,
CLKFX_DIVIDE => 3,
CLKFX_MULTIPLY => 4,
CLKIN_DIVIDE_BY_2 => FALSE,
CLKIN_PERIOD => 10.0,
CLKOUT_PHASE_SHIFT => "NONE",
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
DFS_FREQUENCY_MODE => "LOW",
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => TRUE,
PHASE_SHIFT => 0,
STARTUP_WAIT => FALSE)
-- synopsys translate_on
port map (
CLKIN => CLKIN_IBUFG,
CLKFB => CLKFB_IN,
RST => RST_IN,
PSEN => GND,
PSINCDEC => GND,
PSCLK => GND,
CLK0 => CLK0_BUF,
-- change the port map from 'CLKDV => CLKDV_OUT,' to CLKDV => CLKDV,
CLKFX => CLKFX_BUF,
LOCKED => LOCKED_OUT);

CLKIN_IBUFG_INST : IBUFG
port map (
I => CLKIN_IN,
O => CLKIN_IBUFG);

CLK0_BUFG_INST : BUFG
port map (
I => CLK0_BUF,
O => CLKFB_IN);

CLKFX_BUFGMUX_INST : BUFGMUX
port map (
I0 => CLKFX_BUF,
-- change ' I1 => CLKDV_OUT, ' to I1 => CLKDV,
S => CLKFX_SELECT_IN,
O => CLKFX_OUT);

CLK0_OUT <= CLKFB_IN;
GND <= '0';
-- Add a port assignment. CLKDV_OUT <= CLKDV;

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