Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20704 Discussions

Random results on FPGA

Altera_Forum
Honored Contributor II
2,558 Views

Hello, 

 

I'm using altera devices for about 10 years with quartus or quartus + synplify pro. 

I'm currently struggling for about a month !!! on this issue: 

Using the same netlist from synplify pro, the same timing constraints, and doing the place and route with quartus, 

I can get total different results on FPGA (stratix III): fully working, or failing on first HW accesses. 

The IP in the FPGA uses a lot of clock gating and I think that Quartus is not doing a good timing analysis (timequest reports no timing violations and the design is fully constrained), 

leading to such random results. 

 

Did you ever face such problem at your place ? 

 

Metastability report in timequest reports no problem. 

 

Resets are ok. 

 

Cooling the FPGA does not change anything. 

 

I never faced such situation before. 

 

 

I need help ! 

 

Alex
0 Kudos
32 Replies
Altera_Forum
Honored Contributor II
266 Views

that was the root cause of the issue. 

 

 

adding this uncertainty of 500 ps in my sdc solves the unpredictable results. 

 

set_clock_uncertainty -add -from [get_clocks *] -to [get_clocks *] -setup 0.5 

set_clock_uncertainty -add -from [get_clocks *] -to [get_clocks *] -hold 0.5 

 

 

"Clock uncertainty" is the interval of confidence around the ideal clock 

value, such that the measured value is always within the stated interval. 

Common sources of clock uncertainty include clock jitter, duty cycle 

distortion, and phase shift error. Due to these sources, clock uncertainty 

must be factored in to guard against deep submicron effects that are not 

explicitly reflected in the timing models. 

 

PLL phase error, PLL jitter, I/O buffer, clock network noise, core noise, 

On chip variation (die process, temperature), crosstalk between nets. 

 

 

Wich is specially true for my complex design with more thqn 100 clocks and plenty of clock gating.
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

Good, but using clock uncertainty to solve the problem, still seems to mean Quartus II fitting process does not smart enough. 

It might still be good for you to file a service request for Altera to look into what they can do better
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

 

--- Quote Start ---  

Good, but using clock uncertainty to solve the problem, still seems to mean Quartus II fitting process does not smart enough. 

It might still be good for you to file a service request for Altera to look into what they can do better 

--- Quote End ---  

 

 

Quartus is doing a proper job. 

 

clock uncertainty cannot be predicted and is design/fpga yield dependant. 

 

I'm currently in contact with them to get the excel sheet to calculate the real clock uncertainty, 

as they do it for hardcopy devices.
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

Well, again, there is another root cause of the problem ...

0 Kudos
Altera_Forum
Honored Contributor II
266 Views

I found it this time. 

Problem was due to the internal clock definiton of the cpu clock domain. 

Doing that was cutting io, reset and other clock domains connection timing analysis. 

By removing those clock definition, I could see plainty of big timing violations (like 10 ns). 

Now it is stable. 

So when it was working it was by luck due to the place and route positioning.
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

Yes, so it has to be always be careful with the SDC constraint, it is among the biggest challenge to debug when it gives random result. Well, great work to find out the root cause

0 Kudos
Altera_Forum
Honored Contributor II
266 Views

yeah, for some reason one clock that i define in a particular clock domains amongst otthers clock in the same domain, is breaking the timing path. 

Will look furter into that one Today.
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

 

--- Quote Start ---  

yeah, for some reason one clock that i define in a particular clock domains amongst otthers clock in the same domain, is breaking the timing path. 

Will look furter into that one Today. 

--- Quote End ---  

 

 

Anymore on your exciting progress.
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

Yes. 

Got it this time ;-) 

I changed my clock constraint, I removed all gated clock definition because 

using create_generated_clock or create_clock of those internal clock was cutting the timing analysis for those clocks that needs to be clocked balanced. 

Adding them in hte same clock group was not helping. 

 

I now just define the source clock node and quartus is able, by itself, to properly figure out the clock routing and properly balance the gated clocks. 

 

I really think it is the end of story now ;-)
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

I can confirm that the root cause of the problem is found. 

I'm very happy now ;-)
0 Kudos
Altera_Forum
Honored Contributor II
266 Views

rtl compiler from cadence behaves the same

0 Kudos
Altera_Forum
Honored Contributor II
266 Views

Glad to hear that :)

0 Kudos
Reply