Regional Clock Network and Large Designs

Hello,

I'm getting usual results from my BUFR network in Timing Analyzer:

-------------------------------------------------------------------------------- Hold Violations: TS_adc1_dclk_p = PERIOD TIMEGRP "TG_adc1_dclk_p" 4 ns HIGH 50%;

-------------------------------------------------------------------------------- Hold Violation: -0.974ns (requirement - (clock path skew + uncertainty - data path)) Source: adc1_reg_inst/nshifts_gen[1].dff_ins/d_r_7 (FF) Destination: adc1_reg_inst/nshifts_gen[2].dff_ins/d_r_7 (FF) Requirement: 0.000ns Data Path Delay: 1.275ns (Levels of Logic = 0) Positive Clock Path Skew: 2.249ns Source Clock: adc1_dclk rising at 0.000ns Destination Clock: adc1_dclk rising at 4.000ns Clock Uncertainty: 0.000ns Timing Improvement Wizard Data Path: adc1_reg_inst/nshifts_gen[1].dff_ins/d_r_7 to adc1_reg_inst/nshifts_gen[2].dff_ins/d_r_7 Delay type Delay(ns) Logical Resource(s) ---------------------------- ------------------- Tcko 0.268 adc1_reg_inst/nshifts_gen[1].dff_ins/ d_r_7 net (fanout=1) 1.065 adc1_reg_inst/d_array Tckdi (-Th) 0.058 adc1_reg_inst/nshifts_gen[2].dff_ins/ d_r_7 ---------------------------- --------------------------- Total 1.275ns (0.210ns logic, 1.065ns route) (16.5% logic, 83.5% route)

2.25 ns positive clock path skew? Omg!? So, then I looked at the partially PAR'ed output on this SX55 FPGA. Turns out the stupid tools are expanding the BUFR network across multiple BUFR regions, including horizontally (x direction). I have an 8k FIFO (necessary) to transition from this BUFR clock to a slower BUFG clock. Looks like the tools are placing the FIFO on the left side of the FPGA and the top- right BUFR is using non BUFR resources (I assume) to route the clock across.

Is this what's causing my enormous clock path skew? I will try to apply some area_group slice/bram constraints to my FIFOs, but I find this to be an extreme pain in the butt... I'm using a COTS board, which is configured with 4 ADC data channels and 4 ADC clocks. The ADC data is about 180 degrees out of phase w/ the clock (fine). Is there a way to constrain nets/instances/etc. to a regional clock region? That'd be really sweet...

Is there a better way to transition from the regional clock to a global clock other than using a FIFO? This is giving me a headache b/c my design takes forever to PAR and I can't meet timing :(

Thanks,

-B

Reply to
Brandon Jasionowski
Loading thread data ...

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

When we first started using the regional clock buffer in our designs, the tools did not automatically place the logic that used that clock into the three clock regions that the clock could reach. In my case, it just failed to route. Our solution was to put an area group constraint on the logic that used that clock, and that fixed the problem. This was with a 7.x version of EDK/ISE.

That little inconvenience aside, the BUFIOs and BUFRs are very nice. The BUFR is what makes it possible for us to meet timing for 66 MHz PCI on a V4FX60. As the FPGAs get bigger, the BUFG delays get longer. On PCI, you should not use a DCM to tune out the clock delay because the clock speed is allowed to vary, but I don't know how many system do that.

Regards,

John McCaskill

formatting link

Reply to
John McCaskill

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

Right. So I'm trying constraints like:

INST "fifoadc1_inst" AREA_GROUP = "AG_fifoadc1_inst"; AREA_GROUP "AG_fifoadc1_inst" COMPRESSION = 100; AREA_GROUP "AG_fifoadc1_inst" RANGE = SLICE_X48Y128:SLICE_X95Y255; AREA_GROUP "AG_fifoadc1_inst" RANGE = RAMB16_X4Y16:RAMB16_X7Y31;

Is there an area group constraint that's all encompassing, i.e. includes FIFO16, DSP48, SLICES, RAMB16, etc.?

Thanks,

-Brandon

Reply to
Brandon Jasionowski

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

Set range to clock regions may be what you are looking for. e.g.

AREA_GROUP "AG_fifoadc1_inst" RANGE = CLOCKREGION_X0Y4, CLOCKREGION_X0Y7;

Cheers, Jim

formatting link

Reply to
Jim Wu

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.