Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17267 Discussions

Timing Not Being Constrained?

Altera_Forum
Honored Contributor II
2,734 Views

My problem is that my design passes timing closure no matter how I constrain it (well almost). In particular, if I constrain the output timing like this; 

 

create_clock -name {real_clock} -period 10.0 [get_ports {real_clock}] 

 

create_clock -period 10.0 -name virtual_clock 

 

set_output_delay -clock virtual_clock -max 5.0 [get_ports}{my_output_pin}] 

 

Where my_output_pin is driven by synchronous logic clocked by real_clock. What I'm finding is that the design passes timing closure no matter what value I choose for the output delay, 5.0 ns or 15.0ns. 

 

I know that Quartus is "seeing" my sdc file. If I remove my clock grouping commands I get all kinds of violations. It seems like I'm missing something simple.
0 Kudos
9 Replies
Altera_Forum
Honored Contributor II
830 Views

You didn't post your clock grouping commands. And your problem may very well relate to that... 

 

Ie, if you do something like  

set_clock_groups -group {real_clock .... } -group {virtual_clock ...} 

 

then the path from real_clock to virtual_clock is set as a false path. That is, it's not analyzed.
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

OK, I tried to post as little as possible since I didn't want it to get too complicated. The clock grouping goes; 

 

set_clock_groups -asynchronous -group {real_clock} 

set_clock_groups -asynchronous -group {real_clocka} 

set_clock_groups -asynchronous -group {real_clockb} 

 

There's no reference to the virtual clock in my grouping. What you're saying is perhaps that's the problem?
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

 

--- Quote Start ---  

OK, I tried to post as little as possible since I didn't want it to get too complicated. The clock grouping goes; 

 

set_clock_groups -asynchronous -group {real_clock} 

set_clock_groups -asynchronous -group {real_clocka} 

set_clock_groups -asynchronous -group {real_clockb} 

 

There's no reference to the virtual clock in my grouping. What you're saying is perhaps that's the problem? 

--- Quote End ---  

 

 

Peruse the timing report and it will tell you what clock is being used to compute the clock to output delay. That is the clock you need to use for your constraint as well. 

 

Kevin Jennings
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

 

--- Quote Start ---  

OK, I tried to post as little as possible since I didn't want it to get too complicated. The clock grouping goes; 

 

set_clock_groups -asynchronous -group {real_clock} 

set_clock_groups -asynchronous -group {real_clocka} 

set_clock_groups -asynchronous -group {real_clockb} 

 

There's no reference to the virtual clock in my grouping. What you're saying is perhaps that's the problem? 

--- Quote End ---  

 

 

Yes, that is the problem. 

The first command sets all paths between real_clock and all other clocks as a false path. 

The second and third to the same for real_clocka and real_clockb. 

 

You probably need something like this 

set_clock_groups -asynchronous -group {real_clock virtual_clock} -group {real_clocka} -groups {real_clockb}
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

That did the trick, thank you.

0 Kudos
Altera_Forum
Honored Contributor II
830 Views

Good. 

Be very carefull when using set_clock_groups and set_false_path commands. 

You're telling the tool not to care about some paths; make sure you're not cutting more paths than you should.
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

I'm learning.

0 Kudos
Altera_Forum
Honored Contributor II
830 Views

set_clock_groups is pretty safe as long as you don't use the special syntax of having only one -group. That tells it to cut the clocks in that group from all other clocks in the design without explicitly naming them, so it's an implicit cut. You should merge them: 

set_clock_groups -asynchronous  

-group {  

real_clk  

}  

-group {  

real_clkb  

}  

-group {  

real_clkb  

This only cuts between clocks in different groups of the same command, but will not cut timing to any clocks not listed.
0 Kudos
Altera_Forum
Honored Contributor II
830 Views

Thanks. I actually followed your (wonderful) document on timing constraints fairly closely, but didn't fully understand the implications of the syntax of the set_clock_groups command as you prescribed it. Your explanation in this post makes it clear.

0 Kudos
Reply