Added some power functions.

This commit is contained in:
Hunter Nichols
2018-02-20 18:22:23 -08:00
parent 8ea384a761
commit 179a27b0e3
14 changed files with 12835 additions and 8 deletions
+2 -1
View File
@@ -1232,6 +1232,7 @@ class bank(design.design):
def analytical_power(self, slew, load):
""" return analytical power of the bank. Basic skeleton code"""
msf_addr_power = self.msf_address.analytical_power(slew, self.decoder.input_load())
msf_data_in_power = self.msf_data_in.analytical_power(slew, self.decoder.input_load())
decoder_power = self.decoder.analytical_power(slew, load)
@@ -1244,6 +1245,6 @@ class bank(design.design):
data_t_DATA_power = self.tri_gate_array.analytical_power(slew, load)
total_power = msf_addr_power + decoder_power + word_driver_power \
total_power = msf_addr_power + msf_data_in_power + decoder_power + word_driver_power \
+ bitcell_array_power + bl_t_data_out_power + data_t_DATA_power
return total_power
+5 -2
View File
@@ -37,5 +37,8 @@ class bitcell(design.design):
def analytical_power(self, slew, load=0, swing = 0.5):
#Power of the bitcell. Mostly known for leakage, but dynamic can also be factored in.
#Just skeleton code for now which returns a magic number.
return 5
#Only consider leakage power for now. Value defined in tech file rather than calculated.
from tech import spice
leakage = spice["bitcell_leakage"]
total_power = leakage
return total_power
+2 -2
View File
@@ -196,8 +196,8 @@ class bitcell_array(design.design):
#Calculate the bitcell power which can include leakage as well as bitline dynamic
cell_power = self.cell.analytical_power(slew, cell_load, swing = bl_swing)
#we do not consider the delay over the wire for now
return cell_power
#calculate power for entire array based off a single cell
return cell_power * self.column_size * self.row_size
def gen_wl_wire(self):
wl_wire = self.generate_rc_net(int(self.column_size), self.width, drc["minwidth_metal1"])
+5
View File
@@ -688,3 +688,8 @@ class control_logic(design.design):
width=pin.width())
def analytical_power(self, slew, load):
#This has yet to be fully determined.
msf_power = self.msf_control.analytical_power(slew, load)
#currently, only return flop array power
return msf_power
+3 -1
View File
@@ -28,5 +28,7 @@ class ms_flop(design.design):
return result
def analytical_power(self, slew, load = 0.0):
return 4
#Value taken from tech file.
from tech import spice
return spice["msflop_power"]
+1 -1
View File
@@ -136,4 +136,4 @@ class ms_flop_array(design.design):
return self.ms.analytical_delay(slew=slew, load=load)
def analytical_power(self, slew, load):
return self.ms.analytical_power(slew=slew, load=load)
return self.columns * self.ms.analytical_power(slew=slew, load=load)