| /********************************************************************* |
| * 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 |