J
J?rgen
Guest
Hi,
in order to verify the functionality of XILINX DCM, I have generated a
dcm.vhd file with the ISE 6.2 architecture wizard. The dcm module is
embedded into a simple top-level file that only connects the testbench
signals (in-clock and reset (=0) to the DCM-module. The DCM reset
signal is always set to '0'.
Unfortunately, during the simulation with Modelsim, I do not obtain
the 4x clock signal of the input clock at the output (CLKFX_OUT) but
always '0'. CLK0_OUT is always '0', but CLKIN_IBUFG_OUT follows the
input clock signal.
What can be the reason for this behavior ?
Regards
Juergen
------------------------------------------------------------------------------
Below: the dcm file generated by architecture wizard
-- Module dyna_dcm
-- Generated by Xilinx Architecture Wizard
-- VHDL
-- Written for synthesis tool: XST
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 dyna_dcm is
port (
RST_IN : in std_logic;
CLKIN_IN : in std_logic;
LOCKED_OUT : out std_logic;
CLKFX_OUT : out std_logic;
CLKIN_IBUFG_OUT : out std_logic;
CLK0_OUT : out std_logic);
end dyna_dcm;
architecture STRUCT of dyna_dcm 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;
-- Period Jitter (unit interval) = 0.17 UI
-- Period Jitter (Peak-to-Peak) = 0.63 ns
component DCM
generic(
CLKDV_DIVIDE : real := 2.0;
CLKFX_DIVIDE : integer := 1;
CLKFX_MULTIPLY : integer := 4;
CLKIN_DIVIDE_BY_2 : boolean := false;
CLKIN_PERIOD : real := 0.0;
CLKOUT_PHASE_SHIFT : string := "NONE";
CLK_FEEDBACK : string := "1X";
DESKEW_ADJUST : string := "SYSTEM_SYNCHRONOUS";
DFS_FREQUENCY_MODE : string := "LOW";
DLL_FREQUENCY_MODE : string := "LOW";
DSS_MODE : string := "NONE";
DUTY_CYCLE_CORRECTION : boolean := true;
FACTORY_JF : bit_vector := X"C080";
MAXPERCLKIN : time := 1000000 ps;
MAXPERPSCLK : time := 100000000 ps;
PHASE_SHIFT : integer := 0;
SIM_CLKIN_CYCLE_JITTER : time := 300 ps;
SIM_CLKIN_PERIOD_JITTER : time := 1000 ps;
STARTUP_WAIT : boolean := false
);
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;
begin
DCM_INST : DCM
Generic map (
CLK_FEEDBACK => "1X",
CLKDV_DIVIDE => 2.0,
CLKFX_DIVIDE => 1,
CLKFX_MULTIPLY => 4,
CLKIN_DIVIDE_BY_2 => FALSE,
CLKIN_PERIOD => 15.1515,
CLKOUT_PHASE_SHIFT => "NONE",
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
DFS_FREQUENCY_MODE => "HIGH",
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => TRUE,
PHASE_SHIFT => 0,
STARTUP_WAIT => FALSE)
port map (
CLKIN => CLKIN_IBUFG,
CLKFB => CLKFB_IN,
RST => RST_IN,
PSEN => GND,
PSINCDEC => GND,
PSCLK => GND,
DSSEN => GND,
CLK0 => CLK0_BUF,
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_BUFG_INST : BUFG
port map (
I => CLKFX_BUF,
O => CLKFX_OUT);
CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
CLK0_OUT <= CLKFB_IN;
GND <= '0';
end STRUCT;
in order to verify the functionality of XILINX DCM, I have generated a
dcm.vhd file with the ISE 6.2 architecture wizard. The dcm module is
embedded into a simple top-level file that only connects the testbench
signals (in-clock and reset (=0) to the DCM-module. The DCM reset
signal is always set to '0'.
Unfortunately, during the simulation with Modelsim, I do not obtain
the 4x clock signal of the input clock at the output (CLKFX_OUT) but
always '0'. CLK0_OUT is always '0', but CLKIN_IBUFG_OUT follows the
input clock signal.
What can be the reason for this behavior ?
Regards
Juergen
------------------------------------------------------------------------------
Below: the dcm file generated by architecture wizard
-- Module dyna_dcm
-- Generated by Xilinx Architecture Wizard
-- VHDL
-- Written for synthesis tool: XST
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 dyna_dcm is
port (
RST_IN : in std_logic;
CLKIN_IN : in std_logic;
LOCKED_OUT : out std_logic;
CLKFX_OUT : out std_logic;
CLKIN_IBUFG_OUT : out std_logic;
CLK0_OUT : out std_logic);
end dyna_dcm;
architecture STRUCT of dyna_dcm 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;
-- Period Jitter (unit interval) = 0.17 UI
-- Period Jitter (Peak-to-Peak) = 0.63 ns
component DCM
generic(
CLKDV_DIVIDE : real := 2.0;
CLKFX_DIVIDE : integer := 1;
CLKFX_MULTIPLY : integer := 4;
CLKIN_DIVIDE_BY_2 : boolean := false;
CLKIN_PERIOD : real := 0.0;
CLKOUT_PHASE_SHIFT : string := "NONE";
CLK_FEEDBACK : string := "1X";
DESKEW_ADJUST : string := "SYSTEM_SYNCHRONOUS";
DFS_FREQUENCY_MODE : string := "LOW";
DLL_FREQUENCY_MODE : string := "LOW";
DSS_MODE : string := "NONE";
DUTY_CYCLE_CORRECTION : boolean := true;
FACTORY_JF : bit_vector := X"C080";
MAXPERCLKIN : time := 1000000 ps;
MAXPERPSCLK : time := 100000000 ps;
PHASE_SHIFT : integer := 0;
SIM_CLKIN_CYCLE_JITTER : time := 300 ps;
SIM_CLKIN_PERIOD_JITTER : time := 1000 ps;
STARTUP_WAIT : boolean := false
);
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;
begin
DCM_INST : DCM
Generic map (
CLK_FEEDBACK => "1X",
CLKDV_DIVIDE => 2.0,
CLKFX_DIVIDE => 1,
CLKFX_MULTIPLY => 4,
CLKIN_DIVIDE_BY_2 => FALSE,
CLKIN_PERIOD => 15.1515,
CLKOUT_PHASE_SHIFT => "NONE",
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
DFS_FREQUENCY_MODE => "HIGH",
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => TRUE,
PHASE_SHIFT => 0,
STARTUP_WAIT => FALSE)
port map (
CLKIN => CLKIN_IBUFG,
CLKFB => CLKFB_IN,
RST => RST_IN,
PSEN => GND,
PSINCDEC => GND,
PSCLK => GND,
DSSEN => GND,
CLK0 => CLK0_BUF,
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_BUFG_INST : BUFG
port map (
I => CLKFX_BUF,
O => CLKFX_OUT);
CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
CLK0_OUT <= CLKFB_IN;
GND <= '0';
end STRUCT;