blob: 6a128b45453529e9ffd26844101c9b15c4e64b8b [file] [log] [blame]
/*********************************************************************
* 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,
bool 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, bool 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