Power Measurement
The SpiNNaker2 STM interface provides comprehensive power measurement capabilities through the PowerMeasurement and PowerResults classes.
Basic Usage
To measure power while running an application on SpiNNaker2:
from spinnaker2_stm.read_power import PowerMeasurement, PowerResults
data_file = "power_record.log"
power_meter = PowerMeasurement(
data_file,
rdout_delay=100,
ser_path="/dev/ttyS2_192_168_2_33",
get_all=True
)
with power_meter:
# run experiment or testcase on SpiNNaker2 chip
Analyzing Results
The measurement data can be analyzed in two ways:
-
From the same script:
-
Or in a new script:
Available Measurements
The PowerResults class provides access to:
- Raw shunt voltages (μV):
power_results.raw_data - Shunt currents (mA):
power_results.shunt_current - Power consumption (mW):
power_results.shunt_power
Each measurement includes data for different power domains:
- PL05: 0.5V power lane
- PL08: 0.8V power lane
- PLL: PLL power (0.8V)
- IO: I/O power (1.8V)
- Q: Q power (1.1V)
Plotting
Plot power consumption over time:
import matplotlib.pyplot as plt
# Plot shunt power over time
power_results.shunt_power.plot(xlabel="time [s]", ylabel="power [mW]")
plt.show()
Energy Calculation
Calculate total energy consumption:
Advanced Configuration
PowerMeasurement Parameters
The PowerMeasurement class accepts the following parameters:
PowerMeasurement(
file_path: str, # Path where measurement data will be saved
rdout_delay: int, # Delay between measurements in milliseconds
ser_path: str = '/dev/ttyACM0', # Path to serial interface
get_all: bool = False # Whether to measure all power rails
)
Shunt Resistor Values
The following shunt resistor values are used for measurements:
R_PL08_SHUNT = 0.008 # Ohm (R570)
R_PL05_SHUNT = 0.03 # Ohm (R569)
R_VDDPLL08_SHUNT = 0.05 # Ohm (R131)
R_VDDIO18_SHUNT = 0.05 # Ohm (R572)
R_VDDQ11_SHUNT = 0.05 # Ohm (R571)
Command Line Interface
The package also provides a command-line interface for power measurements:
python -m spinnaker2_stm.measure_base [OPTIONS]
Options:
--plotv Plot shunt voltage [uV] over time [s]
--ploti Plot shunt current over time [s]
--plotp Plot shunt power over time [s]
--csv Write out data file as CSV
--get_all Write out all shunt voltages (default: only 0V5 & 0V8)
--num_dpoints Number of data points (default: 100)
--rdout_delay Delay between data points [ms] (default: 100)
--runtime Measurement runtime [ms]
--freq_pe PE frequency (default: 150)
--freq_noc NoC frequency (default: 150)
--ser_path Path to serial STM interface (default: /dev/ttyACM0)
Example: Complete Measurement Script
Here's a complete example showing how to perform power measurements and analyze the results:
from spinnaker2_stm.read_power import PowerMeasurement, PowerResults
import matplotlib.pyplot as plt
# Configure measurement
data_file = "power_record.log"
power_meter = PowerMeasurement(
data_file,
rdout_delay=100, # 100ms between measurements
get_all=True # measure all power rails
)
# Perform measurement
with power_meter:
# Your SpiNNaker2 code here
pass
# Analyze results
power_results = power_meter.get_results()
# plot shunt power over time
power_results.shunt_power.plot(xlabel="time [s]", ylabel="power [mW]")
plt.show()
# print total energy
print(f"total energy: {power_results.total_energy():.3f} J")