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?