J
John Providenza
Guest
I'm working on a design that's using multiple DCMs along
with DDR i/o registers. The main input clock is 500MHz
going into a DCM with the CLKIN_DIVIDE_BY_2 flag set
so it's immediataly cut down to 250MHz. The DCMs used in
the design also have CLKOUT_PHASE_SHIFT=VARIABLE.
To drive my DDR i/o flops, I'm currently using both the CLK0 and
CLK180 pins (running at 250MHz).
The original designer flowed the DDR data though the chip using
both clock edges, ie, the incoming "posedge" data went down a
"posedge" data pipeline to flow back out the DDR output. The
incoming "negedge" data went down a "negedge" pipeline. The
original design did NOT use CLK0 and CLK180 for these two
data paths. Instead, the designer used "posedge" and "negedge"
in the Verilog. The major problem comes in the control and
data signals that cross the two domains. Because of the potential
duty cycle degradation, the P&R tools don't achieve timing
closure consistently.
As an experiment, I changed the design to use CLK0 and CLK180 for
the internal flops. I was:
a) pleased when the P&R timing was better
b) surprised when the design no longer worked.
I figured I screwed up converting the pos/negedge vs CLK0/CLK180
conversions, so I tripple checked the design and didn't find
anything. I backed up to a older working version, made the changes
again being VERY careful in my conversion. Again, no luck. Timing
number look good, the design doesn't work.
Is there something odd in the phasing between the the posedges of
CLK0 and CLK180?
Anyone else run into something like this?
Thanks,
John Providenza
with DDR i/o registers. The main input clock is 500MHz
going into a DCM with the CLKIN_DIVIDE_BY_2 flag set
so it's immediataly cut down to 250MHz. The DCMs used in
the design also have CLKOUT_PHASE_SHIFT=VARIABLE.
To drive my DDR i/o flops, I'm currently using both the CLK0 and
CLK180 pins (running at 250MHz).
The original designer flowed the DDR data though the chip using
both clock edges, ie, the incoming "posedge" data went down a
"posedge" data pipeline to flow back out the DDR output. The
incoming "negedge" data went down a "negedge" pipeline. The
original design did NOT use CLK0 and CLK180 for these two
data paths. Instead, the designer used "posedge" and "negedge"
in the Verilog. The major problem comes in the control and
data signals that cross the two domains. Because of the potential
duty cycle degradation, the P&R tools don't achieve timing
closure consistently.
As an experiment, I changed the design to use CLK0 and CLK180 for
the internal flops. I was:
a) pleased when the P&R timing was better
b) surprised when the design no longer worked.
I figured I screwed up converting the pos/negedge vs CLK0/CLK180
conversions, so I tripple checked the design and didn't find
anything. I backed up to a older working version, made the changes
again being VERY careful in my conversion. Again, no luck. Timing
number look good, the design doesn't work.
Is there something odd in the phasing between the the posedges of
CLK0 and CLK180?
Anyone else run into something like this?
Thanks,
John Providenza