R
rickman
Guest
In considering the nature of power consumption in FPGA devices it
occurred to me to ask what components in the FPGA are responsible for
most of the power. The candidates are clock trees, routing, LUT and
misc logic and finally, FFs.
In CMOS devices the power consumed comes from charging and discharging
capacitance. So I would expect the clock trees with their constant
toggling to be a likely candidate for the most power consumption.
Second on my list is the routing since I would expect the capacitance
to be significant. I expect the LUTs to be next but may be fairly
close to the power consumed in the FFs.
With that in mind, I think the typical way of reducing power by the
use of clock enables on registers which are on the output of logic
block may not be optimal. This is the part that I have not fully
analyzed, but I think it could be significant.
When a register on the output of a logic block is enabled, routing and
logic feeding the register inputs will have dissipated power but after
the clock, routing and logic fed by the output will also dissipate
power regardless whether the next register will be enabled on the next
clock or not! In other words, the routing and logic can dissipate
power just because the inputs to the logic are changing even when that
logic is not needed.
If the registers are placed at the input to a function block the
routing and logic will only dissipate power when the registers are
enabled allowing the register outputs and the logic inputs to change.
Why is this different from output registers? If your design is a
linear pipeline then it is not different. But that is the exception.
With branching and looping of logic flow an output can feed multiple
other logic blocks. If multiple inputs to logic change at different
times this will also increase dissipation. When those other logic
blocks do not need this new data the power used in the routing and
logic is wasted.
I guess the part I'm unclear on is whether this is truly significant
in a typical design. If the branching is not a large part of a design
or if the branching is only in the control logic and not the data
paths I would expect the difference to be small or negligible.
I don't think I am the first person to think of this. Since this is
not a part of vendors recommendations I think it is a pretty good
indicator that it is not a large enough factor to be useful. Has
anyone seen an analysis on this?
Rick
occurred to me to ask what components in the FPGA are responsible for
most of the power. The candidates are clock trees, routing, LUT and
misc logic and finally, FFs.
In CMOS devices the power consumed comes from charging and discharging
capacitance. So I would expect the clock trees with their constant
toggling to be a likely candidate for the most power consumption.
Second on my list is the routing since I would expect the capacitance
to be significant. I expect the LUTs to be next but may be fairly
close to the power consumed in the FFs.
With that in mind, I think the typical way of reducing power by the
use of clock enables on registers which are on the output of logic
block may not be optimal. This is the part that I have not fully
analyzed, but I think it could be significant.
When a register on the output of a logic block is enabled, routing and
logic feeding the register inputs will have dissipated power but after
the clock, routing and logic fed by the output will also dissipate
power regardless whether the next register will be enabled on the next
clock or not! In other words, the routing and logic can dissipate
power just because the inputs to the logic are changing even when that
logic is not needed.
If the registers are placed at the input to a function block the
routing and logic will only dissipate power when the registers are
enabled allowing the register outputs and the logic inputs to change.
Why is this different from output registers? If your design is a
linear pipeline then it is not different. But that is the exception.
With branching and looping of logic flow an output can feed multiple
other logic blocks. If multiple inputs to logic change at different
times this will also increase dissipation. When those other logic
blocks do not need this new data the power used in the routing and
logic is wasted.
I guess the part I'm unclear on is whether this is truly significant
in a typical design. If the branching is not a large part of a design
or if the branching is only in the control logic and not the data
paths I would expect the difference to be small or negligible.
I don't think I am the first person to think of this. Since this is
not a part of vendors recommendations I think it is a pretty good
indicator that it is not a large enough factor to be useful. Has
anyone seen an analysis on this?
Rick