The use of a negative, FIXED-mode phase shift with the Virtex-II DCM requires a minor modification to the clock muxing.
Specifically, CLKIN must be used to drive CLKFB while the DCM is in reset (when the RST signal is held High or during the startup sequence after configuration).
The diagram and example Verilog and VHDL code below illustrate the implementation of this simple modification.
This modification is NOT required for any positive phase shifting or for any variable-mode phase shifting.
The requirement applies to any Virtex-II/ Virtex-II Pro DCM using FIXED-mode phase, regardless of whether the RST of DCM is connected to a user signal.
RST must be held High for at least three clock cycles.
This issue applies to all Virtex-II devices.
This does not apply to Virtex-4 DCM's. For more information on this warning and Virtex-4 DCM's, please see (Xilinx Answer 22095).
This issue is fixed in the Virtex-II Pro devices listed in the table below:
The following diagram illustrates the clock-muxing modification:
Note: PAR might report a warning that the IBUFG (CLKIN)-to-BUFGMUX connection is not an optimal connection and will not use the fast connection between the two components.
You can safely ignore this warning. In this case, a dedicated connection is not necessary for the IBUFG-BUFGMUX connection.
DCM U_DCM ( .CLKIN(clkin), .CLKFB(clk0_new), .RST(rst), .CLK0(clk0), .LOCKED(locked) );
BUFGMUX U_BUFGMUX ( .O(clk0_new), .I0(clk0), .I1(clkin), .S(rst) );
-- DCM instantiation --
U_DCM: DCM port map ( CLKIN => clkin,
CLKFB => clk0_new,
DSSEN => '0',
PSCLK => '0',
PSINCDEC => '0',
RST => rst,
CLK0 => clk0,
LOCKED => locked);
-- BUFGMUX instantiation --
U_BUFGMUX: BUFGMUX( I0 => clk0
I1 => clkin,
O => clk0_new);
Alternative Work-Around Using Positive Phase Shift
You can also work around this problem by using an equivalent positive PHASE_SHIFT value. Given the current data sheet specification of FINE_SHIFT_RANGE = 10 ns, this restriction begins to have an effect for input frequencies below 100 MHz (input periods larger than 10 ns).
Given the equation:
phase shift = (PS/256) * PeriodCLKIN
For a 10 ns input clock period:
VARIABLE mode: -128 <= PS <= 128
FIXED mode: 0 <= PS <= 255 (full range)
For a 20 ns input clock period:
VARIABLE mode: -64 <= PS <= 64
FIXED mode: 0 <= PS <= 128
For a 40 ns input clock period:
VARIABLE mode: -32 <= PS <= 32
FIXED mode: 0 <= PS <= 64
In either FIXED or VARIABLE mode, you can extend the range by choosing one of the following:
- CLK90, CLK180, or CLK270 rather than CLK0
- CLK2X180 rather than CLK2X
- CLKFX180 rather than CLKFX
Even at 25 MHz (a 40 ns period), the FIXED mode coupled with these CLK* phases allows shifting throughout the entire input clock period range. Refer to the following figure:
Furthermore, the phase-shifting (DPS) function in DCM requires the CLKFB for delay adjustment. For more information, see the Virtex-II or Virtex-II Pro User Guide: Design Considerations -> Using the Digital Clock Manager (DCM) -> Phase Shifting:
1. Go to:
2. Select Virtex-II Pro under "FPGA Device Families."
3. Select Virtex-II Pro Platform FPGA User Guide.
Since CLKFB must be from CLK0 or CLK2X, the DLL output is used. Consequently, the minimum CLKIN frequency for the DPS function is 24 MHz.
Note: To ensure setup/hold time is calculated correctly, see (Xilinx Answer 18668).
Alternative Work-Around Using Variable Phase Shift
Configure the DCM with variable phase shift as follows:
1. Set the CLKOUT_PHASE_SHIFT attribute to VARIABLE.
2. Set the PHASE_SHIFT attribute to the required value. A positive value and phase shifting in the positive range is recommended. See (Xilinx Answer 15130).
3. Connect PSCLK to a clock signal.
4. Connect PSEN to GND if you do not intend to increment or decrement the phase shift.
5. Connect PSINCDEC to a signal, GND, or VCC.
Note: For best results, use 5.1i Service Pack 3 or later. The work-around causes MAP errors in earlier software versions, as described below:
MAP reports the following error:
To work around this, you can modify the HDL file so that PSINCDEC and PSEN are connected to a dummy input signal.
The following error is reported:
You can safely ignore this error. To bypass this error in MAP, turn off the DRC check by using the following environment variable:
ISE 5.1i Service Pack 3
A fix in 5.1i Service Pack 3 prevents the MAP error from occurring. 5.1i Service Pack 3 is available at: