Routing problem of DCM

Hello, all:

When I did the implementation of my design, the map process gave me the following error:

--------------------------------------------------------------------------------------------------------- ERROR:PhysDesignRules:1577 - Illegal routing. The DCM_ADV block has CLK output pin with incomplete or incorrect connectivity. Routing from the pin to a BUFG, BUFGCTRL or PLL_ADV block type was not found. The DCM_ADV CLK output pins can only route to BUFG, BUFGCTRL or PLL_ADV block types.

---------------------------------------------------------------------------------------------------- But I do have the CLK0 port connected with a global buffer : CLK0_BUFG_INST as shown in the following code. Can somebody tell me what's wrong here? I have spent a lot of time on it but still no clue.

Thank you very mucy, Rebecca

library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL;

entity dcm3 is port ( CLKIN_IN : in std_logic; RST_IN : in std_logic; CLKFX_OUT : out std_logic; CLK0_OUT : out std_logic; LOCKED_OUT : out std_logic); end dcm3;

architecture BEHAVIORAL of dcm3 is signal CLKFB_IN : std_logic; signal CLK0_BUF, CLKFX_BUF, Locked_out_buf : std_logic; signal GND1 : std_logic_vector (6 downto 0); signal GND2 : std_logic_vector (15 downto 0); signal GND3 : std_logic;

begin GND1(6 downto 0) CLKFB_IN);

Locked_BUFG_INST : BUFG port map (I=>LOCKED_OUT_Buf, O=>LOCKED_OUT);

DCM_ADV_INST : DCM_ADV generic map( CLK_FEEDBACK => "1X", CLKDV_DIVIDE => 2.0, CLKFX_DIVIDE => 5, CLKFX_MULTIPLY => 3, CLKIN_DIVIDE_BY_2 => FALSE, CLKIN_PERIOD => 10.0, CLKOUT_PHASE_SHIFT => "NONE", DCM_AUTOCALIBRATION => TRUE, DCM_PERFORMANCE_MODE => "MAX_SPEED", DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", DFS_FREQUENCY_MODE => "HIGH", DLL_FREQUENCY_MODE => "LOW", DUTY_CYCLE_CORRECTION => TRUE, FACTORY_JF => x"F0F0", PHASE_SHIFT => 0, STARTUP_WAIT => FALSE) port map (CLKFB=>CLKFB_IN, CLKIN=>CLKIN_IN, DADDR(6 downto 0)=>GND1(6 downto 0), DCLK=>GND3, DEN=>GND3, DI(15 downto 0)=>GND2(15 downto 0), DWE=>GND3, PSCLK=>GND3, PSEN=>GND3, PSINCDEC=>GND3, RST=>'0', CLKDV=>open, CLKFX=>CLKFX_BUF, CLKFX180=>open, CLK0=>CLK0_BUF, CLK2X=>open, CLK2X180=>open, CLK90=>open, CLK180=>open, CLK270=>open, DO=>open, DRDY=>open, LOCKED=>LOCKED_OUT_Buf, PSDONE=>open);

end BEHAVIORAL;

Reply to
Rebecca
Loading thread data ...

Did you set your environment variables?

set XIL_DCM_BUFG_CLKIN=3D1 Xilinx has all these stupid environment setting that they don't document well.

1=2E Right-click My Computer(Start Menu), and select Properties. 2=2E =E2=80=A8Click the Advanced tab. 3=2E Click Environment Variables, and add XIL_DCM_BUFG_CLKIN=3D1.

Personally I place my DCM/IBUG/at the top level. I cant stand it when you get the par errors after waiting for hours.

Cheers, Bill

Reply to
WATomb

Hello, Bill: Thank you very much for your response. Buf after I set up the enviroment variable and run the route again, I got the same error several hours later. What can I do? I will set the DCM as the top level file and try.

Reply to
Rebecca

Hello, Bill: Thank you very much for your response. Buf after I set up the enviroment variable and run the route again, I got the same error several hours later. What can I do? When I set the DCM as the top file and do the implementation, the .bit file can be generated successfully. But when I put my vhdl files (include dcm3.vhd) as a uer define core in the EDK, I always got the above error. The system in the EDK also incudes a DCM. Is there something wrong as shown: BEGIN dcm_module PARAMETER INSTANCE = dcm_0 PARAMETER HW_VER = 1.00.a PARAMETER C_CLK0_BUF = TRUE PARAMETER C_CLKDV_BUF = TRUE PARAMETER C_CLKDV_DIVIDE = 5.000000 PARAMETER C_CLKIN_PERIOD = 10.000000 PARAMETER C_CLK_FEEDBACK = 1X PARAMETER C_DLL_FREQUENCY_MODE = LOW PARAMETER C_EXT_RESET_HIGH = 1 PORT CLKIN = dcm_clk_s PORT CLKDV = sys_clk_s PORT CLK0 = dcm_0_FB PORT CLKFB = dcm_0_FB PORT RST = net_gnd PORT LOCKED = dcm_0_lock END

Reply to
Rebecca

Did you restart ISE after setting this variable?

/Mikhail

Reply to
MM

Probably the EDK didn't take the changed file. I will check first and let you know the result, Thank you for all your help.

Reply to
Rebecca

Well I was writing this at the same time. During builds sorry.

Hi Rebecca, =E2=80=A8I guess that didn't fix it sorry. First you just said the E word oh the pain of EDK. I pray you have a very very nice boss with deep pockets. If EDK only worked the same way as Xilinx stated life would be great however they blame training.

Ok when I added DDR2 to my design(custom board) I also had the same problem needed another DCM that was in ISE. Please try removing the Global clock buffer from your DCM(ISE) output and see if that fixes the problem. Or use the Coregen version of the DCM and see if that fixes it. An even though you have output declared as a BUFG in Corgen that sometimes fixes it. Also you maybe running out of resources.

1st try this I don't think you need this try removing it Locked_BUFG_INST : BUFG port map (I=3D>LOCKED_OUT_Buf, O=3D>LOCKED_OUT);

Ok I am guessing you don't have a nice boss that gave you the recommended computer with 16G. So have you ever used the FPGA Editor? Cheers, Bill

Reply to
WATomb

You could try explicitly instantiating a BUFG/BUFGCTRL between CLK0 and CLKFB instead of feeding dcm_0_FB back directly - the error message complains that only BUFG/BUFGCTRL/PLL_ADV can be the source for CLKFB.

That is what I did to fix DCM synthesis warn> Hello, Bill:

Reply to
Daniel S.

Thanks for all your help. The problem has been fixed. The reason is that EDK didn't take the modified VHDL code. I need to remove the content in synthesis or implementation directory ( i removed both, but probably we just remove the content under the implementation directory). And another thing is the EDK won't copy the files under the directory.. user defined core....-> netlist to the implementation directory automatically as said in the manual. I I have to copy them manually. Probably I made another stupid mistake? Bill, I added the BUFG for the locked signal because I found in the Modelsim simulation, sometimes the generated clocks can't sample the locked signal at its first rising edge but sometimes they can. I used the following code in my program:

NextStateProc : Process(ClkX3, DCMLocked) is begin if(DCMLocked='0') then CLKState

Reply to
Rebecca

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.