Goal Voltage scaling on Zynq
Approach Using PMBus protocol to change the value on voltage rails
Benefits Power and energey reduction
Credit  This work has been done under the ENPOWER project (funded by EPSRC) at University of Bristol.

The power monitoring library contains a few functions to determine the value of voltage on a given voltage rail available on the ZC702 Evaluation Board.

The two function to scale the voltage rails VCCINT and VCCPINT are

int set_VCCINT_voltage(float target_voltage);

int set_VCCPINT_voltage(float target_voltage);

in which target_voltage is a value less than 1.0.

Example:

[code language=”c”]
#include "stdio.h"
#include <stdlib.h>
#include "measurement.h"

int main(int argc, char *argv[]) {
float target_value;
if (argc == 2) {
target_value = atof(argv[1]);
if (target_value < 0.7 || target_value > 1) {
printf("target voltage should be less than 1 v and greater than 0.7 v\n");
return -1;
}
} else {
printf("The command had no other arguments.\n");
return -1;
}
printf("target voltage would be = %f v\n", target_value);
set_VCCINT_voltage(target_value);
return 0;
}
[/code]

The monitoring library can be found at here.

 

Please use this citation to refer to this work.

  • Hosseinabady, M & Nunez-Yanez, JL, 2014, ‘Run-time power gating in hybrid ARM-FPGA devices’. in: Conference Digest – 24th International Conference on Field Programmable Logic and Applications, FPL 2014. Institute of Electrical and Electronics Engineers (IEEE)

 

6 thoughts on “Voltage Scaling on Xilinx Zynq”
      1. Thank you for the answer, can I adapt it for a standalone application? which are the changes that I have to do?

    1. Yes, you can modify that for standalone.

      The main file that perform the voltage scaling is power_monitor.c.
      If you look at the file, it is based on the Xilinx code. You can find the equivalent file in the Xilinx Wiki website (maybe at http://www.wiki.xilinx.com/Zynq-7000+AP+SoC+Low+Power+Techniques+part+1+-+Installing+and+Running+the+Power+Demo+Tech+Tip or other parts)

      Just you need to modify and add the function

      float scale_voltage(int iic_fd, unsigned char device_address, unsigned char page, float desired_voltage)

      from my library to that.

    2. Use this reference to get the idea behind the scale_voltage function

      Hosseinabady, M & Nunez-Yanez, JL, 2014, ‘Run-time power gating in hybrid ARM-FPGA devices’. in: Conference Digest – 24th International Conference on Field Programmable Logic and Applications, FPL 2014. Institute of Electrical and Electronics Engineers (IEEE)

Leave a Reply to LinaCancel reply

Discover more from High-Level Synthesis & Embedded Systems

Subscribe now to keep reading and get access to the full archive.

Continue reading