5M570 Max V CLPD speed grade 5.
CLK_IN is and in port
div_clk(3 downto 0) is a signal
I have a clock that is derived from a counter to provide divide by 4 functionality, and other prescaler divisions. An input clock CLK_IN is on one of the dedicated clock pins and is synthesized to a global clock in the fitter report. The div_cnt(1) is dividing by 4 and is also used for a clock with a fanout of 129. This is also assigned to a global clock and verified via the fitter after synthesis.
The TimeQuest analyzer is giving me Fmax=17.75MHz for div_cnt(1) and Fmax CLK_IN=238.1MHz. div_cnt(3) has an Fmax=105.3MHz fanout of 6 also a global clock.
If I change all instances of div_cnt(1) in all they processes with CLK_IN TimeQuest gives Fmax=24.23MHz also with a fanout of 129.
I suspect the slow time of the div_cnt(1) signal is due to the large fanout. The same design was faster with the CLK_IN with the same fanout.
- Is there a buffer issue with the way the div_clk(1) is connected to the global clock bus? It is verified via the fitter that it is a global clock.
- The Max V does not appear to have a PLL or ALTCLKCTRL megafunction?
- Attempts to buffer it they synthesizer just get deleted by the synthesizer. I have one remaining global clock, is there a way to assign the same signal more than one global clock, I can balance the fanout manually by using the two clocks for different process?
I'd be happy with any other suggestions. I have plenty of space left on the device.
can you attached your design.qar to have a look? Basically, high fan out should not be a issue as you are using global routing. But, it might pull your whole circuit into one side if your frequencies requirement are high.
We need to look into the timing analyzer in order to further analyze the root cause.
Quartus II is generating the timing analysis. Is there a way to export directly to a .qar file? I have attached the report file form Quartus II. Please advise on how to get a .qar.
I did some floor planning of the logic elements manually and that seemed to help as it was placing some of the fast counters all over the place. I moved them close to the outputs and very near each other, and it helped. I intend to do more of this but tried to get a dual clock running first.
I wanted to just use 2 of the 4 clock lines and balance the usage manually but I can't find the option to force it no not optimize the second identical signal out.
You can archive the project to *.qar by project -> archive project.
Looking into the report files, I cannot see high fan out on the node.
What I suggest is do it on the RTL itself. You can control how much fan out you want to a particular module. This way, you can use different pll if needed for fan out issue.
Good to hear that the preserve attribute works. For timing improvement, what I would suggest is to look into the training material first. As there are a lot of approaches that can improve your Fmax, and one of it is Design space explorer.
My suggestion is that you start learning the coding in here https://www.intel.com/content/www/us/en/programmable/support/training/course/ohdl1110.html
After understanding how the vhdl code, you should be able to understand and write the coding in the way to limit the fan out. You can also cross probe the rtl viewer to look into the design where does the code refer to. This will speed your way on the coding side but you first need to understand how VHDL to be written.
We do not recommend that you edit the netlist or in the rtl viewer. The reason is
1) the project might be use by some other people and it would be really hard to debug when passing down.
2) doing it might cause large computer ram to be used
3) it will not be consistent.
if you have code that had been optimized away, you can right click the vhdl files -> insert template -> vhdl -> synthesis attributes.
Look for the attribute to preserve your code. After preserve your code, run the compilation again and see how the rtl viewer looks like. Most of the time, the code was optimized away due to dangling or connected to gnd.