Saturday, January 15, 2011

Details about the Intel Core (2) and voltage signaling

So after the basics, we wanna take a close look at how all the voltage stuff works for the Intel Core (2) mobile CPUs. First, there's enough tools out there to undervolt via software and you want to use that way, whether you add some hardware modfications or not. Look for CrystalCPUid or other tools like that. Don't forget to disable the power control mechanisms in your OS if you want your own tool to do the work.

First off, we wanna know how the voltage crap functions on the hardware level, so we can fuck with it. Thankfully Intel does provide good documentation of their technology and you can get your hands easily on that. They do have a website. You can not just get the pinout of your CPU (mind the difference between socket P and M!) and also a table that and an explanation for the signaling of voltage levels. There's seven pins on the CPU for that which are labeled VID0 to VID 6. With those voltages between 1.5 and lower-than-you-could-possibly-want can be signaled and the scheme behind it is easy. Base voltage is 1.5V and every pin subtracts a certain voltage from that if its level is high. VID 6 equals 0.8V, VID5 equals 0.4V, VID4 equals 0.2V and so on. The resulting table is just binary counting downwards for the pins while the voltages mapped to that are decreasing by 0.8V/2^6 per step. So what you need to do is simply make sure these pins have the right signals running on them for the voltages you want. Of course, there's more to it than just connecting some of them to something else.

Restriction one is that you cannot pull them to ground. This has fried people's CPU in the past. You can only pull them up to Vcc. Second restriction is that you do not know all the possible voltage requests of your CPU, at least without a lot of equipment or maybe inside knowledge of what some very specific registers' data mean. They again differ from CPU to CPU, if only slightly. And there's a lot of voltage transitions happening between the power button and a software starting under windows, likely even between the power button and the first try to execute any easily customizable code. And as a third restriction, you can't easily change your hardwirings for the VID pins. So if you decide to hardwire the pin that lowers the voltage by 0.4V to Vcc, every voltage having this pin on low will be reduced by 0.4V, while all others will not be affected. If you alter the table mapping pin states to voltages, you will see that every second block of voltages that is 0.4V "high" is repeated in the 0.4V range above it. That's simply a logical consequence, as the table was just counting with the pin states and you have eliminated one of these bits. So you also lose half of the voltages you could possibly get. Depending on where those blocks lie you could even have not affected the voltage range you want to alter. And also you might make your CPU getting 0.4V less in some sleep state that has very low voltage anyways. Expect this to cause problems, severe problems!
Restriction four is that you only have a small amount of voltages you can set by software. Lower ones will simply not be accepted.

Your best bet is to wire either the 0.1 or 0.2V pin to VID0 or maybe VID1. This way both pins are connected by a logical OR. Whenever one of them is high, the other one will be too. Look at the table and figure out why this is beneficial besides the fact that you have a fifty-fifty chance of it severely affecting some voltage you do not want.

Ok, we now know how to figure out what happens when we connect some pin to some other pin. If you look at the pinout again, you will see that this is not getting easy. At least some of the pins are facing the outer side of the pin array and none are really far from each other, but they do not lay too conveniently. So grab an old ethernet wire, rip it apart and get some of the fine copper stuff. Don't forget to cut your socket a little to make up for the additional height of the wire. Yes, it does make a difference and you do not want your cooler to put mechanical stress on the die or not sit as flat as possible.

If you are as lucky as I was, your CPU will run on 0.825V instead of something around 1.2V.  How much of a difference that makes is easy to describe. If you just stress the CPU (and the chipset) the fan will stay really quiet instead of running at top speed and power consumption will drop by about 20W. Yes, from the level of a standard voltage CPU to the level of some insanely expensive Low Voltage one - while running at a speed the LV versions aren't even available at. Thereotically, assuming the CPU behaves like a normal resistor, the resulting power consumption should be about 45% of the original one. And this rule of thumb seems to apply well as such.

If you think about doing this yourself, keep in mind it all depends on luck for a big part of the way. Try with software only first and see how far you can get, then decide if you wanna void your warranty and risk that. If you did drill holes into your CPUs ten years ago, though, this is not going to be the question. Yes, drilling holes, as explained here: http://www.cpu-central.com/dualceleron/
And yes, I of course did that back then.

No comments:

Post a Comment