If you don’t quite understand the title of this post, don’t worry that’s normal! So let me explains. TPMP stands for Thermo-regulated Power Measurement Platform, and PVT (Power, Voltage, Temperature) characterization is a step in semiconductor manufacturing that involves testing wafers with various voltages, clock frequencies, and temperatures – known as Operating Performance Points (OPP) – to see how the properties of the wafer change.
The equipment required to perform this characterization is usually very expensive, and the process takes time. So BayLibre was tasked by one of their customers to automate the process, and find a lower cost solution. That’s how BayLibre TPMP came to life.

The TPMP is comprised of six main hardware components in order to measure NXP i.MX8 processor die-temperature:
- Peltier element
- Meerstetter TEC-1091 Peltier controller
- Fan
- Heatsink temperature sensor
- Chip external temperature sensor
- LCD display to monitor temperature, voltage, and current.
The TEC-1091 chip controls both the Peltier element and the fan to heat or cool the die to the specified temperature. The system supports temperature from 12°C to 115°C, however there’s a delta between the measured and actual die temperature of about 2°C for low-temperature ranges and 8°C for high-temperature ranges due to thermal resistance. That means the system’s chip external sensor must be calibrated before measurement to adjust for this delta in software.
It takes between 5 and 10 minutes to ramp from 25°C (ambient room temperature) to 115°C and stabilize at this temperature. The software is written in Python3, and should be easy to integrate in an automation suite. BayLibre mentions the source code can be retrieved with Git:
1 |
git clone ssh://git@bitbucket.sw.nxp.com/mps/tpmp_ctrl.git |
But I get the following error while running the command:
1 |
ssh: connect to host bitbucket.sw.nxp.com port 22: Connection refused |
The script enable the user to set the die temperature, launch tests and save the results, and includes post-processing tools to analyze test results.
It’s what the output would look like when setting the die temperature to 30:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
2018-03-01 17:49:36,246:example:INFO:connected to 2 {'object temperature': (25.540390014648438, 'degC'), 'target object temperature': (25.0, 'degC'), 'output current': (0.2256602793931961, 'A'), 'loop status': (2, ''), 'output voltage': (0.5687777996063232, 'V'), 'sink temperature': (24.281158447265625, 'degC')} 2018-03-01 17:49:36,343:example:INFO:set object temperature for channel 1 to 30.0 C query for loop stability, loop is not stable, obj temp: 25.541671752929688 query for loop stability, loop is not stable, obj temp: 26.036972045898438 query for loop stability, loop is not stable, obj temp: 29.798294067382812 query for loop stability, loop is not stable, obj temp: 34.04029846191406 query for loop stability, loop is not stable, obj temp: 34.05628967285156 query for loop stability, loop is not stable, obj temp: 31.088790893554688 query for loop stability, loop is not stable, obj temp: 28.541671752929688 query for loop stability, loop is not stable, obj temp: 28.725234985351562 query for loop stability, loop is not stable, obj temp: 30.931259155273438 query for loop stability, loop is not stable, obj temp: 32.34950256347656 query for loop stability, loop is not stable, obj temp: 31.699417114257812 query for loop stability, loop is not stable, obj temp: 30.126022338867188 query for loop stability, loop is not stable, obj temp: 29.331558227539062 exit program with stability status: is stable {'object temperature': (29.967880249023438, 'degC'), 'target object temperature': (30.0, 'degC'), 'output current': (-0.5534029603004456, 'A'), 'loop status': (2, ''), 'output voltage': (-1.6266319751739502, 'V'), 'sink temperature': (24.3184814453125, 'degC')} |
The Peltier element temperature overshoots to 34°C before stabilizing at around 30°C.
The solution is said to cost around ten times less to build than standard equipment, and it’s easier and faster to use, as you can run hundreds of test scripts with different power, temperature and voltage values within two hours. Doing the same thing manually may take a full day.
Eventually support for TPMP may be integrated into KernelCI project. You’ll find more details on BayLibre blog post.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress