Hello all,
I helping a colleague debug a timing issue on his SX-A design. I
don't have any experience with Actel devices or tools, only Xilinx and
Altera, so setting timing constraints with these devices is new to
me. I'm hoping someone might be able to help.
The design has two clock domains with a handful of control signals
crossing the domains: 48 MHz and 24 MHz generated on the board by a
12MHz oscillator through a zero delay buffer. The
FPGA is a bridge
between two different bus types. The problem we're seeing is the
device fails when cold, but not after it has warmed up.
Apparently for the SX-A family, the only timing constraint functions
available are create_clock, set_min_delay and set_max_delay. Here's
what he currently has:
create_clock -name {clk_48M_p} -period 20.000 -waveform {0.000 10.000}
{clk_48M_p}
create_clock -name {clk_24M_p} -period 40.000 -waveform {0.000 20.000}
{clk_24M_p}
set_max_delay 20.000 -from [all_inputs] -to [get_clocks{ * }]
set_max_delay 15.000 -from [get_clocks{ * }] -to [all_outputs]
set_max_delay 20.000 -from [all_inputs] -to [all_outputs]
I'm looking at that and thinking we might have an issue since it's
constraining the max delay from all inputs to both clocks as 20.000
ns. Shouldn't we constrain the inputs/outputs in each clock domain
only to that clock? I'm thinking the tools are going to spend
unnecessary effort to constrain the signals in the 24MHz domain when
we could somehow partition the constraints between the two clock
domains and allow the tools to put more effort on the 48MHz signals.
Does that sound right?
Is there a good, clean way of partitioning the constraints for the two
clock domains short of listing all of the different signals in each
domain? Anybody have any other ideas?