1
\$\begingroup\$

I am comparing two Verilog designs:

  • Design (1): A top module that is driven by a clock running at 50MHz, which is the main system clock.

  • Design (2): The same top module as in Design (1) with one difference, i.e., the main system clock runs at 400MHz, but I use a divide-by-8 (/8) clock divider to obtain the same clock frequency as Design (1).

Intuitively, the two designs should have comparable power consumptions. The primary reason behind this intuition is that the two top modules of the two designs are running at the same clock frequency of 50MHz. However, it is expected that Design (2) consumes slightly more power, due to using the overhead clock divider.

However, after synthesizing the two designs using Synopsys Design Compiler, the power reports of the two designs indicate that Design (1) consumes 63.4 micro Watts, whereas Design (2) consumes 500 micro Watts, i.e., Design (2) consumes almost 8X the power consumed by Design (1). Please note that the reported power figures refer to the total power consumption, i.e., the sum of all power categories.

In an effort to understand the reason behind this 8X higher power, I suspected that the /8 clock divider is responsible. However, after synthesizing the divider alone (all by itself) with a master clock frequency of 400MHz, its total power consumption turns out to be 35.4 micro Watts only. The numbers don't seem to add up somehow, no?

Anyway, I hope someone can explain to me the source of this 8X higher power, please? Thanks in advance.

PS: I guess the question does not need my Verilog sources and synthesis scripts, right? Regardless, please let me know if these are needed, and I will update the question with more details.

\$\endgroup\$

5 Answers 5

3
\$\begingroup\$

I have seen that some synthesizers are intelligent enough to optimize logic expressions.

If the source code for example contains:

(A or B) and (A or C)

... they will actually produce the following logic on the FPGA:

A or (B and C)

If your synthesizer did so it may happen that not only the /8 divider will "see" the 400 MHz signal.


A hypothetical example:

B might be a 400 MHz input signal and C might be another signal which behaves in a way that the expression B and C might result in a 50 MHz signal. The duty cycle of B and C would not be 50% in this case but the duty cycle is not that important for the power consumption of CMOS circuits.

If you have the following code (here pseudo-code, not Verilog):

Z = B and C
Y1 = X1 or Z
Y2 = X2 or Z
...
Y100 = X100 or Z

... you might think that only one logic cell receives a 400 MHz signal: The one that generates the signal Z.

However the optimizer might optimize the logic the following way:

Y1 = X1 or (B and C)
Y2 = X2 or (B and C)
...
Y100 = X100 or (B and C)

... which means that all logic cells are driven with 400 MHz.

For many FPGA types the power consumption of a cell mainly depends on the fastest input signal of that cell while the other input signals have less impact on the power consumption.

Please also note that some FPGAs have "global clock lines" which are inputs to all logic cells used (maybe even if the signal is unused). Feeding a high-frequency signal into such a line would be a bad idea.

\$\endgroup\$
3
  • \$\begingroup\$ Sorry, but I couldn't see how some logic optimizations may lead to increase in power consumption. Is it possible to give an example? \$\endgroup\$ Commented Jul 9, 2017 at 19:45
  • \$\begingroup\$ @user84204884834329 I added an example to the answer. \$\endgroup\$ Commented Jul 9, 2017 at 20:06
  • \$\begingroup\$ +1 for clarification; however, I will need more time to digest your example and verify that it is a correct answer to my question. \$\endgroup\$ Commented Jul 9, 2017 at 22:46
1
\$\begingroup\$

Starting point of your investigation could be Quartus's Tools -> Netlist Viewers -> RTL Viewer, find your 400 MHz signal on the map, and trace where it goes.

\$\endgroup\$
1
\$\begingroup\$

The 50MHz clock should be constrained at the output of the clock divider. Design Compiler does not calculate a clock division itself. It propagates the main clock (400MHz) or stops propagation to the rest of the circuit, but never propagates a 50MHz clock unless the user defines the required constraints.

\$\endgroup\$
2
  • \$\begingroup\$ Hmm, interesting (+1). Two follow up questions please: (1) Is this documented somewhere in DC manual? (2) Is there a way to define the 400MHz as a master clock and the output of the clock divider as a secondary clock? (3) Please show how to constrain the 50MHz clock. \$\endgroup\$ Commented Jul 10, 2017 at 23:23
  • \$\begingroup\$ DC's documents are not public and only distributed to customers, but other tool vendors also support Synopsys Design Constraints (SDC). For example, Xilinx has a document, just search create_clock and create_generated_clock commands in it. \$\endgroup\$
    – user154136
    Commented Jul 10, 2017 at 23:39
0
\$\begingroup\$

Well your power consumption was only increased by about 8x.

You are running a small circuit that runs at 8x the original clock speed, this small circuit uses registers to count up to 8 to divide the clock speed, i am guessing. Registers use more power than logic and you are updating theese Registers at a speed of 500mghz.

That is where all of the energy is going.

\$\endgroup\$
1
  • \$\begingroup\$ (1) I have edited the question and corrected the "10X" to "8X" as suggested. (2) Synthesizing the clock divider by itself results in a power consumption of 35.4 micro Watts. This is much less than the total power of Design (2). Therefore, with all due respect, I doubt that the energy is drawn by the clock divider. \$\endgroup\$ Commented Jul 9, 2017 at 19:39
0
\$\begingroup\$

Power estimation sometimes is not good enough unless we help the Tools to do the correct job.

In your case the PLL output divider must be constrained to tell exactly the clock used by its driven logic. otherwise the tools understand only 400 MHz as main clock. The reality is that the real power on the chip is les because you are feeding a real 50MHz clock. As the high frequency clock divider toggle at high frequency, it is obvious it drains alone a bit more power but the real design doesn't consume an insane amount of power. Constraining the output clock divider should solve the problem:

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_timequest_cookbook.pdf

https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_1/ug903-vivado-using-constraints.pdf

https://www.microsemi.com/document-portal/doc_download/131597-design-constraints-guide

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.