The Tempterature Sensor IP Introduces a Synchronous Clock That Breaks Timing Requirements
We have just added the "Temperature Sensor Intel® FPGA IP" (based on the "Intel® Stratix® 10 ADC") to a large design to be able to monitor the FPGA die's core temperature while it is running. However, with this addition a 250MHz clock ("altera_int_osc_clk") is introduced into the system which is by default treated as synchronous with our systems' clock, introducing major clock skew that make half our clocks violate the timing requirements and implementation impossible since our clocks are not compatible with this new clock.
After investigating the issue, we found that this clock is introduced in one of three .sdc files that are automatically generated for the IP component, but despite our best efforts we have been unable to add constraints to this clock through changing/adding .sdc files that would have it be treated as asynchronous (such as by using set_clock_groups-asynchronous-group[our clocks]-group[get_clocks {altera_int_osc_clk}] ). When we look into the list of .sdc files in the Timing Analyzer we find that these generated files always are read after our files, as shown below where an extra file (async.sdc) was added at the end of the project's .qsf file which still ended up being read before the generated files:
Our main .sdc file with constraints for our system is simply called "quartus.sdc"
Is it in any way possible to make this added clock asynchronous to our clocks, so that it no longer breaks our system?
For anyone that have a similar issue in the future, this part of our timing problems with the temp sensor was resolved by getting the Timing Analyzer to write a new .sdc file for the project as that combines all previously given .sdc file constraints into one, in which we could find the generated create_clock constraint used for the altera_int_osc_clk clock. In our case it was:
create_clock -name {altera_int_osc_clk} -period 4.000 -waveform { 0.000 2.000 } [get_nodes {*|intosc|oscillator_dut~oscillator_clock}]