Can I make ISE 9.2 ngdbuild stop generating new PERIOD specs on PLL outputs?

My Virtex5 design has a clock from an input pin going to a PLL that generates several clocks at different frequencies. My design treats these as asynchronous clocks, so I don't want the ISE timing analyzer to work on timing for the registers that cross clock domains. I can write the timespecs as unrelated in my ucf, but ngdbuild always traces the input clock into the PLL, and generates additional constraints for the PLL output clocks that are all related. So timing analyzer reports timing violations on my clock domain crossings.

In the past, I have put a TIG on every register that crosses clock domains, and that works. But it seems like if I could only make ngdbuild accept my (unrelated) PERIOD specs, instead of generating its own (related) specs, then it would be simpler to maintain. Anyone know how to control this in ngdbuild?

Reply to
Barry
Loading thread data ...

I've had the same issue and don't know of any solution except the TIGs. I wish there were some parameter on the DCM/PLL that you could use to specify that the outputs are unrelated. I use groups for the TIGs so I don't have to find every single crossing:

NET "*fifo/wclk" TNM="write_stuff"; NET "*fifo/rclk" TNM="read_stuff"; TIMESPEC "TS_false_path7"=FROM "write_stuff" TO "read_stuff" TIG; TIMESPEC "TS_false_path8"=FROM "read_stuff" TO "write_stuff" TIG;

-Kevin

Reply to
Kevin Neilson

Thanks, Kevin. After some research, I came up with something similar. It appears to work, and relieves me of having to keep track of every asynchronous register. Barry

NET "pci_clk" TNM =3D FFS pci_clk_grp; NET "ddr2_clk0" TNM =3D FFS ddr2_clk0_grp; NET "ilb_clk" TNM =3D FFS ilb_clk_grp; TIMESPEC TS_false_path1 =3D FROM pci_clk_grp TO ddr2_clk0_grp TIG; TIMESPEC TS_false_path2 =3D FROM pci_clk_grp TO ilb_clk_grp TIG; TIMESPEC TS_false_path3 =3D FROM ddr2_clk0_grp TO pci_clk_grp TIG; TIMESPEC TS_false_path4 =3D FROM ddr2_clk0_grp TO ilb_clk_grp TIG; TIMESPEC TS_false_path5 =3D FROM ilb_clk_grp TO pci_clk_grp TIG; TIMESPEC TS_false_path6 =3D FROM ilb_clk_grp TO ddr2_clk0_grp TIG;

Reply to
Barry

Are they really totally asynchronous (for treatment)? I have found that sometimes I care, but just not to the extent that the tools would automatically force it. So, instead of a TIG, I might create a multi-cycle constraint. This relieves the pressure on the routing tool, but may still keep the tool from doing really stupid things, such as placing the interface logic parts far apart on the die.

JTW

Thanks, Kevin. After some research, I came up with something similar. It appears to work, and relieves me of having to keep track of every asynchronous register. Barry

NET "pci_clk" TNM = FFS pci_clk_grp; NET "ddr2_clk0" TNM = FFS ddr2_clk0_grp; NET "ilb_clk" TNM = FFS ilb_clk_grp; TIMESPEC TS_false_path1 = FROM pci_clk_grp TO ddr2_clk0_grp TIG; TIMESPEC TS_false_path2 = FROM pci_clk_grp TO ilb_clk_grp TIG; TIMESPEC TS_false_path3 = FROM ddr2_clk0_grp TO pci_clk_grp TIG; TIMESPEC TS_false_path4 = FROM ddr2_clk0_grp TO ilb_clk_grp TIG; TIMESPEC TS_false_path5 = FROM ilb_clk_grp TO pci_clk_grp TIG; TIMESPEC TS_false_path6 = FROM ilb_clk_grp TO ddr2_clk0_grp TIG;

Reply to
jtw

Thanks, that is probably a good idea. Barry

Reply to
Barry

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.