78 lines
2.9 KiB
C
78 lines
2.9 KiB
C
|
/*********************************************************************
|
||
|
* The following code is part of the power modelling feature of VTR.
|
||
|
*
|
||
|
* For support:
|
||
|
* http://code.google.com/p/vtr-verilog-to-routing/wiki/Power
|
||
|
*
|
||
|
* or email:
|
||
|
* vtr.power.estimation@gmail.com
|
||
|
*
|
||
|
* If you are using power estimation for your researach please cite:
|
||
|
*
|
||
|
* Jeffrey Goeders and Steven Wilton. VersaPower: Power Estimation
|
||
|
* for Diverse FPGA Architectures. In International Conference on
|
||
|
* Field Programmable Technology, 2012.
|
||
|
*
|
||
|
********************************************************************/
|
||
|
|
||
|
/**
|
||
|
* This file provides functions that calculate the power of low-level
|
||
|
* components (inverters, simple multiplexers, etc)
|
||
|
*/
|
||
|
|
||
|
#ifndef __POWER_LOW_LEVEL_H__
|
||
|
#define __POWER_LOW_LEVEL_H__
|
||
|
|
||
|
/************************* INCLUDES *********************************/
|
||
|
#include "power.h"
|
||
|
|
||
|
/************************* GLOBALS **********************************/
|
||
|
|
||
|
/************************* FUNCTION DECLARATION *********************/
|
||
|
void power_lowlevel_init();
|
||
|
|
||
|
void power_usage_inverter(t_power_usage * power_usage, float in_dens,
|
||
|
float in_prob, float size, float period);
|
||
|
/*void power_calc_inverter_with_input(t_power_usage * power_usage,
|
||
|
float * input_dynamic_power, float in_density, float in_prob,
|
||
|
float size);*/
|
||
|
void power_usage_inverter_irregular(t_power_usage * power_usage,
|
||
|
float * dyn_power_input, float in_density, float in_probability,
|
||
|
float PMOS_size, float NMOS_size, float period);
|
||
|
|
||
|
void power_usage_wire(t_power_usage * power_usage, float capacitance,
|
||
|
float density, float period);
|
||
|
|
||
|
void power_usage_mux_singlelevel_static(t_power_usage * power_usage,
|
||
|
float * out_prob, float * out_dens, float * V_out, int num_inputs,
|
||
|
int selected_idx, float * in_prob, float * in_dens, float * v_in,
|
||
|
float transistor_size, boolean v_out_restored, float period);
|
||
|
|
||
|
void power_usage_MUX2_transmission(t_power_usage * power_usage, float size,
|
||
|
float * in_dens, float * in_prob, float sel_dens, float out_dens,
|
||
|
float period);
|
||
|
|
||
|
void power_usage_mux_singlelevel_dynamic(t_power_usage * power_usage,
|
||
|
int num_inputs, float out_density, float v_out, float * in_prob,
|
||
|
float * in_density, float * v_in, float sel_dens, float sel_prob,
|
||
|
float transistor_size, float period);
|
||
|
|
||
|
void power_usage_level_restorer(t_power_usage * power_usage,
|
||
|
float * dyn_power_in, float in_density, float in_probability,
|
||
|
float period);
|
||
|
|
||
|
float power_calc_pb_switching_from_c_internal(t_pb * pb,
|
||
|
t_pb_graph_node * pb_graph_node);
|
||
|
|
||
|
float power_calc_mux_v_out(int num_inputs, float transistor_size, float v_in,
|
||
|
float in_prob_avg);
|
||
|
|
||
|
/*float power_calc_buffer_sc(int stages, float gain, boolean level_restored,
|
||
|
int input_mux_size);*/
|
||
|
|
||
|
float power_calc_node_switching(float capacitance, float density, float period);
|
||
|
|
||
|
float power_calc_buffer_size_from_Cout(float C_out);
|
||
|
|
||
|
#endif
|